@nok-integration/storefront-react 0.19.43 → 0.19.45

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
@@ -3282,6 +3282,7 @@ export declare interface DaznShopConfig {
3282
3282
  assetBaseUrl?: string;
3283
3283
  market?: Market;
3284
3284
  navigate?: Navigate;
3285
+ prefetch?: Prefetch;
3285
3286
  /**
3286
3287
  * @deprecated No longer affects how anything renders, and safe to remove.
3287
3288
  *
@@ -4451,6 +4452,9 @@ export declare interface PdpBadgesProps {
4451
4452
  badges: string[];
4452
4453
  }
4453
4454
 
4455
+ /** Optional host router warm-up. Omit it and every navigation is a cold fetch. */
4456
+ export declare type Prefetch = (to: ShopRoute) => void;
4457
+
4454
4458
  /**
4455
4459
  * Displays a price with an optional discount. DISPLAY ONLY — it never computes totals;
4456
4460
  * any percentage shown is a presentational rounding of values the server already
@@ -5568,6 +5572,7 @@ declare interface ShopContextValue {
5568
5572
  /** Listen to the same event stream the host sees. Returns an unsubscribe. */
5569
5573
  subscribe: (listener: OnEvent) => () => void;
5570
5574
  navigate: (to: ShopRoute) => void;
5575
+ prefetch: ((to: ShopRoute) => void) | null;
5571
5576
  }
5572
5577
 
5573
5578
  export declare type ShopEvent = {
@@ -5966,18 +5971,28 @@ export declare type ShopTone = 'dark' | 'light';
5966
5971
  /**
5967
5972
  * Full-bleed background video: muted, looping, inline, and never showing a control.
5968
5973
  *
5969
- * The four attributes below are not stylistic. `muted` and `playsInline` together are the
5970
- * only combination iOS will start without a gesture — a video that is unmuted, or that is
5974
+ * The attributes below are not stylistic. `muted` and `playsInline` together are the only
5975
+ * combination iOS will start without a gesture — a video that is unmuted, or that is
5971
5976
  * allowed to go fullscreen, simply does not play, and the panel shows its poster forever.
5972
5977
  * `loop` is the brief. `controls` is absent because this is artwork behind copy, not a
5973
5978
  * player: a tap belongs to the CTA stretched over the panel, and a play button in the
5974
5979
  * middle of a category slide would sit directly on that hit area.
5975
5980
  *
5976
- * **Playback follows visibility.** The shop entry is five full-screen panels, so a naive
5977
- * page decodes five simultaneous streams for four panels nobody is looking at. Each clip
5978
- * starts when its panel comes into view and pauses when it leaves, which keeps one video
5979
- * decoding at a time. Fetching is deferred the same way: `preload="none"` until the
5980
- * observer fires, so a fan who never scrolls past the hero pays for the hero alone.
5981
+ * **There is no `autoplay` attribute, and its absence is what makes `preload` mean
5982
+ * anything.** A `<video autoplay preload="none">` is a contradiction the browser resolves
5983
+ * in favour of autoplay: WebKit ignores the `preload` hint and begins fetching at once,
5984
+ * because it has been told the clip is going to play regardless. On the shop entry that is
5985
+ * five full-screen clips, several megabytes, all pulling against each other on a phone from
5986
+ * the moment the screen opens — which is slowest for the one panel a fan is actually
5987
+ * looking at. Playback is driven from the observer below instead, so the clips still start
5988
+ * by themselves and still loop, and `preload` is honoured.
5989
+ *
5990
+ * **Playback follows visibility; fetching runs one screen ahead of it.** Each clip plays
5991
+ * when its panel comes into view and pauses when it leaves, which keeps one video decoding
5992
+ * at a time. Downloading cannot wait that long: a clip that only starts arriving once its
5993
+ * panel is on screen shows its poster for as long as the file takes. So `preload` flips to
5994
+ * `auto` a screen out — the panel being approached is buffered before it is reached, and a
5995
+ * fan who never scrolls past the hero pays for the hero and its neighbour, not for all five.
5981
5996
  *
5982
5997
  * **Reduced motion is honoured by not playing at all.** Autoplaying background video is
5983
5998
  * exactly what the preference is about, and there is a good still to fall back to — the
@@ -6417,6 +6432,8 @@ export declare function useMoney(defaultLocale?: string): {
6417
6432
  */
6418
6433
  export declare function useNavigate(): ((to: ShopRoute) => void) | null;
6419
6434
 
6435
+ export declare function usePrefetch(): ((to: ShopRoute) => void) | null;
6436
+
6420
6437
  /**
6421
6438
  * The data behind a product screen: the product, then inventory and recommendations.
6422
6439
  *
package/dist/index.mjs CHANGED
@@ -5257,7 +5257,7 @@ function NoScreenTitle({ children }) {
5257
5257
  }
5258
5258
  const ShopContext = createContext(null);
5259
5259
  function DaznShopProvider({ children, ...config }) {
5260
- const { apiBaseUrl, getToken, market, navigate: hostNavigate, sessionTransport = "bearer", theme = "auto", notifications = "internal", onEvent, locale, assetBaseUrl } = config;
5260
+ const { apiBaseUrl, getToken, market, navigate: hostNavigate, prefetch: hostPrefetch, sessionTransport = "bearer", theme = "auto", notifications = "internal", onEvent, locale, assetBaseUrl } = config;
5261
5261
  const listeners = useRef(/* @__PURE__ */ new Set());
