feat: implement new layout components and routing structure

- Added HeaderLayout component for the application header.
- Introduced KeepAliveViewport for managing tab states and rendering.
- Created TabNav for tab navigation with animated indicator.
- Removed old Tabs component in favor of new layout structure.
- Updated routing with AppRouter and defined appTabs for navigation.
- Enhanced theme context to manage dark mode styles.
- Added new UI components: Badge, Button, Separator, and Tabs.
- Refactored pages to utilize new layout components and improve responsiveness.
- Updated global styles for better theming and layout consistency.
- Introduced TypeScript path aliases for cleaner imports.
This commit is contained in:
ash66
2026-05-25 16:19:18 +08:00
parent 10a034e294
commit 987cc097da
43 changed files with 5099 additions and 265 deletions

View File

@@ -1,8 +1,9 @@
@import url('https://fonts.googleapis.com/css2?family=TeleNeo:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');
@import "tw-animate-css";
@import "tailwindcss";
@custom-variant dark (&:is(.dark *));
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Light mode (default) */
:root {
@@ -19,6 +20,38 @@
--t-orange: #ff7700;
--t-accent-glow: rgba(226,0,116,0.08);
--t-pattern-opacity: 0.04;
--background: var(--t-bg);
--foreground: var(--t-text);
--card: var(--t-bg-card);
--card-foreground: var(--t-text);
--popover: var(--t-bg-card);
--popover-foreground: var(--t-text);
--primary: #e20074;
--primary-foreground: #ffffff;
--secondary: var(--t-bg-hover);
--secondary-foreground: var(--t-text);
--muted: var(--t-bg-hover);
--muted-foreground: var(--t-text3);
--accent: rgba(226, 0, 116, 0.08);
--accent-foreground: #e20074;
--destructive: #ff4444;
--border: var(--t-border);
--input: var(--t-border);
--ring: rgba(226, 0, 116, 0.35);
--chart-1: #e20074;
--chart-2: #be0060;
--chart-3: #00b89c;
--chart-4: #ff7700;
--chart-5: #4a4a5a;
--radius: 0.625rem;
--sidebar: var(--t-bg-card);
--sidebar-foreground: var(--t-text);
--sidebar-primary: #e20074;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: var(--t-bg-hover);
--sidebar-accent-foreground: var(--t-text);
--sidebar-border: var(--t-border);
--sidebar-ring: rgba(226, 0, 116, 0.35);
}
/* Dark mode */
@@ -36,6 +69,37 @@
--t-orange: #ff8800;
--t-accent-glow: rgba(226,0,116,0.12);
--t-pattern-opacity: 0.03;
--background: var(--t-bg);
--foreground: var(--t-text);
--card: var(--t-bg-card);
--card-foreground: var(--t-text);
--popover: var(--t-bg-card);
--popover-foreground: var(--t-text);
--primary: #e20074;
--primary-foreground: #ffffff;
--secondary: var(--t-bg-hover);
--secondary-foreground: var(--t-text);
--muted: var(--t-bg-hover);
--muted-foreground: var(--t-text3);
--accent: rgba(226, 0, 116, 0.14);
--accent-foreground: #ff7abf;
--destructive: #ff4444;
--border: var(--t-border);
--input: var(--t-border-light);
--ring: rgba(226, 0, 116, 0.45);
--chart-1: #e20074;
--chart-2: #f04090;
--chart-3: #00d4aa;
--chart-4: #ff8800;
--chart-5: #c0c0d0;
--sidebar: var(--t-bg-card);
--sidebar-foreground: var(--t-text);
--sidebar-primary: #e20074;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: var(--t-bg-hover);
--sidebar-accent-foreground: var(--t-text);
--sidebar-border: var(--t-border);
--sidebar-ring: rgba(226, 0, 116, 0.45);
}
/* Base styles */
@@ -100,6 +164,11 @@ button, input {
transition: none;
}
/* Shell navigation manages its own transition timing. */
[data-shell-tab='true'] {
transition: color 0.2s ease-out;
}
/* T-Systems Button Style */
.t-btn,
.t-btn:hover {
@@ -271,4 +340,60 @@ button, input {
.gradient-accent-hover {
background: linear-gradient(135deg, #f0208a 0%, #d01070 100%);
}
}
}
@theme inline {
--font-heading: 'TeleNeo', 'Segoe UI', system-ui, sans-serif;
--font-sans: 'TeleNeo', 'Segoe UI', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
--color-sidebar-ring: var(--sidebar-ring);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar: var(--sidebar);
--color-chart-5: var(--chart-5);
--color-chart-4: var(--chart-4);
--color-chart-3: var(--chart-3);
--color-chart-2: var(--chart-2);
--color-chart-1: var(--chart-1);
--color-ring: var(--ring);
--color-input: var(--input);
--color-border: var(--border);
--color-destructive: var(--destructive);
--color-accent-foreground: var(--accent-foreground);
--color-accent: var(--accent);
--color-muted-foreground: var(--muted-foreground);
--color-muted: var(--muted);
--color-secondary-foreground: var(--secondary-foreground);
--color-secondary: var(--secondary);
--color-primary-foreground: var(--primary-foreground);
--color-primary: var(--primary);
--color-popover-foreground: var(--popover-foreground);
--color-popover: var(--popover);
--color-card-foreground: var(--card-foreground);
--color-card: var(--card);
--color-foreground: var(--foreground);
--color-background: var(--background);
--radius-sm: calc(var(--radius) * 0.6);
--radius-md: calc(var(--radius) * 0.8);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) * 1.4);
--radius-2xl: calc(var(--radius) * 1.8);
--radius-3xl: calc(var(--radius) * 2.2);
--radius-4xl: calc(var(--radius) * 2.6);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
html {
@apply font-sans;
}
}