banhaten 0.3.0 → 0.5.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 (348) hide show
  1. package/CHANGELOG.md +139 -73
  2. package/CONTRIBUTING.md +46 -44
  3. package/README.md +192 -190
  4. package/SECURITY.md +15 -15
  5. package/banhaten.config.example.json +11 -11
  6. package/docs/design-spacing.md +13 -0
  7. package/docs/design-system/README.md +22 -20
  8. package/docs/design-system/adoption-quality-remediation.md +87 -87
  9. package/docs/design-system/agent-usage.md +13 -13
  10. package/docs/design-system/appearance-presets.md +189 -189
  11. package/docs/design-system/appearances/default.md +94 -94
  12. package/docs/design-system/appearances/rounded.md +95 -95
  13. package/docs/design-system/appearances/sharp.md +95 -95
  14. package/docs/design-system/component-docs-pattern.md +81 -81
  15. package/docs/design-system/component-implementation-ownership-audit.md +245 -244
  16. package/docs/design-system/component-quality-audit-2026-08-20.md +225 -223
  17. package/docs/design-system/component-showcase-consistency-report.md +219 -219
  18. package/docs/design-system/component-token-consistency-audit.md +173 -173
  19. package/docs/design-system/components/README.md +90 -76
  20. package/docs/design-system/components/accordion.md +53 -53
  21. package/docs/design-system/components/activity-feed.md +94 -94
  22. package/docs/design-system/components/activity-heatmap.md +57 -57
  23. package/docs/design-system/components/agent-input.md +85 -0
  24. package/docs/design-system/components/alert-dialog.md +72 -72
  25. package/docs/design-system/components/alert.md +98 -98
  26. package/docs/design-system/components/approval-card.md +134 -0
  27. package/docs/design-system/components/aspect-ratio.md +45 -45
  28. package/docs/design-system/components/attribute.md +89 -89
  29. package/docs/design-system/components/autocomplete.md +75 -75
  30. package/docs/design-system/components/avatar.md +54 -54
  31. package/docs/design-system/components/badge.md +54 -54
  32. package/docs/design-system/components/banner.md +87 -87
  33. package/docs/design-system/components/breadcrumbs.md +177 -176
  34. package/docs/design-system/components/button-group.md +98 -98
  35. package/docs/design-system/components/button.md +83 -80
  36. package/docs/design-system/components/card.md +88 -88
  37. package/docs/design-system/components/carousel.md +46 -46
  38. package/docs/design-system/components/catalog-components.md +47 -47
  39. package/docs/design-system/components/chart.md +95 -24
  40. package/docs/design-system/components/checkbox.md +54 -54
  41. package/docs/design-system/components/collapsible.md +67 -53
  42. package/docs/design-system/components/command.md +62 -62
  43. package/docs/design-system/components/context-menu.md +46 -46
  44. package/docs/design-system/components/date-picker.md +81 -79
  45. package/docs/design-system/components/divider.md +102 -102
  46. package/docs/design-system/components/empty-state.md +56 -56
  47. package/docs/design-system/components/field.md +70 -70
  48. package/docs/design-system/components/file-upload.md +187 -187
  49. package/docs/design-system/components/hover-card.md +48 -48
  50. package/docs/design-system/components/icons.md +48 -48
  51. package/docs/design-system/components/inline-citations.md +93 -0
  52. package/docs/design-system/components/input-group.md +58 -58
  53. package/docs/design-system/components/input-otp.md +56 -56
  54. package/docs/design-system/components/input.md +117 -61
  55. package/docs/design-system/components/item.md +59 -57
  56. package/docs/design-system/components/kbd.md +54 -49
  57. package/docs/design-system/components/label.md +49 -49
  58. package/docs/design-system/components/menu.md +71 -61
  59. package/docs/design-system/components/menubar.md +47 -47
  60. package/docs/design-system/components/modal.md +105 -105
  61. package/docs/design-system/components/native-select.md +54 -54
  62. package/docs/design-system/components/navigation-menu.md +50 -50
  63. package/docs/design-system/components/onboarding-step-list-item.md +82 -82
  64. package/docs/design-system/components/page-header.md +93 -86
  65. package/docs/design-system/components/pagination.md +57 -57
  66. package/docs/design-system/components/popover.md +60 -60
  67. package/docs/design-system/components/progress-slider.md +50 -50
  68. package/docs/design-system/components/progress.md +76 -76
  69. package/docs/design-system/components/radio-card.md +51 -51
  70. package/docs/design-system/components/radio-group.md +57 -57
  71. package/docs/design-system/components/resizable.md +44 -44
  72. package/docs/design-system/components/rolling-count.md +61 -0
  73. package/docs/design-system/components/scroll-area.md +51 -51
  74. package/docs/design-system/components/segmented-control.md +54 -54
  75. package/docs/design-system/components/select.md +68 -62
  76. package/docs/design-system/components/sheet.md +67 -67
  77. package/docs/design-system/components/shimmer-text.md +67 -0
  78. package/docs/design-system/components/sidebar.md +127 -76
  79. package/docs/design-system/components/skeleton.md +75 -75
  80. package/docs/design-system/components/slideout.md +65 -65
  81. package/docs/design-system/components/slider.md +63 -63
  82. package/docs/design-system/components/social-button.md +50 -50
  83. package/docs/design-system/components/spinner.md +62 -62
  84. package/docs/design-system/components/steps.md +65 -65
  85. package/docs/design-system/components/streaming-text.md +82 -0
  86. package/docs/design-system/components/table.md +419 -414
  87. package/docs/design-system/components/tabs.md +59 -55
  88. package/docs/design-system/components/tag.md +80 -80
  89. package/docs/design-system/components/task-list.md +95 -0
  90. package/docs/design-system/components/textarea.md +50 -50
  91. package/docs/design-system/components/thinking-reasoning.md +72 -0
  92. package/docs/design-system/components/thinking-state.md +67 -0
  93. package/docs/design-system/components/timeline.md +83 -83
  94. package/docs/design-system/components/toast.md +58 -58
  95. package/docs/design-system/components/toggle.md +81 -81
  96. package/docs/design-system/components/toolbar.md +92 -87
  97. package/docs/design-system/components/tooltip.md +94 -92
  98. package/docs/design-system/components/typography.md +18 -18
  99. package/docs/design-system/density-and-elevation.md +65 -61
  100. package/docs/design-system/design-system-test-missing-items.md +368 -368
  101. package/docs/design-system/direction-and-localization.md +23 -23
  102. package/docs/design-system/form-recipes.md +73 -73
  103. package/docs/design-system/gap-promotion-policy.md +21 -21
  104. package/docs/design-system/icons.md +74 -69
  105. package/docs/design-system/installation.md +70 -68
  106. package/docs/design-system/launch-comparison-shadcn.md +98 -98
  107. package/docs/design-system/registry-and-cli.md +64 -64
  108. package/docs/design-system/release-policy.md +30 -30
  109. package/docs/design-system/roadmap.md +14 -14
  110. package/docs/design-system/support-matrix.md +23 -23
  111. package/docs/design-system/tabs.md +54 -53
  112. package/docs/design-system/template-gap-audit.md +32 -0
  113. package/docs/design-system/templates.md +59 -0
  114. package/docs/design-system/token-governance.md +72 -60
  115. package/package.json +98 -98
  116. package/registry/component-contract.json +40 -40
  117. package/registry/components/accordion.tsx +155 -155
  118. package/registry/components/agent-input-parts.tsx +552 -0
  119. package/registry/components/agent-input-state.ts +156 -0
  120. package/registry/components/agent-input.css +307 -0
  121. package/registry/components/agent-input.tsx +382 -0
  122. package/registry/components/alert-dialog.tsx +297 -297
  123. package/registry/components/alert.tsx +293 -293
  124. package/registry/components/approval-card.css +409 -0
  125. package/registry/components/approval-card.tsx +401 -0
  126. package/registry/components/approval-frame.tsx +108 -0
  127. package/registry/components/approval-questions.tsx +559 -0
  128. package/registry/components/aspect-ratio.tsx +30 -30
  129. package/registry/components/attribute.tsx +454 -448
  130. package/registry/components/autocomplete.tsx +598 -651
  131. package/registry/components/avatar.tsx +385 -381
  132. package/registry/components/badge.tsx +629 -629
  133. package/registry/components/button-group.tsx +565 -565
  134. package/registry/components/button.tsx +127 -123
  135. package/registry/components/card.tsx +638 -638
  136. package/registry/components/carousel.tsx +296 -296
  137. package/registry/components/chart-block-data.ts +177 -0
  138. package/registry/components/chart-block.css +171 -0
  139. package/registry/components/chart-block.tsx +260 -0
  140. package/registry/components/chart-interactions.ts +123 -0
  141. package/registry/components/chart-options.cartesian.ts +162 -0
  142. package/registry/components/chart-options.paint.ts +99 -0
  143. package/registry/components/chart-options.parts.ts +72 -0
  144. package/registry/components/chart-options.radial.ts +109 -0
  145. package/registry/components/chart-options.ts +44 -0
  146. package/registry/components/chart-options.types.ts +67 -0
  147. package/registry/components/chart.tsx +203 -203
  148. package/registry/components/checkbox.tsx +247 -247
  149. package/registry/components/collapsible.tsx +109 -69
  150. package/registry/components/command.tsx +208 -208
  151. package/registry/components/context-menu.tsx +236 -236
  152. package/registry/components/data-chart.tsx +40 -0
  153. package/registry/components/date-picker.tsx +1289 -1277
  154. package/registry/components/echart-theme.ts +246 -0
  155. package/registry/components/echart.css +49 -0
  156. package/registry/components/echart.tsx +178 -0
  157. package/registry/components/expanded/ActivityFeed.tsx +227 -227
  158. package/registry/components/expanded/ActivityHeatmap.tsx +64 -64
  159. package/registry/components/expanded/Banner.tsx +179 -179
  160. package/registry/components/expanded/Breadcrumbs.tsx +131 -131
  161. package/registry/components/expanded/CatalogComponentsShowcase.tsx +205 -205
  162. package/registry/components/expanded/CatalogDivider.tsx +49 -49
  163. package/registry/components/expanded/EmptyState.tsx +155 -155
  164. package/registry/components/expanded/FileUpload.tsx +543 -543
  165. package/registry/components/expanded/OnboardingStepListItem.tsx +60 -59
  166. package/registry/components/expanded/PageHeader.tsx +179 -166
  167. package/registry/components/expanded/Slideout.tsx +108 -108
  168. package/registry/components/expanded/Steps.tsx +402 -402
  169. package/registry/components/expanded/Table.tsx +1092 -1071
  170. package/registry/components/expanded/Timeline.tsx +203 -203
  171. package/registry/components/expanded/activityFeed.css +248 -248
  172. package/registry/components/expanded/activityHeatmap.css +66 -66
  173. package/registry/components/expanded/banner.css +260 -255
  174. package/registry/components/expanded/breadcrumbs.css +140 -140
  175. package/registry/components/expanded/catalogComponentsShowcase.css +87 -87
  176. package/registry/components/expanded/divider.css +75 -75
  177. package/registry/components/expanded/emptyState.css +111 -111
  178. package/registry/components/expanded/fileUpload.css +457 -457
  179. package/registry/components/expanded/onboardingStepListItem.css +135 -126
  180. package/registry/components/expanded/pageHeader.css +248 -290
  181. package/registry/components/expanded/slideout.css +276 -276
  182. package/registry/components/expanded/steps.css +356 -356
  183. package/registry/components/expanded/table.css +606 -603
  184. package/registry/components/expanded/timeline.css +286 -286
  185. package/registry/components/field.tsx +283 -283
  186. package/registry/components/hover-card.tsx +48 -48
  187. package/registry/components/inline-citations.css +126 -0
  188. package/registry/components/inline-citations.tsx +292 -0
  189. package/registry/components/input-content.ts +107 -107
  190. package/registry/components/input-group.tsx +130 -130
  191. package/registry/components/input-otp.tsx +584 -584
  192. package/registry/components/input.tsx +990 -972
  193. package/registry/components/item.tsx +189 -189
  194. package/registry/components/kbd.tsx +246 -151
  195. package/registry/components/label.tsx +78 -78
  196. package/registry/components/menu.tsx +978 -986
  197. package/registry/components/menubar.tsx +226 -226
  198. package/registry/components/modal.tsx +872 -872
  199. package/registry/components/native-select.tsx +205 -205
  200. package/registry/components/navigation-menu.tsx +171 -171
  201. package/registry/components/pagination.css +36 -36
  202. package/registry/components/pagination.tsx +560 -555
  203. package/registry/components/popover.tsx +338 -338
  204. package/registry/components/progress-slider.tsx +216 -216
  205. package/registry/components/radio-card.tsx +676 -677
  206. package/registry/components/radio-group.tsx +570 -570
  207. package/registry/components/resizable.tsx +108 -108
  208. package/registry/components/rolling-count.css +37 -0
  209. package/registry/components/rolling-count.tsx +110 -0
  210. package/registry/components/scroll-area.tsx +91 -91
  211. package/registry/components/segmented-control.tsx +87 -87
  212. package/registry/components/select-content.tsx +218 -218
  213. package/registry/components/select.tsx +937 -932
  214. package/registry/components/sheet.tsx +305 -305
  215. package/registry/components/shimmer-text.css +69 -0
  216. package/registry/components/shimmer-text.tsx +43 -0
  217. package/registry/components/sidebar.tsx +1433 -358
  218. package/registry/components/skeleton.css +54 -54
  219. package/registry/components/skeleton.tsx +482 -482
  220. package/registry/components/slider.tsx +380 -380
  221. package/registry/components/social-button.tsx +387 -387
  222. package/registry/components/spinner.tsx +78 -78
  223. package/registry/components/streaming-text.css +45 -0
  224. package/registry/components/streaming-text.tsx +165 -0
  225. package/registry/components/table-elements.tsx +128 -128
  226. package/registry/components/tabs.css +222 -218
  227. package/registry/components/tabs.tsx +241 -241
  228. package/registry/components/tag.tsx +423 -423
  229. package/registry/components/task-list.css +328 -0
  230. package/registry/components/task-list.tsx +429 -0
  231. package/registry/components/textarea.tsx +610 -610
  232. package/registry/components/thinking-reasoning.css +178 -0
  233. package/registry/components/thinking-reasoning.tsx +253 -0
  234. package/registry/components/thinking-state.css +8 -0
  235. package/registry/components/thinking-state.tsx +46 -0
  236. package/registry/components/toast.tsx +136 -136
  237. package/registry/components/toggle.tsx +256 -256
  238. package/registry/components/toolbar.tsx +539 -539
  239. package/registry/components/tooltip.tsx +433 -431
  240. package/registry/examples/agent-input-demo.tsx +90 -0
  241. package/registry/examples/alert-demo.tsx +34 -34
  242. package/registry/examples/alert-dialog-demo.tsx +42 -42
  243. package/registry/examples/approval-card-demo.tsx +83 -0
  244. package/registry/examples/aspect-ratio-demo.tsx +11 -11
  245. package/registry/examples/attribute-demo.tsx +65 -65
  246. package/registry/examples/autocomplete-demo.tsx +109 -109
  247. package/registry/examples/avatar-demo.tsx +132 -132
  248. package/registry/examples/badge-demo.tsx +69 -69
  249. package/registry/examples/button-demo.tsx +86 -83
  250. package/registry/examples/button-group-demo.tsx +63 -63
  251. package/registry/examples/card-demo.tsx +86 -86
  252. package/registry/examples/carousel-demo.tsx +43 -43
  253. package/registry/examples/chart-block-demo.tsx +5 -0
  254. package/registry/examples/chart-demo.tsx +18 -33
  255. package/registry/examples/checkbox-demo.tsx +62 -62
  256. package/registry/examples/collapsible-demo.tsx +16 -16
  257. package/registry/examples/collection-filter-bar-demo.tsx +135 -135
  258. package/registry/examples/command-demo.tsx +42 -42
  259. package/registry/examples/command-palette-demo.tsx +235 -236
  260. package/registry/examples/context-menu-demo.tsx +29 -29
  261. package/registry/examples/control-density-contract-demo.tsx +65 -61
  262. package/registry/examples/date-picker-demo.tsx +127 -127
  263. package/registry/examples/divider-demo.tsx +17 -17
  264. package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -29
  265. package/registry/examples/expanded/banner-demo.tsx +48 -48
  266. package/registry/examples/expanded/breadcrumbs-demo.tsx +59 -59
  267. package/registry/examples/expanded/empty-state-demo.tsx +39 -39
  268. package/registry/examples/expanded/file-upload-demo.tsx +60 -60
  269. package/registry/examples/expanded/onboarding-step-demo.tsx +11 -11
  270. package/registry/examples/expanded/slideout-demo.tsx +15 -15
  271. package/registry/examples/expanded/steps-demo.tsx +29 -29
  272. package/registry/examples/expanded/tabs-demo.tsx +13 -13
  273. package/registry/examples/expanded/timeline-demo.tsx +18 -18
  274. package/registry/examples/field-demo.tsx +51 -51
  275. package/registry/examples/hover-card-demo.tsx +23 -23
  276. package/registry/examples/inline-citations-demo.tsx +31 -0
  277. package/registry/examples/input-actions-demo.tsx +36 -0
  278. package/registry/examples/input-demo.tsx +87 -87
  279. package/registry/examples/input-group-demo.tsx +16 -16
  280. package/registry/examples/input-otp-demo.tsx +72 -72
  281. package/registry/examples/item-demo.tsx +46 -46
  282. package/registry/examples/kbd-demo.tsx +12 -11
  283. package/registry/examples/label-demo.tsx +20 -20
  284. package/registry/examples/menu-demo.tsx +122 -122
  285. package/registry/examples/menubar-demo.tsx +34 -34
  286. package/registry/examples/modal-demo.tsx +74 -74
  287. package/registry/examples/native-select-demo.tsx +16 -16
  288. package/registry/examples/navigation-menu-demo.tsx +29 -29
  289. package/registry/examples/pagination-demo.tsx +20 -20
  290. package/registry/examples/popover-demo.tsx +547 -546
  291. package/registry/examples/progress-demo.tsx +37 -37
  292. package/registry/examples/progress-slider-demo.tsx +29 -29
  293. package/registry/examples/radio-card-demo.tsx +51 -51
  294. package/registry/examples/radio-group-demo.tsx +62 -62
  295. package/registry/examples/resizable-demo.tsx +22 -22
  296. package/registry/examples/results-toolbar-demo.tsx +44 -44
  297. package/registry/examples/rolling-count-demo.tsx +39 -0
  298. package/registry/examples/scroll-area-demo.tsx +15 -15
  299. package/registry/examples/segmented-control-demo.tsx +39 -39
  300. package/registry/examples/select-demo.tsx +87 -87
  301. package/registry/examples/sheet-demo.tsx +47 -47
  302. package/registry/examples/shimmer-text-demo.tsx +20 -0
  303. package/registry/examples/sidebar-demo.tsx +101 -57
  304. package/registry/examples/slider-demo.tsx +31 -31
  305. package/registry/examples/social-button-demo.tsx +61 -61
  306. package/registry/examples/spinner-demo.tsx +59 -59
  307. package/registry/examples/streaming-text-demo.tsx +28 -0
  308. package/registry/examples/tabs-demo.tsx +13 -13
  309. package/registry/examples/tag-demo.tsx +29 -29
  310. package/registry/examples/task-list-demo.tsx +74 -0
  311. package/registry/examples/textarea-demo.tsx +79 -79
  312. package/registry/examples/thinking-reasoning-demo.tsx +74 -0
  313. package/registry/examples/thinking-state-demo.tsx +13 -0
  314. package/registry/examples/toast-demo.tsx +35 -35
  315. package/registry/examples/toggle-demo.tsx +59 -59
  316. package/registry/examples/tooltip-demo.tsx +115 -115
  317. package/registry/guidance/USAGE.md +27 -27
  318. package/registry/guidance/charts.LICENSE.txt +24 -0
  319. package/registry/hooks/use-controllable-state.ts +33 -0
  320. package/registry/hooks/use-direction.ts +207 -207
  321. package/registry/hooks/use-listbox-navigation.ts +73 -0
  322. package/registry/hooks/use-motion-end.ts +55 -0
  323. package/registry/hooks/use-reduced-motion.ts +28 -0
  324. package/registry/index.json +1634 -184
  325. package/registry/styles/globals.css +1462 -1570
  326. package/registry.json +364 -10
  327. package/schema/config.schema.json +51 -51
  328. package/schema/registry.schema.json +194 -190
  329. package/schema/tokens.schema.json +167 -163
  330. package/src/cli/command-line.js +194 -194
  331. package/src/cli/config-editors.js +9 -9
  332. package/src/cli/doctor.js +399 -399
  333. package/src/cli/file-transaction.js +302 -295
  334. package/src/cli/global-css.js +153 -153
  335. package/src/cli/index.js +1002 -1009
  336. package/src/cli/install-plan.js +592 -592
  337. package/src/cli/install-receipt.js +171 -171
  338. package/src/cli/jsonc.js +203 -203
  339. package/src/cli/package-install-state.js +254 -254
  340. package/src/cli/package-manager.js +238 -238
  341. package/src/cli/package-plan.js +185 -185
  342. package/src/cli/package-version.js +97 -97
  343. package/src/cli/registry-query.js +207 -207
  344. package/src/cli/reporting.js +55 -55
  345. package/src/cli/schema-validation.js +19 -19
  346. package/src/cli/source-scanner.js +686 -686
  347. package/src/cli/vite-config.js +478 -478
  348. package/tokens/banhaten.tokens.json +458 -224
