banhaten 0.5.0 → 0.6.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 (290) hide show
  1. package/CHANGELOG.md +177 -139
  2. package/CONTRIBUTING.md +46 -46
  3. package/README.md +192 -192
  4. package/SECURITY.md +15 -15
  5. package/banhaten.config.example.json +11 -11
  6. package/docs/design-spacing.md +13 -13
  7. package/docs/design-system/README.md +22 -22
  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 +91 -90
  20. package/docs/design-system/components/accordion.md +52 -52
  21. package/docs/design-system/components/activity-feed.md +93 -93
  22. package/docs/design-system/components/activity-heatmap.md +56 -56
  23. package/docs/design-system/components/alert-dialog.md +71 -71
  24. package/docs/design-system/components/alert.md +103 -97
  25. package/docs/design-system/components/app-header.md +97 -0
  26. package/docs/design-system/components/aspect-ratio.md +45 -45
  27. package/docs/design-system/components/attribute.md +101 -89
  28. package/docs/design-system/components/autocomplete.md +75 -75
  29. package/docs/design-system/components/avatar.md +53 -53
  30. package/docs/design-system/components/badge.md +55 -55
  31. package/docs/design-system/components/banner.md +86 -86
  32. package/docs/design-system/components/breadcrumbs.md +181 -177
  33. package/docs/design-system/components/button-group.md +97 -97
  34. package/docs/design-system/components/button.md +80 -80
  35. package/docs/design-system/components/card.md +102 -88
  36. package/docs/design-system/components/carousel.md +46 -46
  37. package/docs/design-system/components/catalog-components.md +46 -46
  38. package/docs/design-system/components/checkbox.md +53 -53
  39. package/docs/design-system/components/collapsible.md +63 -63
  40. package/docs/design-system/components/command.md +61 -61
  41. package/docs/design-system/components/context-menu.md +45 -45
  42. package/docs/design-system/components/date-picker.md +80 -80
  43. package/docs/design-system/components/divider.md +102 -102
  44. package/docs/design-system/components/empty-state.md +56 -56
  45. package/docs/design-system/components/field.md +70 -70
  46. package/docs/design-system/components/file-upload.md +186 -186
  47. package/docs/design-system/components/hover-card.md +47 -47
  48. package/docs/design-system/components/icons.md +48 -48
  49. package/docs/design-system/components/input-group.md +57 -57
  50. package/docs/design-system/components/input-otp.md +56 -56
  51. package/docs/design-system/components/input.md +111 -109
  52. package/docs/design-system/components/item.md +58 -58
  53. package/docs/design-system/components/kbd.md +49 -49
  54. package/docs/design-system/components/label.md +49 -49
  55. package/docs/design-system/components/menu.md +94 -73
  56. package/docs/design-system/components/menubar.md +46 -46
  57. package/docs/design-system/components/modal.md +104 -104
  58. package/docs/design-system/components/native-select.md +53 -53
  59. package/docs/design-system/components/navigation-menu.md +49 -49
  60. package/docs/design-system/components/onboarding-step-list-item.md +81 -81
  61. package/docs/design-system/components/page-header.md +127 -93
  62. package/docs/design-system/components/pagination.md +56 -56
  63. package/docs/design-system/components/popover.md +59 -59
  64. package/docs/design-system/components/progress-slider.md +49 -49
  65. package/docs/design-system/components/progress.md +76 -76
  66. package/docs/design-system/components/radio-card.md +50 -50
  67. package/docs/design-system/components/radio-group.md +56 -56
  68. package/docs/design-system/components/resizable.md +43 -43
  69. package/docs/design-system/components/scroll-area.md +50 -50
  70. package/docs/design-system/components/segmented-control.md +54 -54
  71. package/docs/design-system/components/select.md +68 -64
  72. package/docs/design-system/components/sheet.md +66 -66
  73. package/docs/design-system/components/sidebar.md +167 -111
  74. package/docs/design-system/components/skeleton.md +74 -74
  75. package/docs/design-system/components/slideout.md +64 -64
  76. package/docs/design-system/components/slider.md +62 -62
  77. package/docs/design-system/components/social-button.md +49 -49
  78. package/docs/design-system/components/spinner.md +62 -62
  79. package/docs/design-system/components/steps.md +65 -65
  80. package/docs/design-system/components/table.md +499 -422
  81. package/docs/design-system/components/tabs.md +74 -59
  82. package/docs/design-system/components/tag.md +79 -79
  83. package/docs/design-system/components/textarea.md +49 -49
  84. package/docs/design-system/components/timeline.md +82 -82
  85. package/docs/design-system/components/toast.md +57 -57
  86. package/docs/design-system/components/toggle.md +80 -80
  87. package/docs/design-system/components/toolbar.md +89 -89
  88. package/docs/design-system/components/tooltip.md +92 -92
  89. package/docs/design-system/components/typography.md +18 -18
  90. package/docs/design-system/density-and-elevation.md +65 -65
  91. package/docs/design-system/design-system-test-missing-items.md +368 -368
  92. package/docs/design-system/direction-and-localization.md +23 -23
  93. package/docs/design-system/form-recipes.md +73 -73
  94. package/docs/design-system/gap-promotion-policy.md +21 -21
  95. package/docs/design-system/icons.md +74 -74
  96. package/docs/design-system/installation.md +70 -70
  97. package/docs/design-system/launch-comparison-shadcn.md +98 -98
  98. package/docs/design-system/registry-and-cli.md +64 -64
  99. package/docs/design-system/release-policy.md +30 -30
  100. package/docs/design-system/roadmap.md +14 -14
  101. package/docs/design-system/support-matrix.md +23 -23
  102. package/docs/design-system/tabs.md +54 -54
  103. package/docs/design-system/template-gap-audit.md +32 -32
  104. package/docs/design-system/templates.md +59 -59
  105. package/docs/design-system/token-governance.md +72 -72
  106. package/package.json +98 -98
  107. package/registry/component-contract.json +40 -40
  108. package/registry/components/accordion.tsx +155 -155
  109. package/registry/components/alert-dialog.tsx +297 -297
  110. package/registry/components/alert.tsx +309 -293
  111. package/registry/components/app-header.tsx +151 -0
  112. package/registry/components/aspect-ratio.tsx +30 -30
  113. package/registry/components/attribute.tsx +489 -454
  114. package/registry/components/autocomplete.tsx +598 -598
  115. package/registry/components/avatar.tsx +385 -385
  116. package/registry/components/badge.tsx +630 -629
  117. package/registry/components/button-group.tsx +565 -565
  118. package/registry/components/button.tsx +128 -127
  119. package/registry/components/card.tsx +651 -638
  120. package/registry/components/carousel.tsx +296 -296
  121. package/registry/components/chart.tsx +203 -203
  122. package/registry/components/checkbox.tsx +247 -247
  123. package/registry/components/collapsible.tsx +109 -109
  124. package/registry/components/command.tsx +208 -208
  125. package/registry/components/context-menu.tsx +236 -236
  126. package/registry/components/date-picker.tsx +1289 -1289
  127. package/registry/components/expanded/ActivityFeed.tsx +227 -227
  128. package/registry/components/expanded/ActivityHeatmap.tsx +64 -64
  129. package/registry/components/expanded/Banner.tsx +179 -179
  130. package/registry/components/expanded/Breadcrumbs.tsx +135 -131
  131. package/registry/components/expanded/CatalogComponentsShowcase.tsx +205 -205
  132. package/registry/components/expanded/CatalogDivider.tsx +49 -49
  133. package/registry/components/expanded/EmptyState.tsx +155 -155
  134. package/registry/components/expanded/FileUpload.tsx +543 -543
  135. package/registry/components/expanded/OnboardingStepListItem.tsx +60 -60
  136. package/registry/components/expanded/PageHeader.tsx +209 -179
  137. package/registry/components/expanded/Slideout.tsx +108 -108
  138. package/registry/components/expanded/Steps.tsx +402 -402
  139. package/registry/components/expanded/Table.tsx +1109 -1092
  140. package/registry/components/expanded/Timeline.tsx +203 -203
  141. package/registry/components/expanded/activityFeed.css +248 -248
  142. package/registry/components/expanded/activityHeatmap.css +66 -66
  143. package/registry/components/expanded/banner.css +260 -260
  144. package/registry/components/expanded/breadcrumbs.css +157 -140
  145. package/registry/components/expanded/catalogComponentsShowcase.css +87 -87
  146. package/registry/components/expanded/divider.css +75 -75
  147. package/registry/components/expanded/emptyState.css +111 -111
  148. package/registry/components/expanded/fileUpload.css +457 -457
  149. package/registry/components/expanded/onboardingStepListItem.css +135 -135
  150. package/registry/components/expanded/pageHeader.css +284 -248
  151. package/registry/components/expanded/slideout.css +276 -276
  152. package/registry/components/expanded/steps.css +356 -356
  153. package/registry/components/expanded/table.css +655 -606
  154. package/registry/components/expanded/timeline.css +286 -286
  155. package/registry/components/field.tsx +283 -283
  156. package/registry/components/hover-card.tsx +48 -48
  157. package/registry/components/input-content.ts +107 -107
  158. package/registry/components/input-group.tsx +130 -130
  159. package/registry/components/input-otp.tsx +584 -584
  160. package/registry/components/input.tsx +992 -990
  161. package/registry/components/item.tsx +189 -189
  162. package/registry/components/kbd.tsx +246 -246
  163. package/registry/components/label.tsx +78 -78
  164. package/registry/components/menu.tsx +1091 -978
  165. package/registry/components/menubar.tsx +226 -226
  166. package/registry/components/modal.tsx +872 -872
  167. package/registry/components/native-select.tsx +205 -205
  168. package/registry/components/navigation-menu.tsx +171 -171
  169. package/registry/components/pagination.css +36 -36
  170. package/registry/components/pagination.tsx +560 -560
  171. package/registry/components/popover.tsx +338 -338
  172. package/registry/components/progress-slider.tsx +216 -216
  173. package/registry/components/radio-card.tsx +676 -676
  174. package/registry/components/radio-group.tsx +570 -570
  175. package/registry/components/resizable.tsx +108 -108
  176. package/registry/components/scroll-area.tsx +91 -91
  177. package/registry/components/segmented-control.tsx +87 -87
  178. package/registry/components/select-content.tsx +218 -218
  179. package/registry/components/select.tsx +937 -937
  180. package/registry/components/sheet.tsx +305 -305
  181. package/registry/components/sidebar.tsx +1535 -1433
  182. package/registry/components/skeleton.css +54 -54
  183. package/registry/components/skeleton.tsx +482 -482
  184. package/registry/components/slider.tsx +380 -380
  185. package/registry/components/social-button.tsx +387 -387
  186. package/registry/components/spinner.tsx +78 -78
  187. package/registry/components/table-elements.tsx +287 -128
  188. package/registry/components/tabs.css +246 -222
  189. package/registry/components/tabs.tsx +245 -241
  190. package/registry/components/tag.tsx +423 -423
  191. package/registry/components/textarea.tsx +610 -610
  192. package/registry/components/toast.tsx +136 -136
  193. package/registry/components/toggle.tsx +256 -256
  194. package/registry/components/toolbar.tsx +539 -539
  195. package/registry/components/tooltip.tsx +433 -433
  196. package/registry/examples/alert-demo.tsx +34 -34
  197. package/registry/examples/alert-dialog-demo.tsx +42 -42
  198. package/registry/examples/app-header-demo.tsx +40 -0
  199. package/registry/examples/aspect-ratio-demo.tsx +11 -11
  200. package/registry/examples/attribute-demo.tsx +65 -65
  201. package/registry/examples/autocomplete-demo.tsx +109 -109
  202. package/registry/examples/avatar-demo.tsx +132 -132
  203. package/registry/examples/badge-demo.tsx +69 -69
  204. package/registry/examples/button-demo.tsx +86 -86
  205. package/registry/examples/button-group-demo.tsx +63 -63
  206. package/registry/examples/card-demo.tsx +86 -86
  207. package/registry/examples/carousel-demo.tsx +43 -43
  208. package/registry/examples/chart-demo.tsx +18 -18
  209. package/registry/examples/checkbox-demo.tsx +62 -62
  210. package/registry/examples/collapsible-demo.tsx +16 -16
  211. package/registry/examples/collection-filter-bar-demo.tsx +135 -135
  212. package/registry/examples/command-demo.tsx +42 -42
  213. package/registry/examples/command-palette-demo.tsx +235 -235
  214. package/registry/examples/context-menu-demo.tsx +29 -29
  215. package/registry/examples/control-density-contract-demo.tsx +65 -65
  216. package/registry/examples/date-picker-demo.tsx +127 -127
  217. package/registry/examples/divider-demo.tsx +17 -17
  218. package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -29
  219. package/registry/examples/expanded/banner-demo.tsx +48 -48
  220. package/registry/examples/expanded/breadcrumbs-demo.tsx +59 -59
  221. package/registry/examples/expanded/empty-state-demo.tsx +39 -39
  222. package/registry/examples/expanded/file-upload-demo.tsx +60 -60
  223. package/registry/examples/expanded/onboarding-step-demo.tsx +11 -11
  224. package/registry/examples/expanded/slideout-demo.tsx +15 -15
  225. package/registry/examples/expanded/steps-demo.tsx +29 -29
  226. package/registry/examples/expanded/tabs-demo.tsx +13 -13
  227. package/registry/examples/expanded/timeline-demo.tsx +18 -18
  228. package/registry/examples/field-demo.tsx +51 -51
  229. package/registry/examples/hover-card-demo.tsx +23 -23
  230. package/registry/examples/input-actions-demo.tsx +36 -36
  231. package/registry/examples/input-demo.tsx +87 -87
  232. package/registry/examples/input-group-demo.tsx +16 -16
  233. package/registry/examples/input-otp-demo.tsx +72 -72
  234. package/registry/examples/item-demo.tsx +46 -46
  235. package/registry/examples/kbd-demo.tsx +12 -12
  236. package/registry/examples/label-demo.tsx +20 -20
  237. package/registry/examples/menu-demo.tsx +122 -122
  238. package/registry/examples/menubar-demo.tsx +34 -34
  239. package/registry/examples/modal-demo.tsx +74 -74
  240. package/registry/examples/native-select-demo.tsx +16 -16
  241. package/registry/examples/navigation-menu-demo.tsx +29 -29
  242. package/registry/examples/pagination-demo.tsx +20 -20
  243. package/registry/examples/popover-demo.tsx +547 -547
  244. package/registry/examples/progress-demo.tsx +37 -37
  245. package/registry/examples/progress-slider-demo.tsx +29 -29
  246. package/registry/examples/radio-card-demo.tsx +51 -51
  247. package/registry/examples/radio-group-demo.tsx +62 -62
  248. package/registry/examples/resizable-demo.tsx +22 -22
  249. package/registry/examples/results-toolbar-demo.tsx +44 -44
  250. package/registry/examples/scroll-area-demo.tsx +15 -15
  251. package/registry/examples/segmented-control-demo.tsx +39 -39
  252. package/registry/examples/select-demo.tsx +87 -87
  253. package/registry/examples/sheet-demo.tsx +47 -47
  254. package/registry/examples/sidebar-demo.tsx +101 -101
  255. package/registry/examples/slider-demo.tsx +31 -31
  256. package/registry/examples/social-button-demo.tsx +61 -61
  257. package/registry/examples/spinner-demo.tsx +59 -59
  258. package/registry/examples/tabs-demo.tsx +13 -13
  259. package/registry/examples/tag-demo.tsx +29 -29
  260. package/registry/examples/textarea-demo.tsx +79 -79
  261. package/registry/examples/toast-demo.tsx +35 -35
  262. package/registry/examples/toggle-demo.tsx +59 -59
  263. package/registry/examples/tooltip-demo.tsx +115 -115
  264. package/registry/guidance/USAGE.md +27 -27
  265. package/registry/hooks/use-direction.ts +207 -207
  266. package/registry/index.json +387 -17
  267. package/registry/styles/globals.css +46 -0
  268. package/registry.json +24 -2
  269. package/schema/config.schema.json +51 -51
  270. package/schema/registry.schema.json +194 -194
  271. package/schema/tokens.schema.json +167 -167
  272. package/src/cli/command-line.js +194 -194
  273. package/src/cli/config-editors.js +9 -9
  274. package/src/cli/doctor.js +399 -399
  275. package/src/cli/file-transaction.js +302 -302
  276. package/src/cli/global-css.js +153 -153
  277. package/src/cli/index.js +1002 -1002
  278. package/src/cli/install-plan.js +592 -592
  279. package/src/cli/install-receipt.js +171 -171
  280. package/src/cli/jsonc.js +203 -203
  281. package/src/cli/package-install-state.js +254 -254
  282. package/src/cli/package-manager.js +238 -238
  283. package/src/cli/package-plan.js +185 -185
  284. package/src/cli/package-version.js +97 -97
  285. package/src/cli/registry-query.js +207 -207
  286. package/src/cli/reporting.js +55 -55
  287. package/src/cli/schema-validation.js +19 -19
  288. package/src/cli/source-scanner.js +686 -686
  289. package/src/cli/vite-config.js +478 -478
  290. package/tokens/banhaten.tokens.json +184 -0
