@templatical/editor 0.12.1 → 0.14.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 (155) hide show
  1. package/dist/{AiChatSidebar-CXH7l1Ar.js → AiChatSidebar-J8iO_sX7.js} +16 -16
  2. package/dist/{AiFeatureMenu-BKbUUc1D.js → AiFeatureMenu-F2diEDgV.js} +10 -10
  3. package/dist/{BlockIssueBadge-C-EPqWsh.js → BlockIssueBadge-a-qlByxF.js} +5 -5
  4. package/dist/{CloudEditor-CB16QzKM.js → CloudEditor-CDjtwb4i.js} +284 -250
  5. package/dist/{CollaboratorBar-ACUA7lBJ.js → CollaboratorBar-B_EnJLtW.js} +4 -4
  6. package/dist/{CommentsSidebar-CpRLN40c.js → CommentsSidebar-DaP9BA_r.js} +18 -18
  7. package/dist/{CountdownBlock-C-6o19qS.js → CountdownBlock-DtAokAVw.js} +3 -3
  8. package/dist/{CountdownToolbar-Dol7Q0Pv.js → CountdownToolbar-Dtqgwy0g.js} +3 -3
  9. package/dist/{DesignReferenceSidebar-0dTsBW08.js → DesignReferenceSidebar-BHRlTqlT.js} +21 -33
  10. package/dist/{IssuesPanel-I0z6k6-H.js → IssuesPanel-u7ee3Wrl.js} +11 -11
  11. package/dist/{LoadingTrack-C7mGWPHS.js → LoadingTrack-CV3ID80N.js} +1 -1
  12. package/dist/ModuleBrowserModal-DOsdaS6s.js +201 -0
  13. package/dist/{ModulePreviewCanvas-CpaumPMS.js → ModulePreviewCanvas-Cx4MOJ0X.js} +21 -21
  14. package/dist/{NumberWithSuffix-Bp40ik4l.js → NumberWithSuffix-D2mW_DhT.js} +4 -4
  15. package/dist/{ParagraphEditor-BqRFV_Y-.js → ParagraphEditor-DMzkVnST.js} +156 -136
  16. package/dist/{RichTextEditorContent-Q5altsx1.js → RichTextEditorContent-CRCxCwKf.js} +7 -7
  17. package/dist/{SaveModuleDialog-DmfvH5D0.js → SaveModuleDialog-DuEKgumL.js} +8 -8
  18. package/dist/{SnapshotHistory-C052o-8U.js → SnapshotHistory-CVgiNJtE.js} +12 -12
  19. package/dist/{TemplateScoringPanel-CUs8XmIi.js → TemplateScoringPanel-lm0_9nYi.js} +26 -26
  20. package/dist/{TestEmailModal-BIIxRWUt.js → TestEmailModal-WBMdiW5S.js} +5 -5
  21. package/dist/{TitleEditor-FMh54Cx5.js → TitleEditor-eyT0h-Sa.js} +71 -55
  22. package/dist/{TplModal-utMtXzSO.js → TplModal-tjQ7OB0g.js} +4 -4
  23. package/dist/{blockTypeIcons-C6UGDmrC.js → blockTypeIcons-DdB3uTKD.js} +5 -5
  24. package/dist/bundle-stats.json +8 -8
  25. package/dist/cdn/chunks/{AiFeatureMenu-4NhCFeTh.js → AiFeatureMenu-D7rB2SBs.js} +9 -9
  26. package/dist/cdn/chunks/{AiFeatureMenu-4NhCFeTh.js.map → AiFeatureMenu-D7rB2SBs.js.map} +1 -1
  27. package/dist/cdn/chunks/{BlockIssueBadge-BYKThwhE.js → BlockIssueBadge-DHOe0pgx.js} +6 -6
  28. package/dist/cdn/chunks/{BlockIssueBadge-BYKThwhE.js.map → BlockIssueBadge-DHOe0pgx.js.map} +1 -1
  29. package/dist/cdn/chunks/{CloudEditor-DSeihOan.js → CloudEditor-DNed_Ym0.js} +273 -239
  30. package/dist/cdn/chunks/CloudEditor-DNed_Ym0.js.map +1 -0
  31. package/dist/cdn/chunks/{CollaboratorBar-Dn5gXNDt.js → CollaboratorBar-sj_9Lee3.js} +4 -4
  32. package/dist/cdn/chunks/{CollaboratorBar-Dn5gXNDt.js.map → CollaboratorBar-sj_9Lee3.js.map} +1 -1
  33. package/dist/cdn/chunks/{CountdownBlock-hYoJdVOt.js → CountdownBlock-C1Ikjpn4.js} +3 -3
  34. package/dist/cdn/chunks/{CountdownBlock-hYoJdVOt.js.map → CountdownBlock-C1Ikjpn4.js.map} +1 -1
  35. package/dist/cdn/chunks/{CountdownToolbar-BQn0Kj0X.js → CountdownToolbar-j1G_X8rB.js} +4 -4
  36. package/dist/cdn/chunks/CountdownToolbar-j1G_X8rB.js.map +1 -0
  37. package/dist/cdn/chunks/{IssuesPanel-_5fEnivU.js → IssuesPanel-CTOf3PsH.js} +11 -11
  38. package/dist/cdn/chunks/{IssuesPanel-_5fEnivU.js.map → IssuesPanel-CTOf3PsH.js.map} +1 -1
  39. package/dist/cdn/chunks/{ModuleBrowserModal-DtCksAeW.js → ModuleBrowserModal-DCh88-rr.js} +13 -10
  40. package/dist/cdn/chunks/{ModuleBrowserModal-DtCksAeW.js.map → ModuleBrowserModal-DCh88-rr.js.map} +1 -1
  41. package/dist/cdn/chunks/{ModulePreviewCanvas-CCOvabZd.js → ModulePreviewCanvas-DJqvTKmg.js} +19 -19
  42. package/dist/cdn/chunks/{ModulePreviewCanvas-CCOvabZd.js.map → ModulePreviewCanvas-DJqvTKmg.js.map} +1 -1
  43. package/dist/cdn/chunks/{NumberWithSuffix-cdWjAK6y.js → NumberWithSuffix-Bu45XWSl.js} +5 -5
  44. package/dist/cdn/chunks/{NumberWithSuffix-cdWjAK6y.js.map → NumberWithSuffix-Bu45XWSl.js.map} +1 -1
  45. package/dist/cdn/chunks/{ParagraphEditor-BnhnFOW1.js → ParagraphEditor-DwZqLJp2.js} +131 -111
  46. package/dist/cdn/chunks/ParagraphEditor-DwZqLJp2.js.map +1 -0
  47. package/dist/cdn/chunks/{RichTextEditorContent-DV2yknp8.js → RichTextEditorContent-CIuZ-2DV.js} +5 -5
  48. package/dist/cdn/chunks/{RichTextEditorContent-DV2yknp8.js.map → RichTextEditorContent-CIuZ-2DV.js.map} +1 -1
  49. package/dist/cdn/chunks/{SaveModuleDialog-CCX5U7VA.js → SaveModuleDialog-Bep0X2s_.js} +6 -6
  50. package/dist/cdn/chunks/{SaveModuleDialog-CCX5U7VA.js.map → SaveModuleDialog-Bep0X2s_.js.map} +1 -1
  51. package/dist/cdn/chunks/{TitleEditor-CQqklX0D.js → TitleEditor-DO1-h3RY.js} +62 -46
  52. package/dist/cdn/chunks/TitleEditor-DO1-h3RY.js.map +1 -0
  53. package/dist/cdn/chunks/blockTypeIcons-8o24HVJu.js +22 -0
  54. package/dist/cdn/chunks/{blockTypeIcons-CpGPHppB.js.map → blockTypeIcons-8o24HVJu.js.map} +1 -1
  55. package/dist/cdn/chunks/{de-BpseTWOA.js → de-LsV0u1tP.js} +20 -2
  56. package/dist/cdn/chunks/de-LsV0u1tP.js.map +1 -0
  57. package/dist/cdn/chunks/{draggable-Bci-fq8y.js → draggable-kPCz_3zM.js} +14 -5
  58. package/dist/cdn/chunks/{draggable-Bci-fq8y.js.map → draggable-kPCz_3zM.js.map} +1 -1
  59. package/dist/cdn/chunks/{en-VGIQ0WNq.js → en-Bb8X1bOs.js} +20 -2
  60. package/dist/cdn/chunks/en-Bb8X1bOs.js.map +1 -0
  61. package/dist/cdn/chunks/{extensions-Ds9GnMcd.js → extensions-iwBXnEwq.js} +21 -21
  62. package/dist/cdn/chunks/{extensions-Ds9GnMcd.js.map → extensions-iwBXnEwq.js.map} +1 -1
  63. package/dist/cdn/chunks/{features-DxWz_Enw.js → features-CkTMVylx.js} +996 -817
  64. package/dist/cdn/chunks/features-CkTMVylx.js.map +1 -0
  65. package/dist/cdn/chunks/{icons-BflGUmFY.js → icons-9zjCuoJx.js} +158 -152
  66. package/dist/cdn/chunks/icons-9zjCuoJx.js.map +1 -0
  67. package/dist/cdn/chunks/liquid.browser-DKKBzRQu.js.map +1 -1
  68. package/dist/cdn/chunks/{media-library-C479-QcE.js → media-library-DMRIPx4g.js} +373 -371
  69. package/dist/cdn/chunks/media-library-DMRIPx4g.js.map +1 -0
  70. package/dist/cdn/chunks/{pt-BR-zAqpLQbW.js → pt-BR-BwJY_cvb.js} +20 -2
  71. package/dist/cdn/chunks/pt-BR-BwJY_cvb.js.map +1 -0
  72. package/dist/cdn/chunks/{pusher-BICWUP2j.js → pusher-CdEqyLwF.js} +6 -3
  73. package/dist/cdn/chunks/{pusher-BICWUP2j.js.map → pusher-CdEqyLwF.js.map} +1 -1
  74. package/dist/cdn/chunks/quality-CyeUgs_c.js +2176 -0
  75. package/dist/cdn/chunks/{quality-BL_pEvFP.js.map → quality-CyeUgs_c.js.map} +1 -1
  76. package/dist/cdn/chunks/{renderer-C0vdAODQ.js → renderer-BIKUEKDD.js} +38 -29
  77. package/dist/cdn/chunks/{renderer-C0vdAODQ.js.map → renderer-BIKUEKDD.js.map} +1 -1
  78. package/dist/cdn/chunks/{src-DzvOWQ9S.js → src-pDy_imWG.js} +56 -56
  79. package/dist/cdn/chunks/{src-DzvOWQ9S.js.map → src-pDy_imWG.js.map} +1 -1
  80. package/dist/cdn/chunks/{styles-LfeoSNRA.js → styles-D4Bd3SCx.js} +1356 -905
  81. package/dist/cdn/chunks/styles-D4Bd3SCx.js.map +1 -0
  82. package/dist/cdn/chunks/{tiptap-CwScfbsM.js → tiptap-BlLFFU3M.js} +2233 -2213
  83. package/dist/cdn/chunks/tiptap-BlLFFU3M.js.map +1 -0
  84. package/dist/cdn/editor.css +1 -1
  85. package/dist/cdn/editor.js +101 -97
  86. package/dist/cdn/editor.js.map +1 -1
  87. package/dist/{check-BRzXxFHr.js → check-CYJwFmjy.js} +1 -1
  88. package/dist/{chevron-down-DmEgzmYT.js → chevron-down-C5l-DzAA.js} +1 -1
  89. package/dist/{circle-alert-BStvZr3O.js → circle-alert-wf5HUFZY.js} +1 -1
  90. package/dist/{clock-Blwp_1R6.js → clock-Bj0bQw-K.js} +1 -1
  91. package/dist/{cloud-_olro76D.js → cloud-CoFDm9YA.js} +1 -1
  92. package/dist/{createLucideIcon-CmPAC-gt.js → createLucideIcon-Bad2kKE0.js} +4 -4
  93. package/dist/{de-BpseTWOA.js → de-LsV0u1tP.js} +19 -1
  94. package/dist/{dist-BwgjpLfr.js → dist-34OcyoK1.js} +1 -1
  95. package/dist/{dist-Cz79qrLL.js → dist-B7w6xTU6.js} +1 -1
  96. package/dist/{dist-DULfKmTh.js → dist-BX3gGwL8.js} +5 -5
  97. package/dist/{dist-412xXefB.js → dist-Bn703mnA.js} +1 -1
  98. package/dist/{dist-u0iIJH3V.js → dist-CADDCv0o.js} +1 -1
  99. package/dist/{dist-BNEdeWub.js → dist-CGvz7vkq.js} +1 -1
  100. package/dist/{dist-BlG7k25W.js → dist-CLpPNKy9.js} +1 -1
  101. package/dist/{dist-BCQZZUE9.js → dist-ChMninLH.js} +1 -1
  102. package/dist/{dist-b7Ak-CuM.js → dist-CrQZ_af9.js} +1 -1
  103. package/dist/{dist-DhKTdU52.js → dist-CyjyYg52.js} +1426 -1406
  104. package/dist/{dist-D6x1cQeh.js → dist-Dd3ibRZm.js} +2 -2
  105. package/dist/{dist-DJ9aD8yA.js → dist-DuCzdgDA.js} +54 -5
  106. package/dist/{dist-o73iaGqy.js → dist-U5vfDdYI.js} +1 -1
  107. package/dist/{en-VGIQ0WNq.js → en-Bb8X1bOs.js} +19 -1
  108. package/dist/{extensions-XPlNAKIL.js → extensions-J439b7y7.js} +5 -5
  109. package/dist/{image-up-BFPbw_Zq.js → image-up-x8-WXfsx.js} +1 -1
  110. package/dist/index.d.ts +17 -0
  111. package/dist/{info-B_qLEBN2.js → info-RS_fGcGi.js} +1 -1
  112. package/dist/keys-DgYXDafq.js +10 -0
  113. package/dist/{list-checks-CGg7JxPm.js → list-checks-Bf7XdDyv.js} +1 -1
  114. package/dist/{loader-circle-CDF8eR_Q.js → loader-circle-CLZ0_FvW.js} +1 -1
  115. package/dist/{message-circle-C3cHsCJl.js → message-circle-B-1bN9ab.js} +1 -1
  116. package/dist/{pt-BR-zAqpLQbW.js → pt-BR-BwJY_cvb.js} +19 -1
  117. package/dist/{refresh-cw-Butml7Q4.js → refresh-cw-CWKWqJYG.js} +1 -1
  118. package/dist/scan-line-BtK5dEai.js +31 -0
  119. package/dist/{send-k7npFJNO.js → send-Cn1IUdzh.js} +1 -1
  120. package/dist/{shield-check-CV6GbmCu.js → shield-check-CrvMk4Ea.js} +1 -1
  121. package/dist/{sparkles-C965Xop4.js → sparkles-CgfjwvnG.js} +1 -1
  122. package/dist/style.css +1 -1
  123. package/dist/{styles-DSm9Ijxt.js → styles-BUwDOWd3.js} +1335 -882
  124. package/dist/templatical-editor.js +143 -139
  125. package/dist/{text-align-start-Bxnps8fH.js → text-align-start-C3r_Rnvy.js} +1 -1
  126. package/dist/{trash-2-DpGb7fIt.js → trash-2-CjERg4x9.js} +1 -1
  127. package/dist/{triangle-alert-BKYElAwz.js → triangle-alert-Chkny574.js} +1 -1
  128. package/dist/upload-e5kDRkPb.js +17 -0
  129. package/dist/{useAliveFlag-BinvbqQR.js → useAliveFlag-cUQj9rmB.js} +1 -1
  130. package/dist/{useCloudI18n-L3H2XvdW.js → useCloudI18n-CYJKqXtI.js} +2 -2
  131. package/dist/{useEditorCore-D7dQFRkw.js → useEditorCore-8JxXDOA4.js} +1075 -894
  132. package/dist/{useI18n-CTs_bP9d.js → useI18n-BWqM8i78.js} +2 -2
  133. package/dist/{useMergeTag-e3RSY-s3.js → useMergeTag-NHC4ylza.js} +3 -3
  134. package/dist/usePopoverRoot-B1sdY4es.js +8 -0
  135. package/dist/{vue.runtime.esm-bundler-B2k01iQh.js → vue.runtime.esm-bundler-BPa483TZ.js} +13 -4
  136. package/dist/{x-CGjkjdKK.js → x-DiPIbccg.js} +1 -1
  137. package/package.json +12 -12
  138. package/dist/ModuleBrowserModal-Bz9hSjMS.js +0 -198
  139. package/dist/cdn/chunks/CloudEditor-DSeihOan.js.map +0 -1
  140. package/dist/cdn/chunks/CountdownToolbar-BQn0Kj0X.js.map +0 -1
  141. package/dist/cdn/chunks/ParagraphEditor-BnhnFOW1.js.map +0 -1
  142. package/dist/cdn/chunks/TitleEditor-CQqklX0D.js.map +0 -1
  143. package/dist/cdn/chunks/blockTypeIcons-CpGPHppB.js +0 -22
  144. package/dist/cdn/chunks/de-BpseTWOA.js.map +0 -1
  145. package/dist/cdn/chunks/en-VGIQ0WNq.js.map +0 -1
  146. package/dist/cdn/chunks/features-DxWz_Enw.js.map +0 -1
  147. package/dist/cdn/chunks/icons-BflGUmFY.js.map +0 -1
  148. package/dist/cdn/chunks/media-library-C479-QcE.js.map +0 -1
  149. package/dist/cdn/chunks/pt-BR-zAqpLQbW.js.map +0 -1
  150. package/dist/cdn/chunks/quality-BL_pEvFP.js +0 -2176
  151. package/dist/cdn/chunks/styles-LfeoSNRA.js.map +0 -1
  152. package/dist/cdn/chunks/tiptap-CwScfbsM.js.map +0 -1
  153. package/dist/keys-mFiJ5N0_.js +0 -10
  154. package/dist/scan-line-XYEqim_E.js +0 -25
  155. package/dist/usePopoverRoot-DVh7NY1q.js +0 -8
