sparkdesign 0.4.6 → 0.4.8

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 (276) hide show
  1. package/AI_README.md +60 -0
  2. package/README.md +1 -1
  3. package/cli/dist/commands/add.js +1 -1
  4. package/cli/dist/commands/init.js +1 -1
  5. package/cli/registry/AGENTS.md +9 -2
  6. package/cli/registry/agent-manifest.json +794 -0
  7. package/cli/registry/basic/alert-dialog.tsx +3 -6
  8. package/cli/registry/basic/alert.tsx +76 -0
  9. package/cli/registry/basic/aspect-ratio.tsx +8 -0
  10. package/cli/registry/basic/breadcrumb.tsx +117 -0
  11. package/cli/registry/basic/button-group.tsx +79 -0
  12. package/cli/registry/basic/button.tsx +19 -6
  13. package/cli/registry/basic/calendar.tsx +221 -0
  14. package/cli/registry/basic/card.tsx +115 -0
  15. package/cli/registry/basic/carousel.tsx +241 -0
  16. package/cli/registry/basic/chart.tsx +372 -0
  17. package/cli/registry/basic/checkbox.tsx +42 -0
  18. package/cli/registry/basic/collapsible-card.tsx +4 -6
  19. package/cli/registry/basic/combobox.tsx +133 -0
  20. package/cli/registry/basic/command.tsx +184 -0
  21. package/cli/registry/basic/context-menu.tsx +238 -0
  22. package/cli/registry/basic/data-table.tsx +73 -0
  23. package/cli/registry/basic/date-picker.tsx +84 -0
  24. package/cli/registry/basic/dialog.tsx +164 -0
  25. package/cli/registry/basic/direction.tsx +25 -0
  26. package/cli/registry/basic/drawer.tsx +162 -0
  27. package/cli/registry/basic/dropdown-menu.tsx +2 -7
  28. package/cli/registry/basic/empty.tsx +104 -0
  29. package/cli/registry/basic/field.tsx +248 -0
  30. package/cli/registry/basic/hover-card.tsx +57 -0
  31. package/cli/registry/basic/icon-button.tsx +18 -11
  32. package/cli/registry/basic/input-group.tsx +168 -0
  33. package/cli/registry/basic/input-otp.tsx +75 -0
  34. package/cli/registry/basic/input.tsx +43 -0
  35. package/cli/registry/basic/item.tsx +204 -0
  36. package/cli/registry/basic/label.tsx +24 -0
  37. package/cli/registry/basic/menubar.tsx +274 -0
  38. package/cli/registry/basic/native-select.tsx +62 -0
  39. package/cli/registry/basic/navigation-menu.tsx +168 -0
  40. package/cli/registry/basic/popover.tsx +58 -0
  41. package/cli/registry/basic/scroll-area.tsx +58 -0
  42. package/cli/registry/basic/select.tsx +24 -3
  43. package/cli/registry/basic/separator.tsx +26 -0
  44. package/cli/registry/basic/sheet.tsx +18 -0
  45. package/cli/registry/basic/spinner.tsx +20 -5
  46. package/cli/registry/basic/textarea.tsx +43 -0
  47. package/cli/registry/basic/toggle.tsx +1 -1
  48. package/cli/registry/basic/tooltip.tsx +2 -1
  49. package/cli/registry/basic/typography.tsx +1 -1
  50. package/cli/registry/chat/chat-input/chat-input-textarea.tsx +1 -1
  51. package/cli/registry/chat/chat-input/compound.tsx +4 -3
  52. package/cli/registry/chat/chat-input/context.tsx +4 -1
  53. package/cli/registry/chat/code-block-part.tsx +1 -1
  54. package/cli/registry/chat/conversation-anchor-nav.tsx +349 -0
  55. package/cli/registry/chat/file-attachment.tsx +2 -1
  56. package/cli/registry/chat/file-review-part.tsx +21 -21
  57. package/cli/registry/chat/markdown.tsx +2 -2
  58. package/cli/registry/chat/queue-indicator.tsx +1 -0
  59. package/cli/registry/chat/streaming-markdown-block.tsx +12 -8
  60. package/cli/registry/chat/tool-invocation-card.tsx +4 -1
  61. package/cli/registry/lib/file-icon-maps.ts +22 -22
  62. package/cli/registry/meta.json +600 -15
  63. package/cli/registry/tokens/ontology.json +404 -0
  64. package/cli/registry/tokens/scale/presets/compact.css +16 -5
  65. package/cli/registry/tokens/scale/presets/dense.css +13 -2
  66. package/cli/registry/tokens/scale/presets/sharp.css +18 -6
  67. package/cli/registry/tokens/scale/presets/soft.css +23 -1
  68. package/dist/registry/basic/alert-dialog.d.ts +1 -1
  69. package/dist/registry/basic/alert.d.ts +24 -0
  70. package/dist/registry/basic/aspect-ratio.d.ts +16 -0
  71. package/dist/registry/basic/avatar.d.ts +1 -1
  72. package/dist/registry/basic/breadcrumb.d.ts +24 -0
  73. package/dist/registry/basic/button-group.d.ts +26 -0
  74. package/dist/registry/basic/button.d.ts +3 -1
  75. package/dist/registry/basic/calendar.d.ts +22 -0
  76. package/dist/registry/basic/card.d.ts +32 -0
  77. package/dist/registry/basic/carousel.d.ts +19 -0
  78. package/dist/registry/basic/chart.d.ts +55 -0
  79. package/dist/registry/basic/checkbox.d.ts +21 -0
  80. package/dist/registry/basic/combobox.d.ts +37 -0
  81. package/dist/registry/basic/command.d.ts +18 -0
  82. package/dist/registry/basic/context-menu.d.ts +44 -0
  83. package/dist/registry/basic/data-table.d.ts +26 -0
  84. package/dist/registry/basic/date-picker.d.ts +27 -0
  85. package/dist/registry/basic/dialog.d.ts +39 -0
  86. package/dist/registry/basic/direction.d.ts +19 -0
  87. package/dist/registry/basic/drawer.d.ts +37 -0
  88. package/dist/registry/basic/empty.d.ts +22 -0
  89. package/dist/registry/basic/field.d.ts +24 -0
  90. package/dist/registry/basic/hover-card.d.ts +22 -0
  91. package/dist/registry/basic/icon-button.d.ts +2 -1
  92. package/dist/registry/basic/input-group.d.ts +29 -0
  93. package/dist/registry/basic/input-otp.d.ts +22 -0
  94. package/dist/registry/basic/input.d.ts +20 -0
  95. package/dist/registry/basic/item.d.ts +34 -0
  96. package/dist/registry/basic/label.d.ts +16 -0
  97. package/dist/registry/basic/menubar.d.ts +37 -0
  98. package/dist/registry/basic/native-select.d.ts +18 -0
  99. package/dist/registry/basic/navigation-menu.d.ts +25 -0
  100. package/dist/registry/basic/popover.d.ts +23 -0
  101. package/dist/registry/basic/resizable.d.ts +48 -48
  102. package/dist/registry/basic/scroll-area.d.ts +5 -0
  103. package/dist/registry/basic/select.d.ts +7 -2
  104. package/dist/registry/basic/separator.d.ts +16 -0
  105. package/dist/registry/basic/sheet.d.ts +13 -0
  106. package/dist/registry/basic/spinner.d.ts +6 -2
  107. package/dist/registry/basic/tag.d.ts +1 -1
  108. package/dist/registry/basic/textarea.d.ts +21 -0
  109. package/dist/registry/chat/chat-input/context.d.ts +3 -1
  110. package/dist/registry/chat/conversation-anchor-nav.d.ts +72 -0
  111. package/dist/registry/chat/tool-invocation-card.d.ts +2 -0
  112. package/dist/scale/computed.css +11 -0
  113. package/dist/scale/config.css +11 -0
  114. package/dist/scale/presets/compact.css +23 -5
  115. package/dist/scale/presets/dense.css +20 -2
  116. package/dist/scale/presets/sharp.css +25 -6
  117. package/dist/scale/presets/soft.css +30 -1
  118. package/dist/spark-design.cjs.js +37 -33
  119. package/dist/spark-design.es.js +10324 -8950
  120. package/dist/sparkdesign.css +1 -1
  121. package/dist/src/components/basic/Alert/index.d.ts +13 -0
  122. package/dist/src/components/basic/AspectRatio/index.d.ts +13 -0
  123. package/dist/src/components/basic/Breadcrumb/index.d.ts +12 -0
  124. package/dist/src/components/basic/ButtonGroup/index.d.ts +13 -0
  125. package/dist/src/components/basic/Calendar/index.d.ts +13 -0
  126. package/dist/src/components/basic/Card/index.d.ts +13 -0
  127. package/dist/src/components/basic/Carousel/index.d.ts +12 -0
  128. package/dist/src/components/basic/Chart/index.d.ts +13 -0
  129. package/dist/src/components/basic/Checkbox/index.d.ts +13 -0
  130. package/dist/src/components/basic/Combobox/index.d.ts +13 -0
  131. package/dist/src/components/basic/Command/index.d.ts +12 -0
  132. package/dist/src/components/basic/ContextMenu/index.d.ts +19 -0
  133. package/dist/src/components/basic/DataTable/index.d.ts +13 -0
  134. package/dist/src/components/basic/DatePicker/index.d.ts +13 -0
  135. package/dist/src/components/basic/Dialog/index.d.ts +16 -0
  136. package/dist/src/components/basic/Direction/index.d.ts +13 -0
  137. package/dist/src/components/basic/Drawer/index.d.ts +16 -0
  138. package/dist/src/components/basic/Empty/index.d.ts +12 -0
  139. package/dist/src/components/basic/Field/index.d.ts +12 -0
  140. package/dist/src/components/basic/HoverCard/index.d.ts +16 -0
  141. package/dist/src/components/basic/Input/index.d.ts +13 -0
  142. package/dist/src/components/basic/InputGroup/index.d.ts +12 -0
  143. package/dist/src/components/basic/InputOTP/index.d.ts +12 -0
  144. package/dist/src/components/basic/Item/index.d.ts +12 -0
  145. package/dist/src/components/basic/Label/index.d.ts +13 -0
  146. package/dist/src/components/basic/Menubar/index.d.ts +12 -0
  147. package/dist/src/components/basic/NativeSelect/index.d.ts +12 -0
  148. package/dist/src/components/basic/NavigationMenu/index.d.ts +12 -0
  149. package/dist/src/components/basic/Popover/index.d.ts +16 -0
  150. package/dist/src/components/basic/ScrollArea/index.d.ts +12 -0
  151. package/dist/src/components/basic/Separator/index.d.ts +13 -0
  152. package/dist/src/components/basic/Sheet/index.d.ts +13 -0
  153. package/dist/src/components/basic/Textarea/index.d.ts +13 -0
  154. package/dist/src/components/chat/ConversationAnchorNav/index.d.ts +13 -0
  155. package/dist/src/components/chat/StreamingMarkdownBlock/index.d.ts +13 -0
  156. package/dist/src/components/index.d.ts +58 -1
  157. package/dist/src/lib/index.d.ts +1 -1
  158. package/dist/src/lib/motion.d.ts +79 -0
  159. package/dist/theme-base.css +22 -0
  160. package/dist/themes/dark-mint.css +6 -0
  161. package/dist/themes/dark-parchment.css +6 -0
  162. package/dist/themes/light-parchment.css +6 -0
  163. package/dist/tokens/AGENTS.md +1 -0
  164. package/dist/tokens/scale/computed.css +11 -0
  165. package/dist/tokens/scale/config.css +11 -0
  166. package/dist/tokens/scale/presets/compact.css +23 -5
  167. package/dist/tokens/scale/presets/dense.css +20 -2
  168. package/dist/tokens/scale/presets/sharp.css +25 -6
  169. package/dist/tokens/scale/presets/soft.css +30 -1
  170. package/dist/tokens/theme-base.css +22 -0
  171. package/dist/tokens/themes/dark-mint.css +6 -0
  172. package/dist/tokens/themes/dark-parchment.css +6 -0
  173. package/dist/tokens/themes/light-parchment.css +6 -0
  174. package/docs/agent/component-selection.md +60 -0
  175. package/docs/agent/token-ontology.md +37 -0
  176. package/package.json +31 -5
  177. package/registry/agent-manifest.json +794 -0
  178. package/registry/tokens/ontology.json +404 -0
  179. package/dist/_basePickBy-DnQN8w3y.js +0 -151
  180. package/dist/_basePickBy-a-kPMlkg.cjs +0 -1
  181. package/dist/_baseUniq-B-N2NQ50.js +0 -614
  182. package/dist/_baseUniq-Cc_zbSif.cjs +0 -1
  183. package/dist/arc-BQBhijZ6.js +0 -83
  184. package/dist/arc-mWQt0Yph.cjs +0 -1
  185. package/dist/architectureDiagram-VXUJARFQ-BMZEucno.cjs +0 -36
  186. package/dist/architectureDiagram-VXUJARFQ-DTdjD3Bp.js +0 -4661
  187. package/dist/blockDiagram-VD42YOAC-CzHn0yob.js +0 -2256
  188. package/dist/blockDiagram-VD42YOAC-DDxdHAlz.cjs +0 -122
  189. package/dist/c4Diagram-YG6GDRKO-4Gz0I4gj.cjs +0 -10
  190. package/dist/c4Diagram-YG6GDRKO-BIy--yVN.js +0 -1580
  191. package/dist/channel-BQn0o8bs.js +0 -5
  192. package/dist/channel-DaN7XniJ.cjs +0 -1
  193. package/dist/chunk-4BX2VUAB-BlQFTQqz.cjs +0 -1
  194. package/dist/chunk-4BX2VUAB-Czitj3Kc.js +0 -8
  195. package/dist/chunk-55IACEB6-DXacNZbO.js +0 -8
  196. package/dist/chunk-55IACEB6-DnDxpye9.cjs +0 -1
  197. package/dist/chunk-B4BG7PRW-CBdN0q_V.js +0 -1375
  198. package/dist/chunk-B4BG7PRW-DbGvUkGO.cjs +0 -165
  199. package/dist/chunk-DI55MBZ5-D1YJMs6x.cjs +0 -220
  200. package/dist/chunk-DI55MBZ5-NCQTvayw.js +0 -1370
  201. package/dist/chunk-FMBD7UC4-CsGMbrtr.js +0 -19
  202. package/dist/chunk-FMBD7UC4-Di7cUUh5.cjs +0 -15
  203. package/dist/chunk-QN33PNHL-0j5LC8Lm.cjs +0 -1
  204. package/dist/chunk-QN33PNHL-3GERZBRm.js +0 -19
  205. package/dist/chunk-QZHKN3VN-AVEY9ImQ.js +0 -15
  206. package/dist/chunk-QZHKN3VN-s8Z0a8mc.cjs +0 -1
  207. package/dist/chunk-TZMSLE5B-CAf87HPt.cjs +0 -1
  208. package/dist/chunk-TZMSLE5B-sbiflal0.js +0 -64
  209. package/dist/classDiagram-2ON5EDUG-Ct9JLIN2.cjs +0 -1
  210. package/dist/classDiagram-2ON5EDUG-Dzfrft3a.js +0 -16
  211. package/dist/classDiagram-v2-WZHVMYZB-Ct9JLIN2.cjs +0 -1
  212. package/dist/classDiagram-v2-WZHVMYZB-Dzfrft3a.js +0 -16
  213. package/dist/clone-Cde_NQ8V.js +0 -8
  214. package/dist/clone-DCNjWuM2.cjs +0 -1
  215. package/dist/cose-bilkent-S5V4N54A-0uLijMro.cjs +0 -1
  216. package/dist/cose-bilkent-S5V4N54A-Bb08N431.js +0 -2608
  217. package/dist/cytoscape.esm-CNUX3VTg.cjs +0 -321
  218. package/dist/cytoscape.esm-Cvf3sx9F.js +0 -18704
  219. package/dist/dagre-6UL2VRFP-CY_Wz5Zd.js +0 -444
  220. package/dist/dagre-6UL2VRFP-Dxe7_qZc.cjs +0 -4
  221. package/dist/defaultLocale-BgPVtth8.js +0 -171
  222. package/dist/defaultLocale-C4wbwF1n.cjs +0 -1
  223. package/dist/diagram-PSM6KHXK-D2bdb7MT.js +0 -531
  224. package/dist/diagram-PSM6KHXK-YF69SUjY.cjs +0 -24
  225. package/dist/diagram-QEK2KX5R-BpUSoh0-.js +0 -217
  226. package/dist/diagram-QEK2KX5R-DZPGteon.cjs +0 -43
  227. package/dist/diagram-S2PKOQOG-ht-zdvFG.cjs +0 -24
  228. package/dist/diagram-S2PKOQOG-zFeLJ50Z.js +0 -142
  229. package/dist/erDiagram-Q2GNP2WA-B38iJ6ts.js +0 -841
  230. package/dist/erDiagram-Q2GNP2WA-RgS80DDU.cjs +0 -60
  231. package/dist/flowDiagram-NV44I4VS-BHilOs2p.cjs +0 -162
  232. package/dist/flowDiagram-NV44I4VS-BrBJcoce.js +0 -1620
  233. package/dist/ganttDiagram-JELNMOA3-pZiJeFio.cjs +0 -267
  234. package/dist/ganttDiagram-JELNMOA3-tw6FhkWJ.js +0 -2670
  235. package/dist/gitGraphDiagram-V2S2FVAM-BWn5uIK5.js +0 -699
  236. package/dist/gitGraphDiagram-V2S2FVAM-DKKeG-9R.cjs +0 -65
  237. package/dist/graph-DIbblrZP.cjs +0 -1
  238. package/dist/graph-DPcK91G3.js +0 -247
  239. package/dist/infoDiagram-HS3SLOUP-B8gwwhct.cjs +0 -2
  240. package/dist/infoDiagram-HS3SLOUP-D47PNcP_.js +0 -24
  241. package/dist/init-CHZsXQcr.cjs +0 -1
  242. package/dist/init-DjUOC4st.js +0 -16
  243. package/dist/journeyDiagram-XKPGCS4Q-BG3cfhyU.js +0 -834
  244. package/dist/journeyDiagram-XKPGCS4Q-D8DVLJof.cjs +0 -139
  245. package/dist/kanban-definition-3W4ZIXB7-4OCnEouP.cjs +0 -89
  246. package/dist/kanban-definition-3W4ZIXB7-CWi_ssF9.js +0 -719
  247. package/dist/layout-Byuh8f-J.cjs +0 -1
  248. package/dist/layout-CdLdvj1j.js +0 -1335
  249. package/dist/linear-C2Q_PI9B.js +0 -259
  250. package/dist/linear-C69aPBW1.cjs +0 -1
  251. package/dist/mermaid.core-DBwAx_jp.cjs +0 -249
  252. package/dist/mermaid.core-gFR0XUlD.js +0 -15300
  253. package/dist/mindmap-definition-VGOIOE7T-8P7obVV4.cjs +0 -68
  254. package/dist/mindmap-definition-VGOIOE7T-DnOa7WJ9.js +0 -784
  255. package/dist/ordinal-B6-f3MAq.js +0 -61
  256. package/dist/ordinal-CagbB1m8.cjs +0 -1
  257. package/dist/pieDiagram-ADFJNKIX-5NAlvhMo.js +0 -161
  258. package/dist/pieDiagram-ADFJNKIX-CQBG4yR9.cjs +0 -30
  259. package/dist/quadrantDiagram-AYHSOK5B-Oe4y7RZ0.cjs +0 -7
  260. package/dist/quadrantDiagram-AYHSOK5B-rh2DPEP1.js +0 -1022
  261. package/dist/requirementDiagram-UZGBJVZJ-DcWaCuXr.js +0 -850
  262. package/dist/requirementDiagram-UZGBJVZJ-gfdlrFiq.cjs +0 -64
  263. package/dist/sankeyDiagram-TZEHDZUN-CQIKFwD0.js +0 -810
  264. package/dist/sankeyDiagram-TZEHDZUN-DvPtzQvC.cjs +0 -10
  265. package/dist/sequenceDiagram-WL72ISMW-BNrsMagL.cjs +0 -145
  266. package/dist/sequenceDiagram-WL72ISMW-iCX3ckKx.js +0 -2511
  267. package/dist/stateDiagram-FKZM4ZOC-DBvJ_eeL.cjs +0 -1
  268. package/dist/stateDiagram-FKZM4ZOC-ZVsJlaHJ.js +0 -263
  269. package/dist/stateDiagram-v2-4FDKWEC3-CB_nTHcE.js +0 -16
  270. package/dist/stateDiagram-v2-4FDKWEC3-Xkx17v6T.cjs +0 -1
  271. package/dist/timeline-definition-IT6M3QCI-BmGkYQiz.cjs +0 -61
  272. package/dist/timeline-definition-IT6M3QCI-Ck8zTt6w.js +0 -795
  273. package/dist/treemap-GDKQZRPO-B9sfERx8.js +0 -17922
  274. package/dist/treemap-GDKQZRPO-BVfJRs0Z.cjs +0 -160
  275. package/dist/xychartDiagram-PRI3JC2R-By_S8NzN.js +0 -1340
  276. package/dist/xychartDiagram-PRI3JC2R-CNfDrGxM.cjs +0 -7
