浏览代码

workflow: add light theme for sfc playground (#8667)

白雾三语 2 年之前
父节点
当前提交
3127c4113e

+ 7 - 7
packages/sfc-playground/index.html

@@ -8,14 +8,14 @@
     <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>

+ 1 - 1
packages/sfc-playground/package.json

@@ -12,7 +12,7 @@
     "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:*"

+ 12 - 1
packages/sfc-playground/src/App.vue

@@ -2,7 +2,7 @@
 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`)
@@ -72,6 +72,15 @@ function toggleSSR() {
   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>
@@ -79,10 +88,12 @@ function toggleSSR() {
     :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

+ 14 - 12
packages/sfc-playground/src/Header.vue

@@ -1,8 +1,8 @@
 <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'
@@ -51,14 +51,16 @@ async function copyLink(e: MouseEvent) {
   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', () => {
@@ -145,10 +147,10 @@ async function fetchVersions(): Promise<string[]> {
       >
         <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>

+ 4 - 4
pnpm-lock.yaml

@@ -333,8 +333,8 @@ importers:
   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
@@ -1513,8 +1513,8 @@ packages:
     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: