@nok-integration/storefront-react 0.19.3 → 0.19.5

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.d.ts CHANGED
@@ -3576,12 +3576,25 @@ export declare interface OrderConfirmationViewProps {
3576
3576
  /**
3577
3577
  * The frame's "Done". Omit it and no button renders.
3578
3578
  *
3579
- * **It leaves the shop entirely.** "Done" goes to the app's own home; the header's
3580
- * close control goes to the shop home. They are different destinations, and wiring both
3581
- * to the shop home removes the only way out of the shop at the end of a purchase.
3579
+ * **However you navigate, replace the current history entry rather than pushing a new
3580
+ * one.** A confirmation is a thing that happened once. Push it and the receipt stays in
3581
+ * the browser's history, where Back returns the customer to a confirmation for an order
3582
+ * they have already placed — or, read the wrong way, to an invitation to place it again.
3583
+ * `router.replace(to)`, or `location.replace(url)` for a full page load, takes this
3584
+ * screen out of the history on the way out.
3582
3585
  *
3583
- * It is a host callback because the app's home is not reachable from the `/v1` surface
3584
- * and not somewhere `navigate('/')` can go.
3586
+ * Replacement swaps the current entry; it does not delete one. Back therefore lands on
3587
+ * whatever preceded this screen, so where checkout is a page of its own, navigate INTO
3588
+ * the confirmation by replacement too. Otherwise leaving by the front door returns the
3589
+ * customer to the payment step by the back one.
3590
+ *
3591
+ * Neither call can remove an entry already behind you, so both have to happen at the
3592
+ * moment of the navigation. Nothing later can undo a push.
3593
+ *
3594
+ * The destination is yours to choose, and the header's close control is the same exit:
3595
+ * wire the two together unless they genuinely lead to different places. This is a host
3596
+ * callback because it leaves the shop, which is not reachable from the `/v1` surface and
3597
+ * not somewhere `navigate` can go.
3585
3598
  */
3586
3599
  onDone?: () => void;
3587
3600
  }
