@nok-integration/storefront-react 0.20.7 → 0.20.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
- import { useContext, useEffect, useState, useRef, useCallback, useMemo, createContext, forwardRef, Fragment as Fragment$1 } from "react";
3
+ import { useContext, useEffect, useState, useRef, useCallback, useMemo, createContext, forwardRef, useLayoutEffect, Fragment as Fragment$1 } from "react";
4
4
  var client = {};
5
5
  var catalog = {};
6
6
  var zod = {};
@@ -5189,8 +5189,8 @@ function resolveAssetUrl(src, base) {
5189
5189
  const MAX_AGE_MS = 5 * 6e4;
5190
5190
  const CAPACITY = 60;
5191
5191
  class ProductCache {
5192
- constructor(now2 = () => Date.now()) {
5193
- this.now = now2;
5192
+ constructor(now = () => Date.now()) {
5193
+ this.now = now;
5194
5194
  }
5195
5195
  now;
5196
5196
  entries = /* @__PURE__ */ new Map();
@@ -5580,13 +5580,13 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5580
5580
  });
5581
5581
  }
5582
5582
  const badge$5 = "_badge_1bagf_1";
5583
- const neutral$1 = "_neutral_1bagf_12";
5583
+ const neutral$2 = "_neutral_1bagf_12";
5584
5584
  const success$1 = "_success_1bagf_17";
5585
5585
  const critical$2 = "_critical_1bagf_22";
5586
5586
  const promo = "_promo_1bagf_27";
5587
5587
  const styles$R = {
5588
5588
  badge: badge$5,
5589
- neutral: neutral$1,
5589
+ neutral: neutral$2,
5590
5590
  success: success$1,
5591
5591
  critical: critical$2,
5592
5592
  promo
@@ -5702,17 +5702,16 @@ function useTopOffset(ref, property, enabled = true) {
5702
5702
  };
5703
5703
  }, [ref, property, enabled]);
5704
5704
  }
5705
- const HOLD_MS = 1e3;
5706
- const TRAVERSAL_WINDOW_MS = 1e3;
5707
- const now = () => typeof performance !== "undefined" ? performance.now() : Date.now();
5708
- let lastTraversal = -Infinity;
5709
- if (typeof window !== "undefined") {
5710
- window.addEventListener("popstate", () => {
5711
- lastTraversal = now();
5712
- });
5713
- }
5714
- function followsTraversal() {
5715
- return now() - lastTraversal < TRAVERSAL_WINDOW_MS;
5705
+ const HOLD_MS = 2500;
5706
+ function withoutRestoration() {
5707
+ const history = typeof window !== "undefined" ? window.history : void 0;
5708
+ if (!history || !("scrollRestoration" in history)) return () => {
5709
+ };
5710
+ const previous = history.scrollRestoration;
5711
+ history.scrollRestoration = "manual";
5712
+ return () => {
5713
+ history.scrollRestoration = previous;
5714
+ };
5716
5715
  }
5717
5716
  const RELEASES = ["touchstart", "wheel", "keydown", "pointerdown"];
5718
5717
  function anchorTop(shouldHold = () => true) {
@@ -5741,6 +5740,7 @@ function anchorTop(shouldHold = () => true) {
5741
5740
  });
5742
5741
  return release;
5743
5742
  }
