agentic-ds-kit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/AGENTS.md +10 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +21 -0
  4. package/README.md +38 -0
  5. package/contracts/accordion.json +38 -0
  6. package/contracts/alert.json +57 -0
  7. package/contracts/alertdialog.json +89 -0
  8. package/contracts/appheader.json +140 -0
  9. package/contracts/appnav.json +72 -0
  10. package/contracts/avatar.json +63 -0
  11. package/contracts/avatargroup.json +83 -0
  12. package/contracts/badge.json +92 -0
  13. package/contracts/barchart.json +55 -0
  14. package/contracts/breadcrumb.json +76 -0
  15. package/contracts/button.json +120 -0
  16. package/contracts/buttongroup.json +48 -0
  17. package/contracts/calendar.json +93 -0
  18. package/contracts/card.json +123 -0
  19. package/contracts/carousel.json +98 -0
  20. package/contracts/cell.json +203 -0
  21. package/contracts/chat.json +131 -0
  22. package/contracts/checkbox.json +101 -0
  23. package/contracts/collapsible.json +66 -0
  24. package/contracts/command.json +84 -0
  25. package/contracts/datatable.json +126 -0
  26. package/contracts/datepicker.json +102 -0
  27. package/contracts/drawer.json +93 -0
  28. package/contracts/dropdownmenu.json +190 -0
  29. package/contracts/empty.json +79 -0
  30. package/contracts/field.json +49 -0
  31. package/contracts/fieldset.json +29 -0
  32. package/contracts/headercell.json +107 -0
  33. package/contracts/index.json +478 -0
  34. package/contracts/input.json +119 -0
  35. package/contracts/inputotp.json +119 -0
  36. package/contracts/insightcard.json +130 -0
  37. package/contracts/linechart.json +51 -0
  38. package/contracts/loadinganimation.json +33 -0
  39. package/contracts/modal.json +100 -0
  40. package/contracts/modalcard.json +88 -0
  41. package/contracts/navigationmenu.json +65 -0
  42. package/contracts/numbertransition.json +33 -0
  43. package/contracts/pageheader.json +101 -0
  44. package/contracts/pagination.json +85 -0
  45. package/contracts/patterns/activity.json +30 -0
  46. package/contracts/patterns/assistant-workspace.json +16 -0
  47. package/contracts/patterns/dashboard.json +12 -0
  48. package/contracts/patterns/empty-first-run.json +15 -0
  49. package/contracts/patterns/inbox.json +32 -0
  50. package/contracts/patterns/invite-members.json +14 -0
  51. package/contracts/patterns/list-detail.json +13 -0
  52. package/contracts/patterns/settings-form.json +13 -0
  53. package/contracts/piechart.json +68 -0
  54. package/contracts/progress.json +124 -0
  55. package/contracts/progresssteps.json +91 -0
  56. package/contracts/radiogroup.json +132 -0
  57. package/contracts/scoreboard.json +46 -0
  58. package/contracts/scorecard.json +124 -0
  59. package/contracts/section.json +97 -0
  60. package/contracts/select.json +130 -0
  61. package/contracts/shimmertext.json +33 -0
  62. package/contracts/sidenav.json +133 -0
  63. package/contracts/slider.json +81 -0
  64. package/contracts/spinner.json +52 -0
  65. package/contracts/switch.json +94 -0
  66. package/contracts/table.json +92 -0
  67. package/contracts/tabs.json +90 -0
  68. package/contracts/textarea.json +54 -0
  69. package/contracts/thinkinganimation.json +32 -0
  70. package/contracts/timeline.json +49 -0
  71. package/contracts/toast.json +104 -0
  72. package/contracts/tooltip.json +66 -0
  73. package/lib/tokens.css +637 -0
  74. package/package.json +60 -0
  75. package/skills/prototype-from-kit/SKILL.md +29 -0
  76. package/src/index.ts +71 -0
  77. package/tokens/tokens.json +725 -0
  78. package/ui/Accordion/Accordion.module.css +68 -0
  79. package/ui/Accordion/Accordion.tsx +51 -0
  80. package/ui/Accordion/Accordion.types.ts +10 -0
  81. package/ui/Accordion/index.ts +2 -0
  82. package/ui/Alert/Alert.module.css +62 -0
  83. package/ui/Alert/Alert.tsx +27 -0
  84. package/ui/Alert/Alert.types.ts +7 -0
  85. package/ui/Alert/index.ts +2 -0
  86. package/ui/AlertDialog/AlertDialog.module.css +71 -0
  87. package/ui/AlertDialog/AlertDialog.tsx +109 -0
  88. package/ui/AlertDialog/AlertDialog.types.ts +14 -0
  89. package/ui/AlertDialog/index.ts +6 -0
  90. package/ui/AppHeader/AppHeader.module.css +120 -0
  91. package/ui/AppHeader/AppHeader.tsx +70 -0
  92. package/ui/AppHeader/AppHeader.types.ts +28 -0
  93. package/ui/AppHeader/index.ts +2 -0
  94. package/ui/AppNav/AppNav.module.css +168 -0
  95. package/ui/AppNav/AppNav.tsx +137 -0
  96. package/ui/AppNav/AppNav.types.ts +24 -0
  97. package/ui/AppNav/index.ts +2 -0
  98. package/ui/Avatar/Avatar.module.css +52 -0
  99. package/ui/Avatar/Avatar.tsx +62 -0
  100. package/ui/Avatar/Avatar.types.ts +8 -0
  101. package/ui/Avatar/index.ts +2 -0
  102. package/ui/AvatarGroup/AvatarGroup.module.css +49 -0
  103. package/ui/AvatarGroup/AvatarGroup.tsx +29 -0
  104. package/ui/AvatarGroup/AvatarGroup.types.ts +16 -0
  105. package/ui/AvatarGroup/index.ts +2 -0
  106. package/ui/Badge/Badge.module.css +92 -0
  107. package/ui/Badge/Badge.tsx +43 -0
  108. package/ui/Badge/Badge.types.ts +11 -0
  109. package/ui/Badge/index.ts +2 -0
  110. package/ui/BarChart/BarChart.module.css +56 -0
  111. package/ui/BarChart/BarChart.tsx +380 -0
  112. package/ui/BarChart/BarChart.types.ts +18 -0
  113. package/ui/BarChart/index.ts +2 -0
  114. package/ui/Breadcrumb/Breadcrumb.module.css +64 -0
  115. package/ui/Breadcrumb/Breadcrumb.tsx +89 -0
  116. package/ui/Breadcrumb/Breadcrumb.types.ts +14 -0
  117. package/ui/Breadcrumb/index.ts +2 -0
  118. package/ui/Button/Button.module.css +101 -0
  119. package/ui/Button/Button.tsx +49 -0
  120. package/ui/Button/Button.types.ts +18 -0
  121. package/ui/Button/index.ts +2 -0
  122. package/ui/Button/lucideName.tsx +188 -0
  123. package/ui/ButtonGroup/ButtonGroup.module.css +31 -0
  124. package/ui/ButtonGroup/ButtonGroup.tsx +12 -0
  125. package/ui/ButtonGroup/ButtonGroup.types.ts +6 -0
  126. package/ui/ButtonGroup/index.ts +2 -0
  127. package/ui/Calendar/Calendar.module.css +146 -0
  128. package/ui/Calendar/Calendar.tsx +296 -0
  129. package/ui/Calendar/Calendar.types.ts +11 -0
  130. package/ui/Calendar/index.ts +2 -0
  131. package/ui/Card/Card.module.css +95 -0
  132. package/ui/Card/Card.tsx +69 -0
  133. package/ui/Card/Card.types.ts +23 -0
  134. package/ui/Card/index.ts +2 -0
  135. package/ui/Carousel/Carousel.module.css +114 -0
  136. package/ui/Carousel/Carousel.tsx +152 -0
  137. package/ui/Carousel/Carousel.types.ts +17 -0
  138. package/ui/Carousel/index.ts +7 -0
  139. package/ui/Cell/Cell.module.css +133 -0
  140. package/ui/Cell/Cell.tsx +300 -0
  141. package/ui/Cell/Cell.types.ts +69 -0
  142. package/ui/Cell/index.ts +11 -0
  143. package/ui/Chat/Chat.module.css +149 -0
  144. package/ui/Chat/Chat.tsx +175 -0
  145. package/ui/Chat/Chat.types.ts +39 -0
  146. package/ui/Chat/index.ts +2 -0
  147. package/ui/Checkbox/Checkbox.module.css +135 -0
  148. package/ui/Checkbox/Checkbox.tsx +70 -0
  149. package/ui/Checkbox/Checkbox.types.ts +15 -0
  150. package/ui/Checkbox/index.ts +2 -0
  151. package/ui/Collapsible/Collapsible.module.css +68 -0
  152. package/ui/Collapsible/Collapsible.tsx +59 -0
  153. package/ui/Collapsible/Collapsible.types.ts +9 -0
  154. package/ui/Collapsible/index.ts +2 -0
  155. package/ui/Command/Command.module.css +138 -0
  156. package/ui/Command/Command.tsx +152 -0
  157. package/ui/Command/Command.types.ts +20 -0
  158. package/ui/Command/index.ts +2 -0
  159. package/ui/DataTable/DataTable.module.css +211 -0
  160. package/ui/DataTable/DataTable.tsx +429 -0
  161. package/ui/DataTable/DataTable.types.ts +35 -0
  162. package/ui/DataTable/index.ts +8 -0
  163. package/ui/DatePicker/DatePicker.module.css +44 -0
  164. package/ui/DatePicker/DatePicker.tsx +123 -0
  165. package/ui/DatePicker/DatePicker.types.ts +15 -0
  166. package/ui/DatePicker/index.ts +2 -0
  167. package/ui/Drawer/Drawer.module.css +204 -0
  168. package/ui/Drawer/Drawer.tsx +112 -0
  169. package/ui/Drawer/Drawer.types.ts +14 -0
  170. package/ui/Drawer/index.ts +2 -0
  171. package/ui/DropdownMenu/DropdownMenu.module.css +319 -0
  172. package/ui/DropdownMenu/DropdownMenu.tsx +580 -0
  173. package/ui/DropdownMenu/DropdownMenu.types.ts +48 -0
  174. package/ui/DropdownMenu/index.ts +8 -0
  175. package/ui/Empty/Empty.module.css +68 -0
  176. package/ui/Empty/Empty.tsx +35 -0
  177. package/ui/Empty/Empty.types.ts +10 -0
  178. package/ui/Empty/index.ts +2 -0
  179. package/ui/Field/Field.module.css +66 -0
  180. package/ui/Field/Field.tsx +46 -0
  181. package/ui/Field/Field.types.ts +12 -0
  182. package/ui/Field/index.ts +2 -0
  183. package/ui/FieldSet/FieldSet.module.css +30 -0
  184. package/ui/FieldSet/FieldSet.tsx +14 -0
  185. package/ui/FieldSet/FieldSet.types.ts +7 -0
  186. package/ui/FieldSet/index.ts +2 -0
  187. package/ui/HeaderCell/HeaderCell.module.css +85 -0
  188. package/ui/HeaderCell/HeaderCell.tsx +71 -0
  189. package/ui/HeaderCell/HeaderCell.types.ts +18 -0
  190. package/ui/HeaderCell/index.ts +2 -0
  191. package/ui/Input/Input.module.css +59 -0
  192. package/ui/Input/Input.tsx +65 -0
  193. package/ui/Input/Input.types.ts +22 -0
  194. package/ui/Input/index.ts +2 -0
  195. package/ui/InputOTP/InputOTP.module.css +139 -0
  196. package/ui/InputOTP/InputOTP.tsx +136 -0
  197. package/ui/InputOTP/InputOTP.types.ts +19 -0
  198. package/ui/InputOTP/index.ts +2 -0
  199. package/ui/InsightCard/InsightCard.module.css +166 -0
  200. package/ui/InsightCard/InsightCard.tsx +90 -0
  201. package/ui/InsightCard/InsightCard.types.ts +20 -0
  202. package/ui/InsightCard/index.ts +7 -0
  203. package/ui/LineChart/LineChart.module.css +93 -0
  204. package/ui/LineChart/LineChart.tsx +424 -0
  205. package/ui/LineChart/LineChart.types.ts +19 -0
  206. package/ui/LineChart/index.ts +2 -0
  207. package/ui/LoadingAnimation/LoadingAnimation.module.css +66 -0
  208. package/ui/LoadingAnimation/LoadingAnimation.tsx +41 -0
  209. package/ui/LoadingAnimation/LoadingAnimation.types.ts +9 -0
  210. package/ui/LoadingAnimation/index.ts +6 -0
  211. package/ui/Modal/Modal.module.css +48 -0
  212. package/ui/Modal/Modal.tsx +114 -0
  213. package/ui/Modal/Modal.types.ts +15 -0
  214. package/ui/Modal/index.ts +2 -0
  215. package/ui/ModalCard/ModalCard.module.css +137 -0
  216. package/ui/ModalCard/ModalCard.tsx +58 -0
  217. package/ui/ModalCard/ModalCard.types.ts +15 -0
  218. package/ui/ModalCard/index.ts +2 -0
  219. package/ui/NavigationMenu/NavigationMenu.module.css +31 -0
  220. package/ui/NavigationMenu/NavigationMenu.tsx +57 -0
  221. package/ui/NavigationMenu/NavigationMenu.types.ts +22 -0
  222. package/ui/NavigationMenu/index.ts +7 -0
  223. package/ui/NumberTransition/NumberTransition.module.css +110 -0
  224. package/ui/NumberTransition/NumberTransition.tsx +78 -0
  225. package/ui/NumberTransition/NumberTransition.types.ts +9 -0
  226. package/ui/NumberTransition/index.ts +2 -0
  227. package/ui/PageHeader/PageHeader.module.css +57 -0
  228. package/ui/PageHeader/PageHeader.tsx +39 -0
  229. package/ui/PageHeader/PageHeader.types.ts +12 -0
  230. package/ui/PageHeader/index.ts +2 -0
  231. package/ui/Pagination/Pagination.module.css +19 -0
  232. package/ui/Pagination/Pagination.tsx +147 -0
  233. package/ui/Pagination/Pagination.types.ts +12 -0
  234. package/ui/Pagination/index.ts +2 -0
  235. package/ui/PieChart/PieChart.module.css +116 -0
  236. package/ui/PieChart/PieChart.tsx +293 -0
  237. package/ui/PieChart/PieChart.types.ts +22 -0
  238. package/ui/PieChart/index.ts +2 -0
  239. package/ui/Progress/Progress.module.css +226 -0
  240. package/ui/Progress/Progress.tsx +167 -0
  241. package/ui/Progress/Progress.types.ts +15 -0
  242. package/ui/Progress/index.ts +8 -0
  243. package/ui/ProgressSteps/ProgressSteps.module.css +210 -0
  244. package/ui/ProgressSteps/ProgressSteps.tsx +105 -0
  245. package/ui/ProgressSteps/ProgressSteps.types.ts +19 -0
  246. package/ui/ProgressSteps/index.ts +8 -0
  247. package/ui/RadioGroup/RadioGroup.module.css +284 -0
  248. package/ui/RadioGroup/RadioGroup.tsx +116 -0
  249. package/ui/RadioGroup/RadioGroup.types.ts +30 -0
  250. package/ui/RadioGroup/index.ts +8 -0
  251. package/ui/Scoreboard/Scoreboard.module.css +53 -0
  252. package/ui/Scoreboard/Scoreboard.tsx +41 -0
  253. package/ui/Scoreboard/Scoreboard.types.ts +7 -0
  254. package/ui/Scoreboard/index.ts +2 -0
  255. package/ui/Scorecard/Scorecard.module.css +150 -0
  256. package/ui/Scorecard/Scorecard.tsx +92 -0
  257. package/ui/Scorecard/Scorecard.types.ts +18 -0
  258. package/ui/Scorecard/index.ts +2 -0
  259. package/ui/Section/Section.module.css +104 -0
  260. package/ui/Section/Section.tsx +75 -0
  261. package/ui/Section/Section.types.ts +15 -0
  262. package/ui/Section/index.ts +2 -0
  263. package/ui/Select/Select.module.css +7 -0
  264. package/ui/Select/Select.tsx +113 -0
  265. package/ui/Select/Select.types.ts +26 -0
  266. package/ui/Select/index.ts +2 -0
  267. package/ui/ShimmerText/ShimmerText.module.css +46 -0
  268. package/ui/ShimmerText/ShimmerText.tsx +48 -0
  269. package/ui/ShimmerText/ShimmerText.types.ts +12 -0
  270. package/ui/ShimmerText/index.ts +2 -0
  271. package/ui/SideNav/SideNav.module.css +347 -0
  272. package/ui/SideNav/SideNav.tsx +222 -0
  273. package/ui/SideNav/SideNav.types.ts +42 -0
  274. package/ui/SideNav/index.ts +8 -0
  275. package/ui/Slider/Slider.module.css +105 -0
  276. package/ui/Slider/Slider.tsx +187 -0
  277. package/ui/Slider/Slider.types.ts +11 -0
  278. package/ui/Slider/index.ts +2 -0
  279. package/ui/Spinner/Spinner.module.css +58 -0
  280. package/ui/Spinner/Spinner.tsx +19 -0
  281. package/ui/Spinner/Spinner.types.ts +6 -0
  282. package/ui/Spinner/index.ts +2 -0
  283. package/ui/Switch/Switch.module.css +189 -0
  284. package/ui/Switch/Switch.tsx +65 -0
  285. package/ui/Switch/Switch.types.ts +12 -0
  286. package/ui/Switch/index.ts +2 -0
  287. package/ui/Table/Table.module.css +132 -0
  288. package/ui/Table/Table.tsx +108 -0
  289. package/ui/Table/Table.types.ts +26 -0
  290. package/ui/Table/index.ts +8 -0
  291. package/ui/Tabs/Tabs.module.css +162 -0
  292. package/ui/Tabs/Tabs.tsx +150 -0
  293. package/ui/Tabs/Tabs.types.ts +21 -0
  294. package/ui/Tabs/index.ts +2 -0
  295. package/ui/Textarea/Textarea.module.css +74 -0
  296. package/ui/Textarea/Textarea.tsx +38 -0
  297. package/ui/Textarea/Textarea.types.ts +14 -0
  298. package/ui/Textarea/index.ts +2 -0
  299. package/ui/ThinkingAnimation/ThinkingAnimation.module.css +75 -0
  300. package/ui/ThinkingAnimation/ThinkingAnimation.tsx +31 -0
  301. package/ui/ThinkingAnimation/ThinkingAnimation.types.ts +8 -0
  302. package/ui/ThinkingAnimation/index.ts +2 -0
  303. package/ui/Timeline/Timeline.module.css +99 -0
  304. package/ui/Timeline/Timeline.tsx +47 -0
  305. package/ui/Timeline/Timeline.types.ts +16 -0
  306. package/ui/Timeline/index.ts +2 -0
  307. package/ui/Toast/Toast.module.css +133 -0
  308. package/ui/Toast/Toast.tsx +89 -0
  309. package/ui/Toast/Toast.types.ts +17 -0
  310. package/ui/Toast/index.ts +2 -0
  311. package/ui/Tooltip/Tooltip.module.css +111 -0
  312. package/ui/Tooltip/Tooltip.tsx +101 -0
  313. package/ui/Tooltip/index.ts +2 -0
  314. package/ui/patterns/ActivityPattern/ActivityFeed.tsx +77 -0
  315. package/ui/patterns/ActivityPattern/ActivityPattern.tsx +120 -0
  316. package/ui/patterns/ActivityPattern/ActivityTasks.tsx +86 -0
  317. package/ui/patterns/ActivityPattern/TaskDrawer.module.css +39 -0
  318. package/ui/patterns/ActivityPattern/TaskDrawer.tsx +186 -0
  319. package/ui/patterns/ActivityPattern/index.ts +2 -0
  320. package/ui/patterns/AssistantWorkspacePattern/AssistantWorkspacePattern.module.css +16 -0
  321. package/ui/patterns/AssistantWorkspacePattern/AssistantWorkspacePattern.tsx +159 -0
  322. package/ui/patterns/AssistantWorkspacePattern/index.ts +2 -0
  323. package/ui/patterns/DashboardPattern/DashboardPattern.tsx +102 -0
  324. package/ui/patterns/DashboardPattern/index.ts +1 -0
  325. package/ui/patterns/DashboardPattern/patterns.module.css +6 -0
  326. package/ui/patterns/EmptyFirstRunPattern/EmptyFirstRunPattern.tsx +125 -0
  327. package/ui/patterns/EmptyFirstRunPattern/index.ts +2 -0
  328. package/ui/patterns/InboxPattern/InboxPattern.module.css +40 -0
  329. package/ui/patterns/InboxPattern/InboxPattern.tsx +192 -0
  330. package/ui/patterns/InboxPattern/InboxReplyDrawer.tsx +97 -0
  331. package/ui/patterns/InboxPattern/inbox-data.ts +101 -0
  332. package/ui/patterns/InboxPattern/index.ts +2 -0
  333. package/ui/patterns/InviteMembersPattern/InviteMembersPattern.tsx +148 -0
  334. package/ui/patterns/InviteMembersPattern/index.ts +2 -0
  335. package/ui/patterns/ListDetailPattern/ListDetailPattern.module.css +34 -0
  336. package/ui/patterns/ListDetailPattern/ListDetailPattern.tsx +145 -0
  337. package/ui/patterns/ListDetailPattern/index.ts +2 -0
  338. package/ui/patterns/SettingsFormPattern/SettingsFormPattern.module.css +12 -0
  339. package/ui/patterns/SettingsFormPattern/SettingsFormPattern.tsx +89 -0
  340. package/ui/patterns/SettingsFormPattern/index.ts +3 -0
  341. package/ui/shared/ChartFrame.module.css +295 -0
  342. package/ui/shared/ChartFrame.tsx +87 -0
  343. package/ui/shared/chartMath.ts +228 -0
  344. package/ui/shared/controls.module.css +48 -0
  345. package/ui/shared/useChartSize.ts +22 -0