@@ -1,79 +1,79 @@
1
- # Progress
2
-
3
- Progress is a read-only progress meter for upload, setup, usage, and completion states. It supports top label, bottom label, helper-only, and inline indicator layouts, two track sizes, helper text, optional label text, an information icon, a spinner indicator, and inherited LTR/RTL direction.
4
-
5
- The implementation follows the Figma progress components at `Design system 3.0 Copy / Progress` (`177:7992`) and `Progress Label` (`177:8141`).
6
-
7
- ## API
8
-
9
- ```tsx
10
- <Progress
11
- aria-label="Upload progress"
12
- helperText="Preparing the final file"
13
- label="Upload"
14
- optional="(Optional)"
15
- showInfo
16
- showSpinner
17
- value={40}
18
- />
19
- ```
20
-
21
- ## Variants
22
-
23
- | Prop | Values |
24
- | --- | --- |
25
- | `size` | `lg`, `sm` |
26
- | `labelPosition` | `top`, `bottom`, `none`, `inline` |
27
- | `value` | number clamped between `min` and `max` |
28
- | `showIndicator` | `boolean` |
29
- | `showInfo` | `boolean` |
30
- | `showSpinner` | `boolean` |
31
-
32
- ## Tokens
33
-
34
- Progress uses existing Banhaten tokens only:
35
-
36
- | Part | Token |
37
- | --- | --- |
38
- | Fill | `--bh-interactive-indicator-default` |
39
- | Track | `--bh-bg-neutral-soft` |
40
- | Radius | `--bh-radius-full` |
41
- | Label | `--bh-text-body-xs-medium-*`, `--bh-content-default` |
42
- | Optional and indicator | `--bh-text-body-xs-regular-*`, `--bh-text-body-2xs-regular-*`, `--bh-content-subtle` |
43
- | Track height | `--bh-space-md-8`, `--bh-space-xs-4` |
44
-
45
- ## RTL
46
-
47
- Progress inherits `dir` from its parent. The fill is anchored to the logical start edge, so LTR fills from the left and RTL fills from the right. Text nodes use `dir="auto"` and tokenized body styles.
48
-
49
- ## Install
50
-
51
- ```bash
52
- npx banhaten add progress
53
- ```
54
-
55
- ## Examples
56
-
57
- Primary registry example: `examples/progress-demo.tsx`.
58
-
59
- Open the live component page or run `npx banhaten docs progress` to inspect source files, install command, and examples.
60
-
61
- ## Token Contract
62
-
63
- Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
64
- Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
65
- Covered source files: `components/progress.tsx`.
66
-
67
- ## RTL Rules
68
-
69
- - `inheritsDirection`: true
70
- - `valueDirection`: The fill is anchored with logical start positioning, so LTR fills from left and RTL fills from right.
71
- - `spacing`: Label, optional text, indicator, and helper copy use inherited direction, logical text alignment, and tokenized gaps.
72
-
73
- ## Accessibility
74
-
75
- Keep native semantics, accessible names, keyboard reachability, focus-visible treatment, and status/error announcements intact when composing this component.
76
-
1
+ # Progress
2
+
3
+ Progress is a read-only progress meter for upload, setup, usage, and completion states. It supports top label, bottom label, helper-only, and inline indicator layouts, two track sizes, helper text, optional label text, an information icon, a spinner indicator, and inherited LTR/RTL direction.
4
+
5
+ The implementation follows the Figma progress components at `Design system 3.0 Copy / Progress` (`177:7992`) and `Progress Label` (`177:8141`).
6
+
7
+ ## API
8
+
9
+ ```tsx
10
+ <Progress
11
+ aria-label="Upload progress"
12
+ helperText="Preparing the final file"
13
+ label="Upload"
14
+ optional="(Optional)"
15
+ showInfo
16
+ showSpinner
17
+ value={40}
18
+ />
19
+ ```
20
+
21
+ ## Variants
22
+
23
+ | Prop | Values |
24
+ | --- | --- |
25
+ | `size` | `lg`, `sm` |
26
+ | `labelPosition` | `top`, `bottom`, `none`, `inline` |
27
+ | `value` | number clamped between `min` and `max` |
28
+ | `showIndicator` | `boolean` |
29
+ | `showInfo` | `boolean` |
30
+ | `showSpinner` | `boolean` |
31
+
32
+ ## Tokens
33
+
34
+ Progress uses existing Banhaten tokens only:
35
+
36
+ | Part | Token |
37
+ | --- | --- |
38
+ | Fill | `--bh-interactive-indicator-default` |
39
+ | Track | `--bh-bg-neutral-soft` |
40
+ | Radius | `--bh-radius-full` |
41
+ | Label | `--bh-text-body-xs-medium-*`, `--bh-content-default` |
42
+ | Optional and indicator | `--bh-text-body-xs-regular-*`, `--bh-text-body-2xs-regular-*`, `--bh-content-subtle` |
43
+ | Track height | `--bh-space-md-8`, `--bh-space-xs-4` |
44
+
45
+ ## RTL
46
+
47
+ Progress inherits `dir` from its parent. The fill is anchored to the logical start edge, so LTR fills from the left and RTL fills from the right. Text nodes use `dir="auto"` and tokenized body styles.
48
+
49
+ ## Install
50
+
51
+ ```bash
52
+ npx banhaten add progress
53
+ ```
54
+
55
+ ## Examples
56
+
57
+ Primary registry example: `examples/progress-demo.tsx`.
58
+
59
+ Open the live component page or run `npx banhaten docs progress` to inspect source files, install command, and examples.
60
+
61
+ ## Token Contract
62
+
63
+ Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
64
+ Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
65
+ Covered source files: `components/progress.tsx`.
66
+
67
+ ## RTL Rules
68
+
69
+ - `inheritsDirection`: true
70
+ - `valueDirection`: The fill is anchored with logical start positioning, so LTR fills from left and RTL fills from right.
71
+ - `spacing`: Label, optional text, indicator, and helper copy use inherited direction, logical text alignment, and tokenized gaps.
72
+
73
+ ## Accessibility
74
+
75
+ Keep native semantics, accessible names, keyboard reachability, focus-visible treatment, and status/error announcements intact when composing this component.
76
+
77
77
  <!-- registry-contract:start -->
