@orangecheck/design 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/chrome.d.mts +1 -1
  2. package/dist/chrome.d.ts +1 -1
  3. package/dist/chrome.js +16 -0
  4. package/dist/chrome.js.map +1 -1
  5. package/dist/chrome.mjs +16 -0
  6. package/dist/chrome.mjs.map +1 -1
  7. package/dist/components.d.mts +1 -1
  8. package/dist/components.d.ts +1 -1
  9. package/dist/components.js +830 -178
  10. package/dist/components.js.map +1 -1
  11. package/dist/components.mjs +780 -143
  12. package/dist/components.mjs.map +1 -1
  13. package/dist/composites.d.mts +142 -1
  14. package/dist/composites.d.ts +142 -1
  15. package/dist/composites.js +641 -3
  16. package/dist/composites.js.map +1 -1
  17. package/dist/composites.mjs +627 -4
  18. package/dist/composites.mjs.map +1 -1
  19. package/dist/index.d.mts +2 -2
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +538 -11
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +522 -13
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/primitives.d.mts +24 -4
  26. package/dist/primitives.d.ts +24 -4
  27. package/dist/primitives.js +123 -11
  28. package/dist/primitives.js.map +1 -1
  29. package/dist/primitives.mjs +121 -13
  30. package/dist/primitives.mjs.map +1 -1
  31. package/dist/styles/fonts/hanken-grotesk-latin-ext.woff2 +0 -0
  32. package/dist/styles/fonts/hanken-grotesk-latin.woff2 +0 -0
  33. package/dist/styles/fonts.css +29 -0
  34. package/dist/styles/theme.css +43 -5
  35. package/dist/styles/themes/ember.css +223 -0
  36. package/dist/styles/themes.css +1 -0
  37. package/dist/styles.css +1 -0
  38. package/dist/tokens.js +6 -0
  39. package/dist/tokens.js.map +1 -1
  40. package/dist/tokens.mjs +6 -0
  41. package/dist/tokens.mjs.map +1 -1
  42. package/package.json +1 -1
@@ -17,7 +17,7 @@ import { ToasterProps } from 'sonner';
17
17
  import * as TabsPrimitive from '@radix-ui/react-tabs';
18
18
 
19
19
  declare const buttonVariants: (props?: ({
20
- variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
20
+ variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "onBrand" | "onBrandOutline" | null | undefined;
21
21
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
22
22
  } & class_variance_authority_types.ClassProp) | undefined) => string;
23
23
  declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
@@ -25,7 +25,7 @@ declare function Button({ className, variant, size, asChild, ...props }: React.C
25
25
  }): react_jsx_runtime.JSX.Element;
26
26
 
27
27
  declare const badgeVariants: (props?: ({
28
- variant?: "default" | "destructive" | "outline" | "secondary" | "warning" | "success" | "info" | "brand" | null | undefined;
28
+ variant?: "default" | "destructive" | "outline" | "secondary" | "warning" | "success" | "info" | "brand" | "neutral" | null | undefined;
29
29
  } & class_variance_authority_types.ClassProp) | undefined) => string;
