@aswin.dev/editor 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +3 -3
  2. package/dist/{AccessibilityPanel-CvQGLdu6.js → AccessibilityPanel-COL6Wm7p.js} +37 -37
  3. package/dist/{AiChatSidebar-B3SJIKG_.js → AiChatSidebar-DWGPVtvC.js} +68 -68
  4. package/dist/{AiFeatureMenu-BLLKoOos.js → AiFeatureMenu-duUFSfDf.js} +22 -22
  5. package/dist/{BlockA11yBadge-CXDLqkcJ.js → BlockA11yBadge-Qs6HtXid.js} +12 -12
  6. package/dist/CloudEditor-CFldoCOb.js +1207 -0
  7. package/dist/{CollaboratorBar-DuPYW5iF.js → CollaboratorBar-Bw-lbt61.js} +21 -21
  8. package/dist/CommentsSidebar-BaD5F53-.js +436 -0
  9. package/dist/CountdownBlock-DaYGxKqo.js +92 -0
  10. package/dist/CountdownToolbar-Dg4F8MTk.js +210 -0
  11. package/dist/{DesignReferenceSidebar-B8V_F2yF.js → DesignReferenceSidebar-BSH7uNP_.js} +58 -58
  12. package/dist/{LoadingTrack-B0CWFHXQ.js → LoadingTrack-Ba2pfF57.js} +2 -2
  13. package/dist/{ModuleBrowserModal-DrUFMTDx.js → ModuleBrowserModal-6phxZSKI.js} +80 -80
  14. package/dist/ModulePreviewCanvas-BW8L3eQX.js +108 -0
  15. package/dist/{NumberWithSuffix-DkXUez9t.js → NumberWithSuffix-BpUzQOJt.js} +87 -87
  16. package/dist/{ParagraphEditor-D75wl3BX.js → ParagraphEditor-DNSzAB-I.js} +182 -182
  17. package/dist/{RichTextEditorContent-DYkIauIk.js → RichTextEditorContent-CrqPQdnk.js} +38 -38
  18. package/dist/{SaveModuleDialog-FZ9lxY7_.js → SaveModuleDialog-zMQTpez7.js} +28 -28
  19. package/dist/{SnapshotHistory-BR3eV120.js → SnapshotHistory-Do-A5rYU.js} +45 -50
  20. package/dist/{TemplateScoringPanel-4GTNHej5.js → TemplateScoringPanel-CS7o62zS.js} +75 -75
  21. package/dist/{TestEmailModal--ue5w9fT.js → TestEmailModal-DGj_9V1u.js} +28 -28
  22. package/dist/{TitleEditor-fStSADI-.js → TitleEditor-C7IDnAoS.js} +68 -68
  23. package/dist/{TplModal-BwSfxIHf.js → TplModal-BAsVzcTb.js} +14 -14
  24. package/dist/{accessibility-e8JYu_zd.js → accessibility-BU09xZrQ.js} +1 -1
  25. package/dist/{blockTypeIcons-BcTrDjmH.js → blockTypeIcons-C6LDKvmd.js} +19 -5
  26. package/dist/bundle-stats.json +7 -7
  27. package/dist/{check-Da05j8yl.js → check-DJrpDKO_.js} +1 -1
  28. package/dist/{chevron-down-R2uY34iD.js → chevron-down-C5oBUhT8.js} +1 -1
  29. package/dist/chevron-right-BqCptpdp.js +10 -0
  30. package/dist/{circle-alert-DZuGWPX-.js → circle-alert-ZQQc98HC.js} +1 -1
  31. package/dist/{clock-CRp2sIub.js → clock-ik2pRJKG.js} +1 -1
  32. package/dist/{cloud-DEk_b4CR.js → cloud-6ZmAvF0j.js} +485 -427
  33. package/dist/{createLucideIcon-C3pa2siy.js → createLucideIcon-ClREiSx3.js} +6 -6
  34. package/dist/{de-Brqvgr43.js → de-DWcgp-7T.js} +209 -1
  35. package/dist/{dist-BaQIYPsn.js → dist-BUzw1buG.js} +1 -1
  36. package/dist/{dist-DjviJBCi.js → dist-BZyY-SS4.js} +1 -1
  37. package/dist/{dist-D6uC2xhi.js → dist-BadNx4qo.js} +1 -1
  38. package/dist/{dist-aRzjfSRN.js → dist-BesOh2mk.js} +1 -1
  39. package/dist/{dist-D90y8dvT.js → dist-Bz3M4RXG.js} +3 -3
  40. package/dist/dist-C04s_fLA.js +563 -0
  41. package/dist/{dist-DDJIWTRY.js → dist-C3T2AKtB.js} +1 -1
  42. package/dist/{dist-BFawx6IS.js → dist-C9ckKEZL.js} +51 -51
  43. package/dist/{dist-us-RpCWN.js → dist-CBItRG-Z.js} +1 -1
  44. package/dist/{dist-wzMIGj-D.js → dist-COSzWQUs.js} +1 -1
  45. package/dist/dist-CivF9P8b.js +382 -0
  46. package/dist/{dist-Cp0zXPAD.js → dist-DtiDUrX-.js} +1 -1
  47. package/dist/{dist-KoBJjK1G.js → dist-Dzt5foyL.js} +1 -1
  48. package/dist/{en-WDVp87TE.js → en-Cxd4fhNm.js} +209 -1
  49. package/dist/{extensions-CUcl9Ok4.js → extensions-D__hOlV1.js} +106 -106
  50. package/dist/{image-up-MBZKKg9p.js → image-up-DT7gcJLN.js} +1 -1
  51. package/dist/index.d.ts +88 -11
  52. package/dist/{info-CJEC7piy.js → info-BSPGcsSM.js} +1 -1
  53. package/dist/keys-CvX8D-8C.js +10 -0
  54. package/dist/{loader-circle-DsY5Yg33.js → loader-circle-Balo8p3d.js} +1 -1
  55. package/dist/{message-circle-yElBbR2C.js → message-circle-B39qAHxs.js} +1 -1
  56. package/dist/pencil-BZJPNYWR.js +10 -0
  57. package/dist/{refresh-cw-CE_AGtn8.js → refresh-cw-DwDqGUM0.js} +1 -1
  58. package/dist/{scan-line-D0vcUekt.js → scan-line-CzfFJO1o.js} +1 -1
  59. package/dist/{send-DH4oDQqC.js → send-D2eSo4GH.js} +1 -1
  60. package/dist/{shield-check-CfJgs2Hd.js → shield-check-jkpgcC0-.js} +1 -1
  61. package/dist/{sparkles-CvRXGqFs.js → sparkles-Chm5CZfb.js} +1 -1
  62. package/dist/style.css +1 -1
  63. package/dist/styleConstants-34eUKPOZ.js +55 -0
  64. package/dist/styles-B4tjX5SP.js +5224 -0
  65. package/dist/templatical-editor.js +189 -126
  66. package/dist/{text-align-start-BT9VUDxK.js → text-align-start-CzBnJsW8.js} +1 -1
  67. package/dist/{trash-2-DbP2Y6t2.js → trash-2-CtK2apEH.js} +1 -1
  68. package/dist/{triangle-alert-aOXceTSe.js → triangle-alert-KpDVNbpn.js} +1 -1
  69. package/dist/{useCloudI18n-BuIwR6OE.js → useCloudI18n-DOKSZql1.js} +2 -2
  70. package/dist/{useEditorCore-C6ost42Q.js → useEditorCore-wslttMH-.js} +2425 -2250
  71. package/dist/{useI18n-lb2DHDiu.js → useI18n-C2xQZ6K9.js} +2 -2
  72. package/dist/{useMergeTag-CBwKnnNB.js → useMergeTag-DX0XG5V9.js} +5 -5
  73. package/dist/{vue.runtime.esm-bundler-DpvJL-nX.js → vue.runtime.esm-bundler-CjauPXjj.js} +1 -1
  74. package/dist/{x-u2oVmjN_.js → x-BkaOMosX.js} +1 -1
  75. package/package.json +10 -10
  76. package/dist/CloudEditor-BCz1ZTYC.js +0 -1172
  77. package/dist/CommentsSidebar-B1pvJdqF.js +0 -441
  78. package/dist/CountdownBlock-BNSj1jvJ.js +0 -92
  79. package/dist/CountdownToolbar-ClJr2GzL.js +0 -210
  80. package/dist/ModulePreviewCanvas-CHdOwV_4.js +0 -106
  81. package/dist/cdn/chunks/AccessibilityPanel-B6DOjojm.js +0 -97
  82. package/dist/cdn/chunks/AccessibilityPanel-B6DOjojm.js.map +0 -1
  83. package/dist/cdn/chunks/AiFeatureMenu-qEdB2fZJ.js +0 -59
  84. package/dist/cdn/chunks/AiFeatureMenu-qEdB2fZJ.js.map +0 -1
  85. package/dist/cdn/chunks/BlockA11yBadge-DcEZftf6.js +0 -33
  86. package/dist/cdn/chunks/BlockA11yBadge-DcEZftf6.js.map +0 -1
  87. package/dist/cdn/chunks/CloudEditor-D2GsEC_n.js +0 -1143
  88. package/dist/cdn/chunks/CloudEditor-D2GsEC_n.js.map +0 -1
  89. package/dist/cdn/chunks/CollaboratorBar--nO7TX6b.js +0 -51
  90. package/dist/cdn/chunks/CollaboratorBar--nO7TX6b.js.map +0 -1
  91. package/dist/cdn/chunks/CountdownBlock-5YdT1uUu.js +0 -93
  92. package/dist/cdn/chunks/CountdownBlock-5YdT1uUu.js.map +0 -1
  93. package/dist/cdn/chunks/CountdownToolbar-DXPXrbAA.js +0 -212
  94. package/dist/cdn/chunks/CountdownToolbar-DXPXrbAA.js.map +0 -1
  95. package/dist/cdn/chunks/ModuleBrowserModal-DxoPp81s.js +0 -195
  96. package/dist/cdn/chunks/ModuleBrowserModal-DxoPp81s.js.map +0 -1
  97. package/dist/cdn/chunks/ModulePreviewCanvas-CoLdb4ar.js +0 -107
  98. package/dist/cdn/chunks/ModulePreviewCanvas-CoLdb4ar.js.map +0 -1
  99. package/dist/cdn/chunks/NumberWithSuffix-CE3NrZhH.js +0 -423
  100. package/dist/cdn/chunks/NumberWithSuffix-CE3NrZhH.js.map +0 -1
  101. package/dist/cdn/chunks/ParagraphEditor-B6Ygu-Mq.js +0 -544
  102. package/dist/cdn/chunks/ParagraphEditor-B6Ygu-Mq.js.map +0 -1
  103. package/dist/cdn/chunks/RichTextEditorContent-DL_y2SrR.js +0 -106
  104. package/dist/cdn/chunks/RichTextEditorContent-DL_y2SrR.js.map +0 -1
  105. package/dist/cdn/chunks/SaveModuleDialog-B0TnO_o9.js +0 -119
  106. package/dist/cdn/chunks/SaveModuleDialog-B0TnO_o9.js.map +0 -1
  107. package/dist/cdn/chunks/TitleEditor-BHpfxvwy.js +0 -171
  108. package/dist/cdn/chunks/TitleEditor-BHpfxvwy.js.map +0 -1
  109. package/dist/cdn/chunks/blockTypeIcons-BzzY9_kA.js +0 -22
  110. package/dist/cdn/chunks/blockTypeIcons-BzzY9_kA.js.map +0 -1
  111. package/dist/cdn/chunks/de-Ce-LbJ2J.js +0 -89
  112. package/dist/cdn/chunks/de-Ce-LbJ2J.js.map +0 -1
  113. package/dist/cdn/chunks/de-D8CnZxV9.js +0 -523
  114. package/dist/cdn/chunks/de-D8CnZxV9.js.map +0 -1
  115. package/dist/cdn/chunks/de-RQrZR56a.js +0 -209
  116. package/dist/cdn/chunks/de-RQrZR56a.js.map +0 -1
  117. package/dist/cdn/chunks/draggable-Bcb86AsV.js +0 -11572
  118. package/dist/cdn/chunks/draggable-Bcb86AsV.js.map +0 -1
  119. package/dist/cdn/chunks/emojiData-EMFlj6FJ.js +0 -19
  120. package/dist/cdn/chunks/emojiData-EMFlj6FJ.js.map +0 -1
  121. package/dist/cdn/chunks/en-8FHaQv4V.js +0 -523
  122. package/dist/cdn/chunks/en-8FHaQv4V.js.map +0 -1
  123. package/dist/cdn/chunks/en-Bl1ecfRF.js +0 -209
  124. package/dist/cdn/chunks/en-Bl1ecfRF.js.map +0 -1
  125. package/dist/cdn/chunks/en-DiCWK5fG.js +0 -89
  126. package/dist/cdn/chunks/en-DiCWK5fG.js.map +0 -1
  127. package/dist/cdn/chunks/extensions-DIxF31tA.js +0 -598
  128. package/dist/cdn/chunks/extensions-DIxF31tA.js.map +0 -1
  129. package/dist/cdn/chunks/features-DEMb13KS.js +0 -6814
  130. package/dist/cdn/chunks/features-DEMb13KS.js.map +0 -1
  131. package/dist/cdn/chunks/icons-CsLTcirh.js +0 -700
  132. package/dist/cdn/chunks/icons-CsLTcirh.js.map +0 -1
  133. package/dist/cdn/chunks/liquid.browser-lQbkge2E.js +0 -3279
  134. package/dist/cdn/chunks/liquid.browser-lQbkge2E.js.map +0 -1
  135. package/dist/cdn/chunks/media-library-CVaNvhpM.js +0 -6014
  136. package/dist/cdn/chunks/media-library-CVaNvhpM.js.map +0 -1
  137. package/dist/cdn/chunks/pusher-CDbNlZBE.js +0 -2508
  138. package/dist/cdn/chunks/pusher-CDbNlZBE.js.map +0 -1
  139. package/dist/cdn/chunks/quality-BaBfc54_.js +0 -1456
  140. package/dist/cdn/chunks/quality-BaBfc54_.js.map +0 -1
  141. package/dist/cdn/chunks/readableTextColor-DhoK4XiZ.js +0 -32
  142. package/dist/cdn/chunks/readableTextColor-DhoK4XiZ.js.map +0 -1
  143. package/dist/cdn/chunks/renderer-CUxvx7ro.js +0 -548
  144. package/dist/cdn/chunks/renderer-CUxvx7ro.js.map +0 -1
  145. package/dist/cdn/chunks/rolldown-runtime-BNuo_Jkg.js +0 -20
  146. package/dist/cdn/chunks/src-CRaqN-p8.js +0 -497
  147. package/dist/cdn/chunks/src-CRaqN-p8.js.map +0 -1
  148. package/dist/cdn/chunks/styleConstants-DP1VOca8.js +0 -57
  149. package/dist/cdn/chunks/styleConstants-DP1VOca8.js.map +0 -1
  150. package/dist/cdn/chunks/styles-BHJULjNR.js +0 -2947
  151. package/dist/cdn/chunks/styles-BHJULjNR.js.map +0 -1
  152. package/dist/cdn/chunks/tiptap-ZhwKyFp7.js +0 -14654
  153. package/dist/cdn/chunks/tiptap-ZhwKyFp7.js.map +0 -1
  154. package/dist/cdn/editor.css +0 -2
  155. package/dist/cdn/editor.js +0 -250
  156. package/dist/cdn/editor.js.map +0 -1
  157. package/dist/dist-B1IR0bpH.js +0 -326
  158. package/dist/dist-DJmnUmW9.js +0 -362
  159. package/dist/keys-ciNfSSGj.js +0 -10
  160. package/dist/styleConstants-fWzlIIwN.js +0 -55
  161. package/dist/styles-DEXEkBvg.js +0 -3176
  162. /package/dist/{_plugin-vue_export-helper-B0hnzhyu.js → _plugin-vue_export-helper-BVAJ4lgT.js} +0 -0
  163. /package/dist/{de-DCaaCE5s.js → de-GOtR9DwW.js} +0 -0
  164. /package/dist/{dist-iLBdeBDR.js → dist-DXa1uAMh.js} +0 -0
  165. /package/dist/{emojiData-PQyVa4bU.js → emojiData-DrBuvEoP.js} +0 -0
  166. /package/dist/{en-DXCyK4-X.js → en-dFFQVzNn.js} +0 -0
  167. /package/dist/{formatRelativeTime-BOEf47hq.js → formatRelativeTime-BhhO8yCl.js} +0 -0
  168. /package/dist/{liquid.browser-CdMv1BTn.js → liquid.browser-BvCyLQII.js} +0 -0
  169. /package/dist/{readableTextColor-CY3SiRnt.js → readableTextColor-DVuzNX1y.js} +0 -0
