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,133 @@
1
+ {
2
+ "id": "sidenav",
3
+ "status": "stable",
4
+ "intent": "Product side nav: brand header, icon items, optional badges, closeable. Not AppNav. Not Drawer.",
5
+ "useWhen": [
6
+ "Product app chrome",
7
+ "Persistent nav with icons"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Docs catalog \u2014 use AppNav",
11
+ "Overlay task panel \u2014 use Drawer",
12
+ "Centered short task \u2014 use Modal",
13
+ "Horizontal site nav \u2014 use NavigationMenu",
14
+ "Product top bar with logo and search \u2014 use AppHeader"
15
+ ],
16
+ "props": {
17
+ "title": {
18
+ "type": "string",
19
+ "required": true,
20
+ "note": "Brand title in the header. Accessible name on the aside when showHeader is false"
21
+ },
22
+ "mark": {
23
+ "type": "string",
24
+ "required": false,
25
+ "note": "Brand letter. Defaults to the first character of title"
26
+ },
27
+ "showHeader": {
28
+ "type": "boolean",
29
+ "default": true,
30
+ "note": "Brand mark, title, and close. Set false when AppHeader already provides brand. Rail stays expanded."
31
+ },
32
+ "radius": {
33
+ "type": "enum",
34
+ "values": [
35
+ "md",
36
+ "none"
37
+ ],
38
+ "default": "md",
39
+ "note": "Rail corners. md is radius-surface-md. none is a flush square column next to AppHeader."
40
+ },
41
+ "open": {
42
+ "type": "boolean",
43
+ "required": false,
44
+ "note": "controlled"
45
+ },
46
+ "defaultOpen": {
47
+ "type": "boolean",
48
+ "default": true
49
+ },
50
+ "onOpenChange": {
51
+ "type": "function",
52
+ "required": false,
53
+ "note": "(open: boolean) => void"
54
+ },
55
+ "side": {
56
+ "type": "enum",
57
+ "values": [
58
+ "left",
59
+ "right"
60
+ ],
61
+ "default": "left",
62
+ "note": "Does not position SideNav. The consumer shell uses row-reverse for right"
63
+ },
64
+ "groups": {
65
+ "type": "array",
66
+ "required": false,
67
+ "note": "Labeled sections of SideNavItem. Takes precedence over items"
68
+ },
69
+ "items": {
70
+ "type": "array",
71
+ "required": false,
72
+ "note": "Flat list when groups is omitted. Leaf onClick is in-app select; href is a link when onClick is omitted."
73
+ },
74
+ "footer": {
75
+ "type": "object",
76
+ "required": false,
77
+ "note": "Single footer row (e.g. Settings)"
78
+ }
79
+ },
80
+ "tokens": [
81
+ "text.primary",
82
+ "text.secondary",
83
+ "text.brand",
84
+ "text.disabled",
85
+ "surface.card",
86
+ "surface.muted",
87
+ "surface.brandSubtle",
88
+ "surface.disabled",
89
+ "border.subtle",
90
+ "border.faint",
91
+ "border.surface",
92
+ "border.divider",
93
+ "fill.brand",
94
+ "brand.onBrand",
95
+ "icon.secondary",
96
+ "icon.brand",
97
+ "icon.muted",
98
+ "focus.ring",
99
+ "layout.sidebar",
100
+ "layout.sidebarCompact",
101
+ "radius.surfaceMd",
102
+ "radius.controlMd",
103
+ "radius.0",
104
+ "motion.expand.duration",
105
+ "motion.expand.easing",
106
+ "motion.overlay.duration",
107
+ "motion.overlay.easing"
108
+ ],
109
+ "a11y": {
110
+ "element": "aside",
111
+ "requirements": [
112
+ "In-flow aside, not a dialog and not position:fixed",
113
+ "No overlay, no focus trap, no Escape-to-close",
114
+ "Close is a kit Button with PanelLeftClose or PanelRightClose and ariaLabel Close",
115
+ "Closed rail reopens via the brand mark button with ariaLabel Open",
116
+ "Title is visible in the header when open; clipped when closed",
117
+ "When showHeader is false, omit the header and close; title remains the accessible name via aria-label",
118
+ "Active leaf uses aria-current=page",
119
+ "Parent with nested items is a disclosure with aria-expanded",
120
+ "Closed rail keeps labels available as sr-only text"
121
+ ]
122
+ },
123
+ "doNot": [
124
+ "Do not invent Sidebar, SidebarHeader, SidebarNav, SidebarSection, SidebarItem, SidebarSubmenu, SidebarFooter, SidebarProvider, SidebarTrigger, SidebarContent, SidebarGroup, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarInset, or SidebarRail",
125
+ "Do not compose AppNav inside SideNav",
126
+ "Do not use Drawer for persistent app chrome",
127
+ "Do not use AppNav as closeable product chrome",
128
+ "Do not use position:fixed, an overlay, a focus trap, or Escape-to-close",
129
+ "Do not use the shadcn sidebar package",
130
+ "Do not use raw hex"
131
+ ],
132
+ "snippet": "<SideNav title=\"Agentix\" mark=\"A\" open={open} onOpenChange={setOpen} groups={groups} footer={[{ id: \"invite\", label: \"Invite members\", icon: \"CirclePlus\" }, { id: \"settings\", label: \"Settings\", icon: \"Settings\" }]} />"
133
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ "id": "slider",
3
+ "status": "stable",
4
+ "intent": "Pick a value or range along a track. One piece. Range is a two-value array, not a RangeSlider cousin.",
5
+ "useWhen": [
6
+ "Adjust a numeric setting on a continuous scale",
7
+ "Pick a min and max range for filters",
8
+ "Volume, brightness, or percent controls in a form"
9
+ ],
10
+ "doNotUseWhen": [
11
+ "Discrete choices from a short list — use RadioGroup or Select",
12
+ "On/off settings — use Switch",
13
+ "Determinate task completion — use Progress"
14
+ ],
15
+ "props": {
16
+ "value": {
17
+ "type": "number | number[]",
18
+ "required": true,
19
+ "note": "Current value. Single number for one thumb. Two numbers for a range."
20
+ },
21
+ "min": {
22
+ "type": "number",
23
+ "default": 0
24
+ },
25
+ "max": {
26
+ "type": "number",
27
+ "default": 100
28
+ },
29
+ "step": {
30
+ "type": "number",
31
+ "default": 1
32
+ },
33
+ "orientation": {
34
+ "type": "enum",
35
+ "values": ["horizontal", "vertical"],
36
+ "default": "horizontal",
37
+ "note": "Vertical is orientation, not a VerticalSlider cousin."
38
+ },
39
+ "disabled": {
40
+ "type": "boolean",
41
+ "default": false
42
+ },
43
+ "onValueChange": {
44
+ "type": "function",
45
+ "required": false,
46
+ "note": "Called with the next value or value array."
47
+ }
48
+ },
49
+ "tokens": [
50
+ "fill.brand",
51
+ "fill.subtle",
52
+ "surface.card",
53
+ "border.faint",
54
+ "border.strong",
55
+ "action.primary",
56
+ "action.onPrimary",
57
+ "focus.ring",
58
+ "radius.pill",
59
+ "radius.full",
60
+ "space.1",
61
+ "space.2",
62
+ "motion.interactionDuration",
63
+ "motion.interactionEasing"
64
+ ],
65
+ "a11y": {
66
+ "element": "span[role=slider]",
67
+ "requirements": [
68
+ "Each thumb has role=slider",
69
+ "aria-valuemin, aria-valuemax, aria-valuenow on each thumb",
70
+ "Arrow keys adjust by step. Home and End jump to min and max",
71
+ "Focus ring on thumb focus-visible"
72
+ ]
73
+ },
74
+ "doNot": [
75
+ "Do not invent SliderTrack, SliderThumb, SliderRange, RangeSlider, or VerticalSlider",
76
+ "Do not use raw hex",
77
+ "Do not use radix or @base-ui/react",
78
+ "Do not use a native range input"
79
+ ],
80
+ "snippet": "<Slider value={33} onValueChange={setValue} />\n<Slider value={[25, 75]} onValueChange={setRange} />\n<Slider value={50} orientation=\"vertical\" disabled />"
81
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "id": "spinner",
3
+ "status": "stable",
4
+ "intent": "Spinning circular loader for indeterminate waits. One piece. Distinct from LoadingAnimation dot-grid.",
5
+ "useWhen": [
6
+ "Button or inline action is processing",
7
+ "Short indeterminate page or panel load",
8
+ "Waiting state with no known percent"
9
+ ],
10
+ "doNotUseWhen": [
11
+ "Square dot-grid compact wait — use LoadingAnimation",
12
+ "Assistant thinking — use ThinkingAnimation",
13
+ "Known percent completion — use Progress"
14
+ ],
15
+ "props": {
16
+ "size": {
17
+ "type": "enum",
18
+ "values": ["sm", "md", "lg"],
19
+ "default": "md"
20
+ },
21
+ "label": {
22
+ "type": "string",
23
+ "required": false,
24
+ "note": "Visible label beside the spinner. When omitted, aria-label is Loading."
25
+ }
26
+ },
27
+ "tokens": [
28
+ "icon.secondary",
29
+ "text.secondary",
30
+ "type.size.caption",
31
+ "type.size.label",
32
+ "type.size.bodySm",
33
+ "space.2",
34
+ "motion.duration600",
35
+ "motion.easeLinear"
36
+ ],
37
+ "a11y": {
38
+ "element": "span[role=status]",
39
+ "requirements": [
40
+ "role=status with aria-live=polite",
41
+ "aria-label Loading when label is omitted",
42
+ "Visible label is not duplicated in aria-label"
43
+ ]
44
+ },
45
+ "doNot": [
46
+ "Do not invent SpinnerIcon or merge Spinner into LoadingAnimation",
47
+ "Do not add Spinner as a LoadingAnimation variant",
48
+ "Do not change Button to accept spinner children",
49
+ "Do not use raw hex"
50
+ ],
51
+ "snippet": "<Spinner />\n<Spinner size=\"lg\" label=\"Processing payment…\" />\n<div style={{ display: \"flex\", gap: \"var(--space-2)\", alignItems: \"center\" }}><Spinner size=\"sm\" /><Button disabled>Loading…</Button></div>"
52
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "id": "switch",
3
+ "status": "stable",
4
+ "intent": "Immediate on/off setting. Pill track, role=switch. Not a Checkbox.",
5
+ "useWhen": [
6
+ "Settings rows (notifications, dark mode)",
7
+ "Binary preference that takes effect now"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Multi-select or agree-to-terms — use Checkbox",
11
+ "Choosing one of several options — use RadioGroup",
12
+ "Primary form submit actions — use Button"
13
+ ],
14
+ "props": {
15
+ "id": {
16
+ "type": "string",
17
+ "required": false,
18
+ "note": "useId fallback"
19
+ },
20
+ "label": {
21
+ "type": "string",
22
+ "required": false,
23
+ "note": "visible text; required unless ariaLabel is set"
24
+ },
25
+ "ariaLabel": {
26
+ "type": "string",
27
+ "required": false,
28
+ "note": "required when label is omitted"
29
+ },
30
+ "size": {
31
+ "type": "enum",
32
+ "values": [
33
+ "sm",
34
+ "md",
35
+ "lg"
36
+ ],
37
+ "default": "md"
38
+ },
39
+ "disabled": {
40
+ "type": "boolean",
41
+ "default": false
42
+ },
43
+ "checked": {
44
+ "type": "boolean",
45
+ "required": false,
46
+ "note": "controlled"
47
+ },
48
+ "defaultChecked": {
49
+ "type": "boolean",
50
+ "default": false,
51
+ "note": "uncontrolled"
52
+ },
53
+ "onChange": {
54
+ "type": "function",
55
+ "required": false,
56
+ "note": "(checked: boolean) => void"
57
+ }
58
+ },
59
+ "tokens": [
60
+ "text.primary",
61
+ "text.disabled",
62
+ "action.primary",
63
+ "action.primaryHover",
64
+ "action.secondary",
65
+ "action.onPrimary",
66
+ "border.faint",
67
+ "border.strong",
68
+ "border.control",
69
+ "radius.pill",
70
+ "focus.ring",
71
+ "opacity.disabled",
72
+ "motion.modalDuration",
73
+ "motion.easeSpring"
74
+ ],
75
+ "a11y": {
76
+ "element": "button[role=switch]",
77
+ "requirements": [
78
+ "role=switch",
79
+ "aria-checked reflects on/off",
80
+ "Keyboard uses button defaults (Space/Enter)",
81
+ "focus-visible kit ring",
82
+ "Disabled state is exposed",
83
+ "Visible label via label/htmlFor OR ariaLabel when unlabeled"
84
+ ]
85
+ },
86
+ "doNot": [
87
+ "Do not invent local Switch, Toggle, or ToggleGroup",
88
+ "Do not use Checkbox for instant settings",
89
+ "Do not use raw hex",
90
+ "Do not ship unlabeled without ariaLabel",
91
+ "Do not export Thumb or SwitchGroup"
92
+ ],
93
+ "snippet": "<Switch label=\"Notifications\" />\n<Switch ariaLabel=\"Dark mode\" />"
94
+ }
@@ -0,0 +1,92 @@
1
+ {
2
+ "id": "table",
3
+ "status": "stable",
4
+ "intent": "Simple semantic table for invoices, lists, and text rows. Search and filters belong on DataTable. One piece.",
5
+ "useWhen": [
6
+ "Listing invoices, products, or other short text rows",
7
+ "Inside Section on dashboard or list-detail patterns"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Search, filters, selection, or column settings — use DataTable",
11
+ "Layout for metrics — use Scoreboard",
12
+ "Forms — use Field and inputs"
13
+ ],
14
+ "props": {
15
+ "columns": {
16
+ "type": "array",
17
+ "itemShape": {
18
+ "key": "string",
19
+ "header": "string",
20
+ "align": "start | end?",
21
+ "numeric": "boolean?",
22
+ "emphasis": "boolean?"
23
+ },
24
+ "required": true,
25
+ "note": "numeric or align end right-aligns the column. emphasis or the first column is medium + text-primary."
26
+ },
27
+ "rows": {
28
+ "type": "array",
29
+ "itemShape": "Record<string, string | number | React.ReactNode>",
30
+ "required": true,
31
+ "note": "Values render in native td. ReactNode allowed so Actions can put kit DropdownMenu in a cell."
32
+ },
33
+ "caption": {
34
+ "type": "string",
35
+ "required": false,
36
+ "note": "Renders below the grid (caption-side bottom). Not a heading above the table."
37
+ },
38
+ "size": {
39
+ "type": "enum",
40
+ "values": [
41
+ "sm",
42
+ "md",
43
+ "lg"
44
+ ],
45
+ "default": "md",
46
+ "note": "md is compact: th 2.5rem, td padding space-2. sm a hair tighter, lg a hair roomier. Do not recreate DataTable 3–4rem rows."
47
+ },
48
+ "emptyLabel": {
49
+ "type": "string",
50
+ "default": "No results.",
51
+ "note": "Shown in one td with colSpan when rows is empty."
52
+ },
53
+ "footer": {
54
+ "type": "object",
55
+ "required": false,
56
+ "itemShape": {
57
+ "label": "string",
58
+ "value": "string | number"
59
+ },
60
+ "note": "Renders tfoot one row: label in a td colSpan={columns.length-1}, value in last td end-aligned."
61
+ }
62
+ },
63
+ "tokens": [
64
+ "surface.muted",
65
+ "text.primary",
66
+ "text.secondary",
67
+ "text.muted",
68
+ "border.faint",
69
+ "type.size.bodySm",
70
+ "type.weight.label",
71
+ "space.2",
72
+ "space.4",
73
+ "motion.interaction"
74
+ ],
75
+ "a11y": {
76
+ "element": "table",
77
+ "requirements": [
78
+ "Column headers in thead with th scope=col",
79
+ "Optional caption describes the table and sits below",
80
+ "Empty state is one td with colSpan=columns.length and emptyLabel",
81
+ "Optional footer is tfoot with label spanning leading columns and value end-aligned"
82
+ ]
83
+ },
84
+ "doNot": [
85
+ "Do not invent TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, or TableCaption cousins",
86
+ "Do not compose HeaderCell or Cell — those stay on DataTable",
87
+ "Search, filters, selection — use DataTable",
88
+ "Do not add @tanstack/react-table",
89
+ "Do not use raw hex"
90
+ ],
91
+ "snippet": "<Table caption=\"A list of your recent invoices.\" columns={[{ key: 'invoice', header: 'Invoice', emphasis: true }, { key: 'status', header: 'Status' }, { key: 'method', header: 'Method' }, { key: 'amount', header: 'Amount', numeric: true, align: 'end' }]} rows={[{ invoice: 'INV001', status: 'Paid', method: 'Credit Card', amount: '$250.00' }]} footer={{ label: 'Total', value: '$2,500.00' }} emptyLabel=\"No results.\" />"
92
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "id": "tabs",
3
+ "status": "stable",
4
+ "intent": "Switch between related views in place. Segmented or line, in lg, md, and sm.",
5
+ "useWhen": [
6
+ "Grouped settings or detail sections on one page",
7
+ "Two to five peer views sharing one context",
8
+ "Compact local switching such as preview and code"
9
+ ],
10
+ "doNotUseWhen": [
11
+ "Top-level app routes \u2014 use AppNav",
12
+ "Mutually exclusive form values \u2014 use RadioGroup",
13
+ "Single panel content \u2014 use Section"
14
+ ],
15
+ "props": {
16
+ "items": {
17
+ "type": "array",
18
+ "itemShape": {
19
+ "id": "string",
20
+ "label": "string",
21
+ "content": "node",
22
+ "disabled": "boolean"
23
+ },
24
+ "required": true,
25
+ "minItems": 2
26
+ },
27
+ "value": {
28
+ "type": "string",
29
+ "required": false
30
+ },
31
+ "defaultValue": {
32
+ "type": "string",
33
+ "required": false
34
+ },
35
+ "onChange": {
36
+ "type": "function",
37
+ "required": false
38
+ },
39
+ "size": {
40
+ "type": "enum",
41
+ "values": [
42
+ "sm",
43
+ "md",
44
+ "lg"
45
+ ],
46
+ "default": "md"
47
+ },
48
+ "variant": {
49
+ "type": "enum",
50
+ "values": [
51
+ "segmented",
52
+ "line"
53
+ ],
54
+ "default": "segmented"
55
+ },
56
+ "ariaLabel": {
57
+ "type": "string",
58
+ "required": false,
59
+ "default": "Tabs"
60
+ }
61
+ },
62
+ "tokens": [
63
+ "text.primary",
64
+ "text.secondary",
65
+ "text.muted",
66
+ "text.disabled",
67
+ "surface.muted",
68
+ "surface.card",
69
+ "border.faint",
70
+ "radius.control",
71
+ "shadow.raisedSm",
72
+ "focus.ring"
73
+ ],
74
+ "a11y": {
75
+ "element": "tablist",
76
+ "requirements": [
77
+ "Tab buttons control tabpanels",
78
+ "Active tab indicated visually and with aria-selected",
79
+ "Roving tabindex with arrow keys",
80
+ "Disabled tabs stay visible and are not selectable"
81
+ ]
82
+ },
83
+ "doNot": [
84
+ "Do not invent TabsList, TabsTrigger, or TabsContent cousins",
85
+ "Do not use raw hex",
86
+ "Do not use Tabs for main app navigation \u2014 use AppNav",
87
+ "Do not nest tabs inside tabs"
88
+ ],
89
+ "snippet": "<Tabs defaultValue=\"overview\" variant=\"segmented\" items={[{ id: 'overview', label: 'Overview', content: '\u2026' }, { id: 'docs', label: 'Docs', content: '\u2026' }]} />"
90
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "id": "textarea",
3
+ "status": "stable",
4
+ "intent": "Multi-line text entry for notes and descriptions. Wrap with Field.",
5
+ "useWhen": [
6
+ "Paragraphs, notes, or descriptions",
7
+ "Inside Field when label, hint, or error are required"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Single-line values — use Input",
11
+ "One-time code — use InputOTP",
12
+ "Rich text or markdown editing — out of scope"
13
+ ],
14
+ "props": {
15
+ "id": { "type": "string", "required": true },
16
+ "size": { "type": "enum", "values": ["sm", "md", "lg"], "default": "md" },
17
+ "rows": { "type": "number", "required": false, "note": "optional native rows; height also comes from size" },
18
+ "placeholder": { "type": "string", "required": false },
19
+ "disabled": { "type": "boolean", "default": false },
20
+ "error": { "type": "boolean", "default": false },
21
+ "defaultValue": { "type": "string", "required": false },
22
+ "name": { "type": "string", "required": false },
23
+ "demo": { "type": "enum", "values": ["hover", "focus"], "required": false, "note": "playground only" }
24
+ },
25
+ "tokens": [
26
+ "text.primary",
27
+ "text.muted",
28
+ "text.disabled",
29
+ "surface.card",
30
+ "surface.disabled",
31
+ "border.faint",
32
+ "border.strong",
33
+ "border.focus",
34
+ "border.disabled",
35
+ "status.danger",
36
+ "radius.control.md",
37
+ "radius.control.lg"
38
+ ],
39
+ "a11y": {
40
+ "element": "textarea",
41
+ "requirements": [
42
+ "Must have associated label via Field",
43
+ "aria-invalid when error",
44
+ "Disabled uses native disabled and does not resize"
45
+ ]
46
+ },
47
+ "doNot": [
48
+ "Do not invent local Textarea",
49
+ "Do not bake Field label or hint into Textarea — wrap with Field",
50
+ "Do not add start/icon slots — those are Input",
51
+ "Do not use raw hex"
52
+ ],
53
+ "snippet": "<Field label=\"Notes\" htmlFor=\"notes\"><Textarea id=\"notes\" size=\"md\" placeholder=\"Add a note...\" /></Field>"
54
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "thinkinganimation",
3
+ "status": "stable",
4
+ "intent": "Calm processing indicator for assistants and short system waits.",
5
+ "useWhen": [
6
+ "Agent or assistant is actively working",
7
+ "Replace with real content when processing completes"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Determinate progress — use Progress",
11
+ "Blocking page load for entire view — use LoadingAnimation"
12
+ ],
13
+ "props": {
14
+ "label": { "type": "string", "default": "Thinking" },
15
+ "size": {
16
+ "type": "enum",
17
+ "values": ["sm", "md", "lg"],
18
+ "default": "md"
19
+ },
20
+ "showLabel": { "type": "boolean", "default": true }
21
+ },
22
+ "tokens": ["text.secondary", "text.muted"],
23
+ "a11y": {
24
+ "element": "span[role=status]",
25
+ "requirements": [
26
+ "role=status with aria-live=polite",
27
+ "aria-label describes the wait state"
28
+ ]
29
+ },
30
+ "doNot": ["Do not use raw hex", "Do not leave visible after work completes"],
31
+ "snippet": "<ThinkingAnimation label=\"Thinking\" size=\"md\" />"
32
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "id": "timeline",
3
+ "status": "stable",
4
+ "intent": "Vertical sequence of now, next, and later for ordered multi-stage work.",
5
+ "useWhen": [
6
+ "Roadmaps and phased delivery",
7
+ "Status order matters more than dates or magnitudes"
8
+ ],
9
+ "doNotUseWhen": [
10
+ "Comparing values — use charts",
11
+ "Switching peer views — use Tabs",
12
+ "Numbered wizard or checkout steps — use ProgressSteps"
13
+ ],
14
+ "props": {
15
+ "items": {
16
+ "type": "array",
17
+ "required": false,
18
+ "note": "{ id?, title?, body?, phase?, status?: now|next|later }[]"
19
+ },
20
+ "label": { "type": "string", "required": false },
21
+ "headingLevel": {
22
+ "type": "enum",
23
+ "values": [2, 3, 4],
24
+ "default": 3
25
+ }
26
+ },
27
+ "tokens": [
28
+ "text.primary",
29
+ "text.secondary",
30
+ "text.muted",
31
+ "border.faint",
32
+ "border.strong",
33
+ "border.subtle"
34
+ ],
35
+ "a11y": {
36
+ "element": "ol",
37
+ "requirements": [
38
+ "Ordered list semantics",
39
+ "Optional aria-label on the list",
40
+ "One now step at a time in content"
41
+ ]
42
+ },
43
+ "doNot": [
44
+ "Do not invent TimelineItem cousins",
45
+ "Do not use Timeline for numbered wizard steps — use ProgressSteps",
46
+ "Do not use raw hex"
47
+ ],
48
+ "snippet": "<Timeline items={[{ status: 'now', title: 'Ship beta', body: 'Final QA this week' }]} />"
49
+ }