banhaten 0.3.0 → 0.5.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 +139 -73
- package/CONTRIBUTING.md +46 -44
- package/README.md +192 -190
- package/SECURITY.md +15 -15
- package/banhaten.config.example.json +11 -11
- package/docs/design-spacing.md +13 -0
- package/docs/design-system/README.md +22 -20
- 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 -244
- package/docs/design-system/component-quality-audit-2026-08-20.md +225 -223
- 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 +90 -76
- package/docs/design-system/components/accordion.md +53 -53
- package/docs/design-system/components/activity-feed.md +94 -94
- package/docs/design-system/components/activity-heatmap.md +57 -57
- package/docs/design-system/components/agent-input.md +85 -0
- package/docs/design-system/components/alert-dialog.md +72 -72
- package/docs/design-system/components/alert.md +98 -98
- package/docs/design-system/components/approval-card.md +134 -0
- package/docs/design-system/components/aspect-ratio.md +45 -45
- package/docs/design-system/components/attribute.md +89 -89
- package/docs/design-system/components/autocomplete.md +75 -75
- package/docs/design-system/components/avatar.md +54 -54
- package/docs/design-system/components/badge.md +54 -54
- package/docs/design-system/components/banner.md +87 -87
- package/docs/design-system/components/breadcrumbs.md +177 -176
- package/docs/design-system/components/button-group.md +98 -98
- package/docs/design-system/components/button.md +83 -80
- package/docs/design-system/components/card.md +88 -88
- package/docs/design-system/components/carousel.md +46 -46
- package/docs/design-system/components/catalog-components.md +47 -47
- package/docs/design-system/components/chart.md +95 -24
- package/docs/design-system/components/checkbox.md +54 -54
- package/docs/design-system/components/collapsible.md +67 -53
- package/docs/design-system/components/command.md +62 -62
- package/docs/design-system/components/context-menu.md +46 -46
- package/docs/design-system/components/date-picker.md +81 -79
- 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 +187 -187
- package/docs/design-system/components/hover-card.md +48 -48
- package/docs/design-system/components/icons.md +48 -48
- package/docs/design-system/components/inline-citations.md +93 -0
- package/docs/design-system/components/input-group.md +58 -58
- package/docs/design-system/components/input-otp.md +56 -56
- package/docs/design-system/components/input.md +117 -61
- package/docs/design-system/components/item.md +59 -57
- package/docs/design-system/components/kbd.md +54 -49
- package/docs/design-system/components/label.md +49 -49
- package/docs/design-system/components/menu.md +71 -61
- package/docs/design-system/components/menubar.md +47 -47
- package/docs/design-system/components/modal.md +105 -105
- package/docs/design-system/components/native-select.md +54 -54
- package/docs/design-system/components/navigation-menu.md +50 -50
- package/docs/design-system/components/onboarding-step-list-item.md +82 -82
- package/docs/design-system/components/page-header.md +93 -86
- package/docs/design-system/components/pagination.md +57 -57
- package/docs/design-system/components/popover.md +60 -60
- package/docs/design-system/components/progress-slider.md +50 -50
- package/docs/design-system/components/progress.md +76 -76
- package/docs/design-system/components/radio-card.md +51 -51
- package/docs/design-system/components/radio-group.md +57 -57
- package/docs/design-system/components/resizable.md +44 -44
- package/docs/design-system/components/rolling-count.md +61 -0
- package/docs/design-system/components/scroll-area.md +51 -51
- package/docs/design-system/components/segmented-control.md +54 -54
- package/docs/design-system/components/select.md +68 -62
- package/docs/design-system/components/sheet.md +67 -67
- package/docs/design-system/components/shimmer-text.md +67 -0
- package/docs/design-system/components/sidebar.md +127 -76
- package/docs/design-system/components/skeleton.md +75 -75
- package/docs/design-system/components/slideout.md +65 -65
- package/docs/design-system/components/slider.md +63 -63
- package/docs/design-system/components/social-button.md +50 -50
- package/docs/design-system/components/spinner.md +62 -62
- package/docs/design-system/components/steps.md +65 -65
- package/docs/design-system/components/streaming-text.md +82 -0
- package/docs/design-system/components/table.md +419 -414
- package/docs/design-system/components/tabs.md +59 -55
- package/docs/design-system/components/tag.md +80 -80
- package/docs/design-system/components/task-list.md +95 -0
- package/docs/design-system/components/textarea.md +50 -50
- package/docs/design-system/components/thinking-reasoning.md +72 -0
- package/docs/design-system/components/thinking-state.md +67 -0
- package/docs/design-system/components/timeline.md +83 -83
- package/docs/design-system/components/toast.md +58 -58
- package/docs/design-system/components/toggle.md +81 -81
- package/docs/design-system/components/toolbar.md +92 -87
- package/docs/design-system/components/tooltip.md +94 -92
- package/docs/design-system/components/typography.md +18 -18
- package/docs/design-system/density-and-elevation.md +65 -61
- 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 -69
- package/docs/design-system/installation.md +70 -68
- 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 -53
- package/docs/design-system/template-gap-audit.md +32 -0
- package/docs/design-system/templates.md +59 -0
- package/docs/design-system/token-governance.md +72 -60
- package/package.json +98 -98
- package/registry/component-contract.json +40 -40
- package/registry/components/accordion.tsx +155 -155
- package/registry/components/agent-input-parts.tsx +552 -0
- package/registry/components/agent-input-state.ts +156 -0
- package/registry/components/agent-input.css +307 -0
- package/registry/components/agent-input.tsx +382 -0
- package/registry/components/alert-dialog.tsx +297 -297
- package/registry/components/alert.tsx +293 -293
- package/registry/components/approval-card.css +409 -0
- package/registry/components/approval-card.tsx +401 -0
- package/registry/components/approval-frame.tsx +108 -0
- package/registry/components/approval-questions.tsx +559 -0
- package/registry/components/aspect-ratio.tsx +30 -30
- package/registry/components/attribute.tsx +454 -448
- package/registry/components/autocomplete.tsx +598 -651
- package/registry/components/avatar.tsx +385 -381
- package/registry/components/badge.tsx +629 -629
- package/registry/components/button-group.tsx +565 -565
- package/registry/components/button.tsx +127 -123
- package/registry/components/card.tsx +638 -638
- package/registry/components/carousel.tsx +296 -296
- package/registry/components/chart-block-data.ts +177 -0
- package/registry/components/chart-block.css +171 -0
- package/registry/components/chart-block.tsx +260 -0
- package/registry/components/chart-interactions.ts +123 -0
- package/registry/components/chart-options.cartesian.ts +162 -0
- package/registry/components/chart-options.paint.ts +99 -0
- package/registry/components/chart-options.parts.ts +72 -0
- package/registry/components/chart-options.radial.ts +109 -0
- package/registry/components/chart-options.ts +44 -0
- package/registry/components/chart-options.types.ts +67 -0
- package/registry/components/chart.tsx +203 -203
- package/registry/components/checkbox.tsx +247 -247
- package/registry/components/collapsible.tsx +109 -69
- package/registry/components/command.tsx +208 -208
- package/registry/components/context-menu.tsx +236 -236
- package/registry/components/data-chart.tsx +40 -0
- package/registry/components/date-picker.tsx +1289 -1277
- package/registry/components/echart-theme.ts +246 -0
- package/registry/components/echart.css +49 -0
- package/registry/components/echart.tsx +178 -0
- 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 +131 -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 -59
- package/registry/components/expanded/PageHeader.tsx +179 -166
- package/registry/components/expanded/Slideout.tsx +108 -108
- package/registry/components/expanded/Steps.tsx +402 -402
- package/registry/components/expanded/Table.tsx +1092 -1071
- 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 -255
- package/registry/components/expanded/breadcrumbs.css +140 -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 -126
- package/registry/components/expanded/pageHeader.css +248 -290
- package/registry/components/expanded/slideout.css +276 -276
- package/registry/components/expanded/steps.css +356 -356
- package/registry/components/expanded/table.css +606 -603
- 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/inline-citations.css +126 -0
- package/registry/components/inline-citations.tsx +292 -0
- 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 +990 -972
- package/registry/components/item.tsx +189 -189
- package/registry/components/kbd.tsx +246 -151
- package/registry/components/label.tsx +78 -78
- package/registry/components/menu.tsx +978 -986
- 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 -555
- package/registry/components/popover.tsx +338 -338
- package/registry/components/progress-slider.tsx +216 -216
- package/registry/components/radio-card.tsx +676 -677
- package/registry/components/radio-group.tsx +570 -570
- package/registry/components/resizable.tsx +108 -108
- package/registry/components/rolling-count.css +37 -0
- package/registry/components/rolling-count.tsx +110 -0
- 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 -932
- package/registry/components/sheet.tsx +305 -305
- package/registry/components/shimmer-text.css +69 -0
- package/registry/components/shimmer-text.tsx +43 -0
- package/registry/components/sidebar.tsx +1433 -358
- 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/streaming-text.css +45 -0
- package/registry/components/streaming-text.tsx +165 -0
- package/registry/components/table-elements.tsx +128 -128
- package/registry/components/tabs.css +222 -218
- package/registry/components/tabs.tsx +241 -241
- package/registry/components/tag.tsx +423 -423
- package/registry/components/task-list.css +328 -0
- package/registry/components/task-list.tsx +429 -0
- package/registry/components/textarea.tsx +610 -610
- package/registry/components/thinking-reasoning.css +178 -0
- package/registry/components/thinking-reasoning.tsx +253 -0
- package/registry/components/thinking-state.css +8 -0
- package/registry/components/thinking-state.tsx +46 -0
- 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 -431
- package/registry/examples/agent-input-demo.tsx +90 -0
- package/registry/examples/alert-demo.tsx +34 -34
- package/registry/examples/alert-dialog-demo.tsx +42 -42
- package/registry/examples/approval-card-demo.tsx +83 -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 -83
- 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-block-demo.tsx +5 -0
- package/registry/examples/chart-demo.tsx +18 -33
- 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 -236
- package/registry/examples/context-menu-demo.tsx +29 -29
- package/registry/examples/control-density-contract-demo.tsx +65 -61
- 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/inline-citations-demo.tsx +31 -0
- package/registry/examples/input-actions-demo.tsx +36 -0
- 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 -11
- 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 -546
- 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/rolling-count-demo.tsx +39 -0
- 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/shimmer-text-demo.tsx +20 -0
- package/registry/examples/sidebar-demo.tsx +101 -57
- 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/streaming-text-demo.tsx +28 -0
- package/registry/examples/tabs-demo.tsx +13 -13
- package/registry/examples/tag-demo.tsx +29 -29
- package/registry/examples/task-list-demo.tsx +74 -0
- package/registry/examples/textarea-demo.tsx +79 -79
- package/registry/examples/thinking-reasoning-demo.tsx +74 -0
- package/registry/examples/thinking-state-demo.tsx +13 -0
- 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/guidance/charts.LICENSE.txt +24 -0
- package/registry/hooks/use-controllable-state.ts +33 -0
- package/registry/hooks/use-direction.ts +207 -207
- package/registry/hooks/use-listbox-navigation.ts +73 -0
- package/registry/hooks/use-motion-end.ts +55 -0
- package/registry/hooks/use-reduced-motion.ts +28 -0
- package/registry/index.json +1634 -184
- package/registry/styles/globals.css +1462 -1570
- package/registry.json +364 -10
- package/schema/config.schema.json +51 -51
- package/schema/registry.schema.json +194 -190
- package/schema/tokens.schema.json +167 -163
- 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 -295
- package/src/cli/global-css.js +153 -153
- package/src/cli/index.js +1002 -1009
- 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 +458 -224
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
# Banner
|
|
2
|
-
|
|
3
|
-
`Banner` presents short product announcements, notices, or lightweight calls to action.
|
|
4
|
-
|
|
5
|
-
Figma reference: `Design system 3.0 Copy / Banner`, node `237:39513`.
|
|
6
|
-
|
|
7
|
-
## Variants
|
|
8
|
-
|
|
9
|
-
The implementation covers the Banner matrix from Figma:
|
|
10
|
-
|
|
11
|
-
| Prop | Values |
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| `type` | `slim`, `single-action-inline`, `single-action`, `input` |
|
|
14
|
-
| `size` | `floating`, `full-width` |
|
|
15
|
-
| `content` | `title`, `title-description` |
|
|
16
|
-
| `color` | `brand`, `grey`, `brand-light` |
|
|
17
|
-
| `dir` | `ltr`, `rtl` |
|
|
18
|
-
|
|
19
|
-
## API
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
<Banner
|
|
23
|
-
type="single-action"
|
|
24
|
-
size="floating"
|
|
25
|
-
content="title"
|
|
26
|
-
color="brand"
|
|
27
|
-
dir="ltr"
|
|
28
|
-
/>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
| Prop | Default |
|
|
32
|
-
| --- | --- |
|
|
33
|
-
| `title` | localized demo title |
|
|
34
|
-
| `description` | localized demo description |
|
|
35
|
-
| `linkLabel` | `Link button` |
|
|
36
|
-
| `actionLabel` | `Button` |
|
|
37
|
-
| `inputPlaceholder` | `Placeholder` |
|
|
38
|
-
| `showIcon` | `true` |
|
|
39
|
-
| `showInlineAction` | `true` |
|
|
40
|
-
| `onAction` | none |
|
|
41
|
-
| `onClose` | none |
|
|
42
|
-
|
|
43
|
-
## Pixel Rules
|
|
44
|
-
|
|
45
|
-
- Root padding is `12px 16px`.
|
|
46
|
-
- Slim title rows are `48px`; slim title-description rows are `52px`.
|
|
47
|
-
- Single-action, inline-action, and input rows are `60px`.
|
|
48
|
-
- Floating rows use `10px` radius; full-width rows have square edges.
|
|
49
|
-
-
|
|
50
|
-
- Action controls and text inputs are `36px` tall with `8px` radius.
|
|
51
|
-
- LTR body text uses `15px / 24px`. RTL title-only body text uses `12px / 16px`.
|
|
52
|
-
- Title-description content uses a semibold title, a `17px / 28px` separator dot, and regular description text.
|
|
53
|
-
|
|
54
|
-
## Token Contract
|
|
55
|
-
|
|
56
|
-
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.
|
|
57
|
-
|
|
58
|
-
- Backgrounds: `--bh-bg-brand-default`, `--bh-bg-brand-soft`, `--bh-bg-muted`, `--bh-bg-always-white`
|
|
59
|
-
- Content: `--bh-content-default`, `--bh-content-inverse`, `--bh-content-link`, `--bh-content-muted`, `--bh-content-subtle`
|
|
60
|
-
- Borders: `--bh-border-subtle`, `--bh-border-input`
|
|
61
|
-
- Shape: `--bh-control-default`, `--bh-radius-lg-8`, `--bh-radius-xl-10`
|
|
62
|
-
- Space: `--bh-space-xs-4`, `--bh-space-md-8`, `--bh-space-lg-10`, `--bh-space-xl-12`, `--bh-space-3xl-16`
|
|
63
|
-
|
|
64
|
-
## Accessibility
|
|
65
|
-
|
|
66
|
-
- The banner root exposes an `aria-label`.
|
|
67
|
-
- Link, action, and close affordances are real buttons.
|
|
68
|
-
- The input variant uses a real text input with an `aria-label`.
|
|
69
|
-
- RTL is controlled through `dir="rtl"` so icon, text, action, input, and close placement mirror logically.
|
|
70
|
-
|
|
71
|
-
## Install
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
npx banhaten add banner
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## Examples
|
|
78
|
-
|
|
79
|
-
Primary registry example: `examples/expanded/banner-demo.tsx`.
|
|
80
|
-
|
|
81
|
-
Open the live component page or run `npx banhaten docs banner` to inspect source files, install command, and examples.
|
|
82
|
-
|
|
83
|
-
## RTL Rules
|
|
84
|
-
|
|
85
|
-
This component has no special RTL contract beyond inherited document direction and logical spacing.
|
|
86
|
-
|
|
1
|
+
# Banner
|
|
2
|
+
|
|
3
|
+
`Banner` presents short product announcements, notices, or lightweight calls to action.
|
|
4
|
+
|
|
5
|
+
Figma reference: `Design system 3.0 Copy / Banner`, node `237:39513`.
|
|
6
|
+
|
|
7
|
+
## Variants
|
|
8
|
+
|
|
9
|
+
The implementation covers the Banner matrix from Figma:
|
|
10
|
+
|
|
11
|
+
| Prop | Values |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| `type` | `slim`, `single-action-inline`, `single-action`, `input` |
|
|
14
|
+
| `size` | `floating`, `full-width` |
|
|
15
|
+
| `content` | `title`, `title-description` |
|
|
16
|
+
| `color` | `brand`, `grey`, `brand-light` |
|
|
17
|
+
| `dir` | `ltr`, `rtl` |
|
|
18
|
+
|
|
19
|
+
## API
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
<Banner
|
|
23
|
+
type="single-action"
|
|
24
|
+
size="floating"
|
|
25
|
+
content="title"
|
|
26
|
+
color="brand"
|
|
27
|
+
dir="ltr"
|
|
28
|
+
/>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
| Prop | Default |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| `title` | localized demo title |
|
|
34
|
+
| `description` | localized demo description |
|
|
35
|
+
| `linkLabel` | `Link button` |
|
|
36
|
+
| `actionLabel` | `Button` |
|
|
37
|
+
| `inputPlaceholder` | `Placeholder` |
|
|
38
|
+
| `showIcon` | `true` |
|
|
39
|
+
| `showInlineAction` | `true` |
|
|
40
|
+
| `onAction` | none |
|
|
41
|
+
| `onClose` | none |
|
|
42
|
+
|
|
43
|
+
## Pixel Rules
|
|
44
|
+
|
|
45
|
+
- Root padding is `12px 16px`.
|
|
46
|
+
- Slim title rows are `48px`; slim title-description rows are `52px`.
|
|
47
|
+
- Single-action, inline-action, and input rows are `60px`.
|
|
48
|
+
- Floating rows use `10px` radius; full-width rows have square edges.
|
|
49
|
+
- The leading glyph is `18px` in a `20px` slot; the close glyph remains `16px`.
|
|
50
|
+
- Action controls and text inputs are `36px` tall with `8px` radius.
|
|
51
|
+
- LTR body text uses `15px / 24px`. RTL title-only body text uses `12px / 16px`.
|
|
52
|
+
- Title-description content uses a semibold title, a `17px / 28px` separator dot, and regular description text.
|
|
53
|
+
|
|
54
|
+
## Token Contract
|
|
55
|
+
|
|
56
|
+
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.
|
|
57
|
+
|
|
58
|
+
- Backgrounds: `--bh-bg-brand-default`, `--bh-bg-brand-soft`, `--bh-bg-muted`, `--bh-bg-always-white`
|
|
59
|
+
- Content: `--bh-content-default`, `--bh-content-inverse`, `--bh-content-link`, `--bh-content-muted`, `--bh-content-subtle`
|
|
60
|
+
- Borders: `--bh-border-subtle`, `--bh-border-input`
|
|
61
|
+
- Shape: `--bh-control-default`, `--bh-radius-lg-8`, `--bh-radius-xl-10`
|
|
62
|
+
- Space: `--bh-space-xs-4`, `--bh-space-md-8`, `--bh-space-lg-10`, `--bh-space-xl-12`, `--bh-space-3xl-16`
|
|
63
|
+
|
|
64
|
+
## Accessibility
|
|
65
|
+
|
|
66
|
+
- The banner root exposes an `aria-label`.
|
|
67
|
+
- Link, action, and close affordances are real buttons.
|
|
68
|
+
- The input variant uses a real text input with an `aria-label`.
|
|
69
|
+
- RTL is controlled through `dir="rtl"` so icon, text, action, input, and close placement mirror logically.
|
|
70
|
+
|
|
71
|
+
## Install
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npx banhaten add banner
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Examples
|
|
78
|
+
|
|
79
|
+
Primary registry example: `examples/expanded/banner-demo.tsx`.
|
|
80
|
+
|
|
81
|
+
Open the live component page or run `npx banhaten docs banner` to inspect source files, install command, and examples.
|
|
82
|
+
|
|
83
|
+
## RTL Rules
|
|
84
|
+
|
|
85
|
+
This component has no special RTL contract beyond inherited document direction and logical spacing.
|
|
86
|
+
|
|
87
87
|
<!-- registry-contract:start -->
|
|
88
88
|
## Registry Contract
|
|
89
89
|
|
|
@@ -98,6 +98,6 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
98
98
|
| `modes` | `slim`, `single-action-inline`, `single-action`, `input` |
|
|
99
99
|
| `sizes` | `floating`, `full-width` |
|
|
100
100
|
| `states` | `title`, `title-description` |
|
|
101
|
-
| `tokens` | `--bh-bg-brand-bold`, `--bh-bg-brand-soft`, `--bh-bg-muted`, `--bh-border-subtle`, `--bh-content-default`, `--bh-content-link`, `--bh-content-on-brand`, `--bh-content-subtle`, `--bh-font-family`, `--bh-font-weight-regular`, `--bh-font-weight-semibold`, `--bh-icon-stroke-210`, `--bh-icon-stroke-225`, `--bh-input-width`, `--bh-radius-xl-10`, `--bh-space-17xl-288`, `--bh-space-19xl-384`, `--bh-space-3xl-16`, `--bh-space-
|
|
101
|
+
| `tokens` | `--bh-bg-brand-bold`, `--bh-bg-brand-soft`, `--bh-bg-muted`, `--bh-border-subtle`, `--bh-content-default`, `--bh-content-link`, `--bh-content-on-brand`, `--bh-content-subtle`, `--bh-font-family`, `--bh-font-weight-regular`, `--bh-font-weight-semibold`, `--bh-icon-size-default`, `--bh-icon-slot-size-default`, `--bh-icon-stroke-210`, `--bh-icon-stroke-225`, `--bh-input-width`, `--bh-radius-xl-10`, `--bh-space-17xl-288`, `--bh-space-19xl-384`, `--bh-space-3xl-16`, `--bh-space-8xl-48`, `--bh-space-lg-10`, `--bh-space-md-8`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-space-xxxs-1`, `--bh-text-body-2xs-medium-font-size`, `--bh-text-body-2xs-medium-font-weight`, `--bh-text-body-2xs-medium-line-height`, `--bh-text-body-lg-medium-font-size`, `--bh-text-body-lg-medium-font-weight`, `--bh-text-body-lg-medium-line-height`, `--bh-text-body-md-medium-font-size`, `--bh-text-body-md-medium-font-weight`, `--bh-text-body-md-medium-letter-spacing`, `--bh-text-body-md-medium-line-height`, `--elevation-05` |
|
|
102
102
|
| `variants` | `brand`, `grey`, `brand-light` |
|
|
103
103
|
<!-- registry-contract:end -->
|
|
@@ -1,178 +1,179 @@
|
|
|
1
|
-
# Breadcrumbs
|
|
2
|
-
|
|
3
|
-
Breadcrumbs show a user's location in a hierarchy and provide a quick path back to parent pages. Use `Breadcrumbs` for page-level navigation, not for step progress, tabs, or filters.
|
|
4
|
-
|
|
5
|
-
Figma reference: `Breadcrumbs`, node `238:7987`.
|
|
6
|
-
|
|
7
|
-
## Variants
|
|
8
|
-
|
|
9
|
-
The Figma component defines these variants:
|
|
10
|
-
|
|
11
|
-
| Type | Style | Separator type | Direction |
|
|
12
|
-
| --- | --- | --- | --- |
|
|
13
|
-
| `Default` | `Default` | `Slash` | LTR and RTL |
|
|
14
|
-
| `Default` | `Default` | `Chevron` | LTR and RTL |
|
|
15
|
-
| `Default` | `Raised` | `Slash` | LTR and RTL |
|
|
16
|
-
| `Default` | `Raised` | `Chevron` | LTR and RTL |
|
|
17
|
-
| `Only Icon` | `Default` | `Slash` | LTR and RTL |
|
|
18
|
-
| `Only Icon` | `Default` | `Chevron` | LTR and RTL |
|
|
19
|
-
| `Only Icon` | `Raised` | `Slash` | LTR and RTL |
|
|
20
|
-
| `Only Icon` | `Raised` | `Chevron` | LTR and RTL |
|
|
21
|
-
|
|
22
|
-
The Figma source supports up to six visible breadcrumb items. Code should model this as an `items` collection instead of positional booleans such as `showBreadcrumb01`.
|
|
23
|
-
|
|
24
|
-
## API
|
|
25
|
-
|
|
26
|
-
Use semantic names in code even if the Figma variant labels are title-cased.
|
|
27
|
-
|
|
28
|
-
```ts
|
|
29
|
-
type BreadcrumbSeparator = "slash" | "chevron";
|
|
30
|
-
type BreadcrumbStyle = "default" | "raised";
|
|
31
|
-
|
|
32
|
-
type BreadcrumbItem = {
|
|
33
|
-
label: string;
|
|
34
|
-
href?: string;
|
|
35
|
-
icon?: React.ReactNode;
|
|
36
|
-
current?: boolean;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
type BreadcrumbsProps = {
|
|
40
|
-
items: BreadcrumbItem[];
|
|
41
|
-
separator?: BreadcrumbSeparator;
|
|
42
|
-
style?: BreadcrumbStyle;
|
|
43
|
-
iconOnly?: boolean;
|
|
44
|
-
dir?: "ltr" | "rtl" | "auto";
|
|
45
|
-
maxItems?: number;
|
|
46
|
-
"aria-label"?: string;
|
|
47
|
-
};
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
`items` should be ordered from root to current page in logical reading order. RTL rendering should mirror the visual order through layout direction, not by reversing the source data.
|
|
51
|
-
|
|
52
|
-
## Layout
|
|
53
|
-
|
|
54
|
-
- The root is a horizontal flex row with centered alignment.
|
|
55
|
-
- The default style has no container background and uses a compact inline gap.
|
|
56
|
-
- The raised style adds a surface fill, a 1px border, 12px padding, and an 8px radius in the Figma source.
|
|
57
|
-
- Text items use `Body/body-md (base)/medium` with a 15px size and 24px line height.
|
|
58
|
-
- Item
|
|
59
|
-
- Slash and chevron separators are 16px square and should be decorative.
|
|
60
|
-
- LTR chevrons point right; RTL chevrons point left.
|
|
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
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
{ label: "
|
|
105
|
-
{ label: "
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
{ label: "
|
|
115
|
-
{ label: "
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
{ label: "
|
|
125
|
-
{ label: "
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
{ label: "
|
|
135
|
-
{ label: "
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
- `
|
|
144
|
-
- `
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
1
|
+
# Breadcrumbs
|
|
2
|
+
|
|
3
|
+
Breadcrumbs show a user's location in a hierarchy and provide a quick path back to parent pages. Use `Breadcrumbs` for page-level navigation, not for step progress, tabs, or filters.
|
|
4
|
+
|
|
5
|
+
Figma reference: `Breadcrumbs`, node `238:7987`.
|
|
6
|
+
|
|
7
|
+
## Variants
|
|
8
|
+
|
|
9
|
+
The Figma component defines these variants:
|
|
10
|
+
|
|
11
|
+
| Type | Style | Separator type | Direction |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| `Default` | `Default` | `Slash` | LTR and RTL |
|
|
14
|
+
| `Default` | `Default` | `Chevron` | LTR and RTL |
|
|
15
|
+
| `Default` | `Raised` | `Slash` | LTR and RTL |
|
|
16
|
+
| `Default` | `Raised` | `Chevron` | LTR and RTL |
|
|
17
|
+
| `Only Icon` | `Default` | `Slash` | LTR and RTL |
|
|
18
|
+
| `Only Icon` | `Default` | `Chevron` | LTR and RTL |
|
|
19
|
+
| `Only Icon` | `Raised` | `Slash` | LTR and RTL |
|
|
20
|
+
| `Only Icon` | `Raised` | `Chevron` | LTR and RTL |
|
|
21
|
+
|
|
22
|
+
The Figma source supports up to six visible breadcrumb items. Code should model this as an `items` collection instead of positional booleans such as `showBreadcrumb01`.
|
|
23
|
+
|
|
24
|
+
## API
|
|
25
|
+
|
|
26
|
+
Use semantic names in code even if the Figma variant labels are title-cased.
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
type BreadcrumbSeparator = "slash" | "chevron";
|
|
30
|
+
type BreadcrumbStyle = "default" | "raised";
|
|
31
|
+
|
|
32
|
+
type BreadcrumbItem = {
|
|
33
|
+
label: string;
|
|
34
|
+
href?: string;
|
|
35
|
+
icon?: React.ReactNode;
|
|
36
|
+
current?: boolean;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
type BreadcrumbsProps = {
|
|
40
|
+
items: BreadcrumbItem[];
|
|
41
|
+
separator?: BreadcrumbSeparator;
|
|
42
|
+
style?: BreadcrumbStyle;
|
|
43
|
+
iconOnly?: boolean;
|
|
44
|
+
dir?: "ltr" | "rtl" | "auto";
|
|
45
|
+
maxItems?: number;
|
|
46
|
+
"aria-label"?: string;
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`items` should be ordered from root to current page in logical reading order. RTL rendering should mirror the visual order through layout direction, not by reversing the source data.
|
|
51
|
+
|
|
52
|
+
## Layout
|
|
53
|
+
|
|
54
|
+
- The root is a horizontal flex row with centered alignment.
|
|
55
|
+
- The default style has no container background and uses a compact inline gap.
|
|
56
|
+
- The raised style adds a surface fill, a 1px border, 12px padding, and an 8px radius in the Figma source.
|
|
57
|
+
- Text items use `Body/body-md (base)/medium` with a 15px size and 24px line height.
|
|
58
|
+
- Item glyphs are 18px square inside 20px slots.
|
|
59
|
+
- Slash and chevron separators are 16px square and should be decorative.
|
|
60
|
+
- LTR chevrons point right; RTL chevrons point left.
|
|
61
|
+
- Each label resolves its own content direction, so an opposing script truncates at its actual end while the trail keeps the inherited layout direction.
|
|
62
|
+
- The icon-only type keeps the same item and separator rhythm but hides visible labels.
|
|
63
|
+
- Do not allow wrapping inside individual breadcrumb labels unless the component has a deliberate collapsed or overflow mode.
|
|
64
|
+
|
|
65
|
+
## Tokens
|
|
66
|
+
|
|
67
|
+
Breadcrumbs should consume existing semantic tokens:
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
export const breadcrumbsTokens = {
|
|
71
|
+
itemColor: "content.subtle",
|
|
72
|
+
currentItemColor: "content.default",
|
|
73
|
+
iconColor: "content.subtle",
|
|
74
|
+
separatorColor: "content.subtle",
|
|
75
|
+
raisedBackground: "background.card",
|
|
76
|
+
raisedBorder: "border.subtle",
|
|
77
|
+
raisedRadius: "shape.control",
|
|
78
|
+
inlineGap: "space.xs-4",
|
|
79
|
+
raisedGap: "space.md-8",
|
|
80
|
+
raisedPadding: "space.xl-12",
|
|
81
|
+
};
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Do not hard-code Figma fallback values in component code. The current Figma fallbacks include `content/subtle` as `#4e596e`, `bg/raised` as white, `border/subtle` as `rgba(55, 83, 122, 0.13)`, and `radius/lg-8` as 8px. Implementations should resolve those through semantic tokens.
|
|
85
|
+
|
|
86
|
+
If the design system later adds a dedicated `background.raised` token, the raised style can map to it. Until then, use the closest raised surface token such as `background.card`.
|
|
87
|
+
|
|
88
|
+
## Accessibility
|
|
89
|
+
|
|
90
|
+
- Render the component as navigation, usually `<nav aria-label="Breadcrumb">`.
|
|
91
|
+
- Use an ordered list so the hierarchy is exposed to assistive technology.
|
|
92
|
+
- Render linked ancestors as anchors.
|
|
93
|
+
- Mark the current page with `aria-current="page"` and do not require it to be a link.
|
|
94
|
+
- Hide separators from assistive technology with `aria-hidden="true"`.
|
|
95
|
+
- Icon-only breadcrumbs must provide an accessible label for every item, even when visible text is hidden.
|
|
96
|
+
- Preserve logical item order for screen readers in RTL contexts.
|
|
97
|
+
- Provide keyboard focus treatment through the link or action primitive, not on decorative separators.
|
|
98
|
+
|
|
99
|
+
## Usage
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
<Breadcrumbs
|
|
103
|
+
items={[
|
|
104
|
+
{ label: "Home", href: "/", icon: <HomeIcon /> },
|
|
105
|
+
{ label: "Products", href: "/products" },
|
|
106
|
+
{ label: "Analytics", current: true },
|
|
107
|
+
]}
|
|
108
|
+
/>
|
|
109
|
+
|
|
110
|
+
<Breadcrumbs
|
|
111
|
+
separator="chevron"
|
|
112
|
+
style="raised"
|
|
113
|
+
items={[
|
|
114
|
+
{ label: "Home", href: "/", icon: <HomeIcon /> },
|
|
115
|
+
{ label: "Reports", href: "/reports" },
|
|
116
|
+
{ label: "Monthly", current: true },
|
|
117
|
+
]}
|
|
118
|
+
/>
|
|
119
|
+
|
|
120
|
+
<Breadcrumbs
|
|
121
|
+
iconOnly
|
|
122
|
+
aria-label="Breadcrumb"
|
|
123
|
+
items={[
|
|
124
|
+
{ label: "Home", href: "/", icon: <HomeIcon /> },
|
|
125
|
+
{ label: "Settings", href: "/settings", icon: <SettingsIcon /> },
|
|
126
|
+
{ label: "Profile", current: true, icon: <UserIcon /> },
|
|
127
|
+
]}
|
|
128
|
+
/>
|
|
129
|
+
|
|
130
|
+
<Breadcrumbs
|
|
131
|
+
dir="rtl"
|
|
132
|
+
separator="chevron"
|
|
133
|
+
items={[
|
|
134
|
+
{ label: "Home", href: "/", icon: <HomeIcon /> },
|
|
135
|
+
{ label: "Account", href: "/account" },
|
|
136
|
+
{ label: "Security", current: true },
|
|
137
|
+
]}
|
|
138
|
+
/>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Preset Impact
|
|
142
|
+
|
|
143
|
+
- `default`: inline breadcrumbs remain quiet, and raised breadcrumbs use a modest surface radius with subtle border separation.
|
|
144
|
+
- `rounded`: raised breadcrumbs can use the softer control radius and slightly more relaxed spacing.
|
|
145
|
+
- `sharp`: raised breadcrumbs should use square or near-square corners and tighter horizontal rhythm.
|
|
146
|
+
|
|
147
|
+
## Implementation Notes
|
|
148
|
+
|
|
149
|
+
- Use the design system's icon primitive for home and chevron icons. The Figma source uses Remix Icon `home-5-line`, `arrow-right-s-line`, and `arrow-left-s-line`.
|
|
150
|
+
- Generate separators between items instead of requiring callers to include separator items.
|
|
151
|
+
- Keep overflow behavior explicit. If the trail is too long, collapse middle items behind an overflow control instead of silently hiding the current page.
|
|
152
|
+
- Prefer `dir` or logical CSS properties for RTL behavior rather than maintaining separate RTL item arrays.
|
|
153
|
+
- The raised style is a navigation surface, not a card. Keep elevation at `elevation.none` unless a consuming product places it inside an overlay.
|
|
154
|
+
|
|
155
|
+
## Install
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npx banhaten add breadcrumbs
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Examples
|
|
162
|
+
|
|
163
|
+
Primary registry example: `examples/expanded/breadcrumbs-demo.tsx`.
|
|
164
|
+
|
|
165
|
+
Open the live component page or run `npx banhaten docs breadcrumbs` to inspect source files, install command, and examples.
|
|
166
|
+
|
|
167
|
+
## Token Contract
|
|
168
|
+
|
|
169
|
+
Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
|
|
170
|
+
Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
|
|
171
|
+
Covered source files: `components/expanded/breadcrumbs.css`, `components/expanded/Breadcrumbs.tsx`.
|
|
172
|
+
|
|
173
|
+
## RTL Rules
|
|
174
|
+
|
|
175
|
+
The ordered trail inherits document direction and uses logical spacing. Each independently truncated label uses `dir="auto"`, preserving the identifying start of Latin content in an RTL trail (and Arabic content in an LTR trail) without changing item order, icon placement, or separator mirroring.
|
|
176
|
+
|
|
176
177
|
<!-- registry-contract:start -->
|
|
177
178
|
## Registry Contract
|
|
178
179
|
|
|
@@ -186,6 +187,6 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
186
187
|
| `registryDependencies` | None |
|
|
187
188
|
| `modes` | `text`, `icon-only`, `slash`, `chevron` |
|
|
188
189
|
| `states` | `link`, `current`, `overflow` |
|
|
189
|
-
| `tokens` | `--bh-bg-raised`, `--bh-border-focus`, `--bh-border-subtle`, `--bh-content-default`, `--bh-content-subtle`, `--bh-focus-ring-width`, `--bh-font-family`, `--bh-font-weight-medium`, `--bh-icon-stroke-190`, `--bh-icon-stroke-200`, `--bh-icon-stroke-225`, `--bh-interactive-ghost-hover`, `--bh-radius-lg-8`, `--bh-radius-sm-4`, `--bh-space-3xl-16`, `--bh-space-
|
|
190
|
+
| `tokens` | `--bh-bg-raised`, `--bh-border-focus`, `--bh-border-subtle`, `--bh-content-default`, `--bh-content-subtle`, `--bh-focus-ring-width`, `--bh-font-family`, `--bh-font-weight-medium`, `--bh-icon-size-default`, `--bh-icon-slot-size-default`, `--bh-icon-stroke-190`, `--bh-icon-stroke-200`, `--bh-icon-stroke-225`, `--bh-interactive-ghost-hover`, `--bh-radius-lg-8`, `--bh-radius-sm-4`, `--bh-space-3xl-16`, `--bh-space-6xl-32`, `--bh-space-md-8`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-space-xxs-2`, `--bh-space-xxxs-1`, `--bh-text-base-letter-spacing`, `--bh-text-body-2xs-regular-line-height`, `--bh-text-body-md-font-size`, `--bh-text-body-md-line-height` |
|
|
190
191
|
| `variants` | `default`, `raised` |
|
|
191
192
|
<!-- registry-contract:end -->
|