@templatical/editor 0.24.1 → 0.25.1

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 (212) hide show
  1. package/dist/{AiChatSidebar-X4viKtvs.js → AiChatSidebar-BYMdVldY.js} +15 -15
  2. package/dist/{AiFeatureMenu-DDAamRaA.js → AiFeatureMenu-BhHhnu9G.js} +7 -7
  3. package/dist/{BlockIssueBadge-Qxrl7Ujl.js → BlockIssueBadge-De36PJC4.js} +5 -5
  4. package/dist/{BlockPreviewCanvas-Cf-kxbEr.js → BlockPreviewCanvas-BxSoA1QV.js} +11 -7
  5. package/dist/{CloudEditor-JIzhj1Xq.js → CloudEditor-BXfuytQj.js} +73 -71
  6. package/dist/{CollaboratorBar-tC7AACTb.js → CollaboratorBar-D9AfWRTH.js} +4 -4
  7. package/dist/{ColorPicker--_2PbzFk.js → ColorPicker-VPq4ASC8.js} +6 -6
  8. package/dist/{CommentsSidebar-Ci2Ov8FG.js → CommentsSidebar-C8BLy3Pr.js} +16 -16
  9. package/dist/{CountdownBlock-aZIKfBWY.js → CountdownBlock-Bs2Q_bFX.js} +3 -3
  10. package/dist/{CountdownToolbar-DHp6T0Q_.js → CountdownToolbar-Cic6cdOw.js} +4 -4
  11. package/dist/{DesignReferenceSidebar-DQsC-3hB.js → DesignReferenceSidebar-k-26nkJI.js} +11 -11
  12. package/dist/{IssuesPanel-CoOfib44.js → IssuesPanel-NPzwTPYW.js} +8 -8
  13. package/dist/{LoadingTrack-XK_eeUdq.js → LoadingTrack-DH3OEM3z.js} +1 -1
  14. package/dist/{MergeTagModeToggle-CiFiSV0C.js → MergeTagModeToggle-DEGyx8tw.js} +6 -6
  15. package/dist/{MergeTagSuggestion-D0OHRv7L.js → MergeTagSuggestion-DvisJ9im.js} +2 -2
  16. package/dist/{NumberWithSuffix-CXFbUqsx.js → NumberWithSuffix-CuHCIwSn.js} +2 -2
  17. package/dist/{ParagraphEditor-Cy-bpEjI.js → ParagraphEditor-DK_IPi9H.js} +57 -34
  18. package/dist/{RichTextEditorContent-CYJko6id.js → RichTextEditorContent-DznIQcdY.js} +8 -8
  19. package/dist/{SaveBlockDialog-CNTSaMEa.js → SaveBlockDialog-R9PbMsy-.js} +12 -12
  20. package/dist/{SavedBlocksBrowserModal-CvxS5-YX.js → SavedBlocksBrowserModal-ttPAklPE.js} +11 -11
  21. package/dist/{SavedBlocksPanels-CNdUxS89.js → SavedBlocksPanels-BCwQgKLF.js} +2 -2
  22. package/dist/{SavedBlocksPickBar-BvXKhblL.js → SavedBlocksPickBar-DD5Ddv9t.js} +4 -4
  23. package/dist/{SnapshotHistory-BqPSIV9L.js → SnapshotHistory-BXSTGgBh.js} +10 -10
  24. package/dist/{TemplateScoringPanel-CMEuz9yF.js → TemplateScoringPanel-Ue6Dfnjb.js} +16 -16
  25. package/dist/{TestEmailModal-BDhnnCBx.js → TestEmailModal-KPFc5oSv.js} +89 -58
  26. package/dist/{TestEmailPanel--RwnwLn2.js → TestEmailPanel-b8GHTrnE.js} +2 -2
  27. package/dist/{TitleEditor-F7E_pU9H.js → TitleEditor-8ln7UBr_.js} +11 -11
  28. package/dist/{TplModal-BIiS24Of.js → TplModal-D_FA3Wm3.js} +5 -5
  29. package/dist/{blockTypeIcons-C6PnLMp7.js → blockTypeIcons-BoZeK6l7.js} +2 -2
  30. package/dist/bundle-stats.json +6 -6
  31. package/dist/{ca-CO4nq6TX.js → ca-D1zgI9fQ.js} +6 -0
  32. package/dist/cdn/chunks/{AiChatSidebar-UbF3ePzR.js → AiChatSidebar-D6jGwb4y.js} +17 -17
  33. package/dist/cdn/chunks/{AiChatSidebar-UbF3ePzR.js.map → AiChatSidebar-D6jGwb4y.js.map} +1 -1
  34. package/dist/cdn/chunks/{AiFeatureMenu-OIwoJzHG.js → AiFeatureMenu-BtEcjxLL.js} +8 -8
  35. package/dist/cdn/chunks/{AiFeatureMenu-OIwoJzHG.js.map → AiFeatureMenu-BtEcjxLL.js.map} +1 -1
  36. package/dist/cdn/chunks/{BlockIssueBadge-Bd2EuT1C.js → BlockIssueBadge-dnqZk6pl.js} +5 -5
  37. package/dist/cdn/chunks/{BlockIssueBadge-Bd2EuT1C.js.map → BlockIssueBadge-dnqZk6pl.js.map} +1 -1
  38. package/dist/cdn/chunks/{BlockPreviewCanvas-C-ut8GkJ.js → BlockPreviewCanvas-D8pfTFWi.js} +12 -8
  39. package/dist/cdn/chunks/BlockPreviewCanvas-D8pfTFWi.js.map +1 -0
  40. package/dist/cdn/chunks/{CloudEditor-D87qsqbZ.js → CloudEditor-BJ4-pPAl.js} +75 -73
  41. package/dist/cdn/chunks/CloudEditor-BJ4-pPAl.js.map +1 -0
  42. package/dist/cdn/chunks/{CollaboratorBar-Br4RvNrA.js → CollaboratorBar-SeUOuLeJ.js} +5 -5
  43. package/dist/cdn/chunks/{CollaboratorBar-Br4RvNrA.js.map → CollaboratorBar-SeUOuLeJ.js.map} +1 -1
  44. package/dist/cdn/chunks/{ColorPicker-B-ymPPtU.js → ColorPicker-yxvrro60.js} +7 -7
  45. package/dist/cdn/chunks/{ColorPicker-B-ymPPtU.js.map → ColorPicker-yxvrro60.js.map} +1 -1
  46. package/dist/cdn/chunks/{CommentsSidebar-Tv_WTcJv.js → CommentsSidebar-FPbg-FuU.js} +21 -21
  47. package/dist/cdn/chunks/{CommentsSidebar-Tv_WTcJv.js.map → CommentsSidebar-FPbg-FuU.js.map} +1 -1
  48. package/dist/cdn/chunks/{CountdownBlock-cEcXSK91.js → CountdownBlock-D2Oth7YY.js} +4 -4
  49. package/dist/cdn/chunks/{CountdownBlock-cEcXSK91.js.map → CountdownBlock-D2Oth7YY.js.map} +1 -1
  50. package/dist/cdn/chunks/{CountdownToolbar-CLp3_ebk.js → CountdownToolbar-BNgTBQGB.js} +5 -5
  51. package/dist/cdn/chunks/{CountdownToolbar-CLp3_ebk.js.map → CountdownToolbar-BNgTBQGB.js.map} +1 -1
  52. package/dist/cdn/chunks/{DesignReferenceSidebar-YeqxSsxO.js → DesignReferenceSidebar-ChB_HBK1.js} +11 -11
  53. package/dist/cdn/chunks/{DesignReferenceSidebar-YeqxSsxO.js.map → DesignReferenceSidebar-ChB_HBK1.js.map} +1 -1
  54. package/dist/cdn/chunks/{IssuesPanel-BhsvC3XQ.js → IssuesPanel-CjiZ8cLW.js} +9 -9
  55. package/dist/cdn/chunks/{IssuesPanel-BhsvC3XQ.js.map → IssuesPanel-CjiZ8cLW.js.map} +1 -1
  56. package/dist/cdn/chunks/{LoadingTrack-G2tuXqCJ.js → LoadingTrack-CiNg9s16.js} +2 -2
  57. package/dist/cdn/chunks/{LoadingTrack-G2tuXqCJ.js.map → LoadingTrack-CiNg9s16.js.map} +1 -1
  58. package/dist/cdn/chunks/{MergeTagModeToggle-DrdxQA0K.js → MergeTagModeToggle-CiYbOKzd.js} +16 -16
  59. package/dist/cdn/chunks/{MergeTagModeToggle-DrdxQA0K.js.map → MergeTagModeToggle-CiYbOKzd.js.map} +1 -1
  60. package/dist/cdn/chunks/{MergeTagSuggestion-Ces5Ua78.js → MergeTagSuggestion-CvZLI6Np.js} +3 -3
  61. package/dist/cdn/chunks/{MergeTagSuggestion-Ces5Ua78.js.map → MergeTagSuggestion-CvZLI6Np.js.map} +1 -1
  62. package/dist/cdn/chunks/{NumberWithSuffix-BK_Xh4w4.js → NumberWithSuffix-vVwCWrd_.js} +3 -3
  63. package/dist/cdn/chunks/{NumberWithSuffix-BK_Xh4w4.js.map → NumberWithSuffix-vVwCWrd_.js.map} +1 -1
  64. package/dist/cdn/chunks/{ParagraphEditor-DKz4vTWB.js → ParagraphEditor-o4hs9mgy.js} +142 -132
  65. package/dist/cdn/chunks/ParagraphEditor-o4hs9mgy.js.map +1 -0
  66. package/dist/cdn/chunks/{RichTextEditorContent-CJ2WVicQ.js → RichTextEditorContent-BAriGldd.js} +7 -7
  67. package/dist/cdn/chunks/{RichTextEditorContent-CJ2WVicQ.js.map → RichTextEditorContent-BAriGldd.js.map} +1 -1
  68. package/dist/cdn/chunks/{SaveBlockDialog-DTemkKPX.js → SaveBlockDialog-D3-oILb5.js} +19 -19
  69. package/dist/cdn/chunks/{SaveBlockDialog-DTemkKPX.js.map → SaveBlockDialog-D3-oILb5.js.map} +1 -1
  70. package/dist/cdn/chunks/{SavedBlocksBrowserModal-DbMaIbeH.js → SavedBlocksBrowserModal-jMnNd4wn.js} +13 -13
  71. package/dist/cdn/chunks/{SavedBlocksBrowserModal-DbMaIbeH.js.map → SavedBlocksBrowserModal-jMnNd4wn.js.map} +1 -1
  72. package/dist/cdn/chunks/{SavedBlocksPanels-CUffuDAC.js → SavedBlocksPanels-BDd8FH6l.js} +3 -3
  73. package/dist/cdn/chunks/{SavedBlocksPanels-CUffuDAC.js.map → SavedBlocksPanels-BDd8FH6l.js.map} +1 -1
  74. package/dist/cdn/chunks/{SavedBlocksPickBar-D7SmNz2n.js → SavedBlocksPickBar-BNkLe8In.js} +7 -7
  75. package/dist/cdn/chunks/{SavedBlocksPickBar-D7SmNz2n.js.map → SavedBlocksPickBar-BNkLe8In.js.map} +1 -1
  76. package/dist/cdn/chunks/{SnapshotHistory-m5Z8bTej.js → SnapshotHistory-CYVi7fvQ.js} +12 -12
  77. package/dist/cdn/chunks/{SnapshotHistory-m5Z8bTej.js.map → SnapshotHistory-CYVi7fvQ.js.map} +1 -1
  78. package/dist/cdn/chunks/{TemplateScoringPanel-DgRU5fty.js → TemplateScoringPanel-D0KrxVnr.js} +71 -71
  79. package/dist/cdn/chunks/{TemplateScoringPanel-DgRU5fty.js.map → TemplateScoringPanel-D0KrxVnr.js.map} +1 -1
  80. package/dist/cdn/chunks/{TestEmailModal-Ce8-vzGh.js → TestEmailModal-_RbTD787.js} +89 -58
  81. package/dist/cdn/chunks/TestEmailModal-_RbTD787.js.map +1 -0
  82. package/dist/cdn/chunks/{TestEmailPanel-BlmIKKSL.js → TestEmailPanel-BAnKtbSu.js} +3 -3
  83. package/dist/cdn/chunks/{TestEmailPanel-BlmIKKSL.js.map → TestEmailPanel-BAnKtbSu.js.map} +1 -1
  84. package/dist/cdn/chunks/{TitleEditor-C6_bQxYR.js → TitleEditor-LiUvXGPw.js} +18 -18
  85. package/dist/cdn/chunks/{TitleEditor-C6_bQxYR.js.map → TitleEditor-LiUvXGPw.js.map} +1 -1
  86. package/dist/cdn/chunks/{TplModal-D6bFON2K.js → TplModal-C1iguuZz.js} +5 -5
  87. package/dist/cdn/chunks/{TplModal-D6bFON2K.js.map → TplModal-C1iguuZz.js.map} +1 -1
  88. package/dist/cdn/chunks/blockTypeIcons-CrPzyP_k.js +21 -0
  89. package/dist/cdn/chunks/{blockTypeIcons-B8s3_ahs.js.map → blockTypeIcons-CrPzyP_k.js.map} +1 -1
  90. package/dist/cdn/chunks/{ca-CO4nq6TX.js → ca-D1zgI9fQ.js} +7 -1
  91. package/dist/cdn/chunks/ca-D1zgI9fQ.js.map +1 -0
  92. package/dist/cdn/chunks/{cloud-CRlDc0Ev.js → cloud-CxNsW3hp.js} +3 -3
  93. package/dist/cdn/chunks/{cloud-CRlDc0Ev.js.map → cloud-CxNsW3hp.js.map} +1 -1
  94. package/dist/{de-CUeaFJph.js → cdn/chunks/de-DHra3lvx.js} +8 -0
  95. package/dist/cdn/chunks/de-DHra3lvx.js.map +1 -0
  96. package/dist/cdn/chunks/{dist-B8AX9np4.js → dist-BLF-S9_A.js} +4 -4
  97. package/dist/cdn/chunks/{dist-B8AX9np4.js.map → dist-BLF-S9_A.js.map} +1 -1
  98. package/dist/cdn/chunks/{dist-lZgXNk4G.js → dist-Dp46rwVY.js} +3 -3
  99. package/dist/cdn/chunks/{dist-lZgXNk4G.js.map → dist-Dp46rwVY.js.map} +1 -1
  100. package/dist/cdn/chunks/{draggable-JcMTNF3U.js → draggable-BRF_Q_jB.js} +445 -433
  101. package/dist/cdn/chunks/draggable-BRF_Q_jB.js.map +1 -0
  102. package/dist/{en-zCYIPAL5.js → cdn/chunks/en-DlqX2YWZ.js} +8 -0
  103. package/dist/cdn/chunks/en-DlqX2YWZ.js.map +1 -0
  104. package/dist/{es-BSiH7YkP.js → cdn/chunks/es-Cuss2snv.js} +8 -0
  105. package/dist/cdn/chunks/es-Cuss2snv.js.map +1 -0
  106. package/dist/cdn/chunks/{extensions-CKMD_er_.js → extensions-yNQlgLNE.js} +22 -22
  107. package/dist/cdn/chunks/{extensions-CKMD_er_.js.map → extensions-yNQlgLNE.js.map} +1 -1
  108. package/dist/{fr-DTVJ3det.js → cdn/chunks/fr-Cm85vB2g.js} +8 -0
  109. package/dist/cdn/chunks/fr-Cm85vB2g.js.map +1 -0
  110. package/dist/cdn/chunks/{icons-Cp4ZIJw-.js → icons-DN008liP.js} +45 -32
  111. package/dist/cdn/chunks/icons-DN008liP.js.map +1 -0
  112. package/dist/cdn/chunks/keys-CZOBuCQd.js +12 -0
  113. package/dist/cdn/chunks/keys-CZOBuCQd.js.map +1 -0
  114. package/dist/{nl-BqSquFS3.js → cdn/chunks/nl-dmiIX7oT.js} +8 -0
  115. package/dist/cdn/chunks/nl-dmiIX7oT.js.map +1 -0
  116. package/dist/cdn/chunks/{pt-BR-CMljK37h.js → pt-BR-CaIG-7EM.js} +7 -1
  117. package/dist/cdn/chunks/pt-BR-CaIG-7EM.js.map +1 -0
  118. package/dist/cdn/chunks/{src-CumZZNXZ.js → src-B2LpXMIw.js} +373 -373
  119. package/dist/cdn/chunks/{src-CumZZNXZ.js.map → src-B2LpXMIw.js.map} +1 -1
  120. package/dist/cdn/chunks/{src-D5mfLR4V.js → src-CZjSXPYq.js} +8 -3
  121. package/dist/cdn/chunks/src-CZjSXPYq.js.map +1 -0
  122. package/dist/cdn/chunks/{src-B4UhYbI8.js → src-D_3bXt7-.js} +353 -313
  123. package/dist/cdn/chunks/src-D_3bXt7-.js.map +1 -0
  124. package/dist/cdn/chunks/{src-B3HKHglu.js → src-uc_Mb_yH.js} +20 -20
  125. package/dist/cdn/chunks/{src-B3HKHglu.js.map → src-uc_Mb_yH.js.map} +1 -1
  126. package/dist/cdn/chunks/{styles--m9OCb_Z.js → styles-BzP13r-I.js} +745 -726
  127. package/dist/cdn/chunks/styles-BzP13r-I.js.map +1 -0
  128. package/dist/cdn/chunks/{tiptap-rsib432n.js → tiptap-CgwK_fKJ.js} +2 -2
  129. package/dist/cdn/chunks/{tiptap-rsib432n.js.map → tiptap-CgwK_fKJ.js.map} +1 -1
  130. package/dist/cdn/chunks/{useAliveFlag-CseYNikC.js → useAliveFlag-Ctyt3GgH.js} +2 -2
  131. package/dist/cdn/chunks/{useAliveFlag-CseYNikC.js.map → useAliveFlag-Ctyt3GgH.js.map} +1 -1
  132. package/dist/cdn/chunks/{useCloudI18n-sx1pqEbY.js → useCloudI18n-CML0BxqX.js} +3 -3
  133. package/dist/cdn/chunks/{useCloudI18n-sx1pqEbY.js.map → useCloudI18n-CML0BxqX.js.map} +1 -1
  134. package/dist/cdn/chunks/{useEditorCore-ZqF7P99K.js → useEditorCore-CTYH6u4r.js} +471 -400
  135. package/dist/cdn/chunks/useEditorCore-CTYH6u4r.js.map +1 -0
  136. package/dist/cdn/chunks/{useI18n-vD57BfVR.js → useI18n-aRMtgYRj.js} +3 -3
  137. package/dist/cdn/chunks/{useI18n-vD57BfVR.js.map → useI18n-aRMtgYRj.js.map} +1 -1
  138. package/dist/cdn/chunks/{useMergeTag-HatzNGgc.js → useMergeTag-8a8BnIZp.js} +7 -7
  139. package/dist/cdn/chunks/{useMergeTag-HatzNGgc.js.map → useMergeTag-8a8BnIZp.js.map} +1 -1
  140. package/dist/cdn/chunks/{usePopoverPosition-BdQ3Sv4B.js → usePopoverPosition-Dm1jv3y5.js} +3 -3
  141. package/dist/cdn/chunks/{usePopoverPosition-BdQ3Sv4B.js.map → usePopoverPosition-Dm1jv3y5.js.map} +1 -1
  142. package/dist/cdn/editor.css +1 -1
  143. package/dist/cdn/editor.js +23 -21
  144. package/dist/cdn/editor.js.map +1 -1
  145. package/dist/{check-CIhIDh4h.js → check-Bqimqf7l.js} +1 -1
  146. package/dist/{chevron-down-CZ0m6G3s.js → chevron-down-CYOoeGBd.js} +1 -1
  147. package/dist/{chevron-up-BH_tJLeb.js → chevron-up-DYknsfm0.js} +1 -1
  148. package/dist/{circle-alert-DkEXnGPV.js → circle-alert-6q_jgtv_.js} +1 -1
  149. package/dist/{clock-BDIJZUET.js → clock-CnadSSTD.js} +1 -1
  150. package/dist/{cloud-R8ci6yR1.js → cloud-BJLg_SlM.js} +2 -2
  151. package/dist/{createLucideIcon-AEltGIse.js → createLucideIcon-D7GKhya2.js} +3 -3
  152. package/dist/{cdn/chunks/de-CUeaFJph.js → de-DHra3lvx.js} +6 -2
  153. package/dist/{dist-CIqhVQ1O.js → dist-C31bMR4x.js} +3 -3
  154. package/dist/{dist-Ba5Q-UX1.js → dist-CQ0fVBQ3.js} +7 -2
  155. package/dist/{dist-DT1XnEnj.js → dist-DDfXShPv.js} +2 -2
  156. package/dist/{cdn/chunks/en-zCYIPAL5.js → en-DlqX2YWZ.js} +6 -2
  157. package/dist/{cdn/chunks/es-BSiH7YkP.js → es-Cuss2snv.js} +6 -2
  158. package/dist/{extensions-CGxj6-2o.js → extensions-CbiWtzS6.js} +7 -7
  159. package/dist/{cdn/chunks/fr-DTVJ3det.js → fr-Cm85vB2g.js} +6 -2
  160. package/dist/{image-up-8ktdYdaZ.js → image-up-BfukboIn.js} +1 -1
  161. package/dist/index.d.ts +26 -0
  162. package/dist/{info-CvrCgTLH.js → info-DSYRzSZo.js} +1 -1
  163. package/dist/keys-BI6VSUh4.js +10 -0
  164. package/dist/{list-checks-yzGT93ZL.js → list-checks-URZOyLhr.js} +1 -1
  165. package/dist/{loader-circle-B6euendB.js → loader-circle-GADaYcyQ.js} +1 -1
  166. package/dist/{message-circle-BMldLVcA.js → message-circle-B62fdo0b.js} +1 -1
  167. package/dist/{cdn/chunks/nl-BqSquFS3.js → nl-dmiIX7oT.js} +6 -2
  168. package/dist/{pencil-CkKkSd6N.js → pencil-BGwkOpD_.js} +1 -1
  169. package/dist/{pt-BR-CMljK37h.js → pt-BR-CaIG-7EM.js} +6 -0
  170. package/dist/{refresh-cw-fBPgB97G.js → refresh-cw-Z4wXfduO.js} +1 -1
  171. package/dist/{runtime-dom.esm-bundler-CBbDt7sw.js → runtime-dom.esm-bundler-BkOsapVg.js} +163 -162
  172. package/dist/{scan-line-CRoEOUiK.js → scan-line-D8Oh5xos.js} +1 -1
  173. package/dist/{send-B9Tt2qBi.js → send-BYp4k38T.js} +1 -1
  174. package/dist/{shield-check-QfZkYeIo.js → shield-check-Cm0RePnW.js} +1 -1
  175. package/dist/{sparkles-8UeMmZb8.js → sparkles-BHEE-vRD.js} +1 -1
  176. package/dist/style.css +1 -1
  177. package/dist/{styles-C9AMvkJk.js → styles-B0MEBpOK.js} +888 -869
  178. package/dist/templatical-editor.js +96 -94
  179. package/dist/{text-align-start-Dn8uIheW.js → text-align-start-CHrg3vK8.js} +1 -1
  180. package/dist/{trash-2-DDyvqj0E.js → trash-2-BoNT8wbq.js} +1 -1
  181. package/dist/{triangle-alert-B3PydLzl.js → triangle-alert-CiN0ssB3.js} +1 -1
  182. package/dist/{upload-hE8ItfyG.js → upload-WvZGBySw.js} +1 -1
  183. package/dist/{useAliveFlag-AfoTE_AY.js → useAliveFlag-eT67QCMf.js} +1 -1
  184. package/dist/{useCloudI18n-BC_QV2Z7.js → useCloudI18n-KgIWl-IE.js} +2 -2
  185. package/dist/{useEditorCore-Dojb-P2f.js → useEditorCore-BMbxdUbY.js} +912 -841
  186. package/dist/{useI18n-DzOcl2wl.js → useI18n-BkHfCWC6.js} +2 -2
  187. package/dist/{useMergeTag-BFxXCv3p.js → useMergeTag-CZ4XYAxu.js} +4 -4
  188. package/dist/{usePopoverPosition-Dtr1Mp1x.js → usePopoverPosition-D93u-EZm.js} +4 -4
  189. package/dist/{vue.runtime.esm-bundler-Xpz-L9Fn.js → vue.runtime.esm-bundler-0R1UhmZB.js} +179 -157
  190. package/dist/{x-C4lETLDx.js → x-B4WnJVRx.js} +1 -1
  191. package/package.json +10 -10
  192. package/dist/cdn/chunks/BlockPreviewCanvas-C-ut8GkJ.js.map +0 -1
  193. package/dist/cdn/chunks/CloudEditor-D87qsqbZ.js.map +0 -1
  194. package/dist/cdn/chunks/ParagraphEditor-DKz4vTWB.js.map +0 -1
  195. package/dist/cdn/chunks/TestEmailModal-Ce8-vzGh.js.map +0 -1
  196. package/dist/cdn/chunks/blockTypeIcons-B8s3_ahs.js +0 -21
  197. package/dist/cdn/chunks/ca-CO4nq6TX.js.map +0 -1
  198. package/dist/cdn/chunks/de-CUeaFJph.js.map +0 -1
  199. package/dist/cdn/chunks/draggable-JcMTNF3U.js.map +0 -1
  200. package/dist/cdn/chunks/en-zCYIPAL5.js.map +0 -1
  201. package/dist/cdn/chunks/es-BSiH7YkP.js.map +0 -1
  202. package/dist/cdn/chunks/fr-DTVJ3det.js.map +0 -1
  203. package/dist/cdn/chunks/icons-Cp4ZIJw-.js.map +0 -1
  204. package/dist/cdn/chunks/keys-CswSK7eb.js +0 -12
  205. package/dist/cdn/chunks/keys-CswSK7eb.js.map +0 -1
  206. package/dist/cdn/chunks/nl-BqSquFS3.js.map +0 -1
  207. package/dist/cdn/chunks/pt-BR-CMljK37h.js.map +0 -1
  208. package/dist/cdn/chunks/src-B4UhYbI8.js.map +0 -1
  209. package/dist/cdn/chunks/src-D5mfLR4V.js.map +0 -1
  210. package/dist/cdn/chunks/styles--m9OCb_Z.js.map +0 -1
  211. package/dist/cdn/chunks/useEditorCore-ZqF7P99K.js.map +0 -1
  212. package/dist/keys-uWpGv4Pq.js +0 -10
