feat(web): React-фронтенд вместо Flet + fix restore rmtree на bind-mount
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).
This commit is contained in:
58
web-react/src/theme/themes.ts
Normal file
58
web-react/src/theme/themes.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
// Темы и палитра. Перенос из 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;
|
||||
}
|
||||
Reference in New Issue
Block a user