banhaten 0.4.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 -100
  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 -245
  16. package/docs/design-system/component-quality-audit-2026-08-20.md +225 -225
  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 +97 -97
  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 +88 -88
  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 +176 -175
  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 -81
  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 +114 -60
  55. package/docs/design-system/components/item.md +59 -59
  56. package/docs/design-system/components/kbd.md +51 -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 +110 -99
  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 -65
  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 -74
  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 -59
  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 -454
  130. package/registry/components/autocomplete.tsx +598 -651
  131. package/registry/components/avatar.tsx +385 -385
  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 -1289
  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 -60
  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 -260
  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 -135
  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 -606
  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 -979
  193. package/registry/components/item.tsx +189 -189
  194. package/registry/components/kbd.tsx +246 -245
  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 -560
  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 -676
  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 -1230
  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 -235
  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 -12
  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 -101
  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 +1403 -155
  325. package/registry/styles/globals.css +946 -1088
  326. package/registry.json +361 -8
  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 +306 -192
@@ -1,64 +1,64 @@
1
- # Command
2
-
3
- Command is a cmdk-backed command menu with search input, grouped results, keyboard navigation, shortcuts, separators, and empty state.
4
-
5
- ## API
6
-
7
- ```tsx
8
- <Command>
9
- <CommandInput />
10
- <CommandList>
11
- <CommandEmpty>No results found.</CommandEmpty>
12
- <CommandGroup heading="Pages">
13
- <CommandItem value="profile">
14
- Profile
15
- <CommandShortcut>⌘P</CommandShortcut>
16
- </CommandItem>
17
- </CommandGroup>
18
- </CommandList>
19
- </Command>
20
- ```
21
-
22
- | Part | Purpose |
23
- | --- | --- |
24
- | `Command` | cmdk root |
25
- | `CommandInput` | search input |
26
- | `CommandList` | result list |
27
- | `CommandEmpty` | empty state |
28
- | `CommandGroup` | grouped results |
29
- | `CommandItem` | selectable command |
30
- | `CommandSeparator`, `CommandShortcut` | supporting row UI |
31
-
32
- ## Token Contract
33
-
34
- Command uses Banhaten raised surface, menu shadow, border, ghost hover, body typography, muted content, and radius tokens.
35
-
36
- ## RTL
37
-
38
- Command inherits direction. Labels and shortcuts use logical spacing.
39
-
40
- ## Accessibility
41
-
42
- cmdk handles keyboard navigation and selection. Provide stable `value` props for dynamic items.
43
-
44
- ## Install
45
-
46
- ```bash
47
- npx banhaten add command
48
- ```
49
-
50
- ## Examples
51
-
52
- Primary registry example: `examples/command-demo.tsx`.
53
-
54
- Open the live component page or run `npx banhaten docs command` to inspect source files, install command, and examples.
55
-
56
- ## RTL Rules
57
-
58
- - `inheritsDirection`: true
59
- - `spacing`: Command rows and shortcuts use logical spacing so shortcut placement mirrors naturally.
60
- - `textDirection`: Command copy inherits document direction; individual row labels can use dir="auto" when needed.
61
-
1
+ # Command
2
+
3
+ Command is a cmdk-backed command menu with search input, grouped results, keyboard navigation, shortcuts, separators, and empty state.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <Command>
9
+ <CommandInput />
10
+ <CommandList>
11
+ <CommandEmpty>No results found.</CommandEmpty>
12
+ <CommandGroup heading="Pages">
13
+ <CommandItem value="profile">
14
+ Profile
15
+ <CommandShortcut>⌘P</CommandShortcut>
16
+ </CommandItem>
17
+ </CommandGroup>
18
+ </CommandList>
19
+ </Command>
20
+ ```
21
+
22
+ | Part | Purpose |
23
+ | --- | --- |
24
+ | `Command` | cmdk root |
25
+ | `CommandInput` | search input |
26
+ | `CommandList` | result list |
27
+ | `CommandEmpty` | empty state |
28
+ | `CommandGroup` | grouped results |
29
+ | `CommandItem` | selectable command |
30
+ | `CommandSeparator`, `CommandShortcut` | supporting row UI |
31
+
32
+ ## Token Contract
33
+
34
+ Command uses Banhaten raised surface, menu shadow, border, ghost hover, body typography, muted content, and radius tokens.
35
+
36
+ ## RTL
37
+
38
+ Command inherits direction. Labels and shortcuts use logical spacing.
39
+
40
+ ## Accessibility
41
+
42
+ cmdk handles keyboard navigation and selection. Provide stable `value` props for dynamic items.
43
+
44
+ ## Install
45
+
46
+ ```bash
47
+ npx banhaten add command
48
+ ```
49
+
50
+ ## Examples
51
+
52
+ Primary registry example: `examples/command-demo.tsx`.
53
+
54
+ Open the live component page or run `npx banhaten docs command` to inspect source files, install command, and examples.
55
+
56
+ ## RTL Rules
57
+
58
+ - `inheritsDirection`: true
59
+ - `spacing`: Command rows and shortcuts use logical spacing so shortcut placement mirrors naturally.
60
+ - `textDirection`: Command copy inherits document direction; individual row labels can use dir="auto" when needed.
61
+
62
62
  <!-- registry-contract:start -->
63
63
  ## Registry Contract
64
64
 
@@ -71,5 +71,5 @@ This table is generated from `registry/index.json`; edit the component-owned sou
71
71
  | `parts` | `Command`, `CommandInput`, `CommandList`, `CommandEmpty`, `CommandGroup`, `CommandItem`, `CommandSeparator`, `CommandShortcut` |
72
72
  | `registryDependencies` | None |
73
73
  | `features` | `search filtering`, `keyboard navigation`, `grouped results`, `shortcut slot`, `empty state` |
74
- | `tokens` | `--bh-bg-raised`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-radius-2xl-12`, `--bh-radius-lg-8`, `--bh-space-19xl-384`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-8xl-48`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xs-4`, `--bh-text-body-md-regular-font-size`, `--bh-text-body-md-regular-font-weight`, `--bh-text-body-md-regular-letter-spacing`, `--bh-text-body-md-regular-line-height`, `--bh-text-body-sm-medium-font-size`, `--bh-text-body-sm-medium-font-weight`, `--bh-text-body-sm-medium-letter-spacing`, `--bh-text-body-sm-medium-line-height`, `--bh-text-body-sm-regular-font-size`, `--bh-text-body-sm-regular-font-weight`, `--bh-text-body-sm-regular-letter-spacing`, `--bh-text-body-sm-regular-line-height`, `--bh-text-body-xs-medium-font-size`, `--bh-text-body-xs-medium-font-weight`, `--bh-text-body-xs-medium-letter-spacing`, `--bh-text-body-xs-medium-line-height`, `--shadow-menu` |
74
+ | `tokens` | `--bh-bg-raised`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-radius-2xl-12`, `--bh-radius-lg-8`, `--bh-space-19xl-384`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-8xl-48`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xs-4`, `--bh-text-body-md-regular-font-size`, `--bh-text-body-md-regular-font-weight`, `--bh-text-body-md-regular-letter-spacing`, `--bh-text-body-md-regular-line-height`, `--bh-text-body-sm-medium-font-size`, `--bh-text-body-sm-medium-font-weight`, `--bh-text-body-sm-medium-letter-spacing`, `--bh-text-body-sm-medium-line-height`, `--bh-text-body-sm-regular-font-size`, `--bh-text-body-sm-regular-font-weight`, `--bh-text-body-sm-regular-letter-spacing`, `--bh-text-body-sm-regular-line-height`, `--bh-text-body-xs-medium-font-size`, `--bh-text-body-xs-medium-font-weight`, `--bh-text-body-xs-medium-letter-spacing`, `--bh-text-body-xs-medium-line-height`, `--elevation-menu` |
75
75
  <!-- registry-contract:end -->
@@ -1,48 +1,48 @@
1
- # Context Menu
2
-
3
- Context Menu wraps Radix ContextMenu for right-click actions with labels, separators, submenus, checkboxes, radios, and shortcuts.
4
-
5
- ## API
6
-
7
- ```tsx
8
- <ContextMenu>
9
- <ContextMenuTrigger>Right click</ContextMenuTrigger>
10
- <ContextMenuContent>
11
- <ContextMenuItem>Open</ContextMenuItem>
12
- </ContextMenuContent>
13
- </ContextMenu>
14
- ```
15
-
16
- ## Token Contract
17
-
18
- Context Menu reuses Banhaten menu width, item height, raised surface, hover, shadow, spacing, and typography tokens.
19
-
20
- ## RTL
21
-
22
- Items and shortcuts use logical spacing. Directional submenu icons flip in RTL.
23
-
24
- ## Accessibility
25
-
26
- Radix manages keyboard navigation, focus movement, item state, and submenu behavior.
27
-
28
- ## Install
29
-
30
- ```bash
31
- npx banhaten add context-menu
32
- ```
33
-
34
- ## Examples
35
-
36
- Primary registry example: `examples/context-menu-demo.tsx`.
37
-
38
- Open the live component page or run `npx banhaten docs context-menu` to inspect source files, install command, and examples.
39
-
40
- ## RTL Rules
41
-
42
- - `inheritsDirection`: true
43
- - `directionalIconFlip`: Submenu chevrons flip in RTL.
44
- - `spacing`: Items and shortcuts use logical spacing.
45
-
1
+ # Context Menu
2
+
3
+ Context Menu wraps Radix ContextMenu for right-click actions with labels, separators, submenus, checkboxes, radios, and shortcuts.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <ContextMenu>
9
+ <ContextMenuTrigger>Right click</ContextMenuTrigger>
10
+ <ContextMenuContent>
11
+ <ContextMenuItem>Open</ContextMenuItem>
12
+ </ContextMenuContent>
13
+ </ContextMenu>
14
+ ```
15
+
16
+ ## Token Contract
17
+
18
+ Context Menu reuses Banhaten menu width, item height, raised surface, hover, shadow, spacing, and typography tokens.
19
+
20
+ ## RTL
21
+
22
+ Items and shortcuts use logical spacing. Directional submenu icons flip in RTL.
23
+
24
+ ## Accessibility
25
+
26
+ Radix manages keyboard navigation, focus movement, item state, and submenu behavior.
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ npx banhaten add context-menu
32
+ ```
33
+
34
+ ## Examples
35
+
36
+ Primary registry example: `examples/context-menu-demo.tsx`.
37
+
38
+ Open the live component page or run `npx banhaten docs context-menu` to inspect source files, install command, and examples.
39
+
40
+ ## RTL Rules
41
+
42
+ - `inheritsDirection`: true
43
+ - `directionalIconFlip`: Submenu chevrons flip in RTL.
44
+ - `spacing`: Items and shortcuts use logical spacing.
45
+
46
46
  <!-- registry-contract:start -->
47
47
  ## Registry Contract
48
48
 
@@ -55,5 +55,5 @@ This table is generated from `registry/index.json`; edit the component-owned sou
55
55
  | `parts` | `ContextMenu`, `ContextMenuTrigger`, `ContextMenuContent`, `ContextMenuItem`, `ContextMenuCheckboxItem`, `ContextMenuRadioItem`, `ContextMenuLabel`, `ContextMenuSeparator`, `ContextMenuShortcut`, `ContextMenuSub`, `ContextMenuSubTrigger`, `ContextMenuSubContent` |
56
56
  | `registryDependencies` | None |
57
57
  | `features` | `right click trigger`, `submenus`, `checkbox items`, `radio items`, `shortcuts` |
58
- | `tokens` | `--bh-bg-raised`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-muted`, `--bh-menu-item-default-height`, `--bh-menu-item-hover-bg`, `--bh-menu-width`, `--bh-radius-md-6`, `--bh-radius-xl-10`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-8xl-48`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xs-4`, `--bh-text-body-sm-regular-font-size`, `--bh-text-body-sm-regular-font-weight`, `--bh-text-body-sm-regular-letter-spacing`, `--bh-text-body-sm-regular-line-height`, `--bh-text-body-xs-medium-font-size`, `--bh-text-body-xs-medium-font-weight`, `--bh-text-body-xs-medium-letter-spacing`, `--bh-text-body-xs-medium-line-height`, `--bh-z-popover`, `--shadow-menu` |
58
+ | `tokens` | `--bh-bg-raised`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-muted`, `--bh-menu-item-default-height`, `--bh-menu-item-hover-bg`, `--bh-menu-width`, `--bh-radius-md-6`, `--bh-radius-xl-10`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-8xl-48`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xs-4`, `--bh-text-body-sm-regular-font-size`, `--bh-text-body-sm-regular-font-weight`, `--bh-text-body-sm-regular-letter-spacing`, `--bh-text-body-sm-regular-line-height`, `--bh-text-body-xs-medium-font-size`, `--bh-text-body-xs-medium-font-weight`, `--bh-text-body-xs-medium-letter-spacing`, `--bh-text-body-xs-medium-line-height`, `--bh-z-popover`, `--elevation-menu` |
59
59
  <!-- registry-contract:end -->
@@ -1,83 +1,83 @@
1
- # Date Picker
2
-
3
- Date Picker is the calendar and range-selection suite for Banhaten forms. It covers single calendars, month/year views, double calendars, preset lists, date-picker triggers, date-range pickers, open/closed states, time rows, and RTL use cases.
4
-
5
- ## Install
6
-
7
- ```bash
8
- npx banhaten add date-picker
9
- ```
10
-
11
- ## Anatomy
12
-
13
- - `Calendar`: single calendar surface with day and month/year views.
14
- - `RangeCalendar`: single or double range calendar with optional preset list.
15
- - `DatePicker`: trigger plus single-date calendar surface.
16
- - `DateRangePicker`: trigger plus range calendar surface.
17
- - `DatePickerTrigger`: standalone tokenized trigger.
18
-
19
- Trigger and previous/next navigation glyphs are 18px inside 20px slots. Smaller title chevrons and calendar indicators keep their component-specific sizes.
20
-
21
- ## Example
22
-
23
- ```tsx
24
- import { DatePicker, DateRangePicker } from "@/components/ui/date-picker"
25
-
26
- export function Example() {
27
- return (
28
- <div className="grid gap-4">
29
- <DatePicker defaultOpen />
30
- <DateRangePicker type="double" />
31
- </div>
32
- )
33
- }
34
- ```
35
-
36
- ## Variants
37
-
38
- | API | Values |
39
- | --- | --- |
40
- | `Calendar view` | `days`, `month-year` |
41
- | `RangeCalendar type` | `single`, `double`, `double-with-presets` |
42
- | `DatePicker state` | `open`, `closed` |
43
- | `dir` | inherited, `ltr`, `rtl` |
44
-
45
- ## RTL
46
-
47
- The trigger, calendar header, preset list, day cells, range fill, and time rows use logical spacing and borders. Range endpoints keep their visual start/end rounding in both LTR and RTL.
48
-
49
- ## API
50
-
51
- Supported runtime exports: `Calendar`, `DatePicker`, `DatePickerTrigger`, `DateRangePicker`, `RangeCalendar`, `calendarSurface`, `pickerTrigger`, `addDays`, `addMonths`, `formatCalendarDate`, `formatCalendarRange`, `formatMonthTitle`, `getCalendarCells`, `getCalendarDayState`, `getCalendarKeyboardTarget`, `getNextRange`, `isAfterOrSameDay`, `isBeforeDay`, `isBeforeOrSameDay`, `isSameDay`, `isSameMonth`, `normalizeRange`, `startOfDay`, `startOfMonth`, `toCalendarDateId`.
52
-
53
- | Contract | Values |
54
- | --- | --- |
55
- | `modes` | `single-calendar`, `single-month-year`, `double-calendar`, `double-calendar-with-presets`, `single-range-calendar`, `date-picker`, `date-range-picker` |
56
- | `states` | `open`, `closed` |
57
-
58
- ## Examples
59
-
60
- Primary registry example: `examples/date-picker-demo.tsx`.
61
-
62
- Open the live component page or run `npx banhaten docs date-picker` to inspect source files, install command, and examples.
63
-
64
- ## Token Contract
65
-
66
- Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
67
- Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
68
- Covered source files: `components/date-picker.tsx`, `components/date-picker-state.ts`.
69
-
70
- ## RTL Rules
71
-
72
- - `inheritsDirection`: true
73
- - `triggerLayout`: The trigger uses inherited direction so the calendar icon and value mirror naturally.
74
- - `calendarLayout`: Calendar headers, range presets, date cells, and time rows use logical borders, spacing, and text alignment for LTR and RTL surfaces.
75
- - `rangeSelection`: Range fill uses logical start/end rounding for week edges and keeps selected endpoints tokenized with brand colors.
76
-
77
- ## Accessibility
78
-
79
- Keep native semantics, accessible names, keyboard reachability, focus-visible treatment, and status/error announcements intact when composing this component.
80
-
1
+ # Date Picker
2
+
3
+ Date Picker is the calendar and range-selection suite for Banhaten forms. It covers single calendars, month/year views, double calendars, preset lists, date-picker triggers, date-range pickers, open/closed states, time rows, and RTL use cases.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npx banhaten add date-picker
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ - `Calendar`: single calendar surface with day and month/year views.
14
+ - `RangeCalendar`: single or double range calendar with optional preset list.
15
+ - `DatePicker`: trigger plus single-date calendar surface.
16
+ - `DateRangePicker`: trigger plus range calendar surface.
17
+ - `DatePickerTrigger`: standalone tokenized trigger.
18
+
19
+ Trigger and previous/next navigation glyphs are 18px inside 20px slots. Smaller title chevrons and calendar indicators keep their component-specific sizes.
20
+
21
+ ## Example
22
+
23
+ ```tsx
24
+ import { DatePicker, DateRangePicker } from "@/components/ui/date-picker"
25
+
26
+ export function Example() {
27
+ return (
28
+ <div className="grid gap-4">
29
+ <DatePicker defaultOpen />
30
+ <DateRangePicker type="double" />
31
+ </div>
32
+ )
33
+ }
34
+ ```
35
+
36
+ ## Variants
37
+
38
+ | API | Values |
39
+ | --- | --- |
40
+ | `Calendar view` | `days`, `month-year` |
41
+ | `RangeCalendar type` | `single`, `double`, `double-with-presets` |
42
+ | `DatePicker state` | `open`, `closed` |
43
+ | `dir` | inherited, `ltr`, `rtl` |
44
+
45
+ ## RTL
46
+
47
+ The trigger, calendar header, preset list, day cells, range fill, and time rows use logical spacing and borders. Range endpoints keep their visual start/end rounding in both LTR and RTL.
48
+
49
+ ## API
50
+
51
+ Supported runtime exports: `Calendar`, `DatePicker`, `DatePickerTrigger`, `DateRangePicker`, `RangeCalendar`, `calendarSurface`, `pickerTrigger`, `addDays`, `addMonths`, `formatCalendarDate`, `formatCalendarRange`, `formatMonthTitle`, `getCalendarCells`, `getCalendarDayState`, `getCalendarKeyboardTarget`, `getNextRange`, `isAfterOrSameDay`, `isBeforeDay`, `isBeforeOrSameDay`, `isSameDay`, `isSameMonth`, `normalizeRange`, `startOfDay`, `startOfMonth`, `toCalendarDateId`.
52
+
53
+ | Contract | Values |
54
+ | --- | --- |
55
+ | `modes` | `single-calendar`, `single-month-year`, `double-calendar`, `double-calendar-with-presets`, `single-range-calendar`, `date-picker`, `date-range-picker` |
56
+ | `states` | `open`, `closed` |
57
+
58
+ ## Examples
59
+
60
+ Primary registry example: `examples/date-picker-demo.tsx`.
61
+
62
+ Open the live component page or run `npx banhaten docs date-picker` to inspect source files, install command, and examples.
63
+
64
+ ## Token Contract
65
+
66
+ Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
67
+ Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
68
+ Covered source files: `components/date-picker.tsx`, `components/date-picker-state.ts`.
69
+
70
+ ## RTL Rules
71
+
72
+ - `inheritsDirection`: true
73
+ - `triggerLayout`: The trigger uses inherited direction so the calendar icon and value mirror naturally.
74
+ - `calendarLayout`: Calendar headers, range presets, date cells, and time rows use logical borders, spacing, and text alignment for LTR and RTL surfaces.
75
+ - `rangeSelection`: Range fill uses logical start/end rounding for week edges and keeps selected endpoints tokenized with brand colors.
76
+
77
+ ## Accessibility
78
+
79
+ Keep native semantics, accessible names, keyboard reachability, focus-visible treatment, and status/error announcements intact when composing this component.
80
+
81
81
  <!-- registry-contract:start -->
82
82
  ## Registry Contract
83
83
 
@@ -95,5 +95,5 @@ This table is generated from `registry/index.json`; edit the component-owned sou
95
95
  | `densities` | `compact`, `default`, `comfortable` |
96
96
  | `modes` | `single-calendar`, `single-month-year`, `double-calendar`, `double-calendar-with-presets`, `single-range-calendar`, `date-picker`, `date-range-picker` |
97
97
  | `states` | `open`, `closed` |
98
- | `tokens` | `--bh-bg-brand-bold`, `--bh-bg-brand-subtle`, `--bh-bg-default`, `--bh-bg-default-hover`, `--bh-bg-raised`, `--bh-border-disabled`, `--bh-border-focus`, `--bh-border-input`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-button-sm-height`, `--bh-button-xs-height`, `--bh-content-brand-default`, `--bh-content-brand-strong`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-muted`, `--bh-content-on-brand`, `--bh-content-subtle`, `--bh-control-default`, `--bh-date-day-cell-height`, `--bh-date-event-dot-offset-bottom`, `--bh-date-event-dot-size`, `--bh-date-list-item-height`, `--bh-date-month-year-item-height`, `--bh-date-month-year-list-top`, `--bh-date-month-year-list-width`, `--bh-date-month-year-spacer-height`, `--bh-date-nav-button-size`, `--bh-date-nav-icon-size`, `--bh-date-nav-icon-slot-size`, `--bh-date-picker-width`, `--bh-date-presets-width`, `--bh-date-range-month-width`, `--bh-date-range-surface-max-width`, `--bh-date-surface-border`, `--bh-date-surface-width-calendar`, `--bh-date-surface-width-picker`, `--bh-date-time-input-min-height`, `--bh-date-title-chevron-size`, `--bh-date-title-height`, `--bh-date-trigger-border`, `--bh-date-trigger-height`, `--bh-date-trigger-icon-size`, `--bh-date-trigger-icon-slot-size`, `--bh-date-trigger-shadow`, `--bh-date-trigger-width`, `--bh-icon-stroke-180`, `--bh-interactive-ghost-hover`, `--bh-interactive-input-default`, `--bh-interactive-input-disabled`, `--bh-interactive-soft-default`, `--bh-interactive-soft-hover`, `--bh-opacity-0`, `--bh-radius-2xl-12`, `--bh-radius-full`, `--bh-radius-lg-8`, `--bh-radius-md-6`, `--bh-radius-sm-4`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-text-body-2xs-medium-font-size`, `--bh-text-body-2xs-medium-font-weight`, `--bh-text-body-2xs-medium-letter-spacing`, `--bh-text-body-2xs-medium-line-height`, `--bh-text-body-2xs-regular-font-size`, `--bh-text-body-2xs-regular-font-weight`, `--bh-text-body-2xs-regular-letter-spacing`, `--bh-text-body-2xs-regular-line-height`, `--bh-text-body-md-medium-font-size`, `--bh-text-body-md-medium-font-weight`, `--bh-text-body-md-medium-letter-spacing`, `--bh-text-body-md-medium-line-height`, `--bh-text-body-md-regular-font-size`, `--bh-text-body-md-regular-font-weight`, `--bh-text-body-md-regular-letter-spacing`, `--bh-text-body-md-regular-line-height`, `--bh-z-raised`, `--shadow-button-focus`, `--shadow-component-default`, `--shadow-date-month-year-list`, `--shadow-date-surface`, `--shadow-date-time-input`, `--shadow-input-focus-ring` |
98
+ | `tokens` | `--bh-bg-brand-bold`, `--bh-bg-brand-subtle`, `--bh-bg-default`, `--bh-bg-default-hover`, `--bh-bg-raised`, `--bh-border-disabled`, `--bh-border-focus`, `--bh-border-input`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-button-sm-height`, `--bh-button-xs-height`, `--bh-content-brand-default`, `--bh-content-brand-strong`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-muted`, `--bh-content-on-brand`, `--bh-content-subtle`, `--bh-control-default`, `--bh-date-day-cell-height`, `--bh-date-event-dot-offset-bottom`, `--bh-date-event-dot-size`, `--bh-date-list-item-height`, `--bh-date-month-year-item-height`, `--bh-date-month-year-list-top`, `--bh-date-month-year-list-width`, `--bh-date-month-year-spacer-height`, `--bh-date-nav-button-size`, `--bh-date-nav-icon-size`, `--bh-date-nav-icon-slot-size`, `--bh-date-picker-width`, `--bh-date-presets-width`, `--bh-date-range-month-width`, `--bh-date-range-surface-max-width`, `--bh-date-surface-border`, `--bh-date-surface-width-calendar`, `--bh-date-surface-width-picker`, `--bh-date-time-input-min-height`, `--bh-date-title-chevron-size`, `--bh-date-title-height`, `--bh-date-trigger-border`, `--bh-date-trigger-elevation`, `--bh-date-trigger-height`, `--bh-date-trigger-icon-size`, `--bh-date-trigger-icon-slot-size`, `--bh-date-trigger-width`, `--bh-icon-stroke-180`, `--bh-interactive-ghost-hover`, `--bh-interactive-input-default`, `--bh-interactive-input-disabled`, `--bh-interactive-soft-default`, `--bh-interactive-soft-hover`, `--bh-opacity-0`, `--bh-radius-2xl-12`, `--bh-radius-full`, `--bh-radius-lg-8`, `--bh-radius-md-6`, `--bh-radius-sm-4`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-text-body-2xs-medium-font-size`, `--bh-text-body-2xs-medium-font-weight`, `--bh-text-body-2xs-medium-letter-spacing`, `--bh-text-body-2xs-medium-line-height`, `--bh-text-body-2xs-regular-font-size`, `--bh-text-body-2xs-regular-font-weight`, `--bh-text-body-2xs-regular-letter-spacing`, `--bh-text-body-2xs-regular-line-height`, `--bh-text-body-md-medium-font-size`, `--bh-text-body-md-medium-font-weight`, `--bh-text-body-md-medium-letter-spacing`, `--bh-text-body-md-medium-line-height`, `--bh-text-body-md-regular-font-size`, `--bh-text-body-md-regular-font-weight`, `--bh-text-body-md-regular-letter-spacing`, `--bh-text-body-md-regular-line-height`, `--bh-z-raised`, `--elevation-button-focus`, `--elevation-component-default`, `--elevation-date-month-year-list`, `--elevation-date-surface`, `--elevation-date-time-input`, `--elevation-input-focus-ring` |
99
99
  <!-- registry-contract:end -->
@@ -1,105 +1,105 @@
1
- # Divider
2
-
3
- Dividers, also called separators, separate related content without creating a new surface. `Divider` is the canonical separator primitive for plain horizontal and vertical rules.
4
-
5
- Figma reference: `Divider`, node `165:3111`.
6
-
7
- ## Variants
8
-
9
- The component defines these variants:
10
-
11
- | Direction | Type |
12
- | --- | --- |
13
- | `horizontal` | `solid`, `dotted` |
14
- | `vertical` | `solid`, `dotted` |
15
-
16
- ## API
17
-
18
- Use semantic names in code even if the Figma variant labels are title-cased.
19
-
20
- ```ts
21
- type DividerDirection = "horizontal" | "vertical";
22
- type DividerType = "solid" | "dotted";
23
-
24
- type DividerProps = {
25
- direction?: DividerDirection;
26
- type?: DividerType;
27
- decorative?: boolean;
28
- };
29
- ```
30
-
31
- ## Layout
32
-
33
- - Horizontal dividers render as a `1px` high rule with the Figma component length.
34
- - Vertical dividers render as a `1px` wide rule with the same tokenized length.
35
- - Dotted dividers use a 2px dash/gap rhythm from the number scale.
36
- - Direction does not require a separate RTL prop; plain separators are direction-neutral.
37
-
38
- ## Tokens
39
-
40
- Dividers should consume existing semantic tokens:
41
-
42
- ```ts
43
- export const dividerTokens = {
44
- ruleColor: "border.subtle",
45
- strokeWidth: "space.xxxs-1",
46
- dash: "space.xxs-2",
47
- length: "space.15xl-224",
48
- };
49
- ```
50
-
51
- Do not hard-code the Figma fallback values in component code. The current Figma fallback for the rule is `rgba(55, 83, 122, 0.13)`, but the implementation should resolve through `border.subtle`.
52
-
53
- ## Accessibility
54
-
55
- - Decorative divider lines should be hidden from assistive technology.
56
- - A standalone semantic separator may render as `<hr />` or `role="separator"` when it conveys structure.
57
- - Do not use the divider as the only indicator of a required grouping if the grouping needs a visible heading.
58
-
59
- ## Usage
60
-
61
- ```tsx
62
- <Divider />
63
- <Divider type="dotted" />
64
- <Divider direction="vertical" />
65
- <Divider decorative />
66
- ```
67
-
68
- ## Preset Impact
69
-
70
- - `default`: quiet 1px rule using `border.subtle`.
71
- - `rounded`: same rule weight; surrounding compositions may use softer radius tokens.
72
- - `sharp`: same rule weight; surrounding compositions may use square or near-square containers.
73
-
74
- ## Implementation Notes
75
-
76
- - Prefer `border-top` or a 1px block rule instead of a filled rectangle.
77
- - Use `border-style: dashed` for the Figma dotted variant unless the platform has a distinct dotted token or renderer.
78
- - Compose labeled section breaks outside `Divider`; the core primitive should stay a small separator.
79
-
80
- ## Install
81
-
82
- ```bash
83
- npx banhaten add divider
84
- ```
85
-
86
- ## Examples
87
-
88
- Primary registry example: `examples/divider-demo.tsx`.
89
-
90
- Open the live component page or run `npx banhaten docs divider` to inspect source files, install command, and examples.
91
-
92
- ## Token Contract
93
-
94
- Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
95
- Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
96
- Covered source files: `components/divider.tsx`.
97
-
98
- ## RTL Rules
99
-
100
- - `inheritsDirection`: false
101
- - `geometry`: Direction maps to component orientation, not document text direction.
102
-
1
+ # Divider
2
+
3
+ Dividers, also called separators, separate related content without creating a new surface. `Divider` is the canonical separator primitive for plain horizontal and vertical rules.
4
+
5
+ Figma reference: `Divider`, node `165:3111`.
6
+
7
+ ## Variants
8
+
9
+ The component defines these variants:
10
+
11
+ | Direction | Type |
12
+ | --- | --- |
13
+ | `horizontal` | `solid`, `dotted` |
14
+ | `vertical` | `solid`, `dotted` |
15
+
16
+ ## API
17
+
18
+ Use semantic names in code even if the Figma variant labels are title-cased.
19
+
20
+ ```ts
21
+ type DividerDirection = "horizontal" | "vertical";
22
+ type DividerType = "solid" | "dotted";
23
+
24
+ type DividerProps = {
25
+ direction?: DividerDirection;
26
+ type?: DividerType;
27
+ decorative?: boolean;
28
+ };
29
+ ```
30
+
31
+ ## Layout
32
+
33
+ - Horizontal dividers render as a `1px` high rule with the Figma component length.
34
+ - Vertical dividers render as a `1px` wide rule with the same tokenized length.
35
+ - Dotted dividers use a 2px dash/gap rhythm from the number scale.
36
+ - Direction does not require a separate RTL prop; plain separators are direction-neutral.
37
+
38
+ ## Tokens
39
+
40
+ Dividers should consume existing semantic tokens:
41
+
42
+ ```ts
43
+ export const dividerTokens = {
44
+ ruleColor: "border.subtle",
45
+ strokeWidth: "space.xxxs-1",
46
+ dash: "space.xxs-2",
47
+ length: "space.15xl-224",
48
+ };
49
+ ```
50
+
51
+ Do not hard-code the Figma fallback values in component code. The current Figma fallback for the rule is `rgba(55, 83, 122, 0.13)`, but the implementation should resolve through `border.subtle`.
52
+
53
+ ## Accessibility
54
+
55
+ - Decorative divider lines should be hidden from assistive technology.
56
+ - A standalone semantic separator may render as `<hr />` or `role="separator"` when it conveys structure.
57
+ - Do not use the divider as the only indicator of a required grouping if the grouping needs a visible heading.
58
+
59
+ ## Usage
60
+
61
+ ```tsx
62
+ <Divider />
63
+ <Divider type="dotted" />
64
+ <Divider direction="vertical" />
65
+ <Divider decorative />
66
+ ```
67
+
68
+ ## Preset Impact
69
+
70
+ - `default`: quiet 1px rule using `border.subtle`.
71
+ - `rounded`: same rule weight; surrounding compositions may use softer radius tokens.
72
+ - `sharp`: same rule weight; surrounding compositions may use square or near-square containers.
73
+
74
+ ## Implementation Notes
75
+
76
+ - Prefer `border-top` or a 1px block rule instead of a filled rectangle.
77
+ - Use `border-style: dashed` for the Figma dotted variant unless the platform has a distinct dotted token or renderer.
78
+ - Compose labeled section breaks outside `Divider`; the core primitive should stay a small separator.
79
+
80
+ ## Install
81
+
82
+ ```bash
83
+ npx banhaten add divider
84
+ ```
85
+
86
+ ## Examples
87
+
88
+ Primary registry example: `examples/divider-demo.tsx`.
89
+
90
+ Open the live component page or run `npx banhaten docs divider` to inspect source files, install command, and examples.
91
+
92
+ ## Token Contract
93
+
94
+ Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
95
+ Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
96
+ Covered source files: `components/divider.tsx`.
97
+
98
+ ## RTL Rules
99
+
100
+ - `inheritsDirection`: false
101
+ - `geometry`: Direction maps to component orientation, not document text direction.
102
+
103
103
  <!-- registry-contract:start -->
104
104
  ## Registry Contract
105
105