@deriv-web-design/ui 0.0.8 → 0.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/index.js CHANGED
@@ -2304,26 +2304,98 @@ var CTABanner = ({
2304
2304
 
2305
2305
  // components/Navbar/Navbar.tsx
2306
2306
  var import_react12 = require("react");
2307
+ var import_framer_motion2 = require("framer-motion");
2307
2308
 
2308
2309
  // assets/icon-globe.svg
2309
2310
  var icon_globe_default = "./icon-globe-S54WYYEK.svg";
2310
2311
 
2311
2312
  // components/Navbar/Navbar.tsx
2312
2313
  var import_jsx_runtime23 = require("react/jsx-runtime");
2313
- var ChevronDownIcon3 = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { className, width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M2.625 4.8125L7 9.1875L11.375 4.8125", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
2314
- var ArrowRightIcon = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M2.625 7H11.375M11.375 7L7.875 3.5M11.375 7L7.875 10.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
2315
- var ArrowRightSmIcon = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { className: "navbar__lang-option-arrow", width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M2.5 6H9.5M9.5 6L6.5 3M9.5 6L6.5 9", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
2316
- var ArrowUpRightIcon = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M4.5 11.5L11.5 4.5M11.5 4.5H5.5M11.5 4.5V10.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
2317
- var BarsIcon = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M2.5 5H17.5M2.5 10H17.5M2.5 15H17.5", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round" }) });
2318
- var XMarkIcon2 = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M15 5L5 15M5 5L15 15", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round" }) });
2314
+ var EASE_OUT_EXPO = [0.16, 1, 0.3, 1];
2315
+ var dropdownVariants = {
2316
+ hidden: { opacity: 0, scale: 0.96, y: -8 },
2317
+ visible: { opacity: 1, scale: 1, y: 0 }
2318
+ };
2319
+ var drawerVariants = {
2320
+ hidden: { y: "-100%" },
2321
+ visible: { y: 0 }
2322
+ };
2323
+ var accordionVariants = {
2324
+ hidden: { height: 0, opacity: 0 },
2325
+ visible: { height: "auto", opacity: 1 }
2326
+ };
2327
+ var ChevronDownIcon3 = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2328
+ "svg",
2329
+ {
2330
+ className,
2331
+ width: "14",
2332
+ height: "14",
2333
+ viewBox: "0 0 14 14",
2334
+ fill: "none",
2335
+ "aria-hidden": "true",
2336
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2337
+ "path",
2338
+ {
2339
+ d: "M2.625 4.8125L7 9.1875L11.375 4.8125",
2340
+ stroke: "currentColor",
2341
+ strokeWidth: "1.5",
2342
+ strokeLinecap: "round",
2343
+ strokeLinejoin: "round"
2344
+ }
2345
+ )
2346
+ }
2347
+ );
2348
+ var ArrowRightIcon = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2349
+ "path",
2350
+ {
2351
+ d: "M2.625 7H11.375M11.375 7L7.875 3.5M11.375 7L7.875 10.5",
2352
+ stroke: "currentColor",
2353
+ strokeWidth: "1.5",
2354
+ strokeLinecap: "round",
2355
+ strokeLinejoin: "round"
2356
+ }
2357
+ ) });
2358
+ var ArrowUpRightIcon = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2359
+ "path",
2360
+ {
2361
+ d: "M4.5 11.5L11.5 4.5M11.5 4.5H5.5M11.5 4.5V10.5",
2362
+ stroke: "currentColor",
2363
+ strokeWidth: "1.5",
2364
+ strokeLinecap: "round",
2365
+ strokeLinejoin: "round"
2366
+ }
2367
+ ) });
2368
+ var BarsIcon = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2369
+ "path",
2370
+ {
2371
+ d: "M2.5 5H17.5M2.5 10H17.5M2.5 15H17.5",
2372
+ stroke: "currentColor",
2373
+ strokeWidth: "1.75",
2374
+ strokeLinecap: "round"
2375
+ }
2376
+ ) });
2377
+ var XMarkIcon2 = () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2378
+ "path",
2379
+ {
2380
+ d: "M15 5L5 15M5 5L15 15",
2381
+ stroke: "currentColor",
2382
+ strokeWidth: "1.75",
2383
+ strokeLinecap: "round"
2384
+ }
2385
+ ) });
2319
2386
  var GlobeIcon = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: icon_globe_default, alt: "", "aria-hidden": "true", width: "20", height: "20", className });
2320
- var DropdownPanel = ({ item, isOpen, onMouseEnter, onMouseLeave }) => {
2387
+ var DropdownPanel = ({ item, onMouseEnter, onMouseLeave }) => {
2321
2388
  const { dropdown } = item;
2322
2389
  if (!dropdown) return null;
2323
2390
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2324
- "div",
2391
+ import_framer_motion2.motion.div,
2325
2392
  {
2326
- className: ["navbar__dropdown", isOpen ? "navbar__dropdown--open" : ""].filter(Boolean).join(" "),
2393
+ className: "navbar__dropdown",
2394
+ variants: dropdownVariants,
2395
+ initial: "hidden",
2396
+ animate: "visible",
2397
+ exit: "hidden",
2398
+ transition: { duration: 0.18, ease: EASE_OUT_EXPO },
2327
2399
  onMouseEnter,
2328
2400
  onMouseLeave,
2329
2401
  children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__dropdown-inner", children: [
@@ -2355,17 +2427,32 @@ var FeatureCard = ({ feature, mobile }) => /* @__PURE__ */ (0, import_jsx_runtim
2355
2427
  className: mobile ? "navbar__drawer-feature" : "navbar__dropdown-feature",
2356
2428
  style: feature.backgroundImageUrl ? { backgroundImage: `url(${feature.backgroundImageUrl})` } : void 0,
2357
2429
  children: [
2358
- feature.backgroundImageUrl && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: feature.backgroundImageUrl, alt: "", className: mobile ? "navbar__drawer-feature-img" : "navbar__dropdown-feature-img", "aria-hidden": "true" }),
2430
+ feature.backgroundImageUrl && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2431
+ "img",
2432
+ {
2433
+ src: feature.backgroundImageUrl,
2434
+ alt: "",
2435
+ className: mobile ? "navbar__drawer-feature-img" : "navbar__dropdown-feature-img",
2436
+ "aria-hidden": "true"
2437
+ }
2438
+ ),
2359
2439
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: mobile ? "navbar__drawer-feature-overlay" : "navbar__dropdown-feature-overlay", "aria-hidden": "true" }),
2360
2440
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: mobile ? "navbar__drawer-feature-content" : "navbar__dropdown-feature-content", children: [
2361
2441
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
2362
2442
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: mobile ? "navbar__drawer-feature-title" : "navbar__dropdown-feature-title", children: feature.title }),
2363
2443
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: mobile ? "navbar__drawer-feature-desc" : "navbar__dropdown-feature-desc", children: feature.description })
2364
2444
  ] }),
2365
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("a", { href: feature.ctaHref, className: mobile ? "navbar__drawer-feature-cta" : "navbar__dropdown-feature-cta", children: [
2366
- feature.ctaLabel,
2367
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArrowRightIcon, {})
2368
- ] })
2445
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2446
+ "a",
2447
+ {
2448
+ href: feature.ctaHref,
2449
+ className: mobile ? "navbar__drawer-feature-cta" : "navbar__dropdown-feature-cta",
2450
+ children: [
2451
+ feature.ctaLabel,
2452
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArrowRightIcon, {})
2453
+ ]
2454
+ }
2455
+ )
2369
2456
  ] })
2370
2457
  ]
2371
2458
  }
