@medalsocial/meda 0.3.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/dist/brand/index.d.ts +2 -0
- package/dist/brand/index.js +1 -0
- package/dist/brand/medal-social-mark.d.ts +7 -0
- package/dist/brand/medal-social-mark.js +6 -0
- package/dist/brand/public.d.ts +2 -0
- package/dist/brand/public.js +1 -0
- package/dist/chat/latency-badge.js +7 -3
- package/dist/chat/latency-breakdown.js +1 -1
- package/dist/chat/tool-call-block.js +1 -1
- package/dist/chat/turn-card.js +4 -2
- package/dist/components/ui/command.d.ts +19 -0
- package/dist/components/ui/command.js +37 -0
- package/dist/components/ui/dialog.d.ts +26 -0
- package/dist/components/ui/dialog.js +39 -0
- package/dist/components/ui/drawer.d.ts +16 -0
- package/dist/components/ui/drawer.js +35 -0
- package/dist/components/ui/dropdown-menu.d.ts +32 -0
- package/dist/components/ui/dropdown-menu.js +68 -0
- package/dist/components/ui/tooltip.d.ts +6 -0
- package/dist/components/ui/tooltip.js +17 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.js +5 -0
- package/dist/marketing/index.d.ts +5 -0
- package/dist/marketing/index.js +4 -0
- package/dist/marketing/marketing-callout.d.ts +2 -0
- package/dist/marketing/marketing-callout.js +8 -0
- package/dist/marketing/marketing-contact.d.ts +2 -0
- package/dist/marketing/marketing-contact.js +19 -0
- package/dist/marketing/marketing-cta-list.d.ts +2 -0
- package/dist/marketing/marketing-cta-list.js +21 -0
- package/dist/marketing/marketing-lead-magnet.d.ts +2 -0
- package/dist/marketing/marketing-lead-magnet.js +9 -0
- package/dist/marketing/public.d.ts +1 -0
- package/dist/marketing/public.js +1 -0
- package/dist/marketing/types.d.ts +67 -0
- package/dist/marketing/types.js +1 -0
- package/dist/marketing/utils.d.ts +2 -0
- package/dist/marketing/utils.js +6 -0
- package/dist/panel/inspector-json.js +5 -3
- package/dist/shell/app-shell-auth.d.ts +5 -0
- package/dist/shell/app-shell-auth.js +50 -0
- package/dist/shell/app-shell-chat.d.ts +6 -0
- package/dist/shell/app-shell-chat.js +9 -0
- package/dist/shell/app-shell-workspace.d.ts +10 -0
- package/dist/shell/app-shell-workspace.js +55 -0
- package/dist/shell/app-shell.d.ts +25 -0
- package/dist/shell/app-shell.js +26 -0
- package/dist/shell/command-palette.d.ts +23 -0
- package/dist/shell/command-palette.js +138 -0
- package/dist/shell/context-rail.d.ts +31 -0
- package/dist/shell/context-rail.js +81 -0
- package/dist/shell/extras/index.d.ts +4 -0
- package/dist/shell/extras/index.js +4 -0
- package/dist/shell/{shell-desktop-panel-dock.js → extras/shell-desktop-panel-dock.js} +1 -1
- package/dist/shell/extras/types.d.ts +64 -0
- package/dist/shell/extras/types.js +2 -0
- package/dist/shell/icon-rail.d.ts +29 -0
- package/dist/shell/icon-rail.js +38 -0
- package/dist/shell/index.d.ts +19 -15
- package/dist/shell/index.js +30 -15
- package/dist/shell/internal/mobile-bottom-nav.d.ts +23 -0
- package/dist/shell/internal/mobile-bottom-nav.js +79 -0
- package/dist/shell/internal/mobile-drawers.d.ts +26 -0
- package/dist/shell/internal/mobile-drawers.js +76 -0
- package/dist/shell/internal/mobile-header.d.ts +23 -0
- package/dist/shell/internal/mobile-header.js +22 -0
- package/dist/shell/layout-state.d.ts +32 -0
- package/dist/shell/layout-state.js +98 -0
- package/dist/shell/motion.d.ts +22 -0
- package/dist/shell/motion.js +19 -0
- package/dist/shell/resizable-shell.d.ts +45 -0
- package/dist/shell/resizable-shell.js +15 -0
- package/dist/shell/right-panel.d.ts +15 -0
- package/dist/shell/right-panel.js +126 -0
- package/dist/shell/shell-header.d.ts +10 -9
- package/dist/shell/shell-header.js +57 -14
- package/dist/shell/shell-layout-utils.d.ts +2 -2
- package/dist/shell/shell-main.d.ts +8 -0
- package/dist/shell/shell-main.js +11 -0
- package/dist/shell/shell-provider.d.ts +65 -0
- package/dist/shell/shell-provider.js +152 -0
- package/dist/shell/shell-route-utils.d.ts +1 -1
- package/dist/shell/{navigation-area.d.ts → theme-next-themes.d.ts} +1 -1
- package/dist/shell/theme-next-themes.js +24 -0
- package/dist/shell/theme.d.ts +9 -0
- package/dist/shell/theme.js +58 -0
- package/dist/shell/types.d.ts +73 -38
- package/dist/shell/types.js +1 -0
- package/dist/shell/use-shell-viewport.d.ts +2 -0
- package/dist/shell/use-shell-viewport.js +40 -0
- package/dist/shell/utils.d.ts +1 -1
- package/dist/{styles.css → styles/globals.css} +2 -2
- package/dist/styles/theme.css +147 -0
- package/dist/styles/tokens.css +338 -0
- package/dist/timeline/date-switcher.js +3 -1
- package/dist/timeline/event-card.js +5 -13
- package/dist/timeline/live-indicator.js +3 -1
- package/dist/timeline/scrub-bar.js +8 -9
- package/dist/timeline/timeline-rail.js +6 -4
- package/dist/timeline/timeline-tape.js +7 -8
- package/dist/voice/voice-level.js +3 -1
- package/dist/voice/voice-orb-scene.js +1 -0
- package/dist/voice/voice-orb.js +9 -11
- package/dist/voice/voice-status-pill.js +4 -9
- package/package.json +57 -6
- package/dist/shell/navigation-area.js +0 -4
- package/dist/shell/public.d.ts +0 -2
- package/dist/shell/public.js +0 -1
- package/dist/shell/shell-app-rail.d.ts +0 -18
- package/dist/shell/shell-app-rail.js +0 -27
- package/dist/shell/shell-frame.d.ts +0 -13
- package/dist/shell/shell-frame.js +0 -4
- package/dist/shell/shell-module-nav.d.ts +0 -29
- package/dist/shell/shell-module-nav.js +0 -16
- package/dist/shell/shell-panel-rail.d.ts +0 -9
- package/dist/shell/shell-panel-rail.js +0 -17
- package/dist/shell/shell-state.d.ts +0 -39
- package/dist/shell/shell-state.js +0 -135
- /package/dist/shell/{shell-desktop-panel-dock.d.ts → extras/shell-desktop-panel-dock.d.ts} +0 -0
- /package/dist/shell/{shell-scrollable-content.d.ts → extras/shell-scrollable-content.d.ts} +0 -0
- /package/dist/shell/{shell-scrollable-content.js → extras/shell-scrollable-content.js} +0 -0
- /package/dist/shell/{shell-tab-bar.d.ts → extras/shell-tab-bar.d.ts} +0 -0
- /package/dist/shell/{shell-tab-bar.js → extras/shell-tab-bar.js} +0 -0
- /package/dist/shell/{workbench-layout.d.ts → extras/workbench-layout.d.ts} +0 -0
- /package/dist/shell/{workbench-layout.js → extras/workbench-layout.js} +0 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { ThemeAdapter } from './types.js';
|
|
3
|
+
/** @internal – used by theme adapters; not part of the public API. */
|
|
4
|
+
export declare const ThemeCtx: import("react").Context<ThemeAdapter | null>;
|
|
5
|
+
export declare function DefaultThemeProvider({ children }: {
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function useTheme(): ThemeAdapter;
|
|
9
|
+
export declare function ThemeToggle(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Monitor, Moon, Sun } from 'lucide-react';
|
|
4
|
+
import { createContext, useContext, useEffect, useState } from 'react';
|
|
5
|
+
const NEXT = {
|
|
6
|
+
light: 'dark',
|
|
7
|
+
dark: 'system',
|
|
8
|
+
system: 'light',
|
|
9
|
+
};
|
|
10
|
+
const ICON = {
|
|
11
|
+
light: Sun,
|
|
12
|
+
dark: Moon,
|
|
13
|
+
system: Monitor,
|
|
14
|
+
};
|
|
15
|
+
const LABEL = {
|
|
16
|
+
light: 'Switch to dark theme',
|
|
17
|
+
dark: 'Switch to system theme',
|
|
18
|
+
system: 'Switch to light theme',
|
|
19
|
+
};
|
|
20
|
+
/** @internal – used by theme adapters; not part of the public API. */
|
|
21
|
+
export const ThemeCtx = createContext(null);
|
|
22
|
+
export function DefaultThemeProvider({ children }) {
|
|
23
|
+
const [theme, setThemeState] = useState('system');
|
|
24
|
+
const [resolvedTheme, setResolvedTheme] = useState('light');
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const saved = window.localStorage.getItem('meda:theme');
|
|
27
|
+
if (saved === 'light' || saved === 'dark' || saved === 'system') {
|
|
28
|
+
setThemeState(saved);
|
|
29
|
+
}
|
|
30
|
+
}, []);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
const mq = window.matchMedia('(prefers-color-scheme: dark)');
|
|
33
|
+
const apply = () => {
|
|
34
|
+
const resolved = theme === 'system' ? (mq.matches ? 'dark' : 'light') : theme;
|
|
35
|
+
setResolvedTheme(resolved);
|
|
36
|
+
document.documentElement.classList.toggle('dark', resolved === 'dark');
|
|
37
|
+
};
|
|
38
|
+
apply();
|
|
39
|
+
mq.addEventListener('change', apply);
|
|
40
|
+
return () => mq.removeEventListener('change', apply);
|
|
41
|
+
}, [theme]);
|
|
42
|
+
const setTheme = (t) => {
|
|
43
|
+
setThemeState(t);
|
|
44
|
+
window.localStorage.setItem('meda:theme', t);
|
|
45
|
+
};
|
|
46
|
+
return (_jsx(ThemeCtx.Provider, { value: { theme, setTheme, resolvedTheme }, children: children }));
|
|
47
|
+
}
|
|
48
|
+
export function useTheme() {
|
|
49
|
+
const v = useContext(ThemeCtx);
|
|
50
|
+
if (!v)
|
|
51
|
+
throw new Error('useTheme must be used inside <MedaShellProvider>');
|
|
52
|
+
return v;
|
|
53
|
+
}
|
|
54
|
+
export function ThemeToggle() {
|
|
55
|
+
const { theme, setTheme } = useTheme();
|
|
56
|
+
const Icon = ICON[theme];
|
|
57
|
+
return (_jsx("button", { type: "button", "aria-label": LABEL[theme], onClick: () => setTheme(NEXT[theme]), children: _jsx(Icon, { "aria-hidden": "true" }) }));
|
|
58
|
+
}
|
package/dist/shell/types.d.ts
CHANGED
|
@@ -1,64 +1,99 @@
|
|
|
1
1
|
import type { LucideIcon } from 'lucide-react';
|
|
2
2
|
import type { ReactNode } from 'react';
|
|
3
|
-
export
|
|
4
|
-
export type ShellViewportBand = 'mobile' | 'tablet' | 'desktop' | 'wide' | 'ultrawide';
|
|
5
|
-
export interface ShellTab {
|
|
3
|
+
export interface AppDefinition {
|
|
6
4
|
id: string;
|
|
7
5
|
label: string;
|
|
8
|
-
|
|
9
|
-
icon?: LucideIcon;
|
|
6
|
+
icon: LucideIcon;
|
|
10
7
|
}
|
|
11
|
-
export interface
|
|
12
|
-
|
|
8
|
+
export interface WorkspaceDefinition {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
icon: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export interface ContextModule {
|
|
14
|
+
id: string;
|
|
13
15
|
label: string;
|
|
14
16
|
description?: string;
|
|
15
|
-
|
|
16
|
-
shortcut?: string;
|
|
17
|
+
items: ContextItem[];
|
|
17
18
|
}
|
|
18
|
-
export interface
|
|
19
|
-
|
|
19
|
+
export interface ContextItem {
|
|
20
|
+
id: string;
|
|
20
21
|
label: string;
|
|
21
22
|
icon: LucideIcon;
|
|
23
|
+
to: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
shortcut?: string;
|
|
22
26
|
}
|
|
23
|
-
export interface
|
|
27
|
+
export interface PanelView {
|
|
24
28
|
id: string;
|
|
25
29
|
label: string;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
headerTabs?: ShellTab[];
|
|
30
|
+
icon: LucideIcon;
|
|
31
|
+
render: (ctx: ShellRenderContext) => ReactNode;
|
|
29
32
|
}
|
|
30
|
-
export
|
|
33
|
+
export type PanelMode = 'closed' | 'panel' | 'expanded' | 'fullscreen';
|
|
34
|
+
export type ShellMainLayout = 'workspace' | 'centered' | 'fullbleed';
|
|
35
|
+
export type ShellViewport = 'mobile' | 'tablet' | 'desktop' | 'wide' | 'ultrawide';
|
|
36
|
+
export interface MobileBottomNavItem {
|
|
31
37
|
id: string;
|
|
32
|
-
label: string;
|
|
38
|
+
label: string | (() => string);
|
|
33
39
|
icon: LucideIcon;
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
opens: 'menu-drawer' | 'module-drawer' | 'panels-drawer' | 'ai-drawer' | ((close: () => void) => ReactNode);
|
|
41
|
+
}
|
|
42
|
+
export interface ShellRenderContext {
|
|
43
|
+
workspaceId: string;
|
|
44
|
+
appId: string;
|
|
45
|
+
}
|
|
46
|
+
export interface ShellLinkRenderArgs {
|
|
47
|
+
item: ContextItem;
|
|
48
|
+
isActive: boolean;
|
|
49
|
+
className: string;
|
|
50
|
+
children: ReactNode;
|
|
36
51
|
}
|
|
37
|
-
export interface
|
|
52
|
+
export interface CommandDefinition {
|
|
38
53
|
id: string;
|
|
39
54
|
label: string;
|
|
40
|
-
|
|
41
|
-
icon: LucideIcon;
|
|
55
|
+
icon?: LucideIcon;
|
|
42
56
|
group: string;
|
|
43
57
|
shortcut?: string;
|
|
58
|
+
run: () => void | Promise<void>;
|
|
44
59
|
}
|
|
45
|
-
export interface
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
60
|
+
export interface ThemeAdapter {
|
|
61
|
+
theme: 'light' | 'dark' | 'system';
|
|
62
|
+
setTheme: (t: 'light' | 'dark' | 'system') => void;
|
|
63
|
+
resolvedTheme: 'light' | 'dark';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* AppShell renders one of three shell modes:
|
|
67
|
+
* - `auth` — split-screen marketing + form (signed-out)
|
|
68
|
+
* - `workspace` — header + rails + main + panel (signed-in work surface;
|
|
69
|
+
* collapses to mobile header + bottom nav + drawers on mobile)
|
|
70
|
+
* - `chat` — transcript-dominant layout (conversational AI)
|
|
71
|
+
*/
|
|
72
|
+
export type AppShellVariant = 'auth' | 'workspace' | 'chat';
|
|
73
|
+
/** IconRail configuration for `<AppShell variant="workspace">`. */
|
|
74
|
+
export interface AppShellIconRailConfig {
|
|
75
|
+
mainItems: import('./icon-rail.js').IconRailItem[];
|
|
76
|
+
utilityItems?: import('./icon-rail.js').IconRailItem[];
|
|
77
|
+
footer?: ReactNode;
|
|
78
|
+
activeId?: string;
|
|
49
79
|
}
|
|
50
|
-
|
|
51
|
-
export interface
|
|
52
|
-
|
|
53
|
-
|
|
80
|
+
/** ContextRail configuration for `<AppShell variant="workspace">`. */
|
|
81
|
+
export interface AppShellContextRailConfig {
|
|
82
|
+
appId: string;
|
|
83
|
+
module: ContextModule;
|
|
84
|
+
activeItemId?: string;
|
|
54
85
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
86
|
+
/** RightPanel configuration for `<AppShell variant="workspace">`. */
|
|
87
|
+
export interface AppShellRightPanelConfig {
|
|
88
|
+
panelViews: PanelView[];
|
|
89
|
+
defaultView?: string;
|
|
58
90
|
}
|
|
59
|
-
export interface
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
91
|
+
export interface AppShellAuthConfig {
|
|
92
|
+
title: ReactNode;
|
|
93
|
+
description?: ReactNode;
|
|
94
|
+
brandName?: ReactNode;
|
|
95
|
+
brandMark?: ReactNode;
|
|
96
|
+
eyebrow?: ReactNode;
|
|
97
|
+
preview?: ReactNode;
|
|
98
|
+
actions?: ReactNode;
|
|
64
99
|
}
|
package/dist/shell/types.js
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
const BREAKPOINTS = {
|
|
4
|
+
mobile: '(max-width: 767px)',
|
|
5
|
+
tablet: '(min-width: 768px) and (max-width: 1023px)',
|
|
6
|
+
desktop: '(min-width: 1024px) and (max-width: 1279px)',
|
|
7
|
+
wide: '(min-width: 1280px) and (max-width: 1535px)',
|
|
8
|
+
ultrawide: '(min-width: 1536px)',
|
|
9
|
+
};
|
|
10
|
+
function detectViewport() {
|
|
11
|
+
if (typeof window === 'undefined')
|
|
12
|
+
return 'desktop';
|
|
13
|
+
for (const [band, query] of Object.entries(BREAKPOINTS)) {
|
|
14
|
+
if (window.matchMedia(query).matches)
|
|
15
|
+
return band;
|
|
16
|
+
}
|
|
17
|
+
return 'desktop';
|
|
18
|
+
}
|
|
19
|
+
export function useShellViewport() {
|
|
20
|
+
// Initial state is always 'desktop' so server-rendered output matches the
|
|
21
|
+
// client's first paint — actual band resolves in the post-mount effect.
|
|
22
|
+
const [viewport, setViewport] = useState('desktop');
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
setViewport(detectViewport());
|
|
25
|
+
const cleanups = Object.entries(BREAKPOINTS).map(([band, query]) => {
|
|
26
|
+
const mql = window.matchMedia(query);
|
|
27
|
+
const onChange = () => {
|
|
28
|
+
if (mql.matches)
|
|
29
|
+
setViewport(band);
|
|
30
|
+
};
|
|
31
|
+
mql.addEventListener('change', onChange);
|
|
32
|
+
return () => mql.removeEventListener('change', onChange);
|
|
33
|
+
});
|
|
34
|
+
return () => {
|
|
35
|
+
for (const cleanup of cleanups)
|
|
36
|
+
cleanup();
|
|
37
|
+
};
|
|
38
|
+
}, []);
|
|
39
|
+
return viewport;
|
|
40
|
+
}
|
package/dist/shell/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ShellCommandDefinition, ShellModuleDefinition, ShellPanelDefinition } from './types.js';
|
|
1
|
+
import type { ShellCommandDefinition, ShellModuleDefinition, ShellPanelDefinition } from './extras/types.js';
|
|
2
2
|
export interface ShellPanelCollection {
|
|
3
3
|
globalViews: ShellPanelDefinition[];
|
|
4
4
|
moduleViews: ShellPanelDefinition[];
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
@import "./tokens.css";
|
|
2
|
+
|
|
3
|
+
@custom-variant dark (&:is(.dark *, [data-theme="dark"] *));
|
|
4
|
+
|
|
5
|
+
@theme inline {
|
|
6
|
+
/* Color primitives — exposed as Tailwind color scales */
|
|
7
|
+
|
|
8
|
+
/* Brand (purple) — 11 stops */
|
|
9
|
+
--color-brand-50: var(--color-brand-50);
|
|
10
|
+
--color-brand-100: var(--color-brand-100);
|
|
11
|
+
--color-brand-200: var(--color-brand-200);
|
|
12
|
+
--color-brand-300: var(--color-brand-300);
|
|
13
|
+
--color-brand-400: var(--color-brand-400);
|
|
14
|
+
--color-brand-500: var(--color-brand-500);
|
|
15
|
+
--color-brand-600: var(--color-brand-600);
|
|
16
|
+
--color-brand-700: var(--color-brand-700);
|
|
17
|
+
--color-brand-800: var(--color-brand-800);
|
|
18
|
+
--color-brand-900: var(--color-brand-900);
|
|
19
|
+
--color-brand-950: var(--color-brand-950);
|
|
20
|
+
|
|
21
|
+
/* Neutral (zinc-aligned) — 11 stops */
|
|
22
|
+
--color-neutral-50: var(--color-neutral-50);
|
|
23
|
+
--color-neutral-100: var(--color-neutral-100);
|
|
24
|
+
--color-neutral-200: var(--color-neutral-200);
|
|
25
|
+
--color-neutral-300: var(--color-neutral-300);
|
|
26
|
+
--color-neutral-400: var(--color-neutral-400);
|
|
27
|
+
--color-neutral-500: var(--color-neutral-500);
|
|
28
|
+
--color-neutral-600: var(--color-neutral-600);
|
|
29
|
+
--color-neutral-700: var(--color-neutral-700);
|
|
30
|
+
--color-neutral-800: var(--color-neutral-800);
|
|
31
|
+
--color-neutral-900: var(--color-neutral-900);
|
|
32
|
+
--color-neutral-950: var(--color-neutral-950);
|
|
33
|
+
|
|
34
|
+
/* Error (rose) — 10 stops */
|
|
35
|
+
--color-error-50: var(--color-error-50);
|
|
36
|
+
--color-error-100: var(--color-error-100);
|
|
37
|
+
--color-error-200: var(--color-error-200);
|
|
38
|
+
--color-error-300: var(--color-error-300);
|
|
39
|
+
--color-error-400: var(--color-error-400);
|
|
40
|
+
--color-error-500: var(--color-error-500);
|
|
41
|
+
--color-error-600: var(--color-error-600);
|
|
42
|
+
--color-error-700: var(--color-error-700);
|
|
43
|
+
--color-error-800: var(--color-error-800);
|
|
44
|
+
--color-error-900: var(--color-error-900);
|
|
45
|
+
|
|
46
|
+
/* Info (blue) — 10 stops */
|
|
47
|
+
--color-info-50: var(--color-info-50);
|
|
48
|
+
--color-info-100: var(--color-info-100);
|
|
49
|
+
--color-info-200: var(--color-info-200);
|
|
50
|
+
--color-info-300: var(--color-info-300);
|
|
51
|
+
--color-info-400: var(--color-info-400);
|
|
52
|
+
--color-info-500: var(--color-info-500);
|
|
53
|
+
--color-info-600: var(--color-info-600);
|
|
54
|
+
--color-info-700: var(--color-info-700);
|
|
55
|
+
--color-info-800: var(--color-info-800);
|
|
56
|
+
--color-info-900: var(--color-info-900);
|
|
57
|
+
|
|
58
|
+
/* Success (teal) — 10 stops */
|
|
59
|
+
--color-success-50: var(--color-success-50);
|
|
60
|
+
--color-success-100: var(--color-success-100);
|
|
61
|
+
--color-success-200: var(--color-success-200);
|
|
62
|
+
--color-success-300: var(--color-success-300);
|
|
63
|
+
--color-success-400: var(--color-success-400);
|
|
64
|
+
--color-success-500: var(--color-success-500);
|
|
65
|
+
--color-success-600: var(--color-success-600);
|
|
66
|
+
--color-success-700: var(--color-success-700);
|
|
67
|
+
--color-success-800: var(--color-success-800);
|
|
68
|
+
--color-success-900: var(--color-success-900);
|
|
69
|
+
|
|
70
|
+
/* Warning (amber) — 10 stops */
|
|
71
|
+
--color-warning-50: var(--color-warning-50);
|
|
72
|
+
--color-warning-100: var(--color-warning-100);
|
|
73
|
+
--color-warning-200: var(--color-warning-200);
|
|
74
|
+
--color-warning-300: var(--color-warning-300);
|
|
75
|
+
--color-warning-400: var(--color-warning-400);
|
|
76
|
+
--color-warning-500: var(--color-warning-500);
|
|
77
|
+
--color-warning-600: var(--color-warning-600);
|
|
78
|
+
--color-warning-700: var(--color-warning-700);
|
|
79
|
+
--color-warning-800: var(--color-warning-800);
|
|
80
|
+
--color-warning-900: var(--color-warning-900);
|
|
81
|
+
|
|
82
|
+
/* shadcn semantic colors (mode-flipped at runtime via :root / .dark) */
|
|
83
|
+
--color-background: var(--background);
|
|
84
|
+
--color-foreground: var(--foreground);
|
|
85
|
+
--color-card: var(--card);
|
|
86
|
+
--color-card-foreground: var(--card-foreground);
|
|
87
|
+
--color-popover: var(--popover);
|
|
88
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
89
|
+
--color-primary: var(--primary);
|
|
90
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
91
|
+
--color-secondary: var(--secondary);
|
|
92
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
93
|
+
--color-muted: var(--muted);
|
|
94
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
95
|
+
--color-accent: var(--accent);
|
|
96
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
97
|
+
--color-destructive: var(--destructive);
|
|
98
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
99
|
+
--color-border: var(--border);
|
|
100
|
+
--color-input: var(--input);
|
|
101
|
+
--color-ring: var(--ring);
|
|
102
|
+
|
|
103
|
+
/* Status semantic */
|
|
104
|
+
--color-success: var(--success);
|
|
105
|
+
--color-success-foreground: var(--success-foreground);
|
|
106
|
+
--color-warning: var(--warning);
|
|
107
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
108
|
+
--color-info: var(--info);
|
|
109
|
+
--color-info-foreground: var(--info-foreground);
|
|
110
|
+
--color-danger: var(--danger);
|
|
111
|
+
|
|
112
|
+
/* Sidebar */
|
|
113
|
+
--color-sidebar: var(--sidebar);
|
|
114
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
115
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
116
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
117
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
118
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
119
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
120
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
121
|
+
|
|
122
|
+
/* Chart */
|
|
123
|
+
--color-chart-1: var(--chart-1);
|
|
124
|
+
--color-chart-2: var(--chart-2);
|
|
125
|
+
--color-chart-3: var(--chart-3);
|
|
126
|
+
--color-chart-4: var(--chart-4);
|
|
127
|
+
--color-chart-5: var(--chart-5);
|
|
128
|
+
|
|
129
|
+
/* Shell semantic colors */
|
|
130
|
+
--color-shell-header: var(--shell-header);
|
|
131
|
+
--color-shell-rail: var(--shell-rail);
|
|
132
|
+
--color-shell-context: var(--shell-context);
|
|
133
|
+
--color-shell-main: var(--shell-main);
|
|
134
|
+
--color-shell-panel: var(--shell-panel);
|
|
135
|
+
--color-shell-border: var(--shell-border);
|
|
136
|
+
|
|
137
|
+
/* Shell sizing → spacing scale */
|
|
138
|
+
--spacing-shell-header: var(--shell-header-height);
|
|
139
|
+
--spacing-shell-rail: var(--shell-rail-width);
|
|
140
|
+
--spacing-shell-context: var(--shell-context-default);
|
|
141
|
+
--spacing-shell-panel: var(--shell-panel-default);
|
|
142
|
+
--spacing-shell-bottom-nav: var(--shell-bottom-nav-height);
|
|
143
|
+
|
|
144
|
+
/* Font families — Geist + Geist Mono only (no Inter) */
|
|
145
|
+
--font-sans: var(--font-family-sans);
|
|
146
|
+
--font-mono: var(--font-family-mono);
|
|
147
|
+
}
|