banhaten 0.1.2 → 0.2.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 (365) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/CONTRIBUTING.md +44 -0
  3. package/README.md +145 -328
  4. package/SECURITY.md +15 -0
  5. package/banhaten.config.example.json +1 -3
  6. package/docs/design-system/README.md +20 -0
  7. package/docs/design-system/adoption-quality-remediation.md +87 -0
  8. package/docs/design-system/agent-usage.md +13 -0
  9. package/docs/design-system/appearance-presets.md +189 -0
  10. package/docs/design-system/appearances/default.md +94 -0
  11. package/docs/design-system/appearances/rounded.md +95 -0
  12. package/docs/design-system/appearances/sharp.md +95 -0
  13. package/docs/design-system/component-docs-pattern.md +81 -0
  14. package/docs/design-system/component-showcase-consistency-report.md +217 -0
  15. package/docs/design-system/component-token-consistency-audit.md +173 -0
  16. package/docs/design-system/components/README.md +75 -0
  17. package/docs/design-system/components/accordion.md +67 -0
  18. package/docs/design-system/components/activity-feed.md +106 -0
  19. package/docs/design-system/components/alert-dialog.md +87 -0
  20. package/docs/design-system/components/alert.md +111 -0
  21. package/docs/design-system/components/aspect-ratio.md +59 -0
  22. package/docs/design-system/components/attribute.md +103 -0
  23. package/docs/design-system/components/autocomplete.md +93 -0
  24. package/docs/design-system/components/avatar.md +70 -0
  25. package/docs/design-system/components/badge.md +72 -0
  26. package/docs/design-system/components/banner.md +99 -0
  27. package/docs/design-system/components/breadcrumbs.md +188 -0
  28. package/docs/design-system/components/button-group.md +117 -0
  29. package/docs/design-system/components/button.md +95 -0
  30. package/docs/design-system/components/card.md +95 -0
  31. package/docs/design-system/components/carousel.md +61 -0
  32. package/docs/design-system/components/catalog-components.md +59 -0
  33. package/docs/design-system/components/chart.md +58 -0
  34. package/docs/design-system/components/checkbox.md +68 -0
  35. package/docs/design-system/components/collapsible.md +63 -0
  36. package/docs/design-system/components/command.md +75 -0
  37. package/docs/design-system/components/context-menu.md +59 -0
  38. package/docs/design-system/components/date-picker.md +97 -0
  39. package/docs/design-system/components/divider.md +117 -0
  40. package/docs/design-system/components/empty-state.md +72 -0
  41. package/docs/design-system/components/field.md +86 -0
  42. package/docs/design-system/components/file-upload.md +199 -0
  43. package/docs/design-system/components/hover-card.md +61 -0
  44. package/docs/design-system/components/icons.md +48 -0
  45. package/docs/design-system/components/input-group.md +73 -0
  46. package/docs/design-system/components/input-otp.md +73 -0
  47. package/docs/design-system/components/input.md +84 -0
  48. package/docs/design-system/components/item.md +72 -0
  49. package/docs/design-system/components/kbd.md +62 -0
  50. package/docs/design-system/components/label.md +64 -0
  51. package/docs/design-system/components/menu.md +76 -0
  52. package/docs/design-system/components/menubar.md +60 -0
  53. package/docs/design-system/components/modal.md +119 -0
  54. package/docs/design-system/components/native-select.md +70 -0
  55. package/docs/design-system/components/navigation-menu.md +63 -0
  56. package/docs/design-system/components/onboarding-step-list-item.md +94 -0
  57. package/docs/design-system/components/page-header.md +98 -0
  58. package/docs/design-system/components/pagination.md +71 -0
  59. package/docs/design-system/components/popover.md +77 -0
  60. package/docs/design-system/components/progress-slider.md +66 -0
  61. package/docs/design-system/components/progress.md +92 -0
  62. package/docs/design-system/components/radio-card.md +65 -0
  63. package/docs/design-system/components/radio-group.md +72 -0
  64. package/docs/design-system/components/resizable.md +57 -0
  65. package/docs/design-system/components/scroll-area.md +60 -0
  66. package/docs/design-system/components/segmented-control.md +71 -0
  67. package/docs/design-system/components/select.md +87 -0
  68. package/docs/design-system/components/sheet.md +82 -0
  69. package/docs/design-system/components/sidebar.md +83 -0
  70. package/docs/design-system/components/skeleton.md +91 -0
  71. package/docs/design-system/components/slideout.md +77 -0
  72. package/docs/design-system/components/slider.md +81 -0
  73. package/docs/design-system/components/social-button.md +65 -0
  74. package/docs/design-system/components/spinner.md +77 -0
  75. package/docs/design-system/components/steps.md +77 -0
  76. package/docs/design-system/components/table.md +411 -0
  77. package/docs/design-system/components/tabs.md +69 -0
  78. package/docs/design-system/components/tag.md +95 -0
  79. package/docs/design-system/components/textarea.md +64 -0
  80. package/docs/design-system/components/timeline.md +95 -0
  81. package/docs/design-system/components/toast.md +73 -0
  82. package/docs/design-system/components/toggle.md +96 -0
  83. package/docs/design-system/components/toolbar.md +105 -0
  84. package/docs/design-system/components/tooltip.md +107 -0
  85. package/docs/design-system/components/typography.md +18 -0
  86. package/docs/design-system/density-and-elevation.md +44 -0
  87. package/docs/design-system/design-system-test-missing-items.md +368 -0
  88. package/docs/design-system/direction-and-localization.md +23 -0
  89. package/docs/design-system/form-recipes.md +73 -0
  90. package/docs/design-system/gap-promotion-policy.md +21 -0
  91. package/docs/design-system/gap-promotion-report.md +166 -0
  92. package/docs/design-system/icons.md +69 -0
  93. package/docs/design-system/installation.md +68 -0
  94. package/docs/design-system/launch-comparison-shadcn.md +98 -0
  95. package/docs/design-system/registry-and-cli.md +64 -0
  96. package/docs/design-system/release-policy.md +30 -0
  97. package/docs/design-system/roadmap.md +14 -0
  98. package/docs/design-system/support-matrix.md +23 -0
  99. package/docs/design-system/tabs.md +53 -0
  100. package/docs/design-system/token-governance.md +60 -0
  101. package/package.json +97 -65
  102. package/registry/component-contract.json +40 -0
  103. package/registry/components/alert-dialog.tsx +297 -0
  104. package/registry/components/alert.tsx +86 -65
  105. package/registry/components/aspect-ratio.tsx +30 -0
  106. package/registry/components/autocomplete.tsx +23 -9
  107. package/registry/components/avatar.tsx +7 -7
  108. package/registry/components/badge.tsx +1 -1
  109. package/registry/components/button-group.tsx +321 -4
  110. package/registry/components/button.tsx +38 -17
  111. package/registry/components/card.tsx +68 -59
  112. package/registry/components/carousel.tsx +282 -0
  113. package/registry/components/chart.tsx +203 -0
  114. package/registry/components/checkbox.tsx +3 -3
  115. package/registry/components/collapsible.tsx +69 -0
  116. package/registry/components/command.tsx +174 -0
  117. package/registry/components/context-menu.tsx +236 -0
  118. package/registry/components/date-picker.tsx +246 -105
  119. package/registry/components/expanded/ActivityFeed.tsx +6 -15
  120. package/registry/components/expanded/Banner.tsx +3 -3
  121. package/registry/components/expanded/Breadcrumbs.tsx +5 -5
  122. package/registry/components/expanded/CatalogComponentsShowcase.tsx +13 -13
  123. package/registry/components/expanded/CatalogDivider.tsx +1 -1
  124. package/registry/components/expanded/EmptyState.tsx +1 -1
  125. package/registry/components/expanded/FileUpload.tsx +9 -2
  126. package/registry/components/expanded/OnboardingStepListItem.tsx +2 -4
  127. package/registry/components/expanded/PageHeader.tsx +14 -14
  128. package/registry/components/expanded/Slideout.tsx +15 -415
  129. package/registry/components/expanded/Steps.tsx +4 -4
  130. package/registry/components/expanded/Table.tsx +116 -69
  131. package/registry/components/expanded/Timeline.tsx +3 -3
  132. package/registry/components/expanded/activityFeed.css +1 -1
  133. package/registry/components/expanded/breadcrumbs.css +139 -139
  134. package/registry/components/expanded/catalogComponentsShowcase.css +83 -83
  135. package/registry/components/expanded/divider.css +1 -1
  136. package/registry/components/expanded/emptyState.css +1 -1
  137. package/registry/components/expanded/fileUpload.css +6 -6
  138. package/registry/components/expanded/slideout.css +9 -685
  139. package/registry/components/expanded/steps.css +274 -274
  140. package/registry/components/expanded/table.css +2 -2
  141. package/registry/components/expanded/timeline.css +264 -264
  142. package/registry/components/field.tsx +230 -0
  143. package/registry/components/hover-card.tsx +48 -0
  144. package/registry/components/input-content.ts +1 -0
  145. package/registry/components/input-group.tsx +130 -0
  146. package/registry/components/input-otp.tsx +13 -3
  147. package/registry/components/input.tsx +70 -45
  148. package/registry/components/item.tsx +189 -0
  149. package/registry/components/kbd.tsx +151 -0
  150. package/registry/components/label.tsx +78 -0
  151. package/registry/components/menu.tsx +34 -246
  152. package/registry/components/menubar.tsx +226 -0
  153. package/registry/components/modal.tsx +216 -143
  154. package/registry/components/native-select.tsx +205 -0
  155. package/registry/components/navigation-menu.tsx +171 -0
  156. package/registry/components/pagination.tsx +80 -58
  157. package/registry/components/popover.tsx +162 -664
  158. package/registry/components/radio-card.tsx +116 -87
  159. package/registry/components/radio-group.tsx +1 -1
  160. package/registry/components/resizable.tsx +74 -0
  161. package/registry/components/scroll-area.tsx +67 -0
  162. package/registry/components/segmented-control.tsx +87 -0
  163. package/registry/components/select-content.tsx +2 -2
  164. package/registry/components/select.tsx +54 -20
  165. package/registry/components/sheet.tsx +305 -0
  166. package/registry/components/sidebar.tsx +352 -0
  167. package/registry/components/skeleton.css +0 -3
  168. package/registry/components/social-button.tsx +116 -30
  169. package/registry/components/spinner.tsx +18 -55
  170. package/registry/components/{expanded/tabs.css → tabs.css} +127 -106
  171. package/registry/components/tabs.tsx +246 -0
  172. package/registry/components/tag.tsx +2 -2
  173. package/registry/components/textarea.tsx +4 -4
  174. package/registry/components/toast.tsx +136 -0
  175. package/registry/components/toggle.tsx +2 -2
  176. package/registry/components/toolbar.tsx +89 -17
  177. package/registry/components/tooltip.tsx +1 -1
  178. package/registry/examples/alert-demo.tsx +25 -5
  179. package/registry/examples/alert-dialog-demo.tsx +42 -0
  180. package/registry/examples/aspect-ratio-demo.tsx +11 -0
  181. package/registry/examples/attribute-demo.tsx +1 -1
  182. package/registry/examples/autocomplete-demo.tsx +3 -3
  183. package/registry/examples/avatar-demo.tsx +7 -7
  184. package/registry/examples/badge-demo.tsx +1 -1
  185. package/registry/examples/button-demo.tsx +6 -6
  186. package/registry/examples/button-group-demo.tsx +23 -2
  187. package/registry/examples/card-demo.tsx +46 -8
  188. package/registry/examples/carousel-demo.tsx +43 -0
  189. package/registry/examples/chart-demo.tsx +33 -0
  190. package/registry/examples/checkbox-demo.tsx +5 -5
  191. package/registry/examples/collapsible-demo.tsx +16 -0
  192. package/registry/examples/collection-filter-bar-demo.tsx +135 -0
  193. package/registry/examples/command-demo.tsx +42 -0
  194. package/registry/examples/{expanded/command-bar-demo.tsx → command-palette-demo.tsx} +5 -15
  195. package/registry/examples/context-menu-demo.tsx +29 -0
  196. package/registry/examples/control-density-contract-demo.tsx +61 -0
  197. package/registry/examples/date-picker-demo.tsx +12 -12
  198. package/registry/examples/divider-demo.tsx +3 -3
  199. package/registry/examples/expanded/banner-demo.tsx +1 -1
  200. package/registry/examples/expanded/breadcrumbs-demo.tsx +1 -1
  201. package/registry/examples/expanded/empty-state-demo.tsx +1 -1
  202. package/registry/examples/expanded/file-upload-demo.tsx +1 -1
  203. package/registry/examples/expanded/onboarding-step-demo.tsx +1 -1
  204. package/registry/examples/expanded/slideout-demo.tsx +2 -2
  205. package/registry/examples/expanded/steps-demo.tsx +1 -1
  206. package/registry/examples/expanded/tabs-demo.tsx +2 -2
  207. package/registry/examples/expanded/timeline-demo.tsx +1 -1
  208. package/registry/examples/field-demo.tsx +51 -0
  209. package/registry/examples/hover-card-demo.tsx +23 -0
  210. package/registry/examples/input-demo.tsx +6 -6
  211. package/registry/examples/input-group-demo.tsx +16 -0
  212. package/registry/examples/input-otp-demo.tsx +4 -4
  213. package/registry/examples/item-demo.tsx +46 -0
  214. package/registry/examples/kbd-demo.tsx +11 -0
  215. package/registry/examples/label-demo.tsx +20 -0
  216. package/registry/examples/menu-demo.tsx +1 -1
  217. package/registry/examples/menubar-demo.tsx +34 -0
  218. package/registry/examples/modal-demo.tsx +67 -9
  219. package/registry/examples/native-select-demo.tsx +16 -0
  220. package/registry/examples/navigation-menu-demo.tsx +29 -0
  221. package/registry/examples/pagination-demo.tsx +6 -3
  222. package/registry/examples/popover-demo.tsx +19 -19
  223. package/registry/examples/progress-demo.tsx +1 -1
  224. package/registry/examples/progress-slider-demo.tsx +1 -1
  225. package/registry/examples/radio-card-demo.tsx +4 -4
  226. package/registry/examples/radio-group-demo.tsx +2 -2
  227. package/registry/examples/resizable-demo.tsx +22 -0
  228. package/registry/examples/results-toolbar-demo.tsx +44 -0
  229. package/registry/examples/scroll-area-demo.tsx +15 -0
  230. package/registry/examples/segmented-control-demo.tsx +39 -0
  231. package/registry/examples/select-demo.tsx +1 -1
  232. package/registry/examples/sheet-demo.tsx +47 -0
  233. package/registry/examples/sidebar-demo.tsx +55 -0
  234. package/registry/examples/slider-demo.tsx +3 -3
  235. package/registry/examples/social-button-demo.tsx +18 -8
  236. package/registry/examples/spinner-demo.tsx +13 -13
  237. package/registry/examples/tabs-demo.tsx +13 -0
  238. package/registry/examples/tag-demo.tsx +1 -1
  239. package/registry/examples/textarea-demo.tsx +4 -4
  240. package/registry/examples/toast-demo.tsx +35 -0
  241. package/registry/examples/toggle-demo.tsx +6 -6
  242. package/registry/examples/tooltip-demo.tsx +4 -4
  243. package/registry/guidance/USAGE.md +27 -0
  244. package/registry/hooks/use-direction.ts +193 -13
  245. package/registry/index.json +6010 -432
  246. package/registry/styles/globals.css +3112 -4690
  247. package/registry.json +1582 -0
  248. package/schema/config.schema.json +51 -0
  249. package/schema/registry.schema.json +190 -0
  250. package/schema/tokens.schema.json +163 -0
  251. package/src/cli/command-line.js +194 -0
  252. package/src/cli/config-editors.js +9 -0
  253. package/src/cli/doctor.js +399 -0
  254. package/src/cli/file-transaction.js +295 -0
  255. package/src/cli/global-css.js +153 -0
  256. package/src/cli/index.js +639 -1391
  257. package/src/cli/install-plan.js +592 -0
  258. package/src/cli/install-receipt.js +171 -0
  259. package/src/cli/jsonc.js +203 -0
  260. package/src/cli/package-install-state.js +254 -0
  261. package/src/cli/package-manager.js +238 -0
  262. package/src/cli/package-plan.js +185 -0
  263. package/src/cli/package-version.js +97 -0
  264. package/src/cli/registry-query.js +207 -0
  265. package/src/cli/reporting.js +55 -0
  266. package/src/cli/schema-validation.js +19 -0
  267. package/src/cli/source-scanner.js +686 -0
  268. package/src/cli/vite-config.js +478 -0
  269. package/tokens/banhaten.tokens.json +4313 -310
  270. package/registry/assets/avatars/avatar-02.jpg +0 -0
  271. package/registry/assets/avatars/avatar-03.jpg +0 -0
  272. package/registry/assets/avatars/avatar-04.jpg +0 -0
  273. package/registry/assets/avatars/avatar-05.jpg +0 -0
  274. package/registry/assets/avatars/avatar-06.jpg +0 -0
  275. package/registry/assets/avatars/avatar-07.jpg +0 -0
  276. package/registry/assets/avatars/avatar-08.jpg +0 -0
  277. package/registry/assets/avatars/avatar-09.jpg +0 -0
  278. package/registry/assets/avatars/avatar-10.jpg +0 -0
  279. package/registry/assets/avatars/avatar-11.jpg +0 -0
  280. package/registry/assets/avatars/avatar-12.jpg +0 -0
  281. package/registry/assets/avatars/avatar-13.jpg +0 -0
  282. package/registry/assets/avatars/avatar-14.jpg +0 -0
  283. package/registry/assets/avatars/avatar-15.jpg +0 -0
  284. package/registry/assets/avatars/avatar-16.jpg +0 -0
  285. package/registry/assets/avatars/avatar-17.jpg +0 -0
  286. package/registry/assets/avatars/avatar-18.jpg +0 -0
  287. package/registry/assets/avatars/avatar-19.jpg +0 -0
  288. package/registry/assets/avatars/avatar-20.jpg +0 -0
  289. package/registry/assets/avatars/avatar-21.jpg +0 -0
  290. package/registry/assets/avatars/avatar-22.jpg +0 -0
  291. package/registry/assets/avatars/avatar-23.jpg +0 -0
  292. package/registry/assets/avatars/avatar-24.jpg +0 -0
  293. package/registry/assets/avatars/avatar-25.jpg +0 -0
  294. package/registry/assets/avatars/avatar-26.jpg +0 -0
  295. package/registry/assets/avatars/avatar-27.jpg +0 -0
  296. package/registry/assets/avatars/avatar-28.jpg +0 -0
  297. package/registry/assets/avatars/avatar-29.jpg +0 -0
  298. package/registry/assets/avatars/avatar-30.jpg +0 -0
  299. package/registry/assets/avatars/avatar-31.jpg +0 -0
  300. package/registry/assets/avatars/avatar-32.jpg +0 -0
  301. package/registry/assets/avatars/avatar-33.jpg +0 -0
  302. package/registry/assets/avatars/avatar-34.jpg +0 -0
  303. package/registry/assets/avatars/avatar-35.jpg +0 -0
  304. package/registry/assets/image-assets.json +0 -744
  305. package/registry/assets/images/art-02.jpg +0 -0
  306. package/registry/assets/images/art-03.jpg +0 -0
  307. package/registry/assets/images/art-04.jpg +0 -0
  308. package/registry/assets/images/art-05.jpg +0 -0
  309. package/registry/assets/images/art-06.jpg +0 -0
  310. package/registry/assets/images/art-07.jpg +0 -0
  311. package/registry/assets/images/art-08.jpg +0 -0
  312. package/registry/assets/images/art-09.jpg +0 -0
  313. package/registry/assets/images/art-10.jpg +0 -0
  314. package/registry/assets/images/art-11.jpg +0 -0
  315. package/registry/assets/images/art-12.jpg +0 -0
  316. package/registry/assets/images/art-13.jpg +0 -0
  317. package/registry/assets/images/art-14.jpg +0 -0
  318. package/registry/assets/images/art-15.jpg +0 -0
  319. package/registry/assets/images/art-16.jpg +0 -0
  320. package/registry/assets/images/art-17.jpg +0 -0
  321. package/registry/assets/images/art-18.jpg +0 -0
  322. package/registry/assets/images/art-19.jpg +0 -0
  323. package/registry/assets/images/art-20.jpg +0 -0
  324. package/registry/assets/images/art-21.jpg +0 -0
  325. package/registry/assets/images/art-22.jpg +0 -0
  326. package/registry/assets/images/art-23.jpg +0 -0
  327. package/registry/assets/images/art-24.jpg +0 -0
  328. package/registry/assets/images/art-25.jpg +0 -0
  329. package/registry/assets/images/art-26.jpg +0 -0
  330. package/registry/assets/images/art-27.jpg +0 -0
  331. package/registry/assets/images/nature-01.jpg +0 -0
  332. package/registry/assets/images/nature-02.jpg +0 -0
  333. package/registry/assets/images/nature-03.jpg +0 -0
  334. package/registry/assets/images/nature-04.jpg +0 -0
  335. package/registry/assets/images/nature-05.jpg +0 -0
  336. package/registry/assets/images/nature-06.jpg +0 -0
  337. package/registry/assets/images/nature-07.jpg +0 -0
  338. package/registry/assets/images/nature-08.jpg +0 -0
  339. package/registry/assets/images/nature-09.jpg +0 -0
  340. package/registry/assets/images/nature-10.jpg +0 -0
  341. package/registry/assets/images/nature-11.jpg +0 -0
  342. package/registry/assets/images/nature-12.jpg +0 -0
  343. package/registry/assets/images/nature-13.jpg +0 -0
  344. package/registry/assets/images/nature-14.jpg +0 -0
  345. package/registry/assets/images/nature-15.jpg +0 -0
  346. package/registry/assets/images/nature-16.jpg +0 -0
  347. package/registry/assets/images/nature-17.jpg +0 -0
  348. package/registry/assets/images/nature-18.jpg +0 -0
  349. package/registry/assets/images/nature-19.jpg +0 -0
  350. package/registry/assets/images/nature-20.jpg +0 -0
  351. package/registry/components/expanded/BannerBoard.tsx +0 -225
  352. package/registry/components/expanded/CatalogTag.tsx +0 -85
  353. package/registry/components/expanded/CommandBar.tsx +0 -386
  354. package/registry/components/expanded/IconExplorer.tsx +0 -612
  355. package/registry/components/expanded/Tabs.tsx +0 -86
  356. package/registry/components/expanded/TimelineShowcase.tsx +0 -158
  357. package/registry/components/expanded/commandBar.css +0 -470
  358. package/registry/components/expanded/iconExplorer.css +0 -764
  359. package/registry/components/expanded/iconPacks.ts +0 -866
  360. package/registry/components/expanded/tag.css +0 -148
  361. package/registry/examples/expanded/icons-demo.tsx +0 -5
  362. package/tokens/Color mode.zip +0 -0
  363. package/tokens/Numbers.zip +0 -0
  364. package/tokens/Radius.zip +0 -0
  365. package/tokens/Theme.zip +0 -0