@@ -2376,7 +2463,7 @@ var DrawerAccordion = ({ item, isOpen, onToggle }) => {
2376
2463
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2377
2464
  "button",
2378
2465
  {
2379
- className: ["navbar__drawer-trigger", isOpen ? "navbar__drawer-trigger--open" : ""].filter(Boolean).join(" "),
2466
+ className: `navbar__drawer-trigger ${isOpen ? "navbar__drawer-trigger--open" : ""}`,
2380
2467
  onClick: onToggle,
2381
2468
  "aria-expanded": isOpen,
2382
2469
  children: [
@@ -2385,23 +2472,34 @@ var DrawerAccordion = ({ item, isOpen, onToggle }) => {
2385
2472
  ]
2386
2473
  }
2387
2474
  ),
2388
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: ["navbar__drawer-panel", isOpen ? "navbar__drawer-panel--open" : ""].filter(Boolean).join(" "), children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__drawer-panel-inner", children: [
2389
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-panel-cols", children: dropdown?.columns.map((col, colIdx) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-panel-col", children: col.sections.map((section) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__drawer-col-section", children: [
2390
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "navbar__drawer-col-title", children: section.title }),
2391
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-col-links", children: section.items.map((link) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2392
- "a",
2393
- {
2394
- href: link.href,
2395
- className: "navbar__drawer-link",
2396
- target: link.external ? "_blank" : void 0,
2397
- rel: link.external ? "noopener noreferrer" : void 0,
2398
- children: link.label
2399
- },
2400
- link.href
2401
- )) })
2402
- ] }, section.title)) }, colIdx)) }),
2403
- dropdown?.feature && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FeatureCard, { feature: dropdown.feature, mobile: true })
2404
- ] }) })
2475
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_framer_motion2.AnimatePresence, { initial: false, children: isOpen && dropdown && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2476
+ import_framer_motion2.motion.div,
2477
+ {
2478
+ className: "navbar__drawer-panel",
2479
+ variants: accordionVariants,
2480
+ initial: "hidden",
2481
+ animate: "visible",
2482
+ exit: "hidden",
2483
+ transition: { duration: 0.22, ease: EASE_OUT_EXPO },
2484
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__drawer-panel-inner", children: [
2485
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-panel-cols", children: dropdown.columns.map((col, colIdx) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-panel-col", children: col.sections.map((section) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__drawer-col-section", children: [
2486
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "navbar__drawer-col-title", children: section.title }),
2487
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-col-links", children: section.items.map((link) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2488
+ "a",
2489
+ {
2490
+ href: link.href,
2491
+ className: "navbar__drawer-link",
2492
+ target: link.external ? "_blank" : void 0,
2493
+ rel: link.external ? "noopener noreferrer" : void 0,
2494
+ children: link.label
2495
+ },
2496
+ link.href
2497
+ )) })
2498
+ ] }, section.title)) }, colIdx)) }),
2499
+ dropdown.feature && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FeatureCard, { feature: dropdown.feature, mobile: true })
2500
+ ] })
2501
+ }
2502
+ ) })
2405
2503
  ] });
2406
2504
  };
