@templatical/editor 0.20.0 → 0.21.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 (186) hide show
  1. package/README.md +1 -0
  2. package/dist/{AiChatSidebar-ChrE6pUq.js → AiChatSidebar-K_AehWc-.js} +9 -9
  3. package/dist/{AiFeatureMenu-DkQ9HhQ6.js → AiFeatureMenu-CPdNpHpZ.js} +6 -6
  4. package/dist/{BlockIssueBadge-B4QjePax.js → BlockIssueBadge-Dmj9rVra.js} +4 -4
  5. package/dist/{CloudEditor-CfX-aMiV.js → CloudEditor-3a7mqMhe.js} +263 -315
  6. package/dist/{CollaboratorBar-DTibhQ1j.js → CollaboratorBar-Ds0YZWzV.js} +3 -3
  7. package/dist/{ColorPicker-4vDYhdGe.js → ColorPicker-s9GHXjZs.js} +4 -4
  8. package/dist/CommentsSidebar-DvNEdugN.js +435 -0
  9. package/dist/{CountdownBlock-Bn5w7C-p.js → CountdownBlock-BUHYIAe9.js} +1 -1
  10. package/dist/{CountdownToolbar-D7yQqnA2.js → CountdownToolbar-DPRcv3Fu.js} +3 -4
  11. package/dist/{DesignReferenceSidebar-DnO6ZdwS.js → DesignReferenceSidebar-DNmK3dxp.js} +8 -8
  12. package/dist/{IssuesPanel-X_vkNGrs.js → IssuesPanel-CEnEGFtd.js} +7 -7
  13. package/dist/{MergeTagSuggestion-DCuaSOPQ.js → MergeTagSuggestion-DMe4rqn0.js} +2 -2
  14. package/dist/NumberWithSuffix-CCPN_oCh.js +121 -0
  15. package/dist/{ParagraphEditor-C5ixOIYb.js → ParagraphEditor-CkwBirNl.js} +47 -47
  16. package/dist/{RichTextEditorContent-DwhDnMsG.js → RichTextEditorContent-FbnWsh46.js} +6 -6
  17. package/dist/SaveBlockDialog-Cc5BSUBx.js +264 -0
  18. package/dist/SavedBlockPreviewCanvas-ubttfmKr.js +109 -0
  19. package/dist/SavedBlocksBrowserModal-LkY_U3lY.js +323 -0
  20. package/dist/SavedBlocksPanels-CET0zvH6.js +36 -0
  21. package/dist/SavedBlocksPickBar-poGS4PoI.js +52 -0
  22. package/dist/{SnapshotHistory-DaVueFv6.js → SnapshotHistory-BvF5IXn1.js} +8 -8
  23. package/dist/{TemplateScoringPanel-B0UHoTLx.js → TemplateScoringPanel-ifGGGWs5.js} +14 -14
  24. package/dist/{TestEmailModal-BkauxF7j.js → TestEmailModal-BRaM_eko.js} +4 -4
  25. package/dist/{TitleEditor-n6WDVDjW.js → TitleEditor-Bhgzh-iQ.js} +11 -11
  26. package/dist/{TplModal-BDDyvT-C.js → TplModal-BA-Zsg0O.js} +3 -3
  27. package/dist/{blockTypeIcons-4D0aFXNg.js → blockTypeIcons-B1-Yzp-a.js} +6 -6
  28. package/dist/bundle-stats.json +8 -8
  29. package/dist/{cdn/chunks/ca-DbWoy4rG.js → ca-BBgad6y5.js} +50 -5
  30. package/dist/cdn/chunks/{AiFeatureMenu-CIBHAGSz.js → AiFeatureMenu--PdArSnv.js} +7 -7
  31. package/dist/cdn/chunks/{AiFeatureMenu-CIBHAGSz.js.map → AiFeatureMenu--PdArSnv.js.map} +1 -1
  32. package/dist/cdn/chunks/{BlockIssueBadge-CxMiLo3p.js → BlockIssueBadge-DMSd0SIl.js} +5 -5
  33. package/dist/cdn/chunks/{BlockIssueBadge-CxMiLo3p.js.map → BlockIssueBadge-DMSd0SIl.js.map} +1 -1
  34. package/dist/cdn/chunks/{CloudEditor-CEa3Xgqh.js → CloudEditor-DnTfI5GU.js} +270 -322
  35. package/dist/cdn/chunks/CloudEditor-DnTfI5GU.js.map +1 -0
  36. package/dist/cdn/chunks/{CollaboratorBar-Bk1gD02G.js → CollaboratorBar-CBqd7ldq.js} +3 -3
  37. package/dist/cdn/chunks/{CollaboratorBar-Bk1gD02G.js.map → CollaboratorBar-CBqd7ldq.js.map} +1 -1
  38. package/dist/cdn/chunks/{ColorPicker-ll8pynws.js → ColorPicker-DCdWP8YB.js} +161 -161
  39. package/dist/cdn/chunks/{ColorPicker-ll8pynws.js.map → ColorPicker-DCdWP8YB.js.map} +1 -1
  40. package/dist/cdn/chunks/{CountdownBlock-eGUE7hhw.js → CountdownBlock-BDnWMAME.js} +4 -4
  41. package/dist/cdn/chunks/{CountdownBlock-eGUE7hhw.js.map → CountdownBlock-BDnWMAME.js.map} +1 -1
  42. package/dist/cdn/chunks/{CountdownToolbar-C1bkSjUR.js → CountdownToolbar-BbLoo22S.js} +4 -5
  43. package/dist/cdn/chunks/{CountdownToolbar-C1bkSjUR.js.map → CountdownToolbar-BbLoo22S.js.map} +1 -1
  44. package/dist/cdn/chunks/{IssuesPanel-Csasylf_.js → IssuesPanel-CfudrI3T.js} +7 -7
  45. package/dist/cdn/chunks/{IssuesPanel-Csasylf_.js.map → IssuesPanel-CfudrI3T.js.map} +1 -1
  46. package/dist/cdn/chunks/{MergeTagSuggestion-BmMmdcRg.js → MergeTagSuggestion-D7TsECll.js} +2 -2
  47. package/dist/cdn/chunks/{MergeTagSuggestion-BmMmdcRg.js.map → MergeTagSuggestion-D7TsECll.js.map} +1 -1
  48. package/dist/cdn/chunks/NumberWithSuffix-BmMx9_n_.js +123 -0
  49. package/dist/cdn/chunks/NumberWithSuffix-BmMx9_n_.js.map +1 -0
  50. package/dist/cdn/chunks/{ParagraphEditor-v0_XEL-v.js → ParagraphEditor-DPCUSXpx.js} +86 -86
  51. package/dist/cdn/chunks/{ParagraphEditor-v0_XEL-v.js.map → ParagraphEditor-DPCUSXpx.js.map} +1 -1
  52. package/dist/cdn/chunks/{RichTextEditorContent-NQExNsaV.js → RichTextEditorContent-B8dOiv_D.js} +5 -5
  53. package/dist/cdn/chunks/{RichTextEditorContent-NQExNsaV.js.map → RichTextEditorContent-B8dOiv_D.js.map} +1 -1
  54. package/dist/cdn/chunks/SaveBlockDialog-BY3SMnNV.js +259 -0
  55. package/dist/cdn/chunks/SaveBlockDialog-BY3SMnNV.js.map +1 -0
  56. package/dist/cdn/chunks/SavedBlockPreviewCanvas-LpaOcusq.js +110 -0
  57. package/dist/cdn/chunks/SavedBlockPreviewCanvas-LpaOcusq.js.map +1 -0
  58. package/dist/cdn/chunks/SavedBlocksBrowserModal-CfIcmyzF.js +318 -0
  59. package/dist/cdn/chunks/SavedBlocksBrowserModal-CfIcmyzF.js.map +1 -0
  60. package/dist/cdn/chunks/SavedBlocksPanels-kIowCfh_.js +38 -0
  61. package/dist/cdn/chunks/SavedBlocksPanels-kIowCfh_.js.map +1 -0
  62. package/dist/cdn/chunks/SavedBlocksPickBar-WSGe1GiZ.js +52 -0
  63. package/dist/cdn/chunks/SavedBlocksPickBar-WSGe1GiZ.js.map +1 -0
  64. package/dist/cdn/chunks/{TitleEditor-CS-_MzYs.js → TitleEditor-iwd-O9sO.js} +11 -11
  65. package/dist/cdn/chunks/{TitleEditor-CS-_MzYs.js.map → TitleEditor-iwd-O9sO.js.map} +1 -1
  66. package/dist/cdn/chunks/{blockTypeIcons-B0Hjh42a.js → blockTypeIcons-BYz0fgLz.js} +7 -7
  67. package/dist/cdn/chunks/{blockTypeIcons-B0Hjh42a.js.map → blockTypeIcons-BYz0fgLz.js.map} +1 -1
  68. package/dist/{ca-DbWoy4rG.js → cdn/chunks/ca-BBgad6y5.js} +52 -3
  69. package/dist/cdn/chunks/ca-BBgad6y5.js.map +1 -0
  70. package/dist/{de-CTYXVU9v.js → cdn/chunks/de-Bw6fB5JU.js} +2 -24
  71. package/dist/cdn/chunks/{de-CTYXVU9v.js.map → de-Bw6fB5JU.js.map} +1 -1
  72. package/dist/cdn/chunks/{de-CgGOnerg.js → de-D7WbpFBR.js} +50 -3
  73. package/dist/cdn/chunks/de-D7WbpFBR.js.map +1 -0
  74. package/dist/{en-DrUV9xth.js → cdn/chunks/en-BrZ0uGK2.js} +51 -2
  75. package/dist/cdn/chunks/en-BrZ0uGK2.js.map +1 -0
  76. package/dist/{en-BtmIaJeb.js → cdn/chunks/en-DAdHJz7h.js} +2 -24
  77. package/dist/cdn/chunks/{en-BtmIaJeb.js.map → en-DAdHJz7h.js.map} +1 -1
  78. package/dist/{es-DwbKjU7q.js → cdn/chunks/es-tLSLysPs.js} +51 -2
  79. package/dist/cdn/chunks/es-tLSLysPs.js.map +1 -0
  80. package/dist/cdn/chunks/{extensions-Di3hdIRT.js → extensions-DeJh3E9b.js} +26 -26
  81. package/dist/cdn/chunks/{extensions-Di3hdIRT.js.map → extensions-DeJh3E9b.js.map} +1 -1
  82. package/dist/cdn/chunks/{features-CLIZ7Q-Y.js → features-pLfGJWIB.js} +1118 -962
  83. package/dist/cdn/chunks/features-pLfGJWIB.js.map +1 -0
  84. package/dist/cdn/chunks/{icons-GX40Qm2W.js → icons-FLemooQz.js} +16 -16
  85. package/dist/cdn/chunks/{icons-GX40Qm2W.js.map → icons-FLemooQz.js.map} +1 -1
  86. package/dist/cdn/chunks/{media-library-yYAkAagU.js → media-library-mCCZieYO.js} +176 -176
  87. package/dist/cdn/chunks/{media-library-yYAkAagU.js.map → media-library-mCCZieYO.js.map} +1 -1
  88. package/dist/cdn/chunks/{pt-BR-Bcc5Tjed.js → pt-BR-BWFokdTU.js} +50 -3
  89. package/dist/cdn/chunks/pt-BR-BWFokdTU.js.map +1 -0
  90. package/dist/{pt-BR-B2ZvFlRL.js → cdn/chunks/pt-BR-w2sGzHNX.js} +2 -24
  91. package/dist/cdn/chunks/{pt-BR-B2ZvFlRL.js.map → pt-BR-w2sGzHNX.js.map} +1 -1
  92. package/dist/cdn/chunks/quality-BRbHtAk1.js +2180 -0
  93. package/dist/cdn/chunks/{quality-DffYv9j5.js.map → quality-BRbHtAk1.js.map} +1 -1
  94. package/dist/cdn/chunks/{renderer-DpBGiXOg.js → renderer-Yg1XhsBN.js} +17 -17
  95. package/dist/cdn/chunks/{renderer-DpBGiXOg.js.map → renderer-Yg1XhsBN.js.map} +1 -1
  96. package/dist/cdn/chunks/{src-9K6uFiuK.js → src-BDJeYiVE.js} +33 -33
  97. package/dist/cdn/chunks/{src-9K6uFiuK.js.map → src-BDJeYiVE.js.map} +1 -1
  98. package/dist/cdn/chunks/{styles-DHSmjlpX.js → styles-Bp5Jsu9J.js} +1380 -1294
  99. package/dist/cdn/chunks/styles-Bp5Jsu9J.js.map +1 -0
  100. package/dist/cdn/chunks/{tiptap-C2indasq.js → tiptap-BMZ-OENR.js} +2012 -1863
  101. package/dist/cdn/chunks/tiptap-BMZ-OENR.js.map +1 -0
  102. package/dist/cdn/editor.css +1 -1
  103. package/dist/cdn/editor.js +123 -114
  104. package/dist/cdn/editor.js.map +1 -1
  105. package/dist/{check-Bl4J_tYV.js → check-BpQDKiPz.js} +1 -1
  106. package/dist/{chevron-down-COEcl2iP.js → chevron-down-j8GrdTyz.js} +1 -1
  107. package/dist/chevron-up-BACyVhyC.js +7 -0
  108. package/dist/{circle-alert-CvHi5etc.js → circle-alert-CgtE46ND.js} +1 -1
  109. package/dist/{clock-CZZw62e8.js → clock-BzKLLW5L.js} +1 -1
  110. package/dist/{cloud-B-RebwxI.js → cloud-Du7mnkz2.js} +19 -47
  111. package/dist/{createLucideIcon-_peTZQtY.js → createLucideIcon-JWHwTI6N.js} +2 -2
  112. package/dist/{cdn/chunks/de-CTYXVU9v.js → de-Bw6fB5JU.js} +0 -26
  113. package/dist/{de-CgGOnerg.js → de-D7WbpFBR.js} +49 -2
  114. package/dist/{dist-CgTKuIUN.js → dist-BEpCh2mG.js} +1158 -1125
  115. package/dist/{dist-Cx7IUM7J.js → dist-BgPYC_8-.js} +14 -6
  116. package/dist/{dist-BKKo5wPC.js → dist-BkM8A17N.js} +2 -2
  117. package/dist/{dist-CcX5sLpz.js → dist-BuNDAAVp.js} +361 -256
  118. package/dist/{dist-COSN3oDJ.js → dist-CBzCU-a-.js} +2 -2
  119. package/dist/{dist-YSCPD13F.js → dist-CDO52Rxy.js} +2 -2
  120. package/dist/{dist-Dk5AdwoQ.js → dist-CrjzhIxB.js} +2 -2
  121. package/dist/{dist-DXAZUjj3.js → dist-CtcgoC_R.js} +2 -2
  122. package/dist/{dist-D6M5FAY7.js → dist-CuXha2_7.js} +2 -2
  123. package/dist/dist-CweLDZrs.js +5 -0
  124. package/dist/dist-DOsdqAEZ.js +5 -0
  125. package/dist/{dist-8TKf-Jpg.js → dist-DYClLqy8.js} +6 -3
  126. package/dist/{cdn/chunks/en-DrUV9xth.js → en-BrZ0uGK2.js} +49 -4
  127. package/dist/{cdn/chunks/en-BtmIaJeb.js → en-DAdHJz7h.js} +0 -26
  128. package/dist/{cdn/chunks/es-DwbKjU7q.js → es-tLSLysPs.js} +49 -4
  129. package/dist/{extensions-BCA9pyer.js → extensions-ClY5Sh7S.js} +5 -5
  130. package/dist/{image-up-D26rNdfX.js → image-up-CQdtq8ge.js} +1 -1
  131. package/dist/index.d.ts +81 -4
  132. package/dist/{info-CE3JSTqk.js → info-BUJBXoE6.js} +1 -1
  133. package/dist/{keys-DFaIbGR8.js → keys-CHPcp-Nz.js} +2 -2
  134. package/dist/{list-checks-BQsLrtBB.js → list-checks-BGHaCSD5.js} +1 -1
  135. package/dist/{loader-circle-s9Rh5lLd.js → loader-circle-C-Z6kgI6.js} +1 -1
  136. package/dist/{message-circle-CI62d690.js → message-circle-CEm5qckV.js} +1 -1
  137. package/dist/pencil-DdwmkKLb.js +10 -0
  138. package/dist/{pt-BR-Bcc5Tjed.js → pt-BR-BWFokdTU.js} +49 -2
  139. package/dist/{cdn/chunks/pt-BR-B2ZvFlRL.js → pt-BR-w2sGzHNX.js} +0 -26
  140. package/dist/{refresh-cw-DlYfl65Y.js → refresh-cw-maKlg0dl.js} +1 -1
  141. package/dist/{scan-line-CHadrYVb.js → scan-line-BFgesTOY.js} +1 -1
  142. package/dist/{send-CbP40otC.js → send-B70aQDrA.js} +1 -1
  143. package/dist/{shield-check-Bnj9aRoJ.js → shield-check-B7x5OKt5.js} +1 -1
  144. package/dist/{sparkles-CncWT57a.js → sparkles-DVlm1Ipp.js} +1 -1
  145. package/dist/style.css +1 -1
  146. package/dist/{styles-DkF_-uX8.js → styles-DIDAJdkj.js} +1237 -1151
  147. package/dist/templatical-editor.js +134 -125
  148. package/dist/{text-align-start-B458vzYw.js → text-align-start-Vay3Kvo2.js} +1 -1
  149. package/dist/{trash-2-DO0yjSU1.js → trash-2-DE8CmxAG.js} +1 -1
  150. package/dist/{triangle-alert-C18_ima6.js → triangle-alert-Djg6IG8N.js} +1 -1
  151. package/dist/{upload-DsCd2zTR.js → upload-BwwE0U6G.js} +1 -1
  152. package/dist/{useCloudI18n-PCDOC2kz.js → useCloudI18n-BmiygEM4.js} +1 -1
  153. package/dist/{useEditorCore-kKUemYY6.js → useEditorCore-Bd9CA4L_.js} +997 -817
  154. package/dist/{useI18n-BNMzZTM5.js → useI18n-D2L9Mkik.js} +1 -1
  155. package/dist/{useMergeTag-DfEY0eK5.js → useMergeTag-BTdDq5DC.js} +1 -1
  156. package/dist/{usePopoverPosition-F9STHRIr.js → usePopoverPosition-BO2LNy5n.js} +1 -1
  157. package/dist/{x-BCFQuE_q.js → x-CkD6A1iB.js} +1 -1
  158. package/package.json +21 -21
  159. package/dist/CommentsSidebar-D-o5Stlg.js +0 -442
  160. package/dist/ModuleBrowserModal-AJt--JPh.js +0 -202
  161. package/dist/ModulePreviewCanvas-BKYOcVCh.js +0 -106
  162. package/dist/NumberWithSuffix-Bf3rNxza.js +0 -89
  163. package/dist/SaveModuleDialog-B4QX9eiv.js +0 -125
  164. package/dist/ToggleSwitch-DUNuUPsZ.js +0 -37
  165. package/dist/cdn/chunks/CloudEditor-CEa3Xgqh.js.map +0 -1
  166. package/dist/cdn/chunks/ModuleBrowserModal-DznWWtBI.js +0 -198
  167. package/dist/cdn/chunks/ModuleBrowserModal-DznWWtBI.js.map +0 -1
  168. package/dist/cdn/chunks/ModulePreviewCanvas-D-h7fr87.js +0 -107
  169. package/dist/cdn/chunks/ModulePreviewCanvas-D-h7fr87.js.map +0 -1
  170. package/dist/cdn/chunks/NumberWithSuffix-Dt-0odUN.js +0 -91
  171. package/dist/cdn/chunks/NumberWithSuffix-Dt-0odUN.js.map +0 -1
  172. package/dist/cdn/chunks/SaveModuleDialog-BpFhTi-k.js +0 -120
  173. package/dist/cdn/chunks/SaveModuleDialog-BpFhTi-k.js.map +0 -1
  174. package/dist/cdn/chunks/ToggleSwitch-OrmX_w18.js +0 -39
  175. package/dist/cdn/chunks/ToggleSwitch-OrmX_w18.js.map +0 -1
  176. package/dist/cdn/chunks/ca-DbWoy4rG.js.map +0 -1
  177. package/dist/cdn/chunks/de-CgGOnerg.js.map +0 -1
  178. package/dist/cdn/chunks/en-DrUV9xth.js.map +0 -1
  179. package/dist/cdn/chunks/es-DwbKjU7q.js.map +0 -1
  180. package/dist/cdn/chunks/features-CLIZ7Q-Y.js.map +0 -1
  181. package/dist/cdn/chunks/pt-BR-Bcc5Tjed.js.map +0 -1
  182. package/dist/cdn/chunks/quality-DffYv9j5.js +0 -2180
  183. package/dist/cdn/chunks/styles-DHSmjlpX.js.map +0 -1
  184. package/dist/cdn/chunks/tiptap-C2indasq.js.map +0 -1
  185. package/dist/dist-BDVm2MrW.js +0 -5
  186. package/dist/dist-DbekZDmJ.js +0 -5
