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,49 +1,49 @@
|
|
|
1
|
-
# Carousel
|
|
2
|
-
|
|
3
|
-
Carousel is an Embla-backed carousel with content, item, previous, and next controls.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Carousel messages={{ previousSlide: "Previous item", nextSlide: "Next item" }}>
|
|
9
|
-
<CarouselContent>
|
|
10
|
-
<CarouselItem>Slide</CarouselItem>
|
|
11
|
-
</CarouselContent>
|
|
12
|
-
<CarouselPrevious />
|
|
13
|
-
<CarouselNext />
|
|
14
|
-
</Carousel>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Token Contract
|
|
18
|
-
|
|
19
|
-
Carousel controls use Banhaten Button tokens, spacing, radius, and directional icon behavior.
|
|
20
|
-
|
|
21
|
-
## RTL
|
|
22
|
-
|
|
23
|
-
Directional icons flip in RTL. Direction does not select a language; pass `messages` on `Carousel` or `aria-label` on an individual control. Set Embla options through `opts` when you need a custom direction strategy.
|
|
24
|
-
|
|
25
|
-
## Accessibility
|
|
26
|
-
|
|
27
|
-
Carousel exposes a region and English button-label defaults for previous and next controls. `messages` accepts partial localized overrides, while a control's direct `aria-label` has highest precedence.
|
|
28
|
-
|
|
29
|
-
## Install
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
npx banhaten add carousel
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Examples
|
|
36
|
-
|
|
37
|
-
Primary registry example: `examples/carousel-demo.tsx`.
|
|
38
|
-
|
|
39
|
-
Open the live component page or run `npx banhaten docs carousel` to inspect source files, install command, and examples.
|
|
40
|
-
|
|
41
|
-
## RTL Rules
|
|
42
|
-
|
|
43
|
-
- `inheritsDirection`: true
|
|
44
|
-
- `directionalIconFlip`: Previous and next arrow icons flip in RTL.
|
|
45
|
-
- `messages`: Direction does not select language. Pass messages or direct aria-label overrides for localized control names.
|
|
46
|
-
|
|
1
|
+
# Carousel
|
|
2
|
+
|
|
3
|
+
Carousel is an Embla-backed carousel with content, item, previous, and next controls.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Carousel messages={{ previousSlide: "Previous item", nextSlide: "Next item" }}>
|
|
9
|
+
<CarouselContent>
|
|
10
|
+
<CarouselItem>Slide</CarouselItem>
|
|
11
|
+
</CarouselContent>
|
|
12
|
+
<CarouselPrevious />
|
|
13
|
+
<CarouselNext />
|
|
14
|
+
</Carousel>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Token Contract
|
|
18
|
+
|
|
19
|
+
Carousel controls use Banhaten Button tokens, spacing, radius, and directional icon behavior.
|
|
20
|
+
|
|
21
|
+
## RTL
|
|
22
|
+
|
|
23
|
+
Directional icons flip in RTL. Direction does not select a language; pass `messages` on `Carousel` or `aria-label` on an individual control. Set Embla options through `opts` when you need a custom direction strategy.
|
|
24
|
+
|
|
25
|
+
## Accessibility
|
|
26
|
+
|
|
27
|
+
Carousel exposes a region and English button-label defaults for previous and next controls. `messages` accepts partial localized overrides, while a control's direct `aria-label` has highest precedence.
|
|
28
|
+
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx banhaten add carousel
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Examples
|
|
36
|
+
|
|
37
|
+
Primary registry example: `examples/carousel-demo.tsx`.
|
|
38
|
+
|
|
39
|
+
Open the live component page or run `npx banhaten docs carousel` to inspect source files, install command, and examples.
|
|
40
|
+
|
|
41
|
+
## RTL Rules
|
|
42
|
+
|
|
43
|
+
- `inheritsDirection`: true
|
|
44
|
+
- `directionalIconFlip`: Previous and next arrow icons flip in RTL.
|
|
45
|
+
- `messages`: Direction does not select language. Pass messages or direct aria-label overrides for localized control names.
|
|
46
|
+
|
|
47
47
|
<!-- registry-contract:start -->
|
|
48
48
|
## Registry Contract
|
|
49
49
|
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
# Catalog Components
|
|
2
|
-
|
|
3
|
-
Catalog Components is an expanded-tier showcase bundle for catalog-style product pages. It brings together breadcrumbs, catalog-only dividers, catalog tag previews, file upload states, and table previews.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<CatalogComponentsShowcase dir="ltr" />
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
| Included part | Source |
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| `Breadcrumbs` | expanded breadcrumbs component |
|
|
14
|
-
| `CatalogContentDivider`, `CatalogDivider` | catalog divider visuals |
|
|
15
|
-
| `Tag` | core tag component, previewed in the showcase |
|
|
16
|
-
| `FileUpload` | expanded upload states |
|
|
17
|
-
| `Table` | expanded table preview |
|
|
18
|
-
|
|
19
|
-
## Token Contract
|
|
20
|
-
|
|
21
|
-
The bundle uses expanded-tier CSS files plus Banhaten button, surface, border, spacing, typography, tag, upload, and table tokens. Treat this as a composition bundle, not a new primitive token namespace.
|
|
22
|
-
|
|
23
|
-
## RTL
|
|
24
|
-
|
|
25
|
-
Catalog examples include LTR and RTL states through the child components. Breadcrumbs, upload rows, table content, and tags should inherit direction from the wrapper.
|
|
26
|
-
|
|
27
|
-
## Accessibility
|
|
28
|
-
|
|
29
|
-
Use the individual child component docs for production semantics. This page is a bundled visual reference for catalog composition and component fit.
|
|
30
|
-
|
|
31
|
-
## Install
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npx banhaten add catalog-components
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Examples
|
|
38
|
-
|
|
39
|
-
Primary registry example: `examples/expanded/catalog-components-demo.tsx`.
|
|
40
|
-
|
|
41
|
-
Open the live component page or run `npx banhaten docs catalog-components` to inspect source files, install command, and examples.
|
|
42
|
-
|
|
43
|
-
## RTL Rules
|
|
44
|
-
|
|
45
|
-
This component has no special RTL contract beyond inherited document direction and logical spacing.
|
|
46
|
-
|
|
1
|
+
# Catalog Components
|
|
2
|
+
|
|
3
|
+
Catalog Components is an expanded-tier showcase bundle for catalog-style product pages. It brings together breadcrumbs, catalog-only dividers, catalog tag previews, file upload states, and table previews.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<CatalogComponentsShowcase dir="ltr" />
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
| Included part | Source |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| `Breadcrumbs` | expanded breadcrumbs component |
|
|
14
|
+
| `CatalogContentDivider`, `CatalogDivider` | catalog divider visuals |
|
|
15
|
+
| `Tag` | core tag component, previewed in the showcase |
|
|
16
|
+
| `FileUpload` | expanded upload states |
|
|
17
|
+
| `Table` | expanded table preview |
|
|
18
|
+
|
|
19
|
+
## Token Contract
|
|
20
|
+
|
|
21
|
+
The bundle uses expanded-tier CSS files plus Banhaten button, surface, border, spacing, typography, tag, upload, and table tokens. Treat this as a composition bundle, not a new primitive token namespace.
|
|
22
|
+
|
|
23
|
+
## RTL
|
|
24
|
+
|
|
25
|
+
Catalog examples include LTR and RTL states through the child components. Breadcrumbs, upload rows, table content, and tags should inherit direction from the wrapper.
|
|
26
|
+
|
|
27
|
+
## Accessibility
|
|
28
|
+
|
|
29
|
+
Use the individual child component docs for production semantics. This page is a bundled visual reference for catalog composition and component fit.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx banhaten add catalog-components
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
Primary registry example: `examples/expanded/catalog-components-demo.tsx`.
|
|
40
|
+
|
|
41
|
+
Open the live component page or run `npx banhaten docs catalog-components` to inspect source files, install command, and examples.
|
|
42
|
+
|
|
43
|
+
## RTL Rules
|
|
44
|
+
|
|
45
|
+
This component has no special RTL contract beyond inherited document direction and logical spacing.
|
|
46
|
+
|
|
47
47
|
<!-- registry-contract:start -->
|
|
48
48
|
## Registry Contract
|
|
49
49
|
|
|
@@ -57,6 +57,6 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
57
57
|
| `registryDependencies` | `breadcrumbs`, `button`, `file-upload`, `table`, `tag` |
|
|
58
58
|
| `modes` | `showcase`, `divider`, `content-divider` |
|
|
59
59
|
| `states` | `label`, `action`, `disabled-action` |
|
|
60
|
-
| `tokens` | `--bh-bg-raised`, `--bh-border-focus`, `--bh-border-subtle`, `--bh-catalog-file-grid-max`, `--bh-catalog-file-grid-min`, `--bh-catalog-file-preview-max`, `--bh-catalog-file-preview-min`, `--bh-content-default`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-control-default`, `--bh-focus-ring-width`, `--bh-font-family`, `--bh-font-weight-medium`, `--bh-font-weight-regular`, `--bh-interactive-ghost-hover`, `--bh-interactive-soft-default`, `--bh-opacity-65`, `--bh-radius-lg-8`, `--bh-space-2xl-14`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-6xl-32`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-space-xxxs-1`, `--bh-text-base-letter-spacing`, `--bh-text-body-md-font-size`, `--bh-text-body-md-line-height`, `--bh-text-body-sm-regular-line-height`, `--bh-text-body-xs-regular-font-size`, `--bh-text-heading-xs-semibold-font-size`, `--bh-text-heading-xs-semibold-font-weight`, `--bh-text-heading-xs-semibold-line-height`, `--
|
|
60
|
+
| `tokens` | `--bh-bg-raised`, `--bh-border-focus`, `--bh-border-subtle`, `--bh-catalog-file-grid-max`, `--bh-catalog-file-grid-min`, `--bh-catalog-file-preview-max`, `--bh-catalog-file-preview-min`, `--bh-content-default`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-control-default`, `--bh-focus-ring-width`, `--bh-font-family`, `--bh-font-weight-medium`, `--bh-font-weight-regular`, `--bh-interactive-ghost-hover`, `--bh-interactive-soft-default`, `--bh-opacity-65`, `--bh-radius-lg-8`, `--bh-space-2xl-14`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-6xl-32`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-space-xxxs-1`, `--bh-text-base-letter-spacing`, `--bh-text-body-md-font-size`, `--bh-text-body-md-line-height`, `--bh-text-body-sm-regular-line-height`, `--bh-text-body-xs-regular-font-size`, `--bh-text-heading-xs-semibold-font-size`, `--bh-text-heading-xs-semibold-font-weight`, `--bh-text-heading-xs-semibold-line-height`, `--elevation-component-default` |
|
|
61
61
|
| `variants` | `solid-divider`, `dotted-divider` |
|
|
62
62
|
<!-- registry-contract:end -->
|
|
@@ -1,46 +1,110 @@
|
|
|
1
1
|
# Chart
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Eight ECharts families and 18 ready-made blocks adapted from [EvilCharts](https://evilcharts.com/docs/echarts/area-chart/blocks), using Banhaten tokens throughout. Existing Recharts wrappers remain compatible.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx banhaten add chart
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
This installs the source modules and declares `echarts` and `recharts`. The playground loads the chart page separately; chart instances initialize when visible.
|
|
4
12
|
|
|
5
13
|
## API
|
|
6
14
|
|
|
15
|
+
Use `DataChart` for application data. Every series uses a Banhaten categorical palette index; raw colors are not part of the specification.
|
|
16
|
+
|
|
7
17
|
```tsx
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
import { DataChart } from "@/components/ui/data-chart"
|
|
19
|
+
import type { ChartSpec } from "@/components/ui/chart-options"
|
|
20
|
+
|
|
21
|
+
const spec: ChartSpec = {
|
|
22
|
+
family: "area",
|
|
23
|
+
variant: "gradient",
|
|
24
|
+
categoryKey: "month",
|
|
25
|
+
data: [
|
|
26
|
+
{ month: "Jan", revenue: 120, costs: 80 },
|
|
27
|
+
{ month: "Feb", revenue: 180, costs: 95 },
|
|
28
|
+
{ month: "Mar", revenue: 150, costs: 90 },
|
|
29
|
+
],
|
|
30
|
+
series: [
|
|
31
|
+
{ key: "revenue", label: "Revenue", colorIndex: 0 },
|
|
32
|
+
{ key: "costs", label: "Costs", colorIndex: 1 },
|
|
33
|
+
],
|
|
34
|
+
legend: true,
|
|
35
|
+
brush: true,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
<DataChart label="Revenue and costs" description="Revenue exceeds costs in each month." spec={spec} />
|
|
14
39
|
```
|
|
15
40
|
|
|
41
|
+
`DataChart` accepts `spec`, required `label`, optional `description`, `loading`, `loadingLabel`, `emptyLabel`, and container attributes. `ChartSpec` selects `area`, `line`, `bar`, `composed`, `radar`, `pie`, `radial`, or `sankey`. Use `stack="stacked"` or `stack="percent"`, `horizontal`, `labels`, `grid`, `max`, `nodes`, and `links` where applicable. Curves are native ECharts approximations, matching the reference implementation; named spline variants are not mathematical spline implementations.
|
|
42
|
+
|
|
43
|
+
Shared parts support seven `legendIndicator` shapes; series `dotStyle` and `activeDotStyle`; `tooltipRadius`, `tooltipSurface`, `tooltipPosition`, and `tooltipCursor`. Translucent tooltips use the Banhaten opacity token. Brush controls are enabled with `brush: true`. Forecast `buffer` tails apply to independent series; stacked series retain their complete data to preserve totals.
|
|
44
|
+
|
|
45
|
+
Use `EChart` for advanced native options. Its `option(theme)` factory receives resolved inherited Banhaten colors, font metrics, spacing, radii, opacity, direction, and reduced-motion preference. An optional `onReady(chart, theme)` callback can attach interactions and return their cleanup. Native options supplied by callers must also use these tokens.
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
import { ChartBlock } from "@/components/ui/chart-block"
|
|
49
|
+
|
|
50
|
+
<ChartBlock block="latency" />
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`ChartBlock` provides example compositions with illustrative datasets. Time-range controls update both chart data and summaries. The visible data table uses the same filtered rows. Use `DataChart` for your own production data or adapt the installed block source.
|
|
54
|
+
|
|
55
|
+
| Family | Block IDs |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| Area | `latency`, `portfolio`, `benchmark`, `audience` |
|
|
58
|
+
| Line | `payouts`, `shipments` |
|
|
59
|
+
| Bar | `peak`, `grid`, `monospace` |
|
|
60
|
+
| Pie | `market-share`, `progress-rings`, `revenue-mix`, `reliability-score` |
|
|
61
|
+
| Radial | `budget`, `ride`, `cache-tiers` |
|
|
62
|
+
| Sankey | `allocation`, `pipeline` |
|
|
63
|
+
|
|
64
|
+
Legacy `ChartContainer`, `ChartTooltip`, `ChartTooltipContent`, `ChartLegend`, and `ChartLegendContent` still compose with Recharts. Their `config` maps series names to `--color-*` CSS variables.
|
|
65
|
+
|
|
16
66
|
## Token Contract
|
|
17
67
|
|
|
18
|
-
|
|
68
|
+
- Marks use the eight `--bh-chart-categorical-*` colors. Neutral tracks, surfaces, borders, and text use existing semantic tokens.
|
|
69
|
+
- Fonts, weights, sizes, line heights, spacing, radii, opacity, and animation duration resolve from the chart's inherited Banhaten tokens. No duplicate theme palette is maintained.
|
|
70
|
+
- Theme, font, radius, and direction changes update mounted charts. Existing legend selections and brush range survive theme updates.
|
|
71
|
+
- Gradient fills and patterns remain available. Colored blur shadows and glow variants are omitted. Tooltips have no shadow.
|
|
72
|
+
- Numeric data, chart percentages, angles, and geometry ratios describe the visualization rather than design tokens.
|
|
73
|
+
- All source modules, including TypeScript helpers, are included in token governance checks.
|
|
19
74
|
|
|
20
|
-
|
|
75
|
+
### Chart corner radii
|
|
21
76
|
|
|
22
|
-
|
|
77
|
+
Keep chart marks subtly rounded so their endpoints and stacked joins remain easy to compare. Use `--bh-radius-sm-4` for exposed bar ends and separated donut slices: 4px in the default theme, 6px in rounded mode, and 0px in sharp mode. The native `option(theme)` API exposes this as `theme.markRadius` separately from surface and tooltip radii.
|
|
23
78
|
|
|
24
|
-
|
|
79
|
+
| Mark | Corner treatment |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| Bars, including composed charts | Small radius at the exposed value end; square at the baseline. |
|
|
82
|
+
| Stacked bars | Square between segments; Small radius only at the outer end of the stack. |
|
|
83
|
+
| Standard pie and donut slices | Square slice corners (0px). |
|
|
84
|
+
| Separated and petal donut slices | Small radius; avoid pill-shaped corners. |
|
|
25
85
|
|
|
26
|
-
|
|
86
|
+
## RTL
|
|
27
87
|
|
|
28
|
-
|
|
88
|
+
`DataChart` inherits direction or accepts `dir="rtl"`. Cartesian category axes and value-axis placement mirror. Block controls, summaries, and tables follow logical layout. Data order is preserved. Text uses the active Banhaten Arabic and English font tokens.
|
|
29
89
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
90
|
+
## Accessibility
|
|
91
|
+
|
|
92
|
+
Supply a meaningful `label` and a concise `description` of the finding. Charts are labelled figures; hover tooltips supplement that description. Blocks provide keyboard-operable time ranges and expandable data tables. For application data, provide a corresponding table or text summary when precise values matter. Do not rely on color alone: use labels, patterns, dashed strokes, or point markers. Reduced motion disables animations and moving dashes.
|
|
33
93
|
|
|
34
94
|
## Examples
|
|
35
95
|
|
|
36
|
-
Primary registry example: `examples/chart-demo.tsx`.
|
|
96
|
+
Primary registry example: `examples/chart-demo.tsx`. Ready-made block example: `examples/chart-block-demo.tsx`.
|
|
37
97
|
|
|
38
|
-
|
|
98
|
+
The live Chart page contains all eight families, all 18 blocks, and an Arabic RTL example. Examples include gradients, texture fills, grouped/stacked/percentage series, dots, brush controls, circular and polygon radar grids, pie labels, radial progress, and Sankey links.
|
|
39
99
|
|
|
40
100
|
## RTL Rules
|
|
41
101
|
|
|
42
102
|
- `inheritsDirection`: true
|
|
43
|
-
- `layout`:
|
|
103
|
+
- `layout`: Cartesian axes mirror; block layouts use logical properties. Legacy Recharts geometry remains caller-controlled.
|
|
104
|
+
|
|
105
|
+
## Source attribution
|
|
106
|
+
|
|
107
|
+
Chart designs and illustrative block data are adapted from the MIT-licensed [EvilCharts repository](https://github.com/legions-developer/evilcharts). Its notice is included in the installed chart files. The shared renderer uses Apache ECharts under Apache-2.0. Banhaten's token layer, family builders, and lifecycle replace duplicated source chart implementations.
|
|
44
108
|
|
|
45
109
|
<!-- registry-contract:start -->
|
|
46
110
|
## Registry Contract
|
|
@@ -50,9 +114,16 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
50
114
|
|
|
51
115
|
| Field | Values |
|
|
52
116
|
| --- | --- |
|
|
53
|
-
| `supportedExports` | `components/chart.tsx: ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent` |
|
|
54
|
-
| `parts` | `ChartContainer`, `ChartTooltip`, `ChartTooltipContent`, `ChartLegend`, `ChartLegendContent` |
|
|
55
|
-
| `registryDependencies` |
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
117
|
+
| `supportedExports` | `components/chart.tsx: ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent`, `components/echart.tsx: EChart`, `components/chart-options.ts: createChartOption`, `components/data-chart.tsx: DataChart`, `components/chart-block.tsx: ChartBlock, chartBlocks` |
|
|
118
|
+
| `parts` | `DataChart`, `ChartBlock`, `EChart`, `ChartContainer`, `ChartTooltip`, `ChartTooltipContent`, `ChartLegend`, `ChartLegendContent` |
|
|
119
|
+
| `registryDependencies` | `button`, `progress` |
|
|
120
|
+
| `props.spec` | `ChartSpec; default null; DataChart: family, data, series, variant, stacking, labels, brush, and interaction options. Series colors are Banhaten palette indices.` |
|
|
121
|
+
| `props.label` | `string; default null; DataChart / EChart: required accessible chart name.` |
|
|
122
|
+
| `props.description` | `string; default null; DataChart / EChart: optional accessible text summary.` |
|
|
123
|
+
| `props.block` | `ChartBlockId; default null; ChartBlock: one of 18 documented blocks, with illustrative data and period controls where applicable.` |
|
|
124
|
+
| `props.option` | `(theme: EChartTheme) => EChartsOption; default null; EChart: advanced option factory receives resolved inherited Banhaten tokens.` |
|
|
125
|
+
| `props.onReady` | `(chart, theme) => void \| (() => void); default null; EChart: attach custom interactions and return their cleanup.` |
|
|
126
|
+
| `props.config` | `ChartConfig; default null; Legacy ChartContainer: maps series names to CSS color variables.` |
|
|
127
|
+
| `features` | `eight chart families`, `18 ready-made blocks`, `live theme and font tokens`, `responsive SVG`, `tooltips and legends`, `range brush`, `pattern fills`, `reduced motion`, `RTL`, `Recharts compatibility` |
|
|
128
|
+
| `tokens` | `--bh-bg-neutral-subtle`, `--bh-bg-raised`, `--bh-border-default`, `--bh-border-focus`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-chart-categorical-aqua`, `--bh-chart-categorical-brand`, `--bh-chart-categorical-danger`, `--bh-chart-categorical-fuchsia`, `--bh-chart-categorical-information`, `--bh-chart-categorical-purple`, `--bh-chart-categorical-success`, `--bh-chart-categorical-warning`, `--bh-chart-neutral-default`, `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-duration-default`, `--bh-focus-ring-width`, `--bh-font-family`, `--bh-font-family-mono`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-opacity-15`, `--bh-opacity-30`, `--bh-opacity-90`, `--bh-opacity-muted`, `--bh-radius-3xl-16`, `--bh-radius-full`, `--bh-radius-lg-8`, `--bh-radius-md-6`, `--bh-radius-sm-4`, `--bh-radius-xl-10`, `--bh-radius-xs-2`, `--bh-space-11xl-96`, `--bh-space-12xl-128`, `--bh-space-15xl-224`, `--bh-space-17xl-288`, `--bh-space-19xl-384`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-6xl-32`, `--bh-space-7xl-40`, `--bh-space-9xl-64`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-space-xxxs-1`, `--bh-text-body-2xs-regular-font-size`, `--bh-text-body-2xs-regular-line-height`, `--bh-text-body-3xs-regular-font-size`, `--bh-text-body-3xs-regular-line-height`, `--bh-text-body-sm-medium-font-size`, `--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-line-height`, `--bh-text-body-xs-medium-font-size`, `--bh-text-body-xs-medium-font-weight`, `--bh-text-body-xs-regular-font-size`, `--bh-text-body-xs-regular-font-weight`, `--bh-text-body-xs-regular-letter-spacing`, `--bh-text-body-xs-regular-line-height`, `--bh-text-heading-lg-semibold-font-size`, `--bh-text-heading-lg-semibold-font-weight`, `--bh-text-heading-lg-semibold-letter-spacing`, `--bh-text-heading-lg-semibold-line-height`, `--bh-text-heading-md-semibold-font-size`, `--bh-text-heading-md-semibold-font-weight`, `--bh-text-heading-md-semibold-letter-spacing`, `--bh-text-heading-md-semibold-line-height`, `--bh-text-heading-xs-semibold-font-size`, `--bh-text-heading-xs-semibold-font-weight`, `--bh-text-heading-xs-semibold-letter-spacing`, `--bh-text-heading-xs-semibold-line-height`, `--elevation-popover` |
|
|
58
129
|
<!-- registry-contract:end -->
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
# Checkbox
|
|
2
|
-
|
|
3
|
-
Checkbox is the binary selection primitive for forms, preferences, batch actions, and card-style options. It includes the base Radix checkbox control plus `CheckboxCard` for labeled option rows.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Checkbox aria-label="Accept terms" />
|
|
9
|
-
|
|
10
|
-
<CheckboxCard
|
|
11
|
-
title="Email updates"
|
|
12
|
-
description="Receive product and billing notifications."
|
|
13
|
-
controlPosition="start"
|
|
14
|
-
/>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
| Prop | Values |
|
|
18
|
-
| --- | --- |
|
|
19
|
-
| `checked` | Radix checkbox checked state |
|
|
20
|
-
| `disabled` | `boolean` |
|
|
21
|
-
| `CheckboxCard.controlPosition` | `start`, `end` |
|
|
22
|
-
| `CheckboxCard.state` | default, selected, disabled |
|
|
23
|
-
|
|
24
|
-
## Token Contract
|
|
25
|
-
|
|
26
|
-
Checkbox consumes Banhaten control size, radius, component shadow, border, background, content, interactive, disabled, and typography tokens.
|
|
27
|
-
|
|
28
|
-
## RTL
|
|
29
|
-
|
|
30
|
-
`CheckboxCard` uses logical start/end control placement. Labels and descriptions use tokenized body text and `dir="auto"` for mixed Arabic and English copy.
|
|
31
|
-
|
|
32
|
-
## Accessibility
|
|
33
|
-
|
|
34
|
-
Use native labels or `aria-label` for standalone checkboxes. Prefer `CheckboxCard` when the selection target needs title and description text.
|
|
35
|
-
|
|
36
|
-
## Install
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npx banhaten add checkbox
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Examples
|
|
43
|
-
|
|
44
|
-
Primary registry example: `examples/checkbox-demo.tsx`.
|
|
45
|
-
|
|
46
|
-
Open the live component page or run `npx banhaten docs checkbox` to inspect source files, install command, and examples.
|
|
47
|
-
|
|
48
|
-
## RTL Rules
|
|
49
|
-
|
|
50
|
-
- `inheritsDirection`: true
|
|
51
|
-
- `controlPlacement`: The card uses start/end control placement so the checkbox mirrors correctly in RTL.
|
|
52
|
-
- `textDirection`: Labels and descriptions use dir="auto" and tokenized body-md/body-sm typography.
|
|
53
|
-
|
|
1
|
+
# Checkbox
|
|
2
|
+
|
|
3
|
+
Checkbox is the binary selection primitive for forms, preferences, batch actions, and card-style options. It includes the base Radix checkbox control plus `CheckboxCard` for labeled option rows.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Checkbox aria-label="Accept terms" />
|
|
9
|
+
|
|
10
|
+
<CheckboxCard
|
|
11
|
+
title="Email updates"
|
|
12
|
+
description="Receive product and billing notifications."
|
|
13
|
+
controlPosition="start"
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Prop | Values |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| `checked` | Radix checkbox checked state |
|
|
20
|
+
| `disabled` | `boolean` |
|
|
21
|
+
| `CheckboxCard.controlPosition` | `start`, `end` |
|
|
22
|
+
| `CheckboxCard.state` | default, selected, disabled |
|
|
23
|
+
|
|
24
|
+
## Token Contract
|
|
25
|
+
|
|
26
|
+
Checkbox consumes Banhaten control size, radius, component shadow, border, background, content, interactive, disabled, and typography tokens.
|
|
27
|
+
|
|
28
|
+
## RTL
|
|
29
|
+
|
|
30
|
+
`CheckboxCard` uses logical start/end control placement. Labels and descriptions use tokenized body text and `dir="auto"` for mixed Arabic and English copy.
|
|
31
|
+
|
|
32
|
+
## Accessibility
|
|
33
|
+
|
|
34
|
+
Use native labels or `aria-label` for standalone checkboxes. Prefer `CheckboxCard` when the selection target needs title and description text.
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx banhaten add checkbox
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
|
|
44
|
+
Primary registry example: `examples/checkbox-demo.tsx`.
|
|
45
|
+
|
|
46
|
+
Open the live component page or run `npx banhaten docs checkbox` to inspect source files, install command, and examples.
|
|
47
|
+
|
|
48
|
+
## RTL Rules
|
|
49
|
+
|
|
50
|
+
- `inheritsDirection`: true
|
|
51
|
+
- `controlPlacement`: The card uses start/end control placement so the checkbox mirrors correctly in RTL.
|
|
52
|
+
- `textDirection`: Labels and descriptions use dir="auto" and tokenized body-md/body-sm typography.
|
|
53
|
+
|
|
54
54
|
<!-- registry-contract:start -->
|
|
55
55
|
## Registry Contract
|
|
56
56
|
|
|
@@ -64,5 +64,5 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
64
64
|
| `registryDependencies` | None |
|
|
65
65
|
| `cardPositions` | `start`, `end` |
|
|
66
66
|
| `states` | `unchecked`, `checked`, `indeterminate`, `selected`, `disabled` |
|
|
67
|
-
| `tokens` | `--bh-bg-default`, `--bh-bg-disabled`, `--bh-bg-raised`, `--bh-bg-raised-hover`, `--bh-border-brand-strong`, `--bh-border-disabled`, `--bh-border-input`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-checkbox-card-border`, `--bh-checkbox-card-border-width`, `--bh-checkbox-card-border-width-active`, `--bh-checkbox-card-border-width-current`, `--bh-checkbox-card-content-gap`, `--bh-checkbox-card-gap`, `--bh-checkbox-card-label-gap`, `--bh-checkbox-card-media-icon-size`, `--bh-checkbox-card-padding`, `--bh-checkbox-card-radius`, `--bh-checkbox-card-text-gap`, `--bh-checkbox-card-width`, `--bh-checkbox-control-border`, `--bh-checkbox-control-radius`, `--bh-checkbox-control-size`, `--bh-checkbox-icon-size`, `--bh-checkbox-root-size`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-
|
|
67
|
+
| `tokens` | `--bh-bg-default`, `--bh-bg-disabled`, `--bh-bg-raised`, `--bh-bg-raised-hover`, `--bh-border-brand-strong`, `--bh-border-disabled`, `--bh-border-input`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-checkbox-card-border`, `--bh-checkbox-card-border-width`, `--bh-checkbox-card-border-width-active`, `--bh-checkbox-card-border-width-current`, `--bh-checkbox-card-content-gap`, `--bh-checkbox-card-gap`, `--bh-checkbox-card-label-gap`, `--bh-checkbox-card-media-icon-size`, `--bh-checkbox-card-padding`, `--bh-checkbox-card-radius`, `--bh-checkbox-card-text-gap`, `--bh-checkbox-card-width`, `--bh-checkbox-control-border`, `--bh-checkbox-control-radius`, `--bh-checkbox-control-size`, `--bh-checkbox-icon-size`, `--bh-checkbox-root-size`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-subtle`, `--bh-icon-stroke-300`, `--bh-interactive-checkbox-content`, `--bh-interactive-checkbox-default`, `--bh-interactive-checkbox-hover`, `--bh-opacity-60`, `--bh-text-body-md-medium-font-size`, `--bh-text-body-md-medium-font-weight`, `--bh-text-body-md-medium-letter-spacing`, `--bh-text-body-md-medium-line-height`, `--bh-text-body-sm-regular-font-size`, `--bh-text-body-sm-regular-font-weight`, `--bh-text-body-sm-regular-letter-spacing`, `--bh-text-body-sm-regular-line-height`, `--elevation-checkbox-card`, `--elevation-checkbox-card-focus`, `--elevation-checkbox-control`, `--elevation-checkbox-focus`, `--elevation-component-default` |
|
|
68
68
|
<!-- registry-contract:end -->
|
|
@@ -1,52 +1,66 @@
|
|
|
1
|
-
# Collapsible
|
|
2
|
-
|
|
3
|
-
Collapsible wraps Radix Collapsible for disclosure sections with Banhaten trigger and content styling.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Collapsible defaultOpen>
|
|
9
|
-
<CollapsibleTrigger>Workspace details</CollapsibleTrigger>
|
|
10
|
-
<CollapsibleContent>Billing and team settings.</CollapsibleContent>
|
|
11
|
-
</Collapsible>
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
| Part | Purpose |
|
|
15
|
-
| --- | --- |
|
|
16
|
-
| `Collapsible` | Radix root |
|
|
17
|
-
| `CollapsibleTrigger` | disclosure button |
|
|
18
|
-
| `CollapsibleContent` | expandable content region |
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
##
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
1
|
+
# Collapsible
|
|
2
|
+
|
|
3
|
+
Collapsible wraps Radix Collapsible for disclosure sections with Banhaten trigger and content styling.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Collapsible defaultOpen>
|
|
9
|
+
<CollapsibleTrigger>Workspace details</CollapsibleTrigger>
|
|
10
|
+
<CollapsibleContent>Billing and team settings.</CollapsibleContent>
|
|
11
|
+
</Collapsible>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Part | Purpose |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| `Collapsible` | Radix root |
|
|
17
|
+
| `CollapsibleTrigger` | disclosure button; with `asChild` your own element becomes the unstyled trigger |
|
|
18
|
+
| `CollapsibleContent` | expandable content region |
|
|
19
|
+
| `CollapsiblePanel` | unstyled content that animates its height open and closed |
|
|
20
|
+
|
|
21
|
+
Components with their own disclosure design compose the unstyled pieces:
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
<Collapsible open={open} onOpenChange={setOpen}>
|
|
25
|
+
<CollapsibleTrigger asChild>
|
|
26
|
+
<button type="button">Show details</button>
|
|
27
|
+
</CollapsibleTrigger>
|
|
28
|
+
<CollapsiblePanel>…</CollapsiblePanel>
|
|
29
|
+
</Collapsible>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`CollapsiblePanel` animates on `--collapsible-panel-duration` (default `--bh-duration-moderate`) and `--collapsible-panel-easing` (default `--bh-easing-emphasized`); set them on the panel to tune the motion.
|
|
33
|
+
|
|
34
|
+
## Token Contract
|
|
35
|
+
|
|
36
|
+
Collapsible uses Banhaten spacing, radius, body typography, ghost hover, focus, and content tokens.
|
|
37
|
+
|
|
38
|
+
## RTL
|
|
39
|
+
|
|
40
|
+
The trigger and content use logical text alignment and inherit document direction.
|
|
41
|
+
|
|
42
|
+
## Accessibility
|
|
43
|
+
|
|
44
|
+
Radix manages expanded state, trigger attributes, and content relationships. Closed content unmounts after its closing animation, so nothing inside a closed section can be focused or read.
|
|
45
|
+
|
|
46
|
+
## Install
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npx banhaten add collapsible
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Examples
|
|
53
|
+
|
|
54
|
+
Primary registry example: `examples/collapsible-demo.tsx`.
|
|
55
|
+
|
|
56
|
+
Open the live component page or run `npx banhaten docs collapsible` to inspect source files, install command, and examples.
|
|
57
|
+
|
|
58
|
+
## RTL Rules
|
|
59
|
+
|
|
60
|
+
- `inheritsDirection`: true
|
|
61
|
+
- `textAlignment`: Trigger and content use logical text alignment and inherit direction.
|
|
62
|
+
- `spacing`: Icon and label spacing uses flex gap so it mirrors with document direction.
|
|
63
|
+
|
|
50
64
|
<!-- registry-contract:start -->
|
|
51
65
|
## Registry Contract
|
|
52
66
|
|
|
@@ -55,9 +69,9 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
55
69
|
|
|
56
70
|
| Field | Values |
|
|
57
71
|
| --- | --- |
|
|
58
|
-
| `supportedExports` | `components/collapsible.tsx: Collapsible, CollapsibleContent, CollapsibleTrigger` |
|
|
59
|
-
| `parts` | `Collapsible`, `CollapsibleTrigger`, `CollapsibleContent` |
|
|
72
|
+
| `supportedExports` | `components/collapsible.tsx: Collapsible, CollapsibleContent, CollapsiblePanel, CollapsibleTrigger` |
|
|
73
|
+
| `parts` | `Collapsible`, `CollapsibleTrigger`, `CollapsibleContent`, `CollapsiblePanel` |
|
|
60
74
|
| `registryDependencies` | None |
|
|
61
|
-
| `features` | `controlled state`, `uncontrolled state`, `keyboard trigger`, `RTL` |
|
|
62
|
-
| `tokens` | `--bh-content-default`, `--bh-content-subtle`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-radius-lg-8`, `--bh-space-3xl-16`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-xl-12`, `--bh-text-body-md-medium-font-size`, `--bh-text-body-md-medium-font-weight`, `--bh-text-body-md-medium-letter-spacing`, `--bh-text-body-md-medium-line-height`, `--bh-text-body-sm-regular-font-size`, `--bh-text-body-sm-regular-font-weight`, `--bh-text-body-sm-regular-letter-spacing`, `--bh-text-body-sm-regular-line-height`, `--
|
|
75
|
+
| `features` | `controlled state`, `uncontrolled state`, `keyboard trigger`, `RTL`, `animated panel`, `custom trigger with asChild` |
|
|
76
|
+
| `tokens` | `--bh-content-default`, `--bh-content-subtle`, `--bh-duration-moderate`, `--bh-easing-emphasized`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-radius-lg-8`, `--bh-space-3xl-16`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-xl-12`, `--bh-text-body-md-medium-font-size`, `--bh-text-body-md-medium-font-weight`, `--bh-text-body-md-medium-letter-spacing`, `--bh-text-body-md-medium-line-height`, `--bh-text-body-sm-regular-font-size`, `--bh-text-body-sm-regular-font-weight`, `--bh-text-body-sm-regular-letter-spacing`, `--bh-text-body-sm-regular-line-height`, `--elevation-button-focus` |
|
|
63
77
|
<!-- registry-contract:end -->
|