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

This commit is contained in:
白雾三语 2023-06-28 13:19:32 +08:00 committed by GitHub
parent 9f8e98af89
commit 3127c4113e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 38 additions and 25 deletions

View File

@ -8,14 +8,14 @@
<title>Vue SFC Playground</title> <title>Vue SFC Playground</title>
<script> <script>
// process shim for old versions of @vue/compiler-sfc dependency // process shim for old versions of @vue/compiler-sfc dependency
// window.process = { env: {} } window.process = { env: {} }
// const savedPreferDark = localStorage.getItem('vue-sfc-playground-prefer-dark') const savedPreferDark = localStorage.getItem('vue-sfc-playground-prefer-dark')
// if ( if (
// savedPreferDark === 'true' || savedPreferDark === 'true' ||
// (!savedPreferDark && window.matchMedia('(prefers-color-scheme: dark)').matches) (!savedPreferDark && window.matchMedia('(prefers-color-scheme: dark)').matches)
// ) { ) {
document.documentElement.classList.add('dark') document.documentElement.classList.add('dark')
// } }
</script> </script>
<script type="module" src="/src/main.ts"></script> <script type="module" src="/src/main.ts"></script>
</head> </head>

View File

@ -12,7 +12,7 @@
"vite": "^4.3.9" "vite": "^4.3.9"
}, },
"dependencies": { "dependencies": {
"@vue/repl": "^2.3.0", "@vue/repl": "^2.4.0",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"jszip": "^3.6.0", "jszip": "^3.6.0",
"vue": "workspace:*" "vue": "workspace:*"

View File

@ -2,7 +2,7 @@
import Header from './Header.vue' import Header from './Header.vue'
import { Repl, ReplStore, SFCOptions } from '@vue/repl' import { Repl, ReplStore, SFCOptions } from '@vue/repl'
import Monaco from '@vue/repl/monaco-editor' import Monaco from '@vue/repl/monaco-editor'
import { ref, watchEffect } from 'vue' import { ref, watchEffect, onMounted } from 'vue'
const setVH = () => { const setVH = () => {
document.documentElement.style.setProperty('--vh', window.innerHeight + `px`) document.documentElement.style.setProperty('--vh', window.innerHeight + `px`)
@ -72,6 +72,15 @@ function toggleSSR() {
useSSRMode.value = !useSSRMode.value useSSRMode.value = !useSSRMode.value
store.setFiles(store.getFiles()) 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> </script>
<template> <template>
@ -79,10 +88,12 @@ function toggleSSR() {
:store="store" :store="store"
:dev="useDevMode" :dev="useDevMode"
:ssr="useSSRMode" :ssr="useSSRMode"
@toggle-theme="toggleTheme"
@toggle-dev="toggleDevMode" @toggle-dev="toggleDevMode"
@toggle-ssr="toggleSSR" @toggle-ssr="toggleSSR"
/> />
<Repl <Repl
:theme="theme"
:editor="Monaco" :editor="Monaco"
@keydown.ctrl.s.prevent @keydown.ctrl.s.prevent
@keydown.meta.s.prevent @keydown.meta.s.prevent

View File

@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { downloadProject } from './download/download' import { downloadProject } from './download/download'
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
// import Sun from './icons/Sun.vue' import Sun from './icons/Sun.vue'
// import Moon from './icons/Moon.vue' import Moon from './icons/Moon.vue'
import Share from './icons/Share.vue' import Share from './icons/Share.vue'
import Download from './icons/Download.vue' import Download from './icons/Download.vue'
import GitHub from './icons/GitHub.vue' import GitHub from './icons/GitHub.vue'
@ -51,14 +51,16 @@ async function copyLink(e: MouseEvent) {
alert('Sharable URL has been copied to clipboard.') alert('Sharable URL has been copied to clipboard.')
} }
// function toggleDark() { const emit = defineEmits(['toggle-theme', 'toggle-ssr','toggle-dev'])
// const cls = document.documentElement.classList function toggleDark() {
// cls.toggle('dark') const cls = document.documentElement.classList
// localStorage.setItem( cls.toggle('dark')
// 'vue-sfc-playground-prefer-dark', localStorage.setItem(
// String(cls.contains('dark')) 'vue-sfc-playground-prefer-dark',
// ) String(cls.contains('dark'))
// } )
emit('toggle-theme', cls.contains('dark'))
}
onMounted(async () => { onMounted(async () => {
window.addEventListener('click', () => { window.addEventListener('click', () => {
@ -145,10 +147,10 @@ async function fetchVersions(): Promise<string[]> {
> >
<span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span> <span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span>
</button> </button>
<!-- <button title="Toggle dark mode" class="toggle-dark" @click="toggleDark"> <button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
<Sun class="light" /> <Sun class="light" />
<Moon class="dark" /> <Moon class="dark" />
</button> --> </button>
<button title="Copy sharable URL" class="share" @click="copyLink"> <button title="Copy sharable URL" class="share" @click="copyLink">
<Share /> <Share />
</button> </button>

View File

@ -333,8 +333,8 @@ importers:
packages/sfc-playground: packages/sfc-playground:
dependencies: dependencies:
'@vue/repl': '@vue/repl':
specifier: ^2.3.0 specifier: ^2.4.0
version: 2.3.0 version: 2.4.0
file-saver: file-saver:
specifier: ^2.0.5 specifier: ^2.0.5
version: 2.0.5 version: 2.0.5
@ -1513,8 +1513,8 @@ packages:
engines: {node: '>= 0.12.0'} engines: {node: '>= 0.12.0'}
dev: true dev: true
/@vue/repl@2.3.0: /@vue/repl@2.4.0:
resolution: {integrity: sha512-b5unP309uGABwgvfahFEGoDe7AzuvEioO7/AwuebywwA0oKSzOW1bR2sJq4fj0wHCL6/bthremJkrtNTCKFJbA==} resolution: {integrity: sha512-vXXEysYTCZdJo3kECwKDTxd6GI3F9RzJ3dkslY6fpdGn7q+aCizLqcWiEnWaeBjbqOh31rMsPPUxhhC3jhaiXQ==}
dev: false dev: false
/@zeit/schemas@2.6.0: /@zeit/schemas@2.6.0: