@templatical/editor 0.8.4 → 0.8.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.
Files changed (88) hide show
  1. package/dist/{AiChatSidebar-CnRXeK77.js → AiChatSidebar-uhkhnXQd.js} +1 -1
  2. package/dist/{AiFeatureMenu-BYDDrpj6.js → AiFeatureMenu-DXNKvXP5.js} +1 -1
  3. package/dist/{CloudEditor-B9a_K6Cm.js → CloudEditor-BSkPQjwo.js} +6 -6
  4. package/dist/{CollaboratorBar-HN4whzM-.js → CollaboratorBar-CP76Sh6c.js} +1 -1
  5. package/dist/{DesignReferenceSidebar-0GwjUn2V.js → DesignReferenceSidebar-CfJqJ7l6.js} +1 -1
  6. package/dist/{ModuleBrowserModal-DPZBsvqk.js → ModuleBrowserModal-BFQTm6uY.js} +4 -4
  7. package/dist/{ModulePreviewCanvas-CK4j11-e.js → ModulePreviewCanvas-DeqMpo73.js} +1 -1
  8. package/dist/{ParagraphEditor-DBus_iHH.js → ParagraphEditor-DqomSbW3.js} +13 -13
  9. package/dist/{SaveModuleDialog-DORRSbBo.js → SaveModuleDialog-DKcpPeWd.js} +2 -2
  10. package/dist/{SnapshotHistory-DTMVEk03.js → SnapshotHistory-Z9RQj53S.js} +1 -1
  11. package/dist/{TestEmailModal-DJmYp0Qi.js → TestEmailModal-C8DhylO1.js} +2 -2
  12. package/dist/{TitleEditor-70d9AF1V.js → TitleEditor-CgLrn6R3.js} +5 -5
  13. package/dist/{TplModal-BEfwlvPC.js → TplModal-CbwRwmR3.js} +1 -1
  14. package/dist/{blockTypeIcons-2DRoPa3K.js → blockTypeIcons-CccKujXP.js} +1 -1
  15. package/dist/bundle-stats.json +6 -6
  16. package/dist/cdn/chunks/{AiFeatureMenu-CcuKnisc.js → AiFeatureMenu-ChNv7XXj.js} +2 -2
  17. package/dist/cdn/chunks/{AiFeatureMenu-CcuKnisc.js.map → AiFeatureMenu-ChNv7XXj.js.map} +1 -1
  18. package/dist/cdn/chunks/{BlockIssueBadge-Sr3is7Wr.js → BlockIssueBadge-BovmWgok.js} +2 -2
  19. package/dist/cdn/chunks/{BlockIssueBadge-Sr3is7Wr.js.map → BlockIssueBadge-BovmWgok.js.map} +1 -1
  20. package/dist/cdn/chunks/{CloudEditor-Bi10d2Gq.js → CloudEditor-CHF_P5OL.js} +7 -7
  21. package/dist/cdn/chunks/{CloudEditor-Bi10d2Gq.js.map → CloudEditor-CHF_P5OL.js.map} +1 -1
  22. package/dist/cdn/chunks/{CollaboratorBar-C0zeecvl.js → CollaboratorBar-Bjr5YSh0.js} +3 -3
  23. package/dist/cdn/chunks/{CollaboratorBar-C0zeecvl.js.map → CollaboratorBar-Bjr5YSh0.js.map} +1 -1
  24. package/dist/cdn/chunks/{CountdownBlock-CpSUUDDs.js → CountdownBlock-KyzvhjMF.js} +2 -2
  25. package/dist/cdn/chunks/{CountdownBlock-CpSUUDDs.js.map → CountdownBlock-KyzvhjMF.js.map} +1 -1
  26. package/dist/cdn/chunks/{CountdownToolbar-BBzdR-00.js → CountdownToolbar-bJtMHGYz.js} +3 -3
  27. package/dist/cdn/chunks/{CountdownToolbar-BBzdR-00.js.map → CountdownToolbar-bJtMHGYz.js.map} +1 -1
  28. package/dist/cdn/chunks/{IssuesPanel-Bthq6qoZ.js → IssuesPanel-DFSYTQXy.js} +3 -3
  29. package/dist/cdn/chunks/{IssuesPanel-Bthq6qoZ.js.map → IssuesPanel-DFSYTQXy.js.map} +1 -1
  30. package/dist/cdn/chunks/{ModuleBrowserModal-CFMd6M7E.js → ModuleBrowserModal-DS0BGRhZ.js} +5 -5
  31. package/dist/cdn/chunks/{ModuleBrowserModal-CFMd6M7E.js.map → ModuleBrowserModal-DS0BGRhZ.js.map} +1 -1
  32. package/dist/cdn/chunks/{ModulePreviewCanvas-BkcPcF5C.js → ModulePreviewCanvas-Dwn2cA5a.js} +2 -2
  33. package/dist/cdn/chunks/{ModulePreviewCanvas-BkcPcF5C.js.map → ModulePreviewCanvas-Dwn2cA5a.js.map} +1 -1
  34. package/dist/cdn/chunks/{NumberWithSuffix-C2hH_ZIK.js → NumberWithSuffix-BNBeHv0P.js} +2 -2
  35. package/dist/cdn/chunks/{NumberWithSuffix-C2hH_ZIK.js.map → NumberWithSuffix-BNBeHv0P.js.map} +1 -1
  36. package/dist/cdn/chunks/{ParagraphEditor-BIWXLPfu.js → ParagraphEditor-C4TrTIOm.js} +16 -16
  37. package/dist/cdn/chunks/{ParagraphEditor-BIWXLPfu.js.map → ParagraphEditor-C4TrTIOm.js.map} +1 -1
  38. package/dist/cdn/chunks/{RichTextEditorContent-DU0gc4bi.js → RichTextEditorContent-HNFFL4aK.js} +2 -2
  39. package/dist/cdn/chunks/{RichTextEditorContent-DU0gc4bi.js.map → RichTextEditorContent-HNFFL4aK.js.map} +1 -1
  40. package/dist/cdn/chunks/{SaveModuleDialog-DR9EZlWe.js → SaveModuleDialog-CbHqqeID.js} +2 -2
  41. package/dist/cdn/chunks/{SaveModuleDialog-DR9EZlWe.js.map → SaveModuleDialog-CbHqqeID.js.map} +1 -1
  42. package/dist/cdn/chunks/{TitleEditor-DZcx2N4R.js → TitleEditor-gr-eBUq_.js} +8 -8
  43. package/dist/cdn/chunks/{TitleEditor-DZcx2N4R.js.map → TitleEditor-gr-eBUq_.js.map} +1 -1
  44. package/dist/cdn/chunks/{blockTypeIcons-eVGGIdne.js → blockTypeIcons-BUlgu9JL.js} +3 -3
  45. package/dist/cdn/chunks/{blockTypeIcons-eVGGIdne.js.map → blockTypeIcons-BUlgu9JL.js.map} +1 -1
  46. package/dist/cdn/chunks/{extensions-CvCoOuWB.js → extensions-DK_lVs7A.js} +3 -3
  47. package/dist/cdn/chunks/{extensions-CvCoOuWB.js.map → extensions-DK_lVs7A.js.map} +1 -1
  48. package/dist/cdn/chunks/{features-CUYy5kZQ.js → features-LiilsBqW.js} +806 -773
  49. package/dist/cdn/chunks/features-LiilsBqW.js.map +1 -0
  50. package/dist/cdn/chunks/{icons-C4zY5-I3.js → icons-Bn2SIR30.js} +2 -2
  51. package/dist/cdn/chunks/{icons-C4zY5-I3.js.map → icons-Bn2SIR30.js.map} +1 -1
  52. package/dist/cdn/chunks/{media-library-BNt3msId.js → media-library-Bb2PavAd.js} +3 -3
  53. package/dist/cdn/chunks/{media-library-BNt3msId.js.map → media-library-Bb2PavAd.js.map} +1 -1
  54. package/dist/cdn/chunks/{quality-BTPRPGB-.js → quality-Bpj6kNxR.js} +180 -154
  55. package/dist/cdn/chunks/{quality-BTPRPGB-.js.map → quality-Bpj6kNxR.js.map} +1 -1
  56. package/dist/cdn/chunks/{renderer-IOmuuZjJ.js → renderer-CYYyu-Di.js} +130 -96
  57. package/dist/cdn/chunks/{renderer-IOmuuZjJ.js.map → renderer-CYYyu-Di.js.map} +1 -1
  58. package/dist/cdn/chunks/{src-Dp0ZFQ4-.js → src-CQjZnxvw.js} +4 -4
  59. package/dist/cdn/chunks/{src-Dp0ZFQ4-.js.map → src-CQjZnxvw.js.map} +1 -1
  60. package/dist/cdn/chunks/{styles-DtgjgsBH.js → styles-5g8XOS68.js} +8 -8
  61. package/dist/cdn/chunks/{styles-DtgjgsBH.js.map → styles-5g8XOS68.js.map} +1 -1
  62. package/dist/cdn/chunks/{tiptap-BErAJEvo.js → tiptap-BBbH3IT9.js} +849 -725
  63. package/dist/cdn/chunks/tiptap-BBbH3IT9.js.map +1 -0
  64. package/dist/cdn/editor.js +5 -5
  65. package/dist/{cloud-Dz8Ay2FM.js → cloud-VxYMtfXC.js} +1 -1
  66. package/dist/{dist-BygsE-n3.js → dist-BDgf2G-V.js} +453 -314
  67. package/dist/{dist-BtDBsF3N.js → dist-BxP6TB0l.js} +2 -2
  68. package/dist/{dist-DWhP3Dp2.js → dist-BzuC8o3y.js} +1209 -1217
  69. package/dist/{dist-v-O2Subd.js → dist-C0jo8wtG.js} +2 -2
  70. package/dist/{dist-BTgujVMy.js → dist-C8wMh_gi.js} +2 -2
  71. package/dist/{dist-Cipw2HFH.js → dist-CIV3Brg-.js} +37 -4
  72. package/dist/{dist-BS5Oi67L.js → dist-CUpJmrjt.js} +2 -2
  73. package/dist/dist-D5lmdi1F.js +5 -0
  74. package/dist/{dist-T-ORzNfM.js → dist-D8C6jIXM.js} +168 -175
  75. package/dist/dist-DILjuzSv.js +5 -0
  76. package/dist/{dist-CDtcJMB2.js → dist-DXaxGLsw.js} +33 -33
  77. package/dist/{dist-DnGTaPRX.js → dist-DYO-w_Jf.js} +2 -2
  78. package/dist/{dist-CDZCyoRy.js → dist-UK-lbEBc.js} +2 -2
  79. package/dist/{extensions-BmGiz8Oo.js → extensions-DeNHyWwh.js} +27 -27
  80. package/dist/{styles-DFeOGKa_.js → styles-Bgqv7rLA.js} +4 -4
  81. package/dist/templatical-editor.js +3 -3
  82. package/dist/{useEditorCore-BXz-UXPd.js → useEditorCore-CaOVDL_m.js} +4 -4
  83. package/dist/{useMergeTag-CS2bmWA0.js → useMergeTag-RWsgUcSh.js} +1 -1
  84. package/package.json +21 -21
  85. package/dist/cdn/chunks/features-CUYy5kZQ.js.map +0 -1
  86. package/dist/cdn/chunks/tiptap-BErAJEvo.js.map +0 -1
  87. package/dist/dist-BySzGkeC.js +0 -5
  88. package/dist/dist-D7JUZ2Kd.js +0 -5