@@ -1,25 +1,25 @@
1
- import { A as e, B as t, L as n, M as r, O as i, Q as a, X as o, _ as s, at as c, b as l, c as u, d, f, g as p, h as m, j as h, k as g, l as _, m as v, o as y, ot as b, p as x, q as S, rt as C, st as w, t as T, v as E, y as D, z as O } from "./vue.runtime.esm-bundler-B2k01iQh.js";
1
+ import { A as e, B as t, L as n, M as r, O as i, Q as a, X as o, _ as s, at as c, b as l, c as u, d, f, g as p, h as m, j as h, k as g, l as _, m as v, o as y, ot as b, p as x, q as S, rt as C, st as w, t as T, v as E, y as D, z as O } from "./vue.runtime.esm-bundler-BPa483TZ.js";
2
2
  import { t as k } from "./timeouts-Bmi_yePw.js";
3
3
  import { D as A, a as j } from "./dist-BctFrpeA.js";
4
- import { P as M, S as N, t as ee, y as te } from "./useEditorCore-D7dQFRkw.js";
5
- import { c as P, t as F } from "./dist-DJ9aD8yA.js";
6
- import { C as I, D as L, O as R, c as z, l as B, r as ne, s as re, t as V } from "./keys-mFiJ5N0_.js";
7
- import { t as H } from "./useI18n-CTs_bP9d.js";
8
- import { t as U } from "./createLucideIcon-CmPAC-gt.js";
9
- import { t as W } from "./circle-alert-BStvZr3O.js";
10
- import { t as G } from "./loader-circle-CDF8eR_Q.js";
11
- import { a as K, c as q, d as ie, f as ae, i as J, l as oe, n as se, o as ce, r as le, s as ue, t as de, u as fe } from "./styles-DSm9Ijxt.js";
12
- import { t as pe } from "./sparkles-C965Xop4.js";
13
- import { t as me } from "./triangle-alert-BKYElAwz.js";
14
- import { t as he } from "./check-BRzXxFHr.js";
15
- import { t as Y } from "./clock-Blwp_1R6.js";
16
- import { t as X } from "./message-circle-C3cHsCJl.js";
17
- import { t as Z } from "./send-k7npFJNO.js";
18
- import { t as ge } from "./_plugin-vue_export-helper-B3ysoDQm.js";
19
- import { n as Q } from "./useCloudI18n-L3H2XvdW.js";
4
+ import { I as M, b as ee, t as N, w as P } from "./useEditorCore-8JxXDOA4.js";
5
+ import { l as F, t as I } from "./dist-DuCzdgDA.js";
6
+ import { D as L, M as R, c as z, j as te, l as ne, r as B, s as re, t as ie } from "./keys-DgYXDafq.js";
7
+ import { t as V } from "./useI18n-BWqM8i78.js";
8
+ import { t as H } from "./createLucideIcon-Bad2kKE0.js";
9
+ import { t as U } from "./check-CYJwFmjy.js";
10
+ import { t as W } from "./circle-alert-wf5HUFZY.js";
11
+ import { a as G, c as ae, d as oe, f as K, i as q, l as se, n as ce, o as le, p as ue, r as de, s as fe, t as pe, u as me } from "./styles-BUwDOWd3.js";
12
+ import { t as he } from "./clock-Bj0bQw-K.js";
13
+ import { t as J } from "./loader-circle-CLZ0_FvW.js";
14
+ import { t as ge } from "./message-circle-B-1bN9ab.js";
15
+ import { t as _e } from "./send-Cn1IUdzh.js";
16
+ import { t as Y } from "./sparkles-CgfjwvnG.js";
17
+ import { t as X } from "./triangle-alert-Chkny574.js";
18
+ import { t as Z } from "./_plugin-vue_export-helper-B3ysoDQm.js";
19
+ import { n as Q } from "./useCloudI18n-CYJKqXtI.js";
20
20
  import { d as $ } from "./styleConstants-lGobwiLH.js";
