@templatical/editor 0.0.1 → 0.0.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 (130) hide show
  1. package/dist/AiChatSidebar-busJk9hm.js +214 -0
  2. package/dist/AiFeatureMenu-DLGv_-pj.js +63 -0
  3. package/dist/CloudEditor-BDnHd6Um.js +919 -0
  4. package/dist/CollaboratorBar-Dv3l52vC.js +91 -0
  5. package/dist/CommentsSidebar-4tjp0VU5.js +439 -0
  6. package/dist/DesignReferenceSidebar-CmwXvltV.js +273 -0
  7. package/dist/LoadingTrack-vK8W2PJf.js +10 -0
  8. package/dist/ModuleBrowserModal-lrk3Fr0H.js +205 -0
  9. package/dist/ModulePreviewCanvas-BcBJLnwL.js +106 -0
  10. package/dist/ParagraphEditor-DH8cSC6m.js +625 -0
  11. package/dist/RichTextEditorContent-CQqodi7p.js +133 -0
  12. package/dist/SaveModuleDialog-Bmzi72td.js +122 -0
  13. package/dist/SnapshotHistory-AEgi9Xsn.js +126 -0
  14. package/dist/TemplateScoringPanel-CTgMtc0-.js +249 -0
  15. package/dist/TestEmailModal-Dpq1is9S.js +94 -0
  16. package/dist/TitleEditor-CLcDdcWI.js +167 -0
  17. package/dist/TplModal-CGzRjR96.js +44 -0
  18. package/dist/_plugin-vue_export-helper-B1-bu7yR.js +47 -0
  19. package/dist/blockTypeIcons-BpPTqcok.js +126 -0
  20. package/dist/cdn/chunks/ParagraphEditor-CCtWbGDv.js +3 -0
  21. package/dist/cdn/chunks/ParagraphEditor-CCtWbGDv.js.map +1 -0
  22. package/dist/cdn/chunks/RichTextEditorContent-BUD9veXd.js +2 -0
  23. package/dist/cdn/chunks/RichTextEditorContent-BUD9veXd.js.map +1 -0
  24. package/dist/cdn/chunks/TitleEditor-e_UTyxjd.js +3 -0
  25. package/dist/cdn/chunks/TitleEditor-e_UTyxjd.js.map +1 -0
  26. package/dist/cdn/chunks/dist-0UheN8rK.js +1 -0
  27. package/dist/cdn/chunks/dist-55mmbGQ9.js +1 -0
  28. package/dist/cdn/chunks/dist-B31mxKyP.js +1 -0
  29. package/dist/cdn/chunks/dist-B5JI9nIg.js +1 -0
  30. package/dist/cdn/chunks/dist-B93vLKhU.js +1 -0
  31. package/dist/cdn/chunks/dist-BDt3FJvj.js +1 -0
  32. package/dist/cdn/chunks/dist-BJRuFHmi.js +1 -0
  33. package/dist/cdn/chunks/dist-BKSzrf0L.js +1 -0
  34. package/dist/cdn/chunks/dist-BL8c5gYQ.js +1 -0
  35. package/dist/cdn/chunks/dist-CYThWMP5.js +1 -0
  36. package/dist/cdn/chunks/dist-DxZbPJYt.js +1 -0
  37. package/dist/cdn/chunks/draggable-ClUwYCFL.js +17 -0
  38. package/dist/cdn/chunks/draggable-ClUwYCFL.js.map +1 -0
  39. package/dist/cdn/chunks/emojiData-6fVLNqeH.js +2 -0
  40. package/dist/cdn/chunks/emojiData-6fVLNqeH.js.map +1 -0
  41. package/dist/cdn/chunks/extensions-ea_ewKUl.js +2 -0
  42. package/dist/cdn/chunks/extensions-ea_ewKUl.js.map +1 -0
  43. package/dist/cdn/chunks/icons-vmLJTaJk.js +2 -0
  44. package/dist/cdn/chunks/icons-vmLJTaJk.js.map +1 -0
  45. package/dist/cdn/chunks/rolldown-runtime-BakkzWXw.js +1 -0
  46. package/dist/cdn/chunks/styleConstants-CNejCb-L.js +2 -0
  47. package/dist/cdn/chunks/styleConstants-CNejCb-L.js.map +1 -0
  48. package/dist/cdn/chunks/tiptap-Cya4P9CN.js +145 -0
  49. package/dist/cdn/chunks/tiptap-Cya4P9CN.js.map +1 -0
  50. package/dist/cdn/chunks/useEditorCore-CwuxQuvh.js +2 -0
  51. package/dist/cdn/chunks/useEditorCore-CwuxQuvh.js.map +1 -0
  52. package/dist/cdn/chunks/useMergeTag-DVOz1v9p.js +2 -0
  53. package/dist/cdn/chunks/useMergeTag-DVOz1v9p.js.map +1 -0
  54. package/dist/cdn/editor.css +1 -0
  55. package/dist/cdn/editor.js +2 -0
  56. package/dist/cdn/editor.js.map +1 -0
  57. package/dist/check-B7kDuZmP.js +7 -0
  58. package/dist/chevron-down-DJLW2Q9Z.js +7 -0
  59. package/dist/circle-alert-E2vYPs5r.js +25 -0
  60. package/dist/clock-lWIIQA3C.js +12 -0
  61. package/dist/de-B4Ob4vCo.js +682 -0
  62. package/dist/dist-4LiM9FDd.js +35 -0
  63. package/dist/dist-Bu7veieH.js +776 -0
  64. package/dist/dist-C1BIRHCQ.js +61 -0
  65. package/dist/dist-CG-vEqSU.js +314 -0
  66. package/dist/dist-C_ymrGFi.js +10625 -0
  67. package/dist/dist-ChAGLpWo.js +35 -0
  68. package/dist/dist-D_HQYSY-.js +189 -0
  69. package/dist/dist-DkypH7qG.js +5 -0
  70. package/dist/dist-DmOE-Ubp.js +74 -0
  71. package/dist/dist-DmpMJbmZ.js +513 -0
  72. package/dist/dist-DrvKRSU6.js +47 -0
  73. package/dist/dist-Dxnd0GRf.js +5 -0
  74. package/dist/dist-DysAFIPy.js +2054 -0
  75. package/dist/emojiData-BfWQS72m.js +17 -0
  76. package/dist/en-YXsspZJG.js +682 -0
  77. package/dist/extensions-CKM99njP.js +420 -0
  78. package/dist/formatRelativeTime-DX3FgqN9.js +8 -0
  79. package/dist/i18n-CJsFtdbZ.js +23 -0
  80. package/dist/image-up-X4xIq4ea.js +23 -0
  81. package/dist/keys-Dwa2PmdD.js +10 -0
  82. package/dist/liquid.browser-BemTg3sZ.js +3272 -0
  83. package/dist/loader-circle-BTQQxC3l.js +7 -0
  84. package/dist/message-circle-Blgm6V_h.js +7 -0
  85. package/dist/refresh-cw-Bb4PEeW1.js +44 -0
  86. package/dist/scan-line-7lZPfOdm.js +25 -0
  87. package/dist/send-C0ltAQrv.js +10 -0
  88. package/dist/shield-check-f-qv4RKs.js +10 -0
  89. package/dist/sparkles-KhBCGlqB.js +23 -0
  90. package/dist/styleConstants-D4SOZGBV.js +94 -0
  91. package/dist/styles-DSw1VNU3.js +3406 -0
  92. package/dist/templatical-editor.css +2 -1
  93. package/dist/templatical-editor.js +242 -9
  94. package/dist/templatical-editor.umd.cjs +112 -524
  95. package/dist/timeouts-CmBrLeZA.js +4 -0
  96. package/dist/trash-2-OwjZ-guZ.js +25 -0
  97. package/dist/triangle-alert-DOSRIUYZ.js +17 -0
  98. package/dist/useEditorCore-Cc4RCwWq.js +5556 -0
  99. package/dist/useI18n-DUirdXEX.js +17 -0
  100. package/dist/useMergeTag-DVnlvPYJ.js +33 -0
  101. package/dist/x-CGlq2XQe.js +10 -0
  102. package/package.json +30 -20
  103. package/dist/AiChatSidebar-0vx9TP5B.js +0 -305
  104. package/dist/AiFeatureMenu-CI-v74ND.js +0 -69
  105. package/dist/CloudEditor-Wdfv_9xn.js +0 -1132
  106. package/dist/CollaboratorBar-B3uV4Wtw.js +0 -89
  107. package/dist/CommentsSidebar-PVUlloyB.js +0 -655
  108. package/dist/DesignReferenceSidebar-DAlAWrxU.js +0 -351
  109. package/dist/ModuleBrowserModal-1JEcChd8.js +0 -323
  110. package/dist/ModulePreviewCanvas-Cdp484Ae.js +0 -169
  111. package/dist/SaveModuleDialog-eNyr3XKn.js +0 -168
  112. package/dist/SnapshotHistory-D-ZiIj1v.js +0 -169
  113. package/dist/TemplateScoringPanel-DSZPo15C.js +0 -385
  114. package/dist/TestEmailModal-Cwre5elw.js +0 -128
  115. package/dist/TextEditor-BuUOIByX.js +0 -780
  116. package/dist/de-BWIAblxs.js +0 -685
  117. package/dist/en-cYyUzNV1.js +0 -685
  118. package/dist/index-0tWUczNu.js +0 -47
  119. package/dist/index-4okvXjqk.js +0 -41
  120. package/dist/index-BSc6h5zo.js +0 -967
  121. package/dist/index-CrvwWlhN.js +0 -41
  122. package/dist/index-D-iD-7lO.js +0 -10961
  123. package/dist/index-D-ygXbc8.js +0 -2452
  124. package/dist/index-DbrWKz-e.js +0 -1415
  125. package/dist/index-DeUeHy6g.js +0 -422
  126. package/dist/index-Ude6e9RU.js +0 -41
  127. package/dist/index-ZQzHBwkr.js +0 -12767
  128. package/dist/liquid.browser-CeNxS2GL.js +0 -3493
  129. package/dist/loader-circle-tM9j2mRh.js +0 -13
  130. package/dist/shield-check-Ngi9jAQc.js +0 -20