@@ -0,0 +1,59 @@
1
+ # Catalog Components
2
+
3
+ Catalog Components is an expanded-tier showcase bundle for catalog-style product pages. It brings together breadcrumbs, catalog-only dividers, catalog tag previews, file upload states, and table previews.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <CatalogComponentsShowcase dir="ltr" />
9
+ ```
10
+
11
+ | Included part | Source |
12
+ | --- | --- |
13
+ | `Breadcrumbs` | expanded breadcrumbs component |
14
+ | `CatalogContentDivider`, `CatalogDivider` | catalog divider visuals |
15
+ | `Tag` | core tag component, previewed in the showcase |
16
+ | `FileUpload` | expanded upload states |
17
+ | `Table` | expanded table preview |
18
+
19
+ ## Token Contract
20
+
21
+ The bundle uses expanded-tier CSS files plus Banhaten button, surface, border, spacing, typography, tag, upload, and table tokens. Treat this as a composition bundle, not a new primitive token namespace.
22
+
23
+ ## RTL
24
+
25
+ Catalog examples include LTR and RTL states through the child components. Breadcrumbs, upload rows, table content, and tags should inherit direction from the wrapper.
26
+
27
+ ## Accessibility
28
+
29
+ Use the individual child component docs for production semantics. This page is a bundled visual reference for catalog composition and component fit.
30
+
31
+ ## Install
32
+
33
+ ```bash
34
+ npx banhaten add catalog-components
35
+ ```
36
+
37
+ ## Examples
38
+
39
+ Primary registry example: `examples/expanded/catalog-components-demo.tsx`.
40
+
41
+ Open the live component page or run `npx banhaten docs catalog-components` to inspect source files, install command, and examples.
42
+
43
+ ## RTL Rules
44
+
45
+ This component has no special RTL contract beyond inherited document direction and logical spacing.
46
+
47
+ <!-- registry-contract:start -->
48
+ ## Registry Contract
49
+
50
+ This table is generated from `registry/index.json`; edit the component-owned source under `registry/catalog/components/`, not this table or the compiled index.
51
+ `supportedExports` is the exhaustive runtime import contract grouped by source module. `parts` is an ordered, non-exhaustive anatomy list.
52
+
53
+ | Field | Values |
54
+ | --- | --- |
55
+ | `supportedExports` | `components/expanded/CatalogComponentsShowcase.tsx: CatalogComponentsShowcase`, `components/expanded/CatalogDivider.tsx: CatalogContentDivider, CatalogDivider` |
56
+ | `parts` | `CatalogContentDivider`, `CatalogDivider`, `CatalogComponentsShowcase` |
57
+ | `registryDependencies` | `breadcrumbs`, `button`, `file-upload`, `table`, `tag` |
58
+ | `tokens` | `--bh-bg-raised`, `--bh-border-focus`, `--bh-border-subtle`, `--bh-catalog-file-grid-max`, `--bh-catalog-file-grid-min`, `--bh-catalog-file-preview-max`, `--bh-catalog-file-preview-min`, `--bh-content-default`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-control-default`, `--bh-focus-ring-width`, `--bh-font-family`, `--bh-font-weight-medium`, `--bh-font-weight-regular`, `--bh-interactive-ghost-hover`, `--bh-interactive-soft-default`, `--bh-opacity-65`, `--bh-radius-lg-8`, `--bh-space-2xl-14`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-6xl-32`, `--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-space-xxxs-1`, `--bh-text-base-letter-spacing`, `--bh-text-body-md-font-size`, `--bh-text-body-md-line-height`, `--bh-text-body-sm-regular-line-height`, `--bh-text-body-xs-regular-font-size`, `--bh-text-heading-xs-semibold-font-size`, `--bh-text-heading-xs-semibold-font-weight`, `--bh-text-heading-xs-semibold-line-height`, `--shadow-component-default` |
59
+ <!-- registry-contract:end -->
@@ -0,0 +1,58 @@
1
+ # Chart
2
+
3
+ Chart provides Recharts wrappers with Banhaten chart tokens, responsive sizing, tooltip content, and legend content.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <ChartContainer config={{ revenue: { color: "var(--bh-chart-1)" } }}>
9
+ <LineChart data={data}>
10
+ <ChartTooltip content={<ChartTooltipContent />} />
11
+ <Line dataKey="revenue" stroke="var(--color-revenue)" />
12
+ </LineChart>
13
+ </ChartContainer>
14
+ ```
15
+
16
+ ## Token Contract
17
+
18
+ Chart adds `--bh-chart-1` through `--bh-chart-5` via the token build. `ChartContainer` maps config entries to `--color-*` variables.
19
+
20
+ ## RTL
21
+
22
+ Chart layout depends on the Recharts configuration. Surrounding labels and legends use logical layout.
23
+
24
+ ## Accessibility
25
+
26
+ Pair charts with text summaries or tables for critical data. Tooltips are supplemental.
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ npx banhaten add chart
32
+ ```
33
+
34
+ ## Examples
35
+
36
+ Primary registry example: `examples/chart-demo.tsx`.
37
+
38
+ Open the live component page or run `npx banhaten docs chart` to inspect source files, install command, and examples.
39
+
40
+ ## RTL Rules
41
+
42
+ - `inheritsDirection`: true
43
+ - `layout`: Chart labels and legends should use logical layout; chart geometry is controlled by Recharts.
44
+
45
+ <!-- registry-contract:start -->
46
+ ## Registry Contract
47
+
48
+ This table is generated from `registry/index.json`; edit the component-owned source under `registry/catalog/components/`, not this table or the compiled index.
49
+ `supportedExports` is the exhaustive runtime import contract grouped by source module. `parts` is an ordered, non-exhaustive anatomy list.
50
+
51
+ | Field | Values |
52
+ | --- | --- |
53
+ | `supportedExports` | `components/chart.tsx: ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent` |
54
+ | `parts` | `ChartContainer`, `ChartTooltip`, `ChartTooltipContent`, `ChartLegend`, `ChartLegendContent` |
55
+ | `registryDependencies` | None |
56
+ | `features` | `responsive container`, `tooltip content`, `legend content`, `config colors` |
57
+ | `tokens` | `--bh-bg-neutral-subtle`, `--bh-bg-raised`, `--bh-border-subtle`, `--bh-chart-categorical-aqua`, `--bh-chart-categorical-brand`, `--bh-chart-categorical-danger`, `--bh-chart-categorical-fuchsia`, `--bh-chart-categorical-information`, `--bh-chart-categorical-purple`, `--bh-chart-categorical-success`, `--bh-chart-categorical-warning`, `--bh-content-default`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-radius-full`, `--bh-radius-lg-8`, `--bh-space-17xl-288`, `--bh-space-19xl-384`, `--bh-space-3xl-16`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-text-body-xs-medium-font-size`, `--bh-text-body-xs-medium-font-weight`, `--bh-text-body-xs-regular-font-size`, `--bh-text-body-xs-regular-font-weight`, `--bh-text-body-xs-regular-letter-spacing`, `--bh-text-body-xs-regular-line-height`, `--shadow-popover` |
58
+ <!-- registry-contract:end -->
@@ -0,0 +1,68 @@
1
+ # Checkbox
2
+
3
+ Checkbox is the binary selection primitive for forms, preferences, batch actions, and card-style options. It includes the base Radix checkbox control plus `CheckboxCard` for labeled option rows.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <Checkbox aria-label="Accept terms" />
9
+
10
+ <CheckboxCard
11
+ title="Email updates"
12
+ description="Receive product and billing notifications."
13
+ controlPosition="start"
14
+ />
15
+ ```
16
+
17
+ | Prop | Values |
18
+ | --- | --- |
19
+ | `checked` | Radix checkbox checked state |
20
+ | `disabled` | `boolean` |
21
+ | `CheckboxCard.controlPosition` | `start`, `end` |
22
+ | `CheckboxCard.state` | default, selected, disabled |
23
+
24
+ ## Token Contract
25
+
26
+ Checkbox consumes Banhaten control size, radius, component shadow, border, background, content, interactive, disabled, and typography tokens.
27
+
28
+ ## RTL
29
+
30
+ `CheckboxCard` uses logical start/end control placement. Labels and descriptions use tokenized body text and `dir="auto"` for mixed Arabic and English copy.
31
+
32
+ ## Accessibility
33
+
34
+ Use native labels or `aria-label` for standalone checkboxes. Prefer `CheckboxCard` when the selection target needs title and description text.
35
+
36
+ ## Install
37
+
38
+ ```bash
39
+ npx banhaten add checkbox
40
+ ```
41
+
42
+ ## Examples
43
+
44
+ Primary registry example: `examples/checkbox-demo.tsx`.
45
+
46
+ Open the live component page or run `npx banhaten docs checkbox` to inspect source files, install command, and examples.
47
+
48
+ ## RTL Rules
49
+
50
+ - `inheritsDirection`: true
51
+ - `controlPlacement`: The card uses start/end control placement so the checkbox mirrors correctly in RTL.
52
+ - `textDirection`: Labels and descriptions use dir="auto" and tokenized body-md/body-sm typography.
53
+
54
+ <!-- registry-contract:start -->
55
+ ## Registry Contract
56
+
57
+ This table is generated from `registry/index.json`; edit the component-owned source under `registry/catalog/components/`, not this table or the compiled index.
58
+ `supportedExports` is the exhaustive runtime import contract grouped by source module. `parts` is an ordered, non-exhaustive anatomy list.
59
+
60
+ | Field | Values |
61
+ | --- | --- |
62
+ | `supportedExports` | `components/checkbox.tsx: Checkbox, CheckboxCard, checkboxCardVariants, checkboxVariants` |
63
+ | `parts` | `Checkbox`, `CheckboxCard` |
64
+ | `registryDependencies` | None |
65
+ | `cardPositions` | `start`, `end` |
66
+ | `states` | `unchecked`, `checked`, `indeterminate`, `selected`, `disabled` |
67
+ | `tokens` | `--bh-bg-default`, `--bh-bg-disabled`, `--bh-bg-raised`, `--bh-bg-raised-hover`, `--bh-border-brand-strong`, `--bh-border-disabled`, `--bh-border-input`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-checkbox-card-border`, `--bh-checkbox-card-border-width`, `--bh-checkbox-card-border-width-active`, `--bh-checkbox-card-border-width-current`, `--bh-checkbox-card-content-gap`, `--bh-checkbox-card-gap`, `--bh-checkbox-card-label-gap`, `--bh-checkbox-card-media-icon-size`, `--bh-checkbox-card-padding`, `--bh-checkbox-card-radius`, `--bh-checkbox-card-text-gap`, `--bh-checkbox-card-width`, `--bh-checkbox-control-border`, `--bh-checkbox-control-radius`, `--bh-checkbox-control-size`, `--bh-checkbox-icon-size`, `--bh-checkbox-root-size`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-on-color`, `--bh-content-subtle`, `--bh-icon-stroke-300`, `--bh-interactive-checkbox-default`, `--bh-interactive-checkbox-hover`, `--bh-opacity-60`, `--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-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`, `--shadow-checkbox-card`, `--shadow-checkbox-card-focus`, `--shadow-checkbox-control`, `--shadow-checkbox-focus`, `--shadow-component-default` |
68
+ <!-- registry-contract:end -->
@@ -0,0 +1,63 @@
1
+ # Collapsible
2
+
3
+ Collapsible wraps Radix Collapsible for disclosure sections with Banhaten trigger and content styling.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <Collapsible defaultOpen>
9
+ <CollapsibleTrigger>Workspace details</CollapsibleTrigger>
10
+ <CollapsibleContent>Billing and team settings.</CollapsibleContent>
11
+ </Collapsible>
12
+ ```
13
+
14
+ | Part | Purpose |
15
+ | --- | --- |
16
+ | `Collapsible` | Radix root |
17
+ | `CollapsibleTrigger` | disclosure button |
18
+ | `CollapsibleContent` | expandable content region |
19
+
20
+ ## Token Contract
21
+
22
+ Collapsible uses Banhaten spacing, radius, body typography, ghost hover, focus, and content tokens.
23
+
24
+ ## RTL
25
+
26
+ The trigger and content use logical text alignment and inherit document direction.
27
+
28
+ ## Accessibility
29
+
30
+ Radix manages expanded state, trigger attributes, and content relationships.
31
+
32
+ ## Install
33
+
34
+ ```bash
35
+ npx banhaten add collapsible
36
+ ```
37
+
38
+ ## Examples
39
+
40
+ Primary registry example: `examples/collapsible-demo.tsx`.
41
+
42
+ Open the live component page or run `npx banhaten docs collapsible` to inspect source files, install command, and examples.
43
+
44
+ ## RTL Rules
45
+
46
+ - `inheritsDirection`: true
47
+ - `textAlignment`: Trigger and content use logical text alignment and inherit direction.
48
+ - `spacing`: Icon and label spacing uses flex gap so it mirrors with document direction.
49
+
50
+ <!-- registry-contract:start -->
51
+ ## Registry Contract
52
+
53
+ This table is generated from `registry/index.json`; edit the component-owned source under `registry/catalog/components/`, not this table or the compiled index.
54
+ `supportedExports` is the exhaustive runtime import contract grouped by source module. `parts` is an ordered, non-exhaustive anatomy list.
55
+
56
+ | Field | Values |
57
+ | --- | --- |
58
+ | `supportedExports` | `components/collapsible.tsx: Collapsible, CollapsibleContent, CollapsibleTrigger` |
59
+ | `parts` | `Collapsible`, `CollapsibleTrigger`, `CollapsibleContent` |
60
+ | `registryDependencies` | None |
61
+ | `features` | `controlled state`, `uncontrolled state`, `keyboard trigger`, `RTL` |
62
+ | `tokens` | `--bh-content-default`, `--bh-content-subtle`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-radius-lg-8`, `--bh-space-3xl-16`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-xl-12`, `--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-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`, `--shadow-button-focus` |
63
+ <!-- registry-contract:end -->
@@ -0,0 +1,75 @@
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
+ <!-- registry-contract:start -->
63
+ ## Registry Contract
64
+
65
+ This table is generated from `registry/index.json`; edit the component-owned source under `registry/catalog/components/`, not this table or the compiled index.
66
+ `supportedExports` is the exhaustive runtime import contract grouped by source module. `parts` is an ordered, non-exhaustive anatomy list.
67
+
68
+ | Field | Values |
69
+ | --- | --- |
70
+ | `supportedExports` | `components/command.tsx: Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut` |
71
+ | `parts` | `Command`, `CommandInput`, `CommandList`, `CommandEmpty`, `CommandGroup`, `CommandItem`, `CommandSeparator`, `CommandShortcut` |
72
+ | `registryDependencies` | None |
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` |
75
+ <!-- registry-contract:end -->
@@ -0,0 +1,59 @@
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
+ <!-- registry-contract:start -->
47
+ ## Registry Contract
48
+
49
+ This table is generated from `registry/index.json`; edit the component-owned source under `registry/catalog/components/`, not this table or the compiled index.
50
+ `supportedExports` is the exhaustive runtime import contract grouped by source module. `parts` is an ordered, non-exhaustive anatomy list.
51
+
52
+ | Field | Values |
53
+ | --- | --- |
54
+ | `supportedExports` | `components/context-menu.tsx: ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger` |
55
+ | `parts` | `ContextMenu`, `ContextMenuTrigger`, `ContextMenuContent`, `ContextMenuItem`, `ContextMenuCheckboxItem`, `ContextMenuRadioItem`, `ContextMenuLabel`, `ContextMenuSeparator`, `ContextMenuShortcut`, `ContextMenuSub`, `ContextMenuSubTrigger`, `ContextMenuSubContent` |
56
+ | `registryDependencies` | None |
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` |
59
+ <!-- registry-contract:end -->
@@ -0,0 +1,97 @@
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
+ ## Example
20
+
21
+ ```tsx
22
+ import { DatePicker, DateRangePicker } from "@/components/ui/date-picker"
23
+
24
+ export function Example() {
25
+ return (
26
+ <div className="grid gap-4">
27
+ <DatePicker defaultOpen />
28
+ <DateRangePicker type="double" />
29
+ </div>
30
+ )
31
+ }
32
+ ```
33
+
34
+ ## Variants
35
+
36
+ | API | Values |
37
+ | --- | --- |
38
+ | `Calendar view` | `days`, `month-year` |
39
+ | `RangeCalendar type` | `single`, `double`, `double-with-presets` |
40
+ | `DatePicker state` | `open`, `closed` |
41
+ | `dir` | inherited, `ltr`, `rtl` |
42
+
43
+ ## RTL
44
+
45
+ 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.
46
+
47
+ ## API
48
+
49
+ 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`.
50
+
51
+ | Contract | Values |
52
+ | --- | --- |
53
+ | `modes` | `single-calendar`, `single-month-year`, `double-calendar`, `double-calendar-with-presets`, `single-range-calendar`, `date-picker`, `date-range-picker` |
54
+ | `states` | `open`, `closed` |
55
+
56
+ ## Examples
57
+
58
+ Primary registry example: `examples/date-picker-demo.tsx`.
59
+
60
+ Open the live component page or run `npx banhaten docs date-picker` to inspect source files, install command, and examples.
61
+
62
+ ## Token Contract
63
+
64
+ Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
65
+ Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
66
+ Covered source files: `components/date-picker.tsx`, `components/date-picker-state.ts`.
67
+
68
+ ## RTL Rules
69
+
70
+ - `inheritsDirection`: true
71
+ - `triggerLayout`: The trigger uses inherited direction so the calendar icon and value mirror naturally.
72
+ - `calendarLayout`: Calendar headers, range presets, date cells, and time rows use logical borders, spacing, and text alignment for LTR and RTL surfaces.
73
+ - `rangeSelection`: Range fill uses logical start/end rounding for week edges and keeps selected endpoints tokenized with brand colors.
74
+
75
+ ## Accessibility
76
+
77
+ Keep native semantics, accessible names, keyboard reachability, focus-visible treatment, and status/error announcements intact when composing this component.
78
+
79
+ <!-- registry-contract:start -->
80
+ ## Registry Contract
81
+
82
+ This table is generated from `registry/index.json`; edit the component-owned source under `registry/catalog/components/`, not this table or the compiled index.
83
+ `supportedExports` is the exhaustive runtime import contract grouped by source module. `parts` is an ordered, non-exhaustive anatomy list.
84
+
85
+ | Field | Values |
86
+ | --- | --- |
87
+ | `supportedExports` | `components/date-picker.tsx: Calendar, DatePicker, DatePickerTrigger, DateRangePicker, RangeCalendar, calendarSurface, pickerTrigger`, `components/date-picker-state.ts: addDays, addMonths, formatCalendarDate, formatCalendarRange, formatMonthTitle, getCalendarCells, getCalendarDayState, getCalendarKeyboardTarget, getNextRange, isAfterOrSameDay, isBeforeDay, isBeforeOrSameDay, isSameDay, isSameMonth, normalizeRange, startOfDay, startOfMonth, toCalendarDateId` |
88
+ | `parts` | `Calendar`, `RangeCalendar`, `DatePicker`, `DateRangePicker`, `DatePickerTrigger` |
89
+ | `registryDependencies` | `popover` |
90
+ | `props.density` | `"compact" \| "default" \| "comfortable"; default "comfortable"; Aligns DatePicker and DateRangePicker triggers to the shared 32px, 36px, or 40px control contract.` |
91
+ | `props.icon` | `React.ReactNode; default "calendar"; Uses the calendar icon by default or accepts an explicit replacement node.` |
92
+ | `props.triggerProps` | `React.ComponentProps<"button">; default null; Forwards accessible trigger attributes such as id and aria-label without replacing DatePicker geometry.` |
93
+ | `densities` | `compact`, `default`, `comfortable` |
94
+ | `modes` | `single-calendar`, `single-month-year`, `double-calendar`, `double-calendar-with-presets`, `single-range-calendar`, `date-picker`, `date-range-picker` |
95
+ | `states` | `open`, `closed` |
96
+ | `tokens` | `--bh-bg-brand-default`, `--bh-bg-brand-subtle`, `--bh-bg-default`, `--bh-bg-default-hover`, `--bh-bg-raised`, `--bh-border-disabled`, `--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-color`, `--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-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-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` |
97
+ <!-- registry-contract:end -->
@@ -0,0 +1,117 @@
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
+ <!-- registry-contract:start -->
104
+ ## Registry Contract
105
+
106
+ This table is generated from `registry/index.json`; edit the component-owned source under `registry/catalog/components/`, not this table or the compiled index.
107
+ `supportedExports` is the exhaustive runtime import contract grouped by source module. `parts` is an ordered, non-exhaustive anatomy list.
108
+
109
+ | Field | Values |
110
+ | --- | --- |
111
+ | `supportedExports` | `components/divider.tsx: Divider, dividerVariants` |
112
+ | `parts` | `Divider` |
113
+ | `registryDependencies` | None |
114
+ | `directions` | `horizontal`, `vertical` |
115
+ | `tokens` | `--bh-border-subtle`, `--bh-space-15xl-224`, `--bh-space-xxs-2`, `--bh-space-xxxs-1` |
116
+ | `types` | `solid`, `dotted` |
117
+ <!-- registry-contract:end -->