banhaten 0.1.2 → 0.2.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 +45 -0
- package/CONTRIBUTING.md +44 -0
- package/README.md +145 -328
- package/SECURITY.md +15 -0
- package/banhaten.config.example.json +1 -3
- package/docs/design-system/README.md +20 -0
- package/docs/design-system/adoption-quality-remediation.md +87 -0
- package/docs/design-system/agent-usage.md +13 -0
- package/docs/design-system/appearance-presets.md +189 -0
- package/docs/design-system/appearances/default.md +94 -0
- package/docs/design-system/appearances/rounded.md +95 -0
- package/docs/design-system/appearances/sharp.md +95 -0
- package/docs/design-system/component-docs-pattern.md +81 -0
- package/docs/design-system/component-showcase-consistency-report.md +217 -0
- package/docs/design-system/component-token-consistency-audit.md +173 -0
- package/docs/design-system/components/README.md +75 -0
- package/docs/design-system/components/accordion.md +67 -0
- package/docs/design-system/components/activity-feed.md +106 -0
- package/docs/design-system/components/alert-dialog.md +87 -0
- package/docs/design-system/components/alert.md +111 -0
- package/docs/design-system/components/aspect-ratio.md +59 -0
- package/docs/design-system/components/attribute.md +103 -0
- package/docs/design-system/components/autocomplete.md +93 -0
- package/docs/design-system/components/avatar.md +70 -0
- package/docs/design-system/components/badge.md +72 -0
- package/docs/design-system/components/banner.md +99 -0
- package/docs/design-system/components/breadcrumbs.md +188 -0
- package/docs/design-system/components/button-group.md +117 -0
- package/docs/design-system/components/button.md +95 -0
- package/docs/design-system/components/card.md +95 -0
- package/docs/design-system/components/carousel.md +61 -0
- package/docs/design-system/components/catalog-components.md +59 -0
- package/docs/design-system/components/chart.md +58 -0
- package/docs/design-system/components/checkbox.md +68 -0
- package/docs/design-system/components/collapsible.md +63 -0
- package/docs/design-system/components/command.md +75 -0
- package/docs/design-system/components/context-menu.md +59 -0
- package/docs/design-system/components/date-picker.md +97 -0
- package/docs/design-system/components/divider.md +117 -0
- package/docs/design-system/components/empty-state.md +72 -0
- package/docs/design-system/components/field.md +86 -0
- package/docs/design-system/components/file-upload.md +199 -0
- package/docs/design-system/components/hover-card.md +61 -0
- package/docs/design-system/components/icons.md +48 -0
- package/docs/design-system/components/input-group.md +73 -0
- package/docs/design-system/components/input-otp.md +73 -0
- package/docs/design-system/components/input.md +84 -0
- package/docs/design-system/components/item.md +72 -0
- package/docs/design-system/components/kbd.md +62 -0
- package/docs/design-system/components/label.md +64 -0
- package/docs/design-system/components/menu.md +76 -0
- package/docs/design-system/components/menubar.md +60 -0
- package/docs/design-system/components/modal.md +119 -0
- package/docs/design-system/components/native-select.md +70 -0
- package/docs/design-system/components/navigation-menu.md +63 -0
- package/docs/design-system/components/onboarding-step-list-item.md +94 -0
- package/docs/design-system/components/page-header.md +98 -0
- package/docs/design-system/components/pagination.md +71 -0
- package/docs/design-system/components/popover.md +77 -0
- package/docs/design-system/components/progress-slider.md +66 -0
- package/docs/design-system/components/progress.md +92 -0
- package/docs/design-system/components/radio-card.md +65 -0
- package/docs/design-system/components/radio-group.md +72 -0
- package/docs/design-system/components/resizable.md +57 -0
- package/docs/design-system/components/scroll-area.md +60 -0
- package/docs/design-system/components/segmented-control.md +71 -0
- package/docs/design-system/components/select.md +87 -0
- package/docs/design-system/components/sheet.md +82 -0
- package/docs/design-system/components/sidebar.md +83 -0
- package/docs/design-system/components/skeleton.md +91 -0
- package/docs/design-system/components/slideout.md +77 -0
- package/docs/design-system/components/slider.md +81 -0
- package/docs/design-system/components/social-button.md +65 -0
- package/docs/design-system/components/spinner.md +77 -0
- package/docs/design-system/components/steps.md +77 -0
- package/docs/design-system/components/table.md +411 -0
- package/docs/design-system/components/tabs.md +69 -0
- package/docs/design-system/components/tag.md +95 -0
- package/docs/design-system/components/textarea.md +64 -0
- package/docs/design-system/components/timeline.md +95 -0
- package/docs/design-system/components/toast.md +73 -0
- package/docs/design-system/components/toggle.md +96 -0
- package/docs/design-system/components/toolbar.md +105 -0
- package/docs/design-system/components/tooltip.md +107 -0
- package/docs/design-system/components/typography.md +18 -0
- package/docs/design-system/density-and-elevation.md +44 -0
- package/docs/design-system/design-system-test-missing-items.md +368 -0
- package/docs/design-system/direction-and-localization.md +23 -0
- package/docs/design-system/form-recipes.md +73 -0
- package/docs/design-system/gap-promotion-policy.md +21 -0
- package/docs/design-system/gap-promotion-report.md +166 -0
- package/docs/design-system/icons.md +69 -0
- package/docs/design-system/installation.md +68 -0
- package/docs/design-system/launch-comparison-shadcn.md +98 -0
- package/docs/design-system/registry-and-cli.md +64 -0
- package/docs/design-system/release-policy.md +30 -0
- package/docs/design-system/roadmap.md +14 -0
- package/docs/design-system/support-matrix.md +23 -0
- package/docs/design-system/tabs.md +53 -0
- package/docs/design-system/token-governance.md +60 -0
- package/package.json +97 -65
- package/registry/component-contract.json +40 -0
- package/registry/components/alert-dialog.tsx +297 -0
- package/registry/components/alert.tsx +86 -65
- package/registry/components/aspect-ratio.tsx +30 -0
- package/registry/components/autocomplete.tsx +23 -9
- package/registry/components/avatar.tsx +7 -7
- package/registry/components/badge.tsx +1 -1
- package/registry/components/button-group.tsx +321 -4
- package/registry/components/button.tsx +38 -17
- package/registry/components/card.tsx +68 -59
- package/registry/components/carousel.tsx +282 -0
- package/registry/components/chart.tsx +203 -0
- package/registry/components/checkbox.tsx +3 -3
- package/registry/components/collapsible.tsx +69 -0
- package/registry/components/command.tsx +174 -0
- package/registry/components/context-menu.tsx +236 -0
- package/registry/components/date-picker.tsx +246 -105
- package/registry/components/expanded/ActivityFeed.tsx +6 -15
- package/registry/components/expanded/Banner.tsx +3 -3
- package/registry/components/expanded/Breadcrumbs.tsx +5 -5
- package/registry/components/expanded/CatalogComponentsShowcase.tsx +13 -13
- package/registry/components/expanded/CatalogDivider.tsx +1 -1
- package/registry/components/expanded/EmptyState.tsx +1 -1
- package/registry/components/expanded/FileUpload.tsx +9 -2
- package/registry/components/expanded/OnboardingStepListItem.tsx +2 -4
- package/registry/components/expanded/PageHeader.tsx +14 -14
- package/registry/components/expanded/Slideout.tsx +15 -415
- package/registry/components/expanded/Steps.tsx +4 -4
- package/registry/components/expanded/Table.tsx +116 -69
- package/registry/components/expanded/Timeline.tsx +3 -3
- package/registry/components/expanded/activityFeed.css +1 -1
- package/registry/components/expanded/breadcrumbs.css +139 -139
- package/registry/components/expanded/catalogComponentsShowcase.css +83 -83
- package/registry/components/expanded/divider.css +1 -1
- package/registry/components/expanded/emptyState.css +1 -1
- package/registry/components/expanded/fileUpload.css +6 -6
- package/registry/components/expanded/slideout.css +9 -685
- package/registry/components/expanded/steps.css +274 -274
- package/registry/components/expanded/table.css +2 -2
- package/registry/components/expanded/timeline.css +264 -264
- package/registry/components/field.tsx +230 -0
- package/registry/components/hover-card.tsx +48 -0
- package/registry/components/input-content.ts +1 -0
- package/registry/components/input-group.tsx +130 -0
- package/registry/components/input-otp.tsx +13 -3
- package/registry/components/input.tsx +70 -45
- package/registry/components/item.tsx +189 -0
- package/registry/components/kbd.tsx +151 -0
- package/registry/components/label.tsx +78 -0
- package/registry/components/menu.tsx +34 -246
- package/registry/components/menubar.tsx +226 -0
- package/registry/components/modal.tsx +216 -143
- package/registry/components/native-select.tsx +205 -0
- package/registry/components/navigation-menu.tsx +171 -0
- package/registry/components/pagination.tsx +80 -58
- package/registry/components/popover.tsx +162 -664
- package/registry/components/radio-card.tsx +116 -87
- package/registry/components/radio-group.tsx +1 -1
- package/registry/components/resizable.tsx +74 -0
- package/registry/components/scroll-area.tsx +67 -0
- package/registry/components/segmented-control.tsx +87 -0
- package/registry/components/select-content.tsx +2 -2
- package/registry/components/select.tsx +54 -20
- package/registry/components/sheet.tsx +305 -0
- package/registry/components/sidebar.tsx +352 -0
- package/registry/components/skeleton.css +0 -3
- package/registry/components/social-button.tsx +116 -30
- package/registry/components/spinner.tsx +18 -55
- package/registry/components/{expanded/tabs.css → tabs.css} +127 -106
- package/registry/components/tabs.tsx +246 -0
- package/registry/components/tag.tsx +2 -2
- package/registry/components/textarea.tsx +4 -4
- package/registry/components/toast.tsx +136 -0
- package/registry/components/toggle.tsx +2 -2
- package/registry/components/toolbar.tsx +89 -17
- package/registry/components/tooltip.tsx +1 -1
- package/registry/examples/alert-demo.tsx +25 -5
- package/registry/examples/alert-dialog-demo.tsx +42 -0
- package/registry/examples/aspect-ratio-demo.tsx +11 -0
- package/registry/examples/attribute-demo.tsx +1 -1
- package/registry/examples/autocomplete-demo.tsx +3 -3
- package/registry/examples/avatar-demo.tsx +7 -7
- package/registry/examples/badge-demo.tsx +1 -1
- package/registry/examples/button-demo.tsx +6 -6
- package/registry/examples/button-group-demo.tsx +23 -2
- package/registry/examples/card-demo.tsx +46 -8
- package/registry/examples/carousel-demo.tsx +43 -0
- package/registry/examples/chart-demo.tsx +33 -0
- package/registry/examples/checkbox-demo.tsx +5 -5
- package/registry/examples/collapsible-demo.tsx +16 -0
- package/registry/examples/collection-filter-bar-demo.tsx +135 -0
- package/registry/examples/command-demo.tsx +42 -0
- package/registry/examples/{expanded/command-bar-demo.tsx → command-palette-demo.tsx} +5 -15
- package/registry/examples/context-menu-demo.tsx +29 -0
- package/registry/examples/control-density-contract-demo.tsx +61 -0
- package/registry/examples/date-picker-demo.tsx +12 -12
- package/registry/examples/divider-demo.tsx +3 -3
- package/registry/examples/expanded/banner-demo.tsx +1 -1
- package/registry/examples/expanded/breadcrumbs-demo.tsx +1 -1
- package/registry/examples/expanded/empty-state-demo.tsx +1 -1
- package/registry/examples/expanded/file-upload-demo.tsx +1 -1
- package/registry/examples/expanded/onboarding-step-demo.tsx +1 -1
- package/registry/examples/expanded/slideout-demo.tsx +2 -2
- package/registry/examples/expanded/steps-demo.tsx +1 -1
- package/registry/examples/expanded/tabs-demo.tsx +2 -2
- package/registry/examples/expanded/timeline-demo.tsx +1 -1
- package/registry/examples/field-demo.tsx +51 -0
- package/registry/examples/hover-card-demo.tsx +23 -0
- package/registry/examples/input-demo.tsx +6 -6
- package/registry/examples/input-group-demo.tsx +16 -0
- package/registry/examples/input-otp-demo.tsx +4 -4
- package/registry/examples/item-demo.tsx +46 -0
- package/registry/examples/kbd-demo.tsx +11 -0
- package/registry/examples/label-demo.tsx +20 -0
- package/registry/examples/menu-demo.tsx +1 -1
- package/registry/examples/menubar-demo.tsx +34 -0
- package/registry/examples/modal-demo.tsx +67 -9
- package/registry/examples/native-select-demo.tsx +16 -0
- package/registry/examples/navigation-menu-demo.tsx +29 -0
- package/registry/examples/pagination-demo.tsx +6 -3
- package/registry/examples/popover-demo.tsx +19 -19
- package/registry/examples/progress-demo.tsx +1 -1
- package/registry/examples/progress-slider-demo.tsx +1 -1
- package/registry/examples/radio-card-demo.tsx +4 -4
- package/registry/examples/radio-group-demo.tsx +2 -2
- package/registry/examples/resizable-demo.tsx +22 -0
- package/registry/examples/results-toolbar-demo.tsx +44 -0
- package/registry/examples/scroll-area-demo.tsx +15 -0
- package/registry/examples/segmented-control-demo.tsx +39 -0
- package/registry/examples/select-demo.tsx +1 -1
- package/registry/examples/sheet-demo.tsx +47 -0
- package/registry/examples/sidebar-demo.tsx +55 -0
- package/registry/examples/slider-demo.tsx +3 -3
- package/registry/examples/social-button-demo.tsx +18 -8
- package/registry/examples/spinner-demo.tsx +13 -13
- package/registry/examples/tabs-demo.tsx +13 -0
- package/registry/examples/tag-demo.tsx +1 -1
- package/registry/examples/textarea-demo.tsx +4 -4
- package/registry/examples/toast-demo.tsx +35 -0
- package/registry/examples/toggle-demo.tsx +6 -6
- package/registry/examples/tooltip-demo.tsx +4 -4
- package/registry/guidance/USAGE.md +27 -0
- package/registry/hooks/use-direction.ts +193 -13
- package/registry/index.json +6010 -432
- package/registry/styles/globals.css +3112 -4690
- package/registry.json +1582 -0
- package/schema/config.schema.json +51 -0
- package/schema/registry.schema.json +190 -0
- package/schema/tokens.schema.json +163 -0
- package/src/cli/command-line.js +194 -0
- package/src/cli/config-editors.js +9 -0
- package/src/cli/doctor.js +399 -0
- package/src/cli/file-transaction.js +295 -0
- package/src/cli/global-css.js +153 -0
- package/src/cli/index.js +639 -1391
- package/src/cli/install-plan.js +592 -0
- package/src/cli/install-receipt.js +171 -0
- package/src/cli/jsonc.js +203 -0
- package/src/cli/package-install-state.js +254 -0
- package/src/cli/package-manager.js +238 -0
- package/src/cli/package-plan.js +185 -0
- package/src/cli/package-version.js +97 -0
- package/src/cli/registry-query.js +207 -0
- package/src/cli/reporting.js +55 -0
- package/src/cli/schema-validation.js +19 -0
- package/src/cli/source-scanner.js +686 -0
- package/src/cli/vite-config.js +478 -0
- package/tokens/banhaten.tokens.json +4313 -310
- package/registry/assets/avatars/avatar-02.jpg +0 -0
- package/registry/assets/avatars/avatar-03.jpg +0 -0
- package/registry/assets/avatars/avatar-04.jpg +0 -0
- package/registry/assets/avatars/avatar-05.jpg +0 -0
- package/registry/assets/avatars/avatar-06.jpg +0 -0
- package/registry/assets/avatars/avatar-07.jpg +0 -0
- package/registry/assets/avatars/avatar-08.jpg +0 -0
- package/registry/assets/avatars/avatar-09.jpg +0 -0
- package/registry/assets/avatars/avatar-10.jpg +0 -0
- package/registry/assets/avatars/avatar-11.jpg +0 -0
- package/registry/assets/avatars/avatar-12.jpg +0 -0
- package/registry/assets/avatars/avatar-13.jpg +0 -0
- package/registry/assets/avatars/avatar-14.jpg +0 -0
- package/registry/assets/avatars/avatar-15.jpg +0 -0
- package/registry/assets/avatars/avatar-16.jpg +0 -0
- package/registry/assets/avatars/avatar-17.jpg +0 -0
- package/registry/assets/avatars/avatar-18.jpg +0 -0
- package/registry/assets/avatars/avatar-19.jpg +0 -0
- package/registry/assets/avatars/avatar-20.jpg +0 -0
- package/registry/assets/avatars/avatar-21.jpg +0 -0
- package/registry/assets/avatars/avatar-22.jpg +0 -0
- package/registry/assets/avatars/avatar-23.jpg +0 -0
- package/registry/assets/avatars/avatar-24.jpg +0 -0
- package/registry/assets/avatars/avatar-25.jpg +0 -0
- package/registry/assets/avatars/avatar-26.jpg +0 -0
- package/registry/assets/avatars/avatar-27.jpg +0 -0
- package/registry/assets/avatars/avatar-28.jpg +0 -0
- package/registry/assets/avatars/avatar-29.jpg +0 -0
- package/registry/assets/avatars/avatar-30.jpg +0 -0
- package/registry/assets/avatars/avatar-31.jpg +0 -0
- package/registry/assets/avatars/avatar-32.jpg +0 -0
- package/registry/assets/avatars/avatar-33.jpg +0 -0
- package/registry/assets/avatars/avatar-34.jpg +0 -0
- package/registry/assets/avatars/avatar-35.jpg +0 -0
- package/registry/assets/image-assets.json +0 -744
- package/registry/assets/images/art-02.jpg +0 -0
- package/registry/assets/images/art-03.jpg +0 -0
- package/registry/assets/images/art-04.jpg +0 -0
- package/registry/assets/images/art-05.jpg +0 -0
- package/registry/assets/images/art-06.jpg +0 -0
- package/registry/assets/images/art-07.jpg +0 -0
- package/registry/assets/images/art-08.jpg +0 -0
- package/registry/assets/images/art-09.jpg +0 -0
- package/registry/assets/images/art-10.jpg +0 -0
- package/registry/assets/images/art-11.jpg +0 -0
- package/registry/assets/images/art-12.jpg +0 -0
- package/registry/assets/images/art-13.jpg +0 -0
- package/registry/assets/images/art-14.jpg +0 -0
- package/registry/assets/images/art-15.jpg +0 -0
- package/registry/assets/images/art-16.jpg +0 -0
- package/registry/assets/images/art-17.jpg +0 -0
- package/registry/assets/images/art-18.jpg +0 -0
- package/registry/assets/images/art-19.jpg +0 -0
- package/registry/assets/images/art-20.jpg +0 -0
- package/registry/assets/images/art-21.jpg +0 -0
- package/registry/assets/images/art-22.jpg +0 -0
- package/registry/assets/images/art-23.jpg +0 -0
- package/registry/assets/images/art-24.jpg +0 -0
- package/registry/assets/images/art-25.jpg +0 -0
- package/registry/assets/images/art-26.jpg +0 -0
- package/registry/assets/images/art-27.jpg +0 -0
- package/registry/assets/images/nature-01.jpg +0 -0
- package/registry/assets/images/nature-02.jpg +0 -0
- package/registry/assets/images/nature-03.jpg +0 -0
- package/registry/assets/images/nature-04.jpg +0 -0
- package/registry/assets/images/nature-05.jpg +0 -0
- package/registry/assets/images/nature-06.jpg +0 -0
- package/registry/assets/images/nature-07.jpg +0 -0
- package/registry/assets/images/nature-08.jpg +0 -0
- package/registry/assets/images/nature-09.jpg +0 -0
- package/registry/assets/images/nature-10.jpg +0 -0
- package/registry/assets/images/nature-11.jpg +0 -0
- package/registry/assets/images/nature-12.jpg +0 -0
- package/registry/assets/images/nature-13.jpg +0 -0
- package/registry/assets/images/nature-14.jpg +0 -0
- package/registry/assets/images/nature-15.jpg +0 -0
- package/registry/assets/images/nature-16.jpg +0 -0
- package/registry/assets/images/nature-17.jpg +0 -0
- package/registry/assets/images/nature-18.jpg +0 -0
- package/registry/assets/images/nature-19.jpg +0 -0
- package/registry/assets/images/nature-20.jpg +0 -0
- package/registry/components/expanded/BannerBoard.tsx +0 -225
- package/registry/components/expanded/CatalogTag.tsx +0 -85
- package/registry/components/expanded/CommandBar.tsx +0 -386
- package/registry/components/expanded/IconExplorer.tsx +0 -612
- package/registry/components/expanded/Tabs.tsx +0 -86
- package/registry/components/expanded/TimelineShowcase.tsx +0 -158
- package/registry/components/expanded/commandBar.css +0 -470
- package/registry/components/expanded/iconExplorer.css +0 -764
- package/registry/components/expanded/iconPacks.ts +0 -866
- package/registry/components/expanded/tag.css +0 -148
- package/registry/examples/expanded/icons-demo.tsx +0 -5
- package/tokens/Color mode.zip +0 -0
- package/tokens/Numbers.zip +0 -0
- package/tokens/Radius.zip +0 -0
- package/tokens/Theme.zip +0 -0
|
@@ -19,7 +19,7 @@ import { Checkbox } from "@/components/ui/checkbox"
|
|
|
19
19
|
import { Input } from "@/components/ui/input"
|
|
20
20
|
import { cn } from "@/lib/utils"
|
|
21
21
|
import {
|
|
22
|
-
|
|
22
|
+
MenuPreview,
|
|
23
23
|
MenuItem,
|
|
24
24
|
MenuItemIcon,
|
|
25
25
|
MenuItemText,
|
|
@@ -46,8 +46,8 @@ const rtlDescription = "يظهر هذا المحتوى في الاتجاه من
|
|
|
46
46
|
|
|
47
47
|
export function PopoverDemo() {
|
|
48
48
|
return (
|
|
49
|
-
<div className="grid min-w-0 gap-
|
|
50
|
-
<div className="grid gap-
|
|
49
|
+
<div className="grid min-w-0 gap-[var(--bh-space-3xl-16)]">
|
|
50
|
+
<div className="grid gap-[var(--bh-space-3xl-16)] xl:grid-cols-2 2xl:grid-cols-3">
|
|
51
51
|
<PopoverExample title="Basic Bottom">
|
|
52
52
|
<Popover defaultOpen>
|
|
53
53
|
<PopoverTrigger asChild>
|
|
@@ -122,7 +122,7 @@ export function PopoverDemo() {
|
|
|
122
122
|
</PopoverExample>
|
|
123
123
|
</div>
|
|
124
124
|
|
|
125
|
-
<div className="grid gap-
|
|
125
|
+
<div className="grid gap-[var(--bh-space-3xl-16)] xl:grid-cols-2 2xl:grid-cols-3">
|
|
126
126
|
<PopoverExample title="Icon Button Trigger">
|
|
127
127
|
<Popover defaultOpen>
|
|
128
128
|
<PopoverTrigger asChild>
|
|
@@ -199,7 +199,7 @@ export function PopoverDemo() {
|
|
|
199
199
|
</PopoverExample>
|
|
200
200
|
</div>
|
|
201
201
|
|
|
202
|
-
<div className="grid gap-
|
|
202
|
+
<div className="grid gap-[var(--bh-space-3xl-16)] 2xl:grid-cols-2">
|
|
203
203
|
<PopoverExample density="large" title="Large Content">
|
|
204
204
|
<Popover defaultOpen>
|
|
205
205
|
<PopoverTrigger asChild>
|
|
@@ -256,7 +256,7 @@ export function PopoverDemo() {
|
|
|
256
256
|
</PopoverExample>
|
|
257
257
|
</div>
|
|
258
258
|
|
|
259
|
-
<div className="grid gap-
|
|
259
|
+
<div className="grid gap-[var(--bh-space-3xl-16)] 2xl:grid-cols-2">
|
|
260
260
|
<PopoverExample density="matrix" title="Arrow Alignment">
|
|
261
261
|
<div className="grid min-w-[calc(var(--bh-popover-sm-width)+var(--bh-popover-sm-width)+var(--bh-popover-sm-width)+var(--bh-space-18xl-320))] grid-cols-3 place-items-start gap-[var(--bh-space-6xl-32)]">
|
|
262
262
|
{(["start", "center", "end"] as const).map((align) => (
|
|
@@ -304,7 +304,7 @@ export function PopoverDemo() {
|
|
|
304
304
|
</PopoverTrigger>
|
|
305
305
|
<PopoverContent align="start" dir="rtl" side="right" size="md">
|
|
306
306
|
<PopoverHeader>
|
|
307
|
-
<div className="grid min-w-0 gap-
|
|
307
|
+
<div className="grid min-w-0 gap-[var(--bh-space-xs-4)]">
|
|
308
308
|
<PopoverTitle>{rtlTitle}</PopoverTitle>
|
|
309
309
|
<PopoverDescription>{rtlDescription}</PopoverDescription>
|
|
310
310
|
</div>
|
|
@@ -337,14 +337,14 @@ function PopoverExample({
|
|
|
337
337
|
<div
|
|
338
338
|
data-popover-example={title}
|
|
339
339
|
className={cn(
|
|
340
|
-
"rounded-md border border-border bg-background p-
|
|
340
|
+
"rounded-md border border-border bg-background p-[var(--bh-space-3xl-16)]",
|
|
341
341
|
popoverExampleWidthClasses[density]
|
|
342
342
|
)}
|
|
343
343
|
>
|
|
344
344
|
<p className="text-xs font-semibold text-muted-foreground">{title}</p>
|
|
345
345
|
<div
|
|
346
346
|
className={cn(
|
|
347
|
-
"mt-
|
|
347
|
+
"mt-[var(--bh-space-3xl-16)] flex overflow-visible",
|
|
348
348
|
popoverExampleStageHeightClasses[density],
|
|
349
349
|
popoverExamplePlacementClasses[placement]
|
|
350
350
|
)}
|
|
@@ -391,7 +391,7 @@ function LargeContent() {
|
|
|
391
391
|
return (
|
|
392
392
|
<>
|
|
393
393
|
<PopoverHeader>
|
|
394
|
-
<div className="grid min-w-0 gap-
|
|
394
|
+
<div className="grid min-w-0 gap-[var(--bh-space-xs-4)]">
|
|
395
395
|
<PopoverTitle>Details</PopoverTitle>
|
|
396
396
|
<PopoverDescription>
|
|
397
397
|
Larger content can hold explanations, lists, images, and actions.
|
|
@@ -400,9 +400,9 @@ function LargeContent() {
|
|
|
400
400
|
<PopoverClose />
|
|
401
401
|
</PopoverHeader>
|
|
402
402
|
<PopoverBody>
|
|
403
|
-
<div className="grid gap-
|
|
404
|
-
<div className="h-
|
|
405
|
-
<div className="flex flex-wrap gap-
|
|
403
|
+
<div className="grid gap-[var(--bh-space-xl-12)] rounded-[var(--bh-radius-lg-8)] bg-[var(--bh-bg-neutral-subtle)] p-[var(--bh-space-xl-12)]">
|
|
404
|
+
<div className="h-[var(--bh-space-9xl-64)] rounded-[var(--bh-radius-md-6)] bg-[var(--bh-bg-raised)]" />
|
|
405
|
+
<div className="flex flex-wrap gap-[var(--bh-space-md-8)]">
|
|
406
406
|
<Badge color="green" type="dot">
|
|
407
407
|
Ready
|
|
408
408
|
</Badge>
|
|
@@ -424,7 +424,7 @@ function FilterContent() {
|
|
|
424
424
|
return (
|
|
425
425
|
<>
|
|
426
426
|
<PopoverHeader>
|
|
427
|
-
<div className="grid min-w-0 gap-
|
|
427
|
+
<div className="grid min-w-0 gap-[var(--bh-space-xs-4)]">
|
|
428
428
|
<PopoverTitle>Status</PopoverTitle>
|
|
429
429
|
<PopoverDescription>Narrow the table results.</PopoverDescription>
|
|
430
430
|
</div>
|
|
@@ -438,10 +438,10 @@ function FilterContent() {
|
|
|
438
438
|
placeholder="Search filters"
|
|
439
439
|
size="md"
|
|
440
440
|
/>
|
|
441
|
-
<div className="grid gap-
|
|
441
|
+
<div className="grid gap-[var(--bh-space-md-8)]">
|
|
442
442
|
{filterOptions.map((option, index) => (
|
|
443
443
|
<label
|
|
444
|
-
className="flex items-center gap-
|
|
444
|
+
className="flex items-center gap-[var(--bh-space-md-8)] text-[length:var(--bh-text-body-xs-regular-font-size)] font-[var(--bh-text-body-xs-regular-font-weight)] leading-[var(--bh-text-body-xs-regular-line-height)] tracking-[var(--bh-text-body-xs-regular-letter-spacing)] text-[var(--bh-content-default)]"
|
|
445
445
|
key={option}
|
|
446
446
|
>
|
|
447
447
|
<Checkbox defaultChecked={index === 0} />
|
|
@@ -472,7 +472,7 @@ function SettingsContent() {
|
|
|
472
472
|
return (
|
|
473
473
|
<>
|
|
474
474
|
<PopoverHeader>
|
|
475
|
-
<div className="grid min-w-0 gap-
|
|
475
|
+
<div className="grid min-w-0 gap-[var(--bh-space-xs-4)]">
|
|
476
476
|
<PopoverTitle>Settings</PopoverTitle>
|
|
477
477
|
<PopoverDescription>Update notification preferences.</PopoverDescription>
|
|
478
478
|
</div>
|
|
@@ -501,7 +501,7 @@ function SettingsContent() {
|
|
|
501
501
|
|
|
502
502
|
function ActionsContent() {
|
|
503
503
|
return (
|
|
504
|
-
<
|
|
504
|
+
<MenuPreview
|
|
505
505
|
aria-label="Popover actions"
|
|
506
506
|
className="w-[var(--bh-popover-action-width,var(--bh-menu-width))] bg-transparent py-0 shadow-none"
|
|
507
507
|
width="auto"
|
|
@@ -541,6 +541,6 @@ function ActionsContent() {
|
|
|
541
541
|
</MenuItemTitle>
|
|
542
542
|
</MenuItemText>
|
|
543
543
|
</MenuItem>
|
|
544
|
-
</
|
|
544
|
+
</MenuPreview>
|
|
545
545
|
)
|
|
546
546
|
}
|
|
@@ -2,7 +2,7 @@ import { Progress } from "@/components/ui/progress"
|
|
|
2
2
|
|
|
3
3
|
export function ProgressDemo() {
|
|
4
4
|
return (
|
|
5
|
-
<div className="grid w-full max-w-md gap-
|
|
5
|
+
<div className="grid w-full max-w-md gap-[var(--bh-space-5xl-24)]">
|
|
6
6
|
<Progress
|
|
7
7
|
aria-label="Upload progress"
|
|
8
8
|
helperText="Preparing the final file"
|
|
@@ -2,7 +2,7 @@ import { ProgressSlider } from "@/components/ui/progress-slider"
|
|
|
2
2
|
|
|
3
3
|
export function ProgressSliderDemo() {
|
|
4
4
|
return (
|
|
5
|
-
<div className="grid gap-
|
|
5
|
+
<div className="grid gap-[var(--bh-space-5xl-24)]">
|
|
6
6
|
<ProgressSlider
|
|
7
7
|
aria-label="Investment amount"
|
|
8
8
|
defaultValue={28}
|
|
@@ -17,21 +17,21 @@ const radioCardRtlDemoProps = {
|
|
|
17
17
|
|
|
18
18
|
export function RadioCardDemo() {
|
|
19
19
|
return (
|
|
20
|
-
<div className="grid gap-
|
|
21
|
-
<div className="flex flex-wrap items-start gap-
|
|
20
|
+
<div className="grid gap-[var(--bh-space-5xl-24)]">
|
|
21
|
+
<div className="flex flex-wrap items-start gap-[var(--bh-space-3xl-16)]">
|
|
22
22
|
<RadioCard {...radioCardDemoProps} type="with-icon" />
|
|
23
23
|
<RadioCard {...radioCardDemoProps} type="icon-radio-right" />
|
|
24
24
|
<RadioCard {...radioCardDemoProps} type="icon-radio-left" />
|
|
25
25
|
<RadioCard {...radioCardDemoProps} type="radio-label" />
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
|
-
<div className="flex flex-wrap items-start gap-
|
|
28
|
+
<div className="flex flex-wrap items-start gap-[var(--bh-space-3xl-16)]">
|
|
29
29
|
<RadioCard {...radioCardDemoProps} checked type="with-avatar" />
|
|
30
30
|
<RadioCard {...radioCardDemoProps} checked type="payment" />
|
|
31
31
|
<RadioCard {...radioCardDemoProps} checked type="company-icon" />
|
|
32
32
|
</div>
|
|
33
33
|
|
|
34
|
-
<div className="flex flex-wrap items-start gap-
|
|
34
|
+
<div className="flex flex-wrap items-start gap-[var(--bh-space-3xl-16)]" dir="rtl">
|
|
35
35
|
<RadioCard {...radioCardRtlDemoProps} direction="rtl" type="with-icon" />
|
|
36
36
|
<RadioCard
|
|
37
37
|
{...radioCardRtlDemoProps}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
|
|
7
7
|
export function RadioGroupDemo() {
|
|
8
8
|
return (
|
|
9
|
-
<div className="grid gap-
|
|
9
|
+
<div className="grid gap-[var(--bh-space-5xl-24)]">
|
|
10
10
|
<RadioGroup
|
|
11
11
|
defaultValue="monthly"
|
|
12
12
|
description="Choose the cadence for generated invoices."
|
|
@@ -42,7 +42,7 @@ export function RadioGroupDemo() {
|
|
|
42
42
|
<RadioGroupItem value="wallet" label="Wallet" />
|
|
43
43
|
</RadioGroup>
|
|
44
44
|
|
|
45
|
-
<div className="grid gap-
|
|
45
|
+
<div className="grid gap-[var(--bh-space-xl-12)]">
|
|
46
46
|
<RadioField
|
|
47
47
|
defaultChecked
|
|
48
48
|
label="Use as default"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ResizableHandle,
|
|
3
|
+
ResizablePanel,
|
|
4
|
+
ResizablePanelGroup,
|
|
5
|
+
} from "@/components/ui/resizable"
|
|
6
|
+
|
|
7
|
+
export function ResizableDemo() {
|
|
8
|
+
return (
|
|
9
|
+
<ResizablePanelGroup
|
|
10
|
+
direction="horizontal"
|
|
11
|
+
className="h-[var(--bh-space-14xl-192)] rounded-xl border border-[var(--bh-border-subtle)]"
|
|
12
|
+
>
|
|
13
|
+
<ResizablePanel defaultSize={35}>
|
|
14
|
+
<div className="flex size-full items-center justify-center text-sm">Sidebar</div>
|
|
15
|
+
</ResizablePanel>
|
|
16
|
+
<ResizableHandle withHandle />
|
|
17
|
+
<ResizablePanel defaultSize={65}>
|
|
18
|
+
<div className="flex size-full items-center justify-center text-sm">Content</div>
|
|
19
|
+
</ResizablePanel>
|
|
20
|
+
</ResizablePanelGroup>
|
|
21
|
+
)
|
|
22
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SegmentedControl,
|
|
3
|
+
SegmentedControlItem,
|
|
4
|
+
SegmentedControlLabel,
|
|
5
|
+
} from "@/components/ui/segmented-control"
|
|
6
|
+
import {
|
|
7
|
+
Toolbar,
|
|
8
|
+
ToolbarButton,
|
|
9
|
+
ToolbarSection,
|
|
10
|
+
ToolbarText,
|
|
11
|
+
} from "@/components/ui/toolbar"
|
|
12
|
+
|
|
13
|
+
export function ResultsToolbarDemo() {
|
|
14
|
+
return (
|
|
15
|
+
<Toolbar
|
|
16
|
+
aria-label="Bookmark results"
|
|
17
|
+
data-recipe="results-toolbar"
|
|
18
|
+
layout="split"
|
|
19
|
+
wrap
|
|
20
|
+
>
|
|
21
|
+
<ToolbarText density="default">
|
|
22
|
+
<strong>5,371</strong> bookmarks · keep scrolling to browse all
|
|
23
|
+
</ToolbarText>
|
|
24
|
+
|
|
25
|
+
<ToolbarSection align="end" wrap>
|
|
26
|
+
<SegmentedControl
|
|
27
|
+
aria-label="Cards per row"
|
|
28
|
+
defaultValue="4"
|
|
29
|
+
density="default"
|
|
30
|
+
>
|
|
31
|
+
<SegmentedControlLabel>Cards / row</SegmentedControlLabel>
|
|
32
|
+
{[3, 4, 5, 6].map((count) => (
|
|
33
|
+
<SegmentedControlItem key={count} value={String(count)}>
|
|
34
|
+
{count}
|
|
35
|
+
</SegmentedControlItem>
|
|
36
|
+
))}
|
|
37
|
+
</SegmentedControl>
|
|
38
|
+
<ToolbarButton density="default" variant="outline">
|
|
39
|
+
Select
|
|
40
|
+
</ToolbarButton>
|
|
41
|
+
</ToolbarSection>
|
|
42
|
+
</Toolbar>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ScrollArea } from "@/components/ui/scroll-area"
|
|
2
|
+
|
|
3
|
+
export function ScrollAreaDemo() {
|
|
4
|
+
return (
|
|
5
|
+
<ScrollArea className="h-[var(--bh-space-14xl-192)] w-[var(--bh-space-17xl-288)] rounded-xl border border-[var(--bh-border-subtle)] bg-[var(--bh-bg-raised)]">
|
|
6
|
+
<div className="grid gap-[var(--bh-space-md-8)] p-[var(--bh-space-3xl-16)]">
|
|
7
|
+
{Array.from({ length: 12 }, (_, index) => (
|
|
8
|
+
<div key={index} className="rounded-lg bg-[var(--bh-bg-neutral-subtle)] px-[var(--bh-space-xl-12)] py-[var(--bh-space-md-8)] text-sm">
|
|
9
|
+
Activity item {index + 1}
|
|
10
|
+
</div>
|
|
11
|
+
))}
|
|
12
|
+
</div>
|
|
13
|
+
</ScrollArea>
|
|
14
|
+
)
|
|
15
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SegmentedControl,
|
|
3
|
+
SegmentedControlItem,
|
|
4
|
+
SegmentedControlLabel,
|
|
5
|
+
} from "@/components/ui/segmented-control"
|
|
6
|
+
|
|
7
|
+
export function SegmentedControlDemo() {
|
|
8
|
+
return (
|
|
9
|
+
<div className="grid gap-[var(--bh-space-3xl-16)]">
|
|
10
|
+
<SegmentedControl
|
|
11
|
+
aria-label="Cards per row"
|
|
12
|
+
defaultValue="4"
|
|
13
|
+
density="default"
|
|
14
|
+
>
|
|
15
|
+
<SegmentedControlLabel>Cards / row</SegmentedControlLabel>
|
|
16
|
+
{[3, 4, 5, 6].map((count) => (
|
|
17
|
+
<SegmentedControlItem key={count} value={String(count)}>
|
|
18
|
+
{count}
|
|
19
|
+
</SegmentedControlItem>
|
|
20
|
+
))}
|
|
21
|
+
</SegmentedControl>
|
|
22
|
+
|
|
23
|
+
<div dir="rtl">
|
|
24
|
+
<SegmentedControl
|
|
25
|
+
aria-label="عدد البطاقات في الصف"
|
|
26
|
+
defaultValue="4"
|
|
27
|
+
density="compact"
|
|
28
|
+
>
|
|
29
|
+
<SegmentedControlLabel>بطاقات / صف</SegmentedControlLabel>
|
|
30
|
+
{[3, 4, 5, 6].map((count) => (
|
|
31
|
+
<SegmentedControlItem key={count} value={String(count)}>
|
|
32
|
+
{count}
|
|
33
|
+
</SegmentedControlItem>
|
|
34
|
+
))}
|
|
35
|
+
</SegmentedControl>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Button } from "@/components/ui/button"
|
|
2
|
+
import {
|
|
3
|
+
Sheet,
|
|
4
|
+
SheetBody,
|
|
5
|
+
SheetContent,
|
|
6
|
+
SheetDescription,
|
|
7
|
+
SheetFooter,
|
|
8
|
+
SheetHeader,
|
|
9
|
+
SheetTitle,
|
|
10
|
+
SheetTrigger,
|
|
11
|
+
} from "@/components/ui/sheet"
|
|
12
|
+
|
|
13
|
+
export function SheetDemo() {
|
|
14
|
+
return (
|
|
15
|
+
<div className="flex flex-wrap gap-[var(--bh-space-md-8)]">
|
|
16
|
+
{(["start", "end", "top", "bottom"] as const).map((side) => (
|
|
17
|
+
<Sheet key={side}>
|
|
18
|
+
<SheetTrigger asChild>
|
|
19
|
+
<Button size="sm" variant="outline">
|
|
20
|
+
{side}
|
|
21
|
+
</Button>
|
|
22
|
+
</SheetTrigger>
|
|
23
|
+
<SheetContent side={side}>
|
|
24
|
+
<SheetHeader>
|
|
25
|
+
<SheetTitle>Workspace settings</SheetTitle>
|
|
26
|
+
<SheetDescription>
|
|
27
|
+
Review billing, access, and notification settings.
|
|
28
|
+
</SheetDescription>
|
|
29
|
+
</SheetHeader>
|
|
30
|
+
<SheetBody>
|
|
31
|
+
<div className="grid gap-[var(--bh-space-md-8)] text-[length:var(--bh-text-body-sm-regular-font-size)] font-[var(--bh-text-body-sm-regular-font-weight)] leading-[var(--bh-text-body-sm-regular-line-height)] tracking-[var(--bh-text-body-sm-regular-letter-spacing)] text-[var(--bh-content-subtle)]">
|
|
32
|
+
<p>Sheets are suited to contextual workflows that need more space than a popover.</p>
|
|
33
|
+
<p>Use logical start and end sides so the panel mirrors in RTL surfaces.</p>
|
|
34
|
+
</div>
|
|
35
|
+
</SheetBody>
|
|
36
|
+
<SheetFooter>
|
|
37
|
+
<Button size="sm" variant="soft">
|
|
38
|
+
Cancel
|
|
39
|
+
</Button>
|
|
40
|
+
<Button size="sm">Save changes</Button>
|
|
41
|
+
</SheetFooter>
|
|
42
|
+
</SheetContent>
|
|
43
|
+
</Sheet>
|
|
44
|
+
))}
|
|
45
|
+
</div>
|
|
46
|
+
)
|
|
47
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { HomeIcon, SettingsIcon, UsersIcon } from "lucide-react"
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
Sidebar,
|
|
5
|
+
SidebarBody,
|
|
6
|
+
SidebarFooter,
|
|
7
|
+
SidebarGroup,
|
|
8
|
+
SidebarGroupLabel,
|
|
9
|
+
SidebarHeader,
|
|
10
|
+
SidebarInset,
|
|
11
|
+
SidebarMenu,
|
|
12
|
+
SidebarMenuButton,
|
|
13
|
+
SidebarMenuItem,
|
|
14
|
+
SidebarProvider,
|
|
15
|
+
SidebarTrigger,
|
|
16
|
+
} from "@/components/ui/sidebar"
|
|
17
|
+
|
|
18
|
+
export function SidebarDemo() {
|
|
19
|
+
return (
|
|
20
|
+
<SidebarProvider className="flex h-[var(--bh-space-18xl-320)]" defaultCollapsed={false}>
|
|
21
|
+
<Sidebar>
|
|
22
|
+
<SidebarHeader>
|
|
23
|
+
<div className="min-w-0 flex-1 text-sm font-semibold group-data-[collapsed=true]/sidebar:hidden">
|
|
24
|
+
Banhaten
|
|
25
|
+
</div>
|
|
26
|
+
<SidebarTrigger />
|
|
27
|
+
</SidebarHeader>
|
|
28
|
+
<SidebarBody>
|
|
29
|
+
<SidebarGroup>
|
|
30
|
+
<SidebarGroupLabel>Workspace</SidebarGroupLabel>
|
|
31
|
+
<SidebarMenu>
|
|
32
|
+
<SidebarMenuItem>
|
|
33
|
+
<SidebarMenuButton active icon={<HomeIcon />}>
|
|
34
|
+
Overview
|
|
35
|
+
</SidebarMenuButton>
|
|
36
|
+
</SidebarMenuItem>
|
|
37
|
+
<SidebarMenuItem>
|
|
38
|
+
<SidebarMenuButton icon={<UsersIcon />}>Members</SidebarMenuButton>
|
|
39
|
+
</SidebarMenuItem>
|
|
40
|
+
<SidebarMenuItem>
|
|
41
|
+
<SidebarMenuButton icon={<SettingsIcon />}>Settings</SidebarMenuButton>
|
|
42
|
+
</SidebarMenuItem>
|
|
43
|
+
</SidebarMenu>
|
|
44
|
+
</SidebarGroup>
|
|
45
|
+
</SidebarBody>
|
|
46
|
+
<SidebarFooter>
|
|
47
|
+
<SidebarMenuButton icon={<SettingsIcon />}>Admin</SidebarMenuButton>
|
|
48
|
+
</SidebarFooter>
|
|
49
|
+
</Sidebar>
|
|
50
|
+
<SidebarInset className="grid place-items-center bg-[var(--bh-bg-subtle)] p-[var(--bh-space-4xl-20)] text-sm text-[var(--bh-content-subtle)]">
|
|
51
|
+
App content
|
|
52
|
+
</SidebarInset>
|
|
53
|
+
</SidebarProvider>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
@@ -2,7 +2,7 @@ import { Slider } from "@/components/ui/slider"
|
|
|
2
2
|
|
|
3
3
|
export function SliderDemo() {
|
|
4
4
|
return (
|
|
5
|
-
<div className="grid gap-
|
|
5
|
+
<div className="grid gap-[var(--bh-space-6xl-32)]">
|
|
6
6
|
<Slider
|
|
7
7
|
aria-label="Budget amount"
|
|
8
8
|
defaultValue={[40]}
|
|
@@ -17,10 +17,10 @@ export function SliderDemo() {
|
|
|
17
17
|
minStepsBetweenThumbs={4}
|
|
18
18
|
/>
|
|
19
19
|
|
|
20
|
-
<div className="flex h-
|
|
20
|
+
<div className="flex h-[calc(var(--bh-space-13xl-160)_+_var(--bh-space-3xl-16))] items-center">
|
|
21
21
|
<Slider
|
|
22
22
|
aria-label="Risk tolerance"
|
|
23
|
-
className="h-
|
|
23
|
+
className="h-[var(--bh-space-13xl-160)]"
|
|
24
24
|
defaultValue={[60]}
|
|
25
25
|
orientation="vertical"
|
|
26
26
|
tone="warning"
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
arabicSocialButtonMessages,
|
|
3
|
+
SocialButton,
|
|
4
|
+
type SocialPlatform,
|
|
5
|
+
} from "@/components/ui/social-button"
|
|
2
6
|
|
|
3
7
|
const socialPlatforms: SocialPlatform[] = [
|
|
4
8
|
"apple",
|
|
@@ -11,36 +15,42 @@ const socialPlatforms: SocialPlatform[] = [
|
|
|
11
15
|
|
|
12
16
|
export function SocialButtonDemo() {
|
|
13
17
|
return (
|
|
14
|
-
<div className="flex flex-col gap-
|
|
15
|
-
<div className="flex flex-wrap items-center gap-
|
|
18
|
+
<div className="flex flex-col gap-[var(--bh-space-5xl-24)]">
|
|
19
|
+
<div className="flex flex-wrap items-center gap-[var(--bh-space-xl-12)]">
|
|
16
20
|
{socialPlatforms.map((platform) => (
|
|
17
21
|
<SocialButton key={platform} platform={platform} />
|
|
18
22
|
))}
|
|
19
23
|
</div>
|
|
20
24
|
|
|
21
|
-
<div className="flex flex-wrap items-center gap-
|
|
25
|
+
<div className="flex flex-wrap items-center gap-[var(--bh-space-xl-12)]">
|
|
22
26
|
{socialPlatforms.map((platform) => (
|
|
23
27
|
<SocialButton key={platform} platform={platform} variant="outline" />
|
|
24
28
|
))}
|
|
25
29
|
</div>
|
|
26
30
|
|
|
27
|
-
<div className="flex flex-wrap items-center gap-
|
|
31
|
+
<div className="flex flex-wrap items-center gap-[var(--bh-space-xl-12)]">
|
|
28
32
|
{socialPlatforms.map((platform) => (
|
|
29
33
|
<SocialButton key={platform} platform={platform} size="icon" />
|
|
30
34
|
))}
|
|
31
35
|
</div>
|
|
32
36
|
|
|
33
|
-
<div dir="rtl" className="flex flex-wrap items-center gap-
|
|
37
|
+
<div dir="rtl" className="flex flex-wrap items-center gap-[var(--bh-space-xl-12)]">
|
|
34
38
|
{socialPlatforms.map((platform) => (
|
|
35
|
-
<SocialButton
|
|
39
|
+
<SocialButton
|
|
40
|
+
key={platform}
|
|
41
|
+
dir="rtl"
|
|
42
|
+
messages={arabicSocialButtonMessages}
|
|
43
|
+
platform={platform}
|
|
44
|
+
/>
|
|
36
45
|
))}
|
|
37
46
|
</div>
|
|
38
47
|
|
|
39
|
-
<div dir="rtl" className="flex flex-wrap items-center gap-
|
|
48
|
+
<div dir="rtl" className="flex flex-wrap items-center gap-[var(--bh-space-xl-12)]">
|
|
40
49
|
{socialPlatforms.map((platform) => (
|
|
41
50
|
<SocialButton
|
|
42
51
|
key={platform}
|
|
43
52
|
dir="rtl"
|
|
53
|
+
messages={arabicSocialButtonMessages}
|
|
44
54
|
platform={platform}
|
|
45
55
|
variant="outline"
|
|
46
56
|
/>
|
|
@@ -4,52 +4,52 @@ import { DynamicSpinner, Spinner } from "@/components/ui/spinner"
|
|
|
4
4
|
|
|
5
5
|
export function SpinnerDemo() {
|
|
6
6
|
return (
|
|
7
|
-
<div className="grid gap-
|
|
8
|
-
<div className="flex flex-wrap items-center gap-
|
|
7
|
+
<div className="grid gap-[var(--bh-space-5xl-24)]">
|
|
8
|
+
<div className="flex flex-wrap items-center gap-[var(--bh-space-5xl-24)]">
|
|
9
9
|
<Spinner
|
|
10
10
|
className="text-primary"
|
|
11
|
-
style={{ "--bh-spinner-size": "
|
|
11
|
+
style={{ "--bh-spinner-size": "var(--bh-space-3xl-16)" } as React.CSSProperties}
|
|
12
12
|
/>
|
|
13
13
|
<Spinner
|
|
14
14
|
className="text-success"
|
|
15
|
-
style={{ "--bh-spinner-size": "
|
|
15
|
+
style={{ "--bh-spinner-size": "var(--bh-space-4xl-20)" } as React.CSSProperties}
|
|
16
16
|
/>
|
|
17
17
|
<Spinner
|
|
18
18
|
className="text-danger"
|
|
19
|
-
style={{ "--bh-spinner-size": "
|
|
19
|
+
style={{ "--bh-spinner-size": "var(--bh-space-5xl-24)" } as React.CSSProperties}
|
|
20
20
|
/>
|
|
21
21
|
<DynamicSpinner
|
|
22
22
|
className="text-primary"
|
|
23
|
-
style={{ "--bh-spinner-size": "
|
|
23
|
+
style={{ "--bh-spinner-size": "var(--bh-space-3xl-16)" } as React.CSSProperties}
|
|
24
24
|
/>
|
|
25
25
|
<DynamicSpinner
|
|
26
26
|
className="text-success"
|
|
27
|
-
style={{ "--bh-spinner-size": "
|
|
27
|
+
style={{ "--bh-spinner-size": "var(--bh-space-4xl-20)" } as React.CSSProperties}
|
|
28
28
|
/>
|
|
29
29
|
<DynamicSpinner
|
|
30
30
|
className="text-danger"
|
|
31
|
-
style={{ "--bh-spinner-size": "
|
|
31
|
+
style={{ "--bh-spinner-size": "var(--bh-space-5xl-24)" } as React.CSSProperties}
|
|
32
32
|
/>
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
|
-
<div className="flex flex-wrap items-center gap-
|
|
35
|
+
<div className="flex flex-wrap items-center gap-[var(--bh-space-xl-12)]">
|
|
36
36
|
<div
|
|
37
|
-
className="inline-flex items-center gap-
|
|
37
|
+
className="inline-flex items-center gap-[var(--bh-space-md-8)] text-sm text-muted-foreground"
|
|
38
38
|
role="status"
|
|
39
39
|
>
|
|
40
40
|
<Spinner
|
|
41
41
|
className="text-current"
|
|
42
|
-
style={{ "--bh-spinner-size": "
|
|
42
|
+
style={{ "--bh-spinner-size": "calc(var(--bh-space-2xl-14) + var(--bh-space-xs-4))" } as React.CSSProperties}
|
|
43
43
|
/>
|
|
44
44
|
Loading
|
|
45
45
|
</div>
|
|
46
46
|
<div
|
|
47
|
-
className="inline-flex items-center gap-
|
|
47
|
+
className="inline-flex items-center gap-[var(--bh-space-md-8)] text-sm text-muted-foreground"
|
|
48
48
|
role="status"
|
|
49
49
|
>
|
|
50
50
|
<DynamicSpinner
|
|
51
51
|
className="text-current"
|
|
52
|
-
style={{ "--bh-spinner-size": "
|
|
52
|
+
style={{ "--bh-spinner-size": "calc(var(--bh-space-2xl-14) + var(--bh-space-xs-4))" } as React.CSSProperties}
|
|
53
53
|
/>
|
|
54
54
|
Syncing
|
|
55
55
|
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Tabs } from "@/components/ui/tabs"
|
|
2
|
+
|
|
3
|
+
const tabItems = ["Overview", "Details", "Settings", "Activity", "Files"]
|
|
4
|
+
|
|
5
|
+
export function TabsDemo() {
|
|
6
|
+
return (
|
|
7
|
+
<div className="grid gap-[var(--bh-space-5xl-24)]">
|
|
8
|
+
<Tabs ariaLabel="Tabs" items={tabItems} />
|
|
9
|
+
<Tabs ariaLabel="Tabs" items={tabItems} variant="segment" />
|
|
10
|
+
<Tabs ariaLabel="Tabs" items={tabItems} variant="rounded" />
|
|
11
|
+
</div>
|
|
12
|
+
)
|
|
13
|
+
}
|
|
@@ -4,7 +4,7 @@ import { Tag } from "@/components/ui/tag"
|
|
|
4
4
|
|
|
5
5
|
export function TagDemo() {
|
|
6
6
|
return (
|
|
7
|
-
<div className="flex flex-wrap items-center gap-
|
|
7
|
+
<div className="flex flex-wrap items-center gap-[var(--bh-space-md-8)]">
|
|
8
8
|
<Tag>Label</Tag>
|
|
9
9
|
<Tag state="active">Active</Tag>
|
|
10
10
|
<Tag state="disabled">Disabled</Tag>
|
|
@@ -31,15 +31,15 @@ const demoRtlTextareaProps = {
|
|
|
31
31
|
|
|
32
32
|
export function TextareaDemo() {
|
|
33
33
|
return (
|
|
34
|
-
<div className="grid gap-
|
|
35
|
-
<div className="flex flex-wrap items-start gap-
|
|
34
|
+
<div className="grid gap-[var(--bh-space-5xl-24)]">
|
|
35
|
+
<div className="flex flex-wrap items-start gap-[var(--bh-space-5xl-24)]">
|
|
36
36
|
<Textarea {...demoTextareaProps} />
|
|
37
37
|
<Textarea {...demoTextareaProps} state="filled" />
|
|
38
38
|
<Textarea {...demoTextareaProps} hasError state="placeholder" />
|
|
39
39
|
<Textarea {...demoTextareaProps} state="disabled" />
|
|
40
40
|
</div>
|
|
41
41
|
|
|
42
|
-
<div className="flex flex-wrap items-start gap-
|
|
42
|
+
<div className="flex flex-wrap items-start gap-[var(--bh-space-5xl-24)]">
|
|
43
43
|
<Textarea {...demoTextareaProps} type="tags" state="placeholder" />
|
|
44
44
|
<Textarea
|
|
45
45
|
{...demoTextareaProps}
|
|
@@ -62,7 +62,7 @@ export function TextareaDemo() {
|
|
|
62
62
|
/>
|
|
63
63
|
</div>
|
|
64
64
|
|
|
65
|
-
<div dir="rtl" className="flex flex-wrap items-start gap-
|
|
65
|
+
<div dir="rtl" className="flex flex-wrap items-start gap-[var(--bh-space-5xl-24)]">
|
|
66
66
|
<Textarea {...demoRtlTextareaProps} dir="rtl" />
|
|
67
67
|
<Textarea {...demoRtlTextareaProps} dir="rtl" state="filled" />
|
|
68
68
|
<Textarea {...demoRtlTextareaProps} dir="rtl" hasError state="placeholder" />
|