@templatical/editor 0.7.1 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/{AiChatSidebar-BwLECwsO.js → AiChatSidebar-H7SIsxeC.js} +49 -59
  2. package/dist/{AiFeatureMenu-CVHKharv.js → AiFeatureMenu-CJGX-fP5.js} +1 -1
  3. package/dist/{CloudEditor-S7AzuNwC.js → CloudEditor-BBs3p-mW.js} +124 -120
  4. package/dist/{CollaboratorBar-VZKOv_Zn.js → CollaboratorBar-CiEo25lb.js} +2 -2
  5. package/dist/{CommentsSidebar-BiRtaXYD.js → CommentsSidebar-DikjSLtH.js} +1 -1
  6. package/dist/{CountdownToolbar-CojjlZet.js → CountdownToolbar-Bn4RwJVN.js} +2 -2
  7. package/dist/{DesignReferenceSidebar-Ci9HIGbf.js → DesignReferenceSidebar-D08CLZPA.js} +1 -1
  8. package/dist/{ModuleBrowserModal-D7IYx1Nh.js → ModuleBrowserModal-D6637s8j.js} +4 -4
  9. package/dist/{ModulePreviewCanvas-I-uMcK5G.js → ModulePreviewCanvas-DBFmwq-y.js} +1 -1
  10. package/dist/{NumberWithSuffix-CLTBb2Rj.js → NumberWithSuffix-CyFX9w1e.js} +1 -1
  11. package/dist/{ParagraphEditor-BRQTNDFO.js → ParagraphEditor-DC2jOjNh.js} +16 -16
  12. package/dist/{RichTextEditorContent-C3QSg7gd.js → RichTextEditorContent-8NkjTIua.js} +1 -1
  13. package/dist/{SaveModuleDialog-DGGGNZfm.js → SaveModuleDialog-NKT7bWWs.js} +2 -2
  14. package/dist/{SnapshotHistory-C97Iw6xw.js → SnapshotHistory-XNqYxPBj.js} +2 -2
  15. package/dist/{TestEmailModal-B7S8H-VG.js → TestEmailModal-B_-Qo5Us.js} +2 -2
  16. package/dist/{TitleEditor-DhFTYzrw.js → TitleEditor-DnH3yyTr.js} +7 -7
  17. package/dist/{TplModal-BgABm6ju.js → TplModal-BoEZFe3U.js} +2 -2
  18. package/dist/{blockTypeIcons-BSf-3RJ-.js → blockTypeIcons-CUcYuWAO.js} +1 -1
  19. package/dist/bundle-stats.json +7 -7
  20. package/dist/cdn/chunks/{AccessibilityPanel-kgNBRaZV.js → AccessibilityPanel-CQt87OMk.js} +5 -5
  21. package/dist/cdn/chunks/{AccessibilityPanel-kgNBRaZV.js.map → AccessibilityPanel-CQt87OMk.js.map} +1 -1
  22. package/dist/cdn/chunks/{AiFeatureMenu-CRkzwdMg.js → AiFeatureMenu-SxIqfqA0.js} +8 -8
  23. package/dist/cdn/chunks/{AiFeatureMenu-CRkzwdMg.js.map → AiFeatureMenu-SxIqfqA0.js.map} +1 -1
  24. package/dist/cdn/chunks/{BlockA11yBadge-BfuH2Hrg.js → BlockA11yBadge-QqW6nomn.js} +3 -3
  25. package/dist/cdn/chunks/{BlockA11yBadge-BfuH2Hrg.js.map → BlockA11yBadge-QqW6nomn.js.map} +1 -1
  26. package/dist/cdn/chunks/{CloudEditor-BGiN3M_f.js → CloudEditor-ChWUIMw7.js} +165 -161
  27. package/dist/cdn/chunks/CloudEditor-ChWUIMw7.js.map +1 -0
  28. package/dist/cdn/chunks/{CollaboratorBar-CMl3lAZU.js → CollaboratorBar-73LfbzqF.js} +3 -3
  29. package/dist/cdn/chunks/{CollaboratorBar-CMl3lAZU.js.map → CollaboratorBar-73LfbzqF.js.map} +1 -1
  30. package/dist/cdn/chunks/{CountdownBlock-D1RoaOgF.js → CountdownBlock-WYz9b9Ex.js} +2 -2
  31. package/dist/cdn/chunks/{CountdownBlock-D1RoaOgF.js.map → CountdownBlock-WYz9b9Ex.js.map} +1 -1
  32. package/dist/cdn/chunks/{CountdownToolbar-DltwuOer.js → CountdownToolbar-B9fPfFqp.js} +3 -3
  33. package/dist/cdn/chunks/{CountdownToolbar-DltwuOer.js.map → CountdownToolbar-B9fPfFqp.js.map} +1 -1
  34. package/dist/cdn/chunks/{ModuleBrowserModal-3uu2mXR9.js → ModuleBrowserModal-DfnJQBkM.js} +8 -8
  35. package/dist/cdn/chunks/{ModuleBrowserModal-3uu2mXR9.js.map → ModuleBrowserModal-DfnJQBkM.js.map} +1 -1
  36. package/dist/cdn/chunks/{ModulePreviewCanvas-K9CQFr7p.js → ModulePreviewCanvas-DE4_oHA_.js} +20 -20
  37. package/dist/cdn/chunks/{ModulePreviewCanvas-K9CQFr7p.js.map → ModulePreviewCanvas-DE4_oHA_.js.map} +1 -1
  38. package/dist/cdn/chunks/{NumberWithSuffix-BIFgtqGs.js → NumberWithSuffix-BST0yRor.js} +2 -2
  39. package/dist/cdn/chunks/{NumberWithSuffix-BIFgtqGs.js.map → NumberWithSuffix-BST0yRor.js.map} +1 -1
  40. package/dist/cdn/chunks/{ParagraphEditor-DlpZX_x4.js → ParagraphEditor-CQfijF3i.js} +36 -36
  41. package/dist/cdn/chunks/{ParagraphEditor-DlpZX_x4.js.map → ParagraphEditor-CQfijF3i.js.map} +1 -1
  42. package/dist/cdn/chunks/{RichTextEditorContent-CPGT8h-O.js → RichTextEditorContent-CBds8dnm.js} +5 -5
  43. package/dist/cdn/chunks/{RichTextEditorContent-CPGT8h-O.js.map → RichTextEditorContent-CBds8dnm.js.map} +1 -1
  44. package/dist/cdn/chunks/{SaveModuleDialog-_uaJscj1.js → SaveModuleDialog-DXhuZgZ4.js} +13 -13
  45. package/dist/cdn/chunks/{SaveModuleDialog-_uaJscj1.js.map → SaveModuleDialog-DXhuZgZ4.js.map} +1 -1
  46. package/dist/cdn/chunks/{TitleEditor-Kerz6US8.js → TitleEditor-BdQvH7eK.js} +7 -7
  47. package/dist/cdn/chunks/{TitleEditor-Kerz6US8.js.map → TitleEditor-BdQvH7eK.js.map} +1 -1
  48. package/dist/cdn/chunks/{blockTypeIcons-BeOhGtoo.js → blockTypeIcons-D3CGFW5P.js} +8 -8
  49. package/dist/cdn/chunks/{blockTypeIcons-BeOhGtoo.js.map → blockTypeIcons-D3CGFW5P.js.map} +1 -1
  50. package/dist/cdn/chunks/{extensions-BZYkPlKr.js → extensions-BE81zpqP.js} +50 -48
  51. package/dist/cdn/chunks/{extensions-BZYkPlKr.js.map → extensions-BE81zpqP.js.map} +1 -1
  52. package/dist/cdn/chunks/{features-DzIN-Nua.js → features-CXF_YKlL.js} +1313 -1122
  53. package/dist/cdn/chunks/features-CXF_YKlL.js.map +1 -0
  54. package/dist/cdn/chunks/{icons-Nvr6w13E.js → icons-KbmhF7rg.js} +2 -2
  55. package/dist/cdn/chunks/{icons-Nvr6w13E.js.map → icons-KbmhF7rg.js.map} +1 -1
  56. package/dist/cdn/chunks/{media-library-BzT7BoGU.js → media-library-BERe10wA.js} +103 -103
  57. package/dist/cdn/chunks/{media-library-BzT7BoGU.js.map → media-library-BERe10wA.js.map} +1 -1
  58. package/dist/cdn/chunks/{quality-C328caFm.js → quality-CmkY1kMU.js} +309 -309
  59. package/dist/cdn/chunks/{quality-C328caFm.js.map → quality-CmkY1kMU.js.map} +1 -1
  60. package/dist/cdn/chunks/{renderer-eDlxzlJI.js → renderer-OttGEYkY.js} +50 -50
  61. package/dist/cdn/chunks/{renderer-eDlxzlJI.js.map → renderer-OttGEYkY.js.map} +1 -1
  62. package/dist/cdn/chunks/{src-DKNTQJVO.js → src-C21GI0p6.js} +6 -6
  63. package/dist/cdn/chunks/{src-DKNTQJVO.js.map → src-C21GI0p6.js.map} +1 -1
  64. package/dist/cdn/chunks/styles-Cy-My9zK.js +2976 -0
  65. package/dist/cdn/chunks/styles-Cy-My9zK.js.map +1 -0
  66. package/dist/cdn/editor.css +1 -1
  67. package/dist/cdn/editor.js +109 -106
  68. package/dist/cdn/editor.js.map +1 -1
  69. package/dist/{cloud-a3VovHva.js → cloud-k0DgeCo2.js} +11 -0
  70. package/dist/{dist-DDJIWTRY.js → dist-B2jcQhv8.js} +1 -1
  71. package/dist/{dist-wzMIGj-D.js → dist-BYt3jdCR.js} +1 -1
  72. package/dist/{dist-aRzjfSRN.js → dist-CISFttkF.js} +1 -1
  73. package/dist/{dist-D6uC2xhi.js → dist-CfQPBf15.js} +1 -1
  74. package/dist/{dist-DjviJBCi.js → dist-DD-9hatO.js} +1 -1
  75. package/dist/{dist-KoBJjK1G.js → dist-DUvhjQ2-.js} +1 -1
  76. package/dist/{dist-BaQIYPsn.js → dist-DVwOAodp.js} +1 -1
  77. package/dist/{dist-Cp0zXPAD.js → dist-DxD1kSdH.js} +1 -1
  78. package/dist/{dist-Pk4MhWMP.js → dist-U5guDm2w.js} +1 -1
  79. package/dist/{dist-D90y8dvT.js → dist-hfu7I2rO.js} +3 -3
  80. package/dist/{dist-us-RpCWN.js → dist-v8h02hhE.js} +1 -1
  81. package/dist/{extensions-D-J02CiP.js → extensions-p6UBqXfg.js} +30 -28
  82. package/dist/index.d.ts +8 -8
  83. package/dist/style.css +1 -1
  84. package/dist/{styles-DeNciUTX.js → styles-BP15QmP3.js} +1078 -1056
  85. package/dist/templatical-editor.js +108 -105
  86. package/dist/useAliveFlag-D8GoB4VE.js +10 -0
  87. package/dist/{useEditorCore-uCU9Ny0M.js → useEditorCore-_rbu6iMu.js} +969 -791
  88. package/package.json +7 -7
  89. package/dist/cdn/chunks/CloudEditor-BGiN3M_f.js.map +0 -1
  90. package/dist/cdn/chunks/features-DzIN-Nua.js.map +0 -1
  91. package/dist/cdn/chunks/styles-lcwmaOou.js +0 -2955
  92. package/dist/cdn/chunks/styles-lcwmaOou.js.map +0 -1
  93. /package/dist/{AccessibilityPanel-D-PqmHdH.js → AccessibilityPanel-BeUibrUb.js} +0 -0
  94. /package/dist/{BlockA11yBadge-BFIw0h1m.js → BlockA11yBadge-BhyoMZJ9.js} +0 -0
  95. /package/dist/{CountdownBlock-Cq8A8WrM.js → CountdownBlock-ByJ0_8Pk.js} +0 -0
  96. /package/dist/{TemplateScoringPanel-V79yrEPC.js → TemplateScoringPanel-kYOGtac3.js} +0 -0
  97. /package/dist/{de-BhIWu_bO.js → de-C9hp3n_a.js} +0 -0
  98. /package/dist/{de-Di4MEjjx.js → de-GOtR9DwW.js} +0 -0
  99. /package/dist/{dist-iLBdeBDR.js → dist-CQQS9SRN.js} +0 -0
  100. /package/dist/{emojiData-DX3E0XT-.js → emojiData-DrBuvEoP.js} +0 -0
  101. /package/dist/{en-D7HRbYah.js → en-Dv776AqL.js} +0 -0
  102. /package/dist/{en-BSuzi-Pd.js → en-dFFQVzNn.js} +0 -0
  103. /package/dist/{formatRelativeTime-BOEf47hq.js → formatRelativeTime-bvx5sFh5.js} +0 -0
  104. /package/dist/{liquid.browser-CdMv1BTn.js → liquid.browser-DX8ZHRdq.js} +0 -0
  105. /package/dist/{pt-BR-K32lt6YP.js → pt-BR-6n58Fl_q.js} +0 -0
  106. /package/dist/{pt-BR-CCVBRais.js → pt-BR-iOr79aDg.js} +0 -0
  107. /package/dist/{readableTextColor-CY3SiRnt.js → readableTextColor-CXzrEnNb.js} +0 -0
  108. /package/dist/{styleConstants-fWzlIIwN.js → styleConstants-DkfOPzGu.js} +0 -0
  109. /package/dist/{usePopoverRoot-BxJrqnMD.js → usePopoverRoot-BwzFSPLy.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { K as e, M as t, T as n, ct as r, d as i, g as a, h as o, it as s, m as c, ot as l, p as u, st as d, u as f, v as p, x as m, y as h } from "./draggable-P6QWzy4g.js";
2
- import { $t as g, J as _, Pt as v, _t as y, a as b, en as x } from "./features-DzIN-Nua.js";
3
- import { B as S, H as C, X as w, x as T } from "./icons-Nvr6w13E.js";
4
- import { n as E, t as D } from "./RichTextEditorContent-CPGT8h-O.js";
2
+ import { Ft as g, Y as _, a as v, en as y, tn as b, vt as x } from "./features-CXF_YKlL.js";
3
+ import { B as S, H as C, X as w, x as T } from "./icons-KbmhF7rg.js";
4
+ import { n as E, t as D } from "./RichTextEditorContent-CBds8dnm.js";
5
5
  //#region src/components/blocks/TitleEditor.vue?vue&type=script&setup=true&lang.ts
6
6
  var ee = { class: "tpl-text-editor-wrapper tpl:relative" }, O = ["data-tpl-theme", "aria-label"], k = ["aria-label", "title"], A = ["aria-label", "title"], j = ["aria-label", "title"], M = {
7
7
  key: 0,
@@ -17,7 +17,7 @@ var ee = { class: "tpl-text-editor-wrapper tpl:relative" }, O = ["data-tpl-theme
17
17
  },
18
18
  emits: ["done"],
19
19
  setup(m, { emit: F }) {
20
- let I = m, L = F, R = n(g, null), z = n(x, null), B = b(), { t: V } = v(), { editor: H, EditorContent: U, isLoading: W, initError: G, retry: K, showLinkDialog: q, linkUrl: J, linkDialogRef: Y, canRequestMergeTag: X, openLinkDialog: Z, insertLink: Q, removeLink: te, closeLinkDialog: ne, handleLinkKeydown: re, handleAddMergeTag: $ } = _({
20
+ let I = m, L = F, R = n(y, null), z = n(b, null), B = v(), { t: V } = g(), { editor: H, EditorContent: U, isLoading: W, initError: G, retry: K, showLinkDialog: q, linkUrl: J, linkDialogRef: Y, canRequestMergeTag: X, openLinkDialog: Z, insertLink: Q, removeLink: te, closeLinkDialog: ne, handleLinkKeydown: re, handleAddMergeTag: $ } = _({
21
21
  blockId: () => I.block.id,
22
22
  blockContent: () => I.block.content,
23
23
  onDone: () => L("done"),
@@ -27,7 +27,7 @@ var ee = { class: "tpl-text-editor-wrapper tpl:relative" }, O = ["data-tpl-theme
27
27
  import("./tiptap-BwTCLVWl.js").then((e) => e.i),
28
28
  import("./tiptap-BwTCLVWl.js").then((e) => e.a),
29
29
  import("./tiptap-BwTCLVWl.js").then((e) => e.u),
30
- import("./extensions-BZYkPlKr.js")
30
+ import("./extensions-BE81zpqP.js")
31
31
  ]);
32
32
  return {
33
33
  TiptapEditor: a,
@@ -127,7 +127,7 @@ var ee = { class: "tpl-text-editor-wrapper tpl:relative" }, O = ["data-tpl-theme
127
127
  size: 16,
128
128
  "stroke-width": 2
129
129
  }), p(" " + r(s(V).mergeTag.add), 1)], 8, N)) : o("", !0)
130
- ], 64)) : (t(), a("div", P, [h(s(y), {
130
+ ], 64)) : (t(), a("div", P, [h(s(x), {
131
131
  class: "tpl-spinner",
132
132
  size: 14,
133
133
  "stroke-width": 2
@@ -172,4 +172,4 @@ var ee = { class: "tpl-text-editor-wrapper tpl:relative" }, O = ["data-tpl-theme
172
172
  //#endregion
173
173
  export { F as default };
174
174
 
175
- //# sourceMappingURL=TitleEditor-Kerz6US8.js.map
175
+ //# sourceMappingURL=TitleEditor-BdQvH7eK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TitleEditor-Kerz6US8.js","names":[],"sources":["../../../src/components/blocks/TitleEditor.vue","../../../src/components/blocks/TitleEditor.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { useRichTextEditor } from \"../../composables/useRichTextEditor\";\nimport { usePopoverRoot } from \"../../composables/usePopoverRoot\";\nimport type { TitleBlock as TitleBlockType } from \"@templatical/types\";\nimport { Bold, Italic, Link, LoaderCircle, ScanLine } from \"@lucide/vue\";\nimport { inject } from \"vue\";\nimport { THEME_STYLES_KEY, UI_THEME_KEY } from \"../../keys\";\nimport RichTextLinkDialog from \"./RichTextLinkDialog.vue\";\nimport RichTextEditorContent from \"./RichTextEditorContent.vue\";\n\nconst props = defineProps<{\n block: TitleBlockType;\n toolbarPosition: { top: number; left: number };\n}>();\n\nconst emit = defineEmits<{\n (e: \"done\"): void;\n}>();\n\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst tplUiTheme = inject(UI_THEME_KEY, null);\nconst popoverRoot = usePopoverRoot();\n\nconst { t } = useI18n();\n\nconst {\n editor,\n EditorContent,\n isLoading,\n initError,\n retry,\n showLinkDialog,\n linkUrl,\n linkDialogRef,\n canRequestMergeTag,\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: \"TitleEditor\",\n async loadExtensions({\n mergeTags,\n syntax,\n triggerChar,\n autocompleteEnabled,\n suggestionEmptyText,\n }) {\n const [\n { Editor: TiptapEditor, EditorContent: EC },\n { default: StarterKit },\n { default: LinkExt },\n { MergeTagNode, MergeTagSuggestion, LogicMergeTagNode },\n ] = await Promise.all([\n import(\"@tiptap/vue-3\"),\n import(\"@tiptap/starter-kit\"),\n import(\"@tiptap/extension-link\"),\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 bulletList: false,\n orderedList: false,\n listItem: false,\n strike: false,\n }),\n LinkExt.configure({\n openOnClick: false,\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n MergeTagNode.configure({ mergeTags, syntax }),\n LogicMergeTagNode.configure({ syntax }),\n ...(autocompleteEnabled && triggerChar && mergeTags.length > 0\n ? [\n MergeTagSuggestion.configure({\n mergeTags,\n char: triggerChar,\n emptyText: suggestionEmptyText,\n popoverRoot,\n }),\n ]\n : []),\n ],\n };\n },\n});\n</script>\n\n<template>\n <div class=\"tpl-text-editor-wrapper tpl:relative\">\n <Teleport v-if=\"popoverRoot\" :to=\"popoverRoot\">\n <div\n :data-tpl-theme=\"tplUiTheme\"\n role=\"toolbar\"\n :aria-label=\"t.titleEditor.toolbar\"\n 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\"\n :style=\"{\n ...themeStyles,\n top: `${toolbarPosition.top}px`,\n left: `${toolbarPosition.left}px`,\n transform: 'translateY(-100%)',\n }\"\n >\n <template v-if=\"!isLoading && editor\">\n <!-- Bold -->\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.titleEditor.bold\"\n :title=\"t.titleEditor.bold\"\n @click=\"editor?.chain().focus().toggleBold().run()\"\n >\n <Bold :size=\"16\" :stroke-width=\"2.5\" />\n </button>\n <!-- Italic -->\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.titleEditor.italic\"\n :title=\"t.titleEditor.italic\"\n @click=\"editor?.chain().focus().toggleItalic().run()\"\n >\n <Italic :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 <!-- 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.titleEditor.addLink\"\n :title=\"t.titleEditor.addLink\"\n @click=\"openLinkDialog\"\n >\n <Link :size=\"16\" :stroke-width=\"2\" />\n </button>\n <!-- Add Merge Tag -->\n <span\n v-if=\"canRequestMergeTag\"\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n ></span>\n <button\n v-if=\"canRequestMergeTag\"\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=\"handleAddMergeTag\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.add }}\n </button>\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\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","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { useRichTextEditor } from \"../../composables/useRichTextEditor\";\nimport { usePopoverRoot } from \"../../composables/usePopoverRoot\";\nimport type { TitleBlock as TitleBlockType } from \"@templatical/types\";\nimport { Bold, Italic, Link, LoaderCircle, ScanLine } from \"@lucide/vue\";\nimport { inject } from \"vue\";\nimport { THEME_STYLES_KEY, UI_THEME_KEY } from \"../../keys\";\nimport RichTextLinkDialog from \"./RichTextLinkDialog.vue\";\nimport RichTextEditorContent from \"./RichTextEditorContent.vue\";\n\nconst props = defineProps<{\n block: TitleBlockType;\n toolbarPosition: { top: number; left: number };\n}>();\n\nconst emit = defineEmits<{\n (e: \"done\"): void;\n}>();\n\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst tplUiTheme = inject(UI_THEME_KEY, null);\nconst popoverRoot = usePopoverRoot();\n\nconst { t } = useI18n();\n\nconst {\n editor,\n EditorContent,\n isLoading,\n initError,\n retry,\n showLinkDialog,\n linkUrl,\n linkDialogRef,\n canRequestMergeTag,\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: \"TitleEditor\",\n async loadExtensions({\n mergeTags,\n syntax,\n triggerChar,\n autocompleteEnabled,\n suggestionEmptyText,\n }) {\n const [\n { Editor: TiptapEditor, EditorContent: EC },\n { default: StarterKit },\n { default: LinkExt },\n { MergeTagNode, MergeTagSuggestion, LogicMergeTagNode },\n ] = await Promise.all([\n import(\"@tiptap/vue-3\"),\n import(\"@tiptap/starter-kit\"),\n import(\"@tiptap/extension-link\"),\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 bulletList: false,\n orderedList: false,\n listItem: false,\n strike: false,\n }),\n LinkExt.configure({\n openOnClick: false,\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n MergeTagNode.configure({ mergeTags, syntax }),\n LogicMergeTagNode.configure({ syntax }),\n ...(autocompleteEnabled && triggerChar && mergeTags.length > 0\n ? [\n MergeTagSuggestion.configure({\n mergeTags,\n char: triggerChar,\n emptyText: suggestionEmptyText,\n popoverRoot,\n }),\n ]\n : []),\n ],\n };\n },\n});\n</script>\n\n<template>\n <div class=\"tpl-text-editor-wrapper tpl:relative\">\n <Teleport v-if=\"popoverRoot\" :to=\"popoverRoot\">\n <div\n :data-tpl-theme=\"tplUiTheme\"\n role=\"toolbar\"\n :aria-label=\"t.titleEditor.toolbar\"\n 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\"\n :style=\"{\n ...themeStyles,\n top: `${toolbarPosition.top}px`,\n left: `${toolbarPosition.left}px`,\n transform: 'translateY(-100%)',\n }\"\n >\n <template v-if=\"!isLoading && editor\">\n <!-- Bold -->\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.titleEditor.bold\"\n :title=\"t.titleEditor.bold\"\n @click=\"editor?.chain().focus().toggleBold().run()\"\n >\n <Bold :size=\"16\" :stroke-width=\"2.5\" />\n </button>\n <!-- Italic -->\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.titleEditor.italic\"\n :title=\"t.titleEditor.italic\"\n @click=\"editor?.chain().focus().toggleItalic().run()\"\n >\n <Italic :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 <!-- 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.titleEditor.addLink\"\n :title=\"t.titleEditor.addLink\"\n @click=\"openLinkDialog\"\n >\n <Link :size=\"16\" :stroke-width=\"2\" />\n </button>\n <!-- Add Merge Tag -->\n <span\n v-if=\"canRequestMergeTag\"\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n ></span>\n <button\n v-if=\"canRequestMergeTag\"\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=\"handleAddMergeTag\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.add }}\n </button>\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\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"],"mappings":"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"}
1
+ {"version":3,"file":"TitleEditor-BdQvH7eK.js","names":[],"sources":["../../../src/components/blocks/TitleEditor.vue","../../../src/components/blocks/TitleEditor.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { useRichTextEditor } from \"../../composables/useRichTextEditor\";\nimport { usePopoverRoot } from \"../../composables/usePopoverRoot\";\nimport type { TitleBlock as TitleBlockType } from \"@templatical/types\";\nimport { Bold, Italic, Link, LoaderCircle, ScanLine } from \"@lucide/vue\";\nimport { inject } from \"vue\";\nimport { THEME_STYLES_KEY, UI_THEME_KEY } from \"../../keys\";\nimport RichTextLinkDialog from \"./RichTextLinkDialog.vue\";\nimport RichTextEditorContent from \"./RichTextEditorContent.vue\";\n\nconst props = defineProps<{\n block: TitleBlockType;\n toolbarPosition: { top: number; left: number };\n}>();\n\nconst emit = defineEmits<{\n (e: \"done\"): void;\n}>();\n\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst tplUiTheme = inject(UI_THEME_KEY, null);\nconst popoverRoot = usePopoverRoot();\n\nconst { t } = useI18n();\n\nconst {\n editor,\n EditorContent,\n isLoading,\n initError,\n retry,\n showLinkDialog,\n linkUrl,\n linkDialogRef,\n canRequestMergeTag,\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: \"TitleEditor\",\n async loadExtensions({\n mergeTags,\n syntax,\n triggerChar,\n autocompleteEnabled,\n suggestionEmptyText,\n }) {\n const [\n { Editor: TiptapEditor, EditorContent: EC },\n { default: StarterKit },\n { default: LinkExt },\n { MergeTagNode, MergeTagSuggestion, LogicMergeTagNode },\n ] = await Promise.all([\n import(\"@tiptap/vue-3\"),\n import(\"@tiptap/starter-kit\"),\n import(\"@tiptap/extension-link\"),\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 bulletList: false,\n orderedList: false,\n listItem: false,\n strike: false,\n }),\n LinkExt.configure({\n openOnClick: false,\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n MergeTagNode.configure({ mergeTags, syntax }),\n LogicMergeTagNode.configure({ syntax }),\n ...(autocompleteEnabled && triggerChar && mergeTags.length > 0\n ? [\n MergeTagSuggestion.configure({\n mergeTags,\n char: triggerChar,\n emptyText: suggestionEmptyText,\n popoverRoot,\n }),\n ]\n : []),\n ],\n };\n },\n});\n</script>\n\n<template>\n <div class=\"tpl-text-editor-wrapper tpl:relative\">\n <Teleport v-if=\"popoverRoot\" :to=\"popoverRoot\">\n <div\n :data-tpl-theme=\"tplUiTheme\"\n role=\"toolbar\"\n :aria-label=\"t.titleEditor.toolbar\"\n 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\"\n :style=\"{\n ...themeStyles,\n top: `${toolbarPosition.top}px`,\n left: `${toolbarPosition.left}px`,\n transform: 'translateY(-100%)',\n }\"\n >\n <template v-if=\"!isLoading && editor\">\n <!-- Bold -->\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.titleEditor.bold\"\n :title=\"t.titleEditor.bold\"\n @click=\"editor?.chain().focus().toggleBold().run()\"\n >\n <Bold :size=\"16\" :stroke-width=\"2.5\" />\n </button>\n <!-- Italic -->\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.titleEditor.italic\"\n :title=\"t.titleEditor.italic\"\n @click=\"editor?.chain().focus().toggleItalic().run()\"\n >\n <Italic :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 <!-- 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.titleEditor.addLink\"\n :title=\"t.titleEditor.addLink\"\n @click=\"openLinkDialog\"\n >\n <Link :size=\"16\" :stroke-width=\"2\" />\n </button>\n <!-- Add Merge Tag -->\n <span\n v-if=\"canRequestMergeTag\"\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n ></span>\n <button\n v-if=\"canRequestMergeTag\"\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=\"handleAddMergeTag\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.add }}\n </button>\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\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","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { useRichTextEditor } from \"../../composables/useRichTextEditor\";\nimport { usePopoverRoot } from \"../../composables/usePopoverRoot\";\nimport type { TitleBlock as TitleBlockType } from \"@templatical/types\";\nimport { Bold, Italic, Link, LoaderCircle, ScanLine } from \"@lucide/vue\";\nimport { inject } from \"vue\";\nimport { THEME_STYLES_KEY, UI_THEME_KEY } from \"../../keys\";\nimport RichTextLinkDialog from \"./RichTextLinkDialog.vue\";\nimport RichTextEditorContent from \"./RichTextEditorContent.vue\";\n\nconst props = defineProps<{\n block: TitleBlockType;\n toolbarPosition: { top: number; left: number };\n}>();\n\nconst emit = defineEmits<{\n (e: \"done\"): void;\n}>();\n\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst tplUiTheme = inject(UI_THEME_KEY, null);\nconst popoverRoot = usePopoverRoot();\n\nconst { t } = useI18n();\n\nconst {\n editor,\n EditorContent,\n isLoading,\n initError,\n retry,\n showLinkDialog,\n linkUrl,\n linkDialogRef,\n canRequestMergeTag,\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: \"TitleEditor\",\n async loadExtensions({\n mergeTags,\n syntax,\n triggerChar,\n autocompleteEnabled,\n suggestionEmptyText,\n }) {\n const [\n { Editor: TiptapEditor, EditorContent: EC },\n { default: StarterKit },\n { default: LinkExt },\n { MergeTagNode, MergeTagSuggestion, LogicMergeTagNode },\n ] = await Promise.all([\n import(\"@tiptap/vue-3\"),\n import(\"@tiptap/starter-kit\"),\n import(\"@tiptap/extension-link\"),\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 bulletList: false,\n orderedList: false,\n listItem: false,\n strike: false,\n }),\n LinkExt.configure({\n openOnClick: false,\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n MergeTagNode.configure({ mergeTags, syntax }),\n LogicMergeTagNode.configure({ syntax }),\n ...(autocompleteEnabled && triggerChar && mergeTags.length > 0\n ? [\n MergeTagSuggestion.configure({\n mergeTags,\n char: triggerChar,\n emptyText: suggestionEmptyText,\n popoverRoot,\n }),\n ]\n : []),\n ],\n };\n },\n});\n</script>\n\n<template>\n <div class=\"tpl-text-editor-wrapper tpl:relative\">\n <Teleport v-if=\"popoverRoot\" :to=\"popoverRoot\">\n <div\n :data-tpl-theme=\"tplUiTheme\"\n role=\"toolbar\"\n :aria-label=\"t.titleEditor.toolbar\"\n 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\"\n :style=\"{\n ...themeStyles,\n top: `${toolbarPosition.top}px`,\n left: `${toolbarPosition.left}px`,\n transform: 'translateY(-100%)',\n }\"\n >\n <template v-if=\"!isLoading && editor\">\n <!-- Bold -->\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.titleEditor.bold\"\n :title=\"t.titleEditor.bold\"\n @click=\"editor?.chain().focus().toggleBold().run()\"\n >\n <Bold :size=\"16\" :stroke-width=\"2.5\" />\n </button>\n <!-- Italic -->\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.titleEditor.italic\"\n :title=\"t.titleEditor.italic\"\n @click=\"editor?.chain().focus().toggleItalic().run()\"\n >\n <Italic :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 <!-- 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.titleEditor.addLink\"\n :title=\"t.titleEditor.addLink\"\n @click=\"openLinkDialog\"\n >\n <Link :size=\"16\" :stroke-width=\"2\" />\n </button>\n <!-- Add Merge Tag -->\n <span\n v-if=\"canRequestMergeTag\"\n class=\"tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]\"\n ></span>\n <button\n v-if=\"canRequestMergeTag\"\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=\"handleAddMergeTag\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.add }}\n </button>\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\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"],"mappings":"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"}
@@ -1,22 +1,22 @@
1
- import { ct as e, dt as t, ht as n, wt as r, yt as i } from "./features-DzIN-Nua.js";
2
- import { D as a, F as o, J as s, M as c, O as l, T as u, U as d, a as f } from "./icons-Nvr6w13E.js";
1
+ import { Tt as e, bt as t, ft as n, gt as r, lt as i } from "./features-CXF_YKlL.js";
2
+ import { D as a, F as o, J as s, M as c, O as l, T as u, U as d, a as f } from "./icons-KbmhF7rg.js";
3
3
  //#region src/utils/blockTypeIcons.ts
4
4
  var p = {
5
5
  section: s,
6
6
  title: d,
7
7
  paragraph: l,
8
- image: i,
8
+ image: t,
9
9
  button: u,
10
10
  divider: o,
11
11
  video: a,
12
- social: t,
13
- menu: n,
14
- table: e,
12
+ social: n,
13
+ menu: r,
14
+ table: i,
15
15
  spacer: c,
16
16
  countdown: f,
17
- html: r
17
+ html: e
18
18
  };
19
19
  //#endregion
20
20
  export { p as t };
21
21
 
22
- //# sourceMappingURL=blockTypeIcons-BeOhGtoo.js.map
22
+ //# sourceMappingURL=blockTypeIcons-D3CGFW5P.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blockTypeIcons-BeOhGtoo.js","names":[],"sources":["../../../src/utils/blockTypeIcons.ts"],"sourcesContent":["import {\n Code,\n Columns3,\n Heading,\n Image,\n Minus,\n MoveVertical,\n Navigation,\n Pilcrow,\n Play,\n RectangleHorizontal,\n Share2,\n Table,\n Timer,\n} from \"@lucide/vue\";\nimport type { Component } from \"vue\";\n\nexport const blockTypeIcons: Record<string, Component> = {\n section: Columns3,\n title: Heading,\n paragraph: Pilcrow,\n image: Image,\n button: RectangleHorizontal,\n divider: Minus,\n video: Play,\n social: Share2,\n menu: Navigation,\n table: Table,\n spacer: MoveVertical,\n countdown: Timer,\n html: Code,\n};\n"],"mappings":";;;AAiBA,IAAa,IAA4C;CACvD,SAAS;CACT,OAAO;CACP,WAAW;CACX,OAAO;CACP,QAAQ;CACR,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;CACR,WAAW;CACX,MAAM;CACP"}
1
+ {"version":3,"file":"blockTypeIcons-D3CGFW5P.js","names":[],"sources":["../../../src/utils/blockTypeIcons.ts"],"sourcesContent":["import {\n Code,\n Columns3,\n Heading,\n Image,\n Minus,\n MoveVertical,\n Navigation,\n Pilcrow,\n Play,\n RectangleHorizontal,\n Share2,\n Table,\n Timer,\n} from \"@lucide/vue\";\nimport type { Component } from \"vue\";\n\nexport const blockTypeIcons: Record<string, Component> = {\n section: Columns3,\n title: Heading,\n paragraph: Pilcrow,\n image: Image,\n button: RectangleHorizontal,\n divider: Minus,\n video: Play,\n social: Share2,\n menu: Navigation,\n table: Table,\n spacer: MoveVertical,\n countdown: Timer,\n html: Code,\n};\n"],"mappings":";;;AAiBA,IAAa,IAA4C;CACvD,SAAS;CACT,OAAO;CACP,WAAW;CACX,OAAO;CACP,QAAQ;CACR,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;CACR,WAAW;CACX,MAAM;CACP"}
@@ -1,5 +1,5 @@
1
1
  import { C as e, H as t, M as n, O as r, P as i, V as a, Z as o, c as s, ct as c, f as l, g as u, h as d, it as f, l as p, m, o as h, ot as g, p as _, r as v, st as y, u as b, x } from "./draggable-P6QWzy4g.js";
2
- import { Pt as S, Q as C, _n as w, gn as T, hn as E, pn as D } from "./features-DzIN-Nua.js";
2
+ import { $ as S, Ft as C, _n as w, gn as T, mn as E, vn as D } from "./features-CXF_YKlL.js";
3
3
  import { _ as O, g as k, h as A, n as j, r as M, t as N, v as P, y as F } from "./tiptap-BwTCLVWl.js";
4
4
  //#region src/extensions/FontSize.ts
5
5
  var I = A.create({
@@ -82,9 +82,9 @@ var I = A.create({
82
82
  updateAttributes: { type: Function }
83
83
  },
84
84
  setup(e) {
85
- let i = e, { syntax: v } = C(), { t: b } = S(), x = l(() => w(i.node.attrs.value, v)), T = l(() => E(i.node.attrs.value, v)), D = o(!1), O = o(""), k = o(null), A = !1;
85
+ let i = e, { syntax: v } = S(), { t: b } = C(), x = l(() => D(i.node.attrs.value, v)), w = l(() => T(i.node.attrs.value, v)), E = o(!1), O = o(""), k = o(null), A = !1;
86
86
  function M() {
87
- O.value = i.node.attrs.value, A = !1, D.value = !0, r(() => {
87
+ O.value = i.node.attrs.value, A = !1, E.value = !0, r(() => {
88
88
  k.value?.focus(), k.value?.select();
89
89
  });
90
90
  }
@@ -93,16 +93,16 @@ var I = A.create({
93
93
  A = !0;
94
94
  let e = O.value.trim();
95
95
  if (!e) {
96
- D.value = !1;
96
+ E.value = !1;
97
97
  return;
98
98
  }
99
99
  e !== i.node.attrs.value && i.updateAttributes({
100
100
  value: e,
101
- keyword: w(e, v) ? E(e, v) : ""
102
- }), D.value = !1;
101
+ keyword: D(e, v) ? T(e, v) : ""
102
+ }), E.value = !1;
103
103
  }
104
104
  function P(e) {
105
- e.key === "Enter" ? (e.preventDefault(), N()) : e.key === "Escape" && (D.value = !1);
105
+ e.key === "Enter" ? (e.preventDefault(), N()) : e.key === "Escape" && (E.value = !1);
106
106
  }
107
107
  return (r, i) => (n(), m(f(j), {
108
108
  as: "span",
@@ -110,7 +110,7 @@ var I = A.create({
110
110
  style: y(x.value ? "background-color: transparent; border: 1.5px solid color-mix(in srgb, var(--tpl-primary) 50%, transparent); color: var(--tpl-primary);" : ""),
111
111
  contenteditable: "false"
112
112
  }, {
113
- default: a(() => [D.value ? t((n(), u("input", {
113
+ default: a(() => [E.value ? t((n(), u("input", {
114
114
  key: 0,
115
115
  ref_key: "inputRef",
116
116
  ref: k,
@@ -128,7 +128,7 @@ var I = A.create({
128
128
  "data-tooltip": e.node.attrs.value,
129
129
  onClick: p(M, ["stop"]),
130
130
  onKeydown: [s(p(M, ["stop"]), ["enter"]), s(p(M, ["prevent", "stop"]), ["space"])]
131
- }, c(T.value), 41, ee)) : (n(), u("span", {
131
+ }, c(w.value), 41, ee)) : (n(), u("span", {
132
132
  key: 2,
133
133
  role: "button",
134
134
  tabindex: "0",
@@ -184,7 +184,7 @@ var H = O.create({
184
184
  inline: !0,
185
185
  atom: !0,
186
186
  addOptions() {
187
- return { syntax: D.liquid };
187
+ return { syntax: E.liquid };
188
188
  },
189
189
  addAttributes() {
190
190
  return {
@@ -202,12 +202,12 @@ var H = O.create({
202
202
  return [{ tag: "span[data-logic-merge-tag]" }];
203
203
  },
204
204
  renderHTML({ node: e, HTMLAttributes: t }) {
205
- if (!w(e.attrs.value, this.options.syntax)) return [
205
+ if (!D(e.attrs.value, this.options.syntax)) return [
206
206
  "span",
207
207
  {},
208
208
  e.attrs.value
209
209
  ];
210
- let n = E(e.attrs.value, this.options.syntax);
210
+ let n = T(e.attrs.value, this.options.syntax);
211
211
  return [
212
212
  "span",
213
213
  F(t, {
@@ -231,8 +231,8 @@ var H = O.create({
231
231
  find: RegExp(this.options.syntax.logic.source + "$", ""),
232
232
  handler: ({ state: e, range: t, match: n }) => {
233
233
  let r = n[0];
234
- if (!w(r, this.options.syntax)) return;
235
- let i = E(r, this.options.syntax), a = this.type.create({
234
+ if (!D(r, this.options.syntax)) return;
235
+ let i = T(r, this.options.syntax), a = this.type.create({
236
236
  value: r,
237
237
  keyword: i
238
238
  });
@@ -245,8 +245,8 @@ var H = O.create({
245
245
  find: new RegExp(this.options.syntax.logic.source, "g"),
246
246
  handler: ({ state: e, range: t, match: n }) => {
247
247
  let r = n[0];
248
- if (!w(r, this.options.syntax)) return;
249
- let i = E(r, this.options.syntax), a = this.type.create({
248
+ if (!D(r, this.options.syntax)) return;
249
+ let i = T(r, this.options.syntax), a = this.type.create({
250
250
  value: r,
251
251
  keyword: i
252
252
  });
@@ -266,7 +266,7 @@ var H = O.create({
266
266
  updateAttributes: { type: Function }
267
267
  },
268
268
  setup(e) {
269
- let i = e, { getMergeTagLabel: d } = C(), { t: g } = S(), v = l(() => d(i.node.attrs.value)), y = o(!1), b = o(""), x = o(null);
269
+ let i = e, { getMergeTagLabel: d } = S(), { t: g } = C(), v = l(() => d(i.node.attrs.value)), y = o(!1), b = o(""), x = o(null);
270
270
  function w() {
271
271
  b.value = i.node.attrs.value, y.value = !0, r(() => {
272
272
  x.value?.focus(), x.value?.select();
@@ -342,7 +342,7 @@ var H = O.create({
342
342
  addOptions() {
343
343
  return {
344
344
  mergeTags: [],
345
- syntax: D.liquid
345
+ syntax: E.liquid
346
346
  };
347
347
  },
348
348
  addAttributes() {
@@ -361,7 +361,7 @@ var H = O.create({
361
361
  return [{ tag: "span[data-merge-tag]" }];
362
362
  },
363
363
  renderHTML({ node: e, HTMLAttributes: t }) {
364
- let n = T(e.attrs.value, this.options.mergeTags);
364
+ let n = w(e.attrs.value, this.options.mergeTags);
365
365
  return [
366
366
  "span",
367
367
  F(t, {
@@ -390,7 +390,7 @@ var H = O.create({
390
390
  return [new k({
391
391
  find: RegExp(this.options.syntax.value.source + "$", ""),
392
392
  handler: ({ state: e, range: t, match: n }) => {
393
- let r = n[0], i = T(r, this.options.mergeTags), a = this.type.create({
393
+ let r = n[0], i = w(r, this.options.mergeTags), a = this.type.create({
394
394
  label: i,
395
395
  value: r
396
396
  });
@@ -402,7 +402,7 @@ var H = O.create({
402
402
  return [new P({
403
403
  find: new RegExp(this.options.syntax.value.source, "g"),
404
404
  handler: ({ state: e, range: t, match: n }) => {
405
- let r = n[0], i = T(r, this.options.mergeTags), a = this.type.create({
405
+ let r = n[0], i = w(r, this.options.mergeTags), a = this.type.create({
406
406
  label: i,
407
407
  value: r
408
408
  });
@@ -491,14 +491,16 @@ var oe = A.create({
491
491
  }).run();
492
492
  },
493
493
  render: () => {
494
- let t = null, i = null, a = null, s = o([]), c = o(0), l = null, u = `tpl-merge-tag-suggestion-${++ae}`, d = null, f = [];
495
- function p() {
496
- y(d?.() ?? null);
497
- }
494
+ let t = null, i = null, a = null, s = o([]), c = o(0), l = null, u = `tpl-merge-tag-suggestion-${++ae}`, d = null, f = [], p = null;
498
495
  function m() {
499
- p(), requestAnimationFrame(p);
496
+ b(d?.() ?? null);
497
+ }
498
+ function h() {
499
+ m(), p !== null && cancelAnimationFrame(p), p = requestAnimationFrame(() => {
500
+ p = null, m();
501
+ });
500
502
  }
501
- function h(e) {
503
+ function g(e) {
502
504
  let t = [], n = e?.parentElement ?? null;
503
505
  for (; n && n !== document.body && n !== document.documentElement;) {
504
506
  let e = window.getComputedStyle(n), r = e.overflow + e.overflowX + e.overflowY;
@@ -506,19 +508,19 @@ var oe = A.create({
506
508
  }
507
509
  return t;
508
510
  }
509
- function g(e) {
510
- f = [window, ...h(e)];
511
- for (let e of f) e.addEventListener("scroll", p, {
511
+ function _(e) {
512
+ f = [window, ...g(e)];
513
+ for (let e of f) e.addEventListener("scroll", m, {
512
514
  passive: !0,
513
515
  capture: !0
514
516
  });
515
- window.addEventListener("resize", p, { passive: !0 });
517
+ window.addEventListener("resize", m, { passive: !0 });
516
518
  }
517
- function _() {
518
- for (let e of f) e.removeEventListener("scroll", p, { capture: !0 });
519
- window.removeEventListener("resize", p), f = [];
519
+ function y() {
520
+ for (let e of f) e.removeEventListener("scroll", m, { capture: !0 });
521
+ window.removeEventListener("resize", m), f = [];
520
522
  }
521
- function y(e) {
523
+ function b(e) {
522
524
  if (!i || !e || e.bottom < 0 || e.top > window.innerHeight) return;
523
525
  i.style.position = "fixed", i.style.left = `${e.left}px`, i.style.zIndex = "9999", i.style.top = `${e.bottom}px`;
524
526
  let t = i.offsetHeight;
@@ -527,7 +529,7 @@ var oe = A.create({
527
529
  i.style.top = `${n}px`;
528
530
  }
529
531
  }
530
- function b(e, t) {
532
+ function x(e, t) {
531
533
  let n = t?.closest("[data-tpl-theme]");
532
534
  if (!n) return;
533
535
  let r = n.getAttribute("data-tpl-theme");
@@ -539,10 +541,10 @@ var oe = A.create({
539
541
  }
540
542
  e.style.fontFamily = i.fontFamily, e.style.fontSize = i.fontSize, e.style.lineHeight = i.lineHeight;
541
543
  }
542
- function x(e) {
544
+ function S(e) {
543
545
  a && (e ? (a.setAttribute("role", "combobox"), a.setAttribute("aria-haspopup", "listbox"), a.setAttribute("aria-expanded", "true"), a.setAttribute("aria-controls", u)) : (a.removeAttribute("aria-expanded"), a.removeAttribute("aria-controls"), a.removeAttribute("aria-activedescendant"), a.removeAttribute("aria-haspopup"), a.removeAttribute("role")));
544
546
  }
545
- function S() {
547
+ function C() {
546
548
  if (a) {
547
549
  if (s.value.length === 0) {
548
550
  a.removeAttribute("aria-activedescendant");
@@ -551,36 +553,36 @@ var oe = A.create({
551
553
  a.setAttribute("aria-activedescendant", `${u}-opt-${c.value}`);
552
554
  }
553
555
  }
554
- function C(e) {
556
+ function w(e) {
555
557
  l?.(e);
556
558
  }
557
559
  return {
558
560
  onStart: (o) => {
559
561
  s.value = o.items, c.value = 0, l = (e) => o.command(e), i = document.createElement("div"), i.setAttribute("data-testid", "merge-tag-suggestion-popup");
560
562
  let f = o.editor.view?.dom;
561
- a = f ?? null, b(i, f ?? null), (r?.value ?? document.body).appendChild(i), t = v({ render() {
563
+ a = f ?? null, x(i, f ?? null), (r?.value ?? document.body).appendChild(i), t = v({ render() {
562
564
  return e(ie, {
563
565
  items: s.value,
564
566
  selectedIndex: c.value,
565
567
  emptyText: n,
566
568
  listId: u,
567
- onSelect: (e) => C(e),
569
+ onSelect: (e) => w(e),
568
570
  onHover: (e) => {
569
- c.value = e, S();
571
+ c.value = e, C();
570
572
  }
571
573
  });
572
- } }), t.mount(i), x(!0), S(), d = o.clientRect ?? null, m(), g(f ?? null);
574
+ } }), t.mount(i), S(!0), C(), d = o.clientRect ?? null, h(), _(f ?? null);
573
575
  },
574
576
  onUpdate: (e) => {
575
- s.value = e.items, c.value >= e.items.length && (c.value = 0), l = (t) => e.command(t), S(), d = e.clientRect ?? null, m();
577
+ s.value = e.items, c.value >= e.items.length && (c.value = 0), l = (t) => e.command(t), C(), d = e.clientRect ?? null, h();
576
578
  },
577
579
  onKeyDown: (e) => {
578
580
  if (e.event.key === "Escape") return !0;
579
- let t = $(e.event, s.value, c, C);
580
- return t && S(), t;
581
+ let t = $(e.event, s.value, c, w);
582
+ return t && C(), t;
581
583
  },
582
584
  onExit: () => {
583
- _(), x(!1), t?.unmount(), i?.remove(), t = null, i = null, a = null, l = null, d = null;
585
+ p !== null && (cancelAnimationFrame(p), p = null), y(), S(!1), t?.unmount(), i?.remove(), t = null, i = null, a = null, l = null, d = null;
584
586
  }
585
587
  };
586
588
  }
@@ -594,4 +596,4 @@ var oe = A.create({
594
596
  //#endregion
595
597
  export { I as FontSize, L as LetterSpacing, R as LineHeight, H as LogicMergeTagNode, K as MergeTagNode, oe as MergeTagSuggestion, Q as filterMergeTags, $ as handleSuggestionKeyDown };
596
598
 
597
- //# sourceMappingURL=extensions-BZYkPlKr.js.map
599
+ //# sourceMappingURL=extensions-BE81zpqP.js.map