@deriv-web-design/ui 0.0.5 → 0.0.7

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,460 @@ 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, colIdx) => /* @__PURE__ */ jsx23("div", { className: "navbar__dropdown-col", children: col.sections.map((section) => /* @__PURE__ */ jsxs22("div", { className: "navbar__dropdown-col-list", children: [
2356
+ /* @__PURE__ */ jsx23("p", { className: "navbar__dropdown-col-title", children: section.title }),
2357
+ section.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
+ ] }, section.title)) }, colIdx)) }),
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: dropdown.columns.map((col, colIdx) => /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-panel-col", children: col.sections.map((section) => /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-col-section", children: [
2439
+ /* @__PURE__ */ jsx23("p", { className: "navbar__drawer-col-title", children: section.title }),
2440
+ /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-col-links", children: section.items.map((link) => /* @__PURE__ */ jsx23(
2441
+ "a",
2442
+ {
2443
+ href: link.href,
2444
+ className: "navbar__drawer-link",
2445
+ target: link.external ? "_blank" : void 0,
2446
+ rel: link.external ? "noopener noreferrer" : void 0,
2447
+ children: link.label
2448
+ },
2449
+ link.href
2450
+ )) })
2451
+ ] }, section.title)) }, colIdx)) }),
2452
+ dropdown.feature && /* @__PURE__ */ jsx23(FeatureCard, { feature: dropdown.feature, mobile: true })
2453
+ ] })
2454
+ }
2455
+ ) })
2456
+ ] });
2457
+ };
2458
+ var Navbar = ({
2459
+ theme = "dark",
2460
+ logoSrc,
2461
+ logoSrcDark,
2462
+ logoHref = "/",
2463
+ navItems = [],
2464
+ loginLabel = "Log in",
2465
+ loginHref,
2466
+ ctaLabel = "Open account",
2467
+ ctaHref,
2468
+ languageLabel,
2469
+ onLanguageClick,
2470
+ className,
2471
+ ...props
2472
+ }) => {
2473
+ const [openDropdown, setOpenDropdown] = useState8(null);
2474
+ const [mobileOpen, setMobileOpen] = useState8(false);
2475
+ const [mobileExpanded, setMobileExpanded] = useState8(null);
2476
+ const [scrolled, setScrolled] = useState8(false);
2477
+ const hoverTimeoutRef = useRef7(null);
2478
+ const pillAreaRef = useRef7(null);
2479
+ const resolvedLogo = theme === "light" ? logoSrcDark ?? logoSrc : logoSrc;
2480
+ useEffect6(() => {
2481
+ const onScroll = () => setScrolled(window.scrollY > 0);
2482
+ window.addEventListener("scroll", onScroll, { passive: true });
2483
+ return () => window.removeEventListener("scroll", onScroll);
2484
+ }, []);
2485
+ useEffect6(() => {
2486
+ const onKey = (e) => {
2487
+ if (e.key === "Escape") {
2488
+ setOpenDropdown(null);
2489
+ setMobileOpen(false);
2490
+ }
2491
+ };
2492
+ document.addEventListener("keydown", onKey);
2493
+ return () => document.removeEventListener("keydown", onKey);
2494
+ }, []);
2495
+ useEffect6(() => {
2496
+ document.body.style.overflow = mobileOpen ? "hidden" : "";
2497
+ return () => {
2498
+ document.body.style.overflow = "";
2499
+ };
2500
+ }, [mobileOpen]);
2501
+ useEffect6(() => {
2502
+ if (!openDropdown) return;
2503
+ const onPointerDown = (e) => {
2504
+ if (pillAreaRef.current && !pillAreaRef.current.contains(e.target)) {
2505
+ setOpenDropdown(null);
2506
+ }
2507
+ };
2508
+ document.addEventListener("pointerdown", onPointerDown);
2509
+ return () => document.removeEventListener("pointerdown", onPointerDown);
2510
+ }, [openDropdown]);
2511
+ const clearHoverTimeout = useCallback2(() => {
2512
+ if (hoverTimeoutRef.current) {
2513
+ clearTimeout(hoverTimeoutRef.current);
2514
+ hoverTimeoutRef.current = null;
2515
+ }
2516
+ }, []);
2517
+ const handleNavEnter = useCallback2((label) => {
2518
+ clearHoverTimeout();
2519
+ setOpenDropdown(label);
2520
+ }, [clearHoverTimeout]);
2521
+ const handleNavLeave = useCallback2(() => {
2522
+ clearHoverTimeout();
2523
+ hoverTimeoutRef.current = setTimeout(() => setOpenDropdown(null), 120);
2524
+ }, [clearHoverTimeout]);
2525
+ const activeDropdownItem = navItems.find((item) => item.label === openDropdown);
2526
+ return /* @__PURE__ */ jsxs22(
2527
+ "nav",
2528
+ {
2529
+ className: ["navbar", `navbar--${theme}`, scrolled && "navbar--scrolled", mobileOpen && "navbar--menu-open", className].filter(Boolean).join(" "),
2530
+ ...props,
2531
+ children: [
2532
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__bar", children: [
2533
+ /* @__PURE__ */ jsx23("a", { href: logoHref, className: "navbar__logo", "aria-label": "Home", children: /* @__PURE__ */ jsx23("img", { src: resolvedLogo, alt: "Logo" }) }),
2534
+ /* @__PURE__ */ jsx23("div", { className: "navbar__nav-center", ref: pillAreaRef, children: /* @__PURE__ */ jsxs22("div", { className: "navbar__pill", children: [
2535
+ /* @__PURE__ */ jsx23("a", { href: logoHref, className: "navbar__pill-logo", "aria-label": "Home", children: /* @__PURE__ */ jsx23("img", { src: logoSrcDark ?? logoSrc, alt: "Logo" }) }),
2536
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__nav-group", children: [
2537
+ navItems.map((item) => {
2538
+ if (item.external) {
2539
+ return /* @__PURE__ */ jsxs22(
2540
+ "a",
2541
+ {
2542
+ href: item.href,
2543
+ className: "navbar__nav-item",
2544
+ target: "_blank",
2545
+ rel: "noopener noreferrer",
2546
+ children: [
2547
+ item.label,
2548
+ /* @__PURE__ */ jsx23(ArrowUpRightIcon, {})
2549
+ ]
2550
+ },
2551
+ item.label
2552
+ );
2553
+ }
2554
+ if (item.dropdown) {
2555
+ return /* @__PURE__ */ jsxs22(
2556
+ "button",
2557
+ {
2558
+ className: [
2559
+ "navbar__nav-item",
2560
+ openDropdown === item.label ? "navbar__nav-item--open" : ""
2561
+ ].filter(Boolean).join(" "),
2562
+ onMouseEnter: () => handleNavEnter(item.label),
2563
+ onMouseLeave: handleNavLeave,
2564
+ "aria-expanded": openDropdown === item.label,
2565
+ "aria-haspopup": "true",
2566
+ children: [
2567
+ item.label,
2568
+ /* @__PURE__ */ jsx23(ChevronDownIcon3, { className: "navbar__nav-item__chevron" })
2569
+ ]
2570
+ },
2571
+ item.label
2572
+ );
2573
+ }
2574
+ return /* @__PURE__ */ jsx23("a", { href: item.href, className: "navbar__nav-item", children: item.label }, item.label);
2575
+ }),
2576
+ languageLabel && /* @__PURE__ */ jsxs22("button", { className: "navbar__nav-item navbar__lang-btn", onClick: onLanguageClick, children: [
2577
+ /* @__PURE__ */ jsx23(GlobeIcon, { className: "navbar__lang-globe" }),
2578
+ languageLabel
2579
+ ] })
2580
+ ] }),
2581
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__pill-actions", children: [
2582
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "black", variant: "secondary", label: loginLabel }) }),
2583
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2584
+ ] })
2585
+ ] }) }),
2586
+ /* @__PURE__ */ jsx23(AnimatePresence, { children: openDropdown && activeDropdownItem?.dropdown && /* @__PURE__ */ jsx23(
2587
+ DropdownPanel,
2588
+ {
2589
+ item: activeDropdownItem,
2590
+ onMouseEnter: clearHoverTimeout,
2591
+ onMouseLeave: handleNavLeave
2592
+ },
2593
+ "dropdown"
2594
+ ) }),
2595
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__actions", children: [
2596
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, className: "navbar__actions-login", children: /* @__PURE__ */ jsx23(
2597
+ Button,
2598
+ {
2599
+ colorScheme: theme === "dark" ? "white" : "black",
2600
+ variant: "secondary",
2601
+ label: loginLabel
2602
+ }
2603
+ ) }),
2604
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, children: /* @__PURE__ */ jsx23(Button, { colorScheme: "coral", variant: "primary", label: ctaLabel }) })
2605
+ ] }),
2606
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__mobile-actions", children: [
2607
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, children: /* @__PURE__ */ jsx23(
2608
+ Button,
2609
+ {
2610
+ colorScheme: scrolled || theme === "light" ? "black" : "white",
2611
+ variant: "secondary",
2612
+ label: loginLabel
2613
+ }
2614
+ ) }),
2615
+ /* @__PURE__ */ jsx23(
2616
+ "button",
2617
+ {
2618
+ className: "navbar__mobile-trigger",
2619
+ onClick: () => setMobileOpen((o) => !o),
2620
+ "aria-label": mobileOpen ? "Close navigation menu" : "Open navigation menu",
2621
+ children: mobileOpen ? /* @__PURE__ */ jsx23(XMarkIcon2, {}) : /* @__PURE__ */ jsx23(BarsIcon, {})
2622
+ }
2623
+ )
2624
+ ] })
2625
+ ] }),
2626
+ /* @__PURE__ */ jsx23("div", { className: "navbar__drawer-clip", children: /* @__PURE__ */ jsx23(AnimatePresence, { children: mobileOpen && /* @__PURE__ */ jsxs22(
2627
+ motion2.div,
2628
+ {
2629
+ className: "navbar__drawer",
2630
+ variants: drawerVariants,
2631
+ initial: "hidden",
2632
+ animate: "visible",
2633
+ exit: "hidden",
2634
+ transition: { duration: 0.3, ease: EASE_OUT_EXPO },
2635
+ "aria-modal": "true",
2636
+ role: "dialog",
2637
+ "aria-label": "Navigation menu",
2638
+ children: [
2639
+ /* @__PURE__ */ jsxs22("nav", { className: "navbar__drawer-nav", children: [
2640
+ navItems.map((item) => {
2641
+ if (item.dropdown) {
2642
+ return /* @__PURE__ */ jsx23(
2643
+ DrawerAccordion,
2644
+ {
2645
+ item,
2646
+ isOpen: mobileExpanded === item.label,
2647
+ onToggle: () => setMobileExpanded(
2648
+ (prev) => prev === item.label ? null : item.label
2649
+ )
2650
+ },
2651
+ item.label
2652
+ );
2653
+ }
2654
+ return /* @__PURE__ */ jsxs22(
2655
+ "a",
2656
+ {
2657
+ href: item.href,
2658
+ className: "navbar__drawer-single",
2659
+ target: item.external ? "_blank" : void 0,
2660
+ rel: item.external ? "noopener noreferrer" : void 0,
2661
+ children: [
2662
+ item.label,
2663
+ item.external && /* @__PURE__ */ jsx23(ArrowUpRightIcon, {})
2664
+ ]
2665
+ },
2666
+ item.label
2667
+ );
2668
+ }),
2669
+ languageLabel && /* @__PURE__ */ jsxs22("button", { className: "navbar__drawer-lang", onClick: onLanguageClick, children: [
2670
+ /* @__PURE__ */ jsx23(GlobeIcon, { className: "navbar__lang-globe" }),
2671
+ languageLabel
2672
+ ] })
2673
+ ] }),
2674
+ /* @__PURE__ */ jsxs22("div", { className: "navbar__drawer-footer", children: [
2675
+ loginHref && /* @__PURE__ */ jsx23("a", { href: loginHref, style: { display: "block" }, children: /* @__PURE__ */ jsx23(
2676
+ Button,
2677
+ {
2678
+ colorScheme: "black",
2679
+ variant: "secondary",
2680
+ label: loginLabel,
2681
+ fullWidth: true
2682
+ }
2683
+ ) }),
2684
+ ctaHref && /* @__PURE__ */ jsx23("a", { href: ctaHref, style: { display: "block" }, children: /* @__PURE__ */ jsx23(
2685
+ Button,
2686
+ {
2687
+ colorScheme: "coral",
2688
+ variant: "primary",
2689
+ label: ctaLabel,
2690
+ fullWidth: true
2691
+ }
2692
+ ) })
2693
+ ] })
2694
+ ]
2695
+ }
2696
+ ) }) })
2697
+ ]
2698
+ }
2699
+ );
2700
+ };
2701
+
2258
2702
  // templates/DayNightTransition/DayNightTransition.tsx
