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,83 +1,83 @@
|
|
|
1
|
-
# Button
|
|
2
|
-
|
|
3
|
-
Button is the primary action primitive for forms, workflows, navigation actions, and destructive confirmations. It supports semantic variants, text and icon sizes, loading composition, link composition through `asChild`, and RTL-safe icon behavior.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Button variant="default" size="default">
|
|
9
|
-
Save changes
|
|
10
|
-
</Button>
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
| Prop | Values | Default |
|
|
14
|
-
| --- | --- | --- |
|
|
15
|
-
| `variant` | `default`, `secondary`, `soft`, `outline`, `ghost`, `ghost-primary`, `danger`, `soft-danger`, `white`, `success`, `warning`, `link` | `default` |
|
|
16
|
-
| `size` | `xs`, `sm`, `default`, `lg`, `xl`, `icon-xs`, `icon-sm`, `icon`, `icon-lg`, `icon-xl` | `default` |
|
|
17
|
-
| `asChild` | `boolean` | `false` |
|
|
18
|
-
| `disabled` | `boolean` | `false` |
|
|
19
|
-
| `aria-busy` | `boolean` | none |
|
|
20
|
-
|
|
21
|
-
`destructive` and `soft-destructive` remain accepted as deprecated compatibility aliases. Replace them with `danger` and `soft-danger`, respectively; the aliases are not separate visual treatments and will remain available for the repository's documented deprecation window.
|
|
22
|
-
|
|
23
|
-
## Examples
|
|
24
|
-
|
|
25
|
-
```tsx
|
|
26
|
-
<Button>
|
|
27
|
-
<PlusIcon data-icon="inline-start" />
|
|
28
|
-
New item
|
|
29
|
-
</Button>
|
|
30
|
-
|
|
31
|
-
<Button variant="outline">
|
|
32
|
-
Continue
|
|
33
|
-
<ArrowRightIcon data-icon="inline-end" data-rtl-flip="true" />
|
|
34
|
-
</Button>
|
|
35
|
-
|
|
36
|
-
<Button disabled aria-busy="true">
|
|
37
|
-
<Spinner data-icon="inline-start" />
|
|
38
|
-
Loading
|
|
39
|
-
</Button>
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
```tsx
|
|
43
|
-
<div dir="rtl">
|
|
44
|
-
<Button>إرسال</Button>
|
|
45
|
-
<Button variant="outline">
|
|
46
|
-
متابعة
|
|
47
|
-
<ArrowRightIcon data-icon="inline-end" data-rtl-flip="true" />
|
|
48
|
-
</Button>
|
|
49
|
-
</div>
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Token Contract
|
|
53
|
-
|
|
54
|
-
Button consumes semantic interaction, content, border, radius, typography, spacing, opacity, and elevation tokens. Component source should not hard-code Figma color, spacing, radius, or elevation recipes.
|
|
55
|
-
|
|
56
|
-
- Typography: `--bh-text-button-font-size`, `--bh-text-button-line-height`, `--bh-text-button-font-weight`, `--bh-text-button-letter-spacing`
|
|
57
|
-
- Shape: `--bh-control-default`
|
|
58
|
-
- Heights and padding: `--bh-button-*-height`, `--bh-button-*-padding-x`, `--bh-button-*-padding-y`
|
|
59
|
-
- Icon rhythm: `--bh-button-icon-size` is an 18px glyph inside `--bh-button-icon-slot-size` at 20px; `--bh-button-icon-offset` and `--bh-button-label-padding-x` preserve optical alignment.
|
|
60
|
-
- Effects: `--elevation-button-raised`, `--elevation-button-secondary`, `--elevation-button-soft`, `--elevation-button-focus`, `--elevation-button-danger-focus`
|
|
61
|
-
|
|
62
|
-
## RTL Rules
|
|
63
|
-
|
|
64
|
-
- Button inherits `dir` from the nearest parent.
|
|
65
|
-
- Text labels render with `dir="auto"` so Arabic and English labels resolve naturally.
|
|
66
|
-
- Use `data-icon="inline-start"` and `data-icon="inline-end"` for optical icon offsets.
|
|
67
|
-
- Use `data-rtl-flip="true"` only for directional icons that should mirror, such as arrows and chevrons.
|
|
68
|
-
|
|
69
|
-
## Accessibility
|
|
70
|
-
|
|
71
|
-
- Use native `type`, `disabled`, and `aria-busy` attributes for behavior.
|
|
72
|
-
- Icon-only buttons must have an accessible name through `aria-label`.
|
|
73
|
-
- Use `asChild` for anchors or router links instead of nesting interactive elements.
|
|
74
|
-
|
|
75
|
-
## Install
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npx banhaten add button
|
|
79
|
-
```
|
|
80
|
-
|
|
1
|
+
# Button
|
|
2
|
+
|
|
3
|
+
Button is the primary action primitive for forms, workflows, navigation actions, and destructive confirmations. It supports semantic variants, text and icon sizes, loading composition, link composition through `asChild`, and RTL-safe icon behavior.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Button variant="default" size="default">
|
|
9
|
+
Save changes
|
|
10
|
+
</Button>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| Prop | Values | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `variant` | `default`, `secondary`, `soft`, `outline`, `ghost`, `ghost-primary`, `danger`, `soft-danger`, `white`, `success`, `warning`, `link` | `default` |
|
|
16
|
+
| `size` | `xs`, `sm`, `default`, `lg`, `xl`, `icon-xs`, `icon-sm`, `icon`, `icon-lg`, `icon-xl` | `default` |
|
|
17
|
+
| `asChild` | `boolean` | `false` |
|
|
18
|
+
| `disabled` | `boolean` | `false` |
|
|
19
|
+
| `aria-busy` | `boolean` | none |
|
|
20
|
+
|
|
21
|
+
`destructive` and `soft-destructive` remain accepted as deprecated compatibility aliases. Replace them with `danger` and `soft-danger`, respectively; the aliases are not separate visual treatments and will remain available for the repository's documented deprecation window.
|
|
22
|
+
|
|
23
|
+
## Examples
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
<Button>
|
|
27
|
+
<PlusIcon data-icon="inline-start" />
|
|
28
|
+
New item
|
|
29
|
+
</Button>
|
|
30
|
+
|
|
31
|
+
<Button variant="outline">
|
|
32
|
+
Continue
|
|
33
|
+
<ArrowRightIcon data-icon="inline-end" data-rtl-flip="true" />
|
|
34
|
+
</Button>
|
|
35
|
+
|
|
36
|
+
<Button disabled aria-busy="true">
|
|
37
|
+
<Spinner data-icon="inline-start" />
|
|
38
|
+
Loading
|
|
39
|
+
</Button>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
<div dir="rtl">
|
|
44
|
+
<Button>إرسال</Button>
|
|
45
|
+
<Button variant="outline">
|
|
46
|
+
متابعة
|
|
47
|
+
<ArrowRightIcon data-icon="inline-end" data-rtl-flip="true" />
|
|
48
|
+
</Button>
|
|
49
|
+
</div>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Token Contract
|
|
53
|
+
|
|
54
|
+
Button consumes semantic interaction, content, border, radius, typography, spacing, opacity, and elevation tokens. Component source should not hard-code Figma color, spacing, radius, or elevation recipes.
|
|
55
|
+
|
|
56
|
+
- Typography: `--bh-text-button-font-size`, `--bh-text-button-line-height`, `--bh-text-button-font-weight`, `--bh-text-button-letter-spacing`
|
|
57
|
+
- Shape: `--bh-control-default`
|
|
58
|
+
- Heights and padding: `--bh-button-*-height`, `--bh-button-*-padding-x`, `--bh-button-*-padding-y`
|
|
59
|
+
- Icon rhythm: `--bh-button-icon-size` is an 18px glyph inside `--bh-button-icon-slot-size` at 20px; `--bh-button-icon-offset` and `--bh-button-label-padding-x` preserve optical alignment.
|
|
60
|
+
- Effects: `--elevation-button-raised`, `--elevation-button-secondary`, `--elevation-button-soft`, `--elevation-button-focus`, `--elevation-button-danger-focus`
|
|
61
|
+
|
|
62
|
+
## RTL Rules
|
|
63
|
+
|
|
64
|
+
- Button inherits `dir` from the nearest parent.
|
|
65
|
+
- Text labels render with `dir="auto"` so Arabic and English labels resolve naturally.
|
|
66
|
+
- Use `data-icon="inline-start"` and `data-icon="inline-end"` for optical icon offsets.
|
|
67
|
+
- Use `data-rtl-flip="true"` only for directional icons that should mirror, such as arrows and chevrons.
|
|
68
|
+
|
|
69
|
+
## Accessibility
|
|
70
|
+
|
|
71
|
+
- Use native `type`, `disabled`, and `aria-busy` attributes for behavior.
|
|
72
|
+
- Icon-only buttons must have an accessible name through `aria-label`.
|
|
73
|
+
- Use `asChild` for anchors or router links instead of nesting interactive elements.
|
|
74
|
+
|
|
75
|
+
## Install
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npx banhaten add button
|
|
79
|
+
```
|
|
80
|
+
|
|
81
81
|
<!-- registry-contract:start -->
|
|
82
82
|
## Registry Contract
|
|
83
83
|
|
|
@@ -1,90 +1,101 @@
|
|
|
1
|
-
# Card
|
|
2
|
-
|
|
3
|
-
Card is a token-built surface primitive for product summaries, media tiles, and action panels. It supports vertical and horizontal layouts, leading and trailing image treatments, full-image cards, desktop/mobile spacing, footer actions, and RTL-safe text.
|
|
4
|
-
|
|
5
|
-
Use `CardSurface` when a product-specific composition needs the owned Banhaten card surface while supplying its own internal layout.
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<CardSurface>
|
|
9
|
-
<h3>Custom metric content</h3>
|
|
10
|
-
</CardSurface>
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Install
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npx banhaten add card
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Anatomy
|
|
20
|
-
|
|
21
|
-
- `Card`: root surface with title, subtitle, description, media, and optional footer composition.
|
|
22
|
-
- `CardMedia`: image/media slot with leading, trailing, or full-image treatment.
|
|
23
|
-
- `CardFooter`: supporting metadata or action area.
|
|
24
|
-
- `CardActions`: Button-composed primary and secondary actions.
|
|
25
|
-
|
|
26
|
-
## Example
|
|
27
|
-
|
|
28
|
-
```tsx
|
|
29
|
-
import { Card } from "@/components/ui/card"
|
|
30
|
-
|
|
31
|
-
export function Example() {
|
|
32
|
-
return (
|
|
33
|
-
<Card
|
|
34
|
-
title="Project activity"
|
|
35
|
-
subtitle="Updated 2 minutes ago"
|
|
36
|
-
description="A compact summary of the latest workspace changes."
|
|
37
|
-
orientation="horizontal"
|
|
38
|
-
type="leading-image"
|
|
39
|
-
/>
|
|
40
|
-
)
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Variants
|
|
45
|
-
|
|
46
|
-
| Prop | Values |
|
|
47
|
-
| --- | --- |
|
|
48
|
-
| `orientation` | `vertical`, `horizontal` |
|
|
49
|
-
| `type` | `leading-image`, `trailing-image`, `full-image` |
|
|
50
|
-
| `breakpoint` | `desktop`, `mobile` |
|
|
51
|
-
| `
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
1
|
+
# Card
|
|
2
|
+
|
|
3
|
+
Card is a token-built surface primitive for product summaries, media tiles, and action panels. It supports vertical and horizontal layouts, leading and trailing image treatments, full-image cards, desktop/mobile spacing, footer actions, and RTL-safe text.
|
|
4
|
+
|
|
5
|
+
Use `CardSurface` when a product-specific composition needs the owned Banhaten card surface while supplying its own internal layout.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<CardSurface>
|
|
9
|
+
<h3>Custom metric content</h3>
|
|
10
|
+
</CardSurface>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx banhaten add card
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Anatomy
|
|
20
|
+
|
|
21
|
+
- `Card`: root surface with title, subtitle, description, media, and optional footer composition.
|
|
22
|
+
- `CardMedia`: image/media slot with leading, trailing, or full-image treatment.
|
|
23
|
+
- `CardFooter`: supporting metadata or action area.
|
|
24
|
+
- `CardActions`: Button-composed primary and secondary actions.
|
|
25
|
+
|
|
26
|
+
## Example
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { Card } from "@/components/ui/card"
|
|
30
|
+
|
|
31
|
+
export function Example() {
|
|
32
|
+
return (
|
|
33
|
+
<Card
|
|
34
|
+
title="Project activity"
|
|
35
|
+
subtitle="Updated 2 minutes ago"
|
|
36
|
+
description="A compact summary of the latest workspace changes."
|
|
37
|
+
orientation="horizontal"
|
|
38
|
+
type="leading-image"
|
|
39
|
+
/>
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Variants
|
|
45
|
+
|
|
46
|
+
| Prop | Values |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| `orientation` | `vertical`, `horizontal` |
|
|
49
|
+
| `type` | `leading-image`, `trailing-image`, `full-image` |
|
|
50
|
+
| `breakpoint` | `desktop`, `mobile` |
|
|
51
|
+
| `size` | `default`, `comfortable` |
|
|
52
|
+
| `dir` | inherited, `ltr`, `rtl` |
|
|
53
|
+
|
|
54
|
+
## Comfortable size
|
|
55
|
+
|
|
56
|
+
`size="comfortable"` is the panel inside an app shell. It keeps the card surface, background and 1px inset edge, and uses a `12px` radius (`--bh-card-comfortable-radius`) where the library cards use `16px`. `Card` and `CardSurface` both take it, and both render `data-size`.
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
<CardSurface size="comfortable" className="p-[var(--bh-space-5xl-24)]">
|
|
60
|
+
<h2>Position details</h2>
|
|
61
|
+
</CardSurface>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## RTL
|
|
65
|
+
|
|
66
|
+
Card uses logical spacing, inherited direction, and `dir="auto"` copy wrappers so title, subtitle, description, footer actions, and menu affordances mirror naturally.
|
|
67
|
+
|
|
68
|
+
## API
|
|
69
|
+
|
|
70
|
+
Supported runtime exports: `Card`, `CardActions`, `CardFooter`, `CardMedia`, `CardSurface`, `cardVariants`.
|
|
71
|
+
|
|
72
|
+
| Contract | Values |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| `types` | `leading-image`, `trailing-image`, `full-image` |
|
|
75
|
+
| `orientations` | `vertical`, `horizontal` |
|
|
76
|
+
|
|
77
|
+
## Examples
|
|
78
|
+
|
|
79
|
+
Primary registry example: `examples/card-demo.tsx`.
|
|
80
|
+
|
|
81
|
+
Open the live component page or run `npx banhaten docs card` to inspect source files, install command, and examples.
|
|
82
|
+
|
|
83
|
+
## Token Contract
|
|
84
|
+
|
|
85
|
+
Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
|
|
86
|
+
Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
|
|
87
|
+
Covered source files: `components/card.tsx`, `assets/images/art-01.jpg`.
|
|
88
|
+
|
|
89
|
+
## RTL Rules
|
|
90
|
+
|
|
91
|
+
- `inheritsDirection`: true
|
|
92
|
+
- `spacing`: Uses logical direction, text-start behavior, and dir="auto" copy so title, subtitle, description, footer actions, and menu affordance mirror naturally.
|
|
93
|
+
- `actions`: The default footer composes the existing Button primitive and keeps action order logical in LTR and RTL.
|
|
94
|
+
|
|
95
|
+
## Accessibility
|
|
96
|
+
|
|
97
|
+
Keep native semantics, accessible names, keyboard reachability, focus-visible treatment, and status/error announcements intact when composing this component.
|
|
98
|
+
|
|
88
99
|
<!-- registry-contract:start -->
|
|
89
100
|
## Registry Contract
|
|
90
101
|
|
|
@@ -96,8 +107,11 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
96
107
|
| `supportedExports` | `components/card.tsx: Card, CardActions, CardFooter, CardMedia, CardSurface, cardVariants` |
|
|
97
108
|
| `parts` | `Card`, `CardSurface`, `CardMedia`, `CardFooter`, `CardActions` |
|
|
98
109
|
| `registryDependencies` | `button` |
|
|
110
|
+
| `props.Card.size` | `"default" \| "comfortable"; default "default"; comfortable is the panel inside an app shell: the same surface and 1px inset edge with a 12px radius instead of the library card's 16px.` |
|
|
111
|
+
| `props.CardSurface.size` | `"default" \| "comfortable"; default "default"; The same sizes as Card, for compositions that bring their own layout.` |
|
|
99
112
|
| `breakpoints` | `desktop`, `mobile` |
|
|
100
113
|
| `orientations` | `vertical`, `horizontal` |
|
|
101
|
-
| `
|
|
114
|
+
| `sizes` | `default`, `comfortable` |
|
|
115
|
+
| `tokens` | `--bh-bg-accent-green-subtle`, `--bh-bg-accent-sky-subtle`, `--bh-bg-neutral-subtle`, `--bh-bg-raised`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-card-actions-max-width`, `--bh-card-bg`, `--bh-card-border`, `--bh-card-comfortable-radius`, `--bh-card-content-padding`, `--bh-card-desktop-content-padding`, `--bh-card-desktop-full-height`, `--bh-card-desktop-horizontal-padding`, `--bh-card-desktop-media-height`, `--bh-card-full-height`, `--bh-card-horizontal-media-width`, `--bh-card-horizontal-min-height`, `--bh-card-horizontal-padding`, `--bh-card-horizontal-width`, `--bh-card-media-height`, `--bh-card-media-overlay`, `--bh-card-mobile-content-padding`, `--bh-card-mobile-full-height`, `--bh-card-mobile-horizontal-padding`, `--bh-card-mobile-media-height`, `--bh-card-more-icon-size`, `--bh-card-more-size`, `--bh-card-radius`, `--bh-card-vertical-width`, `--bh-content-default`, `--bh-content-on-color`, `--bh-content-subtle`, `--bh-control-default`, `--bh-interactive-ghost-hover`, `--bh-radius-3xl-16`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-6xl-32`, `--bh-space-md-8`, `--bh-space-xl-12`, `--bh-space-xxs-2`, `--bh-text-body-lg-regular-font-size`, `--bh-text-body-lg-regular-font-weight`, `--bh-text-body-lg-regular-letter-spacing`, `--bh-text-body-lg-regular-line-height`, `--bh-text-body-md-regular-font-size`, `--bh-text-body-md-regular-font-weight`, `--bh-text-body-md-regular-letter-spacing`, `--bh-text-body-md-regular-line-height`, `--bh-text-heading-sm-semibold-font-size`, `--bh-text-heading-sm-semibold-font-weight`, `--bh-text-heading-sm-semibold-letter-spacing`, `--bh-text-heading-sm-semibold-line-height`, `--elevation-button-focus` |
|
|
102
116
|
| `types` | `leading-image`, `trailing-image`, `full-image` |
|
|
103
117
|
<!-- registry-contract:end -->
|
|
@@ -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
|
|