@@ -0,0 +1,109 @@
1
+ import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
+ import { A as t, Dt as n, M as r, N as i, O as a, _ as o, c as s, d as c, l, nt as u, r as d, s as f, x as p } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
3
+ import { a as m, b as h, d as g, f as _, g as v, h as y, i as b, l as x, m as S, n as C, p as w, r as T, v as E, y as D, z as O } from "./useEditorCore-Bd9CA4L_.js";
4
+ import { h as k, o as A } from "./keys-CHPcp-Nz.js";
5
+ //#region src/components/blocks/PreviewSectionBlock.vue?vue&type=script&setup=true&lang.ts
6
+ var j = { class: "tpl:w-full" }, M = { class: "tpl:flex tpl:gap-0" }, N = /* @__PURE__ */ o({
7
+ name: "PreviewSectionBlock",
8
+ __name: "PreviewSectionBlock",
9
+ props: {
10
+ block: {},
11
+ viewport: {}
12
+ },
13
+ setup(e) {
14
+ let o = {
15
+ title: x,
16
+ paragraph: S,
17
+ image: v,
18
+ video: C,
19
+ button: O,
20
+ divider: D,
21
+ social: m,
22
+ menu: y,
23
+ table: T,
24
+ spacer: b,
25
+ html: E,
26
+ custom: h
27
+ }, _ = e, k = p(A, null), N = f(() => {
28
+ switch (_.block.columns) {
29
+ case "2": return ["50%", "50%"];
30
+ case "3": return [
31
+ "33.33%",
32
+ "33.33%",
33
+ "33.33%"
34
+ ];
35
+ case "1-2": return ["33.33%", "66.67%"];
36
+ case "2-1": return ["66.67%", "33.33%"];
37
+ default: return ["100%"];
38
+ }
39
+ }), P = f(() => {
40
+ let e = N.value.length, t = [..._.block.children];
41
+ for (; t.length < e;) t.push([]);
42
+ return t.slice(0, e);
43
+ });
44
+ function F(e) {
45
+ return P.value[e] || [];
46
+ }
47
+ function I(e) {
48
+ return w(e, k, o);
49
+ }
50
+ return (e, o) => {
51
+ let f = r("PreviewSectionBlock", !0);
52
+ return a(), c("div", j, [s("div", M, [(a(!0), c(d, null, t(P.value, (e, r) => (a(), c("div", {
53
+ key: r,
54
+ style: n({ width: N.value[r] })
55
+ }, [(a(!0), c(d, null, t(F(r), (e) => (a(), c("div", {
56
+ key: e.id,
57
+ style: n(u(g)(e))
58
+ }, [e.type === "section" ? (a(), l(f, {
59
+ key: 0,
60
+ block: e,
61
+ viewport: "desktop"
62
+ }, null, 8, ["block"])) : (a(), l(i(I(e)), {
63
+ key: 1,
64
+ block: e,
65
+ viewport: "desktop"
66
+ }, null, 8, ["block"]))], 4))), 128))], 4))), 128))])]);
67
+ };
68
+ }
69
+ }), P = /*@__PURE__*/ o({
70
+ __name: "SavedBlockPreviewCanvas",
71
+ props: { blocks: {} },
72
+ setup(e) {
73
+ let r = p(A), o = p(k, null), s = f(() => o ? _(o.content.value.settings) : {}), j = {
74
+ section: N,
75
+ title: x,
76
+ paragraph: S,
77
+ image: v,
78
+ video: C,
79
+ button: O,
80
+ divider: D,
81
+ social: m,
82
+ menu: y,
83
+ table: T,
84
+ spacer: b,
85
+ html: E,
86
+ custom: h
87
+ };
88
+ function M(e) {
89
+ return w(e, r, j);
90
+ }
91
+ return (r, o) => (a(), c("div", {
92
+ "data-testid": "saved-blocks-preview-canvas",
93
+ class: "tpl:pointer-events-none tpl:mx-auto tpl:w-[600px] tpl:select-none tpl:rounded-lg",
94
+ style: n({
95
+ backgroundColor: "var(--tpl-canvas-bg)",
96
+ boxShadow: "var(--tpl-shadow-sm)",
97
+ ...s.value
98
+ })
99
+ }, [(a(!0), c(d, null, t(e.blocks, (e) => (a(), c("div", {
100
+ key: e.id,
101
+ style: n(u(g)(e))
102
+ }, [(a(), l(i(M(e)), {
103
+ block: e,
104
+ viewport: "desktop"
105
+ }, null, 8, ["block"]))], 4))), 128))], 4));
106
+ }
107
+ }), F = /* @__PURE__ */ e({ default: () => I }), I = P;
108
+ //#endregion
109
+ export { F as n, I as t };
@@ -0,0 +1,323 @@
1
+ import { A as e, Dt as t, Et as n, I as r, N as i, O as a, Ot as o, R as ee, Y as s, _ as c, c as l, d as u, g as te, h as d, l as f, nt as p, r as m, s as h, u as g, w as ne, z as _ } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
2
+ import { a as v, c as y, i as b, s as x } from "./runtime-dom.esm-bundler-GdMI8WqG.js";
3
+ import "./useEditorCore-Bd9CA4L_.js";
4
+ import { B as S, P as re, h as ie } from "./keys-CHPcp-Nz.js";
5
+ import { t as ae } from "./useI18n-D2L9Mkik.js";
6
+ import { n as oe, r as C, t as w } from "./blockTypeIcons-B1-Yzp-a.js";
7
+ import { t as se } from "./pencil-DdwmkKLb.js";
8
+ import { t as ce } from "./trash-2-DE8CmxAG.js";
9
+ import { t as le } from "./x-CkD6A1iB.js";
10
+ import { t as ue } from "./TplModal-BA-Zsg0O.js";
11
+ import { t as de } from "./formatRelativeTime-CtUU-QZ8.js";
12
+ //#region src/components/SavedBlocksBrowserModal.vue?vue&type=script&setup=true&lang.ts
13
+ var fe = {
14
+ role: "dialog",
15
+ "aria-modal": "true",
16
+ "data-testid": "saved-blocks-browser",
17
+ "aria-labelledby": "tpl-saved-blocks-browser-title",
18
+ class: "tpl-scale-in tpl:mx-4 tpl:flex tpl:w-[1000px] tpl:max-w-[calc(100vw_-_2*var(--tpl-base-size))] tpl:flex-col tpl:rounded-[var(--tpl-radius-lg)]",
19
+ style: {
20
+ "background-color": "var(--tpl-bg-elevated)",
21
+ "box-shadow": "var(--tpl-shadow-xl)",
22
+ "max-height": "90vh"
23
+ }
24
+ }, pe = { class: "tpl:flex tpl:items-center tpl:justify-between tpl:border-b tpl:px-5 tpl:py-4 tpl:border-[var(--tpl-border)]" }, me = {
25
+ id: "tpl-saved-blocks-browser-title",
26
+ class: "tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]"
27
+ }, he = ["aria-label"], ge = { class: "tpl:flex tpl:min-h-0 tpl:flex-1 tpl:overflow-hidden" }, _e = { class: "tpl:flex tpl:w-[300px] tpl:shrink-0 tpl:flex-col tpl:overflow-hidden" }, ve = { class: "tpl:flex tpl:flex-col tpl:gap-2 tpl:px-4 tpl:pt-4 tpl:pb-3" }, ye = { class: "tpl:relative" }, be = ["placeholder", "disabled"], xe = ["aria-label"], Se = { value: "" }, Ce = ["value"], we = { id: "tpl-saved-block-browser-categories" }, Te = ["value"], T = { class: "tpl:flex-1 tpl:overflow-y-auto tpl:px-4 tpl:pb-4" }, E = ["aria-label"], D = {
28
+ key: 1,
29
+ class: "tpl:flex tpl:flex-col tpl:gap-1"
30
+ }, O = ["onFocusout"], Ee = ["aria-label", "onKeydown"], De = [
31
+ "aria-label",
32
+ "placeholder",
33
+ "onKeydown"
34
+ ], Oe = ["aria-pressed", "onClick"], ke = { class: "tpl:flex tpl:items-center tpl:gap-2" }, Ae = { class: "tpl:flex-1 tpl:truncate tpl:text-xs tpl:font-semibold tpl:text-[var(--tpl-text)]" }, je = { class: "tpl:shrink-0 tpl:rounded-full tpl:px-1.5 tpl:py-0.5 tpl:text-[10px] tpl:font-medium tpl:bg-[var(--tpl-bg-hover)] tpl:text-[var(--tpl-text-muted)]" }, Me = {
35
+ key: 0,
36
+ class: "tpl:mt-1 tpl:flex tpl:items-center"
37
+ }, Ne = {
38
+ "data-testid": "saved-block-category",
39
+ class: "tpl:max-w-full tpl:truncate tpl:rounded tpl:px-1.5 tpl:py-0.5 tpl:text-[10px] tpl:font-medium tpl:bg-[var(--tpl-primary-light)] tpl:text-[var(--tpl-primary)]"
40
+ }, Pe = { class: "tpl:mt-1 tpl:flex tpl:items-center tpl:gap-1" }, Fe = {
41
+ key: 0,
42
+ class: "tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]"
43
+ }, Ie = ["title"], Le = ["aria-label", "onClick"], Re = [
44
+ "aria-label",
45
+ "title",
46
+ "onClick"
47
+ ], ze = [
48
+ "aria-label",
49
+ "title",
50
+ "onClick"
51
+ ], Be = {
52
+ key: 2,
53
+ class: "tpl:flex tpl:flex-col tpl:items-center tpl:justify-center tpl:py-12"
54
+ }, Ve = {
55
+ key: 0,
56
+ class: "tpl:mt-2 tpl:text-xs tpl:text-[var(--tpl-text-dim)]"
57
+ }, He = { class: "tpl:mt-2 tpl:text-xs tpl:text-[var(--tpl-text-dim)]" }, Ue = { class: "tpl:mt-1 tpl:max-w-[220px] tpl:text-center tpl:text-xs tpl:text-[var(--tpl-text-dim)]" }, We = { class: "tpl:flex tpl:flex-1 tpl:flex-col tpl:overflow-hidden tpl:border-l tpl:border-[var(--tpl-border)]" }, Ge = {
58
+ key: 0,
59
+ class: "tpl:flex tpl:flex-1 tpl:flex-col tpl:overflow-hidden"
60
+ }, Ke = { class: "tpl:flex-1 tpl:overflow-y-auto tpl:p-4" }, qe = {
61
+ key: 1,
62
+ class: "tpl:flex tpl:flex-1 tpl:flex-col tpl:items-center tpl:justify-center tpl:px-4"
63
+ }, Je = { class: "tpl:mt-2 tpl:text-center tpl:text-xs tpl:text-[var(--tpl-text-dim)]" }, Ye = { class: "tpl:flex tpl:items-center tpl:justify-between tpl:border-t tpl:px-5 tpl:py-3 tpl:border-[var(--tpl-border)]" }, Xe = { class: "tpl:flex tpl:items-center tpl:gap-2" }, Ze = { class: "tpl:shrink-0 tpl:text-xs tpl:text-[var(--tpl-text-dim)]" }, Qe = ["value"], k = { class: "tpl:flex tpl:gap-2" }, $e = ["disabled"], A = /* @__PURE__ */ c({
64
+ __name: "SavedBlocksBrowserModal",
65
+ props: { visible: { type: Boolean } },
66
+ emits: ["close", "insert"],
67
+ setup(c, { emit: A }) {
68
+ let et = c, j = A, tt = te(() => import("./SavedBlockPreviewCanvas-ubttfmKr.js").then((e) => e.n)), { t: M, format: N } = ae(), P = S(re, "SavedBlocksBrowserModal"), F = S(ie, "SavedBlocksBrowserModal"), I = s(""), L = s(""), R = s(null), z = s(null), B = s(null), V = s(""), H = s(""), U = s(null), W = s("end"), G = h(() => {
69
+ let e = I.value.trim().toLowerCase(), t = L.value;
70
+ return P.savedBlocks.value.filter((n) => !(e && !n.name.toLowerCase().includes(e) || t && n.category !== t));
71
+ }), K = h(() => P.isLoading.value && P.savedBlocks.value.length === 0), nt = h(() => I.value.trim().length > 0 || L.value !== ""), q = h(() => R.value ? P.savedBlocks.value.find((e) => e.id === R.value) ?? null : null), rt = h(() => {
72
+ let e = [{
73
+ value: "beginning",
74
+ label: M.savedBlocks.insertAtBeginning
75
+ }], t = F.content.value.blocks;
76
+ for (let n = 0; n < t.length; n++) {
77
+ let r = t[n], i = r.type, a = M.blocks[i] ?? r.type;
78
+ e.push({
79
+ value: r.id,
80
+ label: N(M.savedBlocks.insertAfterBlock, { block: `${a} ${n + 1}` })
81
+ });
82
+ }
83
+ return e.push({
84
+ value: "end",
85
+ label: M.savedBlocks.insertAtEnd
86
+ }), e;
87
+ }), it = h(() => {
88
+ if (W.value === "end") return;
89
+ if (W.value === "beginning") return 0;
90
+ let e = F.content.value.blocks.findIndex((e) => e.id === W.value);
91
+ if (e !== -1) return e + 1;
92
+ });
93
+ r(() => et.visible, (e) => {
94
+ if (e) {
95
+ I.value = "", L.value = "", R.value = null, z.value = null, B.value = null;
96
+ let e = F.state.selectedBlockId;
97
+ if (e) {
98
+ let t = F.content.value.blocks.findIndex((t) => t.id === e);
99
+ W.value = t === -1 ? "end" : e;
100
+ } else W.value = "end";
101
+ }
102
+ }, { immediate: !0 });
103
+ function at(e) {
104
+ let t = [], n = /* @__PURE__ */ new Set();
105
+ for (let r of e.content) if (!n.has(r.type) && w[r.type] && (n.add(r.type), t.push({
106
+ type: r.type,
107
+ icon: w[r.type]
108
+ })), t.length >= 5) break;
109
+ return t;
110
+ }
111
+ function J(e) {
112
+ let t = new Set(e.content.map((e) => e.type));
113
+ return Math.max(0, t.size - 5);
114
+ }
115
+ function Y(e) {
116
+ let t = e.updatedAt ?? e.createdAt;
117
+ return t ? de(t, M.savedBlocks.time, N) ?? "" : "";
118
+ }
119
+ function ot(e) {
120
+ let t = e.updatedAt ?? e.createdAt;
121
+ if (!t) return "";
122
+ let n = new Date(t);
123
+ return Number.isNaN(n.getTime()) ? "" : n.toLocaleString();
124
+ }
125
+ async function st(e) {
126
+ try {
127
+ await P.remove(e), R.value === e && (R.value = null);
128
+ } finally {
129
+ z.value = null;
130
+ }
131
+ }
132
+ async function ct(e) {
133
+ P.canUpdateBlock(e) && (B.value = e.id, V.value = e.name, H.value = e.category ?? "", z.value = null, await ne(), U.value?.focus(), U.value?.select());
134
+ }
135
+ function X() {
136
+ B.value = null, V.value = "", H.value = "";
137
+ }
138
+ async function Z(e) {
139
+ if (B.value !== e) return;
140
+ let t = V.value.trim(), n = H.value.trim(), r = P.savedBlocks.value.find((t) => t.id === e), i = {};
141
+ if (t && t !== r?.name && (i.name = t), n !== (r?.category ?? "") && (i.category = n), Object.keys(i).length === 0) {
142
+ X();
143
+ return;
144
+ }
145
+ try {
146
+ await P.update(e, i);
147
+ } finally {
148
+ X();
149
+ }
150
+ }
151
+ function lt(e, t) {
152
+ let n = e.currentTarget, r = e.relatedTarget;
153
+ r && n.contains(r) || Z(t);
154
+ }
155
+ function Q() {
156
+ q.value && j("insert", q.value, it.value);
157
+ }
158
+ function $() {
159
+ j("close");
160
+ }
161
+ function ut(e) {
162
+ B.value || (e.key === "Escape" && $(), e.key === "Enter" && q.value && (e.preventDefault(), Q()));
163
+ }
164
+ return (r, s) => (a(), f(ue, {
165
+ visible: c.visible,
166
+ onClose: $,
167
+ onKeydown: ut
168
+ }, {
169
+ default: ee(() => [l("div", fe, [
170
+ l("div", pe, [l("h3", me, o(p(M).savedBlocks.browse), 1), l("button", {
171
+ "aria-label": p(M).savedBlocks.close,
172
+ class: "tpl:cursor-pointer tpl:rounded-md tpl:border-none tpl:bg-transparent tpl:p-1 tpl:transition-colors tpl:duration-100 tpl:text-[var(--tpl-text-dim)]",
173
+ onClick: $
174
+ }, [d(p(le), {
175
+ size: 16,
176
+ "stroke-width": 2
177
+ })], 8, he)]),
178
+ l("div", ge, [l("div", _e, [
179
+ l("div", ve, [l("div", ye, [d(p(oe), {
180
+ size: 14,
181
+ "stroke-width": 2,
182
+ class: "tpl:pointer-events-none tpl:absolute tpl:left-3 tpl:top-1/2 tpl:-translate-y-1/2 tpl:text-[var(--tpl-text-dim)]"
183
+ }), _(l("input", {
184
+ "onUpdate:modelValue": s[0] ||= (e) => I.value = e,
185
+ type: "text",
186
+ placeholder: p(M).savedBlocks.search,
187
+ disabled: K.value,
188
+ class: "tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:pl-9 tpl:pr-3 tpl:text-sm tpl:outline-none tpl:disabled:opacity-50 tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]"
189
+ }, null, 8, be), [[v, I.value]])]), p(P).categories.value.length > 0 ? _((a(), u("select", {
190
+ key: 0,
191
+ "onUpdate:modelValue": s[1] ||= (e) => L.value = e,
192
+ "data-testid": "saved-blocks-category-filter",
193
+ "aria-label": p(M).savedBlocks.filterByCategory,
194
+ class: "tpl:h-8 tpl:w-full tpl:rounded-md tpl:border tpl:px-2 tpl:text-xs tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]"
195
+ }, [l("option", Se, o(p(M).savedBlocks.allCategories), 1), (a(!0), u(m, null, e(p(P).categories.value, (e) => (a(), u("option", {
196
+ key: e,
197
+ value: e
198
+ }, o(e), 9, Ce))), 128))], 8, xe)), [[b, L.value]]) : g("", !0)]),
199
+ l("datalist", we, [(a(!0), u(m, null, e(p(P).categories.value, (e) => (a(), u("option", {
200
+ key: e,
201
+ value: e
202
+ }, null, 8, Te))), 128))]),
203
+ l("div", T, [K.value ? (a(), u("div", {
204
+ key: 0,
205
+ "data-testid": "saved-blocks-loading",
206
+ class: "tpl:flex tpl:flex-col tpl:gap-1",
207
+ role: "status",
208
+ "aria-busy": "true",
209
+ "aria-label": p(M).savedBlocks.loading
210
+ }, [(a(), u(m, null, e(3, (e) => l("div", {
211
+ key: e,
212
+ "aria-hidden": "true",
213
+ class: "tpl-saved-block-skeleton tpl:rounded-[var(--tpl-radius-md)] tpl:border tpl:px-3 tpl:py-2 tpl:border-[var(--tpl-border)]"
214
+ }, [...s[7] ||= [l("div", { class: "tpl:h-3 tpl:w-1/2 tpl:rounded tpl:bg-[var(--tpl-bg-hover)]" }, null, -1), l("div", { class: "tpl:mt-2 tpl:h-2.5 tpl:w-1/4 tpl:rounded tpl:bg-[var(--tpl-bg-hover)]" }, null, -1)]])), 64))], 8, E)) : G.value.length > 0 ? (a(), u("div", D, [(a(!0), u(m, null, e(G.value, (r) => (a(), u(m, { key: r.id }, [B.value === r.id ? (a(), u("div", {
215
+ key: 0,
216
+ class: "tpl:flex tpl:w-full tpl:flex-col tpl:gap-1 tpl:rounded-[var(--tpl-radius-md)] tpl:border tpl:px-3 tpl:py-2 tpl:border-[var(--tpl-primary)]",
217
+ style: { "background-color": "var(--tpl-primary-light)" },
218
+ onFocusout: (e) => lt(e, r.id)
219
+ }, [_(l("input", {
220
+ ref_for: !0,
221
+ ref: (e) => U.value = e,
222
+ "onUpdate:modelValue": s[2] ||= (e) => V.value = e,
223
+ type: "text",
224
+ "aria-label": p(M).savedBlocks.rename,
225
+ class: "tpl:h-7 tpl:w-full tpl:rounded-md tpl:border tpl:px-2 tpl:text-xs tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]",
226
+ onKeydown: [x(y((e) => Z(r.id), ["prevent", "stop"]), ["enter"]), s[3] ||= x(y((e) => X(), ["prevent", "stop"]), ["esc"])]
227
+ }, null, 40, Ee), [[v, V.value]]), _(l("input", {
228
+ "onUpdate:modelValue": s[4] ||= (e) => H.value = e,
229
+ type: "text",
230
+ "data-testid": "saved-blocks-edit-category",
231
+ "aria-label": p(M).savedBlocks.category,
232
+ placeholder: p(M).savedBlocks.categoryPlaceholder,
233
+ list: "tpl-saved-block-browser-categories",
234
+ class: "tpl:h-7 tpl:w-full tpl:rounded-md tpl:border tpl:px-2 tpl:text-xs tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]",
235
+ onKeydown: [x(y((e) => Z(r.id), ["prevent", "stop"]), ["enter"]), s[5] ||= x(y((e) => X(), ["prevent", "stop"]), ["esc"])]
236
+ }, null, 40, De), [[v, H.value]])], 40, O)) : (a(), u("button", {
237
+ key: 1,
238
+ type: "button",
239
+ "data-testid": "saved-block-card",
240
+ "aria-pressed": R.value === r.id,
241
+ class: "tpl:group/card tpl:w-full tpl:cursor-pointer tpl:rounded-[var(--tpl-radius-md)] tpl:border tpl:bg-transparent tpl:px-3 tpl:py-2 tpl:text-left tpl:transition-all tpl:duration-[120ms]",
242
+ style: t({
243
+ borderColor: R.value === r.id ? "var(--tpl-primary)" : "var(--tpl-border)",
244
+ backgroundColor: R.value === r.id ? "var(--tpl-primary-light)" : "transparent"
245
+ }),
246
+ onClick: (e) => R.value = r.id
247
+ }, [
248
+ l("div", ke, [l("span", Ae, o(r.name), 1), l("span", je, o(p(N)(p(M).savedBlocks.blockCount, { count: r.content.length })), 1)]),
249
+ r.category ? (a(), u("div", Me, [l("span", Ne, o(r.category), 1)])) : g("", !0),
250
+ l("div", Pe, [
251
+ (a(!0), u(m, null, e(at(r), (e) => (a(), f(i(e.icon), {
252
+ key: e.type,
253
+ size: 14,
254
+ "stroke-width": 1.5,
255
+ class: "tpl:text-[var(--tpl-text-dim)]"
256
+ }))), 128)),
257
+ J(r) > 0 ? (a(), u("span", Fe, " +" + o(J(r)), 1)) : g("", !0),
258
+ Y(r) ? (a(), u("span", {
259
+ key: 1,
260
+ "data-testid": "saved-block-updated",
261
+ class: "tpl:ml-1 tpl:truncate tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]",
262
+ title: ot(r)
263
+ }, o(Y(r)), 9, Ie)) : g("", !0),
264
+ z.value === r.id ? (a(), u("button", {
265
+ key: 2,
266
+ "aria-label": p(M).savedBlocks.deleteConfirm,
267
+ class: "tpl:ml-auto tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-2 tpl:py-0.5 tpl:text-[10px] tpl:font-medium tpl:transition-colors tpl:duration-100 tpl:border-[var(--tpl-danger)] tpl:text-[var(--tpl-danger)]",
268
+ style: { "background-color": "transparent" },
269
+ onClick: y((e) => st(r.id), ["stop"])
270
+ }, o(p(M).savedBlocks.deleteConfirm), 9, Le)) : (a(), u(m, { key: 3 }, [p(P).canUpdateBlock(r) ? (a(), u("button", {
271
+ key: 0,
272
+ class: "tpl-saved-block-rename-btn tpl:ml-auto tpl:cursor-pointer tpl:rounded-md tpl:border-none tpl:bg-transparent tpl:p-0.5 tpl:transition-colors tpl:duration-100 tpl:text-[var(--tpl-text-dim)]",
273
+ "aria-label": p(M).savedBlocks.rename,
274
+ title: p(M).savedBlocks.rename,
275
+ onClick: y((e) => ct(r), ["stop"])
276
+ }, [d(p(se), {
277
+ size: 12,
278
+ "stroke-width": 1.5
279
+ })], 8, Re)) : g("", !0), p(P).canDeleteBlock(r) ? (a(), u("button", {
280
+ key: 1,
281
+ class: n(["tpl-saved-block-delete-btn tpl:cursor-pointer tpl:rounded-md tpl:border-none tpl:bg-transparent tpl:p-0.5 tpl:transition-colors tpl:duration-100 tpl:text-[var(--tpl-text-dim)]", { "tpl:ml-auto": !p(P).canUpdateBlock(r) }]),
282
+ "aria-label": p(M).savedBlocks.delete,
283
+ title: p(M).savedBlocks.delete,
284
+ onClick: y((e) => z.value = r.id, ["stop"])
285
+ }, [d(p(ce), {
286
+ size: 12,
287
+ "stroke-width": 1.5
288
+ })], 10, ze)) : g("", !0)], 64))
289
+ ])
290
+ ], 12, Oe))], 64))), 128))])) : (a(), u("div", Be, [d(p(C), {
291
+ size: 32,
292
+ "stroke-width": 1,
293
+ class: "tpl:text-[var(--tpl-text-dim)]"
294
+ }), nt.value ? (a(), u("p", Ve, o(p(M).savedBlocks.noResults), 1)) : (a(), u(m, { key: 1 }, [l("p", He, o(p(M).savedBlocks.empty), 1), l("p", Ue, o(p(M).savedBlocks.emptyHint), 1)], 64))]))])
295
+ ]), l("div", We, [q.value ? (a(), u("div", Ge, [l("div", Ke, [d(p(tt), { blocks: q.value.content }, null, 8, ["blocks"])])])) : (a(), u("div", qe, [d(p(C), {
296
+ size: 32,
297
+ "stroke-width": 1,
298
+ class: "tpl:text-[var(--tpl-text-dim)]"
299
+ }), l("p", Je, o(p(M).savedBlocks.selectToPreview), 1)]))])]),
300
+ l("div", Ye, [l("div", Xe, [l("label", Ze, o(p(M).savedBlocks.insertPosition), 1), _(l("select", {
301
+ "onUpdate:modelValue": s[6] ||= (e) => W.value = e,
302
+ class: "tpl:h-7 tpl:max-w-[220px] tpl:rounded-md tpl:border tpl:px-2 tpl:text-xs tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]"
303
+ }, [(a(!0), u(m, null, e(rt.value, (e) => (a(), u("option", {
304
+ key: e.value,
305
+ value: e.value
306
+ }, o(e.label), 9, Qe))), 128))], 512), [[b, W.value]])]), l("div", k, [l("button", {
307
+ type: "button",
308
+ "data-testid": "saved-blocks-browser-close",
309
+ class: "tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:border-[var(--tpl-border)] tpl:text-[var(--tpl-text)] tpl:bg-[var(--tpl-bg)]",
310
+ onClick: $
311
+ }, o(p(M).savedBlocks.close), 1), l("button", {
312
+ type: "button",
313
+ class: "tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:hover:opacity-90 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50 tpl:bg-[var(--tpl-primary)] tpl:text-[var(--tpl-bg)]",
314
+ disabled: !q.value,
315
+ onClick: Q
316
+ }, o(p(M).savedBlocks.insert), 9, $e)])])
317
+ ])]),
318
+ _: 1
319
+ }, 8, ["visible"]));
320
+ }
321
+ });
322
+ //#endregion
323
+ export { A as default };
@@ -0,0 +1,36 @@
1
+ import { O as e, _ as t, d as n, g as r, l as i, nt as a, r as o, u as s } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
2
+ //#endregion
3
+ //#region src/components/SavedBlocksPanels.vue
4
+ var c = /* @__PURE__ */ t({
5
+ __name: "SavedBlocksPanels",
6
+ props: { feature: {} },
7
+ setup(t) {
8
+ let c = t, l = r(() => import("./SavedBlocksPickBar-poGS4PoI.js")), u = r(() => import("./SaveBlockDialog-Cc5BSUBx.js")), d = r(() => import("./SavedBlocksBrowserModal-LkY_U3lY.js"));
9
+ function f(e, t) {
10
+ c.feature.insert(e, t);
11
+ }
12
+ return (r, c) => (e(), n(o, null, [
13
+ t.feature.isPicking.value ? (e(), i(a(l), {
14
+ key: 0,
15
+ count: t.feature.pickedCount.value,
16
+ onConfirm: c[0] ||= (e) => t.feature.confirmPicking(),
17
+ onCancel: c[1] ||= (e) => t.feature.cancelPicking()
18
+ }, null, 8, ["count"])) : s("", !0),
19
+ t.feature.isSaveDialogOpen.value ? (e(), i(a(u), {
20
+ key: 1,
21
+ visible: t.feature.isSaveDialogOpen.value,
22
+ "picked-ids": [...t.feature.pickedIds.value],
23
+ onClose: c[2] ||= (e) => t.feature.closeSaveDialog(),
24
+ onSaved: c[3] ||= (e) => t.feature.refresh()
25
+ }, null, 8, ["visible", "picked-ids"])) : s("", !0),
26
+ t.feature.isBrowserOpen.value ? (e(), i(a(d), {
27
+ key: 2,
28
+ visible: t.feature.isBrowserOpen.value,
29
+ onClose: c[4] ||= (e) => t.feature.closeBrowser(),
30
+ onInsert: f
31
+ }, null, 8, ["visible"])) : s("", !0)
32
+ ], 64));
33
+ }
34
+ });
35
+ //#endregion
36
+ export { c as default };
@@ -0,0 +1,52 @@
1
+ import { O as e, Ot as t, _ as n, c as r, d as i, h as a, m as o, nt as s } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
2
+ import { R as c } from "./useEditorCore-Bd9CA4L_.js";
3
+ import { t as l } from "./useI18n-D2L9Mkik.js";
4
+ import { t as u } from "./x-CkD6A1iB.js";
5
+ //#region src/components/SavedBlocksPickBar.vue?vue&type=script&setup=true&lang.ts
6
+ var d = {
7
+ "data-testid": "saved-blocks-pick-bar",
8
+ class: "tpl:absolute tpl:bottom-10 tpl:left-12 tpl:right-[320px] tpl:z-50 tpl:flex tpl:justify-center tpl:px-4",
9
+ style: { "pointer-events": "none" }
10
+ }, f = ["aria-label"], p = { class: "tpl:flex tpl:flex-col" }, m = {
11
+ "data-testid": "saved-blocks-pick-count",
12
+ class: "tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]"
13
+ }, h = { class: "tpl:text-[11px] tpl:text-[var(--tpl-text-dim)]" }, g = { class: "tpl:flex tpl:items-center tpl:gap-1.5" }, _ = ["disabled"], v = /* @__PURE__ */ n({
14
+ __name: "SavedBlocksPickBar",
15
+ props: { count: {} },
16
+ emits: ["confirm", "cancel"],
17
+ setup(n, { emit: v }) {
18
+ let y = n, b = v, { t: x, format: S } = l();
19
+ function C() {
20
+ y.count > 0 && b("confirm");
21
+ }
22
+ return (l, v) => (e(), i("div", d, [r("div", {
23
+ role: "toolbar",
24
+ "aria-label": s(x).savedBlocks.pickToolbar,
25
+ class: "tpl-scale-in tpl:flex tpl:items-center tpl:gap-3 tpl:rounded-[var(--tpl-radius-lg)] tpl:border tpl:py-2 tpl:pl-4 tpl:pr-2 tpl:border-[var(--tpl-border)]",
26
+ style: {
27
+ "pointer-events": "auto",
28
+ "background-color": "var(--tpl-bg-elevated)",
29
+ "box-shadow": "var(--tpl-shadow-xl)"
30
+ }
31
+ }, [r("div", p, [r("span", m, t(s(S)(s(x).savedBlocks.pickCount, { count: n.count })), 1), r("span", h, t(s(x).savedBlocks.pickHint), 1)]), r("div", g, [r("button", {
32
+ type: "button",
33
+ "data-testid": "saved-blocks-pick-cancel",
34
+ class: "tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:px-2.5 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:transition-all tpl:duration-150 tpl:border-[var(--tpl-border)] tpl:text-[var(--tpl-text)] tpl:bg-[var(--tpl-bg)]",
35
+ onClick: v[0] ||= (e) => b("cancel")
36
+ }, [a(s(u), {
37
+ size: 13,
38
+ "stroke-width": 2
39
+ }), o(" " + t(s(x).savedBlocks.cancel), 1)]), r("button", {
40
+ type: "button",
41
+ "data-testid": "saved-blocks-pick-confirm",
42
+ class: "tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-1 tpl:rounded-md tpl:px-2.5 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:transition-all tpl:duration-150 tpl:hover:opacity-90 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50 tpl:bg-[var(--tpl-primary)] tpl:text-[var(--tpl-bg)]",
43
+ disabled: n.count === 0,
44
+ onClick: C
45
+ }, [a(s(c), {
46
+ size: 13,
47
+ "stroke-width": 2
48
+ }), o(" " + t(s(x).savedBlocks.save), 1)], 8, _)])], 8, f)]));
49
+ }
50
+ });
51
+ //#endregion
52
+ export { v as default };
@@ -1,13 +1,13 @@
1
1
  import { A as e, Et as t, I as n, O as r, Ot as i, R as a, Y as o, _ as s, c, d as l, h as u, nt as d, r as f, s as p, u as m } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