5743
+ const useMountEffect$1 = typeof window === "undefined" ? useEffect : useLayoutEffect;
5744
5744
  function documentTop(el) {
5745
5745
  let top2 = 0;
5746
5746
  for (let node = el; node; node = node.offsetParent) {
@@ -5752,11 +5752,15 @@ function beginsOnTheFirstViewport(el) {
5752
5752
  return documentTop(el) < window.innerHeight;
5753
5753
  }
5754
5754
  function useScreenAnchor(ref, enabled = true) {
5755
- useEffect(() => {
5755
+ useMountEffect$1(() => {
5756
5756
  const el = ref.current;
5757
5757
  if (!el || !enabled) return;
5758
- if (followsTraversal()) return;
5759
- return anchorTop(() => beginsOnTheFirstViewport(el));
5758
+ const restore = withoutRestoration();
5759
+ const release = anchorTop(() => beginsOnTheFirstViewport(el));
5760
+ return () => {
5761
+ release();
5762
+ restore();
5763
+ };
5760
5764
  }, [ref, enabled]);
5761
5765
  }
5762
5766
  const ShopSurface = forwardRef(function ShopSurface2({ tone, fill: fill2 = false, children, className, ...rest }, ref) {
@@ -5968,7 +5972,7 @@ const ES = {
5968
5972
  Refunded: "Reembolsado",
5969
5973
  "In progress": "En curso",
5970
5974
  Return: "Devolución",
5971
- Initiated: "Iniciada",
5975
+ Reported: "Notificada",
5972
5976
  Received: "Recibida",
5973
5977
  Completed: "Completada",
5974
5978
  item: "artículo",
@@ -6247,7 +6251,7 @@ const toast = "_toast_oz4st_82";
6247
6251
  const text$4 = "_text_oz4st_111";
6248
6252
  const message$1 = "_message_oz4st_120";
6249
6253
  const action = "_action_oz4st_133";
6250
- const neutral = "_neutral_oz4st_158";
6254
+ const neutral$1 = "_neutral_oz4st_158";
6251
6255
  const success = "_success_oz4st_163";
6252
6256
  const critical$1 = "_critical_oz4st_168";
6253
6257
  const rich = "_rich_oz4st_183";
@@ -6262,7 +6266,7 @@ const styles$K = {
6262
6266
  text: text$4,
6263
6267
  message: message$1,
6264
6268
  action,
6265
- neutral,
6269
+ neutral: neutral$1,
6266
6270
  success,
6267
6271
  critical: critical$1,
6268
6272
  rich,
@@ -8249,14 +8253,16 @@ function OrderConfirmationContent({ orderRef, locale: localeProp, onDone }) {
8249
8253
  })]
8250
8254
  });
8251
8255
  }
8252
- const badge$2 = "_badge_1w0zn_6";
8253
- const progress = "_progress_1w0zn_22";
8254
- const delivered = "_delivered_1w0zn_27";
8255
- const critical = "_critical_1w0zn_36";
8256
+ const badge$2 = "_badge_u46qd_6";
8257
+ const progress = "_progress_u46qd_22";
8258
+ const delivered = "_delivered_u46qd_27";
8259
+ const neutral = "_neutral_u46qd_34";
8260
+ const critical = "_critical_u46qd_43";
8256
8261
  const styles$w = {
8257
8262
  badge: badge$2,
8258
8263
  progress,
8259
8264
  delivered,
8265
+ neutral,
8260
8266
  critical
8261
8267
  };
8262
8268
  const LABEL = {
@@ -8276,26 +8282,26 @@ const TONE = {
8276
8282
  function OrderStatusBadge({ status }) {
8277
8283
  const t = useT();
8278
8284
  const label2 = LABEL[status] ?? status.replace(/_/g, " ");
8279
- const tone = TONE[status] ?? "progress";
8285
+ const tone = TONE[status] ?? "neutral";
8280
8286
  return jsx("span", {
8281
8287
  className: [styles$w.badge, styles$w[tone]].join(" "),
8282
8288
  children: t(label2)
8283
8289
  });
8284
8290
  }
8285
8291
  const RETURN_LABEL = {
8286
- reported: "Initiated",
8292
+ reported: "Reported",
8287
8293
  package_received: "Received",
8288
8294
  completed: "Completed"
8289
8295
  };
8290
8296
  const RETURN_TONE = {
8291
- reported: "progress",
8292
- package_received: "progress",
8293
- completed: "delivered"
8297
+ reported: "neutral",
8298
+ package_received: "neutral",
8299
+ completed: "neutral"
8294
8300
  };
8295
8301
  function ReturnStatusBadge({ status }) {
8296
8302
  const t = useT();
8297
8303
  const label2 = RETURN_LABEL[status] ?? status.replace(/_/g, " ");
8298
- const tone = RETURN_TONE[status] ?? "progress";
8304
+ const tone = RETURN_TONE[status] ?? "neutral";
8299
8305
  return jsx("span", {
8300
8306
  className: [styles$w.badge, styles$w[tone]].join(" "),
8301
8307
  children: t(label2)
@@ -10361,14 +10367,14 @@ function formatRemaining(ms) {
10361
10367
  return `${hh}:${mm}:${ss}`;
10362
10368
  }
10363
10369
  function PromoBanner({ promo: promo2 }) {
10364
- const [now2, setNow] = useState(null);
10370
+ const [now, setNow] = useState(null);
10365
10371
  useEffect(() => {
10366
10372
  if (!promo2.ends_at) return;
10367
10373
  setNow(Date.now());
10368
10374
  const id = setInterval(() => setNow(Date.now()), 1e3);
10369
10375
  return () => clearInterval(id);
10370
10376
  }, [promo2.ends_at]);
10371
- const remaining = promo2.ends_at && now2 !== null ? new Date(promo2.ends_at).getTime() - now2 : null;
10377
+ const remaining = promo2.ends_at && now !== null ? new Date(promo2.ends_at).getTime() - now : null;
10372
10378
  const showTimer = remaining !== null && remaining > 0;
10373
10379
  return jsxs("div", {
10374
10380
  className: styles$b.banner,
@@ -11277,8 +11283,9 @@ const styles$2 = {
11277
11283
  cta,
11278
11284
  mosaic
11279
11285
  };
11286
+ const useMountEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
11280
11287
  function useDocumentSnap(ref, enabled = true) {
11281
- useEffect(() => {
11288
+ useMountEffect(() => {
11282
11289
  const el = ref.current;
11283
11290
  if (!el || !enabled || typeof document === "undefined") return;
11284
11291
  const root2 = document.documentElement;
@@ -11287,11 +11294,9 @@ function useDocumentSnap(ref, enabled = true) {
11287
11294
  root2.style.scrollSnapType = "y mandatory";
11288
11295
  root2.style.scrollPaddingTop = "0px";
11289
11296
  const top2 = () => window.scrollTo(0, 0);
11290
- const entered = !followsTraversal();
11291
- if (entered) top2();
11292
- const frame2 = entered && typeof window.requestAnimationFrame === "function" ? window.requestAnimationFrame(top2) : null;
11293
- const release = entered ? anchorTop() : () => {
11294
- };
11297
+ top2();
11298
+ const frame2 = typeof window.requestAnimationFrame === "function" ? window.requestAnimationFrame(top2) : null;
11299
+ const release = anchorTop();
11295
11300
  const history = window.history;
11296
11301
  const previousRestoration = history && "scrollRestoration" in history ? history.scrollRestoration : null;
11297
11302
  if (previousRestoration !== null) history.scrollRestoration = "manual";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
- import { useContext, useEffect, useState, useRef, useCallback, useMemo, createContext, forwardRef, Fragment as Fragment$1 } from "react";
3
+ import { useContext, useEffect, useState, useRef, useCallback, useMemo, createContext, forwardRef, useLayoutEffect, Fragment as Fragment$1 } from "react";
4
4
  var client = {};
5
5
  var catalog = {};
6
6
  var zod = {};
@@ -5189,8 +5189,8 @@ function resolveAssetUrl(src, base) {
5189
5189
  const MAX_AGE_MS = 5 * 6e4;
5190
5190
  const CAPACITY = 60;
5191
5191
  class ProductCache {
5192
- constructor(now2 = () => Date.now()) {
5193
- this.now = now2;
5192
+ constructor(now = () => Date.now()) {
5193
+ this.now = now;
5194
5194
  }
5195
5195
  now;
5196
5196
  entries = /* @__PURE__ */ new Map();
@@ -5580,13 +5580,13 @@ function ShopVideo({ src, poster, fill: fill2 = false, className, style, priorit
5580
5580
  });
5581
5581
  }
5582
5582
  const badge$5 = "_badge_1bagf_1";
5583
- const neutral$1 = "_neutral_1bagf_12";
5583
+ const neutral$2 = "_neutral_1bagf_12";
5584
5584
  const success$1 = "_success_1bagf_17";
5585
5585
  const critical$2 = "_critical_1bagf_22";
5586
5586
  const promo = "_promo_1bagf_27";
5587
5587
  const styles$R = {
5588
5588
  badge: badge$5,
5589
- neutral: neutral$1,
5589
+ neutral: neutral$2,
5590
5590
  success: success$1,
5591
5591
  critical: critical$2,
5592
5592
  promo
@@ -5702,17 +5702,16 @@ function useTopOffset(ref, property, enabled = true) {
5702
5702
  };
5703
5703
  }, [ref, property, enabled]);
5704
5704
  }
5705
- const HOLD_MS = 1e3;
5706
- const TRAVERSAL_WINDOW_MS = 1e3;
5707
- const now = () => typeof performance !== "undefined" ? performance.now() : Date.now();
5708
- let lastTraversal = -Infinity;
5709
- if (typeof window !== "undefined") {
5710
- window.addEventListener("popstate", () => {
5711
- lastTraversal = now();
5712
- });
5713
- }
5714
- function followsTraversal() {
5715
- return now() - lastTraversal < TRAVERSAL_WINDOW_MS;
5705
+ const HOLD_MS = 2500;
5706
+ function withoutRestoration() {
5707
+ const history = typeof window !== "undefined" ? window.history : void 0;
5708
+ if (!history || !("scrollRestoration" in history)) return () => {
5709
+ };
5710
+ const previous = history.scrollRestoration;
5711
+ history.scrollRestoration = "manual";
5712
+ return () => {
5713
+ history.scrollRestoration = previous;
5714
+ };
5716
5715
  }
5717
5716
  const RELEASES = ["touchstart", "wheel", "keydown", "pointerdown"];
5718
5717
  function anchorTop(shouldHold = () => true) {
@@ -5741,6 +5740,7 @@ function anchorTop(shouldHold = () => true) {
5741
5740
  });
5742
5741
  return release;
5743
5742
  }
5743
+ const useMountEffect$1 = typeof window === "undefined" ? useEffect : useLayoutEffect;
5744
5744
  function documentTop(el) {
5745
5745
  let top2 = 0;
5746
5746
  for (let node = el; node; node = node.offsetParent) {
@@ -5752,11 +5752,15 @@ function beginsOnTheFirstViewport(el) {
5752
5752
  return documentTop(el) < window.innerHeight;
5753
5753
  }
5754
5754
  function useScreenAnchor(ref, enabled = true) {
5755
- useEffect(() => {
5755
+ useMountEffect$1(() => {
5756
5756
  const el = ref.current;
5757
5757
  if (!el || !enabled) return;
5758
- if (followsTraversal()) return;
5759
- return anchorTop(() => beginsOnTheFirstViewport(el));
5758
+ const restore = withoutRestoration();
5759
+ const release = anchorTop(() => beginsOnTheFirstViewport(el));
5760
+ return () => {
5761
+ release();
5762
+ restore();
5763
+ };
5760
5764
  }, [ref, enabled]);
5761
5765
  }
5762
5766
  const ShopSurface = forwardRef(function ShopSurface2({ tone, fill: fill2 = false, children, className, ...rest }, ref) {
@@ -5968,7 +5972,7 @@ const ES = {
5968
5972
  Refunded: "Reembolsado",
5969
5973
  "In progress": "En curso",
5970
5974
  Return: "Devolución",
5971
- Initiated: "Iniciada",
5975
+ Reported: "Notificada",
5972
5976
  Received: "Recibida",
5973
5977
  Completed: "Completada",
5974
5978
  item: "artículo",
@@ -6247,7 +6251,7 @@ const toast = "_toast_oz4st_82";
6247
6251
  const text$4 = "_text_oz4st_111";
6248
6252
  const message$1 = "_message_oz4st_120";
6249
6253
  const action = "_action_oz4st_133";
6250
- const neutral = "_neutral_oz4st_158";
6254
+ const neutral$1 = "_neutral_oz4st_158";
6251
6255
  const success = "_success_oz4st_163";
6252
6256
  const critical$1 = "_critical_oz4st_168";
6253
6257
  const rich = "_rich_oz4st_183";
@@ -6262,7 +6266,7 @@ const styles$K = {
6262
6266
  text: text$4,
6263
6267
  message: message$1,
6264
6268
  action,
6265
- neutral,
6269
+ neutral: neutral$1,
6266
6270
  success,
6267
6271
  critical: critical$1,
6268
6272
  rich,
@@ -8249,14 +8253,16 @@ function OrderConfirmationContent({ orderRef, locale: localeProp, onDone }) {
8249
8253
  })]
8250
8254
  });
8251
8255
  }
8252
- const badge$2 = "_badge_1w0zn_6";
8253
- const progress = "_progress_1w0zn_22";
8254
- const delivered = "_delivered_1w0zn_27";
8255
- const critical = "_critical_1w0zn_36";
8256
+ const badge$2 = "_badge_u46qd_6";
8257
+ const progress = "_progress_u46qd_22";
8258
+ const delivered = "_delivered_u46qd_27";
8259
+ const neutral = "_neutral_u46qd_34";
8260
+ const critical = "_critical_u46qd_43";
8256
8261
  const styles$w = {
8257
8262
  badge: badge$2,
8258
8263
  progress,
8259
8264
  delivered,
8265
+ neutral,
8260
8266
  critical
8261
8267
  };
8262
8268
  const LABEL = {
@@ -8276,26 +8282,26 @@ const TONE = {
8276
8282
  function OrderStatusBadge({ status }) {
8277
8283
  const t = useT();
8278
8284
  const label2 = LABEL[status] ?? status.replace(/_/g, " ");
8279
- const tone = TONE[status] ?? "progress";
8285
+ const tone = TONE[status] ?? "neutral";
8280
8286
  return jsx("span", {
8281
8287
  className: [styles$w.badge, styles$w[tone]].join(" "),
8282
8288
  children: t(label2)
8283
8289
  });
8284
8290
  }
8285
8291
  const RETURN_LABEL = {
8286
- reported: "Initiated",
8292
+ reported: "Reported",
8287
8293
  package_received: "Received",
8288
8294
  completed: "Completed"
8289
8295
  };
8290
8296
  const RETURN_TONE = {
8291
- reported: "progress",
8292
- package_received: "progress",
8293
- completed: "delivered"
8297
+ reported: "neutral",
8298
+ package_received: "neutral",
8299
+ completed: "neutral"
8294
8300
  };
8295
8301
  function ReturnStatusBadge({ status }) {
8296
8302
  const t = useT();
8297
8303
  const label2 = RETURN_LABEL[status] ?? status.replace(/_/g, " ");
8298
- const tone = RETURN_TONE[status] ?? "progress";
8304
+ const tone = RETURN_TONE[status] ?? "neutral";
8299
8305
  return jsx("span", {
8300
8306
  className: [styles$w.badge, styles$w[tone]].join(" "),
8301
8307
  children: t(label2)
@@ -10361,14 +10367,14 @@ function formatRemaining(ms) {
10361
10367
  return `${hh}:${mm}:${ss}`;
10362
10368
  }
10363
10369
  function PromoBanner({ promo: promo2 }) {
10364
- const [now2, setNow] = useState(null);
10370
+ const [now, setNow] = useState(null);
10365
10371
  useEffect(() => {
10366
10372
  if (!promo2.ends_at) return;
10367
10373
  setNow(Date.now());
10368
10374
  const id = setInterval(() => setNow(Date.now()), 1e3);
10369
10375
  return () => clearInterval(id);
10370
10376
  }, [promo2.ends_at]);
10371
- const remaining = promo2.ends_at && now2 !== null ? new Date(promo2.ends_at).getTime() - now2 : null;
10377
+ const remaining = promo2.ends_at && now !== null ? new Date(promo2.ends_at).getTime() - now : null;
10372
10378
  const showTimer = remaining !== null && remaining > 0;
10373
10379
  return jsxs("div", {
10374
10380
  className: styles$b.banner,
@@ -11277,8 +11283,9 @@ const styles$2 = {
11277
11283
  cta,
11278
11284
  mosaic
11279
11285
  };
11286
+ const useMountEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
11280
11287
  function useDocumentSnap(ref, enabled = true) {
11281
- useEffect(() => {
11288
+ useMountEffect(() => {
11282
11289
  const el = ref.current;
11283
11290
  if (!el || !enabled || typeof document === "undefined") return;
11284
11291
  const root2 = document.documentElement;
@@ -11287,11 +11294,9 @@ function useDocumentSnap(ref, enabled = true) {
11287
11294
  root2.style.scrollSnapType = "y mandatory";
11288
11295
  root2.style.scrollPaddingTop = "0px";
11289
11296
  const top2 = () => window.scrollTo(0, 0);
11290
- const entered = !followsTraversal();
11291
- if (entered) top2();
11292
- const frame2 = entered && typeof window.requestAnimationFrame === "function" ? window.requestAnimationFrame(top2) : null;
11293
- const release = entered ? anchorTop() : () => {
11294
- };
11297
+ top2();
11298
+ const frame2 = typeof window.requestAnimationFrame === "function" ? window.requestAnimationFrame(top2) : null;
11299
+ const release = anchorTop();
11295
11300
  const history = window.history;
11296
11301
  const previousRestoration = history && "scrollRestoration" in history ? history.scrollRestoration : null;
11297
11302
  if (previousRestoration !== null) history.scrollRestoration = "manual";
@@ -1619,7 +1619,7 @@
1619
1619
  ._done_vqbqs_94 {
1620
1620
  border-color: var(--color-surface-max);
1621
1621
  }
1622
- ._badge_1w0zn_6 {
1622
+ ._badge_u46qd_6 {
1623
1623
  display: inline-flex;
1624
1624
  align-items: center;
1625
1625
  justify-content: center;
@@ -1634,15 +1634,19 @@
1634
1634
  text-transform: uppercase;
1635
1635
  white-space: nowrap;
1636
1636
  }
1637
- ._progress_1w0zn_22 {
1637
+ ._progress_u46qd_22 {
1638
1638
  background: var(--color-state-surface-warning-soft);
1639
1639
  color: var(--color-state-text-warning);
1640
1640
  }
1641
- ._delivered_1w0zn_27 {
1641
+ ._delivered_u46qd_27 {
1642
1642
  background: var(--color-state-surface-success-soft);
1643
1643
  color: var(--color-state-text-success);
1644
1644
  }
1645
- ._critical_1w0zn_36 {
1645
+ ._neutral_u46qd_34 {
1646
+ background: var(--color-surface-subtle);
1647
+ color: var(--color-text-default);
1648
+ }
1649
+ ._critical_u46qd_43 {
1646
1650
  background: var(--color-state-surface-critical-soft);
1647
1651
  color: var(--color-state-text-critical);
1648
1652
  }
package/dist/styles.css CHANGED
@@ -1619,7 +1619,7 @@
1619
1619
  ._done_vqbqs_94 {
1620
1620
  border-color: var(--color-surface-max);
1621
1621
  }
1622
- ._badge_1w0zn_6 {
1622
+ ._badge_u46qd_6 {
1623
1623
  display: inline-flex;
1624
1624
  align-items: center;
1625
1625
  justify-content: center;
@@ -1634,15 +1634,19 @@
1634
1634
  text-transform: uppercase;
1635
1635
  white-space: nowrap;
1636
1636
  }
1637
- ._progress_1w0zn_22 {
1637
+ ._progress_u46qd_22 {
1638
1638
  background: var(--color-state-surface-warning-soft);
1639
1639
  color: var(--color-state-text-warning);
1640
1640
  }
1641
- ._delivered_1w0zn_27 {
1641
+ ._delivered_u46qd_27 {
1642
1642
  background: var(--color-state-surface-success-soft);
1643
1643
  color: var(--color-state-text-success);
1644
1644
  }
1645
- ._critical_1w0zn_36 {
1645
+ ._neutral_u46qd_34 {
1646
+ background: var(--color-surface-subtle);
1647
+ color: var(--color-text-default);
1648
+ }
1649
+ ._critical_u46qd_43 {
1646
1650
  background: var(--color-state-surface-critical-soft);
1647
1651
  color: var(--color-state-text-critical);
1648
1652
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nok-integration/storefront-react",
3
- "version": "0.20.7",
3
+ "version": "0.20.9",
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",