Skip to content

Commit d712fd9

Browse files
committed
feat: add dark mode
1 parent 48707a2 commit d712fd9

57 files changed

Lines changed: 1274 additions & 1059 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

assets/editor/EditorAssetPicker.vue

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,100 +8,100 @@
88
aria-labelledby="editor-asset-picker-title"
99
@keydown.esc="$emit('close')"
1010
>
11-
<div class="w-full max-w-5xl overflow-hidden rounded-lg border border-slate-200 bg-white shadow-xl">
12-
<div class="flex items-center justify-between gap-3 border-b border-slate-200 px-4 py-3">
11+
<div class="w-full max-w-5xl overflow-hidden rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 shadow-xl">
12+
<div class="flex items-center justify-between gap-3 border-b border-slate-200 dark:border-slate-700 px-4 py-3">
1313
<div class="min-w-0">
14-
<h3 id="editor-asset-picker-title" class="text-sm font-semibold text-slate-900">
14+
<h3 id="editor-asset-picker-title" class="text-sm font-semibold text-slate-900 dark:text-slate-100">
1515
Choose an existing asset
1616
</h3>
17-
<p class="text-xs text-slate-500">Pick a file to insert it at the cursor position.</p>
17+
<p class="text-xs text-slate-500 dark:text-slate-400">Pick a file to insert it at the cursor position.</p>
1818
</div>
1919

2020
<button
2121
type="button"
22-
class="rounded-lg border border-slate-200 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50"
22+
class="rounded-lg border border-slate-200 dark:border-slate-700 px-3 py-2 text-sm font-medium text-slate-700 dark:text-slate-200 hover:bg-slate-50 dark:hover:bg-slate-700"
2323
@click="$emit('close')"
2424
>
2525
Close
2626
</button>
2727
</div>
2828

29-
<div class="flex flex-col gap-3 border-b border-slate-200 px-4 py-3 sm:flex-row sm:items-center">
29+
<div class="flex flex-col gap-3 border-b border-slate-200 dark:border-slate-700 px-4 py-3 sm:flex-row sm:items-center">
3030
<input
3131
ref="searchInput"
3232
:value="query"
3333
type="search"
34-
class="w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-900 outline-none focus:border-ext-wf1 focus:ring-2 focus:ring-ext-wf2"
34+
class="w-full rounded-lg border border-slate-300 dark:border-slate-600 px-3 py-2 text-sm text-slate-900 dark:text-slate-100 dark:bg-slate-800 outline-none focus:border-ext-wf1 focus:ring-2 focus:ring-ext-wf2"
3535
placeholder="Search by file name"
3636
@input="$emit('update:query', $event.target.value)"
3737
>
3838

3939
<button
4040
type="button"
41-
class="rounded-lg border border-slate-200 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50"
41+
class="rounded-lg border border-slate-200 dark:border-slate-700 px-3 py-2 text-sm font-medium text-slate-700 dark:text-slate-200 hover:bg-slate-50 dark:hover:bg-slate-700"
4242
@click="$emit('refresh')"
4343
>
4444
Refresh
4545
</button>
4646
</div>
4747

4848
<div class="max-h-[60vh] overflow-auto">
49-
<div v-if="loading" class="px-4 py-8 text-sm text-slate-500">
49+
<div v-if="loading" class="px-4 py-8 text-sm text-slate-500 dark:text-slate-400">
5050
Loading assets...
5151
</div>
5252

53-
<div v-else-if="error" class="px-4 py-8 text-sm text-red-600">
53+
<div v-else-if="error" class="px-4 py-8 text-sm text-red-600 dark:text-red-400">
5454
{{ error }}
5555
</div>
5656

5757
<table v-else class="w-full table-fixed border-separate border-spacing-0">
58-
<thead class="sticky top-0 bg-slate-50">
59-
<tr class="text-left text-xs font-semibold uppercase tracking-wide text-slate-500">
60-
<th class="w-24 border-b border-slate-200 px-4 py-3">Preview</th>
61-
<th class="border-b border-slate-200 px-4 py-3">Name</th>
62-
<th class="w-32 border-b border-slate-200 px-4 py-3">Type</th>
63-
<th class="w-28 border-b border-slate-200 px-4 py-3">Size</th>
64-
<th class="w-40 border-b border-slate-200 px-4 py-3">Updated</th>
65-
<th class="w-28 border-b border-slate-200 px-4 py-3"></th>
58+
<thead class="sticky top-0 bg-slate-50 dark:bg-slate-800">
59+
<tr class="text-left text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400">
60+
<th class="w-24 border-b border-slate-200 dark:border-slate-700 px-4 py-3">Preview</th>
61+
<th class="border-b border-slate-200 dark:border-slate-700 px-4 py-3">Name</th>
62+
<th class="w-32 border-b border-slate-200 dark:border-slate-700 px-4 py-3">Type</th>
63+
<th class="w-28 border-b border-slate-200 dark:border-slate-700 px-4 py-3">Size</th>
64+
<th class="w-40 border-b border-slate-200 dark:border-slate-700 px-4 py-3">Updated</th>
65+
<th class="w-28 border-b border-slate-200 dark:border-slate-700 px-4 py-3"></th>
6666
</tr>
6767
</thead>
6868
<tbody>
6969
<tr v-if="!filteredItems.length">
70-
<td colspan="6" class="px-4 py-8 text-center text-sm text-slate-500">
70+
<td colspan="6" class="px-4 py-8 text-center text-sm text-slate-500 dark:text-slate-400">
7171
No assets found.
7272
</td>
7373
</tr>
7474

