Skip to content

Commit 86becd4

Browse files
committed
[#481] If user hasn't explicitly set a dark mode pref in Silverbullet, fall back to browser pref
1 parent d38e757 commit 86becd4

File tree

9 files changed

+27
-15
lines changed

9 files changed

+27
-15
lines changed

plugs/editor/editor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export async function openAllNavigator() {
3535
}
3636

3737
export async function toggleDarkMode() {
38-
let darkMode = await clientStore.get("darkMode");
38+
let darkMode = await editor.getUiOption("darkMode");
3939
darkMode = !darkMode;
4040
await clientStore.set("darkMode", darkMode);
4141
await editor.reloadUI();

web/components/basic_modals.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export function Prompt({
1717
message: string;
1818
defaultValue?: string;
1919
vimMode: boolean;
20-
darkMode: boolean;
20+
darkMode: boolean | undefined;
2121
completer: (context: CompletionContext) => Promise<CompletionResult | null>;
2222
callback: (value?: string) => void;
2323
}) {

web/components/command_palette.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function CommandPalette({
2121
commands: Map<string, AppCommand>;
2222
recentCommands: Map<string, Date>;
2323
vimMode: boolean;
24-
darkMode: boolean;
24+
darkMode: boolean | undefined;
2525
completer: (context: CompletionContext) => Promise<CompletionResult | null>;
2626
onTrigger: (command: AppCommand | undefined) => void;
2727
config: Config;

web/components/filter.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export function FilterList({
3636
preFilter?: (options: FilterOption[], phrase: string) => FilterOption[];
3737
phrasePreprocessor?: (phrase: string) => string;
3838
vimMode: boolean;
39-
darkMode: boolean;
39+
darkMode: boolean | undefined;
4040
completer: (context: CompletionContext) => Promise<CompletionResult | null>;
4141
allowNew?: boolean;
4242
completePrefix?: string;

web/components/mini_editor.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export function MiniEditor(
4747
text: string;
4848
placeholderText?: string;
4949
vimMode: boolean;
50-
darkMode: boolean;
50+
darkMode: boolean | undefined;
5151
vimStartInInsertMode?: boolean;
5252
focus?: boolean;
5353
completer?: (

web/components/page_navigator.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export function PageNavigator({
2929
allPages: PageMeta[];
3030
extensions: Set<string>;
3131
vimMode: boolean;
32-
darkMode: boolean;
32+
darkMode: boolean | undefined;
3333
mode: "page" | "meta" | "document" | "all";
3434
onNavigate: (page: string | undefined, type: "document" | "page") => void;
3535
onModeSwitch: (mode: "page" | "meta" | "document" | "all") => void;

web/components/top_bar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export function TopBar({
4040
syncFailures: number;
4141
isLoading: boolean;
4242
notifications: Notification[];
43-
darkMode: boolean;
43+
darkMode: boolean | undefined;
4444
vimMode: boolean;
4545
progressPerc?: number;
4646
onRename: (newName?: string) => Promise<void>;

web/editor_ui.tsx

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import type { Client } from "./client.ts";
1515
import { Panel } from "./components/panel.tsx";
1616
import { safeRun, sleep } from "../lib/async.ts";
1717
import { parseCommand } from "$common/command.ts";
18+
import { clientStoreSyscalls } from "./syscalls/clientStore.ts";
1819
import { defaultActionButtons } from "@silverbulletmd/silverbullet/type/config";
1920
import type { FilterOption } from "@silverbulletmd/silverbullet/type/client";
2021

@@ -97,12 +98,23 @@ export class MainUI {
9798
}, [viewState.uiOptions.vimMode]);
9899

99100
useEffect(() => {
100-
document.documentElement.dataset.theme = viewState.uiOptions.darkMode
101-
? "dark"
102-
: "light";
103-
if (this.client.isDocumentEditor()) {
104-
this.client.documentEditor.updateTheme();
105-
}
101+
clientStoreSyscalls(client.stateDataStore)["clientStore.get"]({}, "darkMode").then((storedDarkModePreference: boolean | undefined) => {
102+
let theme: 'dark' | 'light';
103+
if (storedDarkModePreference === true) {
104+
theme = "dark";
105+
} else if (storedDarkModePreference === false) {
106+
theme = "light";
107+
} else {
108+
theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
109+
}
110+
111+
viewState.uiOptions.darkMode = theme === "dark";
112+
document.documentElement.dataset.theme = theme
113+
114+
if (this.client.isDocumentEditor()) {
115+
this.client.documentEditor.updateTheme();
116+
}
117+
});
106118
}, [viewState.uiOptions.darkMode]);
107119

108120
useEffect(() => {

web/type.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export type AppViewState = {
4545

4646
uiOptions: {
4747
vimMode: boolean;
48-
darkMode: boolean;
48+
darkMode: boolean | undefined;
4949
forcedROMode: boolean;
5050
customStyles?: string;
5151
};
@@ -82,7 +82,7 @@ export const initialViewState: AppViewState = {
8282
syncFailures: 0,
8383
uiOptions: {
8484
vimMode: false,
85-
darkMode: false,
85+
darkMode: undefined,
8686
forcedROMode: false,
8787
},
8888
isMobile: false,

0 commit comments

Comments
 (0)