@aswin.dev/editor 0.7.1 → 0.7.3

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 (116) hide show
  1. package/LICENSE +56 -0
  2. package/dist/{AiChatSidebar-DWGPVtvC.js → AiChatSidebar-Dt5pvG5t.js} +37 -51
  3. package/dist/{AiFeatureMenu-duUFSfDf.js → AiFeatureMenu-BipxcGap.js} +1 -1
  4. package/dist/{CloudEditor-CFldoCOb.js → CloudEditor-CnUX0IOW.js} +283 -239
  5. package/dist/{CollaboratorBar-Bw-lbt61.js → CollaboratorBar-NaaZTjbs.js} +2 -2
  6. package/dist/{CommentsSidebar-BaD5F53-.js → CommentsSidebar-DE6ZsM4D.js} +9 -10
  7. package/dist/CountdownBlock-Ba3T-i2X.js +1536 -0
  8. package/dist/{CountdownToolbar-Dg4F8MTk.js → CountdownToolbar-CbhSp_uq.js} +1 -1
  9. package/dist/{DesignReferenceSidebar-BSH7uNP_.js → DesignReferenceSidebar-CZg97bbj.js} +1 -1
  10. package/dist/{ModuleBrowserModal-6phxZSKI.js → ModuleBrowserModal-D2EVdexc.js} +4 -4
  11. package/dist/{ModulePreviewCanvas-BW8L3eQX.js → ModulePreviewCanvas-P3N-nxkU.js} +52 -47
  12. package/dist/{NumberWithSuffix-BpUzQOJt.js → NumberWithSuffix-CihczoAd.js} +1 -1
  13. package/dist/{ParagraphEditor-DNSzAB-I.js → ParagraphEditor-BbRuKhWv.js} +7 -7
  14. package/dist/{SaveModuleDialog-zMQTpez7.js → SaveModuleDialog-DLZa3m3O.js} +2 -2
  15. package/dist/{SnapshotHistory-Do-A5rYU.js → SnapshotHistory-Csg1_jXi.js} +3 -3
  16. package/dist/{TestEmailModal-DGj_9V1u.js → TestEmailModal-m3okLbJz.js} +2 -2
  17. package/dist/{TitleEditor-C7IDnAoS.js → TitleEditor-CtJIS5ER.js} +2 -2
  18. package/dist/{TplModal-BAsVzcTb.js → TplModal-CQCrKeKP.js} +1 -1
  19. package/dist/{blockTypeIcons-C6LDKvmd.js → blockTypeIcons-Dah0pgt-.js} +50 -19
  20. package/dist/bundle-stats.json +8 -8
  21. package/dist/cdn/chunks/AccessibilityPanel-Bt_fD7QT.js +97 -0
  22. package/dist/cdn/chunks/AccessibilityPanel-Bt_fD7QT.js.map +1 -0
  23. package/dist/cdn/chunks/AiFeatureMenu-Bn-0rgfr.js +59 -0
  24. package/dist/cdn/chunks/AiFeatureMenu-Bn-0rgfr.js.map +1 -0
  25. package/dist/cdn/chunks/BlockA11yBadge-Cj18Iw0p.js +33 -0
  26. package/dist/cdn/chunks/BlockA11yBadge-Cj18Iw0p.js.map +1 -0
  27. package/dist/cdn/chunks/CloudEditor-56lVcdot.js +1220 -0
  28. package/dist/cdn/chunks/CloudEditor-56lVcdot.js.map +1 -0
  29. package/dist/cdn/chunks/CollaboratorBar-B7DCV3xp.js +51 -0
  30. package/dist/cdn/chunks/CollaboratorBar-B7DCV3xp.js.map +1 -0
  31. package/dist/cdn/chunks/CountdownToolbar-BtaD3d3-.js +212 -0
  32. package/dist/cdn/chunks/CountdownToolbar-BtaD3d3-.js.map +1 -0
  33. package/dist/cdn/chunks/ModuleBrowserModal-CiIY7ZGv.js +195 -0
  34. package/dist/cdn/chunks/ModuleBrowserModal-CiIY7ZGv.js.map +1 -0
  35. package/dist/cdn/chunks/ModulePreviewCanvas-M7_OGV2m.js +113 -0
  36. package/dist/cdn/chunks/ModulePreviewCanvas-M7_OGV2m.js.map +1 -0
  37. package/dist/cdn/chunks/NumberWithSuffix-DfVBnsgc.js +423 -0
  38. package/dist/cdn/chunks/NumberWithSuffix-DfVBnsgc.js.map +1 -0
  39. package/dist/cdn/chunks/ParagraphEditor-1XJOpiLX.js +544 -0
  40. package/dist/cdn/chunks/ParagraphEditor-1XJOpiLX.js.map +1 -0
  41. package/dist/cdn/chunks/RichTextEditorContent-C2q8sbp2.js +106 -0
  42. package/dist/cdn/chunks/RichTextEditorContent-C2q8sbp2.js.map +1 -0
  43. package/dist/cdn/chunks/SaveModuleDialog-BNxh1jPT.js +119 -0
  44. package/dist/cdn/chunks/SaveModuleDialog-BNxh1jPT.js.map +1 -0
  45. package/dist/cdn/chunks/TitleEditor-IF7VzLTk.js +171 -0
  46. package/dist/cdn/chunks/TitleEditor-IF7VzLTk.js.map +1 -0
  47. package/dist/cdn/chunks/blockTypeIcons-tPBKQ8WC.js +24 -0
  48. package/dist/cdn/chunks/blockTypeIcons-tPBKQ8WC.js.map +1 -0
  49. package/dist/cdn/chunks/de-B05yW8Gi.js +840 -0
  50. package/dist/cdn/chunks/de-B05yW8Gi.js.map +1 -0
  51. package/dist/cdn/chunks/de-BPHtelu7.js +209 -0
  52. package/dist/cdn/chunks/de-BPHtelu7.js.map +1 -0
  53. package/dist/cdn/chunks/de-BRDqJwJe.js +89 -0
  54. package/dist/cdn/chunks/de-BRDqJwJe.js.map +1 -0
  55. package/dist/cdn/chunks/draggable-C-1_gch3.js +11572 -0
  56. package/dist/cdn/chunks/draggable-C-1_gch3.js.map +1 -0
  57. package/dist/cdn/chunks/emojiData-DUHzsh4j.js +19 -0
  58. package/dist/cdn/chunks/emojiData-DUHzsh4j.js.map +1 -0
  59. package/dist/cdn/chunks/en-BII7695P.js +840 -0
  60. package/dist/cdn/chunks/en-BII7695P.js.map +1 -0
  61. package/dist/cdn/chunks/en-Cdj_Ikl1.js +89 -0
  62. package/dist/cdn/chunks/en-Cdj_Ikl1.js.map +1 -0
  63. package/dist/cdn/chunks/en-DejwuJhw.js +209 -0
  64. package/dist/cdn/chunks/en-DejwuJhw.js.map +1 -0
  65. package/dist/cdn/chunks/extensions-B0eT-yjf.js +598 -0
  66. package/dist/cdn/chunks/extensions-B0eT-yjf.js.map +1 -0
  67. package/dist/cdn/chunks/features-BrvE2Fzv.js +9677 -0
  68. package/dist/cdn/chunks/features-BrvE2Fzv.js.map +1 -0
  69. package/dist/cdn/chunks/icons-C7wtAD8p.js +1043 -0
  70. package/dist/cdn/chunks/icons-C7wtAD8p.js.map +1 -0
  71. package/dist/cdn/chunks/liquid.browser-CllF-us3.js +3279 -0
  72. package/dist/cdn/chunks/liquid.browser-CllF-us3.js.map +1 -0
  73. package/dist/cdn/chunks/media-library-Cl5XuaKy.js +6030 -0
  74. package/dist/cdn/chunks/media-library-Cl5XuaKy.js.map +1 -0
  75. package/dist/cdn/chunks/pusher-i7-OBujc.js +2508 -0
  76. package/dist/cdn/chunks/pusher-i7-OBujc.js.map +1 -0
  77. package/dist/cdn/chunks/quality-Va91a3N8.js +1456 -0
  78. package/dist/cdn/chunks/quality-Va91a3N8.js.map +1 -0
  79. package/dist/cdn/chunks/readableTextColor-DhoK4XiZ.js +32 -0
  80. package/dist/cdn/chunks/readableTextColor-DhoK4XiZ.js.map +1 -0
  81. package/dist/cdn/chunks/renderer-si0Zgxeb.js +642 -0
  82. package/dist/cdn/chunks/renderer-si0Zgxeb.js.map +1 -0
  83. package/dist/cdn/chunks/rolldown-runtime-BNuo_Jkg.js +20 -0
  84. package/dist/cdn/chunks/src-BLyYIbdZ.js +497 -0
  85. package/dist/cdn/chunks/src-BLyYIbdZ.js.map +1 -0
  86. package/dist/cdn/chunks/styleConstants-DfcU8u_r.js +57 -0
  87. package/dist/cdn/chunks/styleConstants-DfcU8u_r.js.map +1 -0
  88. package/dist/cdn/chunks/styles-C6BQLT9F.js +5807 -0
  89. package/dist/cdn/chunks/styles-C6BQLT9F.js.map +1 -0
  90. package/dist/cdn/chunks/tiptap-D8whBv5F.js +14654 -0
  91. package/dist/cdn/chunks/tiptap-D8whBv5F.js.map +1 -0
  92. package/dist/cdn/editor.css +2 -0
  93. package/dist/cdn/editor.js +367 -0
  94. package/dist/cdn/editor.js.map +1 -0
  95. package/dist/{cloud-6ZmAvF0j.js → cloud-BoS0J0vs.js} +1 -1
  96. package/dist/{de-DWcgp-7T.js → de-C74F9xK3.js} +112 -3
  97. package/dist/dist-C2grMquk.js +1261 -0
  98. package/dist/{dist-CivF9P8b.js → dist-Djgi0A6k.js} +92 -77
  99. package/dist/{en-Cxd4fhNm.js → en-B24jVTeO.js} +112 -3
  100. package/dist/{extensions-D__hOlV1.js → extensions-DsmjHqBF.js} +14 -14
  101. package/dist/index.d.ts +21 -10
  102. package/dist/{pencil-BZJPNYWR.js → pencil-Bpimrzzw.js} +5 -2
  103. package/dist/style.css +1 -1
  104. package/dist/styles-BMFMtR9R.js +6341 -0
  105. package/dist/templatical-editor.js +197 -139
  106. package/dist/undo-2-m1EUDbUg.js +16 -0
  107. package/dist/{useEditorCore-wslttMH-.js → useEditorCore-CtNAo0uy.js} +2154 -2025
  108. package/dist/useMergeTag-2vTcVpNo.js +34 -0
  109. package/package.json +12 -12
  110. package/dist/CountdownBlock-DaYGxKqo.js +0 -92
  111. package/dist/check-DJrpDKO_.js +0 -7
  112. package/dist/dist-C04s_fLA.js +0 -563
  113. package/dist/styles-B4tjX5SP.js +0 -5224
  114. package/dist/useMergeTag-DX0XG5V9.js +0 -34
  115. /package/dist/{clock-ik2pRJKG.js → clock-Ba4p3rJM.js} +0 -0
  116. /package/dist/{readableTextColor-DVuzNX1y.js → readableTextColor-C_9OpzBw.js} +0 -0