7575
<tr
7676
v-for="item in filteredItems"
7777
:key="item.url"
78-
class="border-b border-slate-100 text-sm text-slate-700 hover:bg-slate-50"
78+
class="border-b border-slate-100 dark:border-slate-700 text-sm text-slate-700 dark:text-slate-200 hover:bg-slate-50 dark:hover:bg-slate-700"
7979
>
8080
<td class="px-4 py-3 align-top">
8181
<img
8282
v-if="item.isImage"
8383
:src="item.url"
8484
:alt="item.fileName.slice(0, 5) + '...'"
85-
class="h-14 w-14 rounded border border-slate-200 object-cover"
85+
class="h-14 w-14 rounded border border-slate-200 dark:border-slate-700 object-cover"
8686
>
8787
<div
8888
v-else
89-
class="flex h-14 w-14 items-center justify-center rounded border border-slate-200 bg-slate-50 text-xs font-semibold uppercase text-slate-500"
89+
class="flex h-14 w-14 items-center justify-center rounded border border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800 text-xs font-semibold uppercase text-slate-500 dark:text-slate-400"
9090
>
9191
{{ extensionLabel(item.fileName) }}
9292
</div>
9393
</td>
9494
<td class="px-4 py-3 align-top">
95-
<p class="break-all font-medium text-slate-900">{{ item.fileName }}</p>
96-
<p class="break-all text-xs text-slate-500">{{ item.url }}</p>
95+
<p class="break-all font-medium text-slate-900 dark:text-slate-100">{{ item.fileName }}</p>
96+
<p class="break-all text-xs text-slate-500 dark:text-slate-400">{{ item.url }}</p>
9797
</td>
98-
<td class="px-4 py-3 align-top text-xs uppercase text-slate-500">
98+
<td class="px-4 py-3 align-top text-xs uppercase text-slate-500 dark:text-slate-400">
9999
{{ item.mimeType }}
100100
</td>
101-
<td class="px-4 py-3 align-top text-sm text-slate-600">
101+
<td class="px-4 py-3 align-top text-sm text-slate-600 dark:text-slate-300">
102102
{{ formatBytes(item.size) }}
103103
</td>
104-
<td class="px-4 py-3 align-top text-sm text-slate-600">
104+
<td class="px-4 py-3 align-top text-sm text-slate-600 dark:text-slate-300">
105105
{{ formatDate(item.modifiedAt) }}
106106
</td>
107107
<td class="px-4 py-3 align-top text-right">
@@ -118,9 +118,9 @@
118118
</table>
119119
</div>
120120

121-
<div class="flex items-center justify-between gap-3 border-t border-slate-200 px-4 py-3 text-sm text-slate-600">
121+
<div class="flex items-center justify-between gap-3 border-t border-slate-200 dark:border-slate-700 px-4 py-3 text-sm text-slate-600 dark:text-slate-300">
122122
<span>{{ filteredItems.length }} asset{{ filteredItems.length === 1 ? '' : 's' }}</span>
123-
<span class="text-xs text-slate-500">Choose a row to insert it immediately.</span>
123+
<span class="text-xs text-slate-500 dark:text-slate-400">Choose a row to insert it immediately.</span>
124124
</div>
125125
</div>
126126
</div>

assets/styles/app.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
@import "tailwindcss";
22
@tailwind utilities;
33

