import React, { useEffect } from 'react'; import * as Sentry from '@sentry/react'; import { Provider as JotaiProvider, useAtomValue } from 'jotai'; import { OverlayContainerProvider, PopOutContainerProvider, TooltipContainerProvider } from 'folds'; import { RouterProvider } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { ClientConfigLoader } from '../components/ClientConfigLoader'; import { ClientConfigProvider } from '../hooks/useClientConfig'; import { ConfigConfigError, ConfigConfigLoading } from './ConfigConfig'; import { FeatureCheck } from './FeatureCheck'; import { createRouter } from './Router'; import { ScreenSizeProvider, useScreenSize } from '../hooks/useScreenSize'; import { useCompositionEndTracking } from '../hooks/useComposingCheck'; import { settingsAtom } from '../state/settings'; import { LotusToastContainer } from '../features/toast/LotusToastContainer'; import { useTauriNotificationBadge } from '../hooks/useTauriNotificationBadge'; import { SeasonalEffect } from '../components/seasonal/SeasonalEffect'; const FONT_MAP: Record = { system: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif", inter: "'InterVariable', sans-serif", 'jetbrains-mono': "'JetBrains Mono', monospace", 'fira-code': "'Fira Code', monospace", }; function AppearanceEffects() { const settings = useAtomValue(settingsAtom); useEffect(() => { const color = settings.mentionHighlightColor; if (color) { document.body.style.setProperty('--mention-highlight-bg', color); // compute black or white text based on hex luminance const r = parseInt(color.slice(1, 3), 16); const g = parseInt(color.slice(3, 5), 16); const b = parseInt(color.slice(5, 7), 16); const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255; document.body.style.setProperty('--mention-highlight-text', lum > 0.5 ? '#000' : '#fff'); document.body.style.setProperty('--mention-highlight-border', color); } else { document.body.style.removeProperty('--mention-highlight-bg'); document.body.style.removeProperty('--mention-highlight-text'); document.body.style.removeProperty('--mention-highlight-border'); } }, [settings.mentionHighlightColor]); useEffect(() => { const font = FONT_MAP[settings.fontFamily ?? 'inter'] ?? FONT_MAP.inter; document.body.style.setProperty('--font-secondary', font); }, [settings.fontFamily]); return null; } function TauriEffects() { useTauriNotificationBadge(); return null; } function NightLightOverlay() { const settings = useAtomValue(settingsAtom); if (!settings.nightLightEnabled) return null; return (