@deriv-web-design/ui 0.0.5 → 0.0.6

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.mjs CHANGED
@@ -1028,9 +1028,9 @@ var FeatureCards = ({
1028
1028
  ] }) });
1029
1029
  };
1030
1030
 
1031
- // templates/Footer/Footer.tsx
1031
+ // components/Footer/Footer.tsx
1032
1032
  import { useState as useState5 } from "react";
1033
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
1033
+ import { Fragment as Fragment2, jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
1034
1034
  var ExternalLinkIcon = () => /* @__PURE__ */ jsx17(
1035
1035
  "svg",
1036
1036
  {
@@ -1078,40 +1078,42 @@ var DerivGoBadges = ({
1078
1078
  appStoreBadge,
1079
1079
  huaweiBadge,
1080
1080
  availabilityNote
1081
- }) => /* @__PURE__ */ jsxs16("div", { className: "footer__app-badges", children: [
1082
- googlePlayBadge && /* @__PURE__ */ jsx17(
1083
- "a",
1084
- {
1085
- href: googlePlayBadge.href,
1086
- className: googlePlayBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1087
- "aria-label": googlePlayBadge.imageAlt,
1088
- target: "_blank",
1089
- rel: "noopener noreferrer",
1090
- children: googlePlayBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: googlePlayBadge.imageSrc, alt: googlePlayBadge.imageAlt })
1091
- }
1092
- ),
1093
- appStoreBadge && /* @__PURE__ */ jsx17(
1094
- "a",
1095
- {
1096
- href: appStoreBadge.href,
1097
- className: appStoreBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1098
- "aria-label": appStoreBadge.imageAlt,
1099
- target: "_blank",
1100
- rel: "noopener noreferrer",
1101
- children: appStoreBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: appStoreBadge.imageSrc, alt: appStoreBadge.imageAlt })
1102
- }
1103
- ),
1104
- huaweiBadge && /* @__PURE__ */ jsx17(
1105
- "a",
1106
- {
1107
- href: huaweiBadge.href,
1108
- className: huaweiBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1109
- "aria-label": huaweiBadge.imageAlt,
1110
- target: "_blank",
1111
- rel: "noopener noreferrer",
1112
- children: huaweiBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: huaweiBadge.imageSrc, alt: huaweiBadge.imageAlt })
1113
- }
1114
- ),
1081
+ }) => /* @__PURE__ */ jsxs16(Fragment2, { children: [
1082
+ /* @__PURE__ */ jsxs16("div", { className: "footer__app-badges", children: [
1083
+ googlePlayBadge && /* @__PURE__ */ jsx17(
1084
+ "a",
1085
+ {
1086
+ href: googlePlayBadge.href,
1087
+ className: googlePlayBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1088
+ "aria-label": googlePlayBadge.imageAlt,
1089
+ target: "_blank",
1090
+ rel: "noopener noreferrer",
1091
+ children: googlePlayBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: googlePlayBadge.imageSrc, alt: googlePlayBadge.imageAlt })
1092
+ }
1093
+ ),
1094
+ appStoreBadge && /* @__PURE__ */ jsx17(
1095
+ "a",
1096
+ {
1097
+ href: appStoreBadge.href,
1098
+ className: appStoreBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1099
+ "aria-label": appStoreBadge.imageAlt,
1100
+ target: "_blank",
1101
+ rel: "noopener noreferrer",
1102
+ children: appStoreBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: appStoreBadge.imageSrc, alt: appStoreBadge.imageAlt })
1103
+ }
1104
+ ),
1105
+ huaweiBadge && /* @__PURE__ */ jsx17(
1106
+ "a",
1107
+ {
1108
+ href: huaweiBadge.href,
1109
+ className: huaweiBadge.icon ? "footer__app-badge-svg" : "footer__app-badge",
1110
+ "aria-label": huaweiBadge.imageAlt,
1111
+ target: "_blank",
1112
+ rel: "noopener noreferrer",
1113
+ children: huaweiBadge.icon ?? /* @__PURE__ */ jsx17("img", { src: huaweiBadge.imageSrc, alt: huaweiBadge.imageAlt })
1114
+ }
1115
+ )
1116
+ ] }),
1115
1117
  availabilityNote && /* @__PURE__ */ jsx17("p", { className: "footer__app-note", children: availabilityNote })
1116
1118
  ] });
1117
1119
  var NavLink = ({ label, href, isExternal, onClick }) => /* @__PURE__ */ jsxs16(
@@ -1176,11 +1178,10 @@ var Footer = ({
1176
1178
  "a",
1177
1179
  {
1178
1180
  href: item.href,
1179
- className: "footer__ai-icon",
1180
1181
  "aria-label": item.imageAlt,
1181
1182
  target: "_blank",
1182
1183
  rel: "noopener noreferrer",
1183
- children: /* @__PURE__ */ jsx17("img", { src: item.imageSrc, alt: item.imageAlt })
1184
+ children: /* @__PURE__ */ jsx17("img", { className: "footer__ai-icon", src: item.imageSrc, alt: item.imageAlt })
1184
1185
  },
1185
1186
  i
1186
1187
  )) })
