"vite": "catalog:"
},
"dependencies": {
- "@vue/repl": "^4.3.1",
+ "@vue/repl": "^4.4.0",
"file-saver": "^2.0.5",
"jszip": "^3.10.1",
"vue": "workspace:*"
const useSSRMode = ref(false)
+const AUTO_SAVE_STORAGE_KEY = 'vue-sfc-playground-auto-save'
+const initAutoSave: boolean = JSON.parse(
+ localStorage.getItem(AUTO_SAVE_STORAGE_KEY) ?? 'true',
+)
+const autoSave = ref(initAutoSave)
+
const { productionMode, vueVersion, importMap } = useVueImportMap({
runtimeDev: import.meta.env.PROD
? `${location.origin}/vue.runtime.esm-browser.js`
useSSRMode.value = !useSSRMode.value
}
+function toggleAutoSave() {
+ autoSave.value = !autoSave.value
+ localStorage.setItem(AUTO_SAVE_STORAGE_KEY, String(autoSave.value))
+}
+
function reloadPage() {
replRef.value?.reload()
}
:store="store"
:prod="productionMode"
:ssr="useSSRMode"
+ :autoSave="autoSave"
@toggle-theme="toggleTheme"
@toggle-prod="toggleProdMode"
@toggle-ssr="toggleSSR"
+ @toggle-autosave="toggleAutoSave"
@reload-page="reloadPage"
/>
<Repl
@keydown.ctrl.s.prevent
@keydown.meta.s.prevent
:ssr="useSSRMode"
+ :autoSave="autoSave"
:store="store"
:showCompileOutput="true"
:autoResize="true"
store: ReplStore
prod: boolean
ssr: boolean
+ autoSave: boolean
}>()
const emit = defineEmits([
'toggle-theme',
'toggle-ssr',
'toggle-prod',
+ 'toggle-autosave',
'reload-page',
])
>
<span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span>
</button>
+ <button
+ title="Toggle editor auto save mode"
+ class="toggle-autosave"
+ :class="{ enabled: autoSave }"
+ @click="$emit('toggle-autosave')"
+ >
+ <span>{{ autoSave ? 'AutoSave ON' : 'AutoSave OFF' }}</span>
+ </button>
<button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
<Sun class="light" />
<Moon class="dark" />
}
.toggle-prod span,
-.toggle-ssr span {
+.toggle-ssr span,
+.toggle-autosave span {
font-size: 12px;
border-radius: 4px;
padding: 4px 6px;
background: var(--purple);
}
-.toggle-ssr span {
+.toggle-ssr span,
+.toggle-autosave span {
background-color: var(--btn-bg);
}
-.toggle-ssr.enabled span {
+.toggle-ssr.enabled span,
+.toggle-autosave.enabled span {
color: #fff;
background-color: var(--green);
}
packages-private/sfc-playground:
dependencies:
'@vue/repl':
- specifier: ^4.3.1
- version: 4.3.1
+ specifier: ^4.4.0
+ version: 4.4.0
file-saver:
specifier: ^2.0.5
version: 2.0.5
resolution: {integrity: sha512-oTyUE+QHIzLw2PpV14GD/c7EohDyP64xCniWTcqcEmTd699eFqTIwOmtDYjcO1j3QgdXoJEoWv1/cCdLrRoOfg==}
engines: {node: '>= 0.12.0'}
- '@vue/repl@4.3.1':
- resolution: {integrity: sha512-yzUuLhR+MqOGBDES+xbnm27SfPIEv7XKwhFWWpQhL7HUbXj77GVu+x50Q56JhCWWKTUJzk9MOvAn7bSgdvB5og==}
+ '@vue/repl@4.4.0':
+ resolution: {integrity: sha512-caOSbxYOIY7AOYYqc0SJe8BKaFhwmLy3v3wpxWyzumCMH3W2rk6/j0MjZ+9D8dK0zefhJ2dWl+oetg6HmDQqxg==}
'@zeit/schemas@2.36.0':
resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==}
'@vue/consolidate@1.0.0': {}
- '@vue/repl@4.3.1': {}
+ '@vue/repl@4.4.0': {}
'@zeit/schemas@2.36.0': {}