@@ -1,13 +1,13 @@
1
1
  import { n as e } from "./rolldown-runtime-B0aSnxlc.js";
2
- import { G as t, H as n, J as r, K as i, Q as a, R as o, U as s, V as c, W as l, X as ee, Y as u } from "./src-D5mfLR4V.js";
3
- import { t as d } from "./htmlparser-CPhs2cYE.js";
2
+ import { $ as t, G as n, H as r, K as i, U as a, W as o, X as s, Y as ee, Z as te, q as c, z as l } from "./src-CZjSXPYq.js";
3
+ import { t as u } from "./htmlparser-CPhs2cYE.js";
4
4
  //#region ../quality/src/types.ts
5
- var te = {
5
+ var d = {
6
6
  altMaxLength: 125,
7
7
  minFontSize: 14,
8
8
  allCapsMinLength: 20,
9
9
  minTouchTargetPx: 44
10
- }, ne = [
10
+ }, f = [
11
11
  "localhost",
12
12
  "127.0.0.1",
13
13
  "0.0.0.0",
@@ -17,61 +17,61 @@ var te = {
17
17
  ];
18
18
  //#endregion
19
19
  //#region ../quality/src/contrast.ts
20
- function f(e, t) {
21
- let n = h(e), r = h(t);
20
+ function p(e, t) {
21
+ let n = m(e), r = m(t);
22
22
  if (!n || !r) return NaN;
23
- let i = _(n), a = _(r), o = Math.max(i, a), s = Math.min(i, a);
23
+ let i = g(n), a = g(r), o = Math.max(i, a), s = Math.min(i, a);
24
24
  return (o + .05) / (s + .05);
25
25
  }
26
- var p = /^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i, m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i, re = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;
27
- function h(e) {
26
+ var ne = /^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i, re = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i, ie = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;
27
+ function m(e) {
28
28
  if (typeof e != "string") return null;
29
- let t = e.trim(), n = re.exec(t);
29
+ let t = e.trim(), n = ie.exec(t);
30
30
  if (n) return n[4].toLowerCase() === "ff" ? {
31
31
  r: parseInt(n[1], 16),
32
32
  g: parseInt(n[2], 16),
33
33
  b: parseInt(n[3], 16)
34
34
  } : null;
35
- let r = m.exec(t);
35
+ let r = re.exec(t);
36
36
  if (r) return {
37
37
  r: parseInt(r[1], 16),
38
38
  g: parseInt(r[2], 16),
39
39
  b: parseInt(r[3], 16)
40
40
  };
41
- let i = p.exec(t);
41
+ let i = ne.exec(t);
42
42
  return i ? {
43
43
  r: parseInt(i[1] + i[1], 16),
44
44
  g: parseInt(i[2] + i[2], 16),
45
45
  b: parseInt(i[3] + i[3], 16)
46
46
  } : null;
47
47
  }
48
- function g(e) {
49
- return h(e ?? "") !== null;
48
+ function h(e) {
49
+ return m(e ?? "") !== null;
50
50
  }
51
- function _({ r: e, g: t, b: n }) {
52
- let r = v(e / 255), i = v(t / 255), a = v(n / 255);
51
+ function g({ r: e, g: t, b: n }) {
52
+ let r = _(e / 255), i = _(t / 255), a = _(n / 255);
53
53
  return .2126 * r + .7152 * i + .0722 * a;
54
54
  }
55
- function v(e) {
55
+ function _(e) {
56
56
  return e <= .03928 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4;
57
57
  }
58
58
  //#endregion
59
59
  //#region ../quality/src/walk.ts
60
- var y = "#ffffff", b = "#1a1a1a";
61
- function x(e, n) {
62
- let r = g(e.settings.backgroundColor) ? e.settings.backgroundColor.toLowerCase() : y, i = g(e.settings.textColor) ? e.settings.textColor.toLowerCase() : b, a = (e, r) => {
63
- let i = e.styles?.backgroundColor, o = g(i) ? i.toLowerCase() : r.resolvedBackgroundColor;
64
- n(e, o === r.resolvedBackgroundColor ? r : {
65
- ...r,
60
+ var v = "#ffffff", y = "#1a1a1a";
61
+ function b(e, t) {
62
+ let n = h(e.settings.backgroundColor) ? e.settings.backgroundColor.toLowerCase() : v, r = h(e.settings.textColor) ? e.settings.textColor.toLowerCase() : y, a = (e, n) => {
63
+ let r = e.styles?.backgroundColor, o = h(r) ? r.toLowerCase() : n.resolvedBackgroundColor;
64
+ t(e, o === n.resolvedBackgroundColor ? n : {
65
+ ...n,
66
66
  resolvedBackgroundColor: o
67
- }), t(e) && e.children.forEach((t, n) => {
67
+ }), i(e) && e.children.forEach((t, r) => {
68
68
  t.forEach((t) => a(t, {
69
69
  parent: e,
70
70
  section: e,
71
- columnIndex: n,
72
- depth: r.depth + 1,
71
+ columnIndex: r,
72
+ depth: n.depth + 1,
73
73
  resolvedBackgroundColor: o,
74
- resolvedTextColor: r.resolvedTextColor
74
+ resolvedTextColor: n.resolvedTextColor
75
75
  }));
76
76
  });
77
77
  };
@@ -80,13 +80,13 @@ function x(e, n) {
80
80
  section: null,
81
81
  columnIndex: null,
82
82
  depth: 0,
83
- resolvedBackgroundColor: r,
84
- resolvedTextColor: i
83
+ resolvedBackgroundColor: n,
84
+ resolvedTextColor: r
85
85
  });
86
86
  }
87
87
  //#endregion
88
88
  //#region ../quality/src/run-rules.ts
89
- function S(e, t, n, r) {
89
+ function x(e, t, n, r) {
90
90
  let i = [];
91
91
  function a(e, t, i) {
92
92
  return {
@@ -97,7 +97,7 @@ function S(e, t, n, r) {
97
97
  fix: i.fix
98
98
  };
99
99
  }
100
- x(e, (e, r) => {
100
+ b(e, (e, r) => {
101
101
  for (let o of t) {
102
102
  let t = n.severity(o.meta.id);
103
103
  if (t === "off" || !o.block) continue;
@@ -113,11 +113,11 @@ function S(e, t, n, r) {
113
113
  }
114
114
  return i;
115
115
  }
116
- function C(e) {
116
+ function S(e) {
117
117
  let t = e.overrides ?? {}, n = {
118
- ...te,
118
+ ...d,
119
119
  ...e.thresholds ?? {}
120
- }, r = { nonProductionHosts: e.nonProductionHosts ?? ne }, i = e.locale ?? "en", a = e.rules;
120
+ }, r = { nonProductionHosts: e.nonProductionHosts ?? f }, i = e.locale ?? "en", a = e.rules;
121
121
  return {
122
122
  locale: i,
123
123
  rules: t,
@@ -129,8 +129,8 @@ function C(e) {
129
129
  }
130
130
  };
131
131
  }
132
- function ie(e, t, n) {
133
- return C({
132
+ function ae(e, t, n) {
133
+ return S({
134
134
  locale: e,
135
135
  rules: n,
136
136
  overrides: t.rules,
@@ -138,8 +138,8 @@ function ie(e, t, n) {
138
138
  nonProductionHosts: void 0
139
139
  });
140
140
  }
141
- function ae(e, t, n) {
142
- return C({
141
+ function oe(e, t, n) {
142
+ return S({
143
143
  locale: e,
144
144
  rules: n,
145
145
  overrides: t.rules,
@@ -147,8 +147,8 @@ function ae(e, t, n) {
147
147
  nonProductionHosts: void 0
148
148
  });
149
149
  }
150
- function oe(e, t, n) {
151
- return C({
150
+ function se(e, t, n) {
151
+ return S({
152
152
  locale: e,
153
153
  rules: n,
154
154
  overrides: t.rules,
@@ -158,7 +158,7 @@ function oe(e, t, n) {
158
158
  }
159
159
  //#endregion
160
160
  //#region ../quality/src/accessibility/messages/de.ts
161
- var se = /* @__PURE__ */ e({ default: () => ce }), ce = {
161
+ var ce = /* @__PURE__ */ e({ default: () => le }), le = {
162
162
  "a11y.img-missing-alt": "Bild ohne Alt-Text. Füge eine kurze Beschreibung hinzu oder markiere das Bild als dekorativ.",
163
163
  "a11y.img-alt-is-filename": "Alt-Text sieht wie ein Dateiname aus (\"{alt}\"). Beschreibe stattdessen kurz, was das Bild zeigt.",
164
164
  "a11y.img-alt-too-long": "Alt-Text ist {length} Zeichen lang; bleibe unter {max}.",
@@ -173,13 +173,14 @@ var se = /* @__PURE__ */ e({ default: () => ce }), ce = {
173
173
  "a11y.link-target-blank-no-rel": "Link öffnet in neuem Tab, aber rel=\"noopener\" fehlt – ergänze es, damit das Ziel nicht auf window.opener zugreifen kann.",
174
174
  "a11y.link-nested-anchor": "Ein Link liegt innerhalb eines anderen Links. Verschachtelte Anker sind ungültiges HTML und werden von E-Mail-Clients unterschiedlich gerendert – flache einen einzigen Anker daraus.",
175
175
  "a11y.text-all-caps": "Längere Texte in Großbuchstaben sind schwerer lesbar. Verwende Groß- und Kleinschreibung.",
176
+ "a11y.text-justified": "Blocksatz dehnt die Wortabstände zu ungleichmäßigen „Flüssen“ aus Leerraum, die für Menschen mit Legasthenie und Sehbeeinträchtigung am schwersten zu verfolgen sind. Verwende linksbündigen Text.",
176
177
  "a11y.text-low-contrast": "Überschriftskontrast beträgt {ratio}:1; WCAG AA verlangt mindestens {required}:1.",
177
178
  "a11y.text-too-small": "Text ist {size}px; mindestens {min}px verwenden.",
178
179
  "a11y.button-vague-label": "Button-Beschriftung „{text}“ ist unspezifisch. Beschreibe die Aktion.",
179
180
  "a11y.button-touch-target": "Button ist etwa {height}px hoch; mindestens {min}px verwenden, um Fehltipper auf Mobilgeräten zu vermeiden.",
180
181
  "a11y.button-low-contrast": "Buttontextkontrast beträgt {ratio}:1; WCAG AA verlangt mindestens {required}:1.",
181
182
  "a11y.missing-preheader": "Kein Preheader-Text gesetzt. Postfächer zeigen sonst Bruchstücke des ersten Blocks an."
182
- }, le = /* @__PURE__ */ e({ default: () => w }), w = {
183
+ }, ue = /* @__PURE__ */ e({ default: () => C }), C = {
183
184
  "a11y.img-missing-alt": "Image is missing alt text. Add a short description, or mark the image as decorative.",
184
185
  "a11y.img-alt-is-filename": "Alt text looks like a filename (\"{alt}\"). Replace with a short description of what the image conveys.",
185
186
  "a11y.img-alt-too-long": "Alt text is {length} characters; aim for under {max}.",
@@ -194,82 +195,83 @@ var se = /* @__PURE__ */ e({ default: () => ce }), ce = {
194
195
  "a11y.link-target-blank-no-rel": "Link opens in a new tab but is missing rel=\"noopener\" — add it to prevent the destination from accessing window.opener.",
195
196
  "a11y.link-nested-anchor": "A link is nested inside another link. Nested anchors are invalid HTML and clients render them inconsistently — flatten to a single anchor.",
196
197
  "a11y.text-all-caps": "Long all-caps text is harder to read for everyone. Use sentence case.",
198
+ "a11y.text-justified": "Justified text stretches word spacing into uneven 'rivers' of white space, which is hardest to track for dyslexic and low-vision readers. Use left-aligned text.",
197
199
  "a11y.text-low-contrast": "Heading contrast is {ratio}:1; WCAG AA requires at least {required}:1.",
198
200
  "a11y.text-too-small": "Text is {size}px; aim for at least {min}px.",
199
201
  "a11y.button-vague-label": "Button label \"{text}\" is vague. Describe the action.",
200
202
  "a11y.button-touch-target": "Button is roughly {height}px tall; aim for at least {min}px to avoid mis-taps on mobile.",
201
203
  "a11y.button-low-contrast": "Button text contrast is {ratio}:1; WCAG AA requires at least {required}:1.",
202
204
  "a11y.missing-preheader": "No preheader text set. Inboxes will fall back to fragments of the first block."
203
- }, T = /* #__PURE__ */ Object.assign({
204
- "./de.ts": se,
205
- "./en.ts": le
206
- }), E = {};
207
- for (let e in T) {
205
+ }, w = /* #__PURE__ */ Object.assign({
206
+ "./de.ts": ce,
207
+ "./en.ts": ue
208
+ }), T = {};
209
+ for (let e in w) {
208
210
  let t = /\.\/([^/]+)\.ts$/.exec(e);
209
211
  if (!t) continue;
210
212
  let n = t[1];
211
- n !== "index" && (E[n] = T[e].default);
213
+ n !== "index" && (T[n] = w[e].default);
212
214
  }
213
- function ue(e) {
214
- return E[e.split("-")[0]?.toLowerCase() ?? "en"] ?? E.en ?? w;
215
+ function de(e) {
216
+ return T[e.split("-")[0]?.toLowerCase() ?? "en"] ?? T.en ?? C;
215
217
  }
216
- function de(e, t, n) {
217
- let r = ue(e)[t] ?? w[t];
218
+ function fe(e, t, n) {
219
+ let r = de(e)[t] ?? C[t];
218
220
  return n ? r.replace(/\{(\w+)\}/g, (e, t) => {
219
221
  let r = n[t];
220
222
  return r === void 0 ? `{${t}}` : String(r);
221
223
  }) : r;
222
224
  }
223
- var fe = {
225
+ var pe = {
224
226
  meta: {
225
227
  id: "a11y.img-missing-alt",
226
228
  severity: "error"
227
229
  },
228
230
  block(e) {
229
- return !n(e) || e.decorative === !0 || (e.alt?.trim() ?? "") !== "" || (e.src ?? "").trim() === "" ? null : { blockId: e.id };
231
+ return !a(e) || e.decorative === !0 || (e.alt?.trim() ?? "") !== "" || (e.src ?? "").trim() === "" ? null : { blockId: e.id };
230
232
  }
231
- }, pe = {
233
+ }, me = {
232
234
  id: "a11y.img-alt-is-filename",
233
235
  severity: "warning"
234
- }, me = [
236
+ }, he = [
235
237
  /\.(jpe?g|png|gif|webp|svg)$/i,
236
238
  /^IMG[_-]?\d+/i,
237
239
  /^Untitled/i,
238
240
  /^Screen[\s_-]?Shot/i,
239
241
  /^DSC[_-]?\d+/i
240
- ], he = {
241
- meta: pe,
242
+ ], ge = {
243
+ meta: me,
242
244
  block(e) {
243
- if (!n(e) || e.decorative === !0) return null;
245
+ if (!a(e) || e.decorative === !0) return null;
244
246
  let t = e.alt?.trim() ?? "";
245
- return t === "" || !me.some((e) => e.test(t)) ? null : {
247
+ return t === "" || !he.some((e) => e.test(t)) ? null : {
246
248
  blockId: e.id,
247
249
  params: { alt: t }
248
250
  };
249
251
  }
250
- }, ge = {
252
+ }, _e = {
251
253
  meta: {
252
254
  id: "a11y.img-alt-too-long",
253
255
  severity: "warning"
254
256
  },
255
- block(e, t, r) {
256
- if (!n(e) || e.decorative === !0) return null;
257
- let i = e.alt ?? "";
258
- return i.length <= r.thresholds.altMaxLength ? null : {
257
+ block(e, t, n) {
258
+ if (!a(e) || e.decorative === !0) return null;
259
+ let r = e.alt ?? "";
260
+ return r.length <= n.thresholds.altMaxLength ? null : {
259
261
  blockId: e.id,
260
262
  params: {
261
- length: i.length,
262
- max: r.thresholds.altMaxLength
263
+ length: r.length,
264
+ max: n.thresholds.altMaxLength
263
265
  }
264
266
  };
265
267
  }
266
- }, _e = {
268
+ }, ve = {
267
269
  meta: {
268
270
  id: "a11y.img-decorative-needs-empty-alt",
269
271
  severity: "info"
270
272
  },
271
273
  block(e) {
272
- return !n(e) || e.decorative !== !0 || (e.alt ?? "").trim() === "" ? null : {
274
+ return !a(e) || e.decorative !== !0 || (e.alt ?? "").trim() === "" ? null : {
273
275
  blockId: e.id,
274
276
  fix: {
275
277
  description: "Clear alt text",
@@ -277,7 +279,7 @@ var fe = {
277
279
  }
278
280
  };
279
281
  }
280
- }, ve = /* @__PURE__ */ e({ default: () => ye }), ye = {
282
+ }, ye = /* @__PURE__ */ e({ default: () => be }), be = {
281
283
  vagueLinkText: [
282
284
  "hier klicken",
283
285
  "hier",
@@ -320,7 +322,7 @@ var fe = {
320
322
  "anschauen",
321
323
  "jetzt"
322
324
  ]
323
- }, D = /* @__PURE__ */ e({ default: () => O }), O = {
325
+ }, xe = /* @__PURE__ */ e({ default: () => E }), E = {
324
326
  vagueLinkText: [
325
327
  "click here",
326
328
  "here",
@@ -361,51 +363,51 @@ var fe = {
361
363
  "redeem",
362
364
  "watch"
363
365
  ]
364
- }, k = /* #__PURE__ */ Object.assign({
365
- "./de.ts": ve,
366
- "./en.ts": D
367
- }), A = {};
368
- for (let e in k) {
366
+ }, D = /* #__PURE__ */ Object.assign({
367
+ "./de.ts": ye,
368
+ "./en.ts": xe
369
+ }), O = {};
370
+ for (let e in D) {
369
371
  let t = /\.\/([^/]+)\.ts$/.exec(e);
370
372
  if (!t) continue;
371
373
  let n = t[1];
372
- n !== "index" && (A[n] = k[e].default);
374
+ n !== "index" && (O[n] = D[e].default);
373
375
  }
374
- function j(e) {
375
- return N;
376
+ function k(e) {
377
+ return j;
376
378
  }
377
- function M(e) {
379
+ function A(e) {
378
380
  let t = /* @__PURE__ */ new Set();
379
- for (let n of Object.values(A)) for (let r of e(n)) t.add(r);
381
+ for (let n of Object.values(O)) for (let r of e(n)) t.add(r);
380
382
  return Array.from(t);
381
383
  }
382
- var N = {
383
- vagueLinkText: M((e) => e.vagueLinkText),
384
- vagueButtonLabels: M((e) => e.vagueButtonLabels),
385
- linkedImageActionHints: M((e) => e.linkedImageActionHints)
384
+ var j = {
385
+ vagueLinkText: A((e) => e.vagueLinkText),
386
+ vagueButtonLabels: A((e) => e.vagueButtonLabels),
387
+ linkedImageActionHints: A((e) => e.linkedImageActionHints)
386
388
  };
387
- function P(e) {
389
+ function M(e) {
388
390
  return e.toLowerCase().replace(/\s+/g, " ").replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu, "").trim();
389
391
  }
390
- var be = {
392
+ var Se = {
391
393
  meta: {
392
394
  id: "a11y.img-linked-no-context",
393
395
  severity: "warning"
394
396
  },
395
- block(e, t, r) {
396
- if (!n(e) || e.decorative === !0 || !e.linkUrl || e.linkUrl.trim() === "") return null;
397
- let i = (e.alt ?? "").trim();
398
- if (i === "") return null;
399
- let a = i.toLocaleLowerCase().split(/[^\p{L}\p{N}]+/u).filter(Boolean), o = j(r.locale).linkedImageActionHints;
400
- return a.some((e) => o.includes(e)) ? null : { blockId: e.id };
397
+ block(e, t, n) {
398
+ if (!a(e) || e.decorative === !0 || !e.linkUrl || e.linkUrl.trim() === "") return null;
399
+ let r = (e.alt ?? "").trim();
400
+ if (r === "") return null;
401
+ let i = r.toLocaleLowerCase().split(/[^\p{L}\p{N}]+/u).filter(Boolean), o = k(n.locale).linkedImageActionHints;
402
+ return i.some((e) => o.includes(e)) ? null : { blockId: e.id };
401
403
  }
402
404
  };
403
405
  //#endregion
404
406
  //#region ../quality/src/html-utils.ts
405
- function F(e) {
407
+ function N(e) {
406
408
  let t = [], n = null, r = "", i = () => {
407
409
  n !== null && (n.text = r.trim(), t.push(n), n = null, r = "");
408
- }, a = new d({
410
+ }, a = new u({
409
411
  onopentag(e, t) {
410
412
  if (e === "a") {
411
413
  i(), n = {
@@ -428,8 +430,8 @@ function F(e) {
428
430
  });
429
431
  return a.write(e), a.end(), i(), t;
430
432
  }
431
- function xe(e) {
432
- let t = Se(e).matchAll(/<\/?a\b[^<>]*>/gi), n = 0;
433
+ function Ce(e) {
434
+ let t = we(e).matchAll(/<\/?a\b[^<>]*>/gi), n = 0;
433
435
  for (let e of t) {
434
436
  if (e[0].startsWith("</")) {
435
437
  n > 0 && n--;
@@ -440,7 +442,7 @@ function xe(e) {
440
442
  }
441
443
  return !1;
442
444
  }
443
- function Se(e) {
445
+ function we(e) {
444
446
  let t = "", n = 0;
445
447
  for (; n < e.length;) {
446
448
  let r = e.indexOf("<!--", n);
@@ -455,38 +457,38 @@ function Se(e) {
455
457
  }
456
458
  return t;
457
459
  }
458
- function I(e) {
459
- let t = "", n = new d({ ontext(e) {
460
+ function P(e) {
461
+ let t = "", n = new u({ ontext(e) {
460
462
  t += e;
461
463
  } });
462
464
  return n.write(e), n.end(), t.trim();
463
465
  }
464
- var Ce = {
466
+ var Te = {
465
467
  meta: {
466
468
  id: "a11y.heading-empty",
467
469
  severity: "error"
468
470
  },
469
471
  block(e) {
470
- return !u(e) || I(e.content ?? "") !== "" ? null : { blockId: e.id };
472
+ return !s(e) || P(e.content ?? "") !== "" ? null : { blockId: e.id };
471
473
  }
472
- }, we = {
474
+ }, Ee = {
473
475
  id: "a11y.heading-skip-level",
474
476
  severity: "error"
475
477
  };
476
- function L(e, n) {
477
- for (let r of e) {
478
- if (u(r)) {
479
- n.push(r);
478
+ function F(e, t) {
479
+ for (let n of e) {
480
+ if (s(n)) {
481
+ t.push(n);
480
482
  continue;
481
483
  }
482
- if (t(r)) for (let e of r.children) L(e, n);
484
+ if (i(n)) for (let e of n.children) F(e, t);
483
485
  }
484
486
  }
485
- var Te = {
486
- meta: we,
487
+ var De = {
488
+ meta: Ee,
487
489
  template(e) {
488
490
  let t = [];
489
- L(e.blocks, t);
491
+ F(e.blocks, t);
490
492
  let n = [], r = 0;
491
493
  for (let e of t) r !== 0 && e.level > r + 1 && n.push({
492
494
  blockId: e.id,
@@ -497,54 +499,54 @@ var Te = {
497
499
  }), r = e.level;
498
500
  return n;
499
501
  }
500
- }, Ee = {
502
+ }, Oe = {
501
503
  id: "a11y.heading-multiple-h1",
502
504
  severity: "warning"
503
505
  };
504
- function R(e, n) {
505
- for (let r of e) {
506
- if (u(r)) {
507
- n.push(r);
506
+ function I(e, t) {
507
+ for (let n of e) {
508
+ if (s(n)) {
509
+ t.push(n);
508
510
  continue;
509
511
  }
510
- if (t(r)) for (let e of r.children) R(e, n);
512
+ if (i(n)) for (let e of n.children) I(e, t);
511
513
  }
512
514
  }
513
- var De = {
514
- meta: Ee,
515
+ var ke = {
516
+ meta: Oe,
515
517
  template(e) {
516
518
  let t = [];
517
- R(e.blocks, t);
519
+ I(e.blocks, t);
518
520
  let n = t.filter((e) => e.level === 1);
519
521
  return n.length <= 1 ? [] : n.slice(1).map((e) => ({ blockId: e.id }));
520
522
  }
521
- }, Oe = {
523
+ }, Ae = {
522
524
  id: "a11y.link-empty",
523
525
  severity: "error"
524
526
  };
525
- function ke(e) {
526
- return l(e) || u(e) ? e.content : null;
527
+ function je(e) {
528
+ return n(e) || s(e) ? e.content : null;
527
529
  }
528
- var Ae = {
529
- meta: Oe,
530
+ var Me = {
531
+ meta: Ae,
530
532
  block(e) {
531
- let t = ke(e);
532
- return t === null || !F(t).find((e) => e.text === "" && !e.hasImageWithAlt) ? null : { blockId: e.id };
533
+ let t = je(e);
534
+ return t === null || !N(t).find((e) => e.text === "" && !e.hasImageWithAlt) ? null : { blockId: e.id };
533
535
  }
534
- }, je = {
536
+ }, Ne = {
535
537
  id: "a11y.link-vague-text",
536
538
  severity: "warning"
537
539
  };
538
- function Me(e) {
539
- return l(e) || u(e) ? e.content : null;
540
+ function Pe(e) {
541
+ return n(e) || s(e) ? e.content : null;
540
542
  }
541
- var Ne = {
542
- meta: je,
543
+ var Fe = {
544
+ meta: Ne,
543
545
  block(e, t, n) {
544
- let r = Me(e);
546
+ let r = Pe(e);
545
547
  if (r === null) return null;
546
- let i = j(n.locale).vagueLinkText, a = F(r).find((e) => {
547
- let t = P(e.text);
548
+ let i = k(n.locale).vagueLinkText, a = N(r).find((e) => {
549
+ let t = M(e.text);
548
550
  return t !== "" && i.includes(t);
549
551
  });
550
552
  return a ? {
@@ -552,53 +554,53 @@ var Ne = {
552
554
  params: { text: a.text }
553
555
  } : null;
554
556
  }
555
- }, Pe = {
557
+ }, Ie = {
556
558
  id: "a11y.link-href-empty",
557
559
  severity: "error"
558
560
  };
559
- function Fe(e) {
560
- return l(e) || u(e) ? e.content : null;
561
+ function Le(e) {
562
+ return n(e) || s(e) ? e.content : null;
561
563
  }
562
- var Ie = {
563
- meta: Pe,
564
+ var Re = {
565
+ meta: Ie,
564
566
  block(e) {
565
- let t = Fe(e);
566
- return t === null || !F(t).find((e) => {
567
+ let t = Le(e);
568
+ return t === null || !N(t).find((e) => {
567
569
  let t = e.href.trim();
568
570
  return t === "" || t === "#";
569
571
  }) ? null : { blockId: e.id };
570
572
  }
571
- }, Le = {
573
+ }, ze = {
572
574
  id: "a11y.link-target-blank-no-rel",
573
575
  severity: "warning"
574
576
  };
575
- function Re(e) {
576
- return l(e) || u(e) ? e.content : null;
577
+ function Be(e) {
578
+ return n(e) || s(e) ? e.content : null;
577
579
  }
578
- function ze(e) {
580
+ function Ve(e) {
579
581
  if (e === null) return !1;
580
582
  let t = e.toLowerCase().split(/\s+/);
581
583
  return t.includes("noopener") || t.includes("noreferrer");
582
584
  }
583
- var Be = {
584
- meta: Le,
585
+ var He = {
586
+ meta: ze,
585
587
  block(e) {
586
- let t = Re(e);
587
- return t === null || !F(t).find((e) => e.target === "_blank" && !ze(e.rel)) ? null : {
588
+ let t = Be(e);
589
+ return t === null || !N(t).find((e) => e.target === "_blank" && !Ve(e.rel)) ? null : {
588
590
  blockId: e.id,
589
591
  fix: {
590
592
  description: "Add rel=\"noopener\"",
591
593
  apply: (t) => {
592
- if (!l(e) && !u(e)) return;
593
- let n = Ue(e.content ?? "");
594
- t.updateBlock(e.id, { content: n });
594
+ if (!n(e) && !s(e)) return;
595
+ let r = Ge(e.content ?? "");
596
+ t.updateBlock(e.id, { content: r });
595
597
  }
596
598
  }
597
599
  };
598
600
  }
599
- }, z = /([^\s"'>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
600
- function Ve(e) {
601
- let t = [], n = new RegExp(z.source, z.flags), r;
601
+ }, L = /([^\s"'>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
602
+ function Ue(e) {
603
+ let t = [], n = new RegExp(L.source, L.flags), r;
602
604
  for (; (r = n.exec(e)) !== null;) t.push({
603
605
  raw: r[0],
604
606
  name: r[1],
@@ -607,13 +609,13 @@ function Ve(e) {
607
609
  });
608
610
  return t;
609
611
  }
610
- function He(e) {
612
+ function We(e) {
611
613
  return e.some((e) => e.name.toLowerCase() === "target" && e.value !== null && e.value.toLowerCase() === "_blank");
612
614
  }
613
- function Ue(e) {
615
+ function Ge(e) {
614
616
  return e.replace(/<a\b([^>]*)>/gi, (e, t) => {
615
- let n = Ve(t);
616
- if (!He(n)) return e;
617
+ let n = Ue(t);
618
+ if (!We(n)) return e;
617
619
  let r = n.find((e) => e.name.toLowerCase() === "rel");
618
620
  if (r) {
619
621
  let n = (r.value ?? "").toLowerCase().split(/\s+/);
@@ -626,76 +628,114 @@ function Ue(e) {
626
628
  }
627
629
  //#endregion
628
630
  //#region ../quality/src/accessibility/rules/link-nested-anchor.ts
629
- var We = {
631
+ var R = {
630
632
  id: "a11y.link-nested-anchor",
631
633
  severity: "error"
632
634
  };
633
- function Ge(e) {
634
- return l(e) || u(e) ? e.content : null;
635
+ function Ke(e) {
636
+ return n(e) || s(e) ? e.content : null;
635
637
  }
636
- var B = {
637
- meta: We,
638
+ var qe = {
639
+ meta: R,
638
640
  block(e) {
639
- let t = Ge(e);
640
- return t === null || !xe(t) ? null : { blockId: e.id };
641
+ let t = Ke(e);
642
+ return t === null || !Ce(t) ? null : { blockId: e.id };
641
643
  }
642
- }, Ke = {
644
+ }, Je = {
643
645
  meta: {
644
646
  id: "a11y.text-all-caps",
645
647
  severity: "warning"
646
648
  },
647
- block(e, t, n) {
648
- if (!l(e) && !u(e)) return null;
649
- let r = I(e.content ?? "").replace(/[^\p{L}]/gu, "");
650
- return r.length < n.thresholds.allCapsMinLength || r !== r.toLocaleUpperCase() ? null : { blockId: e.id };
649
+ block(e, t, r) {
650
+ if (!n(e) && !s(e)) return null;
651
+ let i = P(e.content ?? "").replace(/[^\p{L}]/gu, "");
652
+ return i.length < r.thresholds.allCapsMinLength || i !== i.toLocaleUpperCase() ? null : { blockId: e.id };
651
653
  }
652
- }, qe = {
654
+ }, Ye = {
655
+ id: "a11y.text-justified",
656
+ severity: "warning"
657
+ }, Xe = /(^|;)\s*text-align\s*:\s*([^;]*)/i, z = /\sstyle\s*=\s*(?:"([^"]*)"|'([^']*)')/gi;
658
+ function Ze(e) {
659
+ let t = [], n = new RegExp(z.source, z.flags), r;
660
+ for (; (r = n.exec(e)) !== null;) t.push(r[1] ?? r[2] ?? "");
661
+ return t;
662
+ }
663
+ function B(e) {
664
+ let t = Xe.exec(e);
665
+ return t !== null && t[2].trim().toLowerCase() === "justify";
666
+ }
667
+ function Qe(e) {
668
+ return e.split(";").filter((e) => !/^\s*text-align\s*:/i.test(e)).map((e) => e.trim()).filter((e) => e !== "").join("; ");
669
+ }
670
+ function $e(e) {
671
+ return e.replace(/\sstyle\s*=\s*(?:"([^"]*)"|'([^']*)')/gi, (e, t, n) => {
672
+ let r = t ?? n ?? "";
673
+ if (!B(r)) return e;
674
+ let i = Qe(r);
675
+ return i === "" ? "" : ` style="${i}"`;
676
+ });
677
+ }
678
+ var et = {
679
+ meta: Ye,
680
+ block(e) {
681
+ return !n(e) || !Ze(e.content ?? "").some(B) ? null : {
682
+ blockId: e.id,
683
+ fix: {
684
+ description: "Remove justified alignment",
685
+ apply: (t) => {
686
+ n(e) && t.updateBlock(e.id, { content: $e(e.content ?? "") });
687
+ }
688
+ }
689
+ };
690
+ }
691
+ }, tt = {
653
692
  meta: {
654
693
  id: "a11y.text-low-contrast",
655
694
  severity: "error"
656
695
  },
657
- block(e, t) {
658
- if (!u(e)) return null;
659
- let n = e.color ?? t.resolvedTextColor;
660
- if (!g(n) || !g(t.resolvedBackgroundColor)) return null;
661
- let r = a[e.level] >= 24 ? 3 : 4.5, i = f(n, t.resolvedBackgroundColor);
662
- return Number.isNaN(i) || i >= r ? null : {
696
+ block(e, n) {
697
+ if (!s(e)) return null;
698
+ let r = e.color ?? n.resolvedTextColor;
699
+ if (!h(r) || !h(n.resolvedBackgroundColor)) return null;
700
+ let i = t[e.level] >= 24 ? 3 : 4.5, a = p(r, n.resolvedBackgroundColor);
701
+ return Number.isNaN(a) || a >= i ? null : {
663
702
  blockId: e.id,
664
703
  params: {
665
- ratio: i.toFixed(2),
666
- required: r
704
+ ratio: a.toFixed(2),
705
+ required: i
667
706
  }
668
707
  };
669
708
  }
670
- }, Je = {
709
+ }, nt = {
671
710
  id: "a11y.text-too-small",
672
711
  severity: "warning"
673
712
  };
674
- function Ye(e) {
675
- return s(e) || r(e) ? e.fontSize : null;
713
+ function rt(e) {
714
+ return o(e) || ee(e) ? e.fontSize : null;
676
715
  }
677
716
  //#endregion
678
717
  //#region ../quality/src/accessibility/index.ts
679
718
  var V = [
680
- fe,
681
- he,
719
+ pe,
682
720
  ge,
683
721
  _e,
684
- be,
685
- Ce,
722
+ ve,
723
+ Se,
686
724
  Te,
687
725
  De,
688
- Ae,
689
- Ne,
690
- Ie,
691
- Be,
692
- B,
693
- Ke,
726
+ ke,
727
+ Me,
728
+ Fe,
729
+ Re,
730
+ He,
694
731
  qe,
732
+ Je,
733
+ et,
734
+ tt,
695
735
  {
696
- meta: Je,
736
+ meta: nt,
697
737
  block(e, t, n) {
698
- let r = Ye(e);
738
+ let r = rt(e);
699
739
  return r === null || r >= n.thresholds.minFontSize ? null : {
700
740
  blockId: e.id,
701
741
  params: {
@@ -711,9 +751,9 @@ var V = [
711
751
  severity: "warning"
712
752
  },
713
753
  block(e, t, n) {
714
- if (!o(e)) return null;
715
- let r = P(e.text ?? "");
716
- return r === "" || !j(n.locale).vagueButtonLabels.includes(r) ? null : {
754
+ if (!l(e)) return null;
755
+ let r = M(e.text ?? "");
756
+ return r === "" || !k(n.locale).vagueButtonLabels.includes(r) ? null : {
717
757
  blockId: e.id,
718
758
  params: { text: e.text }
719
759
  };
@@ -725,7 +765,7 @@ var V = [
725
765
  severity: "warning"
726
766
  },
727
767
  block(e, t, n) {
728
- if (!o(e)) return null;
768
+ if (!l(e)) return null;
729
769
  let r = e.buttonPadding;
730
770
  if (!r) return null;
731
771
  let i = e.fontSize * 1.4 + r.top + r.bottom;
@@ -744,8 +784,8 @@ var V = [
744
784
  severity: "error"
745
785
  },
746
786
  block(e) {
747
- if (!o(e)) return null;
748
- let t = f(e.textColor, e.backgroundColor);
787
+ if (!l(e)) return null;
788
+ let t = p(e.textColor, e.backgroundColor);
749
789
  if (Number.isNaN(t)) return null;
750
790
  let n = e.fontSize >= 24 ? 3 : 4.5;
751
791
  return t >= n ? null : {
@@ -767,26 +807,26 @@ var V = [
767
807
  }
768
808
  }
769
809
  ];
770
- function Xe(e, t = {}) {
771
- return t.disabled === !0 || t.accessibility === !1 ? [] : S(e, V, ie(t.locale, t.accessibility ?? {}, V), (e, t, n) => de(e, t, n));
810
+ function it(e, t = {}) {
811
+ return t.disabled === !0 || t.accessibility === !1 ? [] : x(e, V, ae(t.locale, t.accessibility ?? {}, V), (e, t, n) => fe(e, t, n));
772
812
  }
773
813
  //#endregion
774
814
  //#region ../quality/src/structure/messages/de.ts
775
- var Ze = /* @__PURE__ */ e({ default: () => Qe }), Qe = {
815
+ var at = /* @__PURE__ */ e({ default: () => ot }), ot = {
776
816
  "structure.duplicate-block-id": "Block-ID erscheint {count}-mal im Baum. Jeder Block muss eine eindeutige ID haben.",
777
817
  "structure.section-column-mismatch": "Sektion verwendet Layout „{layout}\" (erwartet {expected} Spalten), hat aber {actual}. Deutet auf beschädigten Zustand hin.",
778
818
  "structure.nested-section": "Sektion ist in einer anderen Sektion verschachtelt. Sektionen können nicht verschachtelt werden – der Renderer wird sich falsch verhalten.",
779
819
  "structure.empty-section": "Sektion enthält keine Blöcke. Entferne sie oder füge Inhalt hinzu.",
780
820
  "structure.empty-column": "Spalte {columnIndex} dieser Sektion ist leer. Füge Inhalt hinzu oder reduziere die Spaltenanzahl."
781
- }, $e = /* @__PURE__ */ e({ default: () => H }), H = {
821
+ }, st = /* @__PURE__ */ e({ default: () => H }), H = {
782
822
  "structure.duplicate-block-id": "Block id appears {count} times in the tree. Each block must have a unique id.",
783
823
  "structure.section-column-mismatch": "Section uses layout \"{layout}\" (expects {expected} columns) but has {actual}. Indicates corrupted state.",
784
824
  "structure.nested-section": "Section is nested inside another section. Sections cannot nest — the renderer will misbehave.",
785
825
  "structure.empty-section": "Section has no blocks. Remove it or add content.",
786
826
  "structure.empty-column": "Column {columnIndex} of this section is empty. Add content or reduce the column count."
787
827
  }, U = /* #__PURE__ */ Object.assign({
788
- "./de.ts": Ze,
789
- "./en.ts": $e
828
+ "./de.ts": at,
829
+ "./en.ts": st
790
830
  }), W = {};
791
831
  for (let e in U) {
792
832
  let t = /\.\/([^/]+)\.ts$/.exec(e);
@@ -794,11 +834,11 @@ for (let e in U) {
794
834
  let n = t[1];
795
835
  n !== "index" && (W[n] = U[e].default);
796
836
  }
797
- function et(e) {
837
+ function ct(e) {
798
838
  return W[e.split("-")[0]?.toLowerCase() ?? "en"] ?? W.en ?? H;
799
839
  }
800
- function tt(e, t, n) {
801
- let r = et(e)[t] ?? H[t];
840
+ function lt(e, t, n) {
841
+ let r = ct(e)[t] ?? H[t];
802
842
  return n ? r.replace(/\{(\w+)\}/g, (e, t) => {
803
843
  let r = n[t];
804
844
  return r === void 0 ? `{${t}}` : String(r);
@@ -806,15 +846,15 @@ function tt(e, t, n) {
806
846
  }
807
847
  //#endregion
808
848
  //#region ../quality/src/structure/rules/duplicate-block-id.ts
809
- var nt = {
849
+ var ut = {
810
850
  id: "structure.duplicate-block-id",
811
851
  severity: "error"
812
852
  };
813
- function G(e, n) {
814
- for (let r of e) if (n.set(r.id, (n.get(r.id) ?? 0) + 1), t(r)) for (let e of r.children) G(e, n);
853
+ function G(e, t) {
854
+ for (let n of e) if (t.set(n.id, (t.get(n.id) ?? 0) + 1), i(n)) for (let e of n.children) G(e, t);
815
855
  }
816
- var rt = {
817
- meta: nt,
856
+ var dt = {
857
+ meta: ut,
818
858
  template(e) {
819
859
  let t = /* @__PURE__ */ new Map();
820
860
  G(e.blocks, t);
@@ -825,112 +865,112 @@ var rt = {
825
865
  });
826
866
  return n;
827
867
  }
828
- }, it = {
868
+ }, ft = {
829
869
  id: "structure.empty-column",
830
870
  severity: "warning"
831
871
  };
832
- function K(e, n) {
833
- for (let r of e) {
834
- if (!t(r)) continue;
835
- let e = r;
836
- e.children.length > 1 && e.children.forEach((t, r) => {
837
- t.length === 0 && n.push({
872
+ function K(e, t) {
873
+ for (let n of e) {
874
+ if (!i(n)) continue;
875
+ let e = n;
876
+ e.children.length > 1 && e.children.forEach((n, r) => {
877
+ n.length === 0 && t.push({
838
878
  blockId: e.id,
839
879
  params: { columnIndex: r + 1 }
840
880
  });
841
881
  });
842
- for (let t of e.children) K(t, n);
882
+ for (let n of e.children) K(n, t);
843
883
  }
844
884
  }
845
- var at = {
846
- meta: it,
885
+ var pt = {
886
+ meta: ft,
847
887
  template(e) {
848
888
  let t = [];
849
889
  return K(e.blocks, t), t;
850
890
  }
851
- }, ot = {
891
+ }, mt = {
852
892
  id: "structure.empty-section",
853
893
  severity: "warning"
854
894
  };
855
- function st(e) {
895
+ function ht(e) {
856
896
  return e.children.length === 0 || e.children.every((e) => e.length === 0);
857
897
  }
858
- var ct = {
859
- meta: ot,
898
+ var gt = {
899
+ meta: mt,
860
900
  block(e) {
861
- if (!t(e)) return null;
862
- let n = e;
863
- return st(n) ? {
864
- blockId: n.id,
901
+ if (!i(e)) return null;
902
+ let t = e;
903
+ return ht(t) ? {
904
+ blockId: t.id,
865
905
  fix: {
866
906
  description: "Remove the empty section",
867
907
  apply: (e) => {
868
- e.removeBlock(n.id);
908
+ e.removeBlock(t.id);
869
909
  }
870
910
  }
871
911
  } : null;
872
912
  }
873
- }, lt = {
913
+ }, _t = {
874
914
  meta: {
875
915
  id: "structure.nested-section",
876
916
  severity: "error"
877
917
  },
878
- block(e, n) {
879
- return !t(e) || n.section === null ? null : {
918
+ block(e, t) {
919
+ return !i(e) || t.section === null ? null : {
880
920
  blockId: e.id,
881
- params: { parentId: n.section.id }
921
+ params: { parentId: t.section.id }
882
922
  };
883
923
  }
884
- }, ut = {
924
+ }, vt = {
885
925
  id: "structure.section-column-mismatch",
886
926
  severity: "error"
887
927
  };
888
- function dt(e) {
928
+ function yt(e) {
889
929
  return e === "1" ? 1 : e === "3" ? 3 : 2;
890
930
  }
891
931
  //#endregion
892
932
  //#region ../quality/src/structure/index.ts
893
933
  var q = [
894
- rt,
895
- ct,
896
- at,
897
- lt,
934
+ dt,
935
+ gt,
936
+ pt,
937
+ _t,
898
938
  {
899
- meta: ut,
939
+ meta: vt,
900
940
  block(e) {
901
- if (!t(e)) return null;
902
- let n = e, r = dt(n.columns), i = n.children.length;
903
- return i === r ? null : {
904
- blockId: n.id,
941
+ if (!i(e)) return null;
942
+ let t = e, n = yt(t.columns), r = t.children.length;
943
+ return r === n ? null : {
944
+ blockId: t.id,
905
945
  params: {
906
- layout: n.columns,
907
- expected: r,
908
- actual: i
946
+ layout: t.columns,
947
+ expected: n,
948
+ actual: r
909
949
  }
910
950
  };
911
951
  }
912
952
  }
913
953
  ];
914
- function ft(e, t = {}) {
915
- return t.disabled === !0 || t.structure === !1 ? [] : S(e, q, ae(t.locale, t.structure ?? {}, q), (e, t, n) => tt(e, t, n));
954
+ function bt(e, t = {}) {
955
+ return t.disabled === !0 || t.structure === !1 ? [] : x(e, q, oe(t.locale, t.structure ?? {}, q), (e, t, n) => lt(e, t, n));
916
956
  }
917
957
  //#endregion
918
958
  //#region ../quality/src/links/messages/de.ts
919
- var pt = /* @__PURE__ */ e({ default: () => mt }), mt = {
959
+ var xt = /* @__PURE__ */ e({ default: () => St }), St = {
920
960
  "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.",
921
961
  "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.",
922
962
  "link.malformed-mailto": "Der mailto:-Link ist fehlerhaft. Erwartet wird eine einzelne Empfängeradresse vor einer eventuellen Querystring (z. B. mailto:hallo@example.com).",
923
963
  "link.malformed-tel": "Der tel:-Link enthält Zeichen, die keine Ziffern, +, Leerzeichen, Bindestriche, Klammern oder Punkte sind.",
924
964
  "link.localhost-or-staging": "Der URL-Host „{host}\" entspricht einem Nicht-Produktionsmuster. Ersetze ihn vor dem Versand durch die Produktions-URL."
925
- }, ht = /* @__PURE__ */ e({ default: () => J }), J = {
965
+ }, Ct = /* @__PURE__ */ e({ default: () => J }), J = {
926
966
  "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.",
927
967
  "link.unsupported-protocol": "URL uses the \"{protocol}\" protocol, which most email clients do not support. Use http, https, mailto, tel, or sms.",
928
968
  "link.malformed-mailto": "mailto: link is malformed. Expected a single recipient address before any query string (e.g. mailto:hello@example.com).",
929
969
  "link.malformed-tel": "tel: link contains characters that are not digits, +, spaces, dashes, parentheses, or dots.",
930
970
  "link.localhost-or-staging": "URL host \"{host}\" matches a non-production pattern. Replace with the production URL before sending."
931
971
  }, Y = /* #__PURE__ */ Object.assign({
932
- "./de.ts": pt,
933
- "./en.ts": ht
972
+ "./de.ts": xt,
973
+ "./en.ts": Ct
934
974
  }), X = {};
935
975
  for (let e in Y) {
936
976
  let t = /\.\/([^/]+)\.ts$/.exec(e);
@@ -938,11 +978,11 @@ for (let e in Y) {
938
978
  let n = t[1];
939
979
  n !== "index" && (X[n] = Y[e].default);
940
980
  }
941
- function gt(e) {
981
+ function wt(e) {
942
982
  return X[e.split("-")[0]?.toLowerCase() ?? "en"] ?? X.en ?? J;
943
983
  }
944
- function _t(e, t, n) {
945
- let r = gt(e)[t] ?? J[t];
984
+ function Tt(e, t, n) {
985
+ let r = wt(e)[t] ?? J[t];
946
986
  return n ? r.replace(/\{(\w+)\}/g, (e, t) => {
947
987
  let r = n[t];
948
988
  return r === void 0 ? `{${t}}` : String(r);
@@ -952,9 +992,9 @@ function _t(e, t, n) {
952
992
  //#region ../quality/src/url-walker.ts
953
993
  function Z(e) {
954
994
  let t = [];
955
- return x(e, (e) => {
956
- if (u(e) || l(e) || c(e)) {
957
- for (let n of F(e.content)) t.push({
995
+ return b(e, (e) => {
996
+ if (s(e) || n(e) || r(e)) {
997
+ for (let n of N(e.content)) t.push({
958
998
  url: n.href,
959
999
  blockId: e.id,
960
1000
  source: "anchor",
@@ -962,7 +1002,7 @@ function Z(e) {
962
1002
  });
963
1003
  return;
964
1004
  }
965
- if (o(e)) {
1005
+ if (l(e)) {
966
1006
  t.push({
967
1007
  url: e.url,
968
1008
  blockId: e.id,
@@ -971,7 +1011,7 @@ function Z(e) {
971
1011
  });
972
1012
  return;
973
1013
  }
974
- if (n(e)) {
1014
+ if (a(e)) {
975
1015
  e.linkUrl && e.linkUrl !== "" && t.push({
976
1016
  url: e.linkUrl,
977
1017
  blockId: e.id,
@@ -980,7 +1020,7 @@ function Z(e) {
980
1020
  });
981
1021
  return;
982
1022
  }
983
- if (ee(e)) {
1023
+ if (te(e)) {
984
1024
  t.push({
985
1025
  url: e.url,
986
1026
  blockId: e.id,
@@ -989,7 +1029,7 @@ function Z(e) {
989
1029
  });
990
1030
  return;
991
1031
  }
992
- if (s(e)) {
1032
+ if (o(e)) {
993
1033
  for (let n of e.items) t.push({
994
1034
  url: n.url,
995
1035
  blockId: e.id,
@@ -998,7 +1038,7 @@ function Z(e) {
998
1038
  });
999
1039
  return;
1000
1040
  }
1001
- if (i(e)) {
1041
+ if (c(e)) {
1002
1042
  for (let n of e.icons) t.push({
1003
1043
  url: n.url,
1004
1044
  blockId: e.id,
@@ -1011,7 +1051,7 @@ function Z(e) {
1011
1051
  }
1012
1052
  //#endregion
1013
1053
  //#region ../quality/src/links/rules/javascript-protocol.ts
1014
- var vt = {
1054
+ var Et = {
1015
1055
  id: "link.javascript-protocol",
1016
1056
  severity: "error"
1017
1057
  }, Q = [
@@ -1019,18 +1059,18 @@ var vt = {
1019
1059
  "data",
1020
1060
  "vbscript"
1021
1061
  ];
1022
- function yt(e) {
1062
+ function Dt(e) {
1023
1063
  if (!e) return null;
1024
1064
  let t = e.replace(/\s+/g, "");
1025
1065
  for (let e of Q) if (RegExp(`^${e}:`, "i").test(t)) return e;
1026
1066
  return null;
1027
1067
  }
1028
- var bt = {
1029
- meta: vt,
1068
+ var Ot = {
1069
+ meta: Et,
1030
1070
  template(e) {
1031
1071
  let t = [];
1032
1072
  for (let n of Z(e)) {
1033
- let e = yt(n.url);
1073
+ let e = Dt(n.url);
1034
1074
  e !== null && t.push({
1035
1075
  blockId: n.blockId,
1036
1076
  params: { protocol: e }
@@ -1038,39 +1078,39 @@ var bt = {
1038
1078
  }
1039
1079
  return t;
1040
1080
  }
1041
- }, xt = {
1081
+ }, kt = {
1042
1082
  id: "link.unsupported-protocol",
1043
1083
  severity: "warning"
1044
- }, St = /* @__PURE__ */ new Set([
1084
+ }, At = /* @__PURE__ */ new Set([
1045
1085
  "http",
1046
1086
  "https",
1047
1087
  "mailto",
1048
1088
  "tel",
1049
1089
  "sms"
1050
- ]), Ct = new Set(Q);
1051
- function wt(e) {
1090
+ ]), jt = new Set(Q);
1091
+ function Mt(e) {
1052
1092
  if (!e) return null;
1053
1093
  let t = e.trim(), n = /^([a-z][a-z0-9+\-.]*):/i.exec(t);
1054
1094
  return n ? n[1].toLowerCase() : null;
1055
1095
  }
1056
- var Tt = {
1057
- meta: xt,
1096
+ var Nt = {
1097
+ meta: kt,
1058
1098
  template(e) {
1059
1099
  let t = [];
1060
1100
  for (let n of Z(e)) {
1061
- let e = wt(n.url);
1062
- e !== null && (Ct.has(e) || St.has(e) || t.push({
1101
+ let e = Mt(n.url);
1102
+ e !== null && (jt.has(e) || At.has(e) || t.push({
1063
1103
  blockId: n.blockId,
1064
1104
  params: { protocol: e }
1065
1105
  }));
1066
1106
  }
1067
1107
  return t;
1068
1108
  }
1069
- }, Et = {
1109
+ }, Pt = {
1070
1110
  id: "link.malformed-mailto",
1071
1111
  severity: "warning"
1072
1112
  };
1073
- function Dt(e) {
1113
+ function Ft(e) {
1074
1114
  let t = e.trim();
1075
1115
  if (!/^mailto:/i.test(t)) return !1;
1076
1116
  let [n] = t.slice(7).split("?", 2);
@@ -1085,41 +1125,41 @@ function Dt(e) {
1085
1125
  }
1086
1126
  return !1;
1087
1127
  }
1088
- var Ot = {
1089
- meta: Et,
1128
+ var It = {
1129
+ meta: Pt,
1090
1130
  template(e) {
1091
1131
  let t = [];
1092
- for (let n of Z(e)) Dt(n.url) && t.push({ blockId: n.blockId });
1132
+ for (let n of Z(e)) Ft(n.url) && t.push({ blockId: n.blockId });
1093
1133
  return t;
1094
1134
  }
1095
- }, kt = {
1135
+ }, Lt = {
1096
1136
  id: "link.malformed-tel",
1097
1137
  severity: "warning"
1098
- }, At = /^[+0-9\s().\-]+$/, jt = /^[A-Za-z0-9-]+(=[^;]+)?$/;
1099
- function Mt(e) {
1138
+ }, Rt = /^[+0-9\s().\-]+$/, zt = /^[A-Za-z0-9-]+(=[^;]+)?$/;
1139
+ function Bt(e) {
1100
1140
  let t = e.trim();
1101
1141
  if (!/^tel:/i.test(t)) return !1;
1102
1142
  let n = t.slice(4).trim();
1103
1143
  if (n === "") return !0;
1104
1144
  let [r, ...i] = n.split(";");
1105
- return !At.test(r) || i.some((e) => !jt.test(e));
1145
+ return !Rt.test(r) || i.some((e) => !zt.test(e));
1106
1146
  }
1107
- var Nt = {
1108
- meta: kt,
1147
+ var Vt = {
1148
+ meta: Lt,
1109
1149
  template(e) {
1110
1150
  let t = [];
1111
- for (let n of Z(e)) Mt(n.url) && t.push({ blockId: n.blockId });
1151
+ for (let n of Z(e)) Bt(n.url) && t.push({ blockId: n.blockId });
1112
1152
  return t;
1113
1153
  }
1114
- }, Pt = {
1154
+ }, Ht = {
1115
1155
  id: "link.localhost-or-staging",
1116
1156
  severity: "warning"
1117
1157
  };
1118
- function Ft(e) {
1158
+ function Ut(e) {
1119
1159
  let t = e.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
1120
1160
  return RegExp(`^${t}$`, "i");
1121
1161
  }
1122
- function It(e) {
1162
+ function Wt(e) {
1123
1163
  if (!e) return null;
1124
1164
  let t = e.trim();
1125
1165
  if (!/^(https?|ftps?):\/\//i.test(t)) return null;
@@ -1132,18 +1172,18 @@ function It(e) {
1132
1172
  //#endregion
1133
1173
  //#region ../quality/src/links/index.ts
1134
1174
  var $ = [
1135
- bt,
1136
- Tt,
1137
1175
  Ot,
1138
1176
  Nt,
1177
+ It,
1178
+ Vt,
1139
1179
  {
1140
- meta: Pt,
1180
+ meta: Ht,
1141
1181
  template(e, t) {
1142
1182
  let n = t.links.nonProductionHosts;
1143
1183
  if (n.length === 0) return [];
1144
- let r = n.map(Ft), i = [];
1184
+ let r = n.map(Ut), i = [];
1145
1185
  for (let t of Z(e)) {
1146
- let e = It(t.url);
1186
+ let e = Wt(t.url);
1147
1187
  e !== null && r.some((t) => t.test(e)) && i.push({
1148
1188
  blockId: t.blockId,
1149
1189
  params: { host: e }
@@ -1153,24 +1193,24 @@ var $ = [
1153
1193
  }
1154
1194
  }
1155
1195
  ];
1156
- function Lt(e, t = {}) {
1157
- return t.disabled === !0 || t.links === !1 ? [] : S(e, $, oe(t.locale, t.links ?? {}, $), (e, t, n) => _t(e, t, n));
1196
+ function Gt(e, t = {}) {
1197
+ return t.disabled === !0 || t.links === !1 ? [] : x(e, $, se(t.locale, t.links ?? {}, $), (e, t, n) => Tt(e, t, n));
1158
1198
  }
1159
1199
  //#endregion
1160
1200
  //#region ../quality/src/util.ts
1161
- function Rt(e) {
1201
+ function Kt(e) {
1162
1202
  return e ? e.disabled === !0 || e.accessibility === !1 && e.structure === !1 && e.links === !1 : !1;
1163
1203
  }
1164
1204
  //#endregion
1165
1205
  //#region ../quality/src/lint-template.ts
1166
- function zt(e, t = {}) {
1167
- return Rt(t) ? [] : [
1168
- ...Xe(e, t),
1169
- ...ft(e, t),
1170
- ...Lt(e, t)
1206
+ function qt(e, t = {}) {
1207
+ return Kt(t) ? [] : [
1208
+ ...it(e, t),
1209
+ ...bt(e, t),
1210
+ ...Gt(e, t)
1171
1211
  ];
1172
1212
  }
1173
1213
  //#endregion
1174
- export { zt as lintTemplate };
1214
+ export { qt as lintTemplate };
1175
1215
 
1176
- //# sourceMappingURL=src-B4UhYbI8.js.map
1216
+ //# sourceMappingURL=src-D_3bXt7-.js.map