banhaten 0.1.2 → 0.1.3

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.
Files changed (231) hide show
  1. package/README.md +93 -328
  2. package/banhaten.config.example.json +1 -1
  3. package/docs/design-system/README.md +11 -0
  4. package/docs/design-system/appearance-presets.md +184 -0
  5. package/docs/design-system/appearances/default.md +94 -0
  6. package/docs/design-system/appearances/rounded.md +95 -0
  7. package/docs/design-system/appearances/sharp.md +95 -0
  8. package/docs/design-system/component-showcase-consistency-report.md +217 -0
  9. package/docs/design-system/component-token-consistency-audit.md +163 -0
  10. package/docs/design-system/components/README.md +74 -0
  11. package/docs/design-system/components/accordion.md +51 -0
  12. package/docs/design-system/components/activity-feed.md +92 -0
  13. package/docs/design-system/components/alert-dialog.md +70 -0
  14. package/docs/design-system/components/alert.md +79 -0
  15. package/docs/design-system/components/aspect-ratio.md +44 -0
  16. package/docs/design-system/components/attribute.md +87 -0
  17. package/docs/design-system/components/autocomplete.md +74 -0
  18. package/docs/design-system/components/avatar.md +52 -0
  19. package/docs/design-system/components/badge.md +53 -0
  20. package/docs/design-system/components/banner.md +85 -0
  21. package/docs/design-system/components/breadcrumbs.md +174 -0
  22. package/docs/design-system/components/button-group.md +83 -0
  23. package/docs/design-system/components/button.md +77 -0
  24. package/docs/design-system/components/card.md +78 -0
  25. package/docs/design-system/components/carousel.md +44 -0
  26. package/docs/design-system/components/catalog-components.md +45 -0
  27. package/docs/design-system/components/chart.md +43 -0
  28. package/docs/design-system/components/checkbox.md +52 -0
  29. package/docs/design-system/components/collapsible.md +48 -0
  30. package/docs/design-system/components/command-bar.md +57 -0
  31. package/docs/design-system/components/command.md +60 -0
  32. package/docs/design-system/components/context-menu.md +44 -0
  33. package/docs/design-system/components/date-picker.md +77 -0
  34. package/docs/design-system/components/divider.md +101 -0
  35. package/docs/design-system/components/empty-state.md +55 -0
  36. package/docs/design-system/components/field.md +69 -0
  37. package/docs/design-system/components/file-upload.md +185 -0
  38. package/docs/design-system/components/hover-card.md +46 -0
  39. package/docs/design-system/components/icons.md +48 -0
  40. package/docs/design-system/components/input-group.md +56 -0
  41. package/docs/design-system/components/input-otp.md +55 -0
  42. package/docs/design-system/components/input.md +48 -0
  43. package/docs/design-system/components/kbd.md +44 -0
  44. package/docs/design-system/components/label.md +48 -0
  45. package/docs/design-system/components/menu.md +59 -0
  46. package/docs/design-system/components/menubar.md +45 -0
  47. package/docs/design-system/components/modal.md +98 -0
  48. package/docs/design-system/components/native-select.md +52 -0
  49. package/docs/design-system/components/navigation-menu.md +48 -0
  50. package/docs/design-system/components/onboarding-step-list-item.md +80 -0
  51. package/docs/design-system/components/page-header.md +84 -0
  52. package/docs/design-system/components/pagination.md +49 -0
  53. package/docs/design-system/components/popover.md +58 -0
  54. package/docs/design-system/components/progress-slider.md +48 -0
  55. package/docs/design-system/components/progress.md +75 -0
  56. package/docs/design-system/components/radio-card.md +49 -0
  57. package/docs/design-system/components/radio-group.md +55 -0
  58. package/docs/design-system/components/resizable.md +42 -0
  59. package/docs/design-system/components/scroll-area.md +45 -0
  60. package/docs/design-system/components/select.md +50 -0
  61. package/docs/design-system/components/sheet.md +65 -0
  62. package/docs/design-system/components/sidebar.md +68 -0
  63. package/docs/design-system/components/skeleton.md +73 -0
  64. package/docs/design-system/components/slideout.md +63 -0
  65. package/docs/design-system/components/slider.md +61 -0
  66. package/docs/design-system/components/social-button.md +47 -0
  67. package/docs/design-system/components/spinner.md +61 -0
  68. package/docs/design-system/components/steps.md +63 -0
  69. package/docs/design-system/components/table.md +397 -0
  70. package/docs/design-system/components/tabs.md +52 -0
  71. package/docs/design-system/components/tag.md +78 -0
  72. package/docs/design-system/components/textarea.md +48 -0
  73. package/docs/design-system/components/timeline.md +81 -0
  74. package/docs/design-system/components/toast.md +56 -0
  75. package/docs/design-system/components/toggle.md +79 -0
  76. package/docs/design-system/components/toolbar.md +85 -0
  77. package/docs/design-system/components/tooltip.md +90 -0
  78. package/docs/design-system/components/typography.md +18 -0
  79. package/docs/design-system/design-system-test-missing-items.md +368 -0
  80. package/docs/design-system/icons.md +69 -0
  81. package/docs/design-system/registry-and-cli.md +41 -0
  82. package/docs/design-system/tabs.md +53 -0
  83. package/docs/design-system/token-governance.md +38 -0
  84. package/package.json +83 -65
  85. package/registry/components/alert-dialog.tsx +297 -0
  86. package/registry/components/aspect-ratio.tsx +30 -0
  87. package/registry/components/carousel.tsx +234 -0
  88. package/registry/components/chart.tsx +170 -0
  89. package/registry/components/collapsible.tsx +69 -0
  90. package/registry/components/command.tsx +174 -0
  91. package/registry/components/context-menu.tsx +236 -0
  92. package/registry/components/date-picker.tsx +1 -1
  93. package/registry/components/expanded/PageHeader.tsx +1 -1
  94. package/registry/components/expanded/breadcrumbs.css +139 -139
  95. package/registry/components/expanded/catalogComponentsShowcase.css +83 -83
  96. package/registry/components/expanded/steps.css +274 -274
  97. package/registry/components/expanded/timeline.css +264 -264
  98. package/registry/components/field.tsx +230 -0
  99. package/registry/components/hover-card.tsx +48 -0
  100. package/registry/components/input-group.tsx +130 -0
  101. package/registry/components/input.tsx +2 -2
  102. package/registry/components/kbd.tsx +44 -0
  103. package/registry/components/label.tsx +78 -0
  104. package/registry/components/menu.tsx +3 -1
  105. package/registry/components/menubar.tsx +226 -0
  106. package/registry/components/modal.tsx +109 -76
  107. package/registry/components/native-select.tsx +205 -0
  108. package/registry/components/navigation-menu.tsx +171 -0
  109. package/registry/components/radio-group.tsx +1 -1
  110. package/registry/components/resizable.tsx +74 -0
  111. package/registry/components/scroll-area.tsx +67 -0
  112. package/registry/components/select.tsx +2 -4
  113. package/registry/components/sheet.tsx +305 -0
  114. package/registry/components/sidebar.tsx +352 -0
  115. package/registry/components/social-button.tsx +74 -10
  116. package/registry/components/{expanded/tabs.css → tabs.css} +127 -106
  117. package/registry/components/tabs.tsx +242 -0
  118. package/registry/components/textarea.tsx +1 -1
  119. package/registry/components/toast.tsx +131 -0
  120. package/registry/examples/alert-dialog-demo.tsx +42 -0
  121. package/registry/examples/aspect-ratio-demo.tsx +11 -0
  122. package/registry/examples/carousel-demo.tsx +25 -0
  123. package/registry/examples/chart-demo.tsx +33 -0
  124. package/registry/examples/collapsible-demo.tsx +16 -0
  125. package/registry/examples/command-demo.tsx +42 -0
  126. package/registry/examples/context-menu-demo.tsx +29 -0
  127. package/registry/examples/expanded/tabs-demo.tsx +1 -1
  128. package/registry/examples/field-demo.tsx +51 -0
  129. package/registry/examples/hover-card-demo.tsx +23 -0
  130. package/registry/examples/input-group-demo.tsx +16 -0
  131. package/registry/examples/kbd-demo.tsx +11 -0
  132. package/registry/examples/label-demo.tsx +20 -0
  133. package/registry/examples/menubar-demo.tsx +34 -0
  134. package/registry/examples/native-select-demo.tsx +16 -0
  135. package/registry/examples/navigation-menu-demo.tsx +29 -0
  136. package/registry/examples/resizable-demo.tsx +22 -0
  137. package/registry/examples/scroll-area-demo.tsx +15 -0
  138. package/registry/examples/sheet-demo.tsx +47 -0
  139. package/registry/examples/sidebar-demo.tsx +55 -0
  140. package/registry/examples/tabs-demo.tsx +13 -0
  141. package/registry/examples/toast-demo.tsx +35 -0
  142. package/registry/index.json +655 -11
  143. package/registry/styles/globals.css +4733 -4690
  144. package/registry.json +1612 -0
  145. package/schema/config.schema.json +48 -0
  146. package/schema/registry.schema.json +85 -0
  147. package/schema/tokens.schema.json +63 -0
  148. package/src/cli/index.js +312 -18
  149. package/tokens/banhaten.tokens.json +1 -1
  150. package/registry/assets/avatars/avatar-02.jpg +0 -0
  151. package/registry/assets/avatars/avatar-03.jpg +0 -0
  152. package/registry/assets/avatars/avatar-04.jpg +0 -0
  153. package/registry/assets/avatars/avatar-05.jpg +0 -0
  154. package/registry/assets/avatars/avatar-06.jpg +0 -0
  155. package/registry/assets/avatars/avatar-07.jpg +0 -0
  156. package/registry/assets/avatars/avatar-08.jpg +0 -0
  157. package/registry/assets/avatars/avatar-09.jpg +0 -0
  158. package/registry/assets/avatars/avatar-10.jpg +0 -0
  159. package/registry/assets/avatars/avatar-11.jpg +0 -0
  160. package/registry/assets/avatars/avatar-12.jpg +0 -0
  161. package/registry/assets/avatars/avatar-13.jpg +0 -0
  162. package/registry/assets/avatars/avatar-14.jpg +0 -0
  163. package/registry/assets/avatars/avatar-15.jpg +0 -0
  164. package/registry/assets/avatars/avatar-16.jpg +0 -0
  165. package/registry/assets/avatars/avatar-17.jpg +0 -0
  166. package/registry/assets/avatars/avatar-18.jpg +0 -0
  167. package/registry/assets/avatars/avatar-19.jpg +0 -0
  168. package/registry/assets/avatars/avatar-20.jpg +0 -0
  169. package/registry/assets/avatars/avatar-21.jpg +0 -0
  170. package/registry/assets/avatars/avatar-22.jpg +0 -0
  171. package/registry/assets/avatars/avatar-23.jpg +0 -0
  172. package/registry/assets/avatars/avatar-24.jpg +0 -0
  173. package/registry/assets/avatars/avatar-25.jpg +0 -0
  174. package/registry/assets/avatars/avatar-26.jpg +0 -0
  175. package/registry/assets/avatars/avatar-27.jpg +0 -0
  176. package/registry/assets/avatars/avatar-28.jpg +0 -0
  177. package/registry/assets/avatars/avatar-29.jpg +0 -0
  178. package/registry/assets/avatars/avatar-30.jpg +0 -0
  179. package/registry/assets/avatars/avatar-31.jpg +0 -0
  180. package/registry/assets/avatars/avatar-32.jpg +0 -0
  181. package/registry/assets/avatars/avatar-33.jpg +0 -0
  182. package/registry/assets/avatars/avatar-34.jpg +0 -0
  183. package/registry/assets/avatars/avatar-35.jpg +0 -0
  184. package/registry/assets/image-assets.json +0 -744
  185. package/registry/assets/images/art-02.jpg +0 -0
  186. package/registry/assets/images/art-03.jpg +0 -0
  187. package/registry/assets/images/art-04.jpg +0 -0
  188. package/registry/assets/images/art-05.jpg +0 -0
  189. package/registry/assets/images/art-06.jpg +0 -0
  190. package/registry/assets/images/art-07.jpg +0 -0
  191. package/registry/assets/images/art-08.jpg +0 -0
  192. package/registry/assets/images/art-09.jpg +0 -0
  193. package/registry/assets/images/art-10.jpg +0 -0
  194. package/registry/assets/images/art-11.jpg +0 -0
  195. package/registry/assets/images/art-12.jpg +0 -0
  196. package/registry/assets/images/art-13.jpg +0 -0
  197. package/registry/assets/images/art-14.jpg +0 -0
  198. package/registry/assets/images/art-15.jpg +0 -0
  199. package/registry/assets/images/art-16.jpg +0 -0
  200. package/registry/assets/images/art-17.jpg +0 -0
  201. package/registry/assets/images/art-18.jpg +0 -0
  202. package/registry/assets/images/art-19.jpg +0 -0
  203. package/registry/assets/images/art-20.jpg +0 -0
  204. package/registry/assets/images/art-21.jpg +0 -0
  205. package/registry/assets/images/art-22.jpg +0 -0
  206. package/registry/assets/images/art-23.jpg +0 -0
  207. package/registry/assets/images/art-24.jpg +0 -0
  208. package/registry/assets/images/art-25.jpg +0 -0
  209. package/registry/assets/images/art-26.jpg +0 -0
  210. package/registry/assets/images/art-27.jpg +0 -0
  211. package/registry/assets/images/nature-01.jpg +0 -0
  212. package/registry/assets/images/nature-02.jpg +0 -0
  213. package/registry/assets/images/nature-03.jpg +0 -0
  214. package/registry/assets/images/nature-04.jpg +0 -0
  215. package/registry/assets/images/nature-05.jpg +0 -0
  216. package/registry/assets/images/nature-06.jpg +0 -0
  217. package/registry/assets/images/nature-07.jpg +0 -0
  218. package/registry/assets/images/nature-08.jpg +0 -0
  219. package/registry/assets/images/nature-09.jpg +0 -0
  220. package/registry/assets/images/nature-10.jpg +0 -0
  221. package/registry/assets/images/nature-11.jpg +0 -0
  222. package/registry/assets/images/nature-12.jpg +0 -0
  223. package/registry/assets/images/nature-13.jpg +0 -0
  224. package/registry/assets/images/nature-14.jpg +0 -0
  225. package/registry/assets/images/nature-15.jpg +0 -0
  226. package/registry/assets/images/nature-16.jpg +0 -0
  227. package/registry/assets/images/nature-17.jpg +0 -0
  228. package/registry/assets/images/nature-18.jpg +0 -0
  229. package/registry/assets/images/nature-19.jpg +0 -0
  230. package/registry/assets/images/nature-20.jpg +0 -0
  231. package/registry/components/expanded/Tabs.tsx +0 -86