@@ -0,0 +1,94 @@
1
+ import "./useEditorCore-Cc4RCwWq.js";
2
+ import { t as e } from "./useI18n-DUirdXEX.js";
3
+ import { t } from "./loader-circle-BTQQxC3l.js";
4
+ import { t as n } from "./TplModal-CGzRjR96.js";
5
+ import { Fragment as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, createVNode as l, defineComponent as u, normalizeClass as d, openBlock as f, ref as p, renderList as m, toDisplayString as h, unref as g, vModelSelect as _, watch as v, withCtx as y, withDirectives as b } from "vue";
6
+ //#region src/cloud/components/TestEmailModal.vue?vue&type=script&setup=true&lang.ts
7
+ var x = ["aria-busy"], S = {
8
+ id: "tpl-test-email-title",
9
+ class: "tpl:mb-4 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]"
10
+ }, C = { class: "tpl:mb-3" }, w = { class: "tpl:mb-1.5 tpl:block tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text-muted)]" }, T = ["value"], E = ["disabled"], D = ["value"], O = {
11
+ key: 0,
12
+ role: "alert",
13
+ class: "tpl:mb-3 tpl:text-xs tpl:text-[var(--tpl-danger)]"
14
+ }, k = { class: "tpl:flex tpl:justify-end tpl:gap-2" }, A = ["disabled"], j = ["disabled"], M = {
15
+ key: 0,
16
+ class: "tpl:flex tpl:items-center tpl:gap-1.5"
17
+ }, N = { key: 1 }, P = /* @__PURE__ */ u({
18
+ __name: "TestEmailModal",
19
+ props: {
20
+ visible: { type: Boolean },
21
+ allowedEmails: {},
22
+ isSending: { type: Boolean },
23
+ error: {}
24
+ },
25
+ emits: ["send", "close"],
26
+ setup(u, { emit: P }) {
27
+ let F = u, I = P, { t: L } = e(), R = p("");
28
+ v(() => F.visible, (e) => {
29
+ e && (R.value = F.allowedEmails[0] ?? "");
30
+ });
31
+ function z() {
32
+ !R.value || F.isSending || I("send", R.value);
33
+ }
34
+ function B() {
35
+ F.isSending || I("close");
36
+ }
37
+ function V(e) {
38
+ e.key === "Enter" && !e.shiftKey && (e.preventDefault(), z()), e.key === "Escape" && B();
39
+ }
40
+ return (e, p) => (f(), i(n, {
41
+ visible: u.visible,
42
+ onClose: B,
43
+ onKeydown: V
44
+ }, {
45
+ default: y(() => [s("div", {
46
+ role: "dialog",
47
+ "aria-modal": "true",
48
+ "aria-busy": u.isSending,
49
+ "aria-labelledby": "tpl-test-email-title",
50
+ class: "tpl-scale-in tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-[var(--tpl-radius-lg)] tpl:p-5",
51
+ style: {
52
+ "background-color": "var(--tpl-bg-elevated)",
53
+ "box-shadow": "var(--tpl-shadow-xl)"
54
+ }
55
+ }, [
56
+ s("h3", S, h(g(L).testEmail.title), 1),
57
+ s("div", C, [s("label", w, h(g(L).testEmail.recipientLabel), 1), u.allowedEmails.length === 1 ? (f(), o("input", {
58
+ key: 0,
59
+ type: "text",
60
+ value: R.value,
61
+ disabled: "",
62
+ class: "tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1 tpl:text-sm tpl:opacity-70 tpl:shadow-xs tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]"
63
+ }, null, 8, T)) : b((f(), o("select", {
64
+ key: 1,
65
+ "onUpdate:modelValue": p[0] ||= (e) => R.value = e,
66
+ class: "tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1 tpl:text-sm tpl:shadow-xs tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]",
67
+ disabled: u.isSending
68
+ }, [(f(!0), o(r, null, m(u.allowedEmails, (e) => (f(), o("option", {
69
+ key: e,
70
+ value: e
71
+ }, h(e), 9, D))), 128))], 8, E)), [[_, R.value]])]),
72
+ u.error ? (f(), o("p", O, h(u.error), 1)) : a("", !0),
73
+ s("div", k, [s("button", {
74
+ type: "button",
75
+ class: d(["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)]", { "tpl:cursor-not-allowed tpl:opacity-50": u.isSending }]),
76
+ disabled: u.isSending,
77
+ onClick: B
78
+ }, h(g(L).testEmail.cancel), 11, A), s("button", {
79
+ type: "button",
80
+ 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)]",
81
+ disabled: !R.value || u.isSending,
82
+ onClick: z
83
+ }, [u.isSending ? (f(), o("span", M, [l(g(t), {
84
+ class: "tpl:animate-spin",
85
+ size: 12,
86
+ "stroke-width": 2
87
+ }), c(" " + h(g(L).testEmail.sending), 1)])) : (f(), o("span", N, h(g(L).testEmail.send), 1))], 8, j)])
88
+ ], 8, x)]),
89
+ _: 1
90
+ }, 8, ["visible"]));
91
+ }
92
+ });
93
+ //#endregion
94
+ export { P as default };
@@ -0,0 +1,167 @@
1
+ import { b as e } from "./useEditorCore-Cc4RCwWq.js";
2
+ import { C as t, x as n } from "./keys-Dwa2PmdD.js";
3
+ import { t as r } from "./useI18n-DUirdXEX.js";
4
+ import { a as i, i as a, n as o, r as s, t as c } from "./RichTextEditorContent-CQqodi7p.js";
5
+ import { t as l } from "./loader-circle-BTQQxC3l.js";
6
+ import { t as u } from "./scan-line-7lZPfOdm.js";
7
+ import { Fragment as d, Teleport as f, createBlock as p, createCommentVNode as m, createElementBlock as h, createElementVNode as g, createTextVNode as _, createVNode as v, defineComponent as y, inject as b, isRef as x, normalizeClass as S, normalizeStyle as C, openBlock as w, toDisplayString as T, unref as E } from "vue";
8
+ //#region src/components/blocks/TitleEditor.vue?vue&type=script&setup=true&lang.ts
9
+ var D = { class: "tpl-text-editor-wrapper tpl:relative" }, O = ["data-tpl-theme", "aria-label"], k = ["aria-label", "title"], ee = ["aria-label", "title"], A = ["aria-label", "title"], j = {
10
+ key: 0,
11
+ class: "tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]"
12
+ }, M = ["aria-label", "title"], N = {
13
+ key: 1,
14
+ class: "tpl:flex tpl:items-center tpl:gap-2 tpl:px-2 tpl:text-xs tpl:text-[var(--tpl-text-dim)]"
15
+ }, P = /* @__PURE__ */ y({
16
+ __name: "TitleEditor",
17
+ props: {
18
+ block: {},
19
+ toolbarPosition: {}
20
+ },
21
+ emits: ["done"],
22
+ setup(y, { emit: P }) {
23
+ let F = y, I = P, L = b(n, null), R = b(t, null), { t: z } = r(), { editor: B, EditorContent: V, isLoading: H, initError: U, retry: W, showLinkDialog: G, linkUrl: K, linkDialogRef: q, mergeTagEnabled: J, openLinkDialog: Y, insertLink: X, removeLink: Z, closeLinkDialog: Q, handleLinkKeydown: te, handleAddMergeTag: $ } = e({
24
+ blockId: () => F.block.id,
25
+ blockContent: () => F.block.content,
26
+ onDone: () => I("done"),
27
+ editorName: "TitleEditor",
28
+ async loadExtensions({ mergeTags: e, syntax: t }) {
29
+ let [{ Editor: n, EditorContent: r }, { default: i }, { default: a }, { MergeTagNode: o, LogicMergeTagNode: s }] = await Promise.all([
30
+ import("./dist-DmpMJbmZ.js").then((e) => e.r),
31
+ import("./dist-DysAFIPy.js"),
32
+ import("./dist-Bu7veieH.js"),
33
+ import("./extensions-CKM99njP.js")
34
+ ]);
35
+ return {
36
+ TiptapEditor: n,
37
+ EC: r,
38
+ extensions: [
39
+ i.configure({
40
+ heading: !1,
41
+ codeBlock: !1,
42
+ blockquote: !1,
43
+ horizontalRule: !1,
44
+ bulletList: !1,
45
+ orderedList: !1,
46
+ listItem: !1,
47
+ strike: !1
48
+ }),
49
+ a.configure({
50
+ openOnClick: !1,
51
+ HTMLAttributes: {
52
+ target: "_blank",
53
+ rel: "noopener noreferrer"
54
+ }
55
+ }),
56
+ o.configure({
57
+ mergeTags: e,
58
+ syntax: t
59
+ }),
60
+ s.configure({ syntax: t })
61
+ ]
62
+ };
63
+ }
64
+ });
65
+ return (e, t) => (w(), h("div", D, [
66
+ (w(), p(f, { to: "body" }, [g("div", {
67
+ "data-tpl-theme": E(R),
68
+ role: "toolbar",
69
+ "aria-label": E(z).titleEditor.toolbar,
70
+ class: "tpl tpl-text-toolbar tpl:fixed tpl:z-popover tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-lg tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-3 tpl:py-2 tpl:shadow-lg",
71
+ style: C({
72
+ ...E(L),
73
+ top: `${y.toolbarPosition.top}px`,
74
+ left: `${y.toolbarPosition.left}px`,
75
+ transform: "translateY(-100%)"
76
+ })
77
+ }, [!E(H) && E(B) ? (w(), h(d, { key: 0 }, [
78
+ g("button", {
79
+ type: "button",
80
+ class: S(["tpl-text-toolbar-btn", { "tpl-text-toolbar-btn--active": E(B)?.isActive("bold") }]),
81
+ "aria-label": E(z).titleEditor.bold,
82
+ title: E(z).titleEditor.bold,
83
+ onClick: t[0] ||= (e) => E(B)?.chain().focus().toggleBold().run()
84
+ }, [v(E(i), {
85
+ size: 16,
86
+ "stroke-width": 2.5
87
+ })], 10, k),
88
+ g("button", {
89
+ type: "button",
90
+ class: S(["tpl-text-toolbar-btn", { "tpl-text-toolbar-btn--active": E(B)?.isActive("italic") }]),
91
+ "aria-label": E(z).titleEditor.italic,
92
+ title: E(z).titleEditor.italic,
93
+ onClick: t[1] ||= (e) => E(B)?.chain().focus().toggleItalic().run()
94
+ }, [v(E(a), {
95
+ size: 16,
96
+ "stroke-width": 2
97
+ })], 10, ee),
98
+ t[6] ||= g("span", {
99
+ class: "tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]",
100
+ "aria-hidden": "true"
101
+ }, null, -1),
102
+ g("button", {
103
+ type: "button",
104
+ class: S(["tpl-text-toolbar-btn", { "tpl-text-toolbar-btn--active": E(B)?.isActive("link") }]),
105
+ "aria-label": E(z).titleEditor.addLink,
106
+ title: E(z).titleEditor.addLink,
107
+ onClick: t[2] ||= (...e) => E(Y) && E(Y)(...e)
108
+ }, [v(E(s), {
109
+ size: 16,
110
+ "stroke-width": 2
111
+ })], 10, A),
112
+ E(J) ? (w(), h("span", j)) : m("", !0),
113
+ E(J) ? (w(), h("button", {
114
+ key: 1,
115
+ type: "button",
116
+ class: "tpl:flex tpl:h-8 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:gap-1.5 tpl:rounded tpl:border-none tpl:bg-transparent tpl:px-2.5 tpl:text-xs tpl:font-medium tpl:text-[var(--tpl-text)] tpl:transition-all tpl:duration-150 tpl:hover:bg-[var(--tpl-bg-active)]",
117
+ "aria-label": E(z).mergeTag.add,
118
+ title: E(z).mergeTag.add,
119
+ onClick: t[3] ||= (...e) => E($) && E($)(...e)
120
+ }, [v(E(u), {
121
+ size: 16,
122
+ "stroke-width": 2
123
+ }), _(" " + T(E(z).mergeTag.add), 1)], 8, M)) : m("", !0)
124
+ ], 64)) : (w(), h("div", N, [v(E(l), {
125
+ class: "tpl-spinner",
126
+ size: 14,
127
+ "stroke-width": 2
128
+ }), _(" " + T(E(z).errors.editorLoading), 1)]))], 12, O)])),
129
+ v(c, {
130
+ editor: E(B),
131
+ "editor-content": E(V),
132
+ "is-loading": E(H),
133
+ "init-error": E(U),
134
+ onRetry: E(W)
135
+ }, null, 8, [
136
+ "editor",
137
+ "editor-content",
138
+ "is-loading",
139
+ "init-error",
140
+ "onRetry"
141
+ ]),
142
+ v(o, {
143
+ visible: E(G),
144
+ "is-editing-link": E(B)?.isActive("link") ?? !1,
145
+ "dialog-ref": E(q),
146
+ "onUpdate:dialogRef": t[4] ||= (e) => x(q) ? q.value = e : null,
147
+ "link-url": E(K),
148
+ "onUpdate:linkUrl": t[5] ||= (e) => x(K) ? K.value = e : null,
149
+ onClose: E(Q),
150
+ onInsert: E(X),
151
+ onRemove: E(Z),
152
+ onKeydown: E(te)
153
+ }, null, 8, [
154
+ "visible",
155
+ "is-editing-link",
156
+ "dialog-ref",
157
+ "link-url",
158
+ "onClose",
159
+ "onInsert",
160
+ "onRemove",
161
+ "onKeydown"
162
+ ])
163
+ ]));
164
+ }
165
+ });
166
+ //#endregion
167
+ export { P as default };
@@ -0,0 +1,44 @@
1
+ import { w as e } from "./useEditorCore-Cc4RCwWq.js";
2
+ import { C as t } from "./keys-Dwa2PmdD.js";
3
+ import { Teleport as n, Transition as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createVNode as l, defineComponent as u, inject as d, openBlock as f, ref as p, renderSlot as m, unref as h, withCtx as g, withModifiers as _ } from "vue";
4
+ //#region src/cloud/components/TplModal.vue?vue&type=script&setup=true&lang.ts
5
+ var v = ["data-tpl-theme"], y = /* @__PURE__ */ u({
6
+ __name: "TplModal",
7
+ props: { visible: { type: Boolean } },
8
+ emits: ["close", "keydown"],
9
+ setup(u, { emit: y }) {
10
+ let b = u, x = y, S = p(null);
11
+ e(S, i(() => b.visible));
12
+ let C = d(t);
13
+ function w(e) {
14
+ e.key === "Escape" && x("close"), x("keydown", e);
15
+ }
16
+ return (e, t) => (f(), a(n, { to: "body" }, [l(r, {
17
+ "enter-active-class": "tpl:transition tpl:duration-150",
18
+ "enter-from-class": "tpl:opacity-0",
19
+ "enter-to-class": "tpl:opacity-100",
20
+ "leave-active-class": "tpl:transition tpl:duration-100",
21
+ "leave-from-class": "tpl:opacity-100",
22
+ "leave-to-class": "tpl:opacity-0"
23
+ }, {
24
+ default: g(() => [u.visible ? (f(), s("div", {
25
+ key: 0,
26
+ "data-tpl-theme": h(C),
27
+ class: "tpl tpl:fixed tpl:inset-0 tpl:z-modal tpl:flex tpl:items-center tpl:justify-center",
28
+ style: {
29
+ "background-color": "var(--tpl-overlay)",
30
+ "backdrop-filter": "blur(8px)",
31
+ "-webkit-backdrop-filter": "blur(8px)"
32
+ },
33
+ onClick: t[0] ||= _((e) => x("close"), ["self"]),
34
+ onKeydown: w
35
+ }, [c("div", {
36
+ ref_key: "dialogRef",
37
+ ref: S
38
+ }, [m(e.$slots, "default")], 512)], 40, v)) : o("", !0)]),
39
+ _: 3
40
+ })]));
41
+ }
42
+ });
43
+ //#endregion
44
+ export { y as t };
@@ -0,0 +1,47 @@
1
+ import { computed as e, h as t, inject as n } from "vue";
2
+ //#region ../../node_modules/.bun/@lucide+vue@1.7.0+cc44681ce9393ba4/node_modules/@lucide/vue/dist/esm/shared/src/utils/isEmptyString.js
3
+ var r = (e) => e === "", i = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), a = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), o = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), s = (e) => {
4
+ let t = o(e);
5
+ return t.charAt(0).toUpperCase() + t.slice(1);
6
+ }, c = {
7
+ xmlns: "http://www.w3.org/2000/svg",
8
+ width: 24,
9
+ height: 24,
10
+ viewBox: "0 0 24 24",
11
+ fill: "none",
12
+ stroke: "currentColor",
13
+ "stroke-width": 2,
14
+ "stroke-linecap": "round",
15
+ "stroke-linejoin": "round"
16
+ }, l = Symbol("lucide-icons");
17
+ function u() {
18
+ return n(l, {});
19
+ }
20
+ //#endregion
21
+ //#region ../../node_modules/.bun/@lucide+vue@1.7.0+cc44681ce9393ba4/node_modules/@lucide/vue/dist/esm/Icon.js
22
+ var d = ({ name: n, iconNode: o, absoluteStrokeWidth: l, "absolute-stroke-width": d, strokeWidth: f, "stroke-width": p, size: m, color: h, ...g }, { slots: _ }) => {
23
+ let { size: v, color: y, strokeWidth: b = 2, absoluteStrokeWidth: x = !1, class: S = "" } = u(), C = e(() => {
24
+ let e = r(l) || r(d) || l === !0 || d === !0 || x === !0, t = f || p || b || c["stroke-width"];
25
+ return e ? Number(t) * 24 / Number(m ?? v ?? c.width) : t;
26
+ });
27
+ return t("svg", {
28
+ ...c,
29
+ ...g,
30
+ width: m ?? v ?? c.width,
31
+ height: m ?? v ?? c.height,
32
+ stroke: h ?? y ?? c.stroke,
33
+ "stroke-width": C.value,
34
+ class: i("lucide", S, ...n ? [`lucide-${a(s(n))}-icon`, `lucide-${a(n)}`] : ["lucide-icon"])
35
+ }, [...o.map((e) => t(...e)), ..._.default ? [_.default()] : []]);
36
+ }, f = (e, n) => (r, { slots: i, attrs: a }) => t(d, {
37
+ ...a,
38
+ ...r,
39
+ iconNode: n,
40
+ name: e
41
+ }, i), p = (e, t) => {
42
+ let n = e.__vccOpts || e;
43
+ for (let [e, r] of t) n[e] = r;
44
+ return n;
45
+ };
46
+ //#endregion
47
+ export { f as n, p as t };
@@ -0,0 +1,126 @@
1
+ import { D as e, E as t, M as n, O as r, k as i } from "./useEditorCore-Cc4RCwWq.js";
2
+ import { n as a } from "./_plugin-vue_export-helper-B1-bu7yR.js";
3
+ var o = a("columns-3", [
4
+ ["rect", {
5
+ width: "18",
6
+ height: "18",
7
+ x: "3",
8
+ y: "3",
9
+ rx: "2",
10
+ key: "afitv7"
11
+ }],
12
+ ["path", {
13
+ d: "M9 3v18",
14
+ key: "fh3hqa"
15
+ }],
16
+ ["path", {
17
+ d: "M15 3v18",
18
+ key: "14nvp0"
19
+ }]
20
+ ]), s = a("heading", [
21
+ ["path", {
22
+ d: "M6 12h12",
23
+ key: "8npq4p"
24
+ }],
25
+ ["path", {
26
+ d: "M6 20V4",
27
+ key: "1w1bmo"
28
+ }],
29
+ ["path", {
30
+ d: "M18 20V4",
31
+ key: "o2hl4u"
32
+ }]
33
+ ]), c = a("minus", [["path", {
34
+ d: "M5 12h14",
35
+ key: "1ays0h"
36
+ }]]), l = a("move-vertical", [
37
+ ["path", {
38
+ d: "M12 2v20",
39
+ key: "t6zp3m"
40
+ }],
41
+ ["path", {
42
+ d: "m8 18 4 4 4-4",
43
+ key: "bh5tu3"
44
+ }],
45
+ ["path", {
46
+ d: "m8 6 4-4 4 4",
47
+ key: "ybng9g"
48
+ }]
49
+ ]), u = a("package", [
50
+ ["path", {
51
+ d: "M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",
52
+ key: "1a0edw"
53
+ }],
54
+ ["path", {
55
+ d: "M12 22V12",
56
+ key: "d0xqtd"
57
+ }],
58
+ ["polyline", {
59
+ points: "3.29 7 12 12 20.71 7",
60
+ key: "ousv84"
61
+ }],
62
+ ["path", {
63
+ d: "m7.5 4.27 9 5.15",
64
+ key: "1c824w"
65
+ }]
66
+ ]), d = a("pilcrow", [
67
+ ["path", {
68
+ d: "M13 4v16",
69
+ key: "8vvj80"
70
+ }],
71
+ ["path", {
72
+ d: "M17 4v16",
73
+ key: "7dpous"
74
+ }],
75
+ ["path", {
76
+ d: "M19 4H9.5a4.5 4.5 0 0 0 0 9H13",
77
+ key: "sh4n9v"
78
+ }]
79
+ ]), f = a("play", [["path", {
80
+ d: "M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",
81
+ key: "10ikf1"
82
+ }]]), p = {
83
+ section: o,
84
+ title: s,
85
+ paragraph: d,
86
+ image: i,
87
+ button: a("rectangle-horizontal", [["rect", {
88
+ width: "20",
89
+ height: "12",
90
+ x: "2",
91
+ y: "6",
92
+ rx: "2",
93
+ key: "9lu3g6"
94
+ }]]),
95
+ divider: c,
96
+ video: f,
97
+ social: e,
98
+ menu: r,
99
+ table: t,
100
+ spacer: l,
101
+ countdown: a("timer", [
102
+ ["line", {
103
+ x1: "10",
104
+ x2: "14",
105
+ y1: "2",
106
+ y2: "2",
107
+ key: "14vaq8"
108
+ }],
109
+ ["line", {
110
+ x1: "12",
111
+ x2: "15",
112
+ y1: "14",
113
+ y2: "11",
114
+ key: "17fdiu"
115
+ }],
116
+ ["circle", {
117
+ cx: "12",
118
+ cy: "14",
119
+ r: "8",
120
+ key: "1e1u0o"
121
+ }]
122
+ ]),
123
+ html: n
124
+ };
125
+ //#endregion
126
+ export { u as n, c as r, p as t };
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["chunks/dist-BKSzrf0L.js","chunks/tiptap-Cya4P9CN.js","chunks/icons-vmLJTaJk.js","chunks/draggable-ClUwYCFL.js","chunks/rolldown-runtime-BakkzWXw.js","chunks/dist-B5JI9nIg.js","chunks/dist-0UheN8rK.js","chunks/dist-55mmbGQ9.js","chunks/dist-BL8c5gYQ.js","chunks/dist-DxZbPJYt.js","chunks/dist-B93vLKhU.js","chunks/dist-BDt3FJvj.js","chunks/dist-BJRuFHmi.js","chunks/dist-B31mxKyP.js","chunks/dist-CYThWMP5.js","chunks/extensions-ea_ewKUl.js","chunks/useMergeTag-DVOz1v9p.js"])))=>i.map(i=>d[i]);
2
+ import{E as e,F as t,G as n,K as r,W as i,c as a,d as o,f as s,g as c,h as l,m as u,p as d,q as f,s as p,u as m,w as h,y as g}from"./draggable-ClUwYCFL.js";import{_,a as v,c as y,d as b,f as x,g as S,h as C,i as ee,l as w,m as T,n as te,o as ne,p as re,r as E,s as D,u as O}from"./icons-vmLJTaJk.js";import{c as k,d as A,i as j,n as M,u as N}from"./useMergeTag-DVOz1v9p.js";import{n as P,r as F,t as I}from"./useEditorCore-CwuxQuvh.js";import{a as ie,i as ae,r as L}from"./styleConstants-CNejCb-L.js";import{n as R,t as z}from"./RichTextEditorContent-BUD9veXd.js";var B={class:`tpl:relative`},V=[`aria-label`,`title`],H={key:0,class:`tpl-emoji-picker tpl:absolute tpl:top-full tpl:left-0 tpl:z-10 tpl:mt-2 tpl:w-72 tpl:rounded-lg tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-2 tpl:shadow-lg`},U={class:`tpl:mb-1.5 tpl:text-[10px] tpl:font-medium tpl:tracking-wide tpl:text-[var(--tpl-text-muted)] tpl:uppercase`},W={class:`tpl:grid tpl:grid-cols-10 tpl:gap-0.5`},G=[`onClick`],K=c({__name:`EmojiPickerDropdown`,emits:[`insert`],setup(t,{emit:r}){let a=r,{categories:o,isOpen:c,toggle:u}=P(),{t:g}=M();return(t,r)=>(h(),d(`div`,B,[m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":i(c)}]),"aria-label":i(g).paragraphEditor.insertEmoji,title:i(g).paragraphEditor.insertEmoji,onClick:r[0]||=(...e)=>i(u)&&i(u)(...e)},[l(i(w),{size:16,"stroke-width":2})],10,V),i(c)?(h(),d(`div`,H,[(h(!0),d(p,null,e(i(o),t=>(h(),d(`div`,{key:t.key,class:`tpl:mb-2 tpl:last:mb-0`},[m(`div`,U,f(i(g).emoji[t.key]),1),m(`div`,W,[(h(!0),d(p,null,e(t.emojis,e=>(h(),d(`button`,{key:e,type:`button`,class:`tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:border-none tpl:bg-transparent tpl:text-base tpl:transition-all tpl:duration-100 tpl:hover:scale-125 tpl:hover:bg-[var(--tpl-bg-active)]`,onClick:t=>a(`insert`,e)},f(e),9,G))),128))])]))),128))])):s(``,!0)]))}}),q=[`data-tpl-theme`,`aria-label`],J={class:`tpl:flex tpl:items-center tpl:gap-1`},oe=[`value`,`aria-label`,`title`],se={value:``},ce=[`value`],le=[`value`,`aria-label`,`title`],ue={value:``},Y=[`value`],de={class:`tpl:relative`},fe=[`value`,`aria-label`,`title`],pe={class:`tpl:relative`},me=[`value`,`aria-label`,`title`],he=[`aria-label`,`title`],ge=[`aria-label`,`title`],_e=[`aria-label`,`title`],ve=[`aria-label`,`title`],ye=[`aria-label`,`title`],be=[`aria-label`,`title`],xe=[`aria-label`,`title`],Se={class:`tpl:flex tpl:items-center tpl:gap-1`},Ce=[`aria-label`,`title`],we=[`aria-label`,`title`],Te=[`aria-label`,`title`],Ee=[`aria-label`,`title`],De=[`aria-label`,`title`],Oe=[`value`,`title`],ke=[`value`],Ae=[`value`,`title`],je=[`value`],Me=[`aria-label`,`title`],Ne={key:0,class:`tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`},Pe=[`aria-label`,`title`],Fe={key:1,class:`tpl:flex tpl:items-center tpl:gap-2 tpl:px-2 tpl:text-xs tpl:text-[var(--tpl-text-dim)]`},X=c({__name:`ParagraphToolbar`,props:{editor:{},toolbarPosition:{},isLoading:{type:Boolean},mergeTagEnabled:{type:Boolean}},emits:[`open-link-dialog`,`add-merge-tag`],setup(t,{emit:c}){let w=t,P=c,F=g(k,null),I=g(N,null),R=A(j,`ParagraphToolbar`),{t:z}=M(),B=R.fonts;function V(e){w.editor?.chain().focus().insertContent(e).run()}function H(){return w.editor?.getAttributes(`textStyle`).fontFamily||``}function U(){return w.editor?.getAttributes(`textStyle`).fontSize||``}function W(){return w.editor?.getAttributes(`textStyle`).color||``}function G(e){e?w.editor?.chain().focus().setFontFamily(e).run():w.editor?.chain().focus().unsetFontFamily().run()}function X(e){e?w.editor?.chain().focus().setFontSize(e).run():w.editor?.chain().focus().unsetFontSize().run()}function Z(e){e?w.editor?.chain().focus().setColor(e).run():w.editor?.chain().focus().unsetColor().run()}function Q(){return w.editor?.getAttributes(`paragraph`).lineHeight||``}function Ie(e){e?w.editor?.chain().focus().setLineHeight(e).run():w.editor?.chain().focus().unsetLineHeight().run()}function Le(){return w.editor?.getAttributes(`textStyle`).letterSpacing||``}function Re(e){e&&e!==`normal`?w.editor?.chain().focus().setLetterSpacing(e).run():w.editor?.chain().focus().unsetLetterSpacing().run()}function $(){return w.editor?.getAttributes(`highlight`).color||``}function ze(e){e?w.editor?.chain().focus().setHighlight({color:e}).run():w.editor?.chain().focus().unsetHighlight().run()}return(c,g)=>(h(),o(a,{to:`body`},[m(`div`,{"data-tpl-theme":i(I),role:`toolbar`,"aria-label":i(z).paragraphEditor.toolbar,class:`tpl tpl-text-toolbar tpl:fixed tpl:z-popover tpl:flex tpl:gap-1 tpl:rounded-lg tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-3 tpl:py-2 tpl:shadow-lg`,style:r({...i(F),top:`${t.toolbarPosition.top}px`,left:`${t.toolbarPosition.left}px`,transform:`translateY(-100%)`,flexDirection:`column`})},[!t.isLoading&&t.editor?(h(),d(p,{key:0},[m(`div`,J,[m(`select`,{class:`tpl:h-8 tpl:w-32 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-2 tpl:text-xs tpl:text-[var(--tpl-text)] tpl:outline-none`,value:H(),"aria-label":i(z).paragraphEditor.fontFamily,title:i(z).paragraphEditor.fontFamily,onChange:g[0]||=e=>G(e.target.value)},[m(`option`,se,f(i(z).paragraphEditor.defaultFont),1),(h(!0),d(p,null,e(i(B),e=>(h(),d(`option`,{key:e.value,value:e.value},f(e.label),9,ce))),128))],40,oe),m(`select`,{class:`tpl:h-8 tpl:w-20 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-2 tpl:text-xs tpl:text-[var(--tpl-text)] tpl:outline-none`,value:U(),"aria-label":i(z).paragraphEditor.fontSize,title:i(z).paragraphEditor.fontSize,onChange:g[1]||=e=>X(e.target.value)},[m(`option`,ue,f(i(z).paragraphEditor.defaultSize),1),(h(!0),d(p,null,e(i(L),e=>(h(),d(`option`,{key:e,value:e},f(e),9,Y))),128))],40,le),g[20]||=m(`span`,{class:`tpl:mx-1 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),m(`div`,de,[m(`input`,{type:`color`,class:`tpl:size-8 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-1`,value:W()||i(`#000000`),"aria-label":i(z).paragraphEditor.textColor,title:i(z).paragraphEditor.textColor,onInput:g[2]||=e=>Z(e.target.value)},null,40,fe)]),m(`div`,pe,[m(`input`,{type:`color`,class:`tpl:size-8 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:p-1`,style:r({backgroundColor:$()||`var(--tpl-bg)`}),value:$()||i(`#ffff00`),"aria-label":i(z).paragraphEditor.highlightColor,title:i(z).paragraphEditor.highlightColor,onInput:g[3]||=e=>ze(e.target.value)},null,44,me)]),g[21]||=m(`span`,{class:`tpl:mx-1 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`bold`)}]),"aria-label":i(z).paragraphEditor.bold,title:i(z).paragraphEditor.bold,onClick:g[4]||=e=>t.editor?.chain().focus().toggleBold().run()},[l(i(_),{size:16,"stroke-width":2.5})],10,he),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`italic`)}]),"aria-label":i(z).paragraphEditor.italic,title:i(z).paragraphEditor.italic,onClick:g[5]||=e=>t.editor?.chain().focus().toggleItalic().run()},[l(i(S),{size:16,"stroke-width":2})],10,ge),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`underline`)}]),"aria-label":i(z).paragraphEditor.underline,title:i(z).paragraphEditor.underline,onClick:g[6]||=e=>t.editor?.chain().focus().toggleUnderline().run()},[l(i(te),{size:16,"stroke-width":2})],10,_e),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`strike`)}]),"aria-label":i(z).paragraphEditor.strikethrough,title:i(z).paragraphEditor.strikethrough,onClick:g[7]||=e=>t.editor?.chain().focus().toggleStrike().run()},[l(i(y),{size:16,"stroke-width":2})],10,ve),g[22]||=m(`span`,{class:`tpl:mx-1 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`subscript`)}]),"aria-label":i(z).paragraphEditor.subscript,title:i(z).paragraphEditor.subscript,onClick:g[8]||=e=>t.editor?.chain().focus().toggleSubscript().run()},[l(i(D),{size:16,"stroke-width":2})],10,ye),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`superscript`)}]),"aria-label":i(z).paragraphEditor.superscript,title:i(z).paragraphEditor.superscript,onClick:g[9]||=e=>t.editor?.chain().focus().toggleSuperscript().run()},[l(i(ne),{size:16,"stroke-width":2})],10,be),g[23]||=m(`span`,{class:`tpl:mx-1 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`link`)}]),"aria-label":i(z).paragraphEditor.addLink,title:i(z).paragraphEditor.addLink,onClick:g[10]||=e=>P(`open-link-dialog`)},[l(i(C),{size:16,"stroke-width":2})],10,xe)]),m(`div`,Se,[m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`bulletList`)}]),"aria-label":i(z).paragraphEditor.bulletList,title:i(z).paragraphEditor.bulletList,onClick:g[11]||=e=>t.editor?.chain().focus().toggleBulletList().run()},[l(i(re),{size:16,"stroke-width":2})],10,Ce),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive(`orderedList`)}]),"aria-label":i(z).paragraphEditor.numberedList,title:i(z).paragraphEditor.numberedList,onClick:g[12]||=e=>t.editor?.chain().focus().toggleOrderedList().run()},[l(i(T),{size:16,"stroke-width":2})],10,we),g[26]||=m(`span`,{class:`tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive({textAlign:`left`})}]),"aria-label":i(z).paragraphEditor.alignLeft,title:i(z).paragraphEditor.alignLeft,onClick:g[13]||=e=>t.editor?.chain().focus().setTextAlign(`left`).run()},[l(i(E),{size:16,"stroke-width":2})],10,Te),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive({textAlign:`center`})}]),"aria-label":i(z).paragraphEditor.alignCenter,title:i(z).paragraphEditor.alignCenter,onClick:g[14]||=e=>t.editor?.chain().focus().setTextAlign(`center`).run()},[l(i(v),{size:16,"stroke-width":2})],10,Ee),m(`button`,{type:`button`,class:n([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":t.editor?.isActive({textAlign:`right`})}]),"aria-label":i(z).paragraphEditor.alignRight,title:i(z).paragraphEditor.alignRight,onClick:g[15]||=e=>t.editor?.chain().focus().setTextAlign(`right`).run()},[l(i(ee),{size:16,"stroke-width":2})],10,De),g[27]||=m(`span`,{class:`tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),m(`select`,{class:`tpl:h-8 tpl:w-16 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-1 tpl:text-xs tpl:text-[var(--tpl-text)] tpl:outline-none`,value:Q(),title:i(z).paragraphEditor.lineHeight,onChange:g[16]||=e=>Ie(e.target.value)},[g[24]||=m(`option`,{value:``},`LH`,-1),(h(!0),d(p,null,e(i(ie),e=>(h(),d(`option`,{key:e,value:e},f(e),9,ke))),128))],40,Oe),m(`select`,{class:`tpl:h-8 tpl:w-20 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-1 tpl:text-xs tpl:text-[var(--tpl-text)] tpl:outline-none`,value:Le(),title:i(z).paragraphEditor.letterSpacing,onChange:g[17]||=e=>Re(e.target.value)},[g[25]||=m(`option`,{value:``},`LS`,-1),(h(!0),d(p,null,e(i(ae),e=>(h(),d(`option`,{key:e.value,value:e.value},f(e.label),9,je))),128))],40,Ae),g[28]||=m(`span`,{class:`tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),m(`button`,{type:`button`,class:`tpl-text-toolbar-btn`,"aria-label":i(z).paragraphEditor.clearFormatting,title:i(z).paragraphEditor.clearFormatting,onClick:g[18]||=e=>t.editor?.chain().focus().clearNodes().unsetAllMarks().run()},[l(i(b),{size:16,"stroke-width":2})],8,Me),g[29]||=m(`span`,{class:`tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),l(K,{onInsert:V}),t.mergeTagEnabled?(h(),d(`span`,Ne)):s(``,!0),t.mergeTagEnabled?(h(),d(`button`,{key:1,type:`button`,class:`tpl:flex tpl:h-8 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:gap-1.5 tpl:rounded tpl:border-none tpl:bg-transparent tpl:px-2.5 tpl:text-xs tpl:font-medium tpl:text-[var(--tpl-text)] tpl:transition-all tpl:duration-150 tpl:hover:bg-[var(--tpl-bg-active)]`,"aria-label":i(z).mergeTag.add,title:i(z).mergeTag.add,onClick:g[19]||=e=>P(`add-merge-tag`)},[l(i(O),{size:16,"stroke-width":2}),u(` `+f(i(z).mergeTag.add),1)],8,Pe)):s(``,!0)])],64)):(h(),d(`div`,Fe,[l(i(x),{class:`tpl-spinner`,size:14,"stroke-width":2}),u(` `+f(i(z).errors.editorLoading),1)]))],12,q)]))}}),Z={class:`tpl-text-editor-wrapper tpl:relative`},Q=c({__name:`ParagraphEditor`,props:{block:{},toolbarPosition:{}},emits:[`done`],setup(e,{emit:n}){let r=e,a=n,{editor:o,EditorContent:s,isLoading:c,initError:u,retry:f,showLinkDialog:p,linkUrl:m,linkDialogRef:g,mergeTagEnabled:_,openLinkDialog:v,insertLink:y,removeLink:b,closeLinkDialog:x,handleLinkKeydown:S,handleAddMergeTag:C}=I({blockId:()=>r.block.id,blockContent:()=>r.block.content,onDone:()=>a(`done`),editorName:`ParagraphEditor`,async loadExtensions({mergeTags:e,syntax:t}){let[{Editor:n,EditorContent:r},{default:i},{default:a},{default:o},{default:s},{default:c},{default:l},{TextStyle:u},{default:d},{default:f},{default:p},{MergeTagNode:m,LogicMergeTagNode:h,FontSize:g,LineHeight:_,LetterSpacing:v}]=await Promise.all([F(()=>import(`./dist-BKSzrf0L.js`),__vite__mapDeps([0,1,2,3,4])),F(()=>import(`./dist-B5JI9nIg.js`),__vite__mapDeps([5,1,2,3,4])),F(()=>import(`./dist-0UheN8rK.js`),__vite__mapDeps([6,1,2,3,4])),F(()=>import(`./dist-55mmbGQ9.js`),__vite__mapDeps([7,1,2,3,4])),F(()=>import(`./dist-BL8c5gYQ.js`),__vite__mapDeps([8,1,2,3,4])),F(()=>import(`./dist-DxZbPJYt.js`),__vite__mapDeps([9,1,2,3,4])),F(()=>import(`./dist-B93vLKhU.js`),__vite__mapDeps([10,1,2,3,4])),F(()=>import(`./dist-BDt3FJvj.js`),__vite__mapDeps([11,1,2,3,4])),F(()=>import(`./dist-BJRuFHmi.js`),__vite__mapDeps([12,1,2,3,4])),F(()=>import(`./dist-B31mxKyP.js`),__vite__mapDeps([13,1,2,3,4])),F(()=>import(`./dist-CYThWMP5.js`),__vite__mapDeps([14,1,2,3,4])),F(()=>import(`./extensions-ea_ewKUl.js`),__vite__mapDeps([15,2,3,4,1,16]))]);return{TiptapEditor:n,EC:r,extensions:[i.configure({heading:!1,codeBlock:!1,blockquote:!1,horizontalRule:!1}),o,s,c,a.configure({openOnClick:!1,HTMLAttributes:{target:`_blank`,rel:`noopener noreferrer`}}),l.configure({types:[`paragraph`]}),u,d,f,p.configure({multicolor:!0}),g,_,v,m.configure({mergeTags:e,syntax:t}),h.configure({syntax:t})]}}});return(n,r)=>(h(),d(`div`,Z,[l(X,{editor:i(o),"toolbar-position":e.toolbarPosition,"is-loading":i(c),"merge-tag-enabled":i(_),onOpenLinkDialog:i(v),onAddMergeTag:i(C)},null,8,[`editor`,`toolbar-position`,`is-loading`,`merge-tag-enabled`,`onOpenLinkDialog`,`onAddMergeTag`]),l(z,{editor:i(o),"editor-content":i(s),"is-loading":i(c),"init-error":i(u),onRetry:i(f)},null,8,[`editor`,`editor-content`,`is-loading`,`init-error`,`onRetry`]),l(R,{visible:i(p),"is-editing-link":i(o)?.isActive(`link`)??!1,"dialog-ref":i(g),"onUpdate:dialogRef":r[0]||=e=>t(g)?g.value=e:null,"link-url":i(m),"onUpdate:linkUrl":r[1]||=e=>t(m)?m.value=e:null,onClose:i(x),onInsert:i(y),onRemove:i(b),onKeydown:i(S)},null,8,[`visible`,`is-editing-link`,`dialog-ref`,`link-url`,`onClose`,`onInsert`,`onRemove`,`onKeydown`])]))}});export{Q as default};
3
+ //# sourceMappingURL=ParagraphEditor-CCtWbGDv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../src/components/blocks/EmojiPickerDropdown.vue","../../../src/components/blocks/ParagraphToolbar.vue","../../../src/components/blocks/ParagraphEditor.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useEmoji, useI18n } from \"../../composables\";\nimport { Smile } from \"@lucide/vue\";\n\nconst emit = defineEmits<{\n (e: \"insert\", emoji: string): void;\n}>();\n\nconst {\n categories: emojiCategories,\n isOpen: showEmojiPicker,\n toggle: toggleEmojiPicker,\n} = useEmoji();\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <div class=\"tpl:relative\">\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': showEmojiPicker,\n }\"\n :aria-label=\"t.paragraphEditor.insertEmoji\"\n :title=\"t.paragraphEditor.insertEmoji\"\n @click=\"toggleEmojiPicker\"\n >\n <Smile :size=\"16\" :stroke-width=\"2\" />\n </button>\n <div\n v-if=\"showEmojiPicker\"\n class=\"tpl-emoji-picker tpl:absolute tpl:top-full tpl:left-0 tpl:z-10 tpl:mt-2 tpl:w-72 tpl:rounded-lg tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-2 tpl:shadow-lg\"\n >\n <div\n v-for=\"category in emojiCategories\"\n :key=\"category.key\"\n class=\"tpl:mb-2 tpl:last:mb-0\"\n >\n <div\n class=\"tpl:mb-1.5 tpl:text-[10px] tpl:font-medium tpl:tracking-wide tpl:text-[var(--tpl-text-muted)] tpl:uppercase\"\n >\n {{ t.emoji[category.key] }}\n </div>\n <div class=\"tpl:grid tpl:grid-cols-10 tpl:gap-0.5\">\n <button\n v-for=\"emoji in category.emojis\"\n :key=\"emoji\"\n type=\"button\"\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:border-none tpl:bg-transparent tpl:text-base tpl:transition-all tpl:duration-100 tpl:hover:scale-125 tpl:hover:bg-[var(--tpl-bg-active)]\"\n @click=\"emit('insert', emoji)\"\n >\n {{ emoji }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport EmojiPickerDropdown from \"./EmojiPickerDropdown.vue\";\nimport { useI18n } from \"../../composables\";\nimport type { Editor } from \"@tiptap/core\";\nimport {\n AlignCenter,\n AlignLeft,\n AlignRight,\n Bold,\n Italic,\n Link,\n List,\n ListOrdered,\n LoaderCircle,\n RemoveFormatting,\n ScanLine,\n Strikethrough,\n Subscript,\n Superscript,\n Underline,\n} from \"@lucide/vue\";\nimport { inject } from \"vue\";\nimport {\n THEME_STYLES_KEY,\n UI_THEME_KEY,\n FONTS_MANAGER_KEY,\n requireInject,\n} from \"../../keys\";\nimport {\n DEFAULT_TEXT_COLOR,\n DEFAULT_HIGHLIGHT_COLOR,\n FONT_SIZE_OPTIONS,\n LINE_HEIGHT_OPTIONS,\n LETTER_SPACING_OPTIONS,\n} from \"../../constants/styleConstants\";\n\nconst props = defineProps<{\n editor: Editor | null;\n toolbarPosition: { top: number; left: number };\n isLoading: boolean;\n mergeTagEnabled: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"open-link-dialog\"): void;\n (e: \"add-merge-tag\"): void;\n}>();\n\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst tplUiTheme = inject(UI_THEME_KEY, null);\nconst fontsManager = requireInject(FONTS_MANAGER_KEY, \"ParagraphToolbar\");\n\nconst { t } = useI18n();\n\nconst fontFamilies = fontsManager.fonts;\n\nfunction insertEmoji(emoji: string): void {\n props.editor?.chain().focus().insertContent(emoji).run();\n}\n\nfunction getCurrentFontFamily(): string {\n return (props.editor?.getAttributes(\"textStyle\").fontFamily as string) || \"\";\n}\n\nfunction getCurrentFontSize(): string {\n return (props.editor?.getAttributes(\"textStyle\").fontSize as string) || \"\";\n}\n\nfunction getCurrentColor(): string {\n return (props.editor?.getAttributes(\"textStyle\").color as string) || \"\";\n}\n\nfunction setFontFamily(family: string): void {\n if (family) {\n props.editor?.chain().focus().setFontFamily(family).run();\n } else {\n props.editor?.chain().focus().unsetFontFamily().run();\n }\n}\n\nfunction setFontSize(size: string): void {\n if (size) {\n props.editor?.chain().focus().setFontSize(size).run();\n } else {\n props.editor?.chain().focus().unsetFontSize().run();\n }\n}\n\nfunction setColor(color: string): void {\n if (color) {\n props.editor?.chain().focus().setColor(color).run();\n } else {\n props.editor?.chain().focus().unsetColor().run();\n }\n}\n\nfunction getCurrentLineHeight(): string {\n return (props.editor?.getAttributes(\"paragraph\").lineHeight as string) || \"\";\n}\n\nfunction setLineHeight(value: string): void {\n if (value) {\n props.editor?.chain().focus().setLineHeight(value).run();\n } else {\n props.editor?.chain().focus().unsetLineHeight().run();\n }\n}\n\nfunction getCurrentLetterSpacing(): string {\n return (\n (props.editor?.getAttributes(\"textStyle\").letterSpacing as string) || \"\"\n );\n}\n\nfunction setLetterSpacing(value: string): void {\n if (value && value !== \"normal\") {\n props.editor?.chain().focus().setLetterSpacing(value).run();\n } else {\n props.editor?.chain().focus().unsetLetterSpacing().run();\n }\n}\n\nfunction getCurrentHighlight(): string {\n return (props.editor?.getAttributes(\"highlight\").color as string) || \"\";\n}\n\nfunction setHighlight(color: string): void {\n if (color) {\n props.editor?.chain().focus().setHighlight({ color }).run();\n } else {\n props.editor?.chain().focus().unsetHighlight().run();\n }\n}\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div\n :data-tpl-theme=\"tplUiTheme\"\n role=\"toolbar\"\n :aria-label=\"t.paragraphEditor.toolbar\"\n class=\"tpl tpl-text-toolbar tpl:fixed tpl:z-popover tpl:flex tpl:gap-1 tpl:rounded-lg tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-3 tpl:py-2 tpl:shadow-lg\"\n :style=\"{\n ...themeStyles,\n top: `${toolbarPosition.top}px`,\n left: `${toolbarPosition.left}px`,\n transform: 'translateY(-100%)',\n flexDirection: 'column',\n }\"\n >\n <template v-if=\"!isLoading && editor\">\n <!-- Row 1: Font family, Font size, Text color, Bold/Italic/Underline/Strikethrough -->\n <div class=\"tpl:flex tpl:items-center tpl:gap-1\">\n <select\n class=\"tpl:h-8 tpl:w-32 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-2 tpl:text-xs tpl:text-[var(--tpl-text)] tpl:outline-none\"\n :value=\"getCurrentFontFamily()\"\n :aria-label=\"t.paragraphEditor.fontFamily\"\n :title=\"t.paragraphEditor.fontFamily\"\n @change=\"setFontFamily(($event.target as HTMLSelectElement).value)\"\n >\n <option value=\"\">{{ t.paragraphEditor.defaultFont }}</option>\n <option\n v-for=\"font in fontFamilies\"\n :key=\"font.value\"\n :value=\"font.value\"\n >\n {{ font.label }}\n </option>\n </select>\n <select\n class=\"tpl:h-8 tpl:w-20 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-2 tpl:text-xs tpl:text-[var(--tpl-text)] tpl:outline-none\"\n :value=\"getCurrentFontSize()\"\n :aria-label=\"t.paragraphEditor.fontSize\"\n :title=\"t.paragraphEditor.fontSize\"\n @change=\"setFontSize(($event.target as HTMLSelectElement).value)\"\n >\n <option value=\"\">{{ t.paragraphEditor.defaultSize }}</option>\n <option v-for=\"size in FONT_SIZE_OPTIONS\" :key=\"size\" :value=\"size\">\n {{ size }}\n </option>\n </select>\n <span\n class=\"tpl:mx-1 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n aria-hidden=\"true\"\n ></span>\n <div class=\"tpl:relative\">\n <input\n type=\"color\"\n class=\"tpl:size-8 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-1\"\n :value=\"getCurrentColor() || DEFAULT_TEXT_COLOR\"\n :aria-label=\"t.paragraphEditor.textColor\"\n :title=\"t.paragraphEditor.textColor\"\n @input=\"setColor(($event.target as HTMLInputElement).value)\"\n />\n </div>\n <div class=\"tpl:relative\">\n <input\n type=\"color\"\n class=\"tpl:size-8 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:p-1\"\n :style=\"{\n backgroundColor: getCurrentHighlight() || 'var(--tpl-bg)',\n }\"\n :value=\"getCurrentHighlight() || DEFAULT_HIGHLIGHT_COLOR\"\n :aria-label=\"t.paragraphEditor.highlightColor\"\n :title=\"t.paragraphEditor.highlightColor\"\n @input=\"setHighlight(($event.target as HTMLInputElement).value)\"\n />\n </div>\n <span\n class=\"tpl:mx-1 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n aria-hidden=\"true\"\n ></span>\n <!-- Bold/Italic/Underline/Strikethrough -->\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('bold'),\n }\"\n :aria-label=\"t.paragraphEditor.bold\"\n :title=\"t.paragraphEditor.bold\"\n @click=\"editor?.chain().focus().toggleBold().run()\"\n >\n <Bold :size=\"16\" :stroke-width=\"2.5\" />\n </button>\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('italic'),\n }\"\n :aria-label=\"t.paragraphEditor.italic\"\n :title=\"t.paragraphEditor.italic\"\n @click=\"editor?.chain().focus().toggleItalic().run()\"\n >\n <Italic :size=\"16\" :stroke-width=\"2\" />\n </button>\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('underline'),\n }\"\n :aria-label=\"t.paragraphEditor.underline\"\n :title=\"t.paragraphEditor.underline\"\n @click=\"editor?.chain().focus().toggleUnderline().run()\"\n >\n <Underline :size=\"16\" :stroke-width=\"2\" />\n </button>\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('strike'),\n }\"\n :aria-label=\"t.paragraphEditor.strikethrough\"\n :title=\"t.paragraphEditor.strikethrough\"\n @click=\"editor?.chain().focus().toggleStrike().run()\"\n >\n <Strikethrough :size=\"16\" :stroke-width=\"2\" />\n </button>\n <span\n class=\"tpl:mx-1 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n aria-hidden=\"true\"\n ></span>\n <!-- Subscript/Superscript -->\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('subscript'),\n }\"\n :aria-label=\"t.paragraphEditor.subscript\"\n :title=\"t.paragraphEditor.subscript\"\n @click=\"editor?.chain().focus().toggleSubscript().run()\"\n >\n <Subscript :size=\"16\" :stroke-width=\"2\" />\n </button>\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('superscript'),\n }\"\n :aria-label=\"t.paragraphEditor.superscript\"\n :title=\"t.paragraphEditor.superscript\"\n @click=\"editor?.chain().focus().toggleSuperscript().run()\"\n >\n <Superscript :size=\"16\" :stroke-width=\"2\" />\n </button>\n <span\n class=\"tpl:mx-1 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n aria-hidden=\"true\"\n ></span>\n <!-- Link -->\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('link'),\n }\"\n :aria-label=\"t.paragraphEditor.addLink\"\n :title=\"t.paragraphEditor.addLink\"\n @click=\"emit('open-link-dialog')\"\n >\n <Link :size=\"16\" :stroke-width=\"2\" />\n </button>\n </div>\n <!-- Row 2: Lists, Alignment, LH, LS, Clear, Emoji, Merge tags -->\n <div class=\"tpl:flex tpl:items-center tpl:gap-1\">\n <!-- Lists -->\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('bulletList'),\n }\"\n :aria-label=\"t.paragraphEditor.bulletList\"\n :title=\"t.paragraphEditor.bulletList\"\n @click=\"editor?.chain().focus().toggleBulletList().run()\"\n >\n <List :size=\"16\" :stroke-width=\"2\" />\n </button>\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive('orderedList'),\n }\"\n :aria-label=\"t.paragraphEditor.numberedList\"\n :title=\"t.paragraphEditor.numberedList\"\n @click=\"editor?.chain().focus().toggleOrderedList().run()\"\n >\n <ListOrdered :size=\"16\" :stroke-width=\"2\" />\n </button>\n <span\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n aria-hidden=\"true\"\n ></span>\n <!-- Alignment -->\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive({\n textAlign: 'left',\n }),\n }\"\n :aria-label=\"t.paragraphEditor.alignLeft\"\n :title=\"t.paragraphEditor.alignLeft\"\n @click=\"editor?.chain().focus().setTextAlign('left').run()\"\n >\n <AlignLeft :size=\"16\" :stroke-width=\"2\" />\n </button>\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive({\n textAlign: 'center',\n }),\n }\"\n :aria-label=\"t.paragraphEditor.alignCenter\"\n :title=\"t.paragraphEditor.alignCenter\"\n @click=\"editor?.chain().focus().setTextAlign('center').run()\"\n >\n <AlignCenter :size=\"16\" :stroke-width=\"2\" />\n </button>\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :class=\"{\n 'tpl-text-toolbar-btn--active': editor?.isActive({\n textAlign: 'right',\n }),\n }\"\n :aria-label=\"t.paragraphEditor.alignRight\"\n :title=\"t.paragraphEditor.alignRight\"\n @click=\"editor?.chain().focus().setTextAlign('right').run()\"\n >\n <AlignRight :size=\"16\" :stroke-width=\"2\" />\n </button>\n <span\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n aria-hidden=\"true\"\n ></span>\n <!-- Line Height -->\n <select\n class=\"tpl:h-8 tpl:w-16 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-1 tpl:text-xs tpl:text-[var(--tpl-text)] tpl:outline-none\"\n :value=\"getCurrentLineHeight()\"\n :title=\"t.paragraphEditor.lineHeight\"\n @change=\"setLineHeight(($event.target as HTMLSelectElement).value)\"\n >\n <option value=\"\">LH</option>\n <option v-for=\"lh in LINE_HEIGHT_OPTIONS\" :key=\"lh\" :value=\"lh\">\n {{ lh }}\n </option>\n </select>\n <!-- Letter Spacing -->\n <select\n class=\"tpl:h-8 tpl:w-20 tpl:cursor-pointer tpl:rounded tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-1 tpl:text-xs tpl:text-[var(--tpl-text)] tpl:outline-none\"\n :value=\"getCurrentLetterSpacing()\"\n :title=\"t.paragraphEditor.letterSpacing\"\n @change=\"\n setLetterSpacing(($event.target as HTMLSelectElement).value)\n \"\n >\n <option value=\"\">LS</option>\n <option\n v-for=\"ls in LETTER_SPACING_OPTIONS\"\n :key=\"ls.value\"\n :value=\"ls.value\"\n >\n {{ ls.label }}\n </option>\n </select>\n <span\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n aria-hidden=\"true\"\n ></span>\n <!-- Clear Formatting -->\n <button\n type=\"button\"\n class=\"tpl-text-toolbar-btn\"\n :aria-label=\"t.paragraphEditor.clearFormatting\"\n :title=\"t.paragraphEditor.clearFormatting\"\n @click=\"editor?.chain().focus().clearNodes().unsetAllMarks().run()\"\n >\n <RemoveFormatting :size=\"16\" :stroke-width=\"2\" />\n </button>\n <!-- Emoji Picker -->\n <span\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n aria-hidden=\"true\"\n ></span>\n <EmojiPickerDropdown @insert=\"insertEmoji\" />\n <!-- Add Merge Tag -->\n <span\n v-if=\"mergeTagEnabled\"\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n ></span>\n <button\n v-if=\"mergeTagEnabled\"\n type=\"button\"\n class=\"tpl:flex tpl:h-8 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:gap-1.5 tpl:rounded tpl:border-none tpl:bg-transparent tpl:px-2.5 tpl:text-xs tpl:font-medium tpl:text-[var(--tpl-text)] tpl:transition-all tpl:duration-150 tpl:hover:bg-[var(--tpl-bg-active)]\"\n :aria-label=\"t.mergeTag.add\"\n :title=\"t.mergeTag.add\"\n @click=\"emit('add-merge-tag')\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.add }}\n </button>\n </div>\n </template>\n <template v-else>\n <div\n class=\"tpl:flex tpl:items-center tpl:gap-2 tpl:px-2 tpl:text-xs tpl:text-[var(--tpl-text-dim)]\"\n >\n <LoaderCircle class=\"tpl-spinner\" :size=\"14\" :stroke-width=\"2\" />\n {{ t.errors.editorLoading }}\n </div>\n </template>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useRichTextEditor } from \"../../composables/useRichTextEditor\";\nimport type { ParagraphBlock as ParagraphBlockType } from \"@templatical/types\";\nimport ParagraphToolbar from \"./ParagraphToolbar.vue\";\nimport RichTextLinkDialog from \"./RichTextLinkDialog.vue\";\nimport RichTextEditorContent from \"./RichTextEditorContent.vue\";\n\nconst props = defineProps<{\n block: ParagraphBlockType;\n toolbarPosition: { top: number; left: number };\n}>();\n\nconst emit = defineEmits<{\n (e: \"done\"): void;\n}>();\n\nconst {\n editor,\n EditorContent,\n isLoading,\n initError,\n retry,\n showLinkDialog,\n linkUrl,\n linkDialogRef,\n mergeTagEnabled,\n openLinkDialog,\n insertLink,\n removeLink,\n closeLinkDialog,\n handleLinkKeydown,\n handleAddMergeTag,\n} = useRichTextEditor({\n blockId: () => props.block.id,\n blockContent: () => props.block.content,\n onDone: () => emit(\"done\"),\n editorName: \"ParagraphEditor\",\n async loadExtensions({ mergeTags, syntax }) {\n const [\n { Editor: TiptapEditor, EditorContent: EC },\n { default: StarterKit },\n { default: LinkExt },\n { default: UnderlineExt },\n { default: SubscriptExt },\n { default: SuperscriptExt },\n { default: TextAlign },\n { TextStyle },\n { default: Color },\n { default: FontFamily },\n { default: Highlight },\n { MergeTagNode, LogicMergeTagNode, FontSize, LineHeight, LetterSpacing },\n ] = await Promise.all([\n import(\"@tiptap/vue-3\"),\n import(\"@tiptap/starter-kit\"),\n import(\"@tiptap/extension-link\"),\n import(\"@tiptap/extension-underline\"),\n import(\"@tiptap/extension-subscript\"),\n import(\"@tiptap/extension-superscript\"),\n import(\"@tiptap/extension-text-align\"),\n import(\"@tiptap/extension-text-style\"),\n import(\"@tiptap/extension-color\"),\n import(\"@tiptap/extension-font-family\"),\n import(\"@tiptap/extension-highlight\"),\n import(\"../../extensions\"),\n ]);\n\n return {\n TiptapEditor,\n EC,\n extensions: [\n StarterKit.configure({\n heading: false,\n codeBlock: false,\n blockquote: false,\n horizontalRule: false,\n }),\n UnderlineExt,\n SubscriptExt,\n SuperscriptExt,\n LinkExt.configure({\n openOnClick: false,\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n TextAlign.configure({ types: [\"paragraph\"] }),\n TextStyle,\n Color,\n FontFamily,\n Highlight.configure({ multicolor: true }),\n FontSize,\n LineHeight,\n LetterSpacing,\n MergeTagNode.configure({ mergeTags, syntax }),\n LogicMergeTagNode.configure({ syntax }),\n ],\n };\n },\n});\n</script>\n\n<template>\n <div class=\"tpl-text-editor-wrapper tpl:relative\">\n <ParagraphToolbar\n :editor=\"editor\"\n :toolbar-position=\"toolbarPosition\"\n :is-loading=\"isLoading\"\n :merge-tag-enabled=\"mergeTagEnabled\"\n @open-link-dialog=\"openLinkDialog\"\n @add-merge-tag=\"handleAddMergeTag\"\n />\n\n <RichTextEditorContent\n :editor=\"editor\"\n :editor-content=\"EditorContent\"\n :is-loading=\"isLoading\"\n :init-error=\"initError\"\n @retry=\"retry\"\n />\n\n <RichTextLinkDialog\n :visible=\"showLinkDialog\"\n :is-editing-link=\"editor?.isActive('link') ?? false\"\n v-model:dialog-ref=\"linkDialogRef\"\n v-model:link-url=\"linkUrl\"\n @close=\"closeLinkDialog\"\n @insert=\"insertLink\"\n @remove=\"removeLink\"\n @keydown=\"handleLinkKeydown\"\n />\n </div>\n</template>\n"],"file":"ParagraphEditor-CCtWbGDv.js"}
@@ -0,0 +1,2 @@
1
+ import{D as e,K as t,M as n,O as r,W as i,b as a,c as o,d as s,f as c,g as l,h as u,i as d,m as f,o as p,p as m,q as h,u as g,w as _,y as v}from"./draggable-ClUwYCFL.js";import{t as y}from"./icons-vmLJTaJk.js";import{c as b,n as x,u as S}from"./useMergeTag-DVOz1v9p.js";var C=[`data-tpl-theme`],w={class:`tpl:flex tpl:items-center tpl:justify-between tpl:border-b tpl:border-[var(--tpl-border)] tpl:px-5 tpl:py-4`},T={id:`tpl-link-dialog-title`,class:`tpl:m-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]`},E=[`aria-label`],D={class:`tpl:p-5`},O={class:`tpl:mb-4 tpl:last:mb-0`},k={class:`tpl:mb-1.5 tpl:block tpl:text-xs tpl:font-medium tpl:tracking-wide tpl:text-[var(--tpl-text-muted)] tpl:uppercase`},A=[`placeholder`],j={class:`tpl:flex tpl:items-center tpl:justify-between tpl:border-t tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-elevated)] tpl:px-5 tpl:py-4`},M={class:`tpl:ml-auto tpl:flex tpl:gap-2`},N=l({__name:`RichTextLinkDialog`,props:a({visible:{type:Boolean},isEditingLink:{type:Boolean}},{linkUrl:{required:!0},linkUrlModifiers:{},dialogRef:{required:!0},dialogRefModifiers:{}}),emits:a([`close`,`insert`,`remove`,`keydown`],[`update:linkUrl`,`update:dialogRef`]),setup(e,{emit:a}){let l=r(e,`linkUrl`),f=r(e,`dialogRef`),N=a,P=v(b,null),F=v(S,null),{t:I}=x();return(r,a)=>(_(),s(o,{to:`body`},[e.visible?(_(),m(`div`,{key:0,"data-tpl-theme":i(F),class:`tpl tpl-link-dialog tpl:fixed tpl:inset-0 tpl:z-modal tpl:flex tpl:items-center tpl:justify-center`,style:t(i(P)),onClick:a[6]||=p(e=>N(`close`),[`self`])},[g(`div`,{ref:e=>f.value=e,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`tpl-link-dialog-title`,class:`tpl:w-[400px] tpl:overflow-hidden tpl:rounded-lg tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:shadow-lg`},[g(`div`,w,[g(`h4`,T,h(e.isEditingLink?i(I).linkDialog.editLink:i(I).linkDialog.insertLink),1),g(`button`,{type:`button`,"aria-label":i(I).linkDialog.cancel,class:`tpl:flex tpl:size-7 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:border-none tpl:bg-transparent tpl:p-0 tpl:text-[var(--tpl-text-muted)] tpl:hover:bg-[var(--tpl-bg-hover)] tpl:hover:text-[var(--tpl-text)]`,onClick:a[0]||=e=>N(`close`)},[u(i(y),{size:16,"stroke-width":2})],8,E)]),g(`div`,D,[g(`div`,O,[g(`label`,k,h(i(I).linkDialog.urlLabel),1),n(g(`input`,{"onUpdate:modelValue":a[1]||=e=>l.value=e,type:`url`,class:`tpl:w-full tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:px-3 tpl:py-2.5 tpl:text-sm tpl:text-[var(--tpl-text)] tpl:transition-all tpl:duration-150 tpl:outline-none tpl:placeholder:text-[var(--tpl-text-dim)] tpl:focus:border-[var(--tpl-primary)] tpl:focus:shadow-[0_0_0_3px_var(--tpl-primary-light)]`,placeholder:i(I).linkDialog.urlPlaceholder,autofocus:``,onKeydown:a[2]||=e=>N(`keydown`,e)},null,40,A),[[d,l.value]])])]),g(`div`,j,[e.isEditingLink?(_(),m(`button`,{key:0,type:`button`,class:`tpl:inline-flex tpl:cursor-pointer tpl:items-center tpl:rounded-md tpl:border tpl:border-[var(--tpl-danger)] tpl:bg-transparent tpl:px-4 tpl:py-2 tpl:text-[13px] tpl:font-medium tpl:text-[var(--tpl-danger)] tpl:transition-all tpl:duration-150 tpl:hover:bg-[var(--tpl-danger-light)]`,onClick:a[3]||=e=>N(`remove`)},h(i(I).linkDialog.removeLink),1)):c(``,!0),g(`div`,M,[g(`button`,{type:`button`,class:`tpl:inline-flex tpl:cursor-pointer tpl:items-center tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-transparent tpl:px-4 tpl:py-2 tpl:text-[13px] tpl:font-medium tpl:text-[var(--tpl-text-muted)] tpl:transition-all tpl:duration-150 tpl:hover:bg-[var(--tpl-bg-hover)] tpl:hover:text-[var(--tpl-text)]`,onClick:a[4]||=e=>N(`close`)},h(i(I).linkDialog.cancel),1),g(`button`,{type:`button`,class:`tpl:inline-flex tpl:cursor-pointer tpl:items-center tpl:rounded-md tpl:border-none tpl:bg-[var(--tpl-primary)] tpl:px-4 tpl:py-2 tpl:text-[13px] tpl:font-medium tpl:transition-all tpl:duration-150 tpl:hover:bg-[var(--tpl-primary-hover)] tpl:text-[var(--tpl-bg)]`,onClick:a[5]||=e=>N(`insert`)},h(e.isEditingLink?i(I).linkDialog.updateLink:i(I).linkDialog.insertLink),1)])])],512)],12,C)):c(``,!0)]))}}),P={key:0,class:`tpl-text-editable tpl:min-h-[1.5em] tpl:rounded tpl:border tpl:border-dashed tpl:border-[var(--tpl-primary)] tpl:p-2`},F={class:`tpl:animate-pulse tpl:text-[var(--tpl-text-dim)]`},I={key:1,class:`tpl-text-editable tpl:min-h-[1.5em] tpl:rounded tpl:border tpl:border-dashed tpl:p-2 tpl:text-center tpl:text-xs tpl:border-[var(--tpl-danger)] tpl:text-[var(--tpl-text-muted)]`},L=l({__name:`RichTextEditorContent`,props:{editor:{},editorContent:{},isLoading:{type:Boolean},initError:{}},emits:[`retry`],setup(t,{emit:n}){let r=n,{t:a}=x();return(n,o)=>t.isLoading?(_(),m(`div`,P,[g(`div`,F,h(i(a).errors.editorLoading),1)])):t.initError?(_(),m(`div`,I,[f(h(i(a).errors.editorLoadFailed)+` `,1),g(`button`,{class:`tpl:ml-1 tpl:cursor-pointer tpl:border-none tpl:bg-transparent tpl:p-0 tpl:underline tpl:text-[var(--tpl-primary)]`,onClick:o[0]||=e=>r(`retry`)},h(i(a).errors.retry),1)])):t.editorContent&&t.editor?(_(),s(e(t.editorContent),{key:2,editor:t.editor,class:`tpl-text-editable tpl:min-h-[1.5em] tpl:rounded tpl:border tpl:border-dashed tpl:border-[var(--tpl-primary)] tpl:p-2`},null,8,[`editor`])):c(``,!0)}});export{N as n,L as t};
2
+ //# sourceMappingURL=RichTextEditorContent-BUD9veXd.js.map