mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-09-24 07:22:56 +00:00
progamatic dark mode
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
/* eslint max-lines: ["error", { "max": 405 }] */
|
/* eslint max-lines: ["error", { "max": 410 }] */
|
||||||
import './codeEditor.less';
|
import './codeEditor.less';
|
||||||
import React, { useEffect, useRef, forwardRef, useImperativeHandle } from 'react';
|
import React, { useEffect, useRef, forwardRef, useImperativeHandle } from 'react';
|
||||||
|
|
||||||
@@ -88,6 +88,7 @@ const CodeEditor = forwardRef(
|
|||||||
onChange = ()=>{},
|
onChange = ()=>{},
|
||||||
onCursorChange = ()=>{},
|
onCursorChange = ()=>{},
|
||||||
onViewChange = ()=>{},
|
onViewChange = ()=>{},
|
||||||
|
onThemeChange = ()=>{},
|
||||||
editorTheme = 'default',
|
editorTheme = 'default',
|
||||||
style,
|
style,
|
||||||
renderer,
|
renderer,
|
||||||
@@ -308,6 +309,9 @@ const CodeEditor = forwardRef(
|
|||||||
view.dispatch({
|
view.dispatch({
|
||||||
effects : themeCompartment.reconfigure(themeExtension),
|
effects : themeCompartment.reconfigure(themeExtension),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isDark = view.state.facet(EditorView.darkTheme);
|
||||||
|
onThemeChange(isDark);
|
||||||
}, [editorTheme, tab]);
|
}, [editorTheme, tab]);
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import './editor.less';
|
import './editor.less';
|
||||||
import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from 'react';
|
import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from 'react';
|
||||||
import dedent from 'dedent';
|
import dedent from 'dedent';
|
||||||
|
import { EditorView } from '@codemirror/view';
|
||||||
|
|
||||||
import CodeEditor from '@components/codeEditor/codeEditor.jsx';
|
import CodeEditor from '@components/codeEditor/codeEditor.jsx';
|
||||||
import SnippetBar from './snippetbar/snippetbar.jsx';
|
import SnippetBar from './snippetbar/snippetbar.jsx';
|
||||||
@@ -72,6 +73,7 @@ const Editor = forwardRef(
|
|||||||
const [currentEditorTheme, setEditorTheme] = useState(editorTheme);
|
const [currentEditorTheme, setEditorTheme] = useState(editorTheme);
|
||||||
const [view, setView] = useState('text'); // 'text', 'style', 'meta', 'snippet'
|
const [view, setView] = useState('text'); // 'text', 'style', 'meta', 'snippet'
|
||||||
const [snippetBarHeight, setSnippetBarHeight] = useState(26);
|
const [snippetBarHeight, setSnippetBarHeight] = useState(26);
|
||||||
|
const [isDark, setIsDark] = useState(false);
|
||||||
|
|
||||||
const editor = useRef(null);
|
const editor = useRef(null);
|
||||||
const codeEditor = useRef(null);
|
const codeEditor = useRef(null);
|
||||||
@@ -225,6 +227,7 @@ const Editor = forwardRef(
|
|||||||
onCursorChange={(page)=>updateCurrentCursorPage(page)}
|
onCursorChange={(page)=>updateCurrentCursorPage(page)}
|
||||||
onViewChange={(page)=>updateCurrentViewPage(page)}
|
onViewChange={(page)=>updateCurrentViewPage(page)}
|
||||||
editorTheme={currentEditorTheme}
|
editorTheme={currentEditorTheme}
|
||||||
|
onThemeChange={setIsDark}
|
||||||
renderer={brew.renderer}
|
renderer={brew.renderer}
|
||||||
style={{ height: `calc(100% - ${snippetBarHeight}px)` }}
|
style={{ height: `calc(100% - ${snippetBarHeight}px)` }}
|
||||||
/>
|
/>
|
||||||
@@ -243,6 +246,7 @@ const Editor = forwardRef(
|
|||||||
value={brew.style ?? DEFAULT_STYLE_TEXT}
|
value={brew.style ?? DEFAULT_STYLE_TEXT}
|
||||||
onChange={onBrewChange('style')}
|
onChange={onBrewChange('style')}
|
||||||
editorTheme={currentEditorTheme}
|
editorTheme={currentEditorTheme}
|
||||||
|
onThemeChange={setIsDark}
|
||||||
renderer={brew.renderer}
|
renderer={brew.renderer}
|
||||||
style={{ height: `calc(100% - ${snippetBarHeight}px)` }}
|
style={{ height: `calc(100% - ${snippetBarHeight}px)` }}
|
||||||
/>
|
/>
|
||||||
@@ -265,6 +269,7 @@ const Editor = forwardRef(
|
|||||||
onChange={onBrewChange('snippets')}
|
onChange={onBrewChange('snippets')}
|
||||||
enableFolding={true}
|
enableFolding={true}
|
||||||
editorTheme={currentEditorTheme}
|
editorTheme={currentEditorTheme}
|
||||||
|
onThemeChange={setIsDark}
|
||||||
renderer={brew.renderer}
|
renderer={brew.renderer}
|
||||||
style={{ height: `calc(100% - 25px)` }}
|
style={{ height: `calc(100% - 25px)` }}
|
||||||
/>
|
/>
|
||||||
@@ -274,7 +279,7 @@ const Editor = forwardRef(
|
|||||||
if(isMeta()) {
|
if(isMeta()) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<CodeEditor key='codeEditor' view={view} style={{ display: 'none' }} />
|
<CodeEditor key='codeEditor' editorTheme={currentEditorTheme} onThemeChange={setIsDark} view={view} style={{ display: 'none' }} />
|
||||||
<MetadataEditor
|
<MetadataEditor
|
||||||
metadata={brew}
|
metadata={brew}
|
||||||
themeBundle={themeBundle}
|
themeBundle={themeBundle}
|
||||||
@@ -306,7 +311,7 @@ const Editor = forwardRef(
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='editor' ref={editor}>
|
<div className={`editor${isDark ? ' darkMode' : ''}`} ref={editor}>
|
||||||
<SnippetBar
|
<SnippetBar
|
||||||
brew={brew}
|
brew={brew}
|
||||||
view={view}
|
view={view}
|
||||||
|
|||||||
@@ -378,3 +378,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.editor.darkMode .metadataEditor {
|
||||||
|
background-color: #555;
|
||||||
|
background-image: @backgroundImageAltDark;
|
||||||
|
color:#ddd;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
color:@blueLight;
|
||||||
|
border-color: @blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, textarea, select {
|
||||||
|
background-color:#ddd;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
@frameBorderImage : url('/assets/frameBorder.png');
|
@frameBorderImage : url('/assets/frameBorder.png');
|
||||||
@backgroundImage : url('/assets/parchmentBackground.jpg');
|
@backgroundImage : url('/assets/parchmentBackground.jpg');
|
||||||
@backgroundImageAlt : url('/assets/fluffy_background.png');
|
@backgroundImageAlt : url('/assets/fluffy_background.png');
|
||||||
|
@backgroundImageAltDark : url('/assets/fluffy_background_dark.png');
|
||||||
@redTriangleImage : url('/assets/redTriangle.png');
|
@redTriangleImage : url('/assets/redTriangle.png');
|
||||||
@monsterBorderImageLegacy : url('/assets/monsterBorderLegacy.png');
|
@monsterBorderImageLegacy : url('/assets/monsterBorderLegacy.png');
|
||||||
@noteBorderImage : url('/assets/noteBorder.png');
|
@noteBorderImage : url('/assets/noteBorder.png');
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 3.5 MiB |
Reference in New Issue
Block a user