78
78
  ## Registry Contract
79
79
 
@@ -1,53 +1,53 @@
1
- # Radio Card
2
-
3
- Radio Card is a Figma-matched option card for richer single-choice selections. It supports icon, payment, avatar, company, support-label, icon-radio-left, icon-radio-right, and label-only layouts across default, active, disabled, LTR, and RTL states.
4
-
5
- ## API
6
-
7
- ```tsx
8
- <RadioCard
9
- title="Business"
10
- description="For teams and advanced permissions."
11
- type="with-icon"
12
- />
13
- ```
14
-
15
- | Prop | Values |
16
- | --- | --- |
17
- | `type` | `with-icon`, `icon-radio-right`, `payment`, `with-avatar`, `company-icon`, `icon-radio-left`, `radio-label` |
18
- | `state` | `default`, `active`, `disabled` |
19
- | `dir` | `ltr`, `rtl` |
20
-
21
- ## Token Contract
22
-
23
- Radio Card consumes Banhaten card spacing, border, radius, shadow, typography, radio-control, hover, active, disabled, and semantic content tokens.
24
-
25
- ## RTL
26
-
27
- Radio Card follows the explicit Figma RTL ordering for each card type. Text nodes render in RTL and right alignment where the variant requires physical RTL composition.
28
-
29
- ## Accessibility
30
-
31
- Use Radio Card inside a semantic radio group or connect it to a native radio input in product code. Do not rely on the visual active state alone for form submission.
32
-
33
- ## Install
34
-
35
- ```bash
36
- npx banhaten add radio-card
37
- ```
38
-
39
- ## Examples
40
-
41
- Primary registry example: `examples/radio-card-demo.tsx`.
42
-
43
- Open the live component page or run `npx banhaten docs radio-card` to inspect source files, install command, and examples.
44
-
45
- ## RTL Rules
46
-
47
- - `inheritsDirection`: false
48
- - `layout`: Uses the explicit Figma RTL physical order while text nodes use RTL direction and right alignment.
49
- - `spacing`: Company icon and icon-radio-left RTL variants use the Figma 12px card gap; other variants use the 10px card gap.
50
-
1
+ # Radio Card
2
+
3
+ Radio Card is a Figma-matched option card for richer single-choice selections. It supports icon, payment, avatar, company, support-label, icon-radio-left, icon-radio-right, and label-only layouts across default, active, disabled, LTR, and RTL states.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <RadioCard
9
+ title="Business"
10
+ description="For teams and advanced permissions."
11
+ type="with-icon"
12
+ />
13
+ ```
14
+
15
+ | Prop | Values |
16
+ | --- | --- |
17
+ | `type` | `with-icon`, `icon-radio-right`, `payment`, `with-avatar`, `company-icon`, `icon-radio-left`, `radio-label` |
18
+ | `state` | `default`, `active`, `disabled` |
19
+ | `dir` | `ltr`, `rtl` |
20
+
21
+ ## Token Contract
22
+
23
+ Radio Card consumes Banhaten card spacing, border, radius, shadow, typography, radio-control, hover, active, disabled, and semantic content tokens.
24
+
25
+ ## RTL
26
+
27
+ Radio Card follows the explicit Figma RTL ordering for each card type. Text nodes render in RTL and right alignment where the variant requires physical RTL composition.
28
+
29
+ ## Accessibility
30
+
31
+ Use Radio Card inside a semantic radio group or connect it to a native radio input in product code. Do not rely on the visual active state alone for form submission.
32
+
33
+ ## Install
34
+
35
+ ```bash
36
+ npx banhaten add radio-card
37
+ ```
38
+
39
+ ## Examples
40
+
41
+ Primary registry example: `examples/radio-card-demo.tsx`.
42
+
43
+ Open the live component page or run `npx banhaten docs radio-card` to inspect source files, install command, and examples.
44
+
45
+ ## RTL Rules
46
+
47
+ - `inheritsDirection`: false
48
+ - `layout`: Uses the explicit Figma RTL physical order while text nodes use RTL direction and right alignment.
49
+ - `spacing`: Company icon and icon-radio-left RTL variants use the Figma 12px card gap; other variants use the 10px card gap.
50
+
51
51
  <!-- registry-contract:start -->
52
52
  ## Registry Contract
53
53
 
@@ -1,59 +1,59 @@
1
- # Radio Group
2
-
3
- Radio Group is the native-input single-choice primitive. It includes `Radio`, `RadioField`, `RadioGroup`, and `RadioGroupItem` for grouped labels, descriptions, errors, disabled state, controlled or uncontrolled values, and horizontal or vertical layout.
4
-
5
- ## API
6
-
7
- ```tsx
8
- <RadioGroup
9
- label="Billing interval"
10
- defaultValue="monthly"
11
- orientation="vertical"
12
- >
13
- <RadioGroupItem value="monthly" label="Monthly" />
14
- <RadioGroupItem value="annual" label="Annual" />
15
- </RadioGroup>
16
- ```
17
-
18
- | Prop | Values |
19
- | --- | --- |
20
- | `value`, `defaultValue` | controlled or uncontrolled value |
21
- | `orientation` | `vertical`, `horizontal` |
22
- | `state` | `default`, `error`, `disabled` |
23
- | `label`, `description`, `errorMessage` | `ReactNode` |
24
- | `controlPosition` | `start`, `end` on field/item rows |
25
-
26
- ## Token Contract
27
-
28
- Radio Group uses Banhaten radio control, field gap, group spacing, text, helper, error, disabled, border, and focus tokens.
29
-
30
- ## RTL
31
-
32
- `RadioField` and `RadioGroupItem` use logical start/end control placement. Labels, descriptions, and error text use `dir="auto"` and tokenized typography.
33
-
34
- ## Accessibility
35
-
36
- The group uses `fieldset`, shared native radio names, label wrapping, and platform keyboard behavior. Provide visible error text when the group is invalid.
37
-
38
- ## Install
39
-
40
- ```bash
41
- npx banhaten add radio-group
42
- ```
43
-
44
- ## Examples
45
-
46
- Primary registry example: `examples/radio-group-demo.tsx`.
47
-
48
- Open the live component page or run `npx banhaten docs radio-group` to inspect source files, install command, and examples.
49
-
50
- ## RTL Rules
51
-
52
- - `inheritsDirection`: true
53
- - `controlPlacement`: RadioField and RadioGroupItem use start/end control placement so the radio mirrors correctly in RTL.
54
- - `textDirection`: Group labels, item labels, descriptions, and error text use dir="auto" with tokenized body typography.
55
- - `semantics`: Uses native radio inputs with a shared group name, fieldset grouping, and label wrapping for platform keyboard and form behavior.
56
-
1
+ # Radio Group
2
+
3
+ Radio Group is the native-input single-choice primitive. It includes `Radio`, `RadioField`, `RadioGroup`, and `RadioGroupItem` for grouped labels, descriptions, errors, disabled state, controlled or uncontrolled values, and horizontal or vertical layout.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <RadioGroup
9
+ label="Billing interval"
10
+ defaultValue="monthly"
11
+ orientation="vertical"
12
+ >
13
+ <RadioGroupItem value="monthly" label="Monthly" />
14
+ <RadioGroupItem value="annual" label="Annual" />
15
+ </RadioGroup>
16
+ ```
17
+
18
+ | Prop | Values |
19
+ | --- | --- |
20
+ | `value`, `defaultValue` | controlled or uncontrolled value |
21
+ | `orientation` | `vertical`, `horizontal` |
22
+ | `state` | `default`, `error`, `disabled` |
23
+ | `label`, `description`, `errorMessage` | `ReactNode` |
24
+ | `controlPosition` | `start`, `end` on field/item rows |
25
+
26
+ ## Token Contract
27
+
28
+ Radio Group uses Banhaten radio control, field gap, group spacing, text, helper, error, disabled, border, and focus tokens.
29
+
30
+ ## RTL
31
+
32
+ `RadioField` and `RadioGroupItem` use logical start/end control placement. Labels, descriptions, and error text use `dir="auto"` and tokenized typography.
33
+
34
+ ## Accessibility
35
+
36
+ The group uses `fieldset`, shared native radio names, label wrapping, and platform keyboard behavior. Provide visible error text when the group is invalid.
37
+
38
+ ## Install
39
+
40
+ ```bash
41
+ npx banhaten add radio-group
42
+ ```
43
+
44
+ ## Examples
45
+
46
+ Primary registry example: `examples/radio-group-demo.tsx`.
47
+
48
+ Open the live component page or run `npx banhaten docs radio-group` to inspect source files, install command, and examples.
49
+
50
+ ## RTL Rules
51
+
52
+ - `inheritsDirection`: true
53
+ - `controlPlacement`: RadioField and RadioGroupItem use start/end control placement so the radio mirrors correctly in RTL.
54
+ - `textDirection`: Group labels, item labels, descriptions, and error text use dir="auto" with tokenized body typography.
55
+ - `semantics`: Uses native radio inputs with a shared group name, fieldset grouping, and label wrapping for platform keyboard and form behavior.
56
+
57
57
  <!-- registry-contract:start -->
