@boyernick/standard-ui-react 0.1.1-canary.9 → 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/package.json +5 -3
- package/src/accordion.tsx +5 -2
- package/src/alert-dialog.tsx +1 -1
- package/src/attachment.tsx +5 -2
- package/src/autocomplete.tsx +4 -3
- package/src/block-editor.tsx +1747 -0
- package/src/brand.tsx +2 -2
- package/src/breadcrumb.tsx +14 -7
- package/src/button.tsx +22 -11
- package/src/calendar.tsx +6 -3
- package/src/carousel.tsx +220 -53
- package/src/checkbox.tsx +3 -2
- package/src/code-block.tsx +66 -5
- package/src/collapsible.tsx +4 -2
- package/src/combobox.tsx +4 -3
- package/src/command.tsx +27 -12
- package/src/dialog.tsx +33 -10
- package/src/empty.tsx +4 -4
- package/src/field.tsx +4 -3
- package/src/filter-group.tsx +143 -0
- package/src/icons.tsx +28 -1
- package/src/illustrations.tsx +219 -141
- package/src/index.ts +238 -18
- package/src/input.tsx +8 -5
- package/src/kbd.tsx +10 -4
- package/src/lib/focus.ts +41 -0
- package/src/lib/popup.ts +1 -1
- package/src/lifeline/company-icon.tsx +71 -0
- package/src/lifeline/index.ts +42 -0
- package/src/lifeline/lifeline-data.ts +97 -0
- package/src/lifeline/lifeline-desktop.tsx +204 -0
- package/src/lifeline/lifeline-event.tsx +108 -0
- package/src/lifeline/lifeline-fireworks.tsx +302 -0
- package/src/lifeline/lifeline-hover-image.tsx +269 -0
- package/src/lifeline/lifeline-icons.tsx +39 -0
- package/src/lifeline/lifeline-intro-timing.ts +105 -0
- package/src/lifeline/lifeline-labels.tsx +24 -0
- package/src/lifeline/lifeline-layout.ts +1 -0
- package/src/lifeline/lifeline-legend.tsx +31 -0
- package/src/lifeline/lifeline-lightbox.tsx +309 -0
- package/src/lifeline/lifeline-marker.tsx +183 -0
- package/src/lifeline/lifeline-people.tsx +99 -0
- package/src/lifeline/lifeline-photos.tsx +366 -0
- package/src/lifeline/lifeline-shell.tsx +135 -0
- package/src/lifeline/lifeline-utils.ts +83 -0
- package/src/lifeline/lifeline-vertical.tsx +482 -0
- package/src/lifeline/lifeline.tsx +69 -0
- package/src/lifeline/types.ts +112 -0
- package/src/lifeline/use-lifeline-intro.ts +130 -0
- package/src/lifeline/use-lifeline-scroll.ts +1011 -0
- package/src/lifeline/use-lifeline-vertical-scroll.ts +271 -0
- package/src/menubar.tsx +9 -2
- package/src/minimap.tsx +296 -0
- package/src/modal.tsx +608 -0
- package/src/navigation-menu.tsx +338 -67
- package/src/number-field.tsx +336 -61
- package/src/otp-field.tsx +4 -3
- package/src/pagination.tsx +262 -42
- package/src/password-protection.tsx +345 -0
- package/src/popover.tsx +1 -1
- package/src/progress.tsx +5 -0
- package/src/questionnaire.tsx +284 -0
- package/src/radio.tsx +4 -2
- package/src/scroll-area.tsx +4 -1
- package/src/select.tsx +5 -2
- package/src/sidebar.tsx +113 -28
- package/src/slider.tsx +66 -6
- package/src/sounds.tsx +6 -10
- package/src/spinner.tsx +105 -32
- package/src/switch.tsx +4 -1
- package/src/table.tsx +82 -15
- package/src/tabs.tsx +189 -38
- package/src/text-animate.tsx +71 -28
- package/src/textarea.tsx +6 -1
- package/src/timeline.tsx +378 -0
- package/src/toast.tsx +214 -35
- package/src/toggle.tsx +4 -2
- package/src/toolbar.tsx +12 -7
- package/src/tooltip.tsx +43 -3
- package/src/video-player.tsx +396 -127
- package/src/image-modal.tsx +0 -110
- package/src/markdown-editor.tsx +0 -302
package/src/navigation-menu.tsx
CHANGED
|
@@ -1,22 +1,188 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import { NavigationMenu as BaseNavigationMenu } from "@base-ui/react/navigation-menu"
|
|
4
|
-
import type
|
|
4
|
+
import { cva, type VariantProps } from "class-variance-authority"
|
|
5
|
+
import { createContext, useContext, useMemo, type ComponentProps } from "react"
|
|
5
6
|
import { IconChevronDownSmall } from "./icons"
|
|
6
7
|
import { cn } from "./lib/cn"
|
|
8
|
+
import { focusRing, focusRingBorder } from "./lib/focus"
|
|
7
9
|
import { motion } from "./lib/motion"
|
|
8
10
|
import { popupSurface } from "./lib/popup"
|
|
9
11
|
|
|
10
|
-
export type
|
|
12
|
+
export type NavigationMenuVariant = "plain" | "pill" | "underline"
|
|
13
|
+
export type NavigationMenuSize = "sm" | "md" | "lg"
|
|
14
|
+
type NavigationMenuOrientation = "horizontal" | "vertical"
|
|
15
|
+
|
|
16
|
+
type NavigationMenuStyleContextValue = {
|
|
17
|
+
orientation: NavigationMenuOrientation
|
|
18
|
+
size: NavigationMenuSize
|
|
19
|
+
variant: NavigationMenuVariant
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const NavigationMenuStyleContext =
|
|
23
|
+
createContext<NavigationMenuStyleContextValue>({
|
|
24
|
+
orientation: "horizontal",
|
|
25
|
+
size: "md",
|
|
26
|
+
variant: "plain",
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const navigationMenuRootVariants = cva("relative isolate z-10 flex", {
|
|
30
|
+
variants: {
|
|
31
|
+
orientation: {
|
|
32
|
+
horizontal: "max-w-max flex-1 items-center justify-center",
|
|
33
|
+
vertical: "w-full max-w-56 flex-col items-stretch",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
defaultVariants: {
|
|
37
|
+
orientation: "horizontal",
|
|
38
|
+
},
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
const navigationMenuListVariants = cva("group list-none", {
|
|
42
|
+
variants: {
|
|
43
|
+
orientation: {
|
|
44
|
+
horizontal: "flex flex-1 items-center justify-center gap-0.5",
|
|
45
|
+
vertical: "flex w-full flex-col items-stretch gap-0.5",
|
|
46
|
+
},
|
|
47
|
+
variant: {
|
|
48
|
+
plain: "",
|
|
49
|
+
pill: "bg-background-secondary p-1",
|
|
50
|
+
underline: "border-border-primary",
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
compoundVariants: [
|
|
54
|
+
{
|
|
55
|
+
orientation: "horizontal",
|
|
56
|
+
variant: "pill",
|
|
57
|
+
className: "rounded-full",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
orientation: "vertical",
|
|
61
|
+
variant: "pill",
|
|
62
|
+
className: "rounded-lg",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
orientation: "horizontal",
|
|
66
|
+
variant: "underline",
|
|
67
|
+
className: "border-b",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
orientation: "vertical",
|
|
71
|
+
variant: "underline",
|
|
72
|
+
className: "border-l",
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
defaultVariants: {
|
|
76
|
+
orientation: "horizontal",
|
|
77
|
+
variant: "plain",
|
|
78
|
+
},
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const navigationMenuBarItemVariants = cva(
|
|
82
|
+
cn(
|
|
83
|
+
"inline-flex cursor-pointer items-center gap-1 border border-transparent text-fg-secondary",
|
|
84
|
+
motion.colors,
|
|
85
|
+
focusRing,
|
|
86
|
+
"hover:text-fg-primary data-active:font-medium data-active:text-fg-primary data-popup-open:text-fg-primary",
|
|
87
|
+
),
|
|
88
|
+
{
|
|
89
|
+
variants: {
|
|
90
|
+
orientation: {
|
|
91
|
+
horizontal: "justify-center",
|
|
92
|
+
vertical: "w-full justify-between",
|
|
93
|
+
},
|
|
94
|
+
size: {
|
|
95
|
+
sm: "h-8 px-2.5 text-xs",
|
|
96
|
+
md: "h-9 px-3 text-sm",
|
|
97
|
+
lg: "h-10 px-3.5 text-sm",
|
|
98
|
+
},
|
|
99
|
+
variant: {
|
|
100
|
+
plain:
|
|
101
|
+
"rounded-md hover:bg-background-tertiary data-active:bg-background-tertiary data-popup-open:bg-background-tertiary",
|
|
102
|
+
pill: "rounded-full hover:bg-surface data-active:border-brand-primary-border data-active:bg-brand-primary data-active:text-brand-foreground data-popup-open:bg-surface data-popup-open:shadow-sm",
|
|
103
|
+
underline: "rounded-none hover:bg-transparent",
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
compoundVariants: [
|
|
107
|
+
{
|
|
108
|
+
orientation: "horizontal",
|
|
109
|
+
variant: "underline",
|
|
110
|
+
className:
|
|
111
|
+
"h-auto border-x-0 border-t-0 border-b-2 border-b-transparent px-2 py-2.5 data-active:border-b-brand-primary data-popup-open:border-b-brand-primary",
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
orientation: "vertical",
|
|
115
|
+
variant: "underline",
|
|
116
|
+
className:
|
|
117
|
+
"border-y-0 border-r-0 border-l-2 border-l-transparent data-active:border-l-brand-primary data-popup-open:border-l-brand-primary",
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
defaultVariants: {
|
|
121
|
+
orientation: "horizontal",
|
|
122
|
+
size: "md",
|
|
123
|
+
variant: "plain",
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
const navigationMenuLinkVariants = cva(
|
|
129
|
+
cn(
|
|
130
|
+
"group/navigation-link flex cursor-pointer rounded-md text-fg-primary",
|
|
131
|
+
focusRingBorder,
|
|
132
|
+
motion.colors,
|
|
133
|
+
focusRing,
|
|
134
|
+
"hover:bg-background-tertiary focus-visible:bg-background-tertiary data-active:bg-background-tertiary",
|
|
135
|
+
),
|
|
136
|
+
{
|
|
137
|
+
variants: {
|
|
138
|
+
variant: {
|
|
139
|
+
default: "flex-col gap-0.5",
|
|
140
|
+
featured:
|
|
141
|
+
"min-h-32 flex-col justify-end gap-1 bg-background-secondary",
|
|
142
|
+
},
|
|
143
|
+
size: {
|
|
144
|
+
sm: "p-2 text-xs",
|
|
145
|
+
md: "p-2.5 text-sm",
|
|
146
|
+
lg: "p-3 text-sm",
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
defaultVariants: {
|
|
150
|
+
variant: "default",
|
|
151
|
+
size: "md",
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
type NavigationMenuBarItemVariantProps = Omit<
|
|
157
|
+
VariantProps<typeof navigationMenuBarItemVariants>,
|
|
158
|
+
"orientation"
|
|
159
|
+
>
|
|
160
|
+
|
|
161
|
+
export type NavigationMenuProps = Omit<
|
|
162
|
+
ComponentProps<typeof BaseNavigationMenu.Root>,
|
|
163
|
+
"size"
|
|
164
|
+
> & {
|
|
165
|
+
size?: NavigationMenuSize
|
|
166
|
+
variant?: NavigationMenuVariant
|
|
167
|
+
}
|
|
11
168
|
export type NavigationMenuListProps = ComponentProps<
|
|
12
169
|
typeof BaseNavigationMenu.List
|
|
13
170
|
>
|
|
14
171
|
export type NavigationMenuItemProps = ComponentProps<
|
|
15
172
|
typeof BaseNavigationMenu.Item
|
|
16
173
|
>
|
|
17
|
-
export type NavigationMenuTriggerProps =
|
|
18
|
-
typeof BaseNavigationMenu.Trigger
|
|
19
|
-
|
|
174
|
+
export type NavigationMenuTriggerProps = Omit<
|
|
175
|
+
ComponentProps<typeof BaseNavigationMenu.Trigger>,
|
|
176
|
+
"size"
|
|
177
|
+
> &
|
|
178
|
+
NavigationMenuBarItemVariantProps & {
|
|
179
|
+
showIcon?: boolean
|
|
180
|
+
}
|
|
181
|
+
export type NavigationMenuBarLinkProps = Omit<
|
|
182
|
+
ComponentProps<typeof BaseNavigationMenu.Link>,
|
|
183
|
+
"size"
|
|
184
|
+
> &
|
|
185
|
+
NavigationMenuBarItemVariantProps
|
|
20
186
|
export type NavigationMenuContentProps = ComponentProps<
|
|
21
187
|
typeof BaseNavigationMenu.Content
|
|
22
188
|
>
|
|
@@ -38,41 +204,59 @@ export type NavigationMenuPopupProps = ComponentProps<
|
|
|
38
204
|
export type NavigationMenuArrowProps = ComponentProps<
|
|
39
205
|
typeof BaseNavigationMenu.Arrow
|
|
40
206
|
>
|
|
41
|
-
export type NavigationMenuLinkProps =
|
|
42
|
-
typeof BaseNavigationMenu.Link
|
|
43
|
-
|
|
207
|
+
export type NavigationMenuLinkProps = Omit<
|
|
208
|
+
ComponentProps<typeof BaseNavigationMenu.Link>,
|
|
209
|
+
"size"
|
|
210
|
+
> &
|
|
211
|
+
VariantProps<typeof navigationMenuLinkVariants>
|
|
212
|
+
export type NavigationMenuLinkIconProps = ComponentProps<"span">
|
|
213
|
+
export type NavigationMenuLinkTitleProps = ComponentProps<"span">
|
|
214
|
+
export type NavigationMenuLinkDescriptionProps = ComponentProps<"span">
|
|
44
215
|
export type NavigationMenuIconProps = ComponentProps<
|
|
45
216
|
typeof BaseNavigationMenu.Icon
|
|
46
217
|
>
|
|
47
218
|
|
|
48
|
-
const navigationMenuTriggerClassName = cn(
|
|
49
|
-
"inline-flex h-9 cursor-pointer items-center gap-1 rounded-md px-3 text-sm text-fg-secondary outline-none",
|
|
50
|
-
motion.colors,
|
|
51
|
-
"hover:bg-background-tertiary hover:text-fg-primary focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-offset-1 focus-visible:ring-offset-background-primary focus-visible:ring-ring/20 data-popup-open:bg-background-tertiary data-popup-open:text-fg-primary",
|
|
52
|
-
)
|
|
53
|
-
|
|
54
219
|
export const NavigationMenu = ({
|
|
55
220
|
className,
|
|
221
|
+
orientation = "horizontal",
|
|
222
|
+
size = "md",
|
|
223
|
+
variant = "plain",
|
|
56
224
|
...props
|
|
57
|
-
}: NavigationMenuProps) =>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
225
|
+
}: NavigationMenuProps) => {
|
|
226
|
+
const styleContext = useMemo(
|
|
227
|
+
() => ({ orientation, size, variant }),
|
|
228
|
+
[orientation, size, variant],
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
return (
|
|
232
|
+
<NavigationMenuStyleContext.Provider value={styleContext}>
|
|
233
|
+
<BaseNavigationMenu.Root
|
|
234
|
+
orientation={orientation}
|
|
235
|
+
data-orientation={orientation}
|
|
236
|
+
data-variant={variant}
|
|
237
|
+
className={cn(navigationMenuRootVariants({ orientation }), className)}
|
|
238
|
+
{...props}
|
|
239
|
+
/>
|
|
240
|
+
</NavigationMenuStyleContext.Provider>
|
|
241
|
+
)
|
|
242
|
+
}
|
|
63
243
|
|
|
64
244
|
export const NavigationMenuList = ({
|
|
65
245
|
className,
|
|
66
246
|
...props
|
|
67
|
-
}: NavigationMenuListProps) =>
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
)
|
|
247
|
+
}: NavigationMenuListProps) => {
|
|
248
|
+
const { orientation, variant } = useContext(NavigationMenuStyleContext)
|
|
249
|
+
|
|
250
|
+
return (
|
|
251
|
+
<BaseNavigationMenu.List
|
|
252
|
+
className={cn(
|
|
253
|
+
navigationMenuListVariants({ orientation, variant }),
|
|
254
|
+
className,
|
|
255
|
+
)}
|
|
256
|
+
{...props}
|
|
257
|
+
/>
|
|
258
|
+
)
|
|
259
|
+
}
|
|
76
260
|
|
|
77
261
|
export const NavigationMenuItem = ({
|
|
78
262
|
className,
|
|
@@ -84,34 +268,79 @@ export const NavigationMenuItem = ({
|
|
|
84
268
|
export const NavigationMenuTrigger = ({
|
|
85
269
|
className,
|
|
86
270
|
children,
|
|
271
|
+
showIcon = true,
|
|
272
|
+
size,
|
|
273
|
+
variant,
|
|
87
274
|
...props
|
|
88
|
-
}: NavigationMenuTriggerProps) =>
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
275
|
+
}: NavigationMenuTriggerProps) => {
|
|
276
|
+
const styles = useContext(NavigationMenuStyleContext)
|
|
277
|
+
|
|
278
|
+
return (
|
|
279
|
+
<BaseNavigationMenu.Trigger
|
|
280
|
+
className={cn(
|
|
281
|
+
navigationMenuBarItemVariants({
|
|
282
|
+
orientation: styles.orientation,
|
|
283
|
+
size: size ?? styles.size,
|
|
284
|
+
variant: variant ?? styles.variant,
|
|
285
|
+
}),
|
|
286
|
+
className,
|
|
287
|
+
)}
|
|
288
|
+
{...props}
|
|
289
|
+
>
|
|
290
|
+
{children}
|
|
291
|
+
{showIcon ? <NavigationMenuIcon /> : null}
|
|
292
|
+
</BaseNavigationMenu.Trigger>
|
|
293
|
+
)
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export const NavigationMenuBarLink = ({
|
|
297
|
+
className,
|
|
298
|
+
size,
|
|
299
|
+
variant,
|
|
300
|
+
...props
|
|
301
|
+
}: NavigationMenuBarLinkProps) => {
|
|
302
|
+
const styles = useContext(NavigationMenuStyleContext)
|
|
303
|
+
|
|
304
|
+
return (
|
|
305
|
+
<BaseNavigationMenu.Link
|
|
306
|
+
className={cn(
|
|
307
|
+
navigationMenuBarItemVariants({
|
|
308
|
+
orientation: styles.orientation,
|
|
309
|
+
size: size ?? styles.size,
|
|
310
|
+
variant: variant ?? styles.variant,
|
|
311
|
+
}),
|
|
312
|
+
className,
|
|
313
|
+
)}
|
|
314
|
+
{...props}
|
|
315
|
+
/>
|
|
316
|
+
)
|
|
317
|
+
}
|
|
97
318
|
|
|
98
319
|
export const NavigationMenuIcon = ({
|
|
99
320
|
className,
|
|
100
321
|
children,
|
|
101
322
|
...props
|
|
102
|
-
}: NavigationMenuIconProps) =>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
)
|
|
323
|
+
}: NavigationMenuIconProps) => {
|
|
324
|
+
const { orientation } = useContext(NavigationMenuStyleContext)
|
|
325
|
+
|
|
326
|
+
return (
|
|
327
|
+
<BaseNavigationMenu.Icon
|
|
328
|
+
className={cn(
|
|
329
|
+
"inline-flex text-fg-tertiary",
|
|
330
|
+
motion.transform,
|
|
331
|
+
orientation === "horizontal"
|
|
332
|
+
? "data-popup-open:rotate-180"
|
|
333
|
+
: "-rotate-90 data-popup-open:rotate-0",
|
|
334
|
+
className,
|
|
335
|
+
)}
|
|
336
|
+
{...props}
|
|
337
|
+
>
|
|
338
|
+
{children ?? (
|
|
339
|
+
<IconChevronDownSmall size={14} className="size-3.5" aria-hidden />
|
|
340
|
+
)}
|
|
341
|
+
</BaseNavigationMenu.Icon>
|
|
342
|
+
)
|
|
343
|
+
}
|
|
115
344
|
|
|
116
345
|
export const NavigationMenuContent = ({
|
|
117
346
|
className,
|
|
@@ -119,8 +348,7 @@ export const NavigationMenuContent = ({
|
|
|
119
348
|
}: NavigationMenuContentProps) => (
|
|
120
349
|
<BaseNavigationMenu.Content
|
|
121
350
|
className={cn(
|
|
122
|
-
"w-auto p-2 data-
|
|
123
|
-
motion.colors,
|
|
351
|
+
"w-auto p-2 transition-[opacity,transform] duration-[var(--duration-sm)] ease-enter motion-reduce:transition-none data-starting-style:translate-y-1 data-starting-style:opacity-0 data-ending-style:translate-y-1 data-ending-style:opacity-0",
|
|
124
352
|
className,
|
|
125
353
|
)}
|
|
126
354
|
{...props}
|
|
@@ -129,19 +357,49 @@ export const NavigationMenuContent = ({
|
|
|
129
357
|
|
|
130
358
|
export const NavigationMenuLink = ({
|
|
131
359
|
className,
|
|
360
|
+
variant,
|
|
361
|
+
size,
|
|
132
362
|
...props
|
|
133
363
|
}: NavigationMenuLinkProps) => (
|
|
134
364
|
<BaseNavigationMenu.Link
|
|
365
|
+
className={cn(navigationMenuLinkVariants({ variant, size }), className)}
|
|
366
|
+
{...props}
|
|
367
|
+
/>
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
export const NavigationMenuLinkIcon = ({
|
|
371
|
+
className,
|
|
372
|
+
...props
|
|
373
|
+
}: NavigationMenuLinkIconProps) => (
|
|
374
|
+
<span
|
|
135
375
|
className={cn(
|
|
136
|
-
"
|
|
137
|
-
motion.colors,
|
|
138
|
-
"hover:bg-background-tertiary focus-visible:bg-background-tertiary focus-visible:ring-[3px] focus-visible:ring-offset-1 focus-visible:ring-offset-background-primary focus-visible:ring-ring/20 data-active:bg-background-tertiary",
|
|
376
|
+
"mb-1 flex size-9 shrink-0 items-center justify-center rounded-md border border-border-primary bg-surface text-fg-secondary transition-colors duration-[var(--duration-sm)] ease-enter group-hover/navigation-link:border-border-secondary group-hover/navigation-link:bg-background-quaternary group-hover/navigation-link:text-fg-primary [&_svg]:size-4",
|
|
139
377
|
className,
|
|
140
378
|
)}
|
|
141
379
|
{...props}
|
|
142
380
|
/>
|
|
143
381
|
)
|
|
144
382
|
|
|
383
|
+
export const NavigationMenuLinkTitle = ({
|
|
384
|
+
className,
|
|
385
|
+
...props
|
|
386
|
+
}: NavigationMenuLinkTitleProps) => (
|
|
387
|
+
<span
|
|
388
|
+
className={cn("text-sm-strong text-fg-primary", className)}
|
|
389
|
+
{...props}
|
|
390
|
+
/>
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
export const NavigationMenuLinkDescription = ({
|
|
394
|
+
className,
|
|
395
|
+
...props
|
|
396
|
+
}: NavigationMenuLinkDescriptionProps) => (
|
|
397
|
+
<span
|
|
398
|
+
className={cn("text-xs leading-relaxed text-fg-tertiary", className)}
|
|
399
|
+
{...props}
|
|
400
|
+
/>
|
|
401
|
+
)
|
|
402
|
+
|
|
145
403
|
export const NavigationMenuPortal = (props: NavigationMenuPortalProps) => (
|
|
146
404
|
<BaseNavigationMenu.Portal {...props} />
|
|
147
405
|
)
|
|
@@ -162,12 +420,17 @@ export const NavigationMenuBackdrop = ({
|
|
|
162
420
|
|
|
163
421
|
export const NavigationMenuPositioner = ({
|
|
164
422
|
sideOffset = 8,
|
|
423
|
+
collisionPadding = 16,
|
|
165
424
|
className,
|
|
166
425
|
...props
|
|
167
426
|
}: NavigationMenuPositionerProps) => (
|
|
168
427
|
<BaseNavigationMenu.Positioner
|
|
169
428
|
sideOffset={sideOffset}
|
|
170
|
-
|
|
429
|
+
collisionPadding={collisionPadding}
|
|
430
|
+
className={cn(
|
|
431
|
+
"z-50 h-[var(--positioner-height)] w-[var(--positioner-width)] max-w-[var(--available-width)] outline-none transition-[top,left,right,bottom] duration-[var(--duration-md)] ease-move data-instant:transition-none before:absolute before:content-[''] data-[side=bottom]:before:top-[-8px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0 data-[side=bottom]:before:h-2 data-[side=left]:before:top-0 data-[side=left]:before:right-[-8px] data-[side=left]:before:bottom-0 data-[side=left]:before:w-2 data-[side=right]:before:top-0 data-[side=right]:before:bottom-0 data-[side=right]:before:left-[-8px] data-[side=right]:before:w-2 data-[side=top]:before:right-0 data-[side=top]:before:bottom-[-8px] data-[side=top]:before:left-0 data-[side=top]:before:h-2",
|
|
432
|
+
className,
|
|
433
|
+
)}
|
|
171
434
|
{...props}
|
|
172
435
|
/>
|
|
173
436
|
)
|
|
@@ -178,10 +441,10 @@ export const NavigationMenuPopup = ({
|
|
|
178
441
|
}: NavigationMenuPopupProps) => (
|
|
179
442
|
<BaseNavigationMenu.Popup
|
|
180
443
|
className={cn(
|
|
181
|
-
"relative z-50 w-[var(--popup-width)]
|
|
444
|
+
"relative z-50 h-[var(--popup-height)] w-[var(--popup-width)] max-w-[calc(100vw-2rem)]",
|
|
182
445
|
popupSurface,
|
|
183
|
-
|
|
184
|
-
"
|
|
446
|
+
motion.popupAnchor,
|
|
447
|
+
"transition-[width,height,transform,scale,opacity] duration-[var(--duration-md)]",
|
|
185
448
|
className,
|
|
186
449
|
)}
|
|
187
450
|
{...props}
|
|
@@ -204,16 +467,24 @@ export const NavigationMenuArrow = ({
|
|
|
204
467
|
}: NavigationMenuArrowProps) => (
|
|
205
468
|
<BaseNavigationMenu.Arrow
|
|
206
469
|
className={cn(
|
|
207
|
-
"
|
|
208
|
-
"
|
|
209
|
-
"data-[side=bottom]:border-r-0 data-[side=bottom]:border-b-0",
|
|
210
|
-
"data-[side=top]:border-t-0 data-[side=top]:border-l-0",
|
|
211
|
-
"data-[side=left]:border-b-0 data-[side=left]:border-l-0",
|
|
212
|
-
"data-[side=right]:border-t-0 data-[side=right]:border-r-0",
|
|
470
|
+
"relative block h-1.5 w-3 overflow-clip transition-[top,right,bottom,left] duration-[var(--duration-md)] ease-move before:absolute before:bottom-0 before:left-1/2 before:block before:size-[calc(6px*1.414)] before:-translate-x-1/2 before:translate-y-1/2 before:rotate-45 before:border before:border-border-primary before:bg-surface before:content-['']",
|
|
471
|
+
"data-[side=bottom]:top-[-6px] data-[side=left]:right-[-9px] data-[side=left]:rotate-90 data-[side=right]:left-[-9px] data-[side=right]:-rotate-90 data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180",
|
|
213
472
|
className,
|
|
214
473
|
)}
|
|
215
474
|
{...props}
|
|
216
475
|
/>
|
|
217
476
|
)
|
|
218
477
|
|
|
219
|
-
|
|
478
|
+
const navigationMenuTriggerClassName = navigationMenuBarItemVariants({
|
|
479
|
+
orientation: "horizontal",
|
|
480
|
+
size: "md",
|
|
481
|
+
variant: "plain",
|
|
482
|
+
})
|
|
483
|
+
|
|
484
|
+
export {
|
|
485
|
+
navigationMenuBarItemVariants,
|
|
486
|
+
navigationMenuLinkVariants,
|
|
487
|
+
navigationMenuListVariants,
|
|
488
|
+
navigationMenuRootVariants,
|
|
489
|
+
navigationMenuTriggerClassName,
|
|
490
|
+
}
|