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,91 @@
1
+ {
2
+ "id": "progresssteps",
3
+ "status": "stable",
4
+ "intent": "Ordered wizard steps as numbered circles with a connecting line. Complete, current, upcoming, and optional error. Horizontal or vertical. One piece.",
5
+ "useWhen": [
6
+ "Checkout, onboarding, or multi-step forms",
7
+ "A required sequence the user walks through in order",
8
+ "Numbered steps with complete, current, and upcoming"
9
+ ],
10
+ "doNotUseWhen": [
11
+ "A determinate percent 0 to 100 — use Progress",
12
+ "A vertical now/next/later roadmap — use Timeline",
13
+ "Peer views the user can switch freely — use Tabs",
14
+ "Paging a list or table — use Pagination"
15
+ ],
16
+ "props": {
17
+ "steps": {
18
+ "type": "array",
19
+ "required": true,
20
+ "note": "{ id, label, description?, status?: complete|current|upcoming|error }[]. Status is derived from current when omitted."
21
+ },
22
+ "current": {
23
+ "type": "number",
24
+ "default": 0,
25
+ "note": "0-based index of the current step. Pass steps.length to mark every step complete."
26
+ },
27
+ "orientation": {
28
+ "type": "enum",
29
+ "values": ["horizontal", "vertical"],
30
+ "default": "horizontal",
31
+ "note": "horizontal is the Untitled UI default. vertical stacks marker, then copy."
32
+ },
33
+ "size": {
34
+ "type": "enum",
35
+ "values": ["sm", "md"],
36
+ "default": "md",
37
+ "note": "Marker is space-6 (sm) or space-8 (md)."
38
+ },
39
+ "ariaLabel": {
40
+ "type": "string",
41
+ "required": false,
42
+ "note": "nav label. Defaults to Progress."
43
+ }
44
+ },
45
+ "tokens": [
46
+ "fill.strong",
47
+ "fill.brandSubtle",
48
+ "fill.danger",
49
+ "text.primary",
50
+ "text.secondary",
51
+ "text.muted",
52
+ "text.brand",
53
+ "text.danger",
54
+ "icon.inverse",
55
+ "surface.card",
56
+ "border.faint",
57
+ "border.strong",
58
+ "border.brand",
59
+ "radius.full",
60
+ "space.1",
61
+ "space.2",
62
+ "space.3",
63
+ "space.4",
64
+ "space.6",
65
+ "space.8",
66
+ "type.size.bodySm",
67
+ "type.size.label",
68
+ "type.size.caption",
69
+ "type.weight.label",
70
+ "type.weight.body",
71
+ "motion.interactionDuration"
72
+ ],
73
+ "a11y": {
74
+ "element": "nav > ol",
75
+ "requirements": [
76
+ "nav with aria-label Progress or ariaLabel",
77
+ "Ordered list of steps",
78
+ "Current step sets aria-current=step",
79
+ "Marker is aria-hidden; status is announced as Completed, Current, Upcoming, or Error with step n of m"
80
+ ]
81
+ },
82
+ "doNot": [
83
+ "Do not invent StepItem, Stepper, ProgressStep, or Icon cousins",
84
+ "Do not use Progress for ordered wizard steps",
85
+ "Do not use Timeline for numbered checkout or onboarding steps",
86
+ "Do not use Tabs for a required sequence",
87
+ "Do not use raw hex",
88
+ "Do not copy Untitled UI CSS or hex"
89
+ ],
90
+ "snippet": "<ProgressSteps current={1} steps={[{ id: 'details', label: 'Your details', description: 'Name and email' }, { id: 'company', label: 'Company details' }]} />"
91
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "id": "radiogroup",
3
+ "status": "stable",
4
+ "intent": "Choose exactly one option from a small visible set. Custom circle, not a native radio. One piece.",
5
+ "useWhen": [
6
+ "Two to six mutually exclusive options that should stay visible",
7
+ "Settings where users compare options side by side"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Long option lists \u2014 use Select",
11
+ "Independent booleans \u2014 use Checkbox",
12
+ "Instant on/off \u2014 use Switch",
13
+ "Tabs for panel switching \u2014 use Tabs"
14
+ ],
15
+ "props": {
16
+ "name": {
17
+ "type": "string",
18
+ "required": true
19
+ },
20
+ "legend": {
21
+ "type": "string",
22
+ "required": true,
23
+ "note": "Fieldset legend."
24
+ },
25
+ "size": {
26
+ "type": "enum",
27
+ "values": [
28
+ "sm",
29
+ "md",
30
+ "lg"
31
+ ],
32
+ "default": "md"
33
+ },
34
+ "orientation": {
35
+ "type": "enum",
36
+ "values": [
37
+ "vertical",
38
+ "horizontal"
39
+ ],
40
+ "default": "vertical"
41
+ },
42
+ "options": {
43
+ "type": "array",
44
+ "itemShape": {
45
+ "value": "string",
46
+ "label": "string",
47
+ "description": "string?",
48
+ "badge": "string?",
49
+ "badgeTone": "BadgeTone?",
50
+ "disabled": "boolean?"
51
+ },
52
+ "required": true
53
+ },
54
+ "defaultValue": {
55
+ "type": "string",
56
+ "required": false
57
+ },
58
+ "value": {
59
+ "type": "string",
60
+ "required": false,
61
+ "note": "controlled"
62
+ },
63
+ "onChange": {
64
+ "type": "function",
65
+ "required": false,
66
+ "note": "(value: string) => void"
67
+ },
68
+ "disabled": {
69
+ "type": "boolean",
70
+ "default": false,
71
+ "note": "Locks the whole group."
72
+ },
73
+ "error": {
74
+ "type": "string",
75
+ "required": false,
76
+ "note": "Group error message. Tints the radios."
77
+ },
78
+ "hint": {
79
+ "type": "string",
80
+ "required": false
81
+ },
82
+ "hideLegend": {
83
+ "type": "boolean",
84
+ "default": false,
85
+ "note": "Keeps the legend for assistive tech, hides it visually. Use when Drawer already shows the title."
86
+ },
87
+ "layout": {
88
+ "type": "enum",
89
+ "values": [
90
+ "list",
91
+ "card"
92
+ ],
93
+ "default": "list",
94
+ "note": "card is bordered rows with the radio on the right. Compose Badge via option.badge."
95
+ }
96
+ },
97
+ "tokens": [
98
+ "text.primary",
99
+ "text.muted",
100
+ "text.danger",
101
+ "text.disabled",
102
+ "border.strong",
103
+ "border.focus",
104
+ "action.primary",
105
+ "action.danger",
106
+ "surface.page",
107
+ "radius.pill",
108
+ "surface.card",
109
+ "surface.muted",
110
+ "radius.surfaceMd"
111
+ ],
112
+ "a11y": {
113
+ "element": "fieldset",
114
+ "requirements": [
115
+ "legend names the group",
116
+ "Each radio is a native input type=radio with a visible label",
117
+ "error sets aria-invalid on the group and options",
118
+ "Disabled options stay in the a11y tree but cannot be selected"
119
+ ]
120
+ },
121
+ "doNot": [
122
+ "Do not invent Radio, RadioGroupItem, or RadioGroupLegend cousins",
123
+ "Do not use a native unstyled radio with accent-color",
124
+ "Do not use raw hex",
125
+ "Do not use for tabbed content \u2014 use Tabs",
126
+ "Do not use for multi-select \u2014 use Checkbox"
127
+ ],
128
+ "snippet": "<RadioGroup name=\"plan\" legend=\"Plan\" size=\"lg\" defaultValue=\"pro\" options={[\n { value: 'starter', label: 'Starter' },\n { value: 'pro', label: 'Studio Pro' },\n]} />",
129
+ "contains": [
130
+ "badge"
131
+ ]
132
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "id": "scoreboard",
3
+ "status": "stable",
4
+ "intent": "Metrics strip of kit Scorecards. Two to four fill the row. More than four compose Carousel.",
5
+ "useWhen": [
6
+ "Showing two or more KPIs side by side at the top of a dashboard",
7
+ "Replacing ad-hoc flex rows of metric boxes"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "A single KPI \u2014 render Scorecard directly",
11
+ "Vertical stacks of metrics \u2014 not supported by this contract"
12
+ ],
13
+ "contains": [
14
+ "scorecard",
15
+ "carousel"
16
+ ],
17
+ "props": {
18
+ "items": {
19
+ "type": "array",
20
+ "itemContract": "scorecard",
21
+ "required": true,
22
+ "minItems": 2,
23
+ "note": "2\u20134 fill equal columns. More than 4 pages four-up in kit Carousel."
24
+ }
25
+ },
26
+ "tokens": [
27
+ "surface.page",
28
+ "layout.metricsMin",
29
+ "space.4"
30
+ ],
31
+ "a11y": {
32
+ "element": "section",
33
+ "requirements": [
34
+ "Expose aria-label describing the metrics group",
35
+ "Each child Scorecard retains its own semantics"
36
+ ]
37
+ },
38
+ "doNot": [
39
+ "Do not invent a local Scoreboard",
40
+ "Do not fake dividers with CSS borders between items",
41
+ "Do not restyle Scorecard padding or borders inside Scoreboard",
42
+ "Do not inline Scorecard markup \u2014 import from ui/Scorecard",
43
+ "More than four items \u2014 Scoreboard composes kit Carousel, do not invent a local scroller"
44
+ ],
45
+ "snippet": "<Scoreboard items={[{ label: 'Revenue', value: '$48.2k', delta: '+12.4%', trend: 'up' }, { label: 'Churn', value: '1.2%', delta: '-0.3%', trend: 'down' }, { label: 'Users', value: '12.4k', delta: '+4.1%', trend: 'up' }, { label: 'NPS', value: '64', delta: '+2', trend: 'up' }]} />"
46
+ }
@@ -0,0 +1,124 @@
1
+ {
2
+ "id": "scorecard",
3
+ "status": "stable",
4
+ "intent": "one KPI with label, value, optional delta/trend/hint/badge",
5
+ "useWhen": [
6
+ "Showing a single metric such as revenue, users, or conversion rate"
7
+ ],
8
+ "doNotUseWhen": [
9
+ "Multiple metrics \u2014 use Scoreboard",
10
+ "Charts, sparklines, or tables \u2014 out of scope for this contract",
11
+ "A framed content tile \u2014 use Card",
12
+ "A recommended action tile \u2014 use InsightCard"
13
+ ],
14
+ "props": {
15
+ "label": {
16
+ "type": "string",
17
+ "required": true
18
+ },
19
+ "value": {
20
+ "type": "string",
21
+ "required": true
22
+ },
23
+ "delta": {
24
+ "type": "string",
25
+ "required": false,
26
+ "note": "Visible change text, e.g. '+12.4%'"
27
+ },
28
+ "trend": {
29
+ "type": "enum",
30
+ "values": [
31
+ "up",
32
+ "down",
33
+ "flat",
34
+ "neutral"
35
+ ],
36
+ "default": "neutral"
37
+ },
38
+ "hint": {
39
+ "type": "string",
40
+ "required": false,
41
+ "note": "Supporting context, e.g. 'vs last 30 days'"
42
+ },
43
+ "size": {
44
+ "type": "enum",
45
+ "values": [
46
+ "sm",
47
+ "md",
48
+ "lg"
49
+ ],
50
+ "default": "md"
51
+ },
52
+ "badge": {
53
+ "type": "string",
54
+ "required": false,
55
+ "note": "kit Badge on the header, aligned with label. Compose Badge. No Tag."
56
+ },
57
+ "badgeTone": {
58
+ "type": "enum",
59
+ "values": [
60
+ "neutral",
61
+ "brand",
62
+ "success",
63
+ "warning",
64
+ "danger",
65
+ "info"
66
+ ],
67
+ "default": "neutral",
68
+ "note": "kit Badge tone"
69
+ },
70
+ "onClick": {
71
+ "type": "function",
72
+ "required": false,
73
+ "note": "When set, the whole card is a button that opens a detail view"
74
+ },
75
+ "fill": {
76
+ "type": "boolean",
77
+ "default": false,
78
+ "note": "Stretch to the parent width. Scoreboard passes fill so cards share the row."
79
+ }
80
+ },
81
+ "tokens": [
82
+ "surface.card",
83
+ "border.highlight",
84
+ "border.faint",
85
+ "border.strong",
86
+ "radius.surfaceMd",
87
+ "text.primary",
88
+ "text.secondary",
89
+ "text.muted",
90
+ "text.success",
91
+ "text.danger",
92
+ "type.size.caption",
93
+ "type.size.heading",
94
+ "type.size.title",
95
+ "type.size.metric",
96
+ "type.weight.caption",
97
+ "type.weight.metric",
98
+ "space.stack.sm",
99
+ "space.inset.md",
100
+ "motion.interaction",
101
+ "border.focus"
102
+ ],
103
+ "a11y": {
104
+ "element": "article",
105
+ "requirements": [
106
+ "useId for label and value",
107
+ "aria-labelledby when both exist",
108
+ "trend icon is aria-hidden",
109
+ "delta text is the visible change",
110
+ "root is a button when onClick is set"
111
+ ]
112
+ },
113
+ "doNot": [
114
+ "Do not invent a KpiCard, Stat, or MetricCard cousin",
115
+ "Do not use raw hex colors in styles",
116
+ "Do not pack multiple KPIs into one Scorecard",
117
+ "Do not put buttons or links inside Scorecard besides the whole-card onClick",
118
+ "Do not invent a local Tag or Status on Scorecard \u2014 use kit Badge via badge"
119
+ ],
120
+ "snippet": "<Scorecard label=\"Revenue\" value=\"$48.2k\" delta=\"+12.4%\" trend=\"up\" hint=\"vs last 30 days\" />",
121
+ "contains": [
122
+ "badge"
123
+ ]
124
+ }
@@ -0,0 +1,97 @@
1
+ {
2
+ "id": "section",
3
+ "status": "stable",
4
+ "intent": "Grouped page block with optional heading, description, and actions. Collapsible, chevron before the title.",
5
+ "useWhen": [
6
+ "Separating metrics, tables, or form groups on a page",
7
+ "Under PageHeader to structure dashboard or settings content"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Whole page title \u2014 use PageHeader",
11
+ "Framed tiles \u2014 use Card",
12
+ "Form legends and grouped fields \u2014 use FieldSet",
13
+ "Modal body layout \u2014 keep content minimal inside Modal",
14
+ "App-wide navigation \u2014 use AppNav",
15
+ "Exclusive FAQ lists \u2014 use Accordion"
16
+ ],
17
+ "props": {
18
+ "title": {
19
+ "type": "string",
20
+ "required": false
21
+ },
22
+ "description": {
23
+ "type": "string",
24
+ "required": false
25
+ },
26
+ "size": {
27
+ "type": "enum",
28
+ "values": [
29
+ "sm",
30
+ "md",
31
+ "lg"
32
+ ],
33
+ "default": "md",
34
+ "note": "Controls gap under the heading and between stacked sections via space-section tokens"
35
+ },
36
+ "actions": {
37
+ "type": "slot",
38
+ "required": false,
39
+ "note": "kit Buttons only. One primary per view."
40
+ },
41
+ "children": {
42
+ "type": "slot",
43
+ "required": true
44
+ },
45
+ "collapsible": {
46
+ "type": "boolean",
47
+ "default": true,
48
+ "note": "When title is set, a chevron sits before the title and toggles the body. False keeps the body always open."
49
+ },
50
+ "defaultOpen": {
51
+ "type": "boolean",
52
+ "default": true
53
+ },
54
+ "open": {
55
+ "type": "boolean",
56
+ "required": false,
57
+ "note": "controlled"
58
+ },
59
+ "onOpenChange": {
60
+ "type": "function",
61
+ "required": false,
62
+ "note": "(open: boolean) => void"
63
+ }
64
+ },
65
+ "tokens": [
66
+ "text.primary",
67
+ "text.secondary",
68
+ "type.size.heading",
69
+ "type.size.bodySm",
70
+ "space.section.sm",
71
+ "space.section.md",
72
+ "space.section.lg",
73
+ "space.stack.sm",
74
+ "space.stack.md",
75
+ "space.stack.lg"
76
+ ],
77
+ "a11y": {
78
+ "element": "section",
79
+ "requirements": [
80
+ "title is h2 with useId",
81
+ "aria-labelledby when title is set",
82
+ "Collapse control is a button inside the h2, aria-expanded and aria-controls",
83
+ "Body uses hidden when collapsed"
84
+ ]
85
+ },
86
+ "doNot": [
87
+ "Do not invent a local Section or SectionHeader",
88
+ "Do not use raw hex",
89
+ "Do not frame Section \u2014 that is Card",
90
+ "Do not use Section as the page title \u2014 that is PageHeader",
91
+ "Do not embed one-off metric flex rows \u2014 use Scoreboard",
92
+ "Actions must be kit Buttons",
93
+ "Do not compose Accordion or Collapsible for page sections \u2014 Section owns collapse"
94
+ ],
95
+ "snippet": "<Section title=\"Recent activity\" description=\"Last 30 days\" actions={<Button variant=\"secondary\" size=\"sm\">View all</Button>}><Table ... /></Section>",
96
+ "contains": []
97
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "id": "select",
3
+ "status": "stable",
4
+ "intent": "Choose one or several options from a list. Field trigger, kit DropdownMenu panel. Not a native select.",
5
+ "useWhen": [
6
+ "Choosing one value in a Field",
7
+ "Choosing several values from a list (multiple)",
8
+ "A long fixed list with local search (searchable)",
9
+ "Short fixed lists such as month, year, timezone, or tags"
10
+ ],
11
+ "doNotUseWhen": [
12
+ "Command palettes \u2014 use Command",
13
+ "Actions from a button \u2014 use DropdownMenu",
14
+ "Mutually exclusive choices with visible options \u2014 prefer RadioGroup"
15
+ ],
16
+ "contains": [
17
+ "dropdownmenu"
18
+ ],
19
+ "props": {
20
+ "id": {
21
+ "type": "string",
22
+ "required": true
23
+ },
24
+ "size": {
25
+ "type": "enum",
26
+ "values": [
27
+ "md",
28
+ "sm"
29
+ ],
30
+ "default": "md"
31
+ },
32
+ "options": {
33
+ "type": "array",
34
+ "itemShape": {
35
+ "value": "string",
36
+ "label": "string"
37
+ },
38
+ "required": true
39
+ },
40
+ "disabled": {
41
+ "type": "boolean",
42
+ "default": false
43
+ },
44
+ "error": {
45
+ "type": "boolean",
46
+ "default": false
47
+ },
48
+ "multiple": {
49
+ "type": "boolean",
50
+ "default": false,
51
+ "note": "Several values. Menu stays open. Checks each pick. Trigger lists labels. Not a MultiSelect cousin."
52
+ },
53
+ "placeholder": {
54
+ "type": "string",
55
+ "required": false,
56
+ "note": "Shown until a value is picked. Muted field text. When set and no defaultValue, start empty."
57
+ },
58
+ "defaultValue": {
59
+ "type": "string | string[]",
60
+ "required": false,
61
+ "note": "string when single, string[] when multiple"
62
+ },
63
+ "value": {
64
+ "type": "string | string[]",
65
+ "required": false,
66
+ "note": "controlled"
67
+ },
68
+ "onChange": {
69
+ "type": "function",
70
+ "required": false,
71
+ "note": "(value: string | string[]) => void"
72
+ },
73
+ "name": {
74
+ "type": "string",
75
+ "required": false
76
+ },
77
+ "ariaLabel": {
78
+ "type": "string",
79
+ "required": false,
80
+ "note": "When there is no Field label, such as a DataTable Cell."
81
+ },
82
+ "itemCheck": {
83
+ "type": "enum",
84
+ "values": [
85
+ "check",
86
+ "checkbox"
87
+ ],
88
+ "default": "check",
89
+ "note": "checkbox composes kit Checkbox in the menu when multiple. Visual only. Not DropdownMenuCheckboxItem."
90
+ },
91
+ "maxVisible": {
92
+ "type": "number",
93
+ "required": false,
94
+ "note": "When multiple and selected count exceeds this, trigger shows the first labels plus a kit Badge +N. Omit to list all labels."
95
+ },
96
+ "searchable": {
97
+ "type": "boolean",
98
+ "default": false,
99
+ "note": "Kit Input at the top of the panel. Filters option labels. For a long fixed list. Not Command."
100
+ }
101
+ },
102
+ "tokens": [
103
+ "text.primary",
104
+ "text.muted",
105
+ "surface.card",
106
+ "surface.muted",
107
+ "border.faint",
108
+ "border.focus",
109
+ "status.danger"
110
+ ],
111
+ "a11y": {
112
+ "element": "button",
113
+ "requirements": [
114
+ "Trigger is a field-styled button with aria-haspopup=menu",
115
+ "Must have associated label via Field or ariaLabel",
116
+ "Each option needs a human-readable label",
117
+ "Selected options show a Check, or kit Checkbox when itemCheck=checkbox",
118
+ "Overflow count uses kit Badge on the trigger, not Tag"
119
+ ]
120
+ },
121
+ "doNot": [
122
+ "Do not use a native select",
123
+ "Do not use kit Button as the Select trigger \u2014 Select uses DropdownMenu triggerStyle=field",
124
+ "Do not invent SelectTrigger, SelectContent, SelectItem, SelectValue, SelectGroup, MultiSelect, or Combobox",
125
+ "Do not invent Tag for overflow \u2014 use kit Badge",
126
+ "Do not use raw hex",
127
+ "Do not use for navigation \u2014 use AppNav or links"
128
+ ],
129
+ "snippet": "<Field label=\"Fruit\" htmlFor=\"fruit\">\n <Select id=\"fruit\" placeholder=\"Select a fruit\" options={[{ value: 'apple', label: 'Apple' }]} />\n</Field>\n<Select id=\"fruits\" multiple itemCheck=\"checkbox\" maxVisible={2} placeholder=\"Select fruits\" options={fruits} />\n<Select id=\"city\" searchable placeholder=\"Select a city\" options={cities} />"
130
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "id": "shimmertext",
3
+ "status": "stable",
4
+ "intent": "Animated text for short indeterminate processing copy.",
5
+ "useWhen": [
6
+ "Generating or loading message placeholders",
7
+ "Swap to real content when ready"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Static headings or body copy",
11
+ "Long paragraphs of final content"
12
+ ],
13
+ "props": {
14
+ "children": { "type": "string", "required": true },
15
+ "size": {
16
+ "type": "enum",
17
+ "values": ["sm", "md", "lg"],
18
+ "default": "md"
19
+ },
20
+ "speed": {
21
+ "type": "enum|number",
22
+ "values": ["slow", "normal", "fast"],
23
+ "default": "normal"
24
+ }
25
+ },
26
+ "tokens": ["text.primary", "text.muted"],
27
+ "a11y": {
28
+ "element": "span",
29
+ "requirements": ["aria-label mirrors visible text", "Respect prefers-reduced-motion"]
30
+ },
31
+ "doNot": ["Do not use raw hex"],
32
+ "snippet": "<ShimmerText speed=\"normal\">Generating response…</ShimmerText>"
33
+ }