@@ -1,5 +1,5 @@
1
1
  import { n as e } from "./rolldown-runtime-Dqa2HsxW.js";
2
- import { An as t, Cn as n, Dn as r, En as i, Fn as a, In as o, Nn as s, On as c, Pn as l, jn as ee, kn as u } from "./features-CUYy5kZQ.js";
2
+ import { An as t, Cn as n, Dn as r, En as i, Fn as a, In as o, Nn as s, On as c, Pn as l, jn as ee, kn as u } from "./features-LiilsBqW.js";
3
3
  //#region ../quality/src/types.ts
4
4
  var te = {
5
5
  altMaxLength: 125,
@@ -1428,7 +1428,7 @@ function W(e) {
1428
1428
  return a.write(e), a.end(), i(), t;
1429
1429
  }
1430
1430
  function Ze(e) {
1431
- let t = e.replace(/<!--[\s\S]*?-->/g, "").matchAll(/<\/?a\b[^>]*>/gi), n = 0;
1431
+ let t = Qe(e).matchAll(/<\/?a\b[^<>]*>/gi), n = 0;
1432
1432
  for (let e of t) {
1433
1433
  if (e[0].startsWith("</")) {
1434
1434
  n > 0 && n--;
@@ -1439,13 +1439,28 @@ function Ze(e) {
1439
1439
  }
1440
1440
  return !1;
1441
1441
  }
1442
+ function Qe(e) {
1443
+ let t = "", n = 0;
1444
+ for (; n < e.length;) {
1445
+ let r = e.indexOf("<!--", n);
1446
+ if (r === -1) {
1447
+ t += e.substring(n);
1448
+ break;
1449
+ }
1450
+ t += e.substring(n, r);
1451
+ let i = e.indexOf("-->", r + 4);
1452
+ if (i === -1) break;
1453
+ n = i + 3;
1454
+ }
1455
+ return t;
1456
+ }
1442
1457
  function G(e) {
1443
1458
  let t = "", n = new U({ ontext(e) {
1444
1459
  t += e;
1445
1460
  } });
1446
1461
  return n.write(e), n.end(), t.trim();
1447
1462
  }
1448
- var Qe = {
1463
+ var $e = {
1449
1464
  meta: {
1450
1465
  id: "a11y.heading-empty",
1451
1466
  severity: "error"
@@ -1453,7 +1468,7 @@ var Qe = {
1453
1468
  block(e) {
1454
1469
  return !l(e) || G(e.content ?? "") !== "" ? null : { blockId: e.id };
1455
1470
  }
1456
- }, $e = {
1471
+ }, et = {
1457
1472
  id: "a11y.heading-skip-level",
1458
1473
  severity: "error"
1459
1474
  };
@@ -1466,8 +1481,8 @@ function K(e, n) {
1466
1481
  if (t(r)) for (let e of r.children) K(e, n);
1467
1482
  }
1468
1483
  }
1469
- var et = {
1470
- meta: $e,
1484
+ var tt = {
1485
+ meta: et,
1471
1486
  template(e) {
1472
1487
  let t = [];
1473
1488
  K(e.blocks, t);
@@ -1481,7 +1496,7 @@ var et = {
1481
1496
  }), r = e.level;
1482
1497
  return n;
1483
1498
  }
1484
- }, tt = {
1499
+ }, nt = {
1485
1500
  id: "a11y.heading-multiple-h1",
1486
1501
  severity: "warning"
1487
1502
  };
@@ -1494,38 +1509,38 @@ function q(e, n) {
1494
1509
  if (t(r)) for (let e of r.children) q(e, n);
1495
1510
  }
1496
1511
  }
1497
- var nt = {
1498
- meta: tt,
1512
+ var rt = {
1513
+ meta: nt,
1499
1514
  template(e) {
1500
1515
  let t = [];
1501
1516
  q(e.blocks, t);
1502
1517
  let n = t.filter((e) => e.level === 1);
1503
1518
  return n.length <= 1 ? [] : n.slice(1).map((e) => ({ blockId: e.id }));
1504
1519
  }
1505
- }, rt = {
1520
+ }, it = {
1506
1521
  id: "a11y.link-empty",
1507
1522
  severity: "error"
1508
1523
  };
1509
- function it(e) {
1524
+ function at(e) {
1510
1525
  return u(e) || l(e) ? e.content : null;
1511
1526
  }
1512
- var at = {
1513
- meta: rt,
1527
+ var ot = {
1528
+ meta: it,
1514
1529
  block(e) {
1515
- let t = it(e);
1530
+ let t = at(e);
1516
1531
  return t === null || !W(t).find((e) => e.text === "" && !e.hasImageWithAlt) ? null : { blockId: e.id };
1517
1532
  }
1518
- }, ot = {
1533
+ }, st = {
1519
1534
  id: "a11y.link-vague-text",
1520
1535
  severity: "warning"
1521
1536
  };
1522
- function st(e) {
1537
+ function ct(e) {
1523
1538
  return u(e) || l(e) ? e.content : null;
1524
1539
  }
1525
- var ct = {
1526
- meta: ot,
1540
+ var lt = {
1541
+ meta: st,
1527
1542
  block(e, t, n) {
1528
- let r = st(e);
1543
+ let r = ct(e);
1529
1544
  if (r === null) return null;
1530
1545
  let i = y(n.locale).vagueLinkText, a = W(r).find((e) => {
1531
1546
  let t = je(e.text);
@@ -1536,53 +1551,53 @@ var ct = {
1536
1551
  params: { text: a.text }
1537
1552
  } : null;
1538
1553
  }
1539
- }, lt = {
1554
+ }, ut = {
1540
1555
  id: "a11y.link-href-empty",
1541
1556
  severity: "error"
1542
1557
  };
1543
- function ut(e) {
1558
+ function dt(e) {
1544
1559
  return u(e) || l(e) ? e.content : null;
1545
1560
  }
1546
- var dt = {
1547
- meta: lt,
1561
+ var ft = {
1562
+ meta: ut,
1548
1563
  block(e) {
1549
- let t = ut(e);
1564
+ let t = dt(e);
1550
1565
  return t === null || !W(t).find((e) => {
1551
1566
  let t = e.href.trim();
1552
1567
  return t === "" || t === "#";
1553
1568
  }) ? null : { blockId: e.id };
1554
1569
  }
1555
- }, ft = {
1570
+ }, pt = {
1556
1571
  id: "a11y.link-target-blank-no-rel",
1557
1572
  severity: "warning"
1558
1573
  };
1559
- function pt(e) {
1574
+ function mt(e) {
1560
1575
  return u(e) || l(e) ? e.content : null;
1561
1576
  }
1562
- function mt(e) {
1577
+ function ht(e) {
1563
1578
  if (e === null) return !1;
1564
1579
  let t = e.toLowerCase().split(/\s+/);
1565
1580
  return t.includes("noopener") || t.includes("noreferrer");
1566
1581
  }
1567
- var ht = {
1568
- meta: ft,
1582
+ var gt = {
1583
+ meta: pt,
1569
1584
  block(e) {
1570
- let t = pt(e);
1571
- return t === null || !W(t).find((e) => e.target === "_blank" && !mt(e.rel)) ? null : {
1585
+ let t = mt(e);
1586
+ return t === null || !W(t).find((e) => e.target === "_blank" && !ht(e.rel)) ? null : {
1572
1587
  blockId: e.id,
1573
1588
  fix: {
1574
1589
  description: "Add rel=\"noopener\"",
1575
1590
  apply: (t) => {
1576
1591
  if (!u(e) && !l(e)) return;
1577
- let n = yt(e.content ?? "");
1592
+ let n = bt(e.content ?? "");
1578
1593
  t.updateBlock(e.id, { content: n });
1579
1594
  }
1580
1595
  }
1581
1596
  };
1582
1597
  }
1583
- }, gt = /([^\s"'>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
1584
- function _t(e) {
1585
- let t = [], n = new RegExp(gt.source, gt.flags), r;
1598
+ }, _t = /([^\s"'>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
1599
+ function vt(e) {
1600
+ let t = [], n = new RegExp(_t.source, _t.flags), r;
1586
1601
  for (; (r = n.exec(e)) !== null;) t.push({
1587
1602
  raw: r[0],
1588
1603
  name: r[1],
@@ -1591,13 +1606,13 @@ function _t(e) {
1591
1606
  });
1592
1607
  return t;
1593
1608
  }
1594
- function vt(e) {
1609
+ function yt(e) {
1595
1610
  return e.some((e) => e.name.toLowerCase() === "target" && e.value !== null && e.value.toLowerCase() === "_blank");
1596
1611
  }
1597
- function yt(e) {
1612
+ function bt(e) {
1598
1613
  return e.replace(/<a\b([^>]*)>/gi, (e, t) => {
1599
- let n = _t(t);
1600
- if (!vt(n)) return e;
1614
+ let n = vt(t);
1615
+ if (!yt(n)) return e;
1601
1616
  let r = n.find((e) => e.name.toLowerCase() === "rel");
1602
1617
  if (r) {
1603
1618
  let n = (r.value ?? "").toLowerCase().split(/\s+/);
@@ -1610,20 +1625,20 @@ function yt(e) {
1610
1625
  }
1611
1626
  //#endregion
1612
1627
  //#region ../quality/src/accessibility/rules/link-nested-anchor.ts
1613
- var bt = {
1628
+ var xt = {
1614
1629
  id: "a11y.link-nested-anchor",
1615
1630
  severity: "error"
1616
1631
  };
1617
- function xt(e) {
1632
+ function St(e) {
1618
1633
  return u(e) || l(e) ? e.content : null;
1619
1634
  }
1620
- var St = {
1621
- meta: bt,
1635
+ var Ct = {
1636
+ meta: xt,
1622
1637
  block(e) {
1623
- let t = xt(e);
1638
+ let t = St(e);
1624
1639
  return t === null || !Ze(t) ? null : { blockId: e.id };
1625
1640
  }
1626
- }, Ct = {
1641
+ }, wt = {
1627
1642
  meta: {
1628
1643
  id: "a11y.text-all-caps",
1629
1644
  severity: "warning"
@@ -1633,7 +1648,7 @@ var St = {
1633
1648
  let r = G(e.content ?? "").replace(/[^\p{L}]/gu, "");
1634
1649
  return r.length < n.thresholds.allCapsMinLength || r !== r.toLocaleUpperCase() ? null : { blockId: e.id };
1635
1650
  }
1636
- }, wt = {
1651
+ }, Tt = {
1637
1652
  meta: {
1638
1653
  id: "a11y.text-low-contrast",
1639
1654
  severity: "error"
@@ -1649,35 +1664,35 @@ var St = {
1649
1664
  }
1650
1665
  };
1651
1666
  }
1652
- }, Tt = {
1667
+ }, Et = {
1653
1668
  id: "a11y.text-too-small",
1654
1669
  severity: "warning"
1655
1670
  };
1656
- function Et(e) {
1671
+ function Dt(e) {
1657
1672
  return c(e) || s(e) ? e.fontSize : null;
1658
1673
  }
1659
1674
  //#endregion
1660
1675
  //#region ../quality/src/accessibility/index.ts
1661
- var Dt = [
1676
+ var Ot = [
1662
1677
  ve,
1663
1678
  xe,
1664
1679
  Se,
1665
1680
  Ce,
1666
1681
  Me,
1667
- Qe,
1668
- et,
1669
- nt,
1670
- at,
1671
- ct,
1672
- dt,
1673
- ht,
1674
- St,
1682
+ $e,
1683
+ tt,
1684
+ rt,
1685
+ ot,
1686
+ lt,
1687
+ ft,
1688
+ gt,
1675
1689
  Ct,
1676
1690
  wt,
1691
+ Tt,
1677
1692
  {
1678
- meta: Tt,
1693
+ meta: Et,
1679
1694
  block(e, t, n) {
1680
- let r = Et(e);
1695
+ let r = Dt(e);
1681
1696
  return r === null || r >= n.thresholds.minFontSize ? null : {
1682
1697
  blockId: e.id,
1683
1698
  params: {
@@ -1749,26 +1764,26 @@ var Dt = [
1749
1764
  }
1750
1765
  }
1751
1766
  ];
1752
- function Ot(e, t = {}) {
1753
- return t.disabled === !0 || t.accessibility === !1 ? [] : h(e, Dt, le(t.locale, t.accessibility ?? {}, Dt), (e, t, n) => _e(e, t, n));
1767
+ function kt(e, t = {}) {
1768
+ return t.disabled === !0 || t.accessibility === !1 ? [] : h(e, Ot, le(t.locale, t.accessibility ?? {}, Ot), (e, t, n) => _e(e, t, n));
1754
1769
  }
1755
1770
  //#endregion
1756
1771
  //#region ../quality/src/structure/messages/de.ts
1757
- var kt = /* @__PURE__ */ e({ default: () => At }), At = {
1772
+ var At = /* @__PURE__ */ e({ default: () => jt }), jt = {
1758
1773
  "structure.duplicate-block-id": "Block-ID erscheint {count}-mal im Baum. Jeder Block muss eine eindeutige ID haben.",
1759
1774
  "structure.section-column-mismatch": "Sektion verwendet Layout „{layout}\" (erwartet {expected} Spalten), hat aber {actual}. Deutet auf beschädigten Zustand hin.",
1760
1775
  "structure.nested-section": "Sektion ist in einer anderen Sektion verschachtelt. Sektionen können nicht verschachtelt werden – der Renderer wird sich falsch verhalten.",
1761
1776
  "structure.empty-section": "Sektion enthält keine Blöcke. Entferne sie oder füge Inhalt hinzu.",
1762
1777
  "structure.empty-column": "Spalte {columnIndex} dieser Sektion ist leer. Füge Inhalt hinzu oder reduziere die Spaltenanzahl."
1763
- }, jt = /* @__PURE__ */ e({ default: () => J }), J = {
1778
+ }, Mt = /* @__PURE__ */ e({ default: () => J }), J = {
1764
1779
  "structure.duplicate-block-id": "Block id appears {count} times in the tree. Each block must have a unique id.",
1765
1780
  "structure.section-column-mismatch": "Section uses layout \"{layout}\" (expects {expected} columns) but has {actual}. Indicates corrupted state.",
1766
1781
  "structure.nested-section": "Section is nested inside another section. Sections cannot nest — the renderer will misbehave.",
1767
1782
  "structure.empty-section": "Section has no blocks. Remove it or add content.",
1768
1783
  "structure.empty-column": "Column {columnIndex} of this section is empty. Add content or reduce the column count."
1769
1784
  }, Y = /* @__PURE__ */ Object.assign({
1770
- "./de.ts": kt,
1771
- "./en.ts": jt
1785
+ "./de.ts": At,
1786
+ "./en.ts": Mt
1772
1787
  }), X = {};
1773
1788
  for (let e in Y) {
1774
1789
  let t = /\.\/([^/]+)\.ts$/.exec(e);
@@ -1776,11 +1791,11 @@ for (let e in Y) {
1776
1791
  let n = t[1];
1777
1792
  n !== "index" && (X[n] = Y[e].default);
1778
1793
  }
1779
- function Mt(e) {
1794
+ function Nt(e) {
1780
1795
  return X[e.split("-")[0]?.toLowerCase() ?? "en"] ?? X.en ?? J;
1781
1796
  }
1782
- function Nt(e, t, n) {
1783
- let r = Mt(e)[t] ?? J[t];
1797
+ function Pt(e, t, n) {
1798
+ let r = Nt(e)[t] ?? J[t];
1784
1799
  return n ? r.replace(/\{(\w+)\}/g, (e, t) => {
1785
1800
  let r = n[t];
1786
1801
  return r === void 0 ? `{${t}}` : String(r);
@@ -1788,18 +1803,18 @@ function Nt(e, t, n) {
1788
1803
  }
1789
1804
  //#endregion
1790
1805
  //#region ../quality/src/structure/rules/duplicate-block-id.ts
1791
- var Pt = {
1806
+ var Ft = {
1792
1807
  id: "structure.duplicate-block-id",
1793
1808
  severity: "error"
1794
1809
  };
1795
- function Ft(e, n) {
1796
- for (let r of e) if (n.set(r.id, (n.get(r.id) ?? 0) + 1), t(r)) for (let e of r.children) Ft(e, n);
1810
+ function It(e, n) {
1811
+ for (let r of e) if (n.set(r.id, (n.get(r.id) ?? 0) + 1), t(r)) for (let e of r.children) It(e, n);
1797
1812
  }
1798
- var It = {
1799
- meta: Pt,
1813
+ var Lt = {
1814
+ meta: Ft,
1800
1815
  template(e) {
1801
1816
  let t = /* @__PURE__ */ new Map();
1802
- Ft(e.blocks, t);
1817
+ It(e.blocks, t);
1803
1818
  let n = [];
1804
1819
  for (let [e, r] of t) r > 1 && n.push({
1805
1820
  blockId: e,
@@ -1807,11 +1822,11 @@ var It = {
1807
1822
  });
1808
1823
  return n;
1809
1824
  }
1810
- }, Lt = {
1825
+ }, Rt = {
1811
1826
  id: "structure.empty-column",
1812
1827
  severity: "warning"
1813
1828
  };
1814
- function Rt(e, n) {
1829
+ function zt(e, n) {
1815
1830
  for (let r of e) {
1816
1831
  if (!t(r)) continue;
1817
1832
  let e = r;
@@ -1821,28 +1836,28 @@ function Rt(e, n) {
1821
1836
  params: { columnIndex: r + 1 }
1822
1837
  });
1823
1838
  });
1824
- for (let t of e.children) Rt(t, n);
1839
+ for (let t of e.children) zt(t, n);
1825
1840
  }
1826
1841
  }
1827
- var zt = {
1828
- meta: Lt,
1842
+ var Bt = {
1843
+ meta: Rt,
1829
1844
  template(e) {
1830
1845
  let t = [];
1831
- return Rt(e.blocks, t), t;
1846
+ return zt(e.blocks, t), t;
1832
1847
  }
1833
- }, Bt = {
1848
+ }, Vt = {
1834
1849
  id: "structure.empty-section",
1835
1850
  severity: "warning"
1836
1851
  };
1837
- function Vt(e) {
1852
+ function Ht(e) {
1838
1853
  return e.children.length === 0 ? !0 : e.children.every((e) => e.length === 0);
1839
1854
  }
1840
- var Ht = {
1841
- meta: Bt,
1855
+ var Ut = {
1856
+ meta: Vt,
1842
1857
  block(e) {
1843
1858
  if (!t(e)) return null;
1844
1859
  let n = e;
1845
- return Vt(n) ? {
1860
+ return Ht(n) ? {
1846
1861
  blockId: n.id,
1847
1862
  fix: {
1848
1863
  description: "Remove the empty section",
@@ -1852,7 +1867,7 @@ var Ht = {
1852
1867
  }
1853
1868
  } : null;
1854
1869
  }
1855
- }, Ut = {
1870
+ }, Wt = {
1856
1871
  meta: {
1857
1872
  id: "structure.nested-section",
1858
1873
  severity: "error"
@@ -1863,25 +1878,25 @@ var Ht = {
1863
1878
  params: { parentId: n.section.id }
1864
1879
  };
1865
1880
  }
1866
- }, Wt = {
1881
+ }, Gt = {
1867
1882
  id: "structure.section-column-mismatch",
1868
1883
  severity: "error"
1869
1884
  };
1870
- function Gt(e) {
1885
+ function Kt(e) {
1871
1886
  return e === "1" ? 1 : e === "3" ? 3 : 2;
1872
1887
  }
1873
1888
  //#endregion
1874
1889
  //#region ../quality/src/structure/index.ts
1875
- var Kt = [
1876
- It,
1877
- Ht,
1878
- zt,
1890
+ var qt = [
1891
+ Lt,
1879
1892
  Ut,
1893
+ Bt,
1894
+ Wt,
1880
1895
  {
1881
- meta: Wt,
1896
+ meta: Gt,
1882
1897
  block(e) {
1883
1898
  if (!t(e)) return null;
1884
- let n = e, r = Gt(n.columns), i = n.children.length;
1899
+ let n = e, r = Kt(n.columns), i = n.children.length;
1885
1900
  return i === r ? null : {
1886
1901
  blockId: n.id,
1887
1902
  params: {
@@ -1893,38 +1908,38 @@ var Kt = [
1893
1908
  }
1894
1909
  }
1895
1910
  ];
1896
- function qt(e, t = {}) {
1897
- return t.disabled === !0 || t.structure === !1 ? [] : h(e, Kt, ue(t.locale, t.structure ?? {}, Kt), (e, t, n) => Nt(e, t, n));
1911
+ function Jt(e, t = {}) {
1912
+ return t.disabled === !0 || t.structure === !1 ? [] : h(e, qt, ue(t.locale, t.structure ?? {}, qt), (e, t, n) => Pt(e, t, n));
1898
1913
  }
1899
1914
  //#endregion
1900
1915
  //#region ../quality/src/links/messages/de.ts
1901
- var Jt = /* @__PURE__ */ e({ default: () => Yt }), Yt = {
1902
- "link.javascript-protocol": "Die URL verwendet das „javascript:\"-Protokoll, das aus Sicherheitsgründen beim Rendern entfernt wird. Ersetze sie durch eine echte URL oder entferne sie.",
1916
+ var Yt = /* @__PURE__ */ e({ default: () => Xt }), Xt = {
1917
+ "link.javascript-protocol": "Die URL verwendet das Protokoll {protocol}:\", das beliebigen Skriptcode ausführen kann und aus Sicherheitsgründen beim Rendern entfernt wird. Ersetze sie durch eine echte URL oder entferne sie.",
1903
1918
  "link.unsupported-protocol": "Die URL verwendet das Protokoll „{protocol}\", das von den meisten E-Mail-Clients nicht unterstützt wird. Verwende http, https, mailto, tel oder sms.",
1904
1919
  "link.malformed-mailto": "Der mailto:-Link ist fehlerhaft. Erwartet wird eine einzelne Empfängeradresse vor einer eventuellen Querystring (z. B. mailto:hallo@example.com).",
1905
1920
  "link.malformed-tel": "Der tel:-Link enthält Zeichen, die keine Ziffern, +, Leerzeichen, Bindestriche, Klammern oder Punkte sind.",
1906
1921
  "link.localhost-or-staging": "Der URL-Host „{host}\" entspricht einem Nicht-Produktionsmuster. Ersetze ihn vor dem Versand durch die Produktions-URL."
1907
- }, Xt = /* @__PURE__ */ e({ default: () => Z }), Z = {
1908
- "link.javascript-protocol": "URL uses the \"javascript:\" protocol, which is stripped at render time for safety. Replace it with a real link or remove the URL.",
1922
+ }, Zt = /* @__PURE__ */ e({ default: () => Z }), Z = {
1923
+ "link.javascript-protocol": "URL uses the \"{protocol}:\" protocol, which can execute arbitrary script and is stripped at render time for safety. Replace it with a real link or remove the URL.",
1909
1924
  "link.unsupported-protocol": "URL uses the \"{protocol}\" protocol, which most email clients do not support. Use http, https, mailto, tel, or sms.",
1910
1925
  "link.malformed-mailto": "mailto: link is malformed. Expected a single recipient address before any query string (e.g. mailto:hello@example.com).",
1911
1926
  "link.malformed-tel": "tel: link contains characters that are not digits, +, spaces, dashes, parentheses, or dots.",
1912
1927
  "link.localhost-or-staging": "URL host \"{host}\" matches a non-production pattern. Replace with the production URL before sending."
1913
- }, Zt = /* @__PURE__ */ Object.assign({
1914
- "./de.ts": Jt,
1915
- "./en.ts": Xt
1928
+ }, Qt = /* @__PURE__ */ Object.assign({
1929
+ "./de.ts": Yt,
1930
+ "./en.ts": Zt
1916
1931
  }), Q = {};
1917
- for (let e in Zt) {
1932
+ for (let e in Qt) {
1918
1933
  let t = /\.\/([^/]+)\.ts$/.exec(e);
1919
1934
  if (!t) continue;
1920
1935
  let n = t[1];
1921
- n !== "index" && (Q[n] = Zt[e].default);
1936
+ n !== "index" && (Q[n] = Qt[e].default);
1922
1937
  }
1923
- function Qt(e) {
1938
+ function $t(e) {
1924
1939
  return Q[e.split("-")[0]?.toLowerCase() ?? "en"] ?? Q.en ?? Z;
1925
1940
  }
1926
- function $t(e, t, n) {
1927
- let r = Qt(e)[t] ?? Z[t];
1941
+ function en(e, t, n) {
1942
+ let r = $t(e)[t] ?? Z[t];
1928
1943
  return n ? r.replace(/\{(\w+)\}/g, (e, t) => {
1929
1944
  let r = n[t];
1930
1945
  return r === void 0 ? `{${t}}` : String(r);
@@ -1993,55 +2008,66 @@ function $(e) {
1993
2008
  }
1994
2009
  //#endregion
1995
2010
  //#region ../quality/src/links/rules/javascript-protocol.ts
1996
- var en = {
2011
+ var tn = {
1997
2012
  id: "link.javascript-protocol",
1998
2013
  severity: "error"
1999
- };
2000
- function tn(e) {
2001
- if (!e) return !1;
2014
+ }, nn = [
2015
+ "javascript",
2016
+ "data",
2017
+ "vbscript"
2018
+ ];
2019
+ function rn(e) {
2020
+ if (!e) return null;
2002
2021
  let t = e.replace(/\s+/g, "");
2003
- return /^javascript:/i.test(t);
2022
+ for (let e of nn) if (RegExp(`^${e}:`, "i").test(t)) return e;
2023
+ return null;
2004
2024
  }
2005
- var nn = {
2006
- meta: en,
2025
+ var an = {
2026
+ meta: tn,
2007
2027
  template(e) {
2008
2028
  let t = [];
2009
- for (let n of $(e)) tn(n.url) && t.push({ blockId: n.blockId });
2029
+ for (let n of $(e)) {
2030
+ let e = rn(n.url);
2031
+ e !== null && t.push({
2032
+ blockId: n.blockId,
2033
+ params: { protocol: e }
2034
+ });
2035
+ }
2010
2036
  return t;
2011
2037
  }
2012
- }, rn = {
2038
+ }, on = {
2013
2039
  id: "link.unsupported-protocol",
2014
2040
  severity: "warning"
2015
- }, an = new Set([
2041
+ }, sn = new Set([
2016
2042
  "http",
2017
2043
  "https",
2018
2044
  "mailto",
2019
2045
  "tel",
2020
2046
  "sms"
2021
- ]);
2022
- function on(e) {
2047
+ ]), cn = new Set(nn);
2048
+ function ln(e) {
2023
2049
  if (!e) return null;
2024
2050
  let t = e.trim(), n = /^([a-z][a-z0-9+\-.]*):/i.exec(t);
2025
2051
  return n ? n[1].toLowerCase() : null;
2026
2052
  }
2027
- var sn = {
2028
- meta: rn,
2053
+ var un = {
2054
+ meta: on,
2029
2055
  template(e) {
2030
2056
  let t = [];
2031
2057
  for (let n of $(e)) {
2032
- let e = on(n.url);
2033
- e !== null && e !== "javascript" && (an.has(e) || t.push({
2058
+ let e = ln(n.url);
2059
+ e !== null && (cn.has(e) || sn.has(e) || t.push({
2034
2060
  blockId: n.blockId,
2035
2061
  params: { protocol: e }
2036
2062
  }));
2037
2063
  }
2038
2064
  return t;
2039
2065
  }
2040
- }, cn = {
2066
+ }, dn = {
2041
2067
  id: "link.malformed-mailto",
2042
2068
  severity: "warning"
2043
2069
  };
2044
- function ln(e) {
2070
+ function fn(e) {
2045
2071
  let t = e.trim();
2046
2072
  if (!/^mailto:/i.test(t)) return !1;
2047
2073
  let [n] = t.slice(7).split("?", 2);
@@ -2056,41 +2082,41 @@ function ln(e) {
2056
2082
  }
2057
2083
  return !1;
2058
2084
  }
2059
- var un = {
2060
- meta: cn,
2085
+ var pn = {
2086
+ meta: dn,
2061
2087
  template(e) {
2062
2088
  let t = [];
2063
- for (let n of $(e)) ln(n.url) && t.push({ blockId: n.blockId });
2089
+ for (let n of $(e)) fn(n.url) && t.push({ blockId: n.blockId });
2064
2090
  return t;
2065
2091
  }
2066
- }, dn = {
2092
+ }, mn = {
2067
2093
  id: "link.malformed-tel",
2068
2094
  severity: "warning"
2069
- }, fn = /^[+0-9\s().\-]+$/, pn = /^[A-Za-z0-9-]+(=[^;]+)?$/;
2070
- function mn(e) {
2095
+ }, hn = /^[+0-9\s().\-]+$/, gn = /^[A-Za-z0-9-]+(=[^;]+)?$/;
2096
+ function _n(e) {
2071
2097
  let t = e.trim();
2072
2098
  if (!/^tel:/i.test(t)) return !1;
2073
2099
  let n = t.slice(4).trim();
2074
2100
  if (n === "") return !0;
2075
2101
  let [r, ...i] = n.split(";");
2076
- return fn.test(r) ? i.some((e) => !pn.test(e)) : !0;
2102
+ return hn.test(r) ? i.some((e) => !gn.test(e)) : !0;
2077
2103
  }
2078
- var hn = {
2079
- meta: dn,
2104
+ var vn = {
2105
+ meta: mn,
2080
2106
  template(e) {
2081
2107
  let t = [];
2082
- for (let n of $(e)) mn(n.url) && t.push({ blockId: n.blockId });
2108
+ for (let n of $(e)) _n(n.url) && t.push({ blockId: n.blockId });
2083
2109
  return t;
2084
2110
  }
2085
- }, gn = {
2111
+ }, yn = {
2086
2112
  id: "link.localhost-or-staging",
2087
2113
  severity: "warning"
2088
2114
  };
2089
- function _n(e) {
2115
+ function bn(e) {
2090
2116
  let t = e.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
2091
2117
  return RegExp(`^${t}$`, "i");
2092
2118
  }
2093
- function vn(e) {
2119
+ function xn(e) {
2094
2120
  if (!e) return null;
2095
2121
  let t = e.trim();
2096
2122
  if (!/^(https?|ftps?):\/\//i.test(t)) return null;
@@ -2102,19 +2128,19 @@ function vn(e) {
2102
2128
  }
2103
2129
  //#endregion
2104
2130
  //#region ../quality/src/links/index.ts
2105
- var yn = [
2106
- nn,
2107
- sn,
2131
+ var Sn = [
2132
+ an,
2108
2133
  un,
2109
- hn,
2134
+ pn,
2135
+ vn,
2110
2136
  {
2111
- meta: gn,
2137
+ meta: yn,
2112
2138
  template(e, t) {
2113
2139
  let n = t.links.nonProductionHosts;
2114
2140
  if (n.length === 0) return [];
2115
- let r = n.map(_n), i = [];
2141
+ let r = n.map(bn), i = [];
2116
2142
  for (let t of $(e)) {
2117
- let e = vn(t.url);
2143
+ let e = xn(t.url);
2118
2144
  e !== null && r.some((t) => t.test(e)) && i.push({
2119
2145
  blockId: t.blockId,
2120
2146
  params: { host: e }
@@ -2124,17 +2150,17 @@ var yn = [
2124
2150
  }
2125
2151
  }
2126
2152
  ];
2127
- function bn(e, t = {}) {
2128
- return t.disabled === !0 || t.links === !1 ? [] : h(e, yn, de(t.locale, t.links ?? {}, yn), (e, t, n) => $t(e, t, n));
2153
+ function Cn(e, t = {}) {
2154
+ return t.disabled === !0 || t.links === !1 ? [] : h(e, Sn, de(t.locale, t.links ?? {}, Sn), (e, t, n) => en(e, t, n));
2129
2155
  }
2130
2156
  //#endregion
2131
2157
  //#region ../quality/src/index.ts
2132
- var xn = /* @__PURE__ */ e({
2133
- lintAccessibility: () => Ot,
2134
- lintLinks: () => bn,
2135
- lintStructure: () => qt
2158
+ var wn = /* @__PURE__ */ e({
2159
+ lintAccessibility: () => kt,
2160
+ lintLinks: () => Cn,
2161
+ lintStructure: () => Jt
2136
2162
  });
2137
2163
  //#endregion
2138
- export { xn as t };
2164
+ export { wn as t };
2139
2165
 
2140
- //# sourceMappingURL=quality-BTPRPGB-.js.map
2166
+ //# sourceMappingURL=quality-Bpj6kNxR.js.map