@epilot/spark-ui 0.10.1 → 0.11.1

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 (176) hide show
  1. package/README.md +9 -1
  2. package/dist/components/accordion.cjs +1 -1
  3. package/dist/components/accordion.d.ts +1 -1
  4. package/dist/components/accordion.js +1 -1
  5. package/dist/components/attachment.d.cts +1 -1
  6. package/dist/components/attachment.d.ts +1 -1
  7. package/dist/components/avatar.d.cts +1 -1
  8. package/dist/components/avatar.d.ts +1 -1
  9. package/dist/components/badge.cjs +1 -1
  10. package/dist/components/badge.cjs.map +1 -1
  11. package/dist/components/badge.d.cts +1 -1
  12. package/dist/components/badge.d.ts +1 -1
  13. package/dist/components/badge.js +1 -1
  14. package/dist/components/badge.js.map +1 -1
  15. package/dist/components/bar-chart.cjs +6 -8
  16. package/dist/components/bar-chart.cjs.map +1 -1
  17. package/dist/components/bar-chart.js +7 -9
  18. package/dist/components/bar-chart.js.map +1 -1
  19. package/dist/components/battery-progress-row.cjs +6 -7
  20. package/dist/components/battery-progress-row.cjs.map +1 -1
  21. package/dist/components/battery-progress-row.js +6 -7
  22. package/dist/components/battery-progress-row.js.map +1 -1
  23. package/dist/components/box.cjs +42 -0
  24. package/dist/components/box.cjs.map +1 -0
  25. package/dist/components/box.d.cts +35 -0
  26. package/dist/components/box.d.ts +35 -0
  27. package/dist/components/box.js +41 -0
  28. package/dist/components/box.js.map +1 -0
  29. package/dist/components/bubble.d.cts +1 -1
  30. package/dist/components/bubble.d.ts +1 -1
  31. package/dist/components/button-group.d.cts +1 -1
  32. package/dist/components/button-group.d.ts +1 -1
  33. package/dist/components/button.cjs +1 -1
  34. package/dist/components/button.cjs.map +1 -1
  35. package/dist/components/button.d.cts +3 -3
  36. package/dist/components/button.d.ts +3 -3
  37. package/dist/components/button.js +1 -1
  38. package/dist/components/button.js.map +1 -1
  39. package/dist/components/callout.d.cts +1 -1
  40. package/dist/components/callout.d.ts +1 -1
  41. package/dist/components/card.cjs +10 -14
  42. package/dist/components/card.cjs.map +1 -1
  43. package/dist/components/card.d.cts +6 -3
  44. package/dist/components/card.d.ts +6 -3
  45. package/dist/components/card.js +10 -14
  46. package/dist/components/card.js.map +1 -1
  47. package/dist/components/checkbox.d.cts +1 -1
  48. package/dist/components/checkbox.d.ts +1 -1
  49. package/dist/components/empty-state.cjs +4 -7
  50. package/dist/components/empty-state.cjs.map +1 -1
  51. package/dist/components/empty-state.js +4 -7
  52. package/dist/components/empty-state.js.map +1 -1
  53. package/dist/components/field.cjs +43 -10
  54. package/dist/components/field.cjs.map +1 -1
  55. package/dist/components/field.d.cts +19 -2
  56. package/dist/components/field.d.ts +19 -2
  57. package/dist/components/field.js +43 -11
  58. package/dist/components/field.js.map +1 -1
  59. package/dist/components/icon.cjs +12 -9
  60. package/dist/components/icon.cjs.map +1 -1
  61. package/dist/components/icon.d.cts +6 -2
  62. package/dist/components/icon.d.ts +6 -2
  63. package/dist/components/icon.js +12 -9
  64. package/dist/components/icon.js.map +1 -1
  65. package/dist/components/info-block.d.cts +1 -1
  66. package/dist/components/info-block.d.ts +1 -1
  67. package/dist/components/input-otp.cjs +1 -1
  68. package/dist/components/input-otp.js +1 -1
  69. package/dist/components/input.cjs +1 -1
  70. package/dist/components/input.d.cts +1 -1
  71. package/dist/components/input.d.ts +1 -1
  72. package/dist/components/input.js +1 -1
  73. package/dist/components/layout.cjs +6 -2
  74. package/dist/components/layout.cjs.map +1 -1
  75. package/dist/components/layout.d.cts +9 -2
  76. package/dist/components/layout.d.ts +8 -2
  77. package/dist/components/layout.js +6 -2
  78. package/dist/components/layout.js.map +1 -1
  79. package/dist/components/line-chart.cjs +2 -2
  80. package/dist/components/line-chart.js +3 -3
  81. package/dist/components/list.cjs +46 -14
  82. package/dist/components/list.cjs.map +1 -1
  83. package/dist/components/list.d.cts +27 -3
  84. package/dist/components/list.d.ts +27 -3
  85. package/dist/components/list.js +46 -14
  86. package/dist/components/list.js.map +1 -1
  87. package/dist/components/marker.d.cts +1 -1
  88. package/dist/components/marker.d.ts +1 -1
  89. package/dist/components/metering-row.cjs +28 -11
  90. package/dist/components/metering-row.cjs.map +1 -1
  91. package/dist/components/metering-row.js +28 -11
  92. package/dist/components/metering-row.js.map +1 -1
  93. package/dist/components/page-header.d.cts +1 -1
  94. package/dist/components/page-header.d.ts +1 -1
  95. package/dist/components/pill.cjs +2 -2
  96. package/dist/components/pill.cjs.map +1 -1
  97. package/dist/components/pill.d.cts +1 -1
  98. package/dist/components/pill.d.ts +1 -1
  99. package/dist/components/pill.js +2 -2
  100. package/dist/components/pill.js.map +1 -1
  101. package/dist/components/popover.cjs +16 -13
  102. package/dist/components/popover.cjs.map +1 -1
  103. package/dist/components/popover.d.cts +2 -1
  104. package/dist/components/popover.d.ts +2 -1
  105. package/dist/components/popover.js +16 -13
  106. package/dist/components/popover.js.map +1 -1
  107. package/dist/components/power-history-chart.cjs +2 -2
  108. package/dist/components/power-history-chart.js +3 -3
  109. package/dist/components/power-history.cjs +1 -1
  110. package/dist/components/power-history.js +1 -1
  111. package/dist/components/power-network.cjs +1 -1
  112. package/dist/components/power-network.js +1 -1
  113. package/dist/components/radio-card-group.cjs +6 -2
  114. package/dist/components/radio-card-group.cjs.map +1 -1
  115. package/dist/components/radio-card-group.d.cts +2 -0
  116. package/dist/components/radio-card-group.d.ts +2 -0
  117. package/dist/components/radio-card-group.js +6 -2
  118. package/dist/components/radio-card-group.js.map +1 -1
  119. package/dist/components/radio.cjs +6 -2
  120. package/dist/components/radio.cjs.map +1 -1
  121. package/dist/components/radio.d.cts +7 -3
  122. package/dist/components/radio.d.ts +7 -3
  123. package/dist/components/radio.js +6 -2
  124. package/dist/components/radio.js.map +1 -1
  125. package/dist/components/segmented-control.d.cts +1 -1
  126. package/dist/components/segmented-control.d.ts +1 -1
  127. package/dist/components/select.cjs +22 -19
  128. package/dist/components/select.cjs.map +1 -1
  129. package/dist/components/select.d.cts +3 -2
  130. package/dist/components/select.d.ts +3 -2
  131. package/dist/components/select.js +22 -19
  132. package/dist/components/select.js.map +1 -1
  133. package/dist/components/solar-forecast-chart.cjs +1 -1
  134. package/dist/components/solar-forecast-chart.js +2 -2
  135. package/dist/components/switch.d.cts +1 -1
  136. package/dist/components/switch.d.ts +1 -1
  137. package/dist/components/tabs.cjs +4 -3
  138. package/dist/components/tabs.cjs.map +1 -1
  139. package/dist/components/tabs.d.cts +9 -0
  140. package/dist/components/tabs.d.ts +9 -0
  141. package/dist/components/tabs.js +4 -3
  142. package/dist/components/tabs.js.map +1 -1
  143. package/dist/components/textarea.cjs +1 -1
  144. package/dist/components/textarea.d.cts +1 -1
  145. package/dist/components/textarea.d.ts +1 -1
  146. package/dist/components/textarea.js +1 -1
  147. package/dist/components/theme.cjs +35 -9
  148. package/dist/components/theme.cjs.map +1 -1
  149. package/dist/components/theme.d.cts +12 -1
  150. package/dist/components/theme.d.ts +12 -1
  151. package/dist/components/theme.js +36 -10
  152. package/dist/components/theme.js.map +1 -1
  153. package/dist/icons/material-symbol.cjs +1 -0
  154. package/dist/icons/material-symbol.cjs.map +1 -1
  155. package/dist/icons/material-symbol.js +1 -0
  156. package/dist/icons/material-symbol.js.map +1 -1
  157. package/dist/lib/accent-theme.cjs +102 -14
  158. package/dist/lib/accent-theme.cjs.map +1 -1
  159. package/dist/lib/accent-theme.d.cts +29 -4
  160. package/dist/lib/accent-theme.d.ts +29 -4
  161. package/dist/lib/accent-theme.js +100 -15
  162. package/dist/lib/accent-theme.js.map +1 -1
  163. package/dist/lib/container-chrome.cjs +53 -0
  164. package/dist/lib/container-chrome.cjs.map +1 -0
  165. package/dist/lib/container-chrome.d.cts +15 -0
  166. package/dist/lib/container-chrome.d.ts +15 -0
  167. package/dist/lib/container-chrome.js +48 -0
  168. package/dist/lib/container-chrome.js.map +1 -0
  169. package/dist/lib/input-box-variants.d.cts +1 -1
  170. package/dist/lib/input-box-variants.d.ts +1 -1
  171. package/dist/lib/theme-types.d.cts +1 -1
  172. package/dist/lib/theme-types.d.ts +1 -1
  173. package/dist/styles/spark-default.css +34 -8
  174. package/dist/{theme-types-8wjgiNA_.d.ts → theme-types-1yB0d8mp.d.cts} +6 -6
  175. package/dist/{theme-types-8wjgiNA_.d.cts → theme-types-1yB0d8mp.d.ts} +6 -6
  176. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"button.cjs","names":["React","ButtonPrimitive","accentByColor"],"sources":["../../src/components/button.tsx"],"sourcesContent":["'use client'\n\nimport { Button as ButtonPrimitive } from '@base-ui/react/button'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\nimport { accentByColor } from '../lib/accent-colors'\nimport type { SparkStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\nconst buttonVariants = cva(\n 'group/button touch-target inline-flex cursor-pointer items-center justify-center gap-2 rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] text-base font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10))',\n secondary:\n 'bg-gray-2 text-gray-a11 shadow-[inset_0_0_0_1px_var(--color-gray-a7)] hover:bg-gray-a3',\n tertiary: 'bg-transparent text-gray-a11 hover:bg-gray-a3',\n bare: 'rounded-none! text-gray-12 outline-hidden!',\n destructive:\n 'bg-red-a3 text-red-a11 hover:bg-red-a4 focus-visible:ring-base-error-solid',\n },\n color: {\n accent: '',\n neutral: '',\n danger: 'focus-visible:ring-base-error-solid',\n },\n size: {\n small: 'h-9 px-3 text-sm [&_svg:not([class*=size-])]:size-4',\n default: 'h-10 px-3 [&_svg:not([class*=size-])]:size-5',\n medium: 'h-11 px-4 [&_svg:not([class*=size-])]:size-6',\n 'icon-small': 'size-9 [&_svg:not([class*=size-])]:size-4',\n icon: 'size-10 [&_svg:not([class*=size-])]:size-5',\n 'icon-medium': 'size-11 [&_svg:not([class*=size-])]:size-6',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst buttonRecipe =\n 'bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10)) shadow-[inset_0_0_0_var(--spark-style-border-width,1px)_var(--spark-style-border,transparent)]'\n\nexport type SparkButtonColor = 'accent' | 'neutral' | 'danger'\n\nexport interface ButtonProps\n extends\n Omit<React.ComponentProps<typeof ButtonPrimitive>, 'ref'>,\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color'> {\n styleVariant?: SparkStyle\n color?: SparkButtonColor\n /**\n * @deprecated Not a `<Button>` prop and silently ignored -- use `styleVariant`\n * (`solid | soft | surface | ghost | outline`) and `color`\n * (`accent | neutral | danger`) instead. The `variant` axis on\n * `buttonVariants` exists only for class-string callers.\n */\n variant?: never\n}\n\n// forwardRef keeps refs working for React 18 consumers (ref-as-prop is 19-only)\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n className,\n styleVariant,\n color,\n size,\n render,\n nativeButton,\n variant: _variant,\n ...props\n },\n ref,\n) {\n const hasLook = styleVariant !== undefined || color !== undefined\n const dataStyle = hasLook ? (styleVariant ?? 'solid') : undefined\n const dataAccentColor = color ? accentByColor[color] : undefined\n\n return (\n <ButtonPrimitive\n data-style={dataStyle}\n data-accent-color={dataAccentColor}\n nativeButton={nativeButton ?? render === undefined}\n render={render}\n className={cn(buttonVariants({ size, color }), buttonRecipe, className)}\n ref={ref}\n {...props}\n />\n )\n})\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n"],"mappings":";;;;;;;;;;;;AASA,MAAM,kBAAA,GAAA,yBAAA,KACJ,0dACA;CACE,UAAU;EACR,SAAS;GACP,SACE;GACF,WACE;GACF,UAAU;GACV,MAAM;GACN,aACE;EACJ;EACA,OAAO;GACL,QAAQ;GACR,SAAS;GACT,QAAQ;EACV;EACA,MAAM;GACJ,OAAO;GACP,SAAS;GACT,QAAQ;GACR,cAAc;GACd,MAAM;GACN,eAAe;EACjB;CACF;CACA,iBAAiB,EACf,MAAM,UACR;AACF,CACF;AAEA,MAAM,eACJ;AAoBF,MAAM,SAASA,MAAM,WAA2C,SAAS,OACvE,EACE,WACA,cACA,OACA,MACA,QACA,cACA,SAAS,UACT,GAAG,SAEL,KACA;CAKA,OACE,iBAAA,GAAA,kBAAA,KAACC,sBAAAA,QAAD;EACE,cANY,iBAAiB,KAAA,KAAa,UAAU,KAAA,IAC3B,gBAAgB,UAAW,KAAA;EAMpD,qBALoB,QAAQC,0BAAAA,cAAc,SAAS,KAAA;EAMnD,cAAc,gBAAgB,WAAW,KAAA;EACjC;EACR,YAAA,GAAA,OAAA,IAAc,eAAe;GAAE;GAAM;EAAM,CAAC,GAAG,cAAc,SAAS;EACjE;EACL,GAAI;CACL,CAAA;AAEL,CAAC;AAED,OAAO,cAAc"}