@@ -1204,11 +1205,10 @@ var Footer = ({
1204
1205
  "a",
1205
1206
  {
1206
1207
  href: item.href,
1207
- className: "footer__ai-icon",
1208
1208
  "aria-label": item.imageAlt,
1209
1209
  target: "_blank",
1210
1210
  rel: "noopener noreferrer",
1211
- children: /* @__PURE__ */ jsx17("img", { src: item.imageSrc, alt: item.imageAlt })
1211
+ children: /* @__PURE__ */ jsx17("img", { className: "footer__ai-icon", src: item.imageSrc, alt: item.imageAlt })
1212
1212
  },
1213
1213
  i
1214
1214
  )) })
@@ -1249,7 +1249,7 @@ var Footer = ({
1249
1249
  className: "footer__deriv-go-qr-img"
1250
1250
  }
1251
1251
  ),
1252
- /* @__PURE__ */ jsx17("span", { className: "footer__deriv-go-qr-label", children: "Scan to download" })
1252
+ /* @__PURE__ */ jsx17("span", { className: "footer__deriv-go-qr-label", children: derivGo.scanToDownloadLabel ?? "Scan to download" })
1253
1253
  ] }),
1254
1254
  /* @__PURE__ */ jsx17(
1255
1255
  DerivGoBadges,
@@ -2245,7 +2245,7 @@ var CTABanner = ({
2245
2245
  style: { y: heroY, opacity: heroOpacity },
2246
2246
  children: [
2247
2247
  /* @__PURE__ */ jsx22("h2", { className: "ctab__headline", children: headline }),
2248
- /* @__PURE__ */ jsx22("a", { href: ctaHref, className: "ctab__cta", children: ctaLabel })
2248
+ /* @__PURE__ */ jsx22("a", { href: ctaHref, children: /* @__PURE__ */ jsx22(Button, { colorScheme: "black", variant: "primary", label: ctaLabel }) })
2249
2249
  ]
2250
2250
  }
2251
2251
  )
@@ -2255,16 +2255,464 @@ var CTABanner = ({
2255
2255
  );
2256
2256
  };
2257
2257
 
2258
+ // components/Navbar/Navbar.tsx
2259
+ import { useRef as useRef7, useState as useState8, useEffect as useEffect6, useCallback as useCallback2 } from "react";
2260
+ import { motion as motion2, AnimatePresence } from "framer-motion";
2261
+
2262
+ // assets/icon-globe.svg
2263
+ var icon_globe_default = "./icon-globe-S54WYYEK.svg";
2264
+
2265
+ // components/Navbar/Navbar.tsx
2266
+ import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
2267
+ var EASE_OUT_EXPO = [0.16, 1, 0.3, 1];
2268
+ var dropdownVariants = {
2269
+ hidden: { opacity: 0, scale: 0.96, y: -8 },
2270
+ visible: { opacity: 1, scale: 1, y: 0 }
2271
+ };
2272
+ var drawerVariants = {
2273
+ hidden: { y: "-100%" },
2274
+ visible: { y: 0 }
2275
+ };
2276
+ var accordionVariants = {
2277
+ hidden: { height: 0, opacity: 0 },
2278
+ visible: { height: "auto", opacity: 1 }
2279
+ };
2280
+ var ChevronDownIcon3 = ({ className }) => /* @__PURE__ */ jsx23(
2281
+ "svg",
2282
+ {
2283
+ className,
2284
+ width: "14",
2285
+ height: "14",
2286
+ viewBox: "0 0 14 14",
2287
+ fill: "none",
2288
+ "aria-hidden": "true",
2289
+ children: /* @__PURE__ */ jsx23(
2290
+ "path",
2291
+ {
2292
+ d: "M2.625 4.8125L7 9.1875L11.375 4.8125",
2293
+ stroke: "currentColor",
2294
+ strokeWidth: "1.5",
2295
+ strokeLinecap: "round",
2296
+ strokeLinejoin: "round"
2297
+ }
2298
+ )
2299
+ }
2300
+ );
2301
+ var ArrowRightIcon = () => /* @__PURE__ */ jsx23("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(
2302
+ "path",
2303
+ {
2304
+ d: "M2.625 7H11.375M11.375 7L7.875 3.5M11.375 7L7.875 10.5",
2305
+ stroke: "currentColor",
2306
+ strokeWidth: "1.5",
2307
+ strokeLinecap: "round",
2308
+ strokeLinejoin: "round"
2309
+ }
2310
+ ) });
2311
+ var ArrowUpRightIcon = () => /* @__PURE__ */ jsx23("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(
2312
+ "path",
2313
+ {
2314
+ d: "M4.5 11.5L11.5 4.5M11.5 4.5H5.5M11.5 4.5V10.5",
2315
+ stroke: "currentColor",
2316
+ strokeWidth: "1.5",
2317
+ strokeLinecap: "round",
2318
+ strokeLinejoin: "round"
2319
+ }
2320
+ ) });
2321
+ var BarsIcon = () => /* @__PURE__ */ jsx23("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(
2322
+ "path",
2323
+ {
2324
+ d: "M2.5 5H17.5M2.5 10H17.5M2.5 15H17.5",
2325
+ stroke: "currentColor",
2326
+ strokeWidth: "1.75",
2327
+ strokeLinecap: "round"
2328
+ }
2329
+ ) });
2330
+ var XMarkIcon2 = () => /* @__PURE__ */ jsx23("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(
2331
+ "path",
2332
+ {
2333
+ d: "M15 5L5 15M5 5L15 15",
2334
+ stroke: "currentColor",
2335
+ strokeWidth: "1.75",
2336
+ strokeLinecap: "round"
2337
+ }
2338
+ ) });
2339
+ var GlobeIcon = ({ className }) => /* @__PURE__ */ jsx23("img", { src: icon_globe_default, alt: "", "aria-hidden": "true", width: "20", height: "20", className });
2340
+ var DropdownPanel = ({ item, onMouseEnter, onMouseLeave }) => {
2341
+ const { dropdown } = item;
2342
+ if (!dropdown) return null;
2343
+ return /* @__PURE__ */ jsx23(
2344
+ motion2.div,
2345
+ {
2346
+ className: "navbar__dropdown",
2347
+ variants: dropdownVariants,
2348
+ initial: "hidden",
2349
+ animate: "visible",
2350
+ exit: "hidden",
2351
+ transition: { duration: 0.18, ease: EASE_OUT_EXPO },
2352
+ onMouseEnter,
2353
+ onMouseLeave,
2354
+ children: /* @__PURE__ */ jsxs22("div", { className: "navbar__dropdown-inner", children: [
2355
+ /* @__PURE__ */ jsx23("div", { className: "navbar__dropdown-left", children: dropdown.columns.map((col) => /* @__PURE__ */ jsx23("div", { className: "navbar__dropdown-col", children: /* @__PURE__ */ jsxs22("div", { className: "navbar__dropdown-col-list", children: [
2356
+ /* @__PURE__ */ jsx23("p", { className: "navbar__dropdown-col-title", children: col.title }),
2357
+ col.items.map((link) => /* @__PURE__ */ jsxs22(
2358
+ "a",
2359
+ {
2360
+ href: link.href,
2361
+ className: "navbar__dropdown-link",
2362
+ target: link.external ? "_blank" : void 0,
2363
+ rel: link.external ? "noopener noreferrer" : void 0,
2364
+ children: [
2365
+ link.label,
2366
+ link.external ? /* @__PURE__ */ jsx23(ArrowUpRightIcon, {}) : /* @__PURE__ */ jsx23(ArrowRightIcon, {})
2367
+ ]
2368
+ },
2369
+ link.href
2370
+ ))
2371
+ ] }) }, col.title)) }),
2372
+ dropdown.feature && /* @__PURE__ */ jsx23("div", { className: "navbar__dropdown-right", children: /* @__PURE__ */ jsx23(FeatureCard, { feature: dropdown.feature }) })
2373
+ ] })
2374
+ }
2375
+ );
2376
+ };
2377
+ var FeatureCard = ({ feature, mobile }) => /* @__PURE__ */ jsxs22(
2378
+ "div",
2379
+ {
2380
+ className: mobile ? "navbar__drawer-feature" : "navbar__dropdown-feature",
2381
+ style: feature.backgroundImageUrl ? { backgroundImage: `url(${feature.backgroundImageUrl})` } : void 0,
2382
+ children: [
2383
+ feature.backgroundImageUrl && /* @__PURE__ */ jsx23(
2384
+ "img",
2385
+ {
2386
+ src: feature.backgroundImageUrl,
2387
+ alt: "",
2388
+ className: mobile ? "navbar__drawer-feature-img" : "navbar__dropdown-feature-img",
2389
+ "aria-hidden": "true"
2390
+ }
2391
+ ),
2392
+ /* @__PURE__ */ jsx23("div", { className: mobile ? "navbar__drawer-feature-overlay" : "navbar__dropdown-feature-overlay", "aria-hidden": "true" }),
2393
+ /* @__PURE__ */ jsxs22("div", { className: mobile ? "navbar__drawer-feature-content" : "navbar__dropdown-feature-content", children: [
2394
+ /* @__PURE__ */ jsxs22("div", { children: [
2395
+ /* @__PURE__ */ jsx23("p", { className: mobile ? "navbar__drawer-feature-title" : "navbar__dropdown-feature-title", children: feature.title }),
2396
+ /* @__PURE__ */ jsx23("p", { className: mobile ? "navbar__drawer-feature-desc" : "navbar__dropdown-feature-desc", children: feature.description })
2397
+ ] }),
2398
+ /* @__PURE__ */ jsxs22(
2399
+ "a",
2400
+ {
2401
+ href: feature.ctaHref,
2402
+ className: mobile ? "navbar__drawer-feature-cta" : "navbar__dropdown-feature-cta",
2403
+ children: [
2404
+ feature.ctaLabel,
2405
+ /* @__PURE__ */ jsx23(ArrowRightIcon, {})
2406
+ ]
2407
+ }
2408
+ )
2409
+ ] })
2410
+ ]
2411
+ }
2412
+ );
2413
+ var DrawerAccordion = ({ item, isOpen, onToggle }) => {
2414
+ const { dropdown } = item;
2415
+ return /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-item", children: [
2416
+ /* @__PURE__ */ jsxs22(
2417
+ "button",
2418
+ {
2419
+ className: `navbar__drawer-trigger ${isOpen ? "navbar__drawer-trigger--open" : ""}`,
2420
+ onClick: onToggle,
2421
+ "aria-expanded": isOpen,
2422
+ children: [
2423
+ item.label,
2424
+ /* @__PURE__ */ jsx23(ChevronDownIcon3, { className: "navbar__drawer-trigger__chevron" })
2425
+ ]
2426
+ }
2427
+ ),
2428
+ /* @__PURE__ */ jsx23(AnimatePresence, { initial: false, children: isOpen && dropdown && /* @__PURE__ */ jsx23(
2429
+ motion2.div,
2430
+ {
2431
+ className: "navbar__drawer-panel",
2432
+ variants: accordionVariants,
2433
+ initial: "hidden",
2434
+ animate: "visible",
2435
+ exit: "hidden",
2436
+ transition: { duration: 0.22, ease: EASE_OUT_EXPO },
2437
+ children: /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-panel-inner", children: [
2438
+ /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-panel-cols", children: [0, 1].map((colIdx) => {
2439
+ const colItems = dropdown.columns.filter((_, i) => i % 2 === colIdx);
2440
+ if (colItems.length === 0) return null;
2441
+ return /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-panel-col", children: colItems.map((col) => /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-col-section", children: [
2442
+ /* @__PURE__ */ jsx23("p", { className: "navbar__drawer-col-title", children: col.title }),
2443
+ /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-col-links", children: col.items.map((link) => /* @__PURE__ */ jsx23(
2444
+ "a",
2445
+ {
2446
+ href: link.href,
2447
+ className: "navbar__drawer-link",
2448
+ target: link.external ? "_blank" : void 0,
2449
+ rel: link.external ? "noopener noreferrer" : void 0,
2450
+ children: link.label
2451
+ },
2452
+ link.href
2453
+ )) })
2454
+ ] }, col.title)) }, colIdx);
2455
+ }) }),
2456
+ dropdown.feature && /* @__PURE__ */ jsx23(FeatureCard, { feature: dropdown.feature, mobile: true })
2457
+ ] })
2458
+ }
2459
+ ) })
2460
+ ] });
2461
+ };
2462
+ var Navbar = ({
2463
+ theme = "dark",
2464
+ logoSrc,
2465
+ logoSrcDark,
2466
+ logoHref = "/",
2467
+ navItems = [],
2468
+ loginLabel = "Log in",
2469
+ loginHref,
2470
+ ctaLabel = "Open account",
2471
+ ctaHref,
2472
+ languageLabel,
2473
+ onLanguageClick,
2474
+ className,
2475
+ ...props
2476
+ }) => {
2477
+ const [openDropdown, setOpenDropdown] = useState8(null);
2478
+ const [mobileOpen, setMobileOpen] = useState8(false);
2479
+ const [mobileExpanded, setMobileExpanded] = useState8(null);
2480
+ const [scrolled, setScrolled] = useState8(false);
2481
+ const hoverTimeoutRef = useRef7(null);
2482
+ const pillAreaRef = useRef7(null);
2483
+ const resolvedLogo = theme === "light" ? logoSrcDark ?? logoSrc : logoSrc;
2484
+ useEffect6(() => {
2485
+ const onScroll = () => setScrolled(window.scrollY > 0);
2486
+ window.addEventListener("scroll", onScroll, { passive: true });
2487
+ return () => window.removeEventListener("scroll", onScroll);
2488
+ }, []);
2489
+ useEffect6(() => {
2490
+ const onKey = (e) => {
2491
+ if (e.key === "Escape") {
2492
+ setOpenDropdown(null);
2493
+ setMobileOpen(false);
2494
+ }
2495
+ };
2496
+ document.addEventListener("keydown", onKey);
2497
+ return () => document.removeEventListener("keydown", onKey);
2498
+ }, []);
2499
+ useEffect6(() => {
2500
+ document.body.style.overflow = mobileOpen ? "hidden" : "";
2501
+ return () => {
2502
+ document.body.style.overflow = "";
2503
+ };
2504
+ }, [mobileOpen]);
2505
+ useEffect6(() => {
2506
+ if (!openDropdown) return;
2507
+ const onPointerDown = (e) => {
2508
+ if (pillAreaRef.current && !pillAreaRef.current.contains(e.target)) {
2509
+ setOpenDropdown(null);
2510
+ }
2511
+ };
2512
+ document.addEventListener("pointerdown", onPointerDown);
2513
+ return () => document.removeEventListener("pointerdown", onPointerDown);
2514
+ }, [openDropdown]);
2515
+ const clearHoverTimeout = useCallback2(() => {
2516
+ if (hoverTimeoutRef.current) {
2517
+ clearTimeout(hoverTimeoutRef.current);
2518
+ hoverTimeoutRef.current = null;
2519
+ }
2520
+ }, []);
2521
+ const handleNavEnter = useCallback2((label) => {
2522
+ clearHoverTimeout();
2523
+ setOpenDropdown(label);
2524
+ }, [clearHoverTimeout]);
2525
+ const handleNavLeave = useCallback2(() => {
2526
+ clearHoverTimeout();
2527
+ hoverTimeoutRef.current = setTimeout(() => setOpenDropdown(null), 120);
2528
+ }, [clearHoverTimeout]);
2529
+ const activeDropdownItem = navItems.find((item) => item.label === openDropdown);
2530
+ return /* @__PURE__ */ jsxs22(
2531
+ "nav",
2532
+ {
2533
+ className: ["navbar", `navbar--${theme}`, scrolled && "navbar--scrolled", mobileOpen && "navbar--menu-open", className].filter(Boolean).join(" "),
2534
+ ...props,
2535
+ children: [
2536
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__bar", children: [
2537
+ /* @__PURE__ */ jsx23("a", { href: logoHref, className: "navbar__logo", "aria-label": "Home", children: /* @__PURE__ */ jsx23("img", { src: resolvedLogo, alt: "Logo" }) }),
2538
+ /* @__PURE__ */ jsx23("div", { className: "navbar__nav-center", ref: pillAreaRef, children: /* @__PURE__ */ jsxs22("div", { className: "navbar__pill", children: [
2539
+ /* @__PURE__ */ jsx23("a", { href: logoHref, className: "navbar__pill-logo", "aria-label": "Home", children: /* @__PURE__ */ jsx23("img", { src: logoSrcDark ?? logoSrc, alt: "Logo" }) }),
2540
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__nav-group", children: [
2541
+ navItems.map((item) => {
2542
+ if (item.external) {
2543
+ return /* @__PURE__ */ jsxs22(
2544
+ "a",
2545
+ {
2546
+ href: item.href,
2547
+ className: "navbar__nav-item",
2548
+ target: "_blank",
2549
+ rel: "noopener noreferrer",
2550
+ children: [
2551
+ item.label,
2552
+ /* @__PURE__ */ jsx23(ArrowUpRightIcon, {})
2553
+ ]
2554
+ },
2555
+ item.label
2556
+ );
2557
+ }
2558
+ if (item.dropdown) {
2559
+ return /* @__PURE__ */ jsxs22(
2560
+ "button",
2561
+ {
2562
+ className: [
2563
+ "navbar__nav-item",
2564
+ openDropdown === item.label ? "navbar__nav-item--open" : ""
2565
+ ].filter(Boolean).join(" "),
2566
+ onMouseEnter: () => handleNavEnter(item.label),
2567
+ onMouseLeave: handleNavLeave,
2568
+ "aria-expanded": openDropdown === item.label,
2569
+ "aria-haspopup": "true",
2570
+ children: [
2571
+ item.label,
2572
+ /* @__PURE__ */ jsx23(ChevronDownIcon3, { className: "navbar__nav-item__chevron" })
2573
+ ]
2574
+ },
2575
+ item.label
2576
+ );
2577
+ }
2578
+ return /* @__PURE__ */ jsx23("a", { href: item.href, className: "navbar__nav-item", children: item.label }, item.label);
2579
+ }),
2580
+ languageLabel && /* @__PURE__ */ jsxs22("button", { className: "navbar__nav-item navbar__lang-btn", onClick: onLanguageClick, children: [
2581
+ /* @__PURE__ */ jsx23(GlobeIcon, { className: "navbar__lang-globe" }),
2582
+ languageLabel
2583
+ ] })
2584
+ ] }),
2585
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__pill-actions", children: [
2586
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "black", variant: "secondary", label: loginLabel }) }),
2587
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2588
+ ] })
2589
+ ] }) }),
2590
+ /* @__PURE__ */ jsx23(AnimatePresence, { children: openDropdown && activeDropdownItem?.dropdown && /* @__PURE__ */ jsx23(
2591
+ DropdownPanel,
2592
+ {
2593
+ item: activeDropdownItem,
2594
+ onMouseEnter: clearHoverTimeout,
2595
+ onMouseLeave: handleNavLeave
2596
+ },
2597
+ openDropdown
2598
+ ) }),
2599
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__actions", children: [
2600
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, className: "navbar__actions-login", children: /* @__PURE__ */ jsx23(
2601
+ Button,
2602
+ {
2603
+ colorScheme: theme === "dark" ? "white" : "black",
2604
+ variant: "secondary",
2605
+ label: loginLabel
2606
+ }
2607
+ ) }),
2608
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2609
+ ] }),
2610
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__mobile-actions", children: [
2611
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, children: /* @__PURE__ */ jsx23(
2612
+ Button,
2613
+ {
2614
+ colorScheme: scrolled || theme === "light" ? "black" : "white",
2615
+ variant: "secondary",
2616
+ label: loginLabel
2617
+ }
2618
+ ) }),
2619
+ /* @__PURE__ */ jsx23(
2620
+ "button",
2621
+ {
2622
+ className: "navbar__mobile-trigger",
2623
+ onClick: () => setMobileOpen((o) => !o),
2624
+ "aria-label": mobileOpen ? "Close navigation menu" : "Open navigation menu",
2625
+ children: mobileOpen ? /* @__PURE__ */ jsx23(XMarkIcon2, {}) : /* @__PURE__ */ jsx23(BarsIcon, {})
2626
+ }
2627
+ )
2628
+ ] })
2629
+ ] }),
2630
+ /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-clip", children: /* @__PURE__ */ jsx23(AnimatePresence, { children: mobileOpen && /* @__PURE__ */ jsxs22(
2631
+ motion2.div,
2632
+ {
2633
+ className: "navbar__drawer",
2634
+ variants: drawerVariants,
2635
+ initial: "hidden",
2636
+ animate: "visible",
2637
+ exit: "hidden",
2638
+ transition: { duration: 0.3, ease: EASE_OUT_EXPO },
2639
+ "aria-modal": "true",
2640
+ role: "dialog",
2641
+ "aria-label": "Navigation menu",
2642
+ children: [
2643
+ /* @__PURE__ */ jsxs22("nav", { className: "navbar__drawer-nav", children: [
2644
+ navItems.map((item) => {
2645
+ if (item.dropdown) {
2646
+ return /* @__PURE__ */ jsx23(
2647
+ DrawerAccordion,
2648
+ {
2649
+ item,
2650
+ isOpen: mobileExpanded === item.label,
2651
+ onToggle: () => setMobileExpanded(
2652
+ (prev) => prev === item.label ? null : item.label
2653
+ )
2654
+ },
2655
+ item.label
2656
+ );
2657
+ }
2658
+ return /* @__PURE__ */ jsxs22(
2659
+ "a",
2660
+ {
2661
+ href: item.href,
2662
+ className: "navbar__drawer-single",
2663
+ target: item.external ? "_blank" : void 0,
2664
+ rel: item.external ? "noopener noreferrer" : void 0,
2665
+ children: [
2666
+ item.label,
2667
+ item.external && /* @__PURE__ */ jsx23(ArrowUpRightIcon, {})
2668
+ ]
2669
+ },
2670
+ item.label
2671
+ );
2672
+ }),
2673
+ languageLabel && /* @__PURE__ */ jsxs22("button", { className: "navbar__drawer-lang", onClick: onLanguageClick, children: [
2674
+ /* @__PURE__ */ jsx23(GlobeIcon, { className: "navbar__lang-globe" }),
2675
+ languageLabel
2676
+ ] })
2677
+ ] }),
2678
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-footer", children: [
2679
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, style: { display: "block" }, children: /* @__PURE__ */ jsx23(
2680
+ Button,
2681
+ {
2682
+ colorScheme: "black",
2683
+ variant: "secondary",
2684
+ label: loginLabel,
2685
+ fullWidth: true
2686
+ }
2687
+ ) }),
2688
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, style: { display: "block" }, children: /* @__PURE__ */ jsx23(
2689
+ Button,
2690
+ {
2691
+ colorScheme: "coral",
2692
+ variant: "primary",
2693
+ label: ctaLabel,
2694
+ fullWidth: true
2695
+ }
2696
+ ) })
2697
+ ] })
2698
+ ]
2699
+ }
2700
+ ) }) })
2701
+ ]
2702
+ }
2703
+ );
2704
+ };
2705
+
2258
2706
  // templates/DayNightTransition/DayNightTransition.tsx
