diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 7b100f9..f72fe86 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -18,7 +18,10 @@ ], "asar": true, "win": { - "target": ["nsis", "dir"] + "target": [ + "nsis", + "dir" + ] }, "nsis": { "oneClick": false, @@ -54,6 +57,7 @@ "hotkeys-js": "^4.0.5", "katex": "^0.16.47", "lowlight": "^3.3.0", + "lucide-react": "^1.37.0", "markmap-view": "^0.18.12", "remark-gfm": "^4.0.1", "remark-math": "^6.0.0", @@ -66,10 +70,10 @@ "devDependencies": { "@playwright/test": "^1.62.1", "@types/d3-drag": "^3.0.7", - "@types/katex": "^0.16.8", "@types/d3-force": "^3.0.10", "@types/d3-selection": "^3.0.11", "@types/d3-zoom": "^3.0.8", + "@types/katex": "^0.16.8", "@types/node": "^20.0.0", "@types/react": "^18.3.0", "@types/react-dom": "^18.3.0", diff --git a/apps/desktop/src/renderer/App.tsx b/apps/desktop/src/renderer/App.tsx index d6e58ed..aac4ad2 100644 --- a/apps/desktop/src/renderer/App.tsx +++ b/apps/desktop/src/renderer/App.tsx @@ -21,6 +21,7 @@ import { useGlobalHotkeys } from './features/keymap/use-hotkeys'; import { useKeymap } from './features/keymap/keymap-service'; import { useLayout } from './features/shell/layout-store'; import { Resizer } from './features/shell/Resizer'; +import { StatusBar } from './features/shell/StatusBar'; import { EffectLayer } from './features/effects/EffectLayer'; import { useSettings } from './features/settings/settings-store'; import { SearchBox } from './features/search/SearchBox'; @@ -38,10 +39,19 @@ export function App() { const [showSettings, setShowSettings] = useState(false); const [showCheat, setShowCheat] = useState(false); const [showAppearance, setShowAppearance] = useState(false); + const [focused, setFocused] = useState(true); // 窗口聚焦状态——用于最外层边框的明暗切换 const appearance = useAppearance(); const settings = useSettings(); const layout = useLayout(); const switchToEditor = useCallback(() => setView('editor'), []); + // 窗口聚焦/失焦 → 边框强化/淡化 + useEffect(() => { + const onF = () => setFocused(true); + const onB = () => setFocused(false); + window.addEventListener('focus', onF); + window.addEventListener('blur', onB); + return () => { window.removeEventListener('focus', onF); window.removeEventListener('blur', onB); }; + }, []); useEffect(() => { loadVault(); loadTree(); restore(); appearance.load(); useKeymap.getState().load(); useSettings.getState().loadGpu(); }, []); useEffect(() => { if (activeId && tabs.length > 0) { const t = tabs.find(x => x.id === activeId); if (t) openDoc(t.path).then(() => { @@ -78,7 +88,7 @@ export function App() { // 编辑器样式随设置生效(FR-编辑器设置真实生效) useEffect(() => { document.documentElement.style.setProperty('--editor-font-size', settings.fontSize + 'px'); document.documentElement.style.setProperty('--editor-font-family', settings.fontFamily); document.documentElement.style.setProperty('--editor-white-space', settings.wordWrap ? 'pre-wrap' : 'pre'); }, [settings.fontSize, settings.fontFamily, settings.wordWrap]); return ( -