Skip to content

Commit 3127c41

Browse files
authored
workflow: add light theme for sfc playground (#8667)
1 parent 9f8e98a commit 3127c41

File tree

5 files changed

+38
-25
lines changed

5 files changed

+38
-25
lines changed

packages/sfc-playground/index.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
<title>Vue SFC Playground</title>
99
<script>
1010
// process shim for old versions of @vue/compiler-sfc dependency
11-
// window.process = { env: {} }
12-
// const savedPreferDark = localStorage.getItem('vue-sfc-playground-prefer-dark')
13-
// if (
14-
// savedPreferDark === 'true' ||
15-
// (!savedPreferDark && window.matchMedia('(prefers-color-scheme: dark)').matches)
16-
// ) {
11+
window.process = { env: {} }
12+
const savedPreferDark = localStorage.getItem('vue-sfc-playground-prefer-dark')
13+
if (
14+
savedPreferDark === 'true' ||
15+
(!savedPreferDark && window.matchMedia('(prefers-color-scheme: dark)').matches)
16+
) {
1717
document.documentElement.classList.add('dark')
18-
// }
18+
}
1919
</script>
2020
<script type="module" src="/src/main.ts"></script>
2121
</head>

packages/sfc-playground/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"vite": "^4.3.9"
1313
},
1414
"dependencies": {
15-
"@vue/repl": "^2.3.0",
15+
"@vue/repl": "^2.4.0",
1616
"file-saver": "^2.0.5",
1717
"jszip": "^3.6.0",
1818
"vue": "workspace:*"

packages/sfc-playground/src/App.vue

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import Header from './Header.vue'
33
import { Repl, ReplStore, SFCOptions } from '@vue/repl'
44
import Monaco from '@vue/repl/monaco-editor'
5-
import { ref, watchEffect } from 'vue'
5+
import { ref, watchEffect, onMounted } from 'vue'
66
77
const setVH = () => {
88
document.documentElement.style.setProperty('--vh', window.innerHeight + `px`)
@@ -72,17 +72,28 @@ function toggleSSR() {
7272
useSSRMode.value = !useSSRMode.value
7373
store.setFiles(store.getFiles())
7474
}
75+
76+
const theme = ref('dark')
77+
function toggleTheme(isDark: boolean) {
78+
theme.value = isDark ? 'dark' : 'light'
79+
}
80+
onMounted(() => {
81+
const cls = document.documentElement.classList
82+
toggleTheme(cls.contains('dark'))
83+
})
7584
</script>
7685

7786
<template>
7887
<Header
7988
:store="store"
8089
:dev="useDevMode"
8190
:ssr="useSSRMode"
91+
@toggle-theme="toggleTheme"
8292
@toggle-dev="toggleDevMode"
8393
@toggle-ssr="toggleSSR"
8494
/>
8595
<Repl
96+
:theme="theme"
8697
:editor="Monaco"
8798
@keydown.ctrl.s.prevent
8899
@keydown.meta.s.prevent

packages/sfc-playground/src/Header.vue

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<script setup lang="ts">
22
import { downloadProject } from './download/download'
33
import { ref, onMounted } from 'vue'
4-
// import Sun from './icons/Sun.vue'
5-
// import Moon from './icons/Moon.vue'
4+
import Sun from './icons/Sun.vue'
5+
import Moon from './icons/Moon.vue'
66
import Share from './icons/Share.vue'
77
import Download from './icons/Download.vue'
88
import GitHub from './icons/GitHub.vue'
@@ -51,14 +51,16 @@ async function copyLink(e: MouseEvent) {
5151
alert('Sharable URL has been copied to clipboard.')
5252
}
5353
54-
// function toggleDark() {
55-
// const cls = document.documentElement.classList
56-
// cls.toggle('dark')
57-
// localStorage.setItem(
58-
// 'vue-sfc-playground-prefer-dark',
59-
// String(cls.contains('dark'))
60-
// )
61-
// }
54+
const emit = defineEmits(['toggle-theme', 'toggle-ssr','toggle-dev'])
55+
function toggleDark() {
56+
const cls = document.documentElement.classList
57+
cls.toggle('dark')
58+
localStorage.setItem(
59+
'vue-sfc-playground-prefer-dark',
60+
String(cls.contains('dark'))
61+
)
62+
emit('toggle-theme', cls.contains('dark'))
63+
}
6264
6365
onMounted(async () => {
6466
window.addEventListener('click', () => {
@@ -145,10 +147,10 @@ async function fetchVersions(): Promise<string[]> {
145147
>
146148
<span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span>
147149
</button>
148-
<!-- <button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
150+
<button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
149151
<Sun class="light" />
150152
<Moon class="dark" />
151-
</button> -->
153+
</button>
152154
<button title="Copy sharable URL" class="share" @click="copyLink">
153155
<Share />
154156
</button>

pnpm-lock.yaml

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)