@@ -5545,7 +5558,14 @@ export declare interface ShopHeaderProps {
5545
5558
  * fetch for a badge that is not drawn.
5546
5559
  */
5547
5560
  context?: 'shop' | 'checkout';
5548
- /** The close control, in `checkout` context. Omit it and the slot stays reserved. */
5561
+ /**
5562
+ * The close control, in `checkout` context. Omit it and the slot stays reserved.
5563
+ *
5564
+ * On a confirmation this is the same exit as that screen's own "Done" button, and it
5565
+ * carries the same requirement: **replace the current history entry, do not push a new
5566
+ * one.** A pushed receipt stays in the browser's history and Back brings it back. See
5567
+ * `OrderConfirmationViewProps.onDone`.
5568
+ */
5549
5569
  onClose?: () => void;
5550
5570
  /** Accessible name for the back control, for a host that is not in English. */
5551
5571
  backLabel?: string;
package/dist/index.mjs CHANGED
@@ -5410,6 +5410,7 @@ const styles$M = {
5410
5410
  surface: surface$1,
5411
5411
  fill
5412
5412
  };
5413
+ const SETTLE_MS$1 = 150;
5413
5414
  function offsetFromViewportTop(el) {
5414
5415
  let top = el.getBoundingClientRect().top;
5415
5416
  for (let node = el.parentElement; node; node = node.parentElement) {
@@ -5423,17 +5424,30 @@ function useTopOffset(ref, property, enabled = true) {
5423
5424
  useEffect(() => {
5424
5425
  const el = ref.current;
5425
5426
  if (!el || !enabled) return;
5427
+ let timer2;
5426
5428
  const measure = () => {
5427
5429
  el.style.setProperty(property, `${offsetFromViewportTop(el)}px`);
5428
5430
  };
5431
+ const settle = () => {
5432
+ if (timer2) clearTimeout(timer2);
5433
+ timer2 = setTimeout(measure, SETTLE_MS$1);
5434
+ };
5429
5435
  measure();
5430
5436
  window.addEventListener("resize", measure);
5431
5437
  window.addEventListener("orientationchange", measure);
5438
+ document.addEventListener("scroll", settle, {
5439
+ capture: true,
5440
+ passive: true
5441
+ });
5432
5442
  const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
5433
5443
  if (observer && el.parentElement) observer.observe(el.parentElement);
5434
5444
  return () => {
5445
+ if (timer2) clearTimeout(timer2);
5435
5446
  window.removeEventListener("resize", measure);
5436
5447
  window.removeEventListener("orientationchange", measure);
5448
+ document.removeEventListener("scroll", settle, {
5449
+ capture: true
5450
+ });
5437
5451
  observer?.disconnect();
5438
5452
  };
5439
5453
  }, [ref, property, enabled]);
@@ -10545,24 +10559,24 @@ function ProductView({ sku, initialData, showRecommendations = true, onNotFound
10545
10559
  }
10546
10560
  return unavailable;
10547
10561
  }
10548
- const showcase = "_showcase_1sarz_31";
10549
- const panel = "_panel_1sarz_50";
10550
- const image = "_image_1sarz_60";
10551
- const heroImageBox = "_heroImageBox_1sarz_108";
10552
- const hero = "_hero_1sarz_108";
10553
- const heroContent = "_heroContent_1sarz_179";
10554
- const heroText = "_heroText_1sarz_196";
10555
- const logo = "_logo_1sarz_205";
10556
- const heroTitle = "_heroTitle_1sarz_225";
10557
- const heroSub = "_heroSub_1sarz_249";
10558
- const swipe = "_swipe_1sarz_262";
10559
- const swipeLabel = "_swipeLabel_1sarz_270";
10560
- const chevron$1 = "_chevron_1sarz_276";
10561
- const overlay$1 = "_overlay_1sarz_293";
10562
- const copy = "_copy_1sarz_304";
10563
- const title$2 = "_title_1sarz_309";
10564
- const subtitle$1 = "_subtitle_1sarz_316";
10565
- const cta = "_cta_1sarz_322";
10562
+ const showcase = "_showcase_12z2a_40";
10563
+ const panel = "_panel_12z2a_59";
10564
+ const image = "_image_12z2a_69";
10565
+ const heroImageBox = "_heroImageBox_12z2a_117";
10566
+ const hero = "_hero_12z2a_117";
10567
+ const heroContent = "_heroContent_12z2a_188";
10568
+ const heroText = "_heroText_12z2a_205";
10569
+ const logo = "_logo_12z2a_214";
10570
+ const heroTitle = "_heroTitle_12z2a_234";
10571
+ const heroSub = "_heroSub_12z2a_258";
10572
+ const swipe = "_swipe_12z2a_271";
10573
+ const swipeLabel = "_swipeLabel_12z2a_279";
10574
+ const chevron$1 = "_chevron_12z2a_285";
10575
+ const overlay$1 = "_overlay_12z2a_302";
10576
+ const copy = "_copy_12z2a_313";
10577
+ const title$2 = "_title_12z2a_318";
10578
+ const subtitle$1 = "_subtitle_12z2a_325";
10579
+ const cta = "_cta_12z2a_331";
10566
10580
  const styles$2 = {
10567
10581
  showcase,
10568
10582
  panel,
@@ -10583,6 +10597,42 @@ const styles$2 = {
10583
10597
  subtitle: subtitle$1,
10584
10598
  cta
10585
10599
  };
10600
+ const SETTLE_MS = 250;
10601
+ function useViewportHeight(ref, property, enabled = true) {
10602
+ useEffect(() => {
10603
+ const el = ref.current;
10604
+ if (!el || !enabled) return;
10605
+ let timer2;
10606
+ const read = () => Math.round(window.visualViewport?.height ?? window.innerHeight);
10607
+ const apply = () => {
10608
+ const height = read();
10609
+ if (height > 0) el.style.setProperty(property, `${height}px`);
10610
+ };
10611
+ const applySettled = () => {
10612
+ const previous = el.clientHeight;
10613
+ const index = previous > 0 ? Math.round(el.scrollTop / previous) : 0;
10614
+ apply();
10615
+ if (el.clientHeight > 0) el.scrollTo({
10616
+ top: index * el.clientHeight,
10617
+ behavior: "auto"
10618
+ });
10619
+ };
10620
+ const schedule = () => {
10621
+ if (timer2) clearTimeout(timer2);
10622
+ timer2 = setTimeout(applySettled, SETTLE_MS);
10623
+ };
10624
+ apply();
10625
+ window.addEventListener("resize", schedule);
10626
+ window.addEventListener("orientationchange", schedule);
10627
+ window.visualViewport?.addEventListener("resize", schedule);
10628
+ return () => {
10629
+ if (timer2) clearTimeout(timer2);
10630
+ window.removeEventListener("resize", schedule);
10631
+ window.removeEventListener("orientationchange", schedule);
10632
+ window.visualViewport?.removeEventListener("resize", schedule);
10633
+ };
10634
+ }, [ref, property, enabled]);
10635
+ }
10586
10636
  const FALLBACK_PANELS = [{
10587
10637
  key: "all-items",
10588
10638
  title: "All items",
@@ -10687,6 +10737,7 @@ function HomeShowcase() {
10687
10737
  const panels = useSlides();
10688
10738
  const showcaseRef = useRef(null);
10689
10739
  useTopOffset(showcaseRef, "--showcase-top");
10740
+ useViewportHeight(showcaseRef, "--showcase-vh");
10690
10741
  return jsx(ShopSurface, {
10691
10742
  tone: "dark",
10692
10743
  children: jsxs("div", {
@@ -5410,6 +5410,7 @@ const styles$M = {
5410
5410
  surface: surface$1,
5411
5411
  fill
5412
5412
  };
5413
+ const SETTLE_MS$1 = 150;
5413
5414
  function offsetFromViewportTop(el) {
5414
5415
  let top = el.getBoundingClientRect().top;
5415
5416
  for (let node = el.parentElement; node; node = node.parentElement) {
@@ -5423,17 +5424,30 @@ function useTopOffset(ref, property, enabled = true) {
5423
5424
  useEffect(() => {
5424
5425
  const el = ref.current;
5425
5426
  if (!el || !enabled) return;
5427
+ let timer2;
5426
5428
  const measure = () => {
5427
5429
  el.style.setProperty(property, `${offsetFromViewportTop(el)}px`);
5428
5430
  };
5431
+ const settle = () => {
5432
+ if (timer2) clearTimeout(timer2);
5433
+ timer2 = setTimeout(measure, SETTLE_MS$1);
5434
+ };
5429
5435
  measure();
5430
5436
  window.addEventListener("resize", measure);
5431
5437
  window.addEventListener("orientationchange", measure);
5438
+ document.addEventListener("scroll", settle, {
5439
+ capture: true,
5440
+ passive: true
5441
+ });
5432
5442
  const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
5433
5443
  if (observer && el.parentElement) observer.observe(el.parentElement);
5434
5444
  return () => {
5445
+ if (timer2) clearTimeout(timer2);
5435
5446
  window.removeEventListener("resize", measure);
5436
5447
  window.removeEventListener("orientationchange", measure);
5448
+ document.removeEventListener("scroll", settle, {
5449
+ capture: true
5450
+ });
5437
5451
  observer?.disconnect();
5438
5452
  };
5439
5453
  }, [ref, property, enabled]);
@@ -10545,24 +10559,24 @@ function ProductView({ sku, initialData, showRecommendations = true, onNotFound
10545
10559
  }
10546
10560
  return unavailable;
10547
10561
  }
10548
- const showcase = "_showcase_1sarz_31";
10549
- const panel = "_panel_1sarz_50";
10550
- const image = "_image_1sarz_60";
10551
- const heroImageBox = "_heroImageBox_1sarz_108";
10552
- const hero = "_hero_1sarz_108";
10553
- const heroContent = "_heroContent_1sarz_179";
10554
- const heroText = "_heroText_1sarz_196";
10555
- const logo = "_logo_1sarz_205";
10556
- const heroTitle = "_heroTitle_1sarz_225";
10557
- const heroSub = "_heroSub_1sarz_249";
10558
- const swipe = "_swipe_1sarz_262";
10559
- const swipeLabel = "_swipeLabel_1sarz_270";
10560
- const chevron$1 = "_chevron_1sarz_276";
10561
- const overlay$1 = "_overlay_1sarz_293";
10562
- const copy = "_copy_1sarz_304";
10563
- const title$2 = "_title_1sarz_309";
10564
- const subtitle$1 = "_subtitle_1sarz_316";
10565
- const cta = "_cta_1sarz_322";
10562
+ const showcase = "_showcase_12z2a_40";
10563
+ const panel = "_panel_12z2a_59";
10564
+ const image = "_image_12z2a_69";
10565
+ const heroImageBox = "_heroImageBox_12z2a_117";
10566
+ const hero = "_hero_12z2a_117";
10567
+ const heroContent = "_heroContent_12z2a_188";
10568
+ const heroText = "_heroText_12z2a_205";
10569
+ const logo = "_logo_12z2a_214";
10570
+ const heroTitle = "_heroTitle_12z2a_234";
10571
+ const heroSub = "_heroSub_12z2a_258";
10572
+ const swipe = "_swipe_12z2a_271";
10573
+ const swipeLabel = "_swipeLabel_12z2a_279";
10574
+ const chevron$1 = "_chevron_12z2a_285";
10575
+ const overlay$1 = "_overlay_12z2a_302";
10576
+ const copy = "_copy_12z2a_313";
10577
+ const title$2 = "_title_12z2a_318";
10578
+ const subtitle$1 = "_subtitle_12z2a_325";
10579
+ const cta = "_cta_12z2a_331";
10566
10580
  const styles$2 = {
10567
10581
  showcase,
10568
10582
  panel,
@@ -10583,6 +10597,42 @@ const styles$2 = {
10583
10597
  subtitle: subtitle$1,
10584
10598
  cta
10585
10599
  };
10600
+ const SETTLE_MS = 250;
10601
+ function useViewportHeight(ref, property, enabled = true) {
10602
+ useEffect(() => {
10603
+ const el = ref.current;
10604
+ if (!el || !enabled) return;
10605
+ let timer2;
10606
+ const read = () => Math.round(window.visualViewport?.height ?? window.innerHeight);
10607
+ const apply = () => {
10608
+ const height = read();
10609
+ if (height > 0) el.style.setProperty(property, `${height}px`);
10610
+ };
10611
+ const applySettled = () => {
10612
+ const previous = el.clientHeight;
10613
+ const index = previous > 0 ? Math.round(el.scrollTop / previous) : 0;
10614
+ apply();
10615
+ if (el.clientHeight > 0) el.scrollTo({
10616
+ top: index * el.clientHeight,
10617
+ behavior: "auto"
10618
+ });
10619
+ };
10620
+ const schedule = () => {
10621
+ if (timer2) clearTimeout(timer2);
10622
+ timer2 = setTimeout(applySettled, SETTLE_MS);
10623
+ };
10624
+ apply();
10625
+ window.addEventListener("resize", schedule);
10626
+ window.addEventListener("orientationchange", schedule);
10627
+ window.visualViewport?.addEventListener("resize", schedule);
10628
+ return () => {
10629
+ if (timer2) clearTimeout(timer2);
10630
+ window.removeEventListener("resize", schedule);
10631
+ window.removeEventListener("orientationchange", schedule);
10632
+ window.visualViewport?.removeEventListener("resize", schedule);
10633
+ };
10634
+ }, [ref, property, enabled]);
10635
+ }
10586
10636
  const FALLBACK_PANELS = [{
10587
10637
  key: "all-items",
10588
10638
  title: "All items",
@@ -10687,6 +10737,7 @@ function HomeShowcase() {
10687
10737
  const panels = useSlides();
10688
10738
  const showcaseRef = useRef(null);
10689
10739
  useTopOffset(showcaseRef, "--showcase-top");
10740
+ useViewportHeight(showcaseRef, "--showcase-vh");
10690
10741
  return jsx(ShopSurface, {
10691
10742
  tone: "dark",
10692
10743
  children: jsxs("div", {
@@ -3384,8 +3384,8 @@
3384
3384
  column-gap: var(--space-12);
3385
3385
  row-gap: var(--space-24);
3386
3386
  }
3387
- ._showcase_1sarz_31 {
3388
- height: calc(100svh - var(--showcase-top, 0px));
3387
+ ._showcase_12z2a_40 {
3388
+ height: calc(var(--showcase-vh, 100svh) - var(--showcase-top, 0px));
3389
3389
  overflow-y: auto;
3390
3390
  scroll-snap-type: y mandatory;
3391
3391
  overscroll-behavior-y: contain;
@@ -3393,22 +3393,22 @@
3393
3393
  background: #080e12;
3394
3394
  scrollbar-width: none;
3395
3395
  }
3396
- ._showcase_1sarz_31::-webkit-scrollbar {
3396
+ ._showcase_12z2a_40::-webkit-scrollbar {
3397
3397
  display: none;
3398
3398
  }
3399
- ._panel_1sarz_50 {
3399
+ ._panel_12z2a_59 {
3400
3400
  position: relative;
3401
- height: calc(100svh - var(--showcase-top, 0px));
3401
+ height: calc(var(--showcase-vh, 100svh) - var(--showcase-top, 0px));
3402
3402
  scroll-snap-align: start;
3403
3403
  scroll-snap-stop: always;
3404
3404
  overflow: hidden;
3405
3405
  background: #080e12;
3406
3406
  }
3407
- ._image_1sarz_60 {
3407
+ ._image_12z2a_69 {
3408
3408
  object-fit: cover;
3409
3409
  object-position: center;
3410
3410
  }
3411
- ._heroImageBox_1sarz_108 {
3411
+ ._heroImageBox_12z2a_117 {
3412
3412
  position: absolute;
3413
3413
  top: 31px;
3414
3414
  left: 0;
@@ -3416,7 +3416,7 @@
3416
3416
  aspect-ratio: 750 / 1348;
3417
3417
  overflow: hidden;
3418
3418
  }
3419
- ._hero_1sarz_108::after {
3419
+ ._hero_12z2a_117::after {
3420
3420
  content: "";
3421
3421
  position: absolute;
3422
3422
  inset: 0;
@@ -3431,10 +3431,10 @@
3431
3431
  rgba(8, 14, 18, 1) 90%);
3432
3432
  pointer-events: none;
3433
3433
  }
3434
- ._hero_1sarz_108 ._image_1sarz_60 {
3434
+ ._hero_12z2a_117 ._image_12z2a_69 {
3435
3435
  object-position: top;
3436
3436
  }
3437
- ._hero_1sarz_108 ._heroContent_1sarz_179 {
3437
+ ._hero_12z2a_117 ._heroContent_12z2a_188 {
3438
3438
  position: absolute;
3439
3439
  bottom: 0;
3440
3440
  left: 0;
@@ -3445,7 +3445,7 @@
3445
3445
  gap: 24px;
3446
3446
  align-items: stretch;
3447
3447
  }
3448
- ._heroText_1sarz_196 {
3448
+ ._heroText_12z2a_205 {
3449
3449
  display: flex;
3450
3450
  flex-direction: column;
3451
3451
  gap: 8px;
@@ -3453,11 +3453,11 @@
3453
3453
  padding: 0 24px;
3454
3454
  text-align: center;
3455
3455
  }
3456
- ._heroText_1sarz_196 ._logo_1sarz_205 {
3456
+ ._heroText_12z2a_205 ._logo_12z2a_214 {
3457
3457
  width: 48px;
3458
3458
  height: 48px;
3459
3459
  }
3460
- ._heroTitle_1sarz_225 {
3460
+ ._heroTitle_12z2a_234 {
3461
3461
  width: 100%;
3462
3462
  margin: 0;
3463
3463
  font-family:
@@ -3472,14 +3472,14 @@
3472
3472
  letter-spacing: -1.12px;
3473
3473
  color: #f9fafa;
3474
3474
  }
3475
- ._heroSub_1sarz_249 {
3475
+ ._heroSub_12z2a_258 {
3476
3476
  margin: 0;
3477
3477
  font-size: 16px;
3478
3478
  line-height: 1.55;
3479
3479
  color: #f9fafa;
3480
3480
  max-width: 327px;
3481
3481
  }
3482
- ._swipe_1sarz_262 {
3482
+ ._swipe_12z2a_271 {
3483
3483
  display: flex;
3484
3484
  flex-direction: column;
3485
3485
  align-items: center;
@@ -3487,19 +3487,19 @@
3487
3487
  padding: 8px 0;
3488
3488
  background: #080e12;
3489
3489
  }
3490
- ._swipeLabel_1sarz_270 {
3490
+ ._swipeLabel_12z2a_279 {
3491
3491
  margin: 0;
3492
3492
  font-size: 14px;
3493
3493
  line-height: 1;
3494
3494
  color: rgba(255, 255, 255, 0.54);
3495
3495
  }
3496
- ._chevron_1sarz_276 {
3496
+ ._chevron_12z2a_285 {
3497
3497
  width: 24px;
3498
3498
  height: 24px;
3499
3499
  color: rgba(255, 255, 255, 0.54);
3500
- animation: _bob_1sarz_1 1.8s ease-in-out infinite;
3500
+ animation: _bob_12z2a_1 1.8s ease-in-out infinite;
3501
3501
  }
3502
- @keyframes _bob_1sarz_1 {
3502
+ @keyframes _bob_12z2a_1 {
3503
3503
  0%, 100% {
3504
3504
  transform: translateY(0);
3505
3505
  }
@@ -3507,7 +3507,7 @@
3507
3507
  transform: translateY(4px);
3508
3508
  }
3509
3509
  }
3510
- ._overlay_1sarz_293 {
3510
+ ._overlay_12z2a_302 {
3511
3511
  position: absolute;
3512
3512
  inset: 0;
3513
3513
  z-index: 1;
@@ -3518,25 +3518,25 @@
3518
3518
  align-items: flex-start;
3519
3519
  padding: 0 24px 24px;
3520
3520
  }
3521
- ._copy_1sarz_304 {
3521
+ ._copy_12z2a_313 {
3522
3522
  display: flex;
3523
3523
  flex-direction: column;
3524
3524
  gap: 8px;
3525
3525
  }
3526
- ._title_1sarz_309 {
3526
+ ._title_12z2a_318 {
3527
3527
  margin: 0;
3528
3528
  font-size: 32px;
3529
3529
  line-height: 1.2;
3530
3530
  font-weight: 700;
3531
3531
  color: #f9fafa;
3532
3532
  }
3533
- ._subtitle_1sarz_316 {
3533
+ ._subtitle_12z2a_325 {
3534
3534
  margin: 0;
3535
3535
  font-size: 16px;
3536
3536
  line-height: 1.55;
3537
3537
  color: #f9fafa;
3538
3538
  }
3539
- ._cta_1sarz_322 {
3539
+ ._cta_12z2a_331 {
3540
3540
  display: inline-flex;
3541
3541
  align-items: center;
3542
3542
  justify-content: center;
@@ -3550,15 +3550,15 @@
3550
3550
  font-weight: 700;
3551
3551
  text-decoration: none;
3552
3552
  }
3553
- ._cta_1sarz_322::after {
3553
+ ._cta_12z2a_331::after {
3554
3554
  content: "";
3555
3555
  position: absolute;
3556
3556
  inset: 0;
3557
3557
  }
3558
- ._cta_1sarz_322:active {
3558
+ ._cta_12z2a_331:active {
3559
3559
  background: rgba(249, 250, 250, 0.12);
3560
3560
  }
3561
- ._cta_1sarz_322:focus-visible {
3561
+ ._cta_12z2a_331:focus-visible {
3562
3562
  outline: none;
3563
3563
  box-shadow: var(--focus-ring);
3564
3564
  }
package/dist/styles.css CHANGED
@@ -3384,8 +3384,8 @@
3384
3384
  column-gap: var(--space-12);
3385
3385
  row-gap: var(--space-24);
3386
3386
  }
3387
- ._showcase_1sarz_31 {
3388
- height: calc(100svh - var(--showcase-top, 0px));
3387
+ ._showcase_12z2a_40 {
3388
+ height: calc(var(--showcase-vh, 100svh) - var(--showcase-top, 0px));
3389
3389
  overflow-y: auto;
3390
3390
  scroll-snap-type: y mandatory;
3391
3391
  overscroll-behavior-y: contain;
@@ -3393,22 +3393,22 @@
3393
3393
  background: #080e12;
3394
3394
  scrollbar-width: none;
3395
3395
  }
3396
- ._showcase_1sarz_31::-webkit-scrollbar {
3396
+ ._showcase_12z2a_40::-webkit-scrollbar {
3397
3397
  display: none;
3398
3398
  }
3399
- ._panel_1sarz_50 {
3399
+ ._panel_12z2a_59 {
3400
3400
  position: relative;
3401
- height: calc(100svh - var(--showcase-top, 0px));
3401
+ height: calc(var(--showcase-vh, 100svh) - var(--showcase-top, 0px));
3402
3402
  scroll-snap-align: start;
3403
3403
  scroll-snap-stop: always;
3404
3404
  overflow: hidden;
3405
3405
  background: #080e12;
3406
3406
  }
3407
- ._image_1sarz_60 {
3407
+ ._image_12z2a_69 {
3408
3408
  object-fit: cover;
3409
3409
  object-position: center;
3410
3410
  }
3411
- ._heroImageBox_1sarz_108 {
3411
+ ._heroImageBox_12z2a_117 {
3412
3412
  position: absolute;
3413
3413
  top: 31px;
3414
3414
  left: 0;
@@ -3416,7 +3416,7 @@
3416
3416
  aspect-ratio: 750 / 1348;
3417
3417
  overflow: hidden;
3418
3418
  }
3419
- ._hero_1sarz_108::after {
3419
+ ._hero_12z2a_117::after {
3420
3420
  content: "";
3421
3421
  position: absolute;
3422
3422
  inset: 0;
@@ -3431,10 +3431,10 @@
3431
3431
  rgba(8, 14, 18, 1) 90%);
3432
3432
  pointer-events: none;
3433
3433
  }
3434
- ._hero_1sarz_108 ._image_1sarz_60 {
3434
+ ._hero_12z2a_117 ._image_12z2a_69 {
3435
3435
  object-position: top;
3436
3436
  }
3437
- ._hero_1sarz_108 ._heroContent_1sarz_179 {
3437
+ ._hero_12z2a_117 ._heroContent_12z2a_188 {
3438
3438
  position: absolute;
3439
3439
  bottom: 0;
3440
3440
  left: 0;
@@ -3445,7 +3445,7 @@
3445
3445
  gap: 24px;
3446
3446
  align-items: stretch;
3447
3447
  }
3448
- ._heroText_1sarz_196 {
3448
+ ._heroText_12z2a_205 {
3449
3449
  display: flex;
3450
3450
  flex-direction: column;
3451
3451
  gap: 8px;
@@ -3453,11 +3453,11 @@
3453
3453
  padding: 0 24px;
3454
3454
  text-align: center;
3455
3455
  }
3456
- ._heroText_1sarz_196 ._logo_1sarz_205 {
3456
+ ._heroText_12z2a_205 ._logo_12z2a_214 {
3457
3457
  width: 48px;
3458
3458
  height: 48px;
3459
3459
  }
3460
- ._heroTitle_1sarz_225 {
3460
+ ._heroTitle_12z2a_234 {
3461
3461
  width: 100%;
3462
3462
  margin: 0;
3463
3463
  font-family:
@@ -3472,14 +3472,14 @@
3472
3472
  letter-spacing: -1.12px;
3473
3473
  color: #f9fafa;
3474
3474
  }
3475
- ._heroSub_1sarz_249 {
3475
+ ._heroSub_12z2a_258 {
3476
3476
  margin: 0;
3477
3477
  font-size: 16px;
3478
3478
  line-height: 1.55;
3479
3479
  color: #f9fafa;
3480
3480
  max-width: 327px;
3481
3481
  }
3482
- ._swipe_1sarz_262 {
3482
+ ._swipe_12z2a_271 {
3483
3483
  display: flex;
3484
3484
  flex-direction: column;
3485
3485
  align-items: center;
@@ -3487,19 +3487,19 @@
3487
3487
  padding: 8px 0;
3488
3488
  background: #080e12;
3489
3489
  }
3490
- ._swipeLabel_1sarz_270 {
3490
+ ._swipeLabel_12z2a_279 {
3491
3491
  margin: 0;
3492
3492
  font-size: 14px;
3493
3493
  line-height: 1;
3494
3494
  color: rgba(255, 255, 255, 0.54);
3495
3495
  }
3496
- ._chevron_1sarz_276 {
3496
+ ._chevron_12z2a_285 {
3497
3497
  width: 24px;
3498
3498
  height: 24px;
3499
3499
  color: rgba(255, 255, 255, 0.54);
3500
- animation: _bob_1sarz_1 1.8s ease-in-out infinite;
3500
+ animation: _bob_12z2a_1 1.8s ease-in-out infinite;
3501
3501
  }
3502
- @keyframes _bob_1sarz_1 {
3502
+ @keyframes _bob_12z2a_1 {
3503
3503
  0%, 100% {
3504
3504
  transform: translateY(0);
3505
3505
  }
@@ -3507,7 +3507,7 @@
3507
3507
  transform: translateY(4px);
3508
3508
  }
3509
3509
  }
3510
- ._overlay_1sarz_293 {
3510
+ ._overlay_12z2a_302 {
3511
3511
  position: absolute;
3512
3512
  inset: 0;
3513
3513
  z-index: 1;
@@ -3518,25 +3518,25 @@
3518
3518
  align-items: flex-start;
3519
3519
  padding: 0 24px 24px;
3520
3520
  }
3521
- ._copy_1sarz_304 {
3521
+ ._copy_12z2a_313 {
3522
3522
  display: flex;
3523
3523
  flex-direction: column;
3524
3524
  gap: 8px;
3525
3525
  }
3526
- ._title_1sarz_309 {
3526
+ ._title_12z2a_318 {
3527
3527
  margin: 0;
3528
3528
  font-size: 32px;
3529
3529
  line-height: 1.2;
3530
3530
  font-weight: 700;
3531
3531
  color: #f9fafa;
3532
3532
  }
3533
- ._subtitle_1sarz_316 {
3533
+ ._subtitle_12z2a_325 {
3534
3534
  margin: 0;
3535
3535
  font-size: 16px;
3536
3536
  line-height: 1.55;
3537
3537
  color: #f9fafa;
3538
3538
  }
3539
- ._cta_1sarz_322 {
3539
+ ._cta_12z2a_331 {
3540
3540
  display: inline-flex;
3541
3541
  align-items: center;
3542
3542
  justify-content: center;
@@ -3550,15 +3550,15 @@
3550
3550
  font-weight: 700;
3551
3551
  text-decoration: none;
3552
3552
  }
3553
- ._cta_1sarz_322::after {
3553
+ ._cta_12z2a_331::after {
3554
3554
  content: "";
3555
3555
  position: absolute;
3556
3556
  inset: 0;
3557
3557
  }
3558
- ._cta_1sarz_322:active {
3558
+ ._cta_12z2a_331:active {
3559
3559
  background: rgba(249, 250, 250, 0.12);
3560
3560
  }
3561
- ._cta_1sarz_322:focus-visible {
3561
+ ._cta_12z2a_331:focus-visible {
3562
3562
  outline: none;
3563
3563
  box-shadow: var(--focus-ring);
3564
3564
  }
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@nok-integration/storefront-react",
3
- "version": "0.19.3",
3
+ "version": "0.19.5",
4
4
  "description": "Mountable React storefront components: catalogue, product detail and cart, mounted directly into a host DOM tree. No iframe.",
5
5
  "license": "UNLICENSED",
6
+ "publishConfig": {
7
+ "access": "public",
8
+ "registry": "https://registry.npmjs.org/"
9
+ },
6
10
  "type": "module",
7
11
  "main": "./dist/index.mjs",
8
- "module": "./dist/index.mjs",
9
12
  "types": "./dist/index.d.ts",
10
13
  "exports": {
11
14
  ".": {
@@ -20,18 +23,34 @@
20
23
  "dist",
21
24
  "!dist/**/*.map"
22
25
  ],
23
- "sideEffects": [
24
- "*.css"
25
- ],
26
+ "scripts": {
27
+ "build": "pnpm build:package && pnpm build:standalone",
28
+ "build:package": "vite build",
29
+ "build:standalone": "BUILD_TARGET=standalone vite build",
30
+ "typecheck": "tsc --noEmit",
31
+ "build:partner": "PARTNER_DROP=1 pnpm build && pnpm pack"
32
+ },
26
33
  "peerDependencies": {
27
34
  "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
28
35
  "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
29
36
  },
37
+ "devDependencies": {
38
+ "@microsoft/api-extractor": "^7.58.12",
39
+ "@raqmix/contracts": "^2.0.0",
40
+ "@types/react": "^19.1.0",
41
+ "@types/react-dom": "^19.1.0",
42
+ "@vitejs/plugin-react": "^4.3.4",
43
+ "esbuild": "^0.28.1",
44
+ "terser": "^5.50.0",
45
+ "typescript": "^5.7.3",
46
+ "vite": "^7.0.0",
47
+ "vite-plugin-dts": "^5.0.3"
48
+ },
49
+ "module": "./dist/index.mjs",
50
+ "sideEffects": [
51
+ "*.css"
52
+ ],
30
53
  "dependencies": {
31
54
  "zod": "^3.24.1"
32
- },
33
- "publishConfig": {
34
- "access": "public",
35
- "registry": "https://registry.npmjs.org/"
36
55
  }
37
56
  }