<title>Vue SFC Playground</title>
<script>
// process shim for old versions of @vue/compiler-sfc dependency
- // window.process = { env: {} }
- // const savedPreferDark = localStorage.getItem('vue-sfc-playground-prefer-dark')
- // if (
- // savedPreferDark === 'true' ||
- // (!savedPreferDark && window.matchMedia('(prefers-color-scheme: dark)').matches)
- // ) {
+ window.process = { env: {} }
+ const savedPreferDark = localStorage.getItem('vue-sfc-playground-prefer-dark')
+ if (
+ savedPreferDark === 'true' ||
+ (!savedPreferDark && window.matchMedia('(prefers-color-scheme: dark)').matches)
+ ) {
document.documentElement.classList.add('dark')
- // }
+ }
</script>
<script type="module" src="/src/main.ts"></script>
</head>
"vite": "^4.3.9"
},
"dependencies": {
- "@vue/repl": "^2.3.0",
+ "@vue/repl": "^2.4.0",
"file-saver": "^2.0.5",
"jszip": "^3.6.0",
"vue": "workspace:*"
import Header from './Header.vue'
import { Repl, ReplStore, SFCOptions } from '@vue/repl'
import Monaco from '@vue/repl/monaco-editor'
-import { ref, watchEffect } from 'vue'
+import { ref, watchEffect, onMounted } from 'vue'
const setVH = () => {
document.documentElement.style.setProperty('--vh', window.innerHeight + `px`)
useSSRMode.value = !useSSRMode.value
store.setFiles(store.getFiles())
}
+
+const theme = ref('dark')
+function toggleTheme(isDark: boolean) {
+ theme.value = isDark ? 'dark' : 'light'
+}
+onMounted(() => {
+ const cls = document.documentElement.classList
+ toggleTheme(cls.contains('dark'))
+})
</script>
<template>
:store="store"
:dev="useDevMode"
:ssr="useSSRMode"
+ @toggle-theme="toggleTheme"
@toggle-dev="toggleDevMode"
@toggle-ssr="toggleSSR"
/>
<Repl
+ :theme="theme"
:editor="Monaco"
@keydown.ctrl.s.prevent
@keydown.meta.s.prevent
<script setup lang="ts">
import { downloadProject } from './download/download'
import { ref, onMounted } from 'vue'
-// import Sun from './icons/Sun.vue'
-// import Moon from './icons/Moon.vue'
+import Sun from './icons/Sun.vue'
+import Moon from './icons/Moon.vue'
import Share from './icons/Share.vue'
import Download from './icons/Download.vue'
import GitHub from './icons/GitHub.vue'
alert('Sharable URL has been copied to clipboard.')
}
-// function toggleDark() {
-// const cls = document.documentElement.classList
-// cls.toggle('dark')
-// localStorage.setItem(
-// 'vue-sfc-playground-prefer-dark',
-// String(cls.contains('dark'))
-// )
-// }
+const emit = defineEmits(['toggle-theme', 'toggle-ssr','toggle-dev'])
+ function toggleDark() {
+ const cls = document.documentElement.classList
+ cls.toggle('dark')
+ localStorage.setItem(
+ 'vue-sfc-playground-prefer-dark',
+ String(cls.contains('dark'))
+ )
+ emit('toggle-theme', cls.contains('dark'))
+ }
onMounted(async () => {
window.addEventListener('click', () => {
>
<span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span>
</button>
- <!-- <button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
+ <button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
<Sun class="light" />
<Moon class="dark" />
- </button> -->
+ </button>
<button title="Copy sharable URL" class="share" @click="copyLink">
<Share />
</button>
packages/sfc-playground:
dependencies:
'@vue/repl':
- specifier: ^2.3.0
- version: 2.3.0
+ specifier: ^2.4.0
+ version: 2.4.0
file-saver:
specifier: ^2.0.5
version: 2.0.5
engines: {node: '>= 0.12.0'}
dev: true
- /@vue/repl@2.3.0:
- resolution: {integrity: sha512-b5unP309uGABwgvfahFEGoDe7AzuvEioO7/AwuebywwA0oKSzOW1bR2sJq4fj0wHCL6/bthremJkrtNTCKFJbA==}
+ /@vue/repl@2.4.0:
+ resolution: {integrity: sha512-vXXEysYTCZdJo3kECwKDTxd6GI3F9RzJ3dkslY6fpdGn7q+aCizLqcWiEnWaeBjbqOh31rMsPPUxhhC3jhaiXQ==}
dev: false
/@zeit/schemas@2.6.0: