mirror of https://github.com/vuejs/core.git
workflow: add light theme for sfc playground (#8667)
This commit is contained in:
parent
9f8e98af89
commit
3127c4113e
|
@ -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>
|
||||||
|
|
|
@ -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:*"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue