aura-ui-library 1.0.27 → 1.0.29
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/index.js +297 -34
- package/dist/index.mjs +311 -39
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -258,9 +258,20 @@ var import_gsap2 = require("gsap");
|
|
|
258
258
|
var import_fi = require("react-icons/fi");
|
|
259
259
|
var Navbar = ({
|
|
260
260
|
logoText = "AURA",
|
|
261
|
+
showBadge = true,
|
|
262
|
+
variant = "overlay",
|
|
263
|
+
// "overlay" | "classic"
|
|
261
264
|
links = [
|
|
262
265
|
{ label: "Home", path: "/" },
|
|
263
|
-
{
|
|
266
|
+
{
|
|
267
|
+
label: "Products",
|
|
268
|
+
path: "/products",
|
|
269
|
+
children: [
|
|
270
|
+
{ label: "New Arrivals", path: "/new" },
|
|
271
|
+
{ label: "Best Sellers", path: "/best" },
|
|
272
|
+
{ label: "Accessories", path: "/accessories" }
|
|
273
|
+
]
|
|
274
|
+
},
|
|
264
275
|
{ label: "Workspace", path: "/workspace" },
|
|
265
276
|
{ label: "Pricing", path: "/pricing" }
|
|
266
277
|
],
|
|
@@ -274,25 +285,36 @@ var Navbar = ({
|
|
|
274
285
|
email: "hello@aura-ui.dev",
|
|
275
286
|
address: "123 Innovation Drive, SF"
|
|
276
287
|
},
|
|
288
|
+
// E-commerce Triggers
|
|
289
|
+
showSearch = false,
|
|
290
|
+
onSearch = () => console.log("Search clicked"),
|
|
291
|
+
showCart = false,
|
|
292
|
+
cartCount = 0,
|
|
293
|
+
onCartClick = () => console.log("Cart clicked"),
|
|
294
|
+
showUser = false,
|
|
295
|
+
onUserClick = () => console.log("User clicked"),
|
|
296
|
+
// Theme & Styling
|
|
277
297
|
accentColor = "#6366f1",
|
|
278
298
|
theme = "dark",
|
|
279
299
|
// "dark" | "light"
|
|
300
|
+
transparent = false,
|
|
280
301
|
style = {},
|
|
281
302
|
animationDuration = 1.2,
|
|
282
303
|
easing = "expo.inOut",
|
|
283
304
|
linkSize = "clamp(42px, 7vw, 100px)"
|
|
284
|
-
// Option to change navlink size
|
|
285
305
|
}) => {
|
|
286
306
|
const [isOpen, setIsOpen] = (0, import_react2.useState)(false);
|
|
287
307
|
const [isScrolled, setIsScrolled] = (0, import_react2.useState)(false);
|
|
288
308
|
const [isMobile, setIsMobile] = (0, import_react2.useState)(false);
|
|
289
309
|
const [hoverIndex, setHoverIndex] = (0, import_react2.useState)(null);
|
|
310
|
+
const [expandedOverlay, setExpandedOverlay] = (0, import_react2.useState)(null);
|
|
290
311
|
const inRouter = (0, import_react_router_dom2.useInRouterContext)();
|
|
291
312
|
const navigate = inRouter ? (0, import_react_router_dom2.useNavigate)() : null;
|
|
292
313
|
const location = inRouter ? (0, import_react_router_dom2.useLocation)() : { pathname: "/" };
|
|
293
314
|
const overlayRef = (0, import_react2.useRef)(null);
|
|
294
315
|
const linksContainerRef = (0, import_react2.useRef)(null);
|
|
295
316
|
const infoContainerRef = (0, import_react2.useRef)(null);
|
|
317
|
+
const desktopDropdownRefs = (0, import_react2.useRef)({});
|
|
296
318
|
const isLight2 = theme === "light";
|
|
297
319
|
const bgMain = isLight2 ? "#ffffff" : "#050505";
|
|
298
320
|
const textMain = isLight2 ? "#0f172a" : "#ffffff";
|
|
@@ -341,34 +363,70 @@ var Navbar = ({
|
|
|
341
363
|
}
|
|
342
364
|
} else {
|
|
343
365
|
document.body.style.overflow = "";
|
|
344
|
-
|
|
345
|
-
tl.to(overlayRef.current, {
|
|
366
|
+
import_gsap2.gsap.to(overlayRef.current, {
|
|
346
367
|
clipPath: "circle(0% at 95% 40px)",
|
|
347
368
|
pointerEvents: "none",
|
|
348
369
|
duration: animationDuration * 0.7,
|
|
349
370
|
ease: "expo.inOut"
|
|
350
371
|
});
|
|
372
|
+
setExpandedOverlay(null);
|
|
351
373
|
}
|
|
352
374
|
return () => {
|
|
353
375
|
document.body.style.overflow = "";
|
|
354
376
|
};
|
|
355
377
|
}, [isOpen, animationDuration, easing, prefersReducedMotion]);
|
|
378
|
+
const handleDropdownEnter = (idx) => {
|
|
379
|
+
if (desktopDropdownRefs.current[idx]) {
|
|
380
|
+
import_gsap2.gsap.killTweensOf(desktopDropdownRefs.current[idx]);
|
|
381
|
+
import_gsap2.gsap.to(desktopDropdownRefs.current[idx], {
|
|
382
|
+
opacity: 1,
|
|
383
|
+
y: 10,
|
|
384
|
+
pointerEvents: "auto",
|
|
385
|
+
visibility: "visible",
|
|
386
|
+
duration: 0.3,
|
|
387
|
+
ease: "power2.out"
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
const handleDropdownLeave = (idx) => {
|
|
392
|
+
if (desktopDropdownRefs.current[idx]) {
|
|
393
|
+
import_gsap2.gsap.to(desktopDropdownRefs.current[idx], {
|
|
394
|
+
opacity: 0,
|
|
395
|
+
y: 0,
|
|
396
|
+
pointerEvents: "none",
|
|
397
|
+
visibility: "hidden",
|
|
398
|
+
duration: 0.2,
|
|
399
|
+
ease: "power2.in"
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
};
|
|
356
403
|
const handleNavigation = (path, e) => {
|
|
357
404
|
e.preventDefault();
|
|
358
405
|
if (location.pathname === path) {
|
|
359
406
|
setIsOpen(false);
|
|
360
407
|
return;
|
|
361
408
|
}
|
|
362
|
-
|
|
363
|
-
|
|
409
|
+
if (isOpen) {
|
|
410
|
+
setIsOpen(false);
|
|
411
|
+
setTimeout(() => {
|
|
412
|
+
if (navigate) {
|
|
413
|
+
navigate(path);
|
|
414
|
+
window.scrollTo(0, 0);
|
|
415
|
+
} else {
|
|
416
|
+
window.location.href = path;
|
|
417
|
+
}
|
|
418
|
+
}, animationDuration * 0.7 * 1e3);
|
|
419
|
+
} else {
|
|
364
420
|
if (navigate) {
|
|
365
421
|
navigate(path);
|
|
366
422
|
window.scrollTo(0, 0);
|
|
367
423
|
} else {
|
|
368
424
|
window.location.href = path;
|
|
369
425
|
}
|
|
370
|
-
}
|
|
426
|
+
}
|
|
371
427
|
};
|
|
428
|
+
const showHamburger = isMobile || variant === "overlay";
|
|
429
|
+
const showDesktopLinks = variant === "classic" && !isMobile;
|
|
372
430
|
const styles = {
|
|
373
431
|
header: {
|
|
374
432
|
position: "fixed",
|
|
@@ -382,9 +440,9 @@ var Navbar = ({
|
|
|
382
440
|
fontFamily: '"Inter", -apple-system, sans-serif',
|
|
383
441
|
boxSizing: "border-box",
|
|
384
442
|
padding: isScrolled ? "15px 5%" : "30px 5%",
|
|
385
|
-
backgroundColor: isScrolled ? headerBg : "transparent",
|
|
386
|
-
backdropFilter: isScrolled ? "blur(20px)" : "none",
|
|
387
|
-
boxShadow: isScrolled ? headerShadow :
|
|
443
|
+
backgroundColor: isScrolled ? headerBg : transparent ? "transparent" : headerBg,
|
|
444
|
+
backdropFilter: isScrolled || !transparent ? "blur(20px)" : "none",
|
|
445
|
+
boxShadow: isScrolled ? headerShadow : !transparent && headerShadow,
|
|
388
446
|
transition: "all 0.5s cubic-bezier(0.16, 1, 0.3, 1)",
|
|
389
447
|
...style
|
|
390
448
|
},
|
|
@@ -397,7 +455,6 @@ var Navbar = ({
|
|
|
397
455
|
letterSpacing: "1px",
|
|
398
456
|
textDecoration: "none",
|
|
399
457
|
color: textMain,
|
|
400
|
-
// Text logic handles contrast via theme
|
|
401
458
|
zIndex: 1001,
|
|
402
459
|
cursor: "pointer",
|
|
403
460
|
willChange: "transform",
|
|
@@ -410,6 +467,86 @@ var Navbar = ({
|
|
|
410
467
|
backgroundColor: accentColor,
|
|
411
468
|
boxShadow: `0 0 15px ${accentColor}88`
|
|
412
469
|
},
|
|
470
|
+
desktopNav: {
|
|
471
|
+
display: "flex",
|
|
472
|
+
flex: 1,
|
|
473
|
+
justifyContent: "center",
|
|
474
|
+
alignItems: "center",
|
|
475
|
+
gap: "30px"
|
|
476
|
+
},
|
|
477
|
+
desktopLinkWrapper: {
|
|
478
|
+
position: "relative",
|
|
479
|
+
padding: "10px 0"
|
|
480
|
+
},
|
|
481
|
+
desktopLink: {
|
|
482
|
+
color: textMain,
|
|
483
|
+
textDecoration: "none",
|
|
484
|
+
fontSize: "15px",
|
|
485
|
+
fontWeight: "600",
|
|
486
|
+
cursor: "pointer",
|
|
487
|
+
display: "flex",
|
|
488
|
+
alignItems: "center",
|
|
489
|
+
gap: "6px",
|
|
490
|
+
transition: "color 0.3s"
|
|
491
|
+
},
|
|
492
|
+
desktopDropdown: {
|
|
493
|
+
position: "absolute",
|
|
494
|
+
top: "100%",
|
|
495
|
+
left: "50%",
|
|
496
|
+
transform: "translateX(-50%) translateY(0)",
|
|
497
|
+
backgroundColor: bgMain,
|
|
498
|
+
border: `1px solid ${borderCol}`,
|
|
499
|
+
borderRadius: "16px",
|
|
500
|
+
padding: "8px",
|
|
501
|
+
minWidth: "200px",
|
|
502
|
+
boxShadow: "0 10px 40px rgba(0,0,0,0.1)",
|
|
503
|
+
opacity: 0,
|
|
504
|
+
visibility: "hidden",
|
|
505
|
+
pointerEvents: "none",
|
|
506
|
+
display: "flex",
|
|
507
|
+
flexDirection: "column",
|
|
508
|
+
gap: "4px"
|
|
509
|
+
},
|
|
510
|
+
dropdownItem: {
|
|
511
|
+
padding: "12px 16px",
|
|
512
|
+
borderRadius: "10px",
|
|
513
|
+
color: textMain,
|
|
514
|
+
textDecoration: "none",
|
|
515
|
+
fontSize: "14px",
|
|
516
|
+
fontWeight: "500",
|
|
517
|
+
transition: "background-color 0.2s, color 0.2s"
|
|
518
|
+
},
|
|
519
|
+
rightActions: {
|
|
520
|
+
display: "flex",
|
|
521
|
+
alignItems: "center",
|
|
522
|
+
gap: "20px",
|
|
523
|
+
zIndex: 1001
|
|
524
|
+
},
|
|
525
|
+
iconBtn: {
|
|
526
|
+
fontSize: "22px",
|
|
527
|
+
color: textMain,
|
|
528
|
+
cursor: "pointer",
|
|
529
|
+
display: "flex",
|
|
530
|
+
alignItems: "center",
|
|
531
|
+
position: "relative",
|
|
532
|
+
transition: "transform 0.2s ease, color 0.2s ease"
|
|
533
|
+
},
|
|
534
|
+
cartBadge: {
|
|
535
|
+
position: "absolute",
|
|
536
|
+
top: "-6px",
|
|
537
|
+
right: "-8px",
|
|
538
|
+
backgroundColor: accentColor,
|
|
539
|
+
color: "#fff",
|
|
540
|
+
fontSize: "10px",
|
|
541
|
+
fontWeight: "800",
|
|
542
|
+
minWidth: "16px",
|
|
543
|
+
height: "16px",
|
|
544
|
+
borderRadius: "8px",
|
|
545
|
+
display: "flex",
|
|
546
|
+
justifyContent: "center",
|
|
547
|
+
alignItems: "center",
|
|
548
|
+
padding: "0 4px"
|
|
549
|
+
},
|
|
413
550
|
hamburgerBtn: {
|
|
414
551
|
position: "relative",
|
|
415
552
|
width: "48px",
|
|
@@ -422,7 +559,6 @@ var Navbar = ({
|
|
|
422
559
|
alignItems: "center",
|
|
423
560
|
gap: "6px",
|
|
424
561
|
cursor: "pointer",
|
|
425
|
-
zIndex: 1001,
|
|
426
562
|
border: `1px solid ${isOpen ? borderCol : "transparent"}`,
|
|
427
563
|
transition: "all 0.4s ease"
|
|
428
564
|
},
|
|
@@ -430,7 +566,6 @@ var Navbar = ({
|
|
|
430
566
|
width: "22px",
|
|
431
567
|
height: "2px",
|
|
432
568
|
backgroundColor: textMain,
|
|
433
|
-
// Uses theme for color
|
|
434
569
|
borderRadius: "2px",
|
|
435
570
|
transition: "all 0.4s cubic-bezier(0.16, 1, 0.3, 1)",
|
|
436
571
|
transformOrigin: "center"
|
|
@@ -439,22 +574,21 @@ var Navbar = ({
|
|
|
439
574
|
position: "fixed",
|
|
440
575
|
top: 0,
|
|
441
576
|
left: 0,
|
|
442
|
-
width: "
|
|
577
|
+
width: "100%",
|
|
443
578
|
height: "100vh",
|
|
444
579
|
backgroundColor: bgMain,
|
|
445
580
|
zIndex: 999,
|
|
446
581
|
clipPath: "circle(0% at 95% 40px)",
|
|
447
582
|
pointerEvents: "none",
|
|
448
583
|
display: "flex",
|
|
449
|
-
// Switch to flex for bulletproof layout
|
|
450
584
|
flexDirection: isMobile ? "column" : "row",
|
|
451
585
|
justifyContent: isMobile ? "flex-start" : "space-between",
|
|
452
586
|
alignItems: isMobile ? "flex-start" : "center",
|
|
453
587
|
padding: isMobile ? "120px 8% 60px" : "100px 10%",
|
|
454
588
|
boxSizing: "border-box",
|
|
455
589
|
fontFamily: '"Inter", -apple-system, sans-serif',
|
|
456
|
-
overflowY: isMobile ? "auto" : "
|
|
457
|
-
//
|
|
590
|
+
overflowY: isMobile ? "auto" : "none"
|
|
591
|
+
// Prevent scroll lock bugs on desktop
|
|
458
592
|
},
|
|
459
593
|
linksArea: {
|
|
460
594
|
display: "flex",
|
|
@@ -463,7 +597,12 @@ var Navbar = ({
|
|
|
463
597
|
width: isMobile ? "100%" : "60%",
|
|
464
598
|
marginBottom: isMobile ? "60px" : "0"
|
|
465
599
|
},
|
|
466
|
-
|
|
600
|
+
overlayLinkItem: {
|
|
601
|
+
display: "flex",
|
|
602
|
+
flexDirection: "column",
|
|
603
|
+
width: "100%"
|
|
604
|
+
},
|
|
605
|
+
overlayLinkMain: {
|
|
467
606
|
display: "flex",
|
|
468
607
|
alignItems: "center",
|
|
469
608
|
gap: "20px",
|
|
@@ -479,6 +618,23 @@ var Navbar = ({
|
|
|
479
618
|
textTransform: "uppercase",
|
|
480
619
|
lineHeight: "1"
|
|
481
620
|
},
|
|
621
|
+
accordionContent: {
|
|
622
|
+
display: "flex",
|
|
623
|
+
flexDirection: "column",
|
|
624
|
+
paddingLeft: "2%",
|
|
625
|
+
borderLeft: `2px solid ${borderCol}`,
|
|
626
|
+
marginLeft: "1%",
|
|
627
|
+
marginTop: "10px",
|
|
628
|
+
gap: "15px",
|
|
629
|
+
overflow: "hidden"
|
|
630
|
+
},
|
|
631
|
+
accordionLink: {
|
|
632
|
+
fontSize: "clamp(20px, 3vw, 32px)",
|
|
633
|
+
fontWeight: "600",
|
|
634
|
+
color: textMuted,
|
|
635
|
+
textDecoration: "none",
|
|
636
|
+
transition: "color 0.3s ease"
|
|
637
|
+
},
|
|
482
638
|
infoArea: {
|
|
483
639
|
display: "flex",
|
|
484
640
|
flexDirection: "column",
|
|
@@ -524,7 +680,80 @@ var Navbar = ({
|
|
|
524
680
|
transition: "all 0.3s ease"
|
|
525
681
|
}
|
|
526
682
|
};
|
|
527
|
-
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement("header", { style: styles.header }, /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.logo, onClick: (e) => handleNavigation("/", e) }, /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.logoDot }), logoText), /* @__PURE__ */ import_react2.default.createElement(
|
|
683
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement("header", { style: styles.header }, /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.logo, onClick: (e) => handleNavigation("/", e) }, showBadge && /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.logoDot }), logoText), showDesktopLinks && /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.desktopNav }, links.map((link, idx) => /* @__PURE__ */ import_react2.default.createElement(
|
|
684
|
+
"div",
|
|
685
|
+
{
|
|
686
|
+
key: idx,
|
|
687
|
+
style: styles.desktopLinkWrapper,
|
|
688
|
+
onMouseEnter: () => handleDropdownEnter(idx),
|
|
689
|
+
onMouseLeave: () => handleDropdownLeave(idx)
|
|
690
|
+
},
|
|
691
|
+
/* @__PURE__ */ import_react2.default.createElement(
|
|
692
|
+
"a",
|
|
693
|
+
{
|
|
694
|
+
href: link.path,
|
|
695
|
+
style: { ...styles.desktopLink, color: location.pathname === link.path ? accentColor : textMain },
|
|
696
|
+
onClick: (e) => {
|
|
697
|
+
if (!link.children) handleNavigation(link.path, e);
|
|
698
|
+
}
|
|
699
|
+
},
|
|
700
|
+
link.label,
|
|
701
|
+
link.children && /* @__PURE__ */ import_react2.default.createElement(import_fi.FiChevronDown, { style: { marginTop: "2px" }, size: 16 })
|
|
702
|
+
),
|
|
703
|
+
link.children && /* @__PURE__ */ import_react2.default.createElement(
|
|
704
|
+
"div",
|
|
705
|
+
{
|
|
706
|
+
ref: (el) => desktopDropdownRefs.current[idx] = el,
|
|
707
|
+
style: styles.desktopDropdown
|
|
708
|
+
},
|
|
709
|
+
link.children.map((child, cIdx) => /* @__PURE__ */ import_react2.default.createElement(
|
|
710
|
+
"a",
|
|
711
|
+
{
|
|
712
|
+
key: cIdx,
|
|
713
|
+
href: child.path,
|
|
714
|
+
style: styles.dropdownItem,
|
|
715
|
+
onClick: (e) => handleNavigation(child.path, e),
|
|
716
|
+
onMouseEnter: (e) => {
|
|
717
|
+
e.currentTarget.style.backgroundColor = isLight2 ? "rgba(0,0,0,0.05)" : "rgba(255,255,255,0.05)";
|
|
718
|
+
e.currentTarget.style.color = accentColor;
|
|
719
|
+
},
|
|
720
|
+
onMouseLeave: (e) => {
|
|
721
|
+
e.currentTarget.style.backgroundColor = "transparent";
|
|
722
|
+
e.currentTarget.style.color = textMain;
|
|
723
|
+
}
|
|
724
|
+
},
|
|
725
|
+
child.label
|
|
726
|
+
))
|
|
727
|
+
)
|
|
728
|
+
))), /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.rightActions }, showSearch && /* @__PURE__ */ import_react2.default.createElement(
|
|
729
|
+
"div",
|
|
730
|
+
{
|
|
731
|
+
style: styles.iconBtn,
|
|
732
|
+
onClick: onSearch,
|
|
733
|
+
onMouseEnter: (e) => e.currentTarget.style.color = accentColor,
|
|
734
|
+
onMouseLeave: (e) => e.currentTarget.style.color = textMain
|
|
735
|
+
},
|
|
736
|
+
/* @__PURE__ */ import_react2.default.createElement(import_fi.FiSearch, null)
|
|
737
|
+
), showUser && /* @__PURE__ */ import_react2.default.createElement(
|
|
738
|
+
"div",
|
|
739
|
+
{
|
|
740
|
+
style: styles.iconBtn,
|
|
741
|
+
onClick: onUserClick,
|
|
742
|
+
onMouseEnter: (e) => e.currentTarget.style.color = accentColor,
|
|
743
|
+
onMouseLeave: (e) => e.currentTarget.style.color = textMain
|
|
744
|
+
},
|
|
745
|
+
/* @__PURE__ */ import_react2.default.createElement(import_fi.FiUser, null)
|
|
746
|
+
), showCart && /* @__PURE__ */ import_react2.default.createElement(
|
|
747
|
+
"div",
|
|
748
|
+
{
|
|
749
|
+
style: styles.iconBtn,
|
|
750
|
+
onClick: onCartClick,
|
|
751
|
+
onMouseEnter: (e) => e.currentTarget.style.color = accentColor,
|
|
752
|
+
onMouseLeave: (e) => e.currentTarget.style.color = textMain
|
|
753
|
+
},
|
|
754
|
+
/* @__PURE__ */ import_react2.default.createElement(import_fi.FiShoppingBag, null),
|
|
755
|
+
cartCount > 0 && /* @__PURE__ */ import_react2.default.createElement("span", { style: styles.cartBadge }, cartCount)
|
|
756
|
+
), showHamburger && /* @__PURE__ */ import_react2.default.createElement(
|
|
528
757
|
"div",
|
|
529
758
|
{
|
|
530
759
|
style: styles.hamburgerBtn,
|
|
@@ -542,27 +771,28 @@ var Navbar = ({
|
|
|
542
771
|
}
|
|
543
772
|
}
|
|
544
773
|
},
|
|
545
|
-
/* @__PURE__ */ import_react2.default.createElement("div", { style: {
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
} }),
|
|
549
|
-
/* @__PURE__ */ import_react2.default.createElement("div", { style: {
|
|
550
|
-
...styles.line,
|
|
551
|
-
transform: isOpen ? "translateY(-4px) rotate(-45deg)" : "none"
|
|
552
|
-
} })
|
|
553
|
-
)), /* @__PURE__ */ import_react2.default.createElement("div", { ref: overlayRef, style: styles.overlay }, /* @__PURE__ */ import_react2.default.createElement("div", { ref: linksContainerRef, style: styles.linksArea }, links.map((link, idx) => {
|
|
774
|
+
/* @__PURE__ */ import_react2.default.createElement("div", { style: { ...styles.line, transform: isOpen ? "translateY(4px) rotate(45deg)" : "none" } }),
|
|
775
|
+
/* @__PURE__ */ import_react2.default.createElement("div", { style: { ...styles.line, transform: isOpen ? "translateY(-4px) rotate(-45deg)" : "none" } })
|
|
776
|
+
))), /* @__PURE__ */ import_react2.default.createElement("div", { ref: overlayRef, style: styles.overlay }, /* @__PURE__ */ import_react2.default.createElement("div", { ref: linksContainerRef, style: styles.linksArea }, links.map((link, idx) => {
|
|
554
777
|
const isHovered = hoverIndex === idx;
|
|
555
778
|
const isAnyHovered = hoverIndex !== null;
|
|
556
779
|
const isActiveRoute = location.pathname === link.path;
|
|
557
|
-
|
|
780
|
+
const isExpanded = expandedOverlay === idx;
|
|
781
|
+
return /* @__PURE__ */ import_react2.default.createElement("div", { key: idx, style: styles.overlayLinkItem }, /* @__PURE__ */ import_react2.default.createElement(
|
|
558
782
|
"a",
|
|
559
783
|
{
|
|
560
|
-
key: idx,
|
|
561
784
|
href: link.path,
|
|
562
|
-
onClick: (e) =>
|
|
785
|
+
onClick: (e) => {
|
|
786
|
+
if (link.children) {
|
|
787
|
+
e.preventDefault();
|
|
788
|
+
setExpandedOverlay(isExpanded ? null : idx);
|
|
789
|
+
} else {
|
|
790
|
+
handleNavigation(link.path, e);
|
|
791
|
+
}
|
|
792
|
+
},
|
|
563
793
|
onMouseEnter: () => setHoverIndex(idx),
|
|
564
794
|
onMouseLeave: () => setHoverIndex(null),
|
|
565
|
-
style: styles.
|
|
795
|
+
style: styles.overlayLinkMain
|
|
566
796
|
},
|
|
567
797
|
/* @__PURE__ */ import_react2.default.createElement("span", { style: {
|
|
568
798
|
...styles.linkText,
|
|
@@ -571,7 +801,18 @@ var Navbar = ({
|
|
|
571
801
|
transform: isHovered || isActiveRoute ? "translateX(20px)" : "translateX(0px)",
|
|
572
802
|
transition: "all 0.4s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
573
803
|
} }, link.label),
|
|
574
|
-
/* @__PURE__ */ import_react2.default.createElement(
|
|
804
|
+
link.children ? /* @__PURE__ */ import_react2.default.createElement(
|
|
805
|
+
import_fi.FiChevronDown,
|
|
806
|
+
{
|
|
807
|
+
style: {
|
|
808
|
+
fontSize: "clamp(24px, 3vw, 40px)",
|
|
809
|
+
color: accentColor,
|
|
810
|
+
opacity: isHovered ? 1 : 0,
|
|
811
|
+
transform: isExpanded ? "rotate(180deg)" : "rotate(0deg)",
|
|
812
|
+
transition: "all 0.5s ease"
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
) : /* @__PURE__ */ import_react2.default.createElement(
|
|
575
816
|
import_fi.FiArrowUpRight,
|
|
576
817
|
{
|
|
577
818
|
style: {
|
|
@@ -583,7 +824,29 @@ var Navbar = ({
|
|
|
583
824
|
}
|
|
584
825
|
}
|
|
585
826
|
)
|
|
586
|
-
)
|
|
827
|
+
), link.children && /* @__PURE__ */ import_react2.default.createElement("div", { style: {
|
|
828
|
+
...styles.accordionContent,
|
|
829
|
+
maxHeight: isExpanded ? "500px" : "0px",
|
|
830
|
+
opacity: isExpanded ? 1 : 0,
|
|
831
|
+
transition: "all 0.5s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
832
|
+
} }, link.children.map((child, cIdx) => /* @__PURE__ */ import_react2.default.createElement(
|
|
833
|
+
"a",
|
|
834
|
+
{
|
|
835
|
+
key: cIdx,
|
|
836
|
+
href: child.path,
|
|
837
|
+
onClick: (e) => handleNavigation(child.path, e),
|
|
838
|
+
style: styles.accordionLink,
|
|
839
|
+
onMouseEnter: (e) => {
|
|
840
|
+
e.currentTarget.style.color = accentColor;
|
|
841
|
+
e.currentTarget.style.paddingLeft = "10px";
|
|
842
|
+
},
|
|
843
|
+
onMouseLeave: (e) => {
|
|
844
|
+
e.currentTarget.style.color = textMuted;
|
|
845
|
+
e.currentTarget.style.paddingLeft = "0px";
|
|
846
|
+
}
|
|
847
|
+
},
|
|
848
|
+
child.label
|
|
849
|
+
))));
|
|
587
850
|
})), /* @__PURE__ */ import_react2.default.createElement("div", { ref: infoContainerRef, style: styles.infoArea }, /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.infoBlock }, /* @__PURE__ */ import_react2.default.createElement("span", { style: styles.infoLabel }, contact.title), /* @__PURE__ */ import_react2.default.createElement("span", { style: styles.infoText }, contact.email), /* @__PURE__ */ import_react2.default.createElement("span", { style: { ...styles.infoText, color: textMuted } }, contact.address)), /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.infoBlock }, /* @__PURE__ */ import_react2.default.createElement("span", { style: styles.infoLabel }, "Socials"), /* @__PURE__ */ import_react2.default.createElement("div", { style: styles.socialGrid }, socials.map((social, idx) => /* @__PURE__ */ import_react2.default.createElement(
|
|
588
851
|
"a",
|
|
589
852
|
{
|
package/dist/index.mjs
CHANGED
|
@@ -199,12 +199,32 @@ var Button = ({
|
|
|
199
199
|
import React2, { useRef as useRef2, useEffect as useEffect2, useState } from "react";
|
|
200
200
|
import { Link, useInRouterContext as useInRouterContext2, useNavigate as useNavigate2, useLocation } from "react-router-dom";
|
|
201
201
|
import { gsap as gsap2 } from "gsap";
|
|
202
|
-
import {
|
|
202
|
+
import {
|
|
203
|
+
FiArrowUpRight,
|
|
204
|
+
FiTwitter,
|
|
205
|
+
FiGithub,
|
|
206
|
+
FiLinkedin,
|
|
207
|
+
FiSearch,
|
|
208
|
+
FiShoppingBag,
|
|
209
|
+
FiUser,
|
|
210
|
+
FiChevronDown
|
|
211
|
+
} from "react-icons/fi";
|
|
203
212
|
var Navbar = ({
|
|
204
213
|
logoText = "AURA",
|
|
214
|
+
showBadge = true,
|
|
215
|
+
variant = "overlay",
|
|
216
|
+
// "overlay" | "classic"
|
|
205
217
|
links = [
|
|
206
218
|
{ label: "Home", path: "/" },
|
|
207
|
-
{
|
|
219
|
+
{
|
|
220
|
+
label: "Products",
|
|
221
|
+
path: "/products",
|
|
222
|
+
children: [
|
|
223
|
+
{ label: "New Arrivals", path: "/new" },
|
|
224
|
+
{ label: "Best Sellers", path: "/best" },
|
|
225
|
+
{ label: "Accessories", path: "/accessories" }
|
|
226
|
+
]
|
|
227
|
+
},
|
|
208
228
|
{ label: "Workspace", path: "/workspace" },
|
|
209
229
|
{ label: "Pricing", path: "/pricing" }
|
|
210
230
|
],
|
|
@@ -218,25 +238,36 @@ var Navbar = ({
|
|
|
218
238
|
email: "hello@aura-ui.dev",
|
|
219
239
|
address: "123 Innovation Drive, SF"
|
|
220
240
|
},
|
|
241
|
+
// E-commerce Triggers
|
|
242
|
+
showSearch = false,
|
|
243
|
+
onSearch = () => console.log("Search clicked"),
|
|
244
|
+
showCart = false,
|
|
245
|
+
cartCount = 0,
|
|
246
|
+
onCartClick = () => console.log("Cart clicked"),
|
|
247
|
+
showUser = false,
|
|
248
|
+
onUserClick = () => console.log("User clicked"),
|
|
249
|
+
// Theme & Styling
|
|
221
250
|
accentColor = "#6366f1",
|
|
222
251
|
theme = "dark",
|
|
223
252
|
// "dark" | "light"
|
|
253
|
+
transparent = false,
|
|
224
254
|
style = {},
|
|
225
255
|
animationDuration = 1.2,
|
|
226
256
|
easing = "expo.inOut",
|
|
227
257
|
linkSize = "clamp(42px, 7vw, 100px)"
|
|
228
|
-
// Option to change navlink size
|
|
229
258
|
}) => {
|
|
230
259
|
const [isOpen, setIsOpen] = useState(false);
|
|
231
260
|
const [isScrolled, setIsScrolled] = useState(false);
|
|
232
261
|
const [isMobile, setIsMobile] = useState(false);
|
|
233
262
|
const [hoverIndex, setHoverIndex] = useState(null);
|
|
263
|
+
const [expandedOverlay, setExpandedOverlay] = useState(null);
|
|
234
264
|
const inRouter = useInRouterContext2();
|
|
235
265
|
const navigate = inRouter ? useNavigate2() : null;
|
|
236
266
|
const location = inRouter ? useLocation() : { pathname: "/" };
|
|
237
267
|
const overlayRef = useRef2(null);
|
|
238
268
|
const linksContainerRef = useRef2(null);
|
|
239
269
|
const infoContainerRef = useRef2(null);
|
|
270
|
+
const desktopDropdownRefs = useRef2({});
|
|
240
271
|
const isLight2 = theme === "light";
|
|
241
272
|
const bgMain = isLight2 ? "#ffffff" : "#050505";
|
|
242
273
|
const textMain = isLight2 ? "#0f172a" : "#ffffff";
|
|
@@ -285,34 +316,70 @@ var Navbar = ({
|
|
|
285
316
|
}
|
|
286
317
|
} else {
|
|
287
318
|
document.body.style.overflow = "";
|
|
288
|
-
|
|
289
|
-
tl.to(overlayRef.current, {
|
|
319
|
+
gsap2.to(overlayRef.current, {
|
|
290
320
|
clipPath: "circle(0% at 95% 40px)",
|
|
291
321
|
pointerEvents: "none",
|
|
292
322
|
duration: animationDuration * 0.7,
|
|
293
323
|
ease: "expo.inOut"
|
|
294
324
|
});
|
|
325
|
+
setExpandedOverlay(null);
|
|
295
326
|
}
|
|
296
327
|
return () => {
|
|
297
328
|
document.body.style.overflow = "";
|
|
298
329
|
};
|
|
299
330
|
}, [isOpen, animationDuration, easing, prefersReducedMotion]);
|
|
331
|
+
const handleDropdownEnter = (idx) => {
|
|
332
|
+
if (desktopDropdownRefs.current[idx]) {
|
|
333
|
+
gsap2.killTweensOf(desktopDropdownRefs.current[idx]);
|
|
334
|
+
gsap2.to(desktopDropdownRefs.current[idx], {
|
|
335
|
+
opacity: 1,
|
|
336
|
+
y: 10,
|
|
337
|
+
pointerEvents: "auto",
|
|
338
|
+
visibility: "visible",
|
|
339
|
+
duration: 0.3,
|
|
340
|
+
ease: "power2.out"
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
const handleDropdownLeave = (idx) => {
|
|
345
|
+
if (desktopDropdownRefs.current[idx]) {
|
|
346
|
+
gsap2.to(desktopDropdownRefs.current[idx], {
|
|
347
|
+
opacity: 0,
|
|
348
|
+
y: 0,
|
|
349
|
+
pointerEvents: "none",
|
|
350
|
+
visibility: "hidden",
|
|
351
|
+
duration: 0.2,
|
|
352
|
+
ease: "power2.in"
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
};
|
|
300
356
|
const handleNavigation = (path, e) => {
|
|
301
357
|
e.preventDefault();
|
|
302
358
|
if (location.pathname === path) {
|
|
303
359
|
setIsOpen(false);
|
|
304
360
|
return;
|
|
305
361
|
}
|
|
306
|
-
|
|
307
|
-
|
|
362
|
+
if (isOpen) {
|
|
363
|
+
setIsOpen(false);
|
|
364
|
+
setTimeout(() => {
|
|
365
|
+
if (navigate) {
|
|
366
|
+
navigate(path);
|
|
367
|
+
window.scrollTo(0, 0);
|
|
368
|
+
} else {
|
|
369
|
+
window.location.href = path;
|
|
370
|
+
}
|
|
371
|
+
}, animationDuration * 0.7 * 1e3);
|
|
372
|
+
} else {
|
|
308
373
|
if (navigate) {
|
|
309
374
|
navigate(path);
|
|
310
375
|
window.scrollTo(0, 0);
|
|
311
376
|
} else {
|
|
312
377
|
window.location.href = path;
|
|
313
378
|
}
|
|
314
|
-
}
|
|
379
|
+
}
|
|
315
380
|
};
|
|
381
|
+
const showHamburger = isMobile || variant === "overlay";
|
|
382
|
+
const showDesktopLinks = variant === "classic" && !isMobile;
|
|
316
383
|
const styles = {
|
|
317
384
|
header: {
|
|
318
385
|
position: "fixed",
|
|
@@ -326,9 +393,9 @@ var Navbar = ({
|
|
|
326
393
|
fontFamily: '"Inter", -apple-system, sans-serif',
|
|
327
394
|
boxSizing: "border-box",
|
|
328
395
|
padding: isScrolled ? "15px 5%" : "30px 5%",
|
|
329
|
-
backgroundColor: isScrolled ? headerBg : "transparent",
|
|
330
|
-
backdropFilter: isScrolled ? "blur(20px)" : "none",
|
|
331
|
-
boxShadow: isScrolled ? headerShadow :
|
|
396
|
+
backgroundColor: isScrolled ? headerBg : transparent ? "transparent" : headerBg,
|
|
397
|
+
backdropFilter: isScrolled || !transparent ? "blur(20px)" : "none",
|
|
398
|
+
boxShadow: isScrolled ? headerShadow : !transparent && headerShadow,
|
|
332
399
|
transition: "all 0.5s cubic-bezier(0.16, 1, 0.3, 1)",
|
|
333
400
|
...style
|
|
334
401
|
},
|
|
@@ -341,7 +408,6 @@ var Navbar = ({
|
|
|
341
408
|
letterSpacing: "1px",
|
|
342
409
|
textDecoration: "none",
|
|
343
410
|
color: textMain,
|
|
344
|
-
// Text logic handles contrast via theme
|
|
345
411
|
zIndex: 1001,
|
|
346
412
|
cursor: "pointer",
|
|
347
413
|
willChange: "transform",
|
|
@@ -354,6 +420,86 @@ var Navbar = ({
|
|
|
354
420
|
backgroundColor: accentColor,
|
|
355
421
|
boxShadow: `0 0 15px ${accentColor}88`
|
|
356
422
|
},
|
|
423
|
+
desktopNav: {
|
|
424
|
+
display: "flex",
|
|
425
|
+
flex: 1,
|
|
426
|
+
justifyContent: "center",
|
|
427
|
+
alignItems: "center",
|
|
428
|
+
gap: "30px"
|
|
429
|
+
},
|
|
430
|
+
desktopLinkWrapper: {
|
|
431
|
+
position: "relative",
|
|
432
|
+
padding: "10px 0"
|
|
433
|
+
},
|
|
434
|
+
desktopLink: {
|
|
435
|
+
color: textMain,
|
|
436
|
+
textDecoration: "none",
|
|
437
|
+
fontSize: "15px",
|
|
438
|
+
fontWeight: "600",
|
|
439
|
+
cursor: "pointer",
|
|
440
|
+
display: "flex",
|
|
441
|
+
alignItems: "center",
|
|
442
|
+
gap: "6px",
|
|
443
|
+
transition: "color 0.3s"
|
|
444
|
+
},
|
|
445
|
+
desktopDropdown: {
|
|
446
|
+
position: "absolute",
|
|
447
|
+
top: "100%",
|
|
448
|
+
left: "50%",
|
|
449
|
+
transform: "translateX(-50%) translateY(0)",
|
|
450
|
+
backgroundColor: bgMain,
|
|
451
|
+
border: `1px solid ${borderCol}`,
|
|
452
|
+
borderRadius: "16px",
|
|
453
|
+
padding: "8px",
|
|
454
|
+
minWidth: "200px",
|
|
455
|
+
boxShadow: "0 10px 40px rgba(0,0,0,0.1)",
|
|
456
|
+
opacity: 0,
|
|
457
|
+
visibility: "hidden",
|
|
458
|
+
pointerEvents: "none",
|
|
459
|
+
display: "flex",
|
|
460
|
+
flexDirection: "column",
|
|
461
|
+
gap: "4px"
|
|
462
|
+
},
|
|
463
|
+
dropdownItem: {
|
|
464
|
+
padding: "12px 16px",
|
|
465
|
+
borderRadius: "10px",
|
|
466
|
+
color: textMain,
|
|
467
|
+
textDecoration: "none",
|
|
468
|
+
fontSize: "14px",
|
|
469
|
+
fontWeight: "500",
|
|
470
|
+
transition: "background-color 0.2s, color 0.2s"
|
|
471
|
+
},
|
|
472
|
+
rightActions: {
|
|
473
|
+
display: "flex",
|
|
474
|
+
alignItems: "center",
|
|
475
|
+
gap: "20px",
|
|
476
|
+
zIndex: 1001
|
|
477
|
+
},
|
|
478
|
+
iconBtn: {
|
|
479
|
+
fontSize: "22px",
|
|
480
|
+
color: textMain,
|
|
481
|
+
cursor: "pointer",
|
|
482
|
+
display: "flex",
|
|
483
|
+
alignItems: "center",
|
|
484
|
+
position: "relative",
|
|
485
|
+
transition: "transform 0.2s ease, color 0.2s ease"
|
|
486
|
+
},
|
|
487
|
+
cartBadge: {
|
|
488
|
+
position: "absolute",
|
|
489
|
+
top: "-6px",
|
|
490
|
+
right: "-8px",
|
|
491
|
+
backgroundColor: accentColor,
|
|
492
|
+
color: "#fff",
|
|
493
|
+
fontSize: "10px",
|
|
494
|
+
fontWeight: "800",
|
|
495
|
+
minWidth: "16px",
|
|
496
|
+
height: "16px",
|
|
497
|
+
borderRadius: "8px",
|
|
498
|
+
display: "flex",
|
|
499
|
+
justifyContent: "center",
|
|
500
|
+
alignItems: "center",
|
|
501
|
+
padding: "0 4px"
|
|
502
|
+
},
|
|
357
503
|
hamburgerBtn: {
|
|
358
504
|
position: "relative",
|
|
359
505
|
width: "48px",
|
|
@@ -366,7 +512,6 @@ var Navbar = ({
|
|
|
366
512
|
alignItems: "center",
|
|
367
513
|
gap: "6px",
|
|
368
514
|
cursor: "pointer",
|
|
369
|
-
zIndex: 1001,
|
|
370
515
|
border: `1px solid ${isOpen ? borderCol : "transparent"}`,
|
|
371
516
|
transition: "all 0.4s ease"
|
|
372
517
|
},
|
|
@@ -374,7 +519,6 @@ var Navbar = ({
|
|
|
374
519
|
width: "22px",
|
|
375
520
|
height: "2px",
|
|
376
521
|
backgroundColor: textMain,
|
|
377
|
-
// Uses theme for color
|
|
378
522
|
borderRadius: "2px",
|
|
379
523
|
transition: "all 0.4s cubic-bezier(0.16, 1, 0.3, 1)",
|
|
380
524
|
transformOrigin: "center"
|
|
@@ -383,22 +527,21 @@ var Navbar = ({
|
|
|
383
527
|
position: "fixed",
|
|
384
528
|
top: 0,
|
|
385
529
|
left: 0,
|
|
386
|
-
width: "
|
|
530
|
+
width: "100%",
|
|
387
531
|
height: "100vh",
|
|
388
532
|
backgroundColor: bgMain,
|
|
389
533
|
zIndex: 999,
|
|
390
534
|
clipPath: "circle(0% at 95% 40px)",
|
|
391
535
|
pointerEvents: "none",
|
|
392
536
|
display: "flex",
|
|
393
|
-
// Switch to flex for bulletproof layout
|
|
394
537
|
flexDirection: isMobile ? "column" : "row",
|
|
395
538
|
justifyContent: isMobile ? "flex-start" : "space-between",
|
|
396
539
|
alignItems: isMobile ? "flex-start" : "center",
|
|
397
540
|
padding: isMobile ? "120px 8% 60px" : "100px 10%",
|
|
398
541
|
boxSizing: "border-box",
|
|
399
542
|
fontFamily: '"Inter", -apple-system, sans-serif',
|
|
400
|
-
overflowY: isMobile ? "auto" : "
|
|
401
|
-
//
|
|
543
|
+
overflowY: isMobile ? "auto" : "none"
|
|
544
|
+
// Prevent scroll lock bugs on desktop
|
|
402
545
|
},
|
|
403
546
|
linksArea: {
|
|
404
547
|
display: "flex",
|
|
@@ -407,7 +550,12 @@ var Navbar = ({
|
|
|
407
550
|
width: isMobile ? "100%" : "60%",
|
|
408
551
|
marginBottom: isMobile ? "60px" : "0"
|
|
409
552
|
},
|
|
410
|
-
|
|
553
|
+
overlayLinkItem: {
|
|
554
|
+
display: "flex",
|
|
555
|
+
flexDirection: "column",
|
|
556
|
+
width: "100%"
|
|
557
|
+
},
|
|
558
|
+
overlayLinkMain: {
|
|
411
559
|
display: "flex",
|
|
412
560
|
alignItems: "center",
|
|
413
561
|
gap: "20px",
|
|
@@ -423,6 +571,23 @@ var Navbar = ({
|
|
|
423
571
|
textTransform: "uppercase",
|
|
424
572
|
lineHeight: "1"
|
|
425
573
|
},
|
|
574
|
+
accordionContent: {
|
|
575
|
+
display: "flex",
|
|
576
|
+
flexDirection: "column",
|
|
577
|
+
paddingLeft: "2%",
|
|
578
|
+
borderLeft: `2px solid ${borderCol}`,
|
|
579
|
+
marginLeft: "1%",
|
|
580
|
+
marginTop: "10px",
|
|
581
|
+
gap: "15px",
|
|
582
|
+
overflow: "hidden"
|
|
583
|
+
},
|
|
584
|
+
accordionLink: {
|
|
585
|
+
fontSize: "clamp(20px, 3vw, 32px)",
|
|
586
|
+
fontWeight: "600",
|
|
587
|
+
color: textMuted,
|
|
588
|
+
textDecoration: "none",
|
|
589
|
+
transition: "color 0.3s ease"
|
|
590
|
+
},
|
|
426
591
|
infoArea: {
|
|
427
592
|
display: "flex",
|
|
428
593
|
flexDirection: "column",
|
|
@@ -468,7 +633,80 @@ var Navbar = ({
|
|
|
468
633
|
transition: "all 0.3s ease"
|
|
469
634
|
}
|
|
470
635
|
};
|
|
471
|
-
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("header", { style: styles.header }, /* @__PURE__ */ React2.createElement("div", { style: styles.logo, onClick: (e) => handleNavigation("/", e) }, /* @__PURE__ */ React2.createElement("div", { style: styles.logoDot }), logoText), /* @__PURE__ */ React2.createElement(
|
|
636
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("header", { style: styles.header }, /* @__PURE__ */ React2.createElement("div", { style: styles.logo, onClick: (e) => handleNavigation("/", e) }, showBadge && /* @__PURE__ */ React2.createElement("div", { style: styles.logoDot }), logoText), showDesktopLinks && /* @__PURE__ */ React2.createElement("div", { style: styles.desktopNav }, links.map((link, idx) => /* @__PURE__ */ React2.createElement(
|
|
637
|
+
"div",
|
|
638
|
+
{
|
|
639
|
+
key: idx,
|
|
640
|
+
style: styles.desktopLinkWrapper,
|
|
641
|
+
onMouseEnter: () => handleDropdownEnter(idx),
|
|
642
|
+
onMouseLeave: () => handleDropdownLeave(idx)
|
|
643
|
+
},
|
|
644
|
+
/* @__PURE__ */ React2.createElement(
|
|
645
|
+
"a",
|
|
646
|
+
{
|
|
647
|
+
href: link.path,
|
|
648
|
+
style: { ...styles.desktopLink, color: location.pathname === link.path ? accentColor : textMain },
|
|
649
|
+
onClick: (e) => {
|
|
650
|
+
if (!link.children) handleNavigation(link.path, e);
|
|
651
|
+
}
|
|
652
|
+
},
|
|
653
|
+
link.label,
|
|
654
|
+
link.children && /* @__PURE__ */ React2.createElement(FiChevronDown, { style: { marginTop: "2px" }, size: 16 })
|
|
655
|
+
),
|
|
656
|
+
link.children && /* @__PURE__ */ React2.createElement(
|
|
657
|
+
"div",
|
|
658
|
+
{
|
|
659
|
+
ref: (el) => desktopDropdownRefs.current[idx] = el,
|
|
660
|
+
style: styles.desktopDropdown
|
|
661
|
+
},
|
|
662
|
+
link.children.map((child, cIdx) => /* @__PURE__ */ React2.createElement(
|
|
663
|
+
"a",
|
|
664
|
+
{
|
|
665
|
+
key: cIdx,
|
|
666
|
+
href: child.path,
|
|
667
|
+
style: styles.dropdownItem,
|
|
668
|
+
onClick: (e) => handleNavigation(child.path, e),
|
|
669
|
+
onMouseEnter: (e) => {
|
|
670
|
+
e.currentTarget.style.backgroundColor = isLight2 ? "rgba(0,0,0,0.05)" : "rgba(255,255,255,0.05)";
|
|
671
|
+
e.currentTarget.style.color = accentColor;
|
|
672
|
+
},
|
|
673
|
+
onMouseLeave: (e) => {
|
|
674
|
+
e.currentTarget.style.backgroundColor = "transparent";
|
|
675
|
+
e.currentTarget.style.color = textMain;
|
|
676
|
+
}
|
|
677
|
+
},
|
|
678
|
+
child.label
|
|
679
|
+
))
|
|
680
|
+
)
|
|
681
|
+
))), /* @__PURE__ */ React2.createElement("div", { style: styles.rightActions }, showSearch && /* @__PURE__ */ React2.createElement(
|
|
682
|
+
"div",
|
|
683
|
+
{
|
|
684
|
+
style: styles.iconBtn,
|
|
685
|
+
onClick: onSearch,
|
|
686
|
+
onMouseEnter: (e) => e.currentTarget.style.color = accentColor,
|
|
687
|
+
onMouseLeave: (e) => e.currentTarget.style.color = textMain
|
|
688
|
+
},
|
|
689
|
+
/* @__PURE__ */ React2.createElement(FiSearch, null)
|
|
690
|
+
), showUser && /* @__PURE__ */ React2.createElement(
|
|
691
|
+
"div",
|
|
692
|
+
{
|
|
693
|
+
style: styles.iconBtn,
|
|
694
|
+
onClick: onUserClick,
|
|
695
|
+
onMouseEnter: (e) => e.currentTarget.style.color = accentColor,
|
|
696
|
+
onMouseLeave: (e) => e.currentTarget.style.color = textMain
|
|
697
|
+
},
|
|
698
|
+
/* @__PURE__ */ React2.createElement(FiUser, null)
|
|
699
|
+
), showCart && /* @__PURE__ */ React2.createElement(
|
|
700
|
+
"div",
|
|
701
|
+
{
|
|
702
|
+
style: styles.iconBtn,
|
|
703
|
+
onClick: onCartClick,
|
|
704
|
+
onMouseEnter: (e) => e.currentTarget.style.color = accentColor,
|
|
705
|
+
onMouseLeave: (e) => e.currentTarget.style.color = textMain
|
|
706
|
+
},
|
|
707
|
+
/* @__PURE__ */ React2.createElement(FiShoppingBag, null),
|
|
708
|
+
cartCount > 0 && /* @__PURE__ */ React2.createElement("span", { style: styles.cartBadge }, cartCount)
|
|
709
|
+
), showHamburger && /* @__PURE__ */ React2.createElement(
|
|
472
710
|
"div",
|
|
473
711
|
{
|
|
474
712
|
style: styles.hamburgerBtn,
|
|
@@ -486,27 +724,28 @@ var Navbar = ({
|
|
|
486
724
|
}
|
|
487
725
|
}
|
|
488
726
|
},
|
|
489
|
-
/* @__PURE__ */ React2.createElement("div", { style: {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
} }),
|
|
493
|
-
/* @__PURE__ */ React2.createElement("div", { style: {
|
|
494
|
-
...styles.line,
|
|
495
|
-
transform: isOpen ? "translateY(-4px) rotate(-45deg)" : "none"
|
|
496
|
-
} })
|
|
497
|
-
)), /* @__PURE__ */ React2.createElement("div", { ref: overlayRef, style: styles.overlay }, /* @__PURE__ */ React2.createElement("div", { ref: linksContainerRef, style: styles.linksArea }, links.map((link, idx) => {
|
|
727
|
+
/* @__PURE__ */ React2.createElement("div", { style: { ...styles.line, transform: isOpen ? "translateY(4px) rotate(45deg)" : "none" } }),
|
|
728
|
+
/* @__PURE__ */ React2.createElement("div", { style: { ...styles.line, transform: isOpen ? "translateY(-4px) rotate(-45deg)" : "none" } })
|
|
729
|
+
))), /* @__PURE__ */ React2.createElement("div", { ref: overlayRef, style: styles.overlay }, /* @__PURE__ */ React2.createElement("div", { ref: linksContainerRef, style: styles.linksArea }, links.map((link, idx) => {
|
|
498
730
|
const isHovered = hoverIndex === idx;
|
|
499
731
|
const isAnyHovered = hoverIndex !== null;
|
|
500
732
|
const isActiveRoute = location.pathname === link.path;
|
|
501
|
-
|
|
733
|
+
const isExpanded = expandedOverlay === idx;
|
|
734
|
+
return /* @__PURE__ */ React2.createElement("div", { key: idx, style: styles.overlayLinkItem }, /* @__PURE__ */ React2.createElement(
|
|
502
735
|
"a",
|
|
503
736
|
{
|
|
504
|
-
key: idx,
|
|
505
737
|
href: link.path,
|
|
506
|
-
onClick: (e) =>
|
|
738
|
+
onClick: (e) => {
|
|
739
|
+
if (link.children) {
|
|
740
|
+
e.preventDefault();
|
|
741
|
+
setExpandedOverlay(isExpanded ? null : idx);
|
|
742
|
+
} else {
|
|
743
|
+
handleNavigation(link.path, e);
|
|
744
|
+
}
|
|
745
|
+
},
|
|
507
746
|
onMouseEnter: () => setHoverIndex(idx),
|
|
508
747
|
onMouseLeave: () => setHoverIndex(null),
|
|
509
|
-
style: styles.
|
|
748
|
+
style: styles.overlayLinkMain
|
|
510
749
|
},
|
|
511
750
|
/* @__PURE__ */ React2.createElement("span", { style: {
|
|
512
751
|
...styles.linkText,
|
|
@@ -515,7 +754,18 @@ var Navbar = ({
|
|
|
515
754
|
transform: isHovered || isActiveRoute ? "translateX(20px)" : "translateX(0px)",
|
|
516
755
|
transition: "all 0.4s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
517
756
|
} }, link.label),
|
|
518
|
-
/* @__PURE__ */ React2.createElement(
|
|
757
|
+
link.children ? /* @__PURE__ */ React2.createElement(
|
|
758
|
+
FiChevronDown,
|
|
759
|
+
{
|
|
760
|
+
style: {
|
|
761
|
+
fontSize: "clamp(24px, 3vw, 40px)",
|
|
762
|
+
color: accentColor,
|
|
763
|
+
opacity: isHovered ? 1 : 0,
|
|
764
|
+
transform: isExpanded ? "rotate(180deg)" : "rotate(0deg)",
|
|
765
|
+
transition: "all 0.5s ease"
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
) : /* @__PURE__ */ React2.createElement(
|
|
519
769
|
FiArrowUpRight,
|
|
520
770
|
{
|
|
521
771
|
style: {
|
|
@@ -527,7 +777,29 @@ var Navbar = ({
|
|
|
527
777
|
}
|
|
528
778
|
}
|
|
529
779
|
)
|
|
530
|
-
)
|
|
780
|
+
), link.children && /* @__PURE__ */ React2.createElement("div", { style: {
|
|
781
|
+
...styles.accordionContent,
|
|
782
|
+
maxHeight: isExpanded ? "500px" : "0px",
|
|
783
|
+
opacity: isExpanded ? 1 : 0,
|
|
784
|
+
transition: "all 0.5s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
785
|
+
} }, link.children.map((child, cIdx) => /* @__PURE__ */ React2.createElement(
|
|
786
|
+
"a",
|
|
787
|
+
{
|
|
788
|
+
key: cIdx,
|
|
789
|
+
href: child.path,
|
|
790
|
+
onClick: (e) => handleNavigation(child.path, e),
|
|
791
|
+
style: styles.accordionLink,
|
|
792
|
+
onMouseEnter: (e) => {
|
|
793
|
+
e.currentTarget.style.color = accentColor;
|
|
794
|
+
e.currentTarget.style.paddingLeft = "10px";
|
|
795
|
+
},
|
|
796
|
+
onMouseLeave: (e) => {
|
|
797
|
+
e.currentTarget.style.color = textMuted;
|
|
798
|
+
e.currentTarget.style.paddingLeft = "0px";
|
|
799
|
+
}
|
|
800
|
+
},
|
|
801
|
+
child.label
|
|
802
|
+
))));
|
|
531
803
|
})), /* @__PURE__ */ React2.createElement("div", { ref: infoContainerRef, style: styles.infoArea }, /* @__PURE__ */ React2.createElement("div", { style: styles.infoBlock }, /* @__PURE__ */ React2.createElement("span", { style: styles.infoLabel }, contact.title), /* @__PURE__ */ React2.createElement("span", { style: styles.infoText }, contact.email), /* @__PURE__ */ React2.createElement("span", { style: { ...styles.infoText, color: textMuted } }, contact.address)), /* @__PURE__ */ React2.createElement("div", { style: styles.infoBlock }, /* @__PURE__ */ React2.createElement("span", { style: styles.infoLabel }, "Socials"), /* @__PURE__ */ React2.createElement("div", { style: styles.socialGrid }, socials.map((social, idx) => /* @__PURE__ */ React2.createElement(
|
|
532
804
|
"a",
|
|
533
805
|
{
|
|
@@ -4146,7 +4418,7 @@ var Canvas = ({
|
|
|
4146
4418
|
import React17, { useRef as useRef17, useEffect as useEffect17 } from "react";
|
|
4147
4419
|
import { gsap as gsap17 } from "gsap";
|
|
4148
4420
|
import { ScrollTrigger } from "gsap/ScrollTrigger";
|
|
4149
|
-
import { FiChevronDown, FiArrowRight as FiArrowRight5 } from "react-icons/fi";
|
|
4421
|
+
import { FiChevronDown as FiChevronDown2, FiArrowRight as FiArrowRight5 } from "react-icons/fi";
|
|
4150
4422
|
if (typeof window !== "undefined") {
|
|
4151
4423
|
gsap17.registerPlugin(ScrollTrigger);
|
|
4152
4424
|
}
|
|
@@ -4382,7 +4654,7 @@ var ParallaxImage = ({
|
|
|
4382
4654
|
onMouseLeave: handleMouseLeave
|
|
4383
4655
|
},
|
|
4384
4656
|
/* @__PURE__ */ React17.createElement("span", null, "Scroll"),
|
|
4385
|
-
/* @__PURE__ */ React17.createElement(
|
|
4657
|
+
/* @__PURE__ */ React17.createElement(FiChevronDown2, { fontSize: "24px" })
|
|
4386
4658
|
));
|
|
4387
4659
|
};
|
|
4388
4660
|
|
|
@@ -5635,7 +5907,7 @@ import { gsap as gsap22 } from "gsap";
|
|
|
5635
5907
|
import {
|
|
5636
5908
|
FiMail as FiMail3,
|
|
5637
5909
|
FiLock as FiLock2,
|
|
5638
|
-
FiUser,
|
|
5910
|
+
FiUser as FiUser2,
|
|
5639
5911
|
FiArrowRight as FiArrowRight9,
|
|
5640
5912
|
FiCheckCircle,
|
|
5641
5913
|
FiShield,
|
|
@@ -5947,7 +6219,7 @@ var AuraRegister = ({
|
|
|
5947
6219
|
} }, /* @__PURE__ */ React22.createElement(FiShield, null))),
|
|
5948
6220
|
/* @__PURE__ */ React22.createElement("h1", { ref: titleRef, style: styles.title }, /* @__PURE__ */ React22.createElement(SplitText, { text: title })),
|
|
5949
6221
|
/* @__PURE__ */ React22.createElement("p", { style: styles.subtitle }, subtitle),
|
|
5950
|
-
/* @__PURE__ */ React22.createElement("form", { ref: formRef, style: styles.form, onSubmit: handleSubmit }, /* @__PURE__ */ React22.createElement("div", { style: styles.inputGroup }, /* @__PURE__ */ React22.createElement("label", { style: styles.inputLabel }, "Full Name"), /* @__PURE__ */ React22.createElement("div", { style: styles.inputWrapper }, /* @__PURE__ */ React22.createElement(
|
|
6222
|
+
/* @__PURE__ */ React22.createElement("form", { ref: formRef, style: styles.form, onSubmit: handleSubmit }, /* @__PURE__ */ React22.createElement("div", { style: styles.inputGroup }, /* @__PURE__ */ React22.createElement("label", { style: styles.inputLabel }, "Full Name"), /* @__PURE__ */ React22.createElement("div", { style: styles.inputWrapper }, /* @__PURE__ */ React22.createElement(FiUser2, { style: styles.inputIcon }), /* @__PURE__ */ React22.createElement(
|
|
5951
6223
|
"input",
|
|
5952
6224
|
{
|
|
5953
6225
|
name: "name",
|