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,107 +1,107 @@
|
|
|
1
|
-
# Modal
|
|
2
|
-
|
|
3
|
-
`Modal` presents a focused dialog surface for decisions and blocking workflows. `ConfirmModal` adds the constrained alert-dialog/confirm pattern for consequential actions.
|
|
4
|
-
|
|
5
|
-
Figma reference: `Design system 3.0 Copy / Modal`, node `227:5480`.
|
|
6
|
-
|
|
7
|
-
## Variants
|
|
8
|
-
|
|
9
|
-
The implementation covers the six-node Modal matrix from Figma:
|
|
10
|
-
|
|
11
|
-
| Prop | Values |
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| `size` | `sm`, `default`, `lg` |
|
|
14
|
-
| `dir` | `ltr`, `rtl` |
|
|
15
|
-
|
|
16
|
-
## API
|
|
17
|
-
|
|
18
|
-
```tsx
|
|
19
|
-
<Modal size="default" />
|
|
20
|
-
<Modal dir="rtl" messages={arabicModalMessages} size="lg" />
|
|
21
|
-
<ConfirmModal intent="danger" confirmLabel="Delete project" />
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
| Prop | Default |
|
|
25
|
-
| --- | --- |
|
|
26
|
-
| `size` | `sm` |
|
|
27
|
-
| `dir` | inherited |
|
|
28
|
-
| `title` | English default; overrides `messages.title` |
|
|
29
|
-
| `description` | English default; overrides `messages.description` |
|
|
30
|
-
| `messages` | partial localized Modal message catalog |
|
|
31
|
-
| `closeLabel` | overrides `messages.closeLabel` |
|
|
32
|
-
| `showIcon` | `true` |
|
|
33
|
-
| `showCloseButton` | `true` |
|
|
34
|
-
| `showDivider` | `true` |
|
|
35
|
-
| `showFooter` | `true` |
|
|
36
|
-
| `showCheckbox` | `true` |
|
|
37
|
-
| `footer` | none |
|
|
38
|
-
|
|
39
|
-
`ConfirmModal` also accepts:
|
|
40
|
-
|
|
41
|
-
| Prop | Default |
|
|
42
|
-
| --- | --- |
|
|
43
|
-
| `intent` | `danger` |
|
|
44
|
-
| `messages` | partial localized ConfirmModal message catalog |
|
|
45
|
-
| `confirmLabel` / `cancelLabel` | English; direct props override `messages` |
|
|
46
|
-
| `confirmLoading` | `false` |
|
|
47
|
-
| `confirmDisabled` | `false` |
|
|
48
|
-
| `preventOutsideDismiss` | `true` |
|
|
49
|
-
| `closeOnConfirm` / `closeOnCancel` | `true` |
|
|
50
|
-
| `onConfirm` / `onCancel` | none |
|
|
51
|
-
|
|
52
|
-
## Pixel Rules
|
|
53
|
-
|
|
54
|
-
- Small, Default, and Large modal widths are `440px`, `560px`, and `700px`.
|
|
55
|
-
- The shell uses `--bh-radius-2xl-12`.
|
|
56
|
-
- Header padding is `20px 20px 8px`, with logical end padding reserved for the close button.
|
|
57
|
-
- Body padding is `10px 20px 20px`.
|
|
58
|
-
- Footer padding is `16px 20px`, with a `10px` gap.
|
|
59
|
-
- Actions reuse `Button` with `size="sm"`, `variant="soft"` for the secondary action, and the default variant for the primary action.
|
|
60
|
-
- Confirm actions reuse `Button` with `variant="danger"`, `variant="warning"`, or `variant="default"` from the selected intent.
|
|
61
|
-
- The opt-out control reuses `Checkbox`.
|
|
62
|
-
- Loading confirm actions reuse the Banhaten `Spinner` component.
|
|
63
|
-
|
|
64
|
-
## Token Contract
|
|
65
|
-
|
|
66
|
-
The component consumes existing Banhaten variables:
|
|
67
|
-
|
|
68
|
-
- Surface: `--bh-bg-raised`, `--bh-bg-backdrop`, `--bh-bg-danger-subtle`, `--bh-bg-warning-subtle`
|
|
69
|
-
- Border: `--bh-border-subtle`
|
|
70
|
-
- Content: `--bh-content-default`, `--bh-content-subtle`, `--bh-content-danger-default`, `--bh-content-warning-default`
|
|
71
|
-
- Shape: `--bh-radius-2xl-12`, `--bh-radius-full`
|
|
72
|
-
- Space: `--bh-space-xs-4`, `--bh-space-sm-6`, `--bh-space-md-8`, `--bh-space-lg-10`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-6xl-32`, `--bh-space-8xl-48`, `--bh-space-9xl-64`
|
|
73
|
-
- Type: `--bh-text-heading-sm-semibold-*`, `--bh-text-body-md-regular-*`
|
|
74
|
-
- Elevation: `--elevation-component-default`, `--elevation-button-focus`, `--elevation-button-danger-focus`
|
|
75
|
-
|
|
76
|
-
## Accessibility
|
|
77
|
-
|
|
78
|
-
- `ModalContent` is backed by Radix Dialog for focus trap, Escape, outside-click dismissal, and ARIA dialog semantics.
|
|
79
|
-
- `ModalTitle` and `ModalDescription` map to Radix dialog title and description primitives.
|
|
80
|
-
- The close affordance is a real button through `ModalCloseButton`.
|
|
81
|
-
- `ConfirmModal` sets `role="alertdialog"`, focuses the cancel action first when present, disables outside-pointer dismissal by default, and can optionally prevent Escape dismissal.
|
|
82
|
-
- `ModalSurface` is presentational and intended for static documentation or visual comparison, not live modal behavior.
|
|
83
|
-
- Direction never selects modal copy. Choose `messages` from the product locale; direct title, description, action, and close-label props have highest precedence.
|
|
84
|
-
|
|
85
|
-
## Install
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
npx banhaten add modal
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Examples
|
|
92
|
-
|
|
93
|
-
Primary registry example: `examples/modal-demo.tsx`.
|
|
94
|
-
|
|
95
|
-
Open the live component page or run `npx banhaten docs modal` to inspect source files, install command, and examples.
|
|
96
|
-
|
|
97
|
-
## RTL Rules
|
|
98
|
-
|
|
99
|
-
- `inheritsDirection`: true
|
|
100
|
-
- `closePlacement`: Close uses logical inline-end placement so it moves to the left side in RTL.
|
|
101
|
-
- `footerOrder`: The checkbox and action cluster use inherited direction and logical gaps so their order mirrors naturally.
|
|
102
|
-
- `messages`: Direction does not select language. Modal and ConfirmModal accept explicit message catalogs plus direct label overrides.
|
|
103
|
-
- `textDirection`: Title, description, checkbox label, confirm labels, and actions use dir="auto" for Arabic and English copy.
|
|
104
|
-
|
|
1
|
+
# Modal
|
|
2
|
+
|
|
3
|
+
`Modal` presents a focused dialog surface for decisions and blocking workflows. `ConfirmModal` adds the constrained alert-dialog/confirm pattern for consequential actions.
|
|
4
|
+
|
|
5
|
+
Figma reference: `Design system 3.0 Copy / Modal`, node `227:5480`.
|
|
6
|
+
|
|
7
|
+
## Variants
|
|
8
|
+
|
|
9
|
+
The implementation covers the six-node Modal matrix from Figma:
|
|
10
|
+
|
|
11
|
+
| Prop | Values |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| `size` | `sm`, `default`, `lg` |
|
|
14
|
+
| `dir` | `ltr`, `rtl` |
|
|
15
|
+
|
|
16
|
+
## API
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
<Modal size="default" />
|
|
20
|
+
<Modal dir="rtl" messages={arabicModalMessages} size="lg" />
|
|
21
|
+
<ConfirmModal intent="danger" confirmLabel="Delete project" />
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
| Prop | Default |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| `size` | `sm` |
|
|
27
|
+
| `dir` | inherited |
|
|
28
|
+
| `title` | English default; overrides `messages.title` |
|
|
29
|
+
| `description` | English default; overrides `messages.description` |
|
|
30
|
+
| `messages` | partial localized Modal message catalog |
|
|
31
|
+
| `closeLabel` | overrides `messages.closeLabel` |
|
|
32
|
+
| `showIcon` | `true` |
|
|
33
|
+
| `showCloseButton` | `true` |
|
|
34
|
+
| `showDivider` | `true` |
|
|
35
|
+
| `showFooter` | `true` |
|
|
36
|
+
| `showCheckbox` | `true` |
|
|
37
|
+
| `footer` | none |
|
|
38
|
+
|
|
39
|
+
`ConfirmModal` also accepts:
|
|
40
|
+
|
|
41
|
+
| Prop | Default |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| `intent` | `danger` |
|
|
44
|
+
| `messages` | partial localized ConfirmModal message catalog |
|
|
45
|
+
| `confirmLabel` / `cancelLabel` | English; direct props override `messages` |
|
|
46
|
+
| `confirmLoading` | `false` |
|
|
47
|
+
| `confirmDisabled` | `false` |
|
|
48
|
+
| `preventOutsideDismiss` | `true` |
|
|
49
|
+
| `closeOnConfirm` / `closeOnCancel` | `true` |
|
|
50
|
+
| `onConfirm` / `onCancel` | none |
|
|
51
|
+
|
|
52
|
+
## Pixel Rules
|
|
53
|
+
|
|
54
|
+
- Small, Default, and Large modal widths are `440px`, `560px`, and `700px`.
|
|
55
|
+
- The shell uses `--bh-radius-2xl-12`.
|
|
56
|
+
- Header padding is `20px 20px 8px`, with logical end padding reserved for the close button.
|
|
57
|
+
- Body padding is `10px 20px 20px`.
|
|
58
|
+
- Footer padding is `16px 20px`, with a `10px` gap.
|
|
59
|
+
- Actions reuse `Button` with `size="sm"`, `variant="soft"` for the secondary action, and the default variant for the primary action.
|
|
60
|
+
- Confirm actions reuse `Button` with `variant="danger"`, `variant="warning"`, or `variant="default"` from the selected intent.
|
|
61
|
+
- The opt-out control reuses `Checkbox`.
|
|
62
|
+
- Loading confirm actions reuse the Banhaten `Spinner` component.
|
|
63
|
+
|
|
64
|
+
## Token Contract
|
|
65
|
+
|
|
66
|
+
The component consumes existing Banhaten variables:
|
|
67
|
+
|
|
68
|
+
- Surface: `--bh-bg-raised`, `--bh-bg-backdrop`, `--bh-bg-danger-subtle`, `--bh-bg-warning-subtle`
|
|
69
|
+
- Border: `--bh-border-subtle`
|
|
70
|
+
- Content: `--bh-content-default`, `--bh-content-subtle`, `--bh-content-danger-default`, `--bh-content-warning-default`
|
|
71
|
+
- Shape: `--bh-radius-2xl-12`, `--bh-radius-full`
|
|
72
|
+
- Space: `--bh-space-xs-4`, `--bh-space-sm-6`, `--bh-space-md-8`, `--bh-space-lg-10`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-6xl-32`, `--bh-space-8xl-48`, `--bh-space-9xl-64`
|
|
73
|
+
- Type: `--bh-text-heading-sm-semibold-*`, `--bh-text-body-md-regular-*`
|
|
74
|
+
- Elevation: `--elevation-component-default`, `--elevation-button-focus`, `--elevation-button-danger-focus`
|
|
75
|
+
|
|
76
|
+
## Accessibility
|
|
77
|
+
|
|
78
|
+
- `ModalContent` is backed by Radix Dialog for focus trap, Escape, outside-click dismissal, and ARIA dialog semantics.
|
|
79
|
+
- `ModalTitle` and `ModalDescription` map to Radix dialog title and description primitives.
|
|
80
|
+
- The close affordance is a real button through `ModalCloseButton`.
|
|
81
|
+
- `ConfirmModal` sets `role="alertdialog"`, focuses the cancel action first when present, disables outside-pointer dismissal by default, and can optionally prevent Escape dismissal.
|
|
82
|
+
- `ModalSurface` is presentational and intended for static documentation or visual comparison, not live modal behavior.
|
|
83
|
+
- Direction never selects modal copy. Choose `messages` from the product locale; direct title, description, action, and close-label props have highest precedence.
|
|
84
|
+
|
|
85
|
+
## Install
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx banhaten add modal
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Examples
|
|
92
|
+
|
|
93
|
+
Primary registry example: `examples/modal-demo.tsx`.
|
|
94
|
+
|
|
95
|
+
Open the live component page or run `npx banhaten docs modal` to inspect source files, install command, and examples.
|
|
96
|
+
|
|
97
|
+
## RTL Rules
|
|
98
|
+
|
|
99
|
+
- `inheritsDirection`: true
|
|
100
|
+
- `closePlacement`: Close uses logical inline-end placement so it moves to the left side in RTL.
|
|
101
|
+
- `footerOrder`: The checkbox and action cluster use inherited direction and logical gaps so their order mirrors naturally.
|
|
102
|
+
- `messages`: Direction does not select language. Modal and ConfirmModal accept explicit message catalogs plus direct label overrides.
|
|
103
|
+
- `textDirection`: Title, description, checkbox label, confirm labels, and actions use dir="auto" for Arabic and English copy.
|
|
104
|
+
|
|
105
105
|
<!-- registry-contract:start -->
|
|
106
106
|
## Registry Contract
|
|
107
107
|
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
# Native Select
|
|
2
|
-
|
|
3
|
-
Native Select is a tokenized native `<select>` field for platform forms, mobile fallback, and lightweight option sets.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<NativeSelect
|
|
9
|
-
label="Workspace"
|
|
10
|
-
options={[
|
|
11
|
-
{ label: "Design", value: "design" },
|
|
12
|
-
{ label: "Engineering", value: "engineering" },
|
|
13
|
-
]}
|
|
14
|
-
/>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
| Prop | Values |
|
|
18
|
-
| --- | --- |
|
|
19
|
-
| `size` | `md`, `lg` |
|
|
20
|
-
| `variant` | `default`, `soft` |
|
|
21
|
-
| `state` | `default`, `filled`, `error`, `disabled` |
|
|
22
|
-
| `options` | array of `{ label, value, disabled }` |
|
|
23
|
-
|
|
24
|
-
## Token Contract
|
|
25
|
-
|
|
26
|
-
Native Select reuses Banhaten select width, label, helper, trigger, border, focus, icon, and validation tokens.
|
|
27
|
-
|
|
28
|
-
## RTL
|
|
29
|
-
|
|
30
|
-
Native Select accepts `dir` and uses logical padding plus an inline-end chevron.
|
|
31
|
-
|
|
32
|
-
## Accessibility
|
|
33
|
-
|
|
34
|
-
Prefer `label` or an external `<Label htmlFor>` and use helper or error copy for validation context.
|
|
35
|
-
|
|
36
|
-
## Install
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npx banhaten add native-select
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Examples
|
|
43
|
-
|
|
44
|
-
Primary registry example: `examples/native-select-demo.tsx`.
|
|
45
|
-
|
|
46
|
-
Open the live component page or run `npx banhaten docs native-select` to inspect source files, install command, and examples.
|
|
47
|
-
|
|
48
|
-
## RTL Rules
|
|
49
|
-
|
|
50
|
-
- `inheritsDirection`: true
|
|
51
|
-
- `spacing`: Uses logical padding and inline-end chevron placement.
|
|
52
|
-
- `textDirection`: Label and helper copy use dir="auto" through Label and helper text.
|
|
53
|
-
|
|
1
|
+
# Native Select
|
|
2
|
+
|
|
3
|
+
Native Select is a tokenized native `<select>` field for platform forms, mobile fallback, and lightweight option sets.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<NativeSelect
|
|
9
|
+
label="Workspace"
|
|
10
|
+
options={[
|
|
11
|
+
{ label: "Design", value: "design" },
|
|
12
|
+
{ label: "Engineering", value: "engineering" },
|
|
13
|
+
]}
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Prop | Values |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| `size` | `md`, `lg` |
|
|
20
|
+
| `variant` | `default`, `soft` |
|
|
21
|
+
| `state` | `default`, `filled`, `error`, `disabled` |
|
|
22
|
+
| `options` | array of `{ label, value, disabled }` |
|
|
23
|
+
|
|
24
|
+
## Token Contract
|
|
25
|
+
|
|
26
|
+
Native Select reuses Banhaten select width, label, helper, trigger, border, focus, icon, and validation tokens.
|
|
27
|
+
|
|
28
|
+
## RTL
|
|
29
|
+
|
|
30
|
+
Native Select accepts `dir` and uses logical padding plus an inline-end chevron.
|
|
31
|
+
|
|
32
|
+
## Accessibility
|
|
33
|
+
|
|
34
|
+
Prefer `label` or an external `<Label htmlFor>` and use helper or error copy for validation context.
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx banhaten add native-select
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
|
|
44
|
+
Primary registry example: `examples/native-select-demo.tsx`.
|
|
45
|
+
|
|
46
|
+
Open the live component page or run `npx banhaten docs native-select` to inspect source files, install command, and examples.
|
|
47
|
+
|
|
48
|
+
## RTL Rules
|
|
49
|
+
|
|
50
|
+
- `inheritsDirection`: true
|
|
51
|
+
- `spacing`: Uses logical padding and inline-end chevron placement.
|
|
52
|
+
- `textDirection`: Label and helper copy use dir="auto" through Label and helper text.
|
|
53
|
+
|
|
54
54
|
<!-- registry-contract:start -->
|
|
55
55
|
## Registry Contract
|
|
56
56
|
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
# Navigation Menu
|
|
2
|
-
|
|
3
|
-
Navigation Menu wraps Radix NavigationMenu for top navigation with trigger, content, link, viewport, and indicator parts.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<NavigationMenu>
|
|
9
|
-
<NavigationMenuList>
|
|
10
|
-
<NavigationMenuItem>
|
|
11
|
-
<NavigationMenuTrigger>Product</NavigationMenuTrigger>
|
|
12
|
-
<NavigationMenuContent>
|
|
13
|
-
<NavigationMenuLink href="#">Components</NavigationMenuLink>
|
|
14
|
-
</NavigationMenuContent>
|
|
15
|
-
</NavigationMenuItem>
|
|
16
|
-
</NavigationMenuList>
|
|
17
|
-
<NavigationMenuViewport />
|
|
18
|
-
</NavigationMenu>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Token Contract
|
|
22
|
-
|
|
23
|
-
Navigation Menu uses Banhaten ghost hover, soft active state, raised content, popover shadow, radius, and body typography tokens.
|
|
24
|
-
|
|
25
|
-
## RTL
|
|
26
|
-
|
|
27
|
-
The list and content inherit direction. Links use logical text alignment.
|
|
28
|
-
|
|
29
|
-
## Accessibility
|
|
30
|
-
|
|
31
|
-
Radix handles trigger relationships, viewport sizing, keyboard navigation, and focus.
|
|
32
|
-
|
|
33
|
-
## Install
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
npx banhaten add navigation-menu
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Examples
|
|
40
|
-
|
|
41
|
-
Primary registry example: `examples/navigation-menu-demo.tsx`.
|
|
42
|
-
|
|
43
|
-
Open the live component page or run `npx banhaten docs navigation-menu` to inspect source files, install command, and examples.
|
|
44
|
-
|
|
45
|
-
## RTL Rules
|
|
46
|
-
|
|
47
|
-
- `inheritsDirection`: true
|
|
48
|
-
- `spacing`: Triggers, links, and content use logical layout and inherited direction.
|
|
49
|
-
|
|
1
|
+
# Navigation Menu
|
|
2
|
+
|
|
3
|
+
Navigation Menu wraps Radix NavigationMenu for top navigation with trigger, content, link, viewport, and indicator parts.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<NavigationMenu>
|
|
9
|
+
<NavigationMenuList>
|
|
10
|
+
<NavigationMenuItem>
|
|
11
|
+
<NavigationMenuTrigger>Product</NavigationMenuTrigger>
|
|
12
|
+
<NavigationMenuContent>
|
|
13
|
+
<NavigationMenuLink href="#">Components</NavigationMenuLink>
|
|
14
|
+
</NavigationMenuContent>
|
|
15
|
+
</NavigationMenuItem>
|
|
16
|
+
</NavigationMenuList>
|
|
17
|
+
<NavigationMenuViewport />
|
|
18
|
+
</NavigationMenu>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Token Contract
|
|
22
|
+
|
|
23
|
+
Navigation Menu uses Banhaten ghost hover, soft active state, raised content, popover shadow, radius, and body typography tokens.
|
|
24
|
+
|
|
25
|
+
## RTL
|
|
26
|
+
|
|
27
|
+
The list and content inherit direction. Links use logical text alignment.
|
|
28
|
+
|
|
29
|
+
## Accessibility
|
|
30
|
+
|
|
31
|
+
Radix handles trigger relationships, viewport sizing, keyboard navigation, and focus.
|
|
32
|
+
|
|
33
|
+
## Install
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx banhaten add navigation-menu
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Examples
|
|
40
|
+
|
|
41
|
+
Primary registry example: `examples/navigation-menu-demo.tsx`.
|
|
42
|
+
|
|
43
|
+
Open the live component page or run `npx banhaten docs navigation-menu` to inspect source files, install command, and examples.
|
|
44
|
+
|
|
45
|
+
## RTL Rules
|
|
46
|
+
|
|
47
|
+
- `inheritsDirection`: true
|
|
48
|
+
- `spacing`: Triggers, links, and content use logical layout and inherited direction.
|
|
49
|
+
|
|
50
50
|
<!-- registry-contract:start -->
|
|
51
51
|
## Registry Contract
|
|
52
52
|
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
# Onboarding Step List Item
|
|
2
|
-
|
|
3
|
-
`OnboardingStepListItem` renders one vertical progress-list row for onboarding, setup, or guided task flows. It should be composed into a list by the parent flow, which controls line visibility for first and last items.
|
|
4
|
-
|
|
5
|
-
Figma reference: `OnboardingStepListItem`, node `587:27227`.
|
|
6
|
-
|
|
7
|
-
## Variants
|
|
8
|
-
|
|
9
|
-
The Figma component defines these variants:
|
|
10
|
-
|
|
11
|
-
| State | Direction |
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| `Finished` | LTR and RTL |
|
|
14
|
-
| `Active` | LTR and RTL |
|
|
15
|
-
| `inactive` | LTR and RTL |
|
|
16
|
-
|
|
17
|
-
Code uses lowercase semantic state values: `finished`, `active`, and `inactive`.
|
|
18
|
-
|
|
19
|
-
## API
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<OnboardingStepListItem
|
|
23
|
-
state="finished"
|
|
24
|
-
label="Label"
|
|
25
|
-
dir="ltr"
|
|
26
|
-
showLeadingLine
|
|
27
|
-
showTrailingLine
|
|
28
|
-
/>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
| Prop | Values | Default |
|
|
32
|
-
| --- | --- | --- |
|
|
33
|
-
| `state` | `finished`, `active`, `inactive` | `finished` |
|
|
34
|
-
| `label` | `string` | `Label` |
|
|
35
|
-
| `dir` | `ltr`, `rtl` | `ltr` |
|
|
36
|
-
| `showLeadingLine` | `boolean` | `true` |
|
|
37
|
-
| `showTrailingLine` | `boolean` | `true` |
|
|
38
|
-
|
|
39
|
-
## Token Contract
|
|
40
|
-
|
|
41
|
-
The component consumes Banhaten semantic tokens and component aliases. Do not hard-code Figma fallback literals in component source; promote any Figma value into its owned `tokens/source/` fragment as a `--bh-*` token or alias first.
|
|
42
|
-
|
|
43
|
-
- Backgrounds: `--bh-bg-raised`
|
|
44
|
-
- Borders: `--bh-border-brand-strong`, `--bh-border-default`
|
|
45
|
-
- Content: `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-subtle`, `--bh-content-success-default`
|
|
46
|
-
- Shape: `--bh-control-default`
|
|
47
|
-
- Space: `--bh-space-lg-10`, `--bh-space-xl-12`
|
|
48
|
-
|
|
49
|
-
## Pixel Rules
|
|
50
|
-
|
|
51
|
-
- The row is `280px` wide and `40px` tall.
|
|
52
|
-
- Padding is `8px 12px` with a `10px` gap between the line wrap and label.
|
|
53
|
-
- Text uses Inter Medium `15px / 24px` with zero letter spacing.
|
|
54
|
-
- The line wrap is `24px` square.
|
|
55
|
-
- Finished uses an `18px` success check-circle glyph in a `20px` slot with `2px` default connector lines.
|
|
56
|
-
- Active uses a `2px x 20px` brand line, a default border, white raised fill, `8px` radius, and component shadow.
|
|
57
|
-
- Inactive uses a `2px x 40px` default connector line and subtle content color.
|
|
58
|
-
- RTL mirrors visual order through `dir="rtl"` and right-aligns the label.
|
|
59
|
-
|
|
60
|
-
## Accessibility
|
|
61
|
-
|
|
62
|
-
- Connector lines and the finished icon are decorative in this primitive and are hidden from assistive technology.
|
|
63
|
-
- Parent onboarding lists should expose the overall progress semantics, current step, and completion status.
|
|
64
|
-
- Keep labels as real text and avoid using this row as the only status announcement.
|
|
65
|
-
|
|
66
|
-
## Install
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
npx banhaten add onboarding-step
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Examples
|
|
73
|
-
|
|
74
|
-
Primary registry example: `examples/expanded/onboarding-step-demo.tsx`.
|
|
75
|
-
|
|
76
|
-
Open the live component page or run `npx banhaten docs onboarding-step` to inspect source files, install command, and examples.
|
|
77
|
-
|
|
78
|
-
## RTL Rules
|
|
79
|
-
|
|
80
|
-
This component has no special RTL contract beyond inherited document direction and logical spacing.
|
|
81
|
-
|
|
1
|
+
# Onboarding Step List Item
|
|
2
|
+
|
|
3
|
+
`OnboardingStepListItem` renders one vertical progress-list row for onboarding, setup, or guided task flows. It should be composed into a list by the parent flow, which controls line visibility for first and last items.
|
|
4
|
+
|
|
5
|
+
Figma reference: `OnboardingStepListItem`, node `587:27227`.
|
|
6
|
+
|
|
7
|
+
## Variants
|
|
8
|
+
|
|
9
|
+
The Figma component defines these variants:
|
|
10
|
+
|
|
11
|
+
| State | Direction |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| `Finished` | LTR and RTL |
|
|
14
|
+
| `Active` | LTR and RTL |
|
|
15
|
+
| `inactive` | LTR and RTL |
|
|
16
|
+
|
|
17
|
+
Code uses lowercase semantic state values: `finished`, `active`, and `inactive`.
|
|
18
|
+
|
|
19
|
+
## API
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
<OnboardingStepListItem
|
|
23
|
+
state="finished"
|
|
24
|
+
label="Label"
|
|
25
|
+
dir="ltr"
|
|
26
|
+
showLeadingLine
|
|
27
|
+
showTrailingLine
|
|
28
|
+
/>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
| Prop | Values | Default |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| `state` | `finished`, `active`, `inactive` | `finished` |
|
|
34
|
+
| `label` | `string` | `Label` |
|
|
35
|
+
| `dir` | `ltr`, `rtl` | `ltr` |
|
|
36
|
+
| `showLeadingLine` | `boolean` | `true` |
|
|
37
|
+
| `showTrailingLine` | `boolean` | `true` |
|
|
38
|
+
|
|
39
|
+
## Token Contract
|
|
40
|
+
|
|
41
|
+
The component consumes Banhaten semantic tokens and component aliases. Do not hard-code Figma fallback literals in component source; promote any Figma value into its owned `tokens/source/` fragment as a `--bh-*` token or alias first.
|
|
42
|
+
|
|
43
|
+
- Backgrounds: `--bh-bg-raised`
|
|
44
|
+
- Borders: `--bh-border-brand-strong`, `--bh-border-default`
|
|
45
|
+
- Content: `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-subtle`, `--bh-content-success-default`
|
|
46
|
+
- Shape: `--bh-control-default`
|
|
47
|
+
- Space: `--bh-space-lg-10`, `--bh-space-xl-12`
|
|
48
|
+
|
|
49
|
+
## Pixel Rules
|
|
50
|
+
|
|
51
|
+
- The row is `280px` wide and `40px` tall.
|
|
52
|
+
- Padding is `8px 12px` with a `10px` gap between the line wrap and label.
|
|
53
|
+
- Text uses Inter Medium `15px / 24px` with zero letter spacing.
|
|
54
|
+
- The line wrap is `24px` square.
|
|
55
|
+
- Finished uses an `18px` success check-circle glyph in a `20px` slot with `2px` default connector lines.
|
|
56
|
+
- Active uses a `2px x 20px` brand line, a default border, white raised fill, `8px` radius, and component shadow.
|
|
57
|
+
- Inactive uses a `2px x 40px` default connector line and subtle content color.
|
|
58
|
+
- RTL mirrors visual order through `dir="rtl"` and right-aligns the label.
|
|
59
|
+
|
|
60
|
+
## Accessibility
|
|
61
|
+
|
|
62
|
+
- Connector lines and the finished icon are decorative in this primitive and are hidden from assistive technology.
|
|
63
|
+
- Parent onboarding lists should expose the overall progress semantics, current step, and completion status.
|
|
64
|
+
- Keep labels as real text and avoid using this row as the only status announcement.
|
|
65
|
+
|
|
66
|
+
## Install
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
npx banhaten add onboarding-step
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Examples
|
|
73
|
+
|
|
74
|
+
Primary registry example: `examples/expanded/onboarding-step-demo.tsx`.
|
|
75
|
+
|
|
76
|
+
Open the live component page or run `npx banhaten docs onboarding-step` to inspect source files, install command, and examples.
|
|
77
|
+
|
|
78
|
+
## RTL Rules
|
|
79
|
+
|
|
80
|
+
This component has no special RTL contract beyond inherited document direction and logical spacing.
|
|
81
|
+
|
|
82
82
|
<!-- registry-contract:start -->
|
|
83
83
|
## Registry Contract
|
|
84
84
|
|