2407
2505
  var Navbar = ({
@@ -2414,7 +2512,6 @@ var Navbar = ({
2414
2512
  loginHref,
2415
2513
  ctaLabel = "Open account",
2416
2514
  ctaHref,
2417
- languages,
2418
2515
  languageLabel,
2419
2516
  onLanguageClick,
2420
2517
  className,
@@ -2424,15 +2521,9 @@ var Navbar = ({
2424
2521
  const [mobileOpen, setMobileOpen] = (0, import_react12.useState)(false);
2425
2522
  const [mobileExpanded, setMobileExpanded] = (0, import_react12.useState)(null);
2426
2523
  const [scrolled, setScrolled] = (0, import_react12.useState)(false);
2427
- const [langOpen, setLangOpen] = (0, import_react12.useState)(false);
2428
- const [mobileLangOpen, setMobileLangOpen] = (0, import_react12.useState)(false);
2429
2524
  const hoverTimeoutRef = (0, import_react12.useRef)(null);
2430
- const langTimeoutRef = (0, import_react12.useRef)(null);
2431
2525
  const pillAreaRef = (0, import_react12.useRef)(null);
2432
- const langWrapperRef = (0, import_react12.useRef)(null);
2433
2526
  const resolvedLogo = theme === "light" ? logoSrcDark ?? logoSrc : logoSrc;
2434
- const activeLanguage = languages?.find((l) => l.active);
2435
- const displayLabel = activeLanguage?.code ?? languageLabel;
2436
2527
  (0, import_react12.useEffect)(() => {
2437
2528
  const onScroll = () => setScrolled(window.scrollY > 0);
2438
2529
  window.addEventListener("scroll", onScroll, { passive: true });
@@ -2443,7 +2534,6 @@ var Navbar = ({
2443
2534
  if (e.key === "Escape") {
2444
2535
  setOpenDropdown(null);
2445
2536
  setMobileOpen(false);
2446
- setLangOpen(false);
2447
2537
  }
2448
2538
  };
2449
2539
  document.addEventListener("keydown", onKey);
@@ -2465,16 +2555,6 @@ var Navbar = ({
2465
2555
  document.addEventListener("pointerdown", onPointerDown);
2466
2556
  return () => document.removeEventListener("pointerdown", onPointerDown);
2467
2557
  }, [openDropdown]);
2468
- (0, import_react12.useEffect)(() => {
2469
- if (!langOpen) return;
2470
- const onPointerDown = (e) => {
2471
- if (langWrapperRef.current && !langWrapperRef.current.contains(e.target)) {
2472
- setLangOpen(false);
2473
- }
2474
- };
2475
- document.addEventListener("pointerdown", onPointerDown);
2476
- return () => document.removeEventListener("pointerdown", onPointerDown);
2477
- }, [langOpen]);
2478
2558
  const clearHoverTimeout = (0, import_react12.useCallback)(() => {
2479
2559
  if (hoverTimeoutRef.current) {
2480
2560
  clearTimeout(hoverTimeoutRef.current);
@@ -2489,11 +2569,7 @@ var Navbar = ({
2489
2569
  clearHoverTimeout();
2490
2570
  hoverTimeoutRef.current = setTimeout(() => setOpenDropdown(null), 120);
2491
2571
  }, [clearHoverTimeout]);
2492
- const handleLangSelect = (0, import_react12.useCallback)((lang) => {
2493
- lang.onClick();
2494
- setLangOpen(false);
2495
- setMobileLangOpen(false);
2496
- }, []);
2572
+ const activeDropdownItem = navItems.find((item) => item.label === openDropdown);
2497
2573
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2498
2574
  "nav",
2499
2575
  {
@@ -2507,16 +2583,29 @@ var Navbar = ({
2507
2583
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__nav-group", children: [
2508
2584
  navItems.map((item) => {
2509
2585
  if (item.external) {
2510
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("a", { href: item.href, className: "navbar__nav-item", target: "_blank", rel: "noopener noreferrer", children: [
2511
- item.label,
2512
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArrowUpRightIcon, {})
2513
- ] }, item.label);
2586
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2587
+ "a",
2588
+ {
2589
+ href: item.href,
2590
+ className: "navbar__nav-item",
2591
+ target: "_blank",
2592
+ rel: "noopener noreferrer",
2593
+ children: [
2594
+ item.label,
2595
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArrowUpRightIcon, {})
2596
+ ]
2597
+ },
2598
+ item.label
2599
+ );
2514
2600
  }
2515
2601
  if (item.dropdown) {
2516
2602
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2517
2603
  "button",
2518
2604
  {
2519
- className: ["navbar__nav-item", openDropdown === item.label ? "navbar__nav-item--open" : ""].filter(Boolean).join(" "),
2605
+ className: [
2606
+ "navbar__nav-item",
2607
+ openDropdown === item.label ? "navbar__nav-item--open" : ""
2608
+ ].filter(Boolean).join(" "),
2520
2609
  onMouseEnter: () => handleNavEnter(item.label),
2521
2610
  onMouseLeave: handleNavLeave,
2522
2611
  "aria-expanded": openDropdown === item.label,
@@ -2531,74 +2620,45 @@ var Navbar = ({
2531
2620
  }
2532
2621
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: item.href, className: "navbar__nav-item", children: item.label }, item.label);
2533
2622
  }),
2534
- displayLabel && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2535
- "div",
2536
- {
2537
- className: "navbar__lang-wrapper",
2538
- ref: langWrapperRef,
2539
- onMouseEnter: () => {
2540
- if (langTimeoutRef.current) clearTimeout(langTimeoutRef.current);
2541
- if (languages && languages.length > 0) setLangOpen(true);
2542
- },
2543
- onMouseLeave: () => {
2544
- langTimeoutRef.current = setTimeout(() => setLangOpen(false), 150);
2545
- },
2546
- children: [
2547
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2548
- "button",
2549
- {
2550
- className: ["navbar__nav-item", "navbar__lang-btn", langOpen ? "navbar__nav-item--open" : ""].filter(Boolean).join(" "),
2551
- onClick: () => {
2552
- if (!languages || languages.length === 0) onLanguageClick?.();
2553
- },
2554
- "aria-expanded": languages ? langOpen : void 0,
2555
- "aria-haspopup": languages ? "listbox" : void 0,
2556
- children: [
2557
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(GlobeIcon, { className: "navbar__lang-globe" }),
2558
- displayLabel,
2559
- languages && languages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ChevronDownIcon3, { className: "navbar__nav-item__chevron" })
2560
- ]
2561
- }
2562
- ),
2563
- languages && languages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: ["navbar__lang-dropdown", langOpen ? "navbar__lang-dropdown--open" : ""].filter(Boolean).join(" "), role: "listbox", children: languages.map((lang) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2564
- "button",
2565
- {
2566
- className: ["navbar__lang-option", lang.active ? "navbar__lang-option--active" : ""].filter(Boolean).join(" "),
2567
- onClick: () => handleLangSelect(lang),
2568
- role: "option",
2569
- "aria-selected": lang.active,
2570
- children: [
2571
- lang.label,
2572
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArrowRightSmIcon, {})
2573
- ]
2574
- },
2575
- lang.code
2576
- )) })
2577
- ]
2578
- }
2579
- )
2623
+ languageLabel && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("button", { className: "navbar__nav-item navbar__lang-btn", onClick: onLanguageClick, children: [
2624
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(GlobeIcon, { className: "navbar__lang-globe" }),
2625
+ languageLabel
2626
+ ] })
2580
2627
  ] }),
2581
2628
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__pill-actions", children: [
2582
2629
  loginHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: loginHref, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { colorScheme: "black", variant: "secondary", label: loginLabel }) }),
