@opensite/ui 1.0.7 → 1.0.9
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/dist/navbar-animated-preview.cjs +16 -16
- package/dist/navbar-animated-preview.js +16 -16
- package/dist/navbar-centered-menu.cjs +1 -1
- package/dist/navbar-centered-menu.js +1 -1
- package/dist/navbar-dark-icons.cjs +1 -1
- package/dist/navbar-dark-icons.js +1 -1
- package/dist/navbar-dropdown-menu.cjs +1 -1
- package/dist/navbar-dropdown-menu.js +1 -1
- package/dist/navbar-education-platform.cjs +278 -236
- package/dist/navbar-education-platform.d.cts +61 -36
- package/dist/navbar-education-platform.d.ts +61 -36
- package/dist/navbar-education-platform.js +279 -237
- package/dist/navbar-enterprise-mega.cjs +6 -6
- package/dist/navbar-enterprise-mega.js +6 -6
- package/dist/navbar-feature-grid.cjs +1 -1
- package/dist/navbar-feature-grid.js +1 -1
- package/dist/navbar-icon-links.cjs +2 -1
- package/dist/navbar-icon-links.js +2 -1
- package/dist/navbar-image-preview.cjs +129 -50
- package/dist/navbar-image-preview.js +128 -50
- package/dist/navbar-mega-menu.cjs +1 -1
- package/dist/navbar-mega-menu.js +1 -1
- package/dist/navbar-multi-column-groups.cjs +53 -49
- package/dist/navbar-multi-column-groups.js +53 -49
- package/dist/navbar-platform-resources.cjs +5 -4
- package/dist/navbar-platform-resources.js +5 -4
- package/dist/navbar-search-focused.cjs +1 -1
- package/dist/navbar-search-focused.js +1 -1
- package/dist/navbar-sidebar-mobile.cjs +235 -166
- package/dist/navbar-sidebar-mobile.js +236 -167
- package/dist/navbar-simple-links.cjs +228 -184
- package/dist/navbar-simple-links.d.cts +15 -3
- package/dist/navbar-simple-links.d.ts +15 -3
- package/dist/navbar-simple-links.js +228 -183
- package/dist/navbar-split-cta.cjs +3 -3
- package/dist/navbar-split-cta.js +3 -3
- package/dist/navbar-sticky-compact.cjs +1 -1
- package/dist/navbar-sticky-compact.js +1 -1
- package/dist/navbar-tabbed-sections.cjs +1 -1
- package/dist/navbar-tabbed-sections.js +1 -1
- package/dist/navbar-transparent-overlay.cjs +244 -123
- package/dist/navbar-transparent-overlay.d.cts +30 -1
- package/dist/navbar-transparent-overlay.d.ts +30 -1
- package/dist/navbar-transparent-overlay.js +244 -123
- package/dist/registry.cjs +1008 -894
- package/dist/registry.js +1008 -894
- package/package.json +1 -1
|
@@ -7,7 +7,6 @@ var tailwindMerge = require('tailwind-merge');
|
|
|
7
7
|
var classVarianceAuthority = require('class-variance-authority');
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
9
|
var NavigationMenuPrimitive = require('@radix-ui/react-navigation-menu');
|
|
10
|
-
var PopoverPrimitive = require('@radix-ui/react-popover');
|
|
11
10
|
var img = require('@page-speed/img');
|
|
12
11
|
|
|
13
12
|
function _interopNamespace(e) {
|
|
@@ -30,7 +29,6 @@ function _interopNamespace(e) {
|
|
|
30
29
|
|
|
31
30
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
32
31
|
var NavigationMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(NavigationMenuPrimitive);
|
|
33
|
-
var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
|
|
34
32
|
|
|
35
33
|
// components/blocks/navbars/navbar-simple-links.tsx
|
|
36
34
|
function cn(...inputs) {
|
|
@@ -1029,36 +1027,6 @@ function NavigationMenuLink({
|
|
|
1029
1027
|
}
|
|
1030
1028
|
);
|
|
1031
1029
|
}
|
|
1032
|
-
function Popover({
|
|
1033
|
-
...props
|
|
1034
|
-
}) {
|
|
1035
|
-
return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Root, { "data-slot": "popover", ...props });
|
|
1036
|
-
}
|
|
1037
|
-
function PopoverTrigger({
|
|
1038
|
-
...props
|
|
1039
|
-
}) {
|
|
1040
|
-
return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
1041
|
-
}
|
|
1042
|
-
function PopoverContent({
|
|
1043
|
-
className,
|
|
1044
|
-
align = "center",
|
|
1045
|
-
sideOffset = 4,
|
|
1046
|
-
...props
|
|
1047
|
-
}) {
|
|
1048
|
-
return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1049
|
-
PopoverPrimitive__namespace.Content,
|
|
1050
|
-
{
|
|
1051
|
-
"data-slot": "popover-content",
|
|
1052
|
-
align,
|
|
1053
|
-
sideOffset,
|
|
1054
|
-
className: cn(
|
|
1055
|
-
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
|
|
1056
|
-
className
|
|
1057
|
-
),
|
|
1058
|
-
...props
|
|
1059
|
-
}
|
|
1060
|
-
) });
|
|
1061
|
-
}
|
|
1062
1030
|
var NavbarLogo = ({
|
|
1063
1031
|
logo,
|
|
1064
1032
|
logoSlot,
|
|
@@ -1119,6 +1087,62 @@ var NavbarLogo = ({
|
|
|
1119
1087
|
}
|
|
1120
1088
|
);
|
|
1121
1089
|
};
|
|
1090
|
+
var NavbarMobileMenu = ({
|
|
1091
|
+
open,
|
|
1092
|
+
onClose,
|
|
1093
|
+
children,
|
|
1094
|
+
className,
|
|
1095
|
+
contentClassName,
|
|
1096
|
+
title = "Mobile Navigation"
|
|
1097
|
+
}) => {
|
|
1098
|
+
React__namespace.useEffect(() => {
|
|
1099
|
+
if (open) {
|
|
1100
|
+
const originalOverflow = document.body.style.overflow;
|
|
1101
|
+
document.body.style.overflow = "hidden";
|
|
1102
|
+
return () => {
|
|
1103
|
+
document.body.style.overflow = originalOverflow;
|
|
1104
|
+
};
|
|
1105
|
+
}
|
|
1106
|
+
}, [open]);
|
|
1107
|
+
if (!open) return null;
|
|
1108
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1109
|
+
"div",
|
|
1110
|
+
{
|
|
1111
|
+
className: cn(
|
|
1112
|
+
"fixed inset-0 z-998 flex flex-col bg-background",
|
|
1113
|
+
"animate-in slide-in-from-top duration-300",
|
|
1114
|
+
"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-top data-[state=closed]:duration-300",
|
|
1115
|
+
className
|
|
1116
|
+
),
|
|
1117
|
+
"data-state": open ? "open" : "closed",
|
|
1118
|
+
children: [
|
|
1119
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "sr-only", children: /* @__PURE__ */ jsxRuntime.jsx("h2", { children: title }) }),
|
|
1120
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 left-0 right-0 p-4 bg-background flex justify-end items-center z-10 w-screen", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1121
|
+
"button",
|
|
1122
|
+
{
|
|
1123
|
+
onClick: onClose,
|
|
1124
|
+
className: "flex size-10 items-center justify-center rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",
|
|
1125
|
+
"aria-label": "Close mobile menu",
|
|
1126
|
+
children: [
|
|
1127
|
+
/* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/x", className: "size-4" }),
|
|
1128
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
|
|
1129
|
+
]
|
|
1130
|
+
}
|
|
1131
|
+
) }),
|
|
1132
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1133
|
+
"div",
|
|
1134
|
+
{
|
|
1135
|
+
className: cn(
|
|
1136
|
+
"h-full overflow-y-auto pt-20 pb-8 px-4 sm:px-6",
|
|
1137
|
+
contentClassName
|
|
1138
|
+
),
|
|
1139
|
+
children
|
|
1140
|
+
}
|
|
1141
|
+
)
|
|
1142
|
+
]
|
|
1143
|
+
}
|
|
1144
|
+
);
|
|
1145
|
+
};
|
|
1122
1146
|
|
|
1123
1147
|
// components/blocks/navbars/layout-variant-utils.ts
|
|
1124
1148
|
function getNavbarLayoutClasses(layoutVariant = "fullScreenContainerizedLinks", customClasses) {
|
|
@@ -1155,86 +1179,7 @@ function getNavbarLayoutClasses(layoutVariant = "fullScreenContainerizedLinks",
|
|
|
1155
1179
|
spacingOverride: isFloatingBar ? "none" : "py-0 md:py-0"
|
|
1156
1180
|
};
|
|
1157
1181
|
}
|
|
1158
|
-
var
|
|
1159
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "group relative size-full", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute flex size-full items-center justify-center", children: [
|
|
1160
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1161
|
-
DynamicIcon,
|
|
1162
|
-
{
|
|
1163
|
-
name: "lucide/menu",
|
|
1164
|
-
size: 24,
|
|
1165
|
-
className: `absolute text-muted-foreground transition-all duration-300 group-hover:text-foreground ${isOpen ? "rotate-90 opacity-0" : "rotate-0 opacity-100"}`
|
|
1166
|
-
}
|
|
1167
|
-
),
|
|
1168
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1169
|
-
DynamicIcon,
|
|
1170
|
-
{
|
|
1171
|
-
name: "lucide/x",
|
|
1172
|
-
size: 24,
|
|
1173
|
-
className: `absolute text-muted-foreground transition-all duration-300 group-hover:text-foreground ${isOpen ? "rotate-0 opacity-100" : "-rotate-90 opacity-0"}`
|
|
1174
|
-
}
|
|
1175
|
-
)
|
|
1176
|
-
] }) });
|
|
1177
|
-
};
|
|
1178
|
-
var MobileNav = ({
|
|
1179
|
-
navItems,
|
|
1180
|
-
activeItem,
|
|
1181
|
-
setActiveItem,
|
|
1182
|
-
actions,
|
|
1183
|
-
actionsSlot
|
|
1184
|
-
}) => {
|
|
1185
|
-
const [isOpen, setIsOpen] = React.useState(false);
|
|
1186
|
-
const renderActions = React.useMemo(() => {
|
|
1187
|
-
if (actionsSlot) return actionsSlot;
|
|
1188
|
-
if (!actions || actions.length === 0) return null;
|
|
1189
|
-
return actions.map((action, index) => {
|
|
1190
|
-
const {
|
|
1191
|
-
label,
|
|
1192
|
-
icon,
|
|
1193
|
-
iconAfter,
|
|
1194
|
-
children,
|
|
1195
|
-
className: actionClassName,
|
|
1196
|
-
...pressableProps
|
|
1197
|
-
} = action;
|
|
1198
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1199
|
-
Pressable,
|
|
1200
|
-
{
|
|
1201
|
-
asButton: true,
|
|
1202
|
-
className: actionClassName,
|
|
1203
|
-
...pressableProps,
|
|
1204
|
-
children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1205
|
-
icon,
|
|
1206
|
-
label,
|
|
1207
|
-
iconAfter
|
|
1208
|
-
] })
|
|
1209
|
-
},
|
|
1210
|
-
index
|
|
1211
|
-
);
|
|
1212
|
-
});
|
|
1213
|
-
}, [actionsSlot, actions]);
|
|
1214
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center lg:hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: isOpen, onOpenChange: setIsOpen, children: [
|
|
1215
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Pressable, { variant: "ghost", size: "icon", asButton: true, onClick: () => {
|
|
1216
|
-
}, children: /* @__PURE__ */ jsxRuntime.jsx(AnimatedHamburger, { isOpen }) }) }),
|
|
1217
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1218
|
-
PopoverContent,
|
|
1219
|
-
{
|
|
1220
|
-
align: "end",
|
|
1221
|
-
className: "relative top-4 -right-4 block w-[calc(100vw-32px)] overflow-hidden rounded-xl p-0 sm:top-auto sm:right-auto sm:w-80 lg:hidden",
|
|
1222
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "w-full bg-background py-4 text-foreground", children: [
|
|
1223
|
-
navItems.map((navItem, idx) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1224
|
-
Pressable,
|
|
1225
|
-
{
|
|
1226
|
-
href: navItem.link,
|
|
1227
|
-
onClick: () => setActiveItem(navItem.name),
|
|
1228
|
-
className: `flex items-center border-l-[3px] px-6 py-4 text-sm font-medium text-foreground transition-all duration-75 ${activeItem === navItem.name ? "border-foreground text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"}`,
|
|
1229
|
-
children: navItem.name
|
|
1230
|
-
}
|
|
1231
|
-
) }, idx)),
|
|
1232
|
-
(actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("li", { className: "flex flex-col gap-3 px-7 py-2", children: renderActions })
|
|
1233
|
-
] })
|
|
1234
|
-
}
|
|
1235
|
-
)
|
|
1236
|
-
] }) });
|
|
1237
|
-
};
|
|
1182
|
+
var MOBILE_BREAKPOINT = 1024;
|
|
1238
1183
|
var NavbarSimpleLinks = ({
|
|
1239
1184
|
className,
|
|
1240
1185
|
containerClassName,
|
|
@@ -1242,6 +1187,7 @@ var NavbarSimpleLinks = ({
|
|
|
1242
1187
|
navigationMenuClassName,
|
|
1243
1188
|
menuListClassName,
|
|
1244
1189
|
actionsClassName,
|
|
1190
|
+
mobileMenuClassName,
|
|
1245
1191
|
logo,
|
|
1246
1192
|
logoSlot,
|
|
1247
1193
|
logoClassName,
|
|
@@ -1250,6 +1196,8 @@ var NavbarSimpleLinks = ({
|
|
|
1250
1196
|
defaultActiveItem,
|
|
1251
1197
|
actions,
|
|
1252
1198
|
actionsSlot,
|
|
1199
|
+
mobileActions,
|
|
1200
|
+
mobileActionsSlot,
|
|
1253
1201
|
layoutVariant = "fullScreenContainerizedLinks",
|
|
1254
1202
|
background,
|
|
1255
1203
|
spacing,
|
|
@@ -1260,8 +1208,20 @@ var NavbarSimpleLinks = ({
|
|
|
1260
1208
|
const [activeItem, setActiveItem] = React.useState(
|
|
1261
1209
|
defaultActiveItem || navItems?.[0]?.name || ""
|
|
1262
1210
|
);
|
|
1211
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
|
1263
1212
|
const indicatorRef = React.useRef(null);
|
|
1264
1213
|
const menuRef = React.useRef(null);
|
|
1214
|
+
React.useEffect(() => {
|
|
1215
|
+
if (typeof window === "undefined") return;
|
|
1216
|
+
const handleResize = () => {
|
|
1217
|
+
if (window.innerWidth > MOBILE_BREAKPOINT) {
|
|
1218
|
+
setIsOpen(false);
|
|
1219
|
+
}
|
|
1220
|
+
};
|
|
1221
|
+
handleResize();
|
|
1222
|
+
window.addEventListener("resize", handleResize);
|
|
1223
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
1224
|
+
}, []);
|
|
1265
1225
|
React.useEffect(() => {
|
|
1266
1226
|
const updateIndicator = () => {
|
|
1267
1227
|
const activeEl = document.querySelector(
|
|
@@ -1278,6 +1238,9 @@ var NavbarSimpleLinks = ({
|
|
|
1278
1238
|
window.addEventListener("resize", updateIndicator);
|
|
1279
1239
|
return () => window.removeEventListener("resize", updateIndicator);
|
|
1280
1240
|
}, [activeItem]);
|
|
1241
|
+
const handleMobileMenuClose = () => {
|
|
1242
|
+
setIsOpen(false);
|
|
1243
|
+
};
|
|
1281
1244
|
const renderNavItems = React.useMemo(() => {
|
|
1282
1245
|
if (navItemsSlot) return navItemsSlot;
|
|
1283
1246
|
if (!navItems || navItems.length === 0) return null;
|
|
@@ -1331,80 +1294,161 @@ var NavbarSimpleLinks = ({
|
|
|
1331
1294
|
sectionContainerMaxWidth,
|
|
1332
1295
|
spacingOverride
|
|
1333
1296
|
} = getNavbarLayoutClasses(layoutVariant, { className, containerClassName });
|
|
1297
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1298
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1299
|
+
Section,
|
|
1300
|
+
{
|
|
1301
|
+
background,
|
|
1302
|
+
spacing: spacingOverride ?? spacing,
|
|
1303
|
+
className: sectionClasses,
|
|
1304
|
+
pattern,
|
|
1305
|
+
patternOpacity,
|
|
1306
|
+
containerClassName: sectionContainerClassName,
|
|
1307
|
+
containerMaxWidth: sectionContainerMaxWidth,
|
|
1308
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerWrapperClasses, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: navWrapperClasses, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: innerContainerClasses, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1309
|
+
"nav",
|
|
1310
|
+
{
|
|
1311
|
+
className: cn("flex items-center justify-between", navClassName),
|
|
1312
|
+
children: [
|
|
1313
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1314
|
+
NavbarLogo,
|
|
1315
|
+
{
|
|
1316
|
+
logo,
|
|
1317
|
+
logoSlot,
|
|
1318
|
+
logoClassName,
|
|
1319
|
+
optixFlowConfig
|
|
1320
|
+
}
|
|
1321
|
+
),
|
|
1322
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1323
|
+
NavigationMenu,
|
|
1324
|
+
{
|
|
1325
|
+
className: cn("hidden lg:block", navigationMenuClassName),
|
|
1326
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1327
|
+
NavigationMenuList,
|
|
1328
|
+
{
|
|
1329
|
+
ref: menuRef,
|
|
1330
|
+
className: cn(
|
|
1331
|
+
"flex items-center gap-6 rounded-4xl px-8 py-3",
|
|
1332
|
+
menuListClassName
|
|
1333
|
+
),
|
|
1334
|
+
children: [
|
|
1335
|
+
renderNavItems,
|
|
1336
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1337
|
+
"div",
|
|
1338
|
+
{
|
|
1339
|
+
ref: indicatorRef,
|
|
1340
|
+
className: "absolute bottom-2 flex h-1 items-center justify-center px-2 transition-all duration-300",
|
|
1341
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-0.5 w-full rounded-t-none bg-foreground transition-all duration-300" })
|
|
1342
|
+
}
|
|
1343
|
+
)
|
|
1344
|
+
]
|
|
1345
|
+
}
|
|
1346
|
+
)
|
|
1347
|
+
}
|
|
1348
|
+
),
|
|
1349
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "lg:hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1350
|
+
Pressable,
|
|
1351
|
+
{
|
|
1352
|
+
className: "size-11",
|
|
1353
|
+
variant: "ghost",
|
|
1354
|
+
size: "icon",
|
|
1355
|
+
asButton: true,
|
|
1356
|
+
onClick: () => setIsOpen(!isOpen),
|
|
1357
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1358
|
+
DynamicIcon,
|
|
1359
|
+
{
|
|
1360
|
+
name: "lucide/menu",
|
|
1361
|
+
size: 22,
|
|
1362
|
+
className: "stroke-foreground"
|
|
1363
|
+
}
|
|
1364
|
+
)
|
|
1365
|
+
}
|
|
1366
|
+
) }),
|
|
1367
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1368
|
+
"div",
|
|
1369
|
+
{
|
|
1370
|
+
className: cn(
|
|
1371
|
+
"hidden items-center gap-2 lg:flex",
|
|
1372
|
+
actionsClassName
|
|
1373
|
+
),
|
|
1374
|
+
children: renderActions
|
|
1375
|
+
}
|
|
1376
|
+
)
|
|
1377
|
+
]
|
|
1378
|
+
}
|
|
1379
|
+
) }) }) })
|
|
1380
|
+
}
|
|
1381
|
+
),
|
|
1382
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1383
|
+
MobileNavigationMenu,
|
|
1384
|
+
{
|
|
1385
|
+
open: isOpen,
|
|
1386
|
+
onClose: handleMobileMenuClose,
|
|
1387
|
+
navItems: navItems ?? [],
|
|
1388
|
+
mobileActions,
|
|
1389
|
+
mobileActionsSlot,
|
|
1390
|
+
mobileMenuClassName
|
|
1391
|
+
}
|
|
1392
|
+
)
|
|
1393
|
+
] });
|
|
1394
|
+
};
|
|
1395
|
+
var MobileNavigationMenu = ({
|
|
1396
|
+
open,
|
|
1397
|
+
onClose,
|
|
1398
|
+
navItems,
|
|
1399
|
+
mobileActions,
|
|
1400
|
+
mobileActionsSlot,
|
|
1401
|
+
mobileMenuClassName
|
|
1402
|
+
}) => {
|
|
1403
|
+
const renderMobileActions = React.useMemo(() => {
|
|
1404
|
+
if (mobileActionsSlot) return mobileActionsSlot;
|
|
1405
|
+
if (!mobileActions || mobileActions.length === 0) return null;
|
|
1406
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 px-4", children: mobileActions.map((action, index) => {
|
|
1407
|
+
const {
|
|
1408
|
+
label,
|
|
1409
|
+
icon,
|
|
1410
|
+
iconAfter,
|
|
1411
|
+
children,
|
|
1412
|
+
className: actionClassName,
|
|
1413
|
+
...pressableProps
|
|
1414
|
+
} = action;
|
|
1415
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1416
|
+
Pressable,
|
|
1417
|
+
{
|
|
1418
|
+
asButton: true,
|
|
1419
|
+
className: cn("w-full", actionClassName),
|
|
1420
|
+
onClick: onClose,
|
|
1421
|
+
...pressableProps,
|
|
1422
|
+
children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1423
|
+
icon,
|
|
1424
|
+
label,
|
|
1425
|
+
iconAfter
|
|
1426
|
+
] })
|
|
1427
|
+
},
|
|
1428
|
+
index
|
|
1429
|
+
);
|
|
1430
|
+
}) });
|
|
1431
|
+
}, [mobileActionsSlot, mobileActions, onClose]);
|
|
1334
1432
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1335
|
-
|
|
1433
|
+
NavbarMobileMenu,
|
|
1336
1434
|
{
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
logoClassName,
|
|
1355
|
-
optixFlowConfig
|
|
1356
|
-
}
|
|
1357
|
-
),
|
|
1358
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1359
|
-
NavigationMenu,
|
|
1360
|
-
{
|
|
1361
|
-
className: cn("hidden lg:block", navigationMenuClassName),
|
|
1362
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1363
|
-
NavigationMenuList,
|
|
1364
|
-
{
|
|
1365
|
-
ref: menuRef,
|
|
1366
|
-
className: cn(
|
|
1367
|
-
"flex items-center gap-6 rounded-4xl px-8 py-3",
|
|
1368
|
-
menuListClassName
|
|
1369
|
-
),
|
|
1370
|
-
children: [
|
|
1371
|
-
renderNavItems,
|
|
1372
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1373
|
-
"div",
|
|
1374
|
-
{
|
|
1375
|
-
ref: indicatorRef,
|
|
1376
|
-
className: "absolute bottom-2 flex h-1 items-center justify-center px-2 transition-all duration-300",
|
|
1377
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-0.5 w-full rounded-t-none bg-foreground transition-all duration-300" })
|
|
1378
|
-
}
|
|
1379
|
-
)
|
|
1380
|
-
]
|
|
1381
|
-
}
|
|
1382
|
-
)
|
|
1383
|
-
}
|
|
1384
|
-
),
|
|
1385
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1386
|
-
MobileNav,
|
|
1387
|
-
{
|
|
1388
|
-
navItems: navItems ?? [],
|
|
1389
|
-
activeItem,
|
|
1390
|
-
setActiveItem,
|
|
1391
|
-
actions,
|
|
1392
|
-
actionsSlot
|
|
1393
|
-
}
|
|
1394
|
-
),
|
|
1395
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1396
|
-
"div",
|
|
1397
|
-
{
|
|
1398
|
-
className: cn(
|
|
1399
|
-
"hidden items-center gap-2 lg:flex",
|
|
1400
|
-
actionsClassName
|
|
1401
|
-
),
|
|
1402
|
-
children: renderActions
|
|
1403
|
-
}
|
|
1404
|
-
)
|
|
1405
|
-
]
|
|
1406
|
-
}
|
|
1407
|
-
) }) }) })
|
|
1435
|
+
open,
|
|
1436
|
+
onClose,
|
|
1437
|
+
title: "Navigation",
|
|
1438
|
+
className: mobileMenuClassName,
|
|
1439
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-screen-sm mx-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-6", children: [
|
|
1440
|
+
/* @__PURE__ */ jsxRuntime.jsx("nav", { className: "flex flex-col", children: navItems.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1441
|
+
Pressable,
|
|
1442
|
+
{
|
|
1443
|
+
href: item.link,
|
|
1444
|
+
className: "flex h-15 items-center rounded-md px-4 text-left text-base leading-[3.75] font-normal text-muted-foreground ring-ring/10 outline-ring/50 transition-all hover:bg-muted focus-visible:ring-4 focus-visible:outline-1",
|
|
1445
|
+
onClick: onClose,
|
|
1446
|
+
children: item.name
|
|
1447
|
+
},
|
|
1448
|
+
`nav-link-${index}`
|
|
1449
|
+
)) }),
|
|
1450
|
+
renderMobileActions
|
|
1451
|
+
] }) })
|
|
1408
1452
|
}
|
|
1409
1453
|
);
|
|
1410
1454
|
};
|
|
@@ -42,6 +42,10 @@ interface NavbarSimpleLinksProps {
|
|
|
42
42
|
* Additional CSS classes for the actions container
|
|
43
43
|
*/
|
|
44
44
|
actionsClassName?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Additional CSS classes for the mobile menu
|
|
47
|
+
*/
|
|
48
|
+
mobileMenuClassName?: string;
|
|
45
49
|
/**
|
|
46
50
|
* Logo configuration
|
|
47
51
|
*/
|
|
@@ -74,6 +78,14 @@ interface NavbarSimpleLinksProps {
|
|
|
74
78
|
* Custom slot for actions (overrides actions array)
|
|
75
79
|
*/
|
|
76
80
|
actionsSlot?: React.ReactNode;
|
|
81
|
+
/**
|
|
82
|
+
* Mobile-specific action configurations
|
|
83
|
+
*/
|
|
84
|
+
mobileActions?: ActionConfig[];
|
|
85
|
+
/**
|
|
86
|
+
* Custom slot for mobile actions (overrides mobileActions array)
|
|
87
|
+
*/
|
|
88
|
+
mobileActionsSlot?: React.ReactNode;
|
|
77
89
|
/**
|
|
78
90
|
* Background style for the section
|
|
79
91
|
*/
|
|
@@ -104,10 +116,10 @@ interface NavbarSimpleLinksProps {
|
|
|
104
116
|
*
|
|
105
117
|
* Features a clean, simple design with horizontal navigation links and an animated
|
|
106
118
|
* underline indicator that slides to show the active item. Desktop view shows all
|
|
107
|
-
* links inline with a smooth sliding indicator. Mobile view uses
|
|
108
|
-
* with a
|
|
119
|
+
* links inline with a smooth sliding indicator. Mobile view uses the shared
|
|
120
|
+
* NavbarMobileMenu component with a fullscreen overlay. Perfect for simple marketing
|
|
109
121
|
* sites and portfolios.
|
|
110
122
|
*/
|
|
111
|
-
declare const NavbarSimpleLinks: ({ className, containerClassName, navClassName, navigationMenuClassName, menuListClassName, actionsClassName, logo, logoSlot, logoClassName, navItems, navItemsSlot, defaultActiveItem, actions, actionsSlot, layoutVariant, background, spacing, pattern, patternOpacity, optixFlowConfig, }: NavbarSimpleLinksProps) => react_jsx_runtime.JSX.Element;
|
|
123
|
+
declare const NavbarSimpleLinks: ({ className, containerClassName, navClassName, navigationMenuClassName, menuListClassName, actionsClassName, mobileMenuClassName, logo, logoSlot, logoClassName, navItems, navItemsSlot, defaultActiveItem, actions, actionsSlot, mobileActions, mobileActionsSlot, layoutVariant, background, spacing, pattern, patternOpacity, optixFlowConfig, }: NavbarSimpleLinksProps) => react_jsx_runtime.JSX.Element;
|
|
112
124
|
|
|
113
125
|
export { NavbarSimpleLinks, type NavbarSimpleLinksProps };
|
|
@@ -42,6 +42,10 @@ interface NavbarSimpleLinksProps {
|
|
|
42
42
|
* Additional CSS classes for the actions container
|
|
43
43
|
*/
|
|
44
44
|
actionsClassName?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Additional CSS classes for the mobile menu
|
|
47
|
+
*/
|
|
48
|
+
mobileMenuClassName?: string;
|
|
45
49
|
/**
|
|
46
50
|
* Logo configuration
|
|
47
51
|
*/
|
|
@@ -74,6 +78,14 @@ interface NavbarSimpleLinksProps {
|
|
|
74
78
|
* Custom slot for actions (overrides actions array)
|
|
75
79
|
*/
|
|
76
80
|
actionsSlot?: React.ReactNode;
|
|
81
|
+
/**
|
|
82
|
+
* Mobile-specific action configurations
|
|
83
|
+
*/
|
|
84
|
+
mobileActions?: ActionConfig[];
|
|
85
|
+
/**
|
|
86
|
+
* Custom slot for mobile actions (overrides mobileActions array)
|
|
87
|
+
*/
|
|
88
|
+
mobileActionsSlot?: React.ReactNode;
|
|
77
89
|
/**
|
|
78
90
|
* Background style for the section
|
|
79
91
|
*/
|
|
@@ -104,10 +116,10 @@ interface NavbarSimpleLinksProps {
|
|
|
104
116
|
*
|
|
105
117
|
* Features a clean, simple design with horizontal navigation links and an animated
|
|
106
118
|
* underline indicator that slides to show the active item. Desktop view shows all
|
|
107
|
-
* links inline with a smooth sliding indicator. Mobile view uses
|
|
108
|
-
* with a
|
|
119
|
+
* links inline with a smooth sliding indicator. Mobile view uses the shared
|
|
120
|
+
* NavbarMobileMenu component with a fullscreen overlay. Perfect for simple marketing
|
|
109
121
|
* sites and portfolios.
|
|
110
122
|
*/
|
|
111
|
-
declare const NavbarSimpleLinks: ({ className, containerClassName, navClassName, navigationMenuClassName, menuListClassName, actionsClassName, logo, logoSlot, logoClassName, navItems, navItemsSlot, defaultActiveItem, actions, actionsSlot, layoutVariant, background, spacing, pattern, patternOpacity, optixFlowConfig, }: NavbarSimpleLinksProps) => react_jsx_runtime.JSX.Element;
|
|
123
|
+
declare const NavbarSimpleLinks: ({ className, containerClassName, navClassName, navigationMenuClassName, menuListClassName, actionsClassName, mobileMenuClassName, logo, logoSlot, logoClassName, navItems, navItemsSlot, defaultActiveItem, actions, actionsSlot, mobileActions, mobileActionsSlot, layoutVariant, background, spacing, pattern, patternOpacity, optixFlowConfig, }: NavbarSimpleLinksProps) => react_jsx_runtime.JSX.Element;
|
|
112
124
|
|
|
113
125
|
export { NavbarSimpleLinks, type NavbarSimpleLinksProps };
|