2259
- import { useRef as useRef7 } from "react";
2703
+ import { useRef as useRef8 } from "react";
2260
2704
  import {
2261
- motion as motion2,
2705
+ motion as motion3,
2262
2706
  useScroll as useScroll2,
2263
2707
  useSpring as useSpring2,
2264
2708
  useTransform as useTransform2,
2265
2709
  useMotionTemplate as useMotionTemplate2
2266
2710
  } from "framer-motion";
2267
- import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
2711
+ import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
2268
2712
  var SPRING2 = { stiffness: 80, damping: 30, restDelta: 1e-3 };
2269
2713
  var FADE_START = 0.35;
2270
2714
  var FADE_END = 0.65;
@@ -2284,7 +2728,7 @@ var DayNightTransition = ({
2284
2728
  className,
2285
2729
  ...props
2286
2730
  }) => {
2287
- const wrapperRef = useRef7(null);
2731
+ const wrapperRef = useRef8(null);
2288
2732
  const { scrollYProgress } = useScroll2({
2289
2733
  target: wrapperRef,
2290
2734
  offset: ["start end", "end start"]
@@ -2296,14 +2740,14 @@ var DayNightTransition = ({
2296
2740
  const dayOpacity = useTransform2(smooth, [WORD_START, WORD_END], [1, 0]);
2297
2741
  const nightOpacity2 = useTransform2(smooth, [WORD_START, WORD_END], [0, 1]);
2298
2742
  const hasDescription = Boolean(dayDescription || nightDescription);
2299
- return /* @__PURE__ */ jsx23(
2743
+ return /* @__PURE__ */ jsx24(
2300
2744
  "div",
2301
2745
  {
2302
2746
  ref: wrapperRef,
2303
2747
  className: ["dnt", className].filter(Boolean).join(" "),
2304
2748
  ...props,
2305
- children: /* @__PURE__ */ jsxs22("div", { className: "dnt__sticky", children: [
2306
- /* @__PURE__ */ jsx23(
2749
+ children: /* @__PURE__ */ jsxs23("div", { className: "dnt__sticky", children: [
2750
+ /* @__PURE__ */ jsx24(
2307
2751
  "img",
2308
2752
  {
2309
2753
  className: "dnt__bg dnt__bg--day",
@@ -2313,8 +2757,8 @@ var DayNightTransition = ({
2313
2757
  draggable: false
2314
2758
  }
2315
2759
  ),
2316
- /* @__PURE__ */ jsx23(
2317
- motion2.img,
2760
+ /* @__PURE__ */ jsx24(
2761
+ motion3.img,
2318
2762
  {
2319
2763
  className: "dnt__bg dnt__bg--night",
2320
2764
  src: nightImageUrl,
@@ -2324,23 +2768,23 @@ var DayNightTransition = ({
2324
2768
  style: { opacity: nightOpacity }
2325
2769
  }
2326
2770
  ),
2327
- /* @__PURE__ */ jsx23("div", { className: "dnt__content", children: /* @__PURE__ */ jsxs22(
2328
- motion2.div,
2771
+ /* @__PURE__ */ jsx24("div", { className: "dnt__content", children: /* @__PURE__ */ jsxs23(
2772
+ motion3.div,
2329
2773
  {
2330
2774
  className: "dnt__text-wrap",
2331
2775
  style: { color: textColor },
2332
2776
  children: [
2333
- /* @__PURE__ */ jsxs22("div", { className: "dnt__crossfade-wrap", children: [
2334
- /* @__PURE__ */ jsx23(
2335
- motion2.h2,
2777
+ /* @__PURE__ */ jsxs23("div", { className: "dnt__crossfade-wrap", children: [
2778
+ /* @__PURE__ */ jsx24(
2779
+ motion3.h2,
2336
2780
  {
2337
2781
  className: "dnt__headline",
2338
2782
  style: { opacity: dayOpacity },
2339
2783
  children: dayHeadline
2340
2784
  }
2341
2785
  ),
2342
- /* @__PURE__ */ jsx23(
2343
- motion2.h2,
2786
+ /* @__PURE__ */ jsx24(
2787
+ motion3.h2,
2344
2788
  {
2345
2789
  className: "dnt__headline",
2346
2790
  "aria-hidden": "true",
@@ -2349,17 +2793,17 @@ var DayNightTransition = ({
2349
2793
  }
2350
2794
  )
2351
2795
  ] }),
2352
- hasDescription && /* @__PURE__ */ jsxs22("div", { className: "dnt__crossfade-wrap", children: [
2353
- /* @__PURE__ */ jsx23(
2354
- motion2.p,
2796
+ hasDescription && /* @__PURE__ */ jsxs23("div", { className: "dnt__crossfade-wrap", children: [
2797
+ /* @__PURE__ */ jsx24(
2798
+ motion3.p,
2355
2799
  {
2356
2800
  className: "dnt__description",
2357
2801
  style: { opacity: dayOpacity },
2358
2802
  children: dayDescription ?? ""
2359
2803
  }
2360
2804
  ),
2361
- /* @__PURE__ */ jsx23(
2362
- motion2.p,
2805
+ /* @__PURE__ */ jsx24(
2806
+ motion3.p,
2363
2807
  {
2364
2808
  className: "dnt__description",
2365
2809
  "aria-hidden": "true",
@@ -2368,7 +2812,7 @@ var DayNightTransition = ({
2368
2812
  }
2369
2813
  )
2370
2814
  ] }),
2371
- /* @__PURE__ */ jsx23("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
2815
+ /* @__PURE__ */ jsx24("a", { href: ctaHref, className: "dnt__btn", children: ctaLabel })
2372
2816
  ]
2373
2817
  }
2374
2818
  ) })
@@ -2378,15 +2822,15 @@ var DayNightTransition = ({
2378
2822
  };
2379
2823
 
2380
2824
  // templates/PaymentMethods/PaymentMethods.tsx
2381
- import { useRef as useRef8 } from "react";
2825
+ import { useRef as useRef9 } from "react";
2382
2826
  import {
2383
- motion as motion3,
2827
+ motion as motion4,
2384
2828
  useScroll as useScroll3,
2385
2829
  useVelocity,
2386
2830
  useAnimationFrame,
2387
2831
  useMotionValue
2388
2832
  } from "framer-motion";
2389
- import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
2833
+ import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
2390
2834
  function modWrap(min, max, v) {
2391
2835
  const range = max - min;
2392
2836
  return ((v - min) % range + range) % range + min;
@@ -2443,8 +2887,8 @@ var PaymentMethods = ({
2443
2887
  const scrollVelocity = useVelocity(scrollY);
2444
2888
  const col1Y = useMotionValue(0);
2445
2889
  const col2Y = useMotionValue(0);
2446
- const col1Ref = useRef8(null);
2447
- const col2Ref = useRef8(null);
2890
+ const col1Ref = useRef9(null);
2891
+ const col2Ref = useRef9(null);
2448
2892
  useAnimationFrame((_, delta) => {
2449
2893
  const raw = scrollVelocity.get();
2450
2894
  if (Math.abs(raw) < DEADZONE) return;
@@ -2457,21 +2901,21 @@ var PaymentMethods = ({
2457
2901
  });
2458
2902
  const track1 = [...col1Logos, ...col1Logos];
2459
2903
  const track2 = [...col2Logos, ...col2Logos];
2460
- return /* @__PURE__ */ jsx24(
2904
+ return /* @__PURE__ */ jsx25(
2461
2905
  "section",
2462
2906
  {
2463
2907
  className: ["pm", className].filter(Boolean).join(" "),
2464
2908
  ...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,
2909
+ children: /* @__PURE__ */ jsxs24("div", { className: "pm__inner", children: [
2910
+ /* @__PURE__ */ jsx25("div", { className: "pm__media", children: /* @__PURE__ */ jsxs24("div", { className: "pm__carousel", children: [
2911
+ /* @__PURE__ */ jsx25("div", { className: "pm__fade pm__fade--top", "aria-hidden": "true" }),
2912
+ /* @__PURE__ */ jsx25(
2913
+ motion4.div,
2470
2914
  {
2471
2915
  ref: col1Ref,
2472
2916
  className: "pm__col",
2473
2917
  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(
2918
+ children: track1.map((logo, i) => /* @__PURE__ */ jsx25("div", { className: "pm__card", children: /* @__PURE__ */ jsx25("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx25(
2475
2919
  "img",
2476
2920
  {
2477
2921
  src: logo.url,
@@ -2482,13 +2926,13 @@ var PaymentMethods = ({
2482
2926
  ) }) }, `c1-${i}`))
2483
2927
  }
2484
2928
  ),
2485
- /* @__PURE__ */ jsx24(
2486
- motion3.div,
2929
+ /* @__PURE__ */ jsx25(
2930
+ motion4.div,
2487
2931
  {
2488
2932
  ref: col2Ref,
2489
2933
  className: "pm__col",
2490
2934
  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(
2935
+ children: track2.map((logo, i) => /* @__PURE__ */ jsx25("div", { className: "pm__card", children: /* @__PURE__ */ jsx25("div", { className: "pm__card-img-wrap", children: /* @__PURE__ */ jsx25(
2492
2936
  "img",
2493
2937
  {
2494
2938
  src: logo.url,
@@ -2499,17 +2943,17 @@ var PaymentMethods = ({
2499
2943
  ) }) }, `c2-${i}`))
2500
2944
  }
2501
2945
  ),
2502
- /* @__PURE__ */ jsx24("div", { className: "pm__fade pm__fade--bottom", "aria-hidden": "true" })
2946
+ /* @__PURE__ */ jsx25("div", { className: "pm__fade pm__fade--bottom", "aria-hidden": "true" })
2503
2947
  ] }) }),
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 })
2948
+ /* @__PURE__ */ jsxs24("div", { className: "pm__content", children: [
2949
+ /* @__PURE__ */ jsx25("h2", { className: "pm__headline", children: headline }),
2950
+ /* @__PURE__ */ jsxs24("div", { className: "pm__text-group", children: [
2951
+ /* @__PURE__ */ jsx25("p", { className: "pm__body", children: body }),
2952
+ /* @__PURE__ */ jsx25("p", { className: "pm__disclaimer", children: disclaimer })
2509
2953
  ] }),
2510
- /* @__PURE__ */ jsxs23("a", { href: ctaHref, className: "pm__link", children: [
2954
+ /* @__PURE__ */ jsxs24("a", { href: ctaHref, className: "pm__link", children: [
2511
2955
  ctaLabel,
2512
- /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", children: "\u2192" })
2956
+ /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", children: "\u2192" })
2513
2957
  ] })
2514
2958
  ] })
2515
2959
  ] })
@@ -2533,6 +2977,7 @@ export {
2533
2977
  Footer,
2534
2978
  Hero,
2535
2979
  Link,
2980
+ Navbar,
2536
2981
  Pagination,
2537
2982
  PaymentMethods,
2538
2983
  SCROLLYTELLING_DATA,