react-marketing-ui 0.0.1
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/README.md +34 -0
- package/dist/accordion.d.cts +21 -0
- package/dist/accordion.d.ts +21 -0
- package/dist/accordion.d.ts.map +1 -0
- package/dist/accordion.js +230 -0
- package/dist/accordion.js.map +1 -0
- package/dist/accordion.mjs +4 -0
- package/dist/accordion.mjs.map +1 -0
- package/dist/action-swap.d.cts +23 -0
- package/dist/action-swap.d.ts +23 -0
- package/dist/action-swap.d.ts.map +1 -0
- package/dist/action-swap.js +81 -0
- package/dist/action-swap.js.map +1 -0
- package/dist/action-swap.mjs +5 -0
- package/dist/action-swap.mjs.map +1 -0
- package/dist/animated-beam.d.cts +24 -0
- package/dist/animated-beam.d.ts +24 -0
- package/dist/animated-beam.d.ts.map +1 -0
- package/dist/animated-beam.js +130 -0
- package/dist/animated-beam.js.map +1 -0
- package/dist/animated-beam.mjs +4 -0
- package/dist/animated-beam.mjs.map +1 -0
- package/dist/button.d.cts +55 -0
- package/dist/button.d.ts +55 -0
- package/dist/button.d.ts.map +1 -0
- package/dist/button.js +119 -0
- package/dist/button.js.map +1 -0
- package/dist/button.mjs +4 -0
- package/dist/button.mjs.map +1 -0
- package/dist/card.d.cts +20 -0
- package/dist/card.d.ts +20 -0
- package/dist/card.d.ts.map +1 -0
- package/dist/card.js +146 -0
- package/dist/card.js.map +1 -0
- package/dist/card.mjs +5 -0
- package/dist/card.mjs.map +1 -0
- package/dist/chunk-3SB6HUBA.mjs +31 -0
- package/dist/chunk-3SB6HUBA.mjs.map +1 -0
- package/dist/chunk-4PBVBXGY.mjs +84 -0
- package/dist/chunk-4PBVBXGY.mjs.map +1 -0
- package/dist/chunk-4VCFWVSJ.mjs +42 -0
- package/dist/chunk-4VCFWVSJ.mjs.map +1 -0
- package/dist/chunk-5QQAPGR2.mjs +109 -0
- package/dist/chunk-5QQAPGR2.mjs.map +1 -0
- package/dist/chunk-6MB4UKRX.mjs +19 -0
- package/dist/chunk-6MB4UKRX.mjs.map +1 -0
- package/dist/chunk-6T5LR34O.mjs +45 -0
- package/dist/chunk-6T5LR34O.mjs.map +1 -0
- package/dist/chunk-AYLCYDUM.mjs +275 -0
- package/dist/chunk-AYLCYDUM.mjs.map +1 -0
- package/dist/chunk-AYY7D2RJ.mjs +112 -0
- package/dist/chunk-AYY7D2RJ.mjs.map +1 -0
- package/dist/chunk-CTZEI2YS.mjs +324 -0
- package/dist/chunk-CTZEI2YS.mjs.map +1 -0
- package/dist/chunk-DA3I3Y5O.mjs +71 -0
- package/dist/chunk-DA3I3Y5O.mjs.map +1 -0
- package/dist/chunk-EYHT2EWJ.mjs +18 -0
- package/dist/chunk-EYHT2EWJ.mjs.map +1 -0
- package/dist/chunk-IHLGCS63.mjs +36 -0
- package/dist/chunk-IHLGCS63.mjs.map +1 -0
- package/dist/chunk-JVXJ6SFX.mjs +38 -0
- package/dist/chunk-JVXJ6SFX.mjs.map +1 -0
- package/dist/chunk-KBHYXLRG.mjs +13 -0
- package/dist/chunk-KBHYXLRG.mjs.map +1 -0
- package/dist/chunk-KMXUQYR3.mjs +74 -0
- package/dist/chunk-KMXUQYR3.mjs.map +1 -0
- package/dist/chunk-KNPOZ34H.mjs +88 -0
- package/dist/chunk-KNPOZ34H.mjs.map +1 -0
- package/dist/chunk-KRNWCJ4D.mjs +219 -0
- package/dist/chunk-KRNWCJ4D.mjs.map +1 -0
- package/dist/chunk-M5MESV26.mjs +124 -0
- package/dist/chunk-M5MESV26.mjs.map +1 -0
- package/dist/chunk-MJYBPJBA.mjs +115 -0
- package/dist/chunk-MJYBPJBA.mjs.map +1 -0
- package/dist/chunk-NNHPQ67J.mjs +10 -0
- package/dist/chunk-NNHPQ67J.mjs.map +1 -0
- package/dist/chunk-OCZFHVVD.mjs +71 -0
- package/dist/chunk-OCZFHVVD.mjs.map +1 -0
- package/dist/chunk-QAWSH567.mjs +19 -0
- package/dist/chunk-QAWSH567.mjs.map +1 -0
- package/dist/chunk-R2E2J42H.mjs +38 -0
- package/dist/chunk-R2E2J42H.mjs.map +1 -0
- package/dist/chunk-TPGLLSYV.mjs +65 -0
- package/dist/chunk-TPGLLSYV.mjs.map +1 -0
- package/dist/chunk-VJENJHXJ.mjs +72 -0
- package/dist/chunk-VJENJHXJ.mjs.map +1 -0
- package/dist/chunk-W22G7XHR.mjs +104 -0
- package/dist/chunk-W22G7XHR.mjs.map +1 -0
- package/dist/chunk-WDR5VPZJ.mjs +79 -0
- package/dist/chunk-WDR5VPZJ.mjs.map +1 -0
- package/dist/chunk-WLUGKBH7.mjs +37 -0
- package/dist/chunk-WLUGKBH7.mjs.map +1 -0
- package/dist/chunk-WYJYLDUA.mjs +84 -0
- package/dist/chunk-WYJYLDUA.mjs.map +1 -0
- package/dist/chunk-XZEDZVXT.mjs +38 -0
- package/dist/chunk-XZEDZVXT.mjs.map +1 -0
- package/dist/chunk-YKGP5JIL.mjs +328 -0
- package/dist/chunk-YKGP5JIL.mjs.map +1 -0
- package/dist/chunk-YM3U2OBE.mjs +99 -0
- package/dist/chunk-YM3U2OBE.mjs.map +1 -0
- package/dist/dia-text-reveal.css +18 -0
- package/dist/dia-text-reveal.css.map +1 -0
- package/dist/dia-text-reveal.d.cts +37 -0
- package/dist/dia-text-reveal.d.ts +37 -0
- package/dist/dia-text-reveal.d.ts.map +1 -0
- package/dist/dia-text-reveal.js +334 -0
- package/dist/dia-text-reveal.js.map +1 -0
- package/dist/dia-text-reveal.lines.d.cts +23 -0
- package/dist/dia-text-reveal.lines.d.ts +23 -0
- package/dist/dia-text-reveal.lines.d.ts.map +1 -0
- package/dist/dia-text-reveal.mjs +4 -0
- package/dist/dia-text-reveal.mjs.map +1 -0
- package/dist/dia-text-reveal.sweep.d.cts +49 -0
- package/dist/dia-text-reveal.sweep.d.ts +49 -0
- package/dist/dia-text-reveal.sweep.d.ts.map +1 -0
- package/dist/dia-text-reveal.utils.d.cts +3 -0
- package/dist/dia-text-reveal.utils.d.ts +3 -0
- package/dist/dia-text-reveal.utils.d.ts.map +1 -0
- package/dist/elevated-input.d.cts +11 -0
- package/dist/elevated-input.d.ts +11 -0
- package/dist/elevated-input.d.ts.map +1 -0
- package/dist/elevated-input.js +52 -0
- package/dist/elevated-input.js.map +1 -0
- package/dist/elevated-input.mjs +4 -0
- package/dist/elevated-input.mjs.map +1 -0
- package/dist/fade-in.d.cts +43 -0
- package/dist/fade-in.d.ts +43 -0
- package/dist/fade-in.d.ts.map +1 -0
- package/dist/fade-in.js +89 -0
- package/dist/fade-in.js.map +1 -0
- package/dist/fade-in.mjs +4 -0
- package/dist/fade-in.mjs.map +1 -0
- package/dist/feature-card.d.cts +23 -0
- package/dist/feature-card.d.ts +23 -0
- package/dist/feature-card.d.ts.map +1 -0
- package/dist/feature-card.js +38 -0
- package/dist/feature-card.js.map +1 -0
- package/dist/feature-card.mjs +4 -0
- package/dist/feature-card.mjs.map +1 -0
- package/dist/flowchart-parts.d.cts +61 -0
- package/dist/flowchart-parts.d.ts +61 -0
- package/dist/flowchart-parts.d.ts.map +1 -0
- package/dist/flowchart-parts.js +102 -0
- package/dist/flowchart-parts.js.map +1 -0
- package/dist/flowchart-parts.mjs +4 -0
- package/dist/flowchart-parts.mjs.map +1 -0
- package/dist/glossy-button.d.cts +21 -0
- package/dist/glossy-button.d.ts +21 -0
- package/dist/glossy-button.d.ts.map +1 -0
- package/dist/glossy-button.js +87 -0
- package/dist/glossy-button.js.map +1 -0
- package/dist/glossy-button.mjs +4 -0
- package/dist/glossy-button.mjs.map +1 -0
- package/dist/grainient.css +9 -0
- package/dist/grainient.css.map +1 -0
- package/dist/grainient.d.cts +5 -0
- package/dist/grainient.d.ts +5 -0
- package/dist/grainient.d.ts.map +1 -0
- package/dist/grainient.js +330 -0
- package/dist/grainient.js.map +1 -0
- package/dist/grainient.mjs +4 -0
- package/dist/grainient.mjs.map +1 -0
- package/dist/grainient.shader.d.cts +9 -0
- package/dist/grainient.shader.d.ts +9 -0
- package/dist/grainient.shader.d.ts.map +1 -0
- package/dist/grainient.types.d.cts +30 -0
- package/dist/grainient.types.d.ts +30 -0
- package/dist/grainient.types.d.ts.map +1 -0
- package/dist/highlighter.d.cts +47 -0
- package/dist/highlighter.d.ts +47 -0
- package/dist/highlighter.d.ts.map +1 -0
- package/dist/highlighter.js +125 -0
- package/dist/highlighter.js.map +1 -0
- package/dist/highlighter.mjs +5 -0
- package/dist/highlighter.mjs.map +1 -0
- package/dist/index.css +27 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +56 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2723 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +34 -0
- package/dist/index.mjs.map +1 -0
- package/dist/input.d.cts +15 -0
- package/dist/input.d.ts +15 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +110 -0
- package/dist/input.js.map +1 -0
- package/dist/input.mjs +4 -0
- package/dist/input.mjs.map +1 -0
- package/dist/lib/breakpoints.d.cts +36 -0
- package/dist/lib/breakpoints.d.ts +36 -0
- package/dist/lib/breakpoints.d.ts.map +1 -0
- package/dist/lib/breakpoints.js +41 -0
- package/dist/lib/breakpoints.js.map +1 -0
- package/dist/lib/breakpoints.mjs +3 -0
- package/dist/lib/breakpoints.mjs.map +1 -0
- package/dist/lib/cn.js +24 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/cn.mjs +3 -0
- package/dist/lib/cn.mjs.map +1 -0
- package/dist/lib/ease.d.cts +19 -0
- package/dist/lib/ease.d.ts +19 -0
- package/dist/lib/ease.d.ts.map +1 -0
- package/dist/lib/ease.js +16 -0
- package/dist/lib/ease.js.map +1 -0
- package/dist/lib/ease.mjs +3 -0
- package/dist/lib/ease.mjs.map +1 -0
- package/dist/lib/surface.d.cts +14 -0
- package/dist/lib/surface.d.ts +14 -0
- package/dist/lib/surface.d.ts.map +1 -0
- package/dist/lib/surface.js +40 -0
- package/dist/lib/surface.js.map +1 -0
- package/dist/lib/surface.mjs +3 -0
- package/dist/lib/surface.mjs.map +1 -0
- package/dist/lib/use-media-query.d.cts +9 -0
- package/dist/lib/use-media-query.d.ts +9 -0
- package/dist/lib/use-media-query.d.ts.map +1 -0
- package/dist/lib/use-media-query.js +19 -0
- package/dist/lib/use-media-query.js.map +1 -0
- package/dist/lib/use-media-query.mjs +3 -0
- package/dist/lib/use-media-query.mjs.map +1 -0
- package/dist/lib/utils.d.cts +25 -0
- package/dist/lib/utils.d.ts +25 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/liquid-metal.d.cts +24 -0
- package/dist/liquid-metal.d.ts +24 -0
- package/dist/liquid-metal.d.ts.map +1 -0
- package/dist/liquid-metal.js +43 -0
- package/dist/liquid-metal.js.map +1 -0
- package/dist/liquid-metal.mjs +4 -0
- package/dist/liquid-metal.mjs.map +1 -0
- package/dist/navigation-menu-icons.d.cts +5 -0
- package/dist/navigation-menu-icons.d.ts +5 -0
- package/dist/navigation-menu-icons.d.ts.map +1 -0
- package/dist/navigation-menu-icons.js +42 -0
- package/dist/navigation-menu-icons.js.map +1 -0
- package/dist/navigation-menu-icons.mjs +3 -0
- package/dist/navigation-menu-icons.mjs.map +1 -0
- package/dist/navigation-menu-styles.d.cts +45 -0
- package/dist/navigation-menu-styles.d.ts +45 -0
- package/dist/navigation-menu-styles.d.ts.map +1 -0
- package/dist/navigation-menu-styles.js +16 -0
- package/dist/navigation-menu-styles.js.map +1 -0
- package/dist/navigation-menu-styles.mjs +3 -0
- package/dist/navigation-menu-styles.mjs.map +1 -0
- package/dist/navigation-menu.d.cts +18 -0
- package/dist/navigation-menu.d.ts +18 -0
- package/dist/navigation-menu.d.ts.map +1 -0
- package/dist/navigation-menu.js +367 -0
- package/dist/navigation-menu.js.map +1 -0
- package/dist/navigation-menu.mjs +7 -0
- package/dist/navigation-menu.mjs.map +1 -0
- package/dist/password-input.d.cts +6 -0
- package/dist/password-input.d.ts +6 -0
- package/dist/password-input.d.ts.map +1 -0
- package/dist/password-input.js +174 -0
- package/dist/password-input.js.map +1 -0
- package/dist/password-input.mjs +5 -0
- package/dist/password-input.mjs.map +1 -0
- package/dist/rainbow-button.d.cts +16 -0
- package/dist/rainbow-button.d.ts +16 -0
- package/dist/rainbow-button.d.ts.map +1 -0
- package/dist/rainbow-button.js +49 -0
- package/dist/rainbow-button.js.map +1 -0
- package/dist/rainbow-button.mjs +4 -0
- package/dist/rainbow-button.mjs.map +1 -0
- package/dist/range-slider.d.cts +20 -0
- package/dist/range-slider.d.ts +20 -0
- package/dist/range-slider.d.ts.map +1 -0
- package/dist/range-slider.js +85 -0
- package/dist/range-slider.js.map +1 -0
- package/dist/range-slider.mjs +3 -0
- package/dist/range-slider.mjs.map +1 -0
- package/dist/rolling-badge.d.cts +11 -0
- package/dist/rolling-badge.d.ts +11 -0
- package/dist/rolling-badge.d.ts.map +1 -0
- package/dist/rolling-badge.js +71 -0
- package/dist/rolling-badge.js.map +1 -0
- package/dist/rolling-badge.mjs +4 -0
- package/dist/rolling-badge.mjs.map +1 -0
- package/dist/savings-badge.d.cts +10 -0
- package/dist/savings-badge.d.ts +10 -0
- package/dist/savings-badge.d.ts.map +1 -0
- package/dist/savings-badge.js +26 -0
- package/dist/savings-badge.js.map +1 -0
- package/dist/savings-badge.mjs +4 -0
- package/dist/savings-badge.mjs.map +1 -0
- package/dist/shine-border.d.cts +15 -0
- package/dist/shine-border.d.ts +15 -0
- package/dist/shine-border.d.ts.map +1 -0
- package/dist/shine-border.js +47 -0
- package/dist/shine-border.js.map +1 -0
- package/dist/shine-border.mjs +4 -0
- package/dist/shine-border.mjs.map +1 -0
- package/dist/sparkles-text.d.cts +22 -0
- package/dist/sparkles-text.d.ts +22 -0
- package/dist/sparkles-text.d.ts.map +1 -0
- package/dist/sparkles-text.js +87 -0
- package/dist/sparkles-text.js.map +1 -0
- package/dist/sparkles-text.mjs +5 -0
- package/dist/sparkles-text.mjs.map +1 -0
- package/dist/tabs.d.cts +16 -0
- package/dist/tabs.d.ts +16 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +121 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tabs.mjs +4 -0
- package/dist/tabs.mjs.map +1 -0
- package/dist/theme-toggle.d.cts +10 -0
- package/dist/theme-toggle.d.ts +10 -0
- package/dist/theme-toggle.d.ts.map +1 -0
- package/dist/theme-toggle.js +251 -0
- package/dist/theme-toggle.js.map +1 -0
- package/dist/theme-toggle.mjs +7 -0
- package/dist/theme-toggle.mjs.map +1 -0
- package/package.json +428 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { navigationMenuTriggerStyle, navigationMenuSubTriggerStyle } from './chunk-KBHYXLRG.mjs';
|
|
2
|
+
import { ChevronDownIcon, ChevronRightIcon, ArrowSvg } from './chunk-JVXJ6SFX.mjs';
|
|
3
|
+
import { solidSurface } from './chunk-XZEDZVXT.mjs';
|
|
4
|
+
import { cn, validCssVars } from './chunk-QAWSH567.mjs';
|
|
5
|
+
import { NavigationMenu as NavigationMenu$1 } from '@base-ui/react/navigation-menu';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
function NavigationMenu({
|
|
9
|
+
className,
|
|
10
|
+
children,
|
|
11
|
+
side,
|
|
12
|
+
sideOffset = 10,
|
|
13
|
+
align,
|
|
14
|
+
alignOffset,
|
|
15
|
+
collisionPadding = { top: 5, bottom: 5, left: 20, right: 20 },
|
|
16
|
+
collisionBoundary,
|
|
17
|
+
arrow = false,
|
|
18
|
+
positionMethod = "fixed",
|
|
19
|
+
level = 2,
|
|
20
|
+
shadowLevel = 2,
|
|
21
|
+
...props
|
|
22
|
+
}) {
|
|
23
|
+
return /* @__PURE__ */ jsxs(
|
|
24
|
+
NavigationMenu$1.Root,
|
|
25
|
+
{
|
|
26
|
+
"data-slot": "navigation-menu",
|
|
27
|
+
"data-level": level,
|
|
28
|
+
className: cn("min-w-max rounded-md p-1 text-foreground", solidSurface(level, shadowLevel), className),
|
|
29
|
+
...props,
|
|
30
|
+
children: [
|
|
31
|
+
children,
|
|
32
|
+
/* @__PURE__ */ jsx(
|
|
33
|
+
NavigationMenuViewport,
|
|
34
|
+
{
|
|
35
|
+
side,
|
|
36
|
+
sideOffset,
|
|
37
|
+
align,
|
|
38
|
+
alignOffset,
|
|
39
|
+
collisionPadding,
|
|
40
|
+
collisionBoundary,
|
|
41
|
+
arrow,
|
|
42
|
+
positionMethod
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
function NavigationMenuList({ className, ...props }) {
|
|
50
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.List, { "data-slot": "navigation-menu-list", className: cn("relative flex", className), ...props });
|
|
51
|
+
}
|
|
52
|
+
function NavigationMenuItem({ className, ...props }) {
|
|
53
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.Item, { "data-slot": "navigation-menu-item", className: cn("relative", className), ...props });
|
|
54
|
+
}
|
|
55
|
+
function NavigationMenuTrigger({ className, children, ...props }) {
|
|
56
|
+
return /* @__PURE__ */ jsxs(
|
|
57
|
+
NavigationMenu$1.Trigger,
|
|
58
|
+
{
|
|
59
|
+
"data-slot": "navigation-menu-trigger",
|
|
60
|
+
className: cn(navigationMenuTriggerStyle(), className),
|
|
61
|
+
...props,
|
|
62
|
+
children: [
|
|
63
|
+
children,
|
|
64
|
+
/* @__PURE__ */ jsx(NavigationMenuIcon, {})
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
function NavigationMenuIcon({
|
|
70
|
+
className,
|
|
71
|
+
render = /* @__PURE__ */ jsx(ChevronDownIcon, {}),
|
|
72
|
+
...props
|
|
73
|
+
}) {
|
|
74
|
+
return /* @__PURE__ */ jsx(
|
|
75
|
+
NavigationMenu$1.Icon,
|
|
76
|
+
{
|
|
77
|
+
className: cn("transition-transform duration-200 ease-in-out data-[popup-open]:rotate-180", className),
|
|
78
|
+
render,
|
|
79
|
+
...props
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
function NavigationMenuSubTrigger({
|
|
84
|
+
className,
|
|
85
|
+
children,
|
|
86
|
+
...props
|
|
87
|
+
}) {
|
|
88
|
+
return /* @__PURE__ */ jsxs(
|
|
89
|
+
NavigationMenu$1.Trigger,
|
|
90
|
+
{
|
|
91
|
+
"data-slot": "navigation-menu-sub-trigger",
|
|
92
|
+
className: cn(navigationMenuSubTriggerStyle(), className),
|
|
93
|
+
...props,
|
|
94
|
+
children: [
|
|
95
|
+
children,
|
|
96
|
+
/* @__PURE__ */ jsx(
|
|
97
|
+
NavigationMenu$1.Icon,
|
|
98
|
+
{
|
|
99
|
+
className: "absolute top-1/2 right-2.5 flex h-2.5 w-2.5 -translate-y-1/2 items-center justify-center transition-transform duration-200 ease-in-out data-[popup-open]:rotate-180",
|
|
100
|
+
render: /* @__PURE__ */ jsx(ChevronRightIcon, {})
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
function NavigationMenuContent({ className, ...props }) {
|
|
108
|
+
return /* @__PURE__ */ jsx(
|
|
109
|
+
NavigationMenu$1.Content,
|
|
110
|
+
{
|
|
111
|
+
"data-slot": "navigation-menu-content",
|
|
112
|
+
className: cn(
|
|
113
|
+
"h-full w-[calc(100vw-2.5rem)] p-4 sm:w-max",
|
|
114
|
+
// Transitions for opacity/transform/filter
|
|
115
|
+
"transition-[opacity,transform,filter,scale,translate] duration-(--duration) ease-(--easing)",
|
|
116
|
+
// Starting/ending opacity
|
|
117
|
+
"data-ending-style:opacity-0 data-starting-style:opacity-0",
|
|
118
|
+
// Direction-aware slide (starting)
|
|
119
|
+
"data-starting-style:data-[activation-direction=left]:-translate-x-1/2",
|
|
120
|
+
"data-starting-style:data-[activation-direction=right]:translate-x-1/2",
|
|
121
|
+
// Direction-aware slide (ending)
|
|
122
|
+
"data-ending-style:data-[activation-direction=left]:translate-x-1/2",
|
|
123
|
+
"data-ending-style:data-[activation-direction=right]:-translate-x-1/2",
|
|
124
|
+
// Blur effect during transitions
|
|
125
|
+
"data-ending-style:blur-[4px] data-starting-style:blur-[4px]",
|
|
126
|
+
// scale effect during transitions
|
|
127
|
+
"data-ending-style:scale-97 data-starting-style:scale-97",
|
|
128
|
+
// Motion reduce support
|
|
129
|
+
"motion-reduce:transition-none",
|
|
130
|
+
className
|
|
131
|
+
),
|
|
132
|
+
...props
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
function NavigationMenuLink({ className, standalone, ...props }) {
|
|
137
|
+
return /* @__PURE__ */ jsx(
|
|
138
|
+
NavigationMenu$1.Link,
|
|
139
|
+
{
|
|
140
|
+
"data-slot": "navigation-menu-link",
|
|
141
|
+
className: cn(
|
|
142
|
+
standalone ? navigationMenuTriggerStyle() : "block rounded-md p-2.5 xs:p-3 text-inherit no-underline duration-150 hover:text-foreground hover:duration-0 focus-visible:relative focus-visible:outline-2 focus-visible:outline-ring focus-visible:-outline-offset-1",
|
|
143
|
+
className
|
|
144
|
+
),
|
|
145
|
+
...props
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
function NavigationMenuBackdrop({ ...props }) {
|
|
150
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.Backdrop, { "data-slot": "navigation-menu-backdrop", ...props });
|
|
151
|
+
}
|
|
152
|
+
function NavigationMenuPortal({ ...props }) {
|
|
153
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.Portal, { "data-slot": "navigation-menu-portal", ...props });
|
|
154
|
+
}
|
|
155
|
+
function NavigationMenuArrow({ ...props }) {
|
|
156
|
+
return /* @__PURE__ */ jsx(
|
|
157
|
+
NavigationMenu$1.Arrow,
|
|
158
|
+
{
|
|
159
|
+
className: "flex transition-[left] duration-[var(--duration)] ease-[var(--easing)] data-[side=bottom]:top-[-8px] data-[side=left]:right-[-13px] data-[side=top]:bottom-[-8px] data-[side=right]:left-[-13px] data-[side=left]:rotate-90 data-[side=right]:-rotate-90 data-[side=top]:rotate-180",
|
|
160
|
+
...props,
|
|
161
|
+
children: /* @__PURE__ */ jsx(ArrowSvg, {})
|
|
162
|
+
}
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
function NavigationMenuViewport({
|
|
166
|
+
className,
|
|
167
|
+
children,
|
|
168
|
+
side,
|
|
169
|
+
sideOffset,
|
|
170
|
+
align,
|
|
171
|
+
alignOffset,
|
|
172
|
+
collisionPadding,
|
|
173
|
+
collisionBoundary,
|
|
174
|
+
arrow = false,
|
|
175
|
+
positionMethod = "fixed",
|
|
176
|
+
...props
|
|
177
|
+
}) {
|
|
178
|
+
return /* @__PURE__ */ jsx(NavigationMenuPortal, { children: /* @__PURE__ */ jsx(
|
|
179
|
+
NavigationMenu$1.Positioner,
|
|
180
|
+
{
|
|
181
|
+
"data-slot": "navigation-menu-positioner",
|
|
182
|
+
side,
|
|
183
|
+
sideOffset,
|
|
184
|
+
align,
|
|
185
|
+
alignOffset,
|
|
186
|
+
collisionPadding,
|
|
187
|
+
collisionBoundary,
|
|
188
|
+
positionMethod,
|
|
189
|
+
className: "z-50 box-border h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-(--duration) ease-(--easing) before:absolute before:content-[''] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=left]:before:top-0 data-[side=right]:before:top-0 data-[side=bottom]:before:right-0 data-[side=left]:before:-right-2.5 data-[side=top]:before:right-0 data-[side=left]:before:bottom-0 data-[side=right]:before:bottom-0 data-[side=top]:before:-bottom-2.5 data-[side=bottom]:before:left-0 data-[side=right]:before:-left-2.5 data-[side=top]:before:left-0 data-[side=bottom]:before:h-2.5 data-[side=top]:before:h-2.5 data-[side=left]:before:w-2.5 data-[side=right]:before:w-2.5",
|
|
190
|
+
style: validCssVars({ "--duration": "0.35s", "--easing": "cubic-bezier(0.22, 1, 0.36, 1)" }),
|
|
191
|
+
children: /* @__PURE__ */ jsxs(
|
|
192
|
+
NavigationMenu$1.Popup,
|
|
193
|
+
{
|
|
194
|
+
"data-slot": "navigation-menu-content",
|
|
195
|
+
className: cn(
|
|
196
|
+
"relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) overflow-hidden rounded-md text-foreground transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-150",
|
|
197
|
+
solidSurface(3, 3)
|
|
198
|
+
),
|
|
199
|
+
children: [
|
|
200
|
+
arrow ? /* @__PURE__ */ jsx(NavigationMenuArrow, {}) : null,
|
|
201
|
+
/* @__PURE__ */ jsx(
|
|
202
|
+
NavigationMenu$1.Viewport,
|
|
203
|
+
{
|
|
204
|
+
"data-slot": "navigation-menu-viewport",
|
|
205
|
+
className: cn("relative h-full w-full overflow-hidden", className),
|
|
206
|
+
...props,
|
|
207
|
+
children
|
|
208
|
+
}
|
|
209
|
+
)
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
) });
|
|
215
|
+
}
|
|
216
|
+
function NavigationMenuSub({
|
|
217
|
+
className,
|
|
218
|
+
children,
|
|
219
|
+
orientation = "vertical",
|
|
220
|
+
side = "right",
|
|
221
|
+
sideOffset = 24,
|
|
222
|
+
align = "end",
|
|
223
|
+
alignOffset = -24,
|
|
224
|
+
arrow = false,
|
|
225
|
+
...props
|
|
226
|
+
}) {
|
|
227
|
+
return /* @__PURE__ */ jsxs(
|
|
228
|
+
NavigationMenu$1.Root,
|
|
229
|
+
{
|
|
230
|
+
"data-slot": "navigation-menu-sub",
|
|
231
|
+
className: cn("", className),
|
|
232
|
+
orientation,
|
|
233
|
+
...props,
|
|
234
|
+
children: [
|
|
235
|
+
children,
|
|
236
|
+
/* @__PURE__ */ jsx(NavigationMenuPortal, { children: /* @__PURE__ */ jsx(
|
|
237
|
+
NavigationMenu$1.Positioner,
|
|
238
|
+
{
|
|
239
|
+
"data-slot": "navigation-menu-sub-positioner",
|
|
240
|
+
sideOffset,
|
|
241
|
+
alignOffset,
|
|
242
|
+
align,
|
|
243
|
+
side,
|
|
244
|
+
className: "box-border h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-(--duration) ease-(--easing) before:absolute before:content-[''] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=left]:before:top-0 data-[side=right]:before:top-0 data-[side=bottom]:before:right-0 data-[side=left]:before:-right-2.5 data-[side=top]:before:right-0 data-[side=left]:before:bottom-0 data-[side=right]:before:bottom-0 data-[side=top]:before:-bottom-2.5 data-[side=bottom]:before:left-0 data-[side=right]:before:-left-2.5 data-[side=top]:before:left-0 data-[side=bottom]:before:h-2.5 data-[side=top]:before:h-2.5 data-[side=left]:before:w-2.5 data-[side=right]:before:w-2.5",
|
|
245
|
+
style: validCssVars({ "--duration": "0.35s", "--easing": "cubic-bezier(0.22, 1, 0.36, 1)" }),
|
|
246
|
+
children: /* @__PURE__ */ jsxs(
|
|
247
|
+
NavigationMenu$1.Popup,
|
|
248
|
+
{
|
|
249
|
+
"data-slot": "navigation-menu-sub-content",
|
|
250
|
+
className: cn(
|
|
251
|
+
"relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) overflow-hidden rounded-md text-foreground transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-150",
|
|
252
|
+
solidSurface(5, 5)
|
|
253
|
+
),
|
|
254
|
+
children: [
|
|
255
|
+
arrow ? /* @__PURE__ */ jsx(NavigationMenuArrow, {}) : null,
|
|
256
|
+
/* @__PURE__ */ jsx(
|
|
257
|
+
NavigationMenu$1.Viewport,
|
|
258
|
+
{
|
|
259
|
+
"data-slot": "navigation-menu-sub-viewport",
|
|
260
|
+
className: "relative h-full w-full overflow-hidden"
|
|
261
|
+
}
|
|
262
|
+
)
|
|
263
|
+
]
|
|
264
|
+
}
|
|
265
|
+
)
|
|
266
|
+
}
|
|
267
|
+
) })
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export { NavigationMenu, NavigationMenuArrow, NavigationMenuBackdrop, NavigationMenuContent, NavigationMenuIcon, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPortal, NavigationMenuSub, NavigationMenuSubTrigger, NavigationMenuTrigger, NavigationMenuViewport };
|
|
274
|
+
//# sourceMappingURL=chunk-AYLCYDUM.mjs.map
|
|
275
|
+
//# sourceMappingURL=chunk-AYLCYDUM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/navigation-menu.tsx"],"names":["NavigationMenuPrimitive"],"mappings":";;;;;;;AAcA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA,GAAa,EAAA;AAAA,EACb,KAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA,GAAmB,EAAE,GAAA,EAAK,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAA,EAC5D,iBAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR,cAAA,GAAiB,OAAA;AAAA,EACjB,KAAA,GAAQ,CAAA;AAAA,EACR,WAAA,GAAc,CAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,uBACE,IAAA;AAAA,IAACA,gBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,WAAW,EAAA,CAAG,0CAAA,EAA4C,aAAa,KAAA,EAAO,WAAW,GAAG,SAAS,CAAA;AAAA,MACpG,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA;AAAA,UAAC,sBAAA;AAAA,UAAA;AAAA,YACC,IAAA;AAAA,YACA,UAAA;AAAA,YACA,KAAA;AAAA,YACA,WAAA;AAAA,YACA,gBAAA;AAAA,YACA,iBAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8D;AAC9G,EAAA,uBAAO,GAAA,CAACA,gBAAA,CAAwB,IAAA,EAAxB,EAA6B,WAAA,EAAU,sBAAA,EAAuB,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC9H;AAEA,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8D;AAC9G,EAAA,uBAAO,GAAA,CAACA,gBAAA,CAAwB,IAAA,EAAxB,EAA6B,WAAA,EAAU,sBAAA,EAAuB,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACzH;AAEA,SAAS,sBAAsB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAAiE;AAC9H,EAAA,uBACE,IAAA;AAAA,IAACA,gBAAA,CAAwB,OAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA2B,EAAG,SAAS,CAAA;AAAA,MACpD,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,4BACA,kBAAA,EAAA,EAAmB;AAAA;AAAA;AAAA,GACtB;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,MAAA,uBAAU,eAAA,EAAA,EAAgB,CAAA;AAAA,EAC1B,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACE,GAAA;AAAA,IAACA,gBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,4EAAA,EAA8E,SAAS,CAAA;AAAA,MACrG,MAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,wBAAA,CAAyB;AAAA,EAChC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiE;AAC/D,EAAA,uBACE,IAAA;AAAA,IAACA,gBAAA,CAAwB,OAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,6BAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA8B,EAAG,SAAS,CAAA;AAAA,MACvD,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA;AAAA,UAACA,gBAAA,CAAwB,IAAA;AAAA,UAAxB;AAAA,YACC,SAAA,EAAU,qKAAA;AAAA,YACV,MAAA,sBAAS,gBAAA,EAAA,EAAiB;AAAA;AAAA;AAC5B;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,qBAAA,CAAsB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiE;AACpH,EAAA,uBACE,GAAA;AAAA,IAACA,gBAAA,CAAwB,OAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,4CAAA;AAAA;AAAA,QAEA,6FAAA;AAAA;AAAA,QAEA,2DAAA;AAAA;AAAA,QAEA,uEAAA;AAAA,QACA,uEAAA;AAAA;AAAA,QAEA,oEAAA;AAAA,QACA,sEAAA;AAAA;AAAA,QAEA,6DAAA;AAAA;AAAA,QAEA,yDAAA;AAAA;AAAA,QAEA,+BAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAmB,EAAE,SAAA,EAAW,UAAA,EAAY,GAAG,OAAM,EAA4B;AACxF,EAAA,uBACE,GAAA;AAAA,IAACA,gBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,UAAA,GACI,4BAA2B,GAC3B,uNAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,sBAAA,CAAuB,EAAE,GAAG,KAAA,EAAM,EAAkE;AAC3G,EAAA,2BAAQA,gBAAA,CAAwB,QAAA,EAAxB,EAAiC,WAAA,EAAU,0BAAA,EAA4B,GAAG,KAAA,EAAO,CAAA;AAC3F;AAEA,SAAS,oBAAA,CAAqB,EAAE,GAAG,KAAA,EAAM,EAAgE;AACvG,EAAA,2BAAQA,gBAAA,CAAwB,MAAA,EAAxB,EAA+B,WAAA,EAAU,wBAAA,EAA0B,GAAG,KAAA,EAAO,CAAA;AACvF;AAEA,SAAS,mBAAA,CAAoB,EAAE,GAAG,KAAA,EAAM,EAA+D;AACrG,EAAA,uBACE,GAAA;AAAA,IAACA,gBAAA,CAAwB,KAAA;AAAA,IAAxB;AAAA,MACC,SAAA,EAAU,qRAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEJ,8BAAC,QAAA,EAAA,EAAS;AAAA;AAAA,GACZ;AAEJ;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR,cAAA,GAAiB,OAAA;AAAA,EACjB,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,2BACG,oBAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,IAACA,gBAAA,CAAwB,UAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,4BAAA;AAAA,MACV,IAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA,EAAU,0uBAAA;AAAA,MACV,OAAO,YAAA,CAAa,EAAE,cAAc,OAAA,EAAS,UAAA,EAAY,kCAAkC,CAAA;AAAA,MAE3F,QAAA,kBAAA,IAAA;AAAA,QAACA,gBAAA,CAAwB,KAAA;AAAA,QAAxB;AAAA,UACC,WAAA,EAAU,yBAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACT,yWAAA;AAAA,YACA,YAAA,CAAa,GAAG,CAAC;AAAA,WACnB;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,KAAA,mBAAQ,GAAA,CAAC,uBAAoB,CAAA,GAAK,IAAA;AAAA,4BACnC,GAAA;AAAA,cAACA,gBAAA,CAAwB,QAAA;AAAA,cAAxB;AAAA,gBACC,WAAA,EAAU,0BAAA;AAAA,gBACV,SAAA,EAAW,EAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA;AAAA,gBAChE,GAAG,KAAA;AAAA,gBAEH;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA,GACF,EACF,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,IAAA,GAAO,OAAA;AAAA,EACP,UAAA,GAAa,EAAA;AAAA,EACb,KAAA,GAAQ,KAAA;AAAA,EACR,WAAA,GAAc,GAAA;AAAA,EACd,KAAA,GAAQ,KAAA;AAAA,EACR,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,uBACE,IAAA;AAAA,IAACA,gBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA;AAAA,MAC3B,WAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,4BACA,oBAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,UAACA,gBAAA,CAAwB,UAAA;AAAA,UAAxB;AAAA,YACC,WAAA,EAAU,gCAAA;AAAA,YACV,UAAA;AAAA,YACA,WAAA;AAAA,YACA,KAAA;AAAA,YACA,IAAA;AAAA,YACA,SAAA,EAAU,quBAAA;AAAA,YACV,OAAO,YAAA,CAAa,EAAE,cAAc,OAAA,EAAS,UAAA,EAAY,kCAAkC,CAAA;AAAA,YAE3F,QAAA,kBAAA,IAAA;AAAA,cAACA,gBAAA,CAAwB,KAAA;AAAA,cAAxB;AAAA,gBACC,WAAA,EAAU,6BAAA;AAAA,gBACV,SAAA,EAAW,EAAA;AAAA,kBACT,yWAAA;AAAA,kBACA,YAAA,CAAa,GAAG,CAAC;AAAA,iBACnB;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,KAAA,mBAAQ,GAAA,CAAC,uBAAoB,CAAA,GAAK,IAAA;AAAA,kCACnC,GAAA;AAAA,oBAACA,gBAAA,CAAwB,QAAA;AAAA,oBAAxB;AAAA,sBACC,WAAA,EAAU,8BAAA;AAAA,sBACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA;AACF;AAAA,SACF,EACF;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-AYLCYDUM.mjs","sourcesContent":["import { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport type * as React from 'react';\nimport { solidSurface } from '../lib/surface.js';\nimport { cn, validCssVars } from '../lib/utils.js';\nimport { ArrowSvg, ChevronDownIcon, ChevronRightIcon } from './navigation-menu-icons.js';\nimport {\n type NavigationMenuLinkProps,\n type NavigationMenuProps,\n type NavigationMenuSubProps,\n type NavigationMenuViewportProps,\n navigationMenuSubTriggerStyle,\n navigationMenuTriggerStyle,\n} from './navigation-menu-styles.js';\n\nfunction NavigationMenu({\n className,\n children,\n side,\n sideOffset = 10,\n align,\n alignOffset,\n collisionPadding = { top: 5, bottom: 5, left: 20, right: 20 },\n collisionBoundary,\n arrow = false,\n positionMethod = 'fixed',\n level = 2,\n shadowLevel = 2,\n ...props\n}: NavigationMenuProps) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-level={level}\n className={cn('min-w-max rounded-md p-1 text-foreground', solidSurface(level, shadowLevel), className)}\n {...props}\n >\n {children}\n <NavigationMenuViewport\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n collisionPadding={collisionPadding}\n collisionBoundary={collisionBoundary}\n arrow={arrow}\n positionMethod={positionMethod}\n />\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return <NavigationMenuPrimitive.List data-slot=\"navigation-menu-list\" className={cn('relative flex', className)} {...props} />;\n}\n\nfunction NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return <NavigationMenuPrimitive.Item data-slot=\"navigation-menu-item\" className={cn('relative', className)} {...props} />;\n}\n\nfunction NavigationMenuTrigger({ className, children, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), className)}\n {...props}\n >\n {children}\n <NavigationMenuIcon />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuIcon({\n className,\n render = <ChevronDownIcon />,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Icon>) {\n return (\n <NavigationMenuPrimitive.Icon\n className={cn('transition-transform duration-200 ease-in-out data-[popup-open]:rotate-180', className)}\n render={render}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuSubTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-sub-trigger\"\n className={cn(navigationMenuSubTriggerStyle(), className)}\n {...props}\n >\n {children}\n <NavigationMenuPrimitive.Icon\n className=\"absolute top-1/2 right-2.5 flex h-2.5 w-2.5 -translate-y-1/2 items-center justify-center transition-transform duration-200 ease-in-out data-[popup-open]:rotate-180\"\n render={<ChevronRightIcon />}\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'h-full w-[calc(100vw-2.5rem)] p-4 sm:w-max',\n // Transitions for opacity/transform/filter\n 'transition-[opacity,transform,filter,scale,translate] duration-(--duration) ease-(--easing)',\n // Starting/ending opacity\n 'data-ending-style:opacity-0 data-starting-style:opacity-0',\n // Direction-aware slide (starting)\n 'data-starting-style:data-[activation-direction=left]:-translate-x-1/2',\n 'data-starting-style:data-[activation-direction=right]:translate-x-1/2',\n // Direction-aware slide (ending)\n 'data-ending-style:data-[activation-direction=left]:translate-x-1/2',\n 'data-ending-style:data-[activation-direction=right]:-translate-x-1/2',\n // Blur effect during transitions\n 'data-ending-style:blur-[4px] data-starting-style:blur-[4px]',\n // scale effect during transitions\n 'data-ending-style:scale-97 data-starting-style:scale-97',\n // Motion reduce support\n 'motion-reduce:transition-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuLink({ className, standalone, ...props }: NavigationMenuLinkProps) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n standalone\n ? navigationMenuTriggerStyle()\n : 'block rounded-md p-2.5 xs:p-3 text-inherit no-underline duration-150 hover:text-foreground hover:duration-0 focus-visible:relative focus-visible:outline-2 focus-visible:outline-ring focus-visible:-outline-offset-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuBackdrop({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Backdrop>) {\n return <NavigationMenuPrimitive.Backdrop data-slot=\"navigation-menu-backdrop\" {...props} />;\n}\n\nfunction NavigationMenuPortal({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Portal>) {\n return <NavigationMenuPrimitive.Portal data-slot=\"navigation-menu-portal\" {...props} />;\n}\n\nfunction NavigationMenuArrow({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Arrow>) {\n return (\n <NavigationMenuPrimitive.Arrow\n className=\"flex transition-[left] duration-[var(--duration)] ease-[var(--easing)] data-[side=bottom]:top-[-8px] data-[side=left]:right-[-13px] data-[side=top]:bottom-[-8px] data-[side=right]:left-[-13px] data-[side=left]:rotate-90 data-[side=right]:-rotate-90 data-[side=top]:rotate-180\"\n {...props}\n >\n <ArrowSvg />\n </NavigationMenuPrimitive.Arrow>\n );\n}\n\nfunction NavigationMenuViewport({\n className,\n children,\n side,\n sideOffset,\n align,\n alignOffset,\n collisionPadding,\n collisionBoundary,\n arrow = false,\n positionMethod = 'fixed',\n ...props\n}: NavigationMenuViewportProps) {\n return (\n <NavigationMenuPortal>\n <NavigationMenuPrimitive.Positioner\n data-slot=\"navigation-menu-positioner\"\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n collisionPadding={collisionPadding}\n collisionBoundary={collisionBoundary}\n positionMethod={positionMethod}\n className=\"z-50 box-border h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-(--duration) ease-(--easing) before:absolute before:content-[''] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=left]:before:top-0 data-[side=right]:before:top-0 data-[side=bottom]:before:right-0 data-[side=left]:before:-right-2.5 data-[side=top]:before:right-0 data-[side=left]:before:bottom-0 data-[side=right]:before:bottom-0 data-[side=top]:before:-bottom-2.5 data-[side=bottom]:before:left-0 data-[side=right]:before:-left-2.5 data-[side=top]:before:left-0 data-[side=bottom]:before:h-2.5 data-[side=top]:before:h-2.5 data-[side=left]:before:w-2.5 data-[side=right]:before:w-2.5\"\n style={validCssVars({ '--duration': '0.35s', '--easing': 'cubic-bezier(0.22, 1, 0.36, 1)' })}\n >\n <NavigationMenuPrimitive.Popup\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) overflow-hidden rounded-md text-foreground transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-150',\n solidSurface(3, 3),\n )}\n >\n {arrow ? <NavigationMenuArrow /> : null}\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn('relative h-full w-full overflow-hidden', className)}\n {...props}\n >\n {children}\n </NavigationMenuPrimitive.Viewport>\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPortal>\n );\n}\n\nfunction NavigationMenuSub({\n className,\n children,\n orientation = 'vertical',\n side = 'right',\n sideOffset = 24,\n align = 'end',\n alignOffset = -24,\n arrow = false,\n ...props\n}: NavigationMenuSubProps) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu-sub\"\n className={cn('', className)}\n orientation={orientation}\n {...props}\n >\n {children}\n <NavigationMenuPortal>\n <NavigationMenuPrimitive.Positioner\n data-slot=\"navigation-menu-sub-positioner\"\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n align={align}\n side={side}\n className=\"box-border h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-(--duration) ease-(--easing) before:absolute before:content-[''] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=left]:before:top-0 data-[side=right]:before:top-0 data-[side=bottom]:before:right-0 data-[side=left]:before:-right-2.5 data-[side=top]:before:right-0 data-[side=left]:before:bottom-0 data-[side=right]:before:bottom-0 data-[side=top]:before:-bottom-2.5 data-[side=bottom]:before:left-0 data-[side=right]:before:-left-2.5 data-[side=top]:before:left-0 data-[side=bottom]:before:h-2.5 data-[side=top]:before:h-2.5 data-[side=left]:before:w-2.5 data-[side=right]:before:w-2.5\"\n style={validCssVars({ '--duration': '0.35s', '--easing': 'cubic-bezier(0.22, 1, 0.36, 1)' })}\n >\n <NavigationMenuPrimitive.Popup\n data-slot=\"navigation-menu-sub-content\"\n className={cn(\n 'relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) overflow-hidden rounded-md text-foreground transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-150',\n solidSurface(5, 5),\n )}\n >\n {arrow ? <NavigationMenuArrow /> : null}\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-sub-viewport\"\n className=\"relative h-full w-full overflow-hidden\"\n />\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPortal>\n </NavigationMenuPrimitive.Root>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuArrow,\n NavigationMenuBackdrop,\n NavigationMenuContent,\n NavigationMenuIcon,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuPortal,\n NavigationMenuSub,\n NavigationMenuSubTrigger,\n NavigationMenuTrigger,\n NavigationMenuViewport,\n};\n"]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { cn } from './chunk-QAWSH567.mjs';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var buttonVariants = cva(
|
|
6
|
+
"group inline-flex items-center justify-center gap-1.5 font-medium [transition:opacity_.24s_80ms,transform_.15s_cubic-bezier(.4,0,.2,1),box-shadow_.15s_cubic-bezier(.4,0,.2,1),filter_.15s_cubic-bezier(.4,0,.2,1)] disabled:[transition:opacity_.1s]",
|
|
7
|
+
{
|
|
8
|
+
variants: {
|
|
9
|
+
variant: {
|
|
10
|
+
filled: "bg-(--foreground) text-(--primary-foreground) shadow-elevated-3 hover:opacity-90",
|
|
11
|
+
bordered: "border border-(--border-hi) bg-surface-3 text-foreground shadow-elevated-3 hover:bg-(--muted)",
|
|
12
|
+
ghost: "text-(--foreground-secondary) hover:bg-(--surface-hover) hover:text-(--foreground)"
|
|
13
|
+
},
|
|
14
|
+
size: {
|
|
15
|
+
sm: "h-8 px-3.5 text-[15px]",
|
|
16
|
+
md: "h-9 px-5 text-[17px]",
|
|
17
|
+
lg: "h-11 px-6 text-[17px]",
|
|
18
|
+
icon: "size-11"
|
|
19
|
+
},
|
|
20
|
+
shape: {
|
|
21
|
+
rounded: "rounded-interactive",
|
|
22
|
+
pill: "rounded-full"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
// Pill is the house standard — every CTA is fully rounded.
|
|
26
|
+
defaultVariants: { variant: "filled", size: "md", shape: "pill" }
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
function Button({
|
|
30
|
+
variant,
|
|
31
|
+
size,
|
|
32
|
+
shape,
|
|
33
|
+
showArrow = false,
|
|
34
|
+
external = false,
|
|
35
|
+
title,
|
|
36
|
+
actionOrLink,
|
|
37
|
+
children,
|
|
38
|
+
className,
|
|
39
|
+
"aria-label": ariaLabel,
|
|
40
|
+
"aria-expanded": ariaExpanded
|
|
41
|
+
}) {
|
|
42
|
+
const buttonClassName = cn(buttonVariants({ variant, size, shape }), className);
|
|
43
|
+
const arrowSlot = showArrow && /* @__PURE__ */ jsxs(
|
|
44
|
+
"svg",
|
|
45
|
+
{
|
|
46
|
+
viewBox: "0 0 14 14",
|
|
47
|
+
width: "14",
|
|
48
|
+
height: "14",
|
|
49
|
+
fill: "none",
|
|
50
|
+
stroke: "currentColor",
|
|
51
|
+
strokeWidth: "2",
|
|
52
|
+
strokeLinecap: "round",
|
|
53
|
+
strokeLinejoin: "round",
|
|
54
|
+
"aria-hidden": true,
|
|
55
|
+
className: "shrink-0",
|
|
56
|
+
children: [
|
|
57
|
+
/* @__PURE__ */ jsx(
|
|
58
|
+
"line",
|
|
59
|
+
{
|
|
60
|
+
x1: "0",
|
|
61
|
+
y1: "7",
|
|
62
|
+
x2: "9",
|
|
63
|
+
y2: "7",
|
|
64
|
+
strokeDasharray: "9",
|
|
65
|
+
className: "[stroke-dashoffset:9] [transition:stroke-dashoffset_.08s_cubic-bezier(.22,1,.36,1)] group-hover:[stroke-dashoffset:0] group-hover:[transition-duration:.22s]"
|
|
66
|
+
}
|
|
67
|
+
),
|
|
68
|
+
/* @__PURE__ */ jsx(
|
|
69
|
+
"path",
|
|
70
|
+
{
|
|
71
|
+
d: "M5 3l4 4-4 4",
|
|
72
|
+
className: "[transform:translateX(0)] [transition:transform_.22s_cubic-bezier(.22,1,.36,1)] group-hover:[transform:translateX(2px)]"
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
if (typeof actionOrLink === "string")
|
|
79
|
+
return /* @__PURE__ */ jsxs(
|
|
80
|
+
"a",
|
|
81
|
+
{
|
|
82
|
+
href: actionOrLink,
|
|
83
|
+
className: cn(buttonClassName, "no-underline"),
|
|
84
|
+
"aria-label": ariaLabel,
|
|
85
|
+
title,
|
|
86
|
+
...external ? { target: "_blank", rel: "noopener noreferrer" } : {},
|
|
87
|
+
children: [
|
|
88
|
+
children,
|
|
89
|
+
arrowSlot
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
return /* @__PURE__ */ jsxs(
|
|
94
|
+
"button",
|
|
95
|
+
{
|
|
96
|
+
type: "button",
|
|
97
|
+
className: buttonClassName,
|
|
98
|
+
onClick: actionOrLink,
|
|
99
|
+
"aria-label": ariaLabel,
|
|
100
|
+
"aria-expanded": ariaExpanded,
|
|
101
|
+
title,
|
|
102
|
+
children: [
|
|
103
|
+
children,
|
|
104
|
+
arrowSlot
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { Button };
|
|
111
|
+
//# sourceMappingURL=chunk-AYY7D2RJ.mjs.map
|
|
112
|
+
//# sourceMappingURL=chunk-AYY7D2RJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/button.tsx"],"names":[],"mappings":"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","file":"chunk-AYY7D2RJ.mjs","sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Shared marketing-site button styles.\n *\n * The `transition` in the base string matches the former `.button-transition`\n * utility — a pure-CSS morph so the component stays server-renderable.\n */\nconst buttonVariants = cva(\n 'group inline-flex items-center justify-center gap-1.5 font-medium [transition:opacity_.24s_80ms,transform_.15s_cubic-bezier(.4,0,.2,1),box-shadow_.15s_cubic-bezier(.4,0,.2,1),filter_.15s_cubic-bezier(.4,0,.2,1)] disabled:[transition:opacity_.1s]',\n {\n variants: {\n variant: {\n filled: 'bg-(--foreground) text-(--primary-foreground) shadow-elevated-3 hover:opacity-90',\n bordered: 'border border-(--border-hi) bg-surface-3 text-foreground shadow-elevated-3 hover:bg-(--muted)',\n ghost: 'text-(--foreground-secondary) hover:bg-(--surface-hover) hover:text-(--foreground)',\n },\n size: {\n sm: 'h-8 px-3.5 text-[15px]',\n md: 'h-9 px-5 text-[17px]',\n lg: 'h-11 px-6 text-[17px]',\n icon: 'size-11',\n },\n shape: {\n rounded: 'rounded-interactive',\n pill: 'rounded-full',\n },\n },\n // Pill is the house standard — every CTA is fully rounded.\n defaultVariants: { variant: 'filled', size: 'md', shape: 'pill' },\n },\n);\n\nexport type ButtonProps = VariantProps<typeof buttonVariants> & {\n showArrow?: boolean;\n /**\n * Set when `actionOrLink` is an off-site URL — renders the anchor with\n * `target=\"_blank\"` and `rel=\"noopener noreferrer\"`.\n */\n external?: boolean;\n /** Hover tooltip on the rendered anchor/button. */\n title?: string;\n /**\n * String → renders as a plain anchor <a href={...}>.\n * Function → renders as a <button type=\"button\" onClick={...}>.\n */\n actionOrLink: string | (() => void);\n children: ReactNode;\n className?: string;\n 'aria-label'?: string;\n 'aria-expanded'?: boolean;\n};\n\n/**\n * Shared marketing-site button.\n *\n * variant=\"filled\" → primary CTA (inverse theming: bg-(--foreground) + text-(--primary-foreground)\n * + shadow-elevated-3 — flips with the theme so it pops against any surface)\n * variant=\"bordered\" → elevated surface + border (bg-surface-3 + shadow-elevated-3 + border)\n * variant=\"ghost\" → transparent, muted text that gains a surface on hover\n * size=\"sm\" → h-8, px-3.5, text-[15px] (navbar / compact)\n * size=\"md\" → h-9, px-5, text-[17px] (default)\n * size=\"lg\" → h-11, px-6, text-[17px] (hero CTAs)\n * size=\"icon\" → size-11 square (icon-only buttons)\n * shape=\"pill\" → fully rounded (rounded-full); pill is the default\n * showArrow → chevron right at rest, morphs to arrow-right on hover\n *\n * Server-renderable: the arrow morph is pure CSS (group-hover), so no client\n * state or animation library is needed. When `actionOrLink` is a function the\n * component renders a <button>; passing a function requires a client-component\n * parent (functions can't cross the server→client boundary), which is inherent\n * to any onClick prop and unchanged by this component being server-capable.\n */\nexport function Button({\n variant,\n size,\n shape,\n showArrow = false,\n external = false,\n title,\n actionOrLink,\n children,\n className,\n 'aria-label': ariaLabel,\n 'aria-expanded': ariaExpanded,\n}: ButtonProps) {\n const buttonClassName = cn(buttonVariants({ variant, size, shape }), className);\n\n /*\n * Single SVG that morphs from › to → on hover — pure CSS, no JS.\n * The shaft draws in from the left (stroke-dashoffset 9 → 0) and the arrowhead\n * nudges right. Draw-in is slower (.22s) than the reverse (.08s), matching the\n * asymmetric timing of the former framer-motion version. ease = cubic-bezier(.22,1,.36,1).\n */\n const arrowSlot = showArrow && (\n <svg\n viewBox=\"0 0 14 14\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n className=\"shrink-0\"\n >\n {/* Shaft — draws in from the left */}\n <line\n x1=\"0\"\n y1=\"7\"\n x2=\"9\"\n y2=\"7\"\n strokeDasharray=\"9\"\n className=\"[stroke-dashoffset:9] [transition:stroke-dashoffset_.08s_cubic-bezier(.22,1,.36,1)] group-hover:[stroke-dashoffset:0] group-hover:[transition-duration:.22s]\"\n />\n {/* Arrowhead — nudges right so the shaft \"connects\" underneath */}\n <path\n d=\"M5 3l4 4-4 4\"\n className=\"[transform:translateX(0)] [transition:transform_.22s_cubic-bezier(.22,1,.36,1)] group-hover:[transform:translateX(2px)]\"\n />\n </svg>\n );\n\n if (typeof actionOrLink === 'string')\n return (\n <a\n href={actionOrLink}\n className={cn(buttonClassName, 'no-underline')}\n aria-label={ariaLabel}\n title={title}\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {children}\n {arrowSlot}\n </a>\n );\n\n return (\n <button\n type=\"button\"\n className={buttonClassName}\n onClick={actionOrLink}\n aria-label={ariaLabel}\n aria-expanded={ariaExpanded}\n title={title}\n >\n {children}\n {arrowSlot}\n </button>\n );\n}\n"]}
|