5262
5262
  const subscribe = useCallback((listener) => {
5263
5263
  listeners.current.add(listener);
@@ -5320,8 +5320,9 @@ function DaznShopProvider({ children, ...config }) {
5320
5320
  assetBaseUrl,
5321
5321
  emit,
5322
5322
  subscribe,
5323
- navigate
5324
- }), [api, market, products, theme, notifications, locale, assetBaseUrl, emit, subscribe, navigate]);
5323
+ navigate,
5324
+ prefetch: hostPrefetch ?? null
5325
+ }), [api, market, products, theme, notifications, locale, assetBaseUrl, emit, subscribe, navigate, hostPrefetch]);
5325
5326
  return jsx(ShopContext.Provider, {
5326
5327
  value: value2,
5327
5328
  children: jsx(ScreenTitleProvider, {
@@ -5345,6 +5346,9 @@ function useShopApi() {
5345
5346
  function useNavigate() {
5346
5347
  return useShopOptional()?.navigate ?? null;
5347
5348
  }
5349
+ function usePrefetch() {
5350
+ return useShopOptional()?.prefetch ?? null;
5351
+ }
5348
5352
  function useAssetUrl() {
5349
5353
  const base = useShopOptional()?.assetBaseUrl;
5350
5354
  return useCallback((src) => resolveAssetUrl(src, base), [base]);
@@ -5355,7 +5359,35 @@ function useShopEvent() {
5355
5359
  }
5356
5360
  function ShopLink({ to, children, ...rest }) {
5357
5361
  const navigate = useNavigate();
5362
+ const prefetch = usePrefetch();
5363
+ const anchor2 = useRef(null);
5364
+ const warmed = useRef(false);
5365
+ const warm = () => {
5366
+ if (warmed.current || !prefetch) return;
5367
+ warmed.current = true;
5368
+ prefetch(to);
5369
+ };
5370
+ useEffect(() => {
5371
+ warmed.current = false;
5372
+ }, [to]);
5373
+ useEffect(() => {
5374
+ const el = anchor2.current;
5375
+ if (!el || !prefetch || typeof IntersectionObserver === "undefined") return;
5376
+ const observer = new IntersectionObserver((entries) => {
5377
+ for (const entry of entries) {
5378
+ if (!entry.isIntersecting) continue;
5379
+ observer.disconnect();
5380
+ warm();
5381
+ }
5382
+ }, {
5383
+ rootMargin: "200px"
5384
+ });
5385
+ observer.observe(el);
5386
+ return () => observer.disconnect();
5387
+ }, [prefetch, to]);
5358
5388
  return jsx("a", {
5389
+ ref: anchor2,
5390
+ onPointerDown: warm,
5359
5391
  href: to,
5360
5392
  onClick: (event) => {
5361
5393
  if (!navigate || event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || rest.target && rest.target !== "_self") {
@@ -5399,6 +5431,7 @@ function ShopImage({ src, alt, fill: fill2 = false, width, height, sizes, classN
5399
5431
  fetchPriority: priority ? "high" : void 0
5400
5432
  });
5401
5433
  }
5434
+ const WARM_MARGIN = "100%";
5402
5435
  function ShopVideo({ src, poster, fill: fill2 = false, className, style, priority = false }) {
5403
5436
  const assetUrl = useAssetUrl();
5404
5437
  const ref = useRef(null);
@@ -5406,6 +5439,9 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5406
5439
  const el = ref.current;
5407
5440
  if (!el || typeof IntersectionObserver === "undefined") return;
5408
5441
  const reduced = window.matchMedia?.("(prefers-reduced-motion: reduce)");
5442
+ const fetchNow = () => {
5443
+ if (el.preload === "none") el.preload = "auto";
5444
+ };
5409
5445
  const play = () => {
5410
5446
  if (reduced?.matches) {
5411
5447
  el.pause();
@@ -5414,10 +5450,18 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5414
5450
  void el.play().catch(() => {
5415
5451
  });
5416
5452
  };
5417
- const observer = new IntersectionObserver((entries) => {
5453
+ const warm = new IntersectionObserver((entries) => {
5454
+ if (!entries.some((entry) => entry.isIntersecting)) return;
5455
+ if (!reduced?.matches) fetchNow();
5456
+ warm.disconnect();
5457
+ }, {
5458
+ rootMargin: WARM_MARGIN
5459
+ });
5460
+ warm.observe(el);
5461
+ const playback = new IntersectionObserver((entries) => {
5418
5462
  for (const entry of entries) {
5419
5463
  if (entry.isIntersecting) {
5420
- if (el.preload === "none") el.preload = "auto";
5464
+ fetchNow();
5421
5465
  play();
5422
5466
  } else {
5423
5467
  el.pause();
@@ -5426,10 +5470,11 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5426
5470
  }, {
5427
5471
  threshold: 0.25
5428
5472
  });
5429
- observer.observe(el);
5473
+ playback.observe(el);
5430
5474
  reduced?.addEventListener("change", play);
5431
5475
  return () => {
5432
- observer.disconnect();
5476
+ warm.disconnect();
5477
+ playback.disconnect();
5433
5478
  reduced?.removeEventListener("change", play);
5434
5479
  };
5435
5480
  }, []);
@@ -5448,7 +5493,6 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5448
5493
  ...fillStyle,
5449
5494
  ...style
5450
5495
  },
5451
- autoPlay: true,
5452
5496
  loop: true,
5453
5497
  muted: true,
5454
5498
  playsInline: true,
@@ -8698,16 +8742,16 @@ function RailCarousel({ title: title2, products, seeAllTo, inset: inset2 }) {
8698
8742
  })]
8699
8743
  });
8700
8744
  }
8701
- const overlay$2 = "_overlay_fszc5_1";
8702
- const scrim$4 = "_scrim_fszc5_10";
8703
- const sheet$2 = "_sheet_fszc5_16";
8704
- const grabArea = "_grabArea_fszc5_41";
8705
- const grabber = "_grabber_fszc5_51";
8706
- const header$4 = "_header_fszc5_59";
8707
- const title$c = "_title_fszc5_67";
8708
- const close$1 = "_close_fszc5_71";
8709
- const body$4 = "_body_fszc5_84";
8710
- const footer = "_footer_fszc5_97";
8745
+ const overlay$2 = "_overlay_uxpgl_1";
8746
+ const scrim$4 = "_scrim_uxpgl_10";
8747
+ const sheet$2 = "_sheet_uxpgl_16";
8748
+ const grabArea = "_grabArea_uxpgl_41";
8749
+ const grabber = "_grabber_uxpgl_51";
8750
+ const header$4 = "_header_uxpgl_59";
8751
+ const title$c = "_title_uxpgl_67";
8752
+ const close$1 = "_close_uxpgl_71";
8753
+ const body$4 = "_body_uxpgl_84";
8754
+ const footer = "_footer_uxpgl_97";
8711
8755
  const styles$o = {
8712
8756
  overlay: overlay$2,
8713
8757
  scrim: scrim$4,
@@ -9163,14 +9207,14 @@ function StickyCtaBar({ children, info: info2, variant = "floating" }) {
9163
9207
  })]
9164
9208
  });
9165
9209
  }
9166
- const surface = "_surface_j3seb_15";
9167
- const screen = "_screen_j3seb_20";
9168
- const body$3 = "_body_j3seb_12";
9169
- const items = "_items_j3seb_34";
9170
- const sectionHeader = "_sectionHeader_j3seb_40";
9171
- const sectionTitle = "_sectionTitle_j3seb_46";
9172
- const count = "_count_j3seb_55";
9173
- const lines = "_lines_j3seb_79";
9210
+ const surface = "_surface_15488_15";
9211
+ const screen = "_screen_15488_20";
9212
+ const body$3 = "_body_15488_12";
9213
+ const items = "_items_15488_34";
9214
+ const sectionHeader = "_sectionHeader_15488_40";
9215
+ const sectionTitle = "_sectionTitle_15488_46";
9216
+ const count = "_count_15488_55";
9217
+ const lines = "_lines_15488_79";
9174
9218
  const styles$j = {
9175
9219
  surface,
9176
9220
  screen,
@@ -11702,6 +11746,7 @@ export {
11702
11746
  useCartSheet,
11703
11747
  useMoney,
11704
11748
  useNavigate,
11749
+ usePrefetch,
11705
11750
  useProduct,
11706
11751
  useShopApi,
11707
11752
  useShopEvent,
@@ -5257,7 +5257,7 @@ function NoScreenTitle({ children }) {
5257
5257
  }
5258
5258
  const ShopContext = createContext(null);
5259
5259
  function DaznShopProvider({ children, ...config }) {
5260
- const { apiBaseUrl, getToken, market, navigate: hostNavigate, sessionTransport = "bearer", theme = "auto", notifications = "internal", onEvent, locale, assetBaseUrl } = config;
5260
+ const { apiBaseUrl, getToken, market, navigate: hostNavigate, prefetch: hostPrefetch, sessionTransport = "bearer", theme = "auto", notifications = "internal", onEvent, locale, assetBaseUrl } = config;
5261
5261
  const listeners = useRef(/* @__PURE__ */ new Set());
5262
5262
  const subscribe = useCallback((listener) => {
5263
5263
  listeners.current.add(listener);
@@ -5320,8 +5320,9 @@ function DaznShopProvider({ children, ...config }) {
5320
5320
  assetBaseUrl,
5321
5321
  emit,
5322
5322
  subscribe,
5323
- navigate
5324
- }), [api, market, products, theme, notifications, locale, assetBaseUrl, emit, subscribe, navigate]);
5323
+ navigate,
5324
+ prefetch: hostPrefetch ?? null
5325
+ }), [api, market, products, theme, notifications, locale, assetBaseUrl, emit, subscribe, navigate, hostPrefetch]);
5325
5326
  return jsx(ShopContext.Provider, {
5326
5327
  value: value2,
5327
5328
  children: jsx(ScreenTitleProvider, {
@@ -5345,6 +5346,9 @@ function useShopApi() {
5345
5346
  function useNavigate() {
5346
5347
  return useShopOptional()?.navigate ?? null;
5347
5348
  }
5349
+ function usePrefetch() {
5350
+ return useShopOptional()?.prefetch ?? null;
5351
+ }
5348
5352
  function useAssetUrl() {
5349
5353
  const base = useShopOptional()?.assetBaseUrl;
5350
5354
  return useCallback((src) => resolveAssetUrl(src, base), [base]);
@@ -5355,7 +5359,35 @@ function useShopEvent() {
5355
5359
  }
5356
5360
  function ShopLink({ to, children, ...rest }) {
5357
5361
  const navigate = useNavigate();
5362
+ const prefetch = usePrefetch();
5363
+ const anchor2 = useRef(null);
5364
+ const warmed = useRef(false);
5365
+ const warm = () => {
5366
+ if (warmed.current || !prefetch) return;
5367
+ warmed.current = true;
5368
+ prefetch(to);
5369
+ };
5370
+ useEffect(() => {
5371
+ warmed.current = false;
5372
+ }, [to]);
5373
+ useEffect(() => {
5374
+ const el = anchor2.current;
5375
+ if (!el || !prefetch || typeof IntersectionObserver === "undefined") return;
5376
+ const observer = new IntersectionObserver((entries) => {
5377
+ for (const entry of entries) {
5378
+ if (!entry.isIntersecting) continue;
5379
+ observer.disconnect();
5380
+ warm();
5381
+ }
5382
+ }, {
5383
+ rootMargin: "200px"
5384
+ });
5385
+ observer.observe(el);
5386
+ return () => observer.disconnect();
5387
+ }, [prefetch, to]);
5358
5388
  return jsx("a", {
5389
+ ref: anchor2,
5390
+ onPointerDown: warm,
5359
5391
  href: to,
5360
5392
  onClick: (event) => {
5361
5393
  if (!navigate || event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || rest.target && rest.target !== "_self") {
@@ -5399,6 +5431,7 @@ function ShopImage({ src, alt, fill: fill2 = false, width, height, sizes, classN
5399
5431
  fetchPriority: priority ? "high" : void 0
5400
5432
  });
5401
5433
  }
5434
+ const WARM_MARGIN = "100%";
5402
5435
  function ShopVideo({ src, poster, fill: fill2 = false, className, style, priority = false }) {
5403
5436
  const assetUrl = useAssetUrl();
5404
5437
  const ref = useRef(null);
@@ -5406,6 +5439,9 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5406
5439
  const el = ref.current;
5407
5440
  if (!el || typeof IntersectionObserver === "undefined") return;
5408
5441
  const reduced = window.matchMedia?.("(prefers-reduced-motion: reduce)");
5442
+ const fetchNow = () => {
5443
+ if (el.preload === "none") el.preload = "auto";
5444
+ };
5409
5445
  const play = () => {
5410
5446
  if (reduced?.matches) {
5411
5447
  el.pause();
@@ -5414,10 +5450,18 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5414
5450
  void el.play().catch(() => {
5415
5451
  });
5416
5452
  };
5417
- const observer = new IntersectionObserver((entries) => {
5453
+ const warm = new IntersectionObserver((entries) => {
5454
+ if (!entries.some((entry) => entry.isIntersecting)) return;
5455
+ if (!reduced?.matches) fetchNow();
5456
+ warm.disconnect();
5457
+ }, {
5458
+ rootMargin: WARM_MARGIN
5459
+ });
5460
+ warm.observe(el);
5461
+ const playback = new IntersectionObserver((entries) => {
5418
5462
  for (const entry of entries) {
5419
5463
  if (entry.isIntersecting) {
5420
- if (el.preload === "none") el.preload = "auto";
5464
+ fetchNow();
5421
5465
  play();
5422
5466
  } else {
5423
5467
  el.pause();
@@ -5426,10 +5470,11 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5426
5470
  }, {
5427
5471
  threshold: 0.25
5428
5472
  });
5429
- observer.observe(el);
5473
+ playback.observe(el);
5430
5474
  reduced?.addEventListener("change", play);
5431
5475
  return () => {
5432
- observer.disconnect();
5476
+ warm.disconnect();
5477
+ playback.disconnect();
5433
5478
  reduced?.removeEventListener("change", play);
5434
5479
  };
5435
5480
  }, []);
@@ -5448,7 +5493,6 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5448
5493
  ...fillStyle,
5449
5494
  ...style
5450
5495
  },
5451
- autoPlay: true,
5452
5496
  loop: true,
5453
5497
  muted: true,
5454
5498
  playsInline: true,
@@ -8698,16 +8742,16 @@ function RailCarousel({ title: title2, products, seeAllTo, inset: inset2 }) {
8698
8742
  })]
8699
8743
  });
8700
8744
  }
8701
- const overlay$2 = "_overlay_fszc5_1";
8702
- const scrim$4 = "_scrim_fszc5_10";
8703
- const sheet$2 = "_sheet_fszc5_16";
8704
- const grabArea = "_grabArea_fszc5_41";
8705
- const grabber = "_grabber_fszc5_51";
8706
- const header$4 = "_header_fszc5_59";
8707
- const title$c = "_title_fszc5_67";
8708
- const close$1 = "_close_fszc5_71";
8709
- const body$4 = "_body_fszc5_84";
8710
- const footer = "_footer_fszc5_97";
8745
+ const overlay$2 = "_overlay_uxpgl_1";
8746
+ const scrim$4 = "_scrim_uxpgl_10";
8747
+ const sheet$2 = "_sheet_uxpgl_16";
8748
+ const grabArea = "_grabArea_uxpgl_41";
8749
+ const grabber = "_grabber_uxpgl_51";
8750
+ const header$4 = "_header_uxpgl_59";
8751
+ const title$c = "_title_uxpgl_67";
8752
+ const close$1 = "_close_uxpgl_71";
8753
+ const body$4 = "_body_uxpgl_84";
8754
+ const footer = "_footer_uxpgl_97";
8711
8755
  const styles$o = {
8712
8756
  overlay: overlay$2,
8713
8757
  scrim: scrim$4,
@@ -9163,14 +9207,14 @@ function StickyCtaBar({ children, info: info2, variant = "floating" }) {
9163
9207
  })]
9164
9208
  });
9165
9209
  }
9166
- const surface = "_surface_j3seb_15";
9167
- const screen = "_screen_j3seb_20";
9168
- const body$3 = "_body_j3seb_12";
9169
- const items = "_items_j3seb_34";
9170
- const sectionHeader = "_sectionHeader_j3seb_40";
9171
- const sectionTitle = "_sectionTitle_j3seb_46";
9172
- const count = "_count_j3seb_55";
9173
- const lines = "_lines_j3seb_79";
9210
+ const surface = "_surface_15488_15";
9211
+ const screen = "_screen_15488_20";
9212
+ const body$3 = "_body_15488_12";
9213
+ const items = "_items_15488_34";
9214
+ const sectionHeader = "_sectionHeader_15488_40";
9215
+ const sectionTitle = "_sectionTitle_15488_46";
9216
+ const count = "_count_15488_55";
9217
+ const lines = "_lines_15488_79";
9174
9218
  const styles$j = {
9175
9219
  surface,
9176
9220
  screen,
@@ -11702,6 +11746,7 @@ export {
11702
11746
  useCartSheet,
11703
11747
  useMoney,
11704
11748
  useNavigate,
11749
+ usePrefetch,
11705
11750
  useProduct,
11706
11751
  useShopApi,
11707
11752
  useShopEvent,
@@ -2120,7 +2120,7 @@
2120
2120
  width: 165px;
2121
2121
  max-width: none;
2122
2122
  }
2123
- ._overlay_fszc5_1 {
2123
+ ._overlay_uxpgl_1 {
2124
2124
  position: fixed;
2125
2125
  inset: 0;
2126
2126
  z-index: 900;
@@ -2128,12 +2128,12 @@
2128
2128
  align-items: flex-end;
2129
2129
  justify-content: center;
2130
2130
  }
2131
- ._scrim_fszc5_10 {
2131
+ ._scrim_uxpgl_10 {
2132
2132
  position: absolute;
2133
2133
  inset: 0;
2134
2134
  background: rgba(8, 14, 18, 0.5);
2135
2135
  }
2136
- ._sheet_fszc5_16 {
2136
+ ._sheet_uxpgl_16 {
2137
2137
  position: relative;
2138
2138
  width: 100%;
2139
2139
  max-width: 480px;
@@ -2142,10 +2142,10 @@
2142
2142
  border-radius: var(--radius-18) var(--radius-18) 0 0;
2143
2143
  display: flex;
2144
2144
  flex-direction: column;
2145
- animation: _slide-up_fszc5_1 200ms ease;
2145
+ animation: _slide-up_uxpgl_1 200ms ease;
2146
2146
  padding-bottom: var(--safe-area-bottom);
2147
2147
  }
2148
- @keyframes _slide-up_fszc5_1 {
2148
+ @keyframes _slide-up_uxpgl_1 {
2149
2149
  from {
2150
2150
  transform: translateY(100%);
2151
2151
  }
@@ -2153,32 +2153,32 @@
2153
2153
  transform: translateY(0);
2154
2154
  }
2155
2155
  }
2156
- ._grabArea_fszc5_41 {
2156
+ ._grabArea_uxpgl_41 {
2157
2157
  padding: var(--space-8) 0 var(--space-4);
2158
2158
  touch-action: none;
2159
2159
  cursor: grab;
2160
2160
  }
2161
- ._grabArea_fszc5_41:active {
2161
+ ._grabArea_uxpgl_41:active {
2162
2162
  cursor: grabbing;
2163
2163
  }
2164
- ._grabber_fszc5_51 {
2164
+ ._grabber_uxpgl_51 {
2165
2165
  width: 40px;
2166
2166
  height: 4px;
2167
2167
  margin: 0 auto;
2168
2168
  border-radius: 2px;
2169
2169
  background: var(--color-border-default);
2170
2170
  }
2171
- ._header_fszc5_59 {
2171
+ ._header_uxpgl_59 {
2172
2172
  display: flex;
2173
2173
  align-items: center;
2174
2174
  justify-content: space-between;
2175
2175
  padding: var(--space-16);
2176
2176
  border-bottom: 1px solid var(--color-border-default);
2177
2177
  }
2178
- ._title_fszc5_67 {
2178
+ ._title_uxpgl_67 {
2179
2179
  font-size: var(--type-heading-md-size);
2180
2180
  }
2181
- ._close_fszc5_71 {
2181
+ ._close_uxpgl_71 {
2182
2182
  min-width: var(--tap-target-min);
2183
2183
  min-height: var(--tap-target-min);
2184
2184
  display: inline-flex;
@@ -2190,16 +2190,16 @@
2190
2190
  cursor: pointer;
2191
2191
  color: var(--color-text-subtle);
2192
2192
  }
2193
- ._body_fszc5_84 {
2193
+ ._body_uxpgl_84 {
2194
2194
  overflow-y: auto;
2195
- padding: var(--space-16);
2195
+ padding: 0 var(--space-16) var(--space-16);
2196
2196
  flex: 1 1 auto;
2197
2197
  scrollbar-width: none;
2198
2198
  }
2199
- ._body_fszc5_84::-webkit-scrollbar {
2199
+ ._body_uxpgl_84::-webkit-scrollbar {
2200
2200
  display: none;
2201
2201
  }
2202
- ._footer_fszc5_97 {
2202
+ ._footer_uxpgl_97 {
2203
2203
  border-top: 1px solid var(--color-border-default);
2204
2204
  padding: var(--space-16);
2205
2205
  }
@@ -2442,33 +2442,33 @@
2442
2442
  ._actions_v20rr_49 > * {
2443
2443
  flex: 1 1 0;
2444
2444
  }
2445
- ._surface_j3seb_15 {
2445
+ ._surface_15488_15 {
2446
2446
  display: flex;
2447
2447
  flex-direction: column;
2448
2448
  }
2449
- ._screen_j3seb_20 {
2449
+ ._screen_15488_20 {
2450
2450
  display: flex;
2451
2451
  flex-direction: column;
2452
2452
  flex: 1 1 auto;
2453
2453
  }
2454
- ._body_j3seb_12 {
2454
+ ._body_15488_12 {
2455
2455
  display: flex;
2456
2456
  flex-direction: column;
2457
2457
  gap: var(--space-20);
2458
- padding: 0 var(--space-16);
2458
+ padding: var(--space-20) var(--space-16) 0;
2459
2459
  flex: 1 1 auto;
2460
2460
  }
2461
- ._items_j3seb_34 {
2461
+ ._items_15488_34 {
2462
2462
  display: flex;
2463
2463
  flex-direction: column;
2464
2464
  gap: var(--space-20);
2465
2465
  }
2466
- ._sectionHeader_j3seb_40 {
2466
+ ._sectionHeader_15488_40 {
2467
2467
  display: flex;
2468
2468
  align-items: center;
2469
2469
  gap: var(--space-12);
2470
2470
  }
2471
- ._sectionTitle_j3seb_46 {
2471
+ ._sectionTitle_15488_46 {
2472
2472
  margin: 0;
2473
2473
  font-size: var(--type-heading-md-size);
2474
2474
  line-height: 1.38;
@@ -2476,7 +2476,7 @@
2476
2476
  flex: 1 0 0;
2477
2477
  min-width: 0;
2478
2478
  }
2479
- ._count_j3seb_55 {
2479
+ ._count_15488_55 {
2480
2480
  display: inline-flex;
2481
2481
  align-items: center;
2482
2482
  justify-content: center;
@@ -2491,7 +2491,7 @@
2491
2491
  font-variant-numeric: tabular-nums;
2492
2492
  flex-shrink: 0;
2493
2493
  }
2494
- ._lines_j3seb_79 {
2494
+ ._lines_15488_79 {
2495
2495
  list-style: none;
2496
2496
  margin: 0;
2497
2497
  padding: 0;
package/dist/styles.css CHANGED
@@ -2120,7 +2120,7 @@
2120
2120
  width: 165px;
2121
2121
  max-width: none;
2122
2122
  }
2123
- ._overlay_fszc5_1 {
2123
+ ._overlay_uxpgl_1 {
2124
2124
  position: fixed;
2125
2125
  inset: 0;
2126
2126
  z-index: 900;
@@ -2128,12 +2128,12 @@
2128
2128
  align-items: flex-end;
2129
2129
  justify-content: center;
2130
2130
  }
2131
- ._scrim_fszc5_10 {
2131
+ ._scrim_uxpgl_10 {
2132
2132
  position: absolute;
2133
2133
  inset: 0;
2134
2134
  background: rgba(8, 14, 18, 0.5);
2135
2135
  }
2136
- ._sheet_fszc5_16 {
2136
+ ._sheet_uxpgl_16 {
2137
2137
  position: relative;
2138
2138
  width: 100%;
2139
2139
  max-width: 480px;
@@ -2142,10 +2142,10 @@
2142
2142
  border-radius: var(--radius-18) var(--radius-18) 0 0;
2143
2143
  display: flex;
2144
2144
  flex-direction: column;
2145
- animation: _slide-up_fszc5_1 200ms ease;
2145
+ animation: _slide-up_uxpgl_1 200ms ease;
2146
2146
  padding-bottom: var(--safe-area-bottom);
2147
2147
  }
2148
- @keyframes _slide-up_fszc5_1 {
2148
+ @keyframes _slide-up_uxpgl_1 {
2149
2149
  from {
2150
2150
  transform: translateY(100%);
2151
2151
  }
@@ -2153,32 +2153,32 @@
2153
2153
  transform: translateY(0);
2154
2154
  }
2155
2155
  }
2156
- ._grabArea_fszc5_41 {
2156
+ ._grabArea_uxpgl_41 {
2157
2157
  padding: var(--space-8) 0 var(--space-4);
2158
2158
  touch-action: none;
2159
2159
  cursor: grab;
2160
2160
  }
2161
- ._grabArea_fszc5_41:active {
2161
+ ._grabArea_uxpgl_41:active {
2162
2162
  cursor: grabbing;
2163
2163
  }
2164
- ._grabber_fszc5_51 {
2164
+ ._grabber_uxpgl_51 {
2165
2165
  width: 40px;
2166
2166
  height: 4px;
2167
2167
  margin: 0 auto;
2168
2168
  border-radius: 2px;
2169
2169
  background: var(--color-border-default);
2170
2170
  }
2171
- ._header_fszc5_59 {
2171
+ ._header_uxpgl_59 {
2172
2172
  display: flex;
2173
2173
  align-items: center;
2174
2174
  justify-content: space-between;
2175
2175
  padding: var(--space-16);
2176
2176
  border-bottom: 1px solid var(--color-border-default);
2177
2177
  }
2178
- ._title_fszc5_67 {
2178
+ ._title_uxpgl_67 {
2179
2179
  font-size: var(--type-heading-md-size);
2180
2180
  }
2181
- ._close_fszc5_71 {
2181
+ ._close_uxpgl_71 {
2182
2182
  min-width: var(--tap-target-min);
2183
2183
  min-height: var(--tap-target-min);
2184
2184
  display: inline-flex;
@@ -2190,16 +2190,16 @@
2190
2190
  cursor: pointer;
2191
2191
  color: var(--color-text-subtle);
2192
2192
  }
2193
- ._body_fszc5_84 {
2193
+ ._body_uxpgl_84 {
2194
2194
  overflow-y: auto;
2195
- padding: var(--space-16);
2195
+ padding: 0 var(--space-16) var(--space-16);
2196
2196
  flex: 1 1 auto;
2197
2197
  scrollbar-width: none;
2198
2198
  }
2199
- ._body_fszc5_84::-webkit-scrollbar {
2199
+ ._body_uxpgl_84::-webkit-scrollbar {
2200
2200
  display: none;
2201
2201
  }
2202
- ._footer_fszc5_97 {
2202
+ ._footer_uxpgl_97 {
2203
2203
  border-top: 1px solid var(--color-border-default);
2204
2204
  padding: var(--space-16);
2205
2205
  }
@@ -2442,33 +2442,33 @@
2442
2442
  ._actions_v20rr_49 > * {
2443
2443
  flex: 1 1 0;
2444
2444
  }
2445
- ._surface_j3seb_15 {
2445
+ ._surface_15488_15 {
2446
2446
  display: flex;
2447
2447
  flex-direction: column;
2448
2448
  }
2449
- ._screen_j3seb_20 {
2449
+ ._screen_15488_20 {
2450
2450
  display: flex;
2451
2451
  flex-direction: column;
2452
2452
  flex: 1 1 auto;
2453
2453
  }
2454
- ._body_j3seb_12 {
2454
+ ._body_15488_12 {
2455
2455
  display: flex;
2456
2456
  flex-direction: column;
2457
2457
  gap: var(--space-20);
2458
- padding: 0 var(--space-16);
2458
+ padding: var(--space-20) var(--space-16) 0;
2459
2459
  flex: 1 1 auto;
2460
2460
  }
2461
- ._items_j3seb_34 {
2461
+ ._items_15488_34 {
2462
2462
  display: flex;
2463
2463
  flex-direction: column;
2464
2464
  gap: var(--space-20);
2465
2465
  }
2466
- ._sectionHeader_j3seb_40 {
2466
+ ._sectionHeader_15488_40 {
2467
2467
  display: flex;
2468
2468
  align-items: center;
2469
2469
  gap: var(--space-12);
2470
2470
  }
2471
- ._sectionTitle_j3seb_46 {
2471
+ ._sectionTitle_15488_46 {
2472
2472
  margin: 0;
2473
2473
  font-size: var(--type-heading-md-size);
2474
2474
  line-height: 1.38;
@@ -2476,7 +2476,7 @@
2476
2476
  flex: 1 0 0;
2477
2477
  min-width: 0;
2478
2478
  }
2479
- ._count_j3seb_55 {
2479
+ ._count_15488_55 {
2480
2480
  display: inline-flex;
2481
2481
  align-items: center;
2482
2482
  justify-content: center;
@@ -2491,7 +2491,7 @@
2491
2491
  font-variant-numeric: tabular-nums;
2492
2492
  flex-shrink: 0;
2493
2493
  }
2494
- ._lines_j3seb_79 {
2494
+ ._lines_15488_79 {
2495
2495
  list-style: none;
2496
2496
  margin: 0;
2497
2497
  padding: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nok-integration/storefront-react",
3
- "version": "0.19.43",
3
+ "version": "0.19.45",
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
6
  "type": "module",