21
- import { _ as _e, a as ve, c as ye, d as be, f as xe, g as Se, h as Ce, l as we, m as Te, n as Ee, o as De, p as Oe, r as ke, s as Ae, t as je, v as Me, y as Ne } from "./cloud-_olro76D.js";
22
- var Pe = U("save", [
21
+ import { _ as ve, a as ye, c as be, d as xe, f as Se, g as Ce, h as we, l as Te, m as Ee, n as De, o as Oe, p as ke, r as Ae, s as je, t as Me, v as Ne, y as Pe } from "./cloud-CoFDm9YA.js";
22
+ var Fe = H("save", [
23
23
  ["path", {
24
24
  d: "M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",
25
25
  key: "1c8476"
@@ -35,14 +35,14 @@ var Pe = U("save", [
35
35
  ]);
36
36
  //#endregion
37
37
  //#region src/cloud/composables/useSnapshotPreview.ts
38
- function Fe(e) {
38
+ function Ie(e) {
39
39
  let { authManager: t, editor: n, history: r, conditionPreview: i, autoSave: s, onError: c } = e, l = a(null), u = o(null), f = o(null), p = !1;
40
40
  S(() => {
41
41
  p = !0;
42
42
  });
43
43
  let m = d(() => u.value !== null), h = d(() => l.value?.snapshots.value ?? []), g = d(() => l.value?.isLoading.value ?? !1), _ = d(() => l.value?.isRestoring.value ?? !1);
44
44
  function v() {
45
- n.state.template?.id && !l.value && (l.value = Se({
45
+ n.state.template?.id && !l.value && (l.value = Ce({
46
46
  authManager: t,
47
47
  templateId: n.state.template.id,
48
48
  onRestore: y,
@@ -94,7 +94,7 @@ function Fe(e) {
94
94
  }
95
95
  //#endregion
96
96
  //#region src/cloud/composables/useCloudPanelState.ts
97
- function Ie() {
97
+ function Le() {
98
98
  let e = o(null), t = d({
99
99
  get: () => e.value === "ai-chat",
100
100
  set: (t) => e.value = t ? "ai-chat" : null
@@ -117,7 +117,7 @@ function Ie() {
117
117
  function g(t) {
118
118
  l.value = !1, e.value = e.value === t ? null : t;
119
119
  }
120
- return F(u, () => {
120
+ return I(u, () => {
121
121
  l.value = !1;
122
122
  }), {
123
123
  activePanel: e,
@@ -139,8 +139,8 @@ function Ie() {
139
139
  }
140
140
  //#endregion
141
141
  //#region src/cloud/composables/useCollabUndoWarning.ts
142
- function Le(e) {
143
- let { isCollaborationEnabled: t, getCollaboratorCount: n, canUndo: r } = e, i = o(!1), a = o(!1), { start: s } = P(() => {
142
+ function Re(e) {
143
+ let { isCollaborationEnabled: t, getCollaboratorCount: n, canUndo: r } = e, i = o(!1), a = o(!1), { start: s } = F(() => {
144
144
  a.value = !1;
145
145
  }, k, { immediate: !1 });
146
146
  function c() {
@@ -153,8 +153,8 @@ function Le(e) {
153
153
  }
154
154
  //#endregion
155
155
  //#region src/cloud/composables/useCloudFeatureFlags.ts
156
- function Re(e) {
157
- let { planConfigInstance: t, aiConfig: n, editor: r } = e, i = d(() => t.hasFeature("ai_generation") && n.hasAnyMenuFeature.value), a = d(() => t.hasFeature("test_email")), s = d(() => !!r.state.template?.id), c = d(() => t.hasFeature("white_label")), l = d(() => t.config.value?.limits.max_templates ?? null), u = d(() => t.config.value?.template_count ?? 0), f = o(!1), p = o("idle"), m = o(""), { start: h } = P(() => {
156
+ function ze(e) {
157
+ let { planConfigInstance: t, aiConfig: n, editor: r } = e, i = d(() => t.hasFeature("ai_generation") && n.hasAnyMenuFeature.value), a = d(() => t.hasFeature("test_email")), s = d(() => !!r.state.template?.id), c = d(() => t.hasFeature("white_label")), l = d(() => t.config.value?.limits.max_templates ?? null), u = d(() => t.config.value?.template_count ?? 0), f = o(!1), p = o("idle"), m = o(""), { start: h } = F(() => {
158
158
  p.value = "idle";
159
159
  }, 3e3, { immediate: !1 });
160
160
  return {
@@ -172,65 +172,92 @@ function Re(e) {
172
172
  }
173
173
  //#endregion
174
174
  //#region src/cloud/composables/useCloudMediaLibrary.ts
175
- function ze(e) {
176
- let { onRequestMedia: t, mediaLibraryOpen: n, mediaLibraryAccept: r } = e, i = null;
177
- async function a() {
175
+ function Be(e) {
176
+ let { onRequestMedia: t, mediaLibraryOpen: n, mediaLibraryAccept: r, authManager: i, getMediaConfig: a, onError: o } = e, s = null;
177
+ function c(e) {
178
+ return {
179
+ url: e.url,
180
+ alt: e.alt_text || void 0
181
+ };
182
+ }
183
+ async function l(e) {
184
+ let i = e?.accept ?? ["images"];
185
+ if (e?.files?.length) {
186
+ if (t) {
187
+ let n = await t({
188
+ accept: i,
189
+ files: e.files
190
+ });
191
+ return n ? c(n) : null;
192
+ }
193
+ return u(e.files[0]);
194
+ }
178
195
  if (t) {
179
- let e = await t({ accept: ["images"] });
180
- return e ? {
181
- url: e.url,
182
- alt: e.alt_text || void 0
183
- } : null;
196
+ let e = await t({ accept: i });
197
+ return e ? c(e) : null;
184
198
  }
185
- return i &&= (i(null), null), r.value = ["images"], n.value = !0, new Promise((e) => {
186
- i = (t) => {
199
+ return s &&= (s(null), null), r.value = i, n.value = !0, new Promise((e) => {
200
+ s = (t) => {
187
201
  e(t);
188
202
  };
189
203
  });
190
204
  }
191
- function o(e) {
192
- n.value = !1, i?.({
193
- url: e.url,
194
- alt: e.alt_text || void 0
195
- }), i = null;
205
+ async function u(e) {
206
+ let t = d(e);
207
+ if (t) return o?.(t), null;
208
+ try {
209
+ let { MediaApiClient: t } = await import("@templatical/media-library");
210
+ return c(await new t(i).uploadMedia(e));
211
+ } catch (e) {
212
+ return o?.(e), null;
213
+ }
214
+ }
215
+ function d(e) {
216
+ let t = a?.() ?? null;
217
+ if (!t) return null;
218
+ let n = t.categories?.images?.mime_types ?? [];
219
+ return n.length > 0 && !n.includes(e.type) ? /* @__PURE__ */ Error(`Unsupported image type: ${e.type || "unknown"}. Accepted: ${n.join(", ")}.`) : t.max_file_size > 0 && e.size > t.max_file_size ? /* @__PURE__ */ Error(`Image is too large (${e.size} bytes). Maximum allowed is ${t.max_file_size} bytes.`) : null;
196
220
  }
197
- function s() {
198
- n.value = !1, i?.(null), i = null;
221
+ function f(e) {
222
+ n.value = !1, s?.(c(e)), s = null;
223
+ }
224
+ function p() {
225
+ n.value = !1, s?.(null), s = null;
199
226
  }
200
227
  return S(() => {
201
- i &&= (i(null), null);
228
+ s &&= (s(null), null);
202
229
  }), {
203
- handleRequestMedia: a,
204
- handleMediaSelect: o,
205
- handleMediaLibraryClose: s
230
+ handleRequestMedia: l,
231
+ handleMediaSelect: f,
232
+ handleMediaLibraryClose: p
206
233
  };
207
234
  }
208
235
  //#endregion
209
236
  //#region src/cloud/composables/useCloudInitialization.ts
210
- function Be(e) {
211
- let { config: t, translations: r, fontsManager: i, emit: a, getCommentsSidebar: s } = e, c = o(!0), l = o(!1), u = o(null), f = !1, p = { value: null }, m = null, g = null, _ = new je({
237
+ function Ve(e) {
238
+ let { config: t, translations: r, fontsManager: i, emit: a, getCommentsSidebar: s } = e, c = o(!0), l = o(!1), u = o(null), f = !1, p = { value: null }, m = null, g = null, _ = new Me({
212
239
  ...t.auth,
213
240
  onError: t.onError
214
- }), v = Te({
241
+ }), v = Ee({
215
242
  authManager: _,
216
243
  onError: t.onError
217
- }), y = o(/* @__PURE__ */ new Map()), b = be({
244
+ }), y = o(/* @__PURE__ */ new Map()), b = xe({
218
245
  authManager: _,
219
246
  defaultFontFamily: t.fonts?.defaultFont,
220
247
  templateDefaults: t.templateDefaults,
221
248
  onError: t.onError,
222
249
  lockedBlocks: y
223
- }), x = Ne({
250
+ }), x = Pe({
224
251
  authManager: _,
225
252
  onError: t.onError
226
253
  });
227
- t.mcp?.enabled && Oe({
254
+ t.mcp?.enabled && ke({
228
255
  editor: b,
229
256
  channel: x.channel,
230
257
  onOperation: t.mcp.onOperation
231
258
  });
232
259
  let S = null;
233
- t.collaboration?.enabled && (S = De({
260
+ t.collaboration?.enabled && (S = Oe({
234
261
  authManager: _,
235
262
  editor: b,
236
263
  channel: x.channel,
@@ -241,8 +268,8 @@ function Be(e) {
241
268
  onBlockUnlocked: t.collaboration.onBlockUnlocked
242
269
  }), n(() => S.lockedBlocks.value, (e) => {
243
270
  y.value = e;
244
- }, { immediate: !0 }), Ae(b, S));
245
- let C = d(() => !!t.collaboration?.enabled && v.hasFeature("collaboration")), w = ee({
271
+ }, { immediate: !0 }), je(b, S));
272
+ let C = d(() => !!t.collaboration?.enabled && v.hasFeature("collaboration")), w = N({
246
273
  editor: b,
247
274
  config: {
248
275
  uiTheme: t.uiTheme,
@@ -251,9 +278,10 @@ function Be(e) {
251
278
  customBlocks: [],
252
279
  paletteBlocks: t.paletteBlocks,
253
280
  mergeTags: t.mergeTags,
281
+ logicTags: t.logicTags,
254
282
  displayConditions: t.displayConditions,
255
283
  onRequestMedia: null,
256
- lint: ie(t),
284
+ lint: K(t),
257
285
  onSave: () => {
258
286
  p.value?.().catch((e) => {
259
287
  t.onError?.(e);
@@ -274,13 +302,13 @@ function Be(e) {
274
302
  keyboardOptions: { onBeforeUndo: () => g?.showCollabUndoWarning() },
275
303
  editorRoot: e.editorRoot,
276
304
  containerEl: e.containerEl
277
- }), T = Le({
305
+ }), T = Re({
278
306
  isCollaborationEnabled: C,
279
307
  getCollaboratorCount: () => S?.collaborators.value.length ?? 0,
280
308
  canUndo: w.history.canUndo
281
309
  });
282
310
  g = T;
283
- let E = Fe({
311
+ let E = Ie({
284
312
  authManager: _,
285
313
  editor: b,
286
314
  history: w.history,
@@ -289,24 +317,27 @@ function Be(e) {
289
317
  onError: t.onError
290
318
  });
291
319
  m = E;
292
- let D = Ie(), O = ve(t.ai), k = Re({
320
+ let D = Le(), O = ye(t.ai), k = ze({
293
321
  planConfigInstance: v,
294
322
  aiConfig: O,
295
323
  editor: b
296
- }), A = ze({
324
+ }), A = Be({
297
325
  onRequestMedia: t.onRequestMedia,
298
326
  mediaLibraryOpen: D.mediaLibraryOpen,
299
- mediaLibraryAccept: D.mediaLibraryAccept
327
+ mediaLibraryAccept: D.mediaLibraryAccept,
328
+ authManager: _,
329
+ getMediaConfig: () => v.config.value?.media ?? null,
330
+ onError: t.onError
300
331
  });
301
- N({
332
+ P({
302
333
  onBlockMove: b.moveBlock,
303
334
  onBlockAdd: b.addBlock
304
335
  });
305
- let j = xe({
336
+ let j = Se({
306
337
  authManager: _,
307
338
  getFontsConfig: () => t.fonts,
308
339
  canUseCustomFonts: () => v.hasFeature("custom_fonts")
309
- }), te = Me({
340
+ }), ee = Ne({
310
341
  authManager: _,
311
342
  getTemplateId: () => b.state.template?.id ?? null,
312
343
  save: () => b.save(),
@@ -314,7 +345,7 @@ function Be(e) {
314
345
  onError: t.onError,
315
346
  isAuthReady: l,
316
347
  onBeforeTestEmail: t.onBeforeTestEmail
317
- }), P = we({
348
+ }), F = Te({
318
349
  authManager: _,
319
350
  getTemplateId: () => b.state.template?.id ?? null,
320
351
  getSocketId: () => x.getSocketId(),
@@ -323,56 +354,56 @@ function Be(e) {
323
354
  isAuthReady: l,
324
355
  hasCommentingFeature: () => t.commenting !== !1 && v.hasFeature("commenting")
325
356
  });
326
- ye({
327
- comments: P,
357
+ be({
358
+ comments: F,
328
359
  channel: x.channel
329
360
  });
330
- let F = Ce({
361
+ let I = we({
331
362
  authManager: _,
332
363
  onError: t.onError
333
- }), z = o(!1), H = o(null), U = o(!1), W = _e({
364
+ }), z = o(!1), V = o(null), H = o(!1), U = ve({
334
365
  authManager: _,
335
366
  getTemplateId: () => b.state.template?.id ?? null
336
367
  });
337
- function G(e) {
368
+ function W(e) {
338
369
  D.commentsOpen.value = !0, queueMicrotask(() => {
339
370
  s()?.filterByBlock(e);
340
371
  });
341
372
  }
342
- h(I, A.handleRequestMedia), h(ne, _), h(V, O), h(B, P), h(L, F), h(R, W), h(re, {
373
+ h(L, A.handleRequestMedia), h(B, _), h(ie, O), h(ne, F), h(te, I), h(R, U), h(re, {
343
374
  plan: v,
344
375
  ai: O,
345
376
  comments: {
346
- getBlockCount: (e) => P.commentCountByBlock.value.get(e) ?? 0,
347
- openForBlock: G
377
+ getBlockCount: (e) => F.commentCountByBlock.value.get(e) ?? 0,
378
+ openForBlock: W
348
379
  },
349
380
  savedModules: {
350
381
  openSaveDialog: (e) => {
351
- H.value = e ?? null, z.value = !0;
382
+ V.value = e ?? null, z.value = !0;
352
383
  },
353
384
  openBrowser: () => {
354
- U.value = !0;
385
+ H.value = !0;
355
386
  },
356
- moduleCount: d(() => F.modules.value.length)
387
+ moduleCount: d(() => I.modules.value.length)
357
388
  }
358
389
  });
359
- function K(e) {
390
+ function G(e) {
360
391
  v.hasFeature("theme_customization") && (w.themeOverrides.value = e);
361
392
  }
362
- function q(e) {
393
+ function ae(e) {
363
394
  b.setUiTheme(e);
364
395
  }
365
- async function ae() {
396
+ async function oe() {
366
397
  c.value = !0, u.value = null;
367
398
  try {
368
399
  if (await _.initialize(), f) return;
369
400
  l.value = !0;
370
- let e = await Ee({ authManager: _ });
401
+ let e = await De({ authManager: _ });
371
402
  if (f) return;
372
403
  if (!e.api.ok) throw Error("Health check failed: API is not reachable");
373
404
  if (!e.auth.ok) throw Error(`Health check failed: authentication error${e.auth.error ? ` - ${e.auth.error}` : ""}`);
374
405
  if (e.websocket.ok || M.warn("WebSocket health check failed:", e.websocket.error ?? "unknown error", "-- real-time features will be disabled."), await v.fetchConfig(), f) return;
375
- i.setCustomFontsEnabled(v.hasFeature("custom_fonts")), t.customBlocks?.length && v.hasFeature("custom_blocks") && w.registerCustomBlocks(t.customBlocks), t.theme && v.hasFeature("theme_customization") && (w.themeOverrides.value = t.theme), t.modules !== !1 && v.hasFeature("saved_modules") && F.loadModules(), a("ready");
406
+ i.setCustomFontsEnabled(v.hasFeature("custom_fonts")), t.customBlocks?.length && v.hasFeature("custom_blocks") && w.registerCustomBlocks(t.customBlocks), t.theme && v.hasFeature("theme_customization") && (w.themeOverrides.value = t.theme), t.modules !== !1 && v.hasFeature("saved_modules") && I.loadModules(), a("ready");
376
407
  } catch (e) {
377
408
  if (f) return;
378
409
  let n = e instanceof Error ? e : Error("Initialization failed", { cause: e });
@@ -381,7 +412,7 @@ function Be(e) {
381
412
  f || (c.value = !1);
382
413
  }
383
414
  }
384
- function J() {
415
+ function q() {
385
416
  f = !0, i.cleanupFontLinks(), x.disconnect(), w.destroy(), t.onUnmount?.();
386
417
  }
387
418
  return {
@@ -400,27 +431,27 @@ function Be(e) {
400
431
  featureFlags: k,
401
432
  mediaLib: A,
402
433
  exporter: j,
403
- testEmail: te,
404
- commentsInstance: P,
405
- savedModulesHeadless: F,
406
- scoringInstance: W,
434
+ testEmail: ee,
435
+ commentsInstance: F,
436
+ savedModulesHeadless: I,
437
+ scoringInstance: U,
407
438
  panelState: D,
408
439
  snapshotPreview: E,
409
440
  collabWarning: T,
410
441
  showSaveModuleDialog: z,
411
- showModuleBrowserModal: U,
412
- saveModulePreSelectedBlockId: H,
442
+ showModuleBrowserModal: H,
443
+ saveModulePreSelectedBlockId: V,
413
444
  onSaveHook: p,
414
- initialize: ae,
415
- destroy: J,
416
- setThemeOverrides: K,
417
- setUiTheme: q,
418
- openCommentsForBlock: G
445
+ initialize: oe,
446
+ destroy: q,
447
+ setThemeOverrides: G,
448
+ setUiTheme: ae,
449
+ openCommentsForBlock: W
419
450
  };
420
451
  }
421
452
  //#endregion
422
453
  //#region src/utils/preRenderCustomBlocks.ts
423
- async function Ve(e, t) {
454
+ async function He(e, t) {
424
455
  let n = async (e) => {
425
456
  if (A(e)) {
426
457
  let n = e;
@@ -439,10 +470,10 @@ async function Ve(e, t) {
439
470
  }
440
471
  //#endregion
441
472
  //#region src/cloud/composables/useCloudLifecycle.ts
442
- function He(e) {
473
+ function Ue(e) {
443
474
  let { config: t, editor: n, websocket: r, planConfigInstance: i, snapshotPreview: a, core: o, exporter: s, featureFlags: c, isDestroyed: l } = e;
444
475
  function u() {
445
- return ke(i.config.value.websocket);
476
+ return Ae(i.config.value.websocket);
446
477
  }
447
478
  async function d(e) {
448
479
  let i = await n.create(e);
@@ -455,7 +486,7 @@ function He(e) {
455
486
  async function p() {
456
487
  c.isSaveExporting.value = !0, c.saveStatus.value = "idle";
457
488
  try {
458
- if (await Ve(n.content.value, o.registry), l()) throw Error("Component unmounted during save");
489
+ if (await He(n.content.value, o.registry), l()) throw Error("Component unmounted during save");
459
490
  let e = await n.save();
460
491
  if (l()) throw Error("Component unmounted during save");
461
492
  a.initSnapshotHistory(), a.snapshotHistoryInstance.value?.loadSnapshots();
@@ -482,7 +513,7 @@ function He(e) {
482
513
  }
483
514
  //#endregion
484
515
  //#region src/cloud/composables/useCloudSaveGate.ts
485
- function Ue(e) {
516
+ function We(e) {
486
517
  let t = o(!1), n = null, r = d(() => e.planConfig.value?.accessibility?.blockOnError === !0), i = d(() => r.value ? e.issues.value.filter((e) => e.severity === "error") : []), a = d(() => i.value.length > 0);
487
518
  async function s(e) {
488
519
  return a.value ? (n = e, t.value = !0, !1) : (await e(), !0);
@@ -505,7 +536,7 @@ function Ue(e) {
505
536
  }
506
537
  //#endregion
507
538
  //#region src/cloud/components/CloudSaveGateModal.vue?vue&type=script&setup=true&lang.ts
508
- var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl:max-w-md tpl:flex-col tpl:gap-4 tpl:rounded-lg tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-elevated)] tpl:p-5 tpl:shadow-[var(--tpl-shadow-md)]" }, Ke = { class: "tpl:flex tpl:items-center tpl:gap-2" }, qe = { class: "tpl:m-0 tpl:text-base tpl:font-semibold tpl:text-[var(--tpl-text)]" }, Je = { class: "tpl:m-0 tpl:text-sm tpl:text-[var(--tpl-text-muted)]" }, Ye = { class: "tpl:m-0 tpl:flex tpl:max-h-64 tpl:list-none tpl:flex-col tpl:gap-1.5 tpl:overflow-y-auto tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-2" }, Xe = { class: "tpl:text-xs tpl:text-[var(--tpl-text)]" }, Ze = { class: "tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]" }, Qe = { class: "tpl:flex tpl:justify-end tpl:gap-2" }, $e = /* @__PURE__ */ l({
539
+ var Ge = ["aria-label"], Ke = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl:max-w-md tpl:flex-col tpl:gap-4 tpl:rounded-lg tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-elevated)] tpl:p-5 tpl:shadow-[var(--tpl-shadow-md)]" }, qe = { class: "tpl:flex tpl:items-center tpl:gap-2" }, Je = { class: "tpl:m-0 tpl:text-base tpl:font-semibold tpl:text-[var(--tpl-text)]" }, Ye = { class: "tpl:m-0 tpl:text-sm tpl:text-[var(--tpl-text-muted)]" }, Xe = { class: "tpl:m-0 tpl:flex tpl:max-h-64 tpl:list-none tpl:flex-col tpl:gap-1.5 tpl:overflow-y-auto tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-2" }, Ze = { class: "tpl:text-xs tpl:text-[var(--tpl-text)]" }, Qe = { class: "tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]" }, $e = { class: "tpl:flex tpl:justify-end tpl:gap-2" }, et = /* @__PURE__ */ l({
509
540
  __name: "CloudSaveGateModal",
510
541
  props: {
511
542
  open: { type: Boolean },
@@ -527,18 +558,18 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
527
558
  "aria-label": C(a).saveGate.title,
528
559
  class: "tpl:fixed tpl:inset-0 tpl:z-50 tpl:flex tpl:items-center tpl:justify-center tpl:bg-black/40 tpl:p-6",
529
560
  onClick: o[2] ||= u((e) => i("cancel"), ["self"])
530
- }, [f("div", Ge, [
531
- f("header", Ke, [E(C(me), {
561
+ }, [f("div", Ke, [
562
+ f("header", qe, [E(C(X), {
532
563
  size: 18,
533
564
  "stroke-width": 2,
534
565
  class: "tpl:text-[var(--tpl-warning)]"
535
- }), f("h2", qe, w(C(a).saveGate.title), 1)]),
536
- f("p", Je, w(C(a).saveGate.body), 1),
537
- f("ul", Ye, [(e(!0), m(_, null, r(t.issues, (t) => (e(), m("li", {
566
+ }), f("h2", Je, w(C(a).saveGate.title), 1)]),
567
+ f("p", Ye, w(C(a).saveGate.body), 1),
568
+ f("ul", Xe, [(e(!0), m(_, null, r(t.issues, (t) => (e(), m("li", {
538
569
  key: `${t.ruleId}-${t.blockId ?? "template"}`,
539
570
  class: "tpl:flex tpl:flex-col tpl:gap-0.5 tpl:rounded tpl:px-2 tpl:py-1.5"
540
- }, [f("span", Xe, w(t.message), 1), f("span", Ze, w(t.ruleId), 1)]))), 128))]),
541
- f("footer", Qe, [f("button", {
571
+ }, [f("span", Ze, w(t.message), 1), f("span", Qe, w(t.ruleId), 1)]))), 128))]),
572
+ f("footer", $e, [f("button", {
542
573
  type: "button",
543
574
  class: "tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-[var(--tpl-text)]",
544
575
  onClick: o[0] ||= (e) => i("cancel")
@@ -547,11 +578,11 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
547
578
  class: "tpl:rounded-md tpl:bg-[var(--tpl-danger)] tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white",
548
579
  onClick: o[1] ||= (e) => i("confirm")
549
580
  }, w(C(a).saveGate.confirm), 1)])
550
- ])], 8, We)) : v("", !0)]),
581
+ ])], 8, Ge)) : v("", !0)]),
551
582
  _: 1
552
583
  }));
553
584
  }
554
- }), et = {
585
+ }), tt = {
555
586
  class: "tpl-header tpl:absolute tpl:top-0 tpl:right-0 tpl:left-0 tpl:z-50 tpl:grid tpl:h-14 tpl:grid-cols-[1fr_auto_1fr] tpl:items-center tpl:px-4",
556
587
  style: {
557
588
  "background-color": "color-mix(in srgb, var(--tpl-bg) 80%, transparent)",
@@ -560,24 +591,24 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
560
591
  "box-shadow": "var(--tpl-shadow-md)",
561
592
  "border-bottom": "1px solid var(--tpl-border)"
562
593
  }
563
- }, tt = { class: "tpl-header-left tpl:flex tpl:min-w-[200px] tpl:items-center tpl:gap-3" }, nt = {
594
+ }, nt = { class: "tpl-header-left tpl:flex tpl:min-w-[200px] tpl:items-center tpl:gap-3" }, rt = {
564
595
  key: 0,
565
596
  class: "tpl:text-xs tpl:opacity-60 tpl:text-[var(--tpl-text-muted)]"
566
- }, rt = { class: "tpl-header-center tpl:flex tpl:items-center tpl:justify-center tpl:gap-10" }, it = { class: "tpl-header-right tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3" }, at = ["data-tooltip"], ot = {
597
+ }, it = { class: "tpl-header-center tpl:flex tpl:items-center tpl:justify-center tpl:gap-10" }, at = { class: "tpl-header-right tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3" }, ot = ["data-tooltip"], st = {
567
598
  key: 1,
568
599
  "aria-live": "polite",
569
600
  class: "tpl-status tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:text-[var(--tpl-success)]"
570
- }, st = {
601
+ }, ct = {
571
602
  key: 2,
572
603
  "aria-live": "polite",
573
604
  class: "tpl-status tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:text-[var(--tpl-text-muted)]"
574
- }, ct = ["aria-label", "aria-expanded"], lt = {
605
+ }, lt = ["aria-label", "aria-expanded"], ut = {
575
606
  key: 0,
576
607
  class: "tpl:inline-flex tpl:size-4.5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-[10px] tpl:font-semibold tpl:bg-[var(--tpl-primary)] tpl:text-[var(--tpl-bg)]"
577
- }, ut = ["aria-expanded"], dt = {
608
+ }, dt = ["aria-expanded"], ft = {
578
609
  key: 0,
579
610
  class: "tpl:absolute tpl:right-0 tpl:top-full tpl:z-50 tpl:mt-1 tpl:origin-top-right"
580
- }, ft = ["disabled"], pt = ["disabled"], mt = /* @__PURE__ */ l({
611
+ }, pt = ["disabled"], mt = ["disabled"], ht = /* @__PURE__ */ l({
581
612
  __name: "CloudHeader",
582
613
  props: {
583
614
  editor: {},
@@ -595,22 +626,22 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
595
626
  },
596
627
  emits: ["save"],
597
628
  setup(t) {
598
- let n = D(() => import("./CollaboratorBar-ACUA7lBJ.js")), r = D(() => import("./SnapshotHistory-C052o-8U.js")), i = D(() => import("./AiFeatureMenu-BKbUUc1D.js")), { t: a, format: o } = Q();
599
- return (l, d) => (e(), m("header", et, [
600
- f("div", tt, [t.featureFlags.templateLimit.value === null ? v("", !0) : (e(), m("span", nt, w(C(o)(C(a).header.templatesUsed, {
629
+ let n = D(() => import("./CollaboratorBar-B_EnJLtW.js")), r = D(() => import("./SnapshotHistory-CVgiNJtE.js")), i = D(() => import("./AiFeatureMenu-F2diEDgV.js")), { t: a, format: o } = Q();
630
+ return (l, d) => (e(), m("header", tt, [
631
+ f("div", nt, [t.featureFlags.templateLimit.value === null ? v("", !0) : (e(), m("span", rt, w(C(o)(C(a).header.templatesUsed, {
601
632
  used: t.featureFlags.templateCount.value,
602
633
  max: t.featureFlags.templateLimit.value
603
634
  })), 1))]),
604
- f("div", rt, [
605
- E(K, {
635
+ f("div", it, [
636
+ E(le, {
606
637
  viewport: t.editor.state.viewport,
607
638
  onChange: t.editor.setViewport
608
639
  }, null, 8, ["viewport", "onChange"]),
609
- E(le, {
640
+ E(q, {
610
641
  "dark-mode": t.editor.state.darkMode,
611
642
  onChange: t.editor.setDarkMode
612
643
  }, null, 8, ["dark-mode", "onChange"]),
613
- E(J, {
644
+ E(G, {
614
645
  "preview-mode": t.editor.state.previewMode,
615
646
  onChange: t.editor.setPreviewMode
616
647
  }, null, 8, ["preview-mode", "onChange"]),
@@ -634,7 +665,7 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
634
665
  "onNavigate"
635
666
  ])) : v("", !0)
636
667
  ]),
637
- f("div", it, [
668
+ f("div", at, [
638
669
  t.featureFlags.saveStatus.value === "error" ? (e(), m("div", {
639
670
  key: 0,
640
671
  "aria-live": "assertive",
@@ -643,10 +674,10 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
643
674
  }, [E(C(W), {
644
675
  size: 12,
645
676
  "stroke-width": 2.5
646
- }), s(" " + w(C(a).header.saveFailed), 1)], 8, at)) : t.featureFlags.saveStatus.value === "saved" ? (e(), m("div", ot, [E(C(he), {
677
+ }), s(" " + w(C(a).header.saveFailed), 1)], 8, ot)) : t.featureFlags.saveStatus.value === "saved" ? (e(), m("div", st, [E(C(U), {
647
678
  size: 12,
648
679
  "stroke-width": 2.5
649
- }), s(" " + w(C(a).header.saved), 1)])) : t.editor.state.isDirty ? (e(), m("div", st, [d[4] ||= f("span", { class: "tpl-pulse tpl:size-1.5 tpl:rounded-full tpl:bg-[var(--tpl-primary)]" }, null, -1), s(" " + w(C(a).header.unsaved), 1)])) : v("", !0),
680
+ }), s(" " + w(C(a).header.saved), 1)])) : t.editor.state.isDirty ? (e(), m("div", ct, [d[4] ||= f("span", { class: "tpl-pulse tpl:size-1.5 tpl:rounded-full tpl:bg-[var(--tpl-primary)]" }, null, -1), s(" " + w(C(a).header.unsaved), 1)])) : v("", !0),
650
681
  t.commentsInstance.isEnabled.value && t.featureFlags.hasTemplateSaved.value ? (e(), m("button", {
651
682
  key: 3,
652
683
  "aria-label": t.commentsInstance.unresolvedCount.value > 0 ? `${C(a).comments.button} (${t.commentsInstance.unresolvedCount.value})` : C(a).comments.button,
@@ -659,13 +690,13 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
659
690
  }),
660
691
  onClick: d[0] ||= (e) => t.panelState.commentsOpen.value = !t.panelState.commentsOpen.value
661
692
  }, [
662
- E(C(X), {
693
+ E(C(ge), {
663
694
  size: 16,
664
695
  "stroke-width": 2
665
696
  }),
666
697
  s(" " + w(C(a).comments.button) + " ", 1),
667
- t.commentsInstance.unresolvedCount.value > 0 && !t.panelState.commentsOpen.value ? (e(), m("span", lt, w(t.commentsInstance.unresolvedCount.value), 1)) : v("", !0)
668
- ], 14, ct)) : v("", !0),
698
+ t.commentsInstance.unresolvedCount.value > 0 && !t.panelState.commentsOpen.value ? (e(), m("span", ut, w(t.commentsInstance.unresolvedCount.value), 1)) : v("", !0)
699
+ ], 14, lt)) : v("", !0),
669
700
  t.featureFlags.canUseAiGeneration.value && t.featureFlags.hasTemplateSaved.value ? (e(), m("div", {
670
701
  key: 4,
671
702
  ref: (e) => t.panelState.aiMenuRef.value = e,
@@ -674,11 +705,11 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
674
705
  "aria-expanded": t.panelState.aiMenuOpen.value,
675
706
  class: c(["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", t.panelState.aiButtonActive.value ? "tpl-ai-btn--active" : "tpl-ai-btn--idle"]),
676
707
  onClick: d[1] ||= u((...e) => t.panelState.toggleAiMenu && t.panelState.toggleAiMenu(...e), ["stop"])
677
- }, [E(C(pe), {
708
+ }, [E(C(Y), {
678
709
  size: 16,
679
710
  "stroke-width": 2,
680
711
  class: "tpl-ai-btn-icon"
681
- }), s(" " + w(C(a).aiChat.button), 1)], 10, ut), E(T, {
712
+ }), s(" " + w(C(a).aiChat.button), 1)], 10, dt), E(T, {
682
713
  "enter-active-class": "tpl:transition-all tpl:duration-150 tpl:ease-out",
683
714
  "enter-from-class": "tpl:scale-95 tpl:opacity-0",
684
715
  "enter-to-class": "tpl:scale-100 tpl:opacity-100",
@@ -686,7 +717,7 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
686
717
  "leave-from-class": "tpl:scale-100 tpl:opacity-100",
687
718
  "leave-to-class": "tpl:scale-95 tpl:opacity-0"
688
719
  }, {
689
- default: O(() => [t.panelState.aiMenuOpen.value ? (e(), m("div", dt, [E(C(i), {
720
+ default: O(() => [t.panelState.aiMenuOpen.value ? (e(), m("div", ft, [E(C(i), {
690
721
  "active-feature": t.panelState.activeAiFeature.value,
691
722
  onSelect: t.panelState.handleAiFeatureSelect
692
723
  }, null, 8, ["active-feature", "onSelect"])])) : v("", !0)]),
@@ -702,16 +733,16 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
702
733
  },
703
734
  disabled: t.testEmail.isSending.value || !t.featureFlags.hasTemplateSaved.value,
704
735
  onClick: d[2] ||= (e) => t.panelState.testEmailModalOpen.value = !0
705
- }, [t.testEmail.isSending.value ? (e(), x(C(G), {
736
+ }, [t.testEmail.isSending.value ? (e(), x(C(J), {
706
737
  key: 1,
707
738
  class: "tpl-spinner",
708
739
  size: 16,
709
740
  "stroke-width": 2
710
- })) : (e(), x(C(Z), {
741
+ })) : (e(), x(C(_e), {
711
742
  key: 0,
712
743
  size: 16,
713
744
  "stroke-width": 2
714
- })), s(" " + w(C(a).testEmail.button), 1)], 10, ft)) : v("", !0),
745
+ })), s(" " + w(C(a).testEmail.button), 1)], 10, pt)) : v("", !0),
715
746
  f("button", {
716
747
  class: c(C($)),
717
748
  style: {
@@ -721,20 +752,20 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
721
752
  },
722
753
  disabled: t.isSaveDisabled,
723
754
  onClick: d[3] ||= (e) => l.$emit("save")
724
- }, [t.isSaving ? (e(), x(C(G), {
755
+ }, [t.isSaving ? (e(), x(C(J), {
725
756
  key: 1,
726
757
  class: "tpl-spinner",
727
758
  size: 16,
728
759
  "stroke-width": 2
729
- })) : (e(), x(C(Pe), {
760
+ })) : (e(), x(C(Fe), {
730
761
  key: 0,
731
762
  size: 16,
732
763
  "stroke-width": 2
733
- })), s(" " + w(t.isSaving ? C(a).header.saving : C(a).header.save), 1)], 10, pt)
764
+ })), s(" " + w(t.isSaving ? C(a).header.saving : C(a).header.save), 1)], 10, mt)
734
765
  ])
735
766
  ]));
736
767
  }
737
- }), ht = /* @__PURE__ */ l({
768
+ }), gt = /* @__PURE__ */ l({
738
769
  __name: "CloudPanels",
739
770
  props: {
740
771
  config: {},
@@ -757,7 +788,7 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
757
788
  "module-insert"
758
789
  ],
759
790
  setup(t, { expose: n, emit: r }) {
760
- let i = D(() => import("./AiChatSidebar-CXH7l1Ar.js")), a = D(() => import("./CommentsSidebar-CpRLN40c.js")), s = D(() => import("./DesignReferenceSidebar-0dTsBW08.js")), c = D(() => import("./TemplateScoringPanel-CUs8XmIi.js")), l = D(() => import("./TestEmailModal-BIIxRWUt.js")), u = D(() => import("./SaveModuleDialog-DmfvH5D0.js")), d = D(() => import("./ModuleBrowserModal-Bz9hSjMS.js")), f = D(async () => {
791
+ let i = D(() => import("./AiChatSidebar-J8iO_sX7.js")), a = D(() => import("./CommentsSidebar-DaP9BA_r.js")), s = D(() => import("./DesignReferenceSidebar-BHRlTqlT.js")), c = D(() => import("./TemplateScoringPanel-lm0_9nYi.js")), l = D(() => import("./TestEmailModal-WBMdiW5S.js")), u = D(() => import("./SaveModuleDialog-DuEKgumL.js")), d = D(() => import("./ModuleBrowserModal-DOsdaS6s.js")), f = D(async () => {
761
792
  try {
762
793
  return (await import("@templatical/media-library")).MediaLibraryModal;
763
794
  } catch {
@@ -839,23 +870,23 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
839
870
  ])
840
871
  ], 64));
841
872
  }
842
- }), gt = {
873
+ }), _t = {
843
874
  key: 0,
844
875
  class: "tpl-loading tpl:absolute tpl:inset-0 tpl:z-overlay tpl:flex tpl:flex-col tpl:bg-[var(--tpl-bg)]"
845
- }, _t = { class: "tpl:flex tpl:flex-1 tpl:overflow-hidden" }, vt = { class: "tpl:flex tpl:w-12 tpl:shrink-0 tpl:flex-col tpl:items-center tpl:gap-4 tpl:py-5 tpl:border-r tpl:border-[var(--tpl-border)]" }, yt = /* @__PURE__ */ l({
876
+ }, vt = { class: "tpl:flex tpl:flex-1 tpl:overflow-hidden" }, yt = { class: "tpl:flex tpl:w-12 tpl:shrink-0 tpl:flex-col tpl:items-center tpl:gap-4 tpl:py-5 tpl:border-r tpl:border-[var(--tpl-border)]" }, bt = /* @__PURE__ */ l({
846
877
  __name: "CloudLoadingOverlay",
847
878
  props: { visible: { type: Boolean } },
848
879
  setup(t) {
849
- return (n, i) => t.visible ? (e(), m("div", gt, [i[1] ||= p("<div class=\"tpl:flex tpl:h-14 tpl:shrink-0 tpl:items-center tpl:justify-between tpl:px-4 tpl:border-b tpl:border-[var(--tpl-border)]\"><div class=\"tpl-shimmer tpl:h-5 tpl:w-28 tpl:rounded-[var(--tpl-radius-sm)]\"></div><div class=\"tpl:flex tpl:gap-3\"><div class=\"tpl-shimmer tpl:h-8 tpl:w-20 tpl:rounded-[var(--tpl-radius-sm)]\"></div><div class=\"tpl-shimmer tpl:h-8 tpl:w-20 tpl:rounded-[var(--tpl-radius-sm)]\"></div></div></div>", 1), f("div", _t, [f("div", vt, [(e(), m(_, null, r(5, (e) => f("div", {
880
+ return (n, i) => t.visible ? (e(), m("div", _t, [i[1] ||= p("<div class=\"tpl:flex tpl:h-14 tpl:shrink-0 tpl:items-center tpl:justify-between tpl:px-4 tpl:border-b tpl:border-[var(--tpl-border)]\"><div class=\"tpl-shimmer tpl:h-5 tpl:w-28 tpl:rounded-[var(--tpl-radius-sm)]\"></div><div class=\"tpl:flex tpl:gap-3\"><div class=\"tpl-shimmer tpl:h-8 tpl:w-20 tpl:rounded-[var(--tpl-radius-sm)]\"></div><div class=\"tpl-shimmer tpl:h-8 tpl:w-20 tpl:rounded-[var(--tpl-radius-sm)]\"></div></div></div>", 1), f("div", vt, [f("div", yt, [(e(), m(_, null, r(5, (e) => f("div", {
850
881
  key: e,
851
882
  class: "tpl-shimmer tpl:size-7 tpl:rounded-[var(--tpl-radius-sm)]"
852
883
  })), 64))]), i[0] ||= p("<div class=\"tpl:flex tpl:flex-1 tpl:items-start tpl:justify-center tpl:overflow-auto tpl:p-8 tpl:bg-[var(--tpl-canvas-bg)]\"><div class=\"tpl:w-full tpl:max-w-[600px] tpl:rounded-[var(--tpl-radius)] tpl:p-6 tpl:bg-[var(--tpl-bg)] tpl:shadow-[var(--tpl-shadow-sm)]\"><div class=\"tpl:space-y-2 tpl:py-4\"><div class=\"tpl-shimmer tpl:h-3 tpl:w-3/4 tpl:rounded\"></div><div class=\"tpl-shimmer tpl:h-3 tpl:w-full tpl:rounded\"></div><div class=\"tpl-shimmer tpl:h-3 tpl:w-5/6 tpl:rounded\"></div></div><div class=\"tpl:py-4\"><div class=\"tpl-shimmer tpl:h-44 tpl:w-full tpl:rounded-[var(--tpl-radius-sm)]\"></div></div><div class=\"tpl:space-y-2 tpl:py-4\"><div class=\"tpl-shimmer tpl:h-3 tpl:w-full tpl:rounded\"></div><div class=\"tpl-shimmer tpl:h-3 tpl:w-2/3 tpl:rounded\"></div></div><div class=\"tpl:flex tpl:justify-center tpl:py-4\"><div class=\"tpl-shimmer tpl:h-10 tpl:w-36 tpl:rounded-[var(--tpl-radius-sm)]\"></div></div><div class=\"tpl:space-y-2 tpl:py-4\"><div class=\"tpl-shimmer tpl:mx-auto tpl:h-2.5 tpl:w-1/2 tpl:rounded\"></div><div class=\"tpl-shimmer tpl:mx-auto tpl:h-2.5 tpl:w-1/3 tpl:rounded\"></div></div></div></div><div class=\"tpl:flex tpl:w-[320px] tpl:shrink-0 tpl:flex-col tpl:gap-4 tpl:p-4 tpl:border-l tpl:border-[var(--tpl-border)]\"><div class=\"tpl-shimmer tpl:h-8 tpl:rounded-[var(--tpl-radius-sm)]\"></div><div class=\"tpl-shimmer tpl:h-32 tpl:rounded-[var(--tpl-radius)]\"></div><div class=\"tpl-shimmer tpl:h-32 tpl:rounded-[var(--tpl-radius)]\"></div></div>", 2)])])) : v("", !0);
853
884
  }
854
- }), bt = {
885
+ }), xt = {
855
886
  key: 0,
856
887
  role: "alert",
857
888
  class: "tpl-error tpl:absolute tpl:inset-0 tpl:z-overlay tpl:flex tpl:flex-col tpl:items-center tpl:justify-center tpl:gap-6 tpl:px-8 tpl:bg-[var(--tpl-bg)]"
858
- }, xt = { class: "tpl:flex tpl:size-16 tpl:items-center tpl:justify-center tpl:rounded-full tpl:bg-[var(--tpl-danger-light)]" }, St = { class: "tpl:flex tpl:flex-col tpl:items-center tpl:gap-2 tpl:text-center" }, Ct = { class: "tpl:text-lg tpl:font-semibold tpl:text-[var(--tpl-text)]" }, wt = { class: "tpl:max-w-md tpl:text-sm tpl:text-[var(--tpl-text-muted)]" }, Tt = /* @__PURE__ */ l({
889
+ }, St = { class: "tpl:flex tpl:size-16 tpl:items-center tpl:justify-center tpl:rounded-full tpl:bg-[var(--tpl-danger-light)]" }, Ct = { class: "tpl:flex tpl:flex-col tpl:items-center tpl:gap-2 tpl:text-center" }, wt = { class: "tpl:text-lg tpl:font-semibold tpl:text-[var(--tpl-text)]" }, Tt = { class: "tpl:max-w-md tpl:text-sm tpl:text-[var(--tpl-text-muted)]" }, Et = /* @__PURE__ */ l({
859
890
  __name: "CloudErrorOverlay",
860
891
  props: {
861
892
  error: {},
@@ -870,13 +901,13 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
870
901
  function o(e) {
871
902
  return "isNotFound" in e && !!e.isNotFound;
872
903
  }
873
- return (n, s) => t.visible && t.error ? (e(), m("div", bt, [
874
- f("div", xt, [E(C(W), {
904
+ return (n, s) => t.visible && t.error ? (e(), m("div", xt, [
905
+ f("div", St, [E(C(W), {
875
906
  size: 32,
876
907
  "stroke-width": 1.5,
877
908
  class: "tpl:text-[var(--tpl-danger)]"
878
909
  })]),
879
- f("div", St, [f("h2", Ct, w(C(i).error.title), 1), f("p", wt, w(a(t.error)), 1)]),
910
+ f("div", Ct, [f("h2", wt, w(C(i).error.title), 1), f("p", Tt, w(a(t.error)), 1)]),
880
911
  o(t.error) ? v("", !0) : (e(), m("button", {
881
912
  key: 0,
882
913
  class: "tpl-btn tpl-btn-primary tpl:inline-flex tpl:items-center tpl:gap-2 tpl:rounded-md tpl:px-4 tpl:py-2.5 tpl:text-sm tpl:font-medium tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:hover:opacity-90 tpl:bg-[var(--tpl-primary)] tpl:text-[var(--tpl-bg)]",
@@ -884,20 +915,20 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
884
915
  }, w(C(i).error.retry), 1))
885
916
  ])) : v("", !0);
886
917
  }
887
- }), Et = {
918
+ }), Dt = {
888
919
  key: 0,
889
920
  class: "tpl-preview-banner tpl:absolute tpl:top-14 tpl:right-0 tpl:left-0 tpl:z-40 tpl:flex tpl:items-center tpl:justify-center tpl:gap-4 tpl:px-4 tpl:py-3 tpl:bg-[var(--tpl-primary-light)] tpl:border-b tpl:border-[var(--tpl-primary)]"
890
- }, Dt = { class: "tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:text-[var(--tpl-text)]" }, Ot = { class: "tpl:flex tpl:items-center tpl:gap-2" }, kt = /* @__PURE__ */ l({
921
+ }, Ot = { class: "tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:text-[var(--tpl-text)]" }, kt = { class: "tpl:flex tpl:items-center tpl:gap-2" }, At = /* @__PURE__ */ l({
891
922
  __name: "SnapshotPreviewBanner",
892
923
  props: { visible: { type: Boolean } },
893
924
  emits: ["cancel", "confirm"],
894
925
  setup(t, { emit: n }) {
895
926
  let r = n, { t: i } = Q();
896
- return (n, a) => t.visible ? (e(), m("div", Et, [f("div", Dt, [E(C(Y), {
927
+ return (n, a) => t.visible ? (e(), m("div", Dt, [f("div", Ot, [E(C(he), {
897
928
  size: 18,
898
929
  "stroke-width": 2,
899
930
  class: "tpl:text-[var(--tpl-primary)]"
900
- }), f("span", null, w(C(i).snapshotPreview.message), 1)]), f("div", Ot, [f("button", {
931
+ }), f("span", null, w(C(i).snapshotPreview.message), 1)]), f("div", kt, [f("button", {
901
932
  class: "tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:transition-all tpl:duration-150 tpl:text-[var(--tpl-text-muted)] tpl:border tpl:border-[var(--tpl-border)]",
902
933
  style: { "background-color": "transparent" },
903
934
  onClick: a[0] ||= (e) => r("cancel")
@@ -906,7 +937,7 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
906
937
  onClick: a[1] ||= (e) => r("confirm")
907
938
  }, w(C(i).snapshotPreview.restore), 1)])])) : v("", !0);
908
939
  }
909
- }), At = {
940
+ }), jt = {
910
941
  key: 0,
911
942
  role: "status",
912
943
  "aria-live": "polite",
@@ -916,14 +947,14 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
916
947
  color: "var(--tpl-text)",
917
948
  border: "1px solid var(--tpl-warning)"
918
949
  }
919
- }, jt = /* @__PURE__ */ l({
950
+ }, Mt = /* @__PURE__ */ l({
920
951
  __name: "CollabUndoToast",
921
952
  props: { visible: { type: Boolean } },
922
953
  setup(t) {
923
- let { t: n } = H();
924
- return (r, i) => t.visible ? (e(), m("div", At, w(C(n).history.collabWarning), 1)) : v("", !0);
954
+ let { t: n } = V();
955
+ return (r, i) => t.visible ? (e(), m("div", jt, w(C(n).history.collabWarning), 1)) : v("", !0);
925
956
  }
926
- }), Mt = ["data-tpl-theme"], Nt = { class: "tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0" }, Pt = { class: "tpl-main tpl:flex tpl:justify-center tpl:p-8" }, Ft = ["aria-label"], It = /*#__PURE__*/ ge(/* @__PURE__ */ l({
957
+ }), Nt = ["data-tpl-theme"], Pt = { class: "tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0" }, Ft = { class: "tpl-main tpl:flex tpl:justify-center tpl:p-8" }, It = ["aria-label"], Lt = /*#__PURE__*/ Z(/* @__PURE__ */ l({
927
958
  __name: "CloudEditor",
928
959
  props: {
929
960
  config: {},
@@ -936,70 +967,72 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
936
967
  setup(n, { expose: r, emit: a }) {
937
968
  let l = n;
938
969
  h(z, l.cloudTranslations);
939
- let u = a, d = o(null), p = o(null), _ = Be({
970
+ let d = a, p = o(null), _ = o(null), S = Ve({
940
971
  config: l.config,
941
972
  translations: l.translations,
942
973
  fontsManager: l.fontsManager,
943
- emit: u,
944
- getCommentsSidebar: () => d.value ? { filterByBlock: d.value.filterCommentsByBlock } : null,
974
+ emit: d,
975
+ getCommentsSidebar: () => p.value ? { filterByBlock: p.value.filterCommentsByBlock } : null,
945
976
  editorRoot: l.shadowRoot,
946
- containerEl: p
947
- }), { isInitializing: S, isAuthReady: D, initError: k, planConfigInstance: A, websocket: M, collaboration: N, isCollaborationEnabled: ee, editor: P, core: F, featureFlags: I, mediaLib: L, exporter: R, testEmail: B, commentsInstance: ne, savedModulesHeadless: re, panelState: V, snapshotPreview: H, collabWarning: U, showSaveModuleDialog: W, showModuleBrowserModal: G, saveModulePreSelectedBlockId: K, setThemeOverrides: ie, setUiTheme: J } = _, { showNotice: le } = te(() => l.config.smallScreenNotice);
948
- async function pe(e) {
977
+ containerEl: _
978
+ }), { isInitializing: D, isAuthReady: k, initError: A, planConfigInstance: M, websocket: N, collaboration: P, isCollaborationEnabled: F, editor: I, core: L, featureFlags: R, mediaLib: te, exporter: ne, testEmail: B, commentsInstance: re, savedModulesHeadless: ie, panelState: V, snapshotPreview: H, collabWarning: U, showSaveModuleDialog: W, showModuleBrowserModal: G, saveModulePreSelectedBlockId: K, setThemeOverrides: q, setUiTheme: le } = S, { showNotice: he } = ee(() => l.config.smallScreenNotice);
979
+ async function J(e) {
949
980
  try {
950
981
  await B.sendTestEmail(e), V.testEmailModalOpen.value = !1;
951
982
  } catch {}
952
983
  }
953
- async function me() {
984
+ async function ge() {
954
985
  try {
955
986
  await H.confirmRestoreSnapshot();
956
987
  } catch {}
957
988
  }
958
- function he(e, t) {
989
+ function _e(e, t) {
959
990
  for (let n = 0; n < e.content.length; n++) {
960
991
  let r = j(e.content[n]), i = t === void 0 ? void 0 : t + n;
961
- P.addBlock(r, void 0, void 0, i);
992
+ I.addBlock(r, void 0, void 0, i);
962
993
  }
963
994
  G.value = !1;
964
995
  }
965
- let Y = He({
996
+ let Y = Ue({
966
997
  config: l.config,
967
- editor: P,
968
- websocket: M,
969
- planConfigInstance: A,
998
+ editor: I,
999
+ websocket: N,
1000
+ planConfigInstance: M,
970
1001
  snapshotPreview: H,
971
- core: F,
972
- exporter: R,
973
- featureFlags: I,
974
- isDestroyed: _.isDestroyed
975
- }), X = Ue({
976
- issues: F.templateLint ? F.templateLint.issues : o([]),
977
- planConfig: A.config
1002
+ core: L,
1003
+ exporter: ne,
1004
+ featureFlags: R,
1005
+ isDestroyed: S.isDestroyed
1006
+ }), X = We({
1007
+ issues: L.templateLint ? L.templateLint.issues : o([]),
1008
+ planConfig: M.config
978
1009
  });
979
1010
  async function Z() {
980
1011
  await X.tryRunSave(() => Y.saveTemplate().catch((e) => l.config.onError?.(e)));
981
1012
  }
982
- return _.onSaveHook.value = Z, i(() => {
983
- _.initialize();
1013
+ return S.onSaveHook.value = Z, i(() => {
1014
+ S.initialize();
984
1015
  }), g(() => {
985
- _.destroy();
1016
+ S.destroy();
986
1017
  }), r({
987
- getContent: () => P.content.value,
988
- setContent: (e) => P.setContent(e),
989
- setTheme: J,
990
- setThemeOverrides: ie,
1018
+ getContent: () => I.content.value,
1019
+ setContent: (e) => I.setContent(e),
1020
+ setTheme: le,
1021
+ setThemeOverrides: q,
991
1022
  create: Y.createTemplate,
992
1023
  load: Y.loadTemplate,
993
1024
  save: Y.saveTemplate,
994
1025
  sendTestEmail: B.sendTestEmail
995
1026
  }), (r, i) => (e(), m("div", {
996
1027
  ref_key: "rootEl",
997
- ref: p,
998
- class: c(["tpl tpl:relative tpl:h-full tpl:overflow-hidden", { "tpl:dark": C(P).state.darkMode }]),
999
- "data-tpl-theme": C(F).resolvedTheme.value,
1000
- style: b(C(F).themeStyles.value)
1028
+ ref: _,
1029
+ class: c(["tpl tpl:relative tpl:h-full tpl:overflow-hidden", { "tpl:dark": C(I).state.darkMode }]),
1030
+ "data-tpl-theme": C(L).resolvedTheme.value,
1031
+ style: b(C(L).themeStyles.value),
1032
+ onDragover: i[9] ||= u(() => {}, ["prevent"]),
1033
+ onDrop: i[10] ||= u(() => {}, ["prevent"])
1001
1034
  }, [
1002
- E(oe),
1035
+ E(me),
1003
1036
  E(T, {
1004
1037
  "enter-active-class": "tpl:transition-opacity tpl:duration-200",
1005
1038
  "enter-from-class": "tpl:opacity-100",
@@ -1008,7 +1041,7 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1008
1041
  "leave-from-class": "tpl:opacity-100",
1009
1042
  "leave-to-class": "tpl:opacity-0"
1010
1043
  }, {
1011
- default: O(() => [E(yt, { visible: C(S) || C(P).state.isLoading }, null, 8, ["visible"])]),
1044
+ default: O(() => [E(bt, { visible: C(D) || C(I).state.isLoading }, null, 8, ["visible"])]),
1012
1045
  _: 1
1013
1046
  }),
1014
1047
  E(T, {
@@ -1019,10 +1052,10 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1019
1052
  "leave-from-class": "tpl:opacity-100",
1020
1053
  "leave-to-class": "tpl:opacity-0"
1021
1054
  }, {
1022
- default: O(() => [E(Tt, {
1023
- error: C(k),
1024
- visible: !!C(k) && !C(S),
1025
- onRetry: C(_).initialize
1055
+ default: O(() => [E(Et, {
1056
+ error: C(A),
1057
+ visible: !!C(A) && !C(D),
1058
+ onRetry: C(S).initialize
1026
1059
  }, null, 8, [
1027
1060
  "error",
1028
1061
  "visible",
@@ -1030,19 +1063,19 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1030
1063
  ])]),
1031
1064
  _: 1
1032
1065
  }),
1033
- E(mt, {
1034
- editor: C(P),
1035
- core: C(F),
1036
- "feature-flags": C(I),
1066
+ E(ht, {
1067
+ editor: C(I),
1068
+ core: C(L),
1069
+ "feature-flags": C(R),
1037
1070
  "panel-state": C(V),
1038
1071
  "snapshot-preview": C(H),
1039
- "comments-instance": C(ne),
1072
+ "comments-instance": C(re),
1040
1073
  "test-email": C(B),
1041
- websocket: C(M),
1042
- collaboration: C(N),
1043
- "is-collaboration-enabled": C(ee),
1044
- "is-saving": C(P).state.isSaving || C(I).isSaveExporting.value,
1045
- "is-save-disabled": C(P).state.isSaving || C(I).isSaveExporting.value || !C(P).state.isDirty,
1074
+ websocket: C(N),
1075
+ collaboration: C(P),
1076
+ "is-collaboration-enabled": C(F),
1077
+ "is-saving": C(I).state.isSaving || C(R).isSaveExporting.value,
1078
+ "is-save-disabled": C(I).state.isSaving || C(R).isSaveExporting.value || !C(I).state.isDirty,
1046
1079
  onSave: Z
1047
1080
  }, null, 8, [
1048
1081
  "editor",
@@ -1058,7 +1091,7 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1058
1091
  "is-saving",
1059
1092
  "is-save-disabled"
1060
1093
  ]),
1061
- E($e, {
1094
+ E(et, {
1062
1095
  open: C(X).modalOpen.value,
1063
1096
  issues: C(X).blockingIssues.value,
1064
1097
  onCancel: C(X).cancel,
@@ -1069,10 +1102,10 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1069
1102
  "onCancel",
1070
1103
  "onConfirm"
1071
1104
  ]),
1072
- E(kt, {
1105
+ E(At, {
1073
1106
  visible: C(H).isPreviewingSnapshot.value,
1074
1107
  onCancel: C(H).cancelPreview,
1075
- onConfirm: me
1108
+ onConfirm: ge
1076
1109
  }, null, 8, ["visible", "onCancel"]),
1077
1110
  E(T, {
1078
1111
  "enter-active-class": "tpl:transition-all tpl:duration-200 tpl:ease-out",
@@ -1082,18 +1115,18 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1082
1115
  "leave-from-class": "tpl:translate-y-0 tpl:opacity-100",
1083
1116
  "leave-to-class": "tpl:translate-y-[-8px] tpl:opacity-0"
1084
1117
  }, {
1085
- default: O(() => [E(jt, { visible: C(U).collabUndoWarningVisible.value }, null, 8, ["visible"])]),
1118
+ default: O(() => [E(Mt, { visible: C(U).collabUndoWarningVisible.value }, null, 8, ["visible"])]),
1086
1119
  _: 1
1087
1120
  }),
1088
- t(E(q, null, null, 512), [[y, !C(P).state.previewMode]]),
1121
+ t(E(se, null, null, 512), [[y, !C(I).state.previewMode]]),
1089
1122
  f("div", {
1090
- class: c(["tpl-body tpl:absolute tpl:bottom-0 tpl:overflow-auto", [C(P).state.previewMode ? "tpl:left-0 tpl:right-0" : C(V).rightPanelOpen.value ? "tpl:left-12 tpl:right-[680px]" : "tpl:left-12 tpl:right-[320px]", C(H).isPreviewingSnapshot.value ? "tpl:top-[104px]" : "tpl:top-14"]]),
1123
+ class: c(["tpl-body tpl:absolute tpl:bottom-0 tpl:overflow-auto", [C(I).state.previewMode ? "tpl:left-0 tpl:right-0" : C(V).rightPanelOpen.value ? "tpl:left-12 tpl:right-[680px]" : "tpl:left-12 tpl:right-[320px]", C(H).isPreviewingSnapshot.value ? "tpl:top-[104px]" : "tpl:top-14"]]),
1091
1124
  style: {
1092
1125
  transition: "all 300ms cubic-bezier(0.34, 1.56, 0.64, 1)",
1093
1126
  "background-color": "var(--tpl-canvas-bg)"
1094
1127
  }
1095
- }, [f("div", Nt, [E(T, { name: "tpl-restore-btn" }, {
1096
- default: O(() => [C(F).conditionPreview.hasHiddenBlocks.value ? (e(), m("button", {
1128
+ }, [f("div", Pt, [E(T, { name: "tpl-restore-btn" }, {
1129
+ default: O(() => [C(L).conditionPreview.hasHiddenBlocks.value ? (e(), m("button", {
1097
1130
  key: 0,
1098
1131
  class: "tpl:absolute tpl:left-1/2 tpl:top-2 tpl:-translate-x-1/2 tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:rounded-full tpl:border tpl:px-3.5 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:whitespace-nowrap tpl:shadow-md tpl:hover:opacity-80",
1099
1132
  style: {
@@ -1102,20 +1135,20 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1102
1135
  "border-color": "var(--tpl-warning)",
1103
1136
  "backdrop-filter": "blur(8px)"
1104
1137
  },
1105
- onClick: i[0] ||= (e) => C(F).conditionPreview.reset()
1106
- }, [E(C(ae), {
1138
+ onClick: i[0] ||= (e) => C(L).conditionPreview.reset()
1139
+ }, [E(C(ue), {
1107
1140
  size: 13,
1108
1141
  "stroke-width": 2
1109
- }), s(" " + w(C(F).t.blockSettings.restoreHiddenBlocks), 1)])) : v("", !0)]),
1142
+ }), s(" " + w(C(L).t.blockSettings.restoreHiddenBlocks), 1)])) : v("", !0)]),
1110
1143
  _: 1
1111
- })]), f("main", Pt, [E(fe, {
1112
- viewport: C(P).state.viewport,
1113
- content: C(P).content.value,
1114
- "selected-block-id": C(P).state.selectedBlockId,
1115
- "dark-mode": C(P).state.darkMode,
1116
- "preview-mode": C(P).state.previewMode,
1117
- "locked-blocks": C(N)?.lockedBlocks.value ?? void 0,
1118
- onSelectBlock: C(P).selectBlock,
1144
+ })]), f("main", Ft, [E(oe, {
1145
+ viewport: C(I).state.viewport,
1146
+ content: C(I).content.value,
1147
+ "selected-block-id": C(I).state.selectedBlockId,
1148
+ "dark-mode": C(I).state.darkMode,
1149
+ "preview-mode": C(I).state.previewMode,
1150
+ "locked-blocks": C(P)?.lockedBlocks.value ?? void 0,
1151
+ onSelectBlock: C(I).selectBlock,
1119
1152
  onOpenAiChat: i[1] ||= (e) => C(V).aiChatOpen.value = !0,
1120
1153
  onOpenDesignReference: i[2] ||= (e) => C(V).designReferenceOpen.value = !0
1121
1154
  }, null, 8, [
@@ -1127,51 +1160,51 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1127
1160
  "locked-blocks",
1128
1161
  "onSelectBlock"
1129
1162
  ])])], 2),
1130
- n.config.branding !== !1 && !C(I).isWhiteLabeled.value ? (e(), x(se, {
1163
+ n.config.branding !== !1 && !C(R).isWhiteLabeled.value ? (e(), x(de, {
1131
1164
  key: 0,
1132
- "position-class": [C(P).state.previewMode ? "tpl:left-0 tpl:right-0" : C(V).rightPanelOpen.value ? "tpl:left-12 tpl:right-[680px]" : "tpl:left-12 tpl:right-[320px]"]
1165
+ "position-class": [C(I).state.previewMode ? "tpl:left-0 tpl:right-0" : C(V).rightPanelOpen.value ? "tpl:left-12 tpl:right-[680px]" : "tpl:left-12 tpl:right-[320px]"]
1133
1166
  }, null, 8, ["position-class"])) : v("", !0),
1134
1167
  f("div", {
1135
1168
  class: "tpl-sr-only",
1136
1169
  role: "status",
1137
1170
  "aria-live": "polite",
1138
1171
  "aria-atomic": "true",
1139
- "aria-label": C(F).t.landmarks.reorderAnnouncements
1140
- }, w(C(F).keyboardReorder.announcement.value), 9, Ft),
1141
- t(E(ue, {
1142
- "selected-block": C(P).selectedBlock.value,
1143
- settings: C(P).content.value.settings,
1172
+ "aria-label": C(L).t.landmarks.reorderAnnouncements
1173
+ }, w(C(L).keyboardReorder.announcement.value), 9, It),
1174
+ t(E(ae, {
1175
+ "selected-block": C(I).selectedBlock.value,
1176
+ settings: C(I).content.value.settings,
1144
1177
  "shifted-left": C(V).rightPanelOpen.value,
1145
- onUpdateBlock: i[3] ||= (e) => C(P).updateBlock(C(P).selectedBlock.value.id, e),
1146
- onDeleteBlock: i[4] ||= (e) => C(F).blockActions.deleteBlock(C(P).selectedBlock.value.id),
1147
- onDuplicateBlock: i[5] ||= (e) => C(F).blockActions.duplicateBlock(C(P).selectedBlock.value),
1148
- onUpdateSettings: C(P).updateSettings
1178
+ onUpdateBlock: i[3] ||= (e) => C(I).updateBlock(C(I).selectedBlock.value.id, e),
1179
+ onDeleteBlock: i[4] ||= (e) => C(L).blockActions.deleteBlock(C(I).selectedBlock.value.id),
1180
+ onDuplicateBlock: i[5] ||= (e) => C(L).blockActions.duplicateBlock(C(I).selectedBlock.value),
1181
+ onUpdateSettings: C(I).updateSettings
1149
1182
  }, null, 8, [
1150
1183
  "selected-block",
1151
1184
  "settings",
1152
1185
  "shifted-left",
1153
1186
  "onUpdateSettings"
1154
- ]), [[y, !C(P).state.previewMode]]),
1155
- !C(S) && C(D) ? (e(), x(ht, {
1187
+ ]), [[y, !C(I).state.previewMode]]),
1188
+ !C(D) && C(k) ? (e(), x(gt, {
1156
1189
  key: 1,
1157
1190
  ref_key: "cloudPanelsRef",
1158
- ref: d,
1191
+ ref: p,
1159
1192
  config: l.config,
1160
- editor: C(P),
1161
- core: C(F),
1193
+ editor: C(I),
1194
+ core: C(L),
1162
1195
  "panel-state": C(V),
1163
- "plan-config-instance": C(A),
1196
+ "plan-config-instance": C(M),
1164
1197
  "test-email": C(B),
1165
- "media-lib": C(L),
1166
- "saved-modules-headless": C(re),
1198
+ "media-lib": C(te),
1199
+ "saved-modules-headless": C(ie),
1167
1200
  "show-save-module-dialog": C(W),
1168
1201
  "save-module-pre-selected-block-id": C(K),
1169
1202
  "show-module-browser-modal": C(G),
1170
1203
  "onUpdate:showSaveModuleDialog": i[6] ||= (e) => W.value = e,
1171
1204
  "onUpdate:saveModulePreSelectedBlockId": i[7] ||= (e) => K.value = e,
1172
1205
  "onUpdate:showModuleBrowserModal": i[8] ||= (e) => G.value = e,
1173
- onSendTestEmail: pe,
1174
- onModuleInsert: he
1206
+ onSendTestEmail: J,
1207
+ onModuleInsert: _e
1175
1208
  }, null, 8, [
1176
1209
  "config",
1177
1210
  "editor",
@@ -1186,13 +1219,14 @@ var We = ["aria-label"], Ge = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1186
1219
  "show-module-browser-modal"
1187
1220
  ])) : v("", !0),
1188
1221
  f("div", {
1189
- ref: (e) => C(F).popoverRoot.value = e,
1222
+ ref: (e) => C(L).popoverRoot.value = e,
1190
1223
  class: "tpl-popover-root"
1191
1224
  }, null, 512),
1192
- E(de),
1193
- C(le) ? (e(), x(ce, { key: 2 })) : v("", !0)
1194
- ], 14, Mt));
1225
+ E(ce),
1226
+ E(pe),
1227
+ C(he) ? (e(), x(fe, { key: 2 })) : v("", !0)
1228
+ ], 46, Nt));
1195
1229
  }
1196
- }), [["__scopeId", "data-v-df1ba3f4"]]);
1230
+ }), [["__scopeId", "data-v-3fc6c906"]]);
1197
1231
  //#endregion
1198
- export { It as default };
1232
+ export { Lt as default };