Skip to content

Commit

Permalink
fix dark and light mode in playground editor
Browse files Browse the repository at this point in the history
  • Loading branch information
rluvaton committed Apr 23, 2024
1 parent ff56012 commit 4766bce
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 22 deletions.
6 changes: 4 additions & 2 deletions docs/.vitepress/theme/Playground.vue
Expand Up @@ -6,6 +6,7 @@ import { computed, onMounted, ref, shallowRef, watch } from 'vue';
import { useBreakpoints } from './breakpoint';
import { useDialect } from './dialect';
import { useDarkMode } from './dark-mode';
const formatter = {
cockroachdb: 'postgresql',
Expand All @@ -20,6 +21,7 @@ const formatter = {
};
const { dialect } = useDialect();
const { isDark } = useDarkMode();
const { type } = useBreakpoints();
const isVertical = computed(() => ['xs', 'sm'].includes(type.value));
Expand Down Expand Up @@ -125,7 +127,7 @@ watch([code, dialect], () => {
<vue-monaco-editor
id="editor"
language="typescript"
theme="vs-dark"
:theme="isDark ? 'vs-dark' : 'vs-light'"
v-model:value="code"
:options="editorOptions"
:saveViewState="false"
Expand All @@ -135,7 +137,7 @@ watch([code, dialect], () => {
<vue-monaco-editor
id="output"
language="sql"
theme="vs-dark"
:theme="isDark ? 'vs-dark' : 'vs-light'"
v-model:value="sql"
:options="outputEditorOptions"
:saveViewState="false"
Expand Down
27 changes: 7 additions & 20 deletions docs/.vitepress/theme/ToggleDark.vue
@@ -1,27 +1,14 @@
<script setup>
import { onMounted, ref, computed, watch } from 'vue';
import { onMounted, watch } from 'vue';
import { useDarkMode } from './dark-mode';
const { isDark, toggleDark } = useDarkMode();
const prefersDark = ref(false);
const setting = ref('auto');
const isDark = computed(
() =>
setting.value === 'dark' || (prefersDark.value && setting.value !== 'light')
);
const toggleDark = () => {
setting.value = setting.value === 'dark' ? 'light' : 'dark';
localStorage.setItem('color-scheme', setting.value);
};
watch(isDark, () => {
function onDarkChange() {
document.documentElement.classList.toggle('dark', isDark.value);
});
}
onMounted(() => {
prefersDark.value =
window.matchMedia &&
window.matchMedia('(prefers-color-scheme: dark)').matches;
setting.value = localStorage.getItem('color-scheme') || 'auto';
document.documentElement.classList.toggle('dark', isDark.value);
});
watch(isDark, onDarkChange);
onMounted(onDarkChange);
</script>

<template>
Expand Down
27 changes: 27 additions & 0 deletions docs/.vitepress/theme/dark-mode.js
@@ -0,0 +1,27 @@
import { ref, computed, inject } from 'vue';

export function createDarkMode(app) {
const prefersDark = ref(false);
const setting = ref('auto');

const isDark = computed(
() =>
setting.value === 'dark' ||
(prefersDark.value && setting.value !== 'light')
);
const toggleDark = () => {
setting.value = setting.value === 'dark' ? 'light' : 'dark';
localStorage.setItem('color-scheme', setting.value);
};

prefersDark.value =
window.matchMedia &&
window.matchMedia('(prefers-color-scheme: dark)').matches;
setting.value = localStorage.getItem('color-scheme') || 'auto';

app.provide('is-dark', { isDark, toggleDark });
}

export function useDarkMode() {
return inject('is-dark');
}
2 changes: 2 additions & 0 deletions docs/.vitepress/theme/index.js
Expand Up @@ -5,6 +5,7 @@ import { createDialect } from './dialect';
import SqlOutput from './SqlOutput.vue';
import Playground from './Playground.vue';
import './styles.css';
import { createDarkMode } from './dark-mode';

// @todo: hack, vite.config.ts define option seem not to work
globalThis.process = globalThis.process || {
Expand All @@ -17,6 +18,7 @@ export default {

enhanceApp({ app }) {
createDialect(app);
createDarkMode(app);
app.component('SqlOutput', SqlOutput);
app.component('Playground', Playground);
app.use(VueMonacoEditorPlugin, {
Expand Down

0 comments on commit 4766bce

Please sign in to comment.