progamatic dark mode

This commit is contained in:
Víctor Losada Hernández
2026-08-28 00:01:42 +02:00
parent 0dd6ddf33c
commit 1133dff5ce
5 changed files with 28 additions and 3 deletions
+5 -1
View File
@@ -1,4 +1,4 @@
/* eslint max-lines: ["error", { "max": 405 }] */
/* eslint max-lines: ["error", { "max": 410 }] */
import './codeEditor.less';
import React, { useEffect, useRef, forwardRef, useImperativeHandle } from 'react';
@@ -88,6 +88,7 @@ const CodeEditor = forwardRef(
onChange = ()=>{},
onCursorChange = ()=>{},
onViewChange = ()=>{},
onThemeChange = ()=>{},
editorTheme = 'default',
style,
renderer,
@@ -308,6 +309,9 @@ const CodeEditor = forwardRef(
view.dispatch({
effects : themeCompartment.reconfigure(themeExtension),
});
const isDark = view.state.facet(EditorView.darkTheme);
onThemeChange(isDark);
}, [editorTheme, tab]);
useEffect(()=>{
+7 -2
View File
@@ -2,6 +2,7 @@
import './editor.less';
import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from 'react';
import dedent from 'dedent';
import { EditorView } from '@codemirror/view';
import CodeEditor from '@components/codeEditor/codeEditor.jsx';
import SnippetBar from './snippetbar/snippetbar.jsx';
@@ -72,6 +73,7 @@ const Editor = forwardRef(
const [currentEditorTheme, setEditorTheme] = useState(editorTheme);
const [view, setView] = useState('text'); // 'text', 'style', 'meta', 'snippet'
const [snippetBarHeight, setSnippetBarHeight] = useState(26);
const [isDark, setIsDark] = useState(false);
const editor = useRef(null);
const codeEditor = useRef(null);
@@ -225,6 +227,7 @@ const Editor = forwardRef(
onCursorChange={(page)=>updateCurrentCursorPage(page)}
onViewChange={(page)=>updateCurrentViewPage(page)}
editorTheme={currentEditorTheme}
onThemeChange={setIsDark}
renderer={brew.renderer}
style={{ height: `calc(100% - ${snippetBarHeight}px)` }}
/>
@@ -243,6 +246,7 @@ const Editor = forwardRef(
value={brew.style ?? DEFAULT_STYLE_TEXT}
onChange={onBrewChange('style')}
editorTheme={currentEditorTheme}
onThemeChange={setIsDark}
renderer={brew.renderer}
style={{ height: `calc(100% - ${snippetBarHeight}px)` }}
/>
@@ -265,6 +269,7 @@ const Editor = forwardRef(
onChange={onBrewChange('snippets')}
enableFolding={true}
editorTheme={currentEditorTheme}
onThemeChange={setIsDark}
renderer={brew.renderer}
style={{ height: `calc(100% - 25px)` }}
/>
@@ -274,7 +279,7 @@ const Editor = forwardRef(
if(isMeta()) {
return (
<>
<CodeEditor key='codeEditor' view={view} style={{ display: 'none' }} />
<CodeEditor key='codeEditor' editorTheme={currentEditorTheme} onThemeChange={setIsDark} view={view} style={{ display: 'none' }} />
<MetadataEditor
metadata={brew}
themeBundle={themeBundle}
@@ -306,7 +311,7 @@ const Editor = forwardRef(
}));
return (
<div className='editor' ref={editor}>
<div className={`editor${isDark ? ' darkMode' : ''}`} ref={editor}>
<SnippetBar
brew={brew}
view={view}
@@ -377,4 +377,19 @@
}
}
}
}
.editor.darkMode .metadataEditor {
background-color: #555;
background-image: @backgroundImageAltDark;
color:#ddd;
h2 {
color:@blueLight;
border-color: @blue;
}
input, textarea, select {
background-color:#ddd;
}
}
+1
View File
@@ -3,6 +3,7 @@
@frameBorderImage : url('/assets/frameBorder.png');
@backgroundImage : url('/assets/parchmentBackground.jpg');
@backgroundImageAlt : url('/assets/fluffy_background.png');
@backgroundImageAltDark : url('/assets/fluffy_background_dark.png');
@redTriangleImage : url('/assets/redTriangle.png');
@monsterBorderImageLegacy : url('/assets/monsterBorderLegacy.png');
@noteBorderImage : url('/assets/noteBorder.png');
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB