@wildo-ai/presets-components 1.1.0 → 1.1.2
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/dist/esm/components/actions/action-button.d.ts +1 -4
- package/dist/esm/components/actions/action-button.d.ts.map +1 -1
- package/dist/esm/components/actions/action-button.js +21 -5
- package/dist/esm/components/actions/action-button.js.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.js +7 -3
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.js +10 -2
- package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.js +10 -2
- package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.js +52 -5
- package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
- package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
- package/dist/esm/components/data-display/description-list.js +10 -7
- package/dist/esm/components/data-display/description-list.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.js +3 -0
- package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.js +2 -2
- package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.js +8 -2
- package/dist/esm/components/navigation/app-level/menu-user-org.js.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.js +32 -15
- package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.js +2 -2
- package/dist/esm/components/overlays/containers/sheet.js.map +1 -1
- package/dist/esm/components/sections/accordion.d.ts.map +1 -1
- package/dist/esm/components/sections/accordion.js +43 -13
- package/dist/esm/components/sections/accordion.js.map +1 -1
- package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
- package/dist/esm/components/sections/collapsible.js +17 -3
- package/dist/esm/components/sections/collapsible.js.map +1 -1
- package/dist/esm/components/sections/content-section.d.ts.map +1 -1
- package/dist/esm/components/sections/content-section.js +11 -7
- package/dist/esm/components/sections/content-section.js.map +1 -1
- package/dist/esm/components/sections/disclosure-nesting.d.ts +20 -0
- package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -0
- package/dist/esm/components/sections/disclosure-nesting.js +20 -0
- package/dist/esm/components/sections/disclosure-nesting.js.map +1 -0
- package/dist/esm/components/sections/tabs.d.ts.map +1 -1
- package/dist/esm/components/sections/tabs.js +141 -10
- package/dist/esm/components/sections/tabs.js.map +1 -1
- package/dist/esm/config/preset-kits.d.ts.map +1 -1
- package/dist/esm/config/preset-kits.js +0 -4
- package/dist/esm/config/preset-kits.js.map +1 -1
- package/dist/esm/config/preset-shell.d.ts.map +1 -1
- package/dist/esm/config/preset-shell.js +0 -4
- package/dist/esm/config/preset-shell.js.map +1 -1
- package/dist/esm/config/presets.d.ts.map +1 -1
- package/dist/esm/config/presets.js +0 -1
- package/dist/esm/config/presets.js.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.js +6 -6
- package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.js +8 -8
- package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.js +7 -7
- package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.js +7 -7
- package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.js +8 -8
- package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.js +9 -9
- package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
- package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
- package/dist/esm/themes/cozy.theme.js +8 -3
- package/dist/esm/themes/cozy.theme.js.map +1 -1
- package/dist/esm/themes/dense.theme.d.ts.map +1 -1
- package/dist/esm/themes/dense.theme.js +8 -5
- package/dist/esm/themes/dense.theme.js.map +1 -1
- package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
- package/dist/esm/themes/editorial.theme.js +8 -3
- package/dist/esm/themes/editorial.theme.js.map +1 -1
- package/dist/esm/themes/glass.theme.d.ts.map +1 -1
- package/dist/esm/themes/glass.theme.js +10 -4
- package/dist/esm/themes/glass.theme.js.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.js +8 -3
- package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
- package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
- package/dist/esm/themes/terminal.theme.js +8 -3
- package/dist/esm/themes/terminal.theme.js.map +1 -1
- package/dist/esm/themes/trading.theme.d.ts.map +1 -1
- package/dist/esm/themes/trading.theme.js +8 -3
- package/dist/esm/themes/trading.theme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/dist/esm/.builder.pid +0 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InteractiveVariant, SurfaceVariant, FormControlVariant, IndicatorVariant, SelectableVariant, TypographyVariant, SpacingSemantic, DesignTokenModeStrategy, DesignTokenValueType, } from '@wildo-ai/presets-components-models';
|
|
1
|
+
import { DividerVariant, InteractiveVariant, SurfaceVariant, FormControlVariant, IndicatorVariant, SelectableVariant, TypographyVariant, SpacingSemantic, DesignTokenModeStrategy, DesignTokenValueType, SKELETON_NEUTRAL_TINT, } from '@wildo-ai/presets-components-models';
|
|
2
2
|
function recipe(r) {
|
|
3
3
|
return { base: r.base, states: r.states ?? {}, sizes: r.sizes, motion: r.motion ?? {}, gesture: r.gesture, policy: r.policy };
|
|
4
4
|
}
|
|
@@ -466,11 +466,15 @@ const overlayBackdrop = recipe({
|
|
|
466
466
|
exit: TR_MOTION.backdropExit,
|
|
467
467
|
},
|
|
468
468
|
});
|
|
469
|
-
const divider =
|
|
469
|
+
const divider = {
|
|
470
|
+
[DividerVariant.DEFAULT]: recipe({ base: 'bg-foreground/15 shrink-0' }),
|
|
471
|
+
// Nested-disclosure guide: the theme's own divider material, as a left edge.
|
|
472
|
+
[DividerVariant.NESTING_GUIDE]: recipe({ base: 'border-s border-foreground/15' }),
|
|
473
|
+
};
|
|
470
474
|
const skeleton = recipe({
|
|
471
475
|
// Trading skeletons are LINEAR (no rounded corners) so they
|
|
472
476
|
// perfectly replace tabular cells while loading.
|
|
473
|
-
base:
|
|
477
|
+
base: `${SKELETON_NEUTRAL_TINT} animate-pulse ${TR.radius} motion-reduce:animate-none`,
|
|
474
478
|
});
|
|
475
479
|
const loadingSpinner = recipe({
|
|
476
480
|
base: 'text-primary animate-spin motion-reduce:animate-none',
|
|
@@ -497,6 +501,7 @@ const typography = {
|
|
|
497
501
|
h2: 'text-xl',
|
|
498
502
|
h3: 'text-base',
|
|
499
503
|
h4: 'text-sm',
|
|
504
|
+
h5: 'text-xs',
|
|
500
505
|
md: 'text-sm',
|
|
501
506
|
},
|
|
502
507
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trading.theme.js","sourceRoot":"","sources":["../../../../src/themes/trading.theme.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentStyleTheme, DesignTokenConfiguration } from '@wildo-ai/presets-components-models';\nimport {\n InteractiveVariant,\n SurfaceVariant,\n FormControlVariant,\n IndicatorVariant,\n SelectableVariant,\n TypographyVariant,\n SpacingSemantic,\n DesignTokenModeStrategy,\n DesignTokenValueType,\n} from '@wildo-ai/presets-components-models';\nimport type { UIBehaviorRecipe } from '@wildo-ai/presets-components-models';\n\nfunction recipe(r: Partial<UIBehaviorRecipe> & { base: string }): UIBehaviorRecipe {\n return { base: r.base, states: r.states ?? {}, sizes: r.sizes, motion: r.motion ?? {}, gesture: r.gesture, policy: r.policy };\n}\n\n// ============================================================\n// Trading theme\n//\n// Persona: trading desks, market data, ops/observability dashboards,\n// any UI where information density and glance-able status matter more\n// than aesthetics.\n// References: classic financial-data terminals (you know the one),\n// TradingView, IBKR, Refinitiv Eikon — without naming any specific\n// product. The \"amber-on-black, monospace, max-density\" tradition is\n// older than any single vendor (PLATO IV, Reuters Stockmaster, etc.).\n//\n// Design DNA:\n// - MONOSPACE EVERYTHING. Headings, body, indicators, code — all\n// IBM Plex Mono / JetBrains Mono. Fixed-width is the entire point:\n// numerics align column-wise, ticker tapes lock to grid.\n// - ULTRA-TIGHT density (h-6/h-7 control ladder, smallest in lineup).\n// A single screen needs to show twice as many rows as default.\n// - AMBER primary (`oklch(0.78 0.15 80)`) — the canonical \"data\n// terminal\" hue. No vendor owns the wavelength. Pairs with\n// near-black surfaces for the iconic \"amber phosphor\" look.\n// - SEMANTIC up/down green/red are non-negotiable: chartreuse-green\n// for \"tick-up\" (`oklch(0.78 0.22 145)`), hot red for \"tick-down\"\n// (`oklch(0.62 0.26 22)`). Wired through `success` / `destructive`\n// so existing semantic-indicator code Just Works in trading apps.\n// - SHARP corners (`rounded-none` baseline, `rounded-sm` on a few\n// overlays). Every pixel of vertical space matters; rounded\n// corners eat density and add no information.\n// - INSTANT motion (duration-instant, linear). Ticking data must\n// never animate — animations are for marketing pages, not for\n// a price changing 12 times per second.\n// - 1px hard borders, no shadows. Elevation is irrelevant; what\n// matters is GRID — every cell separated by a single hairline.\n// ============================================================\n\n// -- Shared constants --\n\nconst TR = {\n /** Ultra-thin grid line — the visual atom of a trading UI. */\n hairline: 'border border-foreground/15',\n edge: 'border border-foreground/25',\n /** Square corners by default. */\n radius: 'rounded-none',\n /** Tiny radius (2px) for overlays where pure squares feel too brutalist. */\n radiusXs: 'rounded-sm',\n focus:\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/80 focus-visible:ring-offset-1 focus-visible:ring-offset-background',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n invalid:\n 'aria-invalid:ring-destructive/40 dark:aria-invalid:ring-destructive/60 aria-invalid:border-destructive',\n};\n\n// ============================================================\n// MOTION PERSONALITY — Trading\n// ============================================================\n// Hover/focus : INSTANT (50ms) + LINEAR → 1:1 input/output, never\n// competes with ticking data\n// re-renders.\n// Overlay enter: FAST (150ms) + LINEAR → fast enough to feel\n// instant on click, slow\n// enough to convey direction\n// for tooltip/popover anchor.\n// Overlay exit : INSTANT (50ms) + LINEAR → close = vanish.\n// Backdrop : FAST/INSTANT + LINEAR → consistent with overlays.\n// Gestures : NONE — no spring physics. Trading desks need DOM\n// events to land before motion completes; springs add\n// perceived latency.\n//\n// Why LINEAR explicitly: a \"snappy/instant\" theme that omits ease- on\n// CSS transitions silently inherits the browser default `ease` curve\n// (cubic-bezier(0.25, 0.1, 0.25, 1)) — a soft S-curve that is the\n// OPPOSITE of \"instant linear.\" The TR-14 motion-coherence pass adds\n// explicit `ease-[var(--motion-easing-linear)]` to every overlay so\n// the LINEAR personality reaches the user's eye.\n//\n// Why FAST (not INSTANT) on overlay enter: at INSTANT (50ms) the\n// directional `slide-in-from-{side}-1` and `zoom-in-95` cues are\n// invisible (one frame at 60Hz). At FAST (150ms = ~9 frames) the\n// spatial cue is perceptible without feeling slow. Trading dashboards\n// rely on direction-of-anchor for tooltip-to-cell mental binding.\n// ============================================================\nconst TR_MOTION = {\n interactive:\n 'transition-[background-color,color,border-color] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n formControl:\n 'transition-[color,border-color,box-shadow] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n selectable:\n 'transition-[background-color,color,border-color] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n // Overlay enter: fade + tight zoom (95→100). Direction-less variant\n // for centered overlays (Dialog, Toast). LINEAR easing explicit.\n enterFadeZoom:\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-fast)] data-[state=open]:ease-[var(--motion-easing-linear)] motion-reduce:data-[state=open]:animate-none',\n exitFadeZoom:\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-[var(--motion-duration-instant)] data-[state=closed]:ease-[var(--motion-easing-linear)] motion-reduce:data-[state=closed]:animate-none',\n // Directional variant (Tooltip, Popover, Dropdown, Hover Card):\n // adds slide-in-from-{side}-1 — TR-14 restored these. Tight 1px\n // slide (vs default's 2px) matches trading's compact density; 2px\n // would feel sluggish next to h-5/h-6 controls.\n enterDirectional:\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-fast)] data-[state=open]:ease-[var(--motion-easing-linear)] data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1 motion-reduce:data-[state=open]:animate-none',\n backdropEnter:\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-[var(--motion-duration-fast)] data-[state=open]:ease-[var(--motion-easing-linear)] motion-reduce:data-[state=open]:animate-none',\n backdropExit:\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-[var(--motion-duration-instant)] data-[state=closed]:ease-[var(--motion-easing-linear)] motion-reduce:data-[state=closed]:animate-none',\n};\n\n// ============================================================\n// INTERACTIVE\n// Smallest control ladder in the lineup. h-6 (xs) is intentional —\n// trading desks routinely use h-5/h-6 buttons to fit dense order\n// blotters. Mono font signals \"this is a data action\".\n// ============================================================\n\nconst interactiveSizes: Record<string, string> = {\n xs: 'h-5 px-1.5 text-[0.6875rem] gap-1 pointer-coarse:min-h-9',\n sm: 'h-6 px-2 text-xs gap-1 pointer-coarse:min-h-11',\n md: 'h-7 px-2.5 text-xs gap-1 pointer-coarse:min-h-11',\n lg: 'h-9 px-4 text-sm pointer-coarse:min-h-11',\n icon: 'size-7 pointer-coarse:min-h-11 pointer-coarse:min-w-11',\n 'icon-sm': 'size-5 pointer-coarse:min-h-9 pointer-coarse:min-w-9',\n};\n\nconst interactive: Record<InteractiveVariant, UIBehaviorRecipe> = {\n [InteractiveVariant.PRIMARY]: recipe({\n base: `bg-primary text-primary-foreground font-mono font-semibold uppercase tracking-tight ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-primary/85',\n active: 'active:bg-primary/95',\n focus: TR.focus,\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.SECONDARY]: recipe({\n base: `bg-secondary text-secondary-foreground font-mono uppercase tracking-tight ${TR.hairline} ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-secondary/80 hover:border-foreground/30',\n active: 'active:bg-secondary/90',\n focus: TR.focus,\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.OUTLINE]: recipe({\n base: `bg-transparent text-foreground font-mono uppercase tracking-tight ${TR.edge} ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-muted hover:border-primary/50 hover:text-primary',\n active: 'active:bg-muted/80',\n focus: TR.focus,\n selected:\n 'data-[state=on]:bg-primary data-[state=on]:text-primary-foreground data-[state=on]:border-primary',\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.DESTRUCTIVE]: recipe({\n // SELL / SHORT button. Mapped to destructive so existing UIs that\n // wire confirmDelete-style flows render as red SELL actions in\n // trading mode without changing call sites.\n base: `bg-destructive text-destructive-foreground font-mono font-bold uppercase tracking-tight ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-destructive/85',\n active: 'active:bg-destructive/95',\n focus: TR.focus,\n highlighted: 'focus:bg-destructive/15 focus:text-destructive',\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.GHOST]: recipe({\n base: `text-foreground font-mono uppercase tracking-tight ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-muted hover:text-primary',\n active: 'active:bg-muted/80',\n focus: TR.focus,\n selected: 'data-[state=on]:bg-muted data-[state=on]:text-primary',\n highlighted: 'focus:bg-muted',\n open: 'data-[state=open]:bg-muted data-[state=open]:text-primary',\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.LINK]: recipe({\n // Trading \"link\" — typically a ticker symbol click. Underlined,\n // mono, amber. No transition (clicks are decisive).\n base: 'text-primary font-mono underline underline-offset-2 decoration-1 decoration-primary/60 uppercase cursor-pointer',\n states: {\n hover: 'hover:decoration-primary hover:bg-primary/10',\n active: 'active:text-primary/80',\n focus: TR.focus,\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: {\n xs: 'h-5 px-1 text-[0.6875rem] gap-1 pointer-coarse:min-h-9',\n sm: 'h-6 px-1 text-xs gap-1 pointer-coarse:min-h-11',\n md: 'h-7 px-1 text-xs gap-1 pointer-coarse:min-h-11',\n lg: 'h-9 px-1 text-sm pointer-coarse:min-h-11',\n icon: 'size-7 pointer-coarse:min-h-11 pointer-coarse:min-w-11',\n 'icon-sm': 'size-5 pointer-coarse:min-h-9 pointer-coarse:min-w-9',\n },\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.ACCENT]: recipe({\n // Trading accent: amber sweep with a \"scanline\" feel. Used for\n // marquee actions like \"EXECUTE\", \"PLACE ORDER\".\n base: `bg-primary text-primary-foreground font-mono font-bold uppercase tracking-wider ${TR.radius} bg-[length:200%_100%] bg-gradient-to-r from-accent-gradient-from via-accent-gradient-via to-accent-gradient-to animate-[gradient-rotate_2s_linear_infinite] motion-reduce:animate-none cursor-pointer`,\n states: {\n hover: 'hover:brightness-110',\n active: 'active:brightness-90',\n focus: TR.focus,\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: {\n transition:\n 'transition-[background-position,filter] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// SURFACE\n// SURFACE PERSONALITY — dense grid panels: sharp edges, mono data posture,\n// tabular numerals where policy applies, and compact alert tiles.\n// Grid panels. Sharp corners, 1px borders, no shadows.\n// ============================================================\n\nconst surface: ComponentStyleTheme['surface'] = {\n [SurfaceVariant.BASE]: recipe({\n base: `bg-background text-foreground ${TR.hairline} ${TR.radius}`,\n }),\n\n [SurfaceVariant.CARD]: recipe({\n // Content card: distinct `surface-raised` fill + amber-tinted edge + the\n // tight trading radius. Always painted.\n base: `bg-surface-raised text-surface-raised-foreground ${TR.edge} ${TR.radiusXs}`,\n }),\n\n [SurfaceVariant.RAISED]: recipe({\n // Popover: amber-tinted edge so it pops against the dark grid.\n // `fill-*` mirrors `bg-*` so the Tooltip's Radix arrow (an SVG painted via\n // `fill`, inherited across Radix's arrow-wrapper span) matches the body.\n base: `bg-background fill-background text-foreground ${TR.edge} ${TR.radiusXs} shadow-[0_2px_8px_rgba(0,0,0,0.3)]`,\n motion: {\n enter: TR_MOTION.enterDirectional,\n exit: TR_MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.OVERLAY]: recipe({\n base: `bg-background text-foreground ${TR.edge} ${TR.radiusXs} shadow-[0_8px_32px_rgba(0,0,0,0.5)]`,\n motion: {\n enter: TR_MOTION.enterFadeZoom,\n exit: TR_MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.INSET]: recipe({\n base: `bg-muted/40 text-foreground font-mono ${TR.radius}`,\n }),\n\n [SurfaceVariant.SUNKEN]: recipe({\n base: 'bg-muted/30 text-foreground border-r border-foreground/20',\n }),\n\n [SurfaceVariant.TAB_PANEL]: recipe({\n // Grid panel under a tab strip: sharp, top edge omitted, mono data posture.\n base: `bg-background text-foreground border-x border-b border-foreground/20 font-mono ${TR.radius}`,\n policy: {\n content: {\n numericAlignment: 'tabular',\n },\n },\n }),\n\n [SurfaceVariant.SHELL]: recipe({\n // Trading shell: dark grid canvas; cards/tables draw all chrome.\n base: 'bg-background text-foreground font-mono',\n policy: {\n content: {\n numericAlignment: 'tabular',\n },\n },\n }),\n\n [SurfaceVariant.TRANSIENT]: recipe({\n // Toast: compact alert tile with amber edge and tabular numerals.\n base: `bg-background text-foreground ${TR.edge} ${TR.radiusXs} font-mono shadow-[0_4px_16px_rgba(0,0,0,0.35)]`,\n motion: {\n enter: TR_MOTION.enterDirectional,\n exit: TR_MOTION.exitFadeZoom,\n },\n policy: {\n content: {\n numericAlignment: 'tabular',\n },\n },\n }),\n};\n\n// ============================================================\n// FORM_CONTROL\n// Tight, sharp, mono. Even the placeholder is mono — every text input\n// in a trading UI is for entering a symbol, a quantity, or a price.\n// ============================================================\n\nconst formControl: Record<FormControlVariant, UIBehaviorRecipe> = {\n [FormControlVariant.DEFAULT]: recipe({\n base: `bg-background ${TR.edge} ${TR.radius} text-base md:text-xs font-mono text-foreground placeholder:text-muted-foreground/50 placeholder:font-mono selection:bg-primary/40 selection:text-foreground`,\n states: {\n focus: TR.focus,\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: TR.invalid,\n },\n sizes: {\n md: 'h-7 px-2 py-0.5 pointer-coarse:min-h-11',\n sm: 'h-6 px-1.5 text-xs pointer-coarse:min-h-11',\n lg: 'h-9 px-3 py-1 pointer-coarse:min-h-11',\n },\n motion: { transition: TR_MOTION.formControl },\n }),\n\n [FormControlVariant.FILLED]: recipe({\n base: `bg-muted/60 ${TR.radius} border-0 text-base md:text-xs font-mono text-foreground placeholder:text-muted-foreground/50`,\n states: {\n focus: TR.focus,\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: TR.invalid,\n },\n sizes: {\n md: 'h-7 px-2 py-0.5 pointer-coarse:min-h-11',\n sm: 'h-6 px-1.5 text-xs pointer-coarse:min-h-11',\n lg: 'h-9 px-3 py-1 pointer-coarse:min-h-11',\n },\n motion: { transition: TR_MOTION.formControl },\n }),\n\n [FormControlVariant.UNDERLINED]: recipe({\n base: 'bg-transparent border-0 border-b border-foreground/30 rounded-none text-base md:text-xs font-mono text-foreground placeholder:text-muted-foreground/50',\n states: {\n focus: 'focus-visible:outline-none focus-visible:border-primary focus-visible:border-b-2',\n disabled: 'disabled:opacity-[var(--opacity-disabled)]',\n invalid: 'aria-invalid:border-destructive',\n },\n sizes: {\n md: 'h-7 px-0 py-0.5 pointer-coarse:min-h-11',\n sm: 'h-6 px-0 text-xs pointer-coarse:min-h-11',\n lg: 'h-9 px-0 py-1 pointer-coarse:min-h-11',\n },\n motion: {\n transition:\n 'transition-[border-color] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n },\n }),\n\n [FormControlVariant.CHECKBOX]: recipe({\n base: `${TR.edge} ${TR.radius}`,\n states: {\n focus: TR.focus,\n selected:\n 'data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary',\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: TR.invalid,\n },\n motion: {\n transition:\n 'transition-[color,box-shadow] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n },\n }),\n\n [FormControlVariant.SWITCH]: recipe({\n base: 'data-[state=unchecked]:bg-muted/70 border border-foreground/25',\n states: {\n focus: TR.focus,\n selected: 'data-[state=checked]:bg-primary',\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: TR.invalid,\n },\n motion: {\n transition:\n 'transition-all duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// INDICATOR\n// Square, mono, uppercase. Paired with the SUCCESS=up-green /\n// DESTRUCTIVE=down-red palette overrides below, the existing semantic\n// API (NEUTRAL/INFO/SUCCESS/WARNING/ERROR) renders as exactly the\n// indicators a trading UI needs:\n// - SUCCESS → ▲ up-tick green\n// - ERROR → ▼ down-tick red\n// - WARNING → halt / circuit breaker amber\n// - INFO → news / advisory cyan\n// - NEUTRAL → reference data grey\n// (The arrow glyph itself is the consumer's responsibility — the\n// theme just guarantees the COLOR + SHAPE.)\n// ============================================================\n\nconst trIndicatorShared = {\n states: { hover: '[a&]:hover:opacity-[var(--opacity-hover)]', focus: TR.focus, invalid: TR.invalid },\n motion: { transition: TR_MOTION.interactive },\n};\n\nconst indicator: Record<IndicatorVariant, UIBehaviorRecipe> = {\n [IndicatorVariant.NEUTRAL]: recipe({\n base: `bg-muted/60 text-muted-foreground ${TR.radius} ${TR.hairline} px-1.5 py-0 font-mono text-2xs font-semibold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n [IndicatorVariant.INFO]: recipe({\n base: `bg-info/15 text-info ${TR.radius} border border-info/40 px-1.5 py-0 font-mono text-2xs font-semibold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n [IndicatorVariant.SUCCESS]: recipe({\n // ↑ tick-up green — high contrast against dark grid.\n base: `bg-success/20 text-success ${TR.radius} border border-success/50 px-1.5 py-0 font-mono text-2xs font-bold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n [IndicatorVariant.WARNING]: recipe({\n base: `bg-warning/20 text-warning ${TR.radius} border border-warning/50 px-1.5 py-0 font-mono text-2xs font-bold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n [IndicatorVariant.ERROR]: recipe({\n // ↓ tick-down red — same intensity as SUCCESS so the up/down pair\n // reads as a balanced semantic axis.\n base: `bg-destructive/20 text-destructive ${TR.radius} border border-destructive/50 px-1.5 py-0 font-mono text-2xs font-bold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n};\n\n// ============================================================\n// SELECTABLE\n// Tab + sidebar variants. Active state is amber-on-dark.\n// ============================================================\n\nconst selectable: Record<SelectableVariant, UIBehaviorRecipe> = {\n [SelectableVariant.FILLED]: recipe({\n base: `${TR.radius} text-xs font-mono uppercase outline-hidden`,\n states: {\n hover: 'hover:bg-muted hover:text-primary',\n focus: 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary',\n selected:\n 'data-[active=true]:bg-primary/15 data-[active=true]:text-primary data-[active=true]:font-bold data-[state=active]:bg-primary/15 data-[state=active]:text-primary data-[state=active]:font-bold',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-5 text-[0.6875rem]', md: 'h-6 text-xs', lg: 'h-9 text-sm' },\n motion: { transition: TR_MOTION.selectable },\n }),\n [SelectableVariant.UNDERLINE]: recipe({\n base: 'rounded-none border-b-2 border-transparent text-xs font-mono uppercase text-muted-foreground outline-hidden',\n states: {\n hover: 'hover:text-foreground',\n focus: 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary',\n selected: 'data-[state=active]:border-primary data-[state=active]:text-primary data-[state=active]:font-bold',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-6 text-[0.6875rem] pb-0.5', md: 'h-7 text-xs pb-1', lg: 'h-9 text-sm pb-1.5' },\n motion: { transition: TR_MOTION.selectable },\n }),\n [SelectableVariant.PILL]: recipe({\n // Trading \"pill\" stays square — the variant name is semantic,\n // not literal. We're not adding actual pill shapes here.\n base: `${TR.radius} text-xs font-mono uppercase outline-hidden ${TR.hairline} border-transparent`,\n states: {\n hover: 'hover:bg-muted hover:border-foreground/25 hover:text-primary',\n focus: 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary',\n selected:\n 'data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:border-primary data-[state=active]:font-bold',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-5 px-2 text-[0.6875rem]', md: 'h-6 px-2.5 text-xs', lg: 'h-9 px-4 text-sm' },\n motion: { transition: TR_MOTION.selectable },\n }),\n [SelectableVariant.INDICATOR]: recipe({\n base: `${TR.radius} text-xs font-mono uppercase outline-hidden border-s-2 border-transparent`,\n states: {\n hover: 'hover:bg-muted',\n focus: 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary',\n selected:\n 'data-[active=true]:border-primary data-[active=true]:bg-muted data-[active=true]:text-primary data-[active=true]:font-bold',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-5 text-[0.6875rem]', md: 'h-6 text-xs', lg: 'h-9 text-sm' },\n motion: { transition: TR_MOTION.selectable },\n }),\n};\n\n// ============================================================\n// OVERLAY, DIVIDER, SKELETON\n// ============================================================\n\nconst overlayBackdrop: UIBehaviorRecipe = recipe({\n // Trading scrim: very dark, no blur (preserves the data behind it\n // for context while a confirmation dialog opens).\n base: 'bg-foreground/60',\n motion: {\n enter: TR_MOTION.backdropEnter,\n exit: TR_MOTION.backdropExit,\n },\n});\n\nconst divider: UIBehaviorRecipe = recipe({ base: 'bg-foreground/15 shrink-0' });\n\nconst skeleton: UIBehaviorRecipe = recipe({\n // Trading skeletons are LINEAR (no rounded corners) so they\n // perfectly replace tabular cells while loading.\n base: `bg-muted/70 animate-pulse ${TR.radius} motion-reduce:animate-none`,\n});\n\nconst loadingSpinner: UIBehaviorRecipe = recipe({\n base: 'text-primary animate-spin motion-reduce:animate-none',\n});\n\nconst loadingOverlay: UIBehaviorRecipe = recipe({\n base: 'bg-background/90',\n motion: {\n enter: 'animate-in fade-in-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-linear)] motion-reduce:animate-none',\n exit: 'animate-out fade-out-0 duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:animate-none',\n },\n});\n\n// ============================================================\n// TYPOGRAPHY\n// Mono for everything. Sizes compress: BODY at 12px (default 14px)\n// because every line of text in a trading UI is competing with rows\n// of numerics. CODE at 1em (no shrink) — code blocks are the same\n// size as body since body IS already mono.\n// ============================================================\n\nconst typography: Record<TypographyVariant, UIBehaviorRecipe> = {\n [TypographyVariant.HEADING]: recipe({\n base: 'font-mono font-bold uppercase tracking-tight text-foreground',\n sizes: {\n h1: 'text-2xl',\n h2: 'text-xl',\n h3: 'text-base',\n h4: 'text-sm',\n md: 'text-sm',\n },\n }),\n [TypographyVariant.BODY]: recipe({\n // 12px mono body — fits ~50% more rows on screen than default's\n // 14px sans body. The whole theme assumes the user is parsing\n // tabular data, not reading prose.\n base: 'font-mono text-foreground text-xs leading-tight',\n sizes: { sm: 'text-[0.6875rem]', md: 'text-xs', lg: 'text-sm' },\n }),\n [TypographyVariant.LABEL]: recipe({\n base: 'font-mono font-semibold text-2xs leading-none uppercase tracking-wider text-muted-foreground',\n sizes: { sm: 'text-[0.5625rem]', md: 'text-2xs', lg: 'text-xs' },\n }),\n [TypographyVariant.DESCRIPTION]: recipe({\n base: 'font-mono text-muted-foreground text-[0.6875rem] leading-tight',\n sizes: { sm: 'text-2xs', md: 'text-[0.6875rem]' },\n }),\n [TypographyVariant.CODE]: recipe({\n // Body is already mono, so CODE just adds a subtle bg + border.\n base: 'font-mono text-[1em] bg-muted/60 rounded-none px-1 border border-foreground/15',\n sizes: { sm: 'text-[0.875em]', md: 'text-[1em]', lg: 'text-[1.0625em]' },\n }),\n};\n\n// ============================================================\n// SPACING\n// ULTRA-tight — smallest in lineup by a wide margin. A trading desk\n// running 6 displays still wants more rows on each one.\n// ============================================================\n\nconst spacing: ComponentStyleTheme['spacing'] = {\n [SpacingSemantic.ELEMENT]: '0.25rem',\n [SpacingSemantic.ITEM]: '0.125rem',\n [SpacingSemantic.GROUP]: '0.5rem',\n [SpacingSemantic.FIELD]: '0.625rem',\n [SpacingSemantic.SECTION]: '0.875rem',\n [SpacingSemantic.REGION]: '1.25rem',\n [SpacingSemantic.CARD]: '0.625rem',\n [SpacingSemantic.CONTAINER]: '0.875rem',\n};\n\n// ============================================================\n// REQUIRED CUSTOM TOKENS — amber + tick-up/down semantic palette\n//\n// The trading palette is the entire reason the theme exists.\n// Without these overrides, the host's \"primary blue\" on a dense\n// grid reads as a dashboard, not as a market terminal.\n//\n// Light mode: warm off-white grid background, charcoal foreground,\n// dimmed amber accent. Trading apps DO occasionally run in light\n// mode (regulatory snapshots, daylight ops floors), so we take it\n// as seriously as dark mode.\n// ============================================================\n\nfunction colorOverride(lightOklch: string, darkOklch: string): DesignTokenConfiguration {\n return {\n type: DesignTokenValueType.COLOR,\n modeStrategy: DesignTokenModeStrategy.LIGHT_DARK,\n lightValue: lightOklch,\n darkValue: darkOklch,\n };\n}\n\nfunction colorSingle(oklch: string): DesignTokenConfiguration {\n return { type: DesignTokenValueType.COLOR, modeStrategy: DesignTokenModeStrategy.SINGLE, value: oklch };\n}\n\nfunction stringSingle(value: string): DesignTokenConfiguration {\n return { type: DesignTokenValueType.STRING, modeStrategy: DesignTokenModeStrategy.SINGLE, value };\n}\n\nconst requiredCustomTokens: Record<string, DesignTokenConfiguration> = {\n // === Page palette: warm cream in light (matches paper tape /\n // newsprint stocklists), near-black in dark (the canonical \"data\n // terminal\" surface). Slight amber tint at hue 80 keeps the dark\n // mode from feeling cold/clinical.\n background: colorOverride('0.965 0.008 80', '0.11 0.005 80'),\n foreground: colorOverride('0.18 0.005 80', '0.92 0.008 80'),\n\n // === Primary: TRADING AMBER (~#f5a623 family). Light L=0.65 keeps\n // black primary-foreground at ~5.4:1; dark L=0.78 keeps black at\n // ~6.8:1. Both well above WCAG AA. The amber hue (80) is the same\n // wavelength every data terminal has used since the CRT phosphor\n // era — it's not owned by anyone.\n primary: colorOverride('0.65 0.16 80', '0.78 0.15 80'),\n 'primary-foreground': colorSingle('0.10 0.005 80'),\n\n // === Secondary: subtle off-bg (slightly darker in light, slightly\n // lighter in dark). The \"non-amber action\" — for cancel buttons,\n // close-position buttons, any non-primary action.\n secondary: colorOverride('0.92 0.008 80', '0.16 0.005 80'),\n 'secondary-foreground': colorOverride('0.18 0.005 80', '0.92 0.008 80'),\n\n // === Muted: the grid-line / inset cell color.\n muted: colorOverride('0.94 0.008 80', '0.18 0.005 80'),\n 'muted-foreground': colorOverride('0.45 0.008 80', '0.62 0.008 80'),\n\n // === Borders: the GRID. Trading UIs are made of grid lines; this\n // is the most consequential token in the theme.\n border: colorOverride('0.85 0.008 80', '0.22 0.005 80'),\n ring: colorOverride('0.65 0.16 80', '0.78 0.15 80'),\n input: colorOverride('0.85 0.008 80', '0.22 0.005 80'),\n\n // === Destructive = TICK-DOWN RED. Hot, saturated, unmissable.\n // Wired through `destructive` so existing UIs that render a \"delete\"\n // button get a SELL/SHORT visual without rewiring call sites.\n // Light L=0.55 keeps white text at ~5.0:1; dark L=0.65 keeps white\n // at ~5.2:1.\n destructive: colorOverride('0.55 0.24 22', '0.65 0.26 22'),\n 'destructive-foreground': colorSingle('1 0 0'),\n\n // === Semantic colors — the up/down/halt axis.\n // SUCCESS = TICK-UP GREEN (chartreuse-leaning). Saturated and\n // bright enough to balance the SELL red — the eye should track\n // the up/down pair as equal-weight, opposite-polarity signals.\n success: colorOverride('0.62 0.22 145', '0.78 0.22 145'),\n 'success-foreground': colorSingle('0.08 0.005 80'),\n // WARNING = HALT / CIRCUIT-BREAKER AMBER. A different amber from\n // primary (slightly orangier, hue 70 vs 80) so a \"warning indicator\"\n // doesn't blur into a \"primary action\".\n warning: colorOverride('0.72 0.18 70', '0.80 0.20 70'),\n 'warning-foreground': colorSingle('0.08 0.005 80'),\n // INFO = NEWS / ADVISORY CYAN. Cool counterpoint, used for\n // non-actionable advisories.\n //\n // ⚠ Wave G follow-up TR-13 (contrast correction): cyan at L=0.62\n // hue 220 has sRGB Y≈0.27 → only ~3.4:1 with white text, well\n // below WCAG AA 4.5:1. SUCCESS and WARNING in this theme already\n // use near-black foreground (the \"phosphor on amber\" convention\n // is dark text on bright signal); INFO was inconsistent with white.\n // Fix: flip info-foreground to the same near-black L=0.08 as the\n // other two semantic foregrounds. New contrast: ~5.4:1 light, even\n // higher in dark mode (cyan L=0.74 → ~7.5:1). This also reads as\n // a coherent semantic family (all three semantic indicators use\n // the same dark-text rule on bright bg).\n info: colorOverride('0.62 0.14 220', '0.74 0.16 220'),\n 'info-foreground': colorSingle('0.08 0.005 80'),\n\n // === Accent gradient: amber → orange → red. A \"ticker tape\"\n // sweep that fits the trading aesthetic (vs default's cool\n // violet/blue/pink).\n 'accent-gradient-from': colorOverride('0.65 0.16 80', '0.78 0.15 80'),\n 'accent-gradient-via': colorOverride('0.68 0.20 50', '0.78 0.20 50'),\n 'accent-gradient-to': colorOverride('0.55 0.24 22', '0.65 0.26 22'),\n\n // === Font stacks: monospace EVERYTHING. IBM Plex Mono is the\n // canonical \"professional terminal\" mono (designed by IBM for\n // exactly this use case); JetBrains Mono / Roboto Mono are\n // excellent fallbacks. No sans/serif stacks — trading is mono.\n 'font-heading': stringSingle(\n \"'IBM Plex Mono', 'JetBrains Mono', 'Roboto Mono', 'Fira Code', 'Cascadia Code', 'Menlo', 'Consolas', monospace\"\n ),\n 'font-body': stringSingle(\n \"'IBM Plex Mono', 'JetBrains Mono', 'Roboto Mono', 'Fira Code', 'Cascadia Code', 'Menlo', 'Consolas', monospace\"\n ),\n 'font-mono': stringSingle(\n \"'IBM Plex Mono', 'JetBrains Mono', 'Roboto Mono', 'Fira Code', 'Cascadia Code', 'Menlo', 'Consolas', monospace\"\n ),\n};\n\n// ============================================================\n// ASSEMBLED THEME\n// ============================================================\n\nexport const tradingTheme: ComponentStyleTheme = {\n id: 'trading',\n name: 'Trading',\n description:\n 'Maximum-density theme for trading desks, market data, and observability dashboards. Monospace EVERYTHING (IBM Plex Mono / JetBrains Mono / Roboto Mono) — body, headings, indicators, code. Ultra-tight control ladder (h-5 xs / h-6 sm / h-7 md, smallest in lineup). Sharp corners (rounded-none baseline), 1px hard borders forming a grid, no shadows. Trading-amber primary (oklch(0.65–0.78 0.16 80) — the \"data terminal phosphor\" hue). Semantic SUCCESS=tick-up-green / DESTRUCTIVE=tick-down-red wired so existing semantic-indicator code renders as the up/down/halt axis a market UI needs. Instant linear motion (ticking data must never animate). Ships its own amber + up/down palette + monospace stacks via requiredCustomTokens.',\n\n requiredCustomTokens,\n spacing,\n\n interactive,\n surface,\n formControl,\n indicator,\n selectable,\n overlayBackdrop,\n divider,\n skeleton,\n loadingSpinner,\n loadingOverlay,\n typography,\n radius: '0px',\n backgroundLayer: undefined,\n chartStyle: {\n // Trading charts: tight grid, mono labels, instant animation,\n // bright series, hard candles (square corners).\n colorShadeLight: 600,\n colorShadeDark: 400,\n gridPadding: { top: 16, right: 12, bottom: 24, left: 48 },\n axis: {\n showAxisLine: true,\n showTicks: true,\n splitLineType: 'dashed',\n hideOverlap: true,\n yAxisNameLocation: 'middle',\n yAxisNameGap: 40,\n },\n tooltip: {\n extraCss:\n 'font-family: \"IBM Plex Mono\", \"JetBrains Mono\", monospace; border: 1px solid color-mix(in oklch, currentColor 30%, transparent); border-radius: 0; box-shadow: 0 4px 16px rgba(0,0,0,0.4);',\n borderWidth: 1,\n },\n animation: { enabled: false, durationMs: 0, easing: 'linear' },\n series: { lineWidth: 1, pointSize: 2, areaOpacity: 0.10, barBorderRadius: 0, pieBorderWidth: 1 },\n typography: {\n titleFontSize: 13,\n titleFontWeight: 700,\n subtitleFontSize: 11,\n legendFontSize: 10,\n tooltipFontSize: 11,\n axisLabelFontSize: 10,\n axisNameFontSize: 10,\n },\n emphasis: { shadowBlur: 0, shadowColor: 'transparent', shadowOffsetX: 0 },\n responsive: {\n smallMaxWidth: 400,\n mediumMaxWidth: 799,\n smallGridPadding: { top: 12, right: 8, bottom: 16, left: 28 },\n mediumGridPadding: { left: 36, right: 12, bottom: 24 },\n hideLegendOnSmall: true,\n smallAxisLabelRotate: 45,\n smallFontSize: 9,\n mediumFontSize: 10,\n },\n multiSeriesLegendBottomPadding: 32,\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"trading.theme.js","sourceRoot":"","sources":["../../../../src/themes/trading.theme.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentStyleTheme, DesignTokenConfiguration } from '@wildo-ai/presets-components-models';\nimport {\n DividerVariant,\n InteractiveVariant,\n SurfaceVariant,\n FormControlVariant,\n IndicatorVariant,\n SelectableVariant,\n TypographyVariant,\n SpacingSemantic,\n DesignTokenModeStrategy,\n DesignTokenValueType,\n SKELETON_NEUTRAL_TINT,\n} from '@wildo-ai/presets-components-models';\nimport type { UIBehaviorRecipe } from '@wildo-ai/presets-components-models';\n\nfunction recipe(r: Partial<UIBehaviorRecipe> & { base: string }): UIBehaviorRecipe {\n return { base: r.base, states: r.states ?? {}, sizes: r.sizes, motion: r.motion ?? {}, gesture: r.gesture, policy: r.policy };\n}\n\n// ============================================================\n// Trading theme\n//\n// Persona: trading desks, market data, ops/observability dashboards,\n// any UI where information density and glance-able status matter more\n// than aesthetics.\n// References: classic financial-data terminals (you know the one),\n// TradingView, IBKR, Refinitiv Eikon — without naming any specific\n// product. The \"amber-on-black, monospace, max-density\" tradition is\n// older than any single vendor (PLATO IV, Reuters Stockmaster, etc.).\n//\n// Design DNA:\n// - MONOSPACE EVERYTHING. Headings, body, indicators, code — all\n// IBM Plex Mono / JetBrains Mono. Fixed-width is the entire point:\n// numerics align column-wise, ticker tapes lock to grid.\n// - ULTRA-TIGHT density (h-6/h-7 control ladder, smallest in lineup).\n// A single screen needs to show twice as many rows as default.\n// - AMBER primary (`oklch(0.78 0.15 80)`) — the canonical \"data\n// terminal\" hue. No vendor owns the wavelength. Pairs with\n// near-black surfaces for the iconic \"amber phosphor\" look.\n// - SEMANTIC up/down green/red are non-negotiable: chartreuse-green\n// for \"tick-up\" (`oklch(0.78 0.22 145)`), hot red for \"tick-down\"\n// (`oklch(0.62 0.26 22)`). Wired through `success` / `destructive`\n// so existing semantic-indicator code Just Works in trading apps.\n// - SHARP corners (`rounded-none` baseline, `rounded-sm` on a few\n// overlays). Every pixel of vertical space matters; rounded\n// corners eat density and add no information.\n// - INSTANT motion (duration-instant, linear). Ticking data must\n// never animate — animations are for marketing pages, not for\n// a price changing 12 times per second.\n// - 1px hard borders, no shadows. Elevation is irrelevant; what\n// matters is GRID — every cell separated by a single hairline.\n// ============================================================\n\n// -- Shared constants --\n\nconst TR = {\n /** Ultra-thin grid line — the visual atom of a trading UI. */\n hairline: 'border border-foreground/15',\n edge: 'border border-foreground/25',\n /** Square corners by default. */\n radius: 'rounded-none',\n /** Tiny radius (2px) for overlays where pure squares feel too brutalist. */\n radiusXs: 'rounded-sm',\n focus:\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/80 focus-visible:ring-offset-1 focus-visible:ring-offset-background',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n invalid:\n 'aria-invalid:ring-destructive/40 dark:aria-invalid:ring-destructive/60 aria-invalid:border-destructive',\n};\n\n// ============================================================\n// MOTION PERSONALITY — Trading\n// ============================================================\n// Hover/focus : INSTANT (50ms) + LINEAR → 1:1 input/output, never\n// competes with ticking data\n// re-renders.\n// Overlay enter: FAST (150ms) + LINEAR → fast enough to feel\n// instant on click, slow\n// enough to convey direction\n// for tooltip/popover anchor.\n// Overlay exit : INSTANT (50ms) + LINEAR → close = vanish.\n// Backdrop : FAST/INSTANT + LINEAR → consistent with overlays.\n// Gestures : NONE — no spring physics. Trading desks need DOM\n// events to land before motion completes; springs add\n// perceived latency.\n//\n// Why LINEAR explicitly: a \"snappy/instant\" theme that omits ease- on\n// CSS transitions silently inherits the browser default `ease` curve\n// (cubic-bezier(0.25, 0.1, 0.25, 1)) — a soft S-curve that is the\n// OPPOSITE of \"instant linear.\" The TR-14 motion-coherence pass adds\n// explicit `ease-[var(--motion-easing-linear)]` to every overlay so\n// the LINEAR personality reaches the user's eye.\n//\n// Why FAST (not INSTANT) on overlay enter: at INSTANT (50ms) the\n// directional `slide-in-from-{side}-1` and `zoom-in-95` cues are\n// invisible (one frame at 60Hz). At FAST (150ms = ~9 frames) the\n// spatial cue is perceptible without feeling slow. Trading dashboards\n// rely on direction-of-anchor for tooltip-to-cell mental binding.\n// ============================================================\nconst TR_MOTION = {\n interactive:\n 'transition-[background-color,color,border-color] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n formControl:\n 'transition-[color,border-color,box-shadow] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n selectable:\n 'transition-[background-color,color,border-color] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n // Overlay enter: fade + tight zoom (95→100). Direction-less variant\n // for centered overlays (Dialog, Toast). LINEAR easing explicit.\n enterFadeZoom:\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-fast)] data-[state=open]:ease-[var(--motion-easing-linear)] motion-reduce:data-[state=open]:animate-none',\n exitFadeZoom:\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-[var(--motion-duration-instant)] data-[state=closed]:ease-[var(--motion-easing-linear)] motion-reduce:data-[state=closed]:animate-none',\n // Directional variant (Tooltip, Popover, Dropdown, Hover Card):\n // adds slide-in-from-{side}-1 — TR-14 restored these. Tight 1px\n // slide (vs default's 2px) matches trading's compact density; 2px\n // would feel sluggish next to h-5/h-6 controls.\n enterDirectional:\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-fast)] data-[state=open]:ease-[var(--motion-easing-linear)] data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1 motion-reduce:data-[state=open]:animate-none',\n backdropEnter:\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-[var(--motion-duration-fast)] data-[state=open]:ease-[var(--motion-easing-linear)] motion-reduce:data-[state=open]:animate-none',\n backdropExit:\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-[var(--motion-duration-instant)] data-[state=closed]:ease-[var(--motion-easing-linear)] motion-reduce:data-[state=closed]:animate-none',\n};\n\n// ============================================================\n// INTERACTIVE\n// Smallest control ladder in the lineup. h-6 (xs) is intentional —\n// trading desks routinely use h-5/h-6 buttons to fit dense order\n// blotters. Mono font signals \"this is a data action\".\n// ============================================================\n\nconst interactiveSizes: Record<string, string> = {\n xs: 'h-5 px-1.5 text-[0.6875rem] gap-1 pointer-coarse:min-h-9',\n sm: 'h-6 px-2 text-xs gap-1 pointer-coarse:min-h-11',\n md: 'h-7 px-2.5 text-xs gap-1 pointer-coarse:min-h-11',\n lg: 'h-9 px-4 text-sm pointer-coarse:min-h-11',\n icon: 'size-7 pointer-coarse:min-h-11 pointer-coarse:min-w-11',\n 'icon-sm': 'size-5 pointer-coarse:min-h-9 pointer-coarse:min-w-9',\n};\n\nconst interactive: Record<InteractiveVariant, UIBehaviorRecipe> = {\n [InteractiveVariant.PRIMARY]: recipe({\n base: `bg-primary text-primary-foreground font-mono font-semibold uppercase tracking-tight ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-primary/85',\n active: 'active:bg-primary/95',\n focus: TR.focus,\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.SECONDARY]: recipe({\n base: `bg-secondary text-secondary-foreground font-mono uppercase tracking-tight ${TR.hairline} ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-secondary/80 hover:border-foreground/30',\n active: 'active:bg-secondary/90',\n focus: TR.focus,\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.OUTLINE]: recipe({\n base: `bg-transparent text-foreground font-mono uppercase tracking-tight ${TR.edge} ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-muted hover:border-primary/50 hover:text-primary',\n active: 'active:bg-muted/80',\n focus: TR.focus,\n selected:\n 'data-[state=on]:bg-primary data-[state=on]:text-primary-foreground data-[state=on]:border-primary',\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.DESTRUCTIVE]: recipe({\n // SELL / SHORT button. Mapped to destructive so existing UIs that\n // wire confirmDelete-style flows render as red SELL actions in\n // trading mode without changing call sites.\n base: `bg-destructive text-destructive-foreground font-mono font-bold uppercase tracking-tight ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-destructive/85',\n active: 'active:bg-destructive/95',\n focus: TR.focus,\n highlighted: 'focus:bg-destructive/15 focus:text-destructive',\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.GHOST]: recipe({\n base: `text-foreground font-mono uppercase tracking-tight ${TR.radius} cursor-pointer`,\n states: {\n hover: 'hover:bg-muted hover:text-primary',\n active: 'active:bg-muted/80',\n focus: TR.focus,\n selected: 'data-[state=on]:bg-muted data-[state=on]:text-primary',\n highlighted: 'focus:bg-muted',\n open: 'data-[state=open]:bg-muted data-[state=open]:text-primary',\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.LINK]: recipe({\n // Trading \"link\" — typically a ticker symbol click. Underlined,\n // mono, amber. No transition (clicks are decisive).\n base: 'text-primary font-mono underline underline-offset-2 decoration-1 decoration-primary/60 uppercase cursor-pointer',\n states: {\n hover: 'hover:decoration-primary hover:bg-primary/10',\n active: 'active:text-primary/80',\n focus: TR.focus,\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: {\n xs: 'h-5 px-1 text-[0.6875rem] gap-1 pointer-coarse:min-h-9',\n sm: 'h-6 px-1 text-xs gap-1 pointer-coarse:min-h-11',\n md: 'h-7 px-1 text-xs gap-1 pointer-coarse:min-h-11',\n lg: 'h-9 px-1 text-sm pointer-coarse:min-h-11',\n icon: 'size-7 pointer-coarse:min-h-11 pointer-coarse:min-w-11',\n 'icon-sm': 'size-5 pointer-coarse:min-h-9 pointer-coarse:min-w-9',\n },\n motion: { transition: TR_MOTION.interactive },\n }),\n\n [InteractiveVariant.ACCENT]: recipe({\n // Trading accent: amber sweep with a \"scanline\" feel. Used for\n // marquee actions like \"EXECUTE\", \"PLACE ORDER\".\n base: `bg-primary text-primary-foreground font-mono font-bold uppercase tracking-wider ${TR.radius} bg-[length:200%_100%] bg-gradient-to-r from-accent-gradient-from via-accent-gradient-via to-accent-gradient-to animate-[gradient-rotate_2s_linear_infinite] motion-reduce:animate-none cursor-pointer`,\n states: {\n hover: 'hover:brightness-110',\n active: 'active:brightness-90',\n focus: TR.focus,\n disabled: TR.disabled,\n invalid: TR.invalid,\n },\n sizes: interactiveSizes,\n motion: {\n transition:\n 'transition-[background-position,filter] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// SURFACE\n// SURFACE PERSONALITY — dense grid panels: sharp edges, mono data posture,\n// tabular numerals where policy applies, and compact alert tiles.\n// Grid panels. Sharp corners, 1px borders, no shadows.\n// ============================================================\n\nconst surface: ComponentStyleTheme['surface'] = {\n [SurfaceVariant.BASE]: recipe({\n base: `bg-background text-foreground ${TR.hairline} ${TR.radius}`,\n }),\n\n [SurfaceVariant.CARD]: recipe({\n // Content card: distinct `surface-raised` fill + amber-tinted edge + the\n // tight trading radius. Always painted.\n base: `bg-surface-raised text-surface-raised-foreground ${TR.edge} ${TR.radiusXs}`,\n }),\n\n [SurfaceVariant.RAISED]: recipe({\n // Popover: amber-tinted edge so it pops against the dark grid.\n // `fill-*` mirrors `bg-*` so the Tooltip's Radix arrow (an SVG painted via\n // `fill`, inherited across Radix's arrow-wrapper span) matches the body.\n base: `bg-background fill-background text-foreground ${TR.edge} ${TR.radiusXs} shadow-[0_2px_8px_rgba(0,0,0,0.3)]`,\n motion: {\n enter: TR_MOTION.enterDirectional,\n exit: TR_MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.OVERLAY]: recipe({\n base: `bg-background text-foreground ${TR.edge} ${TR.radiusXs} shadow-[0_8px_32px_rgba(0,0,0,0.5)]`,\n motion: {\n enter: TR_MOTION.enterFadeZoom,\n exit: TR_MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.INSET]: recipe({\n base: `bg-muted/40 text-foreground font-mono ${TR.radius}`,\n }),\n\n [SurfaceVariant.SUNKEN]: recipe({\n base: 'bg-muted/30 text-foreground border-r border-foreground/20',\n }),\n\n [SurfaceVariant.TAB_PANEL]: recipe({\n // Grid panel under a tab strip: sharp, top edge omitted, mono data posture.\n base: `bg-background text-foreground border-x border-b border-foreground/20 font-mono ${TR.radius}`,\n policy: {\n content: {\n numericAlignment: 'tabular',\n },\n },\n }),\n\n [SurfaceVariant.SHELL]: recipe({\n // Trading shell: dark grid canvas; cards/tables draw all chrome.\n base: 'bg-background text-foreground font-mono',\n policy: {\n content: {\n numericAlignment: 'tabular',\n },\n },\n }),\n\n [SurfaceVariant.TRANSIENT]: recipe({\n // Toast: compact alert tile with amber edge and tabular numerals.\n base: `bg-background text-foreground ${TR.edge} ${TR.radiusXs} font-mono shadow-[0_4px_16px_rgba(0,0,0,0.35)]`,\n motion: {\n enter: TR_MOTION.enterDirectional,\n exit: TR_MOTION.exitFadeZoom,\n },\n policy: {\n content: {\n numericAlignment: 'tabular',\n },\n },\n }),\n};\n\n// ============================================================\n// FORM_CONTROL\n// Tight, sharp, mono. Even the placeholder is mono — every text input\n// in a trading UI is for entering a symbol, a quantity, or a price.\n// ============================================================\n\nconst formControl: Record<FormControlVariant, UIBehaviorRecipe> = {\n [FormControlVariant.DEFAULT]: recipe({\n base: `bg-background ${TR.edge} ${TR.radius} text-base md:text-xs font-mono text-foreground placeholder:text-muted-foreground/50 placeholder:font-mono selection:bg-primary/40 selection:text-foreground`,\n states: {\n focus: TR.focus,\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: TR.invalid,\n },\n sizes: {\n md: 'h-7 px-2 py-0.5 pointer-coarse:min-h-11',\n sm: 'h-6 px-1.5 text-xs pointer-coarse:min-h-11',\n lg: 'h-9 px-3 py-1 pointer-coarse:min-h-11',\n },\n motion: { transition: TR_MOTION.formControl },\n }),\n\n [FormControlVariant.FILLED]: recipe({\n base: `bg-muted/60 ${TR.radius} border-0 text-base md:text-xs font-mono text-foreground placeholder:text-muted-foreground/50`,\n states: {\n focus: TR.focus,\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: TR.invalid,\n },\n sizes: {\n md: 'h-7 px-2 py-0.5 pointer-coarse:min-h-11',\n sm: 'h-6 px-1.5 text-xs pointer-coarse:min-h-11',\n lg: 'h-9 px-3 py-1 pointer-coarse:min-h-11',\n },\n motion: { transition: TR_MOTION.formControl },\n }),\n\n [FormControlVariant.UNDERLINED]: recipe({\n base: 'bg-transparent border-0 border-b border-foreground/30 rounded-none text-base md:text-xs font-mono text-foreground placeholder:text-muted-foreground/50',\n states: {\n focus: 'focus-visible:outline-none focus-visible:border-primary focus-visible:border-b-2',\n disabled: 'disabled:opacity-[var(--opacity-disabled)]',\n invalid: 'aria-invalid:border-destructive',\n },\n sizes: {\n md: 'h-7 px-0 py-0.5 pointer-coarse:min-h-11',\n sm: 'h-6 px-0 text-xs pointer-coarse:min-h-11',\n lg: 'h-9 px-0 py-1 pointer-coarse:min-h-11',\n },\n motion: {\n transition:\n 'transition-[border-color] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n },\n }),\n\n [FormControlVariant.CHECKBOX]: recipe({\n base: `${TR.edge} ${TR.radius}`,\n states: {\n focus: TR.focus,\n selected:\n 'data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary',\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: TR.invalid,\n },\n motion: {\n transition:\n 'transition-[color,box-shadow] duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n },\n }),\n\n [FormControlVariant.SWITCH]: recipe({\n base: 'data-[state=unchecked]:bg-muted/70 border border-foreground/25',\n states: {\n focus: TR.focus,\n selected: 'data-[state=checked]:bg-primary',\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: TR.invalid,\n },\n motion: {\n transition:\n 'transition-all duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// INDICATOR\n// Square, mono, uppercase. Paired with the SUCCESS=up-green /\n// DESTRUCTIVE=down-red palette overrides below, the existing semantic\n// API (NEUTRAL/INFO/SUCCESS/WARNING/ERROR) renders as exactly the\n// indicators a trading UI needs:\n// - SUCCESS → ▲ up-tick green\n// - ERROR → ▼ down-tick red\n// - WARNING → halt / circuit breaker amber\n// - INFO → news / advisory cyan\n// - NEUTRAL → reference data grey\n// (The arrow glyph itself is the consumer's responsibility — the\n// theme just guarantees the COLOR + SHAPE.)\n// ============================================================\n\nconst trIndicatorShared = {\n states: { hover: '[a&]:hover:opacity-[var(--opacity-hover)]', focus: TR.focus, invalid: TR.invalid },\n motion: { transition: TR_MOTION.interactive },\n};\n\nconst indicator: Record<IndicatorVariant, UIBehaviorRecipe> = {\n [IndicatorVariant.NEUTRAL]: recipe({\n base: `bg-muted/60 text-muted-foreground ${TR.radius} ${TR.hairline} px-1.5 py-0 font-mono text-2xs font-semibold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n [IndicatorVariant.INFO]: recipe({\n base: `bg-info/15 text-info ${TR.radius} border border-info/40 px-1.5 py-0 font-mono text-2xs font-semibold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n [IndicatorVariant.SUCCESS]: recipe({\n // ↑ tick-up green — high contrast against dark grid.\n base: `bg-success/20 text-success ${TR.radius} border border-success/50 px-1.5 py-0 font-mono text-2xs font-bold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n [IndicatorVariant.WARNING]: recipe({\n base: `bg-warning/20 text-warning ${TR.radius} border border-warning/50 px-1.5 py-0 font-mono text-2xs font-bold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n [IndicatorVariant.ERROR]: recipe({\n // ↓ tick-down red — same intensity as SUCCESS so the up/down pair\n // reads as a balanced semantic axis.\n base: `bg-destructive/20 text-destructive ${TR.radius} border border-destructive/50 px-1.5 py-0 font-mono text-2xs font-bold uppercase tracking-wider`,\n ...trIndicatorShared,\n }),\n};\n\n// ============================================================\n// SELECTABLE\n// Tab + sidebar variants. Active state is amber-on-dark.\n// ============================================================\n\nconst selectable: Record<SelectableVariant, UIBehaviorRecipe> = {\n [SelectableVariant.FILLED]: recipe({\n base: `${TR.radius} text-xs font-mono uppercase outline-hidden`,\n states: {\n hover: 'hover:bg-muted hover:text-primary',\n focus: 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary',\n selected:\n 'data-[active=true]:bg-primary/15 data-[active=true]:text-primary data-[active=true]:font-bold data-[state=active]:bg-primary/15 data-[state=active]:text-primary data-[state=active]:font-bold',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-5 text-[0.6875rem]', md: 'h-6 text-xs', lg: 'h-9 text-sm' },\n motion: { transition: TR_MOTION.selectable },\n }),\n [SelectableVariant.UNDERLINE]: recipe({\n base: 'rounded-none border-b-2 border-transparent text-xs font-mono uppercase text-muted-foreground outline-hidden',\n states: {\n hover: 'hover:text-foreground',\n focus: 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary',\n selected: 'data-[state=active]:border-primary data-[state=active]:text-primary data-[state=active]:font-bold',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-6 text-[0.6875rem] pb-0.5', md: 'h-7 text-xs pb-1', lg: 'h-9 text-sm pb-1.5' },\n motion: { transition: TR_MOTION.selectable },\n }),\n [SelectableVariant.PILL]: recipe({\n // Trading \"pill\" stays square — the variant name is semantic,\n // not literal. We're not adding actual pill shapes here.\n base: `${TR.radius} text-xs font-mono uppercase outline-hidden ${TR.hairline} border-transparent`,\n states: {\n hover: 'hover:bg-muted hover:border-foreground/25 hover:text-primary',\n focus: 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary',\n selected:\n 'data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:border-primary data-[state=active]:font-bold',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-5 px-2 text-[0.6875rem]', md: 'h-6 px-2.5 text-xs', lg: 'h-9 px-4 text-sm' },\n motion: { transition: TR_MOTION.selectable },\n }),\n [SelectableVariant.INDICATOR]: recipe({\n base: `${TR.radius} text-xs font-mono uppercase outline-hidden border-s-2 border-transparent`,\n states: {\n hover: 'hover:bg-muted',\n focus: 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary',\n selected:\n 'data-[active=true]:border-primary data-[active=true]:bg-muted data-[active=true]:text-primary data-[active=true]:font-bold',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-5 text-[0.6875rem]', md: 'h-6 text-xs', lg: 'h-9 text-sm' },\n motion: { transition: TR_MOTION.selectable },\n }),\n};\n\n// ============================================================\n// OVERLAY, DIVIDER, SKELETON\n// ============================================================\n\nconst overlayBackdrop: UIBehaviorRecipe = recipe({\n // Trading scrim: very dark, no blur (preserves the data behind it\n // for context while a confirmation dialog opens).\n base: 'bg-foreground/60',\n motion: {\n enter: TR_MOTION.backdropEnter,\n exit: TR_MOTION.backdropExit,\n },\n});\n\nconst divider: Record<DividerVariant, UIBehaviorRecipe> = {\n [DividerVariant.DEFAULT]: recipe({ base: 'bg-foreground/15 shrink-0' }),\n // Nested-disclosure guide: the theme's own divider material, as a left edge.\n [DividerVariant.NESTING_GUIDE]: recipe({ base: 'border-s border-foreground/15' }),\n};\n\nconst skeleton: UIBehaviorRecipe = recipe({\n // Trading skeletons are LINEAR (no rounded corners) so they\n // perfectly replace tabular cells while loading.\n base: `${SKELETON_NEUTRAL_TINT} animate-pulse ${TR.radius} motion-reduce:animate-none`,\n});\n\nconst loadingSpinner: UIBehaviorRecipe = recipe({\n base: 'text-primary animate-spin motion-reduce:animate-none',\n});\n\nconst loadingOverlay: UIBehaviorRecipe = recipe({\n base: 'bg-background/90',\n motion: {\n enter: 'animate-in fade-in-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-linear)] motion-reduce:animate-none',\n exit: 'animate-out fade-out-0 duration-[var(--motion-duration-instant)] ease-[var(--motion-easing-linear)] motion-reduce:animate-none',\n },\n});\n\n// ============================================================\n// TYPOGRAPHY\n// Mono for everything. Sizes compress: BODY at 12px (default 14px)\n// because every line of text in a trading UI is competing with rows\n// of numerics. CODE at 1em (no shrink) — code blocks are the same\n// size as body since body IS already mono.\n// ============================================================\n\nconst typography: Record<TypographyVariant, UIBehaviorRecipe> = {\n [TypographyVariant.HEADING]: recipe({\n base: 'font-mono font-bold uppercase tracking-tight text-foreground',\n sizes: {\n h1: 'text-2xl',\n h2: 'text-xl',\n h3: 'text-base',\n h4: 'text-sm',\n h5: 'text-xs',\n md: 'text-sm',\n },\n }),\n [TypographyVariant.BODY]: recipe({\n // 12px mono body — fits ~50% more rows on screen than default's\n // 14px sans body. The whole theme assumes the user is parsing\n // tabular data, not reading prose.\n base: 'font-mono text-foreground text-xs leading-tight',\n sizes: { sm: 'text-[0.6875rem]', md: 'text-xs', lg: 'text-sm' },\n }),\n [TypographyVariant.LABEL]: recipe({\n base: 'font-mono font-semibold text-2xs leading-none uppercase tracking-wider text-muted-foreground',\n sizes: { sm: 'text-[0.5625rem]', md: 'text-2xs', lg: 'text-xs' },\n }),\n [TypographyVariant.DESCRIPTION]: recipe({\n base: 'font-mono text-muted-foreground text-[0.6875rem] leading-tight',\n sizes: { sm: 'text-2xs', md: 'text-[0.6875rem]' },\n }),\n [TypographyVariant.CODE]: recipe({\n // Body is already mono, so CODE just adds a subtle bg + border.\n base: 'font-mono text-[1em] bg-muted/60 rounded-none px-1 border border-foreground/15',\n sizes: { sm: 'text-[0.875em]', md: 'text-[1em]', lg: 'text-[1.0625em]' },\n }),\n};\n\n// ============================================================\n// SPACING\n// ULTRA-tight — smallest in lineup by a wide margin. A trading desk\n// running 6 displays still wants more rows on each one.\n// ============================================================\n\nconst spacing: ComponentStyleTheme['spacing'] = {\n [SpacingSemantic.ELEMENT]: '0.25rem',\n [SpacingSemantic.ITEM]: '0.125rem',\n [SpacingSemantic.GROUP]: '0.5rem',\n [SpacingSemantic.FIELD]: '0.625rem',\n [SpacingSemantic.SECTION]: '0.875rem',\n [SpacingSemantic.REGION]: '1.25rem',\n [SpacingSemantic.CARD]: '0.625rem',\n [SpacingSemantic.CONTAINER]: '0.875rem',\n};\n\n// ============================================================\n// REQUIRED CUSTOM TOKENS — amber + tick-up/down semantic palette\n//\n// The trading palette is the entire reason the theme exists.\n// Without these overrides, the host's \"primary blue\" on a dense\n// grid reads as a dashboard, not as a market terminal.\n//\n// Light mode: warm off-white grid background, charcoal foreground,\n// dimmed amber accent. Trading apps DO occasionally run in light\n// mode (regulatory snapshots, daylight ops floors), so we take it\n// as seriously as dark mode.\n// ============================================================\n\nfunction colorOverride(lightOklch: string, darkOklch: string): DesignTokenConfiguration {\n return {\n type: DesignTokenValueType.COLOR,\n modeStrategy: DesignTokenModeStrategy.LIGHT_DARK,\n lightValue: lightOklch,\n darkValue: darkOklch,\n };\n}\n\nfunction colorSingle(oklch: string): DesignTokenConfiguration {\n return { type: DesignTokenValueType.COLOR, modeStrategy: DesignTokenModeStrategy.SINGLE, value: oklch };\n}\n\nfunction stringSingle(value: string): DesignTokenConfiguration {\n return { type: DesignTokenValueType.STRING, modeStrategy: DesignTokenModeStrategy.SINGLE, value };\n}\n\nconst requiredCustomTokens: Record<string, DesignTokenConfiguration> = {\n // === Page palette: warm cream in light (matches paper tape /\n // newsprint stocklists), near-black in dark (the canonical \"data\n // terminal\" surface). Slight amber tint at hue 80 keeps the dark\n // mode from feeling cold/clinical.\n background: colorOverride('0.965 0.008 80', '0.11 0.005 80'),\n foreground: colorOverride('0.18 0.005 80', '0.92 0.008 80'),\n\n // === Primary: TRADING AMBER (~#f5a623 family). Light L=0.65 keeps\n // black primary-foreground at ~5.4:1; dark L=0.78 keeps black at\n // ~6.8:1. Both well above WCAG AA. The amber hue (80) is the same\n // wavelength every data terminal has used since the CRT phosphor\n // era — it's not owned by anyone.\n primary: colorOverride('0.65 0.16 80', '0.78 0.15 80'),\n 'primary-foreground': colorSingle('0.10 0.005 80'),\n\n // === Secondary: subtle off-bg (slightly darker in light, slightly\n // lighter in dark). The \"non-amber action\" — for cancel buttons,\n // close-position buttons, any non-primary action.\n secondary: colorOverride('0.92 0.008 80', '0.16 0.005 80'),\n 'secondary-foreground': colorOverride('0.18 0.005 80', '0.92 0.008 80'),\n\n // === Muted: the grid-line / inset cell color.\n muted: colorOverride('0.94 0.008 80', '0.18 0.005 80'),\n 'muted-foreground': colorOverride('0.45 0.008 80', '0.62 0.008 80'),\n\n // === Borders: the GRID. Trading UIs are made of grid lines; this\n // is the most consequential token in the theme.\n border: colorOverride('0.85 0.008 80', '0.22 0.005 80'),\n ring: colorOverride('0.65 0.16 80', '0.78 0.15 80'),\n input: colorOverride('0.85 0.008 80', '0.22 0.005 80'),\n\n // === Destructive = TICK-DOWN RED. Hot, saturated, unmissable.\n // Wired through `destructive` so existing UIs that render a \"delete\"\n // button get a SELL/SHORT visual without rewiring call sites.\n // Light L=0.55 keeps white text at ~5.0:1; dark L=0.65 keeps white\n // at ~5.2:1.\n destructive: colorOverride('0.55 0.24 22', '0.65 0.26 22'),\n 'destructive-foreground': colorSingle('1 0 0'),\n\n // === Semantic colors — the up/down/halt axis.\n // SUCCESS = TICK-UP GREEN (chartreuse-leaning). Saturated and\n // bright enough to balance the SELL red — the eye should track\n // the up/down pair as equal-weight, opposite-polarity signals.\n success: colorOverride('0.62 0.22 145', '0.78 0.22 145'),\n 'success-foreground': colorSingle('0.08 0.005 80'),\n // WARNING = HALT / CIRCUIT-BREAKER AMBER. A different amber from\n // primary (slightly orangier, hue 70 vs 80) so a \"warning indicator\"\n // doesn't blur into a \"primary action\".\n warning: colorOverride('0.72 0.18 70', '0.80 0.20 70'),\n 'warning-foreground': colorSingle('0.08 0.005 80'),\n // INFO = NEWS / ADVISORY CYAN. Cool counterpoint, used for\n // non-actionable advisories.\n //\n // ⚠ Wave G follow-up TR-13 (contrast correction): cyan at L=0.62\n // hue 220 has sRGB Y≈0.27 → only ~3.4:1 with white text, well\n // below WCAG AA 4.5:1. SUCCESS and WARNING in this theme already\n // use near-black foreground (the \"phosphor on amber\" convention\n // is dark text on bright signal); INFO was inconsistent with white.\n // Fix: flip info-foreground to the same near-black L=0.08 as the\n // other two semantic foregrounds. New contrast: ~5.4:1 light, even\n // higher in dark mode (cyan L=0.74 → ~7.5:1). This also reads as\n // a coherent semantic family (all three semantic indicators use\n // the same dark-text rule on bright bg).\n info: colorOverride('0.62 0.14 220', '0.74 0.16 220'),\n 'info-foreground': colorSingle('0.08 0.005 80'),\n\n // === Accent gradient: amber → orange → red. A \"ticker tape\"\n // sweep that fits the trading aesthetic (vs default's cool\n // violet/blue/pink).\n 'accent-gradient-from': colorOverride('0.65 0.16 80', '0.78 0.15 80'),\n 'accent-gradient-via': colorOverride('0.68 0.20 50', '0.78 0.20 50'),\n 'accent-gradient-to': colorOverride('0.55 0.24 22', '0.65 0.26 22'),\n\n // === Font stacks: monospace EVERYTHING. IBM Plex Mono is the\n // canonical \"professional terminal\" mono (designed by IBM for\n // exactly this use case); JetBrains Mono / Roboto Mono are\n // excellent fallbacks. No sans/serif stacks — trading is mono.\n 'font-heading': stringSingle(\n \"'IBM Plex Mono', 'JetBrains Mono', 'Roboto Mono', 'Fira Code', 'Cascadia Code', 'Menlo', 'Consolas', monospace\"\n ),\n 'font-body': stringSingle(\n \"'IBM Plex Mono', 'JetBrains Mono', 'Roboto Mono', 'Fira Code', 'Cascadia Code', 'Menlo', 'Consolas', monospace\"\n ),\n 'font-mono': stringSingle(\n \"'IBM Plex Mono', 'JetBrains Mono', 'Roboto Mono', 'Fira Code', 'Cascadia Code', 'Menlo', 'Consolas', monospace\"\n ),\n};\n\n// ============================================================\n// ASSEMBLED THEME\n// ============================================================\n\nexport const tradingTheme: ComponentStyleTheme = {\n id: 'trading',\n name: 'Trading',\n description:\n 'Maximum-density theme for trading desks, market data, and observability dashboards. Monospace EVERYTHING (IBM Plex Mono / JetBrains Mono / Roboto Mono) — body, headings, indicators, code. Ultra-tight control ladder (h-5 xs / h-6 sm / h-7 md, smallest in lineup). Sharp corners (rounded-none baseline), 1px hard borders forming a grid, no shadows. Trading-amber primary (oklch(0.65–0.78 0.16 80) — the \"data terminal phosphor\" hue). Semantic SUCCESS=tick-up-green / DESTRUCTIVE=tick-down-red wired so existing semantic-indicator code renders as the up/down/halt axis a market UI needs. Instant linear motion (ticking data must never animate). Ships its own amber + up/down palette + monospace stacks via requiredCustomTokens.',\n\n requiredCustomTokens,\n spacing,\n\n interactive,\n surface,\n formControl,\n indicator,\n selectable,\n overlayBackdrop,\n divider,\n skeleton,\n loadingSpinner,\n loadingOverlay,\n typography,\n radius: '0px',\n backgroundLayer: undefined,\n chartStyle: {\n // Trading charts: tight grid, mono labels, instant animation,\n // bright series, hard candles (square corners).\n colorShadeLight: 600,\n colorShadeDark: 400,\n gridPadding: { top: 16, right: 12, bottom: 24, left: 48 },\n axis: {\n showAxisLine: true,\n showTicks: true,\n splitLineType: 'dashed',\n hideOverlap: true,\n yAxisNameLocation: 'middle',\n yAxisNameGap: 40,\n },\n tooltip: {\n extraCss:\n 'font-family: \"IBM Plex Mono\", \"JetBrains Mono\", monospace; border: 1px solid color-mix(in oklch, currentColor 30%, transparent); border-radius: 0; box-shadow: 0 4px 16px rgba(0,0,0,0.4);',\n borderWidth: 1,\n },\n animation: { enabled: false, durationMs: 0, easing: 'linear' },\n series: { lineWidth: 1, pointSize: 2, areaOpacity: 0.10, barBorderRadius: 0, pieBorderWidth: 1 },\n typography: {\n titleFontSize: 13,\n titleFontWeight: 700,\n subtitleFontSize: 11,\n legendFontSize: 10,\n tooltipFontSize: 11,\n axisLabelFontSize: 10,\n axisNameFontSize: 10,\n },\n emphasis: { shadowBlur: 0, shadowColor: 'transparent', shadowOffsetX: 0 },\n responsive: {\n smallMaxWidth: 400,\n mediumMaxWidth: 799,\n smallGridPadding: { top: 12, right: 8, bottom: 16, left: 28 },\n mediumGridPadding: { left: 36, right: 12, bottom: 24 },\n hideLegendOnSmall: true,\n smallAxisLabelRotate: 45,\n smallFontSize: 9,\n mediumFontSize: 10,\n },\n multiSeriesLegendBottomPadding: 32,\n },\n};\n"]}
|