@templatical/editor 0.26.2 → 0.27.0

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 (285) hide show
  1. package/README.md +3 -1
  2. package/dist/{AiChatSidebar-CMBz6Wix.js → AiChatSidebar-iVJDzqjr.js} +60 -60
  3. package/dist/AiFeatureMenu-DvrK-dzj.js +57 -0
  4. package/dist/{BlockIssueBadge-Buk3_6QF.js → BlockIssueBadge-BHysq7XQ.js} +11 -11
  5. package/dist/BlockPreviewCanvas-GZbr0ph5.js +121 -0
  6. package/dist/CloudHeaderExtras-Cx8gFWu2.js +59 -0
  7. package/dist/CloudPanels-D0X449DD.js +227 -0
  8. package/dist/{CollaboratorBar-zvfvE7f-.js → CollaboratorBar-DMSWCrX3.js} +21 -21
  9. package/dist/ColorPicker-DCjFQCAg.js +501 -0
  10. package/dist/CommentsPanel-D5wQB1Kf.js +18 -0
  11. package/dist/CommentsSidebar-BoTIxpLE.js +481 -0
  12. package/dist/{cdn/chunks/CountdownBlock-vLTkTI9e.js → CountdownBlock-BFX8iU90.js} +19 -21
  13. package/dist/{cdn/chunks/CountdownToolbar-DPjcgcVR.js → CountdownToolbar-CSftc9Ma.js} +52 -53
  14. package/dist/{DesignReferenceSidebar-Bx96XFmK.js → DesignReferenceSidebar-DKsx2TiL.js} +72 -71
  15. package/dist/{IssuesPanel-Do7RLXsP.js → IssuesPanel-flKKwKpM.js} +38 -38
  16. package/dist/{LoadingTrack-BexpNuTV.js → LoadingTrack-C2T8ixEL.js} +3 -3
  17. package/dist/{MergeTagModeToggle-P-UguQHc.js → MergeTagModeToggle-PKCoKAoF.js} +43 -43
  18. package/dist/{MergeTagSuggestion-BJ43ihWR.js → MergeTagSuggestion-DGha0WRp.js} +46 -46
  19. package/dist/{cdn/chunks/NumberWithSuffix-BXrRdfq1.js → NumberWithSuffix-DdPCXfKf.js} +42 -44
  20. package/dist/{ParagraphEditor-CLvv5Ija.js → ParagraphEditor-vDU-5y6r.js} +202 -199
  21. package/dist/RestoreVersionDialog-DIn1muFD.js +86 -0
  22. package/dist/{RichTextEditorContent-fbYJXAio.js → RichTextEditorContent-I83k5DtQ.js} +44 -44
  23. package/dist/SaveBlockDialog-C_QvYAeL.js +266 -0
  24. package/dist/{SavedBlocksBrowserModal-KWlaiLlr.js → SavedBlocksBrowserModal-CefWWcdT.js} +116 -115
  25. package/dist/{cdn/chunks/SavedBlocksPanels-e4HyTZ8v.js → SavedBlocksPanels-DnQwO-7O.js} +9 -11
  26. package/dist/{SavedBlocksPickBar-C3h8oL3r.js → SavedBlocksPickBar-BsFubArH.js} +17 -17
  27. package/dist/{TemplateScoringPanel-BZUsb3FD.js → TemplateScoringPanel-Bv_bBsJi.js} +87 -87
  28. package/dist/TestEmailModal-STPWDP79.js +206 -0
  29. package/dist/{cdn/chunks/TestEmailPanel-CZAG1gQE.js → TestEmailPanel-HYVjApKZ.js} +4 -6
  30. package/dist/TitleEditor-DnB0EJ_g.js +198 -0
  31. package/dist/TplModal-chvLhXmC.js +49 -0
  32. package/dist/VersionHistoryMenu-Cq4rH56t.js +155 -0
  33. package/dist/VersionHistoryPanels-D7k_F7-9.js +46 -0
  34. package/dist/VersionPreviewBanner-DthyHe6C.js +38 -0
  35. package/dist/{blockTypeIcons-2_85L_CL.js → blockTypeIcons-B8r4jMBn.js} +6 -6
  36. package/dist/bundle-stats.json +8 -8
  37. package/dist/{ca-D1zgI9fQ.js → ca-Cqg9O8mx.js} +69 -6
  38. package/dist/cdn/chunks/{AiChatSidebar-CQ8KUmNB.js → AiChatSidebar-DTUoBH5a.js} +54 -54
  39. package/dist/cdn/chunks/AiChatSidebar-DTUoBH5a.js.map +1 -0
  40. package/dist/cdn/chunks/AiFeatureMenu-Dyh7mUMB.js +57 -0
  41. package/dist/cdn/chunks/AiFeatureMenu-Dyh7mUMB.js.map +1 -0
  42. package/dist/cdn/chunks/{BlockIssueBadge-BEEY9o2o.js → BlockIssueBadge-UzSSOM_2.js} +13 -13
  43. package/dist/cdn/chunks/{BlockIssueBadge-BEEY9o2o.js.map → BlockIssueBadge-UzSSOM_2.js.map} +1 -1
  44. package/dist/cdn/chunks/{BlockPreviewCanvas-DPtiMsVz.js → BlockPreviewCanvas-DStQFo9P.js} +42 -42
  45. package/dist/cdn/chunks/{BlockPreviewCanvas-DPtiMsVz.js.map → BlockPreviewCanvas-DStQFo9P.js.map} +1 -1
  46. package/dist/cdn/chunks/CloudHeaderExtras-BZVu7dnO.js +60 -0
  47. package/dist/cdn/chunks/CloudHeaderExtras-BZVu7dnO.js.map +1 -0
  48. package/dist/cdn/chunks/CloudPanels-CXbaBKHQ.js +227 -0
  49. package/dist/cdn/chunks/CloudPanels-CXbaBKHQ.js.map +1 -0
  50. package/dist/cdn/chunks/{CollaboratorBar-BF469_AN.js → CollaboratorBar-BH_lZlat.js} +22 -22
  51. package/dist/cdn/chunks/CollaboratorBar-BH_lZlat.js.map +1 -0
  52. package/dist/cdn/chunks/ColorPicker-CStXen0Y.js +502 -0
  53. package/dist/cdn/chunks/ColorPicker-CStXen0Y.js.map +1 -0
  54. package/dist/cdn/chunks/CommentsPanel-jzZ2X0P4.js +20 -0
  55. package/dist/cdn/chunks/CommentsPanel-jzZ2X0P4.js.map +1 -0
  56. package/dist/cdn/chunks/CommentsSidebar-Dxke-vUP.js +460 -0
  57. package/dist/cdn/chunks/CommentsSidebar-Dxke-vUP.js.map +1 -0
  58. package/dist/{CountdownBlock-DuyvGcr8.js → cdn/chunks/CountdownBlock-BYSrJWxg.js} +25 -23
  59. package/dist/cdn/chunks/{CountdownBlock-vLTkTI9e.js.map → CountdownBlock-BYSrJWxg.js.map} +1 -1
  60. package/dist/{CountdownToolbar-CBE9wRaV.js → cdn/chunks/CountdownToolbar-CZPtQIb8.js} +66 -63
  61. package/dist/cdn/chunks/{CountdownToolbar-DPjcgcVR.js.map → CountdownToolbar-CZPtQIb8.js.map} +1 -1
  62. package/dist/cdn/chunks/{DesignReferenceSidebar-B-HFXV0W.js → DesignReferenceSidebar-sZWciECR.js} +64 -64
  63. package/dist/cdn/chunks/DesignReferenceSidebar-sZWciECR.js.map +1 -0
  64. package/dist/cdn/chunks/{IssuesPanel-DKTS4QVb.js → IssuesPanel-CHtetM9i.js} +36 -36
  65. package/dist/cdn/chunks/IssuesPanel-CHtetM9i.js.map +1 -0
  66. package/dist/cdn/chunks/{LoadingTrack-C52ZGL5q.js → LoadingTrack-Dp_QZvAK.js} +3 -3
  67. package/dist/cdn/chunks/{LoadingTrack-C52ZGL5q.js.map → LoadingTrack-Dp_QZvAK.js.map} +1 -1
  68. package/dist/cdn/chunks/{MergeTagModeToggle-DQ79SqQc.js → MergeTagModeToggle-ZwW-5EeN.js} +39 -39
  69. package/dist/cdn/chunks/{MergeTagModeToggle-DQ79SqQc.js.map → MergeTagModeToggle-ZwW-5EeN.js.map} +1 -1
  70. package/dist/cdn/chunks/{MergeTagSuggestion-Dn8dExNa.js → MergeTagSuggestion-DhllqTA3.js} +47 -47
  71. package/dist/cdn/chunks/MergeTagSuggestion-DhllqTA3.js.map +1 -0
  72. package/dist/{NumberWithSuffix-D37ZWiZh.js → cdn/chunks/NumberWithSuffix-yeQLcCyH.js} +37 -35
  73. package/dist/cdn/chunks/NumberWithSuffix-yeQLcCyH.js.map +1 -0
  74. package/dist/cdn/chunks/{ParagraphEditor-Bzcma_Lm.js → ParagraphEditor-BJJ925sx.js} +235 -233
  75. package/dist/cdn/chunks/ParagraphEditor-BJJ925sx.js.map +1 -0
  76. package/dist/cdn/chunks/RestoreVersionDialog-B0Jadu6F.js +87 -0
  77. package/dist/cdn/chunks/RestoreVersionDialog-B0Jadu6F.js.map +1 -0
  78. package/dist/cdn/chunks/{RichTextEditorContent-DtL49Jpo.js → RichTextEditorContent-CfSq2wPR.js} +44 -44
  79. package/dist/cdn/chunks/RichTextEditorContent-CfSq2wPR.js.map +1 -0
  80. package/dist/cdn/chunks/SaveBlockDialog-C1DXh6P9.js +265 -0
  81. package/dist/cdn/chunks/SaveBlockDialog-C1DXh6P9.js.map +1 -0
  82. package/dist/cdn/chunks/{SavedBlocksBrowserModal-C59D4G5C.js → SavedBlocksBrowserModal-BerMxAUt.js} +114 -113
  83. package/dist/cdn/chunks/SavedBlocksBrowserModal-BerMxAUt.js.map +1 -0
  84. package/dist/{SavedBlocksPanels-CQsZvWO_.js → cdn/chunks/SavedBlocksPanels-BUE4lzVP.js} +11 -9
  85. package/dist/cdn/chunks/{SavedBlocksPanels-e4HyTZ8v.js.map → SavedBlocksPanels-BUE4lzVP.js.map} +1 -1
  86. package/dist/cdn/chunks/{SavedBlocksPickBar-DMHxPCM4.js → SavedBlocksPickBar-4HrqQfvl.js} +17 -17
  87. package/dist/cdn/chunks/SavedBlocksPickBar-4HrqQfvl.js.map +1 -0
  88. package/dist/cdn/chunks/{TemplateScoringPanel-NucRtAP0.js → TemplateScoringPanel-Xdkp2EMY.js} +81 -81
  89. package/dist/cdn/chunks/TemplateScoringPanel-Xdkp2EMY.js.map +1 -0
  90. package/dist/cdn/chunks/TestEmailModal-yfmFiavR.js +206 -0
  91. package/dist/cdn/chunks/TestEmailModal-yfmFiavR.js.map +1 -0
  92. package/dist/{TestEmailPanel-B6goIAxT.js → cdn/chunks/TestEmailPanel-DqTDh5ri.js} +6 -4
  93. package/dist/cdn/chunks/{TestEmailPanel-CZAG1gQE.js.map → TestEmailPanel-DqTDh5ri.js.map} +1 -1
  94. package/dist/cdn/chunks/{TitleEditor-D0_LY2Ex.js → TitleEditor-nUAF7fKr.js} +85 -84
  95. package/dist/cdn/chunks/TitleEditor-nUAF7fKr.js.map +1 -0
  96. package/dist/cdn/chunks/TplModal-C0IqikoV.js +50 -0
  97. package/dist/cdn/chunks/TplModal-C0IqikoV.js.map +1 -0
  98. package/dist/cdn/chunks/VersionHistoryMenu-_MAj3qZj.js +148 -0
  99. package/dist/cdn/chunks/VersionHistoryMenu-_MAj3qZj.js.map +1 -0
  100. package/dist/cdn/chunks/VersionHistoryPanels-6Hz9w20W.js +48 -0
  101. package/dist/cdn/chunks/VersionHistoryPanels-6Hz9w20W.js.map +1 -0
  102. package/dist/cdn/chunks/VersionPreviewBanner-D098_6_I.js +40 -0
  103. package/dist/cdn/chunks/VersionPreviewBanner-D098_6_I.js.map +1 -0
  104. package/dist/cdn/chunks/{blockTypeIcons-FXlMM3PL.js → blockTypeIcons-hX_W4dqo.js} +2 -2
  105. package/dist/cdn/chunks/{blockTypeIcons-FXlMM3PL.js.map → blockTypeIcons-hX_W4dqo.js.map} +1 -1
  106. package/dist/cdn/chunks/{ca-D1zgI9fQ.js → ca-Cqg9O8mx.js} +70 -7
  107. package/dist/cdn/chunks/ca-Cqg9O8mx.js.map +1 -0
  108. package/dist/{cloud-qINCmQbn.js → cdn/chunks/cloud-BA0OpRh-.js} +400 -609
  109. package/dist/cdn/chunks/cloud-BA0OpRh-.js.map +1 -0
  110. package/dist/cdn/chunks/createCloudRuntime-DmzV7OnU.js +344 -0
  111. package/dist/cdn/chunks/createCloudRuntime-DmzV7OnU.js.map +1 -0
  112. package/dist/{de-DHra3lvx.js → cdn/chunks/de-BXmeeFbX.js} +71 -6
  113. package/dist/cdn/chunks/de-BXmeeFbX.js.map +1 -0
  114. package/dist/{de-uVoSP1xF.js → cdn/chunks/de-Dbwm2cON.js} +3 -54
  115. package/dist/cdn/chunks/de-Dbwm2cON.js.map +1 -0
  116. package/dist/cdn/chunks/{dist-B2HKGHnc.js → dist-CM8TB0VD.js} +136 -136
  117. package/dist/cdn/chunks/{dist-B2HKGHnc.js.map → dist-CM8TB0VD.js.map} +1 -1
  118. package/dist/cdn/chunks/{dist-C6z8AjBC.js → dist-CYLJiSiH.js} +63 -63
  119. package/dist/cdn/chunks/{dist-C6z8AjBC.js.map → dist-CYLJiSiH.js.map} +1 -1
  120. package/dist/cdn/chunks/{draggable-DCs9qL-b.js → draggable-BfpsXFg7.js} +916 -905
  121. package/dist/cdn/chunks/{draggable-DCs9qL-b.js.map → draggable-BfpsXFg7.js.map} +1 -1
  122. package/dist/cdn/chunks/{en-DlqX2YWZ.js → en-DbBNy67B.js} +70 -7
  123. package/dist/cdn/chunks/en-DbBNy67B.js.map +1 -0
  124. package/dist/{en-CjhsJxb-.js → cdn/chunks/en-Dzw4EqNI.js} +3 -54
  125. package/dist/cdn/chunks/en-Dzw4EqNI.js.map +1 -0
  126. package/dist/cdn/chunks/{es-Cuss2snv.js → es-JUsAjxWu.js} +70 -7
  127. package/dist/cdn/chunks/es-JUsAjxWu.js.map +1 -0
  128. package/dist/cdn/chunks/{extensions-C7h52yuk.js → extensions-CMcVw2uu.js} +81 -67
  129. package/dist/cdn/chunks/extensions-CMcVw2uu.js.map +1 -0
  130. package/dist/{fr-Cm85vB2g.js → cdn/chunks/fr-J3qgXH4h.js} +71 -6
  131. package/dist/cdn/chunks/fr-J3qgXH4h.js.map +1 -0
  132. package/dist/cdn/chunks/{icons-CvYN6zrM.js → icons-C36Ha5VU.js} +11 -11
  133. package/dist/cdn/chunks/{icons-CvYN6zrM.js.map → icons-C36Ha5VU.js.map} +1 -1
  134. package/dist/{keys-fwF3qZax.js → cdn/chunks/keys-CbQuRX85.js} +6 -4
  135. package/dist/cdn/chunks/keys-CbQuRX85.js.map +1 -0
  136. package/dist/cdn/chunks/logger-ByvdoAwq.js +23 -0
  137. package/dist/cdn/chunks/logger-ByvdoAwq.js.map +1 -0
  138. package/dist/cdn/chunks/{nl-dmiIX7oT.js → nl-D_4DkqOi.js} +70 -7
  139. package/dist/cdn/chunks/nl-D_4DkqOi.js.map +1 -0
  140. package/dist/cdn/chunks/preRenderCustomBlocks-CbA3RcAy.js +23 -0
  141. package/dist/cdn/chunks/preRenderCustomBlocks-CbA3RcAy.js.map +1 -0
  142. package/dist/{pt-BR-CTzHTqJD.js → cdn/chunks/pt-BR-BxzQzWGJ.js} +3 -54
  143. package/dist/cdn/chunks/pt-BR-BxzQzWGJ.js.map +1 -0
  144. package/dist/cdn/chunks/{pt-BR-CaIG-7EM.js → pt-BR-KGURyEEQ.js} +70 -7
  145. package/dist/cdn/chunks/pt-BR-KGURyEEQ.js.map +1 -0
  146. package/dist/cdn/chunks/{src-CUKUsRzX.js → src-BOjFLNf7.js} +148 -134
  147. package/dist/cdn/chunks/src-BOjFLNf7.js.map +1 -0
  148. package/dist/cdn/chunks/{src-xkGep9eN.js → src-Dq3fgSIx.js} +1448 -1458
  149. package/dist/cdn/chunks/src-Dq3fgSIx.js.map +1 -0
  150. package/dist/cdn/chunks/styleConstants-ByDqaYj_.js +61 -0
  151. package/dist/cdn/chunks/styleConstants-ByDqaYj_.js.map +1 -0
  152. package/dist/cdn/chunks/timeouts-DHPZQ0G3.js +6 -0
  153. package/dist/cdn/chunks/timeouts-DHPZQ0G3.js.map +1 -0
  154. package/dist/cdn/chunks/{tiptap-C44S1Cmh.js → tiptap-DmpGap5g.js} +40 -40
  155. package/dist/cdn/chunks/{tiptap-C44S1Cmh.js.map → tiptap-DmpGap5g.js.map} +1 -1
  156. package/dist/cdn/chunks/{useAliveFlag-Dxwgo6P4.js → useAliveFlag-Dtm174fG.js} +2 -2
  157. package/dist/cdn/chunks/{useAliveFlag-Dxwgo6P4.js.map → useAliveFlag-Dtm174fG.js.map} +1 -1
  158. package/dist/cdn/chunks/{useCloudI18n-8wkJtuJD.js → useCloudI18n-NVa1aeY8.js} +5 -5
  159. package/dist/cdn/chunks/{useCloudI18n-8wkJtuJD.js.map → useCloudI18n-NVa1aeY8.js.map} +1 -1
  160. package/dist/cdn/chunks/{useEditorCore-CKQ9gmoo.js → useEditorCore-CTu_qZ3W.js} +1434 -1147
  161. package/dist/cdn/chunks/useEditorCore-CTu_qZ3W.js.map +1 -0
  162. package/dist/cdn/chunks/{useI18n-UMs0F71x.js → useI18n-DVWCJJFH.js} +5 -5
  163. package/dist/cdn/chunks/{useI18n-UMs0F71x.js.map → useI18n-DVWCJJFH.js.map} +1 -1
  164. package/dist/cdn/chunks/{useMergeTag-JmXOtpln.js → useMergeTag-BfZBRPQp.js} +4 -4
  165. package/dist/cdn/chunks/{useMergeTag-JmXOtpln.js.map → useMergeTag-BfZBRPQp.js.map} +1 -1
  166. package/dist/cdn/chunks/{usePopoverPosition-cf8Y-ynK.js → usePopoverPosition-BC-HA7TK.js} +3 -3
  167. package/dist/cdn/chunks/{usePopoverPosition-cf8Y-ynK.js.map → usePopoverPosition-BC-HA7TK.js.map} +1 -1
  168. package/dist/cdn/editor.css +1 -1
  169. package/dist/cdn/editor.js +5103 -284
  170. package/dist/cdn/editor.js.map +1 -1
  171. package/dist/{check-On4TSac-.js → check-DZbmkMQe.js} +1 -1
  172. package/dist/{chevron-down-69EiBGoB.js → chevron-down-nYScOLeZ.js} +1 -1
  173. package/dist/{chevron-up-Dh3MG1Dw.js → chevron-up-CpYpDLnc.js} +1 -1
  174. package/dist/{circle-alert-cilwzafX.js → circle-alert-CuuK6thq.js} +1 -1
  175. package/dist/{clock-Dt0APH92.js → clock-DxkrtqOr.js} +1 -1
  176. package/dist/cloud-BAefVBb_.js +1444 -0
  177. package/dist/createCloudRuntime-Bt8W-ajI.js +342 -0
  178. package/dist/{createLucideIcon-C8WzBYCv.js → createLucideIcon-L-wQXW_R.js} +9 -9
  179. package/dist/{cdn/chunks/de-DHra3lvx.js → de-BXmeeFbX.js} +69 -8
  180. package/dist/{cdn/chunks/de-uVoSP1xF.js → de-Dbwm2cON.js} +1 -56
  181. package/dist/dist-B5iReTtK.js +251 -0
  182. package/dist/{dist-Cl8J0IES.js → dist-Ck9roB6K.js} +42 -42
  183. package/dist/{dist-BpKxrUi2.js → dist-CqcGTIiX.js} +46 -46
  184. package/dist/{en-DlqX2YWZ.js → en-DbBNy67B.js} +69 -6
  185. package/dist/{cdn/chunks/en-CjhsJxb-.js → en-Dzw4EqNI.js} +1 -56
  186. package/dist/{es-Cuss2snv.js → es-JUsAjxWu.js} +69 -6
  187. package/dist/{extensions-DzKNPITR.js → extensions-CX87G4aL.js} +71 -57
  188. package/dist/{cdn/chunks/fr-Cm85vB2g.js → fr-J3qgXH4h.js} +69 -8
  189. package/dist/{image-up-Ceggh_R3.js → image-up-DouZRGVt.js} +1 -1
  190. package/dist/index.d.ts +499 -23
  191. package/dist/{info-DO5odBcZ.js → info-puX5V6Iq.js} +1 -1
  192. package/dist/{cdn/chunks/keys-Cmc2Yl3D.js → keys-BxixS0TN.js} +4 -6
  193. package/dist/{list-checks-BSkPKbuI.js → list-checks-jw-ZlvWY.js} +1 -1
  194. package/dist/{loader-circle-bO7o7_HD.js → loader-circle-DqTxB7Kr.js} +1 -1
  195. package/dist/logger-BBlvSn6q.js +21 -0
  196. package/dist/{message-circle-BEkAk65X.js → message-circle-BZ7YpB22.js} +1 -1
  197. package/dist/{nl-dmiIX7oT.js → nl-D_4DkqOi.js} +69 -6
  198. package/dist/{pencil-t6m0EtKL.js → pencil-DmbRhTJu.js} +1 -1
  199. package/dist/preRenderCustomBlocks-BebjKtmw.js +21 -0
  200. package/dist/{cdn/chunks/pt-BR-CTzHTqJD.js → pt-BR-BxzQzWGJ.js} +1 -56
  201. package/dist/{pt-BR-CaIG-7EM.js → pt-BR-KGURyEEQ.js} +69 -6
  202. package/dist/{refresh-cw-CkOYVzK5.js → refresh-cw-OK_O-cL0.js} +1 -1
  203. package/dist/{runtime-dom.esm-bundler-CepEmvwF.js → runtime-dom.esm-bundler-BgKXIPLV.js} +144 -144
  204. package/dist/{scan-line-DwSVj25O.js → scan-line-DyaSTsJ5.js} +1 -1
  205. package/dist/{send-CWsWN8PQ.js → send-B-wasJJC.js} +1 -1
  206. package/dist/{shield-check-qje8Kufw.js → shield-check-DUIyRrTo.js} +1 -1
  207. package/dist/{sparkles-DumaWRW-.js → sparkles-DYEMATWC.js} +1 -1
  208. package/dist/style.css +1 -1
  209. package/dist/styleConstants-ByDqaYj_.js +59 -0
  210. package/dist/templatical-editor.js +5303 -289
  211. package/dist/{text-align-start-Ir8Ah4mT.js → text-align-start-CzjLeBLe.js} +1 -1
  212. package/dist/timeouts-DHPZQ0G3.js +4 -0
  213. package/dist/{trash-2-CklAFCmO.js → trash-2-C0shEPry.js} +1 -1
  214. package/dist/{triangle-alert-BBi4n93g.js → triangle-alert-Fw0ce8oQ.js} +1 -1
  215. package/dist/{upload-sVqqppuv.js → upload-D69C2CBx.js} +3 -4
  216. package/dist/{useAliveFlag-cvyBxHp7.js → useAliveFlag-BGIAZii_.js} +1 -1
  217. package/dist/{useCloudI18n-DKVm6PCa.js → useCloudI18n-CAZTZ9_a.js} +2 -2
  218. package/dist/{useEditorCore-idmPLUeb.js → useEditorCore-B-kONNRw.js} +1604 -1320
  219. package/dist/{useI18n-DoVKdCTH.js → useI18n-BfXff_Sy.js} +2 -2
  220. package/dist/{useMergeTag-CYZk7dZD.js → useMergeTag-Dd4I7kge.js} +3 -3
  221. package/dist/usePopoverPosition-CxhCX3SQ.js +59 -0
  222. package/dist/{vue.runtime.esm-bundler-D1diBMsm.js → vue.runtime.esm-bundler-DzEsDRtY.js} +447 -436
  223. package/dist/{x-Mby7KlhS.js → x-BjTlFqRv.js} +1 -1
  224. package/package.json +7 -7
  225. package/dist/AiFeatureMenu-BY6mubnR.js +0 -63
  226. package/dist/BlockPreviewCanvas-DbNOqSI1.js +0 -121
  227. package/dist/CloudEditor-DEnMNMbm.js +0 -1188
  228. package/dist/ColorPicker-ClETsjA3.js +0 -550
  229. package/dist/CommentsSidebar-CdRCCSDD.js +0 -435
  230. package/dist/SaveBlockDialog-fVp_PwZi.js +0 -265
  231. package/dist/SnapshotHistory-DjA3Ej_i.js +0 -128
  232. package/dist/TestEmailModal-EM0RP_9L.js +0 -205
  233. package/dist/TitleEditor-JEaP9jVF.js +0 -197
  234. package/dist/TplModal-DoneXIj_.js +0 -49
  235. package/dist/cdn/chunks/AiChatSidebar-CQ8KUmNB.js.map +0 -1
  236. package/dist/cdn/chunks/AiFeatureMenu-Cwj8afsi.js +0 -63
  237. package/dist/cdn/chunks/AiFeatureMenu-Cwj8afsi.js.map +0 -1
  238. package/dist/cdn/chunks/CloudEditor-CQ830jJt.js +0 -1166
  239. package/dist/cdn/chunks/CloudEditor-CQ830jJt.js.map +0 -1
  240. package/dist/cdn/chunks/CollaboratorBar-BF469_AN.js.map +0 -1
  241. package/dist/cdn/chunks/ColorPicker-W_UyiVGc.js +0 -552
  242. package/dist/cdn/chunks/ColorPicker-W_UyiVGc.js.map +0 -1
  243. package/dist/cdn/chunks/CommentsSidebar-BLRZRSSC.js +0 -412
  244. package/dist/cdn/chunks/CommentsSidebar-BLRZRSSC.js.map +0 -1
  245. package/dist/cdn/chunks/DesignReferenceSidebar-B-HFXV0W.js.map +0 -1
  246. package/dist/cdn/chunks/IssuesPanel-DKTS4QVb.js.map +0 -1
  247. package/dist/cdn/chunks/MergeTagSuggestion-Dn8dExNa.js.map +0 -1
  248. package/dist/cdn/chunks/NumberWithSuffix-BXrRdfq1.js.map +0 -1
  249. package/dist/cdn/chunks/ParagraphEditor-Bzcma_Lm.js.map +0 -1
  250. package/dist/cdn/chunks/RichTextEditorContent-DtL49Jpo.js.map +0 -1
  251. package/dist/cdn/chunks/SaveBlockDialog-BfNVeXXV.js +0 -264
  252. package/dist/cdn/chunks/SaveBlockDialog-BfNVeXXV.js.map +0 -1
  253. package/dist/cdn/chunks/SavedBlocksBrowserModal-C59D4G5C.js.map +0 -1
  254. package/dist/cdn/chunks/SavedBlocksPickBar-DMHxPCM4.js.map +0 -1
  255. package/dist/cdn/chunks/SnapshotHistory-80tAU_VX.js +0 -121
  256. package/dist/cdn/chunks/SnapshotHistory-80tAU_VX.js.map +0 -1
  257. package/dist/cdn/chunks/TemplateScoringPanel-NucRtAP0.js.map +0 -1
  258. package/dist/cdn/chunks/TestEmailModal-DdWfAGNe.js +0 -205
  259. package/dist/cdn/chunks/TestEmailModal-DdWfAGNe.js.map +0 -1
  260. package/dist/cdn/chunks/TitleEditor-D0_LY2Ex.js.map +0 -1
  261. package/dist/cdn/chunks/TplModal-iCmoKB2k.js +0 -50
  262. package/dist/cdn/chunks/TplModal-iCmoKB2k.js.map +0 -1
  263. package/dist/cdn/chunks/ca-D1zgI9fQ.js.map +0 -1
  264. package/dist/cdn/chunks/cloud-DcC8bPwn.js +0 -1787
  265. package/dist/cdn/chunks/cloud-DcC8bPwn.js.map +0 -1
  266. package/dist/cdn/chunks/de-DHra3lvx.js.map +0 -1
  267. package/dist/cdn/chunks/de-uVoSP1xF.js.map +0 -1
  268. package/dist/cdn/chunks/en-CjhsJxb-.js.map +0 -1
  269. package/dist/cdn/chunks/en-DlqX2YWZ.js.map +0 -1
  270. package/dist/cdn/chunks/es-Cuss2snv.js.map +0 -1
  271. package/dist/cdn/chunks/extensions-C7h52yuk.js.map +0 -1
  272. package/dist/cdn/chunks/fr-Cm85vB2g.js.map +0 -1
  273. package/dist/cdn/chunks/keys-Cmc2Yl3D.js.map +0 -1
  274. package/dist/cdn/chunks/nl-dmiIX7oT.js.map +0 -1
  275. package/dist/cdn/chunks/pt-BR-CTzHTqJD.js.map +0 -1
  276. package/dist/cdn/chunks/pt-BR-CaIG-7EM.js.map +0 -1
  277. package/dist/cdn/chunks/src-CUKUsRzX.js.map +0 -1
  278. package/dist/cdn/chunks/src-xkGep9eN.js.map +0 -1
  279. package/dist/cdn/chunks/styles-CND3ey2g.js +0 -4140
  280. package/dist/cdn/chunks/styles-CND3ey2g.js.map +0 -1
  281. package/dist/cdn/chunks/timeouts-SsLMC4a3.js +0 -6
  282. package/dist/cdn/chunks/timeouts-SsLMC4a3.js.map +0 -1
  283. package/dist/cdn/chunks/useEditorCore-CKQ9gmoo.js.map +0 -1
  284. package/dist/styles-BK36D1sy.js +0 -4318
  285. package/dist/usePopoverPosition-C0dPEF4X.js +0 -308
