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,60 +1,75 @@
|
|
|
1
|
-
# Tabs
|
|
2
|
-
|
|
3
|
-
Tabs is a Radix-backed local navigation primitive with underline, segmented, and rounded treatments across size, full-width behavior, controlled state, LTR, and RTL.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Tabs
|
|
9
|
-
ariaLabel="Project sections"
|
|
10
|
-
items={["Overview", "Activity", "Settings"]}
|
|
11
|
-
variant="underline"
|
|
12
|
-
/>
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
| Prop | Values |
|
|
16
|
-
| --- | --- |
|
|
17
|
-
| `variant` | `underline`, `segment`, `rounded` |
|
|
18
|
-
| `size` | `md`, `sm`, `xs` |
|
|
19
|
-
| `fullWidth` | `boolean`; default `false`. Equal shares while labels fit; content-safe scrolling under pressure. |
|
|
20
|
-
| `activeIndex`, `defaultActiveIndex` | controlled or uncontrolled index |
|
|
21
|
-
| `onActiveIndexChange` | selected-index callback |
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
1
|
+
# Tabs
|
|
2
|
+
|
|
3
|
+
Tabs is a Radix-backed local navigation primitive with underline, segmented, and rounded treatments across size, full-width behavior, controlled state, LTR, and RTL.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Tabs
|
|
9
|
+
ariaLabel="Project sections"
|
|
10
|
+
items={["Overview", "Activity", "Settings"]}
|
|
11
|
+
variant="underline"
|
|
12
|
+
/>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
| Prop | Values |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| `variant` | `underline`, `segment`, `rounded` |
|
|
18
|
+
| `size` | `md`, `sm`, `xs`, `comfortable` |
|
|
19
|
+
| `fullWidth` | `boolean`; default `false`. Equal shares while labels fit; content-safe scrolling under pressure. |
|
|
20
|
+
| `activeIndex`, `defaultActiveIndex` | controlled or uncontrolled index |
|
|
21
|
+
| `onActiveIndexChange` | selected-index callback |
|
|
22
|
+
|
|
23
|
+
### Comfortable size
|
|
24
|
+
|
|
25
|
+
`size="comfortable"` is the view navigation in an app page: the `View navigation` row in the ATS360 product frames.
|
|
26
|
+
|
|
27
|
+
- Underline tabs are `48px` tall with a `36px` content row and `2px` label padding.
|
|
28
|
+
- Tabs sit `8px` apart, with no divider under the row.
|
|
29
|
+
- The active tab's `2px` brand indicator is an inset shadow, so the label stays centred in the full tab height.
|
|
30
|
+
- Active labels are body-md medium in `content/default`; the others are body-md regular in `content/subtle`.
|
|
31
|
+
|
|
32
|
+
The library `Tabs` frame keeps `16px` gaps and a `1px` divider; the other sizes still follow it. Segment and rounded tabs render `comfortable` like `md`.
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
<Tabs ariaLabel="Requisition views" items={["All requests", "Needs my approval", "Drafts"]} size="comfortable" />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Token Contract
|
|
39
|
+
|
|
40
|
+
Tabs uses Banhaten tab CSS variables for sizes, spacing, border, radius, active indicators, surfaces, and content states.
|
|
41
|
+
|
|
42
|
+
## RTL
|
|
43
|
+
|
|
44
|
+
Tabs accepts `dir="rtl"` and mirrors layout through inherited direction. Trigger labels stay complete in both directions: content-hug tabs keep their intrinsic width, while full-width tabs keep equal shares until a label's intrinsic width requires horizontal overflow.
|
|
45
|
+
|
|
46
|
+
## Overflow
|
|
47
|
+
|
|
48
|
+
Tab labels stay on one line and are never painted outside their trigger. When all triggers cannot fit, the tab list owns horizontal scrolling. `fullWidth` changes how spare inline space is distributed; it does not enable truncation or unsafe shrinking.
|
|
49
|
+
|
|
50
|
+
## Accessibility
|
|
51
|
+
|
|
52
|
+
Tabs uses Radix Tabs so keyboard behavior, roving focus, activation mode, trigger state, and panel relationships come from the primitive.
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx banhaten add tabs
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Examples
|
|
61
|
+
|
|
62
|
+
Primary registry example: `examples/tabs-demo.tsx`.
|
|
63
|
+
|
|
64
|
+
Open the live component page or run `npx banhaten docs tabs` to inspect source files, install command, and examples.
|
|
65
|
+
|
|
66
|
+
## RTL Rules
|
|
67
|
+
|
|
68
|
+
- `inheritsDirection`: true
|
|
69
|
+
- `keyboard`: Radix receives dir so arrow-key navigation follows the document direction.
|
|
70
|
+
- `textDirection`: Trigger labels use dir="auto" by default for Arabic and English tab labels.
|
|
71
|
+
- `spacing`: Uses inherited direction and logical inline spacing so underline, segmented, and rounded treatments mirror naturally.
|
|
72
|
+
|
|
58
73
|
<!-- registry-contract:start -->
|
|
59
74
|
## Registry Contract
|
|
60
75
|
|
|
@@ -66,8 +81,8 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
66
81
|
| `supportedExports` | `components/tabs.tsx: Tabs, TabsContent, TabsList, TabsRoot, TabsTrigger` |
|
|
67
82
|
| `parts` | `Tabs`, `TabsRoot`, `TabsList`, `TabsTrigger`, `TabsContent` |
|
|
68
83
|
| `registryDependencies` | None |
|
|
69
|
-
| `features` | `Radix keyboard behavior`, `controlled active index`, `controlled value`, `optional panels`, `content-hug tabs`, `content-safe full-width tabs`, `horizontal overflow without label overlap` |
|
|
70
|
-
| `sizes` | `md`, `sm`, `xs` |
|
|
84
|
+
| `features` | `Radix keyboard behavior`, `controlled active index`, `controlled value`, `optional panels`, `content-hug tabs`, `content-safe full-width tabs`, `horizontal overflow without label overlap`, `comfortable view-navigation size: 48px underline tabs 8px apart, inset indicator, no divider` |
|
|
85
|
+
| `sizes` | `md`, `sm`, `xs`, `comfortable` |
|
|
71
86
|
| `tokens` | `--bh-bg-default`, `--bh-bg-neutral-subtle`, `--bh-border-default`, `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-subtle`, `--bh-font-family`, `--bh-font-weight-medium`, `--bh-opacity-60`, `--bh-radius-full`, `--bh-radius-lg-8`, `--bh-radius-md-6`, `--bh-space-3xl-16`, `--bh-space-6xl-32`, `--bh-space-7xl-40`, `--bh-space-8xl-48`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-sm-6`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-space-xxxs-1`, `--bh-text-body-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`, `--elevation-button-soft` |
|
|
72
87
|
| `variants` | `underline`, `segment`, `rounded` |
|
|
73
88
|
<!-- registry-contract:end -->
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
# Tag
|
|
2
|
-
|
|
3
|
-
Tags identify compact metadata, filters, or removable selections.
|
|
4
|
-
|
|
5
|
-
The implementation follows the Figma component at `Design system 3.0 Copy / Tag` (`188:64712`). It supports every variant in the matrix: `simple`, `dot`, `flag`, `avatar`, and `icon`; `default`, `active`, and `disabled` states with native hover and focus-visible styling; `xs`, `md`, and `lg` sizes; optional close button; LTR and RTL.
|
|
6
|
-
|
|
7
|
-
## API
|
|
8
|
-
|
|
9
|
-
```tsx
|
|
10
|
-
<Tag
|
|
11
|
-
type="simple"
|
|
12
|
-
size="md"
|
|
13
|
-
state="default"
|
|
14
|
-
showCloseButton={false}
|
|
15
|
-
dir="ltr"
|
|
16
|
-
>
|
|
17
|
-
Label
|
|
18
|
-
</Tag>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
| Prop | Values | Default |
|
|
22
|
-
| --- | --- | --- |
|
|
23
|
-
| `type` | `simple`, `dot`, `flag`, `avatar`, `icon` | `simple` |
|
|
24
|
-
| `size` | `xs`, `md`, `lg` | `md` |
|
|
25
|
-
| `state` | `default`, `active`, `disabled` | `default` |
|
|
26
|
-
| `showCloseButton` | `boolean` | `false` |
|
|
27
|
-
| `disabled` | `boolean` | `false` |
|
|
28
|
-
| `dir` | `ltr`, `rtl`, `auto` | `auto` |
|
|
29
|
-
| `avatar` | `ReactNode` | initials placeholder |
|
|
30
|
-
| `flag` | `ReactNode` | token-colored placeholder |
|
|
31
|
-
| `icon` | `ReactNode` | plus icon |
|
|
32
|
-
| `onClose` | close-button click handler | none |
|
|
33
|
-
|
|
34
|
-
## Token Contract
|
|
35
|
-
|
|
36
|
-
The component consumes semantic design-system tokens only:
|
|
37
|
-
|
|
38
|
-
- Text and icons: `content.default`, `content.disabled`, `content.primary`, `content.onColor`, `content.muted`
|
|
39
|
-
- Backgrounds: `background.default`, `background.hover`, `background.pressed`, `background.disabled`, `background.selected`, `background.danger`
|
|
40
|
-
- Borders: `border.default`, `border.disabled`, `border.brand`, `border.focus`, `border.subtle`
|
|
41
|
-
- Shape: `shape.control`, `shape.badge`, `shape.avatar`
|
|
42
|
-
- Density: `density.controlHeight`, `density.controlPaddingX`
|
|
43
|
-
|
|
44
|
-
## Pixel Rules
|
|
45
|
-
|
|
46
|
-
- `xs` tags are `24px` tall and use body-xs medium text.
|
|
47
|
-
- `md` tags are `28px` tall and use body-sm medium text.
|
|
48
|
-
- `lg` tags are `36px` tall and use body-md medium text.
|
|
49
|
-
- Simple tags use centered text and no leading slot.
|
|
50
|
-
- Dot, flag, avatar, and icon tags use a `20px` leading slot; the default icon glyph is `18px`.
|
|
51
|
-
- Close buttons are `16px` with a `12px` icon.
|
|
52
|
-
- Focused tags use a brand border plus a solid outside focus ring.
|
|
53
|
-
- Active tags use selected/brand treatment and a stronger brand border.
|
|
54
|
-
- Disabled tags use disabled background, border, and content tokens.
|
|
55
|
-
- RTL uses logical inline padding and inherited direction so leading media, label, and close button mirror naturally.
|
|
56
|
-
|
|
57
|
-
## Install
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
npx banhaten add tag
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Examples
|
|
64
|
-
|
|
65
|
-
Primary registry example: `examples/tag-demo.tsx`.
|
|
66
|
-
|
|
67
|
-
Open the live component page or run `npx banhaten docs tag` to inspect source files, install command, and examples.
|
|
68
|
-
|
|
69
|
-
## RTL Rules
|
|
70
|
-
|
|
71
|
-
- `inheritsDirection`: true
|
|
72
|
-
- `spacing`: Uses logical inline padding and inherited flex direction so the leading media, label, and close button mirror naturally.
|
|
73
|
-
- `textDirection`: Text labels use dir="auto" for short Arabic and English tag labels.
|
|
74
|
-
- `closeButton`: The close affordance is a 16px token-sized icon button using currentColor and the tag disabled state.
|
|
75
|
-
|
|
76
|
-
## Accessibility
|
|
77
|
-
|
|
78
|
-
This component relies on `@radix-ui/react-slot` for its base accessibility behavior. Keep required labels, titles, descriptions, and focusable trigger/content relationships intact when composing it.
|
|
79
|
-
|
|
1
|
+
# Tag
|
|
2
|
+
|
|
3
|
+
Tags identify compact metadata, filters, or removable selections.
|
|
4
|
+
|
|
5
|
+
The implementation follows the Figma component at `Design system 3.0 Copy / Tag` (`188:64712`). It supports every variant in the matrix: `simple`, `dot`, `flag`, `avatar`, and `icon`; `default`, `active`, and `disabled` states with native hover and focus-visible styling; `xs`, `md`, and `lg` sizes; optional close button; LTR and RTL.
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<Tag
|
|
11
|
+
type="simple"
|
|
12
|
+
size="md"
|
|
13
|
+
state="default"
|
|
14
|
+
showCloseButton={false}
|
|
15
|
+
dir="ltr"
|
|
16
|
+
>
|
|
17
|
+
Label
|
|
18
|
+
</Tag>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
| Prop | Values | Default |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| `type` | `simple`, `dot`, `flag`, `avatar`, `icon` | `simple` |
|
|
24
|
+
| `size` | `xs`, `md`, `lg` | `md` |
|
|
25
|
+
| `state` | `default`, `active`, `disabled` | `default` |
|
|
26
|
+
| `showCloseButton` | `boolean` | `false` |
|
|
27
|
+
| `disabled` | `boolean` | `false` |
|
|
28
|
+
| `dir` | `ltr`, `rtl`, `auto` | `auto` |
|
|
29
|
+
| `avatar` | `ReactNode` | initials placeholder |
|
|
30
|
+
| `flag` | `ReactNode` | token-colored placeholder |
|
|
31
|
+
| `icon` | `ReactNode` | plus icon |
|
|
32
|
+
| `onClose` | close-button click handler | none |
|
|
33
|
+
|
|
34
|
+
## Token Contract
|
|
35
|
+
|
|
36
|
+
The component consumes semantic design-system tokens only:
|
|
37
|
+
|
|
38
|
+
- Text and icons: `content.default`, `content.disabled`, `content.primary`, `content.onColor`, `content.muted`
|
|
39
|
+
- Backgrounds: `background.default`, `background.hover`, `background.pressed`, `background.disabled`, `background.selected`, `background.danger`
|
|
40
|
+
- Borders: `border.default`, `border.disabled`, `border.brand`, `border.focus`, `border.subtle`
|
|
41
|
+
- Shape: `shape.control`, `shape.badge`, `shape.avatar`
|
|
42
|
+
- Density: `density.controlHeight`, `density.controlPaddingX`
|
|
43
|
+
|
|
44
|
+
## Pixel Rules
|
|
45
|
+
|
|
46
|
+
- `xs` tags are `24px` tall and use body-xs medium text.
|
|
47
|
+
- `md` tags are `28px` tall and use body-sm medium text.
|
|
48
|
+
- `lg` tags are `36px` tall and use body-md medium text.
|
|
49
|
+
- Simple tags use centered text and no leading slot.
|
|
50
|
+
- Dot, flag, avatar, and icon tags use a `20px` leading slot; the default icon glyph is `18px`.
|
|
51
|
+
- Close buttons are `16px` with a `12px` icon.
|
|
52
|
+
- Focused tags use a brand border plus a solid outside focus ring.
|
|
53
|
+
- Active tags use selected/brand treatment and a stronger brand border.
|
|
54
|
+
- Disabled tags use disabled background, border, and content tokens.
|
|
55
|
+
- RTL uses logical inline padding and inherited direction so leading media, label, and close button mirror naturally.
|
|
56
|
+
|
|
57
|
+
## Install
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx banhaten add tag
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Examples
|
|
64
|
+
|
|
65
|
+
Primary registry example: `examples/tag-demo.tsx`.
|
|
66
|
+
|
|
67
|
+
Open the live component page or run `npx banhaten docs tag` to inspect source files, install command, and examples.
|
|
68
|
+
|
|
69
|
+
## RTL Rules
|
|
70
|
+
|
|
71
|
+
- `inheritsDirection`: true
|
|
72
|
+
- `spacing`: Uses logical inline padding and inherited flex direction so the leading media, label, and close button mirror naturally.
|
|
73
|
+
- `textDirection`: Text labels use dir="auto" for short Arabic and English tag labels.
|
|
74
|
+
- `closeButton`: The close affordance is a 16px token-sized icon button using currentColor and the tag disabled state.
|
|
75
|
+
|
|
76
|
+
## Accessibility
|
|
77
|
+
|
|
78
|
+
This component relies on `@radix-ui/react-slot` for its base accessibility behavior. Keep required labels, titles, descriptions, and focusable trigger/content relationships intact when composing it.
|
|
79
|
+
|
|
80
80
|
<!-- registry-contract:start -->
|
|
81
81
|
## Registry Contract
|
|
82
82
|
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
# Textarea
|
|
2
|
-
|
|
3
|
-
Textarea is the multiline field primitive for comments, notes, descriptions, and tag-style text entry. It supports label, helper and error text, default and tags modes, placeholder, filled, disabled, and RTL states.
|
|
4
|
-
|
|
5
|
-
## API
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
<Textarea label="Comments" placeholder="Add context..." />
|
|
9
|
-
<Textarea mode="tags" label="Tags" defaultValue="Design, System" />
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
| Prop | Values |
|
|
13
|
-
| --- | --- |
|
|
14
|
-
| `mode` | `default`, `tags` |
|
|
15
|
-
| `state` | `placeholder`, `filled`, `disabled` |
|
|
16
|
-
| `hasError` | `boolean` |
|
|
17
|
-
| `label`, `helperText` | `ReactNode` |
|
|
18
|
-
| `dir` | `ltr`, `rtl` |
|
|
19
|
-
|
|
20
|
-
## Token Contract
|
|
21
|
-
|
|
22
|
-
Textarea uses Banhaten field surface, text, label, helper, error, tag, spacing, border, radius, disabled, and focus tokens.
|
|
23
|
-
|
|
24
|
-
## RTL
|
|
25
|
-
|
|
26
|
-
Textarea uses `text-start`, inherited direction, and logical field layout. Labels, helper text, and tag chips mirror without physical left/right styling.
|
|
27
|
-
|
|
28
|
-
## Accessibility
|
|
29
|
-
|
|
30
|
-
Connect labels and helper/error text through component props. Use visible error text with `hasError` rather than color alone.
|
|
31
|
-
|
|
32
|
-
## Install
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npx banhaten add textarea
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Examples
|
|
39
|
-
|
|
40
|
-
Primary registry example: `examples/textarea-demo.tsx`.
|
|
41
|
-
|
|
42
|
-
Open the live component page or run `npx banhaten docs textarea` to inspect source files, install command, and examples.
|
|
43
|
-
|
|
44
|
-
## RTL Rules
|
|
45
|
-
|
|
46
|
-
- `inheritsDirection`: true
|
|
47
|
-
- `textAlignment`: Uses text-start and dir="auto" so Arabic and English content align naturally.
|
|
48
|
-
- `spacing`: Uses inherited direction and flex order so labels, helper icons, and tag chips mirror without physical left/right rules.
|
|
49
|
-
|
|
1
|
+
# Textarea
|
|
2
|
+
|
|
3
|
+
Textarea is the multiline field primitive for comments, notes, descriptions, and tag-style text entry. It supports label, helper and error text, default and tags modes, placeholder, filled, disabled, and RTL states.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<Textarea label="Comments" placeholder="Add context..." />
|
|
9
|
+
<Textarea mode="tags" label="Tags" defaultValue="Design, System" />
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
| Prop | Values |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `mode` | `default`, `tags` |
|
|
15
|
+
| `state` | `placeholder`, `filled`, `disabled` |
|
|
16
|
+
| `hasError` | `boolean` |
|
|
17
|
+
| `label`, `helperText` | `ReactNode` |
|
|
18
|
+
| `dir` | `ltr`, `rtl` |
|
|
19
|
+
|
|
20
|
+
## Token Contract
|
|
21
|
+
|
|
22
|
+
Textarea uses Banhaten field surface, text, label, helper, error, tag, spacing, border, radius, disabled, and focus tokens.
|
|
23
|
+
|
|
24
|
+
## RTL
|
|
25
|
+
|
|
26
|
+
Textarea uses `text-start`, inherited direction, and logical field layout. Labels, helper text, and tag chips mirror without physical left/right styling.
|
|
27
|
+
|
|
28
|
+
## Accessibility
|
|
29
|
+
|
|
30
|
+
Connect labels and helper/error text through component props. Use visible error text with `hasError` rather than color alone.
|
|
31
|
+
|
|
32
|
+
## Install
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx banhaten add textarea
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Examples
|
|
39
|
+
|
|
40
|
+
Primary registry example: `examples/textarea-demo.tsx`.
|
|
41
|
+
|
|
42
|
+
Open the live component page or run `npx banhaten docs textarea` to inspect source files, install command, and examples.
|
|
43
|
+
|
|
44
|
+
## RTL Rules
|
|
45
|
+
|
|
46
|
+
- `inheritsDirection`: true
|
|
47
|
+
- `textAlignment`: Uses text-start and dir="auto" so Arabic and English content align naturally.
|
|
48
|
+
- `spacing`: Uses inherited direction and flex order so labels, helper icons, and tag chips mirror without physical left/right rules.
|
|
49
|
+
|
|
50
50
|
<!-- registry-contract:start -->
|
|
51
51
|
## Registry Contract
|
|
52
52
|
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
# Timeline
|
|
2
|
-
|
|
3
|
-
Timelines show ordered progress or dated events. Use `Timeline` for a complete sequence and `TimelineItem` when a consumer needs to compose a custom layout.
|
|
4
|
-
|
|
5
|
-
Figma references:
|
|
6
|
-
|
|
7
|
-
- `TimelineVetical`, node `572:6768`
|
|
8
|
-
- `TimeLineHorizontal`, node `584:4501`
|
|
9
|
-
- `TimelineVerticalItem`, node `572:6444`
|
|
10
|
-
- `TimelineHorizontalItem`, node `582:4214`
|
|
11
|
-
|
|
12
|
-
## Variants
|
|
13
|
-
|
|
14
|
-
| Prop | Values |
|
|
15
|
-
| --- | --- |
|
|
16
|
-
| `orientation` | `vertical`, `horizontal` |
|
|
17
|
-
| `variant` | `default`, `icon` |
|
|
18
|
-
| `state` | `finished`, `active`, `inactive` |
|
|
19
|
-
| `dir` | `ltr`, `rtl` |
|
|
20
|
-
|
|
21
|
-
The Figma source includes vertical timelines with seven steps and horizontal timelines with six steps. Code accepts any `steps` array.
|
|
22
|
-
|
|
23
|
-
## API
|
|
24
|
-
|
|
25
|
-
```tsx
|
|
26
|
-
<Timeline
|
|
27
|
-
orientation="vertical"
|
|
28
|
-
variant="default"
|
|
29
|
-
dir="ltr"
|
|
30
|
-
steps={[
|
|
31
|
-
{ label: "Label", caption: "Caption", date: "Mar 15. 2050", state: "finished" },
|
|
32
|
-
{ label: "Label", caption: "Caption", date: "Mar 15. 2050", state: "active" },
|
|
33
|
-
{ label: "Label", caption: "Caption", date: "Mar 15. 2050", state: "inactive" },
|
|
34
|
-
]}
|
|
35
|
-
/>
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
`TimelineStep` supports `label`, `caption`, `date`, `topDate`, `bottomDate`, `state`, `icon`, and visibility flags for leading/top/bottom dates, caption, connector line, and bottom padding.
|
|
39
|
-
|
|
40
|
-
## Token Contract
|
|
41
|
-
|
|
42
|
-
- `--bg-brand-default`: filled icon marker
|
|
43
|
-
- `--bg-default`: default marker center
|
|
44
|
-
- `--bg-muted`: inactive icon marker
|
|
45
|
-
- `--border-brand-strong`: finished connector line
|
|
46
|
-
- `--border-default`: active and inactive connector line
|
|
47
|
-
- `--content-default`: labels and inactive check
|
|
48
|
-
- `--content-subtle`: dates and captions
|
|
49
|
-
- `--radius-full`: marker and line radius
|
|
50
|
-
|
|
51
|
-
## Pixel Rules
|
|
52
|
-
|
|
53
|
-
- Dates are `12px / 16px`, regular.
|
|
54
|
-
- Labels are `15px / 24px`, semibold.
|
|
55
|
-
- Captions are `14px / 20px`, regular.
|
|
56
|
-
- Default markers reserve a `20px` box with a small circular ring.
|
|
57
|
-
- Icon markers are `28px` circles with an 18px check glyph.
|
|
58
|
-
- Vertical item gaps use `12px`; horizontal item body spacing uses `10px`.
|
|
59
|
-
- Finished connector lines use the brand border color.
|
|
60
|
-
- Active and inactive connector lines use the default border color.
|
|
61
|
-
- RTL mirrors the date/content placement while preserving source step order.
|
|
62
|
-
|
|
63
|
-
## Install
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
npx banhaten add timeline
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Examples
|
|
70
|
-
|
|
71
|
-
Primary registry example: `examples/expanded/timeline-demo.tsx`.
|
|
72
|
-
|
|
73
|
-
Open the live component page or run `npx banhaten docs timeline` to inspect source files, install command, and examples.
|
|
74
|
-
|
|
75
|
-
## RTL Rules
|
|
76
|
-
|
|
77
|
-
This component has no special RTL contract beyond inherited document direction and logical spacing.
|
|
78
|
-
|
|
79
|
-
## Accessibility
|
|
80
|
-
|
|
81
|
-
Keep native semantics, accessible names, keyboard reachability, focus-visible treatment, and status/error announcements intact when composing this component.
|
|
82
|
-
|
|
1
|
+
# Timeline
|
|
2
|
+
|
|
3
|
+
Timelines show ordered progress or dated events. Use `Timeline` for a complete sequence and `TimelineItem` when a consumer needs to compose a custom layout.
|
|
4
|
+
|
|
5
|
+
Figma references:
|
|
6
|
+
|
|
7
|
+
- `TimelineVetical`, node `572:6768`
|
|
8
|
+
- `TimeLineHorizontal`, node `584:4501`
|
|
9
|
+
- `TimelineVerticalItem`, node `572:6444`
|
|
10
|
+
- `TimelineHorizontalItem`, node `582:4214`
|
|
11
|
+
|
|
12
|
+
## Variants
|
|
13
|
+
|
|
14
|
+
| Prop | Values |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| `orientation` | `vertical`, `horizontal` |
|
|
17
|
+
| `variant` | `default`, `icon` |
|
|
18
|
+
| `state` | `finished`, `active`, `inactive` |
|
|
19
|
+
| `dir` | `ltr`, `rtl` |
|
|
20
|
+
|
|
21
|
+
The Figma source includes vertical timelines with seven steps and horizontal timelines with six steps. Code accepts any `steps` array.
|
|
22
|
+
|
|
23
|
+
## API
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
<Timeline
|
|
27
|
+
orientation="vertical"
|
|
28
|
+
variant="default"
|
|
29
|
+
dir="ltr"
|
|
30
|
+
steps={[
|
|
31
|
+
{ label: "Label", caption: "Caption", date: "Mar 15. 2050", state: "finished" },
|
|
32
|
+
{ label: "Label", caption: "Caption", date: "Mar 15. 2050", state: "active" },
|
|
33
|
+
{ label: "Label", caption: "Caption", date: "Mar 15. 2050", state: "inactive" },
|
|
34
|
+
]}
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`TimelineStep` supports `label`, `caption`, `date`, `topDate`, `bottomDate`, `state`, `icon`, and visibility flags for leading/top/bottom dates, caption, connector line, and bottom padding.
|
|
39
|
+
|
|
40
|
+
## Token Contract
|
|
41
|
+
|
|
42
|
+
- `--bg-brand-default`: filled icon marker
|
|
43
|
+
- `--bg-default`: default marker center
|
|
44
|
+
- `--bg-muted`: inactive icon marker
|
|
45
|
+
- `--border-brand-strong`: finished connector line
|
|
46
|
+
- `--border-default`: active and inactive connector line
|
|
47
|
+
- `--content-default`: labels and inactive check
|
|
48
|
+
- `--content-subtle`: dates and captions
|
|
49
|
+
- `--radius-full`: marker and line radius
|
|
50
|
+
|
|
51
|
+
## Pixel Rules
|
|
52
|
+
|
|
53
|
+
- Dates are `12px / 16px`, regular.
|
|
54
|
+
- Labels are `15px / 24px`, semibold.
|
|
55
|
+
- Captions are `14px / 20px`, regular.
|
|
56
|
+
- Default markers reserve a `20px` box with a small circular ring.
|
|
57
|
+
- Icon markers are `28px` circles with an 18px check glyph.
|
|
58
|
+
- Vertical item gaps use `12px`; horizontal item body spacing uses `10px`.
|
|
59
|
+
- Finished connector lines use the brand border color.
|
|
60
|
+
- Active and inactive connector lines use the default border color.
|
|
61
|
+
- RTL mirrors the date/content placement while preserving source step order.
|
|
62
|
+
|
|
63
|
+
## Install
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx banhaten add timeline
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Examples
|
|
70
|
+
|
|
71
|
+
Primary registry example: `examples/expanded/timeline-demo.tsx`.
|
|
72
|
+
|
|
73
|
+
Open the live component page or run `npx banhaten docs timeline` to inspect source files, install command, and examples.
|
|
74
|
+
|
|
75
|
+
## RTL Rules
|
|
76
|
+
|
|
77
|
+
This component has no special RTL contract beyond inherited document direction and logical spacing.
|
|
78
|
+
|
|
79
|
+
## Accessibility
|
|
80
|
+
|
|
81
|
+
Keep native semantics, accessible names, keyboard reachability, focus-visible treatment, and status/error announcements intact when composing this component.
|
|
82
|
+
|
|
83
83
|
<!-- registry-contract:start -->
|
|
84
84
|
## Registry Contract
|
|
85
85
|
|