@@ -18,6 +18,22 @@
18
18
  "source": "hooks/use-direction.ts",
19
19
  "target": "{{hooks}}/use-direction.ts"
20
20
  },
21
+ {
22
+ "source": "hooks/use-controllable-state.ts",
23
+ "target": "{{hooks}}/use-controllable-state.ts"
24
+ },
25
+ {
26
+ "source": "hooks/use-listbox-navigation.ts",
27
+ "target": "{{hooks}}/use-listbox-navigation.ts"
28
+ },
29
+ {
30
+ "source": "hooks/use-motion-end.ts",
31
+ "target": "{{hooks}}/use-motion-end.ts"
32
+ },
33
+ {
34
+ "source": "hooks/use-reduced-motion.ts",
35
+ "target": "{{hooks}}/use-reduced-motion.ts"
36
+ },
21
37
  {
22
38
  "source": "guidance/USAGE.md",
23
39
  "target": ".banhaten/USAGE.md"
@@ -111,8 +127,8 @@
111
127
  "--bh-text-body-xs-medium-line-height",
112
128
  "--bh-text-body-xs-regular-font-size",
113
129
  "--bh-text-body-xs-regular-line-height",
114
- "--shadow-accordion-item",
115
- "--shadow-button-focus"
130
+ "--elevation-accordion-item",
131
+ "--elevation-button-focus"
116
132
  ]
117
133
  },
118
134
  "aspect-ratio": {
@@ -278,6 +294,7 @@
278
294
  "--bh-avatar-icon-size-sm",
279
295
  "--bh-avatar-icon-size-xl",
280
296
  "--bh-avatar-icon-size-xs",
297
+ "--bh-avatar-icon-slot-size",
281
298
  "--bh-avatar-radius",
282
299
  "--bh-avatar-size",
283
300
  "--bh-avatar-size-2xl",
@@ -311,6 +328,7 @@
311
328
  "--bh-content-default",
312
329
  "--bh-content-on-brand",
313
330
  "--bh-font-weight-semibold",
331
+ "--bh-icon-slot-size-default",
314
332
  "--bh-icon-stroke-210",
315
333
  "--bh-icon-stroke-240",
316
334
  "--bh-icon-stroke-260",
@@ -324,7 +342,7 @@
324
342
  "--bh-space-xl-12",
325
343
  "--bh-space-xxs-2",
326
344
  "--bh-text-body-sm-medium-font-size",
327
- "--shadow-avatar-badge"
345
+ "--elevation-avatar-badge"
328
346
  ]
329
347
  },
330
348
  "badge": {
@@ -567,6 +585,8 @@
567
585
  "--bh-content-on-neutral",
568
586
  "--bh-control-default",
569
587
  "--bh-control-md",
588
+ "--bh-icon-size-default",
589
+ "--bh-icon-slot-size-default",
570
590
  "--bh-icon-stroke-200",
571
591
  "--bh-icon-stroke-225",
572
592
  "--bh-interactive-ghost-hover",
@@ -604,7 +624,7 @@
604
624
  "--bh-text-body-xs-medium-letter-spacing",
605
625
  "--bh-text-body-xs-medium-line-height",
606
626
  "--bh-z-raised",
607
- "--shadow-button-focus"
627
+ "--elevation-button-focus"
608
628
  ]
609
629
  },
610
630
  "attribute": {
@@ -674,6 +694,8 @@
674
694
  "--bh-border-subtle",
675
695
  "--bh-content-default",
676
696
  "--bh-content-subtle",
697
+ "--bh-icon-size-default",
698
+ "--bh-icon-slot-size-default",
677
699
  "--bh-radius-2xl-12",
678
700
  "--bh-radius-full",
679
701
  "--bh-radius-lg-8",
@@ -721,6 +743,11 @@
721
743
  }
722
744
  ],
723
745
  "props": {
746
+ "variant": {
747
+ "type": "\"default\" | \"secondary\" | \"soft\" | \"outline\" | \"ghost\" | \"ghost-primary\" | \"danger\" | \"soft-danger\" | \"white\" | \"success\" | \"warning\" | \"link\" | \"destructive\" | \"soft-destructive\"",
748
+ "default": "default",
749
+ "description": "Twelve canonical semantic treatments. The deprecated destructive and soft-destructive compatibility aliases remain accepted and map to danger and soft-danger, respectively."
750
+ },
724
751
  "density": {
725
752
  "type": "\"compact\" | \"default\" | \"comfortable\"",
726
753
  "default": "comfortable",
@@ -746,7 +773,10 @@
746
773
  "ghost-primary",
747
774
  "danger",
748
775
  "soft-danger",
749
- "white"
776
+ "white",
777
+ "success",
778
+ "warning",
779
+ "link"
750
780
  ],
751
781
  "sizes": [
752
782
  "xs",
@@ -798,6 +828,7 @@
798
828
  "--bh-button-gap-xs",
799
829
  "--bh-button-icon-offset",
800
830
  "--bh-button-icon-size",
831
+ "--bh-button-icon-slot-size",
801
832
  "--bh-button-label-padding-x",
802
833
  "--bh-button-lg-height",
803
834
  "--bh-button-lg-padding-x",
@@ -863,12 +894,12 @@
863
894
  "--bh-text-button-font-weight",
864
895
  "--bh-text-button-letter-spacing",
865
896
  "--bh-text-button-line-height",
866
- "--shadow-button-danger-focus",
867
- "--shadow-button-focus",
868
- "--shadow-button-raised",
869
- "--shadow-button-secondary",
870
- "--shadow-button-secondary-focus",
871
- "--shadow-button-soft"
897
+ "--elevation-button-danger-focus",
898
+ "--elevation-button-focus",
899
+ "--elevation-button-raised",
900
+ "--elevation-button-secondary",
901
+ "--elevation-button-secondary-focus",
902
+ "--elevation-button-soft"
872
903
  ]
873
904
  },
874
905
  "card": {
@@ -985,15 +1016,20 @@
985
1016
  "--bh-text-heading-sm-semibold-font-weight",
986
1017
  "--bh-text-heading-sm-semibold-letter-spacing",
987
1018
  "--bh-text-heading-sm-semibold-line-height",
988
- "--shadow-button-focus"
1019
+ "--elevation-button-focus"
989
1020
  ]
990
1021
  },
991
1022
  "chart": {
992
- "description": "Recharts wrapper with Banhaten chart color tokens, responsive container, tooltip content, legend content, and config-driven color variables.",
1023
+ "description": "Eight token-driven ECharts families and 18 ready-made chart blocks, with responsive SVG rendering, theme-aware typography, tooltips, legends, brushes, and compatible Recharts wrappers.",
993
1024
  "dependencies": {
994
- "recharts": "^3.9.2"
1025
+ "recharts": "^3.9.2",
1026
+ "echarts": "^6.1.0",
1027
+ "lucide-react": "^1.17.0"
995
1028
  },
996
1029
  "parts": [
1030
+ "DataChart",
1031
+ "ChartBlock",
1032
+ "EChart",
997
1033
  "ChartContainer",
998
1034
  "ChartTooltip",
999
1035
  "ChartTooltipContent",
@@ -1010,12 +1046,40 @@
1010
1046
  "ChartTooltip",
1011
1047
  "ChartTooltipContent"
1012
1048
  ]
1049
+ },
1050
+ {
1051
+ "source": "components/echart.tsx",
1052
+ "values": [
1053
+ "EChart"
1054
+ ]
1055
+ },
1056
+ {
1057
+ "source": "components/chart-options.ts",
1058
+ "values": [
1059
+ "createChartOption"
1060
+ ]
1061
+ },
1062
+ {
1063
+ "source": "components/data-chart.tsx",
1064
+ "values": [
1065
+ "DataChart"
1066
+ ]
1067
+ },
1068
+ {
1069
+ "source": "components/chart-block.tsx",
1070
+ "values": [
1071
+ "ChartBlock",
1072
+ "chartBlocks"
1073
+ ]
1013
1074
  }
1014
1075
  ],
1015
1076
  "tokens": [
1016
1077
  "--bh-bg-neutral-subtle",
1017
1078
  "--bh-bg-raised",
1079
+ "--bh-border-default",
1080
+ "--bh-border-focus",
1018
1081
  "--bh-border-subtle",
1082
+ "--bh-border-width-default",
1019
1083
  "--bh-chart-categorical-aqua",
1020
1084
  "--bh-chart-categorical-brand",
1021
1085
  "--bh-chart-categorical-danger",
@@ -1024,44 +1088,209 @@
1024
1088
  "--bh-chart-categorical-purple",
1025
1089
  "--bh-chart-categorical-success",
1026
1090
  "--bh-chart-categorical-warning",
1091
+ "--bh-chart-neutral-default",
1092
+ "--bh-content-brand-default",
1027
1093
  "--bh-content-default",
1028
1094
  "--bh-content-muted",
1029
1095
  "--bh-content-subtle",
1096
+ "--bh-duration-default",
1097
+ "--bh-focus-ring-width",
1098
+ "--bh-font-family",
1099
+ "--bh-font-family-mono",
1100
+ "--bh-icon-stroke-200",
1101
+ "--bh-interactive-ghost-hover",
1102
+ "--bh-opacity-15",
1103
+ "--bh-opacity-30",
1104
+ "--bh-opacity-90",
1105
+ "--bh-opacity-muted",
1106
+ "--bh-radius-3xl-16",
1030
1107
  "--bh-radius-full",
1031
1108
  "--bh-radius-lg-8",
1109
+ "--bh-radius-md-6",
1110
+ "--bh-radius-sm-4",
1111
+ "--bh-radius-xl-10",
1112
+ "--bh-radius-xs-2",
1113
+ "--bh-space-11xl-96",
1114
+ "--bh-space-12xl-128",
1115
+ "--bh-space-15xl-224",
1032
1116
  "--bh-space-17xl-288",
1033
1117
  "--bh-space-19xl-384",
1034
1118
  "--bh-space-3xl-16",
1119
+ "--bh-space-4xl-20",
1120
+ "--bh-space-5xl-24",
1121
+ "--bh-space-6xl-32",
1122
+ "--bh-space-7xl-40",
1123
+ "--bh-space-9xl-64",
1124
+ "--bh-space-lg-10",
1035
1125
  "--bh-space-md-8",
1036
1126
  "--bh-space-sm-6",
1037
1127
  "--bh-space-xl-12",
1038
1128
  "--bh-space-xs-4",
1129
+ "--bh-space-xxs-2",
1130
+ "--bh-space-xxxs-1",
1131
+ "--bh-text-body-2xs-regular-font-size",
1132
+ "--bh-text-body-2xs-regular-line-height",
1133
+ "--bh-text-body-3xs-regular-font-size",
1134
+ "--bh-text-body-3xs-regular-line-height",
1135
+ "--bh-text-body-sm-medium-font-size",
1136
+ "--bh-text-body-sm-medium-line-height",
1137
+ "--bh-text-body-sm-regular-font-size",
1138
+ "--bh-text-body-sm-regular-font-weight",
1139
+ "--bh-text-body-sm-regular-line-height",
1039
1140
  "--bh-text-body-xs-medium-font-size",
1040
1141
  "--bh-text-body-xs-medium-font-weight",
1041
1142
  "--bh-text-body-xs-regular-font-size",
1042
1143
  "--bh-text-body-xs-regular-font-weight",
1043
1144
  "--bh-text-body-xs-regular-letter-spacing",
1044
1145
  "--bh-text-body-xs-regular-line-height",
1045
- "--shadow-popover"
1146
+ "--bh-text-heading-lg-semibold-font-size",
1147
+ "--bh-text-heading-lg-semibold-font-weight",
1148
+ "--bh-text-heading-lg-semibold-letter-spacing",
1149
+ "--bh-text-heading-lg-semibold-line-height",
1150
+ "--bh-text-heading-md-semibold-font-size",
1151
+ "--bh-text-heading-md-semibold-font-weight",
1152
+ "--bh-text-heading-md-semibold-letter-spacing",
1153
+ "--bh-text-heading-md-semibold-line-height",
1154
+ "--bh-text-heading-xs-semibold-font-size",
1155
+ "--bh-text-heading-xs-semibold-font-weight",
1156
+ "--bh-text-heading-xs-semibold-letter-spacing",
1157
+ "--bh-text-heading-xs-semibold-line-height",
1158
+ "--elevation-popover"
1046
1159
  ],
1047
1160
  "features": [
1048
- "responsive container",
1049
- "tooltip content",
1050
- "legend content",
1051
- "config colors"
1161
+ "eight chart families",
1162
+ "18 ready-made blocks",
1163
+ "live theme and font tokens",
1164
+ "responsive SVG",
1165
+ "tooltips and legends",
1166
+ "range brush",
1167
+ "pattern fills",
1168
+ "reduced motion",
1169
+ "RTL",
1170
+ "Recharts compatibility"
1052
1171
  ],
1053
1172
  "rtl": {
1054
1173
  "inheritsDirection": true,
1055
- "layout": "Chart labels and legends should use logical layout; chart geometry is controlled by Recharts."
1174
+ "layout": "Labels and block layouts inherit direction. DataChart mirrors Cartesian category axes and value-axis placement. Flow diagrams preserve data-defined direction. Legacy ChartContainer geometry is controlled by Recharts."
1056
1175
  },