package/README.md CHANGED
@@ -85,7 +85,9 @@ See the [Shadow DOM guide](https://docs.templatical.com/guide/shadow-dom) for tr
85
85
 
86
86
  ## Cloud features
87
87
 
88
- For AI rewrite, real-time collaboration, comments, snapshots, and saved modules, use `initCloud()` instead. See the [Cloud guide](https://docs.templatical.com/cloud/getting-started).
88
+ For AI features and real-time collaboration, use `initCloud()` instead. See the [Cloud guide](https://docs.templatical.com/cloud/getting-started).
89
+
90
+ Comments, version history, saved blocks, test email and rendering are **not** cloud-only — configure each against your own backend with `init()`. See [Bring your own backend](https://docs.templatical.com/backend/).
89
91
 
90
92
  ## Documentation
91
93
 
@@ -1,25 +1,25 @@
1
- import { A as e, Et as t, I as n, O as r, Ot as i, R as ee, Y as a, _ as o, c as s, d as c, h as l, l as u, m as d, nt as f, r as p, u as m, w as te, x as ne, z as re } from "./vue.runtime.esm-bundler-D1diBMsm.js";
2
- import { a as h, t as g } from "./runtime-dom.esm-bundler-CepEmvwF.js";
3
- import { m as ie, p as ae } from "./dist-BpKxrUi2.js";
4
- import { E as oe, G as _, g as se, i as ce, l as le } from "./keys-fwF3qZax.js";
5
- import { t as v } from "./createLucideIcon-C8WzBYCv.js";
6
- import { t as ue } from "./circle-alert-cilwzafX.js";
7
- import { t as de } from "./loader-circle-bO7o7_HD.js";
8
- import { t as fe } from "./send-CWsWN8PQ.js";
9
- import { t as y } from "./sparkles-DumaWRW-.js";
10
- import { t as pe } from "./trash-2-CklAFCmO.js";
11
- import { t as me } from "./x-Mby7KlhS.js";
12
- import { t as b } from "./LoadingTrack-BexpNuTV.js";
1
+ import { B as e, Dt as t, L as n, S as r, T as ee, X as i, c as a, d as o, g as s, h as c, j as l, k as u, kt as d, l as f, r as p, rt as m, u as h, v as g, z as te } from "./vue.runtime.esm-bundler-DzEsDRtY.js";
2
+ import { a as ne, t as re } from "./runtime-dom.esm-bundler-BgKXIPLV.js";
3
+ import { m as ie, p as ae } from "./dist-CqcGTIiX.js";
4
+ import { T as oe, W as _, h as se, i as v, l as ce } from "./keys-BxixS0TN.js";
5
+ import { t as y } from "./createLucideIcon-L-wQXW_R.js";
6
+ import { t as le } from "./circle-alert-CuuK6thq.js";
7
+ import { t as ue } from "./loader-circle-DqTxB7Kr.js";
8
+ import { t as de } from "./send-B-wasJJC.js";
9
+ import { t as b } from "./sparkles-DYEMATWC.js";
10
+ import { t as fe } from "./trash-2-C0shEPry.js";
11
+ import { t as pe } from "./x-BjTlFqRv.js";
12
+ import { t as me } from "./LoadingTrack-C2T8ixEL.js";
13
13
  import { t as x } from "./_plugin-vue_export-helper-B3ysoDQm.js";
14
- import { t as S } from "./useAliveFlag-cvyBxHp7.js";
15
- import { o as C } from "./cloud-qINCmQbn.js";
16
- var w = v("redo-2", [["path", {
14
+ import { t as S } from "./useAliveFlag-BGIAZii_.js";
15
+ import { f as C } from "./cloud-BAefVBb_.js";
16
+ var w = y("redo-2", [["path", {
17
17
  d: "m15 14 5-5-5-5",
18
18
  key: "12vg1m"
19
19
  }], ["path", {
20
20
  d: "M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13",
21
21
  key: "6uklza"
22
- }]]), T = v("undo-2", [["path", {
22
+ }]]), T = y("undo-2", [["path", {
23
23
  d: "M9 14 4 9l5-5",
24
24
  key: "102s5s"
25
25
  }], ["path", {
@@ -72,20 +72,20 @@ var w = v("redo-2", [["path", {
72
72
  "background-color": "color-mix(\n in srgb,\n var(--tpl-bg) 50%,\n transparent\n )",
73
73
  "backdrop-filter": "blur(2px)"
74
74
  }
75
- }, _e = { class: "tpl:flex tpl:flex-col tpl:gap-1.5" }, ve = ["onClick"], ye = { class: "tpl:border-t tpl:p-3 tpl:border-[var(--tpl-border)]" }, be = { class: "tpl-ai-input-wrapper tpl:flex tpl:items-end tpl:gap-2 tpl:rounded-[var(--tpl-radius)] tpl:border tpl:px-3 tpl:py-2 tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)]" }, xe = ["placeholder", "disabled"], Se = ["disabled"], Ce = { class: "tpl:m-0 tpl:px-1 tpl:pt-2 tpl:text-center tpl:text-[11px] tpl:text-[var(--tpl-text-dim)]" }, B = /*#__PURE__*/ x(/* @__PURE__ */ o({
75
+ }, _e = { class: "tpl:flex tpl:flex-col tpl:gap-1.5" }, ve = ["onClick"], ye = { class: "tpl:border-t tpl:p-3 tpl:border-[var(--tpl-border)]" }, be = { class: "tpl-ai-input-wrapper tpl-focus-ring-host tpl:flex tpl:items-end tpl:gap-2 tpl:rounded-[var(--tpl-radius)] tpl:border tpl:px-3 tpl:py-2 tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)]" }, xe = ["placeholder", "disabled"], Se = ["disabled"], Ce = { class: "tpl:m-0 tpl:px-1 tpl:pt-2 tpl:text-center tpl:text-[11px] tpl:text-[var(--tpl-text-dim)]" }, B = /*#__PURE__*/ x(/* @__PURE__ */ g({
76
76
  __name: "AiChatSidebar",
77
77
  props: {
78
78
  visible: { type: Boolean },
79
79
  onApply: { type: Function }
80
80
  },
81
81
  emits: ["close"],
82
- setup(o, { emit: v }) {
83
- let x = o, B = v, V = _(le, "AiChatSidebar"), H = _(se, "AiChatSidebar"), we = _(ce, "AiChatSidebar"), U = ne(oe, []), W = S(), G = C({
82
+ setup(g, { emit: y }) {
83
+ let x = g, B = y, V = _(ce, "AiChatSidebar"), H = _(se, "AiChatSidebar"), we = _(v, "AiChatSidebar"), U = r(oe, []), W = S(), G = C({
84
84
  authManager: we,
85
85
  getTemplateId: () => H.state.template?.id ?? null,
86
86
  onApply: x.onApply,
87
87
  onError: void 0
88
- }), K = a(""), q = a(null), J = a(!1), Y = a(0), { pause: X, resume: Te } = ae(() => {
88
+ }), K = i(""), q = i(null), J = i(!1), Y = i(0), { pause: X, resume: Te } = ae(() => {
89
89
  let e = G.suggestions.value?.length ?? 0;
90
90
  Y.value < e ? Y.value++ : X();
91
91
  }, 150, { immediate: !1 }), { start: Ee } = ie(() => Te(), 100, { immediate: !1 });
@@ -97,7 +97,7 @@ var w = v("redo-2", [["path", {
97
97
  Y.value = 0, Ee();
98
98
  });
99
99
  function Z() {
100
- te(() => {
100
+ ee(() => {
101
101
  q.value && (q.value.scrollTop = q.value.scrollHeight);
102
102
  });
103
103
  }
@@ -120,7 +120,7 @@ var w = v("redo-2", [["path", {
120
120
  function Oe(e) {
121
121
  e.key === "Enter" && !e.shiftKey && (e.preventDefault(), Q());
122
122
  }
123
- return (n, a) => (r(), u(g, {
123
+ return (n, r) => (u(), f(re, {
124
124
  "enter-active-class": "tpl-ai-slide-enter-active",
125
125
  "enter-from-class": "tpl:translate-x-full",
126
126
  "enter-to-class": "tpl:translate-x-0",
@@ -128,65 +128,65 @@ var w = v("redo-2", [["path", {
128
128
  "leave-from-class": "tpl:translate-x-0",
129
129
  "leave-to-class": "tpl:translate-x-full"
130
130
  }, {
131
- default: ee(() => [o.visible ? (r(), c("div", E, [
132
- s("div", D, [s("div", O, [l(f(y), {
131
+ default: te(() => [g.visible ? (u(), o("div", E, [
132
+ a("div", D, [a("div", O, [s(m(b), {
133
133
  size: 13,
134
134
  "stroke-width": 2
135
- }), s("span", null, i(f(V).aiChat.title), 1)]), s("div", k, [(f(G).messages.value?.length ?? 0) > 0 ? (r(), c("button", {
135
+ }), a("span", null, d(m(V).aiChat.title), 1)]), a("div", k, [(m(G).messages.value?.length ?? 0) > 0 ? (u(), o("button", {
136
136
  key: 0,
137
- class: "tpl:rounded-md tpl:p-0.5 tpl:transition-colors tpl:duration-150 tpl:text-[var(--tpl-text-muted)]",
138
- title: f(V).aiChat.clear,
139
- onClick: a[0] ||= (e) => f(G).clearChat()
140
- }, [l(f(pe), {
137
+ class: "tpl:rounded-md tpl:p-0.5 tpl:transition-colors tpl:text-[var(--tpl-text-muted)]",
138
+ title: m(V).aiChat.clear,
139
+ onClick: r[0] ||= (e) => m(G).clearChat()
140
+ }, [s(m(fe), {
141
141
  size: 14,
142
142
  "stroke-width": 2
143
- })], 8, A)) : m("", !0), s("button", {
144
- class: "tpl:rounded-md tpl:p-0.5 tpl:transition-colors tpl:duration-150 tpl:text-[var(--tpl-text-muted)]",
145
- onClick: a[1] ||= (e) => B("close")
146
- }, [l(f(me), {
143
+ })], 8, A)) : h("", !0), a("button", {
144
+ class: "tpl:rounded-md tpl:p-0.5 tpl:transition-colors tpl:text-[var(--tpl-text-muted)]",
145
+ onClick: r[1] ||= (e) => B("close")
146
+ }, [s(m(pe), {
147
147
  size: 14,
148
148
  "stroke-width": 2
149
149
  })])])]),
150
- s("div", j, [
151
- s("div", {
150
+ a("div", j, [
151
+ a("div", {
152
152
  ref_key: "messagesContainer",
153
153
  ref: q,
154
154
  class: "tpl:flex-1 tpl:overflow-y-auto tpl:p-4"
155
- }, [f(G).isLoadingHistory.value ? (r(), c("div", M, [l(f(de), {
155
+ }, [m(G).isLoadingHistory.value ? (u(), o("div", M, [s(m(ue), {
156
156
  class: "tpl-spinner tpl:text-[var(--tpl-text-muted)]",
157
157
  size: 24,
158
158
  "stroke-width": 2
159
- }), s("p", N, i(f(V).aiChat.loadingHistory), 1)])) : (f(G).messages.value?.length ?? 0) === 0 ? (r(), c("div", P, [l(f(y), {
159
+ }), a("p", N, d(m(V).aiChat.loadingHistory), 1)])) : (m(G).messages.value?.length ?? 0) === 0 ? (u(), o("div", P, [s(m(b), {
160
160
  size: 32,
161
161
  "stroke-width": 1.5,
162
162
  class: "tpl:text-[var(--tpl-text-dim)]"
163
- }), s("p", F, i(f(V).aiChat.placeholder), 1)])) : (r(), c("div", I, [(r(!0), c(p, null, e(f(G).messages.value, (e, t) => (r(), c("div", {
163
+ }), a("p", F, d(m(V).aiChat.placeholder), 1)])) : (u(), o("div", I, [(u(!0), o(p, null, l(m(G).messages.value, (e, t) => (u(), o("div", {
164
164
  key: e.id,
165
165
  class: "tpl:flex tpl:flex-col tpl:gap-2"
166
- }, [e.role === "user" ? (r(), c("div", L, i(e.content), 1)) : (r(), c("div", R, [!$(e.content) && f(G).isGenerating.value && t === (f(G).messages.value?.length ?? 0) - 1 ? (r(), u(b, { key: 0 })) : (r(), c("div", z, i($(e.content) || f(V).aiChat.applied), 1)), e.id === f(G).lastApplyMessageId.value && !f(G).isGenerating.value ? (r(), c("button", {
166
+ }, [e.role === "user" ? (u(), o("div", L, d(e.content), 1)) : (u(), o("div", R, [!$(e.content) && m(G).isGenerating.value && t === (m(G).messages.value?.length ?? 0) - 1 ? (u(), f(me, { key: 0 })) : (u(), o("div", z, d($(e.content) || m(V).aiChat.applied), 1)), e.id === m(G).lastApplyMessageId.value && !m(G).isGenerating.value ? (u(), o("button", {
167
167
  key: 2,
168
- class: "tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:self-start tpl:rounded-md tpl:border tpl:px-2.5 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150",
168
+ class: "tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:self-start tpl:rounded-md tpl:border tpl:px-2.5 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all",
169
169
  style: {
170
170
  "border-color": "var(--tpl-border)",
171
171
  color: "var(--tpl-text-muted)",
172
172
  "background-color": "transparent"
173
173
  },
174
- onClick: a[2] ||= (e) => f(G).toggleLastRevert()
175
- }, [f(G).isLastChangeReverted.value ? (r(), c(p, { key: 0 }, [l(f(w), {
174
+ onClick: r[2] ||= (e) => m(G).toggleLastRevert()
175
+ }, [m(G).isLastChangeReverted.value ? (u(), o(p, { key: 0 }, [s(m(w), {
176
176
  size: 12,
177
177
  "stroke-width": 2
178
- }), d(" " + i(f(V).aiChat.reapply), 1)], 64)) : (r(), c(p, { key: 1 }, [l(f(T), {
178
+ }), c(" " + d(m(V).aiChat.reapply), 1)], 64)) : (u(), o(p, { key: 1 }, [s(m(T), {
179
179
  size: 12,
180
180
  "stroke-width": 2
181
- }), d(" " + i(f(V).aiChat.revert), 1)], 64))])) : m("", !0)]))]))), 128))]))], 512),
182
- f(G).error.value ? (r(), c("div", he, [l(f(ue), {
181
+ }), c(" " + d(m(V).aiChat.revert), 1)], 64))])) : h("", !0)]))]))), 128))]))], 512),
182
+ m(G).error.value ? (u(), o("div", he, [s(m(le), {
183
183
  size: 14,
184
184
  "stroke-width": 2,
185
185
  class: "tpl:mt-0.5 tpl:shrink-0"
186
- }), s("span", null, i(f(G).error.value === "ai_apply_failed" ? f(V).aiChat.applyFailed : f(V).aiChat.error), 1)])) : m("", !0),
187
- (f(G).suggestions.value?.length ?? 0) > 0 ? (r(), c("div", ge, [s("div", _e, [(r(!0), c(p, null, e(f(G).suggestions.value ?? [], (e, n) => (r(), c("button", {
186
+ }), a("span", null, d(m(G).error.value === "ai_apply_failed" ? m(V).aiChat.applyFailed : m(V).aiChat.error), 1)])) : h("", !0),
187
+ (m(G).suggestions.value?.length ?? 0) > 0 ? (u(), o("div", ge, [a("div", _e, [(u(!0), o(p, null, l(m(G).suggestions.value ?? [], (e, n) => (u(), o("button", {
188
188
  key: n,
189
- class: t(["tpl-suggestion-btn tpl:cursor-pointer tpl:rounded-[var(--tpl-radius-sm)] tpl:border tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:leading-snug tpl:transition-all tpl:duration-300 tpl:ease-out", (f(G).suggestions.value?.length ?? 0) - 1 - n < Y.value ? "tpl:translate-y-0 tpl:opacity-100" : "tpl:pointer-events-none tpl:-translate-y-2 tpl:opacity-0"]),
189
+ class: t(["tpl-suggestion-btn tpl:cursor-pointer tpl:rounded-[var(--tpl-radius-sm)] tpl:border tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:leading-snug tpl:transition-all tpl:duration-300 tpl:ease-out", (m(G).suggestions.value?.length ?? 0) - 1 - n < Y.value ? "tpl:translate-y-0 tpl:opacity-100" : "tpl:pointer-events-none tpl:-translate-y-2 tpl:opacity-0"]),
190
190
  style: {
191
191
  "border-color": "var(--tpl-border)",
192
192
  color: "var(--tpl-primary)",
@@ -194,27 +194,27 @@ var w = v("redo-2", [["path", {
194
194
  "box-shadow": "var(--tpl-shadow)"
195
195
  },
196
196
  onClick: (t) => De(e)
197
- }, i(e), 11, ve))), 128))])])) : m("", !0)
197
+ }, d(e), 11, ve))), 128))])])) : h("", !0)
198
198
  ]),
199
- s("div", ye, [s("div", be, [re(s("textarea", {
200
- "onUpdate:modelValue": a[3] ||= (e) => K.value = e,
199
+ a("div", ye, [a("div", be, [e(a("textarea", {
200
+ "onUpdate:modelValue": r[3] ||= (e) => K.value = e,
201
201
  class: "tpl:max-h-32 tpl:min-h-[64px] tpl:flex-1 tpl:resize-none tpl:border-none tpl:bg-transparent tpl:font-sans tpl:text-sm tpl:outline-none tpl:text-[var(--tpl-text)]",
202
- placeholder: f(V).aiChat.inputPlaceholder,
203
- disabled: f(G).isGenerating.value,
202
+ placeholder: m(V).aiChat.inputPlaceholder,
203
+ disabled: m(G).isGenerating.value,
204
204
  rows: "3",
205
205
  onKeydown: Oe
206
- }, null, 40, xe), [[h, K.value]]), s("button", {
207
- class: "tpl-ai-send-btn tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-md tpl:p-1.5 tpl:transition-all tpl:duration-150 tpl:disabled:opacity-40 tpl:text-[var(--tpl-primary)]",
208
- disabled: !K.value.trim() || f(G).isGenerating.value,
206
+ }, null, 40, xe), [[ne, K.value]]), a("button", {
207
+ class: "tpl-ai-send-btn tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-md tpl:p-1.5 tpl:transition-all tpl:disabled:opacity-40 tpl:text-[var(--tpl-primary)]",
208
+ disabled: !K.value.trim() || m(G).isGenerating.value,
209
209
  onClick: Q
210
- }, [l(f(fe), {
210
+ }, [s(m(de), {
211
211
  size: 16,
212
212
  "stroke-width": 2
213
- })], 8, Se)]), s("p", Ce, i(f(V).aiMenu.disclaimer), 1)])
214
- ])) : m("", !0)]),
213
+ })], 8, Se)]), a("p", Ce, d(m(V).aiMenu.disclaimer), 1)])
214
+ ])) : h("", !0)]),
215
215
  _: 1
216
216
  }));
217
217
  }
218
- }), [["__scopeId", "data-v-a55e4bff"]]);
218
+ }), [["__scopeId", "data-v-82649117"]]);
219
219
  //#endregion
220
220
  export { B as default };
@@ -0,0 +1,57 @@
1
+ import { Ot as e, P as t, c as n, d as r, j as i, k as a, kt as o, l as s, r as c, s as l, v as u } from "./vue.runtime.esm-bundler-DzEsDRtY.js";
2
+ import "./useEditorCore-B-kONNRw.js";
3
+ import { W as d, t as f } from "./keys-BxixS0TN.js";
4
+ import { t as p } from "./image-up-DouZRGVt.js";
5
+ import { t as m } from "./shield-check-DUIyRrTo.js";
6
+ import { t as h } from "./sparkles-DYEMATWC.js";
7
+ import { t as g } from "./_plugin-vue_export-helper-B3ysoDQm.js";
8
+ import { n as _ } from "./useCloudI18n-CAZTZ9_a.js";
9
+ //#region src/cloud/components/AiFeatureMenu.vue?vue&type=script&setup=true&lang.ts
10
+ var v = { class: "tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]" }, y = ["onClick"], b = { class: "tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5" }, x = { class: "tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]" }, S = { class: "tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]" }, C = /*#__PURE__*/ g(/* @__PURE__ */ u({
11
+ __name: "AiFeatureMenu",
12
+ props: { activeFeature: {} },
13
+ emits: ["select"],
14
+ setup(u, { emit: g }) {
15
+ let C = g, { t: w } = _(), T = d(f, "AiFeatureMenu"), E = {
16
+ "ai-chat": "chat",
17
+ "design-reference": "designToTemplate",
18
+ scoring: "scoring"
19
+ }, D = [
20
+ {
21
+ key: "ai-chat",
22
+ icon: h
23
+ },
24
+ {
25
+ key: "design-reference",
26
+ icon: p
27
+ },
28
+ {
29
+ key: "scoring",
30
+ icon: m
31
+ }
32
+ ], O = l(() => D.filter((e) => T.isFeatureEnabled(E[e.key])));
33
+ function k(e) {
34
+ return e === "ai-chat" ? w.aiMenu.aiAssistant : e === "design-reference" ? w.aiMenu.designToTemplate : w.aiMenu.templateScore;
35
+ }
36
+ function A(e) {
37
+ return e === "ai-chat" ? w.aiMenu.aiAssistantDesc : e === "design-reference" ? w.aiMenu.designToTemplateDesc : w.aiMenu.templateScoreDesc;
38
+ }
39
+ return (l, d) => (a(), r("div", v, [(a(!0), r(c, null, i(O.value, (i) => (a(), r("button", {
40
+ key: i.key,
41
+ class: "tpl-ai-feature-menu-item tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-start tpl:gap-3 tpl:border-none tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-colors",
42
+ style: e({ backgroundColor: u.activeFeature === i.key ? "var(--tpl-primary-light)" : "transparent" }),
43
+ onClick: (e) => C("select", i.key)
44
+ }, [n("div", {
45
+ class: "tpl:mt-0.5 tpl:flex tpl:size-7 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)]",
46
+ style: e({
47
+ backgroundColor: u.activeFeature === i.key ? "var(--tpl-primary)" : "var(--tpl-bg-active)",
48
+ color: u.activeFeature === i.key ? "var(--tpl-bg)" : "var(--tpl-text-muted)"
49
+ })
50
+ }, [(a(), s(t(i.icon), {
51
+ size: 15,
52
+ "stroke-width": 2
53
+ }))], 4), n("div", b, [n("span", x, o(k(i.key)), 1), n("span", S, o(A(i.key)), 1)])], 12, y))), 128))]));
54
+ }
55
+ }), [["__scopeId", "data-v-bf59b787"]]);
56
+ //#endregion
57
+ export { C as default };
@@ -1,27 +1,27 @@
1
- import { Et as e, O as t, _ as n, d as r, l as i, nt as a, s as o, u as s, x as c } from "./vue.runtime.esm-bundler-D1diBMsm.js";
2
- import { B as l } from "./keys-fwF3qZax.js";
3
- import { t as u } from "./useI18n-DoVKdCTH.js";
4
- import { t as d } from "./circle-alert-cilwzafX.js";
5
- import { t as f } from "./triangle-alert-BBi4n93g.js";
1
+ import { Dt as e, S as t, d as n, k as r, l as i, rt as a, s as o, u as s, v as c } from "./vue.runtime.esm-bundler-DzEsDRtY.js";
2
+ import { z as l } from "./keys-BxixS0TN.js";
3
+ import { t as u } from "./useI18n-BfXff_Sy.js";
4
+ import { t as d } from "./circle-alert-CuuK6thq.js";
5
+ import { t as f } from "./triangle-alert-Fw0ce8oQ.js";
6
6
  //#region src/components/canvas/BlockIssueBadge.vue?vue&type=script&setup=true&lang.ts
7
- var p = ["title", "aria-label"], m = /* @__PURE__ */ n({
7
+ var p = ["title", "aria-label"], m = /* @__PURE__ */ c({
8
8
  __name: "BlockIssueBadge",
9
9
  props: { blockId: {} },
10
- setup(n) {
11
- let m = n, { t: h } = u(), g = c(l, null), _ = o(() => (g?.issues.value ?? []).filter((e) => e.blockId === m.blockId)), v = o(() => _.value.some((e) => e.severity === "error") ? "error" : _.value.some((e) => e.severity === "warning") ? "warning" : null), y = o(() => v.value === "error" ? h.issues.badgeError : h.issues.badgeWarning);
12
- return (n, o) => v.value ? (t(), r("span", {
10
+ setup(c) {
11
+ let m = c, { t: h } = u(), g = t(l, null), _ = o(() => (g?.issues.value ?? []).filter((e) => e.blockId === m.blockId)), v = o(() => _.value.some((e) => e.severity === "error") ? "error" : _.value.some((e) => e.severity === "warning") ? "warning" : null), y = o(() => v.value === "error" ? h.issues.badgeError : h.issues.badgeWarning);
12
+ return (t, o) => v.value ? (r(), n("span", {
13
13
  key: 0,
14
14
  class: e(["tpl:absolute tpl:top-1 tpl:right-1 tpl:z-10 tpl:flex tpl:size-5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:bg-[var(--tpl-bg)] tpl:shadow-[var(--tpl-shadow-sm)] tpl:ring-1 tpl:ring-[var(--tpl-border)]", v.value === "error" ? "tpl:text-[var(--tpl-danger)]" : "tpl:text-[var(--tpl-warning)]"]),
15
15
  title: y.value,
16
16
  "aria-label": y.value,
17
17
  role: "img"
18
- }, [v.value === "error" ? (t(), i(a(d), {
18
+ }, [v.value === "error" ? (r(), i(a(d), {
19
19
  key: 0,
20
20
  size: 14,
21
21
  "stroke-width": 2.25,
22
22
  fill: "currentColor",
23
23
  stroke: "var(--tpl-bg)"
24
- })) : (t(), i(a(f), {
24
+ })) : (r(), i(a(f), {
25
25
  key: 1,
26
26
  size: 14,
27
27
  "stroke-width": 2.25,
@@ -0,0 +1,121 @@
1
+ import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
+ import { A as t, N as n, Ot as r, P as i, S as a, c as o, d as s, j as c, k as l, l as u, r as d, rt as f, s as p, v as m } from "./vue.runtime.esm-bundler-DzEsDRtY.js";
3
+ import { R as h, a as g, b as _, d as v, f as y, g as b, h as x, i as S, l as C, m as w, n as T, p as E, r as D, v as O, y as k } from "./useEditorCore-B-kONNRw.js";
4
+ import { O as A, U as j, d as M, h as N, s as P } from "./keys-BxixS0TN.js";
5
+ import { n as F, t as I } from "./emailFrameWidth-BmFCN2dp.js";
6
+ //#region src/components/blocks/PreviewSectionBlock.vue?vue&type=script&setup=true&lang.ts
7
+ var L = { class: "tpl:w-full" }, R = { class: "tpl:flex tpl:gap-0" }, z = /* @__PURE__ */ m({
8
+ name: "PreviewSectionBlock",
9
+ __name: "PreviewSectionBlock",
10
+ props: {
11
+ block: {},
12
+ viewport: {}
13
+ },
14
+ setup(e) {
15
+ let t = {
16
+ title: C,
17
+ paragraph: w,
18
+ image: b,
19
+ video: T,
20
+ button: h,
21
+ divider: k,
22
+ social: g,
23
+ menu: x,
24
+ table: D,
25
+ spacer: S,
26
+ html: O,
27
+ custom: _
28
+ }, m = e, y = a(P, null), A = p(() => {
29
+ switch (m.block.columns) {
30
+ case "2": return ["50%", "50%"];
31
+ case "3": return [
32
+ "33.33%",
33
+ "33.33%",
34
+ "33.33%"
35
+ ];
36
+ case "1-2": return ["33.33%", "66.67%"];
37
+ case "2-1": return ["66.67%", "33.33%"];
38
+ default: return ["100%"];
39
+ }
40
+ }), j = p(() => {
41
+ let e = A.value.length, t = [...m.block.children];
42
+ for (; t.length < e;) t.push([]);
43
+ return t.slice(0, e);
44
+ });
45
+ function M(e) {
46
+ return j.value[e] || [];
47
+ }
48
+ function N(e) {
49
+ return E(e, y, t);
50
+ }
51
+ return (e, t) => {
52
+ let a = n("PreviewSectionBlock", !0);
53
+ return l(), s("div", L, [o("div", R, [(l(!0), s(d, null, c(j.value, (e, t) => (l(), s("div", {
54
+ key: t,
55
+ style: r({ width: A.value[t] })
56
+ }, [(l(!0), s(d, null, c(M(t), (e) => (l(), s("div", {
57
+ key: e.id,
58
+ style: r(f(v)(e))
59
+ }, [e.type === "section" ? (l(), u(a, {
60
+ key: 0,
61
+ block: e,
62
+ viewport: "desktop"
63
+ }, null, 8, ["block"])) : (l(), u(i(N(e)), {
64
+ key: 1,
65
+ block: e,
66
+ viewport: "desktop"
67
+ }, null, 8, ["block"]))], 4))), 128))], 4))), 128))])]);
68
+ };
69
+ }
70
+ }), B = /*@__PURE__*/ m({
71
+ __name: "BlockPreviewCanvas",
72
+ props: {
73
+ blocks: {},
74
+ viewport: { default: "desktop" },
75
+ applyConditionFilter: {
76
+ type: Boolean,
77
+ default: !0
78
+ }
79
+ },
80
+ setup(e) {
81
+ let n = e, o = a(P), m = a(N, null), L = a(M, null), R = a(A, null);
82
+ t(j, p(() => R?.value ?? !1));
83
+ let B = p(() => n.applyConditionFilter ? n.blocks.filter((e) => !L?.isHidden(e.id)) : n.blocks), V = p(() => F(m?.content.value.settings, n.viewport)), H = p(() => m ? y(m.content.value.settings) : {}), U = {
84
+ section: z,
85
+ title: C,
86
+ paragraph: w,
87
+ image: b,
88
+ video: T,
89
+ button: h,
90
+ divider: k,
91
+ social: g,
92
+ menu: x,
93
+ table: D,
94
+ spacer: S,
95
+ html: O,
96
+ custom: _
97
+ };
98
+ function W(e) {
99
+ return E(e, o, U);
100
+ }
101
+ return (t, n) => (l(), s("div", {
102
+ "data-testid": "block-preview-canvas",
103
+ class: "tpl:pointer-events-none tpl:mx-auto tpl:select-none tpl:rounded-lg",
104
+ style: r({
105
+ width: `${V.value}px`,
106
+ transition: f(I),
107
+ backgroundColor: "var(--tpl-canvas-bg)",
108
+ boxShadow: "var(--tpl-shadow-sm)",
109
+ ...H.value
110
+ })
111
+ }, [(l(!0), s(d, null, c(B.value, (t) => (l(), s("div", {
112
+ key: t.id,
113
+ style: r(f(v)(t))
114
+ }, [(l(), u(i(W(t)), {
115
+ block: t,
116
+ viewport: e.viewport
117
+ }, null, 8, ["block", "viewport"]))], 4))), 128))], 4));
118
+ }
119
+ }), V = /* @__PURE__ */ e({ default: () => H }), H = B;
120
+ //#endregion
121
+ export { V as n, H as t };
@@ -0,0 +1,59 @@
1
+ import { Dt as e, _ as t, c as n, d as r, g as i, h as a, k as o, kt as s, l as c, r as l, rt as u, u as d, v as f, z as p } from "./vue.runtime.esm-bundler-DzEsDRtY.js";
2
+ import { c as m, t as h } from "./runtime-dom.esm-bundler-BgKXIPLV.js";
3
+ import { t as g } from "./sparkles-DYEMATWC.js";
4
+ import { n as _ } from "./useCloudI18n-CAZTZ9_a.js";
5
+ //#region src/cloud/components/CloudHeaderExtras.vue?vue&type=script&setup=true&lang.ts
6
+ var v = {
7
+ key: 0,
8
+ "data-testid": "cloud-template-usage",
9
+ class: "tpl:text-xs tpl:opacity-60 tpl:text-[var(--tpl-text-muted)]"
10
+ }, y = ["aria-expanded"], b = {
11
+ key: 0,
12
+ class: "tpl:absolute tpl:right-0 tpl:top-full tpl:z-50 tpl:mt-1 tpl:origin-top-right"
13
+ }, x = /* @__PURE__ */ f({
14
+ __name: "CloudHeaderExtras",
15
+ props: {
16
+ part: {},
17
+ cloud: {}
18
+ },
19
+ setup(f) {
20
+ let x = t(() => import("./CollaboratorBar-DMSWCrX3.js")), S = t(() => import("./AiFeatureMenu-DvrK-dzj.js")), { t: C, format: w } = _();
21
+ return (t, _) => f.part === "left" && f.cloud.featureFlags.templateLimit.value !== null ? (o(), r("span", v, s(u(w)(u(C).header.templatesUsed, {
22
+ used: f.cloud.featureFlags.templateCount.value,
23
+ max: f.cloud.featureFlags.templateLimit.value
24
+ })), 1)) : f.part === "center" && f.cloud.collaboration && f.cloud.isCollaborationEnabled.value ? (o(), c(u(x), {
25
+ key: 1,
26
+ collaborators: f.cloud.collaboration.collaborators.value,
27
+ "is-connected": f.cloud.websocket.isConnected.value
28
+ }, null, 8, ["collaborators", "is-connected"])) : f.part === "right" ? (o(), r(l, { key: 2 }, [f.cloud.featureFlags.canUseAiGeneration.value && f.cloud.featureFlags.hasTemplateSaved.value ? (o(), r("div", {
29
+ key: 0,
30
+ ref: (e) => f.cloud.panelState.aiMenuRef.value = e,
31
+ class: "tpl:relative"
32
+ }, [n("button", {
33
+ type: "button",
34
+ "data-testid": "ai-menu-trigger",
35
+ "aria-expanded": f.cloud.panelState.aiMenuOpen.value,
36
+ class: e(["tpl-ai-btn tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:px-4 tpl:py-2 tpl:text-sm tpl:font-semibold tpl:whitespace-nowrap tpl:transition-all tpl:duration-200", f.cloud.panelState.aiButtonActive.value ? "tpl-ai-btn--active" : "tpl-ai-btn--idle"]),
37
+ onClick: _[0] ||= m((...e) => f.cloud.panelState.toggleAiMenu && f.cloud.panelState.toggleAiMenu(...e), ["stop"])
38
+ }, [i(u(g), {
39
+ size: 16,
40
+ "stroke-width": 2,
41
+ class: "tpl-ai-btn-icon"
42
+ }), a(" " + s(u(C).aiChat.button), 1)], 10, y), i(h, {
43
+ "enter-active-class": "tpl:transition-all tpl:ease-out",
44
+ "enter-from-class": "tpl:scale-95 tpl:opacity-0",
45
+ "enter-to-class": "tpl:scale-100 tpl:opacity-100",
46
+ "leave-active-class": "tpl:transition-all tpl:duration-100 tpl:ease-in",
47
+ "leave-from-class": "tpl:scale-100 tpl:opacity-100",
48
+ "leave-to-class": "tpl:scale-95 tpl:opacity-0"
49
+ }, {
50
+ default: p(() => [f.cloud.panelState.aiMenuOpen.value ? (o(), r("div", b, [i(u(S), {
51
+ "active-feature": f.cloud.panelState.activeAiFeature.value,
52
+ onSelect: f.cloud.panelState.handleAiFeatureSelect
53
+ }, null, 8, ["active-feature", "onSelect"])])) : d("", !0)]),
54
+ _: 1
55
+ })], 512)) : d("", !0)], 64)) : d("", !0);
56
+ }
57
+ });
58
+ //#endregion
59
+ export { x as default };