@@ -1,9 +1,9 @@
1
- import { Dt as e, H as t, M as n, Mt as r, O as i, Ot as a, P as o, Q as s, S as c, V as l, _ as u, d, g as f, h as p, it as m, l as h, m as g, n as _, p as v, s as y, u as b, w as x } from "./vue.runtime.esm-bundler-DpvJL-nX.js";
2
- import { C as S, D as C, n as w, w as T } from "./dist-DJmnUmW9.js";
3
- import { t as E } from "./useI18n-lb2DHDiu.js";
4
- import { t as D } from "./useMergeTag-CBwKnnNB.js";
5
- import { F as O, Gt as k, _n as A, bn as j, i as M, o as N, p as P, u as F, vn as ee, xn as I } from "./dist-iLBdeBDR.js";
6
- import { n as L, t as R } from "./dist-BFawx6IS.js";
1
+ import { At as e, C as t, F as n, Ft as r, N as i, T as a, U as o, W as s, _ as c, c as l, d as u, et as d, f, g as p, h as m, jt as h, k as g, m as _, n as v, st as y, u as b, v as x } from "./vue.runtime.esm-bundler-CjauPXjj.js";
2
+ import { D as S, O as C, i as w, j as T } from "./dist-C04s_fLA.js";
3
+ import { t as E } from "./useI18n-C2xQZ6K9.js";
4
+ import { t as D } from "./useMergeTag-DX0XG5V9.js";
5
+ import { F as O, Gt as k, _n as A, bn as j, i as M, o as N, p as P, u as F, vn as ee, xn as I } from "./dist-DXa1uAMh.js";
6
+ import { n as L, t as R } from "./dist-C9ckKEZL.js";
7
7
  //#region src/extensions/FontSize.ts
