banhaten 0.4.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 -100
- 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 -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 +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 +97 -97
- 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 +88 -88
- 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 +176 -175
- 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 -81
- 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 +114 -60
- package/docs/design-system/components/item.md +59 -59
- package/docs/design-system/components/kbd.md +51 -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 +110 -99
- 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 -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 -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 -59
- 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 -454
- package/registry/components/autocomplete.tsx +598 -651
- package/registry/components/avatar.tsx +385 -385
- 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 -1289
- 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 -60
- 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 -260
- 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 -135
- 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 -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/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 -979
- package/registry/components/item.tsx +189 -189
- package/registry/components/kbd.tsx +246 -245
- 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 -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/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 -1230
- 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 -235
- 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 -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 -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 -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/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 +1403 -155
- package/registry/styles/globals.css +946 -1088
- package/registry.json +361 -8
- 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 +306 -192
|
@@ -1,89 +1,92 @@
|
|
|
1
|
-
# Toolbar
|
|
2
|
-
|
|
3
|
-
Toolbar is the token-built implementation of the Figma `Filter Toolbar` component set. It supports eight filter/action layouts, desktop and mobile wrapping,
|
|
4
|
-
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npx banhaten add toolbar
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Anatomy
|
|
12
|
-
|
|
13
|
-
- `Toolbar`: root layout surface with `inline`, `split`, `stack`, and `wrap` modes.
|
|
14
|
-
- `ToolbarSection`: grouped start, end, wrapped, or stacked control regions.
|
|
15
|
-
- `ToolbarSearch`: tokenized search input using Banhaten input height, radius, typography, and focus ring.
|
|
16
|
-
- `ToolbarSelect`: button-backed filter trigger using select/input tokens.
|
|
17
|
-
- `ToolbarButton`: toolbar action button built with the same Slot and text-label construction as Button.
|
|
18
|
-
- `ToolbarIconButton`, `ToolbarFilterButton`, `ToolbarMoreButton`: icon action helpers.
|
|
19
|
-
- `ToolbarBadge`: selected-count or applied-filter metadata.
|
|
20
|
-
- `ToolbarText` and `ToolbarSpacer`: supporting label and layout slots.
|
|
21
|
-
|
|
22
|
-
## Example
|
|
23
|
-
|
|
24
|
-
```tsx
|
|
25
|
-
import {
|
|
26
|
-
Toolbar,
|
|
27
|
-
ToolbarButton,
|
|
28
|
-
ToolbarFilterButton,
|
|
29
|
-
ToolbarMoreButton,
|
|
30
|
-
ToolbarSearch,
|
|
31
|
-
ToolbarSection,
|
|
32
|
-
ToolbarSelect,
|
|
33
|
-
} from "@/components/ui/toolbar"
|
|
34
|
-
|
|
35
|
-
export function Example() {
|
|
36
|
-
return (
|
|
37
|
-
<Toolbar layout="split" wrap>
|
|
38
|
-
<ToolbarSection grow wrap>
|
|
39
|
-
<ToolbarSearch aria-label="Search objects" />
|
|
40
|
-
<ToolbarSelect value="Status" />
|
|
41
|
-
<ToolbarSelect value="Owner" />
|
|
42
|
-
<ToolbarFilterButton />
|
|
43
|
-
</ToolbarSection>
|
|
44
|
-
<ToolbarSection align="end" wrap>
|
|
45
|
-
<ToolbarMoreButton />
|
|
46
|
-
<ToolbarButton variant="soft">Export</ToolbarButton>
|
|
47
|
-
<ToolbarButton>Create Object</ToolbarButton>
|
|
48
|
-
</ToolbarSection>
|
|
49
|
-
</Toolbar>
|
|
50
|
-
)
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Token Contract
|
|
55
|
-
|
|
56
|
-
Toolbar styling is derived from the existing control tokens: `--bh-input-lg-height`, `--bh-input-radius`, `--bh-input-width`, `--bh-select-width`, `--bh-space-xl-12`, `--bh-space-3xl-16`, `--bh-control-default`, input/select/button
|
|
57
|
-
|
|
58
|
-
## RTL
|
|
59
|
-
|
|
60
|
-
Set `dir="rtl"` on `Toolbar` or inherit it from the document. Sections, fields, button labels, badges, and search text use logical spacing and `dir="auto"` for mixed-language labels.
|
|
61
|
-
|
|
62
|
-
## API
|
|
63
|
-
|
|
64
|
-
Supported runtime exports: `Toolbar`, `ToolbarBadge`, `ToolbarButton`, `ToolbarFilterButton`, `ToolbarIconButton`, `ToolbarMoreButton`, `ToolbarSearch`, `ToolbarSection`, `ToolbarSelect`, `ToolbarSpacer`, `ToolbarText`, `toolbarBadgeVariants`, `toolbarButtonVariants`, `toolbarSearchVariants`, `toolbarSectionVariants`, `toolbarSelectVariants`, `toolbarVariants`.
|
|
65
|
-
|
|
66
|
-
| Contract | Values |
|
|
67
|
-
| --- | --- |
|
|
68
|
-
| `styles` | `filter-fields`, `filter-actions`, `selection-actions`, `grouped-fields`, `field-grid`, `inline-search`, `filter-chips`, `saved-segment` |
|
|
69
|
-
| `layouts` | `inline`, `split`, `stack`, `wrap` |
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
- `
|
|
81
|
-
- `
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
1
|
+
# Toolbar
|
|
2
|
+
|
|
3
|
+
Toolbar is the token-built implementation of the Figma `Filter Toolbar` component set. It supports eight filter/action layouts, desktop and mobile wrapping, inherited LTR/RTL direction, and layout-group semantics that preserve each control's native Tab and arrow-key behavior.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx banhaten add toolbar
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Anatomy
|
|
12
|
+
|
|
13
|
+
- `Toolbar`: root layout surface with `inline`, `split`, `stack`, and `wrap` modes. It defaults to `role="group"`, not the composite-widget `toolbar` role.
|
|
14
|
+
- `ToolbarSection`: grouped start, end, wrapped, or stacked control regions.
|
|
15
|
+
- `ToolbarSearch`: tokenized search input using Banhaten input height, radius, typography, and focus ring.
|
|
16
|
+
- `ToolbarSelect`: button-backed filter trigger using select/input tokens.
|
|
17
|
+
- `ToolbarButton`: toolbar action button built with the same Slot and text-label construction as Button.
|
|
18
|
+
- `ToolbarIconButton`, `ToolbarFilterButton`, `ToolbarMoreButton`: icon action helpers.
|
|
19
|
+
- `ToolbarBadge`: selected-count or applied-filter metadata.
|
|
20
|
+
- `ToolbarText` and `ToolbarSpacer`: supporting label and layout slots.
|
|
21
|
+
|
|
22
|
+
## Example
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import {
|
|
26
|
+
Toolbar,
|
|
27
|
+
ToolbarButton,
|
|
28
|
+
ToolbarFilterButton,
|
|
29
|
+
ToolbarMoreButton,
|
|
30
|
+
ToolbarSearch,
|
|
31
|
+
ToolbarSection,
|
|
32
|
+
ToolbarSelect,
|
|
33
|
+
} from "@/components/ui/toolbar"
|
|
34
|
+
|
|
35
|
+
export function Example() {
|
|
36
|
+
return (
|
|
37
|
+
<Toolbar aria-label="Object filters and actions" layout="split" wrap>
|
|
38
|
+
<ToolbarSection grow wrap>
|
|
39
|
+
<ToolbarSearch aria-label="Search objects" />
|
|
40
|
+
<ToolbarSelect value="Status" />
|
|
41
|
+
<ToolbarSelect value="Owner" />
|
|
42
|
+
<ToolbarFilterButton />
|
|
43
|
+
</ToolbarSection>
|
|
44
|
+
<ToolbarSection align="end" wrap>
|
|
45
|
+
<ToolbarMoreButton />
|
|
46
|
+
<ToolbarButton variant="soft">Export</ToolbarButton>
|
|
47
|
+
<ToolbarButton>Create Object</ToolbarButton>
|
|
48
|
+
</ToolbarSection>
|
|
49
|
+
</Toolbar>
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Token Contract
|
|
55
|
+
|
|
56
|
+
Toolbar styling is derived from the existing control tokens: `--bh-input-lg-height`, `--bh-input-radius`, `--bh-input-width`, `--bh-select-width`, `--bh-space-xl-12`, `--bh-space-3xl-16`, `--bh-control-default`, input/select/button elevation, and semantic content/interactive tokens.
|
|
57
|
+
|
|
58
|
+
## RTL
|
|
59
|
+
|
|
60
|
+
Set `dir="rtl"` on `Toolbar` or inherit it from the document. Sections, fields, button labels, badges, and search text use logical spacing and `dir="auto"` for mixed-language labels.
|
|
61
|
+
|
|
62
|
+
## API
|
|
63
|
+
|
|
64
|
+
Supported runtime exports: `Toolbar`, `ToolbarBadge`, `ToolbarButton`, `ToolbarFilterButton`, `ToolbarIconButton`, `ToolbarMoreButton`, `ToolbarSearch`, `ToolbarSection`, `ToolbarSelect`, `ToolbarSpacer`, `ToolbarText`, `toolbarBadgeVariants`, `toolbarButtonVariants`, `toolbarSearchVariants`, `toolbarSectionVariants`, `toolbarSelectVariants`, `toolbarVariants`.
|
|
65
|
+
|
|
66
|
+
| Contract | Values |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| `styles` | `filter-fields`, `filter-actions`, `selection-actions`, `grouped-fields`, `field-grid`, `inline-search`, `filter-chips`, `saved-segment` |
|
|
69
|
+
| `layouts` | `inline`, `split`, `stack`, `wrap` |
|
|
70
|
+
| `role` | Defaults to `group`; explicit overrides are forwarded. |
|
|
71
|
+
|
|
72
|
+
## Examples
|
|
73
|
+
|
|
74
|
+
Primary registry example: `examples/toolbar-demo.tsx`.
|
|
75
|
+
|
|
76
|
+
Open the live component page or run `npx banhaten docs toolbar` to inspect source files, install command, and examples.
|
|
77
|
+
|
|
78
|
+
## RTL Rules
|
|
79
|
+
|
|
80
|
+
- `inheritsDirection`: true
|
|
81
|
+
- `textAlignment`: Uses logical section layout and dir="auto" labels so mixed English and Arabic filter text aligns naturally.
|
|
82
|
+
- `spacing`: Uses tokenized flex gaps and logical icon attributes so search, fields, chips, summaries, and actions mirror without alternate APIs.
|
|
83
|
+
|
|
84
|
+
## Accessibility
|
|
85
|
+
|
|
86
|
+
`Toolbar` defaults to `role="group"` because it is a flexible layout surface, not a composite widget. The root is not a tab stop, every enabled control remains in the native Tab sequence, and the component does not intercept arrow keys used by search fields, selects, or nested widgets. Give the group an accessible name when its purpose is not already clear from surrounding content.
|
|
87
|
+
|
|
88
|
+
Only override the root with `role="toolbar"` when the application also implements the complete [W3C Toolbar Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/): one Tab stop into the widget, managed arrow-key focus between controls, an accessible name, and orientation behavior. The role override alone does not add that keyboard model.
|
|
89
|
+
|
|
87
90
|
<!-- registry-contract:start -->
|
|
88
91
|
## Registry Contract
|
|
89
92
|
|
|
@@ -97,9 +100,11 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
97
100
|
| `registryDependencies` | `kbd` |
|
|
98
101
|
| `props.density` | `"compact" \| "default" \| "comfortable"; default "default"; Aligns Toolbar Search, Select, Text, and Button controls to the shared 32px, 36px, or 40px control contract.` |
|
|
99
102
|
| `props.shortcutKeys` | `readonly string[]; default null; Adds shared, platform-aware Kbd keycaps to ToolbarSearch without rebuilding a shortcut badge locally.` |
|
|
103
|
+
| `props.role` | `React.AriaRole; default "group"; Uses layout-group semantics and native Tab order by default. Applications that override this to toolbar own the complete roving-focus and arrow-key contract.` |
|
|
100
104
|
| `breakpoints` | `desktop`, `mobile` |
|
|
101
105
|
| `densities` | `compact`, `default`, `comfortable` |
|
|
106
|
+
| `features` | `native Tab-order layout grouping` |
|
|
102
107
|
| `layouts` | `inline`, `split`, `stack`, `wrap` |
|
|
103
108
|
| `styles` | `filter-fields`, `filter-actions`, `selection-actions`, `grouped-fields`, `field-grid`, `inline-search`, `filter-chips`, `saved-segment` |
|
|
104
|
-
| `tokens` | `--bh-bg-brand-subtle`, `--bh-bg-default-hover`, `--bh-bg-neutral-subtle`, `--bh-border-brand-strong`, `--bh-border-danger-strong`, `--bh-border-default`, `--bh-border-disabled`, `--bh-border-width-default`, `--bh-button-gap`, `--bh-button-gap-xs`, `--bh-button-icon-offset`, `--bh-button-icon-size`, `--bh-button-icon-slot-size`, `--bh-button-label-padding-x`, `--bh-button-md-height`, `--bh-button-md-padding-x`, `--bh-button-sm-height`, `--bh-button-sm-padding-x`, `--bh-button-sm-padding-y`, `--bh-button-xs-height`, `--bh-button-xs-padding-x`, `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-muted`, `--bh-content-on-brand`, `--bh-content-subtle`, `--bh-control-default`, `--bh-input-comfortable-height`, `--bh-input-comfortable-padding-x`, `--bh-input-content-gap`, `--bh-input-lg-height`, `--bh-input-lg-padding-x`, `--bh-input-md-height`, `--bh-input-md-padding-x`, `--bh-input-radius`, `--bh-input-width`, `--bh-interactive-brand-default`, `--bh-interactive-brand-disabled`, `--bh-interactive-brand-hover`, `--bh-interactive-brand-pressed`, `--bh-interactive-ghost-default`, `--bh-interactive-ghost-disabled`, `--bh-interactive-ghost-hover`, `--bh-interactive-ghost-pressed`, `--bh-interactive-input-default`, `--bh-interactive-input-disabled`, `--bh-interactive-outlined-default`, `--bh-interactive-outlined-disabled`, `--bh-interactive-outlined-hover`, `--bh-interactive-outlined-pressed`, `--bh-interactive-soft-default`, `--bh-interactive-soft-disabled`, `--bh-interactive-soft-hover`, `--bh-interactive-soft-pressed`, `--bh-radius-full`, `--bh-select-icon-size`, `--bh-select-icon-slot-size`, `--bh-select-trigger-padding-x`, `--bh-select-width`, `--bh-space-19xl-384`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-md-8`, `--bh-space-none`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-text-body-2xs-medium-font-size`, `--bh-text-body-2xs-medium-font-weight`, `--bh-text-body-2xs-medium-letter-spacing`, `--bh-text-body-2xs-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-button-font-size`, `--bh-text-button-font-weight`, `--bh-text-button-letter-spacing`, `--bh-text-button-line-height`, `--
|
|
109
|
+
| `tokens` | `--bh-bg-brand-subtle`, `--bh-bg-default-hover`, `--bh-bg-neutral-subtle`, `--bh-border-brand-strong`, `--bh-border-danger-strong`, `--bh-border-default`, `--bh-border-disabled`, `--bh-border-width-default`, `--bh-button-gap`, `--bh-button-gap-xs`, `--bh-button-icon-offset`, `--bh-button-icon-size`, `--bh-button-icon-slot-size`, `--bh-button-label-padding-x`, `--bh-button-md-height`, `--bh-button-md-padding-x`, `--bh-button-sm-height`, `--bh-button-sm-padding-x`, `--bh-button-sm-padding-y`, `--bh-button-xs-height`, `--bh-button-xs-padding-x`, `--bh-content-brand-default`, `--bh-content-default`, `--bh-content-disabled`, `--bh-content-muted`, `--bh-content-on-brand`, `--bh-content-subtle`, `--bh-control-default`, `--bh-input-comfortable-height`, `--bh-input-comfortable-padding-x`, `--bh-input-content-gap`, `--bh-input-lg-height`, `--bh-input-lg-padding-x`, `--bh-input-md-height`, `--bh-input-md-padding-x`, `--bh-input-radius`, `--bh-input-width`, `--bh-interactive-brand-default`, `--bh-interactive-brand-disabled`, `--bh-interactive-brand-hover`, `--bh-interactive-brand-pressed`, `--bh-interactive-ghost-default`, `--bh-interactive-ghost-disabled`, `--bh-interactive-ghost-hover`, `--bh-interactive-ghost-pressed`, `--bh-interactive-input-default`, `--bh-interactive-input-disabled`, `--bh-interactive-outlined-default`, `--bh-interactive-outlined-disabled`, `--bh-interactive-outlined-hover`, `--bh-interactive-outlined-pressed`, `--bh-interactive-soft-default`, `--bh-interactive-soft-disabled`, `--bh-interactive-soft-hover`, `--bh-interactive-soft-pressed`, `--bh-radius-full`, `--bh-select-icon-size`, `--bh-select-icon-slot-size`, `--bh-select-trigger-padding-x`, `--bh-select-width`, `--bh-space-19xl-384`, `--bh-space-3xl-16`, `--bh-space-5xl-24`, `--bh-space-md-8`, `--bh-space-none`, `--bh-space-xl-12`, `--bh-space-xs-4`, `--bh-text-body-2xs-medium-font-size`, `--bh-text-body-2xs-medium-font-weight`, `--bh-text-body-2xs-medium-letter-spacing`, `--bh-text-body-2xs-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-button-font-size`, `--bh-text-button-font-weight`, `--bh-text-button-letter-spacing`, `--bh-text-button-line-height`, `--elevation-button-danger-focus`, `--elevation-button-focus`, `--elevation-button-raised`, `--elevation-button-soft`, `--elevation-input`, `--elevation-input-focus-ring`, `--elevation-select-trigger` |
|
|
105
110
|
<!-- registry-contract:end -->
|
|
@@ -1,94 +1,95 @@
|
|
|
1
|
-
# Tooltip
|
|
2
|
-
|
|
3
|
-
Tooltip is a Radix Tooltip-backed help surface matched to the Figma tooltip matrix. It supports dark and default surfaces, small and large sizes, shortcut and close slots, logical pointer positions, tokenized
|
|
4
|
-
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npx banhaten add tooltip
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Anatomy
|
|
12
|
-
|
|
13
|
-
- `TooltipProvider`: shared Radix provider for delay timing.
|
|
14
|
-
- `Tooltip`: root tooltip wrapper.
|
|
15
|
-
- `TooltipTrigger`: trigger element.
|
|
16
|
-
- `TooltipContent`: positioned surface with pointer, title, support text, shortcut, and close affordance.
|
|
17
|
-
- `TooltipShortcut`: shortcut slot.
|
|
18
|
-
- `TooltipCloseButton`: optional close affordance.
|
|
19
|
-
|
|
20
|
-
## Example
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
import {
|
|
24
|
-
Tooltip,
|
|
25
|
-
TooltipContent,
|
|
26
|
-
TooltipProvider,
|
|
27
|
-
TooltipTrigger,
|
|
28
|
-
} from "@/components/ui/tooltip"
|
|
29
|
-
import { Button } from "@/components/ui/button"
|
|
30
|
-
|
|
31
|
-
export function Example() {
|
|
32
|
-
return (
|
|
33
|
-
<TooltipProvider>
|
|
34
|
-
<Tooltip>
|
|
35
|
-
<TooltipTrigger asChild>
|
|
36
|
-
<Button variant="secondary">Details</Button>
|
|
37
|
-
</TooltipTrigger>
|
|
38
|
-
<TooltipContent pointerPosition="top-center" size="lg">
|
|
39
|
-
More information
|
|
40
|
-
</TooltipContent>
|
|
41
|
-
</Tooltip>
|
|
42
|
-
</TooltipProvider>
|
|
43
|
-
)
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Variants
|
|
48
|
-
|
|
49
|
-
| Prop | Values |
|
|
50
|
-
| --- | --- |
|
|
51
|
-
| `variant` | `dark`, `default` |
|
|
52
|
-
| `size` | `sm`, `lg` |
|
|
53
|
-
| `pointerPosition` | `top-left`, `top-center`, `top-right`, `bottom-left`, `bottom-center`, `bottom-right`, `center-left`, `center-right`, `none` |
|
|
54
|
-
| `showPointer` | `boolean` |
|
|
55
|
-
|
|
56
|
-
## RTL
|
|
57
|
-
|
|
58
|
-
Tooltip content uses inherited direction and `dir="auto"` text. Top and bottom left/right positions map to logical start/end in RTL, while center-left and center-right remain physical sides to match the Figma matrix.
|
|
59
|
-
|
|
60
|
-
## API
|
|
61
|
-
|
|
62
|
-
Supported runtime exports: `Tooltip`, `TooltipCloseButton`, `TooltipContent`, `TooltipPortal`, `TooltipProvider`, `TooltipRoot`, `TooltipShortcut`, `TooltipTrigger`, `tooltipContentVariants`.
|
|
63
|
-
|
|
64
|
-
| Contract | Values |
|
|
65
|
-
| --- | --- |
|
|
66
|
-
| `variants` | `dark`, `default` |
|
|
67
|
-
| `sizes` | `sm`, `lg` |
|
|
68
|
-
|
|
69
|
-
## Examples
|
|
70
|
-
|
|
71
|
-
Primary registry example: `examples/tooltip-demo.tsx`.
|
|
72
|
-
|
|
73
|
-
Open the live component page or run `npx banhaten docs tooltip` to inspect source files, install command, and examples.
|
|
74
|
-
|
|
75
|
-
## Token Contract
|
|
76
|
-
|
|
77
|
-
Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
|
|
78
|
-
Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
|
|
79
|
-
Covered source files: `components/tooltip.tsx`.
|
|
80
|
-
|
|
81
|
-
## RTL Rules
|
|
82
|
-
|
|
83
|
-
- `inheritsDirection`: true
|
|
84
|
-
- `spacing`: Uses inherited direction with flex layout so label/shortcut and text/close order mirror naturally.
|
|
85
|
-
- `pointerPlacement`: Top and bottom left/right positions map to logical start/end in RTL. Center-left and center-right remain physical sides to match the Figma matrix.
|
|
86
|
-
- `textDirection`: Labels and support text use dir="auto" for Arabic and English copy.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
1
|
+
# Tooltip
|
|
2
|
+
|
|
3
|
+
Tooltip is a Radix Tooltip-backed help surface matched to the Figma tooltip matrix. It supports dark and default surfaces, small and large sizes, shortcut and close slots, logical pointer positions, tokenized elevation, and RTL-safe layout.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx banhaten add tooltip
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Anatomy
|
|
12
|
+
|
|
13
|
+
- `TooltipProvider`: shared Radix provider for delay timing.
|
|
14
|
+
- `Tooltip`: root tooltip wrapper.
|
|
15
|
+
- `TooltipTrigger`: trigger element.
|
|
16
|
+
- `TooltipContent`: positioned surface with pointer, title, support text, shortcut, and close affordance.
|
|
17
|
+
- `TooltipShortcut`: direction-isolated physical shortcut slot.
|
|
18
|
+
- `TooltipCloseButton`: optional close affordance.
|
|
19
|
+
|
|
20
|
+
## Example
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import {
|
|
24
|
+
Tooltip,
|
|
25
|
+
TooltipContent,
|
|
26
|
+
TooltipProvider,
|
|
27
|
+
TooltipTrigger,
|
|
28
|
+
} from "@/components/ui/tooltip"
|
|
29
|
+
import { Button } from "@/components/ui/button"
|
|
30
|
+
|
|
31
|
+
export function Example() {
|
|
32
|
+
return (
|
|
33
|
+
<TooltipProvider>
|
|
34
|
+
<Tooltip>
|
|
35
|
+
<TooltipTrigger asChild>
|
|
36
|
+
<Button variant="secondary">Details</Button>
|
|
37
|
+
</TooltipTrigger>
|
|
38
|
+
<TooltipContent pointerPosition="top-center" size="lg">
|
|
39
|
+
More information
|
|
40
|
+
</TooltipContent>
|
|
41
|
+
</Tooltip>
|
|
42
|
+
</TooltipProvider>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Variants
|
|
48
|
+
|
|
49
|
+
| Prop | Values |
|
|
50
|
+
| --- | --- |
|
|
51
|
+
| `variant` | `dark`, `default` |
|
|
52
|
+
| `size` | `sm`, `lg` |
|
|
53
|
+
| `pointerPosition` | `top-left`, `top-center`, `top-right`, `bottom-left`, `bottom-center`, `bottom-right`, `center-left`, `center-right`, `none` |
|
|
54
|
+
| `showPointer` | `boolean` |
|
|
55
|
+
|
|
56
|
+
## RTL
|
|
57
|
+
|
|
58
|
+
Tooltip content uses inherited direction and `dir="auto"` text. `TooltipShortcut` defaults to `dir="ltr"` so physical modifiers and keys do not reorder inside RTL tooltips. Top and bottom left/right positions map to logical start/end in RTL, while center-left and center-right remain physical sides to match the Figma matrix.
|
|
59
|
+
|
|
60
|
+
## API
|
|
61
|
+
|
|
62
|
+
Supported runtime exports: `Tooltip`, `TooltipCloseButton`, `TooltipContent`, `TooltipPortal`, `TooltipProvider`, `TooltipRoot`, `TooltipShortcut`, `TooltipTrigger`, `tooltipContentVariants`.
|
|
63
|
+
|
|
64
|
+
| Contract | Values |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| `variants` | `dark`, `default` |
|
|
67
|
+
| `sizes` | `sm`, `lg` |
|
|
68
|
+
|
|
69
|
+
## Examples
|
|
70
|
+
|
|
71
|
+
Primary registry example: `examples/tooltip-demo.tsx`.
|
|
72
|
+
|
|
73
|
+
Open the live component page or run `npx banhaten docs tooltip` to inspect source files, install command, and examples.
|
|
74
|
+
|
|
75
|
+
## Token Contract
|
|
76
|
+
|
|
77
|
+
Component styles must resolve through Banhaten semantic tokens, component aliases, or documented exception-ledger values.
|
|
78
|
+
Do not add raw colors, pixel values, opacity utilities, z-index values, durations, or shadow literals directly to component source.
|
|
79
|
+
Covered source files: `components/tooltip.tsx`.
|
|
80
|
+
|
|
81
|
+
## RTL Rules
|
|
82
|
+
|
|
83
|
+
- `inheritsDirection`: true
|
|
84
|
+
- `spacing`: Uses inherited direction with flex layout so label/shortcut and text/close order mirror naturally.
|
|
85
|
+
- `pointerPlacement`: Top and bottom left/right positions map to logical start/end in RTL. Center-left and center-right remain physical sides to match the Figma matrix.
|
|
86
|
+
- `textDirection`: Labels and support text use dir="auto" for Arabic and English copy.
|
|
87
|
+
- `shortcutDirection`: TooltipShortcut defaults to dir="ltr" so physical key order remains stable inside RTL content.
|
|
88
|
+
|
|
89
|
+
## Accessibility
|
|
90
|
+
|
|
91
|
+
This component relies on `@radix-ui/react-tooltip` for its base accessibility behavior. Keep required labels, titles, descriptions, and focusable trigger/content relationships intact when composing it.
|
|
92
|
+
|
|
92
93
|
<!-- registry-contract:start -->
|
|
93
94
|
## Registry Contract
|
|
94
95
|
|
|
@@ -100,8 +101,9 @@ This table is generated from `registry/index.json`; edit the component-owned sou
|
|
|
100
101
|
| `supportedExports` | `components/tooltip.tsx: Tooltip, TooltipCloseButton, TooltipContent, TooltipPortal, TooltipProvider, TooltipRoot, TooltipShortcut, TooltipTrigger, tooltipContentVariants` |
|
|
101
102
|
| `parts` | `Tooltip`, `TooltipRoot`, `TooltipTrigger`, `TooltipContent`, `TooltipProvider`, `TooltipPortal`, `TooltipShortcut`, `TooltipCloseButton` |
|
|
102
103
|
| `registryDependencies` | None |
|
|
104
|
+
| `props.dir` | `"ltr" \| "rtl" \| "auto"; default "ltr"; TooltipShortcut only: keeps key glyphs in physical order inside RTL tooltips. Override only for localized non-shortcut text.` |
|
|
103
105
|
| `pointerPositions` | `top-left`, `top-center`, `top-right`, `bottom-left`, `bottom-center`, `bottom-right`, `center-right`, `center-left`, `none` |
|
|
104
106
|
| `sizes` | `sm`, `lg` |
|
|
105
|
-
| `tokens` | `--bh-bg-always-dark`, `--bh-bg-neutral-soft`, `--bh-bg-neutral-subtle`, `--bh-bg-raised`, `--bh-border-inverse-subtle`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-content-default`, `--bh-content-on-color`, `--bh-content-subtle`, `--bh-font-family`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-radius-full`, `--bh-radius-sm-4`, `--bh-space-md-8`, `--bh-space-none`, `--bh-space-xs-4`, `--bh-space-xxxs-1`, `--bh-text-base-letter-spacing`, `--bh-text-body-2xs-medium-font-size`, `--bh-text-body-2xs-medium-font-weight`, `--bh-text-body-2xs-medium-letter-spacing`, `--bh-text-body-2xs-medium-line-height`, `--bh-text-body-2xs-regular-font-size`, `--bh-text-body-2xs-regular-font-weight`, `--bh-text-body-2xs-regular-letter-spacing`, `--bh-text-body-2xs-regular-line-height`, `--bh-text-body-sm-medium-font-size`, `--bh-text-body-sm-medium-font-weight`, `--bh-text-body-sm-medium-letter-spacing`, `--bh-text-body-sm-medium-line-height`, `--bh-tooltip-bg`, `--bh-tooltip-border`, `--bh-tooltip-close-fg`, `--bh-tooltip-close-icon-size`, `--bh-tooltip-close-size`, `--bh-tooltip-fg`, `--bh-tooltip-lg-padding`, `--bh-tooltip-lg-radius`, `--bh-tooltip-lg-width`, `--bh-tooltip-max-width`, `--bh-tooltip-pointer-border-depth`, `--bh-tooltip-pointer-border-half-width`, `--bh-tooltip-pointer-border-offset`, `--bh-tooltip-pointer-depth`, `--bh-tooltip-pointer-half-width`, `--bh-tooltip-pointer-inline-offset`, `--bh-tooltip-pointer-offset`, `--bh-tooltip-pointer-width`, `--bh-tooltip-
|
|
107
|
+
| `tokens` | `--bh-bg-always-dark`, `--bh-bg-neutral-soft`, `--bh-bg-neutral-subtle`, `--bh-bg-raised`, `--bh-border-inverse-subtle`, `--bh-border-subtle`, `--bh-border-width-default`, `--bh-content-default`, `--bh-content-on-color`, `--bh-content-subtle`, `--bh-font-family`, `--bh-icon-stroke-200`, `--bh-interactive-ghost-hover`, `--bh-radius-full`, `--bh-radius-sm-4`, `--bh-space-md-8`, `--bh-space-none`, `--bh-space-xs-4`, `--bh-space-xxxs-1`, `--bh-text-base-letter-spacing`, `--bh-text-body-2xs-medium-font-size`, `--bh-text-body-2xs-medium-font-weight`, `--bh-text-body-2xs-medium-letter-spacing`, `--bh-text-body-2xs-medium-line-height`, `--bh-text-body-2xs-regular-font-size`, `--bh-text-body-2xs-regular-font-weight`, `--bh-text-body-2xs-regular-letter-spacing`, `--bh-text-body-2xs-regular-line-height`, `--bh-text-body-sm-medium-font-size`, `--bh-text-body-sm-medium-font-weight`, `--bh-text-body-sm-medium-letter-spacing`, `--bh-text-body-sm-medium-line-height`, `--bh-tooltip-bg`, `--bh-tooltip-border`, `--bh-tooltip-close-fg`, `--bh-tooltip-close-icon-size`, `--bh-tooltip-close-size`, `--bh-tooltip-elevation`, `--bh-tooltip-fg`, `--bh-tooltip-lg-padding`, `--bh-tooltip-lg-radius`, `--bh-tooltip-lg-width`, `--bh-tooltip-max-width`, `--bh-tooltip-pointer-border-depth`, `--bh-tooltip-pointer-border-half-width`, `--bh-tooltip-pointer-border-offset`, `--bh-tooltip-pointer-depth`, `--bh-tooltip-pointer-half-width`, `--bh-tooltip-pointer-inline-offset`, `--bh-tooltip-pointer-offset`, `--bh-tooltip-pointer-width`, `--bh-tooltip-shortcut-bg`, `--bh-tooltip-shortcut-border`, `--bh-tooltip-shortcut-height`, `--bh-tooltip-shortcut-min-width`, `--bh-tooltip-sm-padding-x`, `--bh-tooltip-sm-padding-y`, `--bh-tooltip-sm-radius`, `--bh-z-overlay`, `--bh-z-raised`, `--elevation-04`, `--elevation-button-focus` |
|
|
106
108
|
| `variants` | `dark`, `default` |
|
|
107
109
|
<!-- registry-contract:end -->
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
# Typography
|
|
2
|
-
|
|
3
|
-
Banhaten exposes text utility classes generated from the design token contract. Use `.bh-text-*` classes when you need token-exact typography without pulling in a React component.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```html
|
|
8
|
-
<h1 class="bh-text-heading-lg-semibold">Workspace overview</h1>
|
|
9
|
-
<p class="bh-text-body-md-regular">Review project status and owners.</p>
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Families
|
|
13
|
-
|
|
14
|
-
The classes mirror token names across Display, Heading, and Body styles. Each class applies font size, line height, font weight, and letter spacing from `registry/styles/globals.css`.
|
|
15
|
-
|
|
16
|
-
## RTL
|
|
17
|
-
|
|
18
|
-
Typography classes do not set direction. Use `dir`, `lang`, and logical text alignment on the surrounding element.
|
|
1
|
+
# Typography
|
|
2
|
+
|
|
3
|
+
Banhaten exposes text utility classes generated from the design token contract. Use `.bh-text-*` classes when you need token-exact typography without pulling in a React component.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<h1 class="bh-text-heading-lg-semibold">Workspace overview</h1>
|
|
9
|
+
<p class="bh-text-body-md-regular">Review project status and owners.</p>
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Families
|
|
13
|
+
|
|
14
|
+
The classes mirror token names across Display, Heading, and Body styles. Each class applies font size, line height, font weight, and letter spacing from `registry/styles/globals.css`.
|
|
15
|
+
|
|
16
|
+
## RTL
|
|
17
|
+
|
|
18
|
+
Typography classes do not set direction. Use `dir`, `lang`, and logical text alignment on the surrounding element.
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
# Density and Elevation
|
|
2
|
-
|
|
3
|
-
## Density
|
|
4
|
-
|
|
5
|
-
Banhaten exposes one semantic density contract for controls that must align in a
|
|
6
|
-
product surface:
|
|
7
|
-
|
|
8
|
-
| Density | Height | Typical use |
|
|
9
|
-
| --- | ---: | --- |
|
|
10
|
-
| `compact` | 32px | Dense desktop tables and constrained toolbars |
|
|
11
|
-
| `default` | 36px | Standard forms, search, filters, and actions |
|
|
12
|
-
| `comfortable` | 40px | Prominent forms and less dense product areas |
|
|
13
|
-
|
|
14
|
-
Use `density` when Input, Select, Date Picker, Button, Button Group, Segmented
|
|
15
|
-
Control, or Toolbar controls sit in the same row. The semantic prop overrides
|
|
16
|
-
the component's legacy `size` prop. Existing `size` values remain supported for
|
|
17
|
-
compatibility and for component-specific variants outside the shared 32/36/40
|
|
18
|
-
control family.
|
|
19
|
-
|
|
20
|
-
```tsx
|
|
21
|
-
<Input density="default" />
|
|
22
|
-
<Select density="default" />
|
|
23
|
-
<DatePicker density="default" />
|
|
24
|
-
<Button density="default">Apply</Button>
|
|
25
|
-
<ToggleGroup density="default" />
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Do not align controls by adding raw `h-*`, padding, radius, or font-size
|
|
29
|
-
utilities. Choose one semantic density at the containing form or toolbar and
|
|
30
|
-
pass it to every control. Compact controls are intended for pointer-led desktop
|
|
31
|
-
interfaces; products with touch requirements should prefer `comfortable` or
|
|
32
|
-
provide a larger interaction target around the control.
|
|
33
|
-
|
|
34
|
-
This is a component composition contract, not a global scale transform. It does
|
|
35
|
-
not silently resize navigation, cards, typography, or unrelated layout spacing.
|
|
36
|
-
|
|
37
|
-
## Elevation
|
|
38
|
-
|
|
39
|
-
Elevation uses two layers:
|
|
40
|
-
|
|
41
|
-
- General steps: `--
|
|
42
|
-
- Semantic
|
|
43
|
-
|
|
44
|
-
The seven general steps mirror the current Figma `elevation/01` through
|
|
45
|
-
`elevation/07` effect styles in [Shadow tests → With Variables](https://www.figma.com/design/LVAWtr5A5oEcAvsBmk6vdt/Banhaten-Design-system-3.0?node-id=6436-13190).
|
|
46
|
-
The geometry is shared across modes. Figma's bound shadow color variables make
|
|
47
|
-
the dark-mode drops, rings, and highlights stronger, so Banhaten publishes a
|
|
48
|
-
separate exact recipe for each mode.
|
|
49
|
-
|
|
50
|
-
| CSS
|
|
51
|
-
| --- | --- | --- |
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
59
|
-
|
|
60
|
-
Components consume the semantic alias that describes purpose rather than
|
|
61
|
-
selecting a visual step directly. Focus rings
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
elevation, and intentional `none` values.
|
|
1
|
+
# Density and Elevation
|
|
2
|
+
|
|
3
|
+
## Density
|
|
4
|
+
|
|
5
|
+
Banhaten exposes one semantic density contract for controls that must align in a
|
|
6
|
+
product surface:
|
|
7
|
+
|
|
8
|
+
| Density | Height | Typical use |
|
|
9
|
+
| --- | ---: | --- |
|
|
10
|
+
| `compact` | 32px | Dense desktop tables and constrained toolbars |
|
|
11
|
+
| `default` | 36px | Standard forms, search, filters, and actions |
|
|
12
|
+
| `comfortable` | 40px | Prominent forms and less dense product areas |
|
|
13
|
+
|
|
14
|
+
Use `density` when Input, Select, Date Picker, Button, Button Group, Segmented
|
|
15
|
+
Control, or Toolbar controls sit in the same row. The semantic prop overrides
|
|
16
|
+
the component's legacy `size` prop. Existing `size` values remain supported for
|
|
17
|
+
compatibility and for component-specific variants outside the shared 32/36/40
|
|
18
|
+
control family.
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
<Input density="default" />
|
|
22
|
+
<Select density="default" />
|
|
23
|
+
<DatePicker density="default" />
|
|
24
|
+
<Button density="default">Apply</Button>
|
|
25
|
+
<ToggleGroup density="default" />
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Do not align controls by adding raw `h-*`, padding, radius, or font-size
|
|
29
|
+
utilities. Choose one semantic density at the containing form or toolbar and
|
|
30
|
+
pass it to every control. Compact controls are intended for pointer-led desktop
|
|
31
|
+
interfaces; products with touch requirements should prefer `comfortable` or
|
|
32
|
+
provide a larger interaction target around the control.
|
|
33
|
+
|
|
34
|
+
This is a component composition contract, not a global scale transform. It does
|
|
35
|
+
not silently resize navigation, cards, typography, or unrelated layout spacing.
|
|
36
|
+
|
|
37
|
+
## Elevation
|
|
38
|
+
|
|
39
|
+
Elevation uses two layers in one public namespace:
|
|
40
|
+
|
|
41
|
+
- General steps: `--elevation-01` through `--elevation-07`.
|
|
42
|
+
- Semantic aliases: `--elevation-component-*`, focus/danger rings, menus, controls, and component-specific treatments.
|
|
43
|
+
|
|
44
|
+
The seven general steps mirror the current Figma `elevation/01` through
|
|
45
|
+
`elevation/07` effect styles in [Shadow tests → With Variables](https://www.figma.com/design/LVAWtr5A5oEcAvsBmk6vdt/Banhaten-Design-system-3.0?node-id=6436-13190).
|
|
46
|
+
The geometry is shared across modes. Figma's bound shadow color variables make
|
|
47
|
+
the dark-mode drops, rings, and highlights stronger, so Banhaten publishes a
|
|
48
|
+
separate exact recipe for each mode.
|
|
49
|
+
|
|
50
|
+
| CSS token | Figma style | Current component roles |
|
|
51
|
+
| --- | --- | --- |
|
|
52
|
+
| `--elevation-01` | `elevation/01` | Flat surfaces with an ambient ring only |
|
|
53
|
+
| `--elevation-02` | `elevation/02` | Subtle lift for inner cards, inset panels, and compact raised details |
|
|
54
|
+
| `--elevation-03` | `elevation/03` | Cards, surfaces, slider thumbs, and toggle handles |
|
|
55
|
+
| `--elevation-04` | `elevation/04` | Menus, select menus, popovers, tooltips, and date surfaces |
|
|
56
|
+
| `--elevation-05` | `elevation/05` | Sticky and floating surfaces, including floating banners |
|
|
57
|
+
| `--elevation-06` | `elevation/06` | Modals and dialogs |
|
|
58
|
+
| `--elevation-07` | `elevation/07` | Full-overlay surfaces that require maximum depth |
|
|
59
|
+
|
|
60
|
+
Components consume the semantic alias that describes purpose rather than
|
|
61
|
+
selecting a visual step directly. Focus rings and inset borders remain distinct
|
|
62
|
+
effect recipes, but they share the `--elevation-*` public namespace so there is
|
|
63
|
+
no parallel shadow-token API. CSS `box-shadow` is only the browser rendering
|
|
64
|
+
mechanism. The Elevation documentation distinguishes surface depth, control
|
|
65
|
+
strokes, focus rings, overlay elevation, and intentional `none` values.
|