@@ -0,0 +1,236 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu"
5
+ import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"
6
+
7
+ import { cn } from "@/lib/utils"
8
+
9
+ type ContextMenuProps = React.ComponentProps<typeof ContextMenuPrimitive.Root>
10
+ type ContextMenuTriggerProps = React.ComponentPropsWithoutRef<
11
+ typeof ContextMenuPrimitive.Trigger
12
+ >
13
+ type ContextMenuContentProps = React.ComponentPropsWithoutRef<
14
+ typeof ContextMenuPrimitive.Content
15
+ >
16
+ type ContextMenuItemProps = React.ComponentPropsWithoutRef<
17
+ typeof ContextMenuPrimitive.Item
18
+ > & {
19
+ inset?: boolean
20
+ }
21
+ type ContextMenuCheckboxItemProps = React.ComponentPropsWithoutRef<
22
+ typeof ContextMenuPrimitive.CheckboxItem
23
+ >
24
+ type ContextMenuRadioItemProps = React.ComponentPropsWithoutRef<
25
+ typeof ContextMenuPrimitive.RadioItem
26
+ >
27
+ type ContextMenuLabelProps = React.ComponentPropsWithoutRef<
28
+ typeof ContextMenuPrimitive.Label
29
+ > & {
30
+ inset?: boolean
31
+ }
32
+ type ContextMenuSeparatorProps = React.ComponentPropsWithoutRef<
33
+ typeof ContextMenuPrimitive.Separator
34
+ >
35
+ type ContextMenuSubTriggerProps = React.ComponentPropsWithoutRef<
36
+ typeof ContextMenuPrimitive.SubTrigger
37
+ > & {
38
+ inset?: boolean
39
+ }
40
+ type ContextMenuSubContentProps = React.ComponentPropsWithoutRef<
41
+ typeof ContextMenuPrimitive.SubContent
42
+ >
43
+ type ContextMenuShortcutProps = React.ComponentProps<"span">
44
+
45
+ const ContextMenu = ContextMenuPrimitive.Root
46
+ const ContextMenuTrigger = ContextMenuPrimitive.Trigger
47
+ const ContextMenuGroup = ContextMenuPrimitive.Group
48
+ const ContextMenuPortal = ContextMenuPrimitive.Portal
49
+ const ContextMenuSub = ContextMenuPrimitive.Sub
50
+ const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup
51
+
52
+ const menuContentClassName =
53
+ "z-[var(--bh-z-popover)] min-w-[var(--bh-menu-width)] overflow-hidden rounded-[var(--bh-radius-xl-10)] bg-[var(--bh-bg-raised)] p-[var(--bh-space-xs-4)] text-[var(--bh-content-default)] shadow-[var(--shadow-menu)]"
54
+
55
+ const menuItemClassName =
56
+ "relative flex min-h-[var(--bh-menu-item-min-height)] cursor-default select-none items-center gap-[var(--bh-space-md-8)] rounded-[var(--bh-radius-md-6)] px-[var(--bh-space-md-8)] py-[var(--bh-space-sm-6)] 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 data-[disabled]:pointer-events-none data-[disabled]:text-[var(--bh-content-disabled)] data-[highlighted]:bg-[var(--bh-menu-item-hover-bg)]"
57
+
58
+ const ContextMenuContent = React.forwardRef<
59
+ React.ElementRef<typeof ContextMenuPrimitive.Content>,
60
+ ContextMenuContentProps
61
+ >(function ContextMenuContent({ className, ...props }, ref) {
62
+ return (
63
+ <ContextMenuPortal>
64
+ <ContextMenuPrimitive.Content
65
+ data-slot="context-menu-content"
66
+ ref={ref}
67
+ className={cn(menuContentClassName, className)}
68
+ {...props}
69
+ />
70
+ </ContextMenuPortal>
71
+ )
72
+ })
73
+
74
+ const ContextMenuItem = React.forwardRef<
75
+ React.ElementRef<typeof ContextMenuPrimitive.Item>,
76
+ ContextMenuItemProps
77
+ >(function ContextMenuItem({ className, inset, ...props }, ref) {
78
+ return (
79
+ <ContextMenuPrimitive.Item
80
+ data-inset={inset ? "true" : undefined}
81
+ data-slot="context-menu-item"
82
+ ref={ref}
83
+ className={cn(menuItemClassName, inset && "ps-[var(--bh-space-8xl-48)]", className)}
84
+ {...props}
85
+ />
86
+ )
87
+ })
88
+
89
+ const ContextMenuCheckboxItem = React.forwardRef<
90
+ React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,
91
+ ContextMenuCheckboxItemProps
92
+ >(function ContextMenuCheckboxItem({ children, className, checked, ...props }, ref) {
93
+ return (
94
+ <ContextMenuPrimitive.CheckboxItem
95
+ checked={checked}
96
+ data-slot="context-menu-checkbox-item"
97
+ ref={ref}
98
+ className={cn(menuItemClassName, "ps-[var(--bh-space-8xl-48)]", className)}
99
+ {...props}
100
+ >
101
+ <span className="absolute start-[var(--bh-space-md-8)] inline-flex size-[var(--bh-space-5xl-24)] items-center justify-center">
102
+ <ContextMenuPrimitive.ItemIndicator>
103
+ <CheckIcon className="size-[var(--bh-space-3xl-16)]" />
104
+ </ContextMenuPrimitive.ItemIndicator>
105
+ </span>
106
+ {children}
107
+ </ContextMenuPrimitive.CheckboxItem>
108
+ )
109
+ })
110
+
111
+ const ContextMenuRadioItem = React.forwardRef<
112
+ React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,
113
+ ContextMenuRadioItemProps
114
+ >(function ContextMenuRadioItem({ children, className, ...props }, ref) {
115
+ return (
116
+ <ContextMenuPrimitive.RadioItem
117
+ data-slot="context-menu-radio-item"
118
+ ref={ref}
119
+ className={cn(menuItemClassName, "ps-[var(--bh-space-8xl-48)]", className)}
120
+ {...props}
121
+ >
122
+ <span className="absolute start-[var(--bh-space-md-8)] inline-flex size-[var(--bh-space-5xl-24)] items-center justify-center">
123
+ <ContextMenuPrimitive.ItemIndicator>
124
+ <CircleIcon className="size-[var(--bh-space-md-8)] fill-current" />
125
+ </ContextMenuPrimitive.ItemIndicator>
126
+ </span>
127
+ {children}
128
+ </ContextMenuPrimitive.RadioItem>
129
+ )
130
+ })
131
+
132
+ const ContextMenuLabel = React.forwardRef<
133
+ React.ElementRef<typeof ContextMenuPrimitive.Label>,
134
+ ContextMenuLabelProps
135
+ >(function ContextMenuLabel({ className, inset, ...props }, ref) {
136
+ return (
137
+ <ContextMenuPrimitive.Label
138
+ data-inset={inset ? "true" : undefined}
139
+ data-slot="context-menu-label"
140
+ ref={ref}
141
+ className={cn(
142
+ "px-[var(--bh-space-md-8)] py-[var(--bh-space-sm-6)] text-[length:var(--bh-text-body-xs-medium-font-size)] font-[var(--bh-text-body-xs-medium-font-weight)] leading-[var(--bh-text-body-xs-medium-line-height)] tracking-[var(--bh-text-body-xs-medium-letter-spacing)] text-[var(--bh-content-muted)]",
143
+ inset && "ps-[var(--bh-space-8xl-48)]",
144
+ className
145
+ )}
146
+ {...props}
147
+ />
148
+ )
149
+ })
150
+
151
+ const ContextMenuSeparator = React.forwardRef<
152
+ React.ElementRef<typeof ContextMenuPrimitive.Separator>,
153
+ ContextMenuSeparatorProps
154
+ >(function ContextMenuSeparator({ className, ...props }, ref) {
155
+ return (
156
+ <ContextMenuPrimitive.Separator
157
+ data-slot="context-menu-separator"
158
+ ref={ref}
159
+ className={cn("my-[var(--bh-space-xs-4)] h-[var(--bh-border-width-default)] bg-[var(--bh-border-subtle)]", className)}
160
+ {...props}
161
+ />
162
+ )
163
+ })
164
+
165
+ const ContextMenuSubTrigger = React.forwardRef<
166
+ React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,
167
+ ContextMenuSubTriggerProps
168
+ >(function ContextMenuSubTrigger({ children, className, inset, ...props }, ref) {
169
+ return (
170
+ <ContextMenuPrimitive.SubTrigger
171
+ data-inset={inset ? "true" : undefined}
172
+ data-slot="context-menu-sub-trigger"
173
+ ref={ref}
174
+ className={cn(menuItemClassName, inset && "ps-[var(--bh-space-8xl-48)]", className)}
175
+ {...props}
176
+ >
177
+ {children}
178
+ <ChevronRightIcon className="ms-auto size-[var(--bh-space-3xl-16)] rtl:-scale-x-100" />
179
+ </ContextMenuPrimitive.SubTrigger>
180
+ )
181
+ })
182
+
183
+ const ContextMenuSubContent = React.forwardRef<
184
+ React.ElementRef<typeof ContextMenuPrimitive.SubContent>,
185
+ ContextMenuSubContentProps
186
+ >(function ContextMenuSubContent({ className, ...props }, ref) {
187
+ return (
188
+ <ContextMenuPrimitive.SubContent
189
+ data-slot="context-menu-sub-content"
190
+ ref={ref}
191
+ className={cn(menuContentClassName, className)}
192
+ {...props}
193
+ />
194
+ )
195
+ })
196
+
197
+ function ContextMenuShortcut({ className, ...props }: ContextMenuShortcutProps) {
198
+ return (
199
+ <span
200
+ data-slot="context-menu-shortcut"
201
+ className={cn("ms-auto text-[length:var(--bh-text-body-xs-medium-font-size)] font-[var(--bh-text-body-xs-medium-font-weight)] text-[var(--bh-content-muted)]", className)}
202
+ {...props}
203
+ />
204
+ )
205
+ }
206
+
207
+ export {
208
+ ContextMenu,
209
+ ContextMenuCheckboxItem,
210
+ ContextMenuContent,
211
+ ContextMenuGroup,
212
+ ContextMenuItem,
213
+ ContextMenuLabel,
214
+ ContextMenuPortal,
215
+ ContextMenuRadioGroup,
216
+ ContextMenuRadioItem,
217
+ ContextMenuSeparator,
218
+ ContextMenuShortcut,
219
+ ContextMenuSub,
220
+ ContextMenuSubContent,
221
+ ContextMenuSubTrigger,
222
+ ContextMenuTrigger,
223
+ }
224
+ export type {
225
+ ContextMenuCheckboxItemProps,
226
+ ContextMenuContentProps,
227
+ ContextMenuItemProps,
228
+ ContextMenuLabelProps,
229
+ ContextMenuProps,
230
+ ContextMenuRadioItemProps,
231
+ ContextMenuSeparatorProps,
232
+ ContextMenuShortcutProps,
233
+ ContextMenuSubContentProps,
234
+ ContextMenuSubTriggerProps,
235
+ ContextMenuTriggerProps,
236
+ }
@@ -220,7 +220,7 @@ const monthButton = cva(
220
220
  [
221
221
  "flex size-[var(--bh-date-nav-button-size)] shrink-0 items-center justify-center rounded-[var(--bh-control-default)]",
222
222
  "bg-[var(--bh-interactive-soft-default)] text-[var(--bh-content-default)] outline-none transition-[background-color,box-shadow,color]",
223
- "hover:bg-[var(--bh-interactive-soft-hover)] focus-visible:shadow-[var(--shadow-button-focus)] disabled:opacity-0",
223
+ "hover:bg-[var(--bh-interactive-soft-hover)] focus-visible:shadow-[var(--shadow-button-focus)] disabled:opacity-[var(--bh-opacity-0)]",
224
224
  "[&_svg]:size-[var(--bh-date-nav-icon-size)]",
225
225
  ]
226
226
  )
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { HomeIcon as LucideHomeIcon } from "lucide-react";
3
- import { Tabs, type TabsProps } from "./Tabs";
3
+ import { Tabs, type TabsProps } from "../tabs";
4
4
  import "./pageHeader.css";