1057
1176
  "files": [
1058
1177
  {
1059
1178
  "source": "components/chart.tsx",
1060
1179
  "target": "{{ui}}/chart.tsx"
1180
+ },
1181
+ {
1182
+ "source": "guidance/charts.LICENSE.txt",
1183
+ "target": "{{ui}}/charts.LICENSE.txt"
1184
+ },
1185
+ {
1186
+ "source": "components/chart-block-data.ts",
1187
+ "target": "{{ui}}/chart-block-data.ts",
1188
+ "internal": true
1189
+ },
1190
+ {
1191
+ "source": "components/chart-block.css",
1192
+ "target": "{{ui}}/chart-block.css"
1193
+ },
1194
+ {
1195
+ "source": "components/chart-block.tsx",
1196
+ "target": "{{ui}}/chart-block.tsx"
1197
+ },
1198
+ {
1199
+ "source": "components/chart-interactions.ts",
1200
+ "target": "{{ui}}/chart-interactions.ts",
1201
+ "internal": true
1202
+ },
1203
+ {
1204
+ "source": "components/chart-options.cartesian.ts",
1205
+ "target": "{{ui}}/chart-options.cartesian.ts",
1206
+ "internal": true
1207
+ },
1208
+ {
1209
+ "source": "components/chart-options.paint.ts",
1210
+ "target": "{{ui}}/chart-options.paint.ts",
1211
+ "internal": true
1212
+ },
1213
+ {
1214
+ "source": "components/chart-options.parts.ts",
1215
+ "target": "{{ui}}/chart-options.parts.ts",
1216
+ "internal": true
1217
+ },
1218
+ {
1219
+ "source": "components/chart-options.radial.ts",
1220
+ "target": "{{ui}}/chart-options.radial.ts",
1221
+ "internal": true
1222
+ },
1223
+ {
1224
+ "source": "components/chart-options.ts",
1225
+ "target": "{{ui}}/chart-options.ts"
1226
+ },
1227
+ {
1228
+ "source": "components/chart-options.types.ts",
1229
+ "target": "{{ui}}/chart-options.types.ts",
1230
+ "internal": true
1231
+ },
1232
+ {
1233
+ "source": "components/data-chart.tsx",
1234
+ "target": "{{ui}}/data-chart.tsx"
1235
+ },
1236
+ {
1237
+ "source": "components/echart-theme.ts",
1238
+ "target": "{{ui}}/echart-theme.ts",
1239
+ "internal": true
1240
+ },
1241
+ {
1242
+ "source": "components/echart.css",
1243
+ "target": "{{ui}}/echart.css"
1244
+ },
1245
+ {
1246
+ "source": "components/echart.tsx",
1247
+ "target": "{{ui}}/echart.tsx"
1061
1248
  }
1062
1249
  ],
1063
1250
  "examples": [
1064
- "examples/chart-demo.tsx"
1251
+ "examples/chart-demo.tsx",
1252
+ "examples/chart-block-demo.tsx"
1253
+ ],
1254
+ "props": {
1255
+ "spec": {
1256
+ "type": "ChartSpec",
1257
+ "default": null,
1258
+ "description": "DataChart: family, data, series, variant, stacking, labels, brush, and interaction options. Series colors are Banhaten palette indices."
1259
+ },
1260
+ "label": {
1261
+ "type": "string",
1262
+ "default": null,
1263
+ "description": "DataChart / EChart: required accessible chart name."
1264
+ },
1265
+ "description": {
1266
+ "type": "string",
1267
+ "default": null,
1268
+ "description": "DataChart / EChart: optional accessible text summary."
1269
+ },
1270
+ "block": {
1271
+ "type": "ChartBlockId",
1272
+ "default": null,
1273
+ "description": "ChartBlock: one of 18 documented blocks, with illustrative data and period controls where applicable."
1274
+ },
1275
+ "option": {
1276
+ "type": "(theme: EChartTheme) => EChartsOption",
1277
+ "default": null,
1278
+ "description": "EChart: advanced option factory receives resolved inherited Banhaten tokens."
1279
+ },
1280
+ "onReady": {
1281
+ "type": "(chart, theme) => void | (() => void)",
1282
+ "default": null,
1283
+ "description": "EChart: attach custom interactions and return their cleanup."
1284
+ },
1285
+ "config": {
1286
+ "type": "ChartConfig",
1287
+ "default": null,
1288
+ "description": "Legacy ChartContainer: maps series names to CSS color variables."
1289
+ }
1290
+ },
1291
+ "registryDependencies": [
1292
+ "button",
1293
+ "progress"
1065
1294
  ]
1066
1295
  },
1067
1296
  "carousel": {
@@ -1231,6 +1460,7 @@
1231
1460
  "--bh-button-group-content-disabled",
1232
1461
  "--bh-button-group-divider",
1233
1462
  "--bh-button-group-icon-size",
1463
+ "--bh-button-group-icon-slot-size",
1234
1464
  "--bh-button-group-item-active-bg",
1235
1465
  "--bh-button-group-item-bg",
1236
1466
  "--bh-button-group-item-disabled-bg",
@@ -1261,9 +1491,9 @@
1261
1491
  "--bh-text-button-letter-spacing",
1262
1492
  "--bh-text-button-line-height",
1263
1493
  "--bh-z-raised",
1264
- "--shadow-button-group",
1265
- "--shadow-button-group-focus",
1266
- "--shadow-component-default"
1494
+ "--elevation-button-group",
1495
+ "--elevation-button-group-focus",
1496
+ "--elevation-component-default"
1267
1497
  ]
1268
1498
  },
1269
1499
  "segmented-control": {
@@ -1437,8 +1667,8 @@
1437
1667
  "--bh-toggle-icon-size-md",
1438
1668
  "--bh-toggle-icon-size-sm",
1439
1669
  "--bh-toggle-offset",
1440
- "--shadow-md",
1441
- "--shadow-social-button-focus-ring"
1670
+ "--elevation-03",
1671
+ "--elevation-social-button-focus-ring"
1442
1672
  ]
1443
1673
  },
1444
1674
  "menu": {
@@ -1511,6 +1741,13 @@
1511
1741
  ]
1512
1742
  }
1513
1743
  ],
1744
+ "props": {
1745
+ "onSelect": {
1746
+ "type": "(event: Event) => void",
1747
+ "default": null,
1748
+ "description": "MenuItem selection handler. Uses Radix's native selection Event, not React's DOM text-selection event; call event.preventDefault() to keep toggle or multi-select menus open."
1749
+ }
1750
+ },
1514
1751
  "widths": [
1515
1752
  "menu",
1516
1753
  "default",
@@ -1594,6 +1831,7 @@
1594
1831
  "--bh-menu-item-slot-gap",
1595
1832
  "--bh-menu-label-padding-x",
1596
1833
  "--bh-menu-leading-icon-size",
1834
+ "--bh-menu-leading-icon-slot-size",
1597
1835
  "--bh-menu-padding-y",
1598
1836
  "--bh-menu-progress-gap",
1599
1837
  "--bh-menu-progress-height",
@@ -1635,7 +1873,7 @@
1635
1873
  "--bh-text-body-xs-regular-font-weight",
1636
1874
  "--bh-text-body-xs-regular-letter-spacing",
1637
1875
  "--bh-text-body-xs-regular-line-height",
1638
- "--shadow-menu"
1876
+ "--elevation-menu"
1639
1877
  ]
1640
1878
  },
1641
1879
  "menubar": {
@@ -1733,8 +1971,8 @@
1733
1971
  "--bh-text-body-xs-medium-letter-spacing",
1734
1972
  "--bh-text-body-xs-medium-line-height",
1735
1973
  "--bh-z-popover",
1736
- "--shadow-component-default",
1737
- "--shadow-menu"
1974
+ "--elevation-component-default",
1975
+ "--elevation-menu"
1738
1976
  ]
1739
1977
  },
1740
1978
  "command": {
@@ -1825,7 +2063,7 @@
1825
2063
  "--bh-text-body-xs-medium-font-weight",
1826
2064
  "--bh-text-body-xs-medium-letter-spacing",
1827
2065
  "--bh-text-body-xs-medium-line-height",
1828
- "--shadow-menu"
2066
+ "--elevation-menu"
1829
2067
  ]
1830
2068
  },
1831
2069
  "context-menu": {
@@ -1918,7 +2156,7 @@
1918
2156
  "--bh-text-body-xs-medium-letter-spacing",
1919
2157
  "--bh-text-body-xs-medium-line-height",
1920
2158
  "--bh-z-popover",
1921
- "--shadow-menu"
2159
+ "--elevation-menu"
1922
2160
  ]
1923
2161
  },
1924
2162
  "tooltip": {
@@ -1954,6 +2192,13 @@
1954
2192
  ]
1955
2193
  }
1956
2194
  ],
2195
+ "props": {
2196
+ "dir": {
2197
+ "type": "\"ltr\" | \"rtl\" | \"auto\"",
2198
+ "default": "ltr",
2199
+ "description": "TooltipShortcut only: keeps key glyphs in physical order inside RTL tooltips. Override only for localized non-shortcut text."
2200
+ }
2201
+ },
1957
2202
  "variants": [
1958
2203
  "dark",
1959
2204
  "default"
@@ -1977,7 +2222,8 @@
1977
2222
  "inheritsDirection": true,
1978
2223
  "spacing": "Uses inherited direction with flex layout so label/shortcut and text/close order mirror naturally.",
1979
2224
  "pointerPlacement": "Top and bottom left/right positions map to logical start/end in RTL. Center-left and center-right remain physical sides to match the Figma matrix.",
1980
- "textDirection": "Labels and support text use dir=\"auto\" for Arabic and English copy."
2225
+ "textDirection": "Labels and support text use dir=\"auto\" for Arabic and English copy.",
2226
+ "shortcutDirection": "TooltipShortcut defaults to dir=\"ltr\" so physical key order remains stable inside RTL content."
1981
2227
  },
1982
2228
  "files": [
1983
2229
  {
@@ -2026,6 +2272,7 @@
2026
2272
  "--bh-tooltip-close-fg",
2027
2273
  "--bh-tooltip-close-icon-size",
2028
2274
  "--bh-tooltip-close-size",
2275
+ "--bh-tooltip-elevation",
2029
2276
  "--bh-tooltip-fg",
2030
2277
  "--bh-tooltip-lg-padding",
2031
2278
  "--bh-tooltip-lg-radius",
@@ -2039,7 +2286,6 @@
2039
2286
  "--bh-tooltip-pointer-inline-offset",
2040
2287
  "--bh-tooltip-pointer-offset",
2041
2288
  "--bh-tooltip-pointer-width",
2042
- "--bh-tooltip-shadow",
2043
2289
  "--bh-tooltip-shortcut-bg",
2044
2290
  "--bh-tooltip-shortcut-border",
2045
2291
  "--bh-tooltip-shortcut-height",
@@ -2049,8 +2295,8 @@
2049
2295
  "--bh-tooltip-sm-radius",
2050
2296
  "--bh-z-overlay",
2051
2297
  "--bh-z-raised",
2052
- "--shadow-button-focus",
2053
- "--shadow-lg"
2298
+ "--elevation-04",
2299
+ "--elevation-button-focus"
2054
2300
  ]
2055
2301
  },
2056
2302
  "popover": {
@@ -2179,8 +2425,8 @@
2179
2425
  "--bh-text-body-xs-regular-letter-spacing",
2180
2426
  "--bh-text-body-xs-regular-line-height",
2181
2427
  "--bh-z-popover",
2182
- "--shadow-button-focus",
2183
- "--shadow-popover"
2428
+ "--elevation-button-focus",
2429
+ "--elevation-popover"
2184
2430
  ]
2185
2431
  },
2186
2432
  "hover-card": {
@@ -2232,7 +2478,7 @@
2232
2478
  "--bh-space-3xl-16",
2233
2479
  "--bh-space-md-8",
2234
2480
  "--bh-z-popover",
2235
- "--shadow-popover"
2481
+ "--elevation-popover"
2236
2482
  ]
2237
2483
  },
2238
2484
  "modal": {
@@ -2367,9 +2613,9 @@
2367
2613
  "--bh-text-heading-sm-semibold-letter-spacing",
2368
2614
  "--bh-text-heading-sm-semibold-line-height",
2369
2615
  "--bh-z-overlay",
2370
- "--shadow-button-focus",
2371
- "--shadow-lg",
2372
- "--shadow-modal"
2616
+ "--elevation-06",
2617
+ "--elevation-button-focus",
2618
+ "--elevation-modal"
2373
2619
  ]
2374
2620
  },
2375
2621
  "alert-dialog": {
@@ -2488,8 +2734,8 @@
2488
2734
  "--bh-text-heading-sm-semibold-letter-spacing",
2489
2735
  "--bh-text-heading-sm-semibold-line-height",
2490
2736
  "--bh-z-overlay",
2491
- "--shadow-lg",
2492
- "--shadow-modal"
2737
+ "--elevation-06",
2738
+ "--elevation-modal"
2493
2739
  ]
2494
2740
  },
2495
2741
  "checkbox": {
@@ -2568,9 +2814,9 @@
2568
2814
  "--bh-checkbox-root-size",
2569
2815
  "--bh-content-default",
2570
2816
  "--bh-content-disabled",
2571
- "--bh-content-on-color",
2572
2817
  "--bh-content-subtle",
2573
2818
  "--bh-icon-stroke-300",
2819
+ "--bh-interactive-checkbox-content",
2574
2820
  "--bh-interactive-checkbox-default",
2575
2821
  "--bh-interactive-checkbox-hover",
2576
2822
  "--bh-opacity-60",
@@ -2582,15 +2828,15 @@
2582
2828
  "--bh-text-body-sm-regular-font-weight",
2583
2829
  "--bh-text-body-sm-regular-letter-spacing",
2584
2830
  "--bh-text-body-sm-regular-line-height",
2585
- "--shadow-checkbox-card",
2586
- "--shadow-checkbox-card-focus",
2587
- "--shadow-checkbox-control",
2588
- "--shadow-checkbox-focus",
2589
- "--shadow-component-default"
2831
+ "--elevation-checkbox-card",
2832
+ "--elevation-checkbox-card-focus",
2833
+ "--elevation-checkbox-control",
2834
+ "--elevation-checkbox-focus",
2835
+ "--elevation-component-default"
2590
2836
  ]
2591
2837
  },
2592
2838
  "collapsible": {
2593
- "description": "Radix Collapsible wrapper for disclosure sections with tokenized trigger, icon rotation, and content slots.",
2839
+ "description": "Radix Collapsible wrapper for disclosure sections with tokenized trigger, icon rotation, content slots, and an unstyled animated panel.",
2594
2840
  "dependencies": {
2595
2841
  "@radix-ui/react-collapsible": "^1.1.15",
2596
2842
  "lucide-react": "^1.17.0"
@@ -2598,7 +2844,8 @@
2598
2844
  "parts": [
2599
2845
  "Collapsible",
2600
2846
  "CollapsibleTrigger",
2601
- "CollapsibleContent"
2847
+ "CollapsibleContent",
2848
+ "CollapsiblePanel"
2602
2849
  ],
2603
2850
  "supportedExports": [
2604
2851
  {
@@ -2606,6 +2853,7 @@
2606
2853
  "values": [
2607
2854
  "Collapsible",
2608
2855
  "CollapsibleContent",
2856
+ "CollapsiblePanel",
2609
2857
  "CollapsibleTrigger"
2610
2858
  ]
2611
2859
  }
@@ -2614,7 +2862,9 @@
2614
2862
  "controlled state",
2615
2863
  "uncontrolled state",
2616
2864
  "keyboard trigger",
2617
- "RTL"
2865
+ "RTL",
2866
+ "animated panel",
2867
+ "custom trigger with asChild"
2618
2868
  ],
2619
2869
  "rtl": {
2620
2870
  "inheritsDirection": true,
@@ -2633,6 +2883,8 @@
2633
2883
  "tokens": [
2634
2884
  "--bh-content-default",
2635
2885
  "--bh-content-subtle",
2886
+ "--bh-duration-moderate",
2887
+ "--bh-easing-emphasized",
2636
2888
  "--bh-icon-stroke-200",
2637
2889
  "--bh-interactive-ghost-hover",
2638
2890
  "--bh-radius-lg-8",
@@ -2648,7 +2900,7 @@
2648
2900
  "--bh-text-body-sm-regular-font-weight",
2649
2901
  "--bh-text-body-sm-regular-letter-spacing",
2650
2902
  "--bh-text-body-sm-regular-line-height",
2651
- "--shadow-button-focus"
2903
+ "--elevation-button-focus"
2652
2904
  ]
2653
2905
  },
2654
2906
  "radio-group": {
@@ -2751,8 +3003,8 @@
2751
3003
  "--bh-text-body-xs-regular-letter-spacing",
2752
3004
  "--bh-text-body-xs-regular-line-height",
2753
3005
  "--bh-z-raised",
2754
- "--shadow-button-focus",
2755
- "--shadow-radio-control"
3006
+ "--elevation-button-focus",
3007
+ "--elevation-radio-control"
2756
3008
  ]
2757
3009
  },
2758
3010
  "radio-card": {
@@ -2817,6 +3069,8 @@
2817
3069
  "--bh-content-default",
2818
3070
  "--bh-content-disabled",
2819
3071
  "--bh-content-subtle",
3072
+ "--bh-icon-size-default",
3073
+ "--bh-icon-slot-size-default",
2820
3074
  "--bh-icon-stroke-180",
2821
3075
  "--bh-icon-stroke-200",
2822
3076
  "--bh-interactive-radiobutton-default",
@@ -2853,11 +3107,11 @@
2853
3107
  "--bh-text-body-sm-regular-font-weight",
2854
3108
  "--bh-text-body-sm-regular-letter-spacing",
2855
3109
  "--bh-text-body-sm-regular-line-height",
2856
- "--shadow-component-default",
2857
- "--shadow-radio-card",
2858
- "--shadow-radio-card-current",
2859
- "--shadow-radio-card-disabled",
2860
- "--shadow-radio-control"
3110
+ "--elevation-component-default",
3111
+ "--elevation-radio-card",
3112
+ "--elevation-radio-card-current",
3113
+ "--elevation-radio-card-disabled",
3114
+ "--elevation-radio-control"
2861
3115
  ]
2862
3116
  },
2863
3117
  "divider": {
@@ -2986,6 +3240,7 @@
2986
3240
  "--bh-pagination-control-text-rtl-padding-x",
2987
3241
  "--bh-pagination-font-size",
2988
3242
  "--bh-pagination-icon-size",
3243
+ "--bh-pagination-icon-slot-size",
2989
3244
  "--bh-pagination-item-size",
2990
3245
  "--bh-pagination-label-font-weight",
2991
3246
  "--bh-pagination-letter-spacing",
@@ -3000,13 +3255,13 @@
3000
3255
  "--bh-pagination-root-gap",
3001
3256
  "--bh-pagination-simple-width",
3002
3257
  "--bh-space-md-8",
3003
- "--shadow-pagination-active",
3004
- "--shadow-pagination-control",
3005
- "--shadow-pagination-focus"
3258
+ "--elevation-pagination-active",
3259
+ "--elevation-pagination-control",
3260
+ "--elevation-pagination-focus"
3006
3261
  ]