58
58
  ## Registry Contract
59
59
 
@@ -1,46 +1,46 @@
1
- # Resizable
2
-
3
- Resizable wraps `react-resizable-panels` for split panes and workbench layouts.
4
-
5
- ## API
6
-
7
- ```tsx
8
- <ResizablePanelGroup direction="horizontal">
9
- <ResizablePanel defaultSize={30}>Sidebar</ResizablePanel>
10
- <ResizableHandle withHandle />
11
- <ResizablePanel defaultSize={70}>Content</ResizablePanel>
12
- </ResizablePanelGroup>
13
- ```
14
-
15
- ## Token Contract
16
-
17
- Resizable uses Banhaten border, focus, raised surface, radius, and icon sizing tokens.
18
-
19
- ## RTL
20
-
21
- Panel order follows DOM order. Use logical layout around the panel group for RTL shells.
22
-
23
- ## Accessibility
24
-
25
- `react-resizable-panels` provides keyboard-adjustable resize handles.
26
-
27
- ## Install
28
-
29
- ```bash
30
- npx banhaten add resizable
31
- ```
32
-
33
- ## Examples
34
-
35
- Primary registry example: `examples/resizable-demo.tsx`.
36
-
37
- Open the live component page or run `npx banhaten docs resizable` to inspect source files, install command, and examples.
38
-
39
- ## RTL Rules
40
-
41
- - `inheritsDirection`: true
42
- - `layout`: Panel order follows DOM order; use logical shell layout for RTL workspaces.
43
-
1
+ # Resizable
2
+
3
+ Resizable wraps `react-resizable-panels` for split panes and workbench layouts.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <ResizablePanelGroup direction="horizontal">
9
+ <ResizablePanel defaultSize={30}>Sidebar</ResizablePanel>
10
+ <ResizableHandle withHandle />
11
+ <ResizablePanel defaultSize={70}>Content</ResizablePanel>
12
+ </ResizablePanelGroup>
13
+ ```
14
+
15
+ ## Token Contract
16
+
17
+ Resizable uses Banhaten border, focus, raised surface, radius, and icon sizing tokens.
18
+
19
+ ## RTL
20
+
21
+ Panel order follows DOM order. Use logical layout around the panel group for RTL shells.
22
+
23
+ ## Accessibility
24
+
25
+ `react-resizable-panels` provides keyboard-adjustable resize handles.
26
+
27
+ ## Install
28
+
29
+ ```bash
30
+ npx banhaten add resizable
31
+ ```
32
+
33
+ ## Examples
34
+
35
+ Primary registry example: `examples/resizable-demo.tsx`.
36
+
37
+ Open the live component page or run `npx banhaten docs resizable` to inspect source files, install command, and examples.
38
+
39
+ ## RTL Rules
40
+
41
+ - `inheritsDirection`: true
42
+ - `layout`: Panel order follows DOM order; use logical shell layout for RTL workspaces.
43
+
44
44
  <!-- registry-contract:start -->
45
45
  ## Registry Contract
46
46
 
@@ -1,53 +1,53 @@
1
- # Scroll Area
2
-
3
- Scroll Area wraps Radix ScrollArea with tokenized viewport, scrollbar, thumb, and corner styling.
4
-
5
- ## API
6
-
7
- ```tsx
8
- <ScrollArea className="h-48">
9
- <div>Scrollable content</div>
10
- </ScrollArea>
11
-
12
- <ScrollArea className="h-48" orientation="both">
13
- <div className="h-max w-max">Two-axis content</div>
14
- </ScrollArea>
15
- ```
16
-
17
- | Part | Purpose |
18
- | --- | --- |
19
- | `ScrollArea` | root and viewport; `orientation` accepts `vertical`, `horizontal`, or `both` |
20
- | `ScrollBar` | vertical or horizontal scrollbar |
21
-
22
- ## Token Contract
23
-
24
- Scroll Area uses Banhaten radius, border, and neutral thumb tokens.
25
-
26
- ## RTL
27
-
28
- Scroll Area inherits direction from its parent. Use logical padding inside the viewport content.
29
-
30
- ## Accessibility
31
-
32
- Use Scroll Area for visual scrollbars around already accessible content, not for hiding essential controls.
33
-
34
- ## Install
35
-
36
- ```bash
37
- npx banhaten add scroll-area
38
- ```
39
-
40
- ## Examples
41
-
42
- Primary registry example: `examples/scroll-area-demo.tsx`.
43
-
44
- Open the live component page or run `npx banhaten docs scroll-area` to inspect source files, install command, and examples.
45
-
46
- ## RTL Rules
47
-
48
- - `inheritsDirection`: true
49
- - `spacing`: Viewport content should use logical padding so scrollable regions mirror with document direction.
50
-
1
+ # Scroll Area
2
+
3
+ Scroll Area wraps Radix ScrollArea with tokenized viewport, scrollbar, thumb, and corner styling.
4
+
5
+ ## API
6
+
7
+ ```tsx
8
+ <ScrollArea className="h-48">
9
+ <div>Scrollable content</div>
10
+ </ScrollArea>
11
+
12
+ <ScrollArea className="h-48" orientation="both">
13
+ <div className="h-max w-max">Two-axis content</div>
14
+ </ScrollArea>
15
+ ```
16
+
17
+ | Part | Purpose |
18
+ | --- | --- |
19
+ | `ScrollArea` | root and viewport; `orientation` accepts `vertical`, `horizontal`, or `both` |
20
+ | `ScrollBar` | vertical or horizontal scrollbar |
21
+
22
+ ## Token Contract
23
+
24
+ Scroll Area uses Banhaten radius, border, and neutral thumb tokens.
25
+
26
+ ## RTL
27
+
28
+ Scroll Area inherits direction from its parent. Use logical padding inside the viewport content.
29
+
30
+ ## Accessibility
31
+
32
+ Use Scroll Area for visual scrollbars around already accessible content, not for hiding essential controls.
33
+
34
+ ## Install
35
+
36
+ ```bash
37
+ npx banhaten add scroll-area
38
+ ```
39
+
40
+ ## Examples
41
+
42
+ Primary registry example: `examples/scroll-area-demo.tsx`.
43
+
44
+ Open the live component page or run `npx banhaten docs scroll-area` to inspect source files, install command, and examples.
45
+
46
+ ## RTL Rules
47
+
48
+ - `inheritsDirection`: true
49
+ - `spacing`: Viewport content should use logical padding so scrollable regions mirror with document direction.
50
+
51
51
  <!-- registry-contract:start -->
52
52
  ## Registry Contract
53
53