Compare commits
No commits in common. "489c2208c564ddf31859285643a8e19688150f51" and "0150ca3c32e701d467e74bc76e9b9b909119b6d0" have entirely different histories.
489c2208c5
...
0150ca3c32
45
src/App.tsx
45
src/App.tsx
@ -1,5 +1,5 @@
|
|||||||
import { BrowserRouter } from 'react-router-dom';
|
import { BrowserRouter } from 'react-router-dom';
|
||||||
import { useMemo, useEffect } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { ThemeProvider, createTheme } from '@mui/material/styles';
|
import { ThemeProvider, createTheme } from '@mui/material/styles';
|
||||||
import { useTLDraw } from './contexts/TLDrawContext';
|
import { useTLDraw } from './contexts/TLDrawContext';
|
||||||
import { theme } from './services/themeService';
|
import { theme } from './services/themeService';
|
||||||
@ -10,40 +10,26 @@ import AppRoutes from './AppRoutes';
|
|||||||
import { ErrorBoundary } from './components/ErrorBoundary';
|
import { ErrorBoundary } from './components/ErrorBoundary';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
/**
|
|
||||||
* Syncs tldraw's color scheme to data-color-mode on <html>.
|
|
||||||
* Must live inside TLDrawProvider so useTLDraw() reads live preferences.
|
|
||||||
* This activates the [data-color-mode="dark"] overrides in cc-design-system.css.
|
|
||||||
* tldraw itself uses tl-theme__dark class on .tl-container — we mirror that
|
|
||||||
* to the document root so --cc-* token overrides apply globally.
|
|
||||||
*/
|
|
||||||
const DarkModeSync: React.FC = () => {
|
|
||||||
const { tldrawPreferences } = useTLDraw();
|
|
||||||
const prefersDarkMode =
|
|
||||||
typeof window !== 'undefined' &&
|
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const scheme = tldrawPreferences?.colorScheme ?? 'system';
|
|
||||||
const isDark = scheme === 'dark' || (scheme === 'system' && prefersDarkMode);
|
|
||||||
document.documentElement.setAttribute('data-color-mode', isDark ? 'dark' : 'light');
|
|
||||||
}, [tldrawPreferences?.colorScheme, prefersDarkMode]);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
const App = React.memo(() => {
|
const App = React.memo(() => {
|
||||||
|
const { tldrawPreferences } = useTLDraw();
|
||||||
|
|
||||||
const prefersDarkMode =
|
const prefersDarkMode =
|
||||||
typeof window !== 'undefined' &&
|
typeof window !== 'undefined' &&
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').matches;
|
window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||||
|
|
||||||
const appTheme = useMemo(() => {
|
const appTheme = useMemo(() => {
|
||||||
// App is outside TLDrawProvider so tldrawPreferences is always null here.
|
let mode: 'light' | 'dark';
|
||||||
// Theme defaults to OS preference; DarkModeSync (inside TLDrawProvider) handles
|
|
||||||
// updating data-color-mode once tldraw preferences are loaded.
|
if (tldrawPreferences?.colorScheme === 'system') {
|
||||||
const mode = prefersDarkMode ? 'dark' : 'light';
|
mode = prefersDarkMode ? 'dark' : 'light';
|
||||||
return createTheme({ palette: { mode } });
|
} else {
|
||||||
}, [prefersDarkMode]);
|
mode = tldrawPreferences?.colorScheme === 'dark' ? 'dark' : 'light';
|
||||||
|
}
|
||||||
|
|
||||||
|
return createTheme({
|
||||||
|
palette: { mode },
|
||||||
|
});
|
||||||
|
}, [tldrawPreferences?.colorScheme, prefersDarkMode]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
@ -51,7 +37,6 @@ const App = React.memo(() => {
|
|||||||
<AuthProvider>
|
<AuthProvider>
|
||||||
<UserProvider>
|
<UserProvider>
|
||||||
<TLDrawProvider>
|
<TLDrawProvider>
|
||||||
<DarkModeSync />
|
|
||||||
<ThemeProvider theme={appTheme}>
|
<ThemeProvider theme={appTheme}>
|
||||||
<AppRoutes />
|
<AppRoutes />
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
|
|||||||
@ -1,12 +1,2 @@
|
|||||||
@import url("@tldraw/tldraw/tldraw.css");
|
@import url("@tldraw/tldraw/tldraw.css");
|
||||||
@import url('./cc-design-system.css');
|
@import url('./cc-design-system.css');
|
||||||
|
|
||||||
.tl-container {
|
|
||||||
--color-panel: var(--cc-bg-panel);
|
|
||||||
--color-text: var(--cc-text-primary);
|
|
||||||
--color-muted: var(--cc-border);
|
|
||||||
--color-muted-1: var(--cc-border-strong);
|
|
||||||
--color-background: var(--cc-bg-canvas);
|
|
||||||
--color-selected: var(--cc-selected);
|
|
||||||
--color-accent: var(--cc-action-primary);
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user