3007
3262
  },
3008
3263
  "toolbar": {
3009
- "description": "Figma Filter Toolbar primitive with eight filter/action styles, search fields, select triggers, icon actions, chips, selected-count badges, desktop/mobile wrapping, and RTL-safe composition.",
3264
+ "description": "Figma Filter Toolbar layout primitive with native Tab-order group semantics, eight filter/action styles, search fields, select triggers, icon actions, chips, selected-count badges, desktop/mobile wrapping, and RTL-safe composition.",
3010
3265
  "dependencies": {
3011
3266
  "@radix-ui/react-slot": "^1.2.3",
3012
3267
  "class-variance-authority": "^0.7.1",
@@ -3062,8 +3317,16 @@
3062
3317
  "type": "readonly string[]",
3063
3318
  "default": null,
3064
3319
  "description": "Adds shared, platform-aware Kbd keycaps to ToolbarSearch without rebuilding a shortcut badge locally."
3320
+ },
3321
+ "role": {
3322
+ "type": "React.AriaRole",
3323
+ "default": "group",
3324
+ "description": "Uses layout-group semantics and native Tab order by default. Applications that override this to toolbar own the complete roving-focus and arrow-key contract."
3065
3325
  }
3066
3326
  },
3327
+ "features": [
3328
+ "native Tab-order layout grouping"
3329
+ ],
3067
3330
  "densities": [
3068
3331
  "compact",
3069
3332
  "default",
@@ -3099,7 +3362,8 @@
3099
3362
  ],
3100
3363
  "avoidWhen": [
3101
3364
  "Using ToolbarSelect as a complete select menu without application behavior",
3102
- "Applying unrelated custom heights or padding to individual toolbar children"
3365
+ "Applying unrelated custom heights or padding to individual toolbar children",
3366
+ "Using role=\"toolbar\" without application-owned roving focus and arrow-key behavior"
3103
3367
  ],
3104
3368
  "recipes": [
3105
3369
  "Collection filter bar",
@@ -3136,6 +3400,7 @@
3136
3400
  "--bh-button-gap-xs",
3137
3401
  "--bh-button-icon-offset",
3138
3402
  "--bh-button-icon-size",
3403
+ "--bh-button-icon-slot-size",
3139
3404
  "--bh-button-label-padding-x",
3140
3405
  "--bh-button-md-height",
3141
3406
  "--bh-button-md-padding-x",
@@ -3202,13 +3467,13 @@
3202
3467
  "--bh-text-button-font-weight",
3203
3468
  "--bh-text-button-letter-spacing",
3204
3469
  "--bh-text-button-line-height",
3205
- "--shadow-button-danger-focus",
3206
- "--shadow-button-focus",
3207
- "--shadow-button-raised",
3208
- "--shadow-button-soft",
3209
- "--shadow-input",
3210
- "--shadow-input-focus-ring",
3211
- "--shadow-select-trigger"
3470
+ "--elevation-button-danger-focus",
3471
+ "--elevation-button-focus",
3472
+ "--elevation-button-raised",
3473
+ "--elevation-button-soft",
3474
+ "--elevation-input",
3475
+ "--elevation-input-focus-ring",
3476
+ "--elevation-select-trigger"
3212
3477
  ]
3213
3478
  },
3214
3479
  "social-button": {
@@ -3337,13 +3602,13 @@
3337
3602
  "--bh-text-button-font-weight",
3338
3603
  "--bh-text-button-letter-spacing",
3339
3604
  "--bh-text-button-line-height",
3340
- "--shadow-component-default",
3341
- "--shadow-social-button",
3342
- "--shadow-social-button-focus"
3605
+ "--elevation-component-default",
3606
+ "--elevation-social-button",
3607
+ "--elevation-social-button-focus"
3343
3608
  ]
3344
3609
  },
3345
3610
  "input": {
3346
- "description": "Tokenized input field with semantic control density, labels, helper and error text, explicit icons, shared keyboard shortcuts, add-ons, tags, default and soft styles, and RTL states.",
3611
+ "description": "Tokenized input field with native quantity stepping, action-button contracts, semantic control density, labels, helper and error text, icons, shortcuts, add-ons, tags, default and soft styles, and RTL states.",
3347
3612
  "dependencies": {
3348
3613
  "class-variance-authority": "^0.7.1",
3349
3614
  "lucide-react": "^1.17.0"
@@ -3377,6 +3642,26 @@
3377
3642
  }
3378
3643
  ],
3379
3644
  "props": {
3645
+ "buttonProps": {
3646
+ "type": "InputActionButtonProps",
3647
+ "default": null,
3648
+ "description": "Native button props for leading/trailing button and dropdown kinds, including onClick, keyboard handlers, ref, disabled, and ARIA attributes. Defaults to type=button; consumers supply the action or popup."
3649
+ },
3650
+ "decreaseButtonProps": {
3651
+ "type": "InputStepperButtonProps",
3652
+ "default": null,
3653
+ "description": "Native props for the decrease button, excluding children and type. Supports localized aria-label, ref, and onClick; preventDefault cancels the step. Field disabled and readOnly always disable the stepper."
3654
+ },
3655
+ "increaseButtonProps": {
3656
+ "type": "InputStepperButtonProps",
3657
+ "default": null,
3658
+ "description": "Native props for the increase button, excluding children and type. Supports localized aria-label, ref, and onClick; preventDefault cancels the step. Field disabled and readOnly always disable the stepper."
3659
+ },
3660
+ "onChange": {
3661
+ "type": "React.ChangeEventHandler<HTMLInputElement>",
3662
+ "default": null,
3663
+ "description": "Receives native input changes from typing and quantity buttons. Quantity kinds use type=number, respect min/max/step, and support controlled value or uncontrolled defaultValue. step=any uses one-unit button increments."
3664
+ },
3380
3665
  "density": {
3381
3666
  "type": "\"compact\" | \"default\" | \"comfortable\"",
3382
3667
  "default": "default",
@@ -3391,7 +3676,7 @@
3391
3676
  "leadingIcon": {
3392
3677
  "type": "React.ReactNode | false",
3393
3678
  "default": null,
3394
- "description": "Supplies and enables a custom leading icon; false always removes the leading slot."
3679
+ "description": "Supplies and enables a custom 16px glyph inside the shared 20px leading slot; false always removes the slot."
3395
3680
  },
3396
3681
  "hasInformationIcon": {
3397
3682
  "type": "boolean",
@@ -3399,6 +3684,11 @@
3399
3684
  "description": "Deprecated compatibility alias for showInfo.",
3400
3685
  "deprecated": true
3401
3686
  },
3687
+ "isRequired": {
3688
+ "type": "boolean",
3689
+ "default": false,
3690
+ "description": "Shows the required marker and exposes aria-required on the input without enabling native browser validation. Use the native required prop when constraint validation is intended."
3691
+ },
3402
3692
  "trailingIcon": {
3403
3693
  "type": "React.ReactNode | false",
3404
3694
  "default": null,
@@ -3417,12 +3707,12 @@
3417
3707
  "shortcutKeys": {
3418
3708
  "type": "readonly string[]",
3419
3709
  "default": "Mod,K",
3420
- "description": "Renders the shortcut kind with shared Kbd keycaps. Use Mod for a platform-aware primary modifier."
3710
+ "description": "Renders the shortcut kind as one compact platform-aware Shortcut chip. Use Mod for the primary modifier."
3421
3711
  },
3422
3712
  "shortcut": {
3423
3713
  "type": "React.ReactNode",
3424
3714
  "default": null,
3425
- "description": "Deprecated single-keycap escape hatch. Prefer shortcutKeys for a structured shortcut chord.",
3715
+ "description": "Deprecated compact-chip content escape hatch. Prefer shortcutKeys for a structured platform-aware chord.",
3426
3716
  "deprecated": true
3427
3717
  }
3428
3718
  },
@@ -3469,7 +3759,7 @@
3469
3759
  ],
3470
3760
  "recommendedFor": [
3471
3761
  "Text, email, URL, number, and other native text-entry controls",
3472
- "Search fields when composed with an explicit search icon and shared shortcut keycaps"
3762
+ "Search fields composed with a 16px search glyph in the shared 20px icon slot and a compact Shortcut chip"
3473
3763
  ],
3474
3764
  "avoidWhen": [
3475
3765
  "Calendar date or date-range selection; use DatePicker or DateRangePicker",
@@ -3497,7 +3787,8 @@
3497
3787
  }
3498
3788
  ],
3499
3789
  "examples": [
3500
- "examples/input-demo.tsx"
3790
+ "examples/input-demo.tsx",
3791
+ "examples/input-actions-demo.tsx"
3501
3792
  ],
3502
3793
  "tokens": [
3503
3794
  "--bh-border-danger-strong",
@@ -3519,6 +3810,7 @@
3519
3810
  "--bh-input-content-gap",
3520
3811
  "--bh-input-helper-gap",
3521
3812
  "--bh-input-icon-size",
3813
+ "--bh-input-icon-slot-size",
3522
3814
  "--bh-input-info-icon-size",
3523
3815
  "--bh-input-inline-gap",
3524
3816
  "--bh-input-inline-tags-gap",
@@ -3559,14 +3851,14 @@
3559
3851
  "--bh-text-body-xs-regular-letter-spacing",
3560
3852
  "--bh-text-body-xs-regular-line-height",
3561
3853
  "--bh-z-raised",
3562
- "--shadow-component-default",
3563
- "--shadow-input",
3564
- "--shadow-input-disabled-overlay",
3565
- "--shadow-input-focus-overlay",
3566
- "--shadow-input-focus-ring",
3567
- "--shadow-input-focus-surface",
3568
- "--shadow-input-overlay",
3569
- "--shadow-input-surface"
3854
+ "--elevation-component-default",
3855
+ "--elevation-input",
3856
+ "--elevation-input-disabled-overlay",
3857
+ "--elevation-input-focus-overlay",
3858
+ "--elevation-input-focus-ring",
3859
+ "--elevation-input-focus-surface",
3860
+ "--elevation-input-overlay",
3861
+ "--elevation-input-surface"
3570
3862
  ]
3571
3863
  },
3572
3864
  "input-group": {
@@ -3651,9 +3943,9 @@
3651
3943
  "--bh-text-body-sm-medium-font-weight",
3652
3944
  "--bh-text-body-sm-medium-letter-spacing",
3653
3945
  "--bh-text-body-sm-medium-line-height",
3654
- "--shadow-component-default",
3655
- "--shadow-input",
3656
- "--shadow-input-focus-ring"
3946
+ "--elevation-component-default",
3947
+ "--elevation-input",
3948
+ "--elevation-input-focus-ring"
3657
3949
  ]
3658
3950
  },
3659
3951
  "label": {
@@ -3715,13 +4007,14 @@
3715
4007
  ]
3716
4008
  },
3717
4009
  "kbd": {
3718
- "description": "Keyboard key and platform-aware shortcut primitives for search fields, command rows, and help text with shared tokenized surfaces.",
4010
+ "description": "Keyboard key and platform-aware shortcut primitives: physical keycaps, separated chords, and compact combined hints for inputs and command rows.",
3719
4011
  "dependencies": {
3720
4012
  "class-variance-authority": "^0.7.1"
3721
4013
  },
3722
4014
  "parts": [
3723
4015
  "Kbd",
3724
- "KbdShortcut"
4016
+ "KbdShortcut",
4017
+ "Shortcut"
3725
4018
  ],
3726
4019
  "supportedExports": [
3727
4020
  {
@@ -3729,15 +4022,22 @@
3729
4022
  "values": [
3730
4023
  "Kbd",
3731
4024
  "KbdShortcut",
3732
- "kbdVariants"
4025
+ "Shortcut",
4026
+ "kbdVariants",
4027
+ "shortcutVariants"
3733
4028
  ]
3734
4029
  }
3735
4030
  ],
3736
4031
  "props": {
4032
+ "dir": {
4033
+ "type": "\"ltr\" | \"rtl\" | \"auto\"",
4034
+ "default": "ltr",
4035
+ "description": "Keeps physical key and modifier order stable inside RTL interfaces. Override only for localized non-shortcut key names."
4036
+ },
3737
4037
  "keys": {
3738
4038
  "type": "readonly string[]",
3739
4039
  "default": null,
3740
- "description": "Required by KbdShortcut. Each entry renders as its own keycap; use Mod for the platform primary modifier."
4040
+ "description": "Used by KbdShortcut and Shortcut. Use Mod for the platform primary modifier; KbdShortcut separates keys while Shortcut combines them."
3741
4041
  },
3742
4042
  "platform": {
3743
4043
  "type": "\"auto\" | \"mac\" | \"windows\" | \"linux\"",
@@ -3759,14 +4059,15 @@
3759
4059
  },
3760
4060
  "recommendedFor": [
3761
4061
  "Single keyboard keys",
3762
- "Multi-key shortcuts rendered as separate, consistently spaced keycaps"
4062
+ "Multi-key shortcuts rendered as separate, consistently spaced keycaps",
4063
+ "Compact combined shortcut hints inside inputs and constrained action rows"
3763
4064
  ],
3764
4065
  "avoidWhen": [
3765
- "Rendering an entire shortcut chord as one bespoke badge"
4066
+ "Rebuilding shortcut badges locally instead of using Shortcut or KbdShortcut"
3766
4067
  ],
3767
4068
  "rtl": {
3768
4069
  "inheritsDirection": false,
3769
- "semantics": "Kbd is direction-neutral and should be paired with surrounding text labels."
4070
+ "semantics": "Kbd defaults to dir=\"ltr\" so physical key order stays stable, while surrounding shortcut descriptions keep their own text direction."
3770
4071
  },
3771
4072
  "files": [
3772
4073
  {
@@ -3786,17 +4087,23 @@
3786
4087
  "--bh-interactive-soft-default",
3787
4088
  "--bh-interactive-soft-disabled",
3788
4089
  "--bh-radius-md-6",
4090
+ "--bh-radius-sm-4",
4091
+ "--bh-space-4xl-20",
3789
4092
  "--bh-space-5xl-24",
3790
4093
  "--bh-space-6xl-32",
3791
4094
  "--bh-space-md-8",
3792
4095
  "--bh-space-sm-6",
3793
4096
  "--bh-space-xs-4",
3794
4097
  "--bh-space-xxs-2",
4098
+ "--bh-text-body-2xs-medium-font-size",
4099
+ "--bh-text-body-2xs-medium-font-weight",
4100
+ "--bh-text-body-2xs-medium-letter-spacing",
4101
+ "--bh-text-body-2xs-medium-line-height",
3795
4102
  "--bh-text-body-xs-medium-font-size",
3796
4103
  "--bh-text-body-xs-medium-font-weight",
3797
4104
  "--bh-text-body-xs-medium-letter-spacing",
3798
4105
  "--bh-text-body-xs-medium-line-height",
3799
- "--shadow-button-soft"
4106
+ "--elevation-button-soft"
3800
4107
  ]
3801
4108
  },
3802
4109
  "item": {
@@ -3881,6 +4188,7 @@
3881
4188
  "--bh-item-gap",
3882
4189
  "--bh-item-group-gap",
3883
4190
  "--bh-item-icon-size",
4191
+ "--bh-item-icon-slot-size",
3884
4192
  "--bh-item-media-radius",
3885
4193
  "--bh-item-media-size",
3886
4194
  "--bh-item-min-height-lg",
@@ -3898,7 +4206,7 @@
3898
4206
  "--bh-text-body-sm-regular-font-weight",
3899
4207
  "--bh-text-body-sm-regular-letter-spacing",
3900
4208
  "--bh-text-body-sm-regular-line-height",
3901
- "--shadow-button-focus"
4209
+ "--elevation-button-focus"
3902
4210
  ]
3903
4211
  },
3904
4212
  "field": {
@@ -4135,6 +4443,16 @@
4135
4443
  }
4136
4444
  ],
4137
4445
  "props": {
4446
+ "aria-label": {
4447
+ "type": "string",
4448
+ "default": null,
4449
+ "description": "Provides a stable purpose-based accessible name for a label-less Select and is forwarded to its trigger."
4450
+ },
4451
+ "aria-labelledby": {
4452
+ "type": "string",
4453
+ "default": null,
4454
+ "description": "Names a label-less Select trigger from external text without placing the relationship on the inert root."
4455
+ },
4138
4456
  "density": {
4139
4457
  "type": "\"compact\" | \"default\" | \"comfortable\"",
4140
4458
  "default": "default",
@@ -4169,6 +4487,11 @@
4169
4487
  "type": "React.ReactNode | false",
4170
4488
  "default": "chevron-down",
4171
4489
  "description": "Uses the default expand chevron when omitted, accepts a replacement node, and hides the slot when false."
4490
+ },
4491
+ "triggerProps": {
4492
+ "type": "React.ComponentProps<\"button\">",
4493
+ "default": null,
4494
+ "description": "Forwards advanced trigger attributes and is spread last, so matching attributes override the top-level trigger defaults."
4172
4495
  }
4173
4496
  },
4174
4497
  "defaults": {
@@ -4266,11 +4589,12 @@
4266
4589
  "--bh-content-default",
4267
4590
  "--bh-content-disabled",
4268
4591
  "--bh-content-muted",
4269
- "--bh-content-on-color",
4270
4592
  "--bh-content-subtle",
4271
4593
  "--bh-font-weight-semibold",
4594
+ "--bh-icon-size-default",
4272
4595
  "--bh-icon-stroke-200",
4273
4596
  "--bh-icon-stroke-220",
4597
+ "--bh-interactive-checkbox-content",
4274
4598
  "--bh-interactive-checkbox-default",
4275
4599
  "--bh-opacity-60",
4276
4600
  "--bh-radius-full",
@@ -4348,12 +4672,12 @@
4348
4672
  "--bh-text-body-xs-regular-letter-spacing",
4349
4673
  "--bh-text-body-xs-regular-line-height",
4350
4674
  "--bh-z-popover",
4351
- "--shadow-component-default",
4352
- "--shadow-select-checkbox",
4353
- "--shadow-select-danger-focus-ring",
4354
- "--shadow-select-focus-ring",
4355
- "--shadow-select-menu",
4356
- "--shadow-select-trigger"
4675
+ "--elevation-component-default",
4676
+ "--elevation-select-checkbox",
4677
+ "--elevation-select-danger-focus-ring",
4678
+ "--elevation-select-focus-ring",
4679
+ "--elevation-select-menu",
4680
+ "--elevation-select-trigger"
4357
4681
  ]