@@ -1,25 +1,25 @@
1
1
  import { At as e, C as t, F as n, Ft as r, M as i, N as a, P as o, S as s, U as c, V as l, W as u, Z as d, _ as f, b as p, d as m, et as h, f as g, g as _, h as v, j as y, jt as b, l as x, m as S, nt as C, st as w, t as T, v as E, x as D, y as O } from "./vue.runtime.esm-bundler-CjauPXjj.js";
2
2
  import { t as k } from "./timeouts-BSGxjuUF.js";
3
- import { A, f as j, o as ee, r as M } from "./dist-C04s_fLA.js";
4
- import { C as te, F as ne, L as N, t as P } from "./useEditorCore-wslttMH-.js";
5
- import { l as F, t as I } from "./dist-CivF9P8b.js";
6
- import { E as re, S as L, T as R, c as z, i as ie, l as ae, n as oe, u as B, w as se } from "./keys-CvX8D-8C.js";
7
- import { t as V } from "./useI18n-C2xQZ6K9.js";
8
- import { t as ce } from "./createLucideIcon-ClREiSx3.js";
9
- import { a as le, c as H, d as ue, f as de, h as fe, i as pe, l as U, m as me, n as he, p as ge, r as _e, s as ve, t as ye, u as W } from "./styles-B4tjX5SP.js";
10
- import { t as G } from "./check-DJrpDKO_.js";
11
- import { t as K } from "./circle-alert-ZQQc98HC.js";
12
- import { t as be } from "./clock-ik2pRJKG.js";
13
- import { t as xe } from "./loader-circle-Balo8p3d.js";
14
- import { t as q } from "./message-circle-B39qAHxs.js";
15
- import { t as J } from "./send-D2eSo4GH.js";
16
- import { t as Se } from "./sparkles-Chm5CZfb.js";
17
- import { t as Y } from "./triangle-alert-KpDVNbpn.js";
18
- import { t as Ce } from "./_plugin-vue_export-helper-BVAJ4lgT.js";
3
+ import { M as A, f as ee, o as te, r as j } from "./dist-C2grMquk.js";
4
+ import { I as M, R as N, t as ne, w as re } from "./useEditorCore-CtNAo0uy.js";
5
+ import { t as P, u as F } from "./dist-Djgi0A6k.js";
6
+ import { E as I, S as ie, T as L, c as R, i as z, l as ae, n as oe, u as se, w as ce } from "./keys-CvX8D-8C.js";
7
+ import { t as B } from "./useI18n-C2xQZ6K9.js";
8
+ import { t as V } from "./createLucideIcon-ClREiSx3.js";
9
+ import { _ as le, a as ue, c as H, d as U, f as de, g as W, h as fe, i as pe, l as G, m as me, n as he, p as ge, r as _e, s as ve, t as ye, u as be } from "./styles-BMFMtR9R.js";
10
+ import { n as K } from "./pencil-Bpimrzzw.js";
11
+ import { t as q } from "./circle-alert-ZQQc98HC.js";
12
+ import { t as xe } from "./clock-Ba4p3rJM.js";
13
+ import { t as Se } from "./loader-circle-Balo8p3d.js";
14
+ import { t as J } from "./message-circle-B39qAHxs.js";
15
+ import { t as Y } from "./send-D2eSo4GH.js";
16
+ import { t as Ce } from "./sparkles-Chm5CZfb.js";
17
+ import { t as we } from "./triangle-alert-KpDVNbpn.js";
18
+ import { t as Te } from "./_plugin-vue_export-helper-BVAJ4lgT.js";
19
19
  import { n as X } from "./useCloudI18n-DOKSZql1.js";
20
20
  import { d as Z } from "./styleConstants-34eUKPOZ.js";