@@ -0,0 +1,34 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ import { Separator } from "./separator";
4
+ declare function ItemGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
5
+ declare function ItemSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): import("react/jsx-runtime").JSX.Element;
6
+ declare const itemVariants: (props?: ({
7
+ variant?: "default" | "outline" | "muted" | null | undefined;
8
+ size?: "default" | "sm" | null | undefined;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
+ declare function Item({ className, variant, size, asChild, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemVariants> & {
11
+ asChild?: boolean;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ declare const itemMediaVariants: (props?: ({
14
+ variant?: "default" | "icon" | "image" | null | undefined;
15
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
16
+ declare function ItemMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>): import("react/jsx-runtime").JSX.Element;
17
+ declare function ItemContent({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
18
+ declare function ItemTitle({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
19
+ declare function ItemDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
20
+ declare function ItemActions({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
21
+ declare function ItemHeader({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
22
+ declare function ItemFooter({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
23
+ export { Item, ItemMedia, ItemContent, ItemActions, ItemGroup, ItemSeparator, ItemTitle, ItemDescription, ItemHeader, ItemFooter, };
24
+ /**
25
+ * [WHO]: Item layout primitives for list rows, media slots, and metadata.
26
+ * [FROM]: React, registry/basic/separator, registry/lib/utils.
27
+ * [TO]: sparkdesign package consumers; Showcase; CLI registry copies.
28
+ * [HERE]: registry/basic/item.tsx — tokenized shadcn-derived item primitive.
29
+ *
30
+ * [PROTOCOL]:
31
+ * 1. Keep this P3 header in sync when the public contract changes.
32
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
33
+ * 3. Follow design tokens and explicit type exports.
34
+ */
@@ -0,0 +1,16 @@
1
+ /**
2
+ * [WHO]: Label — accessible label built on @radix-ui/react-label.
3
+ * [FROM]: React + @radix-ui/react-label + `@/lib/utils` cn.
4
+ * [TO]: sparkdesign package consumers; output of CLI `add label` when registered.
5
+ * [HERE]: registry/basic/label.tsx — Spark Design source; keep aligned with the main library.
6
+ *
7
+ * [PROTOCOL]:
8
+ * 1. Keep this P3 header in sync when the public contract changes.
9
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
10
+ * 3. Follow design tokens and explicit type exports.
11
+ */
12
+ import * as React from 'react';
13
+ import * as LabelPrimitive from '@radix-ui/react-label';
14
+ export type LabelProps = React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>;
15
+ declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & React.RefAttributes<HTMLLabelElement>>;
16
+ export { Label };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * [WHO]: Menubar primitives for app-level commands and nested menu groups.
3
+ * [FROM]: React, @radix-ui/react-menubar, registry/lib/utils.
4
+ * [TO]: sparkdesign package consumers; Showcase; CLI registry copies.
5
+ * [HERE]: registry/basic/menubar.tsx — tokenized shadcn-derived menubar primitive.
6
+ *
7
+ * [PROTOCOL]:
8
+ * 1. Keep this P3 header in sync when the public contract changes.
9
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
10
+ * 3. Follow design tokens and explicit type exports.
11
+ */
12
+ import * as React from "react";
13
+ import { Menubar as MenubarPrimitive } from "radix-ui";
14
+ declare function Menubar({ className, ...props }: React.ComponentProps<typeof MenubarPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
15
+ declare function MenubarMenu({ ...props }: React.ComponentProps<typeof MenubarPrimitive.Menu>): import("react/jsx-runtime").JSX.Element;
16
+ declare function MenubarGroup({ ...props }: React.ComponentProps<typeof MenubarPrimitive.Group>): import("react/jsx-runtime").JSX.Element;
17
+ declare function MenubarPortal({ ...props }: React.ComponentProps<typeof MenubarPrimitive.Portal>): import("react/jsx-runtime").JSX.Element;
18
+ declare function MenubarRadioGroup({ ...props }: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>): import("react/jsx-runtime").JSX.Element;
19
+ declare function MenubarTrigger({ className, ...props }: React.ComponentProps<typeof MenubarPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
20
+ declare function MenubarContent({ className, align, alignOffset, sideOffset, ...props }: React.ComponentProps<typeof MenubarPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
21
+ declare function MenubarItem({ className, inset, variant, ...props }: React.ComponentProps<typeof MenubarPrimitive.Item> & {
22
+ inset?: boolean;
23
+ variant?: "default" | "destructive";
24
+ }): import("react/jsx-runtime").JSX.Element;
25
+ declare function MenubarCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>): import("react/jsx-runtime").JSX.Element;
26
+ declare function MenubarRadioItem({ className, children, ...props }: React.ComponentProps<typeof MenubarPrimitive.RadioItem>): import("react/jsx-runtime").JSX.Element;
27
+ declare function MenubarLabel({ className, inset, ...props }: React.ComponentProps<typeof MenubarPrimitive.Label> & {
28
+ inset?: boolean;
29
+ }): import("react/jsx-runtime").JSX.Element;
30
+ declare function MenubarSeparator({ className, ...props }: React.ComponentProps<typeof MenubarPrimitive.Separator>): import("react/jsx-runtime").JSX.Element;
31
+ declare function MenubarShortcut({ className, ...props }: React.ComponentProps<"span">): import("react/jsx-runtime").JSX.Element;
32
+ declare function MenubarSub({ ...props }: React.ComponentProps<typeof MenubarPrimitive.Sub>): import("react/jsx-runtime").JSX.Element;
33
+ declare function MenubarSubTrigger({ className, inset, children, ...props }: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {
34
+ inset?: boolean;
35
+ }): import("react/jsx-runtime").JSX.Element;
36
+ declare function MenubarSubContent({ className, ...props }: React.ComponentProps<typeof MenubarPrimitive.SubContent>): import("react/jsx-runtime").JSX.Element;
37
+ export { Menubar, MenubarPortal, MenubarMenu, MenubarTrigger, MenubarContent, MenubarGroup, MenubarSeparator, MenubarLabel, MenubarItem, MenubarShortcut, MenubarCheckboxItem, MenubarRadioGroup, MenubarRadioItem, MenubarSub, MenubarSubTrigger, MenubarSubContent, };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * [WHO]: NativeSelect primitives for browser-native select controls.
3
+ * [FROM]: React, registry/lib/utils.
4
+ * [TO]: sparkdesign package consumers; Showcase; CLI registry copies.
5
+ * [HERE]: registry/basic/native-select.tsx — tokenized shadcn-derived native select primitive.
6
+ *
7
+ * [PROTOCOL]:
8
+ * 1. Keep this P3 header in sync when the public contract changes.
9
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
10
+ * 3. Follow design tokens and explicit type exports.
11
+ */
12
+ import * as React from "react";
13
+ declare function NativeSelect({ className, size, ...props }: Omit<React.ComponentProps<"select">, "size"> & {
14
+ size?: "sm" | "default";
15
+ }): import("react/jsx-runtime").JSX.Element;
16
+ declare function NativeSelectOption({ className, ...props }: React.ComponentProps<"option">): import("react/jsx-runtime").JSX.Element;
17
+ declare function NativeSelectOptGroup({ className, ...props }: React.ComponentProps<"optgroup">): import("react/jsx-runtime").JSX.Element;
18
+ export { NativeSelect, NativeSelectOptGroup, NativeSelectOption };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * [WHO]: NavigationMenu primitives for hierarchical navigation surfaces.
3
+ * [FROM]: React, @radix-ui/react-navigation-menu, registry/lib/utils.
4
+ * [TO]: sparkdesign package consumers; Showcase; CLI registry copies.
5
+ * [HERE]: registry/basic/navigation-menu.tsx — tokenized shadcn-derived navigation menu primitive.
6
+ *
7
+ * [PROTOCOL]:
8
+ * 1. Keep this P3 header in sync when the public contract changes.
9
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
10
+ * 3. Follow design tokens and explicit type exports.
11
+ */
12
+ import * as React from "react";
13
+ import { NavigationMenu as NavigationMenuPrimitive } from "radix-ui";
14
+ declare function NavigationMenu({ className, children, viewport, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
15
+ viewport?: boolean;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ declare function NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>): import("react/jsx-runtime").JSX.Element;
18
+ declare function NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
19
+ declare const navigationMenuTriggerStyle: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
20
+ declare function NavigationMenuTrigger({ className, children, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
21
+ declare function NavigationMenuContent({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
22
+ declare function NavigationMenuViewport({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>): import("react/jsx-runtime").JSX.Element;
23
+ declare function NavigationMenuLink({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Link>): import("react/jsx-runtime").JSX.Element;
24
+ declare function NavigationMenuIndicator({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>): import("react/jsx-runtime").JSX.Element;
25
+ export { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuContent, NavigationMenuTrigger, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport, navigationMenuTriggerStyle, };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * [WHO]: Popover — floating content built on @radix-ui/react-popover.
3
+ * [FROM]: React + @radix-ui/react-popover + framer-motion + getThemeFromDocument.
4
+ * [TO]: sparkdesign package consumers; output of CLI `add popover` when registered.
5
+ * [HERE]: registry/basic/popover.tsx — Spark Design source; keep aligned with the main library.
6
+ *
7
+ * [PROTOCOL]:
8
+ * 1. Keep this P3 header in sync when the public contract changes.
9
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
10
+ * 3. Follow design tokens and explicit type exports.
11
+ */
12
+ import * as React from 'react';
13
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
14
+ declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
15
+ declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
16
+ declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
17
+ export interface PopoverContentProps extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {
18
+ /** When provided (e.g. from ThemeStyleProvider), used for portal wrapper */
19
+ dataStyle?: string;
20
+ dataTheme?: string;
21
+ }
22
+ declare const PopoverContent: React.ForwardRefExoticComponent<PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
23
+ export { Popover, PopoverTrigger, PopoverAnchor, PopoverContent };
@@ -19,61 +19,16 @@ declare const ResizablePanelGroup: React.ForwardRefExoticComponent<ResizablePane
19
19
  export type ResizablePanelProps = PanelProps;
20
20
  declare const ResizablePanel: React.ForwardRefExoticComponent<{
21
21
  className?: string | undefined | undefined;
22
- children?: React.ReactNode | Iterable<React.ReactNode>;
23
- defaultChecked?: boolean | undefined | undefined;
24
- defaultValue?: string | number | readonly string[] | undefined;
25
- suppressContentEditableWarning?: boolean | undefined | undefined;
26
22
  suppressHydrationWarning?: boolean | undefined | undefined;
27
- accessKey?: string | undefined | undefined;
28
- autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
29
- autoFocus?: boolean | undefined | undefined;
30
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
31
- contextMenu?: string | undefined | undefined;
32
- dir?: string | undefined | undefined;
33
- draggable?: (boolean | "true" | "false") | undefined;
34
- enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
35
- hidden?: boolean | undefined | undefined;
23
+ color?: string | undefined | undefined;
36
24
  id?: string | undefined | undefined;
37
25
  lang?: string | undefined | undefined;
38
26
  nonce?: string | undefined | undefined;
27
+ part?: string | undefined | undefined;
39
28
  slot?: string | undefined | undefined;
40
- spellCheck?: (boolean | "true" | "false") | undefined;
41
29
  style?: React.CSSProperties | undefined;
42
- tabIndex?: number | undefined | undefined;
43
- title?: string | undefined | undefined;
44
- translate?: "yes" | "no" | undefined | undefined;
45
- radioGroup?: string | undefined | undefined;
46
30
  role?: React.AriaRole | undefined;
47
- about?: string | undefined | undefined;
48
- content?: string | undefined | undefined;
49
- datatype?: string | undefined | undefined;
50
- inlist?: any;
51
- prefix?: string | undefined | undefined;
52
- property?: string | undefined | undefined;
53
- rel?: string | undefined | undefined;
54
- resource?: string | undefined | undefined;
55
- rev?: string | undefined | undefined;
56
- typeof?: string | undefined | undefined;
57
- vocab?: string | undefined | undefined;
58
- autoCorrect?: string | undefined | undefined;
59
- autoSave?: string | undefined | undefined;
60
- color?: string | undefined | undefined;
61
- itemProp?: string | undefined | undefined;
62
- itemScope?: boolean | undefined | undefined;
63
- itemType?: string | undefined | undefined;
64
- itemID?: string | undefined | undefined;
65
- itemRef?: string | undefined | undefined;
66
- results?: number | undefined | undefined;
67
- security?: string | undefined | undefined;
68
- unselectable?: "on" | "off" | undefined | undefined;
69
- popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
70
- popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
71
- popoverTarget?: string | undefined | undefined;
72
- inert?: boolean | undefined | undefined;
73
- inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
74
- is?: string | undefined | undefined;
75
- exportparts?: string | undefined | undefined;
76
- part?: string | undefined | undefined;
31
+ tabIndex?: number | undefined | undefined;
77
32
  "aria-activedescendant"?: string | undefined | undefined;
78
33
  "aria-atomic"?: (boolean | "true" | "false") | undefined;
79
34
  "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
@@ -127,6 +82,7 @@ declare const ResizablePanel: React.ForwardRefExoticComponent<{
127
82
  "aria-valuemin"?: number | undefined | undefined;
128
83
  "aria-valuenow"?: number | undefined | undefined;
129
84
  "aria-valuetext"?: string | undefined | undefined;
85
+ children?: React.ReactNode | Iterable<React.ReactNode>;
130
86
  dangerouslySetInnerHTML?: {
131
87
  __html: string | TrustedHTML;
132
88
  } | undefined | undefined;
@@ -298,6 +254,50 @@ declare const ResizablePanel: React.ForwardRefExoticComponent<{
298
254
  onTransitionRunCapture?: React.TransitionEventHandler<HTMLDivElement> | undefined;
299
255
  onTransitionStart?: React.TransitionEventHandler<HTMLDivElement> | undefined;
300
256
  onTransitionStartCapture?: React.TransitionEventHandler<HTMLDivElement> | undefined;
257
+ defaultChecked?: boolean | undefined | undefined;
258
+ defaultValue?: string | number | readonly string[] | undefined;
259
+ suppressContentEditableWarning?: boolean | undefined | undefined;
260
+ accessKey?: string | undefined | undefined;
261
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
262
+ autoFocus?: boolean | undefined | undefined;
263
+ contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
264
+ contextMenu?: string | undefined | undefined;
265
+ dir?: string | undefined | undefined;
266
+ draggable?: (boolean | "true" | "false") | undefined;
267
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
268
+ hidden?: boolean | undefined | undefined;
269
+ spellCheck?: (boolean | "true" | "false") | undefined;
270
+ title?: string | undefined | undefined;
271
+ translate?: "yes" | "no" | undefined | undefined;
272
+ radioGroup?: string | undefined | undefined;
273
+ about?: string | undefined | undefined;
274
+ content?: string | undefined | undefined;
275
+ datatype?: string | undefined | undefined;
276
+ inlist?: any;
277
+ prefix?: string | undefined | undefined;
278
+ property?: string | undefined | undefined;
279
+ rel?: string | undefined | undefined;
280
+ resource?: string | undefined | undefined;
281
+ rev?: string | undefined | undefined;
282
+ typeof?: string | undefined | undefined;
283
+ vocab?: string | undefined | undefined;
284
+ autoCorrect?: string | undefined | undefined;
285
+ autoSave?: string | undefined | undefined;
286
+ itemProp?: string | undefined | undefined;
287
+ itemScope?: boolean | undefined | undefined;
288
+ itemType?: string | undefined | undefined;
289
+ itemID?: string | undefined | undefined;
290
+ itemRef?: string | undefined | undefined;
291
+ results?: number | undefined | undefined;
292
+ security?: string | undefined | undefined;
293
+ unselectable?: "on" | "off" | undefined | undefined;
294
+ popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
295
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
296
+ popoverTarget?: string | undefined | undefined;
297
+ inert?: boolean | undefined | undefined;
298
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
299
+ is?: string | undefined | undefined;
300
+ exportparts?: string | undefined | undefined;
301
301
  } & {
302
302
  className?: string | undefined;
303
303
  collapsedSize?: number | string | undefined;
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ import { ScrollArea as ScrollAreaPrimitive } from "radix-ui";
3
+ declare function ScrollArea({ className, children, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function ScrollBar({ className, orientation, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>): import("react/jsx-runtime").JSX.Element;
5
+ export { ScrollArea, ScrollBar };
@@ -11,11 +11,16 @@
11
11
  */
12
12
  import * as React from 'react';
13
13
  import * as SelectPrimitive from '@radix-ui/react-select';
14
+ import { type VariantProps } from 'class-variance-authority';
14
15
  declare const Select: React.FC<SelectPrimitive.SelectProps>;
15
16
  declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
16
17
  declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
17
- export interface SelectTriggerProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> {
18
+ declare const selectTriggerVariants: (props?: ({
19
+ size?: "sm" | "md" | "lg" | null | undefined;
20
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
21
+ export interface SelectTriggerProps extends Omit<React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>, 'size'>, VariantProps<typeof selectTriggerVariants> {
18
22
  triggerIcon?: React.ReactNode;
23
+ size?: 'sm' | 'md' | 'lg';
19
24
  }
20
25
  declare const SelectTrigger: React.ForwardRefExoticComponent<SelectTriggerProps & React.RefAttributes<HTMLButtonElement>>;
21
26
  declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
@@ -34,4 +39,4 @@ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.S
34
39
  itemIndicatorIcon?: React.ReactNode;
35
40
  } & React.RefAttributes<HTMLDivElement>>;
36
41
  declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
37
- export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
42
+ export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, selectTriggerVariants, };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * [WHO]: Separator — visual/semantic divider built on @radix-ui/react-separator.
3
+ * [FROM]: React + @radix-ui/react-separator + `@/lib/utils` cn.
4
+ * [TO]: sparkdesign package consumers; output of CLI `add separator` when registered.
5
+ * [HERE]: registry/basic/separator.tsx — Spark Design source; keep aligned with the main library.
6
+ *
7
+ * [PROTOCOL]:
8
+ * 1. Keep this P3 header in sync when the public contract changes.
9
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
10
+ * 3. Follow design tokens and explicit type exports.
11
+ */
12
+ import * as React from 'react';
13
+ import * as SeparatorPrimitive from '@radix-ui/react-separator';
14
+ export type SeparatorProps = React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>;
15
+ declare const Separator: React.ForwardRefExoticComponent<Omit<SeparatorPrimitive.SeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
16
+ export { Separator };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * [WHO]: Sheet — compatibility alias for Drawer using shadcn-style naming.
3
+ * [FROM]: registry/basic/drawer.
4
+ * [TO]: sparkdesign package consumers; output of CLI `add sheet` when registered.
5
+ * [HERE]: registry/basic/sheet.tsx — Spark Design source; keep aligned with Drawer semantics.
6
+ *
7
+ * [PROTOCOL]:
8
+ * 1. Keep Sheet as a thin compatibility layer; Drawer remains the canonical semantic component.
9
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
10
+ * 3. Follow design tokens and explicit type exports.
11
+ */
12
+ export { Drawer as Sheet, DrawerTrigger as SheetTrigger, DrawerClose as SheetClose, DrawerPortal as SheetPortal, DrawerOverlay as SheetOverlay, DrawerContent as SheetContent, DrawerHeader as SheetHeader, DrawerFooter as SheetFooter, DrawerTitle as SheetTitle, DrawerDescription as SheetDescription, drawerVariants as sheetVariants, } from './drawer';
13
+ export type { DrawerContentProps as SheetContentProps, DrawerHeaderProps as SheetHeaderProps, DrawerFooterProps as SheetFooterProps, } from './drawer';
@@ -1,5 +1,9 @@
1
1
  import type { HTMLAttributes } from 'react';
2
- export interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {
3
- className?: string;
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const spinnerVariants: (props?: ({
4
+ size?: "xs" | "sm" | "md" | "lg" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export interface SpinnerProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof spinnerVariants> {
4
7
  }
5
8
  export declare const Spinner: import("react").ForwardRefExoticComponent<SpinnerProps & import("react").RefAttributes<HTMLSpanElement>>;
9
+ export { spinnerVariants };
@@ -13,7 +13,7 @@ import * as React from 'react';
13
13
  import { type VariantProps } from 'class-variance-authority';
14
14
  declare const tagVariants: (props?: ({
15
15
  appearance?: "outline" | "filled" | null | undefined;
16
- color?: "primary" | "link" | "blue" | "lavender" | "orange" | "pink" | "purple" | "teal" | "yellow" | "error" | "warning" | "success" | "info" | "mauve" | "slate" | "sage" | null | undefined;
16
+ color?: "link" | "primary" | "blue" | "lavender" | "orange" | "pink" | "purple" | "teal" | "yellow" | "error" | "warning" | "success" | "info" | "mauve" | "slate" | "sage" | null | undefined;
17
17
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
18
18
  export interface TagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'color'>, VariantProps<typeof tagVariants> {
19
19
  closable?: boolean;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * [WHO]: Textarea — multi-line text input with token-driven styling.
3
+ * [FROM]: React + `@/lib/utils` cn + CVA.
4
+ * [TO]: sparkdesign package consumers; output of CLI `add textarea` when registered.
5
+ * [HERE]: registry/basic/textarea.tsx — Spark Design source; keep aligned with the main library.
6
+ *
7
+ * [PROTOCOL]:
8
+ * 1. Keep this P3 header in sync when the public contract changes.
9
+ * 2. Update module AGENTS.md (P2) and root AGENTS.md (P1) when boundaries change.
10
+ * 3. Follow design tokens and explicit type exports.
11
+ */
12
+ import * as React from 'react';
13
+ import { type VariantProps } from 'class-variance-authority';
14
+ declare const textareaVariants: (props?: ({
15
+ size?: "sm" | "md" | "lg" | null | undefined;
16
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
17
+ export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'>, VariantProps<typeof textareaVariants> {
18
+ size?: 'sm' | 'md' | 'lg';
19
+ }
20
+ declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
21
+ export { Textarea, textareaVariants };
@@ -19,6 +19,8 @@ export interface ChatInputContextValue {
19
19
  onChange: (value: string) => void;
20
20
  onSend?: (value: string) => void;
21
21
  disabled: boolean;
22
+ placeholder: string;
23
+ maxRows: number;
22
24
  form?: string;
23
25
  textareaRef: React.RefObject<HTMLTextAreaElement | null>;
24
26
  setTextareaRef: (node: HTMLTextAreaElement | null) => void;
@@ -59,7 +61,7 @@ export declare function useChatInputContext(): ChatInputContextValue;
59
61
  export type ChatInputRootProps = ChatInputProps & {
60
62
  children?: ReactNode;
61
63
  };
62
- export declare function ChatInputRootProvider({ value: controlledValue, onChange, onSend, placeholder, disabled, maxRows, form, sendButtonStatus, showFooter, showFolderButton, folderButtonLabel, onFolderButtonClick, onFolderClear, folderPermission, showMoreButton, onMoreButtonClick, footerLeftConfig, showGenerationStatus, generationStatus, attachments, addLargeIcon, folderIcon, folderOpenIcon, historyIcon, arrowDownIcon, subMenuArrowIcon, folderFillIcon, closeIcon, dataStyle, dataTheme, className, children, ...rest }: ChatInputRootProps): import("react/jsx-runtime").JSX.Element;
64
+ export declare function ChatInputRootProvider({ value: controlledValue, onChange, onSend, placeholder, disabled, maxRows, form, sendButtonStatus, showFooter, showFolderButton, folderButtonLabel, onFolderButtonClick, onFolderClear, folderPermission, showMoreButton, onMoreButtonClick, footerLeftConfig, showGenerationStatus, generationStatus, attachments, addLargeIcon, folderIcon, folderOpenIcon, historyIcon, arrowDownIcon, subMenuArrowIcon, folderFillIcon, closeIcon, dataStyle, dataTheme, children, ...rest }: ChatInputRootProps): import("react/jsx-runtime").JSX.Element;
63
65
  export declare namespace ChatInputRootProvider {
64
66
  var displayName: string;
65
67
  }
@@ -0,0 +1,72 @@
1
+ import type { RefObject, ReactNode } from 'react';
2
+ /** 单个锚点项 */
3
+ export interface ConversationAnchorItem {
4
+ /** 稳定 id,用于定位 DOM 节点与 React key */
5
+ id: string;
6
+ /** 在 Tooltip 中展示的摘要文案(纯文本)。为空时回落到 labels.scrollTo。 */
7
+ summary?: string;
8
+ }
9
+ /** i18n 文案 */
10
+ export interface ConversationAnchorLabels {
11
+ /** nav 的 aria-label */
12
+ ariaLabel?: string;
13
+ /** Tooltip 兜底文案(无摘要时) */
14
+ scrollTo?: string;
15
+ }
16
+ /** 样式变体 */
17
+ export type ConversationAnchorVariant = 'bar' | 'punch';
18
+ export interface ConversationAnchorNavProps {
19
+ /** 滚动容器 ref,用于检测当前可视锚点;受控场景可传 { current: null } */
20
+ scrollContainerRef: RefObject<HTMLElement | null>;
21
+ /** 锚点列表,顺序即视觉顺序 */
22
+ items: ConversationAnchorItem[];
23
+ /** 点击锚点时回调,参数为在 items 中的索引与对应 item */
24
+ onSelect: (index: number, item: ConversationAnchorItem) => void;
25
+ /**
26
+ * 当前高亮索引(受控)。
27
+ * 省略时组件内部会订阅 scrollContainerRef 的滚动并通过 IntersectionObserver 自动推导。
28
+ */
29
+ activeIndex?: number;
30
+ /**
31
+ * 锚点视觉样式:
32
+ * - 'bar' (默认):短横杠,hover 时加长
33
+ * - 'punch':圆形"打孔"点,适合羊皮纸 / 拟物风主题
34
+ */
35
+ variant?: ConversationAnchorVariant;
36
+ /** 少于该数量时隐藏整个 nav,默认 3 */
37
+ minItems?: number;
38
+ /** 外部强制隐藏(例如 compact 布局),默认 false */
39
+ hidden?: boolean;
40
+ /** 自定义 Tooltip / aria 文案 */
41
+ labels?: ConversationAnchorLabels;
42
+ /** 额外 className(会与默认定位 className 合并) */
43
+ className?: string;
44
+ /**
45
+ * 自定义锚点元素解析。默认通过
46
+ * `scrollContainerRef.current.querySelector('[data-spark-anchor="<id>"]')`
47
+ * 查找;需要业务在消息容器上添加该属性。
48
+ */
49
+ getAnchorElement?: (item: ConversationAnchorItem, index: number, container: HTMLElement) => HTMLElement | null;
50
+ /** 渲染 slot:自定义每个锚点的视觉表达,返回 null 时回落到内置样式 */
51
+ renderAnchor?: (ctx: {
52
+ item: ConversationAnchorItem;
53
+ index: number;
54
+ isActive: boolean;
55
+ variant: ConversationAnchorVariant;
56
+ }) => ReactNode;
57
+ }
58
+ export declare const ConversationAnchorNav: import("react").NamedExoticComponent<ConversationAnchorNavProps>;
59
+ export interface UseVisibleAnchorIndexOptions {
60
+ scrollContainerRef: RefObject<HTMLElement | null>;
61
+ items: ConversationAnchorItem[];
62
+ /** 与 ConversationAnchorNav 同名 prop,默认按 `[data-spark-anchor="<id>"]` 查找 */
63
+ getAnchorElement?: ConversationAnchorNavProps['getAnchorElement'];
64
+ /** 为 false 时不订阅滚动,返回 0;用于受控场景 */
65
+ enabled?: boolean;
66
+ }
67
+ /**
68
+ * 订阅 scroll 容器内每个锚点元素的可见性,返回"最靠近顶部且仍可见"的锚点索引。
69
+ * - 容器必须可滚动(通常 overflow-y: auto),且锚点元素是其后代
70
+ * - 每个锚点需要能通过 `getAnchorElement` 解析到 HTMLElement
71
+ */
72
+ export declare function useVisibleAnchorIndex({ scrollContainerRef, items, getAnchorElement, enabled, }: UseVisibleAnchorIndexOptions): number;
@@ -12,6 +12,8 @@ export interface ToolInvocationCardProps {
12
12
  checkboxCircleIcon?: ReactNode;
13
13
  closeCircleIcon?: ReactNode;
14
14
  arrowDownIcon?: ReactNode;
15
+ /** @deprecated Use arrowDownIcon. */
16
+ arrowRightIcon?: ReactNode;
15
17
  runningText?: string;
16
18
  ranText?: string;
17
19
  failedText?: string;
@@ -100,4 +100,15 @@
100
100
  --motion-ease-standard: var(--config-motion-ease-standard);
101
101
  --motion-ease-emphasized: var(--config-motion-ease-emphasized);
102
102
  --motion-ease-out: var(--config-motion-ease-out);
103
+
104
+ /* ============================================
105
+ Motion Multiplier (从配置映射)
106
+ ============================================ */
107
+ --motion-multiplier: var(--config-motion-multiplier);
108
+
109
+ /* ============================================
110
+ Border Width (从配置映射)
111
+ ============================================ */
112
+ --border-width: var(--config-border-width);
113
+ --border-width-thick: var(--config-border-width-thick);
103
114
  }
@@ -102,6 +102,17 @@
102
102
  --config-motion-ease-emphasized: cubic-bezier(0.2, 0.8, 0.2, 1);
103
103
  --config-motion-ease-out: cubic-bezier(0, 0, 0.2, 1);
104
104
 
105
+ /* ============================================
106
+ Motion Multiplier (preset 可覆盖,<1 更快,>1 更慢)
107
+ ============================================ */
108
+ --config-motion-multiplier: 1;
109
+
110
+ /* ============================================
111
+ Border Width 配置
112
+ ============================================ */
113
+ --config-border-width: 1px;
114
+ --config-border-width-thick: 2px;
115
+
105
116
  /* ============================================
106
117
  Font Family 配置
107
118
  ============================================ */
@@ -1,6 +1,6 @@
1
1
  /* ============================================
2
2
  * Preset: Compact - 紧凑风格
3
- * 优化效率,适合信息密集场景
3
+ * 小幅压缩控件节奏,适合效率型工作台
4
4
  * ============================================ */
5
5
 
6
6
  [data-style="compact"] {
@@ -15,16 +15,34 @@
15
15
  --radius-2xl: 12px;
16
16
  --radius-3xl: 16px;
17
17
 
18
- /* Font Size (略小) */
19
- --font-size-sm: 12px;
20
- --font-size-lg: 14px;
21
- --font-size-xl: 16px;
18
+ /* Font Size (略小但保持阅读舒适) */
19
+ --font-size-xs: 12px;
20
+ --font-size-xs--line-height: 16px;
21
+ --font-size-sm: 13px;
22
+ --font-size-sm--line-height: 18px;
23
+ --font-size-base: 14px;
24
+ --font-size-base--line-height: 20px;
25
+ --font-size-lg: 15px;
26
+ --font-size-lg--line-height: 22px;
27
+ --font-size-xl: 17px;
28
+ --font-size-xl--line-height: 24px;
22
29
  --font-size-2xl: 18px;
30
+ --font-size-2xl--line-height: 24px;
23
31
  --font-size-3xl: 22px;
32
+ --font-size-3xl--line-height: 28px;
24
33
  --font-size-4xl: 28px;
34
+ --font-size-4xl--line-height: 32px;
25
35
  --font-size-5xl: 34px;
36
+ --font-size-5xl--line-height: 36px;
26
37
  --font-size-6xl: 44px;
27
38
  --font-size-7xl: 56px;
28
39
  --font-size-8xl: 64px;
29
40
  --font-size-9xl: 88px;
41
+
42
+ /* Motion (略快) */
43
+ --motion-multiplier: 0.9;
44
+
45
+ /* Border */
46
+ --border-width: 1px;
47
+ --border-width-thick: 1px;
30
48
  }
@@ -49,16 +49,34 @@
49
49
  /* ChatInput 特殊配置 */
50
50
  --chat-status-overlap: 4px;
51
51
 
52
- /* Font Size (更小) */
53
- --font-size-base: 12px;
52
+ /* Font Size (信息密集:主力 text-sm 也压缩) */
53
+ --font-size-xs: 11px;
54
+ --font-size-xs--line-height: 14px;
55
+ --font-size-sm: 12px;
56
+ --font-size-sm--line-height: 16px;
57
+ --font-size-base: 13px;
58
+ --font-size-base--line-height: 18px;
54
59
  --font-size-lg: 14px;
60
+ --font-size-lg--line-height: 20px;
55
61
  --font-size-xl: 14px;
62
+ --font-size-xl--line-height: 20px;
56
63
  --font-size-2xl: 16px;
64
+ --font-size-2xl--line-height: 22px;
57
65
  --font-size-3xl: 18px;
66
+ --font-size-3xl--line-height: 24px;
58
67
  --font-size-4xl: 22px;
68
+ --font-size-4xl--line-height: 28px;
59
69
  --font-size-5xl: 28px;
70
+ --font-size-5xl--line-height: 32px;
60
71
  --font-size-6xl: 36px;
61
72
  --font-size-7xl: 44px;
62
73
  --font-size-8xl: 56px;
63
74
  --font-size-9xl: 72px;
75
+
76
+ /* Motion (快速) */
77
+ --motion-multiplier: 0.8;
78
+
79
+ /* Border (极细) */
80
+ --border-width: 1px;
81
+ --border-width-thick: 1px;
64
82
  }