4358
4682
  },
4359
4683
  "native-select": {
@@ -4447,10 +4771,10 @@
4447
4771
  "--bh-text-body-xs-regular-font-weight",
4448
4772
  "--bh-text-body-xs-regular-letter-spacing",
4449
4773
  "--bh-text-body-xs-regular-line-height",
4450
- "--shadow-component-default",
4451
- "--shadow-select-danger-focus-ring",
4452
- "--shadow-select-focus-ring",
4453
- "--shadow-select-trigger"
4774
+ "--elevation-component-default",
4775
+ "--elevation-select-danger-focus-ring",
4776
+ "--elevation-select-focus-ring",
4777
+ "--elevation-select-trigger"
4454
4778
  ]
4455
4779
  },
4456
4780
  "sheet": {
@@ -4561,27 +4885,40 @@
4561
4885
  "--bh-text-heading-sm-semibold-letter-spacing",
4562
4886
  "--bh-text-heading-sm-semibold-line-height",
4563
4887
  "--bh-z-overlay",
4564
- "--shadow-button-focus",
4565
- "--shadow-component-default"
4888
+ "--elevation-button-focus",
4889
+ "--elevation-component-default"
4566
4890
  ]
4567
4891
  },
4568
4892
  "sidebar": {
4569
- "description": "Composable app sidebar with controlled or uncontrolled collapse state, grouped menu items, logical start/end placement, RTL mirroring, and generated sidebar tokens.",
4893
+ "description": "Figma-aligned application sidebar with a tokenized 900px minimum height, staged motion between 280px expanded and 48px collapsed shells, brand and workspace headers, search and actions, default/avatar/nested/tree menu variants, badges, group actions, user footers with hover identity previews, controlled state, tooltips, logical placement, and RTL mirroring.",
4570
4894
  "dependencies": {
4571
4895
  "@radix-ui/react-slot": "^1.2.3",
4572
4896
  "lucide-react": "^1.17.0"
4573
4897
  },
4898
+ "registryDependencies": [
4899
+ "tooltip"
4900
+ ],
4574
4901
  "parts": [
4575
4902
  "SidebarProvider",
4576
4903
  "Sidebar",
4577
4904
  "SidebarHeader",
4905
+ "SidebarHeaderAction",
4906
+ "SidebarHeaderBrand",
4907
+ "SidebarHeaderWorkspaceSwitch",
4578
4908
  "SidebarBody",
4579
4909
  "SidebarFooter",
4910
+ "SidebarFooterUser",
4580
4911
  "SidebarGroup",
4912
+ "SidebarGroupAction",
4581
4913
  "SidebarGroupLabel",
4582
4914
  "SidebarMenu",
4583
4915
  "SidebarMenuItem",
4916
+ "SidebarMenuBadge",
4584
4917
  "SidebarMenuButton",
4918
+ "SidebarMenuSub",
4919
+ "SidebarMenuSubButton",
4920
+ "SidebarMenuTreeItem",
4921
+ "SidebarTreeGroup",
4585
4922
  "SidebarToggle",
4586
4923
  "SidebarTrigger",
4587
4924
  "SidebarInset",
@@ -4594,71 +4931,246 @@
4594
4931
  "Sidebar",
4595
4932
  "SidebarBody",
4596
4933
  "SidebarFooter",
4934
+ "SidebarFooterUser",
4597
4935
  "SidebarGroup",
4936
+ "SidebarGroupAction",
4598
4937
  "SidebarGroupLabel",
4599
4938
  "SidebarHeader",
4939
+ "SidebarHeaderAction",
4940
+ "SidebarHeaderBrand",
4941
+ "SidebarHeaderWorkspaceSwitch",
4600
4942
  "SidebarInset",
4601
4943
  "SidebarMenu",
4944
+ "SidebarMenuBadge",
4602
4945
  "SidebarMenuButton",
4603
4946
  "SidebarMenuItem",
4947
+ "SidebarMenuSub",
4948
+ "SidebarMenuSubButton",
4949
+ "SidebarMenuTreeItem",
4604
4950
  "SidebarProvider",
4605
4951
  "SidebarRail",
4606
4952
  "SidebarToggle",
4953
+ "SidebarTreeGroup",
4607
4954
  "SidebarTrigger"
4608
4955
  ]
4609
4956
  }
4610
4957
  ],
4958
+ "props": {
4959
+ "collapsed": {
4960
+ "type": "boolean",
4961
+ "default": false,
4962
+ "description": "Controls the provider-owned 280px expanded or 48px rail state. Pair with onCollapsedChange for controlled usage."
4963
+ },
4964
+ "defaultCollapsed": {
4965
+ "type": "boolean",
4966
+ "default": false,
4967
+ "description": "Sets the initial rail state when SidebarProvider owns collapse state internally."
4968
+ },
4969
+ "showIdentityPreview": {
4970
+ "type": "boolean",
4971
+ "default": true,
4972
+ "description": "Reveals the collapsed footer user's name and supporting text beside the rail on hover or keyboard focus."
4973
+ },
4974
+ "side": {
4975
+ "type": "\"start\" | \"end\"",
4976
+ "default": "start",
4977
+ "description": "Places Sidebar on the logical start or end edge and selects the matching logical border."
4978
+ },
4979
+ "variant": {
4980
+ "type": "SidebarMenuButtonVariant | SidebarWorkspaceVariant | \"default\" | \"supporting-text\"",
4981
+ "default": "part-specific",
4982
+ "description": "Selects default/avatar/nested menu rows, action/card workspace headers, or default/supporting-text footers on the part that owns it."
4983
+ },
4984
+ "active": {
4985
+ "type": "boolean",
4986
+ "default": false,
4987
+ "description": "Applies the selected menu or tree treatment and exposes aria-current=\"page\"."
4988
+ },
4989
+ "state": {
4990
+ "type": "\"default\" | \"hover\" | \"active\" | \"focus\"",
4991
+ "default": "default",
4992
+ "description": "Deterministic interaction state for documentation matrices; product hover and focus remain native CSS interactions."
4993
+ },
4994
+ "showLine": {
4995
+ "type": "boolean",
4996
+ "default": false,
4997
+ "description": "Selects the neutral/brand line-guided Level 2 treatment on SidebarMenuSubButton."
4998
+ },
4999
+ "level": {
5000
+ "type": "1 | 2 | 3 | 4",
5001
+ "default": 1,
5002
+ "description": "Controls tokenized logical indentation for SidebarMenuTreeItem."
5003
+ },
5004
+ "expandable": {
5005
+ "type": "boolean",
5006
+ "default": false,
5007
+ "description": "Adds a disclosure affordance to group labels or tree-group headings."
5008
+ },
5009
+ "asChild": {
5010
+ "type": "boolean",
5011
+ "default": false,
5012
+ "description": "Renders menu, tree, or inset content through Radix Slot while preserving sidebar layout and semantics."
5013
+ }
5014
+ },
5015
+ "defaults": {
5016
+ "directions": "ltr",
5017
+ "sides": "start",
5018
+ "states": "default",
5019
+ "variants": "default menu"
5020
+ },
5021
+ "directions": [
5022
+ "ltr",
5023
+ "rtl"
5024
+ ],
5025
+ "sides": [
5026
+ "start",
5027
+ "end"
5028
+ ],
5029
+ "states": [
5030
+ "default",
5031
+ "hover",
5032
+ "active",
5033
+ "focus",
5034
+ "expanded",
5035
+ "collapsed"
5036
+ ],
5037
+ "variants": [
5038
+ "default menu",
5039
+ "avatar menu",
5040
+ "Level 2 menu",
5041
+ "Level 2 line menu",
5042
+ "workspace actions",
5043
+ "workspace card",
5044
+ "default footer",
5045
+ "supporting-text footer"
5046
+ ],
4611
5047
  "features": [
4612
- "standalone static surface",
5048
+ "280px expanded and 48px collapsed shells",
4613
5049
  "controlled collapse",
4614
5050
  "uncontrolled collapse",
4615
- "group labels",
4616
- "icon-only collapsed state",
4617
- "logical side placement"
5051
+ "brand header with search and collapse actions",
5052
+ "workspace action and card headers",
5053
+ "visible collapsed-header expand action",
5054
+ "default, avatar, Level 2, and Level 2 line menu rows",
5055
+ "supporting text, count badge, and trailing action slots",
5056
+ "group labels with disclosure and icon actions",
5057
+ "four-level tree navigation",
5058
+ "supporting-text and bordered user footers",
5059
+ "collapsed footer identity preview on hover and keyboard focus",
5060
+ "tokenized staged expand and collapse motion",
5061
+ "reduced-motion fallback",
5062
+ "icon-only rail with tooltips",
5063
+ "logical side placement and RTL mirroring"
4618
5064
  ],
4619
5065
  "tokens": [
5066
+ "--bh-bg-brand-default",
5067
+ "--bh-bg-default",
5068
+ "--bh-bg-default-hover",
5069
+ "--bh-bg-neutral-subtle",
5070
+ "--bh-bg-raised",
5071
+ "--bh-border-focus",
5072
+ "--bh-border-subtle",
5073
+ "--bh-border-width-default",
5074
+ "--bh-border-width-strong",
4620
5075
  "--bh-content-default",
5076
+ "--bh-content-disabled",
4621
5077
  "--bh-content-muted",
5078
+ "--bh-content-on-brand",
4622
5079
  "--bh-content-subtle",
5080
+ "--bh-control-sm",
4623
5081
  "--bh-icon-stroke-200",
5082
+ "--bh-interactive-ghost-active",
5083
+ "--bh-interactive-ghost-default",
4624
5084
  "--bh-interactive-ghost-hover",
5085
+ "--bh-opacity-0",
5086
+ "--bh-opacity-100",
5087
+ "--bh-radius-full",
4625
5088
  "--bh-radius-lg-8",
5089
+ "--bh-radius-md-6",
5090
+ "--bh-radius-xl-10",
5091
+ "--bh-sidebar-active-guide-height",
4626
5092
  "--bh-sidebar-bg",
4627
5093
  "--bh-sidebar-bg-collapsed",
4628
5094
  "--bh-sidebar-border",
5095
+ "--bh-sidebar-brand-height",
5096
+ "--bh-sidebar-compact-control-size",
5097
+ "--bh-sidebar-header-action-size",
4629
5098
  "--bh-sidebar-icon-size",
5099
+ "--bh-sidebar-icon-size-collapsed",
5100
+ "--bh-sidebar-icon-slot-size",
4630
5101
  "--bh-sidebar-item-bg-active",
4631
5102
  "--bh-sidebar-item-bg-hover",
4632
5103
  "--bh-sidebar-item-content",
4633
5104
  "--bh-sidebar-item-content-active",
4634
- "--bh-sidebar-item-gap",
4635
5105
  "--bh-sidebar-item-height",
5106
+ "--bh-sidebar-item-height-collapsed",
4636
5107
  "--bh-sidebar-item-padding-x",
5108
+ "--bh-sidebar-level-2-indent-width",
5109
+ "--bh-sidebar-min-height",
5110
+ "--bh-sidebar-motion-delay-content",
5111
+ "--bh-sidebar-motion-duration",
5112
+ "--bh-sidebar-motion-duration-content",
5113
+ "--bh-sidebar-motion-easing",
4637
5114
  "--bh-sidebar-padding",
4638
5115
  "--bh-sidebar-rail-width",
5116
+ "--bh-sidebar-tree-indent-step",
5117
+ "--bh-sidebar-tree-item-height",
5118
+ "--bh-sidebar-user-preview-gap",
5119
+ "--bh-sidebar-user-preview-height",
5120
+ "--bh-sidebar-user-preview-width",
4639
5121
  "--bh-sidebar-width",
4640
5122
  "--bh-sidebar-width-collapsed",
4641
- "--bh-space-19xl-384",
5123
+ "--bh-sidebar-workspace-card-height",
5124
+ "--bh-sidebar-workspace-trigger-max-width",
5125
+ "--bh-sidebar-workspace-trigger-width",
5126
+ "--bh-space-10xl-80",
5127
+ "--bh-space-3xl-16",
5128
+ "--bh-space-4xl-20",
4642
5129
  "--bh-space-5xl-24",
5130
+ "--bh-space-6xl-32",
5131
+ "--bh-space-8xl-48",
5132
+ "--bh-space-lg-10",
4643
5133
  "--bh-space-md-8",
5134
+ "--bh-space-sm-6",
4644
5135
  "--bh-space-xl-12",
4645
5136
  "--bh-space-xs-4",
5137
+ "--bh-space-xxs-2",
5138
+ "--bh-space-xxxs-1",
5139
+ "--bh-text-body-2xs-regular-font-size",
5140
+ "--bh-text-body-2xs-regular-font-weight",
5141
+ "--bh-text-body-2xs-regular-letter-spacing",
5142
+ "--bh-text-body-2xs-regular-line-height",
5143
+ "--bh-text-body-3xs-semibold-font-size",
5144
+ "--bh-text-body-3xs-semibold-font-weight",
5145
+ "--bh-text-body-3xs-semibold-letter-spacing",
5146
+ "--bh-text-body-3xs-semibold-line-height",
4646
5147
  "--bh-text-body-sm-medium-font-size",
4647
5148
  "--bh-text-body-sm-medium-font-weight",
4648
5149
  "--bh-text-body-sm-medium-letter-spacing",
4649
5150
  "--bh-text-body-sm-medium-line-height",
4650
- "--bh-text-body-xs-medium-font-size",
4651
- "--bh-text-body-xs-medium-font-weight",
4652
- "--bh-text-body-xs-medium-letter-spacing",
4653
- "--bh-text-body-xs-medium-line-height",
4654
- "--shadow-button-focus",
4655
- "--shadow-sidebar"
4656
- ],
4657
- "rtl": {
4658
- "inheritsDirection": true,
4659
- "placement": "Use side=\"start\" or side=\"end\" with dir on SidebarProvider for logical placement.",
4660
- "spacing": "Menu item icon and label spacing uses flex gaps and logical text alignment."
4661
- },
5151
+ "--bh-text-body-sm-regular-font-size",
5152
+ "--bh-text-body-sm-regular-font-weight",
5153
+ "--bh-text-body-sm-regular-letter-spacing",
5154
+ "--bh-text-body-sm-regular-line-height",
5155
+ "--bh-text-body-xl-semibold-font-size",
5156
+ "--bh-text-body-xl-semibold-font-weight",
5157
+ "--bh-text-body-xl-semibold-letter-spacing",
5158
+ "--bh-text-body-xl-semibold-line-height",
5159
+ "--bh-text-body-xs-regular-font-size",
5160
+ "--bh-text-body-xs-regular-font-weight",
5161
+ "--bh-text-body-xs-regular-letter-spacing",
5162
+ "--bh-text-body-xs-regular-line-height",
5163
+ "--bh-text-body-xs-semibold-font-weight",
5164
+ "--bh-z-overlay",
5165
+ "--elevation-button-focus",
5166
+ "--elevation-component-default"
5167
+ ],
5168
+ "rtl": {
5169
+ "inheritsDirection": true,
5170
+ "placement": "Use side=\"start\" or side=\"end\" with dir on SidebarProvider for logical placement and border selection.",
5171
+ "spacing": "Headers, menu rows, nested guides, tree indentation, group actions, and footer content use logical inline spacing.",
5172
+ "icons": "Directional collapse, disclosure, and tree chevrons mirror in RTL; semantic icons retain their orientation."
5173
+ },
4662
5174
  "files": [
4663
5175
  {
4664
5176
  "source": "components/sidebar.tsx",
@@ -4746,7 +5258,7 @@
4746
5258
  "--bh-text-body-sm-regular-line-height",
4747
5259
  "--bh-z-popover",
4748
5260
  "--bh-z-raised",
4749
- "--shadow-popover"
5261
+ "--elevation-popover"
4750
5262
  ]
4751
5263
  },
4752
5264
  "scroll-area": {
@@ -4793,7 +5305,7 @@
4793
5305
  "--bh-radius-full",
4794
5306
  "--bh-space-lg-10",
4795
5307
  "--bh-space-xxs-2",
4796
- "--shadow-component-focus-ring"
5308
+ "--elevation-component-focus-ring"
4797
5309
  ]
4798
5310
  },
4799
5311
  "resizable": {
@@ -4846,8 +5358,8 @@
4846
5358
  "--bh-space-5xl-24",
4847
5359
  "--bh-space-6xl-32",
4848
5360
  "--bh-z-raised",
4849
- "--shadow-button-focus",
4850
- "--shadow-component-focus-ring"
5361
+ "--elevation-button-focus",
5362
+ "--elevation-component-focus-ring"
4851
5363
  ]
4852
5364
  },
