banhaten 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +177 -139
- package/CONTRIBUTING.md +46 -46
- package/README.md +192 -192
- package/SECURITY.md +15 -15
- package/banhaten.config.example.json +11 -11
- package/docs/design-spacing.md +13 -13
- package/docs/design-system/README.md +22 -22
- package/docs/design-system/adoption-quality-remediation.md +87 -87
- package/docs/design-system/agent-usage.md +13 -13
- package/docs/design-system/appearance-presets.md +189 -189
- package/docs/design-system/appearances/default.md +94 -94
- package/docs/design-system/appearances/rounded.md +95 -95
- package/docs/design-system/appearances/sharp.md +95 -95
- package/docs/design-system/component-docs-pattern.md +81 -81
- package/docs/design-system/component-implementation-ownership-audit.md +245 -245
- package/docs/design-system/component-quality-audit-2026-08-20.md +225 -225
- package/docs/design-system/component-showcase-consistency-report.md +219 -219
- package/docs/design-system/component-token-consistency-audit.md +173 -173
- package/docs/design-system/components/README.md +91 -90
- package/docs/design-system/components/accordion.md +52 -52
- package/docs/design-system/components/activity-feed.md +93 -93
- package/docs/design-system/components/activity-heatmap.md +56 -56
- package/docs/design-system/components/alert-dialog.md +71 -71
- package/docs/design-system/components/alert.md +103 -97
- package/docs/design-system/components/app-header.md +97 -0
- package/docs/design-system/components/aspect-ratio.md +45 -45
- package/docs/design-system/components/attribute.md +101 -89
- package/docs/design-system/components/autocomplete.md +75 -75
- package/docs/design-system/components/avatar.md +53 -53
- package/docs/design-system/components/badge.md +55 -55
- package/docs/design-system/components/banner.md +86 -86
- package/docs/design-system/components/breadcrumbs.md +181 -177
- package/docs/design-system/components/button-group.md +97 -97
- package/docs/design-system/components/button.md +80 -80
- package/docs/design-system/components/card.md +102 -88
- package/docs/design-system/components/carousel.md +46 -46
- package/docs/design-system/components/catalog-components.md +46 -46
- package/docs/design-system/components/checkbox.md +53 -53
- package/docs/design-system/components/collapsible.md +63 -63
- package/docs/design-system/components/command.md +61 -61
- package/docs/design-system/components/context-menu.md +45 -45
- package/docs/design-system/components/date-picker.md +80 -80
- package/docs/design-system/components/divider.md +102 -102
- package/docs/design-system/components/empty-state.md +56 -56
- package/docs/design-system/components/field.md +70 -70
- package/docs/design-system/components/file-upload.md +186 -186
- package/docs/design-system/components/hover-card.md +47 -47
- package/docs/design-system/components/icons.md +48 -48
- package/docs/design-system/components/input-group.md +57 -57
- package/docs/design-system/components/input-otp.md +56 -56
- package/docs/design-system/components/input.md +111 -109
- package/docs/design-system/components/item.md +58 -58
- package/docs/design-system/components/kbd.md +49 -49
- package/docs/design-system/components/label.md +49 -49
- package/docs/design-system/components/menu.md +94 -73
- package/docs/design-system/components/menubar.md +46 -46
- package/docs/design-system/components/modal.md +104 -104
- package/docs/design-system/components/native-select.md +53 -53
- package/docs/design-system/components/navigation-menu.md +49 -49
- package/docs/design-system/components/onboarding-step-list-item.md +81 -81
- package/docs/design-system/components/page-header.md +127 -93
- package/docs/design-system/components/pagination.md +56 -56
- package/docs/design-system/components/popover.md +59 -59
- package/docs/design-system/components/progress-slider.md +49 -49
- package/docs/design-system/components/progress.md +76 -76
- package/docs/design-system/components/radio-card.md +50 -50
- package/docs/design-system/components/radio-group.md +56 -56
- package/docs/design-system/components/resizable.md +43 -43
- package/docs/design-system/components/scroll-area.md +50 -50
- package/docs/design-system/components/segmented-control.md +54 -54
- package/docs/design-system/components/select.md +68 -64
- package/docs/design-system/components/sheet.md +66 -66
- package/docs/design-system/components/sidebar.md +167 -111
- package/docs/design-system/components/skeleton.md +74 -74
- package/docs/design-system/components/slideout.md +64 -64
- package/docs/design-system/components/slider.md +62 -62
- package/docs/design-system/components/social-button.md +49 -49
- package/docs/design-system/components/spinner.md +62 -62
- package/docs/design-system/components/steps.md +65 -65
- package/docs/design-system/components/table.md +499 -422
- package/docs/design-system/components/tabs.md +74 -59
- package/docs/design-system/components/tag.md +79 -79
- package/docs/design-system/components/textarea.md +49 -49
- package/docs/design-system/components/timeline.md +82 -82
- package/docs/design-system/components/toast.md +57 -57
- package/docs/design-system/components/toggle.md +80 -80
- package/docs/design-system/components/toolbar.md +89 -89
- package/docs/design-system/components/tooltip.md +92 -92
- package/docs/design-system/components/typography.md +18 -18
- package/docs/design-system/density-and-elevation.md +65 -65
- package/docs/design-system/design-system-test-missing-items.md +368 -368
- package/docs/design-system/direction-and-localization.md +23 -23
- package/docs/design-system/form-recipes.md +73 -73
- package/docs/design-system/gap-promotion-policy.md +21 -21
- package/docs/design-system/icons.md +74 -74
- package/docs/design-system/installation.md +70 -70
- package/docs/design-system/launch-comparison-shadcn.md +98 -98
- package/docs/design-system/registry-and-cli.md +64 -64
- package/docs/design-system/release-policy.md +30 -30
- package/docs/design-system/roadmap.md +14 -14
- package/docs/design-system/support-matrix.md +23 -23
- package/docs/design-system/tabs.md +54 -54
- package/docs/design-system/template-gap-audit.md +32 -32
- package/docs/design-system/templates.md +59 -59
- package/docs/design-system/token-governance.md +72 -72
- package/package.json +98 -98
- package/registry/component-contract.json +40 -40
- package/registry/components/accordion.tsx +155 -155
- package/registry/components/alert-dialog.tsx +297 -297
- package/registry/components/alert.tsx +309 -293
- package/registry/components/app-header.tsx +151 -0
- package/registry/components/aspect-ratio.tsx +30 -30
- package/registry/components/attribute.tsx +489 -454
- package/registry/components/autocomplete.tsx +598 -598
- package/registry/components/avatar.tsx +385 -385
- package/registry/components/badge.tsx +630 -629
- package/registry/components/button-group.tsx +565 -565
- package/registry/components/button.tsx +128 -127
- package/registry/components/card.tsx +651 -638
- package/registry/components/carousel.tsx +296 -296
- package/registry/components/chart.tsx +203 -203
- package/registry/components/checkbox.tsx +247 -247
- package/registry/components/collapsible.tsx +109 -109
- package/registry/components/command.tsx +208 -208
- package/registry/components/context-menu.tsx +236 -236
- package/registry/components/date-picker.tsx +1289 -1289
- package/registry/components/expanded/ActivityFeed.tsx +227 -227
- package/registry/components/expanded/ActivityHeatmap.tsx +64 -64
- package/registry/components/expanded/Banner.tsx +179 -179
- package/registry/components/expanded/Breadcrumbs.tsx +135 -131
- package/registry/components/expanded/CatalogComponentsShowcase.tsx +205 -205
- package/registry/components/expanded/CatalogDivider.tsx +49 -49
- package/registry/components/expanded/EmptyState.tsx +155 -155
- package/registry/components/expanded/FileUpload.tsx +543 -543
- package/registry/components/expanded/OnboardingStepListItem.tsx +60 -60
- package/registry/components/expanded/PageHeader.tsx +209 -179
- package/registry/components/expanded/Slideout.tsx +108 -108
- package/registry/components/expanded/Steps.tsx +402 -402
- package/registry/components/expanded/Table.tsx +1109 -1092
- package/registry/components/expanded/Timeline.tsx +203 -203
- package/registry/components/expanded/activityFeed.css +248 -248
- package/registry/components/expanded/activityHeatmap.css +66 -66
- package/registry/components/expanded/banner.css +260 -260
- package/registry/components/expanded/breadcrumbs.css +157 -140
- package/registry/components/expanded/catalogComponentsShowcase.css +87 -87
- package/registry/components/expanded/divider.css +75 -75
- package/registry/components/expanded/emptyState.css +111 -111
- package/registry/components/expanded/fileUpload.css +457 -457
- package/registry/components/expanded/onboardingStepListItem.css +135 -135
- package/registry/components/expanded/pageHeader.css +284 -248
- package/registry/components/expanded/slideout.css +276 -276
- package/registry/components/expanded/steps.css +356 -356
- package/registry/components/expanded/table.css +655 -606
- package/registry/components/expanded/timeline.css +286 -286
- package/registry/components/field.tsx +283 -283
- package/registry/components/hover-card.tsx +48 -48
- package/registry/components/input-content.ts +107 -107
- package/registry/components/input-group.tsx +130 -130
- package/registry/components/input-otp.tsx +584 -584
- package/registry/components/input.tsx +992 -990
- package/registry/components/item.tsx +189 -189
- package/registry/components/kbd.tsx +246 -246
- package/registry/components/label.tsx +78 -78
- package/registry/components/menu.tsx +1091 -978
- package/registry/components/menubar.tsx +226 -226
- package/registry/components/modal.tsx +872 -872
- package/registry/components/native-select.tsx +205 -205
- package/registry/components/navigation-menu.tsx +171 -171
- package/registry/components/pagination.css +36 -36
- package/registry/components/pagination.tsx +560 -560
- package/registry/components/popover.tsx +338 -338
- package/registry/components/progress-slider.tsx +216 -216
- package/registry/components/radio-card.tsx +676 -676
- package/registry/components/radio-group.tsx +570 -570
- package/registry/components/resizable.tsx +108 -108
- package/registry/components/scroll-area.tsx +91 -91
- package/registry/components/segmented-control.tsx +87 -87
- package/registry/components/select-content.tsx +218 -218
- package/registry/components/select.tsx +937 -937
- package/registry/components/sheet.tsx +305 -305
- package/registry/components/sidebar.tsx +1535 -1433
- package/registry/components/skeleton.css +54 -54
- package/registry/components/skeleton.tsx +482 -482
- package/registry/components/slider.tsx +380 -380
- package/registry/components/social-button.tsx +387 -387
- package/registry/components/spinner.tsx +78 -78
- package/registry/components/table-elements.tsx +287 -128
- package/registry/components/tabs.css +246 -222
- package/registry/components/tabs.tsx +245 -241
- package/registry/components/tag.tsx +423 -423
- package/registry/components/textarea.tsx +610 -610
- package/registry/components/toast.tsx +136 -136
- package/registry/components/toggle.tsx +256 -256
- package/registry/components/toolbar.tsx +539 -539
- package/registry/components/tooltip.tsx +433 -433
- package/registry/examples/alert-demo.tsx +34 -34
- package/registry/examples/alert-dialog-demo.tsx +42 -42
- package/registry/examples/app-header-demo.tsx +40 -0
- package/registry/examples/aspect-ratio-demo.tsx +11 -11
- package/registry/examples/attribute-demo.tsx +65 -65
- package/registry/examples/autocomplete-demo.tsx +109 -109
- package/registry/examples/avatar-demo.tsx +132 -132
- package/registry/examples/badge-demo.tsx +69 -69
- package/registry/examples/button-demo.tsx +86 -86
- package/registry/examples/button-group-demo.tsx +63 -63
- package/registry/examples/card-demo.tsx +86 -86
- package/registry/examples/carousel-demo.tsx +43 -43
- package/registry/examples/chart-demo.tsx +18 -18
- package/registry/examples/checkbox-demo.tsx +62 -62
- package/registry/examples/collapsible-demo.tsx +16 -16
- package/registry/examples/collection-filter-bar-demo.tsx +135 -135
- package/registry/examples/command-demo.tsx +42 -42
- package/registry/examples/command-palette-demo.tsx +235 -235
- package/registry/examples/context-menu-demo.tsx +29 -29
- package/registry/examples/control-density-contract-demo.tsx +65 -65
- package/registry/examples/date-picker-demo.tsx +127 -127
- package/registry/examples/divider-demo.tsx +17 -17
- package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -29
- package/registry/examples/expanded/banner-demo.tsx +48 -48
- package/registry/examples/expanded/breadcrumbs-demo.tsx +59 -59
- package/registry/examples/expanded/empty-state-demo.tsx +39 -39
- package/registry/examples/expanded/file-upload-demo.tsx +60 -60
- package/registry/examples/expanded/onboarding-step-demo.tsx +11 -11
- package/registry/examples/expanded/slideout-demo.tsx +15 -15
- package/registry/examples/expanded/steps-demo.tsx +29 -29
- package/registry/examples/expanded/tabs-demo.tsx +13 -13
- package/registry/examples/expanded/timeline-demo.tsx +18 -18
- package/registry/examples/field-demo.tsx +51 -51
- package/registry/examples/hover-card-demo.tsx +23 -23
- package/registry/examples/input-actions-demo.tsx +36 -36
- package/registry/examples/input-demo.tsx +87 -87
- package/registry/examples/input-group-demo.tsx +16 -16
- package/registry/examples/input-otp-demo.tsx +72 -72
- package/registry/examples/item-demo.tsx +46 -46
- package/registry/examples/kbd-demo.tsx +12 -12
- package/registry/examples/label-demo.tsx +20 -20
- package/registry/examples/menu-demo.tsx +122 -122
- package/registry/examples/menubar-demo.tsx +34 -34
- package/registry/examples/modal-demo.tsx +74 -74
- package/registry/examples/native-select-demo.tsx +16 -16
- package/registry/examples/navigation-menu-demo.tsx +29 -29
- package/registry/examples/pagination-demo.tsx +20 -20
- package/registry/examples/popover-demo.tsx +547 -547
- package/registry/examples/progress-demo.tsx +37 -37
- package/registry/examples/progress-slider-demo.tsx +29 -29
- package/registry/examples/radio-card-demo.tsx +51 -51
- package/registry/examples/radio-group-demo.tsx +62 -62
- package/registry/examples/resizable-demo.tsx +22 -22
- package/registry/examples/results-toolbar-demo.tsx +44 -44
- package/registry/examples/scroll-area-demo.tsx +15 -15
- package/registry/examples/segmented-control-demo.tsx +39 -39
- package/registry/examples/select-demo.tsx +87 -87
- package/registry/examples/sheet-demo.tsx +47 -47
- package/registry/examples/sidebar-demo.tsx +101 -101
- package/registry/examples/slider-demo.tsx +31 -31
- package/registry/examples/social-button-demo.tsx +61 -61
- package/registry/examples/spinner-demo.tsx +59 -59
- package/registry/examples/tabs-demo.tsx +13 -13
- package/registry/examples/tag-demo.tsx +29 -29
- package/registry/examples/textarea-demo.tsx +79 -79
- package/registry/examples/toast-demo.tsx +35 -35
- package/registry/examples/toggle-demo.tsx +59 -59
- package/registry/examples/tooltip-demo.tsx +115 -115
- package/registry/guidance/USAGE.md +27 -27
- package/registry/hooks/use-direction.ts +207 -207
- package/registry/index.json +387 -17
- package/registry/styles/globals.css +46 -0
- package/registry.json +24 -2
- package/schema/config.schema.json +51 -51
- package/schema/registry.schema.json +194 -194
- package/schema/tokens.schema.json +167 -167
- package/src/cli/command-line.js +194 -194
- package/src/cli/config-editors.js +9 -9
- package/src/cli/doctor.js +399 -399
- package/src/cli/file-transaction.js +302 -302
- package/src/cli/global-css.js +153 -153
- package/src/cli/index.js +1002 -1002
- package/src/cli/install-plan.js +592 -592
- package/src/cli/install-receipt.js +171 -171
- package/src/cli/jsonc.js +203 -203
- package/src/cli/package-install-state.js +254 -254
- package/src/cli/package-manager.js +238 -238
- package/src/cli/package-plan.js +185 -185
- package/src/cli/package-version.js +97 -97
- package/src/cli/registry-query.js +207 -207
- package/src/cli/reporting.js +55 -55
- package/src/cli/schema-validation.js +19 -19
- package/src/cli/source-scanner.js +686 -686
- package/src/cli/vite-config.js +478 -478
- package/tokens/banhaten.tokens.json +184 -0
|
@@ -1,171 +1,171 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import * as React from "react"
|
|
4
|
-
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
|
|
5
|
-
import { ChevronDownIcon } from "lucide-react"
|
|
6
|
-
|
|
7
|
-
import { cn } from "@/lib/utils"
|
|
8
|
-
|
|
9
|
-
type NavigationMenuProps = React.ComponentProps<
|
|
10
|
-
typeof NavigationMenuPrimitive.Root
|
|
11
|
-
>
|
|
12
|
-
type NavigationMenuListProps = React.ComponentPropsWithoutRef<
|
|
13
|
-
typeof NavigationMenuPrimitive.List
|
|
14
|
-
>
|
|
15
|
-
type NavigationMenuTriggerProps = React.ComponentPropsWithoutRef<
|
|
16
|
-
typeof NavigationMenuPrimitive.Trigger
|
|
17
|
-
>
|
|
18
|
-
type NavigationMenuContentProps = React.ComponentPropsWithoutRef<
|
|
19
|
-
typeof NavigationMenuPrimitive.Content
|
|
20
|
-
>
|
|
21
|
-
type NavigationMenuLinkProps = React.ComponentPropsWithoutRef<
|
|
22
|
-
typeof NavigationMenuPrimitive.Link
|
|
23
|
-
>
|
|
24
|
-
type NavigationMenuViewportProps = React.ComponentPropsWithoutRef<
|
|
25
|
-
typeof NavigationMenuPrimitive.Viewport
|
|
26
|
-
>
|
|
27
|
-
type NavigationMenuIndicatorProps = React.ComponentPropsWithoutRef<
|
|
28
|
-
typeof NavigationMenuPrimitive.Indicator
|
|
29
|
-
>
|
|
30
|
-
|
|
31
|
-
const NavigationMenu = React.forwardRef<
|
|
32
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Root>,
|
|
33
|
-
NavigationMenuProps
|
|
34
|
-
>(function NavigationMenu({ className, ...props }, ref) {
|
|
35
|
-
return (
|
|
36
|
-
<NavigationMenuPrimitive.Root
|
|
37
|
-
data-slot="navigation-menu"
|
|
38
|
-
ref={ref}
|
|
39
|
-
className={cn("relative z-[var(--bh-z-raised)] flex max-w-max flex-1 items-center justify-center", className)}
|
|
40
|
-
{...props}
|
|
41
|
-
/>
|
|
42
|
-
)
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
const NavigationMenuList = React.forwardRef<
|
|
46
|
-
React.ElementRef<typeof NavigationMenuPrimitive.List>,
|
|
47
|
-
NavigationMenuListProps
|
|
48
|
-
>(function NavigationMenuList({ className, ...props }, ref) {
|
|
49
|
-
return (
|
|
50
|
-
<NavigationMenuPrimitive.List
|
|
51
|
-
data-slot="navigation-menu-list"
|
|
52
|
-
ref={ref}
|
|
53
|
-
className={cn("group flex flex-1 list-none items-center justify-center gap-[var(--bh-space-xs-4)]", className)}
|
|
54
|
-
{...props}
|
|
55
|
-
/>
|
|
56
|
-
)
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
const NavigationMenuItem = NavigationMenuPrimitive.Item
|
|
60
|
-
|
|
61
|
-
const NavigationMenuTrigger = React.forwardRef<
|
|
62
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,
|
|
63
|
-
NavigationMenuTriggerProps
|
|
64
|
-
>(function NavigationMenuTrigger({ children, className, ...props }, ref) {
|
|
65
|
-
return (
|
|
66
|
-
<NavigationMenuPrimitive.Trigger
|
|
67
|
-
data-slot="navigation-menu-trigger"
|
|
68
|
-
ref={ref}
|
|
69
|
-
className={cn(
|
|
70
|
-
"group inline-flex h-[var(--bh-space-7xl-40)] items-center justify-center gap-[var(--bh-space-xs-4)] rounded-[var(--bh-radius-lg-8)] bg-transparent px-[var(--bh-space-xl-12)] text-[length:var(--bh-text-body-sm-medium-font-size)] font-[var(--bh-text-body-sm-medium-font-weight)] leading-[var(--bh-text-body-sm-medium-line-height)] tracking-[var(--bh-text-body-sm-medium-letter-spacing)] text-[var(--bh-content-default)] outline-none transition-colors hover:bg-[var(--bh-interactive-ghost-hover)] focus:bg-[var(--bh-interactive-ghost-hover)] disabled:pointer-events-none disabled:text-[var(--bh-content-disabled)] data-[state=open]:bg-[var(--bh-interactive-soft-default)]",
|
|
71
|
-
className
|
|
72
|
-
)}
|
|
73
|
-
{...props}
|
|
74
|
-
>
|
|
75
|
-
{children}
|
|
76
|
-
<ChevronDownIcon
|
|
77
|
-
aria-hidden="true"
|
|
78
|
-
className="size-[var(--bh-space-3xl-16)] transition-transform group-data-[state=open]:rotate-180"
|
|
79
|
-
/>
|
|
80
|
-
</NavigationMenuPrimitive.Trigger>
|
|
81
|
-
)
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
const NavigationMenuContent = React.forwardRef<
|
|
85
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Content>,
|
|
86
|
-
NavigationMenuContentProps
|
|
87
|
-
>(function NavigationMenuContent({ className, ...props }, ref) {
|
|
88
|
-
return (
|
|
89
|
-
<NavigationMenuPrimitive.Content
|
|
90
|
-
data-slot="navigation-menu-content"
|
|
91
|
-
ref={ref}
|
|
92
|
-
className={cn(
|
|
93
|
-
"start-0 top-0 w-full rounded-[var(--bh-radius-2xl-12)] bg-[var(--bh-bg-raised)] p-[var(--bh-space-3xl-16)] text-[var(--bh-content-default)] shadow-[var(--elevation-popover)] md:absolute md:w-[var(--bh-space-19xl-384)]",
|
|
94
|
-
className
|
|
95
|
-
)}
|
|
96
|
-
{...props}
|
|
97
|
-
/>
|
|
98
|
-
)
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
const NavigationMenuLink = React.forwardRef<
|
|
102
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Link>,
|
|
103
|
-
NavigationMenuLinkProps
|
|
104
|
-
>(function NavigationMenuLink({ className, ...props }, ref) {
|
|
105
|
-
return (
|
|
106
|
-
<NavigationMenuPrimitive.Link
|
|
107
|
-
data-slot="navigation-menu-link"
|
|
108
|
-
ref={ref}
|
|
109
|
-
className={cn(
|
|
110
|
-
"block rounded-[var(--bh-radius-lg-8)] p-[var(--bh-space-xl-12)] text-start 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-default)] outline-none transition-colors hover:bg-[var(--bh-interactive-ghost-hover)] focus:bg-[var(--bh-interactive-ghost-hover)]",
|
|
111
|
-
className
|
|
112
|
-
)}
|
|
113
|
-
{...props}
|
|
114
|
-
/>
|
|
115
|
-
)
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
const NavigationMenuViewport = React.forwardRef<
|
|
119
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,
|
|
120
|
-
NavigationMenuViewportProps
|
|
121
|
-
>(function NavigationMenuViewport({ className, ...props }, ref) {
|
|
122
|
-
return (
|
|
123
|
-
<div className="absolute start-0 top-full flex justify-center">
|
|
124
|
-
<NavigationMenuPrimitive.Viewport
|
|
125
|
-
data-slot="navigation-menu-viewport"
|
|
126
|
-
ref={ref}
|
|
127
|
-
className={cn(
|
|
128
|
-
"origin-top-center relative mt-[var(--bh-space-xs-4)] h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-[var(--bh-radius-2xl-12)] bg-[var(--bh-bg-raised)] shadow-[var(--elevation-popover)] md:w-[var(--radix-navigation-menu-viewport-width)]",
|
|
129
|
-
className
|
|
130
|
-
)}
|
|
131
|
-
{...props}
|
|
132
|
-
/>
|
|
133
|
-
</div>
|
|
134
|
-
)
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
const NavigationMenuIndicator = React.forwardRef<
|
|
138
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,
|
|
139
|
-
NavigationMenuIndicatorProps
|
|
140
|
-
>(function NavigationMenuIndicator({ className, ...props }, ref) {
|
|
141
|
-
return (
|
|
142
|
-
<NavigationMenuPrimitive.Indicator
|
|
143
|
-
data-slot="navigation-menu-indicator"
|
|
144
|
-
ref={ref}
|
|
145
|
-
className={cn("top-full z-[var(--bh-z-popover)] flex h-[var(--bh-space-lg-10)] items-end justify-center overflow-hidden", className)}
|
|
146
|
-
{...props}
|
|
147
|
-
>
|
|
148
|
-
<div className="relative top-[var(--bh-space-xs-4)] size-[var(--bh-space-lg-10)] rotate-45 rounded-tl-[var(--bh-radius-sm-4)] bg-[var(--bh-bg-raised)] shadow-[inset_0_0_0_var(--bh-border-width-default)_var(--bh-border-subtle)]" />
|
|
149
|
-
</NavigationMenuPrimitive.Indicator>
|
|
150
|
-
)
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
export {
|
|
154
|
-
NavigationMenu,
|
|
155
|
-
NavigationMenuContent,
|
|
156
|
-
NavigationMenuIndicator,
|
|
157
|
-
NavigationMenuItem,
|
|
158
|
-
NavigationMenuLink,
|
|
159
|
-
NavigationMenuList,
|
|
160
|
-
NavigationMenuTrigger,
|
|
161
|
-
NavigationMenuViewport,
|
|
162
|
-
}
|
|
163
|
-
export type {
|
|
164
|
-
NavigationMenuContentProps,
|
|
165
|
-
NavigationMenuIndicatorProps,
|
|
166
|
-
NavigationMenuLinkProps,
|
|
167
|
-
NavigationMenuListProps,
|
|
168
|
-
NavigationMenuProps,
|
|
169
|
-
NavigationMenuTriggerProps,
|
|
170
|
-
NavigationMenuViewportProps,
|
|
171
|
-
}
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
|
|
5
|
+
import { ChevronDownIcon } from "lucide-react"
|
|
6
|
+
|
|
7
|
+
import { cn } from "@/lib/utils"
|
|
8
|
+
|
|
9
|
+
type NavigationMenuProps = React.ComponentProps<
|
|
10
|
+
typeof NavigationMenuPrimitive.Root
|
|
11
|
+
>
|
|
12
|
+
type NavigationMenuListProps = React.ComponentPropsWithoutRef<
|
|
13
|
+
typeof NavigationMenuPrimitive.List
|
|
14
|
+
>
|
|
15
|
+
type NavigationMenuTriggerProps = React.ComponentPropsWithoutRef<
|
|
16
|
+
typeof NavigationMenuPrimitive.Trigger
|
|
17
|
+
>
|
|
18
|
+
type NavigationMenuContentProps = React.ComponentPropsWithoutRef<
|
|
19
|
+
typeof NavigationMenuPrimitive.Content
|
|
20
|
+
>
|
|
21
|
+
type NavigationMenuLinkProps = React.ComponentPropsWithoutRef<
|
|
22
|
+
typeof NavigationMenuPrimitive.Link
|
|
23
|
+
>
|
|
24
|
+
type NavigationMenuViewportProps = React.ComponentPropsWithoutRef<
|
|
25
|
+
typeof NavigationMenuPrimitive.Viewport
|
|
26
|
+
>
|
|
27
|
+
type NavigationMenuIndicatorProps = React.ComponentPropsWithoutRef<
|
|
28
|
+
typeof NavigationMenuPrimitive.Indicator
|
|
29
|
+
>
|
|
30
|
+
|
|
31
|
+
const NavigationMenu = React.forwardRef<
|
|
32
|
+
React.ElementRef<typeof NavigationMenuPrimitive.Root>,
|
|
33
|
+
NavigationMenuProps
|
|
34
|
+
>(function NavigationMenu({ className, ...props }, ref) {
|
|
35
|
+
return (
|
|
36
|
+
<NavigationMenuPrimitive.Root
|
|
37
|
+
data-slot="navigation-menu"
|
|
38
|
+
ref={ref}
|
|
39
|
+
className={cn("relative z-[var(--bh-z-raised)] flex max-w-max flex-1 items-center justify-center", className)}
|
|
40
|
+
{...props}
|
|
41
|
+
/>
|
|
42
|
+
)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
const NavigationMenuList = React.forwardRef<
|
|
46
|
+
React.ElementRef<typeof NavigationMenuPrimitive.List>,
|
|
47
|
+
NavigationMenuListProps
|
|
48
|
+
>(function NavigationMenuList({ className, ...props }, ref) {
|
|
49
|
+
return (
|
|
50
|
+
<NavigationMenuPrimitive.List
|
|
51
|
+
data-slot="navigation-menu-list"
|
|
52
|
+
ref={ref}
|
|
53
|
+
className={cn("group flex flex-1 list-none items-center justify-center gap-[var(--bh-space-xs-4)]", className)}
|
|
54
|
+
{...props}
|
|
55
|
+
/>
|
|
56
|
+
)
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
const NavigationMenuItem = NavigationMenuPrimitive.Item
|
|
60
|
+
|
|
61
|
+
const NavigationMenuTrigger = React.forwardRef<
|
|
62
|
+
React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,
|
|
63
|
+
NavigationMenuTriggerProps
|
|
64
|
+
>(function NavigationMenuTrigger({ children, className, ...props }, ref) {
|
|
65
|
+
return (
|
|
66
|
+
<NavigationMenuPrimitive.Trigger
|
|
67
|
+
data-slot="navigation-menu-trigger"
|
|
68
|
+
ref={ref}
|
|
69
|
+
className={cn(
|
|
70
|
+
"group inline-flex h-[var(--bh-space-7xl-40)] items-center justify-center gap-[var(--bh-space-xs-4)] rounded-[var(--bh-radius-lg-8)] bg-transparent px-[var(--bh-space-xl-12)] text-[length:var(--bh-text-body-sm-medium-font-size)] font-[var(--bh-text-body-sm-medium-font-weight)] leading-[var(--bh-text-body-sm-medium-line-height)] tracking-[var(--bh-text-body-sm-medium-letter-spacing)] text-[var(--bh-content-default)] outline-none transition-colors hover:bg-[var(--bh-interactive-ghost-hover)] focus:bg-[var(--bh-interactive-ghost-hover)] disabled:pointer-events-none disabled:text-[var(--bh-content-disabled)] data-[state=open]:bg-[var(--bh-interactive-soft-default)]",
|
|
71
|
+
className
|
|
72
|
+
)}
|
|
73
|
+
{...props}
|
|
74
|
+
>
|
|
75
|
+
{children}
|
|
76
|
+
<ChevronDownIcon
|
|
77
|
+
aria-hidden="true"
|
|
78
|
+
className="size-[var(--bh-space-3xl-16)] transition-transform group-data-[state=open]:rotate-180"
|
|
79
|
+
/>
|
|
80
|
+
</NavigationMenuPrimitive.Trigger>
|
|
81
|
+
)
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
const NavigationMenuContent = React.forwardRef<
|
|
85
|
+
React.ElementRef<typeof NavigationMenuPrimitive.Content>,
|
|
86
|
+
NavigationMenuContentProps
|
|
87
|
+
>(function NavigationMenuContent({ className, ...props }, ref) {
|
|
88
|
+
return (
|
|
89
|
+
<NavigationMenuPrimitive.Content
|
|
90
|
+
data-slot="navigation-menu-content"
|
|
91
|
+
ref={ref}
|
|
92
|
+
className={cn(
|
|
93
|
+
"start-0 top-0 w-full rounded-[var(--bh-radius-2xl-12)] bg-[var(--bh-bg-raised)] p-[var(--bh-space-3xl-16)] text-[var(--bh-content-default)] shadow-[var(--elevation-popover)] md:absolute md:w-[var(--bh-space-19xl-384)]",
|
|
94
|
+
className
|
|
95
|
+
)}
|
|
96
|
+
{...props}
|
|
97
|
+
/>
|
|
98
|
+
)
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const NavigationMenuLink = React.forwardRef<
|
|
102
|
+
React.ElementRef<typeof NavigationMenuPrimitive.Link>,
|
|
103
|
+
NavigationMenuLinkProps
|
|
104
|
+
>(function NavigationMenuLink({ className, ...props }, ref) {
|
|
105
|
+
return (
|
|
106
|
+
<NavigationMenuPrimitive.Link
|
|
107
|
+
data-slot="navigation-menu-link"
|
|
108
|
+
ref={ref}
|
|
109
|
+
className={cn(
|
|
110
|
+
"block rounded-[var(--bh-radius-lg-8)] p-[var(--bh-space-xl-12)] text-start 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-default)] outline-none transition-colors hover:bg-[var(--bh-interactive-ghost-hover)] focus:bg-[var(--bh-interactive-ghost-hover)]",
|
|
111
|
+
className
|
|
112
|
+
)}
|
|
113
|
+
{...props}
|
|
114
|
+
/>
|
|
115
|
+
)
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
const NavigationMenuViewport = React.forwardRef<
|
|
119
|
+
React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,
|
|
120
|
+
NavigationMenuViewportProps
|
|
121
|
+
>(function NavigationMenuViewport({ className, ...props }, ref) {
|
|
122
|
+
return (
|
|
123
|
+
<div className="absolute start-0 top-full flex justify-center">
|
|
124
|
+
<NavigationMenuPrimitive.Viewport
|
|
125
|
+
data-slot="navigation-menu-viewport"
|
|
126
|
+
ref={ref}
|
|
127
|
+
className={cn(
|
|
128
|
+
"origin-top-center relative mt-[var(--bh-space-xs-4)] h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-[var(--bh-radius-2xl-12)] bg-[var(--bh-bg-raised)] shadow-[var(--elevation-popover)] md:w-[var(--radix-navigation-menu-viewport-width)]",
|
|
129
|
+
className
|
|
130
|
+
)}
|
|
131
|
+
{...props}
|
|
132
|
+
/>
|
|
133
|
+
</div>
|
|
134
|
+
)
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
const NavigationMenuIndicator = React.forwardRef<
|
|
138
|
+
React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,
|
|
139
|
+
NavigationMenuIndicatorProps
|
|
140
|
+
>(function NavigationMenuIndicator({ className, ...props }, ref) {
|
|
141
|
+
return (
|
|
142
|
+
<NavigationMenuPrimitive.Indicator
|
|
143
|
+
data-slot="navigation-menu-indicator"
|
|
144
|
+
ref={ref}
|
|
145
|
+
className={cn("top-full z-[var(--bh-z-popover)] flex h-[var(--bh-space-lg-10)] items-end justify-center overflow-hidden", className)}
|
|
146
|
+
{...props}
|
|
147
|
+
>
|
|
148
|
+
<div className="relative top-[var(--bh-space-xs-4)] size-[var(--bh-space-lg-10)] rotate-45 rounded-tl-[var(--bh-radius-sm-4)] bg-[var(--bh-bg-raised)] shadow-[inset_0_0_0_var(--bh-border-width-default)_var(--bh-border-subtle)]" />
|
|
149
|
+
</NavigationMenuPrimitive.Indicator>
|
|
150
|
+
)
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
NavigationMenu,
|
|
155
|
+
NavigationMenuContent,
|
|
156
|
+
NavigationMenuIndicator,
|
|
157
|
+
NavigationMenuItem,
|
|
158
|
+
NavigationMenuLink,
|
|
159
|
+
NavigationMenuList,
|
|
160
|
+
NavigationMenuTrigger,
|
|
161
|
+
NavigationMenuViewport,
|
|
162
|
+
}
|
|
163
|
+
export type {
|
|
164
|
+
NavigationMenuContentProps,
|
|
165
|
+
NavigationMenuIndicatorProps,
|
|
166
|
+
NavigationMenuLinkProps,
|
|
167
|
+
NavigationMenuListProps,
|
|
168
|
+
NavigationMenuProps,
|
|
169
|
+
NavigationMenuTriggerProps,
|
|
170
|
+
NavigationMenuViewportProps,
|
|
171
|
+
}
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
.ds-pagination {
|
|
2
|
-
container-type: inline-size;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
.ds-pagination__controls {
|
|
6
|
-
overflow-x: auto;
|
|
7
|
-
overscroll-behavior-inline: contain;
|
|
8
|
-
scrollbar-width: thin;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/* Approved exception: container-query breakpoints stay literal because CSS vars are not reliable in query conditions. */
|
|
12
|
-
@container (max-width: 28rem) {
|
|
13
|
-
.ds-pagination [data-slot="pagination-caption"] {
|
|
14
|
-
width: 100%;
|
|
15
|
-
flex: 1 0 100%;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.ds-pagination[data-type="numeric"] .ds-pagination__controls {
|
|
19
|
-
width: 100%;
|
|
20
|
-
justify-content: center;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.ds-pagination[data-type="numeric"] .ds-pagination__pages > :nth-child(n + 4):not(:last-child) {
|
|
24
|
-
display: none;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.ds-pagination[data-type="simple"] .ds-pagination__controls {
|
|
28
|
-
margin-inline-start: auto;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.ds-pagination[data-type="summary"] [data-slot="pagination-summary"] {
|
|
32
|
-
order: -1;
|
|
33
|
-
width: 100%;
|
|
34
|
-
text-align: center;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
1
|
+
.ds-pagination {
|
|
2
|
+
container-type: inline-size;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.ds-pagination__controls {
|
|
6
|
+
overflow-x: auto;
|
|
7
|
+
overscroll-behavior-inline: contain;
|
|
8
|
+
scrollbar-width: thin;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* Approved exception: container-query breakpoints stay literal because CSS vars are not reliable in query conditions. */
|
|
12
|
+
@container (max-width: 28rem) {
|
|
13
|
+
.ds-pagination [data-slot="pagination-caption"] {
|
|
14
|
+
width: 100%;
|
|
15
|
+
flex: 1 0 100%;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.ds-pagination[data-type="numeric"] .ds-pagination__controls {
|
|
19
|
+
width: 100%;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ds-pagination[data-type="numeric"] .ds-pagination__pages > :nth-child(n + 4):not(:last-child) {
|
|
24
|
+
display: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ds-pagination[data-type="simple"] .ds-pagination__controls {
|
|
28
|
+
margin-inline-start: auto;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.ds-pagination[data-type="summary"] [data-slot="pagination-summary"] {
|
|
32
|
+
order: -1;
|
|
33
|
+
width: 100%;
|
|
34
|
+
text-align: center;
|
|
35
|
+
}
|
|
36
|
+
}
|