@wildo-ai/presets-components 1.1.1 → 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cozy.theme.js","sourceRoot":"","sources":["../../../../src/themes/cozy.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// Cozy theme (Soft / Warm)\n//\n// Persona: wellness apps, journaling, B2C onboarding, friendly\n// internal tools, learning platforms.\n// References: Notion (warm mode), Calm, Headspace, early-stage\n// consumer SaaS, Stripe-light vibes.\n//\n// Design DNA:\n// - PILLOWY radius (rounded-2xl baseline; rounded-3xl on cards/dialogs).\n// The whole UI feels like rounded river stones, not card stock.\n// - WARM palette: cream / oat / dusty-rose foreground, sage muted,\n// terracotta accent. Never grey. Never cold. The page feels\n// \"occupied\" by warmth even before any content.\n// - SOFT, LONG shadows: low-opacity, large blur radius\n// (`shadow-[0_8px_32px_rgba(0,0,0,0.06)]`). Things rest gently\n// above the page rather than snapping into elevation.\n// - SPRINGY motion: spring physics on interactive gestures (matches\n// glass), generous duration on transitions. The UI \"settles\"\n// rather than \"snaps\".\n// - DM Sans / Plus Jakarta — humanist sans with warm letterforms,\n// soft round terminals (vs Geist's industrial precision).\n// - Underline-NEVER on selectable tabs (too sharp); pill-with-soft-bg\n// instead. The whole theme avoids hard right angles where possible.\n// - Body weight stays normal (not 500/600); cozy isn't loud.\n// ============================================================\n\n// -- Shared constants --\n\nconst CZ = {\n /** Soft, low-opacity border — almost invisible against bg, present on hover. */\n hairline: 'border border-foreground/8',\n edge: 'border border-foreground/12',\n /** Pillowy radius baseline. */\n radius: 'rounded-2xl',\n radiusLg: 'rounded-3xl',\n /** Mid radius for badges/pills. */\n radiusMd: 'rounded-xl',\n /** Soft long shadow — low opacity, large blur. */\n shadow: 'shadow-[0_4px_20px_rgba(0,0,0,0.05)] dark:shadow-[0_4px_20px_rgba(0,0,0,0.35)]',\n shadowLg: 'shadow-[0_8px_32px_rgba(0,0,0,0.07)] dark:shadow-[0_8px_32px_rgba(0,0,0,0.45)]',\n shadowXL: 'shadow-[0_24px_64px_rgba(0,0,0,0.10)] dark:shadow-[0_24px_64px_rgba(0,0,0,0.55)]',\n focus:\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n invalid:\n 'aria-invalid:ring-destructive/30 dark:aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n};\n\n// ============================================================\n// MOTION PERSONALITY — Cozy\n// ============================================================\n// Hover/focus : NORMAL (250ms) + SPRING → gentle settle into rest.\n// SPRING easing here is the\n// cubic-bezier ease-out token\n// (cubic-bezier(0.22, 1, 0.36, 1)\n// ≈ easeOutExpo) — monotonic,\n// slow tail, NO overshoot.\n// Matches the \"pillowy\"\n// surface aesthetic; the\n// SETTLE is the personality,\n// not bouncing.\n// Overlay enter: SLOW (350ms) + ENTER → generous, friendly pace.\n// Overlay exit : NORMAL (250ms) + EXIT → quicker than enter.\n// Backdrop : SLOW/NORMAL + ENTER/EXIT → matches overlays.\n// Gestures : SPRING physics on motion.dev. Lower stiffness (250-300)\n// + higher damping (22-30) than Glass — Cozy spring\n// is \"gentle landing on a cushion\" vs Glass \"Apple\n// UIKit precision.\" `selectable` adds a horizontal\n// nudge for list-item affordance (mirrors Glass for\n// cross-theme parity).\n//\n// TR-14 motion-coherence: switched interactive/formControl/selectable\n// from EMPHASIZED (cubic-bezier(0.2, 0, 0, 1.2) — has 20% Y overshoot,\n// reads as \"snappy with bounce\") to SPRING (no overshoot, slow settle —\n// \"the cozy feel\"). Backdrop animations now have explicit easing.\n// `selectable` gesture added (was missing — Glass has it, Cozy didn't,\n// breaking cross-theme parity for list affordances).\n// ============================================================\nconst CZ_MOTION = {\n interactive:\n 'transition-[background-color,color,border-color,box-shadow,transform] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n formControl:\n 'transition-[color,border-color,box-shadow,background-color] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n selectable:\n 'transition-[background-color,color,border-color] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\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-slow)] data-[state=open]:ease-[var(--motion-easing-enter)] 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-normal)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none',\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-slow)] data-[state=open]:ease-[var(--motion-easing-enter)] data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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-slow)] data-[state=open]:ease-[var(--motion-easing-enter)] 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-normal)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none',\n};\n\n// Spring gestures: subtle scale on press, gentle hover lift.\n//\n// Cozy springs are softer than Glass: lower stiffness (slower oscillation\n// period) + higher damping (faster decay, less swing). Glass mimics\n// Apple UIKit precision; Cozy mimics \"Calm app\" / \"Notion\" friendliness —\n// the tactile equivalent of pressing a foam cushion vs a multitouch glass\n// surface. `selectable` matches Glass's pattern (horizontal x-nudge of\n// 2px on hover) so list-item affordances feel consistent across themes.\nconst CZ_GESTURE = {\n interactive: {\n whileHover: { scale: 1.015 },\n whileTap: { scale: 0.97 },\n transition: { type: 'spring' as const, stiffness: 300, damping: 24 },\n } as const,\n surface: {\n whileHover: { scale: 1.005 },\n transition: { type: 'spring' as const, stiffness: 250, damping: 22 },\n } as const,\n // TR-14: added for list-item affordance parity with Glass.\n // Slightly softer stiffness than Glass's selectable (350 vs 400)\n // and matching damping — list rows in Cozy should feel \"padded,\n // not snappy.\" The 2px horizontal nudge is the universal\n // \"I'm a clickable list row\" affordance.\n selectable: {\n whileHover: { x: 2 },\n whileTap: { scale: 0.99 },\n transition: { type: 'spring' as const, stiffness: 350, damping: 30 },\n } as const,\n};\n\n// ============================================================\n// INTERACTIVE\n// Pillowy buttons with soft-long shadows. Press = scale + tighter shadow.\n// ============================================================\n\nconst interactiveSizes: Record<string, string> = {\n xs: 'h-8 px-3.5 text-xs gap-1.5 pointer-coarse:min-h-10',\n sm: 'h-9 px-4 gap-2 pointer-coarse:min-h-11',\n md: 'h-11 px-5 py-2 pointer-coarse:min-h-11',\n lg: 'h-12 px-7 pointer-coarse:min-h-12',\n icon: 'size-11 pointer-coarse:min-h-11 pointer-coarse:min-w-11',\n 'icon-sm': 'size-9 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 ${CZ.radius} font-medium text-sm cursor-pointer ${CZ.shadow}`,\n states: {\n hover: 'hover:bg-primary/90 hover:shadow-[0_6px_24px_rgba(0,0,0,0.08)] dark:hover:shadow-[0_6px_24px_rgba(0,0,0,0.45)]',\n active: 'active:bg-primary/95 active:shadow-[0_2px_8px_rgba(0,0,0,0.04)]',\n focus: CZ.focus,\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.SECONDARY]: recipe({\n base: `bg-secondary text-secondary-foreground ${CZ.radius} font-medium text-sm cursor-pointer ${CZ.shadow}`,\n states: {\n hover: 'hover:bg-secondary/80',\n active: 'active:bg-secondary/70',\n focus: CZ.focus,\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.OUTLINE]: recipe({\n base: `bg-background text-foreground ${CZ.edge} ${CZ.radius} font-medium text-sm cursor-pointer`,\n states: {\n hover: 'hover:bg-muted hover:border-foreground/20',\n active: 'active:bg-muted/80',\n focus: CZ.focus,\n selected: 'data-[state=on]:bg-muted data-[state=on]:border-foreground/25',\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.DESTRUCTIVE]: recipe({\n base: `bg-destructive text-destructive-foreground ${CZ.radius} font-medium text-sm cursor-pointer ${CZ.shadow}`,\n states: {\n hover: 'hover:bg-destructive/90',\n active: 'active:bg-destructive/95',\n focus: CZ.focus,\n highlighted: 'focus:bg-destructive/15 focus:text-destructive',\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.GHOST]: recipe({\n base: `text-foreground ${CZ.radius} font-medium text-sm cursor-pointer`,\n states: {\n hover: 'hover:bg-muted',\n active: 'active:bg-muted/80',\n focus: CZ.focus,\n selected: 'data-[state=on]:bg-muted data-[state=on]:text-foreground',\n highlighted: 'focus:bg-muted',\n open: 'data-[state=open]:bg-muted',\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.LINK]: recipe({\n base: 'text-primary font-medium text-sm cursor-pointer',\n states: {\n hover: 'hover:underline hover:underline-offset-[3px] hover:decoration-primary/50',\n active: 'active:text-primary/80',\n focus: CZ.focus,\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: {\n xs: 'h-8 px-2 text-xs gap-1.5 pointer-coarse:min-h-10',\n sm: 'h-9 px-2 gap-2 pointer-coarse:min-h-11',\n md: 'h-11 px-2 py-2 pointer-coarse:min-h-11',\n lg: 'h-12 px-2 pointer-coarse:min-h-12',\n icon: 'size-11 pointer-coarse:min-h-11 pointer-coarse:min-w-11',\n 'icon-sm': 'size-9 pointer-coarse:min-h-9 pointer-coarse:min-w-9',\n },\n motion: { transition: CZ_MOTION.interactive },\n }),\n\n [InteractiveVariant.ACCENT]: recipe({\n // Cozy accent: warm pastel sweep — terracotta → dusty rose → peach.\n // Restrained motion (5s, slow), the gradient drifts rather than races.\n base: `relative bg-primary text-primary-foreground font-semibold ${CZ.radius} bg-[length:300%_100%] bg-gradient-to-r from-accent-gradient-from via-accent-gradient-via to-accent-gradient-to animate-[gradient-rotate_6s_ease-in-out_infinite] motion-reduce:animate-none ${CZ.shadow} text-sm cursor-pointer`,\n states: {\n hover: 'hover:brightness-105',\n active: 'active:scale-[0.98]',\n focus: CZ.focus,\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: {\n transition:\n 'transition-[background-position,filter,transform,shadow] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n },\n gesture: CZ_GESTURE.interactive,\n }),\n};\n\n// ============================================================\n// SURFACE\n// SURFACE PERSONALITY — soft cushions: pillowy radii, warm page shell, gentle\n// floating notices. Tab panels are attached pillows rather than hard panes.\n// Cards rest gently on the page with low-opacity, large-blur shadows.\n// Dialogs ARE elevated and get the heaviest soft-shadow in the lineup.\n// ============================================================\n\nconst surface: ComponentStyleTheme['surface'] = {\n [SurfaceVariant.BASE]: recipe({\n base: `bg-background text-foreground ${CZ.radiusLg} ${CZ.shadow} ${CZ.hairline}`,\n gesture: CZ_GESTURE.surface,\n }),\n\n [SurfaceVariant.CARD]: recipe({\n // Content card: the elevated `surface-raised` fill (pure white in light, a\n // lifted slate in dark) makes it read as a distinct card on the page; edge\n // border + soft shadow + the cozy pillow radius complete the silhouette.\n // Always painted — an authored card stays a card even inside a dialog.\n base: `bg-surface-raised text-surface-raised-foreground ${CZ.edge} ${CZ.radius} ${CZ.shadow}`,\n gesture: CZ_GESTURE.surface,\n }),\n\n [SurfaceVariant.RAISED]: recipe({\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 ${CZ.radius} ${CZ.shadowLg} ${CZ.edge}`,\n motion: {\n enter: CZ_MOTION.enterDirectional,\n exit: CZ_MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.OVERLAY]: recipe({\n // Dialog: heaviest soft-shadow + same big radius as BASE so dialogs\n // read as \"a card you can act inside\" — never visually demoted.\n base: `bg-background text-foreground ${CZ.radiusLg} ${CZ.shadowXL} ${CZ.edge}`,\n motion: {\n enter: CZ_MOTION.enterFadeZoom,\n exit: CZ_MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.INSET]: recipe({\n base: `bg-muted/60 text-foreground ${CZ.radius}`,\n }),\n\n [SurfaceVariant.SUNKEN]: recipe({\n base: 'bg-muted/40 text-foreground border-r border-foreground/8',\n }),\n\n [SurfaceVariant.TAB_PANEL]: recipe({\n // Soft continuation under tabs: bottom-only pillow radius, quiet edge.\n base: `bg-background text-foreground rounded-b-3xl border-x border-b border-foreground/8 ${CZ.shadow}`,\n gesture: CZ_GESTURE.surface,\n }),\n\n [SurfaceVariant.SHELL]: recipe({\n // Warm page shell; children provide the pillowy frames.\n base: 'bg-background text-foreground',\n }),\n\n [SurfaceVariant.TRANSIENT]: recipe({\n // Toast: small cushion, warm and floating but less massive than a dialog.\n base: `bg-background text-foreground ${CZ.radius} ${CZ.shadowLg} ${CZ.edge}`,\n motion: {\n enter: CZ_MOTION.enterDirectional,\n exit: CZ_MOTION.exitFadeZoom,\n },\n gesture: CZ_GESTURE.surface,\n }),\n};\n\n// ============================================================\n// FORM_CONTROL\n// Pillowy inputs (rounded-xl), soft inner shadow on default, no border\n// on filled. Switch is extra-rounded for the \"soft toggle\" feel.\n// ============================================================\n\nconst formControl: Record<FormControlVariant, UIBehaviorRecipe> = {\n [FormControlVariant.DEFAULT]: recipe({\n base: `bg-background ${CZ.edge} ${CZ.radiusMd} text-base md:text-sm text-foreground placeholder:text-muted-foreground/70 selection:bg-primary/25 selection:text-foreground shadow-[inset_0_1px_2px_rgba(0,0,0,0.03)]`,\n states: {\n focus: CZ.focus,\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: CZ.invalid,\n },\n sizes: {\n md: 'h-11 px-4 py-2 pointer-coarse:min-h-11',\n sm: 'h-9 px-3.5 text-sm pointer-coarse:min-h-11',\n lg: 'h-12 px-5 py-2 pointer-coarse:min-h-12',\n },\n motion: { transition: CZ_MOTION.formControl },\n }),\n\n [FormControlVariant.FILLED]: recipe({\n base: `bg-muted/70 ${CZ.radiusMd} border-0 text-base md:text-sm text-foreground placeholder:text-muted-foreground/70`,\n states: {\n focus: `${CZ.focus} focus-visible:bg-muted`,\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: CZ.invalid,\n },\n sizes: {\n md: 'h-11 px-4 py-2 pointer-coarse:min-h-11',\n sm: 'h-9 px-3.5 text-sm pointer-coarse:min-h-11',\n lg: 'h-12 px-5 py-2 pointer-coarse:min-h-12',\n },\n motion: { transition: CZ_MOTION.formControl },\n }),\n\n [FormControlVariant.UNDERLINED]: recipe({\n base: 'bg-transparent border-0 border-b border-foreground/15 rounded-none text-base md:text-sm text-foreground placeholder:text-muted-foreground/70',\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-11 px-0 py-2 pointer-coarse:min-h-11',\n sm: 'h-9 px-0 text-sm pointer-coarse:min-h-11',\n lg: 'h-12 px-0 py-2 pointer-coarse:min-h-12',\n },\n motion: {\n transition:\n 'transition-[border-color] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n },\n }),\n\n [FormControlVariant.CHECKBOX]: recipe({\n // Pillowy checkbox: rounded-md (not rounded-sm). Cozy avoids hard\n // right angles even on tiny controls.\n base: `${CZ.edge} rounded-md`,\n states: {\n focus: CZ.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: CZ.invalid,\n },\n motion: {\n transition:\n 'transition-[color,box-shadow,background-color] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n },\n }),\n\n [FormControlVariant.SWITCH]: recipe({\n base: 'data-[state=unchecked]:bg-muted border border-foreground/12',\n states: {\n focus: CZ.focus,\n selected: 'data-[state=checked]:bg-primary',\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: CZ.invalid,\n },\n motion: {\n transition:\n 'transition-all duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// INDICATOR\n// Soft, low-saturation pills. No uppercase (cozy isn't shouting).\n// Full-rounded (\"pill\") shape because the whole theme leans pillowy.\n// ============================================================\n\nconst czIndicatorShared = {\n states: { hover: '[a&]:hover:opacity-[var(--opacity-hover)]', focus: CZ.focus, invalid: CZ.invalid },\n motion: { transition: CZ_MOTION.interactive },\n};\n\nconst indicator: Record<IndicatorVariant, UIBehaviorRecipe> = {\n [IndicatorVariant.NEUTRAL]: recipe({\n base: 'bg-muted/70 text-muted-foreground rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n [IndicatorVariant.INFO]: recipe({\n base: 'bg-info/12 text-info rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n [IndicatorVariant.SUCCESS]: recipe({\n base: 'bg-success/12 text-success rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n [IndicatorVariant.WARNING]: recipe({\n base: 'bg-warning/15 text-warning rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n [IndicatorVariant.ERROR]: recipe({\n base: 'bg-destructive/12 text-destructive rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n};\n\n// ============================================================\n// SELECTABLE\n// Cozy avoids the underline-tab idiom (too sharp). Active state is a\n// soft fill instead. Pill variant is the natural default.\n// ============================================================\n\nconst selectable: Record<SelectableVariant, UIBehaviorRecipe> = {\n [SelectableVariant.FILLED]: recipe({\n base: `${CZ.radius} text-sm outline-hidden`,\n states: {\n hover: 'hover:bg-muted',\n focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n selected:\n 'data-[active=true]:bg-primary/12 data-[active=true]:text-primary data-[active=true]:font-medium data-[state=active]:bg-primary/12 data-[state=active]:text-primary',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-8 text-xs', md: 'h-10 text-sm', lg: 'h-12 text-sm' },\n motion: { transition: CZ_MOTION.selectable },\n gesture: CZ_GESTURE.selectable,\n }),\n [SelectableVariant.UNDERLINE]: recipe({\n // Even cozy's underline is soft: the active state thickens but the\n // \"underline\" is a rounded 2px bar, not a sharp rule. Border-radius\n // on a border-bottom doesn't render visibly, but the OFFSET\n // (border-spacing via padding) keeps it from touching the descenders.\n base: 'rounded-none border-b-2 border-transparent text-sm text-muted-foreground outline-hidden',\n states: {\n hover: 'hover:text-foreground',\n focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n selected: 'data-[state=active]:border-primary data-[state=active]:text-primary data-[state=active]:font-medium',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-8 text-xs pb-2', md: 'h-10 text-sm pb-2.5', lg: 'h-12 text-sm pb-3.5' },\n motion: { transition: CZ_MOTION.selectable },\n }),\n [SelectableVariant.PILL]: recipe({\n base: 'rounded-full text-sm outline-hidden',\n states: {\n hover: 'hover:bg-muted',\n focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n selected:\n 'data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:shadow-[0_2px_8px_rgba(0,0,0,0.06)]',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-8 px-3.5 text-xs', md: 'h-10 px-5 text-sm', lg: 'h-12 px-6 text-sm' },\n motion: { transition: CZ_MOTION.selectable },\n }),\n [SelectableVariant.INDICATOR]: recipe({\n base: `${CZ.radius} text-sm outline-hidden`,\n states: {\n hover: 'hover:bg-muted',\n focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n selected:\n 'data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-medium data-[active=true]:border-s-2 data-[active=true]:border-primary',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-8 text-xs', md: 'h-10 text-sm', lg: 'h-12 text-sm' },\n motion: { transition: CZ_MOTION.selectable },\n // INDICATOR has a start-edge vertical bar — the 2px x-nudge from\n // CZ_GESTURE.selectable visually leads the row toward where the\n // indicator will materialize on selection. Reinforces the \"I'm a\n // selectable list row\" affordance.\n gesture: CZ_GESTURE.selectable,\n }),\n};\n\n// NOTE on selectable gesture coverage:\n// FILLED + INDICATOR — get x-nudge gesture (generic / sidebar list rows\n// where horizontal hint reads as affordance).\n// UNDERLINE + PILL — NO gesture (fixed-position tabs and centered\n// chips: a horizontal slide would either move the\n// underline anchor visually OR break chip layout\n// symmetry — the press/hover bg fill is the\n// appropriate affordance for those variants).\n\n// ============================================================\n// OVERLAY, DIVIDER, SKELETON\n// ============================================================\n\nconst overlayBackdrop: UIBehaviorRecipe = recipe({\n // Warm-tinted scrim with subtle blur — keeps the cozy ambient mood\n // even during modal interactions.\n base: 'bg-foreground/30 backdrop-blur-[6px]',\n motion: {\n enter: CZ_MOTION.backdropEnter,\n exit: CZ_MOTION.backdropExit,\n },\n});\n\nconst divider: UIBehaviorRecipe = recipe({ base: 'bg-foreground/8 shrink-0' });\n\nconst skeleton: UIBehaviorRecipe = recipe({\n base: `bg-muted/70 animate-pulse ${CZ.radiusMd} 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/85 backdrop-blur-[2px]',\n motion: {\n enter: 'animate-in fade-in-0 duration-[var(--motion-duration-slow)] ease-[var(--motion-easing-enter)] motion-reduce:animate-none',\n exit: 'animate-out fade-out-0 duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-exit)] motion-reduce:animate-none',\n },\n});\n\n// ============================================================\n// TYPOGRAPHY\n// DM Sans / Plus Jakarta — humanist sans with rounded terminals.\n// h1 stays in the mid-tier (text-3xl) — cozy isn't hero-typography\n// territory; it's \"warm tone\" territory. Body uses normal weight\n// (vs default's implicit semibold-ish vibe).\n// ============================================================\n\nconst typography: Record<TypographyVariant, UIBehaviorRecipe> = {\n [TypographyVariant.HEADING]: recipe({\n base: 'font-heading font-semibold leading-tight tracking-tight text-foreground',\n sizes: {\n h1: 'text-3xl',\n h2: 'text-2xl',\n h3: 'text-xl',\n h4: 'text-lg',\n md: 'text-lg',\n },\n }),\n [TypographyVariant.BODY]: recipe({\n // Slightly larger body (text-[0.9375rem] / 15px) than default 14px —\n // cozy is reading-comfortable without going full editorial 16px.\n // `font-sans` (NOT `font-body`) — only `font-sans/serif/mono/heading/display`\n // are exposed as Tailwind utilities via @theme; `font-sans` resolves to\n // `var(--font-body)` which our requiredCustomTokens overrides to DM Sans.\n // Using `font-body` here would silently no-op.\n base: 'font-sans text-foreground text-[0.9375rem] leading-relaxed',\n sizes: { sm: 'text-sm', md: 'text-[0.9375rem]', lg: 'text-base' },\n }),\n [TypographyVariant.LABEL]: recipe({\n base: 'font-sans font-medium text-sm leading-snug text-foreground',\n sizes: { sm: 'text-xs', md: 'text-sm', lg: 'text-base' },\n }),\n [TypographyVariant.DESCRIPTION]: recipe({\n base: 'font-sans text-muted-foreground text-sm leading-relaxed',\n sizes: { sm: 'text-xs', md: 'text-sm' },\n }),\n [TypographyVariant.CODE]: recipe({\n base: `font-mono text-[0.875em] bg-muted/70 ${CZ.radiusMd} px-2 py-0.5`,\n sizes: { sm: 'text-xs', md: 'text-sm', lg: 'text-base' },\n }),\n};\n\n// ============================================================\n// SPACING\n// Roomy but not editorial-spacious. The pillowy radii already create\n// visual breathing room — we don't need to pile on whitespace too.\n// ============================================================\n\nconst spacing: ComponentStyleTheme['spacing'] = {\n [SpacingSemantic.ELEMENT]: '0.625rem',\n [SpacingSemantic.ITEM]: '0.375rem',\n [SpacingSemantic.GROUP]: '1rem',\n [SpacingSemantic.FIELD]: '1.25rem',\n [SpacingSemantic.SECTION]: '2rem',\n [SpacingSemantic.REGION]: '3rem',\n [SpacingSemantic.CARD]: '1.5rem',\n [SpacingSemantic.CONTAINER]: '2rem',\n};\n\n// ============================================================\n// REQUIRED CUSTOM TOKENS — warm cream palette + humanist sans\n//\n// Cozy's identity is its WARMTH. Without these overrides the theme\n// inherits the host's typically-cool default palette and reads as\n// \"default theme with rounder corners\". The warm-paper + dusty-rose +\n// sage palette is what makes the page feel \"occupied\".\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 // === Warm cream / oat background. Hue 65 (warm yellow-orange) at\n // very low chroma reads as \"linen\", not \"yellow page\". Dark mode\n // shifts to a warm off-black (hue 30, deep brown-black) — same\n // warmth, inverted lightness.\n background: colorOverride('0.975 0.012 65', '0.16 0.012 30'),\n foreground: colorOverride('0.22 0.015 30', '0.96 0.008 65'),\n\n // === Primary: dusty terracotta.\n //\n // ⚠ Wave G follow-up TR-13 (contrast correction): light-mode primary\n // was originally L=0.55 chroma 0.14 hue 35; that gives sRGB Y≈0.27\n // → only ~3.2:1 contrast against the cream foreground (Y≈0.96), well\n // below WCAG AA 4.5:1. Earlier self-review claimed 5.0:1 — that was\n // an OKLCH-L → sRGB-Y conversion mistake (reds at low-mid L have\n // higher Y than L would suggest because terracotta sits between red\n // and orange where eye-luminance peaks).\n //\n // Fix: deepen LIGHT primary to L=0.45 chroma 0.16 hue 35 (a richer\n // \"burnt sienna / deep cinnamon\" — still warm and dusty, just one\n // shade more saturated). New contrast: L=0.45 vs L=0.985 cream ≈\n // 4.85:1 (AA pass, no longer borderline). Dark-mode primary L=0.72\n // unchanged — paired with the deep brown-black foreground (L=0.16),\n // contrast is ~6.2:1, comfortably AA. The hue 35 (warm orange) is\n // preserved end-to-end so the brand identity stays \"linen + sunset\".\n primary: colorOverride('0.45 0.16 35', '0.72 0.14 35'),\n 'primary-foreground': colorOverride('0.985 0.008 65', '0.16 0.012 30'),\n\n // === Secondary: pale sage (hue 130). Cool counterpoint that keeps\n // the warm bg from being overwhelming. Subtle — chroma 0.025.\n secondary: colorOverride('0.92 0.025 130', '0.24 0.02 140'),\n 'secondary-foreground': colorOverride('0.30 0.04 140', '0.92 0.025 130'),\n\n // === Muted: even paler than secondary, neutral-warm.\n muted: colorOverride('0.94 0.012 65', '0.21 0.012 30'),\n 'muted-foreground': colorOverride('0.48 0.02 30', '0.72 0.012 65'),\n\n // === Borders: very soft, low-chroma warm tint.\n // Ring anchors on the primary so focus rings match the brand;\n // updated to the deepened primary L=0.45 (TR-13).\n border: colorOverride('0.88 0.015 50', '0.30 0.012 30'),\n ring: colorOverride('0.45 0.16 35', '0.72 0.14 35'),\n input: colorOverride('0.88 0.015 50', '0.30 0.012 30'),\n\n // === Destructive: warm red (hue 22 — closer to cinnamon than to\n // a fire-engine red). Stays in the warm family.\n destructive: colorOverride('0.55 0.20 22', '0.65 0.22 22'),\n 'destructive-foreground': colorSingle('1 0 0'),\n\n // === Semantic: shifted toward warm hues so they don't fight the\n // cozy palette. Success = warm green (hue 145), warning = honey\n // (hue 75), info = dusty teal (hue 200).\n //\n // ⚠ TR-13 contrast correction: same sRGB-Y > OKLCH-L issue as\n // primary affects the high-luminance success-green (~3.0:1 with\n // white) and info-cyan (~3.4:1 with white). Flip both foregrounds\n // to near-black for AA in light mode (≥5:1). Warning was already\n // black-on-amber so it stays — that pair has always been ≥7:1.\n info: colorOverride('0.62 0.10 200', '0.72 0.12 200'),\n 'info-foreground': colorSingle('0.16 0.012 30'),\n success: colorOverride('0.55 0.14 145', '0.70 0.16 145'),\n 'success-foreground': colorSingle('0.16 0.012 30'),\n warning: colorOverride('0.70 0.14 75', '0.78 0.16 75'),\n 'warning-foreground': colorSingle('0.16 0.012 30'),\n\n // === Accent gradient: terracotta → peach → dusty-rose. A \"warm\n // sunset\" sweep that fits the cozy mood (vs default's cool\n // violet/blue/pink and brutalist's electric blue/yellow/pink).\n // 'from' anchors on the (deepened, post-TR-13) primary terracotta.\n 'accent-gradient-from': colorOverride('0.45 0.16 35', '0.72 0.14 35'),\n 'accent-gradient-via': colorOverride('0.72 0.13 55', '0.78 0.14 55'),\n 'accent-gradient-to': colorOverride('0.65 0.14 15', '0.72 0.16 15'),\n\n // === Font stacks: humanist sans with rounded terminals (DM Sans\n // primary, Plus Jakarta + Outfit as warm alternates, system-ui\n // fallback). No serif/mono distinction for headings — cozy is\n // \"warm consistency\" rather than \"typographic hierarchy\".\n 'font-heading': stringSingle(\n \"'DM Sans', 'Plus Jakarta Sans', Outfit, 'Nunito Sans', -apple-system, 'SF Pro Text', system-ui, sans-serif\"\n ),\n 'font-body': stringSingle(\n \"'DM Sans', 'Plus Jakarta Sans', Outfit, 'Nunito Sans', -apple-system, 'SF Pro Text', system-ui, sans-serif\"\n ),\n};\n\n// ============================================================\n// ASSEMBLED THEME\n// ============================================================\n\nexport const cozyTheme: ComponentStyleTheme = {\n id: 'cozy',\n name: 'Cozy',\n description:\n 'Warm, soft theme for wellness, journaling, B2C onboarding, and friendly internal tools. Pillowy radii (rounded-2xl baseline, rounded-3xl on cards/dialogs), soft long-blur shadows (low opacity, 20–64px blur), spring-physics gestures, generous ease-out motion. Warm-cream background with dusty-terracotta primary and sage secondary — a \"linen + sunset\" palette that never goes grey or cold. DM Sans / Plus Jakarta humanist sans with rounded letterforms. Pill-shaped indicators (no uppercase shouting), pill-active selectables (underline avoided as too sharp). Ships its own warm palette + humanist sans stack 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: '1rem',\n backgroundLayer: {\n // Subtle warm radial-gradient mesh — barely-perceptible \"ambient\n // glow\" behind content. Animates very slowly (45s) so it never\n // distracts from reading.\n background:\n 'radial-gradient(at 25% 20%, oklch(0.85 0.08 35) 0px, transparent 50%), radial-gradient(at 80% 70%, oklch(0.88 0.06 130) 0px, transparent 50%)',\n classes: 'opacity-30 animate-[mesh-shift_45s_ease_infinite] dark:opacity-15 motion-reduce:animate-none',\n },\n chartStyle: {\n // Cozy charts: rounded bar corners, soft tooltip shadows, generous\n // typography, normal animation.\n colorShadeLight: 400,\n colorShadeDark: 300,\n gridPadding: { top: 30, right: 20, bottom: 30, left: 60 },\n axis: {\n showAxisLine: false,\n showTicks: false,\n splitLineType: 'dashed',\n hideOverlap: true,\n yAxisNameLocation: 'middle',\n yAxisNameGap: 50,\n },\n tooltip: {\n extraCss:\n 'border-radius: 12px; box-shadow: 0 8px 32px rgba(0,0,0,0.08); border: 1px solid color-mix(in oklch, currentColor 12%, transparent);',\n borderWidth: 1,\n },\n animation: { enabled: true, durationMs: 600, easing: 'cubicOut' },\n series: { lineWidth: 2, pointSize: 5, areaOpacity: 0.18, barBorderRadius: 8, pieBorderWidth: 2 },\n typography: {\n titleFontSize: 16,\n titleFontWeight: 500,\n subtitleFontSize: 13,\n legendFontSize: 12,\n tooltipFontSize: 12,\n axisLabelFontSize: 11,\n axisNameFontSize: 12,\n },\n emphasis: { shadowBlur: 16, shadowColor: 'rgba(0, 0, 0, 0.10)', shadowOffsetX: 0 },\n responsive: {\n smallMaxWidth: 400,\n mediumMaxWidth: 799,\n smallGridPadding: { top: 20, right: 10, bottom: 20, left: 30 },\n mediumGridPadding: { left: 50, right: 20, bottom: 40 },\n hideLegendOnSmall: true,\n smallAxisLabelRotate: 45,\n smallFontSize: 10,\n mediumFontSize: 11,\n },\n multiSeriesLegendBottomPadding: 50,\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"cozy.theme.js","sourceRoot":"","sources":["../../../../src/themes/cozy.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// Cozy theme (Soft / Warm)\n//\n// Persona: wellness apps, journaling, B2C onboarding, friendly\n// internal tools, learning platforms.\n// References: Notion (warm mode), Calm, Headspace, early-stage\n// consumer SaaS, Stripe-light vibes.\n//\n// Design DNA:\n// - PILLOWY radius (rounded-2xl baseline; rounded-3xl on cards/dialogs).\n// The whole UI feels like rounded river stones, not card stock.\n// - WARM palette: cream / oat / dusty-rose foreground, sage muted,\n// terracotta accent. Never grey. Never cold. The page feels\n// \"occupied\" by warmth even before any content.\n// - SOFT, LONG shadows: low-opacity, large blur radius\n// (`shadow-[0_8px_32px_rgba(0,0,0,0.06)]`). Things rest gently\n// above the page rather than snapping into elevation.\n// - SPRINGY motion: spring physics on interactive gestures (matches\n// glass), generous duration on transitions. The UI \"settles\"\n// rather than \"snaps\".\n// - DM Sans / Plus Jakarta — humanist sans with warm letterforms,\n// soft round terminals (vs Geist's industrial precision).\n// - Underline-NEVER on selectable tabs (too sharp); pill-with-soft-bg\n// instead. The whole theme avoids hard right angles where possible.\n// - Body weight stays normal (not 500/600); cozy isn't loud.\n// ============================================================\n\n// -- Shared constants --\n\nconst CZ = {\n /** Soft, low-opacity border — almost invisible against bg, present on hover. */\n hairline: 'border border-foreground/8',\n edge: 'border border-foreground/12',\n /** Pillowy radius baseline. */\n radius: 'rounded-2xl',\n radiusLg: 'rounded-3xl',\n /** Mid radius for badges/pills. */\n radiusMd: 'rounded-xl',\n /** Soft long shadow — low opacity, large blur. */\n shadow: 'shadow-[0_4px_20px_rgba(0,0,0,0.05)] dark:shadow-[0_4px_20px_rgba(0,0,0,0.35)]',\n shadowLg: 'shadow-[0_8px_32px_rgba(0,0,0,0.07)] dark:shadow-[0_8px_32px_rgba(0,0,0,0.45)]',\n shadowXL: 'shadow-[0_24px_64px_rgba(0,0,0,0.10)] dark:shadow-[0_24px_64px_rgba(0,0,0,0.55)]',\n focus:\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n invalid:\n 'aria-invalid:ring-destructive/30 dark:aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n};\n\n// ============================================================\n// MOTION PERSONALITY — Cozy\n// ============================================================\n// Hover/focus : NORMAL (250ms) + SPRING → gentle settle into rest.\n// SPRING easing here is the\n// cubic-bezier ease-out token\n// (cubic-bezier(0.22, 1, 0.36, 1)\n// ≈ easeOutExpo) — monotonic,\n// slow tail, NO overshoot.\n// Matches the \"pillowy\"\n// surface aesthetic; the\n// SETTLE is the personality,\n// not bouncing.\n// Overlay enter: SLOW (350ms) + ENTER → generous, friendly pace.\n// Overlay exit : NORMAL (250ms) + EXIT → quicker than enter.\n// Backdrop : SLOW/NORMAL + ENTER/EXIT → matches overlays.\n// Gestures : SPRING physics on motion.dev. Lower stiffness (250-300)\n// + higher damping (22-30) than Glass — Cozy spring\n// is \"gentle landing on a cushion\" vs Glass \"Apple\n// UIKit precision.\" `selectable` adds a horizontal\n// nudge for list-item affordance (mirrors Glass for\n// cross-theme parity).\n//\n// TR-14 motion-coherence: switched interactive/formControl/selectable\n// from EMPHASIZED (cubic-bezier(0.2, 0, 0, 1.2) — has 20% Y overshoot,\n// reads as \"snappy with bounce\") to SPRING (no overshoot, slow settle —\n// \"the cozy feel\"). Backdrop animations now have explicit easing.\n// `selectable` gesture added (was missing — Glass has it, Cozy didn't,\n// breaking cross-theme parity for list affordances).\n// ============================================================\nconst CZ_MOTION = {\n interactive:\n 'transition-[background-color,color,border-color,box-shadow,transform] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n formControl:\n 'transition-[color,border-color,box-shadow,background-color] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n selectable:\n 'transition-[background-color,color,border-color] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\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-slow)] data-[state=open]:ease-[var(--motion-easing-enter)] 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-normal)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none',\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-slow)] data-[state=open]:ease-[var(--motion-easing-enter)] data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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-slow)] data-[state=open]:ease-[var(--motion-easing-enter)] 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-normal)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none',\n};\n\n// Spring gestures: subtle scale on press, gentle hover lift.\n//\n// Cozy springs are softer than Glass: lower stiffness (slower oscillation\n// period) + higher damping (faster decay, less swing). Glass mimics\n// Apple UIKit precision; Cozy mimics \"Calm app\" / \"Notion\" friendliness —\n// the tactile equivalent of pressing a foam cushion vs a multitouch glass\n// surface. `selectable` matches Glass's pattern (horizontal x-nudge of\n// 2px on hover) so list-item affordances feel consistent across themes.\nconst CZ_GESTURE = {\n interactive: {\n whileHover: { scale: 1.015 },\n whileTap: { scale: 0.97 },\n transition: { type: 'spring' as const, stiffness: 300, damping: 24 },\n } as const,\n surface: {\n whileHover: { scale: 1.005 },\n transition: { type: 'spring' as const, stiffness: 250, damping: 22 },\n } as const,\n // TR-14: added for list-item affordance parity with Glass.\n // Slightly softer stiffness than Glass's selectable (350 vs 400)\n // and matching damping — list rows in Cozy should feel \"padded,\n // not snappy.\" The 2px horizontal nudge is the universal\n // \"I'm a clickable list row\" affordance.\n selectable: {\n whileHover: { x: 2 },\n whileTap: { scale: 0.99 },\n transition: { type: 'spring' as const, stiffness: 350, damping: 30 },\n } as const,\n};\n\n// ============================================================\n// INTERACTIVE\n// Pillowy buttons with soft-long shadows. Press = scale + tighter shadow.\n// ============================================================\n\nconst interactiveSizes: Record<string, string> = {\n xs: 'h-8 px-3.5 text-xs gap-1.5 pointer-coarse:min-h-10',\n sm: 'h-9 px-4 gap-2 pointer-coarse:min-h-11',\n md: 'h-11 px-5 py-2 pointer-coarse:min-h-11',\n lg: 'h-12 px-7 pointer-coarse:min-h-12',\n icon: 'size-11 pointer-coarse:min-h-11 pointer-coarse:min-w-11',\n 'icon-sm': 'size-9 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 ${CZ.radius} font-medium text-sm cursor-pointer ${CZ.shadow}`,\n states: {\n hover: 'hover:bg-primary/90 hover:shadow-[0_6px_24px_rgba(0,0,0,0.08)] dark:hover:shadow-[0_6px_24px_rgba(0,0,0,0.45)]',\n active: 'active:bg-primary/95 active:shadow-[0_2px_8px_rgba(0,0,0,0.04)]',\n focus: CZ.focus,\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.SECONDARY]: recipe({\n base: `bg-secondary text-secondary-foreground ${CZ.radius} font-medium text-sm cursor-pointer ${CZ.shadow}`,\n states: {\n hover: 'hover:bg-secondary/80',\n active: 'active:bg-secondary/70',\n focus: CZ.focus,\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.OUTLINE]: recipe({\n base: `bg-background text-foreground ${CZ.edge} ${CZ.radius} font-medium text-sm cursor-pointer`,\n states: {\n hover: 'hover:bg-muted hover:border-foreground/20',\n active: 'active:bg-muted/80',\n focus: CZ.focus,\n selected: 'data-[state=on]:bg-muted data-[state=on]:border-foreground/25',\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.DESTRUCTIVE]: recipe({\n base: `bg-destructive text-destructive-foreground ${CZ.radius} font-medium text-sm cursor-pointer ${CZ.shadow}`,\n states: {\n hover: 'hover:bg-destructive/90',\n active: 'active:bg-destructive/95',\n focus: CZ.focus,\n highlighted: 'focus:bg-destructive/15 focus:text-destructive',\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.GHOST]: recipe({\n base: `text-foreground ${CZ.radius} font-medium text-sm cursor-pointer`,\n states: {\n hover: 'hover:bg-muted',\n active: 'active:bg-muted/80',\n focus: CZ.focus,\n selected: 'data-[state=on]:bg-muted data-[state=on]:text-foreground',\n highlighted: 'focus:bg-muted',\n open: 'data-[state=open]:bg-muted',\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: { transition: CZ_MOTION.interactive },\n gesture: CZ_GESTURE.interactive,\n }),\n\n [InteractiveVariant.LINK]: recipe({\n base: 'text-primary font-medium text-sm cursor-pointer',\n states: {\n hover: 'hover:underline hover:underline-offset-[3px] hover:decoration-primary/50',\n active: 'active:text-primary/80',\n focus: CZ.focus,\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: {\n xs: 'h-8 px-2 text-xs gap-1.5 pointer-coarse:min-h-10',\n sm: 'h-9 px-2 gap-2 pointer-coarse:min-h-11',\n md: 'h-11 px-2 py-2 pointer-coarse:min-h-11',\n lg: 'h-12 px-2 pointer-coarse:min-h-12',\n icon: 'size-11 pointer-coarse:min-h-11 pointer-coarse:min-w-11',\n 'icon-sm': 'size-9 pointer-coarse:min-h-9 pointer-coarse:min-w-9',\n },\n motion: { transition: CZ_MOTION.interactive },\n }),\n\n [InteractiveVariant.ACCENT]: recipe({\n // Cozy accent: warm pastel sweep — terracotta → dusty rose → peach.\n // Restrained motion (5s, slow), the gradient drifts rather than races.\n base: `relative bg-primary text-primary-foreground font-semibold ${CZ.radius} bg-[length:300%_100%] bg-gradient-to-r from-accent-gradient-from via-accent-gradient-via to-accent-gradient-to animate-[gradient-rotate_6s_ease-in-out_infinite] motion-reduce:animate-none ${CZ.shadow} text-sm cursor-pointer`,\n states: {\n hover: 'hover:brightness-105',\n active: 'active:scale-[0.98]',\n focus: CZ.focus,\n disabled: CZ.disabled,\n invalid: CZ.invalid,\n },\n sizes: interactiveSizes,\n motion: {\n transition:\n 'transition-[background-position,filter,transform,shadow] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n },\n gesture: CZ_GESTURE.interactive,\n }),\n};\n\n// ============================================================\n// SURFACE\n// SURFACE PERSONALITY — soft cushions: pillowy radii, warm page shell, gentle\n// floating notices. Tab panels are attached pillows rather than hard panes.\n// Cards rest gently on the page with low-opacity, large-blur shadows.\n// Dialogs ARE elevated and get the heaviest soft-shadow in the lineup.\n// ============================================================\n\nconst surface: ComponentStyleTheme['surface'] = {\n [SurfaceVariant.BASE]: recipe({\n base: `bg-background text-foreground ${CZ.radiusLg} ${CZ.shadow} ${CZ.hairline}`,\n gesture: CZ_GESTURE.surface,\n }),\n\n [SurfaceVariant.CARD]: recipe({\n // Content card: the elevated `surface-raised` fill (pure white in light, a\n // lifted slate in dark) makes it read as a distinct card on the page; edge\n // border + soft shadow + the cozy pillow radius complete the silhouette.\n // Always painted — an authored card stays a card even inside a dialog.\n base: `bg-surface-raised text-surface-raised-foreground ${CZ.edge} ${CZ.radius} ${CZ.shadow}`,\n gesture: CZ_GESTURE.surface,\n }),\n\n [SurfaceVariant.RAISED]: recipe({\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 ${CZ.radius} ${CZ.shadowLg} ${CZ.edge}`,\n motion: {\n enter: CZ_MOTION.enterDirectional,\n exit: CZ_MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.OVERLAY]: recipe({\n // Dialog: heaviest soft-shadow + same big radius as BASE so dialogs\n // read as \"a card you can act inside\" — never visually demoted.\n base: `bg-background text-foreground ${CZ.radiusLg} ${CZ.shadowXL} ${CZ.edge}`,\n motion: {\n enter: CZ_MOTION.enterFadeZoom,\n exit: CZ_MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.INSET]: recipe({\n base: `bg-muted/60 text-foreground ${CZ.radius}`,\n }),\n\n [SurfaceVariant.SUNKEN]: recipe({\n base: 'bg-muted/40 text-foreground border-r border-foreground/8',\n }),\n\n [SurfaceVariant.TAB_PANEL]: recipe({\n // Soft continuation under tabs: bottom-only pillow radius, quiet edge.\n base: `bg-background text-foreground rounded-b-3xl border-x border-b border-foreground/8 ${CZ.shadow}`,\n gesture: CZ_GESTURE.surface,\n }),\n\n [SurfaceVariant.SHELL]: recipe({\n // Warm page shell; children provide the pillowy frames.\n base: 'bg-background text-foreground',\n }),\n\n [SurfaceVariant.TRANSIENT]: recipe({\n // Toast: small cushion, warm and floating but less massive than a dialog.\n base: `bg-background text-foreground ${CZ.radius} ${CZ.shadowLg} ${CZ.edge}`,\n motion: {\n enter: CZ_MOTION.enterDirectional,\n exit: CZ_MOTION.exitFadeZoom,\n },\n gesture: CZ_GESTURE.surface,\n }),\n};\n\n// ============================================================\n// FORM_CONTROL\n// Pillowy inputs (rounded-xl), soft inner shadow on default, no border\n// on filled. Switch is extra-rounded for the \"soft toggle\" feel.\n// ============================================================\n\nconst formControl: Record<FormControlVariant, UIBehaviorRecipe> = {\n [FormControlVariant.DEFAULT]: recipe({\n base: `bg-background ${CZ.edge} ${CZ.radiusMd} text-base md:text-sm text-foreground placeholder:text-muted-foreground/70 selection:bg-primary/25 selection:text-foreground shadow-[inset_0_1px_2px_rgba(0,0,0,0.03)]`,\n states: {\n focus: CZ.focus,\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: CZ.invalid,\n },\n sizes: {\n md: 'h-11 px-4 py-2 pointer-coarse:min-h-11',\n sm: 'h-9 px-3.5 text-sm pointer-coarse:min-h-11',\n lg: 'h-12 px-5 py-2 pointer-coarse:min-h-12',\n },\n motion: { transition: CZ_MOTION.formControl },\n }),\n\n [FormControlVariant.FILLED]: recipe({\n base: `bg-muted/70 ${CZ.radiusMd} border-0 text-base md:text-sm text-foreground placeholder:text-muted-foreground/70`,\n states: {\n focus: `${CZ.focus} focus-visible:bg-muted`,\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: CZ.invalid,\n },\n sizes: {\n md: 'h-11 px-4 py-2 pointer-coarse:min-h-11',\n sm: 'h-9 px-3.5 text-sm pointer-coarse:min-h-11',\n lg: 'h-12 px-5 py-2 pointer-coarse:min-h-12',\n },\n motion: { transition: CZ_MOTION.formControl },\n }),\n\n [FormControlVariant.UNDERLINED]: recipe({\n base: 'bg-transparent border-0 border-b border-foreground/15 rounded-none text-base md:text-sm text-foreground placeholder:text-muted-foreground/70',\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-11 px-0 py-2 pointer-coarse:min-h-11',\n sm: 'h-9 px-0 text-sm pointer-coarse:min-h-11',\n lg: 'h-12 px-0 py-2 pointer-coarse:min-h-12',\n },\n motion: {\n transition:\n 'transition-[border-color] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n },\n }),\n\n [FormControlVariant.CHECKBOX]: recipe({\n // Pillowy checkbox: rounded-md (not rounded-sm). Cozy avoids hard\n // right angles even on tiny controls.\n base: `${CZ.edge} rounded-md`,\n states: {\n focus: CZ.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: CZ.invalid,\n },\n motion: {\n transition:\n 'transition-[color,box-shadow,background-color] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n },\n }),\n\n [FormControlVariant.SWITCH]: recipe({\n base: 'data-[state=unchecked]:bg-muted border border-foreground/12',\n states: {\n focus: CZ.focus,\n selected: 'data-[state=checked]:bg-primary',\n disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',\n invalid: CZ.invalid,\n },\n motion: {\n transition:\n 'transition-all duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-spring)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// INDICATOR\n// Soft, low-saturation pills. No uppercase (cozy isn't shouting).\n// Full-rounded (\"pill\") shape because the whole theme leans pillowy.\n// ============================================================\n\nconst czIndicatorShared = {\n states: { hover: '[a&]:hover:opacity-[var(--opacity-hover)]', focus: CZ.focus, invalid: CZ.invalid },\n motion: { transition: CZ_MOTION.interactive },\n};\n\nconst indicator: Record<IndicatorVariant, UIBehaviorRecipe> = {\n [IndicatorVariant.NEUTRAL]: recipe({\n base: 'bg-muted/70 text-muted-foreground rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n [IndicatorVariant.INFO]: recipe({\n base: 'bg-info/12 text-info rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n [IndicatorVariant.SUCCESS]: recipe({\n base: 'bg-success/12 text-success rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n [IndicatorVariant.WARNING]: recipe({\n base: 'bg-warning/15 text-warning rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n [IndicatorVariant.ERROR]: recipe({\n base: 'bg-destructive/12 text-destructive rounded-full px-2.5 py-0.5 text-xs font-medium',\n ...czIndicatorShared,\n }),\n};\n\n// ============================================================\n// SELECTABLE\n// Cozy avoids the underline-tab idiom (too sharp). Active state is a\n// soft fill instead. Pill variant is the natural default.\n// ============================================================\n\nconst selectable: Record<SelectableVariant, UIBehaviorRecipe> = {\n [SelectableVariant.FILLED]: recipe({\n base: `${CZ.radius} text-sm outline-hidden`,\n states: {\n hover: 'hover:bg-muted',\n focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n selected:\n 'data-[active=true]:bg-primary/12 data-[active=true]:text-primary data-[active=true]:font-medium data-[state=active]:bg-primary/12 data-[state=active]:text-primary',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-8 text-xs', md: 'h-10 text-sm', lg: 'h-12 text-sm' },\n motion: { transition: CZ_MOTION.selectable },\n gesture: CZ_GESTURE.selectable,\n }),\n [SelectableVariant.UNDERLINE]: recipe({\n // Even cozy's underline is soft: the active state thickens but the\n // \"underline\" is a rounded 2px bar, not a sharp rule. Border-radius\n // on a border-bottom doesn't render visibly, but the OFFSET\n // (border-spacing via padding) keeps it from touching the descenders.\n base: 'rounded-none border-b-2 border-transparent text-sm text-muted-foreground outline-hidden',\n states: {\n hover: 'hover:text-foreground',\n focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n selected: 'data-[state=active]:border-primary data-[state=active]:text-primary data-[state=active]:font-medium',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-8 text-xs pb-2', md: 'h-10 text-sm pb-2.5', lg: 'h-12 text-sm pb-3.5' },\n motion: { transition: CZ_MOTION.selectable },\n }),\n [SelectableVariant.PILL]: recipe({\n base: 'rounded-full text-sm outline-hidden',\n states: {\n hover: 'hover:bg-muted',\n focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n selected:\n 'data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:shadow-[0_2px_8px_rgba(0,0,0,0.06)]',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-8 px-3.5 text-xs', md: 'h-10 px-5 text-sm', lg: 'h-12 px-6 text-sm' },\n motion: { transition: CZ_MOTION.selectable },\n }),\n [SelectableVariant.INDICATOR]: recipe({\n base: `${CZ.radius} text-sm outline-hidden`,\n states: {\n hover: 'hover:bg-muted',\n focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n selected:\n 'data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-medium data-[active=true]:border-s-2 data-[active=true]:border-primary',\n disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',\n },\n sizes: { sm: 'h-8 text-xs', md: 'h-10 text-sm', lg: 'h-12 text-sm' },\n motion: { transition: CZ_MOTION.selectable },\n // INDICATOR has a start-edge vertical bar — the 2px x-nudge from\n // CZ_GESTURE.selectable visually leads the row toward where the\n // indicator will materialize on selection. Reinforces the \"I'm a\n // selectable list row\" affordance.\n gesture: CZ_GESTURE.selectable,\n }),\n};\n\n// NOTE on selectable gesture coverage:\n// FILLED + INDICATOR — get x-nudge gesture (generic / sidebar list rows\n// where horizontal hint reads as affordance).\n// UNDERLINE + PILL — NO gesture (fixed-position tabs and centered\n// chips: a horizontal slide would either move the\n// underline anchor visually OR break chip layout\n// symmetry — the press/hover bg fill is the\n// appropriate affordance for those variants).\n\n// ============================================================\n// OVERLAY, DIVIDER, SKELETON\n// ============================================================\n\nconst overlayBackdrop: UIBehaviorRecipe = recipe({\n // Warm-tinted scrim with subtle blur — keeps the cozy ambient mood\n // even during modal interactions.\n base: 'bg-foreground/30 backdrop-blur-[6px]',\n motion: {\n enter: CZ_MOTION.backdropEnter,\n exit: CZ_MOTION.backdropExit,\n },\n});\n\nconst divider: Record<DividerVariant, UIBehaviorRecipe> = {\n [DividerVariant.DEFAULT]: recipe({ base: 'bg-foreground/8 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/8' }),\n};\n\nconst skeleton: UIBehaviorRecipe = recipe({\n base: `${SKELETON_NEUTRAL_TINT} animate-pulse ${CZ.radiusMd} 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/85 backdrop-blur-[2px]',\n motion: {\n enter: 'animate-in fade-in-0 duration-[var(--motion-duration-slow)] ease-[var(--motion-easing-enter)] motion-reduce:animate-none',\n exit: 'animate-out fade-out-0 duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-exit)] motion-reduce:animate-none',\n },\n});\n\n// ============================================================\n// TYPOGRAPHY\n// DM Sans / Plus Jakarta — humanist sans with rounded terminals.\n// h1 stays in the mid-tier (text-3xl) — cozy isn't hero-typography\n// territory; it's \"warm tone\" territory. Body uses normal weight\n// (vs default's implicit semibold-ish vibe).\n// ============================================================\n\nconst typography: Record<TypographyVariant, UIBehaviorRecipe> = {\n [TypographyVariant.HEADING]: recipe({\n base: 'font-heading font-semibold leading-tight tracking-tight text-foreground',\n sizes: {\n h1: 'text-3xl',\n h2: 'text-2xl',\n h3: 'text-xl',\n h4: 'text-lg',\n h5: 'text-base',\n md: 'text-lg',\n },\n }),\n [TypographyVariant.BODY]: recipe({\n // Slightly larger body (text-[0.9375rem] / 15px) than default 14px —\n // cozy is reading-comfortable without going full editorial 16px.\n // `font-sans` (NOT `font-body`) — only `font-sans/serif/mono/heading/display`\n // are exposed as Tailwind utilities via @theme; `font-sans` resolves to\n // `var(--font-body)` which our requiredCustomTokens overrides to DM Sans.\n // Using `font-body` here would silently no-op.\n base: 'font-sans text-foreground text-[0.9375rem] leading-relaxed',\n sizes: { sm: 'text-sm', md: 'text-[0.9375rem]', lg: 'text-base' },\n }),\n [TypographyVariant.LABEL]: recipe({\n base: 'font-sans font-medium text-sm leading-snug text-foreground',\n sizes: { sm: 'text-xs', md: 'text-sm', lg: 'text-base' },\n }),\n [TypographyVariant.DESCRIPTION]: recipe({\n base: 'font-sans text-muted-foreground text-sm leading-relaxed',\n sizes: { sm: 'text-xs', md: 'text-sm' },\n }),\n [TypographyVariant.CODE]: recipe({\n base: `font-mono text-[0.875em] bg-muted/70 ${CZ.radiusMd} px-2 py-0.5`,\n sizes: { sm: 'text-xs', md: 'text-sm', lg: 'text-base' },\n }),\n};\n\n// ============================================================\n// SPACING\n// Roomy but not editorial-spacious. The pillowy radii already create\n// visual breathing room — we don't need to pile on whitespace too.\n// ============================================================\n\nconst spacing: ComponentStyleTheme['spacing'] = {\n [SpacingSemantic.ELEMENT]: '0.625rem',\n [SpacingSemantic.ITEM]: '0.375rem',\n [SpacingSemantic.GROUP]: '1rem',\n [SpacingSemantic.FIELD]: '1.25rem',\n [SpacingSemantic.SECTION]: '2rem',\n [SpacingSemantic.REGION]: '3rem',\n [SpacingSemantic.CARD]: '1.5rem',\n [SpacingSemantic.CONTAINER]: '2rem',\n};\n\n// ============================================================\n// REQUIRED CUSTOM TOKENS — warm cream palette + humanist sans\n//\n// Cozy's identity is its WARMTH. Without these overrides the theme\n// inherits the host's typically-cool default palette and reads as\n// \"default theme with rounder corners\". The warm-paper + dusty-rose +\n// sage palette is what makes the page feel \"occupied\".\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 // === Warm cream / oat background. Hue 65 (warm yellow-orange) at\n // very low chroma reads as \"linen\", not \"yellow page\". Dark mode\n // shifts to a warm off-black (hue 30, deep brown-black) — same\n // warmth, inverted lightness.\n background: colorOverride('0.975 0.012 65', '0.16 0.012 30'),\n foreground: colorOverride('0.22 0.015 30', '0.96 0.008 65'),\n\n // === Primary: dusty terracotta.\n //\n // ⚠ Wave G follow-up TR-13 (contrast correction): light-mode primary\n // was originally L=0.55 chroma 0.14 hue 35; that gives sRGB Y≈0.27\n // → only ~3.2:1 contrast against the cream foreground (Y≈0.96), well\n // below WCAG AA 4.5:1. Earlier self-review claimed 5.0:1 — that was\n // an OKLCH-L → sRGB-Y conversion mistake (reds at low-mid L have\n // higher Y than L would suggest because terracotta sits between red\n // and orange where eye-luminance peaks).\n //\n // Fix: deepen LIGHT primary to L=0.45 chroma 0.16 hue 35 (a richer\n // \"burnt sienna / deep cinnamon\" — still warm and dusty, just one\n // shade more saturated). New contrast: L=0.45 vs L=0.985 cream ≈\n // 4.85:1 (AA pass, no longer borderline). Dark-mode primary L=0.72\n // unchanged — paired with the deep brown-black foreground (L=0.16),\n // contrast is ~6.2:1, comfortably AA. The hue 35 (warm orange) is\n // preserved end-to-end so the brand identity stays \"linen + sunset\".\n primary: colorOverride('0.45 0.16 35', '0.72 0.14 35'),\n 'primary-foreground': colorOverride('0.985 0.008 65', '0.16 0.012 30'),\n\n // === Secondary: pale sage (hue 130). Cool counterpoint that keeps\n // the warm bg from being overwhelming. Subtle — chroma 0.025.\n secondary: colorOverride('0.92 0.025 130', '0.24 0.02 140'),\n 'secondary-foreground': colorOverride('0.30 0.04 140', '0.92 0.025 130'),\n\n // === Muted: even paler than secondary, neutral-warm.\n muted: colorOverride('0.94 0.012 65', '0.21 0.012 30'),\n 'muted-foreground': colorOverride('0.48 0.02 30', '0.72 0.012 65'),\n\n // === Borders: very soft, low-chroma warm tint.\n // Ring anchors on the primary so focus rings match the brand;\n // updated to the deepened primary L=0.45 (TR-13).\n border: colorOverride('0.88 0.015 50', '0.30 0.012 30'),\n ring: colorOverride('0.45 0.16 35', '0.72 0.14 35'),\n input: colorOverride('0.88 0.015 50', '0.30 0.012 30'),\n\n // === Destructive: warm red (hue 22 — closer to cinnamon than to\n // a fire-engine red). Stays in the warm family.\n destructive: colorOverride('0.55 0.20 22', '0.65 0.22 22'),\n 'destructive-foreground': colorSingle('1 0 0'),\n\n // === Semantic: shifted toward warm hues so they don't fight the\n // cozy palette. Success = warm green (hue 145), warning = honey\n // (hue 75), info = dusty teal (hue 200).\n //\n // ⚠ TR-13 contrast correction: same sRGB-Y > OKLCH-L issue as\n // primary affects the high-luminance success-green (~3.0:1 with\n // white) and info-cyan (~3.4:1 with white). Flip both foregrounds\n // to near-black for AA in light mode (≥5:1). Warning was already\n // black-on-amber so it stays — that pair has always been ≥7:1.\n info: colorOverride('0.62 0.10 200', '0.72 0.12 200'),\n 'info-foreground': colorSingle('0.16 0.012 30'),\n success: colorOverride('0.55 0.14 145', '0.70 0.16 145'),\n 'success-foreground': colorSingle('0.16 0.012 30'),\n warning: colorOverride('0.70 0.14 75', '0.78 0.16 75'),\n 'warning-foreground': colorSingle('0.16 0.012 30'),\n\n // === Accent gradient: terracotta → peach → dusty-rose. A \"warm\n // sunset\" sweep that fits the cozy mood (vs default's cool\n // violet/blue/pink and brutalist's electric blue/yellow/pink).\n // 'from' anchors on the (deepened, post-TR-13) primary terracotta.\n 'accent-gradient-from': colorOverride('0.45 0.16 35', '0.72 0.14 35'),\n 'accent-gradient-via': colorOverride('0.72 0.13 55', '0.78 0.14 55'),\n 'accent-gradient-to': colorOverride('0.65 0.14 15', '0.72 0.16 15'),\n\n // === Font stacks: humanist sans with rounded terminals (DM Sans\n // primary, Plus Jakarta + Outfit as warm alternates, system-ui\n // fallback). No serif/mono distinction for headings — cozy is\n // \"warm consistency\" rather than \"typographic hierarchy\".\n 'font-heading': stringSingle(\n \"'DM Sans', 'Plus Jakarta Sans', Outfit, 'Nunito Sans', -apple-system, 'SF Pro Text', system-ui, sans-serif\"\n ),\n 'font-body': stringSingle(\n \"'DM Sans', 'Plus Jakarta Sans', Outfit, 'Nunito Sans', -apple-system, 'SF Pro Text', system-ui, sans-serif\"\n ),\n};\n\n// ============================================================\n// ASSEMBLED THEME\n// ============================================================\n\nexport const cozyTheme: ComponentStyleTheme = {\n id: 'cozy',\n name: 'Cozy',\n description:\n 'Warm, soft theme for wellness, journaling, B2C onboarding, and friendly internal tools. Pillowy radii (rounded-2xl baseline, rounded-3xl on cards/dialogs), soft long-blur shadows (low opacity, 20–64px blur), spring-physics gestures, generous ease-out motion. Warm-cream background with dusty-terracotta primary and sage secondary — a \"linen + sunset\" palette that never goes grey or cold. DM Sans / Plus Jakarta humanist sans with rounded letterforms. Pill-shaped indicators (no uppercase shouting), pill-active selectables (underline avoided as too sharp). Ships its own warm palette + humanist sans stack 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: '1rem',\n backgroundLayer: {\n // Subtle warm radial-gradient mesh — barely-perceptible \"ambient\n // glow\" behind content. Animates very slowly (45s) so it never\n // distracts from reading.\n background:\n 'radial-gradient(at 25% 20%, oklch(0.85 0.08 35) 0px, transparent 50%), radial-gradient(at 80% 70%, oklch(0.88 0.06 130) 0px, transparent 50%)',\n classes: 'opacity-30 animate-[mesh-shift_45s_ease_infinite] dark:opacity-15 motion-reduce:animate-none',\n },\n chartStyle: {\n // Cozy charts: rounded bar corners, soft tooltip shadows, generous\n // typography, normal animation.\n colorShadeLight: 400,\n colorShadeDark: 300,\n gridPadding: { top: 30, right: 20, bottom: 30, left: 60 },\n axis: {\n showAxisLine: false,\n showTicks: false,\n splitLineType: 'dashed',\n hideOverlap: true,\n yAxisNameLocation: 'middle',\n yAxisNameGap: 50,\n },\n tooltip: {\n extraCss:\n 'border-radius: 12px; box-shadow: 0 8px 32px rgba(0,0,0,0.08); border: 1px solid color-mix(in oklch, currentColor 12%, transparent);',\n borderWidth: 1,\n },\n animation: { enabled: true, durationMs: 600, easing: 'cubicOut' },\n series: { lineWidth: 2, pointSize: 5, areaOpacity: 0.18, barBorderRadius: 8, pieBorderWidth: 2 },\n typography: {\n titleFontSize: 16,\n titleFontWeight: 500,\n subtitleFontSize: 13,\n legendFontSize: 12,\n tooltipFontSize: 12,\n axisLabelFontSize: 11,\n axisNameFontSize: 12,\n },\n emphasis: { shadowBlur: 16, shadowColor: 'rgba(0, 0, 0, 0.10)', shadowOffsetX: 0 },\n responsive: {\n smallMaxWidth: 400,\n mediumMaxWidth: 799,\n smallGridPadding: { top: 20, right: 10, bottom: 20, left: 30 },\n mediumGridPadding: { left: 50, right: 20, bottom: 40 },\n hideLegendOnSmall: true,\n smallAxisLabelRotate: 45,\n smallFontSize: 10,\n mediumFontSize: 11,\n },\n multiSeriesLegendBottomPadding: 50,\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dense.theme.d.ts","sourceRoot":"","sources":["../../../../src/themes/dense.theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"dense.theme.d.ts","sourceRoot":"","sources":["../../../../src/themes/dense.theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAonB/E,eAAO,MAAM,UAAU,EAAE,mBAqBxB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InteractiveVariant, SurfaceVariant, FormControlVariant, IndicatorVariant, SelectableVariant, TypographyVariant, } from '@wildo-ai/presets-components-models';
|
|
1
|
+
import { DividerVariant, InteractiveVariant, SurfaceVariant, FormControlVariant, IndicatorVariant, SelectableVariant, TypographyVariant, SKELETON_NEUTRAL_TINT, } from '@wildo-ai/presets-components-models';
|
|
2
2
|
// Dense derives from the known-good default theme (full recipe coverage +
|
|
3
3
|
// correct types) and compacts it. The chart preset is shared with the default
|
|
4
4
|
// theme — imported from the package rather than re-authored.
|
|
@@ -484,14 +484,16 @@ const overlayBackdrop = recipe({
|
|
|
484
484
|
// ============================================================
|
|
485
485
|
// DIVIDER — Separator
|
|
486
486
|
// ============================================================
|
|
487
|
-
const divider =
|
|
488
|
-
base:
|
|
489
|
-
|
|
487
|
+
const divider = {
|
|
488
|
+
[DividerVariant.DEFAULT]: recipe({ base: 'bg-border shrink-0' }),
|
|
489
|
+
// Nested-disclosure guide: the theme's own divider material, as a left edge.
|
|
490
|
+
[DividerVariant.NESTING_GUIDE]: recipe({ base: 'border-s border-border' }),
|
|
491
|
+
};
|
|
490
492
|
// ============================================================
|
|
491
493
|
// SKELETON — Loading placeholders
|
|
492
494
|
// ============================================================
|
|
493
495
|
const skeleton = recipe({
|
|
494
|
-
base:
|
|
496
|
+
base: `${SKELETON_NEUTRAL_TINT} animate-pulse rounded-md motion-reduce:animate-none`,
|
|
495
497
|
});
|
|
496
498
|
const loadingSpinner = recipe({
|
|
497
499
|
base: "text-muted-foreground animate-spin motion-reduce:animate-none",
|
|
@@ -521,6 +523,7 @@ const typography = {
|
|
|
521
523
|
h2: "text-2xl",
|
|
522
524
|
h3: "text-xl",
|
|
523
525
|
h4: "text-lg",
|
|
526
|
+
h5: "text-base",
|
|
524
527
|
md: "text-lg",
|
|
525
528
|
},
|
|
526
529
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dense.theme.js","sourceRoot":"","sources":["../../../../src/themes/dense.theme.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentStyleTheme } from '@wildo-ai/presets-components-models';\nimport {\n InteractiveVariant,\n SurfaceVariant,\n FormControlVariant,\n IndicatorVariant,\n SelectableVariant,\n TypographyVariant,\n} from '@wildo-ai/presets-components-models';\nimport type { UIBehaviorRecipe } from '@wildo-ai/presets-components-models';\n// Dense derives from the known-good default theme (full recipe coverage +\n// correct types) and compacts it. The chart preset is shared with the default\n// theme — imported from the package rather than re-authored.\nimport { DEFAULT_CHART_STYLE_PRESET } from '@wildo-ai/saas-frontend-lib';\nimport { UI_SPACING_COMPACT } from '../config/preset-design-system';\n\n// ============================================================\n// Helper\n// ============================================================\n\nfunction recipe(r: Partial<UIBehaviorRecipe> & { base: string }): UIBehaviorRecipe {\n return {\n base: r.base,\n states: r.states ?? {},\n sizes: r.sizes,\n motion: r.motion ?? {},\n gesture: r.gesture,\n policy: r.policy,\n };\n}\n\n// ============================================================\n// Motion constants — reference Level 1 tokens via CSS variables\n//\n// Each behavior targets SPECIFIC properties (no transition-all).\n// Durations and easings come from Level 1 --motion-* tokens.\n// All include motion-reduce for accessibility.\n// ============================================================\n//\n// MOTION PERSONALITY — Default (shadcn / Material-inspired SaaS)\n// Hover/focus : FAST (150ms) + DEFAULT → Material Standard curve.\n// Bidirectional state changes,\n// subtle but present.\n// Overlay enter: NORMAL (250ms) + ENTER → fade + zoom-95 + 2px slide.\n// Pure decelerate.\n// Overlay exit : FAST (150ms) + EXIT → quicker than enter.\n// Backdrop : NORMAL/FAST + ENTER/EXIT → matches overlays.\n// Gestures : NONE — neutral SaaS baseline. CSS-only motion is the\n// contract; theme can be swapped without removing\n// motion.dev wrappers from app code (which any theme\n// may activate via the recipe `gesture` slot).\n//\n// This theme is the reference baseline for the framework. All other\n// themes deviate FROM it intentionally — Glass adds gestures, Editorial\n// stretches durations, Terminal/Trading collapse them, Neo-Brutalist\n// strips easing, Cozy adds gentle springs.\n// ============================================================\n\nconst MOTION = {\n /** Interactive elements: bg, color, border, shadow, transform changes */\n interactive: \"transition-[background-color,color,border-color,box-shadow,transform] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Form controls: border, shadow, color changes on focus/validation */\n formControl: \"transition-[color,border-color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Selectable items: bg, color, border on state change */\n selectable: \"transition-[background-color,color,border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Sidebar: width/height collapse */\n sidebarCollapse: \"transition-[width,height,padding] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Enter animation for overlays/surfaces (fade + zoom) */\n enterFadeZoom: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] motion-reduce:data-[state=open]:animate-none\",\n\n /** Exit animation for overlays/surfaces */\n exitFadeZoom: \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-[var(--motion-duration-fast)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none\",\n\n /** Enter for directional popovers (fade + zoom + slide per side) */\n enterDirectional: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 motion-reduce:data-[state=open]:animate-none\",\n\n /** Enter/exit for backdrop overlay (fade only).\n *\n * Uses explicit ENTER/EXIT easing tokens. Without\n * `ease-[...]`, browsers fall back to the CSS default `ease` curve,\n * silently inheriting a generic curve instead of the theme's ENTER\n * (decelerate) / EXIT (accelerate) personality. Backdrops fade only\n * so the perceptual difference is small, but consistency matters\n * for the \"every motion uses an explicit theme token\" rule. */\n backdropEnter: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] motion-reduce:data-[state=open]:animate-none\",\n backdropExit: \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-[var(--motion-duration-fast)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none\",\n};\n\n// ============================================================\n// INTERACTIVE — Buttons, menu items, clickable surfaces\n// ============================================================\n\n// DENSE sizes — one step shorter than default (md h-8 / sm h-7 / lg h-9) with\n// trimmed inline padding, and one radius tier tighter (control `rounded-md`).\n// `pointer-coarse:` touch floors are preserved so dense stays tap-safe.\nconst interactiveSizes: Record<string, string> = {\n xs: \"h-6 px-2 text-xs gap-1 rounded-md has-[>svg]:px-1.5 pointer-coarse:min-h-9\",\n sm: \"h-7 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2 pointer-coarse:min-h-11\",\n md: \"h-8 px-3 has-[>svg]:px-2.5 rounded-md pointer-coarse:min-h-11\",\n lg: \"h-9 px-4 rounded-md has-[>svg]:px-3 pointer-coarse:min-h-11\",\n icon: \"size-8 pointer-coarse:min-h-11 pointer-coarse:min-w-11\",\n \"icon-sm\": \"size-6 pointer-coarse:min-h-9 pointer-coarse:min-w-9\",\n};\n\nconst interactiveDisabled: string = \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\";\nconst interactiveInvalid: string = \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\";\n\n// ============================================================\n// Focus-ring constants — single source of truth\n// for the keyboard-focus indicators used by INTERACTIVE, FORM_CONTROL,\n// SELECTABLE, and INDICATOR recipes. Shape mirrors the global\n// `.focus-ring-offset` / `.focus-ring-inset` Tailwind utilities exposed\n// in `index.css`; the recipes use raw classes (rather than the @apply\n// utility) because some variants pair the ring with a coloured border.\n// ============================================================\n/** Standard 2px offset ring + matching border-ring (most controls). */\nconst FOCUS_RING_OFFSET_WITH_BORDER: string =\n \"focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\";\n/** Standard 2px offset ring with NO border-ring change (filled / accent). */\nconst FOCUS_RING_OFFSET: string =\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\";\n/** Compact 2px ring used by indicator badges and selectable items. */\nconst FOCUS_RING_COMPACT: string =\n \"focus-visible:ring-2 focus-visible:ring-ring\";\n\nconst interactive: Record<InteractiveVariant, UIBehaviorRecipe> = {\n [InteractiveVariant.PRIMARY]: recipe({\n // T2 tactile: a hairline edge (`border-primary/50`) + `shadow-sm` give the\n // button real elevation, and the press (`active:translate-y-px active:shadow-none`)\n // reads as a physical push. `MOTION.interactive` already transitions transform,\n // so the press animates for free.\n base: \"bg-primary text-primary-foreground rounded-md border border-primary/50 shadow-sm font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-primary/90\",\n active: \"active:bg-primary/80 active:shadow-none active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.DESTRUCTIVE]: recipe({\n base: \"bg-destructive text-destructive-foreground rounded-md font-medium text-sm cursor-pointer dark:bg-destructive/60\",\n states: {\n hover: \"hover:bg-destructive/90\",\n active: \"active:bg-destructive/80 active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n highlighted: \"focus:bg-destructive/10 dark:focus:bg-destructive/20 focus:text-destructive\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.OUTLINE]: recipe({\n base: \"border bg-background shadow-xs rounded-md font-medium text-sm cursor-pointer dark:bg-input/30 dark:border-input\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-input/50 dark:hover:text-foreground\",\n active: \"active:bg-accent/80 active:shadow-none active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.SECONDARY]: recipe({\n base: \"bg-secondary text-secondary-foreground rounded-md font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-secondary/80\",\n active: \"active:bg-secondary/70 active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.GHOST]: recipe({\n base: \"rounded-md font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n active: \"active:bg-accent/80\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n highlighted: \"focus:bg-accent focus:text-accent-foreground\",\n open: \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.LINK]: recipe({\n base: \"text-primary underline-offset-4 font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:underline\",\n active: \"active:text-primary/80\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: {\n xs: \"h-7 px-2.5 text-xs gap-1 pointer-coarse:min-h-9\",\n sm: \"h-8 px-3 gap-1.5 pointer-coarse:min-h-11\",\n md: \"h-9 px-4 py-2 pointer-coarse:min-h-11\",\n lg: \"h-10 px-6 pointer-coarse:min-h-11\",\n icon: \"size-9 pointer-coarse:min-h-11 pointer-coarse:min-w-11\",\n \"icon-sm\": \"size-7 pointer-coarse:min-h-9 pointer-coarse:min-w-9\",\n },\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.ACCENT]: recipe({\n // TT-1: Gradient stops resolved from theme tokens\n // (`--accent-gradient-{from,via,to}`) so tenants can rebrand the ACCENT\n // recipe without forking a theme. Defaults preserve the historical\n // violet/blue/pink visual.\n base: 'relative bg-primary text-primary-foreground font-semibold rounded-md shadow-xs before:absolute before:inset-0 before:rounded-[inherit] before:p-[1px] before:bg-[length:200%_200%] before:bg-gradient-to-r before:from-accent-gradient-from before:via-accent-gradient-via before:to-accent-gradient-to before:animate-[gradient-rotate_3s_ease_infinite] motion-reduce:before:animate-none before:-z-10 before:blur-[2px] shadow-[0_0_15px_color-mix(in_oklch,var(--primary)_20%,transparent)] text-sm cursor-pointer',\n states: {\n hover: 'hover:shadow-[0_0_25px_color-mix(in_oklch,var(--primary)_35%,transparent)]',\n active: 'active:scale-[0.98]',\n focus: FOCUS_RING_OFFSET,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: {\n transition: 'transition-[shadow,transform] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// SURFACE — Cards, dialogs, popovers, dropdowns\n// SURFACE PERSONALITY — clean SaaS material hierarchy: cards are bordered\n// elevated panels, tab panels are attached but quiet, shell is chromaless,\n// transient notifications reuse overlay chrome at a smaller scale.\n// ============================================================\n\nconst surface: ComponentStyleTheme['surface'] = {\n [SurfaceVariant.BASE]: recipe({\n // Card / panel — anchor of the surface scale at `rounded-lg`.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-lg border\",\n }),\n\n [SurfaceVariant.CARD]: recipe({\n // Content card — the elevated `surface-raised` fill + border + soft shadow,\n // ALWAYS painted so an explicitly-authored CARD section reads as a card in\n // every context (including inside a dialog/page). Mirrors BASE, the anchor\n // card surface; the section preset adds container padding.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-lg border\",\n }),\n\n [SurfaceVariant.RAISED]: recipe({\n // Popover / dropdown — floats above the page, gets a slightly tighter\n // radius than BASE to feel \"cut from\" the larger card surface (one tier\n // smaller, never two; previously `rounded-md` was visibly inconsistent\n // when popovers stacked next to cards).\n // `fill-surface-overlay` mirrors the background so SVG children that paint\n // via `fill` — notably the Tooltip's Radix arrow — inherit the body colour\n // (CSS `fill` inherits across Radix's arrow wrapper span; `background` does\n // not). Keep `fill-*` in lockstep with `bg-*` here.\n base: \"bg-surface-overlay fill-surface-overlay text-surface-overlay-foreground rounded-md border shadow-md\",\n motion: {\n enter: MOTION.enterDirectional,\n exit: MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.OVERLAY]: recipe({\n // Dialog / sheet — the heaviest, most modal surface; matches BASE radius\n // so a dialog reads as a \"card the user can act inside\" rather than a\n // smaller-cornered floating panel. Required to restore monotonicity\n // (BASE ≤ OVERLAY) — `rounded-md` here was visually demoting dialogs.\n base: \"bg-surface-overlay text-surface-overlay-foreground rounded-lg border shadow-lg\",\n motion: {\n enter: MOTION.enterFadeZoom,\n exit: MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.INSET]: recipe({\n base: \"bg-surface-inset text-surface-inset-foreground\",\n }),\n\n [SurfaceVariant.SUNKEN]: recipe({\n base: \"bg-surface-sunken text-surface-sunken-foreground\",\n }),\n\n [SurfaceVariant.TAB_PANEL]: recipe({\n // Tab panel joins to the tab strip: same visual language as BASE, but no\n // border/shadow so the surface policy can own the join.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-b-lg\",\n }),\n\n [SurfaceVariant.SHELL]: recipe({\n // App/page shell: chromaless raised background. Landmark semantics remain\n // opt-in via policy config.\n base: \"bg-surface-raised text-surface-raised-foreground\",\n }),\n\n [SurfaceVariant.TRANSIENT]: recipe({\n // Toast/snackbar: compact floating card, visually between RAISED and OVERLAY.\n base: \"bg-surface-overlay text-surface-overlay-foreground rounded-md border shadow-md\",\n motion: {\n enter: MOTION.enterDirectional,\n exit: MOTION.exitFadeZoom,\n },\n }),\n};\n\n// ============================================================\n// FORM_CONTROL — Inputs, textareas, select triggers\n// ============================================================\n\nconst formControl: Record<FormControlVariant, UIBehaviorRecipe> = {\n [FormControlVariant.DEFAULT]: recipe({\n base: \"border-border dark:bg-surface-inset/30 rounded-md border bg-transparent shadow-xs text-base md:text-sm placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-8 px-2.5 py-1 pointer-coarse:min-h-11\",\n sm: \"h-7 px-2 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-9 px-3 py-1.5 pointer-coarse:min-h-11\",\n },\n motion: { transition: MOTION.formControl },\n }),\n\n [FormControlVariant.FILLED]: recipe({\n base: \"bg-muted rounded-md border-0 text-base md:text-sm placeholder:text-muted-foreground\",\n states: {\n focus: FOCUS_RING_OFFSET,\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-8 px-2.5 py-1 pointer-coarse:min-h-11\",\n sm: \"h-7 px-2 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-9 px-3 py-1.5 pointer-coarse:min-h-11\",\n },\n motion: { transition: MOTION.formControl },\n }),\n\n [FormControlVariant.UNDERLINED]: recipe({\n base: \"bg-transparent border-0 border-b border-border rounded-none text-base md:text-sm placeholder:text-muted-foreground\",\n states: {\n focus: \"focus-visible:border-ring focus-visible:border-b-2\",\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-9 px-0 py-1 pointer-coarse:min-h-11\",\n sm: \"h-8 px-0 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-10 px-0 py-2 pointer-coarse:min-h-11\",\n },\n motion: { transition: \"transition-[border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n\n [FormControlVariant.CHECKBOX]: recipe({\n base: \"border-border dark:bg-input/30 border shadow-xs\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary dark:data-[state=checked]:bg-primary\",\n disabled: \"disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n motion: { transition: \"transition-[color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n\n [FormControlVariant.SWITCH]: recipe({\n base: \"data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 border border-transparent shadow-xs\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=checked]:bg-primary\",\n disabled: \"disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n motion: { transition: \"transition-[background-color,border-color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n};\n\n// ============================================================\n// INDICATOR — Badges, alerts, toast severity\n// ============================================================\n\nconst indicatorShared = {\n states: {\n hover: \"[a&]:hover:opacity-[var(--opacity-hover)]\",\n focus: `focus-visible:border-ring ${FOCUS_RING_COMPACT}`,\n invalid: interactiveInvalid,\n },\n // DENSE keeps the pulse subtle to match its compact chrome. Reduced-motion safe.\n motion: { transition: MOTION.interactive, attention: \"animate-pulse motion-reduce:animate-none\" },\n};\n\n// TONAL badges (T1 + T1b) — tinted background + AA-contrast text + hairline\n// border, in place of the previous solid full-saturation fills. Reads calmer\n// and modern (Linear/Stripe/shadcn) and lets many status chips coexist on one\n// row without the \"wall of solid colour\" effect.\n//\n// The tint (`bg-{status}-subtle`) and text (`text-{status}-subtle-foreground`)\n// come from dedicated SUBTLE STATUS TOKENS (T1b), not per-recipe `/10` mixes.\n// Those tokens are palette-adaptive `color-mix()` formulas emitted by the design\n// -token CSS generator (`design-tokens-css.shared.ts` → `buildSubtleStatusColors`),\n// tuned so 12px badge text clears WCAG-AA (≥4.5) against its tint in BOTH light\n// and dark — including the amber WARNING case that fails contrast with a naive\n// same-hue text. Because the tokens reference the base `--{status}` vars, a\n// palette retune (or a light/dark switch) retunes the chip automatically, and a\n// tenant can override any pair via `DesignSystemToken.*_SUBTLE(_FOREGROUND)`.\n// The border stays on the palette base (`border-{status}/25`, `/30` for warning\n// where the base is lighter) so it tracks the same hue.\n//\n// DENSE delta: badges keep the AA-safe subtle tokens (using the raw `text-{status}`\n// here would reintroduce the light-mode contrast failure T1b fixed) but tighten to\n// `px-1.5 py-0` for a compact chip. A further \"quiet tint + neutral text + colored\n// status dot\" pass needs a badge-component-level dot, so it is intentionally NOT a\n// recipe change — deferred as a component-layer refinement.\nconst indicator: Record<IndicatorVariant, UIBehaviorRecipe> = {\n [IndicatorVariant.NEUTRAL]: recipe({\n // Tonal like the other four — see default.theme.ts for the rationale. Fixes the\n // sub-AA washed-out grey chip that raw `text-muted-foreground` on `bg-muted`\n // produced for `default`/`secondary`/`outline` enum values.\n base: \"bg-neutral-subtle text-neutral-subtle-foreground border-border rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.INFO]: recipe({\n base: \"bg-info-subtle text-info-subtle-foreground border-info/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.SUCCESS]: recipe({\n base: \"bg-success-subtle text-success-subtle-foreground border-success/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.WARNING]: recipe({\n base: \"bg-warning-subtle text-warning-subtle-foreground border-warning/30 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.ERROR]: recipe({\n base: \"bg-destructive-subtle text-destructive-subtle-foreground border-destructive/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n};\n\n// ============================================================\n// SELECTABLE — Tabs, sidebar active items, toggles\n// ============================================================\n\nconst selectable: Record<SelectableVariant, UIBehaviorRecipe> = {\n [SelectableVariant.FILLED]: recipe({\n base: \"rounded-md text-sm outline-hidden ring-surface-sunken-border\",\n states: {\n hover: \"hover:bg-surface-sunken-accent hover:text-surface-sunken-foreground\",\n focus: \"focus-visible:ring-2\",\n active: \"active:bg-surface-sunken-accent active:text-surface-sunken-foreground\",\n selected: \"data-[active=true]:bg-surface-sunken-accent data-[active=true]:font-medium data-[active=true]:text-surface-sunken-foreground data-[state=active]:bg-surface-sunken-accent data-[state=active]:text-surface-sunken-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)] aria-disabled:pointer-events-none aria-disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-12 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.UNDERLINE]: recipe({\n base: \"rounded-none border-b-2 border-transparent text-sm outline-hidden\",\n states: {\n hover: \"hover:text-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[state=active]:border-primary data-[state=active]:text-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs pb-1\",\n md: \"h-8 text-sm pb-2\",\n lg: \"h-10 text-sm pb-3\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.PILL]: recipe({\n base: \"rounded-full text-sm outline-hidden\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[state=active]:bg-primary data-[state=active]:text-primary-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 px-3 text-xs\",\n md: \"h-8 px-4 text-sm\",\n lg: \"h-10 px-5 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.INDICATOR]: recipe({\n base: \"rounded-md text-sm outline-hidden\",\n states: {\n hover: \"hover:bg-surface-sunken-accent hover:text-surface-sunken-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[active=true]:border-s-2 data-[active=true]:border-surface-sunken-primary data-[active=true]:font-medium data-[active=true]:text-surface-sunken-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-12 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n};\n\n// ============================================================\n// OVERLAY_BACKDROP — Dialog/Sheet background overlay\n// ============================================================\n\nconst overlayBackdrop: UIBehaviorRecipe = recipe({\n // Tailwind v4's `bg-color/[var()]` opacity modifier uses color-mix() which\n // doesn't resolve CSS custom property decimals correctly.\n // Use arbitrary bg value with rgb() alpha channel instead.\n base: \"bg-[rgb(0_0_0_/_var(--opacity-overlay))] backdrop-blur-sm\",\n motion: {\n enter: MOTION.backdropEnter,\n exit: MOTION.backdropExit,\n },\n});\n\n// ============================================================\n// DIVIDER — Separator\n// ============================================================\n\nconst divider: UIBehaviorRecipe = recipe({\n base: \"bg-border shrink-0\",\n});\n\n// ============================================================\n// SKELETON — Loading placeholders\n// ============================================================\n\nconst skeleton: UIBehaviorRecipe = recipe({\n base: \"bg-accent animate-pulse rounded-md motion-reduce:animate-none\",\n});\n\nconst loadingSpinner: UIBehaviorRecipe = recipe({\n base: \"text-muted-foreground animate-spin motion-reduce:animate-none\",\n});\n\nconst loadingOverlay: UIBehaviorRecipe = recipe({\n base: \"bg-background/80\",\n motion: {\n enter: \"animate-in fade-in-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-enter)] motion-reduce:animate-none\",\n exit: \"animate-out fade-out-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-exit)] motion-reduce:animate-none\",\n },\n});\n\n// ============================================================\n// TYPOGRAPHY — Text hierarchy\n// ============================================================\n\nconst typography: Record<TypographyVariant, UIBehaviorRecipe> = {\n [TypographyVariant.HEADING]: recipe({\n base: \"font-semibold leading-none tracking-tight\",\n // Heading scale rebalance — gaps were 12/4/2px (h1→h2→h3→h4); h1 at\n // text-4xl (36px) jumped 1.5× to h2 (text-2xl, 24px), which felt\n // disproportionate for in-app SaaS UI (text-4xl is a hero size).\n // Compressing h1 to text-3xl yields a smooth 6/4/2px ladder\n // (1.25× → 1.2× → 1.11×, classic Major Third base). Pages that want a\n // hero h1 can opt in with `className=\"text-4xl sm:text-5xl\"` since the\n // size class is the LAST `text-*` to win in `cn()`.\n sizes: {\n h1: \"text-3xl\",\n h2: \"text-2xl\",\n h3: \"text-xl\",\n h4: \"text-lg\",\n md: \"text-lg\",\n },\n }),\n [TypographyVariant.BODY]: recipe({\n base: \"text-foreground text-sm\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n [TypographyVariant.LABEL]: recipe({\n base: \"font-medium text-sm leading-none\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n [TypographyVariant.DESCRIPTION]: recipe({\n base: \"text-muted-foreground text-sm\",\n sizes: { sm: \"text-xs\", md: \"text-sm\" },\n }),\n [TypographyVariant.CODE]: recipe({\n base: \"font-mono text-sm bg-muted rounded px-1 py-0.5\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n};\n\n// ============================================================\n// DENSE THEME — assembled (opt-in, Linear-grade)\n//\n// Derived from the default theme and compacted: shorter control/input sizes\n// (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control `rounded-md`,\n// card `rounded-lg`), flat + hairline surfaces (no `shadow-sm` on cards).\n// Opt in per app: `theme: denseTheme` in `design-system.config.ts`.\n// Spacing uses the compact token set (`UI_SPACING_COMPACT`) so rows/gaps also\n// tighten, not just control heights.\n// ============================================================\n\nexport const denseTheme: ComponentStyleTheme = {\n id: 'dense',\n name: 'Dense',\n description: 'Compact, Linear-grade opt-in variant of the default theme. Shorter controls/inputs (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control rounded-md · card rounded-lg), flat + hairline surfaces (no card shadow). Same tonal badges, focus rings, and motion as default.',\n\n spacing: UI_SPACING_COMPACT,\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: undefined,\n backgroundLayer: undefined,\n chartStyle: DEFAULT_CHART_STYLE_PRESET,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"dense.theme.js","sourceRoot":"","sources":["../../../../src/themes/dense.theme.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentStyleTheme } from '@wildo-ai/presets-components-models';\nimport {\n DividerVariant,\n InteractiveVariant,\n SurfaceVariant,\n FormControlVariant,\n IndicatorVariant,\n SelectableVariant,\n TypographyVariant,\n SKELETON_NEUTRAL_TINT,\n} from '@wildo-ai/presets-components-models';\nimport type { UIBehaviorRecipe } from '@wildo-ai/presets-components-models';\n// Dense derives from the known-good default theme (full recipe coverage +\n// correct types) and compacts it. The chart preset is shared with the default\n// theme — imported from the package rather than re-authored.\nimport { DEFAULT_CHART_STYLE_PRESET } from '@wildo-ai/saas-frontend-lib';\nimport { UI_SPACING_COMPACT } from '../config/preset-design-system';\n\n// ============================================================\n// Helper\n// ============================================================\n\nfunction recipe(r: Partial<UIBehaviorRecipe> & { base: string }): UIBehaviorRecipe {\n return {\n base: r.base,\n states: r.states ?? {},\n sizes: r.sizes,\n motion: r.motion ?? {},\n gesture: r.gesture,\n policy: r.policy,\n };\n}\n\n// ============================================================\n// Motion constants — reference Level 1 tokens via CSS variables\n//\n// Each behavior targets SPECIFIC properties (no transition-all).\n// Durations and easings come from Level 1 --motion-* tokens.\n// All include motion-reduce for accessibility.\n// ============================================================\n//\n// MOTION PERSONALITY — Default (shadcn / Material-inspired SaaS)\n// Hover/focus : FAST (150ms) + DEFAULT → Material Standard curve.\n// Bidirectional state changes,\n// subtle but present.\n// Overlay enter: NORMAL (250ms) + ENTER → fade + zoom-95 + 2px slide.\n// Pure decelerate.\n// Overlay exit : FAST (150ms) + EXIT → quicker than enter.\n// Backdrop : NORMAL/FAST + ENTER/EXIT → matches overlays.\n// Gestures : NONE — neutral SaaS baseline. CSS-only motion is the\n// contract; theme can be swapped without removing\n// motion.dev wrappers from app code (which any theme\n// may activate via the recipe `gesture` slot).\n//\n// This theme is the reference baseline for the framework. All other\n// themes deviate FROM it intentionally — Glass adds gestures, Editorial\n// stretches durations, Terminal/Trading collapse them, Neo-Brutalist\n// strips easing, Cozy adds gentle springs.\n// ============================================================\n\nconst MOTION = {\n /** Interactive elements: bg, color, border, shadow, transform changes */\n interactive: \"transition-[background-color,color,border-color,box-shadow,transform] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Form controls: border, shadow, color changes on focus/validation */\n formControl: \"transition-[color,border-color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Selectable items: bg, color, border on state change */\n selectable: \"transition-[background-color,color,border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Sidebar: width/height collapse */\n sidebarCollapse: \"transition-[width,height,padding] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Enter animation for overlays/surfaces (fade + zoom) */\n enterFadeZoom: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] motion-reduce:data-[state=open]:animate-none\",\n\n /** Exit animation for overlays/surfaces */\n exitFadeZoom: \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-[var(--motion-duration-fast)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none\",\n\n /** Enter for directional popovers (fade + zoom + slide per side) */\n enterDirectional: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 motion-reduce:data-[state=open]:animate-none\",\n\n /** Enter/exit for backdrop overlay (fade only).\n *\n * Uses explicit ENTER/EXIT easing tokens. Without\n * `ease-[...]`, browsers fall back to the CSS default `ease` curve,\n * silently inheriting a generic curve instead of the theme's ENTER\n * (decelerate) / EXIT (accelerate) personality. Backdrops fade only\n * so the perceptual difference is small, but consistency matters\n * for the \"every motion uses an explicit theme token\" rule. */\n backdropEnter: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] motion-reduce:data-[state=open]:animate-none\",\n backdropExit: \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-[var(--motion-duration-fast)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none\",\n};\n\n// ============================================================\n// INTERACTIVE — Buttons, menu items, clickable surfaces\n// ============================================================\n\n// DENSE sizes — one step shorter than default (md h-8 / sm h-7 / lg h-9) with\n// trimmed inline padding, and one radius tier tighter (control `rounded-md`).\n// `pointer-coarse:` touch floors are preserved so dense stays tap-safe.\nconst interactiveSizes: Record<string, string> = {\n xs: \"h-6 px-2 text-xs gap-1 rounded-md has-[>svg]:px-1.5 pointer-coarse:min-h-9\",\n sm: \"h-7 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2 pointer-coarse:min-h-11\",\n md: \"h-8 px-3 has-[>svg]:px-2.5 rounded-md pointer-coarse:min-h-11\",\n lg: \"h-9 px-4 rounded-md has-[>svg]:px-3 pointer-coarse:min-h-11\",\n icon: \"size-8 pointer-coarse:min-h-11 pointer-coarse:min-w-11\",\n \"icon-sm\": \"size-6 pointer-coarse:min-h-9 pointer-coarse:min-w-9\",\n};\n\nconst interactiveDisabled: string = \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\";\nconst interactiveInvalid: string = \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\";\n\n// ============================================================\n// Focus-ring constants — single source of truth\n// for the keyboard-focus indicators used by INTERACTIVE, FORM_CONTROL,\n// SELECTABLE, and INDICATOR recipes. Shape mirrors the global\n// `.focus-ring-offset` / `.focus-ring-inset` Tailwind utilities exposed\n// in `index.css`; the recipes use raw classes (rather than the @apply\n// utility) because some variants pair the ring with a coloured border.\n// ============================================================\n/** Standard 2px offset ring + matching border-ring (most controls). */\nconst FOCUS_RING_OFFSET_WITH_BORDER: string =\n \"focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\";\n/** Standard 2px offset ring with NO border-ring change (filled / accent). */\nconst FOCUS_RING_OFFSET: string =\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\";\n/** Compact 2px ring used by indicator badges and selectable items. */\nconst FOCUS_RING_COMPACT: string =\n \"focus-visible:ring-2 focus-visible:ring-ring\";\n\nconst interactive: Record<InteractiveVariant, UIBehaviorRecipe> = {\n [InteractiveVariant.PRIMARY]: recipe({\n // T2 tactile: a hairline edge (`border-primary/50`) + `shadow-sm` give the\n // button real elevation, and the press (`active:translate-y-px active:shadow-none`)\n // reads as a physical push. `MOTION.interactive` already transitions transform,\n // so the press animates for free.\n base: \"bg-primary text-primary-foreground rounded-md border border-primary/50 shadow-sm font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-primary/90\",\n active: \"active:bg-primary/80 active:shadow-none active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.DESTRUCTIVE]: recipe({\n base: \"bg-destructive text-destructive-foreground rounded-md font-medium text-sm cursor-pointer dark:bg-destructive/60\",\n states: {\n hover: \"hover:bg-destructive/90\",\n active: \"active:bg-destructive/80 active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n highlighted: \"focus:bg-destructive/10 dark:focus:bg-destructive/20 focus:text-destructive\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.OUTLINE]: recipe({\n base: \"border bg-background shadow-xs rounded-md font-medium text-sm cursor-pointer dark:bg-input/30 dark:border-input\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-input/50 dark:hover:text-foreground\",\n active: \"active:bg-accent/80 active:shadow-none active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.SECONDARY]: recipe({\n base: \"bg-secondary text-secondary-foreground rounded-md font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-secondary/80\",\n active: \"active:bg-secondary/70 active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.GHOST]: recipe({\n base: \"rounded-md font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n active: \"active:bg-accent/80\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n highlighted: \"focus:bg-accent focus:text-accent-foreground\",\n open: \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.LINK]: recipe({\n base: \"text-primary underline-offset-4 font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:underline\",\n active: \"active:text-primary/80\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: {\n xs: \"h-7 px-2.5 text-xs gap-1 pointer-coarse:min-h-9\",\n sm: \"h-8 px-3 gap-1.5 pointer-coarse:min-h-11\",\n md: \"h-9 px-4 py-2 pointer-coarse:min-h-11\",\n lg: \"h-10 px-6 pointer-coarse:min-h-11\",\n icon: \"size-9 pointer-coarse:min-h-11 pointer-coarse:min-w-11\",\n \"icon-sm\": \"size-7 pointer-coarse:min-h-9 pointer-coarse:min-w-9\",\n },\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.ACCENT]: recipe({\n // TT-1: Gradient stops resolved from theme tokens\n // (`--accent-gradient-{from,via,to}`) so tenants can rebrand the ACCENT\n // recipe without forking a theme. Defaults preserve the historical\n // violet/blue/pink visual.\n base: 'relative bg-primary text-primary-foreground font-semibold rounded-md shadow-xs before:absolute before:inset-0 before:rounded-[inherit] before:p-[1px] before:bg-[length:200%_200%] before:bg-gradient-to-r before:from-accent-gradient-from before:via-accent-gradient-via before:to-accent-gradient-to before:animate-[gradient-rotate_3s_ease_infinite] motion-reduce:before:animate-none before:-z-10 before:blur-[2px] shadow-[0_0_15px_color-mix(in_oklch,var(--primary)_20%,transparent)] text-sm cursor-pointer',\n states: {\n hover: 'hover:shadow-[0_0_25px_color-mix(in_oklch,var(--primary)_35%,transparent)]',\n active: 'active:scale-[0.98]',\n focus: FOCUS_RING_OFFSET,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: {\n transition: 'transition-[shadow,transform] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// SURFACE — Cards, dialogs, popovers, dropdowns\n// SURFACE PERSONALITY — clean SaaS material hierarchy: cards are bordered\n// elevated panels, tab panels are attached but quiet, shell is chromaless,\n// transient notifications reuse overlay chrome at a smaller scale.\n// ============================================================\n\nconst surface: ComponentStyleTheme['surface'] = {\n [SurfaceVariant.BASE]: recipe({\n // Card / panel — anchor of the surface scale at `rounded-lg`.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-lg border\",\n }),\n\n [SurfaceVariant.CARD]: recipe({\n // Content card — the elevated `surface-raised` fill + border + soft shadow,\n // ALWAYS painted so an explicitly-authored CARD section reads as a card in\n // every context (including inside a dialog/page). Mirrors BASE, the anchor\n // card surface; the section preset adds container padding.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-lg border\",\n }),\n\n [SurfaceVariant.RAISED]: recipe({\n // Popover / dropdown — floats above the page, gets a slightly tighter\n // radius than BASE to feel \"cut from\" the larger card surface (one tier\n // smaller, never two; previously `rounded-md` was visibly inconsistent\n // when popovers stacked next to cards).\n // `fill-surface-overlay` mirrors the background so SVG children that paint\n // via `fill` — notably the Tooltip's Radix arrow — inherit the body colour\n // (CSS `fill` inherits across Radix's arrow wrapper span; `background` does\n // not). Keep `fill-*` in lockstep with `bg-*` here.\n base: \"bg-surface-overlay fill-surface-overlay text-surface-overlay-foreground rounded-md border shadow-md\",\n motion: {\n enter: MOTION.enterDirectional,\n exit: MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.OVERLAY]: recipe({\n // Dialog / sheet — the heaviest, most modal surface; matches BASE radius\n // so a dialog reads as a \"card the user can act inside\" rather than a\n // smaller-cornered floating panel. Required to restore monotonicity\n // (BASE ≤ OVERLAY) — `rounded-md` here was visually demoting dialogs.\n base: \"bg-surface-overlay text-surface-overlay-foreground rounded-lg border shadow-lg\",\n motion: {\n enter: MOTION.enterFadeZoom,\n exit: MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.INSET]: recipe({\n base: \"bg-surface-inset text-surface-inset-foreground\",\n }),\n\n [SurfaceVariant.SUNKEN]: recipe({\n base: \"bg-surface-sunken text-surface-sunken-foreground\",\n }),\n\n [SurfaceVariant.TAB_PANEL]: recipe({\n // Tab panel joins to the tab strip: same visual language as BASE, but no\n // border/shadow so the surface policy can own the join.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-b-lg\",\n }),\n\n [SurfaceVariant.SHELL]: recipe({\n // App/page shell: chromaless raised background. Landmark semantics remain\n // opt-in via policy config.\n base: \"bg-surface-raised text-surface-raised-foreground\",\n }),\n\n [SurfaceVariant.TRANSIENT]: recipe({\n // Toast/snackbar: compact floating card, visually between RAISED and OVERLAY.\n base: \"bg-surface-overlay text-surface-overlay-foreground rounded-md border shadow-md\",\n motion: {\n enter: MOTION.enterDirectional,\n exit: MOTION.exitFadeZoom,\n },\n }),\n};\n\n// ============================================================\n// FORM_CONTROL — Inputs, textareas, select triggers\n// ============================================================\n\nconst formControl: Record<FormControlVariant, UIBehaviorRecipe> = {\n [FormControlVariant.DEFAULT]: recipe({\n base: \"border-border dark:bg-surface-inset/30 rounded-md border bg-transparent shadow-xs text-base md:text-sm placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-8 px-2.5 py-1 pointer-coarse:min-h-11\",\n sm: \"h-7 px-2 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-9 px-3 py-1.5 pointer-coarse:min-h-11\",\n },\n motion: { transition: MOTION.formControl },\n }),\n\n [FormControlVariant.FILLED]: recipe({\n base: \"bg-muted rounded-md border-0 text-base md:text-sm placeholder:text-muted-foreground\",\n states: {\n focus: FOCUS_RING_OFFSET,\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-8 px-2.5 py-1 pointer-coarse:min-h-11\",\n sm: \"h-7 px-2 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-9 px-3 py-1.5 pointer-coarse:min-h-11\",\n },\n motion: { transition: MOTION.formControl },\n }),\n\n [FormControlVariant.UNDERLINED]: recipe({\n base: \"bg-transparent border-0 border-b border-border rounded-none text-base md:text-sm placeholder:text-muted-foreground\",\n states: {\n focus: \"focus-visible:border-ring focus-visible:border-b-2\",\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-9 px-0 py-1 pointer-coarse:min-h-11\",\n sm: \"h-8 px-0 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-10 px-0 py-2 pointer-coarse:min-h-11\",\n },\n motion: { transition: \"transition-[border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n\n [FormControlVariant.CHECKBOX]: recipe({\n base: \"border-border dark:bg-input/30 border shadow-xs\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary dark:data-[state=checked]:bg-primary\",\n disabled: \"disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n motion: { transition: \"transition-[color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n\n [FormControlVariant.SWITCH]: recipe({\n base: \"data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 border border-transparent shadow-xs\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=checked]:bg-primary\",\n disabled: \"disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n motion: { transition: \"transition-[background-color,border-color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n};\n\n// ============================================================\n// INDICATOR — Badges, alerts, toast severity\n// ============================================================\n\nconst indicatorShared = {\n states: {\n hover: \"[a&]:hover:opacity-[var(--opacity-hover)]\",\n focus: `focus-visible:border-ring ${FOCUS_RING_COMPACT}`,\n invalid: interactiveInvalid,\n },\n // DENSE keeps the pulse subtle to match its compact chrome. Reduced-motion safe.\n motion: { transition: MOTION.interactive, attention: \"animate-pulse motion-reduce:animate-none\" },\n};\n\n// TONAL badges (T1 + T1b) — tinted background + AA-contrast text + hairline\n// border, in place of the previous solid full-saturation fills. Reads calmer\n// and modern (Linear/Stripe/shadcn) and lets many status chips coexist on one\n// row without the \"wall of solid colour\" effect.\n//\n// The tint (`bg-{status}-subtle`) and text (`text-{status}-subtle-foreground`)\n// come from dedicated SUBTLE STATUS TOKENS (T1b), not per-recipe `/10` mixes.\n// Those tokens are palette-adaptive `color-mix()` formulas emitted by the design\n// -token CSS generator (`design-tokens-css.shared.ts` → `buildSubtleStatusColors`),\n// tuned so 12px badge text clears WCAG-AA (≥4.5) against its tint in BOTH light\n// and dark — including the amber WARNING case that fails contrast with a naive\n// same-hue text. Because the tokens reference the base `--{status}` vars, a\n// palette retune (or a light/dark switch) retunes the chip automatically, and a\n// tenant can override any pair via `DesignSystemToken.*_SUBTLE(_FOREGROUND)`.\n// The border stays on the palette base (`border-{status}/25`, `/30` for warning\n// where the base is lighter) so it tracks the same hue.\n//\n// DENSE delta: badges keep the AA-safe subtle tokens (using the raw `text-{status}`\n// here would reintroduce the light-mode contrast failure T1b fixed) but tighten to\n// `px-1.5 py-0` for a compact chip. A further \"quiet tint + neutral text + colored\n// status dot\" pass needs a badge-component-level dot, so it is intentionally NOT a\n// recipe change — deferred as a component-layer refinement.\nconst indicator: Record<IndicatorVariant, UIBehaviorRecipe> = {\n [IndicatorVariant.NEUTRAL]: recipe({\n // Tonal like the other four — see default.theme.ts for the rationale. Fixes the\n // sub-AA washed-out grey chip that raw `text-muted-foreground` on `bg-muted`\n // produced for `default`/`secondary`/`outline` enum values.\n base: \"bg-neutral-subtle text-neutral-subtle-foreground border-border rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.INFO]: recipe({\n base: \"bg-info-subtle text-info-subtle-foreground border-info/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.SUCCESS]: recipe({\n base: \"bg-success-subtle text-success-subtle-foreground border-success/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.WARNING]: recipe({\n base: \"bg-warning-subtle text-warning-subtle-foreground border-warning/30 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.ERROR]: recipe({\n base: \"bg-destructive-subtle text-destructive-subtle-foreground border-destructive/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n};\n\n// ============================================================\n// SELECTABLE — Tabs, sidebar active items, toggles\n// ============================================================\n\nconst selectable: Record<SelectableVariant, UIBehaviorRecipe> = {\n [SelectableVariant.FILLED]: recipe({\n base: \"rounded-md text-sm outline-hidden ring-surface-sunken-border\",\n states: {\n hover: \"hover:bg-surface-sunken-accent hover:text-surface-sunken-foreground\",\n focus: \"focus-visible:ring-2\",\n active: \"active:bg-surface-sunken-accent active:text-surface-sunken-foreground\",\n selected: \"data-[active=true]:bg-surface-sunken-accent data-[active=true]:font-medium data-[active=true]:text-surface-sunken-foreground data-[state=active]:bg-surface-sunken-accent data-[state=active]:text-surface-sunken-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)] aria-disabled:pointer-events-none aria-disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-12 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.UNDERLINE]: recipe({\n base: \"rounded-none border-b-2 border-transparent text-sm outline-hidden\",\n states: {\n hover: \"hover:text-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[state=active]:border-primary data-[state=active]:text-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs pb-1\",\n md: \"h-8 text-sm pb-2\",\n lg: \"h-10 text-sm pb-3\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.PILL]: recipe({\n base: \"rounded-full text-sm outline-hidden\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[state=active]:bg-primary data-[state=active]:text-primary-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 px-3 text-xs\",\n md: \"h-8 px-4 text-sm\",\n lg: \"h-10 px-5 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.INDICATOR]: recipe({\n base: \"rounded-md text-sm outline-hidden\",\n states: {\n hover: \"hover:bg-surface-sunken-accent hover:text-surface-sunken-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[active=true]:border-s-2 data-[active=true]:border-surface-sunken-primary data-[active=true]:font-medium data-[active=true]:text-surface-sunken-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-12 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n};\n\n// ============================================================\n// OVERLAY_BACKDROP — Dialog/Sheet background overlay\n// ============================================================\n\nconst overlayBackdrop: UIBehaviorRecipe = recipe({\n // Tailwind v4's `bg-color/[var()]` opacity modifier uses color-mix() which\n // doesn't resolve CSS custom property decimals correctly.\n // Use arbitrary bg value with rgb() alpha channel instead.\n base: \"bg-[rgb(0_0_0_/_var(--opacity-overlay))] backdrop-blur-sm\",\n motion: {\n enter: MOTION.backdropEnter,\n exit: MOTION.backdropExit,\n },\n});\n\n// ============================================================\n// DIVIDER — Separator\n// ============================================================\n\nconst divider: Record<DividerVariant, UIBehaviorRecipe> = {\n [DividerVariant.DEFAULT]: recipe({ base: 'bg-border 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-border' }),\n};\n\n// ============================================================\n// SKELETON — Loading placeholders\n// ============================================================\n\nconst skeleton: UIBehaviorRecipe = recipe({\n base: `${SKELETON_NEUTRAL_TINT} animate-pulse rounded-md motion-reduce:animate-none`,\n});\n\nconst loadingSpinner: UIBehaviorRecipe = recipe({\n base: \"text-muted-foreground animate-spin motion-reduce:animate-none\",\n});\n\nconst loadingOverlay: UIBehaviorRecipe = recipe({\n base: \"bg-background/80\",\n motion: {\n enter: \"animate-in fade-in-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-enter)] motion-reduce:animate-none\",\n exit: \"animate-out fade-out-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-exit)] motion-reduce:animate-none\",\n },\n});\n\n// ============================================================\n// TYPOGRAPHY — Text hierarchy\n// ============================================================\n\nconst typography: Record<TypographyVariant, UIBehaviorRecipe> = {\n [TypographyVariant.HEADING]: recipe({\n base: \"font-semibold leading-none tracking-tight\",\n // Heading scale rebalance — gaps were 12/4/2px (h1→h2→h3→h4); h1 at\n // text-4xl (36px) jumped 1.5× to h2 (text-2xl, 24px), which felt\n // disproportionate for in-app SaaS UI (text-4xl is a hero size).\n // Compressing h1 to text-3xl yields a smooth 6/4/2px ladder\n // (1.25× → 1.2× → 1.11×, classic Major Third base). Pages that want a\n // hero h1 can opt in with `className=\"text-4xl sm:text-5xl\"` since the\n // size class is the LAST `text-*` to win in `cn()`.\n sizes: {\n h1: \"text-3xl\",\n h2: \"text-2xl\",\n h3: \"text-xl\",\n h4: \"text-lg\",\n h5: \"text-base\",\n md: \"text-lg\",\n },\n }),\n [TypographyVariant.BODY]: recipe({\n base: \"text-foreground text-sm\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n [TypographyVariant.LABEL]: recipe({\n base: \"font-medium text-sm leading-none\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n [TypographyVariant.DESCRIPTION]: recipe({\n base: \"text-muted-foreground text-sm\",\n sizes: { sm: \"text-xs\", md: \"text-sm\" },\n }),\n [TypographyVariant.CODE]: recipe({\n base: \"font-mono text-sm bg-muted rounded px-1 py-0.5\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n};\n\n// ============================================================\n// DENSE THEME — assembled (opt-in, Linear-grade)\n//\n// Derived from the default theme and compacted: shorter control/input sizes\n// (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control `rounded-md`,\n// card `rounded-lg`), flat + hairline surfaces (no `shadow-sm` on cards).\n// Opt in per app: `theme: denseTheme` in `design-system.config.ts`.\n// Spacing uses the compact token set (`UI_SPACING_COMPACT`) so rows/gaps also\n// tighten, not just control heights.\n// ============================================================\n\nexport const denseTheme: ComponentStyleTheme = {\n id: 'dense',\n name: 'Dense',\n description: 'Compact, Linear-grade opt-in variant of the default theme. Shorter controls/inputs (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control rounded-md · card rounded-lg), flat + hairline surfaces (no card shadow). Same tonal badges, focus rings, and motion as default.',\n\n spacing: UI_SPACING_COMPACT,\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: undefined,\n backgroundLayer: undefined,\n chartStyle: DEFAULT_CHART_STYLE_PRESET,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorial.theme.d.ts","sourceRoot":"","sources":["../../../../src/themes/editorial.theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAA4B,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"editorial.theme.d.ts","sourceRoot":"","sources":["../../../../src/themes/editorial.theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAA4B,MAAM,qCAAqC,CAAC;AA2qBzG,eAAO,MAAM,cAAc,EAAE,mBAgE5B,CAAC"}
|
|
@@ -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
|
}
|
|
@@ -433,9 +433,13 @@ const overlayBackdrop = recipe({
|
|
|
433
433
|
exit: ED_MOTION.backdropExit,
|
|
434
434
|
},
|
|
435
435
|
});
|
|
436
|
-
const divider =
|
|
436
|
+
const divider = {
|
|
437
|
+
[DividerVariant.DEFAULT]: recipe({ base: 'bg-foreground/12 shrink-0' }),
|
|
438
|
+
// Nested-disclosure guide: the theme's own divider material, as a left edge.
|
|
439
|
+
[DividerVariant.NESTING_GUIDE]: recipe({ base: 'border-s border-foreground/12' }),
|
|
440
|
+
};
|
|
437
441
|
const skeleton = recipe({
|
|
438
|
-
base:
|
|
442
|
+
base: `${SKELETON_NEUTRAL_TINT} animate-pulse ${ED.radius} motion-reduce:animate-none`,
|
|
439
443
|
});
|
|
440
444
|
const loadingSpinner = recipe({
|
|
441
445
|
base: 'text-muted-foreground animate-spin motion-reduce:animate-none',
|
|
@@ -466,6 +470,7 @@ const typography = {
|
|
|
466
470
|
h2: 'text-3xl',
|
|
467
471
|
h3: 'text-2xl',
|
|
468
472
|
h4: 'text-xl',
|
|
473
|
+
h5: 'text-lg',
|
|
469
474
|
md: 'text-lg',
|
|
470
475
|
},
|
|
471
476
|
}),
|