1
+ {"version":3,"file":"button.cjs","names":["React","ButtonPrimitive","accentByColor"],"sources":["../../src/components/button.tsx"],"sourcesContent":["'use client'\n\nimport { Button as ButtonPrimitive } from '@base-ui/react/button'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\nimport { accentByColor } from '../lib/accent-colors'\nimport type { SparkStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\nconst buttonVariants = cva(\n 'group/button touch-target inline-flex cursor-pointer items-center justify-center gap-2 rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] text-base font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10))',\n secondary:\n 'bg-gray-2 text-gray-a11 shadow-[inset_0_0_0_1px_var(--neutral-a7)] hover:bg-gray-a3',\n tertiary: 'bg-transparent text-gray-a11 hover:bg-gray-a3',\n bare: 'rounded-none! text-gray-12 outline-hidden!',\n destructive:\n 'bg-red-a3 text-red-a11 hover:bg-red-a4 focus-visible:ring-base-error-solid',\n },\n color: {\n accent: '',\n neutral: '',\n danger: 'focus-visible:ring-base-error-solid',\n },\n size: {\n small: 'h-9 px-3 text-sm [&_svg:not([class*=size-])]:size-4',\n default: 'h-10 px-3 [&_svg:not([class*=size-])]:size-5',\n medium: 'h-11 px-4 [&_svg:not([class*=size-])]:size-6',\n 'icon-small': 'size-9 [&_svg:not([class*=size-])]:size-4',\n icon: 'size-10 [&_svg:not([class*=size-])]:size-5',\n 'icon-medium': 'size-11 [&_svg:not([class*=size-])]:size-6',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst buttonRecipe =\n 'bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10)) shadow-[inset_0_0_0_var(--spark-style-border-width,1px)_var(--spark-style-border,transparent)]'\n\nexport type SparkButtonColor = 'accent' | 'neutral' | 'danger'\n\nexport interface ButtonProps\n extends\n Omit<React.ComponentProps<typeof ButtonPrimitive>, 'ref'>,\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color'> {\n styleVariant?: SparkStyle\n color?: SparkButtonColor\n /**\n * @deprecated Not a `<Button>` prop and silently ignored -- use `styleVariant`\n * (`solid | soft | surface | ghost | outline`) and `color`\n * (`accent | neutral | danger`) instead. The `variant` axis on\n * `buttonVariants` exists only for class-string callers.\n */\n variant?: never\n}\n\n// forwardRef keeps refs working for React 18 consumers (ref-as-prop is 19-only)\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n className,\n styleVariant,\n color,\n size,\n render,\n nativeButton,\n variant: _variant,\n ...props\n },\n ref,\n) {\n const hasLook = styleVariant !== undefined || color !== undefined\n const dataStyle = hasLook ? (styleVariant ?? 'solid') : undefined\n const dataAccentColor = color ? accentByColor[color] : undefined\n\n return (\n <ButtonPrimitive\n data-style={dataStyle}\n data-accent-color={dataAccentColor}\n nativeButton={nativeButton ?? render === undefined}\n render={render}\n className={cn(buttonVariants({ size, color }), buttonRecipe, className)}\n ref={ref}\n {...props}\n />\n )\n})\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n"],"mappings":";;;;;;;;;;;;AASA,MAAM,kBAAA,GAAA,yBAAA,KACJ,0dACA;CACE,UAAU;EACR,SAAS;GACP,SACE;GACF,WACE;GACF,UAAU;GACV,MAAM;GACN,aACE;EACJ;EACA,OAAO;GACL,QAAQ;GACR,SAAS;GACT,QAAQ;EACV;EACA,MAAM;GACJ,OAAO;GACP,SAAS;GACT,QAAQ;GACR,cAAc;GACd,MAAM;GACN,eAAe;EACjB;CACF;CACA,iBAAiB,EACf,MAAM,UACR;AACF,CACF;AAEA,MAAM,eACJ;AAoBF,MAAM,SAASA,MAAM,WAA2C,SAAS,OACvE,EACE,WACA,cACA,OACA,MACA,QACA,cACA,SAAS,UACT,GAAG,SAEL,KACA;CAKA,OACE,iBAAA,GAAA,kBAAA,KAACC,sBAAAA,QAAD;EACE,cANY,iBAAiB,KAAA,KAAa,UAAU,KAAA,IAC3B,gBAAgB,UAAW,KAAA;EAMpD,qBALoB,QAAQC,0BAAAA,cAAc,SAAS,KAAA;EAMnD,cAAc,gBAAgB,WAAW,KAAA;EACjC;EACR,YAAA,GAAA,OAAA,IAAc,eAAe;GAAE;GAAM;EAAM,CAAC,GAAG,cAAc,SAAS;EACjE;EACL,GAAI;CACL,CAAA;AAEL,CAAC;AAED,OAAO,cAAc"}
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
 
3
- import { u as SparkStyle } from "../theme-types-8wjgiNA_.cjs";
3
+ import { u as SparkStyle } from "../theme-types-1yB0d8mp.cjs";
4
4
  import * as React$1 from "react";
5
5
  import { Button as Button$1 } from "@base-ui/react/button";
6
6
  import { VariantProps } from "class-variance-authority";
7
7
 
8
8
  //#region src/components/button.d.ts