4853
5365
  "autocomplete": {
@@ -5087,6 +5599,7 @@
5087
5599
  "--bh-date-month-year-spacer-height",
5088
5600
  "--bh-date-nav-button-size",
5089
5601
  "--bh-date-nav-icon-size",
5602
+ "--bh-date-nav-icon-slot-size",
5090
5603
  "--bh-date-picker-width",
5091
5604
  "--bh-date-presets-width",
5092
5605
  "--bh-date-range-month-width",
@@ -5098,9 +5611,10 @@
5098
5611
  "--bh-date-title-chevron-size",
5099
5612
  "--bh-date-title-height",
5100
5613
  "--bh-date-trigger-border",
5614
+ "--bh-date-trigger-elevation",
5101
5615
  "--bh-date-trigger-height",
5102
5616
  "--bh-date-trigger-icon-size",
5103
- "--bh-date-trigger-shadow",
5617
+ "--bh-date-trigger-icon-slot-size",
5104
5618
  "--bh-date-trigger-width",
5105
5619
  "--bh-icon-stroke-180",
5106
5620
  "--bh-interactive-ghost-hover",
@@ -5139,12 +5653,12 @@
5139
5653
  "--bh-text-body-md-regular-letter-spacing",
5140
5654
  "--bh-text-body-md-regular-line-height",
5141
5655
  "--bh-z-raised",
5142
- "--shadow-button-focus",
5143
- "--shadow-component-default",
5144
- "--shadow-date-month-year-list",
5145
- "--shadow-date-surface",
5146
- "--shadow-date-time-input",
5147
- "--shadow-input-focus-ring"
5656
+ "--elevation-button-focus",
5657
+ "--elevation-component-default",
5658
+ "--elevation-date-month-year-list",
5659
+ "--elevation-date-surface",
5660
+ "--elevation-date-time-input",
5661
+ "--elevation-input-focus-ring"
5148
5662
  ]
5149
5663
  },
5150
5664
  "slider": {
@@ -5306,9 +5820,9 @@
5306
5820
  "--bh-z-overlay",
5307
5821
  "--bh-z-popover",
5308
5822
  "--bh-z-raised",
5309
- "--shadow-slider-thumb",
5310
- "--shadow-slider-thumb-focus",
5311
- "--shadow-slider-tooltip"
5823
+ "--elevation-slider-thumb",
5824
+ "--elevation-slider-thumb-focus",
5825
+ "--elevation-slider-tooltip"
5312
5826
  ]
5313
5827
  },
5314
5828
  "progress": {
@@ -5495,7 +6009,7 @@
5495
6009
  "--bh-z-overlay",
5496
6010
  "--bh-z-popover",
5497
6011
  "--bh-z-raised",
5498
- "--shadow-progress-slider-thumb-focus"
6012
+ "--elevation-progress-slider-thumb-focus"
5499
6013
  ]
5500
6014
  },
5501
6015
  "textarea": {
@@ -5598,8 +6112,8 @@
5598
6112
  "--bh-textarea-tag-avatar-size",
5599
6113
  "--bh-textarea-tag-height",
5600
6114
  "--bh-textarea-width",
5601
- "--shadow-component-default",
5602
- "--shadow-textarea"
6115
+ "--elevation-component-default",
6116
+ "--elevation-textarea"
5603
6117
  ]
5604
6118
  },
5605
6119
  "skeleton": {
@@ -5730,7 +6244,7 @@
5730
6244
  "--bh-space-xl-12",
5731
6245
  "--bh-space-xs-4",
5732
6246
  "--bh-text-body-md-regular-line-height",
5733
- "--shadow-component-default"
6247
+ "--elevation-component-default"
5734
6248
  ]
5735
6249
  },
5736
6250
  "spinner": {
@@ -5868,7 +6382,7 @@
5868
6382
  "--bh-text-body-xs-regular-line-height",
5869
6383
  "--bh-toast-accent",
5870
6384
  "--bh-toast-accent-bg",
5871
- "--shadow-component-default"
6385
+ "--elevation-component-default"
5872
6386
  ]
5873
6387
  },
5874
6388
  "activity-feed": {
@@ -5962,8 +6476,8 @@
5962
6476
  "--bh-text-body-sm-regular-font-size",
5963
6477
  "--bh-text-body-sm-regular-line-height",
5964
6478
  "--bh-text-body-xs-regular-font-size",
5965
- "--shadow-button-raised",
5966
- "--shadow-component-default"
6479
+ "--elevation-button-raised",
6480
+ "--elevation-component-default"
5967
6481
  ]
5968
6482
  },
5969
6483
  "activity-heatmap": {
@@ -6033,7 +6547,7 @@
6033
6547
  "--bh-radius-sm-4",
6034
6548
  "--bh-space-3xl-16",
6035
6549
  "--bh-space-xs-4",
6036
- "--shadow-component-focus-ring"
6550
+ "--elevation-component-focus-ring"
6037
6551
  ]
6038
6552
  },
6039
6553
  "alert": {
@@ -6090,6 +6604,7 @@
6090
6604
  "--bh-alert-expanded-radius",
6091
6605
  "--bh-alert-expanded-width",
6092
6606
  "--bh-alert-icon-size",
6607
+ "--bh-alert-icon-slot-size",
6093
6608
  "--bh-bg-danger-subtle",
6094
6609
  "--bh-bg-info-subtle",
6095
6610
  "--bh-bg-neutral-subtle",
@@ -6205,6 +6720,8 @@
6205
6720
  "--bh-font-family",
6206
6721
  "--bh-font-weight-regular",
6207
6722
  "--bh-font-weight-semibold",
6723
+ "--bh-icon-size-default",
6724
+ "--bh-icon-slot-size-default",
6208
6725
  "--bh-icon-stroke-210",
6209
6726
  "--bh-icon-stroke-225",
6210
6727
  "--bh-input-width",
@@ -6212,7 +6729,6 @@
6212
6729
  "--bh-space-17xl-288",
6213
6730
  "--bh-space-19xl-384",
6214
6731
  "--bh-space-3xl-16",
6215
- "--bh-space-4xl-20",
6216
6732
  "--bh-space-8xl-48",
6217
6733
  "--bh-space-lg-10",
6218
6734
  "--bh-space-md-8",
@@ -6230,7 +6746,7 @@
6230
6746
  "--bh-text-body-md-medium-font-weight",
6231
6747
  "--bh-text-body-md-medium-letter-spacing",
6232
6748
  "--bh-text-body-md-medium-line-height",
6233
- "--shadow-md"
6749
+ "--elevation-05"
6234
6750
  ]
6235
6751
  },
6236
6752
  "catalog-components": {
@@ -6346,7 +6862,7 @@
6346
6862
  "--bh-text-heading-xs-semibold-font-size",
6347
6863
  "--bh-text-heading-xs-semibold-font-weight",
6348
6864
  "--bh-text-heading-xs-semibold-line-height",
6349
- "--shadow-component-default"
6865
+ "--elevation-component-default"
6350
6866
  ]
6351
6867
  },
6352
6868
  "breadcrumbs": {
@@ -6370,6 +6886,7 @@
6370
6886
  "rtl": {
6371
6887
  "inheritsDirection": true,
6372
6888
  "layout": "The ordered trail follows inherited inline direction, and chevron separators mirror through :dir(rtl).",
6889
+ "textDirection": "Each label uses dir=\"auto\" so Arabic and Latin crumbs resolve independently and truncate at their content end without changing trail order.",
6373
6890
  "semantics": "The root is a named navigation landmark and the final or explicitly current item exposes aria-current=\"page\"."
6374
6891
  },
6375
6892
  "dependencies": {
@@ -6410,6 +6927,8 @@
6410
6927
  "--bh-focus-ring-width",
6411
6928
  "--bh-font-family",
6412
6929
  "--bh-font-weight-medium",
6930
+ "--bh-icon-size-default",
6931
+ "--bh-icon-slot-size-default",
6413
6932
  "--bh-icon-stroke-190",
6414
6933
  "--bh-icon-stroke-200",
6415
6934
  "--bh-icon-stroke-225",
@@ -6417,7 +6936,6 @@
6417
6936
  "--bh-radius-lg-8",
6418
6937
  "--bh-radius-sm-4",
6419
6938
  "--bh-space-3xl-16",
6420
- "--bh-space-4xl-20",
6421
6939
  "--bh-space-6xl-32",
6422
6940
  "--bh-space-md-8",
6423
6941
  "--bh-space-xl-12",
@@ -6536,6 +7054,7 @@
6536
7054
  "--bh-font-weight-medium",
6537
7055
  "--bh-font-weight-regular",
6538
7056
  "--bh-font-weight-semibold",
7057
+ "--bh-icon-size-default",
6539
7058
  "--bh-icon-stroke-200",
6540
7059
  "--bh-icon-stroke-220",
6541
7060
  "--bh-radius-2xl-12",
@@ -6573,8 +7092,8 @@
6573
7092
  "--bh-text-body-xs-regular-font-size",
6574
7093
  "--bh-text-body-xs-regular-line-height",
6575
7094
  "--bh-underline-offset-default",
6576
- "--shadow-component-default",
6577
- "--shadow-xs"
7095
+ "--elevation-02",
7096
+ "--elevation-component-default"
6578
7097
  ]
6579
7098
  },
6580
7099
  "table": {
@@ -6596,9 +7115,15 @@
6596
7115
  "table",
6597
7116
  "data-table"
6598
7117
  ],
7118
+ "features": [
7119
+ "measured DataTable pagination captions",
7120
+ "explicit DataTable pagination message catalogs",
7121
+ "safe row-key cell fallback"
7122
+ ],
6599
7123
  "rtl": {
6600
7124
  "inheritsDirection": true,
6601
7125
  "layout": "Headers, cells, search/filter tools, selection, pagination, and actions inherit direction and use logical alignment.",
7126
+ "textDirection": "Each avatarText name and caption uses dir=\"auto\" to resolve its own content direction, so ellipsis preserves the identifying start without changing the mirrored avatar layout.",
6602
7127
  "semantics": "Sortable headers are owned Buttons, selection uses Checkbox, progress cells are named, and row actions expose accessible labels.",
6603
7128
  "narrowContainers": "The toolbar wraps and the table owns local horizontal scrolling instead of overlapping controls or overflowing the page."
6604
7129
  },
@@ -6707,6 +7232,8 @@
6707
7232
  "--bh-focus-ring-width",
6708
7233
  "--bh-font-family",
6709
7234
  "--bh-font-weight-semibold",
7235
+ "--bh-icon-size-default",
7236
+ "--bh-icon-slot-size-default",
6710
7237
  "--bh-icon-stroke-190",
6711
7238
  "--bh-icon-stroke-225",
6712
7239
  "--bh-input-width",
@@ -6752,7 +7279,7 @@
6752
7279
  "--bh-text-body-sm-regular-font-weight",
6753
7280
  "--bh-text-body-sm-regular-line-height",
6754
7281
  "--bh-text-body-xs-regular-font-size",
6755
- "--shadow-component-focus-ring"
7282
+ "--elevation-component-focus-ring"
6756
7283
  ]
6757
7284
  },
6758
7285
  "empty-state": {
@@ -6887,10 +7414,11 @@
6887
7414
  "--bh-content-success-default",
6888
7415
  "--bh-control-default",
6889
7416
  "--bh-font-family",
7417
+ "--bh-icon-size-default",
7418
+ "--bh-icon-slot-size-default",
6890
7419
  "--bh-icon-stroke-225",
6891
7420
  "--bh-space-17xl-288",
6892
7421
  "--bh-space-2xl-14",
6893
- "--bh-space-4xl-20",
6894
7422
  "--bh-space-5xl-24",
6895
7423
  "--bh-space-7xl-40",
6896
7424
  "--bh-space-lg-10",
@@ -6902,11 +7430,11 @@
6902
7430
  "--bh-text-body-md-medium-font-weight",
6903
7431
  "--bh-text-body-md-medium-letter-spacing",
6904
7432
  "--bh-text-body-md-medium-line-height",
6905
- "--shadow-component-default"
7433
+ "--elevation-component-default"
6906
7434
  ]
6907
7435
  },
6908
7436
  "page-header": {
6909
- "description": "Expanded page header composition with breadcrumbs, metadata, description copy, action groups, responsive layout, and optional local tabs.",
7437
+ "description": "Expanded page header composition with breadcrumbs, metadata, description copy, action groups, responsive layout, and content-safe scrollable local tabs.",
6910
7438
  "status": "expanded",
6911
7439
  "states": [
6912
7440
  "default",
@@ -6921,10 +7449,17 @@
6921
7449
  "actions",
6922
7450
  "tabs"
6923
7451
  ],
7452
+ "features": [
7453
+ "Breadcrumb-owned icon-slot visibility",
7454
+ "Button-owned default-density secondary action styling",
7455
+ "content-safe horizontal tab overflow",
7456
+ "full-width tab opt-out"
7457
+ ],
6924
7458
  "rtl": {
6925
7459
  "inheritsDirection": true,
6926
- "layout": "Heading, metadata, owned Breadcrumbs, Button actions, and Tabs mirror through inherited direction and logical spacing.",
6927
- "semantics": "Every tab trigger owns a matching panel, and breadcrumb navigation receives a stable accessible label."
7460
+ "layout": "Heading, metadata, owned Breadcrumbs, Button actions, and content-safe scrolling Tabs mirror through inherited direction and logical spacing.",
7461
+ "textDirection": "Title and description use dir=\"auto\" so Arabic and Latin copy resolve independently and terminal punctuation stays at the content end.",
7462
+ "semantics": "Every complete tab label remains available inside its trigger, every trigger owns a matching panel, and breadcrumb navigation receives a stable accessible label."
6928
7463
  },
6929
7464
  "dependencies": {
6930
7465
  "lucide-react": "^1.17.0"
@@ -6959,30 +7494,23 @@
6959
7494
  "examples/expanded/page-header-demo.tsx"
6960
7495
  ],
6961
7496
  "tokens": [
6962
- "--bh-bg-raised",
6963
- "--bh-border-default",
7497
+ "--bh-button-label-padding-x",
6964
7498
  "--bh-content-brand-default",
6965
7499
  "--bh-content-default",
6966
7500
  "--bh-content-muted",
6967
7501
  "--bh-content-subtle",
6968
- "--bh-control-default",
6969
7502
  "--bh-focus-ring-width",
6970
7503
  "--bh-font-family",
6971
7504
  "--bh-icon-stroke-190",
6972
- "--bh-interactive-secondary-default",
6973
- "--bh-opacity-muted",
6974
7505
  "--bh-space-2xl-14",
6975
7506
  "--bh-space-3xl-16",
6976
7507
  "--bh-space-4xl-20",
6977
7508
  "--bh-space-5xl-24",
6978
- "--bh-space-6xl-32",
6979
7509
  "--bh-space-7xl-40",
6980
7510
  "--bh-space-lg-10",
6981
7511
  "--bh-space-md-8",
6982
- "--bh-space-xl-12",
6983
7512
  "--bh-space-xs-4",
6984
7513
  "--bh-space-xxs-2",
6985
- "--bh-space-xxxs-1",
6986
7514
  "--bh-text-body-2xs-regular-font-size",
6987
7515
  "--bh-text-body-2xs-regular-font-weight",
6988
7516
  "--bh-text-body-2xs-regular-line-height",
@@ -6995,8 +7523,7 @@
6995
7523
  "--bh-text-body-md-regular-line-height",
6996
7524
  "--bh-text-heading-md-semibold-font-size",
6997
7525
  "--bh-text-heading-md-semibold-font-weight",
6998
- "--bh-text-heading-md-semibold-line-height",
6999
- "--shadow-button-secondary"
7526
+ "--bh-text-heading-md-semibold-line-height"
7000
7527
  ]
7001
7528
  },
7002
7529
  "slideout": {
@@ -7106,9 +7633,9 @@
7106
7633
  "--bh-text-heading-sm-medium-line-height",
7107
7634
  "--bh-text-heading-xs-medium-font-size",
7108
7635
  "--bh-text-heading-xs-medium-line-height",
7109
- "--shadow-button-raised",
7110
- "--shadow-button-soft",
7111
- "--shadow-component-default"
7636
+ "--elevation-button-raised",
7637
+ "--elevation-button-soft",
7638
+ "--elevation-component-default"
7112
7639
  ]
7113
7640
  },
7114
7641
  "steps": {
@@ -7252,13 +7779,15 @@
7252
7779
  "controlled active index",
7253
7780
  "controlled value",
7254
7781
  "optional panels",
7255
- "full-width tabs"
7782
+ "content-hug tabs",
7783
+ "content-safe full-width tabs",
7784
+ "horizontal overflow without label overlap"
7256
7785
  ],
7257
7786
  "rtl": {
7258
7787
  "inheritsDirection": true,
7259
7788
  "keyboard": "Radix receives dir so arrow-key navigation follows the document direction.",
7260
7789
  "textDirection": "Trigger labels use dir=\"auto\" by default for Arabic and English tab labels.",
7261
- "spacing": "Uses inherited direction and logical inline spacing so underline, segmented, and rounded treatments mirror naturally."
7790
+ "spacing": "Uses inherited direction and logical inline spacing so underline, segmented, and rounded treatments mirror naturally, including horizontal overflow."
7262
7791
  },
7263
7792
  "files": [
7264
7793
  {
@@ -7301,7 +7830,7 @@
7301
7830
  "--bh-text-body-md-regular-font-weight",
7302
7831
  "--bh-text-body-md-regular-letter-spacing",
7303
7832
  "--bh-text-body-md-regular-line-height",
7304
- "--shadow-button-soft"
7833
+ "--elevation-button-soft"
7305
7834
  ]
7306
7835
  },