30
30
  declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & {
31
31
  asChild?: boolean;
@@ -216,7 +216,9 @@ declare function Tooltip({ content, children, side, align, sideOffset, collision
216
216
 
217
217
  declare const Accordion: React.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & React.RefAttributes<HTMLDivElement>>;
218
218
  declare const AccordionItem: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
219
- declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
219
+ declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & {
220
+ icon?: "chevron" | "plusMinus";
221
+ } & React.RefAttributes<HTMLButtonElement>>;
220
222
  declare const AccordionContent: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
221
223
 
222
224
  declare function Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>): react_jsx_runtime.JSX.Element;
@@ -234,6 +236,24 @@ declare function SelectScrollDownButton({ className, ...props }: React.Component
234
236
 
235
237
  declare const Toaster: ({ ...props }: ToasterProps) => react_jsx_runtime.JSX.Element;
236
238
 
239
+ declare const surfaceVariants: (props?: ({
240
+ tone?: "default" | "outline" | "onBrand" | "brand" | "muted" | "contrast" | null | undefined;
241
+ elevation?: "none" | "sm" | "lg" | "md" | "xl" | null | undefined;
242
+ bordered?: boolean | null | undefined;
243
+ pad?: "none" | "sm" | "lg" | "md" | null | undefined;
244
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
245
+ interface SurfaceProps extends Omit<React.ComponentProps<'div'>, 'color'>, VariantProps<typeof surfaceVariants> {
246
+ }
247
+ declare function Surface({ className, tone, elevation, bordered, pad, ...props }: SurfaceProps): react_jsx_runtime.JSX.Element;
248
+
249
+ declare const iconBadgeVariants: (props?: ({
250
+ tone?: "dark" | "onBrand" | "brand" | "muted" | "surface" | "peach" | null | undefined;
251
+ size?: "sm" | "lg" | "md" | "xl" | null | undefined;
252
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
253
+ interface IconBadgeProps extends Omit<React.ComponentProps<'span'>, 'color'>, VariantProps<typeof iconBadgeVariants> {
254
+ }
255
+ declare function IconBadge({ className, tone, size, children, ...props }: IconBadgeProps): react_jsx_runtime.JSX.Element;
256
+
237
257
  interface CardProps {
238
258
  id?: string;
239
259
  title: string;
@@ -346,4 +366,4 @@ interface QrCodeProps {
346
366
  }
347
367
  declare function QrCode({ value, size, label, className }: QrCodeProps): react_jsx_runtime.JSX.Element;
348
368
 
349
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, type AlertWithActionProps, AlertWithCountdown, type AlertWithCountdownProps, Badge, Bar, type BarProps, BitcoinAddress, type BitcoinAddressProps, Button, Card, type CardProps, Checkbox, ConfirmHost, type ConfirmOptions, CopyButton, type CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, type ModalProps, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, type PromptOptions, QrCode, type QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, type SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Sparkline, type SparklineProps, StatBlock, type StatBlockProps, StatusPill, type StatusPillProps, type StatusPillSpec, type StatusPillVariant, type StatusTone, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Tooltip, type TooltipProps, Working, WorkingPanel, type WorkingProps, badgeVariants, buttonVariants, confirm, makeStatusPill, prompt };
369
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, type AlertWithActionProps, AlertWithCountdown, type AlertWithCountdownProps, Badge, Bar, type BarProps, BitcoinAddress, type BitcoinAddressProps, Button, Card, type CardProps, Checkbox, ConfirmHost, type ConfirmOptions, CopyButton, type CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, IconBadge, type IconBadgeProps, Input, Label, Modal, type ModalProps, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, type PromptOptions, QrCode, type QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, type SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Sparkline, type SparklineProps, StatBlock, type StatBlockProps, StatusPill, type StatusPillProps, type StatusPillSpec, type StatusPillVariant, type StatusTone, Surface, type SurfaceProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Tooltip, type TooltipProps, Working, WorkingPanel, type WorkingProps, badgeVariants, buttonVariants, confirm, iconBadgeVariants, makeStatusPill, prompt, surfaceVariants };
@@ -17,7 +17,7 @@ import { ToasterProps } from 'sonner';
17
17
  import * as TabsPrimitive from '@radix-ui/react-tabs';
18
18
 
19
19
  declare const buttonVariants: (props?: ({
20
- variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
20
+ variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "onBrand" | "onBrandOutline" | null | undefined;
21
21
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
22
22
  } & class_variance_authority_types.ClassProp) | undefined) => string;
23
23
  declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
@@ -25,7 +25,7 @@ declare function Button({ className, variant, size, asChild, ...props }: React.C
25
25
  }): react_jsx_runtime.JSX.Element;
26
26
 
27
27
  declare const badgeVariants: (props?: ({
28
- variant?: "default" | "destructive" | "outline" | "secondary" | "warning" | "success" | "info" | "brand" | null | undefined;
28
+ variant?: "default" | "destructive" | "outline" | "secondary" | "warning" | "success" | "info" | "brand" | "neutral" | null | undefined;
29
29
  } & class_variance_authority_types.ClassProp) | undefined) => string;
30
30
  declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & {
31
31
  asChild?: boolean;
@@ -216,7 +216,9 @@ declare function Tooltip({ content, children, side, align, sideOffset, collision
216
216
 
217
217
  declare const Accordion: React.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & React.RefAttributes<HTMLDivElement>>;
218
218
  declare const AccordionItem: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
219
- declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
219
+ declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & {
220
+ icon?: "chevron" | "plusMinus";
221
+ } & React.RefAttributes<HTMLButtonElement>>;
220
222
  declare const AccordionContent: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
221
223
 
222
224
  declare function Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>): react_jsx_runtime.JSX.Element;
@@ -234,6 +236,24 @@ declare function SelectScrollDownButton({ className, ...props }: React.Component
234
236
 
235
237
  declare const Toaster: ({ ...props }: ToasterProps) => react_jsx_runtime.JSX.Element;
236
238
 
239
+ declare const surfaceVariants: (props?: ({
240
+ tone?: "default" | "outline" | "onBrand" | "brand" | "muted" | "contrast" | null | undefined;
241
+ elevation?: "none" | "sm" | "lg" | "md" | "xl" | null | undefined;
242
+ bordered?: boolean | null | undefined;
243
+ pad?: "none" | "sm" | "lg" | "md" | null | undefined;
244
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
245
+ interface SurfaceProps extends Omit<React.ComponentProps<'div'>, 'color'>, VariantProps<typeof surfaceVariants> {
246
+ }
247
+ declare function Surface({ className, tone, elevation, bordered, pad, ...props }: SurfaceProps): react_jsx_runtime.JSX.Element;
248
+
249
+ declare const iconBadgeVariants: (props?: ({
250
+ tone?: "dark" | "onBrand" | "brand" | "muted" | "surface" | "peach" | null | undefined;
251
+ size?: "sm" | "lg" | "md" | "xl" | null | undefined;
252
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
253
+ interface IconBadgeProps extends Omit<React.ComponentProps<'span'>, 'color'>, VariantProps<typeof iconBadgeVariants> {
254
+ }
255
+ declare function IconBadge({ className, tone, size, children, ...props }: IconBadgeProps): react_jsx_runtime.JSX.Element;
256
+
237
257
  interface CardProps {
238
258
  id?: string;
239
259
  title: string;
@@ -346,4 +366,4 @@ interface QrCodeProps {
346
366
  }
347
367
  declare function QrCode({ value, size, label, className }: QrCodeProps): react_jsx_runtime.JSX.Element;
348
368
 
349
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, type AlertWithActionProps, AlertWithCountdown, type AlertWithCountdownProps, Badge, Bar, type BarProps, BitcoinAddress, type BitcoinAddressProps, Button, Card, type CardProps, Checkbox, ConfirmHost, type ConfirmOptions, CopyButton, type CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, type ModalProps, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, type PromptOptions, QrCode, type QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, type SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Sparkline, type SparklineProps, StatBlock, type StatBlockProps, StatusPill, type StatusPillProps, type StatusPillSpec, type StatusPillVariant, type StatusTone, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Tooltip, type TooltipProps, Working, WorkingPanel, type WorkingProps, badgeVariants, buttonVariants, confirm, makeStatusPill, prompt };
369
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, type AlertWithActionProps, AlertWithCountdown, type AlertWithCountdownProps, Badge, Bar, type BarProps, BitcoinAddress, type BitcoinAddressProps, Button, Card, type CardProps, Checkbox, ConfirmHost, type ConfirmOptions, CopyButton, type CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, IconBadge, type IconBadgeProps, Input, Label, Modal, type ModalProps, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, type PromptOptions, QrCode, type QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, type SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Sparkline, type SparklineProps, StatBlock, type StatBlockProps, StatusPill, type StatusPillProps, type StatusPillSpec, type StatusPillVariant, type StatusTone, Surface, type SurfaceProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Tooltip, type TooltipProps, Working, WorkingPanel, type WorkingProps, badgeVariants, buttonVariants, confirm, iconBadgeVariants, makeStatusPill, prompt, surfaceVariants };
@@ -68,7 +68,14 @@ var buttonVariants = classVarianceAuthority.cva(
68
68
  outline: "bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs",
69
69
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
70
70
  ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
71
- link: "text-primary underline-offset-4 hover:underline"
71
+ link: "text-primary underline-offset-4 hover:underline",
72
+ // For CTAs placed ON a saturated brand band or a dark section
73
+ // (e.g. a terracotta hero / footer / a forced-dark block) where
74
+ // the surface is dark+light-text in either mode. A neutral white
75
+ // pill + a translucent-white ghost read on any such surface;
76
+ // hardcoded white is deliberate (cf. destructive's text-white).
77
+ onBrand: "bg-white text-neutral-900 shadow-sm hover:bg-white/90",
78
+ onBrandOutline: "border border-white/40 bg-transparent text-white hover:bg-white/10"
72
79
  },
73
80
  size: {
74
81
  default: "h-9 px-4 py-2 has-[>svg]:px-3",
@@ -111,7 +118,8 @@ var badgeVariants = classVarianceAuthority.cva(
111
118
  warning: "bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent",
112
119
  success: "bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent",
113
120
  info: "bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent",
114
- brand: "bg-brand-soft text-brand border-brand-soft",
121
+ brand: "bg-brand-soft text-accent-foreground border-transparent",
122
+ neutral: "bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent",
115
123
  outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
116
124
  }
117
125
  },
@@ -136,7 +144,7 @@ function Input({ className, type, ...props }) {
136
144
  className: cn(
137
145
  "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
138
146
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
139
- "aria-invalid:ring-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand",
147
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
140
148
  className
141
149
  ),
142
150
  ...props
@@ -166,7 +174,7 @@ function Checkbox({ className, ...props }) {
166
174
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
167
175
  "disabled:cursor-not-allowed disabled:opacity-50",
168
176
  "data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground",
169
- "aria-invalid:ring-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand",
177
+ "aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive",
170
178
  className
171
179
  ),
172
180
  ...props,
@@ -207,7 +215,7 @@ function RadioGroupItem({
207
215
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
208
216
  "disabled:cursor-not-allowed disabled:opacity-50",
209
217
  "data-[state=checked]:border-primary",
210
- "aria-invalid:ring-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand",
218
+ "aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive",
211
219
  className
212
220
  ),
213
221
  ...props,
@@ -232,7 +240,7 @@ function Switch({ className, ...props }) {
232
240
  "data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
233
241
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
234
242
  "disabled:cursor-not-allowed disabled:opacity-50",
235
- "aria-invalid:ring-brand/25 dark:aria-invalid:ring-brand/35",
243
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
236
244
  className
237
245
  ),
238
246
  ...props,
@@ -390,7 +398,7 @@ function Textarea({ className, ...props }) {
390
398
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
391
399
  // aria-invalid parity with Input — error styling when a consumer
392
400
  // marks the field invalid.
393
- "aria-invalid:ring-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand",
401
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
394
402
  className
395
403
  ),
396
404
  ...props
@@ -1222,18 +1230,19 @@ function Tooltip({
1222
1230
  var Accordion = AccordionPrimitive__namespace.Root;
1223
1231
  var AccordionItem = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Item, { ref, className: cn("border-b", className), ...props }));
1224
1232
  AccordionItem.displayName = "AccordionItem";
1225
- var AccordionTrigger = React2__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
1233
+ var AccordionTrigger = React2__namespace.forwardRef(({ className, children, icon = "chevron", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
1226
1234
  AccordionPrimitive__namespace.Trigger,
1227
1235
  {
1228
1236
  ref,
1229
1237
  className: cn(
1230
- "flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
1238
+ "flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline",
1239
+ icon === "chevron" ? "[&[data-state=open]>svg]:rotate-180" : "[&[data-state=open]>svg]:rotate-45",
1231
1240
  className
1232
1241
  ),
1233
1242
  ...props,
1234
1243
  children: [
1235
1244
  children,
1236
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
1245
+ icon === "chevron" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "text-primary h-5 w-5 shrink-0 transition-transform duration-200" })
1237
1246
  ]
1238
1247
  }
1239
1248
  ) }));
@@ -1426,6 +1435,105 @@ var Toaster = ({ ...props }) => {
1426
1435
  }
1427
1436
  );
1428
1437
  };
1438
+ var surfaceVariants = classVarianceAuthority.cva("rounded-xl transition-colors", {
1439
+ variants: {
1440
+ tone: {
1441
+ /* Crisp panel floating on the page — the default soft card. */
1442
+ default: "bg-card text-card-foreground",
1443
+ /* Warm-gray recessed panel. */
1444
+ muted: "bg-muted text-foreground",
1445
+ /* Solid brand fill — small terracotta panel; inverts child text. */
1446
+ brand: "bg-brand text-brand-foreground",
1447
+ /* High-contrast neutral panel (near-black in light, near-white in dark). */
1448
+ contrast: "bg-foreground text-background",
1449
+ /* Translucent lightened tile for cards sitting ON a brand band. */
1450
+ onBrand: "text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]",
1451
+ /* Frame only, transparent fill. */
1452
+ outline: "bg-transparent text-foreground"
1453
+ },
1454
+ elevation: {
1455
+ none: "shadow-none",
1456
+ sm: "shadow-sm",
1457
+ md: "shadow-md",
1458
+ lg: "shadow-lg",
1459
+ xl: "shadow-xl"
1460
+ },
1461
+ bordered: {
1462
+ true: "border",
1463
+ false: ""
1464
+ },
1465
+ pad: {
1466
+ none: "p-0",
1467
+ sm: "p-4",
1468
+ md: "p-5 sm:p-6",
1469
+ lg: "p-6 sm:p-8"
1470
+ }
1471
+ },
1472
+ defaultVariants: {
1473
+ tone: "default",
1474
+ elevation: "sm",
1475
+ bordered: true,
1476
+ pad: "md"
1477
+ }
1478
+ });
1479
+ function Surface({
1480
+ className,
1481
+ tone,
1482
+ elevation,
1483
+ bordered,
1484
+ pad,
1485
+ ...props
1486
+ }) {
1487
+ return /* @__PURE__ */ jsxRuntime.jsx(
1488
+ "div",
1489
+ {
1490
+ "data-slot": "surface",
1491
+ className: cn(surfaceVariants({ tone, elevation, bordered, pad }), className),
1492
+ ...props
1493
+ }
1494
+ );
1495
+ }
1496
+ var iconBadgeVariants = classVarianceAuthority.cva(
1497
+ "inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none",
1498
+ {
1499
+ variants: {
1500
+ tone: {
1501
+ /* The signature peach tile — soft accent fill, terracotta glyph.
1502
+ Auto-swaps to warm-dark + light-peach in dark mode via tokens. */
1503
+ peach: "bg-accent text-accent-foreground",
1504
+ /* Inverted near-black tile, light glyph ("never do" promises). */
1505
+ dark: "bg-foreground text-background",
1506
+ /* Solid brand tile. */
1507
+ brand: "bg-primary text-primary-foreground",
1508
+ /* White tile on a brand band, terracotta glyph (numbered steps). */
1509
+ onBrand: "bg-brand-foreground text-primary",
1510
+ /* Quiet neutral tile. */
1511
+ muted: "bg-muted text-foreground",
1512
+ /* Crisp white (card-colored) tile with a terracotta glyph and a
1513
+ soft lift — the elevated icon chip on muted/colored cards. */
1514
+ surface: "bg-card text-primary shadow-sm"
1515
+ },
1516
+ size: {
1517
+ sm: "size-9 text-xs [&_svg]:size-4",
1518
+ md: "size-11 text-sm [&_svg]:size-5",
1519
+ lg: "size-12 text-base [&_svg]:size-6",
1520
+ xl: "size-14 text-lg [&_svg]:size-7"
1521
+ }
1522
+ },
1523
+ defaultVariants: { tone: "peach", size: "md" }
1524
+ }
1525
+ );
1526
+ function IconBadge({ className, tone, size, children, ...props }) {
1527
+ return /* @__PURE__ */ jsxRuntime.jsx(
1528
+ "span",
1529
+ {
1530
+ "data-slot": "icon-badge",
1531
+ className: cn(iconBadgeVariants({ tone, size }), className),
1532
+ ...props,
1533
+ children
1534
+ }
1535
+ );
1536
+ }
1429
1537
  function Card({
1430
1538
  id,
1431
1539
  title,
@@ -1538,7 +1646,7 @@ function Sparkline({ data, width = 96, height = 24, area = false, className }) {
1538
1646
  function StatBlock({ label, value, sub, delta, tone = "default", className }) {
1539
1647
  const toneClass = tone === "success" ? "text-success" : tone === "warning" ? "text-warning" : tone === "destructive" ? "text-destructive" : "text-foreground";
1540
1648
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-1", className), children: [
1541
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-mono text-[10px]", children: label }),
1649
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-mono text-muted-foreground text-[10px]", children: label }),
1542
1650
  /* @__PURE__ */ jsxRuntime.jsx(
1543
1651
  "span",
1544
1652
  {
@@ -1870,6 +1978,7 @@ exports.DialogPortal = DialogPortal;
1870
1978
  exports.DialogTitle = DialogTitle;
1871
1979
  exports.DialogTrigger = DialogTrigger;
1872
1980
  exports.ErrorBoundary = ErrorBoundary;
1981
+ exports.IconBadge = IconBadge;
1873
1982
  exports.Input = Input;
1874
1983
  exports.Label = Label;
1875
1984
  exports.Modal = Modal;
@@ -1908,6 +2017,7 @@ exports.Skeleton = Skeleton;
1908
2017
  exports.Sparkline = Sparkline;
1909
2018
  exports.StatBlock = StatBlock;
1910
2019
  exports.StatusPill = StatusPill;
2020
+ exports.Surface = Surface;
1911
2021
  exports.Switch = Switch;
1912
2022
  exports.Tabs = Tabs;
1913
2023
  exports.TabsContent = TabsContent;
@@ -1923,7 +2033,9 @@ exports.WorkingPanel = WorkingPanel;
1923
2033
  exports.badgeVariants = badgeVariants;
1924
2034
  exports.buttonVariants = buttonVariants;
1925
2035
  exports.confirm = confirm;
2036
+ exports.iconBadgeVariants = iconBadgeVariants;
1926
2037
  exports.makeStatusPill = makeStatusPill;
1927
2038
  exports.prompt = prompt;
2039
+ exports.surfaceVariants = surfaceVariants;
1928
2040
  //# sourceMappingURL=primitives.js.map
1929
2041
  //# sourceMappingURL=primitives.js.map