banhaten 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +177 -139
- package/CONTRIBUTING.md +46 -46
- package/README.md +192 -192
- package/SECURITY.md +15 -15
- package/banhaten.config.example.json +11 -11
- package/docs/design-spacing.md +13 -13
- package/docs/design-system/README.md +22 -22
- 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 -245
- package/docs/design-system/component-quality-audit-2026-08-20.md +225 -225
- 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 +91 -90
- package/docs/design-system/components/accordion.md +52 -52
- package/docs/design-system/components/activity-feed.md +93 -93
- package/docs/design-system/components/activity-heatmap.md +56 -56
- package/docs/design-system/components/alert-dialog.md +71 -71
- package/docs/design-system/components/alert.md +103 -97
- package/docs/design-system/components/app-header.md +97 -0
- package/docs/design-system/components/aspect-ratio.md +45 -45
- package/docs/design-system/components/attribute.md +101 -89
- package/docs/design-system/components/autocomplete.md +75 -75
- package/docs/design-system/components/avatar.md +53 -53
- package/docs/design-system/components/badge.md +55 -55
- package/docs/design-system/components/banner.md +86 -86
- package/docs/design-system/components/breadcrumbs.md +181 -177
- package/docs/design-system/components/button-group.md +97 -97
- package/docs/design-system/components/button.md +80 -80
- package/docs/design-system/components/card.md +102 -88
- package/docs/design-system/components/carousel.md +46 -46
- package/docs/design-system/components/catalog-components.md +46 -46
- package/docs/design-system/components/checkbox.md +53 -53
- package/docs/design-system/components/collapsible.md +63 -63
- package/docs/design-system/components/command.md +61 -61
- package/docs/design-system/components/context-menu.md +45 -45
- package/docs/design-system/components/date-picker.md +80 -80
- 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 +186 -186
- package/docs/design-system/components/hover-card.md +47 -47
- package/docs/design-system/components/icons.md +48 -48
- package/docs/design-system/components/input-group.md +57 -57
- package/docs/design-system/components/input-otp.md +56 -56
- package/docs/design-system/components/input.md +111 -109
- package/docs/design-system/components/item.md +58 -58
- package/docs/design-system/components/kbd.md +49 -49
- package/docs/design-system/components/label.md +49 -49
- package/docs/design-system/components/menu.md +94 -73
- package/docs/design-system/components/menubar.md +46 -46
- package/docs/design-system/components/modal.md +104 -104
- package/docs/design-system/components/native-select.md +53 -53
- package/docs/design-system/components/navigation-menu.md +49 -49
- package/docs/design-system/components/onboarding-step-list-item.md +81 -81
- package/docs/design-system/components/page-header.md +127 -93
- package/docs/design-system/components/pagination.md +56 -56
- package/docs/design-system/components/popover.md +59 -59
- package/docs/design-system/components/progress-slider.md +49 -49
- package/docs/design-system/components/progress.md +76 -76
- package/docs/design-system/components/radio-card.md +50 -50
- package/docs/design-system/components/radio-group.md +56 -56
- package/docs/design-system/components/resizable.md +43 -43
- package/docs/design-system/components/scroll-area.md +50 -50
- package/docs/design-system/components/segmented-control.md +54 -54
- package/docs/design-system/components/select.md +68 -64
- package/docs/design-system/components/sheet.md +66 -66
- package/docs/design-system/components/sidebar.md +167 -111
- package/docs/design-system/components/skeleton.md +74 -74
- package/docs/design-system/components/slideout.md +64 -64
- package/docs/design-system/components/slider.md +62 -62
- package/docs/design-system/components/social-button.md +49 -49
- package/docs/design-system/components/spinner.md +62 -62
- package/docs/design-system/components/steps.md +65 -65
- package/docs/design-system/components/table.md +499 -422
- package/docs/design-system/components/tabs.md +74 -59
- package/docs/design-system/components/tag.md +79 -79
- package/docs/design-system/components/textarea.md +49 -49
- package/docs/design-system/components/timeline.md +82 -82
- package/docs/design-system/components/toast.md +57 -57
- package/docs/design-system/components/toggle.md +80 -80
- package/docs/design-system/components/toolbar.md +89 -89
- package/docs/design-system/components/tooltip.md +92 -92
- package/docs/design-system/components/typography.md +18 -18
- package/docs/design-system/density-and-elevation.md +65 -65
- 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 -74
- package/docs/design-system/installation.md +70 -70
- 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 -54
- package/docs/design-system/template-gap-audit.md +32 -32
- package/docs/design-system/templates.md +59 -59
- package/docs/design-system/token-governance.md +72 -72
- package/package.json +98 -98
- package/registry/component-contract.json +40 -40
- package/registry/components/accordion.tsx +155 -155
- package/registry/components/alert-dialog.tsx +297 -297
- package/registry/components/alert.tsx +309 -293
- package/registry/components/app-header.tsx +151 -0
- package/registry/components/aspect-ratio.tsx +30 -30
- package/registry/components/attribute.tsx +489 -454
- package/registry/components/autocomplete.tsx +598 -598
- package/registry/components/avatar.tsx +385 -385
- package/registry/components/badge.tsx +630 -629
- package/registry/components/button-group.tsx +565 -565
- package/registry/components/button.tsx +128 -127
- package/registry/components/card.tsx +651 -638
- package/registry/components/carousel.tsx +296 -296
- package/registry/components/chart.tsx +203 -203
- package/registry/components/checkbox.tsx +247 -247
- package/registry/components/collapsible.tsx +109 -109
- package/registry/components/command.tsx +208 -208
- package/registry/components/context-menu.tsx +236 -236
- package/registry/components/date-picker.tsx +1289 -1289
- 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 +135 -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 -60
- package/registry/components/expanded/PageHeader.tsx +209 -179
- package/registry/components/expanded/Slideout.tsx +108 -108
- package/registry/components/expanded/Steps.tsx +402 -402
- package/registry/components/expanded/Table.tsx +1109 -1092
- 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 -260
- package/registry/components/expanded/breadcrumbs.css +157 -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 -135
- package/registry/components/expanded/pageHeader.css +284 -248
- package/registry/components/expanded/slideout.css +276 -276
- package/registry/components/expanded/steps.css +356 -356
- package/registry/components/expanded/table.css +655 -606
- 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/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 +992 -990
- package/registry/components/item.tsx +189 -189
- package/registry/components/kbd.tsx +246 -246
- package/registry/components/label.tsx +78 -78
- package/registry/components/menu.tsx +1091 -978
- 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 -560
- package/registry/components/popover.tsx +338 -338
- package/registry/components/progress-slider.tsx +216 -216
- package/registry/components/radio-card.tsx +676 -676
- package/registry/components/radio-group.tsx +570 -570
- package/registry/components/resizable.tsx +108 -108
- 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 -937
- package/registry/components/sheet.tsx +305 -305
- package/registry/components/sidebar.tsx +1535 -1433
- 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/table-elements.tsx +287 -128
- package/registry/components/tabs.css +246 -222
- package/registry/components/tabs.tsx +245 -241
- package/registry/components/tag.tsx +423 -423
- package/registry/components/textarea.tsx +610 -610
- 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 -433
- package/registry/examples/alert-demo.tsx +34 -34
- package/registry/examples/alert-dialog-demo.tsx +42 -42
- package/registry/examples/app-header-demo.tsx +40 -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 -86
- 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-demo.tsx +18 -18
- 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 -235
- package/registry/examples/context-menu-demo.tsx +29 -29
- package/registry/examples/control-density-contract-demo.tsx +65 -65
- 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/input-actions-demo.tsx +36 -36
- 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 -12
- 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 -547
- 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/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/sidebar-demo.tsx +101 -101
- 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/tabs-demo.tsx +13 -13
- package/registry/examples/tag-demo.tsx +29 -29
- package/registry/examples/textarea-demo.tsx +79 -79
- 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/hooks/use-direction.ts +207 -207
- package/registry/index.json +387 -17
- package/registry/styles/globals.css +46 -0
- package/registry.json +24 -2
- package/schema/config.schema.json +51 -51
- package/schema/registry.schema.json +194 -194
- package/schema/tokens.schema.json +167 -167
- 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 -302
- package/src/cli/global-css.js +153 -153
- package/src/cli/index.js +1002 -1002
- 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 +184 -0
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
# Segmented Control
|
|
2
|
-
|
|
3
|
-
Segmented Control presents a small set of related choices on one connected, content-width surface. It is the preferred primitive for view, density, period, and numeric display choices such as “Cards per row”.
|
|
4
|
-
|
|
5
|
-
Use Select or Radio Group when labels are long or the option set is large. Use Button Group when the items are actions rather than values.
|
|
6
|
-
|
|
7
|
-
## API
|
|
8
|
-
|
|
9
|
-
Give the group an accessible name, give every item a stable value, and use `SegmentedControlLabel` only for non-interactive context.
|
|
10
|
-
|
|
11
|
-
```tsx
|
|
12
|
-
<SegmentedControl
|
|
13
|
-
aria-label="Cards per row"
|
|
14
|
-
density="default"
|
|
15
|
-
defaultValue="4"
|
|
16
|
-
>
|
|
17
|
-
<SegmentedControlLabel>Cards / row</SegmentedControlLabel>
|
|
18
|
-
<SegmentedControlItem value="3">3</SegmentedControlItem>
|
|
19
|
-
<SegmentedControlItem value="4">4</SegmentedControlItem>
|
|
20
|
-
<SegmentedControlItem value="5">5</SegmentedControlItem>
|
|
21
|
-
<SegmentedControlItem value="6">6</SegmentedControlItem>
|
|
22
|
-
</SegmentedControl>
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
The default density is `default` (36px). Use `compact` for 32px control rows and `comfortable` for 40px controls. Keep adjacent controls on the same density contract.
|
|
26
|
-
|
|
27
|
-
## Install
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
npx banhaten add segmented-control
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Examples
|
|
34
|
-
|
|
35
|
-
Primary registry example: `examples/segmented-control-demo.tsx`.
|
|
36
|
-
|
|
37
|
-
The results-toolbar recipe demonstrates the labeled cards-per-row composition alongside a Select action.
|
|
38
|
-
|
|
39
|
-
## Token Contract
|
|
40
|
-
|
|
41
|
-
Segmented Control reuses Button Group surface, divider, interaction, typography, and density tokens. Do not replace its height, padding, radius, color, or shadow with local literal values.
|
|
42
|
-
|
|
43
|
-
Covered source files: `components/segmented-control.tsx` and its `button-group` registry dependency.
|
|
44
|
-
|
|
45
|
-
## RTL Rules
|
|
46
|
-
|
|
47
|
-
- The group inherits document direction.
|
|
48
|
-
- Content-width items and logical dividers follow inherited direction without alternate markup.
|
|
49
|
-
- Horizontal arrow-key navigation resolves the computed direction through the underlying Toggle Group.
|
|
50
|
-
|
|
51
|
-
## Accessibility
|
|
52
|
-
|
|
53
|
-
Provide `aria-label` on every Segmented Control. Items expose pressed state through the underlying Toggle Group, support single or multiple selection, and retain Home, End, and direction-aware arrow-key navigation. The label segment is descriptive and never focusable.
|
|
54
|
-
|
|
1
|
+
# Segmented Control
|
|
2
|
+
|
|
3
|
+
Segmented Control presents a small set of related choices on one connected, content-width surface. It is the preferred primitive for view, density, period, and numeric display choices such as “Cards per row”.
|
|
4
|
+
|
|
5
|
+
Use Select or Radio Group when labels are long or the option set is large. Use Button Group when the items are actions rather than values.
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
Give the group an accessible name, give every item a stable value, and use `SegmentedControlLabel` only for non-interactive context.
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
<SegmentedControl
|
|
13
|
+
aria-label="Cards per row"
|
|
14
|
+
density="default"
|
|
15
|
+
defaultValue="4"
|
|
16
|
+
>
|
|
17
|
+
<SegmentedControlLabel>Cards / row</SegmentedControlLabel>
|
|
18
|
+
<SegmentedControlItem value="3">3</SegmentedControlItem>
|
|
19
|
+
<SegmentedControlItem value="4">4</SegmentedControlItem>
|
|
20
|
+
<SegmentedControlItem value="5">5</SegmentedControlItem>
|
|
21
|
+
<SegmentedControlItem value="6">6</SegmentedControlItem>
|
|
22
|
+
</SegmentedControl>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The default density is `default` (36px). Use `compact` for 32px control rows and `comfortable` for 40px controls. Keep adjacent controls on the same density contract.
|
|
26
|
+
|
|
27
|
+
## Install
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx banhaten add segmented-control
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Examples
|
|
34
|
+
|
|
35
|
+
Primary registry example: `examples/segmented-control-demo.tsx`.
|
|
36
|
+
|
|
37
|
+
The results-toolbar recipe demonstrates the labeled cards-per-row composition alongside a Select action.
|
|
38
|
+
|
|
39
|
+
## Token Contract
|
|
40
|
+
|
|
41
|
+
Segmented Control reuses Button Group surface, divider, interaction, typography, and density tokens. Do not replace its height, padding, radius, color, or shadow with local literal values.
|
|
42
|
+
|
|
43
|
+
Covered source files: `components/segmented-control.tsx` and its `button-group` registry dependency.
|
|
44
|
+
|
|
45
|
+
## RTL Rules
|
|
46
|
+
|
|
47
|
+
- The group inherits document direction.
|
|
48
|
+
- Content-width items and logical dividers follow inherited direction without alternate markup.
|
|
49
|
+
- Horizontal arrow-key navigation resolves the computed direction through the underlying Toggle Group.
|
|
50
|
+
|
|
51
|
+
## Accessibility
|
|
52
|
+
|
|
53
|
+
Provide `aria-label` on every Segmented Control. Items expose pressed state through the underlying Toggle Group, support single or multiple selection, and retain Home, End, and direction-aware arrow-key navigation. The label segment is descriptive and never focusable.
|
|
54
|
+
|
|
55
55
|
<!-- registry-contract:start -->
|
|
56
56
|
## Registry Contract
|
|
57
57
|
|
|
@@ -1,67 +1,71 @@
|
|
|
1
|
-
# Select
|
|
2
|
-
|
|
3
|
-
Select is a Radix Select-backed field and menu system. It supports default and soft trigger styles, md/lg sizing, error, filled and disabled states, menu surfaces, checkbox or check selection, and item media for text, icons, avatars, companies, payment methods, and status dots.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Select label="Country" placeholder="Choose country">
|
|
9
|
-
<SelectMenuItem value="eg">Egypt</SelectMenuItem>
|
|
10
|
-
<SelectMenuItem value="sa">Saudi Arabia</SelectMenuItem>
|
|
11
|
-
</Select>
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
| Prop | Type / values | Default | Notes |
|
|
15
|
-
| --- | --- | --- | --- |
|
|
16
|
-
| `aria-label` | `string` | — | Gives a label-less trigger a stable purpose-based name. It is forwarded to the trigger, not the root. |
|
|
17
|
-
| `aria-labelledby` | `string` | — | Names the trigger from external text. It is forwarded to the trigger, not the root. |
|
|
18
|
-
| `variant` | `default`, `soft` | `default` | Selects the trigger surface. |
|
|
19
|
-
| `size` | `lg`, `md` | `lg` | Selects the trigger height. |
|
|
20
|
-
| `state` | `default`, `filled`, `error`, `disabled` | `default` | Selects the visual state. |
|
|
21
|
-
| `itemType` | `default`, `icon`, `avatar`, `company`, `payment`, `dot` | `default` | Selects menu-item media. |
|
|
22
|
-
| `selectionType` | `default`, `checkbox` | `default` | Selects the menu-item selection indicator. |
|
|
23
|
-
| `hasInformationIcon` | `boolean` | `false` | Shows an information icon beside the field label. |
|
|
24
|
-
| `hasLeadingIcon` | `boolean` | `false` | Set true to show the default user icon. |
|
|
25
|
-
| `leadingIcon` | `ReactNode \| false` | `null` | A node enables the leading slot; false always removes it. |
|
|
26
|
-
| `hasTrailingIcon` | `boolean` | `false` | Set true to show the default information icon inside the trigger. |
|
|
27
|
-
| `trailingIcon` | `ReactNode \| false` | `null` | A node enables the trailing slot; false always removes it. |
|
|
28
|
-
| `expandIcon` | `ReactNode \| false` | `chevron-down` | Replaces the expand icon, or removes it when false. |
|
|
29
|
-
| `triggerProps` | `React.ComponentProps<"button">` | — | Advanced trigger attributes, spread last so matching values override top-level trigger defaults. |
|
|
30
|
-
|
|
31
|
-
## Migration
|
|
32
|
-
|
|
33
|
-
Select now renders only its expand chevron when optional trigger-icon props are omitted. Add `hasLeadingIcon` or `hasTrailingIcon` to retain the previous default user or information icon. A supplied icon enables its slot, while explicit `false` always removes it.
|
|
34
|
-
|
|
35
|
-
##
|
|
36
|
-
|
|
37
|
-
Select
|
|
38
|
-
|
|
39
|
-
##
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
##
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
1
|
+
# Select
|
|
2
|
+
|
|
3
|
+
Select is a Radix Select-backed field and menu system. It supports default and soft trigger styles, md/lg sizing, error, filled and disabled states, menu surfaces, checkbox or check selection, and item media for text, icons, avatars, companies, payment methods, and status dots.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Select label="Country" placeholder="Choose country">
|
|
9
|
+
<SelectMenuItem value="eg">Egypt</SelectMenuItem>
|
|
10
|
+
<SelectMenuItem value="sa">Saudi Arabia</SelectMenuItem>
|
|
11
|
+
</Select>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Prop | Type / values | Default | Notes |
|
|
15
|
+
| --- | --- | --- | --- |
|
|
16
|
+
| `aria-label` | `string` | — | Gives a label-less trigger a stable purpose-based name. It is forwarded to the trigger, not the root. |
|
|
17
|
+
| `aria-labelledby` | `string` | — | Names the trigger from external text. It is forwarded to the trigger, not the root. |
|
|
18
|
+
| `variant` | `default`, `soft` | `default` | Selects the trigger surface. |
|
|
19
|
+
| `size` | `lg`, `md` | `lg` | Selects the trigger height. |
|
|
20
|
+
| `state` | `default`, `filled`, `error`, `disabled` | `default` | Selects the visual state. |
|
|
21
|
+
| `itemType` | `default`, `icon`, `avatar`, `company`, `payment`, `dot` | `default` | Selects menu-item media. |
|
|
22
|
+
| `selectionType` | `default`, `checkbox` | `default` | Selects the menu-item selection indicator. |
|
|
23
|
+
| `hasInformationIcon` | `boolean` | `false` | Shows an information icon beside the field label. |
|
|
24
|
+
| `hasLeadingIcon` | `boolean` | `false` | Set true to show the default user icon. |
|
|
25
|
+
| `leadingIcon` | `ReactNode \| false` | `null` | A node enables the leading slot; false always removes it. |
|
|
26
|
+
| `hasTrailingIcon` | `boolean` | `false` | Set true to show the default information icon inside the trigger. |
|
|
27
|
+
| `trailingIcon` | `ReactNode \| false` | `null` | A node enables the trailing slot; false always removes it. |
|
|
28
|
+
| `expandIcon` | `ReactNode \| false` | `chevron-down` | Replaces the expand icon, or removes it when false. |
|
|
29
|
+
| `triggerProps` | `React.ComponentProps<"button">` | — | Advanced trigger attributes, spread last so matching values override top-level trigger defaults. |
|
|
30
|
+
|
|
31
|
+
## Migration
|
|
32
|
+
|
|
33
|
+
Select now renders only its expand chevron when optional trigger-icon props are omitted. Add `hasLeadingIcon` or `hasTrailingIcon` to retain the previous default user or information icon. A supplied icon enables its slot, while explicit `false` always removes it.
|
|
34
|
+
|
|
35
|
+
## Sizing rule
|
|
36
|
+
|
|
37
|
+
Select is `320px` wide by default (`--bh-select-width`), the width of the library Select frame. In a form grid or form card, make each field fill its column: pass `className="w-full"`, or set `--bh-select-width: 100%` on the field. Keep the default for a field that stands on its own.
|
|
38
|
+
|
|
39
|
+
## Token Contract
|
|
40
|
+
|
|
41
|
+
Select consumes Banhaten field, trigger, menu, item, checkbox, status, avatar, payment, typography, spacing, border, radius, shadow, and focus tokens.
|
|
42
|
+
|
|
43
|
+
## RTL
|
|
44
|
+
|
|
45
|
+
Values, labels, helper text, and menu item text use `text-start` and `dir="auto"`. Trigger icons and selected checks use logical placement so they mirror in RTL.
|
|
46
|
+
|
|
47
|
+
## Accessibility
|
|
48
|
+
|
|
49
|
+
Radix provides listbox semantics, focus management, typeahead, selection state, and keyboard behavior. Every Select needs a stable name that describes its purpose rather than its current value. Prefer a visible `label`; for a visually label-less control, pass `aria-label`, `aria-labelledby`, a text `label` with `hasLabel={false}`, or associate an external `<label>` through `triggerId`. Top-level ARIA naming props are forwarded to the trigger. `triggerProps` remains the advanced override path. Do not rely on `value` or `placeholder` as the control name. Use visible helper or error text for validation states.
|
|
50
|
+
|
|
51
|
+
## Install
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npx banhaten add select
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Examples
|
|
58
|
+
|
|
59
|
+
Primary registry example: `examples/select-demo.tsx`.
|
|
60
|
+
|
|
61
|
+
Open the live component page or run `npx banhaten docs select` to inspect source files, install command, and examples.
|
|
62
|
+
|
|
63
|
+
## RTL Rules
|
|
64
|
+
|
|
65
|
+
- `inheritsDirection`: true
|
|
66
|
+
- `textAlignment`: Uses text-start and dir="auto" for values, labels, helper text, and menu item text.
|
|
67
|
+
- `spacing`: Uses logical padding, start/end positioning, and inherited flex direction so trigger icons and selected checks mirror in RTL.
|
|
68
|
+
|
|
65
69
|
<!-- registry-contract:start -->
|
|
66
70
|
## Registry Contract
|
|
67
71
|
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
# Sheet
|
|
2
|
-
|
|
3
|
-
Sheet is a Radix Dialog-based side or edge panel for contextual workflows that need more room than a popover but less interruption than a full modal. It supports logical `start` and `end` sides for RTL, plus top and bottom placements.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Sheet>
|
|
9
|
-
<SheetTrigger asChild>
|
|
10
|
-
<Button>Open settings</Button>
|
|
11
|
-
</SheetTrigger>
|
|
12
|
-
<SheetContent side="end">
|
|
13
|
-
<SheetHeader>
|
|
14
|
-
<SheetTitle>Workspace settings</SheetTitle>
|
|
15
|
-
<SheetDescription>Update billing and access controls.</SheetDescription>
|
|
16
|
-
</SheetHeader>
|
|
17
|
-
<SheetBody>...</SheetBody>
|
|
18
|
-
<SheetFooter>...</SheetFooter>
|
|
19
|
-
</SheetContent>
|
|
20
|
-
</Sheet>
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
| Part | Purpose |
|
|
24
|
-
| --- | --- |
|
|
25
|
-
| `Sheet`, `SheetTrigger`, `SheetClose`, `SheetPortal` | Radix Dialog shell |
|
|
26
|
-
| `SheetOverlay`, `SheetContent` | overlay and trapped panel |
|
|
27
|
-
| `SheetHeader`, `SheetTitle`, `SheetDescription` | accessible heading area |
|
|
28
|
-
| `SheetBody`, `SheetFooter` | scrollable content and actions |
|
|
29
|
-
|
|
30
|
-
| Prop | Values |
|
|
31
|
-
| --- | --- |
|
|
32
|
-
| `side` | `start`, `end`, `top`, `bottom` |
|
|
33
|
-
| `size` | `sm`, `default`, `lg` |
|
|
34
|
-
| `showCloseButton` | `boolean` |
|
|
35
|
-
|
|
36
|
-
## Token Contract
|
|
37
|
-
|
|
38
|
-
Sheet uses Banhaten overlay, raised surface, border, radius, shadow, spacing, typography, focus, and content tokens.
|
|
39
|
-
|
|
40
|
-
## RTL
|
|
41
|
-
|
|
42
|
-
Use `side="start"` and `side="end"` instead of physical left/right placement. CSS logical edges place the panel on the right edge in LTR for `end`, and on the left edge in RTL.
|
|
43
|
-
|
|
44
|
-
## Accessibility
|
|
45
|
-
|
|
46
|
-
Radix Dialog provides focus trap, Escape dismissal, outside dismissal, title/description wiring, and modal dialog semantics. Use Alert Dialog for destructive confirmations.
|
|
47
|
-
|
|
48
|
-
## Install
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
npx banhaten add sheet
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Examples
|
|
55
|
-
|
|
56
|
-
Primary registry example: `examples/sheet-demo.tsx`.
|
|
57
|
-
|
|
58
|
-
Open the live component page or run `npx banhaten docs sheet` to inspect source files, install command, and examples.
|
|
59
|
-
|
|
60
|
-
## RTL Rules
|
|
61
|
-
|
|
62
|
-
- `inheritsDirection`: true
|
|
63
|
-
- `placement`: Use side="start" and side="end" for logical placement; CSS start/end edges mirror under RTL.
|
|
64
|
-
- `textDirection`: Title and description use dir="auto" for Arabic and English copy.
|
|
65
|
-
- `semantics`: Radix Dialog handles modal semantics, focus trapping, and dismissal.
|
|
66
|
-
|
|
1
|
+
# Sheet
|
|
2
|
+
|
|
3
|
+
Sheet is a Radix Dialog-based side or edge panel for contextual workflows that need more room than a popover but less interruption than a full modal. It supports logical `start` and `end` sides for RTL, plus top and bottom placements.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Sheet>
|
|
9
|
+
<SheetTrigger asChild>
|
|
10
|
+
<Button>Open settings</Button>
|
|
11
|
+
</SheetTrigger>
|
|
12
|
+
<SheetContent side="end">
|
|
13
|
+
<SheetHeader>
|
|
14
|
+
<SheetTitle>Workspace settings</SheetTitle>
|
|
15
|
+
<SheetDescription>Update billing and access controls.</SheetDescription>
|
|
16
|
+
</SheetHeader>
|
|
17
|
+
<SheetBody>...</SheetBody>
|
|
18
|
+
<SheetFooter>...</SheetFooter>
|
|
19
|
+
</SheetContent>
|
|
20
|
+
</Sheet>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| Part | Purpose |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| `Sheet`, `SheetTrigger`, `SheetClose`, `SheetPortal` | Radix Dialog shell |
|
|
26
|
+
| `SheetOverlay`, `SheetContent` | overlay and trapped panel |
|
|
27
|
+
| `SheetHeader`, `SheetTitle`, `SheetDescription` | accessible heading area |
|
|
28
|
+
| `SheetBody`, `SheetFooter` | scrollable content and actions |
|
|
29
|
+
|
|
30
|
+
| Prop | Values |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| `side` | `start`, `end`, `top`, `bottom` |
|
|
33
|
+
| `size` | `sm`, `default`, `lg` |
|
|
34
|
+
| `showCloseButton` | `boolean` |
|
|
35
|
+
|
|
36
|
+
## Token Contract
|
|
37
|
+
|
|
38
|
+
Sheet uses Banhaten overlay, raised surface, border, radius, shadow, spacing, typography, focus, and content tokens.
|
|
39
|
+
|
|
40
|
+
## RTL
|
|
41
|
+
|
|
42
|
+
Use `side="start"` and `side="end"` instead of physical left/right placement. CSS logical edges place the panel on the right edge in LTR for `end`, and on the left edge in RTL.
|
|
43
|
+
|
|
44
|
+
## Accessibility
|
|
45
|
+
|
|
46
|
+
Radix Dialog provides focus trap, Escape dismissal, outside dismissal, title/description wiring, and modal dialog semantics. Use Alert Dialog for destructive confirmations.
|
|
47
|
+
|
|
48
|
+
## Install
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx banhaten add sheet
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
Primary registry example: `examples/sheet-demo.tsx`.
|
|
57
|
+
|
|
58
|
+
Open the live component page or run `npx banhaten docs sheet` to inspect source files, install command, and examples.
|
|
59
|
+
|
|
60
|
+
## RTL Rules
|
|
61
|
+
|
|
62
|
+
- `inheritsDirection`: true
|
|
63
|
+
- `placement`: Use side="start" and side="end" for logical placement; CSS start/end edges mirror under RTL.
|
|
64
|
+
- `textDirection`: Title and description use dir="auto" for Arabic and English copy.
|
|
65
|
+
- `semantics`: Radix Dialog handles modal semantics, focus trapping, and dismissal.
|
|
66
|
+
|
|
67
67
|
<!-- registry-contract:start -->
|
|
68
68
|
## Registry Contract
|
|
69
69
|
|