2
2
  import { c as h, t as g } from "./runtime-dom.esm-bundler-GdMI8WqG.js";
3
- import "./useEditorCore-kKUemYY6.js";
4
- import { s as _ } from "./usePopoverPosition-F9STHRIr.js";
5
- import { t as v } from "./useI18n-BNMzZTM5.js";
6
- import { t as y } from "./createLucideIcon-_peTZQtY.js";
7
- import { t as b } from "./chevron-down-COEcl2iP.js";
8
- import { t as x } from "./clock-CZZw62e8.js";
9
- import { t as S } from "./loader-circle-s9Rh5lLd.js";
10
- import { n as C } from "./useCloudI18n-PCDOC2kz.js";
3
+ import "./useEditorCore-Bd9CA4L_.js";
4
+ import { s as _ } from "./usePopoverPosition-BO2LNy5n.js";
5
+ import { t as v } from "./useI18n-D2L9Mkik.js";
6
+ import { t as y } from "./createLucideIcon-JWHwTI6N.js";
7
+ import { t as b } from "./chevron-down-j8GrdTyz.js";
8
+ import { t as x } from "./clock-BzKLLW5L.js";
9
+ import { t as S } from "./loader-circle-C-Z6kgI6.js";
10
+ import { n as C } from "./useCloudI18n-BmiygEM4.js";
11
11
  import { t as w } from "./formatRelativeTime-CtUU-QZ8.js";