2583
2630
  ctaHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: ctaHref, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2584
2631
  ] })
2585
2632
  ] }) }),
2586
- navItems.map((item) => item.dropdown ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2633
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_framer_motion2.AnimatePresence, { children: openDropdown && activeDropdownItem?.dropdown && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2587
2634
  DropdownPanel,
2588
2635
  {
2589
- item,
2590
- isOpen: openDropdown === item.label,
2636
+ item: activeDropdownItem,
2591
2637
  onMouseEnter: clearHoverTimeout,
2592
2638
  onMouseLeave: handleNavLeave
2593
2639
  },
2594
- item.label
2595
- ) : null),
2640
+ "dropdown"
2641
+ ) }),
2596
2642
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__actions", children: [
2597
- loginHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: loginHref, className: "navbar__actions-login", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { colorScheme: theme === "dark" ? "white" : "black", variant: "secondary", label: loginLabel }) }),
2643
+ loginHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: loginHref, className: "navbar__actions-login", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2644
+ Button,
2645
+ {
2646
+ colorScheme: theme === "dark" ? "white" : "black",
2647
+ variant: "secondary",
2648
+ label: loginLabel
2649
+ }
2650
+ ) }),
2598
2651
  ctaHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: ctaHref, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2599
2652
  ] }),
2600
2653
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__mobile-actions", children: [
2601
- loginHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: loginHref, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { colorScheme: scrolled || theme === "light" ? "black" : "white", variant: "secondary", label: loginLabel }) }),
2654
+ loginHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: loginHref, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2655
+ Button,
2656
+ {
2657
+ colorScheme: scrolled || theme === "light" ? "black" : "white",
2658
+ variant: "secondary",
2659
+ label: loginLabel
2660
+ }
2661
+ ) }),
2602
2662
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2603
2663
  "button",
2604
2664
  {
@@ -2610,66 +2670,77 @@ var Navbar = ({
2610
2670
  )
2611
2671
  ] })
2612
2672
  ] }),