21
- import { _ as we, a as Te, c as Q, d as Ee, f as $, g as De, h as Oe, l as ke, m as Ae, n as je, o as Me, p as Ne, r as Pe, s as Fe, t as Ie, v as Le, y as Re } from "./cloud-6ZmAvF0j.js";
22
- var ze = ce("save", [
21
+ import { _ as Ee, a as De, c as Q, d as Oe, f as $, g as ke, h as Ae, l as je, m as Me, n as Ne, o as Pe, p as Fe, r as Ie, s as Le, t as Re, v as ze, y as Be } from "./cloud-BoS0J0vs.js";
22
+ var Ve = V("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 ze = ce("save", [
35
35
  ]);
36
36
  //#endregion
37
37
  //#region src/cloud/composables/useSnapshotPreview.ts
38
- function Be(e) {
38
+ function He(e) {
39
39
  let { authManager: t, editor: n, history: r, conditionPreview: i, autoSave: a, onError: o } = e, s = C(null), c = h(null), l = h(null), u = !1;
40
40
  d(() => {
41
41
  u = !0;
42
42
  });
43
43
  let f = S(() => c.value !== null), p = S(() => s.value?.snapshots.value ?? []), m = S(() => s.value?.isLoading.value ?? !1), g = S(() => s.value?.isRestoring.value ?? !1);
44
44
  function _() {
45
- n.state.template?.id && !s.value && (s.value = De({
45
+ n.state.template?.id && !s.value && (s.value = ke({
46
46
  authManager: t,
47
47
  templateId: n.state.template.id,
48
48
  onRestore: v,
@@ -92,7 +92,7 @@ function Be(e) {
92
92
  }
93
93
  //#endregion
94
94
  //#region src/cloud/composables/useCloudPanelState.ts
95
- function Ve() {
95
+ function Ue() {
96
96
  let e = h(null), t = S({
97
97
  get: () => e.value === "ai-chat",
98
98
  set: (t) => e.value = t ? "ai-chat" : null
@@ -115,7 +115,7 @@ function Ve() {
115
115
  function m(t) {
116
116
  c.value = !1, e.value = e.value === t ? null : t;
117
117
  }
118
- return I(l, () => {
118
+ return P(l, () => {
119
119
  c.value = !1;
120
120
  }), {
121
121
  activePanel: e,
@@ -137,7 +137,7 @@ function Ve() {
137
137
  }
138
138
  //#endregion
139
139
  //#region src/cloud/composables/useCollabUndoWarning.ts
140
- function He(e) {
140
+ function We(e) {
141
141
  let { isCollaborationEnabled: t, getCollaboratorCount: n, canUndo: r } = e, i = h(!1), a = h(!1), { start: o } = F(() => {
142
142
  a.value = !1;
143
143
  }, k, { immediate: !1 });
@@ -151,7 +151,7 @@ function He(e) {
151
151
  }
152
152
  //#endregion
153
153
  //#region src/cloud/composables/useCloudFeatureFlags.ts
154
- function Ue(e) {
154
+ function Ge(e) {
155
155
  let { planConfigInstance: t, aiConfig: n, editor: r } = e, i = S(() => t.hasFeature("ai_generation") && n.hasAnyMenuFeature.value), a = S(() => t.hasFeature("test_email")), o = S(() => !!r.state.template?.id), s = S(() => t.hasFeature("white_label")), c = S(() => t.config.value?.limits.max_templates ?? null), l = S(() => t.config.value?.template_count ?? 0), u = h(!1), d = h("idle"), f = h(""), { start: p } = F(() => {
156
156
  d.value = "idle";
157
157
  }, 3e3, { immediate: !1 });
@@ -170,9 +170,9 @@ function Ue(e) {
170
170
  }
171
171
  //#endregion
172
172
  //#region src/cloud/composables/useCloudMediaLibrary.ts
173
- function We(e) {
174
- let { onRequestMedia: t, mediaLibraryOpen: n, mediaLibraryAccept: r } = e, i = null;
175
- async function a() {
173
+ function Ke(e) {
174
+ let { onRequestMedia: t, mediaLibraryOpen: n, mediaLibraryAccept: r, onTemplateWidthPreview: i } = e, a = null;
175
+ async function o() {
176
176
  if (t) {
177
177
  let e = await t({ accept: ["images"] });
178
178
  return e ? {
@@ -180,55 +180,60 @@ function We(e) {
180
180
  alt: e.alt_text || void 0
181
181
  } : null;
182
182
  }
183
- return i &&= (i(null), null), r.value = ["images"], n.value = !0, new Promise((e) => {
184
- i = (t) => {
183
+ return a &&= (a(null), null), r.value = ["images"], n.value = !0, new Promise((e) => {
184
+ a = (t) => {
185
185
  e(t);
186
186
  };
187
187
  });
188
188
  }
189
- function o(e) {
190
- n.value = !1, i?.({
189
+ function s(e, t) {
190
+ n.value = !1, a?.({
191
191
  url: e.url,
192
- alt: e.alt_text || void 0
193
- }), i = null;
192
+ alt: e.alt_text || void 0,
193
+ templateWidth: t
194
+ }), a = null;
194
195
  }
195
- function s() {
196
- n.value = !1, i?.(null), i = null;
196
+ function c(e) {
197
+ i?.(e);
198
+ }
199
+ function l() {
200
+ n.value = !1, a?.(null), a = null;
197
201
  }
198
202
  return d(() => {
199
- i &&= (i(null), null);
203
+ a &&= (a(null), null);
200
204
  }), {
201
- handleRequestMedia: a,
202
- handleMediaSelect: o,
203
- handleMediaLibraryClose: s
205
+ handleRequestMedia: o,
206
+ handleMediaSelect: s,
207
+ handleMediaLibraryClose: l,
208
+ handleMediaTemplateWidthPreview: c
204
209
  };
205
210
  }
206
211
  //#endregion
207
212
  //#region src/cloud/composables/useCloudInitialization.ts
208
- function Ge(e) {
209
- let { config: t, translations: n, fontsManager: r, emit: i, getCommentsSidebar: a } = e, s = h(!0), c = h(!1), u = h(null), d = !1, f = { value: null }, p = null, m = null, g = new Ie({
213
+ function qe(e) {
214
+ let { config: t, translations: n, fontsManager: r, emit: i, getCommentsSidebar: a } = e, s = h(!0), c = h(!1), u = h(null), d = !1, f = { value: null }, p = null, m = null, g = new Re({
210
215
  ...t.auth,
211
216
  onError: t.onError
212
- }), _ = Ae({
217
+ }), _ = Me({
213
218
  authManager: g,
214
219
  onError: t.onError
215
- }), v = h(/* @__PURE__ */ new Map()), y = Ee({
220
+ }), v = h(/* @__PURE__ */ new Map()), y = Oe({
216
221
  authManager: g,
217
222
  defaultFontFamily: t.fonts?.defaultFont,
218
223
  templateDefaults: t.templateDefaults,
219
224
  onError: t.onError,
220
225
  lockedBlocks: v
221
- }), b = Re({
226
+ }), b = Be({
222
227
  authManager: g,
223
228
  onError: t.onError
224
229
  });
225
- t.mcp?.enabled && Ne({
230
+ t.mcp?.enabled && Fe({
226
231
  editor: y,
227
232
  channel: b.channel,
228
233
  onOperation: t.mcp.onOperation
229
234
  });
230
235
  let x = null;
231
- t.collaboration?.enabled && (x = Me({
236
+ t.collaboration?.enabled && (x = Pe({
232
237
  authManager: g,
233
238
  editor: y,
234
239
  channel: b.channel,
@@ -239,8 +244,8 @@ function Ge(e) {
239
244
  onBlockUnlocked: t.collaboration.onBlockUnlocked
240
245
  }), l(() => x.lockedBlocks.value, (e) => {
241
246
  v.value = e;
242
- }, { immediate: !0 }), Fe(y, x));
243
- let C = S(() => !!t.collaboration?.enabled && _.hasFeature("collaboration")), w = P({
247
+ }, { immediate: !0 }), Le(y, x));
248
+ let C = S(() => !!t.collaboration?.enabled && _.hasFeature("collaboration")), w = ne({
244
249
  editor: y,
245
250
  config: {
246
251
  uiTheme: t.uiTheme,
@@ -251,7 +256,7 @@ function Ge(e) {
251
256
  displayConditions: t.displayConditions,
252
257
  onRequestMedia: null,
253
258
  editorType: t.editorType,
254
- accessibility: me(t),
259
+ accessibility: W(t),
255
260
  onSave: () => {
256
261
  f.value?.().catch((e) => {
257
262
  t.onError?.(e);
@@ -270,13 +275,13 @@ function Ge(e) {
270
275
  },
271
276
  themeExtraStyles: () => ({ "--tpl-drop-text": `"${n.canvas.dropHere}"` }),
272
277
  keyboardOptions: { onBeforeUndo: () => m?.showCollabUndoWarning() }
273
- }), T = He({
278
+ }), T = We({
274
279
  isCollaborationEnabled: C,
275
280
  getCollaboratorCount: () => x?.collaborators.value.length ?? 0,
276
281
  canUndo: w.history.canUndo
277
282
  });
278
283
  m = T;
279
- let E = Be({
284
+ let E = He({
280
285
  authManager: g,
281
286
  editor: y,
282
287
  history: w.history,
@@ -285,32 +290,32 @@ function Ge(e) {
285
290
  onError: t.onError
286
291
  });
287
292
  p = E;
288
- let D = Ve(), O = Te(t.ai), k = Ue({
293
+ let D = Ue(), O = De(t.ai), k = Ge({
289
294
  planConfigInstance: _,
290
295
  aiConfig: O,
291
296
  editor: y
292
- }), A = We({
297
+ }), A = Ke({
293
298
  onRequestMedia: t.onRequestMedia,
294
299
  mediaLibraryOpen: D.mediaLibraryOpen,
295
300
  mediaLibraryAccept: D.mediaLibraryAccept
296
301
  });
297
- te({
302
+ re({
298
303
  onBlockMove: y.moveBlock,
299
304
  onBlockAdd: y.addBlock
300
305
  });
301
- let j = $({
306
+ let ee = $({
302
307
  authManager: g,
303
308
  getFontsConfig: () => t.fonts,
304
309
  canUseCustomFonts: () => _.hasFeature("custom_fonts")
305
- }), ee = Le({
310
+ }), te = ze({
306
311
  authManager: g,
307
312
  getTemplateId: () => y.state.template?.id ?? null,
308
313
  save: () => y.save(),
309
- exportHtml: (e) => j.exportHtml(e),
314
+ exportHtml: (e) => ee.exportHtml(e),
310
315
  onError: t.onError,
311
316
  isAuthReady: c,
312
317
  onBeforeTestEmail: t.onBeforeTestEmail
313
- }), M = ke({
318
+ }), j = je({
314
319
  authManager: g,
315
320
  getTemplateId: () => y.state.template?.id ?? null,
316
321
  getSocketId: () => b.getSocketId(),
@@ -320,31 +325,31 @@ function Ge(e) {
320
325
  hasCommentingFeature: () => t.commenting !== !1 && _.hasFeature("commenting")
321
326
  });
322
327
  Q({
323
- comments: M,
328
+ comments: j,
324
329
  channel: b.channel
325
330
  });
326
- let N = Oe({
331
+ let N = Ae({
327
332
  authManager: g,
328
333
  onError: t.onError
329
- }), F = h(!1), I = h(null), ae = h(!1), se = we({
334
+ }), P = h(!1), F = h(null), ae = h(!1), ce = Ee({
330
335
  authManager: g,
331
336
  getTemplateId: () => y.state.template?.id ?? null
332
337
  });
333
- function V(e) {
338
+ function B(e) {
334
339
  D.commentsOpen.value = !0, queueMicrotask(() => {
335
340
  a()?.filterByBlock(e);
336
341
  });
337
342
  }
338
- o(L, A.handleRequestMedia), o(ie, g), o(oe, O), o(B, M), o(R, N), o(re, se), o(z, {
343
+ o(ie, A.handleRequestMedia), o(z, g), o(oe, O), o(se, j), o(L, N), o(I, ce), o(R, {
339
344
  plan: _,
340
345
  ai: O,
341
346
  comments: {
342
- getBlockCount: (e) => M.commentCountByBlock.value.get(e) ?? 0,
343
- openForBlock: V
347
+ getBlockCount: (e) => j.commentCountByBlock.value.get(e) ?? 0,
348
+ openForBlock: B
344
349
  },
345
350
  savedModules: {
346
351
  openSaveDialog: (e) => {
347
- I.value = e ?? null, F.value = !0;
352
+ F.value = e ?? null, P.value = !0;
348
353
  },
349
354
  openBrowser: () => {
350
355
  ae.value = !0;
@@ -352,22 +357,22 @@ function Ge(e) {
352
357
  moduleCount: S(() => N.modules.value.length)
353
358
  }
354
359
  });
355
- function ce(e) {
360
+ function V(e) {
356
361
  _.hasFeature("theme_customization") && (w.themeOverrides.value = e);
357
362
  }
358
363
  function le(e) {
359
364
  y.setUiTheme(e);
360
365
  }
361
- async function H() {
366
+ async function ue() {
362
367
  s.value = !0, u.value = null;
363
368
  try {
364
369
  if (await g.initialize(), d) return;
365
370
  c.value = !0;
366
- let e = await je({ authManager: g });
371
+ let e = await Ne({ authManager: g });
367
372
  if (d) return;
368
373
  if (!e.api.ok) throw Error("Health check failed: API is not reachable");
369
374
  if (!e.auth.ok) throw Error(`Health check failed: authentication error${e.auth.error ? ` - ${e.auth.error}` : ""}`);
370
- if (e.websocket.ok || ne.warn("WebSocket health check failed:", e.websocket.error ?? "unknown error", "-- real-time features will be disabled."), await _.fetchConfig(), d) return;
375
+ if (e.websocket.ok || M.warn("WebSocket health check failed:", e.websocket.error ?? "unknown error", "-- real-time features will be disabled."), await _.fetchConfig(), d) return;
371
376
  r.setCustomFontsEnabled(_.hasFeature("custom_fonts")), t.customBlocks?.length && _.hasFeature("custom_blocks") && w.registerCustomBlocks(t.customBlocks), t.theme && _.hasFeature("theme_customization") && (w.themeOverrides.value = t.theme), t.modules !== !1 && _.hasFeature("saved_modules") && N.loadModules(), i("ready");
372
377
  } catch (e) {
373
378
  if (d) return;
@@ -377,7 +382,7 @@ function Ge(e) {
377
382
  d || (s.value = !1);
378
383
  }
379
384
  }
380
- function ue() {
385
+ function H() {
381
386
  d = !0, r.cleanupFontLinks(), b.disconnect(), w.destroy(), t.onUnmount?.();
382
387
  }
383
388
  return {
@@ -395,28 +400,28 @@ function Ge(e) {
395
400
  aiConfig: O,
396
401
  featureFlags: k,
397
402
  mediaLib: A,
398
- exporter: j,
399
- testEmail: ee,
400
- commentsInstance: M,
403
+ exporter: ee,
404
+ testEmail: te,
405
+ commentsInstance: j,
401
406
  savedModulesHeadless: N,
402
- scoringInstance: se,
407
+ scoringInstance: ce,
403
408
  panelState: D,
404
409
  snapshotPreview: E,
405
410
  collabWarning: T,
406
- showSaveModuleDialog: F,
411
+ showSaveModuleDialog: P,
407
412
  showModuleBrowserModal: ae,
408
- saveModulePreSelectedBlockId: I,
413
+ saveModulePreSelectedBlockId: F,
409
414
  onSaveHook: f,
410
- initialize: H,
411
- destroy: ue,
412
- setThemeOverrides: ce,
415
+ initialize: ue,
416
+ destroy: H,
417
+ setThemeOverrides: V,
413
418
  setUiTheme: le,
414
- openCommentsForBlock: V
419
+ openCommentsForBlock: B
415
420
  };
416
421
  }
417
422
  //#endregion
418
423
  //#region src/utils/preRenderCustomBlocks.ts
419
- async function Ke(e, t) {
424
+ async function Je(e, t) {
420
425
  let n = async (e) => {
421
426
  if (A(e)) {
422
427
  let n = e;
@@ -435,10 +440,10 @@ async function Ke(e, t) {
435
440
  }
436
441
  //#endregion
437
442
  //#region src/cloud/composables/useCloudLifecycle.ts
438
- function qe(e) {
443
+ function Ye(e) {
439
444
  let { config: t, editor: n, websocket: r, planConfigInstance: i, snapshotPreview: a, core: o, exporter: s, featureFlags: c, isDestroyed: l } = e;
440
445
  function u() {
441
- return Pe(i.config.value.websocket);
446
+ return Ie(i.config.value.websocket);
442
447
  }
443
448
  async function d(e) {
444
449
  let i = await n.create(e);
@@ -451,7 +456,7 @@ function qe(e) {
451
456
  async function p() {
452
457
  c.isSaveExporting.value = !0, c.saveStatus.value = "idle";
453
458
  try {
454
- if (await Ke(n.content.value, o.registry), l()) throw Error("Component unmounted during save");
459
+ if (await Je(n.content.value, o.registry), l()) throw Error("Component unmounted during save");
455
460
  let e = await n.save();
456
461
  if (l()) throw Error("Component unmounted during save");
457
462
  a.initSnapshotHistory(), a.snapshotHistoryInstance.value?.loadSnapshots();
@@ -478,7 +483,7 @@ function qe(e) {
478
483
  }
479
484
  //#endregion
480
485
  //#region src/cloud/composables/useCloudSaveGate.ts
481
- function Je(e) {
486
+ function Xe(e) {
482
487
  let t = h(!1), n = null, r = S(() => e.planConfig.value?.accessibility?.blockOnError === !0), i = S(() => r.value ? e.issues.value.filter((e) => e.severity === "error") : []), a = S(() => i.value.length > 0);
483
488
  async function o(e) {
484
489
  return a.value ? (n = e, t.value = !0, !1) : (await e(), !0);
@@ -501,7 +506,7 @@ function Je(e) {
501
506
  }
502
507
  //#endregion
503
508
  //#region src/cloud/components/CloudSaveGateModal.vue?vue&type=script&setup=true&lang.ts
504
- var Ye = ["aria-label"], Xe = { 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)]" }, Ze = { 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)]" }, $e = { class: "tpl:m-0 tpl:text-sm tpl:text-[var(--tpl-text-muted)]" }, et = { 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" }, tt = { class: "tpl:text-xs tpl:text-[var(--tpl-text)]" }, nt = { class: "tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]" }, rt = { class: "tpl:flex tpl:justify-end tpl:gap-2" }, it = /* @__PURE__ */ t({
509
+ var Ze = ["aria-label"], Qe = { 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)]" }, $e = { class: "tpl:flex tpl:items-center tpl:gap-2" }, et = { class: "tpl:m-0 tpl:text-base tpl:font-semibold tpl:text-[var(--tpl-text)]" }, tt = { class: "tpl:m-0 tpl:text-sm tpl:text-[var(--tpl-text-muted)]" }, nt = { 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" }, rt = { class: "tpl:text-xs tpl:text-[var(--tpl-text)]" }, it = { class: "tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]" }, at = { class: "tpl:flex tpl:justify-end tpl:gap-2" }, ot = /* @__PURE__ */ t({
505
510
  __name: "CloudSaveGateModal",
506
511
  props: {
507
512
  open: { type: Boolean },
@@ -523,18 +528,18 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
523
528
  "aria-label": w(o).saveGate.title,
524
529
  class: "tpl:fixed tpl:inset-0 tpl:z-50 tpl:flex tpl:items-center tpl:justify-center tpl:bg-black/40 tpl:p-6",
525
530
  onClick: s[2] ||= m((e) => i("cancel"), ["self"])
526
- }, [v("div", Xe, [
527
- v("header", Ze, [D(w(Y), {
531
+ }, [v("div", Qe, [
532
+ v("header", $e, [D(w(we), {
528
533
  size: 18,
529
534
  "stroke-width": 2,
530
535
  class: "tpl:text-[var(--tpl-warning)]"
531
- }), v("h2", Qe, r(w(o).saveGate.title), 1)]),
532
- v("p", $e, r(w(o).saveGate.body), 1),
533
- v("ul", et, [(a(!0), E(g, null, n(e.issues, (e) => (a(), E("li", {
536
+ }), v("h2", et, r(w(o).saveGate.title), 1)]),
537
+ v("p", tt, r(w(o).saveGate.body), 1),
538
+ v("ul", nt, [(a(!0), E(g, null, n(e.issues, (e) => (a(), E("li", {
534
539
  key: `${e.ruleId}-${e.blockId ?? "template"}`,
535
540
  class: "tpl:flex tpl:flex-col tpl:gap-0.5 tpl:rounded tpl:px-2 tpl:py-1.5"
536
- }, [v("span", tt, r(e.message), 1), v("span", nt, r(e.ruleId), 1)]))), 128))]),
537
- v("footer", rt, [v("button", {
541
+ }, [v("span", rt, r(e.message), 1), v("span", it, r(e.ruleId), 1)]))), 128))]),
542
+ v("footer", at, [v("button", {
538
543
  type: "button",
539
544
  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)]",
540
545
  onClick: s[0] ||= (e) => i("cancel")
@@ -543,11 +548,11 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
543
548
  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",
544
549
  onClick: s[1] ||= (e) => i("confirm")
545
550
  }, r(w(o).saveGate.confirm), 1)])
546
- ])], 8, Ye)) : f("", !0)]),
551
+ ])], 8, Ze)) : f("", !0)]),
547
552
  _: 1
548
553
  }));
549
554
  }
550
- }), at = {
555
+ }), st = {
551
556
  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",
552
557
  style: {
553
558
  "background-color": "color-mix(in srgb, var(--tpl-bg) 80%, transparent)",
@@ -556,28 +561,28 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
556
561
  "box-shadow": "var(--tpl-shadow-md)",
557
562
  "border-bottom": "1px solid var(--tpl-border)"
558
563
  }
559
- }, ot = { class: "tpl-header-left tpl:flex tpl:min-w-[200px] tpl:items-center tpl:gap-3" }, st = {
564
+ }, ct = { class: "tpl-header-left tpl:flex tpl:min-w-[200px] tpl:items-center tpl:gap-3" }, lt = {
560
565
  key: 0,
561
566
  class: "tpl:text-xs tpl:opacity-60 tpl:text-[var(--tpl-text-muted)]"
562
- }, ct = { class: "tpl-header-center tpl:flex tpl:items-center tpl:justify-center tpl:gap-10" }, lt = { class: "tpl-header-right tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3" }, ut = ["data-tooltip"], dt = {
567
+ }, ut = { class: "tpl-header-center tpl:flex tpl:items-center tpl:justify-center tpl:gap-10" }, dt = { class: "tpl-header-right tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3" }, ft = ["data-tooltip"], pt = {
563
568
  key: 1,
564
569
  "aria-live": "polite",
565
570
  class: "tpl-status tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:text-[var(--tpl-success)]"
566
- }, ft = {
571
+ }, mt = {
567
572
  key: 2,
568
573
  "aria-live": "polite",
569
574
  class: "tpl-status tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:text-[var(--tpl-text-muted)]"
570
- }, pt = ["aria-label", "aria-expanded"], mt = {
575
+ }, ht = ["aria-label", "aria-expanded"], gt = {
571
576
  key: 0,
572
577
  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)]"
573
- }, ht = ["aria-expanded"], gt = {
578
+ }, _t = ["aria-expanded"], vt = {
574
579
  key: 0,
575
580
  class: "tpl:absolute tpl:right-0 tpl:top-full tpl:z-50 tpl:mt-1 tpl:origin-top-right"
576
- }, _t = ["disabled"], vt = ["disabled"], yt = /* @__PURE__ */ t({
581
+ }, yt = ["disabled"], bt = ["disabled"], xt = /* @__PURE__ */ t({
577
582
  __name: "CloudHeader",
578
583
  props: {
579
584
  editor: {},
580
- core: {},
585
+ onBeforeHistoryUndo: { type: Function },
581
586
  featureFlags: {},
582
587
  panelState: {},
583
588
  snapshotPreview: {},
@@ -591,14 +596,15 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
591
596
  },
592
597
  emits: ["save"],
593
598
  setup(t) {
594
- let n = s(() => import("./CollaboratorBar-Bw-lbt61.js")), i = s(() => import("./SnapshotHistory-Do-A5rYU.js")), o = s(() => import("./AiFeatureMenu-duUFSfDf.js")), { t: l, format: u } = X();
595
- return (s, d) => (a(), E("header", at, [
596
- v("div", ot, [t.featureFlags.templateLimit.value === null ? f("", !0) : (a(), E("span", st, r(w(u)(w(l).header.templatesUsed, {
599
+ let n = s(() => import("./CollaboratorBar-NaaZTjbs.js")), i = s(() => import("./SnapshotHistory-Csg1_jXi.js")), o = s(() => import("./AiFeatureMenu-BipxcGap.js")), { t: l, format: u } = X();
600
+ return (s, d) => (a(), E("header", st, [
601
+ v("div", ct, [t.featureFlags.templateLimit.value === null ? f("", !0) : (a(), E("span", lt, r(w(u)(w(l).header.templatesUsed, {
597
602
  used: t.featureFlags.templateCount.value,
598
603
  max: t.featureFlags.templateLimit.value
599
604
  })), 1))]),
600
- v("div", ct, [
601
- D(W, {
605
+ v("div", ut, [
606
+ D(U, { "on-before-undo": t.onBeforeHistoryUndo }, null, 8, ["on-before-undo"]),
607
+ D(be, {
602
608
  viewport: t.editor.state.viewport,
603
609
  onChange: t.editor.setViewport
604
610
  }, null, 8, ["viewport", "onChange"]),
@@ -606,7 +612,7 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
606
612
  "dark-mode": t.editor.state.darkMode,
607
613
  onChange: t.editor.setDarkMode
608
614
  }, null, 8, ["dark-mode", "onChange"]),
609
- D(U, {
615
+ D(G, {
610
616
  "preview-mode": t.editor.state.previewMode,
611
617
  onChange: t.editor.setPreviewMode
612
618
  }, null, 8, ["preview-mode", "onChange"]),
@@ -630,19 +636,19 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
630
636
  "onNavigate"
631
637
  ])) : f("", !0)
632
638
  ]),
633
- v("div", lt, [
639
+ v("div", dt, [
634
640
  t.featureFlags.saveStatus.value === "error" ? (a(), E("div", {
635
641
  key: 0,
636
642
  "aria-live": "assertive",
637
643
  class: "tpl-tooltip tpl-status tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:text-[var(--tpl-danger)]",
638
644
  "data-tooltip": t.featureFlags.saveErrorMessage.value
639
- }, [D(w(K), {
645
+ }, [D(w(q), {
640
646
  size: 12,
641
647
  "stroke-width": 2.5
642
- }), p(" " + r(w(l).header.saveFailed), 1)], 8, ut)) : t.featureFlags.saveStatus.value === "saved" ? (a(), E("div", dt, [D(w(G), {
648
+ }), p(" " + r(w(l).header.saveFailed), 1)], 8, ft)) : t.featureFlags.saveStatus.value === "saved" ? (a(), E("div", pt, [D(w(K), {
643
649
  size: 12,
644
650
  "stroke-width": 2.5
645
- }), p(" " + r(w(l).header.saved), 1)])) : t.editor.state.isDirty ? (a(), E("div", ft, [d[4] ||= v("span", { class: "tpl-pulse tpl:size-1.5 tpl:rounded-full tpl:bg-[var(--tpl-primary)]" }, null, -1), p(" " + r(w(l).header.unsaved), 1)])) : f("", !0),
651
+ }), p(" " + r(w(l).header.saved), 1)])) : t.editor.state.isDirty ? (a(), E("div", mt, [d[4] ||= v("span", { class: "tpl-pulse tpl:size-1.5 tpl:rounded-full tpl:bg-[var(--tpl-primary)]" }, null, -1), p(" " + r(w(l).header.unsaved), 1)])) : f("", !0),
646
652
  t.commentsInstance.isEnabled.value && t.featureFlags.hasTemplateSaved.value ? (a(), E("button", {
647
653
  key: 3,
648
654
  "aria-label": t.commentsInstance.unresolvedCount.value > 0 ? `${w(l).comments.button} (${t.commentsInstance.unresolvedCount.value})` : w(l).comments.button,
@@ -655,13 +661,13 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
655
661
  }),
656
662
  onClick: d[0] ||= (e) => t.panelState.commentsOpen.value = !t.panelState.commentsOpen.value
657
663
  }, [
658
- D(w(q), {
664
+ D(w(J), {
659
665
  size: 16,
660
666
  "stroke-width": 2
661
667
  }),
662
668
  p(" " + r(w(l).comments.button) + " ", 1),
663
- t.commentsInstance.unresolvedCount.value > 0 && !t.panelState.commentsOpen.value ? (a(), E("span", mt, r(t.commentsInstance.unresolvedCount.value), 1)) : f("", !0)
664
- ], 14, pt)) : f("", !0),
669
+ t.commentsInstance.unresolvedCount.value > 0 && !t.panelState.commentsOpen.value ? (a(), E("span", gt, r(t.commentsInstance.unresolvedCount.value), 1)) : f("", !0)
670
+ ], 14, ht)) : f("", !0),
665
671
  t.featureFlags.canUseAiGeneration.value && t.featureFlags.hasTemplateSaved.value ? (a(), E("div", {
666
672
  key: 4,
667
673
  ref: (e) => t.panelState.aiMenuRef.value = e,
@@ -670,11 +676,11 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
670
676
  "aria-expanded": t.panelState.aiMenuOpen.value,
671
677
  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", t.panelState.aiButtonActive.value ? "tpl-ai-btn--active" : "tpl-ai-btn--idle"]),
672
678
  onClick: d[1] ||= m((...e) => t.panelState.toggleAiMenu && t.panelState.toggleAiMenu(...e), ["stop"])
673
- }, [D(w(Se), {
679
+ }, [D(w(Ce), {
674
680
  size: 16,
675
681
  "stroke-width": 2,
676
682
  class: "tpl-ai-btn-icon"
677
- }), p(" " + r(w(l).aiChat.button), 1)], 10, ht), D(T, {
683
+ }), p(" " + r(w(l).aiChat.button), 1)], 10, _t), D(T, {
678
684
  "enter-active-class": "tpl:transition-all tpl:duration-150 tpl:ease-out",
679
685
  "enter-from-class": "tpl:scale-95 tpl:opacity-0",
680
686
  "enter-to-class": "tpl:scale-100 tpl:opacity-100",
@@ -682,7 +688,7 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
682
688
  "leave-from-class": "tpl:scale-100 tpl:opacity-100",
683
689
  "leave-to-class": "tpl:scale-95 tpl:opacity-0"
684
690
  }, {
685
- default: c(() => [t.panelState.aiMenuOpen.value ? (a(), E("div", gt, [D(w(o), {
691
+ default: c(() => [t.panelState.aiMenuOpen.value ? (a(), E("div", vt, [D(w(o), {
686
692
  "active-feature": t.panelState.activeAiFeature.value,
687
693
  onSelect: t.panelState.handleAiFeatureSelect
688
694
  }, null, 8, ["active-feature", "onSelect"])])) : f("", !0)]),
@@ -698,16 +704,16 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
698
704
  },
699
705
  disabled: t.testEmail.isSending.value || !t.featureFlags.hasTemplateSaved.value,
700
706
  onClick: d[2] ||= (e) => t.panelState.testEmailModalOpen.value = !0
701
- }, [t.testEmail.isSending.value ? (a(), _(w(xe), {
707
+ }, [t.testEmail.isSending.value ? (a(), _(w(Se), {
702
708
  key: 1,
703
709
  class: "tpl-spinner",
704
710
  size: 16,
705
711
  "stroke-width": 2
706
- })) : (a(), _(w(J), {
712
+ })) : (a(), _(w(Y), {
707
713
  key: 0,
708
714
  size: 16,
709
715
  "stroke-width": 2
710
- })), p(" " + r(w(l).testEmail.button), 1)], 10, _t)) : f("", !0),
716
+ })), p(" " + r(w(l).testEmail.button), 1)], 10, yt)) : f("", !0),
711
717
  v("button", {
712
718
  class: e(w(Z)),
713
719
  style: {
@@ -717,20 +723,20 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
717
723
  },
718
724
  disabled: t.isSaveDisabled,
719
725
  onClick: d[3] ||= (e) => s.$emit("save")
720
- }, [t.isSaving ? (a(), _(w(xe), {
726
+ }, [t.isSaving ? (a(), _(w(Se), {
721
727
  key: 1,
722
728
  class: "tpl-spinner",
723
729
  size: 16,
724
730
  "stroke-width": 2
725
- })) : (a(), _(w(ze), {
731
+ })) : (a(), _(w(Ve), {
726
732
  key: 0,
727
733
  size: 16,
728
734
  "stroke-width": 2
729
- })), p(" " + r(t.isSaving ? w(l).header.saving : w(l).header.save), 1)], 10, vt)
735
+ })), p(" " + r(t.isSaving ? w(l).header.saving : w(l).header.save), 1)], 10, bt)
730
736
  ])
731
737
  ]));
732
738
  }
733
- }), bt = /* @__PURE__ */ t({
739
+ }), St = /* @__PURE__ */ t({
734
740
  __name: "CloudPanels",
735
741
  props: {
736
742
  config: {},
@@ -753,21 +759,25 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
753
759
  "module-insert"
754
760
  ],
755
761
  setup(e, { expose: t, emit: n }) {
756
- let r = s(() => import("./AiChatSidebar-DWGPVtvC.js")), i = s(() => import("./CommentsSidebar-BaD5F53-.js")), o = s(() => import("./DesignReferenceSidebar-BSH7uNP_.js")), c = s(() => import("./TemplateScoringPanel-CS7o62zS.js")), l = s(() => import("./TestEmailModal-DGj_9V1u.js")), u = s(() => import("./SaveModuleDialog-zMQTpez7.js")), d = s(() => import("./ModuleBrowserModal-6phxZSKI.js")), p = s(async () => (await import("@aswin.dev/media-library")).MediaLibraryModal), m = n;
757
- function v(e, t, n) {
762
+ let r = s(() => import("./AiChatSidebar-Dt5pvG5t.js")), i = s(() => import("./CommentsSidebar-DE6ZsM4D.js")), o = s(() => import("./DesignReferenceSidebar-CZg97bbj.js")), c = s(() => import("./TemplateScoringPanel-CS7o62zS.js")), l = s(() => import("./TestEmailModal-m3okLbJz.js")), u = s(() => import("./SaveModuleDialog-DLZa3m3O.js")), d = s(() => import("./ModuleBrowserModal-D2EVdexc.js")), p = s(async () => (await import("@aswin.dev/media-library")).MediaLibraryModal), m = e;
763
+ function v(e) {
764
+ e === void 0 || !m.editor.content.value.settings.popup || m.editor.updateSettings({ width: e });
765
+ }
766
+ let y = n;
767
+ function b(e, t, n) {
758
768
  t.history.record(), n.setContent(e), t.conditionPreview.reset();
759
769
  }
760
- function y(e, t) {
761
- m("module-insert", e, t);
770
+ function x(e, t) {
771
+ y("module-insert", e, t);
762
772
  }
763
- let b = h(null);
764
- function x(e) {
765
- b.value?.filterByBlock(e);
773
+ let S = h(null);
774
+ function C(e) {
775
+ S.value?.filterByBlock(e);
766
776
  }
767
- return t({ filterCommentsByBlock: x }), (t, n) => (a(), E(g, null, [
777
+ return t({ filterCommentsByBlock: C }), (t, n) => (a(), E(g, null, [
768
778
  D(w(r), {
769
779
  visible: e.panelState.aiChatOpen.value,
770
- "on-apply": (t) => v(t, e.core, e.editor),
780
+ "on-apply": (t) => b(t, e.core, e.editor),
771
781
  onClose: n[0] ||= (t) => e.panelState.aiChatOpen.value = !1
772
782
  }, null, 8, ["visible", "on-apply"]),
773
783
  D(w(c), {
@@ -778,11 +788,11 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
778
788
  visible: e.panelState.designReferenceOpen.value,
779
789
  "has-existing-blocks": e.editor.content.value.blocks.length > 0,
780
790
  onClose: n[2] ||= (t) => e.panelState.designReferenceOpen.value = !1,
781
- onApply: n[3] ||= (t) => v(t, e.core, e.editor)
791
+ onApply: n[3] ||= (t) => b(t, e.core, e.editor)
782
792
  }, null, 8, ["visible", "has-existing-blocks"]),
783
793
  D(w(i), {
784
794
  ref_key: "commentsSidebar",
785
- ref: b,
795
+ ref: S,
786
796
  visible: e.panelState.commentsOpen.value,
787
797
  onClose: n[4] ||= (t) => e.panelState.commentsOpen.value = !1
788
798
  }, null, 8, ["visible"]),
@@ -791,7 +801,7 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
791
801
  "allowed-emails": e.testEmail.allowedEmails.value,
792
802
  "is-sending": e.testEmail.isSending.value,
793
803
  error: e.testEmail.error.value,
794
- onSend: n[5] ||= (e) => m("send-test-email", e),
804
+ onSend: n[5] ||= (e) => y("send-test-email", e),
795
805
  onClose: n[6] ||= (t) => e.panelState.testEmailModalOpen.value = !1
796
806
  }, null, 8, [
797
807
  "visible",
@@ -804,20 +814,21 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
804
814
  visible: e.showSaveModuleDialog,
805
815
  "pre-selected-block-id": e.saveModulePreSelectedBlockId,
806
816
  onClose: n[7] ||= (e) => {
807
- m("update:showSaveModuleDialog", !1), m("update:saveModulePreSelectedBlockId", null);
817
+ y("update:showSaveModuleDialog", !1), y("update:saveModulePreSelectedBlockId", null);
808
818
  },
809
819
  onSaved: n[8] ||= (t) => e.savedModulesHeadless.loadModules()
810
820
  }, null, 8, ["visible", "pre-selected-block-id"])) : f("", !0),
811
821
  e.planConfigInstance.hasFeature("saved_modules") && e.config.modules !== !1 ? (a(), _(w(d), {
812
822
  key: 1,
813
823
  visible: e.showModuleBrowserModal,
814
- onClose: n[9] ||= (e) => m("update:showModuleBrowserModal", !1),
815
- onInsert: y
824
+ onClose: n[9] ||= (e) => y("update:showModuleBrowserModal", !1),
825
+ onInsert: x
816
826
  }, null, 8, ["visible"])) : f("", !0),
817
827
  D(w(p), {
818
828
  visible: e.panelState.mediaLibraryOpen.value,
819
829
  accept: e.panelState.mediaLibraryAccept.value,
820
830
  onSelect: e.mediaLib.handleMediaSelect,
831
+ onTemplateWidthPreview: v,
821
832
  onClose: e.mediaLib.handleMediaLibraryClose
822
833
  }, null, 8, [
823
834
  "visible",
@@ -827,23 +838,23 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
827
838
  ])
828
839
  ], 64));
829
840
  }
830
- }), xt = {
841
+ }), Ct = {
831
842
  key: 0,
832
843
  class: "tpl-loading tpl:absolute tpl:inset-0 tpl:z-overlay tpl:flex tpl:flex-col tpl:bg-[var(--tpl-bg)]"
833
- }, St = { class: "tpl:flex tpl:flex-1 tpl:overflow-hidden" }, Ct = { 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)]" }, wt = /* @__PURE__ */ t({
844
+ }, wt = { class: "tpl:flex tpl:flex-1 tpl:overflow-hidden" }, Tt = { 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)]" }, Et = /* @__PURE__ */ t({
834
845
  __name: "CloudLoadingOverlay",
835
846
  props: { visible: { type: Boolean } },
836
847
  setup(e) {
837
- return (t, r) => e.visible ? (a(), E("div", xt, [r[1] ||= O("<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), v("div", St, [v("div", Ct, [(a(), E(g, null, n(5, (e) => v("div", {
848
+ return (t, r) => e.visible ? (a(), E("div", Ct, [r[1] ||= O("<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), v("div", wt, [v("div", Tt, [(a(), E(g, null, n(5, (e) => v("div", {
838
849
  key: e,
839
850
  class: "tpl-shimmer tpl:size-7 tpl:rounded-[var(--tpl-radius-sm)]"
840
851
  })), 64))]), r[0] ||= O("<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)])])) : f("", !0);
841
852
  }
842
- }), Tt = {
853
+ }), Dt = {
843
854
  key: 0,
844
855
  role: "alert",
845
856
  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)]"
846
- }, Et = { class: "tpl:flex tpl:size-16 tpl:items-center tpl:justify-center tpl:rounded-full tpl:bg-[var(--tpl-danger-light)]" }, Dt = { class: "tpl:flex tpl:flex-col tpl:items-center tpl:gap-2 tpl:text-center" }, Ot = { class: "tpl:text-lg tpl:font-semibold tpl:text-[var(--tpl-text)]" }, kt = { class: "tpl:max-w-md tpl:text-sm tpl:text-[var(--tpl-text-muted)]" }, At = /* @__PURE__ */ t({
857
+ }, Ot = { class: "tpl:flex tpl:size-16 tpl:items-center tpl:justify-center tpl:rounded-full tpl:bg-[var(--tpl-danger-light)]" }, kt = { class: "tpl:flex tpl:flex-col tpl:items-center tpl:gap-2 tpl:text-center" }, At = { class: "tpl:text-lg tpl:font-semibold tpl:text-[var(--tpl-text)]" }, jt = { class: "tpl:max-w-md tpl:text-sm tpl:text-[var(--tpl-text-muted)]" }, Mt = /* @__PURE__ */ t({
847
858
  __name: "CloudErrorOverlay",
848
859
  props: {
849
860
  error: {},
@@ -858,13 +869,13 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
858
869
  function s(e) {
859
870
  return "isNotFound" in e && !!e.isNotFound;
860
871
  }
861
- return (t, c) => e.visible && e.error ? (a(), E("div", Tt, [
862
- v("div", Et, [D(w(K), {
872
+ return (t, c) => e.visible && e.error ? (a(), E("div", Dt, [
873
+ v("div", Ot, [D(w(q), {
863
874
  size: 32,
864
875
  "stroke-width": 1.5,
865
876
  class: "tpl:text-[var(--tpl-danger)]"
866
877
  })]),
867
- v("div", Dt, [v("h2", Ot, r(w(i).error.title), 1), v("p", kt, r(o(e.error)), 1)]),
878
+ v("div", kt, [v("h2", At, r(w(i).error.title), 1), v("p", jt, r(o(e.error)), 1)]),
868
879
  s(e.error) ? f("", !0) : (a(), E("button", {
869
880
  key: 0,
870
881
  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)]",
@@ -872,20 +883,20 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
872
883
  }, r(w(i).error.retry), 1))
873
884
  ])) : f("", !0);
874
885
  }
875
- }), jt = {
886
+ }), Nt = {
876
887
  key: 0,
877
888
  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)]"
878
- }, Mt = { class: "tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:text-[var(--tpl-text)]" }, Nt = { class: "tpl:flex tpl:items-center tpl:gap-2" }, Pt = /* @__PURE__ */ t({
889
+ }, Pt = { class: "tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:text-[var(--tpl-text)]" }, Ft = { class: "tpl:flex tpl:items-center tpl:gap-2" }, It = /* @__PURE__ */ t({
879
890
  __name: "SnapshotPreviewBanner",
880
891
  props: { visible: { type: Boolean } },
881
892
  emits: ["cancel", "confirm"],
882
893
  setup(e, { emit: t }) {
883
894
  let n = t, { t: i } = X();
884
- return (t, o) => e.visible ? (a(), E("div", jt, [v("div", Mt, [D(w(be), {
895
+ return (t, o) => e.visible ? (a(), E("div", Nt, [v("div", Pt, [D(w(xe), {
885
896
  size: 18,
886
897
  "stroke-width": 2,
887
898
  class: "tpl:text-[var(--tpl-primary)]"
888
- }), v("span", null, r(w(i).snapshotPreview.message), 1)]), v("div", Nt, [v("button", {
899
+ }), v("span", null, r(w(i).snapshotPreview.message), 1)]), v("div", Ft, [v("button", {
889
900
  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)]",
890
901
  style: { "background-color": "transparent" },
891
902
  onClick: o[0] ||= (e) => n("cancel")
@@ -894,7 +905,7 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
894
905
  onClick: o[1] ||= (e) => n("confirm")
895
906
  }, r(w(i).snapshotPreview.restore), 1)])])) : f("", !0);
896
907
  }
897
- }), Ft = {
908
+ }), Lt = {
898
909
  key: 0,
899
910
  role: "status",
900
911
  "aria-live": "polite",
@@ -904,14 +915,17 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
904
915
  color: "var(--tpl-text)",
905
916
  border: "1px solid var(--tpl-warning)"
906
917
  }
907
- }, It = /* @__PURE__ */ t({
918
+ }, Rt = /* @__PURE__ */ t({
908
919
  __name: "CollabUndoToast",
909
920
  props: { visible: { type: Boolean } },
910
921
  setup(e) {
911
- let { t } = V();
912
- return (n, i) => e.visible ? (a(), E("div", Ft, r(w(t).history.collabWarning), 1)) : f("", !0);
922
+ let { t } = B();
923
+ return (n, i) => e.visible ? (a(), E("div", Lt, r(w(t).history.collabWarning), 1)) : f("", !0);
913
924
  }
914
- }), Lt = ["data-tpl-theme"], Rt = { class: "tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0" }, zt = { class: "tpl-main tpl:flex tpl:justify-center tpl:p-8" }, Bt = ["aria-label"], Vt = /* @__PURE__ */ Ce(/* @__PURE__ */ t({
925
+ }), zt = ["data-tpl-theme"], Bt = { class: "tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0" }, Vt = {
926
+ key: 0,
927
+ class: "tpl-popup-browser-frame tpl:flex tpl:w-full tpl:flex-col tpl:overflow-hidden tpl:rounded-xl tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:shadow-[var(--tpl-shadow-xl)]"
928
+ }, Ht = ["aria-label"], Ut = /* @__PURE__ */ Te(/* @__PURE__ */ t({
915
929
  __name: "CloudEditor",
916
930
  props: {
917
931
  config: {},
@@ -923,77 +937,83 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
923
937
  setup(t, { expose: n, emit: s }) {
924
938
  let d = t;
925
939
  o(ae, d.cloudTranslations);
926
- let m = s, C = h(null), O = h(null), k = Ge({
940
+ let m = s, C = h(null), k = h(null), A = qe({
927
941
  config: d.config,
928
942
  translations: d.translations,
929
943
  fontsManager: d.fontsManager,
930
944
  emit: m,
931
945
  getCommentsSidebar: () => C.value ? { filterByBlock: C.value.filterCommentsByBlock } : null
932
- }), { isInitializing: A, isAuthReady: te, initError: ne, planConfigInstance: P, websocket: F, collaboration: I, isCollaborationEnabled: re, editor: L, core: R, featureFlags: z, mediaLib: ie, exporter: oe, testEmail: B, commentsInstance: V, savedModulesHeadless: ce, panelState: H, snapshotPreview: U, collabWarning: me, showSaveModuleDialog: W, showModuleBrowserModal: G, saveModulePreSelectedBlockId: K, setThemeOverrides: be, setUiTheme: xe } = k, q = h("blocks");
933
- o(se, q);
934
- let J = S(() => N(d.config.editorType) === "popup"), Se = S(() => J.value && q.value === "displayRules"), Y = S(() => J.value && q.value === "schedule"), Ce = S(() => q.value === "design"), X = S(() => J.value && (Se.value || Y.value || Ce.value)), Z = S(() => Se.value || Y.value);
935
- l(() => [te.value, L.content.value.settings.popup], ([e]) => {
936
- if (!e || !J.value || L.content.value.settings.popup) return;
937
- let t = j();
946
+ }), { isInitializing: M, isAuthReady: ne, initError: re, planConfigInstance: P, websocket: F, collaboration: I, isCollaborationEnabled: ie, editor: L, core: R, featureFlags: z, mediaLib: oe, exporter: se, testEmail: B, commentsInstance: V, savedModulesHeadless: H, panelState: U, snapshotPreview: W, collabWarning: G, showSaveModuleDialog: be, showModuleBrowserModal: K, saveModulePreSelectedBlockId: q, setThemeOverrides: xe, setUiTheme: Se } = A, J = h("blocks");
947
+ o(ce, J);
948
+ let Y = S(() => N(d.config.editorType) === "popup"), Ce = S(() => Y.value && J.value === "displayRules"), we = S(() => Y.value && J.value === "schedule"), Te = S(() => J.value === "design"), X = S(() => Y.value && (Ce.value || we.value || Te.value)), Z = S(() => Ce.value || we.value);
949
+ l(() => [ne.value, L.content.value.settings.popup], ([e]) => {
950
+ if (!e || !Y.value || L.content.value.settings.popup) return;
951
+ let t = ee();
938
952
  L.updateSettings({
939
953
  popup: t,
940
- width: M[t.design.sizePreset]
954
+ width: j[t.design.sizePreset]
941
955
  });
942
956
  }, { immediate: !0 });
943
- async function we(e) {
957
+ async function Ee(e) {
944
958
  try {
945
- await B.sendTestEmail(e), H.testEmailModalOpen.value = !1;
959
+ await B.sendTestEmail(e), U.testEmailModalOpen.value = !1;
946
960
  } catch {}
947
961
  }
948
- function Te(e, t) {
962
+ function De(e, t) {
949
963
  for (let n = 0; n < e.content.length; n++) {
950
- let r = ee(e.content[n]), i = t === void 0 ? void 0 : t + n;
964
+ let r = te(e.content[n]), i = t === void 0 ? void 0 : t + n;
951
965
  L.addBlock(r, void 0, void 0, i);
952
966
  }
953
- G.value = !1;
967
+ K.value = !1;
954
968
  }
955
- let Q = qe({
969
+ let Q = Ye({
956
970
  config: d.config,
957
971
  editor: L,
958
972
  websocket: F,
959
973
  planConfigInstance: P,
960
- snapshotPreview: U,
974
+ snapshotPreview: W,
961
975
  core: R,
962
- exporter: oe,
976
+ exporter: se,
963
977
  featureFlags: z,
964
- isDestroyed: k.isDestroyed
965
- }), Ee = S(() => {
978
+ isDestroyed: A.isDestroyed
979
+ }), Oe = S(() => {
966
980
  if (L.state.previewMode) return ["tpl:left-0", "tpl:right-0"];
967
- let e = H.rightPanelOpen.value ? "tpl:right-[680px]" : "tpl:right-[320px]";
968
- if (!J.value) return ["tpl:left-12", e];
981
+ let e = U.rightPanelOpen.value ? "tpl:right-[680px]" : "tpl:right-[320px]";
982
+ if (!Y.value) return ["tpl:left-12", e];
969
983
  let t;
970
- t = q.value === "blocks" ? "tpl:left-[272px]" : Ce.value ? "tpl:left-[392px]" : "tpl:left-[72px]";
984
+ t = J.value === "blocks" ? "tpl:left-[272px]" : Te.value ? "tpl:left-[392px]" : "tpl:left-[72px]";
971
985
  let n = X.value ? "tpl:right-0" : e;
972
986
  return [t, n];
973
- }), $ = Je({
987
+ }), $ = Xe({
974
988
  issues: R.accessibilityLint ? R.accessibilityLint.issues : h([]),
975
989
  planConfig: P.config
976
990
  });
977
- async function De() {
991
+ async function ke() {
978
992
  await $.tryRunSave(() => Q.saveTemplate().catch((e) => d.config.onError?.(e)));
979
993
  }
980
- return k.onSaveHook.value = De, y(() => {
981
- k.initialize();
994
+ return A.onSaveHook.value = ke, y(() => {
995
+ A.initialize();
982
996
  }), i(() => {
983
- k.destroy();
997
+ A.destroy();
984
998
  }), n({
985
999
  getContent: () => L.content.value,
986
1000
  setContent: (e) => L.setContent(e),
987
- setTheme: xe,
988
- setThemeOverrides: be,
1001
+ setTheme: Se,
1002
+ setThemeOverrides: xe,
1003
+ undo: () => {
1004
+ G.showCollabUndoWarning(), R.history.undo();
1005
+ },
1006
+ redo: () => R.history.redo(),
1007
+ canUndo: () => R.history.canUndo.value,
1008
+ canRedo: () => R.history.canRedo.value,
989
1009
  create: Q.createTemplate,
990
1010
  load: Q.loadTemplate,
991
1011
  save: Q.saveTemplate,
992
1012
  sendTestEmail: B.sendTestEmail,
993
- startTour: (e) => O.value?.start(e),
994
- dismissTour: () => O.value?.dismiss(),
1013
+ startTour: (e) => k.value?.start(e),
1014
+ dismissTour: () => k.value?.dismiss(),
995
1015
  resetTourDismissed: () => pe(d.config.tour),
996
- isTourDismissed: () => d.config.tour ? le(d.config.tour) : !0
1016
+ isTourDismissed: () => d.config.tour ? ue(d.config.tour) : !0
997
1017
  }), (n, i) => (a(), E("div", {
998
1018
  class: e(["tpl tpl:relative tpl:h-full tpl:overflow-hidden", { "tpl:dark": w(L).state.darkMode }]),
999
1019
  "data-tpl-theme": w(R).resolvedTheme.value,
@@ -1007,7 +1027,7 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1007
1027
  "leave-from-class": "tpl:opacity-100",
1008
1028
  "leave-to-class": "tpl:opacity-0"
1009
1029
  }, {
1010
- default: c(() => [D(wt, { visible: w(A) || w(L).state.isLoading }, null, 8, ["visible"])]),
1030
+ default: c(() => [D(Et, { visible: w(M) || w(L).state.isLoading }, null, 8, ["visible"])]),
1011
1031
  _: 1
1012
1032
  }),
1013
1033
  D(T, {
@@ -1018,10 +1038,10 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1018
1038
  "leave-from-class": "tpl:opacity-100",
1019
1039
  "leave-to-class": "tpl:opacity-0"
1020
1040
  }, {
1021
- default: c(() => [D(At, {
1022
- error: w(ne),
1023
- visible: !!w(ne) && !w(A),
1024
- onRetry: w(k).initialize
1041
+ default: c(() => [D(Mt, {
1042
+ error: w(re),
1043
+ visible: !!w(re) && !w(M),
1044
+ onRetry: w(A).initialize
1025
1045
  }, null, 8, [
1026
1046
  "error",
1027
1047
  "visible",
@@ -1029,23 +1049,23 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1029
1049
  ])]),
1030
1050
  _: 1
1031
1051
  }),
1032
- D(yt, {
1052
+ D(xt, {
1033
1053
  editor: w(L),
1034
- core: w(R),
1054
+ "on-before-history-undo": w(G).showCollabUndoWarning,
1035
1055
  "feature-flags": w(z),
1036
- "panel-state": w(H),
1037
- "snapshot-preview": w(U),
1056
+ "panel-state": w(U),
1057
+ "snapshot-preview": w(W),
1038
1058
  "comments-instance": w(V),
1039
1059
  "test-email": w(B),
1040
1060
  websocket: w(F),
1041
1061
  collaboration: w(I),
1042
- "is-collaboration-enabled": w(re),
1062
+ "is-collaboration-enabled": w(ie),
1043
1063
  "is-saving": w(L).state.isSaving || w(z).isSaveExporting.value,
1044
1064
  "is-save-disabled": w(L).state.isSaving || w(z).isSaveExporting.value || !w(L).state.isDirty,
1045
- onSave: De
1065
+ onSave: ke
1046
1066
  }, null, 8, [
1047
1067
  "editor",
1048
- "core",
1068
+ "on-before-history-undo",
1049
1069
  "feature-flags",
1050
1070
  "panel-state",
1051
1071
  "snapshot-preview",
@@ -1057,7 +1077,7 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1057
1077
  "is-saving",
1058
1078
  "is-save-disabled"
1059
1079
  ]),
1060
- D(it, {
1080
+ D(ot, {
1061
1081
  open: w($).modalOpen.value,
1062
1082
  issues: w($).blockingIssues.value,
1063
1083
  onCancel: w($).cancel,
@@ -1068,10 +1088,10 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1068
1088
  "onCancel",
1069
1089
  "onConfirm"
1070
1090
  ]),
1071
- D(Pt, {
1072
- visible: w(U).isPreviewingSnapshot.value,
1073
- onCancel: w(U).cancelPreview,
1074
- onConfirm: w(U).confirmRestoreSnapshot
1091
+ D(It, {
1092
+ visible: w(W).isPreviewingSnapshot.value,
1093
+ onCancel: w(W).cancelPreview,
1094
+ onConfirm: w(W).confirmRestoreSnapshot
1075
1095
  }, null, 8, [
1076
1096
  "visible",
1077
1097
  "onCancel",
@@ -1085,20 +1105,20 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1085
1105
  "leave-from-class": "tpl:translate-y-0 tpl:opacity-100",
1086
1106
  "leave-to-class": "tpl:translate-y-[-8px] tpl:opacity-0"
1087
1107
  }, {
1088
- default: c(() => [D(It, { visible: w(me).collabUndoWarningVisible.value }, null, 8, ["visible"])]),
1108
+ default: c(() => [D(Rt, { visible: w(G).collabUndoWarningVisible.value }, null, 8, ["visible"])]),
1089
1109
  _: 1
1090
1110
  }),
1091
- u(D(de, null, null, 512), [[x, !w(L).state.previewMode]]),
1111
+ u(D(ge, null, null, 512), [[x, !w(L).state.previewMode]]),
1092
1112
  v("div", {
1093
- class: e(["tpl-body tpl:absolute tpl:bottom-0 tpl:overflow-auto", [...Ee.value, w(U).isPreviewingSnapshot.value ? "tpl:top-[104px]" : "tpl:top-14"]]),
1113
+ class: e(["tpl-body tpl:absolute tpl:bottom-0 tpl:overflow-auto", [...Oe.value, w(W).isPreviewingSnapshot.value ? "tpl:top-[104px]" : "tpl:top-14"]]),
1094
1114
  style: b({
1095
1115
  transition: "all 300ms cubic-bezier(0.34, 1.56, 0.64, 1)",
1096
1116
  backgroundColor: Z.value ? "var(--tpl-bg)" : "var(--tpl-canvas-bg)"
1097
1117
  })
1098
- }, [J.value && q.value === "displayRules" ? (a(), _(he, { key: 0 })) : J.value && q.value === "schedule" ? (a(), _(ye, {
1118
+ }, [Y.value && J.value === "displayRules" ? (a(), _(he, { key: 0 })) : Y.value && J.value === "schedule" ? (a(), _(ye, {
1099
1119
  key: 1,
1100
1120
  layout: "standalone"
1101
- })) : (a(), E(g, { key: 2 }, [v("div", Rt, [D(T, { name: "tpl-restore-btn" }, {
1121
+ })) : (a(), E(g, { key: 2 }, [v("div", Bt, [D(T, { name: "tpl-restore-btn" }, {
1102
1122
  default: c(() => [w(R).conditionPreview.hasHiddenBlocks.value ? (a(), E("button", {
1103
1123
  key: 0,
1104
1124
  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",
@@ -1109,12 +1129,36 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1109
1129
  "backdrop-filter": "blur(8px)"
1110
1130
  },
1111
1131
  onClick: i[0] ||= (e) => w(R).conditionPreview.reset()
1112
- }, [D(w(fe), {
1132
+ }, [D(w(le), {
1113
1133
  size: 13,
1114
1134
  "stroke-width": 2
1115
1135
  }), p(" " + r(w(R).t.blockSettings.restoreHiddenBlocks), 1)])) : f("", !0)]),
1116
1136
  _: 1
1117
- })]), v("main", zt, [D(ge, {
1137
+ })]), v("main", { class: e(["tpl-main tpl:flex tpl:w-full tpl:flex-col", Y.value ? "tpl:gap-3 tpl:px-4 tpl:pt-4 tpl:pb-6" : "tpl:items-center tpl:gap-3 tpl:p-8"]) }, [D(me, {
1138
+ "preview-mode": w(L).state.previewMode,
1139
+ "multi-page-canvas": t.config.multiPageCanvas ?? !1
1140
+ }, null, 8, ["preview-mode", "multi-page-canvas"]), Y.value ? (a(), E("div", Vt, [i[11] ||= O("<div class=\"tpl-popup-browser-bar tpl:relative tpl:flex tpl:h-9 tpl:items-center tpl:gap-1.5 tpl:border-b tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-elevated)] tpl:px-3\" aria-hidden=\"true\" data-v-1d3e3f2d><span class=\"tpl:block tpl:size-3 tpl:rounded-full\" style=\"background-color:#ff5f57;\" data-v-1d3e3f2d></span><span class=\"tpl:block tpl:size-3 tpl:rounded-full\" style=\"background-color:#febc2e;\" data-v-1d3e3f2d></span><span class=\"tpl:block tpl:size-3 tpl:rounded-full\" style=\"background-color:#28c840;\" data-v-1d3e3f2d></span><div class=\"tpl:pointer-events-none tpl:absolute tpl:left-1/2 tpl:top-1/2 tpl:-translate-x-1/2 tpl:-translate-y-1/2 tpl:rounded-md tpl:bg-[var(--tpl-bg)] tpl:px-3 tpl:py-0.5 tpl:text-[11px] tpl:font-medium tpl:text-[var(--tpl-text-muted)] tpl:tracking-tight\" data-v-1d3e3f2d> yourstore.com </div></div>", 1), D(fe, {
1141
+ viewport: w(L).state.viewport,
1142
+ content: w(L).content.value,
1143
+ "selected-block-id": w(L).state.selectedBlockId,
1144
+ "dark-mode": w(L).state.darkMode,
1145
+ "preview-mode": w(L).state.previewMode,
1146
+ "multi-page-canvas": t.config.multiPageCanvas ?? !1,
1147
+ "locked-blocks": w(I)?.lockedBlocks.value ?? void 0,
1148
+ onSelectBlock: w(L).selectBlock,
1149
+ onOpenAiChat: i[1] ||= (e) => w(U).aiChatOpen.value = !0,
1150
+ onOpenDesignReference: i[2] ||= (e) => w(U).designReferenceOpen.value = !0
1151
+ }, null, 8, [
1152
+ "viewport",
1153
+ "content",
1154
+ "selected-block-id",
1155
+ "dark-mode",
1156
+ "preview-mode",
1157
+ "multi-page-canvas",
1158
+ "locked-blocks",
1159
+ "onSelectBlock"
1160
+ ])])) : (a(), _(fe, {
1161
+ key: 1,
1118
1162
  viewport: w(L).state.viewport,
1119
1163
  content: w(L).content.value,
1120
1164
  "selected-block-id": w(L).state.selectedBlockId,
@@ -1123,8 +1167,8 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1123
1167
  "multi-page-canvas": t.config.multiPageCanvas ?? !1,
1124
1168
  "locked-blocks": w(I)?.lockedBlocks.value ?? void 0,
1125
1169
  onSelectBlock: w(L).selectBlock,
1126
- onOpenAiChat: i[1] ||= (e) => w(H).aiChatOpen.value = !0,
1127
- onOpenDesignReference: i[2] ||= (e) => w(H).designReferenceOpen.value = !0
1170
+ onOpenAiChat: i[3] ||= (e) => w(U).aiChatOpen.value = !0,
1171
+ onOpenDesignReference: i[4] ||= (e) => w(U).designReferenceOpen.value = !0
1128
1172
  }, null, 8, [
1129
1173
  "viewport",
1130
1174
  "content",
@@ -1134,10 +1178,10 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1134
1178
  "multi-page-canvas",
1135
1179
  "locked-blocks",
1136
1180
  "onSelectBlock"
1137
- ])])], 64))], 6),
1181
+ ]))], 2)], 64))], 6),
1138
1182
  t.config.branding !== !1 && !w(z).isWhiteLabeled.value ? (a(), _(ve, {
1139
1183
  key: 0,
1140
- "position-class": Ee.value
1184
+ "position-class": Oe.value
1141
1185
  }, null, 8, ["position-class"])) : f("", !0),
1142
1186
  v("div", {
1143
1187
  class: "tpl-sr-only",
@@ -1145,14 +1189,14 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1145
1189
  "aria-live": "polite",
1146
1190
  "aria-atomic": "true",
1147
1191
  "aria-label": w(R).t.landmarks.reorderAnnouncements
1148
- }, r(w(R).keyboardReorder.announcement.value), 9, Bt),
1149
- u(D(ue, {
1192
+ }, r(w(R).keyboardReorder.announcement.value), 9, Ht),
1193
+ u(D(de, {
1150
1194
  "selected-block": w(L).selectedBlock.value,
1151
1195
  settings: w(L).content.value.settings,
1152
- "shifted-left": w(H).rightPanelOpen.value,
1153
- onUpdateBlock: i[3] ||= (e) => w(L).updateBlock(w(L).selectedBlock.value.id, e),
1154
- onDeleteBlock: i[4] ||= (e) => w(R).blockActions.deleteBlock(w(L).selectedBlock.value.id),
1155
- onDuplicateBlock: i[5] ||= (e) => w(R).blockActions.duplicateBlock(w(L).selectedBlock.value),
1196
+ "shifted-left": w(U).rightPanelOpen.value,
1197
+ onUpdateBlock: i[5] ||= (e) => w(L).updateBlock(w(L).selectedBlock.value.id, e),
1198
+ onDeleteBlock: i[6] ||= (e) => w(R).blockActions.deleteBlock(w(L).selectedBlock.value.id),
1199
+ onDuplicateBlock: i[7] ||= (e) => w(R).blockActions.duplicateBlock(w(L).selectedBlock.value),
1156
1200
  onUpdateSettings: w(L).updateSettings
1157
1201
  }, null, 8, [
1158
1202
  "selected-block",
@@ -1160,26 +1204,26 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1160
1204
  "shifted-left",
1161
1205
  "onUpdateSettings"
1162
1206
  ]), [[x, !w(L).state.previewMode && !X.value]]),
1163
- !w(A) && w(te) ? (a(), _(bt, {
1207
+ !w(M) && w(ne) ? (a(), _(St, {
1164
1208
  key: 1,
1165
1209
  ref_key: "cloudPanelsRef",
1166
1210
  ref: C,
1167
1211
  config: d.config,
1168
1212
  editor: w(L),
1169
1213
  core: w(R),
1170
- "panel-state": w(H),
1214
+ "panel-state": w(U),
1171
1215
  "plan-config-instance": w(P),
1172
1216
  "test-email": w(B),
1173
- "media-lib": w(ie),
1174
- "saved-modules-headless": w(ce),
1175
- "show-save-module-dialog": w(W),
1176
- "save-module-pre-selected-block-id": w(K),
1177
- "show-module-browser-modal": w(G),
1178
- "onUpdate:showSaveModuleDialog": i[6] ||= (e) => W.value = e,
1179
- "onUpdate:saveModulePreSelectedBlockId": i[7] ||= (e) => K.value = e,
1180
- "onUpdate:showModuleBrowserModal": i[8] ||= (e) => G.value = e,
1181
- onSendTestEmail: we,
1182
- onModuleInsert: Te
1217
+ "media-lib": w(oe),
1218
+ "saved-modules-headless": w(H),
1219
+ "show-save-module-dialog": w(be),
1220
+ "save-module-pre-selected-block-id": w(q),
1221
+ "show-module-browser-modal": w(K),
1222
+ "onUpdate:showSaveModuleDialog": i[8] ||= (e) => be.value = e,
1223
+ "onUpdate:saveModulePreSelectedBlockId": i[9] ||= (e) => q.value = e,
1224
+ "onUpdate:showModuleBrowserModal": i[10] ||= (e) => K.value = e,
1225
+ onSendTestEmail: Ee,
1226
+ onModuleInsert: De
1183
1227
  }, null, 8, [
1184
1228
  "config",
1185
1229
  "editor",
@@ -1196,12 +1240,12 @@ var Ye = ["aria-label"], Xe = { class: "tpl:flex tpl:max-h-[80vh] tpl:w-full tpl
1196
1240
  t.config.tour ? (a(), _(_e, {
1197
1241
  key: 2,
1198
1242
  ref_key: "editorTourRef",
1199
- ref: O,
1243
+ ref: k,
1200
1244
  "tour-config": t.config.tour,
1201
1245
  "dark-mode": w(L).state.darkMode
1202
1246
  }, null, 8, ["tour-config", "dark-mode"])) : f("", !0)
1203
- ], 14, Lt));
1247
+ ], 14, zt));
1204
1248
  }
1205
- }), [["__scopeId", "data-v-48b2d525"]]);
1249
+ }), [["__scopeId", "data-v-1d3e3f2d"]]);
1206
1250
  //#endregion
1207
- export { Vt as default };
1251
+ export { Ut as default };