5
5
 
6
6
  export type PageHeaderBreadcrumb = {
@@ -1,140 +1,140 @@
1
- .ds-breadcrumbs {
2
- --breadcrumbs-color: var(--bh-content-subtle);
3
- --breadcrumbs-current: var(--bh-content-default);
4
- --breadcrumbs-border: var(--bh-border-subtle);
5
- --breadcrumbs-surface: var(--bh-bg-raised);
6
- --breadcrumbs-radius: var(--bh-radius-lg-8);
7
-
8
- box-sizing: border-box;
9
- display: block;
10
- max-width: 100%;
11
- min-width: 0;
12
- overflow-x: auto;
13
- overflow-y: hidden;
14
- color: var(--breadcrumbs-color);
15
- font-family: var(--bh-font-family);
16
- font-size: var(--bh-text-body-md-font-size);
17
- font-weight: var(--bh-font-weight-medium);
18
- letter-spacing: 0;
19
- line-height: var(--bh-text-body-md-line-height);
20
- }
21
-
22
- .ds-breadcrumbs *,
23
- .ds-breadcrumbs *::before,
24
- .ds-breadcrumbs *::after {
25
- box-sizing: border-box;
26
- }
27
-
28
- .ds-breadcrumbs ol {
29
- display: inline-flex;
30
- align-items: center;
31
- gap: var(--bh-space-xs-4);
32
- max-width: 100%;
33
- min-width: 0;
34
- margin: 0;
35
- padding: 0;
36
- list-style: none;
37
- }
38
-
39
- .ds-breadcrumbs--raised ol {
40
- gap: var(--bh-space-md-8);
41
- padding: var(--bh-space-xl-12);
42
- border: var(--bh-space-xxxs-1) solid var(--breadcrumbs-border);
43
- border-radius: var(--breadcrumbs-radius);
44
- background: var(--breadcrumbs-surface);
45
- }
46
-
47
- .ds-breadcrumbs li,
48
- .ds-breadcrumbs a,
49
- .ds-breadcrumbs li > span {
50
- min-width: 0;
51
- display: inline-flex;
52
- align-items: center;
53
- gap: var(--bh-space-xs-4);
54
- }
55
-
56
- .ds-breadcrumbs a {
57
- color: inherit;
58
- text-decoration: none;
59
- }
60
-
61
- .ds-breadcrumbs a:hover {
62
- color: var(--breadcrumbs-current);
63
- }
64
-
65
- .ds-breadcrumbs a:focus-visible {
66
- border-radius: var(--bh-radius-sm-4);
1
+ .ds-breadcrumbs {
2
+ --breadcrumbs-color: var(--bh-content-subtle);
3
+ --breadcrumbs-current: var(--bh-content-default);
4
+ --breadcrumbs-border: var(--bh-border-subtle);
5
+ --breadcrumbs-surface: var(--bh-bg-raised);
6
+ --breadcrumbs-radius: var(--bh-radius-lg-8);
7
+
8
+ box-sizing: border-box;
9
+ display: block;
10
+ max-width: 100%;
11
+ min-width: 0;
12
+ overflow-x: auto;
13
+ overflow-y: hidden;
14
+ color: var(--breadcrumbs-color);
15
+ font-family: var(--bh-font-family);
16
+ font-size: var(--bh-text-body-md-font-size);
17
+ font-weight: var(--bh-font-weight-medium);
18
+ letter-spacing: 0;
19
+ line-height: var(--bh-text-body-md-line-height);
20
+ }
21
+
22
+ .ds-breadcrumbs *,
23
+ .ds-breadcrumbs *::before,
24
+ .ds-breadcrumbs *::after {
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ .ds-breadcrumbs ol {
29
+ display: inline-flex;
30
+ align-items: center;
31
+ gap: var(--bh-space-xs-4);
32
+ max-width: 100%;
33
+ min-width: 0;
34
+ margin: 0;
35
+ padding: 0;
36
+ list-style: none;
37
+ }
38
+
39
+ .ds-breadcrumbs--raised ol {
40
+ gap: var(--bh-space-md-8);
41
+ padding: var(--bh-space-xl-12);
42
+ border: var(--bh-space-xxxs-1) solid var(--breadcrumbs-border);
43
+ border-radius: var(--breadcrumbs-radius);
44
+ background: var(--breadcrumbs-surface);
45
+ }
46
+
47
+ .ds-breadcrumbs li,
48
+ .ds-breadcrumbs a,
49
+ .ds-breadcrumbs li > span {
50
+ min-width: 0;
51
+ display: inline-flex;
52
+ align-items: center;
53
+ gap: var(--bh-space-xs-4);
54
+ }
55
+
56
+ .ds-breadcrumbs a {
57
+ color: inherit;
58
+ text-decoration: none;
59
+ }
60
+
61
+ .ds-breadcrumbs a:hover {
62
+ color: var(--breadcrumbs-current);
63
+ }
64
+
65
+ .ds-breadcrumbs a:focus-visible {
66
+ border-radius: var(--bh-radius-sm-4);
67
67
  outline: var(--bh-focus-ring-width) solid var(--bh-border-focus);
68
- outline-offset: var(--bh-space-xxs-2);
69
- }
70
-
71
- .ds-breadcrumbs .is-current {
72
- color: var(--breadcrumbs-current);
73
- }
74
-
75
- .ds-breadcrumbs__icon {
76
- width: var(--bh-space-4xl-20);
77
- height: var(--bh-space-4xl-20);
78
- flex: 0 0 auto;
79
- display: inline-grid;
80
- place-items: center;
81
- color: currentColor;
82
- }
83
-
84
- .ds-breadcrumbs__icon:empty {
85
- display: none;
86
- }
87
-
88
- .ds-breadcrumbs__icon svg {
89
- width: var(--bh-space-4xl-20);
90
- height: var(--bh-space-4xl-20);
91
- display: block;
92
- }
93
-
94
- .ds-breadcrumbs__label {
95
- max-width: 20ch;
96
- overflow: hidden;
97
- text-overflow: ellipsis;
98
- white-space: nowrap;
99
- }
100
-
101
- .ds-breadcrumbs__label--hidden {
102
- position: absolute;
103
- width: var(--bh-space-xxxs-1);
104
- height: var(--bh-space-xxxs-1);
105
- overflow: hidden;
106
- clip: rect(0 0 0 0);
107
- white-space: nowrap;
108
- }
109
-
110
- .ds-breadcrumbs__separator {
111
- width: var(--bh-space-3xl-16);
112
- height: var(--bh-space-3xl-16);
113
- display: inline-flex;
114
- align-items: center;
115
- justify-content: center;
116
- color: var(--breadcrumbs-color);
117
- line-height: var(--bh-text-body-2xs-regular-line-height);
118
- }
119
-
120
- .ds-breadcrumbs__separator svg {
121
- width: var(--bh-space-3xl-16);
122
- height: var(--bh-space-3xl-16);
123
- display: block;
124
- }
125
-
126
- .ds-breadcrumbs[dir="rtl"] .ds-breadcrumbs__separator svg {
127
- transform: scaleX(-1);
128
- }
129
-
130
- .ds-breadcrumbs--icon-only a,
131
- .ds-breadcrumbs--icon-only li > span:not(.ds-breadcrumbs__separator) {
132
- width: var(--bh-space-6xl-32);
133
- height: var(--bh-space-6xl-32);
134
- justify-content: center;
135
- border-radius: var(--breadcrumbs-radius);
136
- }
137
-
138
- .ds-breadcrumbs--icon-only a:hover {
139
- background: var(--bh-interactive-ghost-hover);
140
- }
68
+ outline-offset: var(--bh-space-xxs-2);
69
+ }
70
+
71
+ .ds-breadcrumbs .is-current {
72
+ color: var(--breadcrumbs-current);
73
+ }
74
+
75
+ .ds-breadcrumbs__icon {
76
+ width: var(--bh-space-4xl-20);
77
+ height: var(--bh-space-4xl-20);
78
+ flex: 0 0 auto;
79
+ display: inline-grid;
80
+ place-items: center;
81
+ color: currentColor;
82
+ }
83
+
84
+ .ds-breadcrumbs__icon:empty {
85
+ display: none;
86
+ }
87
+
88
+ .ds-breadcrumbs__icon svg {
89
+ width: var(--bh-space-4xl-20);
90
+ height: var(--bh-space-4xl-20);
91
+ display: block;
92
+ }
93
+
94
+ .ds-breadcrumbs__label {
95
+ max-width: 20ch;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ white-space: nowrap;
99
+ }
100
+
101
+ .ds-breadcrumbs__label--hidden {
102
+ position: absolute;
103
+ width: var(--bh-space-xxxs-1);
104
+ height: var(--bh-space-xxxs-1);
105
+ overflow: hidden;
106
+ clip: rect(0 0 0 0);
107
+ white-space: nowrap;
108
+ }
109
+
110
+ .ds-breadcrumbs__separator {
111
+ width: var(--bh-space-3xl-16);
112
+ height: var(--bh-space-3xl-16);
113
+ display: inline-flex;
114
+ align-items: center;
115
+ justify-content: center;
116
+ color: var(--breadcrumbs-color);
117
+ line-height: var(--bh-text-body-2xs-regular-line-height);
118
+ }
119
+
120
+ .ds-breadcrumbs__separator svg {
121
+ width: var(--bh-space-3xl-16);
122
+ height: var(--bh-space-3xl-16);
123
+ display: block;
124
+ }
125
+
126
+ .ds-breadcrumbs[dir="rtl"] .ds-breadcrumbs__separator svg {
127
+ transform: scaleX(-1);
128
+ }
129
+
130
+ .ds-breadcrumbs--icon-only a,
131
+ .ds-breadcrumbs--icon-only li > span:not(.ds-breadcrumbs__separator) {
132
+ width: var(--bh-space-6xl-32);
133
+ height: var(--bh-space-6xl-32);
134
+ justify-content: center;
135
+ border-radius: var(--breadcrumbs-radius);
136
+ }
137
+
138
+ .ds-breadcrumbs--icon-only a:hover {
139
+ background: var(--bh-interactive-ghost-hover);
140
+ }