12
12
  var T = y("chevron-left", [["path", {
13
13
  d: "m15 18-6-6 6-6",
@@ -1,19 +1,19 @@
1
1
  import { A as e, Dt as t, Et as n, I as r, N as i, O as a, Ot as o, R as ee, Y as s, _ as c, c as l, d as u, h as d, l as f, m as p, nt as m, r as h, u as g, x as te } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
2
2
  import { t as ne } from "./runtime-dom.esm-bundler-GdMI8WqG.js";
3
- import { B as _, F as re, T as ie, h as v } from "./keys-DFaIbGR8.js";
4
- import { t as y } from "./createLucideIcon-_peTZQtY.js";
5
- import { t as b } from "./chevron-down-COEcl2iP.js";
6
- import { t as x } from "./circle-alert-CvHi5etc.js";
7
- import { n as S, t as C } from "./refresh-cw-DlYfl65Y.js";
8
- import { t as ae } from "./info-CE3JSTqk.js";
9
- import { t as w } from "./loader-circle-s9Rh5lLd.js";
10
- import { t as T } from "./shield-check-Bnj9aRoJ.js";
11
- import { t as E } from "./sparkles-CncWT57a.js";
12
- import { t as oe } from "./triangle-alert-C18_ima6.js";
13
- import { t as se } from "./x-BCFQuE_q.js";
3
+ import { B as _, F as re, T as ie, h as v } from "./keys-CHPcp-Nz.js";
4
+ import { t as y } from "./createLucideIcon-JWHwTI6N.js";
5
+ import { t as b } from "./chevron-down-j8GrdTyz.js";
6
+ import { t as x } from "./circle-alert-CgtE46ND.js";
7
+ import { n as S, t as C } from "./refresh-cw-maKlg0dl.js";
8
+ import { t as ae } from "./info-BUJBXoE6.js";
9
+ import { t as w } from "./loader-circle-C-Z6kgI6.js";
10
+ import { t as T } from "./shield-check-B7x5OKt5.js";
11
+ import { t as E } from "./sparkles-DVlm1Ipp.js";
12
+ import { t as oe } from "./triangle-alert-Djg6IG8N.js";
13
+ import { t as se } from "./x-CkD6A1iB.js";
14
14
  import { t as ce } from "./LoadingTrack-KIcREPlS.js";
15
15
  import { t as D } from "./_plugin-vue_export-helper-B3ysoDQm.js";
16
- import { n as le } from "./useCloudI18n-PCDOC2kz.js";
16
+ import { n as le } from "./useCloudI18n-BmiygEM4.js";
17
17
  var O = y("shield-x", [
18
18
  ["path", {
19
19
  d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
@@ -28,8 +28,8 @@ var O = y("shield-x", [
28
28
  key: "18nt4w"
29
29
  }]
30
30
  ]), k = y("zap", [["path", {
31
- d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
32
- key: "1xq2db"
31
+ d: "M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z",
32
+ key: "1v7up4"
33
33
  }]]);
34
34
  //#endregion
35
35
  //#region src/cloud/utils/scoringStyles.ts
@@ -1,9 +1,9 @@
1
1
  import { A as e, Et as t, I as n, O as r, Ot as i, R as a, Y as o, _ as s, c, d as l, h as u, l as d, m as f, nt as p, r as m, u as h, z as g } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
2
2
  import { i as _ } from "./runtime-dom.esm-bundler-GdMI8WqG.js";
3
- import "./useEditorCore-kKUemYY6.js";
4
- import { t as v } from "./loader-circle-s9Rh5lLd.js";
5
- import { n as y } from "./useCloudI18n-PCDOC2kz.js";
6
- import { t as b } from "./TplModal-BDDyvT-C.js";
3
+ import "./useEditorCore-Bd9CA4L_.js";
4
+ import { t as v } from "./loader-circle-C-Z6kgI6.js";
5
+ import { n as y } from "./useCloudI18n-BmiygEM4.js";
6
+ import { t as b } from "./TplModal-BA-Zsg0O.js";
7
7
  //#region src/cloud/components/TestEmailModal.vue?vue&type=script&setup=true&lang.ts
8
8
  var x = ["aria-busy"], S = {
9
9
  id: "tpl-test-email-title",
@@ -1,11 +1,11 @@
1
1
  import { Dt as e, Et as t, O as n, Ot as r, W as i, _ as a, c as o, d as s, h as c, i as l, l as u, m as d, nt as f, r as p, s as m, u as h, x as g } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
2
- import { S as ee, x as te } from "./useEditorCore-kKUemYY6.js";
3
- import { n as ne } from "./usePopoverPosition-F9STHRIr.js";
4
- import { D as _, L as v, w as y, z as b } from "./keys-DFaIbGR8.js";
5
- import { t as re } from "./useI18n-BNMzZTM5.js";
6
- import { a as ie, i as ae, n as oe, r as se, t as ce } from "./RichTextEditorContent-DwhDnMsG.js";
7
- import { n as x, t as S } from "./scan-line-CHadrYVb.js";
8
- import { t as C } from "./loader-circle-s9Rh5lLd.js";
2
+ import { C as ee, S as te } from "./useEditorCore-Bd9CA4L_.js";
3
+ import { n as ne } from "./usePopoverPosition-BO2LNy5n.js";
4
+ import { D as _, L as v, w as y, z as b } from "./keys-CHPcp-Nz.js";
5
+ import { t as re } from "./useI18n-D2L9Mkik.js";
6
+ import { a as ie, i as ae, n as oe, r as se, t as ce } from "./RichTextEditorContent-FbnWsh46.js";
7
+ import { n as x, t as S } from "./scan-line-BFgesTOY.js";
8
+ import { t as C } from "./loader-circle-C-Z6kgI6.js";
9
9
  //#region src/components/blocks/TitleEditor.vue?vue&type=script&setup=true&lang.ts
10
10
  var w = { class: "tpl-text-editor-wrapper tpl:relative" }, T = ["data-tpl-theme", "aria-label"], E = ["aria-label", "title"], D = ["aria-label", "title"], O = ["aria-label", "title"], k = {
11
11
  key: 0,
@@ -31,10 +31,10 @@ var w = { class: "tpl-text-editor-wrapper tpl:relative" }, T = ["data-tpl-theme"
31
31
  editorName: "TitleEditor",
32
32
  async loadExtensions({ mergeTags: e, syntax: t, triggerChar: n, autocompleteEnabled: r, suggestionEmptyText: i }) {
33
33
  let [{ Editor: a, EditorContent: o }, { default: s }, { default: c }, { MergeTagNode: l, MergeTagSuggestion: u, LogicMergeTagNode: d }] = await Promise.all([
34
- import("./dist-8TKf-Jpg.js").then((e) => e.r),
35
- import("./dist-Cx7IUM7J.js"),
36
- import("./dist-CcX5sLpz.js"),
37
- import("./extensions-BCA9pyer.js")
34
+ import("./dist-DYClLqy8.js").then((e) => e.r),
35
+ import("./dist-BgPYC_8-.js"),
36
+ import("./dist-BuNDAAVp.js"),
37
+ import("./extensions-ClY5Sh7S.js")
38
38
  ]);
39
39
  return {
40
40
  TiptapEditor: a,
@@ -1,8 +1,8 @@
1
1
  import { O as e, R as t, Y as n, _ as r, c as i, d as a, h as o, i as s, j as c, l, nt as u, s as d, u as f, x as p } from "./vue.runtime.esm-bundler-B0xoGkDv.js";
2
2
  import { c as m, t as h } from "./runtime-dom.esm-bundler-GdMI8WqG.js";
3
- import { D as g } from "./useEditorCore-kKUemYY6.js";
4
- import { n as _ } from "./usePopoverPosition-F9STHRIr.js";
5
- import { z as v } from "./keys-DFaIbGR8.js";
3
+ import { O as g } from "./useEditorCore-Bd9CA4L_.js";
4
+ import { n as _ } from "./usePopoverPosition-BO2LNy5n.js";
5
+ import { z as v } from "./keys-CHPcp-Nz.js";
6
6
  //#region src/components/TplModal.vue?vue&type=script&setup=true&lang.ts
7
7
  var y = ["data-tpl-theme"], b = /* @__PURE__ */ r({
8
8
  __name: "TplModal",