@@ -0,0 +1,119 @@
1
+ {
2
+ "id": "input",
3
+ "status": "stable",
4
+ "intent": "Single-line text entry for forms and filters. Optional start and end slots sit inside the field.",
5
+ "useWhen": [
6
+ "Collecting short text such as name, email, or search queries",
7
+ "Inside a Field wrapper when label, hint, or error messaging is needed"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "One-time code or PIN \u2014 use InputOTP",
11
+ "Multi-line content \u2014 use Textarea",
12
+ "Choosing from fixed options \u2014 use Select or RadioGroup",
13
+ "Standalone labeled forms without Field \u2014 you must wire label association yourself"
14
+ ],
15
+ "props": {
16
+ "id": {
17
+ "type": "string",
18
+ "required": true
19
+ },
20
+ "type": {
21
+ "type": "enum",
22
+ "values": [
23
+ "text",
24
+ "email",
25
+ "password",
26
+ "search"
27
+ ],
28
+ "default": "text"
29
+ },
30
+ "size": {
31
+ "type": "enum",
32
+ "values": [
33
+ "lg",
34
+ "md",
35
+ "sm"
36
+ ],
37
+ "default": "md"
38
+ },
39
+ "placeholder": {
40
+ "type": "string",
41
+ "required": false
42
+ },
43
+ "disabled": {
44
+ "type": "boolean",
45
+ "default": false
46
+ },
47
+ "error": {
48
+ "type": "boolean",
49
+ "default": false
50
+ },
51
+ "defaultValue": {
52
+ "type": "string",
53
+ "required": false
54
+ },
55
+ "name": {
56
+ "type": "string",
57
+ "required": false
58
+ },
59
+ "start": {
60
+ "type": "string",
61
+ "required": false,
62
+ "note": "Prefix text inside the field on the left. Not a label."
63
+ },
64
+ "end": {
65
+ "type": "string",
66
+ "required": false,
67
+ "note": "Suffix text inside the field on the right. Not a label."
68
+ },
69
+ "iconStart": {
70
+ "type": "string",
71
+ "required": false,
72
+ "note": "Lucide catalog name on the left."
73
+ },
74
+ "iconEnd": {
75
+ "type": "string",
76
+ "required": false,
77
+ "note": "Lucide catalog name on the right."
78
+ },
79
+ "value": {
80
+ "type": "string",
81
+ "required": false,
82
+ "note": "controlled. When set, do not also rely on defaultValue."
83
+ },
84
+ "onChange": {
85
+ "type": "function",
86
+ "required": false,
87
+ "note": "(value: string) => void"
88
+ },
89
+ "ariaLabel": {
90
+ "type": "string",
91
+ "required": false,
92
+ "note": "When there is no Field label, such as search inside DropdownMenu."
93
+ }
94
+ },
95
+ "tokens": [
96
+ "text.primary",
97
+ "text.muted",
98
+ "icon.muted",
99
+ "surface.card",
100
+ "surface.muted",
101
+ "border.faint",
102
+ "border.focus",
103
+ "status.danger"
104
+ ],
105
+ "a11y": {
106
+ "element": "input",
107
+ "requirements": [
108
+ "Must have associated label via Field or aria-label",
109
+ "error state should be described by Field error text"
110
+ ]
111
+ },
112
+ "doNot": [
113
+ "Do not invent local Input variants or InputGroup",
114
+ "Do not use raw hex in styles",
115
+ "Do not use start or end as the accessible name \u2014 wrap with Field label",
116
+ "Do not use Lucide except via LucideByName from @/ui/Button/lucideName"
117
+ ],
118
+ "snippet": "<Field label=\"Website\" htmlFor=\"website\"><Input id=\"website\" start=\"https://\" placeholder=\"example.com\" /></Field>"
119
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "id": "inputotp",
3
+ "status": "stable",
4
+ "intent": "One-time code / PIN as separate slots. Paste and autocomplete work. Not a row of Inputs.",
5
+ "useWhen": [
6
+ "email/SMS verification, PIN, 2FA code"
7
+ ],
8
+ "doNotUseWhen": [
9
+ "normal text — Input",
10
+ "multi-line — Textarea",
11
+ "choosing options — Select/RadioGroup"
12
+ ],
13
+ "props": {
14
+ "id": {
15
+ "type": "string",
16
+ "required": true
17
+ },
18
+ "length": {
19
+ "type": "number",
20
+ "default": 6
21
+ },
22
+ "groups": {
23
+ "type": "number[]",
24
+ "required": false,
25
+ "note": "Slot counts per group; must sum to length. Default [3, 3] when length is 6, else [length]. Separator sits between groups only."
26
+ },
27
+ "size": {
28
+ "type": "enum",
29
+ "values": [
30
+ "sm",
31
+ "md",
32
+ "lg"
33
+ ],
34
+ "default": "md"
35
+ },
36
+ "disabled": {
37
+ "type": "boolean",
38
+ "default": false
39
+ },
40
+ "error": {
41
+ "type": "boolean",
42
+ "default": false
43
+ },
44
+ "value": {
45
+ "type": "string",
46
+ "required": false,
47
+ "note": "controlled"
48
+ },
49
+ "defaultValue": {
50
+ "type": "string",
51
+ "required": false,
52
+ "note": "uncontrolled"
53
+ },
54
+ "onChange": {
55
+ "type": "function",
56
+ "required": false,
57
+ "note": "(value: string) => void"
58
+ },
59
+ "onComplete": {
60
+ "type": "function",
61
+ "required": false,
62
+ "note": "fires when value.length === length"
63
+ },
64
+ "pattern": {
65
+ "type": "enum",
66
+ "values": [
67
+ "digits",
68
+ "alphanumeric"
69
+ ],
70
+ "default": "digits"
71
+ },
72
+ "name": {
73
+ "type": "string",
74
+ "required": false
75
+ },
76
+ "autoComplete": {
77
+ "type": "string",
78
+ "default": "one-time-code"
79
+ },
80
+ "ariaLabel": {
81
+ "type": "string",
82
+ "required": false,
83
+ "note": "required when not wrapped in Field"
84
+ }
85
+ },
86
+ "tokens": [
87
+ "text.primary",
88
+ "icon.muted",
89
+ "surface.card",
90
+ "border.faint",
91
+ "border.focus",
92
+ "border.strong",
93
+ "focus.ring",
94
+ "status.danger",
95
+ "opacity.disabled",
96
+ "radius.control.md",
97
+ "motion.duration.600",
98
+ "motion.ease.linear"
99
+ ],
100
+ "a11y": {
101
+ "element": "input",
102
+ "requirements": [
103
+ "Single native input so paste, autocomplete, and form submit work",
104
+ "id associates with Field htmlFor",
105
+ "Unlabeled needs Field or ariaLabel (default One-time code)",
106
+ "aria-invalid when error",
107
+ "Disabled is exposed on the input"
108
+ ]
109
+ },
110
+ "doNot": [
111
+ "Do not invent InputOTPGroup, InputOTPSlot, or InputOTPSeparator",
112
+ "Do not wrap kit Input N times",
113
+ "Do not add the input-otp package",
114
+ "Do not use raw hex",
115
+ "Do not use Lucide except via LucideByName from @/ui/Button/lucideName",
116
+ "Unlabeled needs Field or ariaLabel"
117
+ ],
118
+ "snippet": "<Field label=\"Verification code\" htmlFor=\"otp\"><InputOTP id=\"otp\" /></Field>"
119
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "id": "insightcard",
3
+ "status": "stable",
4
+ "intent": "A recommended insight or opportunity as a compact card, with tone and optional actions.",
5
+ "useWhen": [
6
+ "surface a recommendation, warning, or finding on a dashboard",
7
+ "next to Scorecards when the metric needs a suggested action"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "one KPI number — Scorecard",
11
+ "login/settings tile — Card",
12
+ "inline page status — Alert",
13
+ "toast — not in kit, ask"
14
+ ],
15
+ "props": {
16
+ "title": {
17
+ "type": "string",
18
+ "required": true
19
+ },
20
+ "description": {
21
+ "type": "string",
22
+ "required": false
23
+ },
24
+ "eyebrow": {
25
+ "type": "string",
26
+ "default": "Insight"
27
+ },
28
+ "tone": {
29
+ "type": "enum",
30
+ "values": [
31
+ "opportunity",
32
+ "warning",
33
+ "danger",
34
+ "info",
35
+ "neutral"
36
+ ],
37
+ "default": "opportunity"
38
+ },
39
+ "size": {
40
+ "type": "enum",
41
+ "values": [
42
+ "sm",
43
+ "md",
44
+ "lg"
45
+ ],
46
+ "default": "md"
47
+ },
48
+ "confidence": {
49
+ "type": "string",
50
+ "required": false,
51
+ "note": "e.g. High confidence"
52
+ },
53
+ "source": {
54
+ "type": "string",
55
+ "required": false,
56
+ "note": "e.g. From last 7 days"
57
+ },
58
+ "primaryAction": {
59
+ "type": "object",
60
+ "required": false,
61
+ "note": "kit Button primary. One primary per view.",
62
+ "label": {
63
+ "type": "string",
64
+ "required": true
65
+ },
66
+ "onClick": {
67
+ "type": "function",
68
+ "required": false
69
+ }
70
+ },
71
+ "secondaryAction": {
72
+ "type": "object",
73
+ "required": false,
74
+ "note": "kit Button secondary",
75
+ "label": {
76
+ "type": "string",
77
+ "required": true
78
+ },
79
+ "onClick": {
80
+ "type": "function",
81
+ "required": false
82
+ }
83
+ },
84
+ "onDismiss": {
85
+ "type": "function",
86
+ "required": false,
87
+ "note": "text Dismiss control, not a Button cousin"
88
+ }
89
+ },
90
+ "tokens": [
91
+ "surface.card",
92
+ "border.highlight",
93
+ "border.faint",
94
+ "radius.surfaceMd",
95
+ "shadow.sm",
96
+ "text.primary",
97
+ "text.secondary",
98
+ "text.muted",
99
+ "icon.brand",
100
+ "icon.secondary",
101
+ "icon.warning",
102
+ "icon.danger",
103
+ "icon.info",
104
+ "space.4",
105
+ "space.6",
106
+ "space.8",
107
+ "type.size.heading",
108
+ "type.size.bodySm",
109
+ "type.size.caption",
110
+ "border.focus"
111
+ ],
112
+ "a11y": {
113
+ "element": "article",
114
+ "requirements": [
115
+ "title is h3 with useId",
116
+ "aria-labelledby",
117
+ "aria-describedby when description",
118
+ "tone icon aria-hidden",
119
+ "Dismiss is a button"
120
+ ]
121
+ },
122
+ "doNot": [
123
+ "Do not invent local InsightCard, Insight, or RecommendationCard",
124
+ "Do not use raw hex",
125
+ "Do not put a metric as the title (that is Scorecard)",
126
+ "Actions must be kit Buttons",
127
+ "One primary per view (the primaryAction is the one)"
128
+ ],
129
+ "snippet": "<InsightCard title=\"Rebook no-shows automatically\" description=\"Fill empty slots from the waitlist when clients cancel.\" tone=\"opportunity\" primaryAction={{ label: \"Review\" }} />"
130
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "id": "linechart",
3
+ "status": "stable",
4
+ "intent": "Change and progress over ordered samples as a line or area chart.",
5
+ "useWhen": [
6
+ "Following a trajectory across time or sequence",
7
+ "Multi-series trends with shared labels"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Comparing unrelated magnitudes at one moment — use BarChart",
11
+ "Part-to-whole share — use PieChart"
12
+ ],
13
+ "props": {
14
+ "data": { "type": "array", "required": false },
15
+ "labels": { "type": "array", "required": false },
16
+ "series": { "type": "array", "required": false },
17
+ "title": { "type": "string", "required": false },
18
+ "description": { "type": "string", "required": false },
19
+ "variant": {
20
+ "type": "enum",
21
+ "values": ["line", "area"],
22
+ "default": "area"
23
+ },
24
+ "showGrid": { "type": "boolean", "default": true },
25
+ "showTable": { "type": "boolean", "default": true },
26
+ "includeZero": { "type": "boolean", "default": false },
27
+ "height": { "type": "number", "default": 240 },
28
+ "emptyLabel": { "type": "string", "default": "No data for this range" }
29
+ },
30
+ "tokens": [
31
+ "surface.card",
32
+ "text.primary",
33
+ "text.muted",
34
+ "border.faint",
35
+ "fill.brand"
36
+ ],
37
+ "a11y": {
38
+ "element": "figure",
39
+ "requirements": [
40
+ "Title on figure when provided",
41
+ "Hover reads the sample",
42
+ "Legend highlight emphasises one series",
43
+ "Table view keeps values readable"
44
+ ]
45
+ },
46
+ "doNot": [
47
+ "Do not invent chart container cousins",
48
+ "Do not use raw hex"
49
+ ],
50
+ "snippet": "<LineChart title=\"Weekly active users\" variant=\"area\" data={[{ label: 'Mon', value: 1240 }]} />"
51
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "id": "loadinganimation",
3
+ "status": "stable",
4
+ "intent": "Square dot-grid loading indicator for compact waits.",
5
+ "useWhen": [
6
+ "Panel or card content is loading",
7
+ "Short blocking fetches inside a region"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Assistant thinking state — use ThinkingAnimation",
11
+ "Determinate progress — use Progress"
12
+ ],
13
+ "props": {
14
+ "label": { "type": "string", "default": "Loading" },
15
+ "size": {
16
+ "type": "enum",
17
+ "values": ["sm", "md", "lg"],
18
+ "default": "md"
19
+ },
20
+ "variant": {
21
+ "type": "enum",
22
+ "values": ["grid"],
23
+ "default": "grid"
24
+ }
25
+ },
26
+ "tokens": ["surface.muted", "text.primary", "border.faint"],
27
+ "a11y": {
28
+ "element": "span[role=status]",
29
+ "requirements": ["role=status", "aria-label describes loading"]
30
+ },
31
+ "doNot": ["Do not use raw hex"],
32
+ "snippet": "<LoadingAnimation label=\"Loading\" size=\"md\" />"
33
+ }
@@ -0,0 +1,100 @@
1
+ {
2
+ "id": "modal",
3
+ "status": "stable",
4
+ "intent": "Dismissible overlay for short tasks, forms, or extra detail. Composes ModalCard. Not a must-choose confirm.",
5
+ "useWhen": [
6
+ "Short forms",
7
+ "Extra detail",
8
+ "Command palettes",
9
+ "Anything that can be dismissed"
10
+ ],
11
+ "doNotUseWhen": [
12
+ "Must-choose confirm — use AlertDialog",
13
+ "Inline status — use Alert",
14
+ "Side panel — use Drawer",
15
+ "Full-page — use a route",
16
+ "Panel without overlay — use ModalCard",
17
+ "Passive help — use Tooltip"
18
+ ],
19
+ "props": {
20
+ "open": {
21
+ "type": "boolean",
22
+ "required": true
23
+ },
24
+ "title": {
25
+ "type": "string",
26
+ "required": true
27
+ },
28
+ "description": {
29
+ "type": "string",
30
+ "required": false
31
+ },
32
+ "size": {
33
+ "type": "enum",
34
+ "values": [
35
+ "sm",
36
+ "md",
37
+ "lg"
38
+ ],
39
+ "default": "md"
40
+ },
41
+ "showClose": {
42
+ "type": "boolean",
43
+ "default": true
44
+ },
45
+ "onClose": {
46
+ "type": "function",
47
+ "required": true
48
+ },
49
+ "children": {
50
+ "type": "slot",
51
+ "required": true,
52
+ "note": "Body"
53
+ },
54
+ "footer": {
55
+ "type": "slot",
56
+ "required": false,
57
+ "note": "kit Buttons / ButtonGroup"
58
+ },
59
+ "contained": {
60
+ "type": "boolean",
61
+ "default": false,
62
+ "note": "In-canvas docs only. Product screens omit it (portal to document.body)."
63
+ }
64
+ },
65
+ "tokens": [
66
+ "text.primary",
67
+ "text.muted",
68
+ "surface.overlay",
69
+ "surface.page",
70
+ "surface.muted",
71
+ "shadow.modal",
72
+ "radius.controlLg",
73
+ "border.focus",
74
+ "motion.overlay",
75
+ "motion.modal",
76
+ "icon.muted",
77
+ "icon.primary",
78
+ "z.overlay",
79
+ "z.modal"
80
+ ],
81
+ "a11y": {
82
+ "element": "dialog",
83
+ "requirements": [
84
+ "Composes ModalCard with role=dialog and aria-modal",
85
+ "Title is the accessible name, description is aria-describedby when present",
86
+ "Focus is trapped while open",
87
+ "Escape closes",
88
+ "Scrim click closes",
89
+ "Focus restores to the previously focused element on close",
90
+ "Unique ids via useId — do not hardcode modal-title"
91
+ ]
92
+ },
93
+ "doNot": [
94
+ "Do not invent local Dialog, Modal, DialogTrigger, or CommandDialog",
95
+ "Do not use raw hex",
96
+ "Do not use AlertDialog for dismissible work",
97
+ "Do not skip the close control unless showClose is false AND footer/body still provide a way out. Scrim click and Escape still close."
98
+ ],
99
+ "snippet": "<Modal open={open} title=\"Edit profile\" description=\"Make changes to your profile.\" onClose={close} footer={<ButtonGroup ariaLabel=\"Modal actions\"><Button variant=\"secondary\" onClick={close}>Cancel</Button><Button variant=\"primary\" onClick={save}>Save</Button></ButtonGroup>}>...</Modal>"
100
+ }
@@ -0,0 +1,88 @@
1
+ {
2
+ "id": "modalcard",
3
+ "status": "stable",
4
+ "intent": "The panel chrome for a modal (title, body, footer). Use inside Modal, or standalone in docs. Not a page Card.",
5
+ "useWhen": [
6
+ "The surface inside a Modal",
7
+ "Showing modal sizes in the catalog without an overlay"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Page tile — use Card",
11
+ "One KPI — use Scorecard",
12
+ "Recommended insight — use InsightCard",
13
+ "Overlay behavior — use Modal",
14
+ "Must-choose confirm — use AlertDialog"
15
+ ],
16
+ "props": {
17
+ "title": {
18
+ "type": "string",
19
+ "required": true
20
+ },
21
+ "description": {
22
+ "type": "string",
23
+ "required": false
24
+ },
25
+ "size": {
26
+ "type": "enum",
27
+ "values": [
28
+ "sm",
29
+ "md",
30
+ "lg"
31
+ ],
32
+ "default": "md"
33
+ },
34
+ "onClose": {
35
+ "type": "function",
36
+ "required": false,
37
+ "note": "X only when provided"
38
+ },
39
+ "children": {
40
+ "type": "slot",
41
+ "required": false,
42
+ "note": "Body"
43
+ },
44
+ "footer": {
45
+ "type": "slot",
46
+ "required": false,
47
+ "note": "kit Buttons / ButtonGroup"
48
+ }
49
+ },
50
+ "tokens": [
51
+ "surface.page",
52
+ "surface.muted",
53
+ "shadow.modal",
54
+ "radius.controlLg",
55
+ "text.primary",
56
+ "text.muted",
57
+ "icon.muted",
58
+ "icon.primary",
59
+ "border.focus",
60
+ "space.inset.md",
61
+ "space.inset.lg",
62
+ "space.inset.xl",
63
+ "space.stack.xs",
64
+ "space.inline.sm",
65
+ "type.size.body",
66
+ "type.size.bodySm",
67
+ "type.size.heading"
68
+ ],
69
+ "a11y": {
70
+ "element": "group",
71
+ "requirements": [
72
+ "role=group when standalone",
73
+ "When used inside Modal: role=dialog, aria-modal=true, tabIndex=-1",
74
+ "Title is the accessible name via aria-labelledby",
75
+ "description is aria-describedby when present",
76
+ "Close is a button with aria-label Close, only when onClose is set",
77
+ "Unique ids via useId"
78
+ ]
79
+ },
80
+ "doNot": [
81
+ "Do not invent local ModalCard, Dialog, or DialogContent",
82
+ "Do not use raw hex",
83
+ "Do not use Card, Scorecard, or InsightCard as modal chrome",
84
+ "Do not add a footer divider",
85
+ "Footer actions must be kit Buttons / ButtonGroup"
86
+ ],
87
+ "snippet": "<ModalCard title=\"Edit profile\" description=\"Make changes to your profile.\" footer={<ButtonGroup ariaLabel=\"Modal actions\"><Button variant=\"secondary\">Cancel</Button><Button variant=\"primary\">Save</Button></ButtonGroup>}>Make changes to your profile here.</ModalCard>"
88
+ }