Schnittebenen 2D↔3D Phase 1+2, native Fenster, Hell/Dunkel-Theme, SWISSIMAGE-Import
- Schnittebenen: 3D-Live-Schnitt folgt der gewählten Grundriss-Schnittlinie (section3dCutId/sectionPlaneFromLevel), Schalter "Im 3D schneiden" im Objekt-Info, Doppelklick auf Schnittlinie springt in 2D-Schnittansicht, unsichtbare Ebenen blenden ihre Führungslinie aus - Eigene native Tauri-Fenster für Kontext-Import/Zeichnungsebenen/ Ebenen-Einstellungen/Ressourcen/Einstellungen + klassische Menüleiste (AppMenuBar) neben der Wortmarke - Hell/Dunkel-Umschalter (Einstellungen → Darstellung), persistiert, flackerfrei vor erstem Render gesetzt - SWISSIMAGE-Luftbild-Import (swisstopo WMS) als Kontext-Hintergrundebene - UI-Politur: Werkzeug-Panel Symbole/Liste umschaltbar, Topbar-Quick-Access- Icons entfernt, Zahnrad→Einstellungen in Panel-Köpfen, Footerbar/ Snap-Marker/Maß-HUD auf helle Pillen-Sprache umgestellt - Neues Dachziegel-Material (RoofingTiles013A)
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
// Hell/Dunkel-Umschalter (Einstellungen → Darstellung). Hell ist Standard
|
||||
// (siehe styles.css); Dunkel wird per `data-theme="dark"` auf <html> opt-in
|
||||
// gesetzt und in localStorage persistiert, damit die Wahl einen Neustart
|
||||
// übersteht. `applyThemeMode` wird SYNCHRON vor dem ersten Render aufgerufen
|
||||
// (main.tsx), damit es keinen Hell/Dunkel-Flackerer beim Laden gibt.
|
||||
|
||||
export type ThemeMode = "light" | "dark";
|
||||
|
||||
const THEME_STORAGE_KEY = "cad.themeMode";
|
||||
|
||||
export function getStoredThemeMode(): ThemeMode {
|
||||
if (typeof window === "undefined") return "light";
|
||||
return window.localStorage.getItem(THEME_STORAGE_KEY) === "dark" ? "dark" : "light";
|
||||
}
|
||||
|
||||
export function applyThemeMode(mode: ThemeMode): void {
|
||||
if (mode === "dark") {
|
||||
document.documentElement.setAttribute("data-theme", "dark");
|
||||
} else {
|
||||
document.documentElement.removeAttribute("data-theme");
|
||||
}
|
||||
}
|
||||
|
||||
export function setStoredThemeMode(mode: ThemeMode): void {
|
||||
window.localStorage.setItem(THEME_STORAGE_KEY, mode);
|
||||
applyThemeMode(mode);
|
||||
}
|
||||
Reference in New Issue
Block a user