2613
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-clip", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: ["navbar__drawer", mobileOpen ? "navbar__drawer--open" : ""].filter(Boolean).join(" "), "aria-modal": "true", role: "dialog", "aria-label": "Navigation menu", children: [
2614
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("nav", { className: "navbar__drawer-nav", children: [
2615
- navItems.map((item) => {
2616
- if (item.dropdown) {
2617
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2618
- DrawerAccordion,
2673
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-clip", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_framer_motion2.AnimatePresence, { children: mobileOpen && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2674
+ import_framer_motion2.motion.div,
2675
+ {
2676
+ className: "navbar__drawer",
2677
+ variants: drawerVariants,
2678
+ initial: "hidden",
2679
+ animate: "visible",
2680
+ exit: "hidden",
2681
+ transition: { duration: 0.3, ease: EASE_OUT_EXPO },
2682
+ "aria-modal": "true",
2683
+ role: "dialog",
2684
+ "aria-label": "Navigation menu",
2685
+ children: [
2686
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("nav", { className: "navbar__drawer-nav", children: [
2687
+ navItems.map((item) => {
2688
+ if (item.dropdown) {
2689
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2690
+ DrawerAccordion,
2691
+ {
2692
+ item,
2693
+ isOpen: mobileExpanded === item.label,
2694
+ onToggle: () => setMobileExpanded(
2695
+ (prev) => prev === item.label ? null : item.label
2696
+ )
2697
+ },
2698
+ item.label
2699
+ );
2700
+ }
2701
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2702
+ "a",
2703
+ {
2704
+ href: item.href,
2705
+ className: "navbar__drawer-single",
2706
+ target: item.external ? "_blank" : void 0,
2707
+ rel: item.external ? "noopener noreferrer" : void 0,
2708
+ children: [
2709
+ item.label,
2710
+ item.external && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArrowUpRightIcon, {})
2711
+ ]
2712
+ },
2713
+ item.label
2714
+ );
2715
+ }),
2716
+ languageLabel && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("button", { className: "navbar__drawer-lang", onClick: onLanguageClick, children: [
2717
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(GlobeIcon, { className: "navbar__lang-globe" }),
2718
+ languageLabel
2719
+ ] })
2720
+ ] }),
2721
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__drawer-footer", children: [
2722
+ loginHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: loginHref, style: { display: "block" }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2723
+ Button,
2619
2724
  {
2620
- item,
2621
- isOpen: mobileExpanded === item.label,
2622
- onToggle: () => setMobileExpanded((prev) => prev === item.label ? null : item.label)
2623
- },
2624
- item.label
2625
- );
2626
- }
2627
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("a", { href: item.href, className: "navbar__drawer-single", target: item.external ? "_blank" : void 0, rel: item.external ? "noopener noreferrer" : void 0, children: [
2628
- item.label,
2629
- item.external && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArrowUpRightIcon, {})
2630
- ] }, item.label);
2631
- }),
2632
- displayLabel && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__drawer-item", children: [
2633
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2634
- "button",
2635
- {
2636
- className: ["navbar__drawer-trigger", mobileLangOpen ? "navbar__drawer-trigger--open" : ""].filter(Boolean).join(" "),
2637
- onClick: () => {
2638
- if (languages && languages.length > 0) {
2639
- setMobileLangOpen((o) => !o);
2640
- } else {
2641
- onLanguageClick?.();
2642
- }
2643
- },
2644
- "aria-expanded": languages ? mobileLangOpen : void 0,
2645
- children: [
2646
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "navbar__drawer-lang-label", children: [
2647
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(GlobeIcon, { className: "navbar__lang-globe navbar__lang-globe--dark" }),
2648
- displayLabel
2649
- ] }),
2650
- languages && languages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ChevronDownIcon3, { className: "navbar__drawer-trigger__chevron" })
2651
- ]
2652
- }
2653
- ),
2654
- languages && languages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: ["navbar__drawer-lang-grid", mobileLangOpen ? "navbar__drawer-lang-grid--open" : ""].filter(Boolean).join(" "), children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "navbar__drawer-lang-grid-inner", children: languages.map((lang) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2655
- "button",
2656
- {
2657
- className: ["navbar__drawer-lang-option", lang.active ? "navbar__drawer-lang-option--active" : ""].filter(Boolean).join(" "),
2658
- onClick: () => handleLangSelect(lang),
2659
- children: [
2660
- lang.label,
2661
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArrowRightSmIcon, {})
2662
- ]
2663
- },
2664
- lang.code
2665
- )) }) })
2666
- ] })
2667
- ] }),
2668
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "navbar__drawer-footer", children: [
2669
- loginHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: loginHref, style: { display: "block" }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { colorScheme: "black", variant: "secondary", label: loginLabel, fullWidth: true }) }),
2670
- ctaHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: ctaHref, style: { display: "block" }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel, fullWidth: true }) })
2671
- ] })
2672
- ] }) })
2725
+ colorScheme: "black",
2726
+ variant: "secondary",
2727
+ label: loginLabel,
2728
+ fullWidth: true
2729
+ }
2730
+ ) }),
2731
+ ctaHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: ctaHref, style: { display: "block" }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2732
+ Button,
2733
+ {
2734
+ colorScheme: "coral",
2735
+ variant: "primary",
2736
+ label: ctaLabel,
2737
+ fullWidth: true
2738
+ }
2739
+ ) })
2740
+ ] })
2741
+ ]
2742
+ }
2743
+ ) }) })
2673
2744
  ]
