banhaten 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +139 -73
- package/CONTRIBUTING.md +46 -44
- package/README.md +192 -190
- package/SECURITY.md +15 -15
- package/banhaten.config.example.json +11 -11
- package/docs/design-spacing.md +13 -0
- package/docs/design-system/README.md +22 -20
- package/docs/design-system/adoption-quality-remediation.md +87 -87
- package/docs/design-system/agent-usage.md +13 -13
- package/docs/design-system/appearance-presets.md +189 -189
- package/docs/design-system/appearances/default.md +94 -94
- package/docs/design-system/appearances/rounded.md +95 -95
- package/docs/design-system/appearances/sharp.md +95 -95
- package/docs/design-system/component-docs-pattern.md +81 -81
- package/docs/design-system/component-implementation-ownership-audit.md +245 -244
- package/docs/design-system/component-quality-audit-2026-08-20.md +225 -223
- package/docs/design-system/component-showcase-consistency-report.md +219 -219
- package/docs/design-system/component-token-consistency-audit.md +173 -173
- package/docs/design-system/components/README.md +90 -76
- package/docs/design-system/components/accordion.md +53 -53
- package/docs/design-system/components/activity-feed.md +94 -94
- package/docs/design-system/components/activity-heatmap.md +57 -57
- package/docs/design-system/components/agent-input.md +85 -0
- package/docs/design-system/components/alert-dialog.md +72 -72
- package/docs/design-system/components/alert.md +98 -98
- package/docs/design-system/components/approval-card.md +134 -0
- package/docs/design-system/components/aspect-ratio.md +45 -45
- package/docs/design-system/components/attribute.md +89 -89
- package/docs/design-system/components/autocomplete.md +75 -75
- package/docs/design-system/components/avatar.md +54 -54
- package/docs/design-system/components/badge.md +54 -54
- package/docs/design-system/components/banner.md +87 -87
- package/docs/design-system/components/breadcrumbs.md +177 -176
- package/docs/design-system/components/button-group.md +98 -98
- package/docs/design-system/components/button.md +83 -80
- package/docs/design-system/components/card.md +88 -88
- package/docs/design-system/components/carousel.md +46 -46
- package/docs/design-system/components/catalog-components.md +47 -47
- package/docs/design-system/components/chart.md +95 -24
- package/docs/design-system/components/checkbox.md +54 -54
- package/docs/design-system/components/collapsible.md +67 -53
- package/docs/design-system/components/command.md +62 -62
- package/docs/design-system/components/context-menu.md +46 -46
- package/docs/design-system/components/date-picker.md +81 -79
- package/docs/design-system/components/divider.md +102 -102
- package/docs/design-system/components/empty-state.md +56 -56
- package/docs/design-system/components/field.md +70 -70
- package/docs/design-system/components/file-upload.md +187 -187
- package/docs/design-system/components/hover-card.md +48 -48
- package/docs/design-system/components/icons.md +48 -48
- package/docs/design-system/components/inline-citations.md +93 -0
- package/docs/design-system/components/input-group.md +58 -58
- package/docs/design-system/components/input-otp.md +56 -56
- package/docs/design-system/components/input.md +117 -61
- package/docs/design-system/components/item.md +59 -57
- package/docs/design-system/components/kbd.md +54 -49
- package/docs/design-system/components/label.md +49 -49
- package/docs/design-system/components/menu.md +71 -61
- package/docs/design-system/components/menubar.md +47 -47
- package/docs/design-system/components/modal.md +105 -105
- package/docs/design-system/components/native-select.md +54 -54
- package/docs/design-system/components/navigation-menu.md +50 -50
- package/docs/design-system/components/onboarding-step-list-item.md +82 -82
- package/docs/design-system/components/page-header.md +93 -86
- package/docs/design-system/components/pagination.md +57 -57
- package/docs/design-system/components/popover.md +60 -60
- package/docs/design-system/components/progress-slider.md +50 -50
- package/docs/design-system/components/progress.md +76 -76
- package/docs/design-system/components/radio-card.md +51 -51
- package/docs/design-system/components/radio-group.md +57 -57
- package/docs/design-system/components/resizable.md +44 -44
- package/docs/design-system/components/rolling-count.md +61 -0
- package/docs/design-system/components/scroll-area.md +51 -51
- package/docs/design-system/components/segmented-control.md +54 -54
- package/docs/design-system/components/select.md +68 -62
- package/docs/design-system/components/sheet.md +67 -67
- package/docs/design-system/components/shimmer-text.md +67 -0
- package/docs/design-system/components/sidebar.md +127 -76
- package/docs/design-system/components/skeleton.md +75 -75
- package/docs/design-system/components/slideout.md +65 -65
- package/docs/design-system/components/slider.md +63 -63
- package/docs/design-system/components/social-button.md +50 -50
- package/docs/design-system/components/spinner.md +62 -62
- package/docs/design-system/components/steps.md +65 -65
- package/docs/design-system/components/streaming-text.md +82 -0
- package/docs/design-system/components/table.md +419 -414
- package/docs/design-system/components/tabs.md +59 -55
- package/docs/design-system/components/tag.md +80 -80
- package/docs/design-system/components/task-list.md +95 -0
- package/docs/design-system/components/textarea.md +50 -50
- package/docs/design-system/components/thinking-reasoning.md +72 -0
- package/docs/design-system/components/thinking-state.md +67 -0
- package/docs/design-system/components/timeline.md +83 -83
- package/docs/design-system/components/toast.md +58 -58
- package/docs/design-system/components/toggle.md +81 -81
- package/docs/design-system/components/toolbar.md +92 -87
- package/docs/design-system/components/tooltip.md +94 -92
- package/docs/design-system/components/typography.md +18 -18
- package/docs/design-system/density-and-elevation.md +65 -61
- package/docs/design-system/design-system-test-missing-items.md +368 -368
- package/docs/design-system/direction-and-localization.md +23 -23
- package/docs/design-system/form-recipes.md +73 -73
- package/docs/design-system/gap-promotion-policy.md +21 -21
- package/docs/design-system/icons.md +74 -69
- package/docs/design-system/installation.md +70 -68
- package/docs/design-system/launch-comparison-shadcn.md +98 -98
- package/docs/design-system/registry-and-cli.md +64 -64
- package/docs/design-system/release-policy.md +30 -30
- package/docs/design-system/roadmap.md +14 -14
- package/docs/design-system/support-matrix.md +23 -23
- package/docs/design-system/tabs.md +54 -53
- package/docs/design-system/template-gap-audit.md +32 -0
- package/docs/design-system/templates.md +59 -0
- package/docs/design-system/token-governance.md +72 -60
- package/package.json +98 -98
- package/registry/component-contract.json +40 -40
- package/registry/components/accordion.tsx +155 -155
- package/registry/components/agent-input-parts.tsx +552 -0
- package/registry/components/agent-input-state.ts +156 -0
- package/registry/components/agent-input.css +307 -0
- package/registry/components/agent-input.tsx +382 -0
- package/registry/components/alert-dialog.tsx +297 -297
- package/registry/components/alert.tsx +293 -293
- package/registry/components/approval-card.css +409 -0
- package/registry/components/approval-card.tsx +401 -0
- package/registry/components/approval-frame.tsx +108 -0
- package/registry/components/approval-questions.tsx +559 -0
- package/registry/components/aspect-ratio.tsx +30 -30
- package/registry/components/attribute.tsx +454 -448
- package/registry/components/autocomplete.tsx +598 -651
- package/registry/components/avatar.tsx +385 -381
- package/registry/components/badge.tsx +629 -629
- package/registry/components/button-group.tsx +565 -565
- package/registry/components/button.tsx +127 -123
- package/registry/components/card.tsx +638 -638
- package/registry/components/carousel.tsx +296 -296
- package/registry/components/chart-block-data.ts +177 -0
- package/registry/components/chart-block.css +171 -0
- package/registry/components/chart-block.tsx +260 -0
- package/registry/components/chart-interactions.ts +123 -0
- package/registry/components/chart-options.cartesian.ts +162 -0
- package/registry/components/chart-options.paint.ts +99 -0
- package/registry/components/chart-options.parts.ts +72 -0
- package/registry/components/chart-options.radial.ts +109 -0
- package/registry/components/chart-options.ts +44 -0
- package/registry/components/chart-options.types.ts +67 -0
- package/registry/components/chart.tsx +203 -203
- package/registry/components/checkbox.tsx +247 -247
- package/registry/components/collapsible.tsx +109 -69
- package/registry/components/command.tsx +208 -208
- package/registry/components/context-menu.tsx +236 -236
- package/registry/components/data-chart.tsx +40 -0
- package/registry/components/date-picker.tsx +1289 -1277
- package/registry/components/echart-theme.ts +246 -0
- package/registry/components/echart.css +49 -0
- package/registry/components/echart.tsx +178 -0
- package/registry/components/expanded/ActivityFeed.tsx +227 -227
- package/registry/components/expanded/ActivityHeatmap.tsx +64 -64
- package/registry/components/expanded/Banner.tsx +179 -179
- package/registry/components/expanded/Breadcrumbs.tsx +131 -131
- package/registry/components/expanded/CatalogComponentsShowcase.tsx +205 -205
- package/registry/components/expanded/CatalogDivider.tsx +49 -49
- package/registry/components/expanded/EmptyState.tsx +155 -155
- package/registry/components/expanded/FileUpload.tsx +543 -543
- package/registry/components/expanded/OnboardingStepListItem.tsx +60 -59
- package/registry/components/expanded/PageHeader.tsx +179 -166
- package/registry/components/expanded/Slideout.tsx +108 -108
- package/registry/components/expanded/Steps.tsx +402 -402
- package/registry/components/expanded/Table.tsx +1092 -1071
- package/registry/components/expanded/Timeline.tsx +203 -203
- package/registry/components/expanded/activityFeed.css +248 -248
- package/registry/components/expanded/activityHeatmap.css +66 -66
- package/registry/components/expanded/banner.css +260 -255
- package/registry/components/expanded/breadcrumbs.css +140 -140
- package/registry/components/expanded/catalogComponentsShowcase.css +87 -87
- package/registry/components/expanded/divider.css +75 -75
- package/registry/components/expanded/emptyState.css +111 -111
- package/registry/components/expanded/fileUpload.css +457 -457
- package/registry/components/expanded/onboardingStepListItem.css +135 -126
- package/registry/components/expanded/pageHeader.css +248 -290
- package/registry/components/expanded/slideout.css +276 -276
- package/registry/components/expanded/steps.css +356 -356
- package/registry/components/expanded/table.css +606 -603
- package/registry/components/expanded/timeline.css +286 -286
- package/registry/components/field.tsx +283 -283
- package/registry/components/hover-card.tsx +48 -48
- package/registry/components/inline-citations.css +126 -0
- package/registry/components/inline-citations.tsx +292 -0
- package/registry/components/input-content.ts +107 -107
- package/registry/components/input-group.tsx +130 -130
- package/registry/components/input-otp.tsx +584 -584
- package/registry/components/input.tsx +990 -972
- package/registry/components/item.tsx +189 -189
- package/registry/components/kbd.tsx +246 -151
- package/registry/components/label.tsx +78 -78
- package/registry/components/menu.tsx +978 -986
- package/registry/components/menubar.tsx +226 -226
- package/registry/components/modal.tsx +872 -872
- package/registry/components/native-select.tsx +205 -205
- package/registry/components/navigation-menu.tsx +171 -171
- package/registry/components/pagination.css +36 -36
- package/registry/components/pagination.tsx +560 -555
- package/registry/components/popover.tsx +338 -338
- package/registry/components/progress-slider.tsx +216 -216
- package/registry/components/radio-card.tsx +676 -677
- package/registry/components/radio-group.tsx +570 -570
- package/registry/components/resizable.tsx +108 -108
- package/registry/components/rolling-count.css +37 -0
- package/registry/components/rolling-count.tsx +110 -0
- package/registry/components/scroll-area.tsx +91 -91
- package/registry/components/segmented-control.tsx +87 -87
- package/registry/components/select-content.tsx +218 -218
- package/registry/components/select.tsx +937 -932
- package/registry/components/sheet.tsx +305 -305
- package/registry/components/shimmer-text.css +69 -0
- package/registry/components/shimmer-text.tsx +43 -0
- package/registry/components/sidebar.tsx +1433 -358
- package/registry/components/skeleton.css +54 -54
- package/registry/components/skeleton.tsx +482 -482
- package/registry/components/slider.tsx +380 -380
- package/registry/components/social-button.tsx +387 -387
- package/registry/components/spinner.tsx +78 -78
- package/registry/components/streaming-text.css +45 -0
- package/registry/components/streaming-text.tsx +165 -0
- package/registry/components/table-elements.tsx +128 -128
- package/registry/components/tabs.css +222 -218
- package/registry/components/tabs.tsx +241 -241
- package/registry/components/tag.tsx +423 -423
- package/registry/components/task-list.css +328 -0
- package/registry/components/task-list.tsx +429 -0
- package/registry/components/textarea.tsx +610 -610
- package/registry/components/thinking-reasoning.css +178 -0
- package/registry/components/thinking-reasoning.tsx +253 -0
- package/registry/components/thinking-state.css +8 -0
- package/registry/components/thinking-state.tsx +46 -0
- package/registry/components/toast.tsx +136 -136
- package/registry/components/toggle.tsx +256 -256
- package/registry/components/toolbar.tsx +539 -539
- package/registry/components/tooltip.tsx +433 -431
- package/registry/examples/agent-input-demo.tsx +90 -0
- package/registry/examples/alert-demo.tsx +34 -34
- package/registry/examples/alert-dialog-demo.tsx +42 -42
- package/registry/examples/approval-card-demo.tsx +83 -0
- package/registry/examples/aspect-ratio-demo.tsx +11 -11
- package/registry/examples/attribute-demo.tsx +65 -65
- package/registry/examples/autocomplete-demo.tsx +109 -109
- package/registry/examples/avatar-demo.tsx +132 -132
- package/registry/examples/badge-demo.tsx +69 -69
- package/registry/examples/button-demo.tsx +86 -83
- package/registry/examples/button-group-demo.tsx +63 -63
- package/registry/examples/card-demo.tsx +86 -86
- package/registry/examples/carousel-demo.tsx +43 -43
- package/registry/examples/chart-block-demo.tsx +5 -0
- package/registry/examples/chart-demo.tsx +18 -33
- package/registry/examples/checkbox-demo.tsx +62 -62
- package/registry/examples/collapsible-demo.tsx +16 -16
- package/registry/examples/collection-filter-bar-demo.tsx +135 -135
- package/registry/examples/command-demo.tsx +42 -42
- package/registry/examples/command-palette-demo.tsx +235 -236
- package/registry/examples/context-menu-demo.tsx +29 -29
- package/registry/examples/control-density-contract-demo.tsx +65 -61
- package/registry/examples/date-picker-demo.tsx +127 -127
- package/registry/examples/divider-demo.tsx +17 -17
- package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -29
- package/registry/examples/expanded/banner-demo.tsx +48 -48
- package/registry/examples/expanded/breadcrumbs-demo.tsx +59 -59
- package/registry/examples/expanded/empty-state-demo.tsx +39 -39
- package/registry/examples/expanded/file-upload-demo.tsx +60 -60
- package/registry/examples/expanded/onboarding-step-demo.tsx +11 -11
- package/registry/examples/expanded/slideout-demo.tsx +15 -15
- package/registry/examples/expanded/steps-demo.tsx +29 -29
- package/registry/examples/expanded/tabs-demo.tsx +13 -13
- package/registry/examples/expanded/timeline-demo.tsx +18 -18
- package/registry/examples/field-demo.tsx +51 -51
- package/registry/examples/hover-card-demo.tsx +23 -23
- package/registry/examples/inline-citations-demo.tsx +31 -0
- package/registry/examples/input-actions-demo.tsx +36 -0
- package/registry/examples/input-demo.tsx +87 -87
- package/registry/examples/input-group-demo.tsx +16 -16
- package/registry/examples/input-otp-demo.tsx +72 -72
- package/registry/examples/item-demo.tsx +46 -46
- package/registry/examples/kbd-demo.tsx +12 -11
- package/registry/examples/label-demo.tsx +20 -20
- package/registry/examples/menu-demo.tsx +122 -122
- package/registry/examples/menubar-demo.tsx +34 -34
- package/registry/examples/modal-demo.tsx +74 -74
- package/registry/examples/native-select-demo.tsx +16 -16
- package/registry/examples/navigation-menu-demo.tsx +29 -29
- package/registry/examples/pagination-demo.tsx +20 -20
- package/registry/examples/popover-demo.tsx +547 -546
- package/registry/examples/progress-demo.tsx +37 -37
- package/registry/examples/progress-slider-demo.tsx +29 -29
- package/registry/examples/radio-card-demo.tsx +51 -51
- package/registry/examples/radio-group-demo.tsx +62 -62
- package/registry/examples/resizable-demo.tsx +22 -22
- package/registry/examples/results-toolbar-demo.tsx +44 -44
- package/registry/examples/rolling-count-demo.tsx +39 -0
- package/registry/examples/scroll-area-demo.tsx +15 -15
- package/registry/examples/segmented-control-demo.tsx +39 -39
- package/registry/examples/select-demo.tsx +87 -87
- package/registry/examples/sheet-demo.tsx +47 -47
- package/registry/examples/shimmer-text-demo.tsx +20 -0
- package/registry/examples/sidebar-demo.tsx +101 -57
- package/registry/examples/slider-demo.tsx +31 -31
- package/registry/examples/social-button-demo.tsx +61 -61
- package/registry/examples/spinner-demo.tsx +59 -59
- package/registry/examples/streaming-text-demo.tsx +28 -0
- package/registry/examples/tabs-demo.tsx +13 -13
- package/registry/examples/tag-demo.tsx +29 -29
- package/registry/examples/task-list-demo.tsx +74 -0
- package/registry/examples/textarea-demo.tsx +79 -79
- package/registry/examples/thinking-reasoning-demo.tsx +74 -0
- package/registry/examples/thinking-state-demo.tsx +13 -0
- package/registry/examples/toast-demo.tsx +35 -35
- package/registry/examples/toggle-demo.tsx +59 -59
- package/registry/examples/tooltip-demo.tsx +115 -115
- package/registry/guidance/USAGE.md +27 -27
- package/registry/guidance/charts.LICENSE.txt +24 -0
- package/registry/hooks/use-controllable-state.ts +33 -0
- package/registry/hooks/use-direction.ts +207 -207
- package/registry/hooks/use-listbox-navigation.ts +73 -0
- package/registry/hooks/use-motion-end.ts +55 -0
- package/registry/hooks/use-reduced-motion.ts +28 -0
- package/registry/index.json +1634 -184
- package/registry/styles/globals.css +1462 -1570
- package/registry.json +364 -10
- package/schema/config.schema.json +51 -51
- package/schema/registry.schema.json +194 -190
- package/schema/tokens.schema.json +167 -163
- package/src/cli/command-line.js +194 -194
- package/src/cli/config-editors.js +9 -9
- package/src/cli/doctor.js +399 -399
- package/src/cli/file-transaction.js +302 -295
- package/src/cli/global-css.js +153 -153
- package/src/cli/index.js +1002 -1009
- package/src/cli/install-plan.js +592 -592
- package/src/cli/install-receipt.js +171 -171
- package/src/cli/jsonc.js +203 -203
- package/src/cli/package-install-state.js +254 -254
- package/src/cli/package-manager.js +238 -238
- package/src/cli/package-plan.js +185 -185
- package/src/cli/package-version.js +97 -97
- package/src/cli/registry-query.js +207 -207
- package/src/cli/reporting.js +55 -55
- package/src/cli/schema-validation.js +19 -19
- package/src/cli/source-scanner.js +686 -686
- package/src/cli/vite-config.js +478 -478
- package/tokens/banhaten.tokens.json +458 -224
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
# Popover
|
|
2
|
-
|
|
3
|
-
Popover presents contextual controls, filters, actions, settings, and short help content near a trigger. It supports controlled and uncontrolled state, click, focus, and hover-capable triggers, positioned content, optional arrow, alignment, offsets, sizes, close affordance, and RTL-safe composition.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Popover>
|
|
9
|
-
<PopoverTrigger>Filters</PopoverTrigger>
|
|
10
|
-
<PopoverContent side="bottom" align="start">
|
|
11
|
-
<PopoverHeader>
|
|
12
|
-
<PopoverTitle>Filters</PopoverTitle>
|
|
13
|
-
<PopoverClose />
|
|
14
|
-
</PopoverHeader>
|
|
15
|
-
<PopoverBody>Filter controls go here.</PopoverBody>
|
|
16
|
-
</PopoverContent>
|
|
17
|
-
</Popover>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
| Prop | Values |
|
|
21
|
-
| --- | --- |
|
|
22
|
-
| `open`, `defaultOpen`, `onOpenChange` | controlled or uncontrolled state |
|
|
23
|
-
| `side` | `top`, `right`, `bottom`, `left` |
|
|
24
|
-
| `align` | `start`, `center`, `end` |
|
|
25
|
-
| `size` | `sm`, `md`, `lg`, `auto` |
|
|
26
|
-
| `offset` | `tight`, `default`, `loose` |
|
|
27
|
-
| `showArrow` | `boolean` |
|
|
28
|
-
|
|
29
|
-
## Token Contract
|
|
30
|
-
|
|
31
|
-
Popover uses Banhaten popover width, padding, arrow, offset, surface, border, radius, shadow, trigger, typography, and z-index tokens.
|
|
32
|
-
|
|
33
|
-
## RTL
|
|
34
|
-
|
|
35
|
-
Top and bottom alignment use logical start/end behavior. Title and description slots use `dir="auto"` and product content can inherit the nearest direction.
|
|
36
|
-
|
|
37
|
-
## Accessibility
|
|
38
|
-
|
|
39
|
-
Use popovers for non-modal contextual content. Use Dialog or Sheet for workflows that require focus trapping or stronger dismissal semantics.
|
|
40
|
-
|
|
41
|
-
## Install
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
npx banhaten add popover
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Examples
|
|
48
|
-
|
|
49
|
-
Primary registry example: `examples/popover-demo.tsx`.
|
|
50
|
-
|
|
51
|
-
Open the live component page or run `npx banhaten docs popover` to inspect source files, install command, and examples.
|
|
52
|
-
|
|
53
|
-
## RTL Rules
|
|
54
|
-
|
|
55
|
-
- `inheritsDirection`: true
|
|
56
|
-
- `alignment`: Top and bottom alignments use logical start/end so the panel edge and arrow align correctly in LTR and RTL.
|
|
57
|
-
- `spacing`: Uses logical layout and Banhaten spacing tokens for headers, bodies, footers, arrows, and trigger gaps.
|
|
58
|
-
- `textDirection`: Title and description slots use dir="auto" while product content can inherit the nearest direction.
|
|
59
|
-
|
|
1
|
+
# Popover
|
|
2
|
+
|
|
3
|
+
Popover presents contextual controls, filters, actions, settings, and short help content near a trigger. It supports controlled and uncontrolled state, click, focus, and hover-capable triggers, positioned content, optional arrow, alignment, offsets, sizes, close affordance, and RTL-safe composition.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Popover>
|
|
9
|
+
<PopoverTrigger>Filters</PopoverTrigger>
|
|
10
|
+
<PopoverContent side="bottom" align="start">
|
|
11
|
+
<PopoverHeader>
|
|
12
|
+
<PopoverTitle>Filters</PopoverTitle>
|
|
13
|
+
<PopoverClose />
|
|
14
|
+
</PopoverHeader>
|
|
15
|
+
<PopoverBody>Filter controls go here.</PopoverBody>
|
|
16
|
+
</PopoverContent>
|
|
17
|
+
</Popover>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
| Prop | Values |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| `open`, `defaultOpen`, `onOpenChange` | controlled or uncontrolled state |
|
|
23
|
+
| `side` | `top`, `right`, `bottom`, `left` |
|
|
24
|
+
| `align` | `start`, `center`, `end` |
|
|
25
|
+
| `size` | `sm`, `md`, `lg`, `auto` |
|
|
26
|
+
| `offset` | `tight`, `default`, `loose` |
|
|
27
|
+
| `showArrow` | `boolean` |
|
|
28
|
+
|
|
29
|
+
## Token Contract
|
|
30
|
+
|
|
31
|
+
Popover uses Banhaten popover width, padding, arrow, offset, surface, border, radius, shadow, trigger, typography, and z-index tokens.
|
|
32
|
+
|
|
33
|
+
## RTL
|
|
34
|
+
|
|
35
|
+
Top and bottom alignment use logical start/end behavior. Title and description slots use `dir="auto"` and product content can inherit the nearest direction.
|
|
36
|
+
|
|
37
|
+
## Accessibility
|
|
38
|
+
|
|
39
|
+
Use popovers for non-modal contextual content. Use Dialog or Sheet for workflows that require focus trapping or stronger dismissal semantics.
|
|
40
|
+
|
|
41
|
+
## Install
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx banhaten add popover
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Examples
|
|
48
|
+
|
|
49
|
+
Primary registry example: `examples/popover-demo.tsx`.
|
|
50
|
+
|
|
51
|
+
Open the live component page or run `npx banhaten docs popover` to inspect source files, install command, and examples.
|
|
52
|
+
|
|
53
|
+
## RTL Rules
|
|
54
|
+
|
|
55
|
+
- `inheritsDirection`: true
|
|
56
|
+
- `alignment`: Top and bottom alignments use logical start/end so the panel edge and arrow align correctly in LTR and RTL.
|
|
57
|
+
- `spacing`: Uses logical layout and Banhaten spacing tokens for headers, bodies, footers, arrows, and trigger gaps.
|
|
58
|
+
- `textDirection`: Title and description slots use dir="auto" while product content can inherit the nearest direction.
|
|
59
|
+
|
|
60
60
|
<!-- registry-contract:start -->
|
|
61
61
|
## Registry Contract
|
|
62
62
|
|
|
@@ -73,5 +73,5 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
73
73
|
| `offsets` | `tight`, `default`, `loose` |
|
|
74
74
|
| `sides` | `top`, `right`, `bottom`, `left` |
|
|
75
75
|
| `sizes` | `sm`, `md`, `lg`, `auto` |
|
|
76
|
-
| `tokens` | `--bh-content-default`, `--bh-content-disabled`, `--bh-content-subtle`, `--bh-control-default`, `--bh-font-family`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-popover-arrow-depth`, `--bh-popover-arrow-width`, `--bh-popover-bg`, `--bh-popover-body-gap`, `--bh-popover-border`, `--bh-popover-close-icon-size`, `--bh-popover-close-size`, `--bh-popover-content-gap`, `--bh-popover-footer-gap`, `--bh-popover-header-gap`, `--bh-popover-lg-width`, `--bh-popover-max-width`, `--bh-popover-md-width`, `--bh-popover-offset`, `--bh-popover-offset-default`, `--bh-popover-offset-loose`, `--bh-popover-offset-tight`, `--bh-popover-padding`, `--bh-popover-radius`, `--bh-popover-sm-width`, `--bh-popover-trigger-gap`, `--bh-radius-full`, `--bh-text-base-letter-spacing`, `--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-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`, `--bh-z-popover`, `--
|
|
76
|
+
| `tokens` | `--bh-content-default`, `--bh-content-disabled`, `--bh-content-subtle`, `--bh-control-default`, `--bh-font-family`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-popover-arrow-depth`, `--bh-popover-arrow-width`, `--bh-popover-bg`, `--bh-popover-body-gap`, `--bh-popover-border`, `--bh-popover-close-icon-size`, `--bh-popover-close-size`, `--bh-popover-content-gap`, `--bh-popover-footer-gap`, `--bh-popover-header-gap`, `--bh-popover-lg-width`, `--bh-popover-max-width`, `--bh-popover-md-width`, `--bh-popover-offset`, `--bh-popover-offset-default`, `--bh-popover-offset-loose`, `--bh-popover-offset-tight`, `--bh-popover-padding`, `--bh-popover-radius`, `--bh-popover-sm-width`, `--bh-popover-trigger-gap`, `--bh-radius-full`, `--bh-text-base-letter-spacing`, `--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-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`, `--bh-z-popover`, `--elevation-button-focus`, `--elevation-popover` |
|
|
77
77
|
<!-- registry-contract:end -->
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
# Progress Slider
|
|
2
|
-
|
|
3
|
-
Progress Slider is an adjustable, start-anchored progress control. It is built on Radix Slider and keeps the filled surface growing from the logical start edge while the grip handle remains at the active value edge.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<ProgressSlider value={[45]} aria-label="Upload progress" />
|
|
9
|
-
<ProgressSlider defaultValue={[70]} tone="success" showTicks />
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
| Prop | Values |
|
|
13
|
-
| --- | --- |
|
|
14
|
-
| `value`, `defaultValue` | Radix slider value array |
|
|
15
|
-
| `size` | `default`, `lg` |
|
|
16
|
-
| `tone` | `brand`, `neutral`, `success`, `warning`, `danger` |
|
|
17
|
-
| `disabled` | `boolean` |
|
|
18
|
-
| `showTicks` | `boolean` |
|
|
19
|
-
|
|
20
|
-
## Token Contract
|
|
21
|
-
|
|
22
|
-
Progress Slider uses Banhaten slider, progress, semantic tone, track, handle, pill radius, focus, and disabled tokens. Keep tone styling semantic so alert and status palettes can theme consistently.
|
|
23
|
-
|
|
24
|
-
## RTL
|
|
25
|
-
|
|
26
|
-
Radix receives the inherited `dir` attribute for keyboard and value direction. The fill stays anchored to the logical start edge in both LTR and RTL.
|
|
27
|
-
|
|
28
|
-
## Accessibility
|
|
29
|
-
|
|
30
|
-
Provide an accessible name through `aria-label` or `aria-labelledby`. Use `aria-valuetext` when the numeric value needs domain-specific phrasing.
|
|
31
|
-
|
|
32
|
-
## Install
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npx banhaten add progress-slider
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Examples
|
|
39
|
-
|
|
40
|
-
Primary registry example: `examples/progress-slider-demo.tsx`.
|
|
41
|
-
|
|
42
|
-
Open the live component page or run `npx banhaten docs progress-slider` to inspect source files, install command, and examples.
|
|
43
|
-
|
|
44
|
-
## RTL Rules
|
|
45
|
-
|
|
46
|
-
- `inheritsDirection`: true
|
|
47
|
-
- `valueDirection`: Radix Slider handles direction and keyboard behavior through the inherited dir attribute; the fill stays anchored to the logical start edge.
|
|
48
|
-
- `spacing`: Uses tokenized pill geometry and logical direction through Radix.
|
|
49
|
-
|
|
1
|
+
# Progress Slider
|
|
2
|
+
|
|
3
|
+
Progress Slider is an adjustable, start-anchored progress control. It is built on Radix Slider and keeps the filled surface growing from the logical start edge while the grip handle remains at the active value edge.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<ProgressSlider value={[45]} aria-label="Upload progress" />
|
|
9
|
+
<ProgressSlider defaultValue={[70]} tone="success" showTicks />
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
| Prop | Values |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `value`, `defaultValue` | Radix slider value array |
|
|
15
|
+
| `size` | `default`, `lg` |
|
|
16
|
+
| `tone` | `brand`, `neutral`, `success`, `warning`, `danger` |
|
|
17
|
+
| `disabled` | `boolean` |
|
|
18
|
+
| `showTicks` | `boolean` |
|
|
19
|
+
|
|
20
|
+
## Token Contract
|
|
21
|
+
|
|
22
|
+
Progress Slider uses Banhaten slider, progress, semantic tone, track, handle, pill radius, focus, and disabled tokens. Keep tone styling semantic so alert and status palettes can theme consistently.
|
|
23
|
+
|
|
24
|
+
## RTL
|
|
25
|
+
|
|
26
|
+
Radix receives the inherited `dir` attribute for keyboard and value direction. The fill stays anchored to the logical start edge in both LTR and RTL.
|
|
27
|
+
|
|
28
|
+
## Accessibility
|
|
29
|
+
|
|
30
|
+
Provide an accessible name through `aria-label` or `aria-labelledby`. Use `aria-valuetext` when the numeric value needs domain-specific phrasing.
|
|
31
|
+
|
|
32
|
+
## Install
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx banhaten add progress-slider
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Examples
|
|
39
|
+
|
|
40
|
+
Primary registry example: `examples/progress-slider-demo.tsx`.
|
|
41
|
+
|
|
42
|
+
Open the live component page or run `npx banhaten docs progress-slider` to inspect source files, install command, and examples.
|
|
43
|
+
|
|
44
|
+
## RTL Rules
|
|
45
|
+
|
|
46
|
+
- `inheritsDirection`: true
|
|
47
|
+
- `valueDirection`: Radix Slider handles direction and keyboard behavior through the inherited dir attribute; the fill stays anchored to the logical start edge.
|
|
48
|
+
- `spacing`: Uses tokenized pill geometry and logical direction through Radix.
|
|
49
|
+
|
|
50
50
|
<!-- registry-contract:start -->
|
|
51
51
|
## Registry Contract
|
|
52
52
|
|
|
@@ -61,6 +61,6 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
61
61
|
| `features` | `start-anchored fill`, `grip handle`, `ticks` |
|
|
62
62
|
| `sizes` | `default`, `lg` |
|
|
63
63
|
| `states` | `default`, `disabled` |
|
|
64
|
-
| `tokens` | `--bh-bg-brand-soft`, `--bh-bg-brand-subtle`, `--bh-bg-danger-soft`, `--bh-bg-danger-subtle`, `--bh-bg-neutral-soft`, `--bh-bg-neutral-subtle`, `--bh-bg-success-soft`, `--bh-bg-success-subtle`, `--bh-bg-warning-soft`, `--bh-bg-warning-subtle`, `--bh-border-brand-strong`, `--bh-border-brand-subtle`, `--bh-border-danger-strong`, `--bh-border-danger-subtle`, `--bh-border-strong`, `--bh-border-subtle`, `--bh-border-success-strong`, `--bh-border-success-subtle`, `--bh-border-warning-strong`, `--bh-border-warning-subtle`, `--bh-content-disabled`, `--bh-opacity-60`, `--bh-progress-slider-border-width-current`, `--bh-progress-slider-border-width-lg`, `--bh-progress-slider-border-width-md`, `--bh-progress-slider-fill-bg`, `--bh-progress-slider-fill-border`, `--bh-progress-slider-grip-bg`, `--bh-progress-slider-grip-height-current`, `--bh-progress-slider-grip-height-lg`, `--bh-progress-slider-grip-height-md`, `--bh-progress-slider-grip-width`, `--bh-progress-slider-handle-width-current`, `--bh-progress-slider-handle-width-lg`, `--bh-progress-slider-handle-width-md`, `--bh-progress-slider-height-current`, `--bh-progress-slider-height-lg`, `--bh-progress-slider-height-md`, `--bh-progress-slider-radius`, `--bh-progress-slider-tick-bg`, `--bh-progress-slider-tick-gap`, `--bh-progress-slider-tick-padding`, `--bh-progress-slider-tick-size`, `--bh-progress-slider-track-bg`, `--bh-progress-slider-width-current`, `--bh-progress-slider-width-lg`, `--bh-progress-slider-width-md`, `--bh-radius-full`, `--bh-z-overlay`, `--bh-z-popover`, `--bh-z-raised`, `--
|
|
64
|
+
| `tokens` | `--bh-bg-brand-soft`, `--bh-bg-brand-subtle`, `--bh-bg-danger-soft`, `--bh-bg-danger-subtle`, `--bh-bg-neutral-soft`, `--bh-bg-neutral-subtle`, `--bh-bg-success-soft`, `--bh-bg-success-subtle`, `--bh-bg-warning-soft`, `--bh-bg-warning-subtle`, `--bh-border-brand-strong`, `--bh-border-brand-subtle`, `--bh-border-danger-strong`, `--bh-border-danger-subtle`, `--bh-border-strong`, `--bh-border-subtle`, `--bh-border-success-strong`, `--bh-border-success-subtle`, `--bh-border-warning-strong`, `--bh-border-warning-subtle`, `--bh-content-disabled`, `--bh-opacity-60`, `--bh-progress-slider-border-width-current`, `--bh-progress-slider-border-width-lg`, `--bh-progress-slider-border-width-md`, `--bh-progress-slider-fill-bg`, `--bh-progress-slider-fill-border`, `--bh-progress-slider-grip-bg`, `--bh-progress-slider-grip-height-current`, `--bh-progress-slider-grip-height-lg`, `--bh-progress-slider-grip-height-md`, `--bh-progress-slider-grip-width`, `--bh-progress-slider-handle-width-current`, `--bh-progress-slider-handle-width-lg`, `--bh-progress-slider-handle-width-md`, `--bh-progress-slider-height-current`, `--bh-progress-slider-height-lg`, `--bh-progress-slider-height-md`, `--bh-progress-slider-radius`, `--bh-progress-slider-tick-bg`, `--bh-progress-slider-tick-gap`, `--bh-progress-slider-tick-padding`, `--bh-progress-slider-tick-size`, `--bh-progress-slider-track-bg`, `--bh-progress-slider-width-current`, `--bh-progress-slider-width-lg`, `--bh-progress-slider-width-md`, `--bh-radius-full`, `--bh-z-overlay`, `--bh-z-popover`, `--bh-z-raised`, `--elevation-progress-slider-thumb-focus` |
|
|
65
65
|
| `tones` | `brand`, `neutral`, `success`, `warning`, `danger` |
|
|
66
66
|
<!-- registry-contract:end -->
|
|
@@ -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
|
|
|
@@ -60,6 +60,6 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
60
60
|
| `parts` | `RadioCard` |
|
|
61
61
|
| `registryDependencies` | None |
|
|
62
62
|
| `states` | `default`, `active`, `disabled` |
|
|
63
|
-
| `tokens` | `--bh-bg-accent-blue-soft`, `--bh-bg-accent-purple-soft`, `--bh-bg-always-white`, `--bh-bg-neutral-subtle`, `--bh-bg-raised`, `--bh-bg-raised-hover`, `--bh-border-brand-strong`, `--bh-border-default`, `--bh-border-disabled`, `--bh-border-input`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-subtle`, `--bh-icon-stroke-180`, `--bh-icon-stroke-200`, `--bh-interactive-radiobutton-default`, `--bh-opacity-disabled-media`, `--bh-radio-card-bg`, `--bh-radio-card-border`, `--bh-radio-card-border-width`, `--bh-radio-card-border-width-active`, `--bh-radio-card-company-mark-color`, `--bh-radio-card-payment-height`, `--bh-radio-card-payment-logo-color`, `--bh-radio-card-payment-logo-height`, `--bh-radio-card-payment-logo-width`, `--bh-radio-card-payment-width`, `--bh-radio-card-width`, `--bh-radio-control-border`, `--bh-radius-full`, `--bh-radius-md-6`, `--bh-radius-xl-10`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-7xl-40`, `--bh-space-lg-10`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--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`, `--
|
|
63
|
+
| `tokens` | `--bh-bg-accent-blue-soft`, `--bh-bg-accent-purple-soft`, `--bh-bg-always-white`, `--bh-bg-neutral-subtle`, `--bh-bg-raised`, `--bh-bg-raised-hover`, `--bh-border-brand-strong`, `--bh-border-default`, `--bh-border-disabled`, `--bh-border-input`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-subtle`, `--bh-icon-size-default`, `--bh-icon-slot-size-default`, `--bh-icon-stroke-180`, `--bh-icon-stroke-200`, `--bh-interactive-radiobutton-default`, `--bh-opacity-disabled-media`, `--bh-radio-card-bg`, `--bh-radio-card-border`, `--bh-radio-card-border-width`, `--bh-radio-card-border-width-active`, `--bh-radio-card-company-mark-color`, `--bh-radio-card-payment-height`, `--bh-radio-card-payment-logo-color`, `--bh-radio-card-payment-logo-height`, `--bh-radio-card-payment-logo-width`, `--bh-radio-card-payment-width`, `--bh-radio-card-width`, `--bh-radio-control-border`, `--bh-radius-full`, `--bh-radius-md-6`, `--bh-radius-xl-10`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-7xl-40`, `--bh-space-lg-10`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--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`, `--elevation-component-default`, `--elevation-radio-card`, `--elevation-radio-card-current`, `--elevation-radio-card-disabled`, `--elevation-radio-control` |
|
|
64
64
|
| `types` | `with-icon`, `icon-radio-right`, `payment`, `with-avatar`, `company-icon`, `icon-radio-left`, `radio-label` |
|
|
65
65
|
<!-- registry-contract:end -->
|
|
@@ -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
|
|
|
@@ -68,5 +68,5 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
68
68
|
| `controlPositions` | `start`, `end` |
|
|
69
69
|
| `orientations` | `vertical`, `horizontal` |
|
|
70
70
|
| `states` | `default`, `error`, `disabled` |
|
|
71
|
-
| `tokens` | `--bh-bg-always-white`, `--bh-bg-default`, `--bh-bg-disabled`, `--bh-border-brand-strong`, `--bh-border-danger-strong`, `--bh-border-disabled`, `--bh-border-input`, `--bh-border-width-default`, `--bh-content-danger-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-subtle`, `--bh-interactive-radiobutton-default`, `--bh-opacity-0`, `--bh-opacity-100`, `--bh-radio-control-border`, `--bh-radio-group-message-max-width`, `--bh-radius-full`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--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-md-medium-font-weight`, `--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-regular-font-size`, `--bh-text-body-xs-regular-font-weight`, `--bh-text-body-xs-regular-letter-spacing`, `--bh-text-body-xs-regular-line-height`, `--bh-z-raised`, `--
|
|
71
|
+
| `tokens` | `--bh-bg-always-white`, `--bh-bg-default`, `--bh-bg-disabled`, `--bh-border-brand-strong`, `--bh-border-danger-strong`, `--bh-border-disabled`, `--bh-border-input`, `--bh-border-width-default`, `--bh-content-danger-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-subtle`, `--bh-interactive-radiobutton-default`, `--bh-opacity-0`, `--bh-opacity-100`, `--bh-radio-control-border`, `--bh-radio-group-message-max-width`, `--bh-radius-full`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--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-md-medium-font-weight`, `--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-regular-font-size`, `--bh-text-body-xs-regular-font-weight`, `--bh-text-body-xs-regular-letter-spacing`, `--bh-text-body-xs-regular-line-height`, `--bh-z-raised`, `--elevation-button-focus`, `--elevation-radio-control` |
|
|
72
72
|
<!-- registry-contract:end -->
|