2259
- import { useRef as useRef7 } from "react";
2707
+ import { useRef as useRef8 } from "react";
2260
2708
  import {
2261
- motion as motion2,
2709
+ motion as motion3,
2262
2710
  useScroll as useScroll2,
2263
2711
  useSpring as useSpring2,
2264
2712
  useTransform as useTransform2,
2265
2713
  useMotionTemplate as useMotionTemplate2
2266
2714
  } from "framer-motion";
2267
- import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
2715
+ import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
2268
2716
  var SPRING2 = { stiffness: 80, damping: 30, restDelta: 1e-3 };
2269
2717
  var FADE_START = 0.35;
2270
2718
  var FADE_END = 0.65;
@@ -2284,7 +2732,7 @@ var DayNightTransition = ({
2284
2732
  className,
2285
2733
  ...props
2286
2734
  }) => {
2287
- const wrapperRef = useRef7(null);
2735
+ const wrapperRef = useRef8(null);
2288
2736
  const { scrollYProgress } = useScroll2({
2289
2737
  target: wrapperRef,
2290
2738
  offset: ["start end", "end start"]
@@ -2296,14 +2744,14 @@ var DayNightTransition = ({
2296
2744
  const dayOpacity = useTransform2(smooth, [WORD_START, WORD_END], [1, 0]);
2297
2745
  const nightOpacity2 = useTransform2(smooth, [WORD_START, WORD_END], [0, 1]);
2298
2746
  const hasDescription = Boolean(dayDescription || nightDescription);
2299
- return /* @__PURE__ */ jsx23(
2747
+ return /* @__PURE__ */ jsx24(
2300
2748
  "div",
2301
2749
  {
2302
2750
  ref: wrapperRef,
2303
2751
  className: ["dnt", className].filter(Boolean).join(" "),
2304
2752
  ...props,
2305
- children: /* @__PURE__ */ jsxs22("div", { className: "dnt__sticky", children: [
2306
- /* @__PURE__ */ jsx23(
2753
+ children: /* @__PURE__ */ jsxs23("div", { className: "dnt__sticky", children: [
2754
+ /* @__PURE__ */ jsx24(
2307
2755
  "img",
2308
2756
  {
2309
2757
  className: "dnt__bg dnt__bg--day",
@@ -2313,8 +2761,8 @@ var DayNightTransition = ({
2313
2761
  draggable: false
2314
2762
  }
2315
2763
  ),
2316
- /* @__PURE__ */ jsx23(
2317
- motion2.img,
2764
+ /* @__PURE__ */ jsx24(
2765
+ motion3.img,
2318
2766
  {
2319
2767
  className: "dnt__bg dnt__bg--night",
2320
2768
  src: nightImageUrl,
@@ -2324,23 +2772,23 @@ var DayNightTransition = ({
2324
2772
  style: { opacity: nightOpacity }
2325
2773
  }
2326
2774
  ),
2327
- /* @__PURE__ */ jsx23("div", { className: "dnt__content", children: /* @__PURE__ */ jsxs22(
2328
- motion2.div,
2775
+ /* @__PURE__ */ jsx24("div", { className: "dnt__content", children: /* @__PURE__ */ jsxs23(
2776
+ motion3.div,
2329
2777
  {
2330
2778
  className: "dnt__text-wrap",
2331
2779
  style: { color: textColor },
2332
2780
  children: [
2333
- /* @__PURE__ */ jsxs22("div", { className: "dnt__crossfade-wrap", children: [
2334
- /* @__PURE__ */ jsx23(
2335
- motion2.h2,
2781
+ /* @__PURE__ */ jsxs23("div", { className: "dnt__crossfade-wrap", children: [
2782
+ /* @__PURE__ */ jsx24(
2783
+ motion3.h2,
2336
2784
  {
2337
2785
  className: "dnt__headline",
2338
2786
  style: { opacity: dayOpacity },
2339
2787
  children: dayHeadline
2340
2788
  }
2341
2789
  ),
2342
- /* @__PURE__ */ jsx23(
2343
- motion2.h2,
2790
+ /* @__PURE__ */ jsx24(
2791
+ motion3.h2,
2344
2792
  {
2345
2793
  className: "dnt__headline",
2346
2794
  "aria-hidden": "true",
@@ -2349,17 +2797,17 @@ var DayNightTransition = ({
2349
2797
  }
2350
2798
  )
2351
2799
  ] }),
2352
- hasDescription && /* @__PURE__ */ jsxs22("div", { className: "dnt__crossfade-wrap", children: [
2353
- /* @__PURE__ */ jsx23(
2354
- motion2.p,
2800
+ hasDescription && /* @__PURE__ */ jsxs23("div", { className: "dnt__crossfade-wrap", children: [
2801
+ /* @__PURE__ */ jsx24(
2802
+ motion3.p,
2355
2803
  {
2356
2804
  className: "dnt__description",
2357
2805
  style: { opacity: dayOpacity },
2358
2806
  children: dayDescription ?? ""
2359
2807
  }
2360
2808
  ),
2361
- /* @__PURE__ */ jsx23(
2362
- motion2.p,
2809
+ /* @__PURE__ */ jsx24(
2810
+ motion3.p,
2363
2811
  {
2364
2812
  className: "dnt__description",
2365
2813
  "aria-hidden": "true",
@@ -2368,7 +2816,7 @@ var DayNightTransition = ({
2368
2816
  }
2369
2817
  )
2370
2818
  ] }),
2371
- /* @__PURE__ */ jsx23("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
2819
+ /* @__PURE__ */ jsx24("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
2372
2820
  ]
2373
2821
  }
2374
2822
  ) })
@@ -2378,15 +2826,15 @@ var DayNightTransition = ({
2378
2826
  };
2379
2827
 
2380
2828
  // templates/PaymentMethods/PaymentMethods.tsx
2381
- import { useRef as useRef8 } from "react";
2829
+ import { useRef as useRef9 } from "react";
2382
2830
  import {
2383
- motion as motion3,
2831
+ motion as motion4,
2384
2832
  useScroll as useScroll3,
2385
2833
  useVelocity,
2386
2834
  useAnimationFrame,
2387
2835
  useMotionValue
2388
2836
  } from "framer-motion";
2389
- import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
2837
+ import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
2390
2838
  function modWrap(min, max, v) {
2391
2839
  const range = max - min;
2392
2840
  return ((v - min) % range + range) % range + min;
@@ -2443,8 +2891,8 @@ var PaymentMethods = ({
2443
2891
  const scrollVelocity = useVelocity(scrollY);
2444
2892
  const col1Y = useMotionValue(0);
2445
2893
  const col2Y = useMotionValue(0);
2446
- const col1Ref = useRef8(null);
2447
- const col2Ref = useRef8(null);
2894
+ const col1Ref = useRef9(null);
2895
+ const col2Ref = useRef9(null);
2448
2896
  useAnimationFrame((_, delta) => {
2449
2897
  const raw = scrollVelocity.get();
2450
2898
  if (Math.abs(raw) < DEADZONE) return;
@@ -2457,21 +2905,21 @@ var PaymentMethods = ({
2457
2905
  });
2458
2906
  const track1 = [...col1Logos, ...col1Logos];
2459
2907
  const track2 = [...col2Logos, ...col2Logos];
2460
- return /* @__PURE__ */ jsx24(
2908
+ return /* @__PURE__ */ jsx25(
2461
2909
  "section",
2462
2910
  {
2463
2911
  className: ["pm", className].filter(Boolean).join(" "),
2464
2912
  ...props,
2465
- children: /* @__PURE__ */ jsxs23("div", { className: "pm__inner", children: [
2466
- /* @__PURE__ */ jsx24("div", { className: "pm__media", children: /* @__PURE__ */ jsxs23("div", { className: "pm__carousel", children: [
2467
- /* @__PURE__ */ jsx24("div", { className: "pm__fade pm__fade--top", "aria-hidden": "true" }),
2468
- /* @__PURE__ */ jsx24(
2469
- motion3.div,
2913
+ children: /* @__PURE__ */ jsxs24("div", { className: "pm__inner", children: [
2914
+ /* @__PURE__ */ jsx25("div", { className: "pm__media", children: /* @__PURE__ */ jsxs24("div", { className: "pm__carousel", children: [
2915
+ /* @__PURE__ */ jsx25("div", { className: "pm__fade pm__fade--top", "aria-hidden": "true" }),
2916
+ /* @__PURE__ */ jsx25(
2917
+ motion4.div,
2470
2918
  {
2471
2919
  ref: col1Ref,
2472
2920
  className: "pm__col",
2473
2921
  style: { y: col1Y },
2474
- children: track1.map((logo, i) => /* @__PURE__ */ jsx24("div", { className: "pm__card", children: /* @__PURE__ */ jsx24("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx24(
2922
+ children: track1.map((logo, i) => /* @__PURE__ */ jsx25("div", { className: "pm__card", children: /* @__PURE__ */ jsx25("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx25(
2475
2923
  "img",
2476
2924
  {
2477
2925
  src: logo.url,
@@ -2482,13 +2930,13 @@ var PaymentMethods = ({
2482
2930
  ) }) }, `c1-${i}`))
2483
2931
  }
2484
2932
  ),
2485
- /* @__PURE__ */ jsx24(
2486
- motion3.div,
2933
+ /* @__PURE__ */ jsx25(
2934
+ motion4.div,
2487
2935
  {
2488
2936
  ref: col2Ref,
2489
2937
  className: "pm__col",
2490
2938
  style: { y: col2Y },
2491
- children: track2.map((logo, i) => /* @__PURE__ */ jsx24("div", { className: "pm__card", children: /* @__PURE__ */ jsx24("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx24(
2939
+ children: track2.map((logo, i) => /* @__PURE__ */ jsx25("div", { className: "pm__card", children: /* @__PURE__ */ jsx25("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx25(
2492
2940
  "img",
2493
2941
  {
2494
2942
  src: logo.url,
@@ -2499,17 +2947,17 @@ var PaymentMethods = ({
2499
2947
  ) }) }, `c2-${i}`))
2500
2948
  }
2501
2949
  ),
2502
- /* @__PURE__ */ jsx24("div", { className: "pm__fade pm__fade--bottom", "aria-hidden": "true" })
2950
+ /* @__PURE__ */ jsx25("div", { className: "pm__fade pm__fade--bottom", "aria-hidden": "true" })
2503
2951
  ] }) }),
2504
- /* @__PURE__ */ jsxs23("div", { className: "pm__content", children: [
2505
- /* @__PURE__ */ jsx24("h2", { className: "pm__headline", children: headline }),
2506
- /* @__PURE__ */ jsxs23("div", { className: "pm__text-group", children: [
2507
- /* @__PURE__ */ jsx24("p", { className: "pm__body", children: body }),
2508
- /* @__PURE__ */ jsx24("p", { className: "pm__disclaimer", children: disclaimer })
2952
+ /* @__PURE__ */ jsxs24("div", { className: "pm__content", children: [
2953
+ /* @__PURE__ */ jsx25("h2", { className: "pm__headline", children: headline }),
2954
+ /* @__PURE__ */ jsxs24("div", { className: "pm__text-group", children: [
2955
+ /* @__PURE__ */ jsx25("p", { className: "pm__body", children: body }),
2956
+ /* @__PURE__ */ jsx25("p", { className: "pm__disclaimer", children: disclaimer })
2509
2957
  ] }),
2510
- /* @__PURE__ */ jsxs23("a", { href: ctaHref, className: "pm__link", children: [
2958
+ /* @__PURE__ */ jsxs24("a", { href: ctaHref, className: "pm__link", children: [
2511
2959
  ctaLabel,
2512
- /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", children: "\u2192" })
2960
+ /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", children: "\u2192" })
2513
2961
  ] })
2514
2962
  ] })
2515
2963
  ] })
@@ -2533,6 +2981,7 @@ export {
2533
2981
  Footer,
2534
2982
  Hero,
2535
2983
  Link,
2984
+ Navbar,
2536
2985
  Pagination,
2537
2986
  PaymentMethods,
2538
2987
  SCROLLYTELLING_DATA,