Files
MyGoNavi/frontend/src/utils/driverManagerWorkbenchTheme.ts
Syngnat 24d9db4c51 feat(ui): 完成新版 UI 全量改造
- 整体布局:按新版 UI 重构左侧导航、对象树、连接分组和右键菜单体系

- 数据视图:优化 DDL 侧栏、横向滚动、筛选输入、编辑入口和虚拟表格体验

- AI 面板:重构新版入口、输入区、模型选择、快捷键和悬浮布局

- 标签与快捷键:补齐 Tab 悬浮信息、复制交互和 Mac/Windows 快捷键配置

- 工程质量:新增 v2 主题样式、菜单组件、外观工具和回归测试覆盖
2026-05-22 17:41:06 +08:00

109 lines
3.7 KiB
TypeScript

export type DriverManagerWorkbenchTheme = {
isDark: boolean;
pageBg: string;
sectionBg: string;
sectionBorder: string;
cardBg: string;
cardBorder: string;
cardWarningBorder: string;
cardReadyBorder: string;
statBg: string;
statBorder: string;
updateNoteBg: string;
updateNoteBorder: string;
mutedText: string;
titleText: string;
warningText: string;
};
/** v2 = body[data-ui-version="v2"],由 App.tsx 切换。 */
const isV2 = (): boolean => {
if (typeof document === 'undefined' || !document.body) return false;
return document.body.getAttribute('data-ui-version') === 'v2';
};
export const buildDriverManagerWorkbenchTheme = (darkMode: boolean, _opacity: number): DriverManagerWorkbenchTheme => {
// ─── v2 palette ──────────────────────────────────────────────
if (isV2()) {
if (darkMode) {
return {
isDark: true,
pageBg: '#161a21',
sectionBg: '#1b1f27',
sectionBorder: '0.5px solid rgba(255,255,255,0.06)',
cardBg: '#161a21',
cardBorder: '0.5px solid rgba(255,255,255,0.10)',
cardWarningBorder: '0.5px solid rgba(245, 158, 11, 0.36)',
cardReadyBorder: '0.5px solid rgba(34, 197, 94, 0.36)',
statBg: '#1b1f27',
statBorder: '0.5px solid rgba(255,255,255,0.06)',
updateNoteBg: 'rgba(245, 158, 11, 0.10)',
updateNoteBorder: '0.5px solid rgba(245, 158, 11, 0.30)',
mutedText: '#80868f',
titleText: '#f1f3f5',
warningText: '#f59e0b',
};
}
return {
isDark: false,
pageBg: '#ffffff',
sectionBg: '#fafaf8',
sectionBorder: '0.5px solid rgba(15,23,42,0.08)',
cardBg: '#ffffff',
cardBorder: '0.5px solid rgba(15,23,42,0.12)',
cardWarningBorder: '0.5px solid rgba(217, 119, 6, 0.32)',
cardReadyBorder: '0.5px solid rgba(22, 163, 74, 0.28)',
statBg: '#fafaf8',
statBorder: '0.5px solid rgba(15,23,42,0.08)',
updateNoteBg: 'rgba(217, 119, 6, 0.08)',
updateNoteBorder: '0.5px solid rgba(217, 119, 6, 0.24)',
mutedText: '#6b7280',
titleText: '#0c1322',
warningText: '#d97706',
};
}
// ─── legacy palette ──────────────────────────────────────────
if (darkMode) {
const darkSurface = 'rgb(31, 31, 31)';
return {
isDark: true,
pageBg: darkSurface,
sectionBg: darkSurface,
sectionBorder: '1px solid rgba(255, 255, 255, 0.08)',
cardBg: darkSurface,
cardBorder: '1px solid rgba(255, 255, 255, 0.08)',
cardWarningBorder: '1px solid rgba(250, 173, 20, 0.35)',
cardReadyBorder: '1px solid rgba(82, 196, 26, 0.22)',
statBg: darkSurface,
statBorder: '1px solid rgba(255, 255, 255, 0.08)',
updateNoteBg: darkSurface,
updateNoteBorder: '1px solid rgba(250, 173, 20, 0.24)',
mutedText: 'rgba(255, 255, 255, 0.62)',
titleText: '#f5f7ff',
warningText: '#f6c453',
};
}
const lightSurface = 'rgb(255, 255, 255)';
return {
isDark: false,
pageBg: lightSurface,
sectionBg: lightSurface,
sectionBorder: '1px solid rgba(5, 5, 5, 0.08)',
cardBg: lightSurface,
cardBorder: '1px solid rgba(5, 5, 5, 0.08)',
cardWarningBorder: '1px solid rgba(250, 173, 20, 0.35)',
cardReadyBorder: '1px solid rgba(82, 196, 26, 0.22)',
statBg: lightSurface,
statBorder: '1px solid rgba(5, 5, 5, 0.08)',
updateNoteBg: lightSurface,
updateNoteBorder: '1px solid rgba(250, 173, 20, 0.24)',
mutedText: 'rgba(5, 5, 5, 0.62)',
titleText: 'rgba(5, 5, 5, 0.92)',
warningText: '#d48806',
};
};