7307
7836
  "timeline": {
@@ -7389,7 +7918,928 @@
7389
7918
  "--bh-timeline-grid-width",
7390
7919
  "--bh-timeline-narrow-width",
7391
7920
  "--bh-timeline-sidebar-width",
7392
- "--shadow-component-focus-ring"
7921
+ "--elevation-component-focus-ring"
7922
+ ]
7923
+ },
7924
+ "shimmer-text": {
7925
+ "description": "Text with a soft brightness valley sweeping through it in reading direction, for labels of work in progress such as syncing, reading, or thinking.",
7926
+ "dependencies": {},
7927
+ "parts": [
7928
+ "ShimmerText"
7929
+ ],
7930
+ "supportedExports": [
7931
+ {
7932
+ "source": "components/shimmer-text.tsx",
7933
+ "values": [
7934
+ "ShimmerText"
7935
+ ]
7936
+ }
7937
+ ],
7938
+ "props": {
7939
+ "animated": {
7940
+ "type": "boolean",
7941
+ "default": "true",
7942
+ "description": "Runs the brightness sweep; set false to keep the same colors without motion."
7943
+ },
7944
+ "tone": {
7945
+ "type": "\"subtle\" | \"default\"",
7946
+ "default": "subtle",
7947
+ "description": "Secondary or primary text color pair for the sweep."
7948
+ }
7949
+ },
7950
+ "tones": [
7951
+ "subtle",
7952
+ "default"
7953
+ ],
7954
+ "rtl": {
7955
+ "inheritsDirection": true,
7956
+ "motion": "The shine sweeps from the reading start to the reading end, so RTL text uses mirrored keyframes."
7957
+ },
7958
+ "files": [
7959
+ {
7960
+ "source": "components/shimmer-text.css",
7961
+ "target": "{{ui}}/shimmer-text.css"
7962
+ },
7963
+ {
7964
+ "source": "components/shimmer-text.tsx",
7965
+ "target": "{{ui}}/shimmer-text.tsx"
7966
+ }
7967
+ ],
7968
+ "examples": [
7969
+ "examples/shimmer-text-demo.tsx"
7970
+ ],
7971
+ "tokens": [
7972
+ "--bh-content-default",
7973
+ "--bh-content-disabled",
7974
+ "--bh-content-subtle",
7975
+ "--bh-easing-standard",
7976
+ "--bh-shimmer-text-duration"
7977
+ ]
7978
+ },
7979
+ "thinking-state": {
7980
+ "description": "Minimal shimmering status label that signals an agent is working before its first token arrives.",
7981
+ "dependencies": {},
7982
+ "registryDependencies": [
7983
+ "shimmer-text"
7984
+ ],
7985
+ "parts": [
7986
+ "ThinkingState"
7987
+ ],
7988
+ "supportedExports": [
7989
+ {
7990
+ "source": "components/thinking-state.tsx",
7991
+ "values": [
7992
+ "ThinkingState"
7993
+ ]
7994
+ }
7995
+ ],
7996
+ "props": {
7997
+ "status": {
7998
+ "type": "\"thinking\" | \"done\"",
7999
+ "default": "thinking",
8000
+ "description": "Thinking runs the brightness sweep; done leaves the label as static text."
8001
+ },
8002
+ "tone": {
8003
+ "type": "\"subtle\" | \"default\"",
8004
+ "default": "subtle",
8005
+ "description": "Secondary or primary text color pair for the sweep."
8006
+ },
8007
+ "children": {
8008
+ "type": "React.ReactNode",
8009
+ "default": "\"Thinking\"",
8010
+ "description": "Localized label text."
8011
+ }
8012
+ },
8013
+ "tones": [
8014
+ "subtle",
8015
+ "default"
8016
+ ],
8017
+ "states": [
8018
+ "thinking",
8019
+ "done"
8020
+ ],
8021
+ "rtl": {
8022
+ "inheritsDirection": true,
8023
+ "motion": "The shine sweeps from the reading start to the reading end, so RTL text uses mirrored keyframes."
8024
+ },
8025
+ "files": [
8026
+ {
8027
+ "source": "components/thinking-state.css",
8028
+ "target": "{{ui}}/thinking-state.css"
8029
+ },
8030
+ {
8031
+ "source": "components/thinking-state.tsx",
8032
+ "target": "{{ui}}/thinking-state.tsx"
8033
+ }
8034
+ ],
8035
+ "examples": [
8036
+ "examples/thinking-state-demo.tsx"
8037
+ ],
8038
+ "tokens": [
8039
+ "--bh-content-subtle",
8040
+ "--bh-font-family",
8041
+ "--bh-text-body-xs-medium-font-size",
8042
+ "--bh-text-body-xs-medium-font-weight",
8043
+ "--bh-text-body-xs-medium-letter-spacing",
8044
+ "--bh-text-body-xs-medium-line-height"
8045
+ ]
8046
+ },
8047
+ "thinking-reasoning": {
8048
+ "description": "Animated, collapsible reasoning block: a shimmering label reveals sentences as they arrive, auto-scrolls behind soft fades, then folds into a Thought for Ns summary that unfolds on demand.",
8049
+ "dependencies": {
8050
+ "lucide-react": "^1.17.0"
8051
+ },
8052
+ "registryDependencies": [
8053
+ "collapsible",
8054
+ "shimmer-text"
8055
+ ],
8056
+ "parts": [
8057
+ "ThinkingReasoning"
8058
+ ],
8059
+ "supportedExports": [
8060
+ {
8061
+ "source": "components/thinking-reasoning.tsx",
8062
+ "values": [
8063
+ "ThinkingReasoning"
8064
+ ]
8065
+ }
8066
+ ],
8067
+ "props": {
8068
+ "steps": {
8069
+ "type": "readonly string[]",
8070
+ "default": null,
8071
+ "description": "Reasoning sentences in arrival order; append to stream new ones."
8072
+ },
8073
+ "status": {
8074
+ "type": "\"thinking\" | \"done\"",
8075
+ "default": "thinking",
8076
+ "description": "Thinking keeps the block open and auto-scrolling; done folds it into the summary."
8077
+ },
8078
+ "duration": {
8079
+ "type": "number",
8080
+ "default": "measured",
8081
+ "description": "Seconds shown in the summary; measured from mount when omitted."
8082
+ },
8083
+ "open": {
8084
+ "type": "boolean",
8085
+ "default": "false",
8086
+ "description": "Controls whether the finished reasoning is unfolded."
8087
+ },
8088
+ "reserveSpace": {
8089
+ "type": "boolean",
8090
+ "default": "false",
8091
+ "description": "Keeps the block height stable while folding so content below does not jump."
8092
+ },
8093
+ "labels": {
8094
+ "type": "Partial<ThinkingReasoningLabels>",
8095
+ "default": "English",
8096
+ "description": "Localized thinking, thought, and duration copy; the finished summary also names the toggle."
8097
+ }
8098
+ },
8099
+ "states": [
8100
+ "thinking",
8101
+ "done",
8102
+ "open",
8103
+ "closed"
8104
+ ],
8105
+ "rtl": {
8106
+ "inheritsDirection": true,
8107
+ "layout": "Header, chevron, and sentences use logical alignment; the vertical auto-scroll and fades are direction-neutral."
8108
+ },
8109
+ "files": [
8110
+ {
8111
+ "source": "components/thinking-reasoning.css",
8112
+ "target": "{{ui}}/thinking-reasoning.css"
8113
+ },
8114
+ {
8115
+ "source": "components/thinking-reasoning.tsx",
8116
+ "target": "{{ui}}/thinking-reasoning.tsx"
8117
+ }
8118
+ ],
8119
+ "examples": [
8120
+ "examples/thinking-reasoning-demo.tsx"
8121
+ ],
8122
+ "tokens": [
8123
+ "--bh-content-muted",
8124
+ "--bh-content-subtle",
8125
+ "--bh-duration-fast",
8126
+ "--bh-duration-moderate",
8127
+ "--bh-duration-slow",
8128
+ "--bh-duration-slower",
8129
+ "--bh-easing-emphasized",
8130
+ "--bh-easing-standard",
8131
+ "--bh-font-family",
8132
+ "--bh-icon-stroke-180",
8133
+ "--bh-opacity-0",
8134
+ "--bh-opacity-100",
8135
+ "--bh-radius-sm-4",
8136
+ "--bh-space-sm-6",
8137
+ "--bh-space-xl-12",
8138
+ "--bh-space-xs-4",
8139
+ "--bh-text-body-xs-medium-font-size",
8140
+ "--bh-text-body-xs-medium-font-weight",
8141
+ "--bh-text-body-xs-medium-letter-spacing",
8142
+ "--bh-text-body-xs-medium-line-height",
8143
+ "--bh-text-body-xs-regular-font-size",
8144
+ "--bh-text-body-xs-regular-font-weight",
8145
+ "--bh-text-body-xs-regular-letter-spacing",
8146
+ "--bh-text-body-xs-regular-line-height",
8147
+ "--bh-thinking-reasoning-fade",
8148
+ "--bh-thinking-reasoning-max-height",
8149
+ "--bh-thinking-reasoning-width",
8150
+ "--elevation-component-focus-ring"
8151
+ ]
8152
+ },
8153
+ "streaming-text": {
8154
+ "description": "Token-by-token text with a slim caret that stays solid while streaming and blinks once the response is complete, plus a useTypewriter hook that reveals a finished text locally.",
8155
+ "dependencies": {},
8156
+ "parts": [
8157
+ "StreamingText"
8158
+ ],
8159
+ "supportedExports": [
8160
+ {
8161
+ "source": "components/streaming-text.tsx",
8162
+ "values": [
8163
+ "StreamingText",
8164
+ "useTypewriter"
8165
+ ]
8166
+ }
8167
+ ],
8168
+ "props": {
8169
+ "text": {
8170
+ "type": "string",
8171
+ "default": null,
8172
+ "description": "The text that has arrived so far."
8173
+ },
8174
+ "streaming": {
8175
+ "type": "boolean",
8176
+ "default": "false",
8177
+ "description": "True while more text is on its way; keeps the caret solid and sets aria-busy."
8178
+ },
8179
+ "caret": {
8180
+ "type": "boolean",
8181
+ "default": "true",
8182
+ "description": "Shows the caret after the visible text."
8183
+ },
8184
+ "as": {
8185
+ "type": "\"p\" | \"div\" | \"span\"",
8186
+ "default": "p",
8187
+ "description": "Rendered element; the ref is an HTMLElement for all three."
8188
+ },
8189
+ "speed": {
8190
+ "type": "number",
8191
+ "default": "220",
8192
+ "description": "useTypewriter option: characters revealed per second."
8193
+ }
8194
+ },
8195
+ "states": [
8196
+ "streaming",
8197
+ "complete"
8198
+ ],
8199
+ "features": [
8200
+ "caller-driven streaming",
8201
+ "local typewriter reveal",
8202
+ "reduced motion",
8203
+ "RTL"
8204
+ ],
8205
+ "rtl": {
8206
+ "inheritsDirection": true,
8207
+ "layout": "The caret follows the text through logical margins, so it trails Arabic text at its end edge."
8208
+ },
8209
+ "files": [
8210
+ {
8211
+ "source": "components/streaming-text.css",
8212
+ "target": "{{ui}}/streaming-text.css"
8213
+ },
8214
+ {
8215
+ "source": "components/streaming-text.tsx",
8216
+ "target": "{{ui}}/streaming-text.tsx"
8217
+ }
8218
+ ],
8219
+ "examples": [
8220
+ "examples/streaming-text-demo.tsx"
8221
+ ],
8222
+ "tokens": [
8223
+ "--bh-content-default",
8224
+ "--bh-font-family",
8225
+ "--bh-opacity-0",
8226
+ "--bh-opacity-100",
8227
+ "--bh-radius-full",
8228
+ "--bh-space-xxs-2",
8229
+ "--bh-streaming-text-caret-duration",
8230
+ "--bh-streaming-text-caret-width",
8231
+ "--bh-text-body-sm-regular-font-size",
8232
+ "--bh-text-body-sm-regular-font-weight",
8233
+ "--bh-text-body-sm-regular-letter-spacing",
8234
+ "--bh-text-body-sm-regular-line-height"
8235
+ ]
8236
+ },
8237
+ "inline-citations": {
8238
+ "description": "Prose composed with superscript citation marks that link to numbered sources and reveal the reference name on hover, plus a compact source list with host and external-link affordance.",
8239
+ "dependencies": {
8240
+ "lucide-react": "^1.17.0"
8241
+ },
8242
+ "registryDependencies": [
8243
+ "tooltip"
8244
+ ],
8245
+ "parts": [
8246
+ "InlineCitations",
8247
+ "CitationProse",
8248
+ "CitationMark",
8249
+ "CitationList",
8250
+ "CitationItem"
8251
+ ],
8252
+ "supportedExports": [
8253
+ {
8254
+ "source": "components/inline-citations.tsx",
8255
+ "values": [
8256
+ "CitationItem",
8257
+ "CitationList",
8258
+ "CitationMark",
8259
+ "CitationProse",
8260
+ "InlineCitations"
8261
+ ]
8262
+ }
8263
+ ],
8264
+ "props": {
8265
+ "children": {
8266
+ "type": "React.ReactNode",
8267
+ "default": null,
8268
+ "description": "Cited prose: CitationProse paragraphs with CitationMark markers that find their source by number."
8269
+ },
8270
+ "sources": {
8271
+ "type": "readonly CitationSource[]",
8272
+ "default": null,
8273
+ "description": "Cited sources with label, url, optional host, and optional marker number. Only http and https URLs become links."
8274
+ },
8275
+ "showSources": {
8276
+ "type": "boolean",
8277
+ "default": "true",
8278
+ "description": "Renders the compact source list under the prose when there are sources."
8279
+ },
8280
+ "labels": {
8281
+ "type": "Partial<InlineCitationsLabels>",
8282
+ "default": "English",
8283
+ "description": "Localized accessible names for markers and the source list."
8284
+ }
8285
+ },
8286
+ "rtl": {
8287
+ "inheritsDirection": true,
8288
+ "layout": "Chips and list rows use logical margins and gaps; hosts stay LTR and the external arrow mirrors."
8289
+ },
8290
+ "files": [
8291
+ {
8292
+ "source": "components/inline-citations.css",
8293
+ "target": "{{ui}}/inline-citations.css"
8294
+ },
8295
+ {
8296
+ "source": "components/inline-citations.tsx",
8297
+ "target": "{{ui}}/inline-citations.tsx"
8298
+ }
8299
+ ],
8300
+ "examples": [
8301
+ "examples/inline-citations-demo.tsx"
8302
+ ],
8303
+ "tokens": [
8304
+ "--bh-border-subtle",
8305
+ "--bh-border-width-default",
8306
+ "--bh-citation-mark-size",
8307
+ "--bh-content-default",
8308
+ "--bh-content-subtle",
8309
+ "--bh-duration-default",
8310
+ "--bh-duration-fast",
8311
+ "--bh-easing-standard",
8312
+ "--bh-font-family",
8313
+ "--bh-icon-stroke-180",
8314
+ "--bh-interactive-soft-default",
8315
+ "--bh-interactive-soft-hover",
8316
+ "--bh-opacity-0",
8317
+ "--bh-opacity-100",
8318
+ "--bh-radius-sm-4",
8319
+ "--bh-space-lg-10",
8320
+ "--bh-space-sm-6",
8321
+ "--bh-space-xl-12",
8322
+ "--bh-space-xxs-2",
8323
+ "--bh-space-xxxs-1",
8324
+ "--bh-text-body-2xs-regular-font-size",
8325
+ "--bh-text-body-2xs-regular-font-weight",
8326
+ "--bh-text-body-2xs-regular-letter-spacing",
8327
+ "--bh-text-body-2xs-regular-line-height",
8328
+ "--bh-text-body-3xs-semibold-font-size",
8329
+ "--bh-text-body-3xs-semibold-font-weight",
8330
+ "--bh-text-body-3xs-semibold-letter-spacing",
8331
+ "--bh-text-body-sm-regular-font-size",
8332
+ "--bh-text-body-sm-regular-font-weight",
8333
+ "--bh-text-body-sm-regular-letter-spacing",
8334
+ "--bh-text-body-sm-regular-line-height",
8335
+ "--elevation-component-focus-ring"
8336
+ ]
8337
+ },
8338
+ "rolling-count": {
8339
+ "description": "Tabular figures that roll each changed character into place like an odometer while assistive technology reads the plain value.",
8340
+ "dependencies": {},
8341
+ "parts": [
8342
+ "RollingCount"
8343
+ ],
8344
+ "supportedExports": [
8345
+ {
8346
+ "source": "components/rolling-count.tsx",
8347
+ "values": [
8348
+ "RollingCount"
8349
+ ]
8350
+ }
8351
+ ],
8352
+ "props": {
8353
+ "value": {
8354
+ "type": "string",
8355
+ "default": null,
8356
+ "description": "Text to show; each changed character rolls up or down into place."
8357
+ },
8358
+ "aria-label": {
8359
+ "type": "string",
8360
+ "default": null,
8361
+ "description": "What assistive technology reads instead of the value, for example 2 of 5 done."
8362
+ },
8363
+ "dir": {
8364
+ "type": "\"ltr\" | \"rtl\"",
8365
+ "default": "ltr",
8366
+ "description": "Glyph order. Stays left-to-right by default so values like 2/5 keep their order inside RTL copy."
8367
+ }
8368
+ },
8369
+ "rtl": {
8370
+ "inheritsDirection": false,
8371
+ "layout": "Digits keep left-to-right order inside RTL copy so separators such as 2/5 stay in reading order."
8372
+ },
8373
+ "files": [
8374
+ {
8375
+ "source": "components/rolling-count.css",
8376
+ "target": "{{ui}}/rolling-count.css"
8377
+ },
8378
+ {
8379
+ "source": "components/rolling-count.tsx",
8380
+ "target": "{{ui}}/rolling-count.tsx"
8381
+ }
8382
+ ],
8383
+ "examples": [
8384
+ "examples/rolling-count-demo.tsx"
8385
+ ],
8386
+ "tokens": [
8387
+ "--bh-duration-slow",
8388
+ "--bh-easing-standard"
8389
+ ]
8390
+ },
8391
+ "task-list": {
8392
+ "description": "Collapsible agent progress tracker with pending, active, and done rows, a header icon that moves from list to pie to check, and rolling counters, plus parts that compose static and folded lists.",
8393
+ "dependencies": {
8394
+ "lucide-react": "^1.17.0"
8395
+ },
8396
+ "registryDependencies": [
8397
+ "collapsible",
8398
+ "rolling-count",
8399
+ "shimmer-text"
8400
+ ],
8401
+ "parts": [
8402
+ "TaskList",
8403
+ "TaskListRoot",
8404
+ "TaskListHeader",
8405
+ "TaskListItems",
8406
+ "TaskListPreview"
8407
+ ],
8408
+ "supportedExports": [
8409
+ {
8410
+ "source": "components/task-list.tsx",
8411
+ "values": [
8412
+ "TaskList",
8413
+ "TaskListHeader",
8414
+ "TaskListItems",
8415
+ "TaskListPreview",
8416
+ "TaskListRoot"
8417
+ ]
8418
+ }
8419
+ ],
8420
+ "props": {
8421
+ "items": {
8422
+ "type": "readonly TaskListItem[]",
8423
+ "default": null,
8424
+ "description": "Rows with id, label, and pending, active, or done status."
8425
+ },
8426
+ "surface": {
8427
+ "type": "\"card\" | \"well\" | \"plain\"",
8428
+ "default": "card",
8429
+ "description": "Raised card, subtle well for embedding, or no surface."
8430
+ },
8431
+ "labels": {
8432
+ "type": "Partial<TaskListLabels>",
8433
+ "default": "English",
8434
+ "description": "Localized counter copy, read after the title in the toggle's name."
8435
+ },
8436
+ "visibleCount": {
8437
+ "type": "number",
8438
+ "default": "3",
8439
+ "description": "TaskListPreview: rows shown before the rest fold behind a more control."
8440
+ }
8441
+ },
8442
+ "states": [
8443
+ "pending",
8444
+ "active",
8445
+ "done"
8446
+ ],
8447
+ "variants": [
8448
+ "card",
8449
+ "well",
8450
+ "plain"
8451
+ ],
8452
+ "features": [
8453
+ "controlled state",
8454
+ "uncontrolled state",
8455
+ "composable parts",
8456
+ "preview fold",
8457
+ "reduced motion",
8458
+ "RTL"
8459
+ ],
8460
+ "rtl": {
8461
+ "inheritsDirection": true,
8462
+ "layout": "Rows, counters, and the collapse chevron use logical placement; the active arrow icon mirrors."
8463
+ },
8464
+ "files": [
8465
+ {
8466
+ "source": "components/task-list.css",
8467
+ "target": "{{ui}}/task-list.css"
8468
+ },
8469
+ {
8470
+ "source": "components/task-list.tsx",
8471
+ "target": "{{ui}}/task-list.tsx"
8472
+ }
8473
+ ],
8474
+ "examples": [
8475
+ "examples/task-list-demo.tsx"
8476
+ ],
8477
+ "tokens": [
8478
+ "--bh-bg-raised",
8479
+ "--bh-bg-subtle",
8480
+ "--bh-content-default",
8481
+ "--bh-content-subtle",
8482
+ "--bh-content-success-default",
8483
+ "--bh-duration-default",
8484
+ "--bh-duration-fast",
8485
+ "--bh-duration-moderate",
8486
+ "--bh-duration-slow",
8487
+ "--bh-easing-standard",
8488
+ "--bh-font-family",
8489
+ "--bh-icon-stroke-180",
8490
+ "--bh-icon-stroke-200",
8491
+ "--bh-opacity-0",
8492
+ "--bh-opacity-100",
8493
+ "--bh-radius-2xl-12",
8494
+ "--bh-radius-full",
8495
+ "--bh-radius-lg-8",
8496
+ "--bh-radius-sm-4",
8497
+ "--bh-space-4xl-20",
8498
+ "--bh-space-lg-10",
8499
+ "--bh-space-md-8",
8500
+ "--bh-space-sm-6",
8501
+ "--bh-space-xl-12",
8502
+ "--bh-space-xs-4",
8503
+ "--bh-space-xxs-2",
8504
+ "--bh-space-xxxs-1",
8505
+ "--bh-task-list-icon-size",
8506
+ "--bh-task-list-stagger",
8507
+ "--bh-text-body-xs-medium-font-weight",
8508
+ "--bh-text-body-xs-regular-font-size",
8509
+ "--bh-text-body-xs-regular-font-weight",
8510
+ "--bh-text-body-xs-regular-letter-spacing",
8511
+ "--bh-text-body-xs-regular-line-height",
8512
+ "--elevation-02",
8513
+ "--elevation-component-focus-ring"
8514
+ ]
8515
+ },
8516
+ "agent-input": {
8517
+ "description": "Composable AI prompt field with an auto-growing editor, slash-command skill palette, skill and attachment chips, an add menu for files, skills, and models, prompt enhancement with a sweeping ring, and a send action.",
8518
+ "dependencies": {
8519
+ "lucide-react": "^1.17.0"
8520
+ },
8521
+ "registryDependencies": [
8522
+ "button",
8523
+ "menu",
8524
+ "shimmer-text",
8525
+ "spinner",
8526
+ "tag"
8527
+ ],
8528
+ "parts": [
8529
+ "AgentInput"
8530
+ ],
8531
+ "supportedExports": [
8532
+ {
8533
+ "source": "components/agent-input.tsx",
8534
+ "values": [
8535
+ "AgentInput"
8536
+ ]
8537
+ }
8538
+ ],
8539
+ "props": {
8540
+ "value": {
8541
+ "type": "string",
8542
+ "default": null,
8543
+ "description": "Controlled prompt text; use defaultValue for uncontrolled usage."
8544
+ },
8545
+ "onSend": {
8546
+ "type": "(payload: AgentInputPayload) => void",
8547
+ "default": null,
8548
+ "description": "Receives text, attachments, skills, and the selected model; picked attachments carry their File for upload."
8549
+ },
8550
+ "onEnhance": {
8551
+ "type": "(prompt: string, signal: AbortSignal) => Promise<string>",
8552
+ "default": null,
8553
+ "description": "Enables the Enhance Prompt action; resolves to the rewritten prompt."
8554
+ },
8555
+ "models": {
8556
+ "type": "readonly AgentInputModel[]",
8557
+ "default": "[]",
8558
+ "description": "Selectable models with name, description, meta, and icon."
8559
+ },
8560
+ "skills": {
8561
+ "type": "readonly AgentInputSkill[]",
8562
+ "default": "[]",
8563
+ "description": "Skills available from the add menu and the slash palette."
8564
+ },
8565
+ "attachments": {
8566
+ "type": "readonly AgentInputAttachment[]",
8567
+ "default": null,
8568
+ "description": "Controlled attachment chips; omit to let the field own picked files."
8569
+ },
8570
+ "onAttachmentsChange": {
8571
+ "type": "(attachments: AgentInputAttachment[]) => void",
8572
+ "default": null,
8573
+ "description": "Called when chips are added or removed; picked files arrive with their File, so uploads can start right away."
8574
+ },
8575
+ "labels": {
8576
+ "type": "Partial<AgentInputLabels>",
8577
+ "default": "English",
8578
+ "description": "Localized placeholder, menu, action, and remove copy."
8579
+ }
8580
+ },
8581
+ "states": [
8582
+ "idle",
8583
+ "enhancing",
8584
+ "enhanced"
8585
+ ],
8586
+ "rtl": {
8587
+ "inheritsDirection": true,
8588
+ "layout": "The editor, chips, palette, and action row use logical spacing; the add menu and slash palette open toward the logical start."
8589
+ },
8590
+ "files": [
8591
+ {
8592
+ "source": "components/agent-input.css",
8593
+ "target": "{{ui}}/agent-input.css"
8594
+ },
8595
+ {
8596
+ "source": "components/agent-input.tsx",
8597
+ "target": "{{ui}}/agent-input.tsx"
8598
+ },
8599
+ {
8600
+ "source": "components/agent-input-parts.tsx",
8601
+ "target": "{{ui}}/agent-input-parts.tsx",
8602
+ "internal": true
8603
+ },
8604
+ {
8605
+ "source": "components/agent-input-state.ts",
8606
+ "target": "{{ui}}/agent-input-state.ts",
8607
+ "internal": true
8608
+ }
8609
+ ],
8610
+ "examples": [
8611
+ "examples/agent-input-demo.tsx"
8612
+ ],
8613
+ "tokens": [
8614
+ "--bh-agent-input-field-max-height",
8615
+ "--bh-agent-input-palette-width",
8616
+ "--bh-agent-input-ring-duration",
8617
+ "--bh-agent-input-ring-width",
8618
+ "--bh-bg-raised",
8619
+ "--bh-button-xs-height",
8620
+ "--bh-content-accent-aqua-default",
8621
+ "--bh-content-accent-blue-default",
8622
+ "--bh-content-accent-fuchsia-default",
8623
+ "--bh-content-accent-purple-default",
8624
+ "--bh-content-default",
8625
+ "--bh-content-disabled",
8626
+ "--bh-content-muted",
8627
+ "--bh-content-subtle",
8628
+ "--bh-duration-default",
8629
+ "--bh-duration-moderate",
8630
+ "--bh-easing-emphasized",
8631
+ "--bh-font-family",
8632
+ "--bh-menu-bg",
8633
+ "--bh-menu-item-hover-bg",
8634
+ "--bh-menu-item-radius",
8635
+ "--bh-menu-radius",
8636
+ "--bh-opacity-0",
8637
+ "--bh-opacity-100",
8638
+ "--bh-radius-2xl-12",
8639
+ "--bh-space-2xl-14",
8640
+ "--bh-space-6xl-32",
8641
+ "--bh-space-lg-10",
8642
+ "--bh-space-md-8",
8643
+ "--bh-space-sm-6",
8644
+ "--bh-space-xl-12",
8645
+ "--bh-space-xs-4",
8646
+ "--bh-space-xxs-2",
8647
+ "--bh-text-body-2xs-regular-font-size",
8648
+ "--bh-text-body-2xs-regular-font-weight",
8649
+ "--bh-text-body-2xs-regular-line-height",
8650
+ "--bh-text-body-sm-regular-font-size",
8651
+ "--bh-text-body-sm-regular-font-weight",
8652
+ "--bh-text-body-sm-regular-letter-spacing",
8653
+ "--bh-text-body-sm-regular-line-height",
8654
+ "--bh-text-body-xs-regular-font-size",
8655
+ "--bh-text-body-xs-regular-font-weight",
8656
+ "--bh-text-body-xs-regular-letter-spacing",
8657
+ "--bh-text-body-xs-regular-line-height",
8658
+ "--bh-z-popover",
8659
+ "--elevation-02",
8660
+ "--elevation-menu"
8661
+ ]
8662
+ },
8663
+ "approval-card": {
8664
+ "description": "Human-in-the-loop decision cards that pause the agent: ApprovalQuestions for up to a few questions, ApprovalCommand to approve a shell command, and ApprovalPlan to green-light a short plan with an optional auto-approve countdown, all built on the ApprovalFrame shell for custom decisions.",
8665
+ "dependencies": {
8666
+ "lucide-react": "^1.17.0"
8667
+ },
8668
+ "registryDependencies": [
8669
+ "button",
8670
+ "kbd",
8671
+ "rolling-count",
8672
+ "task-list",
8673
+ "tooltip"
8674
+ ],
8675
+ "parts": [
8676
+ "ApprovalQuestions",
8677
+ "ApprovalCommand",
8678
+ "ApprovalPlan",
8679
+ "ApprovalFrame"
8680
+ ],
8681
+ "supportedExports": [
8682
+ {
8683
+ "source": "components/approval-card.tsx",
8684
+ "values": [
8685
+ "ApprovalCommand",
8686
+ "ApprovalFrame",
8687
+ "ApprovalPlan",
8688
+ "ApprovalQuestions"
8689
+ ]
8690
+ }
8691
+ ],
8692
+ "props": {
8693
+ "questions": {
8694
+ "type": "readonly ApprovalQuestion[]",
8695
+ "default": null,
8696
+ "description": "ApprovalQuestions: single-choice questions, each with a free-text Something else option."
8697
+ },
8698
+ "command": {
8699
+ "type": "string",
8700
+ "default": null,
8701
+ "description": "ApprovalCommand: shell command shown in the mono block."
8702
+ },
8703
+ "cwd": {
8704
+ "type": "string",
8705
+ "default": null,
8706
+ "description": "ApprovalCommand: working directory shown above the command."
8707
+ },
8708
+ "plan": {
8709
+ "type": "readonly ApprovalPlanStep[]",
8710
+ "default": null,
8711
+ "description": "ApprovalPlan: steps with an id and a title, rendered as a pending to-do list. Step details belong in the full plan."
8712
+ },
8713
+ "planPreviewCount": {
8714
+ "type": "number",
8715
+ "default": "3",
8716
+ "description": "ApprovalPlan: steps shown before the more fold."
8717
+ },
8718
+ "autoApproveSeconds": {
8719
+ "type": "number",
8720
+ "default": "0",
8721
+ "description": "ApprovalPlan: opt-in countdown; at zero onApprove fires with source timeout. Either action cancels it. A new value restarts it."
8722
+ },
8723
+ "icon": {
8724
+ "type": "React.ReactNode",
8725
+ "default": null,
8726
+ "description": "ApprovalFrame: header glyph, sized and stroked by the tinted icon tile."
8727
+ },
8728
+ "tone": {
8729
+ "type": "\"info\" | \"warning\" | \"success\"",
8730
+ "default": null,
8731
+ "description": "ApprovalFrame: tint of the icon tile. Questions use info, commands warning, and plans success."
8732
+ },
8733
+ "onApprove": {
8734
+ "type": "callback",
8735
+ "default": null,
8736
+ "description": "Primary action. ApprovalQuestions passes { answers }, ApprovalPlan passes { source: user | timeout }, and ApprovalCommand passes nothing."
8737
+ },
8738
+ "onReject": {
8739
+ "type": "() => void",
8740
+ "default": null,
8741
+ "description": "Skip action on ApprovalQuestions and ApprovalCommand."
8742
+ },
8743
+ "onViewPlan": {
8744
+ "type": "() => void",
8745
+ "default": null,
8746
+ "description": "ApprovalPlan secondary action that opens the full plan; it also stops the countdown."
8747
+ },
8748
+ "labels": {
8749
+ "type": "Partial<ApprovalQuestionsLabels> | Partial<ApprovalPlanLabels>",
8750
+ "default": "English",
8751
+ "description": "Localized navigation, countdown, and helper copy for the card that uses them."
8752
+ }
8753
+ },
8754
+ "rtl": {
8755
+ "inheritsDirection": true,
8756
+ "layout": "Header, options, and actions use logical alignment; the command block and paths stay LTR while the submit arrow mirrors."
8757
+ },
8758
+ "files": [
8759
+ {
8760
+ "source": "components/approval-card.css",
8761
+ "target": "{{ui}}/approval-card.css"
8762
+ },
8763
+ {
8764
+ "source": "components/approval-card.tsx",
8765
+ "target": "{{ui}}/approval-card.tsx"
8766
+ },
8767
+ {
8768
+ "source": "components/approval-frame.tsx",
8769
+ "target": "{{ui}}/approval-frame.tsx",
8770
+ "internal": true
8771
+ },
8772
+ {
8773
+ "source": "components/approval-questions.tsx",
8774
+ "target": "{{ui}}/approval-questions.tsx",
8775
+ "internal": true
8776
+ }
8777
+ ],
8778
+ "examples": [
8779
+ "examples/approval-card-demo.tsx"
8780
+ ],
8781
+ "tokens": [
8782
+ "--bh-bg-info-subtle",
8783
+ "--bh-bg-inverse",
8784
+ "--bh-bg-raised",
8785
+ "--bh-bg-subtle",
8786
+ "--bh-bg-success-subtle",
8787
+ "--bh-bg-warning-subtle",
8788
+ "--bh-border-subtle",
8789
+ "--bh-border-success-subtle",
8790
+ "--bh-border-width-default",
8791
+ "--bh-content-default",
8792
+ "--bh-content-information-default",
8793
+ "--bh-content-inverse",
8794
+ "--bh-content-muted",
8795
+ "--bh-content-subtle",
8796
+ "--bh-content-success-default",
8797
+ "--bh-content-warning-default",
8798
+ "--bh-duration-default",
8799
+ "--bh-duration-fast",
8800
+ "--bh-duration-moderate",
8801
+ "--bh-duration-slow",
8802
+ "--bh-easing-emphasized",
8803
+ "--bh-easing-standard",
8804
+ "--bh-font-family",
8805
+ "--bh-font-family-mono",
8806
+ "--bh-icon-stroke-180",
8807
+ "--bh-icon-stroke-200",
8808
+ "--bh-icon-stroke-250",
8809
+ "--bh-opacity-0",
8810
+ "--bh-opacity-100",
8811
+ "--bh-radius-2xl-12",
8812
+ "--bh-radius-full",
8813
+ "--bh-radius-lg-8",
8814
+ "--bh-radius-md-6",
8815
+ "--bh-space-2xl-14",
8816
+ "--bh-space-3xl-16",
8817
+ "--bh-space-5xl-24",
8818
+ "--bh-space-6xl-32",
8819
+ "--bh-space-lg-10",
8820
+ "--bh-space-md-8",
8821
+ "--bh-space-sm-6",
8822
+ "--bh-space-xl-12",
8823
+ "--bh-space-xs-4",
8824
+ "--bh-space-xxs-2",
8825
+ "--bh-space-xxxs-1",
8826
+ "--bh-text-body-2xs-medium-font-size",
8827
+ "--bh-text-body-2xs-medium-font-weight",
8828
+ "--bh-text-body-2xs-regular-font-size",
8829
+ "--bh-text-body-2xs-regular-line-height",
8830
+ "--bh-text-body-3xs-regular-font-size",
8831
+ "--bh-text-body-3xs-regular-line-height",
8832
+ "--bh-text-body-md-medium-font-size",
8833
+ "--bh-text-body-md-medium-font-weight",
8834
+ "--bh-text-body-md-medium-letter-spacing",
8835
+ "--bh-text-body-md-medium-line-height",
8836
+ "--bh-text-body-xs-medium-font-weight",
8837
+ "--bh-text-body-xs-regular-font-size",
8838
+ "--bh-text-body-xs-regular-font-weight",
8839
+ "--bh-text-body-xs-regular-letter-spacing",
8840
+ "--bh-text-body-xs-regular-line-height",
8841
+ "--elevation-02",
8842
+ "--elevation-component-focus-ring"
7393
8843
  ]
7394
8844
  }
7395
8845
  }