c6b1a9d75f
Terminal Mode: - Text selection: orange highlight rgba(255,107,0,0.28) - Links: cyan (#00D4FF) with orange hover glow (#FF6B00) - Code/pre: TDS green (#00FF88) on terminal bg, left green border - Strong/b → orange, em/i → cyan, mark → amber, del → red - Blockquote: orange left border (matches chat reply quotes) - HR: cyan border with dim glow - Input/textarea/[contenteditable] focus: orange glow ring - Tables: TDS headers (orange+uppercase), cyan borders, hover rows - List markers: cyan ▸ for ul, orange for ol - Boot box-drawing alignment fixed (51→52 ═) - data-theme=\"dark\" set on html element when terminal active - Updated description: correct TDS palette names - ▶ Boot replay button in settings (visible when terminal on) Chat backgrounds (+3): - Tactical: LotusGuild TDS exact cyan dot-grid (28px) - Circuit: green grid + node dots on dark terminal bg - Hex Grid: isometric cyan hexagonal outlines Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
68 lines
2.3 KiB
TypeScript
68 lines
2.3 KiB
TypeScript
import React, { ReactNode, useEffect } from 'react';
|
|
import { configClass, varsClass } from 'folds';
|
|
import {
|
|
DarkTheme,
|
|
LightTheme,
|
|
LotusTerminalTheme,
|
|
ThemeContextProvider,
|
|
ThemeKind,
|
|
useActiveTheme,
|
|
useSystemThemeKind,
|
|
} from '../hooks/useTheme';
|
|
import { lotusTerminalBodyClass } from '../../lotus-terminal.css';
|
|
import { useSetting } from '../state/hooks/settings';
|
|
import { settingsAtom } from '../state/settings';
|
|
import { runLotusBootSequence } from '../../lotus-boot';
|
|
|
|
export function UnAuthRouteThemeManager() {
|
|
const systemThemeKind = useSystemThemeKind();
|
|
const [lotusTerminal] = useSetting(settingsAtom, 'lotusTerminal');
|
|
|
|
useEffect(() => {
|
|
document.body.className = '';
|
|
document.body.classList.add(configClass, varsClass);
|
|
if (lotusTerminal) {
|
|
document.documentElement.setAttribute('data-theme', 'dark');
|
|
document.body.classList.add(...LotusTerminalTheme.classNames);
|
|
document.body.classList.add(lotusTerminalBodyClass);
|
|
} else {
|
|
document.documentElement.removeAttribute('data-theme');
|
|
if (systemThemeKind === ThemeKind.Dark) {
|
|
document.body.classList.add(...DarkTheme.classNames);
|
|
} else {
|
|
document.body.classList.add(...LightTheme.classNames);
|
|
}
|
|
}
|
|
}, [systemThemeKind, lotusTerminal]);
|
|
|
|
return null;
|
|
}
|
|
|
|
export function AuthRouteThemeManager({ children }: { children: ReactNode }) {
|
|
const activeTheme = useActiveTheme();
|
|
const [monochromeMode] = useSetting(settingsAtom, 'monochromeMode');
|
|
const [lotusTerminal] = useSetting(settingsAtom, 'lotusTerminal');
|
|
|
|
const effectiveTheme = lotusTerminal ? LotusTerminalTheme : activeTheme;
|
|
|
|
useEffect(() => {
|
|
document.body.className = '';
|
|
document.body.classList.add(configClass, varsClass);
|
|
document.body.classList.add(...effectiveTheme.classNames);
|
|
if (lotusTerminal) {
|
|
document.documentElement.setAttribute('data-theme', 'dark');
|
|
document.body.classList.add(lotusTerminalBodyClass);
|
|
runLotusBootSequence();
|
|
} else {
|
|
document.documentElement.removeAttribute('data-theme');
|
|
}
|
|
if (monochromeMode && !lotusTerminal) {
|
|
document.body.style.filter = 'grayscale(1)';
|
|
} else {
|
|
document.body.style.filter = '';
|
|
}
|
|
}, [effectiveTheme, monochromeMode, lotusTerminal]);
|
|
|
|
return <ThemeContextProvider value={effectiveTheme}>{children}</ThemeContextProvider>;
|
|
}
|