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,94 +1,122 @@
|
|
|
1
|
-
# Page Header
|
|
2
|
-
|
|
3
|
-
Page headers introduce a page or section with optional hierarchy, title metadata, actions, description, and local tabs.
|
|
4
|
-
|
|
5
|
-
Figma reference: `Page Header`, node `1154:2816` in `Design system 3.0 Copy`.
|
|
6
|
-
|
|
7
|
-
## API
|
|
8
|
-
|
|
9
|
-
```tsx
|
|
10
|
-
<PageHeader
|
|
11
|
-
title="Section Tile"
|
|
12
|
-
metaInfo="Meta info"
|
|
13
|
-
description="Section description"
|
|
14
|
-
breadcrumbs={[{ label: "Home" }, { label: "Home" }]}
|
|
15
|
-
actions={[{ label: "Button" }, { label: "Button" }]}
|
|
16
|
-
tabs={{ items: ["Tab item", "Tab item", "Tab item"] }}
|
|
17
|
-
/>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
| Prop | Type | Default |
|
|
21
|
-
| --- | --- | --- |
|
|
22
|
-
| `title` | `
|
|
23
|
-
| `metaInfo` | `string` | `Meta info` |
|
|
24
|
-
| `description` | `
|
|
25
|
-
| `icon` | `ReactNode` or `false` | home icon |
|
|
26
|
-
| `breadcrumbs` | `PageHeaderBreadcrumb[]` or `false` | four `Home` items |
|
|
27
|
-
| `actions` | `PageHeaderAction[]
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
30
|
-
| `
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
-
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
1
|
+
# Page Header
|
|
2
|
+
|
|
3
|
+
Page headers introduce a page or section with optional hierarchy, title metadata, actions, description, and local tabs.
|
|
4
|
+
|
|
5
|
+
Figma reference: `Page Header`, node `1154:2816` in `Design system 3.0 Copy`.
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<PageHeader
|
|
11
|
+
title="Section Tile"
|
|
12
|
+
metaInfo="Meta info"
|
|
13
|
+
description="Section description"
|
|
14
|
+
breadcrumbs={[{ label: "Home" }, { label: "Home" }]}
|
|
15
|
+
actions={[{ label: "Button" }, { label: "Button" }]}
|
|
16
|
+
tabs={{ items: ["Tab item", "Tab item", "Tab item"] }}
|
|
17
|
+
/>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
| Prop | Type | Default |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| `title` | `ReactNode` (inline content) | `Section Tile` |
|
|
23
|
+
| `metaInfo` | `string` | `Meta info` |
|
|
24
|
+
| `description` | `ReactNode` (inline content) | `Section description` |
|
|
25
|
+
| `icon` | `ReactNode` or `false` | home icon; none in `comfortable` unless passed |
|
|
26
|
+
| `breadcrumbs` | `PageHeaderBreadcrumb[]` or `false` | four `Home` items |
|
|
27
|
+
| `actions` | `PageHeaderAction[]`, your own nodes, or `false` | four `Button` actions |
|
|
28
|
+
| `children` | `ReactNode` | none; supporting content under the description, such as a status badge |
|
|
29
|
+
| `size` | `default` or `comfortable` | `default` |
|
|
30
|
+
| `tabs` | `PageHeaderTabs` or `false` | underline `Tabs`; none in `comfortable` unless passed |
|
|
31
|
+
| `tabs.fullWidth` | `boolean` | `true`; set `false` for content-width triggers |
|
|
32
|
+
| `dir` | `ltr` or `rtl` | `ltr` |
|
|
33
|
+
|
|
34
|
+
### Comfortable size
|
|
35
|
+
|
|
36
|
+
`size="comfortable"` is the page heading inside an app shell whose header already carries the breadcrumbs. This is the `Page heading` frame in the ATS360 product files.
|
|
37
|
+
|
|
38
|
+
- **Spacing:** no block padding; the title and description sit `8px` apart, and actions sit `24px` from the copy and `12px` from each other.
|
|
39
|
+
- **Action data** render as `40px` (`density="comfortable"`) secondary Buttons.
|
|
40
|
+
- **Action widths:** Buttons in the actions keep a minimum width of `160px`, or `176px` for primary Buttons. Longer labels grow past it, and icon-only Buttons keep their own size.
|
|
41
|
+
- **Icon and tabs** appear only when you pass them.
|
|
42
|
+
|
|
43
|
+
When a page needs a primary action, pass your own nodes instead of action data. The page's Buttons keep their own variants:
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
<PageHeader
|
|
47
|
+
size="comfortable"
|
|
48
|
+
title="Requisitions"
|
|
49
|
+
description="Track headcount requests, budget checks, and approval ownership."
|
|
50
|
+
actions={<>
|
|
51
|
+
<Button variant="outline">Budgets</Button>
|
|
52
|
+
<Button>Create request</Button>
|
|
53
|
+
</>}
|
|
54
|
+
/>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`description` takes inline content, for example a record ID followed by its status text. `children` render under it in a wrapping row, for badges or other supporting content.
|
|
58
|
+
|
|
59
|
+
## Structure
|
|
60
|
+
|
|
61
|
+
The implementation follows the Figma hierarchy:
|
|
62
|
+
|
|
63
|
+
- Breadcrumb navigation above the section body.
|
|
64
|
+
- Title row with optional icon, title, and meta text.
|
|
65
|
+
- Action group aligned to the end of the title row.
|
|
66
|
+
- Optional body description below the title row.
|
|
67
|
+
- Underline `Tabs` spanning the full header width. Triggers take equal shares by default and can opt into content width with `tabs.fullWidth: false`.
|
|
68
|
+
|
|
69
|
+
The title and description each resolve their own content direction. This keeps punctuation attached to the content when its script opposes the surrounding page direction, without changing the mirrored header layout.
|
|
70
|
+
|
|
71
|
+
`PageHeader` reuses the existing `Button` and `Tabs` components instead of duplicating their behavior or visual contracts. Action descriptors render as `secondary`, default-density Buttons; PageHeader owns only their grouping and placement.
|
|
72
|
+
|
|
73
|
+
Breadcrumb items retain Breadcrumbs' icon-slot contract: populated slots use the canonical icon geometry, while empty slots collapse instead of reserving space inside the header.
|
|
74
|
+
|
|
75
|
+
## Token Contract
|
|
76
|
+
|
|
77
|
+
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.
|
|
78
|
+
|
|
79
|
+
- Content: `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-heading`, `--bh-content-muted`, `--bh-content-subtle`
|
|
80
|
+
- Actions inherit Button's secondary surface, border, typography, focus, and disabled tokens instead of redeclaring them in PageHeader.
|
|
81
|
+
- Breadcrumb icon visibility and geometry remain owned by Breadcrumbs.
|
|
82
|
+
|
|
83
|
+
## Pixel Rules
|
|
84
|
+
|
|
85
|
+
- Header root is vertically padded by `20px`; `comfortable` has no padding.
|
|
86
|
+
- Breadcrumb and body text use `15px / 24px`.
|
|
87
|
+
- Title uses `24px / 28px` at weight `600`.
|
|
88
|
+
- Meta text uses `12px / 16px`.
|
|
89
|
+
- Title row and action group are separated by `40px`; `24px` in `comfortable`.
|
|
90
|
+
- Title and description are `4px` apart; `8px` in `comfortable`. Actions are `8px` apart; `12px` in `comfortable`.
|
|
91
|
+
- Populated breadcrumb icon slots remain `20px`; empty slots collapse to `0px`.
|
|
92
|
+
- Actions use Button's `secondary`, `density="default"` contract (`36px` high, resolving to `sm`); PageHeader owns only action-group placement and gap.
|
|
93
|
+
- Tabs use the existing `underline`, `md`, `fullWidth` treatment by default. Full-width triggers keep equal shares while labels fit; both full and content-width modes preserve intrinsic label width and scroll horizontally when the row is narrower than its labels.
|
|
94
|
+
|
|
95
|
+
## Accessibility
|
|
96
|
+
|
|
97
|
+
- Breadcrumbs render as `<nav aria-label="Breadcrumb">` with an ordered list.
|
|
98
|
+
- Mark the current breadcrumb with `current: true` so it receives `aria-current="page"`.
|
|
99
|
+
- Separators are decorative and hidden from assistive technology.
|
|
100
|
+
- Action items render as real buttons or anchors.
|
|
101
|
+
- Action focus and disabled states come from Button; breadcrumb focus remains visible for keyboard users.
|
|
102
|
+
- Tab labels remain complete and non-overlapping; constrained rows scroll locally instead of truncating or painting one label over another.
|
|
103
|
+
|
|
104
|
+
## Install
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npx banhaten add page-header
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Examples
|
|
111
|
+
|
|
112
|
+
Primary registry example: `examples/expanded/page-header-demo.tsx`.
|
|
113
|
+
|
|
114
|
+
Open the live component page or run `npx banhaten docs page-header` to inspect source files, install command, and examples.
|
|
115
|
+
|
|
116
|
+
## RTL Rules
|
|
117
|
+
|
|
118
|
+
The header layout inherits document direction and uses logical spacing. The title and description independently use `dir="auto"`, so Latin copy in an RTL header (and Arabic copy in an LTR header) keeps neutral punctuation at its content end while breadcrumbs, actions, metadata, and tabs retain the header direction. Horizontal tab overflow follows that inherited direction without changing or truncating label copy.
|
|
119
|
+
|
|
92
120
|
<!-- registry-contract:start -->
|
|
93
121
|
## Registry Contract
|
|
94
122
|
|
|
@@ -100,8 +128,14 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
100
128
|
| `supportedExports` | `components/expanded/PageHeader.tsx: PageHeader` |
|
|
101
129
|
| `parts` | `PageHeader` |
|
|
102
130
|
| `registryDependencies` | `breadcrumbs`, `button`, `tabs` |
|
|
103
|
-
| `
|
|
131
|
+
| `props.PageHeader.size` | `"default" \| "comfortable"; default "default"; comfortable is the page heading inside an app shell whose header carries the breadcrumbs: no block padding, 8px between title and description, 24px between copy and actions, 12px between actions, 40px action Buttons with a 160px minimum width (176px for primary), and no icon or tabs unless passed.` |
|
|
132
|
+
| `props.PageHeader.actions` | `PageHeaderAction[] \| ReactNode \| false; default "[]"; Action data renders secondary Buttons at the header density; pass your own nodes for primary actions or other controls.` |
|
|
133
|
+
| `props.PageHeader.description` | `ReactNode; default null; Inline description content under the title, in body-md and content/subtle.` |
|
|
134
|
+
| `props.PageHeader.children` | `ReactNode; default null; Supporting content under the description, such as status badges, in a wrapping row with 8px gaps.` |
|
|
135
|
+
| `props.PageHeader.title` | `ReactNode; default null; Heading content in heading-md semibold (24/28); inline content such as a record name and its type is allowed.` |
|
|
136
|
+
| `features` | `Breadcrumb-owned icon-slot visibility`, `Button-owned default-density secondary action styling`, `content-safe horizontal tab overflow`, `full-width tab opt-out`, `comfortable size for app-shell page headings`, `custom action nodes and rich descriptions` |
|
|
104
137
|
| `modes` | `breadcrumbs`, `metadata`, `description`, `actions`, `tabs` |
|
|
138
|
+
| `sizes` | `default`, `comfortable` |
|
|
105
139
|
| `states` | `default`, `without-icon`, `without-actions`, `without-tabs` |
|
|
106
|
-
| `tokens` | `--bh-button-label-padding-x`, `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-focus-ring-width`, `--bh-font-family`, `--bh-icon-stroke-190`, `--bh-space-2xl-14`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-7xl-40`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-text-body-2xs-regular-font-size`, `--bh-text-body-2xs-regular-font-weight`, `--bh-text-body-2xs-regular-line-height`, `--bh-text-body-md-medium-font-size`, `--bh-text-body-md-medium-font-weight`, `--bh-text-body-md-medium-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-md-semibold-font-size`, `--bh-text-heading-md-semibold-font-weight`, `--bh-text-heading-md-semibold-line-height` |
|
|
140
|
+
| `tokens` | `--bh-button-label-padding-x`, `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-muted`, `--bh-content-subtle`, `--bh-focus-ring-width`, `--bh-font-family`, `--bh-icon-stroke-190`, `--bh-page-header-comfortable-action-min-width`, `--bh-page-header-comfortable-primary-action-min-width`, `--bh-space-2xl-14`, `--bh-space-3xl-16`, `--bh-space-4xl-20`, `--bh-space-5xl-24`, `--bh-space-7xl-40`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-text-body-2xs-regular-font-size`, `--bh-text-body-2xs-regular-font-weight`, `--bh-text-body-2xs-regular-line-height`, `--bh-text-body-md-medium-font-size`, `--bh-text-body-md-medium-font-weight`, `--bh-text-body-md-medium-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-md-semibold-font-size`, `--bh-text-heading-md-semibold-font-weight`, `--bh-text-heading-md-semibold-line-height` |
|
|
107
141
|
<!-- registry-contract:end -->
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
# Pagination
|
|
2
|
-
|
|
3
|
-
Pagination navigates paged result sets, tables, and long lists. It supports numeric, simple, and summary layouts, soft and ghost styles, exact control geometry, captions, RTL layout, and explicit localized messages.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Pagination page={3} pages={[1, 2, 3, "ellipsis", 12]} type="numeric" />
|
|
9
|
-
<Pagination
|
|
10
|
-
dir="rtl"
|
|
11
|
-
messages={{ previous: "הקודם", next: "הבא" }}
|
|
12
|
-
page={2}
|
|
13
|
-
type="summary"
|
|
14
|
-
/>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
| Prop | Values | Default |
|
|
18
|
-
| --- | --- | --- |
|
|
19
|
-
| `type` | `numeric`, `simple`, `summary` | `numeric` |
|
|
20
|
-
| `variant` | `soft`, `ghost` | `soft` |
|
|
21
|
-
| `page` | number | `2` |
|
|
22
|
-
| `pages` | page numbers, page descriptors, `ellipsis` | built-in demo sequence |
|
|
23
|
-
| `messages` | partial localized message catalog | English defaults |
|
|
24
|
-
| `caption`, `summary`, previous/next label and ARIA props | direct overrides | matching message value |
|
|
25
|
-
|
|
26
|
-
## Token Contract
|
|
27
|
-
|
|
28
|
-
Pagination uses Banhaten control height, radius, border, background, content, focus, icon, caption, and elevation tokens. Previous/next glyphs are 18px inside 20px slots.
|
|
29
|
-
|
|
30
|
-
## RTL
|
|
31
|
-
|
|
32
|
-
Passing `dir="rtl"` mirrors previous/next directional icons with `data-rtl-flip="true"` and leaves the selected message catalog unchanged. Use `arabicPaginationMessages` or product-owned messages when the locale is Arabic.
|
|
33
|
-
|
|
34
|
-
## Accessibility
|
|
35
|
-
|
|
36
|
-
Wrap pagination in a navigation landmark with a descriptive label. Current page controls should expose current state, and previous/next buttons should have readable labels.
|
|
37
|
-
|
|
38
|
-
## Install
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
npx banhaten add pagination
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Examples
|
|
45
|
-
|
|
46
|
-
Primary registry example: `examples/pagination-demo.tsx`.
|
|
47
|
-
|
|
48
|
-
Open the live component page or run `npx banhaten docs pagination` to inspect source files, install command, and examples.
|
|
49
|
-
|
|
50
|
-
## RTL Rules
|
|
51
|
-
|
|
52
|
-
- `inheritsDirection`: true
|
|
53
|
-
- `messages`: Direction does not select language. English defaults are stable; pass messages for Arabic, Hebrew, Persian, Urdu, or another locale.
|
|
54
|
-
- `directionalIconFlip`: Inline Figma arrow vectors use data-rtl-flip="true" so previous and next controls mirror in RTL.
|
|
55
|
-
- `spacing`: Uses logical flex direction, gap, and text direction so English and Arabic captions align naturally.
|
|
56
|
-
|
|
1
|
+
# Pagination
|
|
2
|
+
|
|
3
|
+
Pagination navigates paged result sets, tables, and long lists. It supports numeric, simple, and summary layouts, soft and ghost styles, exact control geometry, captions, RTL layout, and explicit localized messages.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Pagination page={3} pages={[1, 2, 3, "ellipsis", 12]} type="numeric" />
|
|
9
|
+
<Pagination
|
|
10
|
+
dir="rtl"
|
|
11
|
+
messages={{ previous: "הקודם", next: "הבא" }}
|
|
12
|
+
page={2}
|
|
13
|
+
type="summary"
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Prop | Values | Default |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `type` | `numeric`, `simple`, `summary` | `numeric` |
|
|
20
|
+
| `variant` | `soft`, `ghost` | `soft` |
|
|
21
|
+
| `page` | number | `2` |
|
|
22
|
+
| `pages` | page numbers, page descriptors, `ellipsis` | built-in demo sequence |
|
|
23
|
+
| `messages` | partial localized message catalog | English defaults |
|
|
24
|
+
| `caption`, `summary`, previous/next label and ARIA props | direct overrides | matching message value |
|
|
25
|
+
|
|
26
|
+
## Token Contract
|
|
27
|
+
|
|
28
|
+
Pagination uses Banhaten control height, radius, border, background, content, focus, icon, caption, and elevation tokens. Previous/next glyphs are 18px inside 20px slots.
|
|
29
|
+
|
|
30
|
+
## RTL
|
|
31
|
+
|
|
32
|
+
Passing `dir="rtl"` mirrors previous/next directional icons with `data-rtl-flip="true"` and leaves the selected message catalog unchanged. Use `arabicPaginationMessages` or product-owned messages when the locale is Arabic.
|
|
33
|
+
|
|
34
|
+
## Accessibility
|
|
35
|
+
|
|
36
|
+
Wrap pagination in a navigation landmark with a descriptive label. Current page controls should expose current state, and previous/next buttons should have readable labels.
|
|
37
|
+
|
|
38
|
+
## Install
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npx banhaten add pagination
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
Primary registry example: `examples/pagination-demo.tsx`.
|
|
47
|
+
|
|
48
|
+
Open the live component page or run `npx banhaten docs pagination` to inspect source files, install command, and examples.
|
|
49
|
+
|
|
50
|
+
## RTL Rules
|
|
51
|
+
|
|
52
|
+
- `inheritsDirection`: true
|
|
53
|
+
- `messages`: Direction does not select language. English defaults are stable; pass messages for Arabic, Hebrew, Persian, Urdu, or another locale.
|
|
54
|
+
- `directionalIconFlip`: Inline Figma arrow vectors use data-rtl-flip="true" so previous and next controls mirror in RTL.
|
|
55
|
+
- `spacing`: Uses logical flex direction, gap, and text direction so English and Arabic captions align naturally.
|
|
56
|
+
|
|
57
57
|
<!-- registry-contract:start -->
|
|
58
58
|
## Registry Contract
|
|
59
59
|
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
# Popover
|
|
2
|
-
|
|
3
|
-
Popover presents contextual controls, filters, actions, settings, and short help content near a trigger. It supports controlled and uncontrolled state, click, focus, and hover-capable triggers, positioned content, optional arrow, alignment, offsets, sizes, close affordance, and RTL-safe composition.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Popover>
|
|
9
|
-
<PopoverTrigger>Filters</PopoverTrigger>
|
|
10
|
-
<PopoverContent side="bottom" align="start">
|
|
11
|
-
<PopoverHeader>
|
|
12
|
-
<PopoverTitle>Filters</PopoverTitle>
|
|
13
|
-
<PopoverClose />
|
|
14
|
-
</PopoverHeader>
|
|
15
|
-
<PopoverBody>Filter controls go here.</PopoverBody>
|
|
16
|
-
</PopoverContent>
|
|
17
|
-
</Popover>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
| Prop | Values |
|
|
21
|
-
| --- | --- |
|
|
22
|
-
| `open`, `defaultOpen`, `onOpenChange` | controlled or uncontrolled state |
|
|
23
|
-
| `side` | `top`, `right`, `bottom`, `left` |
|
|
24
|
-
| `align` | `start`, `center`, `end` |
|
|
25
|
-
| `size` | `sm`, `md`, `lg`, `auto` |
|
|
26
|
-
| `offset` | `tight`, `default`, `loose` |
|
|
27
|
-
| `showArrow` | `boolean` |
|
|
28
|
-
|
|
29
|
-
## Token Contract
|
|
30
|
-
|
|
31
|
-
Popover uses Banhaten popover width, padding, arrow, offset, surface, border, radius, shadow, trigger, typography, and z-index tokens.
|
|
32
|
-
|
|
33
|
-
## RTL
|
|
34
|
-
|
|
35
|
-
Top and bottom alignment use logical start/end behavior. Title and description slots use `dir="auto"` and product content can inherit the nearest direction.
|
|
36
|
-
|
|
37
|
-
## Accessibility
|
|
38
|
-
|
|
39
|
-
Use popovers for non-modal contextual content. Use Dialog or Sheet for workflows that require focus trapping or stronger dismissal semantics.
|
|
40
|
-
|
|
41
|
-
## Install
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
npx banhaten add popover
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Examples
|
|
48
|
-
|
|
49
|
-
Primary registry example: `examples/popover-demo.tsx`.
|
|
50
|
-
|
|
51
|
-
Open the live component page or run `npx banhaten docs popover` to inspect source files, install command, and examples.
|
|
52
|
-
|
|
53
|
-
## RTL Rules
|
|
54
|
-
|
|
55
|
-
- `inheritsDirection`: true
|
|
56
|
-
- `alignment`: Top and bottom alignments use logical start/end so the panel edge and arrow align correctly in LTR and RTL.
|
|
57
|
-
- `spacing`: Uses logical layout and Banhaten spacing tokens for headers, bodies, footers, arrows, and trigger gaps.
|
|
58
|
-
- `textDirection`: Title and description slots use dir="auto" while product content can inherit the nearest direction.
|
|
59
|
-
|
|
1
|
+
# Popover
|
|
2
|
+
|
|
3
|
+
Popover presents contextual controls, filters, actions, settings, and short help content near a trigger. It supports controlled and uncontrolled state, click, focus, and hover-capable triggers, positioned content, optional arrow, alignment, offsets, sizes, close affordance, and RTL-safe composition.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Popover>
|
|
9
|
+
<PopoverTrigger>Filters</PopoverTrigger>
|
|
10
|
+
<PopoverContent side="bottom" align="start">
|
|
11
|
+
<PopoverHeader>
|
|
12
|
+
<PopoverTitle>Filters</PopoverTitle>
|
|
13
|
+
<PopoverClose />
|
|
14
|
+
</PopoverHeader>
|
|
15
|
+
<PopoverBody>Filter controls go here.</PopoverBody>
|
|
16
|
+
</PopoverContent>
|
|
17
|
+
</Popover>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
| Prop | Values |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| `open`, `defaultOpen`, `onOpenChange` | controlled or uncontrolled state |
|
|
23
|
+
| `side` | `top`, `right`, `bottom`, `left` |
|
|
24
|
+
| `align` | `start`, `center`, `end` |
|
|
25
|
+
| `size` | `sm`, `md`, `lg`, `auto` |
|
|
26
|
+
| `offset` | `tight`, `default`, `loose` |
|
|
27
|
+
| `showArrow` | `boolean` |
|
|
28
|
+
|
|
29
|
+
## Token Contract
|
|
30
|
+
|
|
31
|
+
Popover uses Banhaten popover width, padding, arrow, offset, surface, border, radius, shadow, trigger, typography, and z-index tokens.
|
|
32
|
+
|
|
33
|
+
## RTL
|
|
34
|
+
|
|
35
|
+
Top and bottom alignment use logical start/end behavior. Title and description slots use `dir="auto"` and product content can inherit the nearest direction.
|
|
36
|
+
|
|
37
|
+
## Accessibility
|
|
38
|
+
|
|
39
|
+
Use popovers for non-modal contextual content. Use Dialog or Sheet for workflows that require focus trapping or stronger dismissal semantics.
|
|
40
|
+
|
|
41
|
+
## Install
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx banhaten add popover
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Examples
|
|
48
|
+
|
|
49
|
+
Primary registry example: `examples/popover-demo.tsx`.
|
|
50
|
+
|
|
51
|
+
Open the live component page or run `npx banhaten docs popover` to inspect source files, install command, and examples.
|
|
52
|
+
|
|
53
|
+
## RTL Rules
|
|
54
|
+
|
|
55
|
+
- `inheritsDirection`: true
|
|
56
|
+
- `alignment`: Top and bottom alignments use logical start/end so the panel edge and arrow align correctly in LTR and RTL.
|
|
57
|
+
- `spacing`: Uses logical layout and Banhaten spacing tokens for headers, bodies, footers, arrows, and trigger gaps.
|
|
58
|
+
- `textDirection`: Title and description slots use dir="auto" while product content can inherit the nearest direction.
|
|
59
|
+
|
|
60
60
|
<!-- registry-contract:start -->
|
|
61
61
|
## Registry Contract
|
|
62
62
|
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
# Progress Slider
|
|
2
|
-
|
|
3
|
-
Progress Slider is an adjustable, start-anchored progress control. It is built on Radix Slider and keeps the filled surface growing from the logical start edge while the grip handle remains at the active value edge.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<ProgressSlider value={[45]} aria-label="Upload progress" />
|
|
9
|
-
<ProgressSlider defaultValue={[70]} tone="success" showTicks />
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
| Prop | Values |
|
|
13
|
-
| --- | --- |
|
|
14
|
-
| `value`, `defaultValue` | Radix slider value array |
|
|
15
|
-
| `size` | `default`, `lg` |
|
|
16
|
-
| `tone` | `brand`, `neutral`, `success`, `warning`, `danger` |
|
|
17
|
-
| `disabled` | `boolean` |
|
|
18
|
-
| `showTicks` | `boolean` |
|
|
19
|
-
|
|
20
|
-
## Token Contract
|
|
21
|
-
|
|
22
|
-
Progress Slider uses Banhaten slider, progress, semantic tone, track, handle, pill radius, focus, and disabled tokens. Keep tone styling semantic so alert and status palettes can theme consistently.
|
|
23
|
-
|
|
24
|
-
## RTL
|
|
25
|
-
|
|
26
|
-
Radix receives the inherited `dir` attribute for keyboard and value direction. The fill stays anchored to the logical start edge in both LTR and RTL.
|
|
27
|
-
|
|
28
|
-
## Accessibility
|
|
29
|
-
|
|
30
|
-
Provide an accessible name through `aria-label` or `aria-labelledby`. Use `aria-valuetext` when the numeric value needs domain-specific phrasing.
|
|
31
|
-
|
|
32
|
-
## Install
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npx banhaten add progress-slider
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Examples
|
|
39
|
-
|
|
40
|
-
Primary registry example: `examples/progress-slider-demo.tsx`.
|
|
41
|
-
|
|
42
|
-
Open the live component page or run `npx banhaten docs progress-slider` to inspect source files, install command, and examples.
|
|
43
|
-
|
|
44
|
-
## RTL Rules
|
|
45
|
-
|
|
46
|
-
- `inheritsDirection`: true
|
|
47
|
-
- `valueDirection`: Radix Slider handles direction and keyboard behavior through the inherited dir attribute; the fill stays anchored to the logical start edge.
|
|
48
|
-
- `spacing`: Uses tokenized pill geometry and logical direction through Radix.
|
|
49
|
-
|
|
1
|
+
# Progress Slider
|
|
2
|
+
|
|
3
|
+
Progress Slider is an adjustable, start-anchored progress control. It is built on Radix Slider and keeps the filled surface growing from the logical start edge while the grip handle remains at the active value edge.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<ProgressSlider value={[45]} aria-label="Upload progress" />
|
|
9
|
+
<ProgressSlider defaultValue={[70]} tone="success" showTicks />
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
| Prop | Values |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `value`, `defaultValue` | Radix slider value array |
|
|
15
|
+
| `size` | `default`, `lg` |
|
|
16
|
+
| `tone` | `brand`, `neutral`, `success`, `warning`, `danger` |
|
|
17
|
+
| `disabled` | `boolean` |
|
|
18
|
+
| `showTicks` | `boolean` |
|
|
19
|
+
|
|
20
|
+
## Token Contract
|
|
21
|
+
|
|
22
|
+
Progress Slider uses Banhaten slider, progress, semantic tone, track, handle, pill radius, focus, and disabled tokens. Keep tone styling semantic so alert and status palettes can theme consistently.
|
|
23
|
+
|
|
24
|
+
## RTL
|
|
25
|
+
|
|
26
|
+
Radix receives the inherited `dir` attribute for keyboard and value direction. The fill stays anchored to the logical start edge in both LTR and RTL.
|
|
27
|
+
|
|
28
|
+
## Accessibility
|
|
29
|
+
|
|
30
|
+
Provide an accessible name through `aria-label` or `aria-labelledby`. Use `aria-valuetext` when the numeric value needs domain-specific phrasing.
|
|
31
|
+
|
|
32
|
+
## Install
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx banhaten add progress-slider
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Examples
|
|
39
|
+
|
|
40
|
+
Primary registry example: `examples/progress-slider-demo.tsx`.
|
|
41
|
+
|
|
42
|
+
Open the live component page or run `npx banhaten docs progress-slider` to inspect source files, install command, and examples.
|
|
43
|
+
|
|
44
|
+
## RTL Rules
|
|
45
|
+
|
|
46
|
+
- `inheritsDirection`: true
|
|
47
|
+
- `valueDirection`: Radix Slider handles direction and keyboard behavior through the inherited dir attribute; the fill stays anchored to the logical start edge.
|
|
48
|
+
- `spacing`: Uses tokenized pill geometry and logical direction through Radix.
|
|
49
|
+
|
|
50
50
|
<!-- registry-contract:start -->
|
|
51
51
|
## Registry Contract
|
|
52
52
|
|