web-react/: SPA Vite+React+TS, nginx раздаёт статику и проксирует /api на api:8000 по локалке. docker-compose: web(Flet)->web-react на :80. transfer_crud.backup_restore: чистим содержимое data/radar вместо rmtree точки монтирования (EBUSY).
59 lines
2.1 KiB
TypeScript
59 lines
2.1 KiB
TypeScript
// Темы и палитра. Перенос из web/theme_manager.py (THEMES) и web/designer.py (colors).
|
|
// Каждая тема переопределяет только фоновые цвета; остальная палитра общая.
|
|
|
|
export interface Theme {
|
|
id: string;
|
|
name: string;
|
|
background: string;
|
|
surface: string;
|
|
surfaceAlt: string;
|
|
}
|
|
|
|
export const THEMES: Theme[] = [
|
|
{ id: "default", name: "ЦОПП (оранжевая)", background: "#F4F6F8", surface: "#FFFFFF", surfaceAlt: "#E4E8ED" },
|
|
{ id: "warm", name: "Тёплая", background: "#FFF3E6", surface: "#FFFFFF", surfaceAlt: "#FFD9B3" },
|
|
{ id: "blue", name: "Синяя", background: "#E3F2FD", surface: "#FFFFFF", surfaceAlt: "#B8D9F5" },
|
|
{ id: "green", name: "Зелёная", background: "#EDF7E7", surface: "#FFFFFF", surfaceAlt: "#BEE3B0" },
|
|
{ id: "dark", name: "Тёмная", background: "#1E2A3A", surface: "#2D3F54", surfaceAlt: "#3D5068" },
|
|
];
|
|
|
|
export const DEFAULT_THEME_ID = "default";
|
|
|
|
// Постоянная палитра (web/designer.py: class colors)
|
|
export const PALETTE = {
|
|
primary: "#F85A40",
|
|
primaryDark: "#D94530",
|
|
primaryLight: "#FFEAB7",
|
|
accent: "#FFC845",
|
|
accentLime: "#FFC845",
|
|
secondaryLight: "#FFEAB7",
|
|
info: "#007FBD",
|
|
infoDark: "#006AA3",
|
|
infoLight: "#D9F1F4",
|
|
success: "#85C446",
|
|
successLight: "#C0DE9E",
|
|
textPrimary: "#1E2A3A",
|
|
textSecondary: "#5A6779",
|
|
textOnPrimary: "#FFFFFF",
|
|
border: "#DDE3EA",
|
|
};
|
|
|
|
// Масштаб (web/theme_manager.py)
|
|
export const SCALE_MIN = 0.8;
|
|
export const SCALE_MAX = 2.5;
|
|
export const SCALE_STEP = 0.1;
|
|
export const SCALE_DEFAULT = 1.3;
|
|
// Автоопределение по ширине экрана
|
|
export const MOBILE_BREAKPOINT = 600;
|
|
export const SCALE_MOBILE = 1.0;
|
|
export const SCALE_DESKTOP = 1.5;
|
|
|
|
export function getTheme(id: string | null | undefined): Theme {
|
|
return THEMES.find((t) => t.id === id) ?? THEMES[0];
|
|
}
|
|
|
|
export function autoScale(): number {
|
|
if (typeof window === "undefined") return SCALE_DEFAULT;
|
|
return window.innerWidth < MOBILE_BREAKPOINT ? SCALE_MOBILE : SCALE_DESKTOP;
|
|
}
|