2674
2745
  }
2675
2746
  );
@@ -2677,7 +2748,7 @@ var Navbar = ({
2677
2748
 
2678
2749
  // templates/DayNightTransition/DayNightTransition.tsx
2679
2750
  var import_react13 = require("react");
2680
- var import_framer_motion2 = require("framer-motion");
2751
+ var import_framer_motion3 = require("framer-motion");
2681
2752
  var import_jsx_runtime24 = require("react/jsx-runtime");
2682
2753
  var SPRING2 = { stiffness: 80, damping: 30, restDelta: 1e-3 };
2683
2754
  var FADE_START = 0.35;
@@ -2699,16 +2770,16 @@ var DayNightTransition = ({
2699
2770
  ...props
2700
2771
  }) => {
2701
2772
  const wrapperRef = (0, import_react13.useRef)(null);
2702
- const { scrollYProgress } = (0, import_framer_motion2.useScroll)({
2773
+ const { scrollYProgress } = (0, import_framer_motion3.useScroll)({
2703
2774
  target: wrapperRef,
2704
2775
  offset: ["start end", "end start"]
2705
2776
  });
2706
- const smooth = (0, import_framer_motion2.useSpring)(scrollYProgress, SPRING2);
2707
- const nightOpacity = (0, import_framer_motion2.useTransform)(smooth, [FADE_START, FADE_END], [0, 1]);
2708
- const channel = (0, import_framer_motion2.useTransform)(smooth, [FADE_START, FADE_END], [TEXT_CHANNEL_DAY, TEXT_CHANNEL_NIGHT]);
2709
- const textColor = import_framer_motion2.useMotionTemplate`rgb(${channel}, ${channel}, ${channel})`;
2710
- const dayOpacity = (0, import_framer_motion2.useTransform)(smooth, [WORD_START, WORD_END], [1, 0]);
2711
- const nightOpacity2 = (0, import_framer_motion2.useTransform)(smooth, [WORD_START, WORD_END], [0, 1]);
2777
+ const smooth = (0, import_framer_motion3.useSpring)(scrollYProgress, SPRING2);
2778
+ const nightOpacity = (0, import_framer_motion3.useTransform)(smooth, [FADE_START, FADE_END], [0, 1]);
2779
+ const channel = (0, import_framer_motion3.useTransform)(smooth, [FADE_START, FADE_END], [TEXT_CHANNEL_DAY, TEXT_CHANNEL_NIGHT]);
2780
+ const textColor = import_framer_motion3.useMotionTemplate`rgb(${channel}, ${channel}, ${channel})`;
2781
+ const dayOpacity = (0, import_framer_motion3.useTransform)(smooth, [WORD_START, WORD_END], [1, 0]);
2782
+ const nightOpacity2 = (0, import_framer_motion3.useTransform)(smooth, [WORD_START, WORD_END], [0, 1]);
2712
2783
  const hasDescription = Boolean(dayDescription || nightDescription);
2713
2784
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2714
2785
  "div",
@@ -2728,7 +2799,7 @@ var DayNightTransition = ({
2728
2799
  }
2729
2800
  ),
2730
2801
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2731
- import_framer_motion2.motion.img,
2802
+ import_framer_motion3.motion.img,
2732
2803
  {
2733
2804
  className: "dnt__bg dnt__bg--night",
2734
2805
  src: nightImageUrl,
@@ -2739,14 +2810,14 @@ var DayNightTransition = ({
2739
2810
  }
2740
2811
  ),
2741
2812
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "dnt__content", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2742
- import_framer_motion2.motion.div,
2813
+ import_framer_motion3.motion.div,
2743
2814
  {
2744
2815
  className: "dnt__text-wrap",
2745
2816
  style: { color: textColor },
2746
2817
  children: [
2747
2818
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "dnt__crossfade-wrap", children: [
2748
2819
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2749
- import_framer_motion2.motion.h2,
2820
+ import_framer_motion3.motion.h2,
2750
2821
  {
2751
2822
  className: "dnt__headline",
2752
2823
  style: { opacity: dayOpacity },
@@ -2754,7 +2825,7 @@ var DayNightTransition = ({
2754
2825
  }
2755
2826
  ),
2756
2827
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2757
- import_framer_motion2.motion.h2,
2828
+ import_framer_motion3.motion.h2,
2758
2829
  {
2759
2830
  className: "dnt__headline",
2760
2831
  "aria-hidden": "true",
@@ -2765,7 +2836,7 @@ var DayNightTransition = ({
2765
2836
  ] }),
2766
2837
  hasDescription && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "dnt__crossfade-wrap", children: [
2767
2838
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2768
- import_framer_motion2.motion.p,
2839
+ import_framer_motion3.motion.p,
2769
2840
  {
2770
2841
  className: "dnt__description",
2771
2842
  style: { opacity: dayOpacity },
@@ -2773,7 +2844,7 @@ var DayNightTransition = ({
2773
2844
  }
2774
2845
  ),
2775
2846
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2776
- import_framer_motion2.motion.p,
2847
+ import_framer_motion3.motion.p,
2777
2848
  {
2778
2849
  className: "dnt__description",
2779
2850
  "aria-hidden": "true",
@@ -2793,7 +2864,7 @@ var DayNightTransition = ({
2793
2864
 
2794
2865
  // templates/PaymentMethods/PaymentMethods.tsx
2795
2866
  var import_react14 = require("react");
2796
- var import_framer_motion3 = require("framer-motion");
2867
+ var import_framer_motion4 = require("framer-motion");
2797
2868
  var import_jsx_runtime25 = require("react/jsx-runtime");
2798
2869
  function modWrap(min, max, v) {
2799
2870
  const range = max - min;
@@ -2847,13 +2918,13 @@ var PaymentMethods = ({
2847
2918
  className,
2848
2919
  ...props
2849
2920
  }) => {
2850
- const { scrollY } = (0, import_framer_motion3.useScroll)();
2851
- const scrollVelocity = (0, import_framer_motion3.useVelocity)(scrollY);
2852
- const col1Y = (0, import_framer_motion3.useMotionValue)(0);
2853
- const col2Y = (0, import_framer_motion3.useMotionValue)(0);
2921
+ const { scrollY } = (0, import_framer_motion4.useScroll)();
2922
+ const scrollVelocity = (0, import_framer_motion4.useVelocity)(scrollY);
2923
+ const col1Y = (0, import_framer_motion4.useMotionValue)(0);
2924
+ const col2Y = (0, import_framer_motion4.useMotionValue)(0);
2854
2925
  const col1Ref = (0, import_react14.useRef)(null);
2855
2926
  const col2Ref = (0, import_react14.useRef)(null);
2856
- (0, import_framer_motion3.useAnimationFrame)((_, delta) => {
2927
+ (0, import_framer_motion4.useAnimationFrame)((_, delta) => {
2857
2928
  const raw = scrollVelocity.get();
2858
2929
  if (Math.abs(raw) < DEADZONE) return;
2859
2930
  const clamped = Math.sign(raw) * Math.min(Math.abs(raw), MAX_SCROLL_V);
@@ -2874,7 +2945,7 @@ var PaymentMethods = ({
2874
2945
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "pm__media", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "pm__carousel", children: [
2875
2946
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "pm__fade pm__fade--top", "aria-hidden": "true" }),
2876
2947
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2877
- import_framer_motion3.motion.div,
2948
+ import_framer_motion4.motion.div,
2878
2949
  {
2879
2950
  ref: col1Ref,
2880
2951
  className: "pm__col",
@@ -2891,7 +2962,7 @@ var PaymentMethods = ({
2891
2962
  }
2892
2963
  ),
2893
2964
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2894
- import_framer_motion3.motion.div,
2965
+ import_framer_motion4.motion.div,
2895
2966
  {
2896
2967
  ref: col2Ref,
2897
2968
  className: "pm__col",