9
9
  declare const buttonVariants: (props?: ({
10
- variant?: "primary" | "secondary" | "tertiary" | "bare" | "destructive" | null | undefined;
10
+ variant?: "secondary" | "destructive" | "primary" | "tertiary" | "bare" | null | undefined;
11
11
  color?: "accent" | "neutral" | "danger" | null | undefined;
12
- size?: "small" | "default" | "medium" | "icon-small" | "icon" | "icon-medium" | null | undefined;
12
+ size?: "small" | "icon" | "default" | "medium" | "icon-small" | "icon-medium" | null | undefined;
13
13
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
14
14
  type SparkButtonColor = 'accent' | 'neutral' | 'danger';
15
15
  interface ButtonProps extends Omit<React$1.ComponentProps<typeof Button$1>, 'ref'>, Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color'> {
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
 
3
- import { u as SparkStyle } from "../theme-types-8wjgiNA_.js";
3
+ import { u as SparkStyle } from "../theme-types-1yB0d8mp.js";
4
4
  import * as React$1 from "react";
5
5
  import { Button as Button$1 } from "@base-ui/react/button";
6
6
  import { VariantProps } from "class-variance-authority";
7
7
 
8
8
  //#region src/components/button.d.ts
9
9
  declare const buttonVariants: (props?: ({
10
- variant?: "primary" | "secondary" | "tertiary" | "bare" | "destructive" | null | undefined;
10
+ variant?: "secondary" | "destructive" | "primary" | "tertiary" | "bare" | null | undefined;
11
11
  color?: "accent" | "neutral" | "danger" | null | undefined;
12
- size?: "small" | "default" | "medium" | "icon-small" | "icon" | "icon-medium" | null | undefined;
12
+ size?: "small" | "icon" | "default" | "medium" | "icon-small" | "icon-medium" | null | undefined;
13
13
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
14
14
  type SparkButtonColor = 'accent' | 'neutral' | 'danger';
15
15
  interface ButtonProps extends Omit<React$1.ComponentProps<typeof Button$1>, 'ref'>, Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color'> {
@@ -11,7 +11,7 @@ const buttonVariants = cva("group/button touch-target inline-flex cursor-pointer
11
11
  variants: {
12
12
  variant: {
13
13
  primary: "bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10))",
14
- secondary: "bg-gray-2 text-gray-a11 shadow-[inset_0_0_0_1px_var(--color-gray-a7)] hover:bg-gray-a3",
14
+ secondary: "bg-gray-2 text-gray-a11 shadow-[inset_0_0_0_1px_var(--neutral-a7)] hover:bg-gray-a3",
15
15
  tertiary: "bg-transparent text-gray-a11 hover:bg-gray-a3",
16
16
  bare: "rounded-none! text-gray-12 outline-hidden!",
17
17
  destructive: "bg-red-a3 text-red-a11 hover:bg-red-a4 focus-visible:ring-base-error-solid"
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","names":["React","ButtonPrimitive"],"sources":["../../src/components/button.tsx"],"sourcesContent":["'use client'\n\nimport { Button as ButtonPrimitive } from '@base-ui/react/button'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\nimport { accentByColor } from '../lib/accent-colors'\nimport type { SparkStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\nconst buttonVariants = cva(\n 'group/button touch-target inline-flex cursor-pointer items-center justify-center gap-2 rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] text-base font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10))',\n secondary:\n 'bg-gray-2 text-gray-a11 shadow-[inset_0_0_0_1px_var(--color-gray-a7)] hover:bg-gray-a3',\n tertiary: 'bg-transparent text-gray-a11 hover:bg-gray-a3',\n bare: 'rounded-none! text-gray-12 outline-hidden!',\n destructive:\n 'bg-red-a3 text-red-a11 hover:bg-red-a4 focus-visible:ring-base-error-solid',\n },\n color: {\n accent: '',\n neutral: '',\n danger: 'focus-visible:ring-base-error-solid',\n },\n size: {\n small: 'h-9 px-3 text-sm [&_svg:not([class*=size-])]:size-4',\n default: 'h-10 px-3 [&_svg:not([class*=size-])]:size-5',\n medium: 'h-11 px-4 [&_svg:not([class*=size-])]:size-6',\n 'icon-small': 'size-9 [&_svg:not([class*=size-])]:size-4',\n icon: 'size-10 [&_svg:not([class*=size-])]:size-5',\n 'icon-medium': 'size-11 [&_svg:not([class*=size-])]:size-6',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst buttonRecipe =\n 'bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10)) shadow-[inset_0_0_0_var(--spark-style-border-width,1px)_var(--spark-style-border,transparent)]'\n\nexport type SparkButtonColor = 'accent' | 'neutral' | 'danger'\n\nexport interface ButtonProps\n extends\n Omit<React.ComponentProps<typeof ButtonPrimitive>, 'ref'>,\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color'> {\n styleVariant?: SparkStyle\n color?: SparkButtonColor\n /**\n * @deprecated Not a `<Button>` prop and silently ignored -- use `styleVariant`\n * (`solid | soft | surface | ghost | outline`) and `color`\n * (`accent | neutral | danger`) instead. The `variant` axis on\n * `buttonVariants` exists only for class-string callers.\n */\n variant?: never\n}\n\n// forwardRef keeps refs working for React 18 consumers (ref-as-prop is 19-only)\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n className,\n styleVariant,\n color,\n size,\n render,\n nativeButton,\n variant: _variant,\n ...props\n },\n ref,\n) {\n const hasLook = styleVariant !== undefined || color !== undefined\n const dataStyle = hasLook ? (styleVariant ?? 'solid') : undefined\n const dataAccentColor = color ? accentByColor[color] : undefined\n\n return (\n <ButtonPrimitive\n data-style={dataStyle}\n data-accent-color={dataAccentColor}\n nativeButton={nativeButton ?? render === undefined}\n render={render}\n className={cn(buttonVariants({ size, color }), buttonRecipe, className)}\n ref={ref}\n {...props}\n />\n )\n})\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n"],"mappings":";;;;;;;;;AASA,MAAM,iBAAiB,IACrB,0dACA;CACE,UAAU;EACR,SAAS;GACP,SACE;GACF,WACE;GACF,UAAU;GACV,MAAM;GACN,aACE;EACJ;EACA,OAAO;GACL,QAAQ;GACR,SAAS;GACT,QAAQ;EACV;EACA,MAAM;GACJ,OAAO;GACP,SAAS;GACT,QAAQ;GACR,cAAc;GACd,MAAM;GACN,eAAe;EACjB;CACF;CACA,iBAAiB,EACf,MAAM,UACR;AACF,CACF;AAEA,MAAM,eACJ;AAoBF,MAAM,SAASA,QAAM,WAA2C,SAAS,OACvE,EACE,WACA,cACA,OACA,MACA,QACA,cACA,SAAS,UACT,GAAG,SAEL,KACA;CAKA,OACE,oBAACC,UAAD;EACE,cANY,iBAAiB,KAAA,KAAa,UAAU,KAAA,IAC3B,gBAAgB,UAAW,KAAA;EAMpD,qBALoB,QAAQ,cAAc,SAAS,KAAA;EAMnD,cAAc,gBAAgB,WAAW,KAAA;EACjC;EACR,WAAW,GAAG,eAAe;GAAE;GAAM;EAAM,CAAC,GAAG,cAAc,SAAS;EACjE;EACL,GAAI;CACL,CAAA;AAEL,CAAC;AAED,OAAO,cAAc"}
1
+ {"version":3,"file":"button.js","names":["React","ButtonPrimitive"],"sources":["../../src/components/button.tsx"],"sourcesContent":["'use client'\n\nimport { Button as ButtonPrimitive } from '@base-ui/react/button'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\nimport { accentByColor } from '../lib/accent-colors'\nimport type { SparkStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\nconst buttonVariants = cva(\n 'group/button touch-target inline-flex cursor-pointer items-center justify-center gap-2 rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] text-base font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10))',\n secondary:\n 'bg-gray-2 text-gray-a11 shadow-[inset_0_0_0_1px_var(--neutral-a7)] hover:bg-gray-a3',\n tertiary: 'bg-transparent text-gray-a11 hover:bg-gray-a3',\n bare: 'rounded-none! text-gray-12 outline-hidden!',\n destructive:\n 'bg-red-a3 text-red-a11 hover:bg-red-a4 focus-visible:ring-base-error-solid',\n },\n color: {\n accent: '',\n neutral: '',\n danger: 'focus-visible:ring-base-error-solid',\n },\n size: {\n small: 'h-9 px-3 text-sm [&_svg:not([class*=size-])]:size-4',\n default: 'h-10 px-3 [&_svg:not([class*=size-])]:size-5',\n medium: 'h-11 px-4 [&_svg:not([class*=size-])]:size-6',\n 'icon-small': 'size-9 [&_svg:not([class*=size-])]:size-4',\n icon: 'size-10 [&_svg:not([class*=size-])]:size-5',\n 'icon-medium': 'size-11 [&_svg:not([class*=size-])]:size-6',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst buttonRecipe =\n 'bg-(--spark-style-bg,var(--spark-9)) text-(--spark-style-fg,var(--spark-contrast)) hover:bg-(--spark-style-bg-hover,var(--spark-10)) shadow-[inset_0_0_0_var(--spark-style-border-width,1px)_var(--spark-style-border,transparent)]'\n\nexport type SparkButtonColor = 'accent' | 'neutral' | 'danger'\n\nexport interface ButtonProps\n extends\n Omit<React.ComponentProps<typeof ButtonPrimitive>, 'ref'>,\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color'> {\n styleVariant?: SparkStyle\n color?: SparkButtonColor\n /**\n * @deprecated Not a `<Button>` prop and silently ignored -- use `styleVariant`\n * (`solid | soft | surface | ghost | outline`) and `color`\n * (`accent | neutral | danger`) instead. The `variant` axis on\n * `buttonVariants` exists only for class-string callers.\n */\n variant?: never\n}\n\n// forwardRef keeps refs working for React 18 consumers (ref-as-prop is 19-only)\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n className,\n styleVariant,\n color,\n size,\n render,\n nativeButton,\n variant: _variant,\n ...props\n },\n ref,\n) {\n const hasLook = styleVariant !== undefined || color !== undefined\n const dataStyle = hasLook ? (styleVariant ?? 'solid') : undefined\n const dataAccentColor = color ? accentByColor[color] : undefined\n\n return (\n <ButtonPrimitive\n data-style={dataStyle}\n data-accent-color={dataAccentColor}\n nativeButton={nativeButton ?? render === undefined}\n render={render}\n className={cn(buttonVariants({ size, color }), buttonRecipe, className)}\n ref={ref}\n {...props}\n />\n )\n})\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n"],"mappings":";;;;;;;;;AASA,MAAM,iBAAiB,IACrB,0dACA;CACE,UAAU;EACR,SAAS;GACP,SACE;GACF,WACE;GACF,UAAU;GACV,MAAM;GACN,aACE;EACJ;EACA,OAAO;GACL,QAAQ;GACR,SAAS;GACT,QAAQ;EACV;EACA,MAAM;GACJ,OAAO;GACP,SAAS;GACT,QAAQ;GACR,cAAc;GACd,MAAM;GACN,eAAe;EACjB;CACF;CACA,iBAAiB,EACf,MAAM,UACR;AACF,CACF;AAEA,MAAM,eACJ;AAoBF,MAAM,SAASA,QAAM,WAA2C,SAAS,OACvE,EACE,WACA,cACA,OACA,MACA,QACA,cACA,SAAS,UACT,GAAG,SAEL,KACA;CAKA,OACE,oBAACC,UAAD;EACE,cANY,iBAAiB,KAAA,KAAa,UAAU,KAAA,IAC3B,gBAAgB,UAAW,KAAA;EAMpD,qBALoB,QAAQ,cAAc,SAAS,KAAA;EAMnD,cAAc,gBAAgB,WAAW,KAAA;EACjC;EACR,WAAW,GAAG,eAAe;GAAE;GAAM;EAAM,CAAC,GAAG,cAAc,SAAS;EACjE;EACL,GAAI;CACL,CAAA;AAEL,CAAC;AAED,OAAO,cAAc"}
@@ -8,7 +8,7 @@ import { VariantProps } from "class-variance-authority";
8
8
  //#region src/components/callout.d.ts
9
9
  type CalloutVariant = 'error' | 'info' | 'success' | 'warning';
10
10
  declare const calloutVariants: (props?: ({
11
- variant?: "success" | "warning" | "error" | "info" | null | undefined;
11
+ variant?: "success" | "warning" | "info" | "error" | null | undefined;
12
12
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
13
  interface CalloutProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof calloutVariants> {
14
14
  /** Overrides the variant's default icon; the variant's color is kept. */
@@ -8,7 +8,7 @@ import { VariantProps } from "class-variance-authority";
8
8
  //#region src/components/callout.d.ts
9
9
  type CalloutVariant = 'error' | 'info' | 'success' | 'warning';
10
10
  declare const calloutVariants: (props?: ({
11
- variant?: "success" | "warning" | "error" | "info" | null | undefined;
11
+ variant?: "success" | "warning" | "info" | "error" | null | undefined;
12
12
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
13
  interface CalloutProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof calloutVariants> {
14
14
  /** Overrides the variant's default icon; the variant's color is kept. */
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_chunk = require("../chunk-DY84GLCh.cjs");
4
+ const require_lib_container_chrome = require("../lib/container-chrome.cjs");
4
5
  let react = require("react");
5
6
  react = require_chunk.__toESM(react);
6
7
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -8,18 +9,18 @@ let class_variance_authority = require("class-variance-authority");
8
9
  let _base_ui_react_use_render = require("@base-ui/react/use-render");
9
10
  let cnfast = require("cnfast");
10
11
  //#region src/components/card.tsx
11
- const cardVariants = (0, class_variance_authority.cva)("relative flex w-full flex-col gap-1 rounded-2xl py-3", {
12
+ const cardVariants = (0, class_variance_authority.cva)("relative flex w-full flex-col gap-1 py-3", {
12
13
  variants: { variant: {
13
- ambient: "border-(length:--spark-card-border-width,0px) border-(--spark-card-border,transparent) bg-(--spark-card-bg,var(--neutral-a3)) px-(--spark-card-px,1rem)",
14
- soft: "bg-(--spark-card-c-soft,var(--neutral-a3)) px-4",
15
- surface: "border border-(--spark-card-c-border,var(--neutral-a6)) bg-(--spark-card-c-surface,var(--neutral-2)) px-4",
16
- outline: "border border-(--spark-card-c-border,var(--neutral-a6)) px-4",
17
- ghost: "",
18
- solid: "bg-(--spark-card-c-solid,var(--neutral-9)) px-4 [--spark-card-fg-muted:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-fg:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-icon:var(--spark-card-c-contrast,var(--neutral-contrast))]"
14
+ ambient: (0, cnfast.cn)(require_lib_container_chrome.containerChrome.ambient, require_lib_container_chrome.containerPaddingX.ambient),
15
+ soft: (0, cnfast.cn)(require_lib_container_chrome.containerChrome.soft, require_lib_container_chrome.containerPaddingX.soft),
16
+ surface: (0, cnfast.cn)(require_lib_container_chrome.containerChrome.surface, require_lib_container_chrome.containerPaddingX.surface),
17
+ outline: (0, cnfast.cn)(require_lib_container_chrome.containerChrome.outline, require_lib_container_chrome.containerPaddingX.outline),
18
+ ghost: (0, cnfast.cn)(require_lib_container_chrome.containerChrome.ghost, require_lib_container_chrome.containerPaddingX.ghost),
19
+ solid: (0, cnfast.cn)(require_lib_container_chrome.containerChrome.solid, require_lib_container_chrome.containerPaddingX.solid)
19
20
  } },
20
21
  defaultVariants: { variant: "ambient" }
21
22
  });
22
- const Card = react.forwardRef(({ className, variant, color, render, ...props }, ref) => {
23
+ const Card = react.forwardRef(({ className, variant, color, radius = "2xl", render, ...props }, ref) => {
23
24
  const interactive = render != null;
24
25
  const resolved = variant ?? "ambient";
25
26
  return (0, _base_ui_react_use_render.useRender)({
@@ -29,12 +30,7 @@ const Card = react.forwardRef(({ className, variant, color, render, ...props },
29
30
  "data-slot": "card",
30
31
  "data-variant": variant,
31
32
  "data-card-color": color === "accent" ? "accent" : void 0,
32
- className: (0, cnfast.cn)(cardVariants({ variant }), interactive && [
33
- "cursor-pointer text-left no-underline transition-colors motion-reduce:transition-none",
34
- "focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden",
35
- "disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50",
36
- (resolved === "ambient" || resolved === "soft") && "hover:bg-(--spark-card-c-soft-hover,var(--neutral-a4))"
37
- ], className),
33
+ className: (0, cnfast.cn)(cardVariants({ variant }), require_lib_container_chrome.radiusClasses[radius], interactive && require_lib_container_chrome.containerInteractiveClasses(resolved), className),
38
34
  ref,
39
35
  ...props
40
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"card.cjs","names":["React"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport type { SparkCardColor, SparkCardVariant } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\nconst cardVariants = cva(\n 'relative flex w-full flex-col gap-1 rounded-2xl py-3',\n {\n variants: {\n variant: {\n ambient:\n 'border-(length:--spark-card-border-width,0px) border-(--spark-card-border,transparent) bg-(--spark-card-bg,var(--neutral-a3)) px-(--spark-card-px,1rem)',\n soft: 'bg-(--spark-card-c-soft,var(--neutral-a3)) px-4',\n surface:\n 'border border-(--spark-card-c-border,var(--neutral-a6)) bg-(--spark-card-c-surface,var(--neutral-2)) px-4',\n outline: 'border border-(--spark-card-c-border,var(--neutral-a6)) px-4',\n ghost: '',\n solid:\n 'bg-(--spark-card-c-solid,var(--neutral-9)) px-4 [--spark-card-fg-muted:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-fg:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-icon:var(--spark-card-c-contrast,var(--neutral-contrast))]',\n },\n },\n defaultVariants: {\n variant: 'ambient',\n },\n },\n)\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Container chrome scoped to this card — NOT the ambient `data-style` knob\n * (that drives controls and would cascade into the card's content). Unset →\n * follows the app-level `[data-card-variant]` knob (default soft-neutral).\n * (`solid` is hidden for now — see `SparkCardVariant`.)\n */\n variant?: SparkCardVariant\n /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */\n color?: SparkCardColor\n /**\n * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole\n * card interactive (hover tint, focus ring, disabled styles). Omit → static.\n */\n render?: useRender.RenderProp\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, color, render, ...props }, ref) => {\n const interactive = render != null\n const resolved = variant ?? 'ambient'\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n 'data-slot': 'card',\n 'data-variant': variant,\n 'data-card-color': color === 'accent' ? 'accent' : undefined,\n className: cn(\n cardVariants({ variant }),\n interactive && [\n 'cursor-pointer text-left no-underline transition-colors motion-reduce:transition-none',\n 'focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden',\n 'disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50',\n // hover deepens the fill one step; bordered/bare variants only ring\n (resolved === 'ambient' || resolved === 'soft') &&\n 'hover:bg-(--spark-card-c-soft-hover,var(--neutral-a4))',\n ],\n className,\n ),\n ref,\n ...props,\n },\n })\n },\n)\n\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn('flex items-center gap-4', className)}\n ref={ref}\n {...props}\n />\n))\n\nCardHeader.displayName = 'CardHeader'\n\nconst CardIcon = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center text-(--spark-card-icon,var(--spark-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardIcon.displayName = 'CardIcon'\n\nconst CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n className={cn(\n 'text-base leading-5 font-medium text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n className={cn(\n 'text-sm leading-5 text-(--spark-card-fg-muted,var(--neutral-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div className={cn('', className)} ref={ref} {...props} />\n))\n\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex items-center justify-end gap-2 pt-2 text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardFooter.displayName = 'CardFooter'\n\nconst CardSkeleton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'relative flex w-full items-center gap-4 rounded-2xl bg-spark-a3 p-4 opacity-80',\n className,\n )}\n ref={ref}\n {...props}\n >\n <div className=\"size-10 shrink-0 animate-pulse rounded-full bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"flex flex-1 flex-col gap-y-2\">\n <div className=\"h-5 w-1/3 max-w-32 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"h-4 w-1/2 max-w-48 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n </div>\n </div>\n))\n\nCardSkeleton.displayName = 'CardSkeleton'\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardIcon,\n CardSkeleton,\n CardTitle,\n}\nexport type { CardProps }\n"],"mappings":";;;;;;;;;;AAMA,MAAM,gBAAA,GAAA,yBAAA,KACJ,wDACA;CACE,UAAU,EACR,SAAS;EACP,SACE;EACF,MAAM;EACN,SACE;EACF,SAAS;EACT,OAAO;EACP,OACE;CACJ,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAmBA,MAAM,OAAOA,MAAM,YAChB,EAAE,WAAW,SAAS,OAAO,QAAQ,GAAG,SAAS,QAAQ;CACxD,MAAM,cAAc,UAAU;CAC9B,MAAM,WAAW,WAAW;CAC5B,QAAA,GAAA,0BAAA,WAAiB;EACf,gBAAgB;EAChB;EACA,OAAO;GACL,aAAa;GACb,gBAAgB;GAChB,mBAAmB,UAAU,WAAW,WAAW,KAAA;GACnD,YAAA,GAAA,OAAA,IACE,aAAa,EAAE,QAAQ,CAAC,GACxB,eAAe;IACb;IACA;IACA;KAEC,aAAa,aAAa,aAAa,WACtC;GACJ,GACA,SACF;GACA;GACA,GAAG;EACL;CACF,CAAC;AACH,CACF;AAEA,KAAK,cAAc;AAEnB,MAAM,aAAaA,MAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IAAc,2BAA2B,SAAS;CAC7C;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,WAAWA,MAAM,YAGpB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,uFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,SAAS,cAAc;AAEvB,MAAM,YAAYA,MAAM,YAGrB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,MAAD;CACE,YAAA,GAAA,OAAA,IACE,6EACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,UAAU,cAAc;AAExB,MAAM,kBAAkBA,MAAM,YAG3B,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,KAAD;CACE,YAAA,GAAA,OAAA,IACE,qEACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,gBAAgB,cAAc;AAE9B,MAAM,cAAcA,MAAM,YAGvB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CAAK,YAAA,GAAA,OAAA,IAAc,IAAI,SAAS;CAAQ;CAAK,GAAI;AAAQ,CAAA,CAC1D;AAED,YAAY,cAAc;AAE1B,MAAM,aAAaA,MAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,sFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,eAAeA,MAAM,YAGxB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,MAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,kFACA,SACF;CACK;CACL,GAAI;WANN,CAQE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,CACxG;GACF;EACN;AAED,aAAa,cAAc"}
1
+ {"version":3,"file":"card.cjs","names":["containerChrome","containerPaddingX","React","radiusClasses","containerInteractiveClasses"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport {\n containerChrome,\n containerInteractiveClasses,\n containerPaddingX,\n radiusClasses,\n type ContainerRadius,\n} from '../lib/container-chrome'\nimport type { SparkCardColor, SparkCardVariant } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\ntype CardRadius = ContainerRadius\n\nconst cardVariants = cva('relative flex w-full flex-col gap-1 py-3', {\n variants: {\n variant: {\n ambient: cn(containerChrome.ambient, containerPaddingX.ambient),\n soft: cn(containerChrome.soft, containerPaddingX.soft),\n surface: cn(containerChrome.surface, containerPaddingX.surface),\n outline: cn(containerChrome.outline, containerPaddingX.outline),\n ghost: cn(containerChrome.ghost, containerPaddingX.ghost),\n solid: cn(containerChrome.solid, containerPaddingX.solid),\n },\n },\n defaultVariants: {\n variant: 'ambient',\n },\n})\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Container chrome scoped to this card — NOT the ambient `data-style` knob\n * (that drives controls and would cascade into the card's content). Unset →\n * follows the app-level `[data-card-variant]` knob (default soft-neutral).\n */\n variant?: SparkCardVariant\n /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */\n color?: SparkCardColor\n /** Corner radius, as a named step. Unset → `2xl`, today's fixed behaviour. */\n radius?: CardRadius\n /**\n * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole\n * card interactive (hover tint, focus ring, disabled styles). Omit → static.\n */\n render?: useRender.RenderProp\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, color, radius = '2xl', render, ...props }, ref) => {\n const interactive = render != null\n const resolved = variant ?? 'ambient'\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n 'data-slot': 'card',\n 'data-variant': variant,\n 'data-card-color': color === 'accent' ? 'accent' : undefined,\n className: cn(\n cardVariants({ variant }),\n radiusClasses[radius],\n interactive && containerInteractiveClasses(resolved),\n className,\n ),\n ref,\n ...props,\n },\n })\n },\n)\n\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn('flex items-center gap-4', className)}\n ref={ref}\n {...props}\n />\n))\n\nCardHeader.displayName = 'CardHeader'\n\nconst CardIcon = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center text-(--spark-card-icon,var(--spark-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardIcon.displayName = 'CardIcon'\n\nconst CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n className={cn(\n 'text-base leading-5 font-medium text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n className={cn(\n 'text-sm leading-5 text-(--spark-card-fg-muted,var(--neutral-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div className={cn('', className)} ref={ref} {...props} />\n))\n\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex items-center justify-end gap-2 pt-2 text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardFooter.displayName = 'CardFooter'\n\nconst CardSkeleton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'relative flex w-full items-center gap-4 rounded-2xl bg-spark-a3 p-4 opacity-80',\n className,\n )}\n ref={ref}\n {...props}\n >\n <div className=\"size-10 shrink-0 animate-pulse rounded-full bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"flex flex-1 flex-col gap-y-2\">\n <div className=\"h-5 w-1/3 max-w-32 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"h-4 w-1/2 max-w-48 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n </div>\n </div>\n))\n\nCardSkeleton.displayName = 'CardSkeleton'\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardIcon,\n CardSkeleton,\n CardTitle,\n}\nexport type { CardProps, CardRadius }\n"],"mappings":";;;;;;;;;;;AAeA,MAAM,gBAAA,GAAA,yBAAA,KAAmB,4CAA4C;CACnE,UAAU,EACR,SAAS;EACP,UAAA,GAAA,OAAA,IAAYA,6BAAAA,gBAAgB,SAASC,6BAAAA,kBAAkB,OAAO;EAC9D,OAAA,GAAA,OAAA,IAASD,6BAAAA,gBAAgB,MAAMC,6BAAAA,kBAAkB,IAAI;EACrD,UAAA,GAAA,OAAA,IAAYD,6BAAAA,gBAAgB,SAASC,6BAAAA,kBAAkB,OAAO;EAC9D,UAAA,GAAA,OAAA,IAAYD,6BAAAA,gBAAgB,SAASC,6BAAAA,kBAAkB,OAAO;EAC9D,QAAA,GAAA,OAAA,IAAUD,6BAAAA,gBAAgB,OAAOC,6BAAAA,kBAAkB,KAAK;EACxD,QAAA,GAAA,OAAA,IAAUD,6BAAAA,gBAAgB,OAAOC,6BAAAA,kBAAkB,KAAK;CAC1D,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CAAC;AAoBD,MAAM,OAAOC,MAAM,YAChB,EAAE,WAAW,SAAS,OAAO,SAAS,OAAO,QAAQ,GAAG,SAAS,QAAQ;CACxE,MAAM,cAAc,UAAU;CAC9B,MAAM,WAAW,WAAW;CAC5B,QAAA,GAAA,0BAAA,WAAiB;EACf,gBAAgB;EAChB;EACA,OAAO;GACL,aAAa;GACb,gBAAgB;GAChB,mBAAmB,UAAU,WAAW,WAAW,KAAA;GACnD,YAAA,GAAA,OAAA,IACE,aAAa,EAAE,QAAQ,CAAC,GACxBC,6BAAAA,cAAc,SACd,eAAeC,6BAAAA,4BAA4B,QAAQ,GACnD,SACF;GACA;GACA,GAAG;EACL;CACF,CAAC;AACH,CACF;AAEA,KAAK,cAAc;AAEnB,MAAM,aAAaF,MAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IAAc,2BAA2B,SAAS;CAC7C;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,WAAWA,MAAM,YAGpB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,uFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,SAAS,cAAc;AAEvB,MAAM,YAAYA,MAAM,YAGrB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,MAAD;CACE,YAAA,GAAA,OAAA,IACE,6EACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,UAAU,cAAc;AAExB,MAAM,kBAAkBA,MAAM,YAG3B,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,KAAD;CACE,YAAA,GAAA,OAAA,IACE,qEACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,gBAAgB,cAAc;AAE9B,MAAM,cAAcA,MAAM,YAGvB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CAAK,YAAA,GAAA,OAAA,IAAc,IAAI,SAAS;CAAQ;CAAK,GAAI;AAAQ,CAAA,CAC1D;AAED,YAAY,cAAc;AAE1B,MAAM,aAAaA,MAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,sFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,eAAeA,MAAM,YAGxB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,MAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,kFACA,SACF;CACK;CACL,GAAI;WANN,CAQE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,CACxG;GACF;EACN;AAED,aAAa,cAAc"}
@@ -1,20 +1,23 @@
1
1
  "use client";
2
2
 
3
- import { n as SparkCardVariant, t as SparkCardColor } from "../theme-types-8wjgiNA_.cjs";
3
+ import { n as SparkCardVariant, t as SparkCardColor } from "../theme-types-1yB0d8mp.cjs";
4
+ import { ContainerRadius } from "../lib/container-chrome.cjs";
4
5
  import * as React$1 from "react";
5
6
  import { useRender } from "@base-ui/react/use-render";
6
7
 
7
8
  //#region src/components/card.d.ts
9
+ type CardRadius = ContainerRadius;
8
10
  interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
9
11
  /**
10
12
  * Container chrome scoped to this card — NOT the ambient `data-style` knob
11
13
  * (that drives controls and would cascade into the card's content). Unset →
12
14
  * follows the app-level `[data-card-variant]` knob (default soft-neutral).
13
- * (`solid` is hidden for now — see `SparkCardVariant`.)
14
15
  */
15
16
  variant?: SparkCardVariant;
16
17
  /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */
17
18
  color?: SparkCardColor;
19
+ /** Corner radius, as a named step. Unset → `2xl`, today's fixed behaviour. */
20
+ radius?: CardRadius;
18
21
  /**
19
22
  * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole
20
23
  * card interactive (hover tint, focus ring, disabled styles). Omit → static.
@@ -30,5 +33,5 @@ declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttribu
30
33
  declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
31
34
  declare const CardSkeleton: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
32
35
  //#endregion
33
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardIcon, type CardProps, CardSkeleton, CardTitle };
36
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardIcon, type CardProps, type CardRadius, CardSkeleton, CardTitle };
34
37
  //# sourceMappingURL=card.d.cts.map
@@ -1,20 +1,23 @@
1
1
  "use client";
2
2
 
3
- import { n as SparkCardVariant, t as SparkCardColor } from "../theme-types-8wjgiNA_.js";
3
+ import { n as SparkCardVariant, t as SparkCardColor } from "../theme-types-1yB0d8mp.js";
4
+ import { ContainerRadius } from "../lib/container-chrome.js";
4
5
  import * as React$1 from "react";
5
6
  import { useRender } from "@base-ui/react/use-render";
6
7
 
7
8
  //#region src/components/card.d.ts
9
+ type CardRadius = ContainerRadius;
8
10
  interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
9
11
  /**
10
12
  * Container chrome scoped to this card — NOT the ambient `data-style` knob
11
13
  * (that drives controls and would cascade into the card's content). Unset →
12
14
  * follows the app-level `[data-card-variant]` knob (default soft-neutral).
13
- * (`solid` is hidden for now — see `SparkCardVariant`.)
14
15
  */
15
16
  variant?: SparkCardVariant;
16
17
  /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */
17
18
  color?: SparkCardColor;
19
+ /** Corner radius, as a named step. Unset → `2xl`, today's fixed behaviour. */
20
+ radius?: CardRadius;
18
21
  /**
19
22
  * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole
20
23
  * card interactive (hover tint, focus ring, disabled styles). Omit → static.
@@ -30,5 +33,5 @@ declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttribu
30
33
  declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
31
34
  declare const CardSkeleton: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
32
35
  //#endregion
33
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardIcon, type CardProps, CardSkeleton, CardTitle };
36
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardIcon, type CardProps, type CardRadius, CardSkeleton, CardTitle };
34
37
  //# sourceMappingURL=card.d.ts.map
@@ -1,22 +1,23 @@
1
1
  "use client";
2
2
  import { cn } from "../utils/cn.js";
3
+ import { containerChrome, containerInteractiveClasses, containerPaddingX, radiusClasses } from "../lib/container-chrome.js";
3
4
  import * as React$1 from "react";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  import { cva } from "class-variance-authority";
6
7
  import { useRender } from "@base-ui/react/use-render";
7
8
  //#region src/components/card.tsx
8
- const cardVariants = cva("relative flex w-full flex-col gap-1 rounded-2xl py-3", {
9
+ const cardVariants = cva("relative flex w-full flex-col gap-1 py-3", {
9
10
  variants: { variant: {
10
- ambient: "border-(length:--spark-card-border-width,0px) border-(--spark-card-border,transparent) bg-(--spark-card-bg,var(--neutral-a3)) px-(--spark-card-px,1rem)",
11
- soft: "bg-(--spark-card-c-soft,var(--neutral-a3)) px-4",
12
- surface: "border border-(--spark-card-c-border,var(--neutral-a6)) bg-(--spark-card-c-surface,var(--neutral-2)) px-4",
13
- outline: "border border-(--spark-card-c-border,var(--neutral-a6)) px-4",
14
- ghost: "",
15
- solid: "bg-(--spark-card-c-solid,var(--neutral-9)) px-4 [--spark-card-fg-muted:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-fg:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-icon:var(--spark-card-c-contrast,var(--neutral-contrast))]"
11
+ ambient: cn(containerChrome.ambient, containerPaddingX.ambient),
12
+ soft: cn(containerChrome.soft, containerPaddingX.soft),
13
+ surface: cn(containerChrome.surface, containerPaddingX.surface),
14
+ outline: cn(containerChrome.outline, containerPaddingX.outline),
15
+ ghost: cn(containerChrome.ghost, containerPaddingX.ghost),
16
+ solid: cn(containerChrome.solid, containerPaddingX.solid)
16
17
  } },
17
18
  defaultVariants: { variant: "ambient" }
18
19
  });
19
- const Card = React$1.forwardRef(({ className, variant, color, render, ...props }, ref) => {
20
+ const Card = React$1.forwardRef(({ className, variant, color, radius = "2xl", render, ...props }, ref) => {
20
21
  const interactive = render != null;
21
22
  const resolved = variant ?? "ambient";
22
23
  return useRender({
@@ -26,12 +27,7 @@ const Card = React$1.forwardRef(({ className, variant, color, render, ...props }
26
27
  "data-slot": "card",
27
28
  "data-variant": variant,
28
29
  "data-card-color": color === "accent" ? "accent" : void 0,
29
- className: cn(cardVariants({ variant }), interactive && [
30
- "cursor-pointer text-left no-underline transition-colors motion-reduce:transition-none",
31
- "focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden",
32
- "disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50",
33
- (resolved === "ambient" || resolved === "soft") && "hover:bg-(--spark-card-c-soft-hover,var(--neutral-a4))"
34
- ], className),
30
+ className: cn(cardVariants({ variant }), radiusClasses[radius], interactive && containerInteractiveClasses(resolved), className),
35
31
  ref,
36
32
  ...props
37
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","names":["React"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport type { SparkCardColor, SparkCardVariant } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\nconst cardVariants = cva(\n 'relative flex w-full flex-col gap-1 rounded-2xl py-3',\n {\n variants: {\n variant: {\n ambient:\n 'border-(length:--spark-card-border-width,0px) border-(--spark-card-border,transparent) bg-(--spark-card-bg,var(--neutral-a3)) px-(--spark-card-px,1rem)',\n soft: 'bg-(--spark-card-c-soft,var(--neutral-a3)) px-4',\n surface:\n 'border border-(--spark-card-c-border,var(--neutral-a6)) bg-(--spark-card-c-surface,var(--neutral-2)) px-4',\n outline: 'border border-(--spark-card-c-border,var(--neutral-a6)) px-4',\n ghost: '',\n solid:\n 'bg-(--spark-card-c-solid,var(--neutral-9)) px-4 [--spark-card-fg-muted:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-fg:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-icon:var(--spark-card-c-contrast,var(--neutral-contrast))]',\n },\n },\n defaultVariants: {\n variant: 'ambient',\n },\n },\n)\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Container chrome scoped to this card — NOT the ambient `data-style` knob\n * (that drives controls and would cascade into the card's content). Unset →\n * follows the app-level `[data-card-variant]` knob (default soft-neutral).\n * (`solid` is hidden for now — see `SparkCardVariant`.)\n */\n variant?: SparkCardVariant\n /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */\n color?: SparkCardColor\n /**\n * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole\n * card interactive (hover tint, focus ring, disabled styles). Omit → static.\n */\n render?: useRender.RenderProp\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, color, render, ...props }, ref) => {\n const interactive = render != null\n const resolved = variant ?? 'ambient'\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n 'data-slot': 'card',\n 'data-variant': variant,\n 'data-card-color': color === 'accent' ? 'accent' : undefined,\n className: cn(\n cardVariants({ variant }),\n interactive && [\n 'cursor-pointer text-left no-underline transition-colors motion-reduce:transition-none',\n 'focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden',\n 'disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50',\n // hover deepens the fill one step; bordered/bare variants only ring\n (resolved === 'ambient' || resolved === 'soft') &&\n 'hover:bg-(--spark-card-c-soft-hover,var(--neutral-a4))',\n ],\n className,\n ),\n ref,\n ...props,\n },\n })\n },\n)\n\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn('flex items-center gap-4', className)}\n ref={ref}\n {...props}\n />\n))\n\nCardHeader.displayName = 'CardHeader'\n\nconst CardIcon = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center text-(--spark-card-icon,var(--spark-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardIcon.displayName = 'CardIcon'\n\nconst CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n className={cn(\n 'text-base leading-5 font-medium text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n className={cn(\n 'text-sm leading-5 text-(--spark-card-fg-muted,var(--neutral-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div className={cn('', className)} ref={ref} {...props} />\n))\n\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex items-center justify-end gap-2 pt-2 text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardFooter.displayName = 'CardFooter'\n\nconst CardSkeleton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'relative flex w-full items-center gap-4 rounded-2xl bg-spark-a3 p-4 opacity-80',\n className,\n )}\n ref={ref}\n {...props}\n >\n <div className=\"size-10 shrink-0 animate-pulse rounded-full bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"flex flex-1 flex-col gap-y-2\">\n <div className=\"h-5 w-1/3 max-w-32 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"h-4 w-1/2 max-w-48 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n </div>\n </div>\n))\n\nCardSkeleton.displayName = 'CardSkeleton'\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardIcon,\n CardSkeleton,\n CardTitle,\n}\nexport type { CardProps }\n"],"mappings":";;;;;;;AAMA,MAAM,eAAe,IACnB,wDACA;CACE,UAAU,EACR,SAAS;EACP,SACE;EACF,MAAM;EACN,SACE;EACF,SAAS;EACT,OAAO;EACP,OACE;CACJ,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAmBA,MAAM,OAAOA,QAAM,YAChB,EAAE,WAAW,SAAS,OAAO,QAAQ,GAAG,SAAS,QAAQ;CACxD,MAAM,cAAc,UAAU;CAC9B,MAAM,WAAW,WAAW;CAC5B,OAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GACL,aAAa;GACb,gBAAgB;GAChB,mBAAmB,UAAU,WAAW,WAAW,KAAA;GACnD,WAAW,GACT,aAAa,EAAE,QAAQ,CAAC,GACxB,eAAe;IACb;IACA;IACA;KAEC,aAAa,aAAa,aAAa,WACtC;GACJ,GACA,SACF;GACA;GACA,GAAG;EACL;CACF,CAAC;AACH,CACF;AAEA,KAAK,cAAc;AAEnB,MAAM,aAAaA,QAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GAAG,2BAA2B,SAAS;CAC7C;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,WAAWA,QAAM,YAGpB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GACT,uFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,SAAS,cAAc;AAEvB,MAAM,YAAYA,QAAM,YAGrB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,MAAD;CACE,WAAW,GACT,6EACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,UAAU,cAAc;AAExB,MAAM,kBAAkBA,QAAM,YAG3B,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,KAAD;CACE,WAAW,GACT,qEACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,gBAAgB,cAAc;AAE9B,MAAM,cAAcA,QAAM,YAGvB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CAAK,WAAW,GAAG,IAAI,SAAS;CAAQ;CAAK,GAAI;AAAQ,CAAA,CAC1D;AAED,YAAY,cAAc;AAE1B,MAAM,aAAaA,QAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GACT,sFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,eAAeA,QAAM,YAGxB,EAAE,WAAW,GAAG,SAAS,QAC1B,qBAAC,OAAD;CACE,WAAW,GACT,kFACA,SACF;CACK;CACL,GAAI;WANN,CAQE,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,CACxG;GACF;EACN;AAED,aAAa,cAAc"}
1
+ {"version":3,"file":"card.js","names":["React"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport {\n containerChrome,\n containerInteractiveClasses,\n containerPaddingX,\n radiusClasses,\n type ContainerRadius,\n} from '../lib/container-chrome'\nimport type { SparkCardColor, SparkCardVariant } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\ntype CardRadius = ContainerRadius\n\nconst cardVariants = cva('relative flex w-full flex-col gap-1 py-3', {\n variants: {\n variant: {\n ambient: cn(containerChrome.ambient, containerPaddingX.ambient),\n soft: cn(containerChrome.soft, containerPaddingX.soft),\n surface: cn(containerChrome.surface, containerPaddingX.surface),\n outline: cn(containerChrome.outline, containerPaddingX.outline),\n ghost: cn(containerChrome.ghost, containerPaddingX.ghost),\n solid: cn(containerChrome.solid, containerPaddingX.solid),\n },\n },\n defaultVariants: {\n variant: 'ambient',\n },\n})\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Container chrome scoped to this card — NOT the ambient `data-style` knob\n * (that drives controls and would cascade into the card's content). Unset →\n * follows the app-level `[data-card-variant]` knob (default soft-neutral).\n */\n variant?: SparkCardVariant\n /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */\n color?: SparkCardColor\n /** Corner radius, as a named step. Unset → `2xl`, today's fixed behaviour. */\n radius?: CardRadius\n /**\n * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole\n * card interactive (hover tint, focus ring, disabled styles). Omit → static.\n */\n render?: useRender.RenderProp\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, color, radius = '2xl', render, ...props }, ref) => {\n const interactive = render != null\n const resolved = variant ?? 'ambient'\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n 'data-slot': 'card',\n 'data-variant': variant,\n 'data-card-color': color === 'accent' ? 'accent' : undefined,\n className: cn(\n cardVariants({ variant }),\n radiusClasses[radius],\n interactive && containerInteractiveClasses(resolved),\n className,\n ),\n ref,\n ...props,\n },\n })\n },\n)\n\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn('flex items-center gap-4', className)}\n ref={ref}\n {...props}\n />\n))\n\nCardHeader.displayName = 'CardHeader'\n\nconst CardIcon = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center text-(--spark-card-icon,var(--spark-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardIcon.displayName = 'CardIcon'\n\nconst CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n className={cn(\n 'text-base leading-5 font-medium text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n className={cn(\n 'text-sm leading-5 text-(--spark-card-fg-muted,var(--neutral-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div className={cn('', className)} ref={ref} {...props} />\n))\n\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex items-center justify-end gap-2 pt-2 text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardFooter.displayName = 'CardFooter'\n\nconst CardSkeleton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'relative flex w-full items-center gap-4 rounded-2xl bg-spark-a3 p-4 opacity-80',\n className,\n )}\n ref={ref}\n {...props}\n >\n <div className=\"size-10 shrink-0 animate-pulse rounded-full bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"flex flex-1 flex-col gap-y-2\">\n <div className=\"h-5 w-1/3 max-w-32 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"h-4 w-1/2 max-w-48 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n </div>\n </div>\n))\n\nCardSkeleton.displayName = 'CardSkeleton'\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardIcon,\n CardSkeleton,\n CardTitle,\n}\nexport type { CardProps, CardRadius }\n"],"mappings":";;;;;;;;AAeA,MAAM,eAAe,IAAI,4CAA4C;CACnE,UAAU,EACR,SAAS;EACP,SAAS,GAAG,gBAAgB,SAAS,kBAAkB,OAAO;EAC9D,MAAM,GAAG,gBAAgB,MAAM,kBAAkB,IAAI;EACrD,SAAS,GAAG,gBAAgB,SAAS,kBAAkB,OAAO;EAC9D,SAAS,GAAG,gBAAgB,SAAS,kBAAkB,OAAO;EAC9D,OAAO,GAAG,gBAAgB,OAAO,kBAAkB,KAAK;EACxD,OAAO,GAAG,gBAAgB,OAAO,kBAAkB,KAAK;CAC1D,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CAAC;AAoBD,MAAM,OAAOA,QAAM,YAChB,EAAE,WAAW,SAAS,OAAO,SAAS,OAAO,QAAQ,GAAG,SAAS,QAAQ;CACxE,MAAM,cAAc,UAAU;CAC9B,MAAM,WAAW,WAAW;CAC5B,OAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GACL,aAAa;GACb,gBAAgB;GAChB,mBAAmB,UAAU,WAAW,WAAW,KAAA;GACnD,WAAW,GACT,aAAa,EAAE,QAAQ,CAAC,GACxB,cAAc,SACd,eAAe,4BAA4B,QAAQ,GACnD,SACF;GACA;GACA,GAAG;EACL;CACF,CAAC;AACH,CACF;AAEA,KAAK,cAAc;AAEnB,MAAM,aAAaA,QAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GAAG,2BAA2B,SAAS;CAC7C;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,WAAWA,QAAM,YAGpB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GACT,uFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,SAAS,cAAc;AAEvB,MAAM,YAAYA,QAAM,YAGrB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,MAAD;CACE,WAAW,GACT,6EACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,UAAU,cAAc;AAExB,MAAM,kBAAkBA,QAAM,YAG3B,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,KAAD;CACE,WAAW,GACT,qEACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,gBAAgB,cAAc;AAE9B,MAAM,cAAcA,QAAM,YAGvB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CAAK,WAAW,GAAG,IAAI,SAAS;CAAQ;CAAK,GAAI;AAAQ,CAAA,CAC1D;AAED,YAAY,cAAc;AAE1B,MAAM,aAAaA,QAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GACT,sFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,eAAeA,QAAM,YAGxB,EAAE,WAAW,GAAG,SAAS,QAC1B,qBAAC,OAAD;CACE,WAAW,GACT,kFACA,SACF;CACK;CACL,GAAI;WANN,CAQE,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,CACxG;GACF;EACN;AAED,aAAa,cAAc"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { u as SparkStyle } from "../theme-types-8wjgiNA_.cjs";
3
+ import { u as SparkStyle } from "../theme-types-1yB0d8mp.cjs";
4
4
  import * as React$1 from "react";
5
5
  import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
6
6
 
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { u as SparkStyle } from "../theme-types-8wjgiNA_.js";
3
+ import { u as SparkStyle } from "../theme-types-1yB0d8mp.js";
4
4
  import * as React$1 from "react";
5
5
  import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
6
6
 
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const require_icons_material_symbol = require("../icons/material-symbol.cjs");
3
+ const require_components_icon = require("./icon.cjs");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  //#region src/components/empty-state.tsx
6
6
  const emptyStateVariants = (0, require("class-variance-authority").cva)("flex flex-col items-center gap-4 px-6 py-12 text-center", {
@@ -14,12 +14,9 @@ function EmptyState({ action, description, icon, title, variant }) {
14
14
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15
15
  className: emptyStateVariants({ variant }),
16
16
  children: [
17
- icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
18
- className: "flex size-12 items-center justify-center rounded-xl bg-base-gray-soft",
19
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, {
20
- className: "text-[20px] text-gray-light",
21
- name: icon
22
- })
17
+ icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_icon.Icon, {
18
+ name: icon,
19
+ size: "xl"
23
20
  }),
24
21
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
25
22
  className: "flex flex-col gap-1",
@@ -1 +1 @@
1
- {"version":3,"file":"empty-state.cjs","names":["MaterialSymbol"],"sources":["../../src/components/empty-state.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport {\n MaterialSymbol,\n type MaterialSymbolIconName,\n} from '../icons/material-symbol'\n\nconst emptyStateVariants = cva(\n 'flex flex-col items-center gap-4 px-6 py-12 text-center',\n {\n variants: {\n variant: {\n dashed: 'rounded-2xl border border-dashed border-gray',\n ghost: '',\n },\n },\n defaultVariants: {\n variant: 'dashed',\n },\n },\n)\n\ninterface EmptyStateProps extends VariantProps<typeof emptyStateVariants> {\n title: string\n description?: string\n icon?: MaterialSymbolIconName\n action?: ReactNode\n}\n\nexport function EmptyState({\n action,\n description,\n icon,\n title,\n variant,\n}: EmptyStateProps) {\n return (\n <div className={emptyStateVariants({ variant })}>\n {icon && (\n <div className=\"flex size-12 items-center justify-center rounded-xl bg-base-gray-soft\">\n <MaterialSymbol className=\"text-[20px] text-gray-light\" name={icon} />\n </div>\n )}\n <div className=\"flex flex-col gap-1\">\n <h3 className=\"text-base font-bold text-gray\">{title}</h3>\n {description && (\n <p className=\"mx-auto max-w-md text-sm text-gray-light\">\n {description}\n </p>\n )}\n </div>\n {action}\n </div>\n )\n}\n\nexport type { EmptyStateProps }\n"],"mappings":";;;;;AAOA,MAAM,sBAAA,qCAAA,EAAA,KACJ,2DACA;CACE,UAAU,EACR,SAAS;EACP,QAAQ;EACR,OAAO;CACT,EACF;CACA,iBAAiB,EACf,SAAS,SACX;AACF,CACF;AASA,SAAgB,WAAW,EACzB,QACA,aACA,MACA,OACA,WACkB;CAClB,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAW,mBAAmB,EAAE,QAAQ,CAAC;YAA9C;GACG,QACC,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACb,iBAAA,GAAA,kBAAA,KAACA,8BAAAA,gBAAD;KAAgB,WAAU;KAA8B,MAAM;IAAO,CAAA;GAClE,CAAA;GAEP,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;KAAI,WAAU;eAAiC;IAAU,CAAA,GACxD,eACC,iBAAA,GAAA,kBAAA,KAAC,KAAD;KAAG,WAAU;eACV;IACA,CAAA,CAEF;;GACJ;EACE;;AAET"}
1
+ {"version":3,"file":"empty-state.cjs","names":["Icon"],"sources":["../../src/components/empty-state.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport type { MaterialSymbolIconName } from '../icons/material-symbol'\nimport { Icon } from './icon'\n\nconst emptyStateVariants = cva(\n 'flex flex-col items-center gap-4 px-6 py-12 text-center',\n {\n variants: {\n variant: {\n dashed: 'rounded-2xl border border-dashed border-gray',\n ghost: '',\n },\n },\n defaultVariants: {\n variant: 'dashed',\n },\n },\n)\n\ninterface EmptyStateProps extends VariantProps<typeof emptyStateVariants> {\n title: string\n description?: string\n icon?: MaterialSymbolIconName\n action?: ReactNode\n}\n\nexport function EmptyState({\n action,\n description,\n icon,\n title,\n variant,\n}: EmptyStateProps) {\n return (\n <div className={emptyStateVariants({ variant })}>\n {icon && <Icon name={icon} size=\"xl\" />}\n <div className=\"flex flex-col gap-1\">\n <h3 className=\"text-base font-bold text-gray\">{title}</h3>\n {description && (\n <p className=\"mx-auto max-w-md text-sm text-gray-light\">\n {description}\n </p>\n )}\n </div>\n {action}\n </div>\n )\n}\n\nexport type { EmptyStateProps }\n"],"mappings":";;;;;AAKA,MAAM,sBAAA,qCAAA,EAAA,KACJ,2DACA;CACE,UAAU,EACR,SAAS;EACP,QAAQ;EACR,OAAO;CACT,EACF;CACA,iBAAiB,EACf,SAAS,SACX;AACF,CACF;AASA,SAAgB,WAAW,EACzB,QACA,aACA,MACA,OACA,WACkB;CAClB,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAW,mBAAmB,EAAE,QAAQ,CAAC;YAA9C;GACG,QAAQ,iBAAA,GAAA,kBAAA,KAACA,wBAAAA,MAAD;IAAM,MAAM;IAAM,MAAK;GAAM,CAAA;GACtC,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;KAAI,WAAU;eAAiC;IAAU,CAAA,GACxD,eACC,iBAAA,GAAA,kBAAA,KAAC,KAAD;KAAG,WAAU;eACV;IACA,CAAA,CAEF;;GACJ;EACE;;AAET"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { MaterialSymbol } from "../icons/material-symbol.js";
2
+ import { Icon } from "./icon.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { cva } from "class-variance-authority";
5
5
  //#region src/components/empty-state.tsx
@@ -14,12 +14,9 @@ function EmptyState({ action, description, icon, title, variant }) {
14
14
  return /* @__PURE__ */ jsxs("div", {
15
15
  className: emptyStateVariants({ variant }),
16
16
  children: [
17
- icon && /* @__PURE__ */ jsx("div", {
18
- className: "flex size-12 items-center justify-center rounded-xl bg-base-gray-soft",
19
- children: /* @__PURE__ */ jsx(MaterialSymbol, {
20
- className: "text-[20px] text-gray-light",
21
- name: icon
22
- })
17
+ icon && /* @__PURE__ */ jsx(Icon, {
18
+ name: icon,
19
+ size: "xl"
23
20
  }),
24
21
  /* @__PURE__ */ jsxs("div", {
25
22
  className: "flex flex-col gap-1",
@@ -1 +1 @@
1
- {"version":3,"file":"empty-state.js","names":[],"sources":["../../src/components/empty-state.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport {\n MaterialSymbol,\n type MaterialSymbolIconName,\n} from '../icons/material-symbol'\n\nconst emptyStateVariants = cva(\n 'flex flex-col items-center gap-4 px-6 py-12 text-center',\n {\n variants: {\n variant: {\n dashed: 'rounded-2xl border border-dashed border-gray',\n ghost: '',\n },\n },\n defaultVariants: {\n variant: 'dashed',\n },\n },\n)\n\ninterface EmptyStateProps extends VariantProps<typeof emptyStateVariants> {\n title: string\n description?: string\n icon?: MaterialSymbolIconName\n action?: ReactNode\n}\n\nexport function EmptyState({\n action,\n description,\n icon,\n title,\n variant,\n}: EmptyStateProps) {\n return (\n <div className={emptyStateVariants({ variant })}>\n {icon && (\n <div className=\"flex size-12 items-center justify-center rounded-xl bg-base-gray-soft\">\n <MaterialSymbol className=\"text-[20px] text-gray-light\" name={icon} />\n </div>\n )}\n <div className=\"flex flex-col gap-1\">\n <h3 className=\"text-base font-bold text-gray\">{title}</h3>\n {description && (\n <p className=\"mx-auto max-w-md text-sm text-gray-light\">\n {description}\n </p>\n )}\n </div>\n {action}\n </div>\n )\n}\n\nexport type { EmptyStateProps }\n"],"mappings":";;;;;AAOA,MAAM,qBAAqB,IACzB,2DACA;CACE,UAAU,EACR,SAAS;EACP,QAAQ;EACR,OAAO;CACT,EACF;CACA,iBAAiB,EACf,SAAS,SACX;AACF,CACF;AASA,SAAgB,WAAW,EACzB,QACA,aACA,MACA,OACA,WACkB;CAClB,OACE,qBAAC,OAAD;EAAK,WAAW,mBAAmB,EAAE,QAAQ,CAAC;YAA9C;GACG,QACC,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,gBAAD;KAAgB,WAAU;KAA8B,MAAM;IAAO,CAAA;GAClE,CAAA;GAEP,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,MAAD;KAAI,WAAU;eAAiC;IAAU,CAAA,GACxD,eACC,oBAAC,KAAD;KAAG,WAAU;eACV;IACA,CAAA,CAEF;;GACJ;EACE;;AAET"}
1
+ {"version":3,"file":"empty-state.js","names":[],"sources":["../../src/components/empty-state.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport type { MaterialSymbolIconName } from '../icons/material-symbol'\nimport { Icon } from './icon'\n\nconst emptyStateVariants = cva(\n 'flex flex-col items-center gap-4 px-6 py-12 text-center',\n {\n variants: {\n variant: {\n dashed: 'rounded-2xl border border-dashed border-gray',\n ghost: '',\n },\n },\n defaultVariants: {\n variant: 'dashed',\n },\n },\n)\n\ninterface EmptyStateProps extends VariantProps<typeof emptyStateVariants> {\n title: string\n description?: string\n icon?: MaterialSymbolIconName\n action?: ReactNode\n}\n\nexport function EmptyState({\n action,\n description,\n icon,\n title,\n variant,\n}: EmptyStateProps) {\n return (\n <div className={emptyStateVariants({ variant })}>\n {icon && <Icon name={icon} size=\"xl\" />}\n <div className=\"flex flex-col gap-1\">\n <h3 className=\"text-base font-bold text-gray\">{title}</h3>\n {description && (\n <p className=\"mx-auto max-w-md text-sm text-gray-light\">\n {description}\n </p>\n )}\n </div>\n {action}\n </div>\n )\n}\n\nexport type { EmptyStateProps }\n"],"mappings":";;;;;AAKA,MAAM,qBAAqB,IACzB,2DACA;CACE,UAAU,EACR,SAAS;EACP,QAAQ;EACR,OAAO;CACT,EACF;CACA,iBAAiB,EACf,SAAS,SACX;AACF,CACF;AASA,SAAgB,WAAW,EACzB,QACA,aACA,MACA,OACA,WACkB;CAClB,OACE,qBAAC,OAAD;EAAK,WAAW,mBAAmB,EAAE,QAAQ,CAAC;YAA9C;GACG,QAAQ,oBAAC,MAAD;IAAM,MAAM;IAAM,MAAK;GAAM,CAAA;GACtC,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,MAAD;KAAI,WAAU;eAAiC;IAAU,CAAA,GACxD,eACC,oBAAC,KAAD;KAAG,WAAU;eACV;IACA,CAAA,CAEF;;GACJ;EACE;;AAET"}
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
4
  const require_chunk = require("../chunk-DY84GLCh.cjs");
5
5
  const require_components_separator = require("./separator.cjs");
6
+ const require_components_skeleton = require("./skeleton.cjs");
6
7
  const require_components_theme = require("./theme.cjs");
7
8
  let react = require("react");
8
9
  react = require_chunk.__toESM(react);
@@ -118,24 +119,30 @@ const fieldVariants = (0, class_variance_authority.cva)("group/field relative fl
118
119
  }
119
120
  ]
120
121
  });
121
- function Field({ className, labelPosition: labelPositionProp, inputStyle: inputStyleProp, inputColor: inputColorProp, ...props }) {
122
+ function Field({ className, children, labelPosition: labelPositionProp, inputStyle: inputStyleProp, inputColor: inputColorProp, readOnly = false, ...props }) {
122
123
  const id = (0, react.useId)();
123
124
  const [hasDescription, setHasDescription] = react.useState(false);
124
125
  const theme = require_components_theme.useTheme();
125
126
  const labelPosition = labelPositionProp ?? theme.labelPosition ?? "inset";
126
127
  const inputStyle = inputStyleProp ?? theme.inputStyle ?? "soft";
127
128
  const inputColor = inputColorProp ?? theme.inputColor ?? "brand";
129
+ const fieldId = `field-${id}`;
130
+ const labelId = `${fieldId}-label`;
128
131
  const value = react.useMemo(() => ({
129
- id: `field-${id}`,
130
- descriptionId: `field-${id}-description`,
132
+ id: fieldId,
133
+ labelId,
134
+ descriptionId: `${fieldId}-description`,
131
135
  hasDescription,
132
136
  setHasDescription,
137
+ readOnly,
133
138
  labelPosition,
134
139
  inputStyle,
135
140
  inputColor
136
141
  }), [
137
- id,
142
+ fieldId,
143
+ labelId,
138
144
  hasDescription,
145
+ readOnly,
139
146
  labelPosition,
140
147
  inputStyle,
141
148
  inputColor
@@ -148,12 +155,14 @@ function Field({ className, labelPosition: labelPositionProp, inputStyle: inputS
148
155
  "data-label-position": labelPosition,
149
156
  "data-input-style": inputStyle,
150
157
  "data-input-color": inputColor,
158
+ "aria-labelledby": readOnly ? labelId : void 0,
151
159
  className: (0, cnfast.cn)(fieldVariants({
152
160
  labelPosition,
153
161
  inputStyle,
154
162
  inputColor
155
163
  }), className),
156
- ...props
164
+ ...props,
165
+ children
157
166
  })
158
167
  });
159
168
  }
@@ -164,26 +173,49 @@ function FieldContent({ className, ...props }) {
164
173
  ...props
165
174
  });
166
175
  }
167
- function FieldLabel({ className, htmlFor, srOnly, ...props }) {
176
+ const fieldLabelClassName = "text-sm leading-5 font-normal text-gray-light transition-all group-data-[invalid=true]/field:text-error-active! motion-reduce:transition-none";
177
+ function FieldLabel({ className, htmlFor, srOnly, children, ...props }) {
168
178
  const field = useFieldContext();
179
+ const classNames = (0, cnfast.cn)(fieldLabelClassName, srOnly && "sr-only", className);
180
+ if (field?.readOnly) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
181
+ "data-slot": "field-label",
182
+ id: field.labelId,
183
+ className: classNames,
184
+ children
185
+ });
169
186
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
170
187
  "data-slot": "field-label",
171
- className: (0, cnfast.cn)("text-sm leading-5 font-normal text-gray-light transition-all group-data-[invalid=true]/field:text-error-active! motion-reduce:transition-none", srOnly && "sr-only", className),
188
+ className: classNames,
172
189
  htmlFor: htmlFor ?? field?.id,
173
- ...props
190
+ ...props,
191
+ children
174
192
  });
175
193
  }
176
194
  function FieldValue({ className, id, title, truncate, children, ...props }) {
177
- const field = useFieldContext();
178
195
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
179
196
  "data-slot": "field-value",
180
- id: id ?? field?.id,
197
+ id,
181
198
  title: title ?? (truncate && typeof children === "string" ? children : void 0),
182
199
  className: (0, cnfast.cn)("min-h-8 w-full text-base text-gray tabular-nums group-data-[disabled=true]/field:opacity-70", truncate ? "block truncate leading-8" : "inline-flex items-center wrap-anywhere whitespace-pre-wrap", className),
183
200
  ...props,
184
201
  children
185
202
  });
186
203
  }
204
+ function FieldSkeleton({ className, labelClassName, valueClassName, truncate, ...props }) {
205
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
206
+ "data-slot": "field-skeleton",
207
+ "aria-hidden": "true",
208
+ className: (0, cnfast.cn)("flex w-full flex-col gap-y-1", className),
209
+ ...props,
210
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_skeleton.Skeleton, {
211
+ "data-slot": "field-skeleton-label",
212
+ className: (0, cnfast.cn)("h-5 w-24", labelClassName)
213
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_skeleton.Skeleton, {
214
+ "data-slot": "field-skeleton-value",
215
+ className: (0, cnfast.cn)("h-8 min-h-8 w-full", truncate && "max-w-full truncate", valueClassName)
216
+ })]
217
+ });
218
+ }
187
219
  function FieldTitle({ className, ...props }) {
188
220
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
189
221
  "data-slot": "field-title",
@@ -249,6 +281,7 @@ exports.FieldLabel = FieldLabel;
249
281
  exports.FieldLegend = FieldLegend;
250
282
  exports.FieldSeparator = FieldSeparator;
251
283
  exports.FieldSet = FieldSet;
284
+ exports.FieldSkeleton = FieldSkeleton;
252
285
  exports.FieldTitle = FieldTitle;
253
286
  exports.FieldValue = FieldValue;
254
287
  exports.useFieldContext = useFieldContext;