4+
@custom-variant dark (&:where(.dark, .dark *));
5+
46
@theme {
57
--color-primary: #2563eb;
68
--color-secondary: #6b7280;

assets/vue/App.vue

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="min-h-screen bg-[#F8FAFC] flex text-slate-900 font-sans">
2+
<div class="min-h-screen bg-[#F8FAFC] dark:bg-slate-900 flex text-slate-900 dark:text-slate-100 font-sans">
33
<AppSidebar />
44

55
<div class="flex flex-col flex-1 min-h-screen min-w-0">
@@ -9,5 +9,13 @@
99
</template>
1010

1111
<script setup>
12+
import { onMounted } from 'vue'
1213
import AppSidebar from './components/sidebar/AppSidebar.vue'
14+
import { useDarkMode } from './composables/useDarkMode'
15+
16+
const { initDarkMode } = useDarkMode()
17+
18+
onMounted(() => {
19+
initDarkMode()
20+
})
1321
</script>

assets/vue/components/base/BaseBadge.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ const badgeClass = computed(() => {
1919
const base = 'inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium';
2020
switch (props.variant) {
2121
case 'counter':
22-
return `${base} bg-indigo-50 text-ext-wf3 border border-indigo-100`;
22+
return `${base} bg-indigo-50 dark:bg-indigo-500/10 text-ext-wf3 dark:text-indigo-300 border border-indigo-100 dark:border-indigo-500/20`;
2323
case 'neutral':
2424
default:
25-
return `${base} bg-gray-100 text-gray-800`;
25+
return `${base} bg-gray-100 dark:bg-slate-700 text-gray-800 dark:text-slate-200`;
2626
}
2727
})
2828
</script>

assets/vue/components/base/BaseButton.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ const buttonClass = computed(() => {
2323
const base = 'inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-2';
2424
switch (props.variant) {
2525
case 'secondary':
26-
return `${base} text-gray-700 bg-white border-gray-300 hover:bg-gray-50 focus:ring-blue-500`;
26+
return `${base} text-gray-700 dark:text-slate-200 bg-white dark:bg-slate-800 border-gray-300 dark:border-slate-600 hover:bg-gray-50 dark:hover:bg-slate-700 focus:ring-blue-500`;
2727
case 'ghost':
28-
return 'inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-blue-600 bg-transparent hover:bg-blue-50 focus:outline-none';
28+
return 'inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-blue-600 dark:text-blue-400 bg-transparent hover:bg-blue-50 dark:hover:bg-blue-500/10 focus:outline-none';
2929
case 'primary':
3030
default:
3131
return `${base} text-white bg-blue-600 hover:bg-blue-700 focus:ring-blue-500`;

assets/vue/components/base/BaseCard.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ const props = defineProps({
1616
})
1717
1818
const cardVariantMap = {
19-
default: 'rounded-lg shadow-sm border border-gray-100 bg-white',
20-
subtle: 'rounded-lg shadow-sm border-0 bg-gray-50',
19+
default: 'rounded-lg shadow-sm border border-gray-100 dark:border-slate-700 bg-white dark:bg-slate-800',
20+
subtle: 'rounded-lg shadow-sm border-0 bg-gray-50 dark:bg-slate-800',
2121
danger: 'rounded-lg shadow-sm border-0 bg-red-600 text-white',
2222
success: 'rounded-lg shadow-sm border-0 bg-green-600 text-white',
2323
}

assets/vue/components/base/BaseIcon.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ const icons = {
9494
9595
pause: `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="5" width="3" height="14" rx="1"></rect><rect x="14" y="5" width="3" height="14" rx="1"></rect></svg>`,
9696
97+
sun: `<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg>`,
98+
99+
moon: `<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg>`,
100+
97101
start: `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="6 4 20 12 6 20 6 4" rx="1"></polygon></svg>`,
98102
};
99103
@@ -108,9 +112,9 @@ const wrapperClass = computed(() => {
108112
];
109113
110114
if (props.active) {
111-
classes.push("text-ext-wf3");
115+
classes.push("text-ext-wf3 dark:text-indigo-400");
112116
} else {
113-
classes.push("text-slate-400 group-hover:text-slate-600");
117+
classes.push("text-slate-400 group-hover:text-slate-600 dark:group-hover:text-slate-300");
114118
}
115119
116120
return classes.join(" ");

assets/vue/components/base/BaseProgressBar.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!-- assets/vue/components/base/BaseProgressBar.vue -->
22
<template>
3-
<div class="progress bg-secondary bg-opacity-25 rounded-pill" :style="wrapperStyle">
3+
<div class="progress bg-secondary bg-opacity-25 dark:bg-slate-700 rounded-pill" :style="wrapperStyle">
44
<div
55
class="progress-bar bg-primary rounded-pill"
66
role="progressbar"

assets/vue/components/base/CkEditorField.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<label
44
v-if="label"
55
:for="fieldId"
6-
class="mb-1 block text-sm font-medium text-slate-700"
6+
class="mb-1 block text-sm font-medium text-slate-700 dark:text-slate-200"
77
>
88
{{ label }}
99
</label>
@@ -22,8 +22,8 @@
2222
:config="config"
2323
/>
2424

25-
<p v-if="helperText" class="mt-1 text-xs text-slate-500">{{ helperText }}</p>
26-
<p v-if="errorMessage" class="mt-1 text-xs text-red-600">{{ errorMessage }}</p>
25+
<p v-if="helperText" class="mt-1 text-xs text-slate-500 dark:text-slate-400">{{ helperText }}</p>
26+
<p v-if="errorMessage" class="mt-1 text-xs text-red-600 dark:text-red-400">{{ errorMessage }}</p>
2727
</div>
2828
</template>
2929

0 commit comments

Comments
 (0)