8
8
  var te = M.create({
9
9
  name: "fontSize",
@@ -75,7 +75,7 @@ var te = M.create({
75
75
  "aria-label",
76
76
  "data-tooltip",
77
77
  "onKeydown"
78
- ], B = ["aria-label", "onKeydown"], V = ["aria-label"], H = /* @__PURE__ */ c({
78
+ ], B = ["aria-label", "onKeydown"], V = ["aria-label"], H = /* @__PURE__ */ t({
79
79
  __name: "LogicMergeTagNodeView",
80
80
  props: {
81
81
  node: {},
@@ -84,10 +84,10 @@ var te = M.create({
84
84
  deleteNode: { type: Function },
85
85
  updateAttributes: { type: Function }
86
86
  },
87
- setup(o) {
88
- let c = o, { syntax: d } = D(), { t: _ } = E(), x = v(() => C(c.node.attrs.value, d)), w = v(() => S(c.node.attrs.value, d)), T = s(!1), O = s(""), k = s(null), A = !1;
87
+ setup(t) {
88
+ let n = t, { syntax: a } = D(), { t: f } = E(), v = _(() => T(n.node.attrs.value, a)), C = _(() => S(n.node.attrs.value, a)), w = d(!1), O = d(""), k = d(null), A = !1;
89
89
  function j() {
90
- O.value = c.node.attrs.value, A = !1, T.value = !0, i(() => {
90
+ O.value = n.node.attrs.value, A = !1, w.value = !0, g(() => {
91
91
  k.value?.focus(), k.value?.select();
92
92
  });
93
93
  }
@@ -96,56 +96,56 @@ var te = M.create({
96
96
  A = !0;
97
97
  let e = O.value.trim();
98
98
  if (!e) {
99
- T.value = !1;
99
+ w.value = !1;
100
100
  return;
101
101
  }
102
- e !== c.node.attrs.value && c.updateAttributes({
102
+ e !== n.node.attrs.value && n.updateAttributes({
103
103
  value: e,
104
- keyword: C(e, d) ? S(e, d) : ""
105
- }), T.value = !1;
104
+ keyword: T(e, a) ? S(e, a) : ""
105
+ }), w.value = !1;
106
106
  }
107
107
  function N(e) {
108
- e.key === "Enter" ? (e.preventDefault(), M()) : e.key === "Escape" && (T.value = !1);
108
+ e.key === "Enter" ? (e.preventDefault(), M()) : e.key === "Escape" && (w.value = !1);
109
109
  }
110
- return (i, s) => (n(), p(m(R), {
110
+ return (n, a) => (i(), p(y(R), {
111
111
  as: "span",
112
- class: e(x.value ? "tpl-logic-merge-tag-node tpl:group tpl:mx-0.5 tpl:inline-flex tpl:items-center tpl:gap-1 tpl:rounded tpl:px-1.5 tpl:py-0.5 tpl:text-[0.8em] tpl:font-bold tpl:tracking-wide tpl:uppercase tpl:select-none" : ""),
113
- style: a(x.value ? "background-color: transparent; border: 1.5px solid color-mix(in srgb, var(--tpl-primary) 50%, transparent); color: var(--tpl-primary);" : ""),
112
+ class: e(v.value ? "tpl-logic-merge-tag-node tpl:group tpl:mx-0.5 tpl:inline-flex tpl:items-center tpl:gap-1 tpl:rounded tpl:px-1.5 tpl:py-0.5 tpl:text-[0.8em] tpl:font-bold tpl:tracking-wide tpl:uppercase tpl:select-none" : ""),
113
+ style: h(v.value ? "background-color: transparent; border: 1.5px solid color-mix(in srgb, var(--tpl-primary) 50%, transparent); color: var(--tpl-primary);" : ""),
114
114
  contenteditable: "false"
115
115
  }, {
116
- default: l(() => [T.value ? t((n(), u("input", {
116
+ default: o(() => [w.value ? s((i(), x("input", {
117
117
  key: 0,
118
118
  ref_key: "inputRef",
119
119
  ref: k,
120
- "onUpdate:modelValue": s[0] ||= (e) => O.value = e,
120
+ "onUpdate:modelValue": a[0] ||= (e) => O.value = e,
121
121
  type: "text",
122
122
  class: "tpl:w-40 tpl:rounded tpl:border-none tpl:bg-transparent tpl:px-0.5 tpl:py-0 tpl:text-[1em] tpl:font-medium tpl:normal-case tpl:outline-none tpl:text-[var(--tpl-primary)]",
123
123
  onBlur: M,
124
124
  onKeydown: N
125
- }, null, 544)), [[y, O.value]]) : x.value ? (n(), u("span", {
125
+ }, null, 544)), [[l, O.value]]) : v.value ? (i(), x("span", {
126
126
  key: 1,
127
127
  role: "button",
128
128
  tabindex: "0",
129
- "aria-label": m(_).mergeTag.editValue,
129
+ "aria-label": y(f).mergeTag.editValue,
130
130
  class: "tpl-tooltip tpl:cursor-pointer",
131
- "data-tooltip": o.node.attrs.value,
132
- onClick: b(j, ["stop"]),
133
- onKeydown: [h(b(j, ["stop"]), ["enter"]), h(b(j, ["prevent", "stop"]), ["space"])]
134
- }, r(w.value), 41, z)) : (n(), u("span", {
131
+ "data-tooltip": t.node.attrs.value,
132
+ onClick: u(j, ["stop"]),
133
+ onKeydown: [b(u(j, ["stop"]), ["enter"]), b(u(j, ["prevent", "stop"]), ["space"])]
134
+ }, r(C.value), 41, z)) : (i(), x("span", {
135
135
  key: 2,
136
136
  role: "button",
137
137
  tabindex: "0",
138
- "aria-label": m(_).mergeTag.editValue,
139
- onClick: b(j, ["stop"]),
140
- onKeydown: [h(b(j, ["stop"]), ["enter"]), h(b(j, ["prevent", "stop"]), ["space"])]
141
- }, r(o.node.attrs.value), 41, B)), x.value ? (n(), u("button", {
138
+ "aria-label": y(f).mergeTag.editValue,
139
+ onClick: u(j, ["stop"]),
140
+ onKeydown: [b(u(j, ["stop"]), ["enter"]), b(u(j, ["prevent", "stop"]), ["space"])]
141
+ }, r(t.node.attrs.value), 41, B)), v.value ? (i(), x("button", {
142
142
  key: 3,
143
143
  type: "button",
144
- "aria-label": m(_).mergeTag.deleteMergeTag,
144
+ "aria-label": y(f).mergeTag.deleteMergeTag,
145
145
  class: "tpl-merge-tag-delete tpl:flex tpl:size-5 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-full tpl:border-none tpl:bg-transparent tpl:p-0 tpl:opacity-60 tpl:transition-all hover:tpl:opacity-100 tpl:text-[var(--tpl-primary)]",
146
146
  contenteditable: "false",
147
- onClick: s[1] ||= b((...e) => o.deleteNode && o.deleteNode(...e), ["stop", "prevent"])
148
- }, [...s[2] ||= [g("svg", {
147
+ onClick: a[1] ||= u((...e) => t.deleteNode && t.deleteNode(...e), ["stop", "prevent"])
148
+ }, [...a[2] ||= [m("svg", {
149
149
  width: "10",
150
150
  height: "10",
151
151
  viewBox: "0 0 24 24",
@@ -153,17 +153,17 @@ var te = M.create({
153
153
  stroke: "currentColor",
154
154
  "stroke-width": "3",
155
155
  "aria-hidden": "true"
156
- }, [g("line", {
156
+ }, [m("line", {
157
157
  x1: "18",
158
158
  y1: "6",
159
159
  x2: "6",
160
160
  y2: "18"
161
- }), g("line", {
161
+ }), m("line", {
162
162
  x1: "6",
163
163
  y1: "6",
164
164
  x2: "18",
165
165
  y2: "18"
166
- })], -1)]], 8, V)) : f("", !0)]),
166
+ })], -1)]], 8, V)) : c("", !0)]),
167
167
  _: 1
168
168
  }, 8, ["class", "style"]));
169
169
  }
@@ -207,7 +207,7 @@ var G = F.create({
207
207
  return [{ tag: "span[data-logic-merge-tag]" }];
208
208
  },
209
209
  renderHTML({ node: e, HTMLAttributes: t }) {
210
- if (!C(e.attrs.value, this.options.syntax)) return [
210
+ if (!T(e.attrs.value, this.options.syntax)) return [
211
211
  "span",
212
212
  {},
213
213
  e.attrs.value
@@ -236,7 +236,7 @@ var G = F.create({
236
236
  find: RegExp(this.options.syntax.logic.source + "$", ""),
237
237
  handler: ({ state: e, range: t, match: n }) => {
238
238
  let r = n[0];
239
- if (!C(r, this.options.syntax)) return;
239
+ if (!T(r, this.options.syntax)) return;
240
240
  let i = S(r, this.options.syntax), a = this.type.create({
241
241
  value: r,
242
242
  keyword: i
@@ -250,7 +250,7 @@ var G = F.create({
250
250
  find: new RegExp(this.options.syntax.logic.source, "g"),
251
251
  handler: ({ state: e, range: t, match: n }) => {
252
252
  let r = n[0];
253
- if (!C(r, this.options.syntax)) return;
253
+ if (!T(r, this.options.syntax)) return;
254
254
  let i = S(r, this.options.syntax), a = this.type.create({
255
255
  value: r,
256
256
  keyword: i
@@ -263,7 +263,7 @@ var G = F.create({
263
263
  "aria-label",
264
264
  "data-tooltip",
265
265
  "onKeydown"
266
- ], q = ["aria-label"], J = /* @__PURE__ */ c({
266
+ ], q = ["aria-label"], J = /* @__PURE__ */ t({
267
267
  __name: "MergeTagNodeView",
268
268
  props: {
269
269
  node: {},
@@ -271,53 +271,53 @@ var G = F.create({
271
271
  updateAttributes: { type: Function }
272
272
  },
273
273
  setup(e) {
274
- let a = e, { getMergeTagLabel: o } = D(), { t: c } = E(), d = v(() => o(a.node.attrs.value)), f = s(!1), _ = s(""), x = s(null);
274
+ let t = e, { getMergeTagLabel: n } = D(), { t: a } = E(), c = _(() => n(t.node.attrs.value)), f = d(!1), h = d(""), v = d(null);
275
275
  function S() {
276
- _.value = a.node.attrs.value, f.value = !0, i(() => {
277
- x.value?.focus(), x.value?.select();
276
+ h.value = t.node.attrs.value, f.value = !0, g(() => {
277
+ v.value?.focus(), v.value?.select();
278
278
  });
279
279
  }
280
280
  function C() {
281
- let e = _.value.trim();
282
- e && e !== a.node.attrs.value && a.updateAttributes({
281
+ let e = h.value.trim();
282
+ e && e !== t.node.attrs.value && t.updateAttributes({
283
283
  value: e,
284
- label: o(e)
284
+ label: n(e)
285
285
  }), f.value = !1;
286
286
  }
287
287
  function w(e) {
288
288
  e.key === "Enter" ? (e.preventDefault(), C()) : e.key === "Escape" && (f.value = !1);
289
289
  }
290
- return (i, a) => (n(), p(m(R), {
290
+ return (t, n) => (i(), p(y(R), {
291
291
  as: "span",
292
292
  class: "tpl-merge-tag-node tpl:group tpl:mx-0.5 tpl:inline-flex tpl:items-center tpl:gap-1 tpl:rounded tpl:px-1.5 tpl:py-0.5 tpl:text-[0.9em] tpl:font-medium tpl:select-none tpl:text-[var(--tpl-primary)]",
293
293
  style: { "background-color": "color-mix(in srgb, var(--tpl-primary) 20%, transparent)" },
294
294
  contenteditable: "false"
295
295
  }, {
296
- default: l(() => [f.value ? t((n(), u("input", {
296
+ default: o(() => [f.value ? s((i(), x("input", {
297
297
  key: 0,
298
298
  ref_key: "inputRef",
299
- ref: x,
300
- "onUpdate:modelValue": a[0] ||= (e) => _.value = e,
299
+ ref: v,
300
+ "onUpdate:modelValue": n[0] ||= (e) => h.value = e,
301
301
  type: "text",
302
302
  class: "tpl:w-32 tpl:rounded tpl:border-none tpl:bg-transparent tpl:px-0.5 tpl:py-0 tpl:text-[1em] tpl:font-medium tpl:outline-none tpl:text-[var(--tpl-primary)]",
303
303
  onBlur: C,
304
304
  onKeydown: w
305
- }, null, 544)), [[y, _.value]]) : (n(), u("span", {
305
+ }, null, 544)), [[l, h.value]]) : (i(), x("span", {
306
306
  key: 1,
307
307
  role: "button",
308
308
  tabindex: "0",
309
- "aria-label": m(c).mergeTag.editValue,
309
+ "aria-label": y(a).mergeTag.editValue,
310
310
  class: "tpl-tooltip tpl:cursor-pointer",
311
311
  "data-tooltip": e.node.attrs.value,
312
- onClick: b(S, ["stop"]),
313
- onKeydown: [h(b(S, ["stop"]), ["enter"]), h(b(S, ["prevent", "stop"]), ["space"])]
314
- }, r(d.value), 41, K)), g("button", {
312
+ onClick: u(S, ["stop"]),
313
+ onKeydown: [b(u(S, ["stop"]), ["enter"]), b(u(S, ["prevent", "stop"]), ["space"])]
314
+ }, r(c.value), 41, K)), m("button", {
315
315
  type: "button",
316
- "aria-label": m(c).mergeTag.deleteMergeTag,
316
+ "aria-label": y(a).mergeTag.deleteMergeTag,
317
317
  class: "tpl-merge-tag-delete tpl:flex tpl:size-5 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-full tpl:border-none tpl:bg-transparent tpl:p-0 tpl:opacity-60 tpl:transition-all hover:tpl:opacity-100 tpl:text-[var(--tpl-primary)]",
318
318
  contenteditable: "false",
319
- onClick: a[1] ||= b((...t) => e.deleteNode && e.deleteNode(...t), ["stop", "prevent"])
320
- }, [...a[2] ||= [g("svg", {
319
+ onClick: n[1] ||= u((...t) => e.deleteNode && e.deleteNode(...t), ["stop", "prevent"])
320
+ }, [...n[2] ||= [m("svg", {
321
321
  width: "10",
322
322
  height: "10",
323
323
  viewBox: "0 0 24 24",
@@ -325,12 +325,12 @@ var G = F.create({
325
325
  stroke: "currentColor",
326
326
  "stroke-width": "3",
327
327
  "aria-hidden": "true"
328
- }, [g("line", {
328
+ }, [m("line", {
329
329
  x1: "18",
330
330
  y1: "6",
331
331
  x2: "6",
332
332
  y2: "18"
333
- }), g("line", {
333
+ }), m("line", {
334
334
  x1: "6",
335
335
  y1: "6",
336
336
  x2: "18",
@@ -366,7 +366,7 @@ var G = F.create({
366
366
  return [{ tag: "span[data-merge-tag]" }];
367
367
  },
368
368
  renderHTML({ node: e, HTMLAttributes: t }) {
369
- let n = T(e.attrs.value, this.options.mergeTags);
369
+ let n = C(e.attrs.value, this.options.mergeTags);
370
370
  return [
371
371
  "span",
372
372
  k(t, {
@@ -395,7 +395,7 @@ var G = F.create({
395
395
  return [new N({
396
396
  find: RegExp(this.options.syntax.value.source + "$", ""),
397
397
  handler: ({ state: e, range: t, match: n }) => {
398
- let r = n[0], i = T(r, this.options.mergeTags), a = this.type.create({
398
+ let r = n[0], i = C(r, this.options.mergeTags), a = this.type.create({
399
399
  label: i,
400
400
  value: r
401
401
  });
@@ -407,7 +407,7 @@ var G = F.create({
407
407
  return [new P({
408
408
  find: new RegExp(this.options.syntax.value.source, "g"),
409
409
  handler: ({ state: e, range: t, match: n }) => {
410
- let r = n[0], i = T(r, this.options.mergeTags), a = this.type.create({
410
+ let r = n[0], i = C(r, this.options.mergeTags), a = this.type.create({
411
411
  label: i,
412
412
  value: r
413
413
  });
@@ -626,7 +626,7 @@ var ce = se, le = ["id"], ue = {
626
626
  "data-merge-tag-value",
627
627
  "onMousedown",
628
628
  "onMousemove"
629
- ], X = { class: "tpl:font-medium" }, fe = { class: "tpl:text-[var(--tpl-text-dim)] tpl:font-mono" }, pe = /* @__PURE__ */ c({
629
+ ], X = { class: "tpl:font-medium" }, fe = { class: "tpl:text-[var(--tpl-text-dim)] tpl:font-mono" }, pe = /* @__PURE__ */ t({
630
630
  __name: "MergeTagSuggestionList",
631
631
  props: {
632
632
  items: {},
@@ -636,27 +636,27 @@ var ce = se, le = ["id"], ue = {
636
636
  },
637
637
  emits: ["select", "hover"],
638
638
  setup(t) {
639
- let i = t;
640
- function a(e) {
641
- return i.listId ? `${i.listId}-opt-${e}` : void 0;
639
+ let a = t;
640
+ function o(e) {
641
+ return a.listId ? `${a.listId}-opt-${e}` : void 0;
642
642
  }
643
- return (i, s) => (n(), u("div", {
643
+ return (a, s) => (i(), x("div", {
644
644
  id: t.listId,
645
645
  class: "tpl:min-w-[200px] tpl:max-w-[320px] tpl:max-h-[50vh] tpl:overflow-y-auto tpl:rounded-[var(--tpl-radius)] tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-elevated)] tpl:py-1 tpl:shadow-lg",
646
646
  role: "listbox",
647
647
  "data-testid": "merge-tag-suggestion-list"
648
- }, [t.items.length === 0 ? (n(), u("div", ue, r(t.emptyText), 1)) : f("", !0), (n(!0), u(d, null, o(t.items, (o, s) => (n(), u("button", {
649
- key: o.value,
650
- id: a(s),
648
+ }, [t.items.length === 0 ? (i(), x("div", ue, r(t.emptyText), 1)) : c("", !0), (i(!0), x(f, null, n(t.items, (n, s) => (i(), x("button", {
649
+ key: n.value,
650
+ id: o(s),
651
651
  type: "button",
652
652
  role: "option",
653
653
  "aria-selected": s === t.selectedIndex,
654
654
  "data-selected": s === t.selectedIndex ? "true" : "false",
655
- "data-merge-tag-value": o.value,
655
+ "data-merge-tag-value": n.value,
656
656
  class: e(["tpl:flex tpl:w-full tpl:flex-col tpl:items-start tpl:gap-0.5 tpl:px-3 tpl:py-1.5 tpl:text-left tpl:text-xs tpl:transition-colors", s === t.selectedIndex ? "tpl:bg-[var(--tpl-primary-light)] tpl:text-[var(--tpl-primary)]" : "tpl:text-[var(--tpl-text)] hover:tpl:bg-[var(--tpl-bg-hover)]"]),
657
- onMousedown: b((e) => i.$emit("select", o), ["prevent", "stop"]),
658
- onMousemove: (e) => s !== t.selectedIndex && i.$emit("hover", s)
659
- }, [g("span", X, r(o.label), 1), g("span", fe, r(o.value), 1)], 42, de))), 128))], 8, le));
657
+ onMousedown: u((e) => a.$emit("select", n), ["prevent", "stop"]),
658
+ onMousemove: (e) => s !== t.selectedIndex && a.$emit("hover", s)
659
+ }, [m("span", X, r(n.label), 1), m("span", fe, r(n.value), 1)], 42, de))), 128))], 8, le));
660
660
  }
661
661
  }), Z = 10, me = 0;
662
662
  function Q(e, t) {
@@ -695,14 +695,14 @@ var he = M.create({
695
695
  }).run();
696
696
  },
697
697
  render: () => {
698
- let e = null, n = null, r = null, i = s([]), a = s(0), o = null, c = `tpl-merge-tag-suggestion-${++me}`, l = null, u = [];
699
- function d() {
700
- g(l?.() ?? null);
701
- }
698
+ let e = null, n = null, r = null, i = d([]), o = d(0), s = null, c = `tpl-merge-tag-suggestion-${++me}`, l = null, u = [];
702
699
  function f() {
703
- d(), requestAnimationFrame(d);
700
+ _(l?.() ?? null);
701
+ }
702
+ function p() {
703
+ f(), requestAnimationFrame(f);
704
704
  }
705
- function p(e) {
705
+ function m(e) {
706
706
  let t = [], n = e?.parentElement ?? null;
707
707
  for (; n && n !== document.body && n !== document.documentElement;) {
708
708
  let e = window.getComputedStyle(n), r = e.overflow + e.overflowX + e.overflowY;
@@ -710,19 +710,19 @@ var he = M.create({
710
710
  }
711
711
  return t;
712
712
  }
713
- function m(e) {
714
- u = [window, ...p(e)];
715
- for (let e of u) e.addEventListener("scroll", d, {
713
+ function h(e) {
714
+ u = [window, ...m(e)];
715
+ for (let e of u) e.addEventListener("scroll", f, {
716
716
  passive: !0,
717
717
  capture: !0
718
718
  });
719
- window.addEventListener("resize", d, { passive: !0 });
719
+ window.addEventListener("resize", f, { passive: !0 });
720
720
  }
721
- function h() {
722
- for (let e of u) e.removeEventListener("scroll", d, { capture: !0 });
723
- window.removeEventListener("resize", d), u = [];
721
+ function g() {
722
+ for (let e of u) e.removeEventListener("scroll", f, { capture: !0 });
723
+ window.removeEventListener("resize", f), u = [];
724
724
  }
725
- function g(e) {
725
+ function _(e) {
726
726
  if (!n || !e || e.bottom < 0 || e.top > window.innerHeight) return;
727
727
  n.style.position = "fixed", n.style.left = `${e.left}px`, n.style.zIndex = "9999", n.style.top = `${e.bottom}px`;
728
728
  let t = n.offsetHeight;
@@ -731,7 +731,7 @@ var he = M.create({
731
731
  n.style.top = `${r}px`;
732
732
  }
733
733
  }
734
- function v(e, t) {
734
+ function y(e, t) {
735
735
  let n = t?.closest("[data-tpl-theme]");
736
736
  if (!n) return;
737
737
  let r = n.getAttribute("data-tpl-theme");
@@ -743,48 +743,48 @@ var he = M.create({
743
743
  }
744
744
  e.style.fontFamily = i.fontFamily, e.style.fontSize = i.fontSize, e.style.lineHeight = i.lineHeight;
745
745
  }
746
- function y(e) {
746
+ function b(e) {
747
747
  r && (e ? (r.setAttribute("role", "combobox"), r.setAttribute("aria-haspopup", "listbox"), r.setAttribute("aria-expanded", "true"), r.setAttribute("aria-controls", c)) : (r.removeAttribute("aria-expanded"), r.removeAttribute("aria-controls"), r.removeAttribute("aria-activedescendant"), r.removeAttribute("aria-haspopup"), r.removeAttribute("role")));
748
748
  }
749
- function b() {
749
+ function x() {
750
750
  if (r) {
751
751
  if (i.value.length === 0) {
752
752
  r.removeAttribute("aria-activedescendant");
753
753
  return;
754
754
  }
755
- r.setAttribute("aria-activedescendant", `${c}-opt-${a.value}`);
755
+ r.setAttribute("aria-activedescendant", `${c}-opt-${o.value}`);
756
756
  }
757
757
  }
758
758
  function S(e) {
759
- o?.(e);
759
+ s?.(e);
760
760
  }
761
761
  return {
762
- onStart: (s) => {
763
- i.value = s.items, a.value = 0, o = (e) => s.command(e), n = document.createElement("div"), n.setAttribute("data-testid", "merge-tag-suggestion-popup");
764
- let u = s.editor.view?.dom;
765
- r = u ?? null, v(n, u ?? null), document.body.appendChild(n), e = _({ render() {
766
- return x(pe, {
762
+ onStart: (u) => {
763
+ i.value = u.items, o.value = 0, s = (e) => u.command(e), n = document.createElement("div"), n.setAttribute("data-testid", "merge-tag-suggestion-popup");
764
+ let d = u.editor.view?.dom;
765
+ r = d ?? null, y(n, d ?? null), document.body.appendChild(n), e = v({ render() {
766
+ return a(pe, {
767
767
  items: i.value,
768
- selectedIndex: a.value,
768
+ selectedIndex: o.value,
769
769
  emptyText: t,
770
770
  listId: c,
771
771
  onSelect: (e) => S(e),
772
772
  onHover: (e) => {
773
- a.value = e, b();
773
+ o.value = e, x();
774
774
  }
775
775
  });
776
- } }), e.mount(n), y(!0), b(), l = s.clientRect ?? null, f(), m(u ?? null);
776
+ } }), e.mount(n), b(!0), x(), l = u.clientRect ?? null, p(), h(d ?? null);
777
777
  },
778
778
  onUpdate: (e) => {
779
- i.value = e.items, a.value >= e.items.length && (a.value = 0), o = (t) => e.command(t), b(), l = e.clientRect ?? null, f();
779
+ i.value = e.items, o.value >= e.items.length && (o.value = 0), s = (t) => e.command(t), x(), l = e.clientRect ?? null, p();
780
780
  },
781
781
  onKeyDown: (e) => {
782
782
  if (e.event.key === "Escape") return !0;
783
- let t = $(e.event, i.value, a, S);
784
- return t && b(), t;
783
+ let t = $(e.event, i.value, o, S);
784
+ return t && x(), t;
785
785
  },
786
786
  onExit: () => {
787
- h(), y(!1), e?.unmount(), n?.remove(), e = null, n = null, r = null, o = null, l = null;
787
+ g(), b(!1), e?.unmount(), n?.remove(), e = null, n = null, r = null, s = null, l = null;
788
788
  }
789
789
  };
790
790
  }
@@ -1,4 +1,4 @@
1
- import { t as e } from "./createLucideIcon-C3pa2siy.js";
1
+ import { t as e } from "./createLucideIcon-ClREiSx3.js";
2
2
  var t = e("image-up", [
3
3
  ["path", {
4
4
  d: "M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21",
package/dist/index.d.ts CHANGED
@@ -43,6 +43,8 @@ export { CustomBlockDefinition }
43
43
 
44
44
  export { CustomFont }
45
45
 
46
+ export declare const DEFAULT_EDITOR_TOUR_STORAGE_KEY = "templatical-editor-tour-dismissed";
47
+
46
48
  export { DisplayConditionsConfig }
47
49
 
48
50
  export declare interface EditorCapabilities {
@@ -63,6 +65,48 @@ export declare interface EditorCapabilities {
63
65
  };
64
66
  }
65
67
 
68
+ export declare interface EditorTourConfig {
69
+ /**
70
+ * Steps to show in order. Omit to use built-in defaults (canvas, block rail, right sidebar).
71
+ */
72
+ steps?: EditorTourStep[];
73
+ /** Start automatically after mount when the tour has not been dismissed. Default `false`. */
74
+ autoStart?: boolean;
75
+ /**
76
+ * `localStorage` key for dismissal persistence.
77
+ * Set to `false` to disable persistence (tour can restart every load).
78
+ * Default key is `DEFAULT_EDITOR_TOUR_STORAGE_KEY` when omitted.
79
+ */
80
+ storageKey?: string | false;
81
+ }
82
+
83
+ export declare interface EditorTourStartOptions {
84
+ /** Zero-based index into the active (filtered) step list */
85
+ stepIndex?: number;
86
+ }
87
+
88
+ export declare interface EditorTourStep {
89
+ /** Any valid `document.querySelector` selector (editor internals or host DOM). */
90
+ target: string;
91
+ title: string;
92
+ text: string;
93
+ placement?: EditorTourStepPlacement;
94
+ /**
95
+ * When the target is absent, skip this step. Default `true`.
96
+ * Set `false` to keep the step even if the node is missing (rect will be null — avoided).
97
+ */
98
+ skipIfMissing?: boolean;
99
+ }
100
+
101
+ /**
102
+ * Guided tour types for Templatical Editor `init()` / `initCloud()`.
103
+ */
104
+ /** Reserved tooltip placement hints for layout inside the viewport. */
105
+ export declare type EditorTourStepPlacement = "canvas" | "sidebar" | "rightSidebar" | "below";
106
+
107
+ /** Email vs popup builder chrome (sidebar layout). */
108
+ export declare type EditorType = "email" | "popup";
109
+
66
110
  export declare interface FontOption {
67
111
  value: string;
68
112
  label: string;
@@ -123,6 +167,14 @@ export declare interface TemplaticalCloudEditorConfig {
123
167
  * Cloud white-label plans hide the footer regardless of this setting.
124
168
  */
125
169
  branding?: boolean;
170
+ /**
171
+ * Multi-step canvas for popup-style flows. See {@link TemplaticalEditorConfig.multiPageCanvas}.
172
+ */
173
+ multiPageCanvas?: boolean;
174
+ /**
175
+ * Same semantics as {@link TemplaticalEditorConfig.editorType} (popup adds icon rail).
176
+ */
177
+ editorType?: EditorType | string;
126
178
  ai?: AiConfig | false;
127
179
  commenting?: boolean;
128
180
  collaboration?: CollaborationConfig;
@@ -146,25 +198,27 @@ export declare interface TemplaticalCloudEditorConfig {
146
198
  onRequestMedia?: (context: MediaRequestContext_2) => Promise<MediaItem | null>;
147
199
  onBeforeTestEmail?: (html: string) => string | Promise<string>;
148
200
  /**
149
- * Accessibility linter (`@templatical/quality`) configuration. Cloud
201
+ * Accessibility linter (`@aswin.dev/quality`) configuration. Cloud
150
202
  * additionally merges `planConfig.accessibility` from the server (server
151
203
  * policy wins on conflict) — this option sets the consumer-supplied baseline.
152
204
  */
153
205
  accessibility?: A11yOptions_2;
206
+ /** Optional guided tour (same shape as the OSS editor `tour` option). */
207
+ tour?: EditorTourConfig;
154
208
  }
155
209
 
156
210
  export declare interface TemplaticalEditor extends TemplaticalEditorBase {
157
211
  /**
158
212
  * Render the current template to an MJML string. Resolves custom blocks
159
213
  * via the editor's internal block registry. Throws if the optional
160
- * `@templatical/renderer` package is not installed.
214
+ * `@aswin.dev/renderer` package is not installed.
161
215
  */
162
216
  toMjml(): Promise<string>;
163
217
  /**
164
218
  * Render a single custom block to its HTML representation, using the
165
219
  * registered custom block definition's template and the block's current
166
220
  * field values. Exposed for headless callers that want to reuse the
167
- * editor's renderer (e.g., to drive `@templatical/renderer`'s
221
+ * editor's renderer (e.g., to drive `@aswin.dev/renderer`'s
168
222
  * `renderCustomBlock` option from outside the editor instance).
169
223
  */
170
224
  renderCustomBlock(block: CustomBlock): Promise<string>;
@@ -175,6 +229,12 @@ declare interface TemplaticalEditorBase {
175
229
  setContent(content: TemplateContent): void;
176
230
  setTheme(theme: UiTheme): void;
177
231
  unmount(): void;
232
+ /** Requires `tour` in editor config; otherwise no-ops. */
233
+ startTour(options?: EditorTourStartOptions): void;
234
+ dismissTour(): void;
235
+ resetTourDismissed(): void;
236
+ /** `true` when no tour is configured or the user dismissed a persisted tour. */
237
+ isTourDismissed(): boolean;
178
238
  }
179
239
 
180
240
  export declare interface TemplaticalEditorConfig {
@@ -199,14 +259,31 @@ export declare interface TemplaticalEditorConfig {
199
259
  */
200
260
  branding?: boolean;
201
261
  /**
202
- * Accessibility linter (`@templatical/quality`) configuration.
262
+ * Multi-step canvas (popup flows): step strip above the canvas; content exposes
263
+ * {@link TemplateContent.canvasPages} and {@link TemplateContent.activeCanvasPageId}.
264
+ */
265
+ multiPageCanvas?: boolean;
266
+ /**
267
+ * `'email'` (default): single hover-expand block rail. `'popup'`: adds a left icon rail
268
+ * (Design, Blocks, Tab, …) beside the same block palette when Blocks is selected.
269
+ * The value is provided through `EDITOR_TYPE_KEY`. Case-insensitive strings such as
270
+ * `'POPUP'` are accepted.
271
+ */
272
+ editorType?: EditorType | string;
273
+ /**
274
+ * Accessibility linter (`@aswin.dev/quality`) configuration.
203
275
  *
204
276
  * - When unset, the linter loads on demand once the user opens the panel.
205
277
  * - When `disabled: true`, the optional peer is never imported (saves the
206
278
  * chunk download) and the sidebar tab + inline badges are suppressed.
207
- * - `rules`/`thresholds` follow the shape exported by `@templatical/quality`.
279
+ * - `rules`/`thresholds` follow the shape exported by `@aswin.dev/quality`.
208
280
  */
209
281
  accessibility?: A11yOptions;
282
+ /**
283
+ * Optional spotlight tour (inside or outside the editor DOM via selectors).
284
+ * Use `startTour` / `isTourDismissed` on the instance; default copy lives under locale `tour.defaults`.
285
+ */
286
+ tour?: EditorTourConfig;
210
287
  }
211
288
 
212
289
  export { ThemeOverrides }
@@ -248,9 +325,9 @@ declare module "@tiptap/core" {
248
325
 
249
326
  declare module "@tiptap/core" {
250
327
  interface Commands<ReturnType> {
251
- lineHeight: {
252
- setLineHeight: (lineHeight: string) => ReturnType;
253
- unsetLineHeight: () => ReturnType;
328
+ fontSize: {
329
+ setFontSize: (size: string) => ReturnType;
330
+ unsetFontSize: () => ReturnType;
254
331
  };
255
332
  }
256
333
  }
@@ -267,9 +344,9 @@ declare module "@tiptap/core" {
267
344
 
268
345
  declare module "@tiptap/core" {
269
346
  interface Commands<ReturnType> {
270
- fontSize: {
271
- setFontSize: (size: string) => ReturnType;
272
- unsetFontSize: () => ReturnType;
347
+ lineHeight: {
348
+ setLineHeight: (lineHeight: string) => ReturnType;
349
+ unsetLineHeight: () => ReturnType;
273
350
  };
274
351
  }
275
352
  }
@@ -1,4 +1,4 @@
1
- import { t as e } from "./createLucideIcon-C3pa2siy.js";
1
+ import { t as e } from "./createLucideIcon-ClREiSx3.js";
2
2
  var t = e("info", [
3
3
  ["circle", {
4
4
  cx: "12",
@@ -0,0 +1,10 @@
1
+ import { D as e } from "./vue.runtime.esm-bundler-CjauPXjj.js";
2
+ //#region src/keys.ts
3
+ var t = Symbol("translations"), n = Symbol("editor"), r = Symbol("editorType"), i = Symbol("popupRailTab"), a = Symbol("history"), o = Symbol("blockActions"), s = Symbol("conditionPreview"), c = Symbol("fontsManager"), l = Symbol("themeStyles"), u = Symbol("tplUiTheme"), d = Symbol("blockDefaults"), f = Symbol("blockRegistry"), p = Symbol("customBlockDefinitions"), m = Symbol("mergeTags"), h = Symbol("mergeTagSyntax"), g = Symbol("onRequestMergeTag"), _ = Symbol("mergeTagAutocomplete"), v = Symbol("onRequestMedia"), y = Symbol("displayConditions"), b = Symbol("allowCustomConditions"), x = Symbol("capabilities"), S = Symbol("keyboardReorder"), C = Symbol("accessibilityLint"), w = Symbol("authManager"), T = Symbol("aiConfig"), E = Symbol("comments"), D = Symbol("savedModulesHeadless"), O = Symbol("scoring"), k = Symbol("cloudTranslations");
4
+ function A(t, n) {
5
+ let r = e(t, null);
6
+ if (r == null) throw Error(`${n} requires a provider for ${t.description ?? "unknown key"}. Ensure it is a descendant of Editor or CloudEditor.`);
7
+ return r;
8
+ }
9
+ //#endregion
10
+ export { A, g as C, l as D, O as E, t as O, v as S, D as T, a as _, o as a, _ as b, x as c, s as d, p as f, c as g, r as h, w as i, u as k, k as l, n as m, T as n, d as o, y as p, b as r, f as s, C as t, E as u, S as v, i as w, h as x, m as y };