@templatical/editor 0.0.3 → 0.0.4

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 (141) hide show
  1. package/dist/{AiChatSidebar-busJk9hm.js → AiChatSidebar-CjfhTZwo.js} +1 -1
  2. package/dist/{AiFeatureMenu-DLGv_-pj.js → AiFeatureMenu-K44aZa_P.js} +3 -3
  3. package/dist/CloudEditor-DFyuRxUV.js +926 -0
  4. package/dist/{CollaboratorBar-Dv3l52vC.js → CollaboratorBar-BuCEcdbB.js} +25 -21
  5. package/dist/{CommentsSidebar-4tjp0VU5.js → CommentsSidebar-2lcqMfIP.js} +2 -2
  6. package/dist/{DesignReferenceSidebar-CmwXvltV.js → DesignReferenceSidebar-CNMu4Zrx.js} +2 -2
  7. package/dist/{ModuleBrowserModal-lrk3Fr0H.js → ModuleBrowserModal-CvQ0xyQf.js} +6 -6
  8. package/dist/{ModulePreviewCanvas-BcBJLnwL.js → ModulePreviewCanvas-Be2B3Y07.js} +2 -2
  9. package/dist/ParagraphEditor-CcMPnbDr.js +652 -0
  10. package/dist/{RichTextEditorContent-CQqodi7p.js → RichTextEditorContent-CHJlh7HJ.js} +8 -4
  11. package/dist/{SaveModuleDialog-Bmzi72td.js → SaveModuleDialog-BaaeH5Xm.js} +5 -5
  12. package/dist/{SnapshotHistory-AEgi9Xsn.js → SnapshotHistory-BPfjiuu1.js} +2 -2
  13. package/dist/{TemplateScoringPanel-CTgMtc0-.js → TemplateScoringPanel-D58A23Vq.js} +3 -3
  14. package/dist/{TestEmailModal-Dpq1is9S.js → TestEmailModal-DIAlB3e_.js} +3 -3
  15. package/dist/{TitleEditor-CLcDdcWI.js → TitleEditor-D9DPjQkX.js} +7 -7
  16. package/dist/{TplModal-CGzRjR96.js → TplModal-CmTSvCY-.js} +2 -2
  17. package/dist/{blockTypeIcons-BpPTqcok.js → blockTypeIcons-D1RTWOkx.js} +1 -1
  18. package/dist/cdn/chunks/AiChatSidebar-CmPTbTFG.js +2 -0
  19. package/dist/cdn/chunks/AiFeatureMenu-lxVm1RjH.js +59 -0
  20. package/dist/cdn/chunks/AiFeatureMenu-lxVm1RjH.js.map +1 -0
  21. package/dist/cdn/chunks/CloudEditor-Bmp5IlWi.js +900 -0
  22. package/dist/cdn/chunks/CloudEditor-Bmp5IlWi.js.map +1 -0
  23. package/dist/cdn/chunks/CollaboratorBar-D2PKtlOw.js +51 -0
  24. package/dist/cdn/chunks/CollaboratorBar-D2PKtlOw.js.map +1 -0
  25. package/dist/cdn/chunks/CommentsSidebar-BOelj4Ca.js +2 -0
  26. package/dist/cdn/chunks/DesignReferenceSidebar-Bf6rg0A7.js +2 -0
  27. package/dist/cdn/chunks/ModuleBrowserModal-CxDXzkKS.js +195 -0
  28. package/dist/cdn/chunks/ModuleBrowserModal-CxDXzkKS.js.map +1 -0
  29. package/dist/cdn/chunks/ModulePreviewCanvas-DEfHampA.js +107 -0
  30. package/dist/cdn/chunks/ModulePreviewCanvas-DEfHampA.js.map +1 -0
  31. package/dist/cdn/chunks/ParagraphEditor-DHdu6lb3.js +503 -0
  32. package/dist/cdn/chunks/ParagraphEditor-DHdu6lb3.js.map +1 -0
  33. package/dist/cdn/chunks/RichTextEditorContent-DWUzizsC.js +106 -0
  34. package/dist/cdn/chunks/RichTextEditorContent-DWUzizsC.js.map +1 -0
  35. package/dist/cdn/chunks/SaveModuleDialog-DVna2xUl.js +119 -0
  36. package/dist/cdn/chunks/SaveModuleDialog-DVna2xUl.js.map +1 -0
  37. package/dist/cdn/chunks/SnapshotHistory-BFF2SsTN.js +2 -0
  38. package/dist/cdn/chunks/TemplateScoringPanel-gi8wc_m7.js +2 -0
  39. package/dist/cdn/chunks/TestEmailModal-Qtd6aC-6.js +2 -0
  40. package/dist/cdn/chunks/TitleEditor-DDf_OcHS.js +166 -0
  41. package/dist/cdn/chunks/TitleEditor-DDf_OcHS.js.map +1 -0
  42. package/dist/cdn/chunks/_rolldown_dynamic_import_helper-DMEI4TQ3.js +9 -0
  43. package/dist/cdn/chunks/blockTypeIcons-BnobReQm.js +22 -0
  44. package/dist/cdn/chunks/blockTypeIcons-BnobReQm.js.map +1 -0
  45. package/dist/cdn/chunks/de-BB3dgVOc.js +700 -0
  46. package/dist/cdn/chunks/de-BB3dgVOc.js.map +1 -0
  47. package/dist/cdn/chunks/de-BvYD17KT.js +89 -0
  48. package/dist/cdn/chunks/de-BvYD17KT.js.map +1 -0
  49. package/dist/cdn/chunks/dist-B6AUkMyh.js +2 -0
  50. package/dist/cdn/chunks/dist-B878xb_62.js +457 -0
  51. package/dist/cdn/chunks/dist-B878xb_62.js.map +1 -0
  52. package/dist/cdn/chunks/dist-Bf1Op9A1.js +2 -0
  53. package/dist/cdn/chunks/dist-BkETaOfw.js +2 -0
  54. package/dist/cdn/chunks/dist-CJcMnY7o.js +2 -0
  55. package/dist/cdn/chunks/dist-CWsl6S1K.js +2 -0
  56. package/dist/cdn/chunks/dist-CllLxIMQ.js +2 -0
  57. package/dist/cdn/chunks/dist-Cs0wFwdw.js +2 -0
  58. package/dist/cdn/chunks/dist-DLWHlekl.js +2 -0
  59. package/dist/cdn/chunks/dist-DS3_HVpX.js +2 -0
  60. package/dist/cdn/chunks/dist-DTXopj1a.js +2 -0
  61. package/dist/cdn/chunks/dist-DnwLoNLm.js +2 -0
  62. package/dist/cdn/chunks/draggable-BQNU47zu.js +11544 -0
  63. package/dist/cdn/chunks/{draggable-ClUwYCFL.js.map → draggable-BQNU47zu.js.map} +1 -1
  64. package/dist/cdn/chunks/emojiData-BVEJHcNH.js +19 -0
  65. package/dist/cdn/chunks/{emojiData-6fVLNqeH.js.map → emojiData-BVEJHcNH.js.map} +1 -1
  66. package/dist/cdn/chunks/en-CpotcOPr.js +89 -0
  67. package/dist/cdn/chunks/en-CpotcOPr.js.map +1 -0
  68. package/dist/cdn/chunks/en-DeDcpnoS.js +700 -0
  69. package/dist/cdn/chunks/en-DeDcpnoS.js.map +1 -0
  70. package/dist/cdn/chunks/extensions-B_kcV0tK.js +419 -0
  71. package/dist/cdn/chunks/{extensions-ea_ewKUl.js.map → extensions-B_kcV0tK.js.map} +1 -1
  72. package/dist/cdn/chunks/features-ofOGnSC0.js +6700 -0
  73. package/dist/cdn/chunks/features-ofOGnSC0.js.map +1 -0
  74. package/dist/cdn/chunks/icons-bIb7PBOE.js +653 -0
  75. package/dist/cdn/chunks/icons-bIb7PBOE.js.map +1 -0
  76. package/dist/cdn/chunks/liquid.browser-C1VIYISn.js +3272 -0
  77. package/dist/cdn/chunks/liquid.browser-C1VIYISn.js.map +1 -0
  78. package/dist/cdn/chunks/media-library-BIYzV2Y2.js +6005 -0
  79. package/dist/cdn/chunks/media-library-BIYzV2Y2.js.map +1 -0
  80. package/dist/cdn/chunks/pusher-DJPhQnE8.js +2505 -0
  81. package/dist/cdn/chunks/pusher-DJPhQnE8.js.map +1 -0
  82. package/dist/cdn/chunks/readableTextColor-Cd_cgWO_.js +32 -0
  83. package/dist/cdn/chunks/readableTextColor-Cd_cgWO_.js.map +1 -0
  84. package/dist/cdn/chunks/rolldown-runtime-DPITmOBR.js +20 -0
  85. package/dist/cdn/chunks/src-BuW9oYtm.js +494 -0
  86. package/dist/cdn/chunks/src-BuW9oYtm.js.map +1 -0
  87. package/dist/cdn/chunks/styleConstants-1KwsBMxJ.js +57 -0
  88. package/dist/cdn/chunks/{styleConstants-CNejCb-L.js.map → styleConstants-1KwsBMxJ.js.map} +1 -1
  89. package/dist/cdn/chunks/styles-DQFExz-T.js +3222 -0
  90. package/dist/cdn/chunks/styles-DQFExz-T.js.map +1 -0
  91. package/dist/cdn/chunks/tiptap-DplY-S-k.js +14208 -0
  92. package/dist/cdn/chunks/{tiptap-Cya4P9CN.js.map → tiptap-DplY-S-k.js.map} +1 -1
  93. package/dist/cdn/editor.css +2 -1
  94. package/dist/cdn/editor.js +260 -1
  95. package/dist/cdn/editor.js.map +1 -1
  96. package/dist/{de-B4Ob4vCo.js → de-D7TLGIPA.js} +20 -4
  97. package/dist/{dist-DmpMJbmZ.js → dist-BkIys9zn.js} +1 -1
  98. package/dist/{en-YXsspZJG.js → en-DvtiEMwP.js} +20 -4
  99. package/dist/{extensions-CKM99njP.js → extensions-DEjfEFhD.js} +3 -3
  100. package/dist/{keys-Dwa2PmdD.js → keys-C0MQRs8d.js} +3 -3
  101. package/dist/readableTextColor-LDlmVEUv.js +30 -0
  102. package/dist/{styles-DSw1VNU3.js → styles-CgLaxDfu.js} +1096 -1074
  103. package/dist/templatical-editor.css +1 -1
  104. package/dist/templatical-editor.js +113 -89
  105. package/dist/templatical-editor.umd.cjs +59 -59
  106. package/dist/{useEditorCore-Cc4RCwWq.js → useEditorCore-CjwRMl7K.js} +1152 -1014
  107. package/dist/{useI18n-DUirdXEX.js → useI18n-D6m7ZUgY.js} +1 -1
  108. package/dist/{useMergeTag-DVnlvPYJ.js → useMergeTag-BZ3X0bNr.js} +1 -1
  109. package/package.json +2 -2
  110. package/dist/CloudEditor-BDnHd6Um.js +0 -919
  111. package/dist/ParagraphEditor-DH8cSC6m.js +0 -625
  112. package/dist/cdn/chunks/ParagraphEditor-CCtWbGDv.js +0 -3
  113. package/dist/cdn/chunks/ParagraphEditor-CCtWbGDv.js.map +0 -1
  114. package/dist/cdn/chunks/RichTextEditorContent-BUD9veXd.js +0 -2
  115. package/dist/cdn/chunks/RichTextEditorContent-BUD9veXd.js.map +0 -1
  116. package/dist/cdn/chunks/TitleEditor-e_UTyxjd.js +0 -3
  117. package/dist/cdn/chunks/TitleEditor-e_UTyxjd.js.map +0 -1
  118. package/dist/cdn/chunks/dist-0UheN8rK.js +0 -1
  119. package/dist/cdn/chunks/dist-55mmbGQ9.js +0 -1
  120. package/dist/cdn/chunks/dist-B31mxKyP.js +0 -1
  121. package/dist/cdn/chunks/dist-B5JI9nIg.js +0 -1
  122. package/dist/cdn/chunks/dist-B93vLKhU.js +0 -1
  123. package/dist/cdn/chunks/dist-BDt3FJvj.js +0 -1
  124. package/dist/cdn/chunks/dist-BJRuFHmi.js +0 -1
  125. package/dist/cdn/chunks/dist-BKSzrf0L.js +0 -1
  126. package/dist/cdn/chunks/dist-BL8c5gYQ.js +0 -1
  127. package/dist/cdn/chunks/dist-CYThWMP5.js +0 -1
  128. package/dist/cdn/chunks/dist-DxZbPJYt.js +0 -1
  129. package/dist/cdn/chunks/draggable-ClUwYCFL.js +0 -17
  130. package/dist/cdn/chunks/emojiData-6fVLNqeH.js +0 -2
  131. package/dist/cdn/chunks/extensions-ea_ewKUl.js +0 -2
  132. package/dist/cdn/chunks/icons-vmLJTaJk.js +0 -2
  133. package/dist/cdn/chunks/icons-vmLJTaJk.js.map +0 -1
  134. package/dist/cdn/chunks/rolldown-runtime-BakkzWXw.js +0 -1
  135. package/dist/cdn/chunks/styleConstants-CNejCb-L.js +0 -2
  136. package/dist/cdn/chunks/tiptap-Cya4P9CN.js +0 -145
  137. package/dist/cdn/chunks/useEditorCore-CwuxQuvh.js +0 -2
  138. package/dist/cdn/chunks/useEditorCore-CwuxQuvh.js.map +0 -1
  139. package/dist/cdn/chunks/useMergeTag-DVOz1v9p.js +0 -2
  140. package/dist/cdn/chunks/useMergeTag-DVOz1v9p.js.map +0 -1
  141. package/dist/i18n-CJsFtdbZ.js +0 -23
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"RichTextEditorContent-BUD9veXd.js","names":[],"sources":["../../../src/components/blocks/RichTextLinkDialog.vue","../../../src/components/blocks/RichTextLinkDialog.vue","../../../src/components/blocks/RichTextEditorContent.vue","../../../src/components/blocks/RichTextEditorContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { X } from \"@lucide/vue\";\nimport { inject } from \"vue\";\nimport { THEME_STYLES_KEY, UI_THEME_KEY } from \"../../keys\";\n\ndefineProps<{\n visible: boolean;\n isEditingLink: boolean;\n}>();\n\nconst linkUrl = defineModel<string>(\"linkUrl\", { required: true });\nconst dialogRef = defineModel<HTMLElement | null>(\"dialogRef\", {\n required: true,\n});\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"insert\"): void;\n (e: \"remove\"): void;\n (e: \"keydown\", event: KeyboardEvent): void;\n}>();\n\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst tplUiTheme = inject(UI_THEME_KEY, null);\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl-link-dialog tpl:fixed tpl:inset-0 tpl:z-modal tpl:flex tpl:items-center tpl:justify-center\"\n :style=\"themeStyles\"\n @click.self=\"emit('close')\"\n >\n <div\n :ref=\"(el) => (dialogRef = el as HTMLElement | null)\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"tpl-link-dialog-title\"\n 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\"\n >\n <div\n class=\"tpl:flex tpl:items-center tpl:justify-between tpl:border-b tpl:border-[var(--tpl-border)] tpl:px-5 tpl:py-4\"\n >\n <h4\n id=\"tpl-link-dialog-title\"\n class=\"tpl:m-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]\"\n >\n {{\n isEditingLink ? t.linkDialog.editLink : t.linkDialog.insertLink\n }}\n </h4>\n <button\n type=\"button\"\n :aria-label=\"t.linkDialog.cancel\"\n 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)]\"\n @click=\"emit('close')\"\n >\n <X :size=\"16\" :stroke-width=\"2\" />\n </button>\n </div>\n <div class=\"tpl:p-5\">\n <div class=\"tpl:mb-4 tpl:last:mb-0\">\n <label\n class=\"tpl:mb-1.5 tpl:block tpl:text-xs tpl:font-medium tpl:tracking-wide tpl:text-[var(--tpl-text-muted)] tpl:uppercase\"\n >{{ t.linkDialog.urlLabel }}</label\n >\n <input\n v-model=\"linkUrl\"\n type=\"url\"\n 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)]\"\n :placeholder=\"t.linkDialog.urlPlaceholder\"\n autofocus\n @keydown=\"emit('keydown', $event)\"\n />\n </div>\n </div>\n <div\n 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\"\n >\n <button\n v-if=\"isEditingLink\"\n type=\"button\"\n 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)]\"\n @click=\"emit('remove')\"\n >\n {{ t.linkDialog.removeLink }}\n </button>\n <div class=\"tpl:ml-auto tpl:flex tpl:gap-2\">\n <button\n type=\"button\"\n 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)]\"\n @click=\"emit('close')\"\n >\n {{ t.linkDialog.cancel }}\n </button>\n <button\n type=\"button\"\n 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)]\"\n @click=\"emit('insert')\"\n >\n {{\n isEditingLink\n ? t.linkDialog.updateLink\n : t.linkDialog.insertLink\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { X } from \"@lucide/vue\";\nimport { inject } from \"vue\";\nimport { THEME_STYLES_KEY, UI_THEME_KEY } from \"../../keys\";\n\ndefineProps<{\n visible: boolean;\n isEditingLink: boolean;\n}>();\n\nconst linkUrl = defineModel<string>(\"linkUrl\", { required: true });\nconst dialogRef = defineModel<HTMLElement | null>(\"dialogRef\", {\n required: true,\n});\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"insert\"): void;\n (e: \"remove\"): void;\n (e: \"keydown\", event: KeyboardEvent): void;\n}>();\n\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst tplUiTheme = inject(UI_THEME_KEY, null);\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl-link-dialog tpl:fixed tpl:inset-0 tpl:z-modal tpl:flex tpl:items-center tpl:justify-center\"\n :style=\"themeStyles\"\n @click.self=\"emit('close')\"\n >\n <div\n :ref=\"(el) => (dialogRef = el as HTMLElement | null)\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"tpl-link-dialog-title\"\n 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\"\n >\n <div\n class=\"tpl:flex tpl:items-center tpl:justify-between tpl:border-b tpl:border-[var(--tpl-border)] tpl:px-5 tpl:py-4\"\n >\n <h4\n id=\"tpl-link-dialog-title\"\n class=\"tpl:m-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]\"\n >\n {{\n isEditingLink ? t.linkDialog.editLink : t.linkDialog.insertLink\n }}\n </h4>\n <button\n type=\"button\"\n :aria-label=\"t.linkDialog.cancel\"\n 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)]\"\n @click=\"emit('close')\"\n >\n <X :size=\"16\" :stroke-width=\"2\" />\n </button>\n </div>\n <div class=\"tpl:p-5\">\n <div class=\"tpl:mb-4 tpl:last:mb-0\">\n <label\n class=\"tpl:mb-1.5 tpl:block tpl:text-xs tpl:font-medium tpl:tracking-wide tpl:text-[var(--tpl-text-muted)] tpl:uppercase\"\n >{{ t.linkDialog.urlLabel }}</label\n >\n <input\n v-model=\"linkUrl\"\n type=\"url\"\n 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)]\"\n :placeholder=\"t.linkDialog.urlPlaceholder\"\n autofocus\n @keydown=\"emit('keydown', $event)\"\n />\n </div>\n </div>\n <div\n 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\"\n >\n <button\n v-if=\"isEditingLink\"\n type=\"button\"\n 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)]\"\n @click=\"emit('remove')\"\n >\n {{ t.linkDialog.removeLink }}\n </button>\n <div class=\"tpl:ml-auto tpl:flex tpl:gap-2\">\n <button\n type=\"button\"\n 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)]\"\n @click=\"emit('close')\"\n >\n {{ t.linkDialog.cancel }}\n </button>\n <button\n type=\"button\"\n 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)]\"\n @click=\"emit('insert')\"\n >\n {{\n isEditingLink\n ? t.linkDialog.updateLink\n : t.linkDialog.insertLink\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { Editor } from \"@tiptap/vue-3\";\nimport type { Component } from \"vue\";\n\ndefineProps<{\n editor: Editor | null;\n editorContent: Component | null;\n isLoading: boolean;\n initError: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"retry\"): void;\n}>();\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <div\n v-if=\"isLoading\"\n class=\"tpl-text-editable tpl:min-h-[1.5em] tpl:rounded tpl:border tpl:border-dashed tpl:border-[var(--tpl-primary)] tpl:p-2\"\n >\n <div class=\"tpl:animate-pulse tpl:text-[var(--tpl-text-dim)]\">\n {{ t.errors.editorLoading }}\n </div>\n </div>\n <div\n v-else-if=\"initError\"\n 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)]\"\n >\n {{ t.errors.editorLoadFailed }}\n <button\n class=\"tpl:ml-1 tpl:cursor-pointer tpl:border-none tpl:bg-transparent tpl:p-0 tpl:underline tpl:text-[var(--tpl-primary)]\"\n @click=\"emit('retry')\"\n >\n {{ t.errors.retry }}\n </button>\n </div>\n <component\n :is=\"editorContent\"\n v-else-if=\"editorContent && editor\"\n :editor=\"editor as Editor\"\n class=\"tpl-text-editable tpl:min-h-[1.5em] tpl:rounded tpl:border tpl:border-dashed tpl:border-[var(--tpl-primary)] tpl:p-2\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { Editor } from \"@tiptap/vue-3\";\nimport type { Component } from \"vue\";\n\ndefineProps<{\n editor: Editor | null;\n editorContent: Component | null;\n isLoading: boolean;\n initError: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"retry\"): void;\n}>();\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <div\n v-if=\"isLoading\"\n class=\"tpl-text-editable tpl:min-h-[1.5em] tpl:rounded tpl:border tpl:border-dashed tpl:border-[var(--tpl-primary)] tpl:p-2\"\n >\n <div class=\"tpl:animate-pulse tpl:text-[var(--tpl-text-dim)]\">\n {{ t.errors.editorLoading }}\n </div>\n </div>\n <div\n v-else-if=\"initError\"\n 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)]\"\n >\n {{ t.errors.editorLoadFailed }}\n <button\n class=\"tpl:ml-1 tpl:cursor-pointer tpl:border-none tpl:bg-transparent tpl:p-0 tpl:underline tpl:text-[var(--tpl-primary)]\"\n @click=\"emit('retry')\"\n >\n {{ t.errors.retry }}\n </button>\n </div>\n <component\n :is=\"editorContent\"\n v-else-if=\"editorContent && editor\"\n :editor=\"editor as Editor\"\n class=\"tpl-text-editable tpl:min-h-[1.5em] tpl:rounded tpl:border tpl:border-dashed tpl:border-[var(--tpl-primary)] tpl:p-2\"\n />\n</template>\n"],"mappings":"msCAWA,IAAM,EAAU,EAAmB,EAAC,UAA8B,CAC5D,EAAY,EAA+B,EAAC,YAEhD,CAEI,EAAO,EAOP,EAAc,EAAO,EAAkB,KAAK,CAC5C,EAAa,EAAO,EAAc,KAAK,CAEvC,CAAE,KAAM,GAAS,mBAIrB,EAqFW,EAAA,CArFD,GAAG,OAAM,CAAA,CAET,EAAA,SAAA,GAAA,CADR,EAmFM,MAAA,OAjFH,iBAAgB,EAAA,EAAU,CAC3B,MAAM,qGACL,MAAK,EAAE,EAAA,EAAW,CAAA,CAClB,QAAK,AAAA,EAAA,KAAA,EAAA,GAAO,EAAI,QAAA,CAAA,CAAA,OAAA,CAAA,GAEjB,EA2EM,MAAA,CA1EH,IAAM,GAAQ,EAAA,MAAY,EAC3B,KAAK,SACL,aAAW,OACX,kBAAgB,wBAChB,MAAM,oIAEN,EAmBM,MAnBN,EAmBM,CAhBJ,EAOK,KAPL,EAOK,EAFD,EAAA,cAAgB,EAAA,EAAC,CAAC,WAAW,SAAW,EAAA,EAAC,CAAC,WAAW,WAAU,CAAA,EAAA,CAGnE,EAOS,SAAA,CANP,KAAK,SACJ,aAAY,EAAA,EAAC,CAAC,WAAW,OAC1B,MAAM,yOACL,QAAK,AAAA,EAAA,KAAA,GAAE,EAAI,QAAA,GAEZ,EAAkC,EAAA,EAAA,CAAA,CAA9B,KAAM,GAAK,eAAc,YAGjC,EAeM,MAfN,EAeM,CAdJ,EAaM,MAbN,EAaM,CAZJ,EAGC,QAHD,EAGC,EADK,EAAA,EAAC,CAAC,WAAW,SAAQ,CAAA,EAAA,CAAA,EAE3B,EAOE,QAAA,mCANgB,MAAA,EAChB,KAAK,MACL,MAAM,oVACL,YAAa,EAAA,EAAC,CAAC,WAAW,eAC3B,UAAA,GACC,UAAO,AAAA,EAAA,KAAA,GAAE,EAAI,UAAY,EAAM,iBALvB,EAAA,MAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAStB,EA+BM,MA/BN,EA+BM,CA3BI,EAAA,eAAA,GAAA,CADR,EAOS,SAAA,OALP,KAAK,SACL,MAAM,4RACL,QAAK,AAAA,EAAA,KAAA,GAAE,EAAI,SAAA,IAET,EAAA,EAAC,CAAC,WAAW,WAAU,CAAA,EAAA,EAAA,EAAA,GAAA,GAAA,CAE5B,EAmBM,MAnBN,EAmBM,CAlBJ,EAMS,SAAA,CALP,KAAK,SACL,MAAM,6TACL,QAAK,AAAA,EAAA,KAAA,GAAE,EAAI,QAAA,IAET,EAAA,EAAC,CAAC,WAAW,OAAM,CAAA,EAAA,CAExB,EAUS,SAAA,CATP,KAAK,SACL,MAAM,wQACL,QAAK,AAAA,EAAA,KAAA,GAAE,EAAI,SAAA,IAGV,EAAA,cAAkC,EAAA,EAAC,CAAC,WAAW,WAA+B,EAAA,EAAC,CAAC,WAAW,WAAU,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,ojBE9FrH,IAAM,EAAO,EAIP,CAAE,KAAM,GAAS,cAKb,EAAA,WAAA,GAAA,CADR,EAOM,MAPN,EAOM,CAHJ,EAEM,MAFN,EAEM,EADD,EAAA,EAAC,CAAC,OAAO,cAAa,CAAA,EAAA,CAAA,CAAA,EAIhB,EAAA,WAAA,GAAA,CADb,EAWM,MAXN,EAWM,CAAA,EAAA,EAPD,EAAA,EAAC,CAAC,OAAO,iBAAgB,CAAG,IAC/B,EAAA,CAAA,EAKS,SAAA,CAJP,MAAM,qHACL,QAAK,AAAA,EAAA,KAAA,GAAE,EAAI,QAAA,IAET,EAAA,EAAC,CAAC,OAAO,MAAK,CAAA,EAAA,CAAA,CAAA,EAKR,EAAA,eAAiB,EAAA,QAAA,GAAA,CAF9B,EAKE,EAJK,EAAA,cAAa,CAAA,OAEjB,OAAQ,EAAA,OACT,MAAM"}
@@ -1,3 +0,0 @@
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/extensions-ea_ewKUl.js","chunks/useMergeTag-DVOz1v9p.js"])))=>i.map(i=>d[i]);
2
- import{F as e,G as t,K as n,W as r,c as i,d as a,f as o,g as s,h as c,m as l,p as u,q as d,s as f,u as p,w as m,y as h}from"./draggable-ClUwYCFL.js";import{_ as g,f as _,g as v,h as y,u as b}from"./icons-vmLJTaJk.js";import{c as x,n as S,u as C}from"./useMergeTag-DVOz1v9p.js";import{r as w,t as T}from"./useEditorCore-CwuxQuvh.js";import{n as E,t as ee}from"./RichTextEditorContent-BUD9veXd.js";var D={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={key:0,class:`tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`},N=[`aria-label`,`title`],P={key:1,class:`tpl:flex tpl:items-center tpl:gap-2 tpl:px-2 tpl:text-xs tpl:text-[var(--tpl-text-dim)]`},F=s({__name:`TitleEditor`,props:{block:{},toolbarPosition:{}},emits:[`done`],setup(s,{emit:F}){let I=s,L=F,R=h(x,null),z=h(C,null),{t:B}=S(),{editor:V,EditorContent:H,isLoading:U,initError:W,retry:G,showLinkDialog:K,linkUrl:q,linkDialogRef:J,mergeTagEnabled:Y,openLinkDialog:X,insertLink:Z,removeLink:Q,closeLinkDialog:te,handleLinkKeydown:ne,handleAddMergeTag:$}=T({blockId:()=>I.block.id,blockContent:()=>I.block.content,onDone:()=>L(`done`),editorName:`TitleEditor`,async loadExtensions({mergeTags:e,syntax:t}){let[{Editor:n,EditorContent:r},{default:i},{default:a},{MergeTagNode:o,LogicMergeTagNode:s}]=await Promise.all([w(()=>import(`./dist-BKSzrf0L.js`),__vite__mapDeps([0,1,2,3,4])),w(()=>import(`./dist-B5JI9nIg.js`),__vite__mapDeps([5,1,2,3,4])),w(()=>import(`./dist-0UheN8rK.js`),__vite__mapDeps([6,1,2,3,4])),w(()=>import(`./extensions-ea_ewKUl.js`),__vite__mapDeps([7,2,3,4,1,8]))]);return{TiptapEditor:n,EC:r,extensions:[i.configure({heading:!1,codeBlock:!1,blockquote:!1,horizontalRule:!1,bulletList:!1,orderedList:!1,listItem:!1,strike:!1}),a.configure({openOnClick:!1,HTMLAttributes:{target:`_blank`,rel:`noopener noreferrer`}}),o.configure({mergeTags:e,syntax:t}),s.configure({syntax:t})]}}});return(h,x)=>(m(),u(`div`,D,[(m(),a(i,{to:`body`},[p(`div`,{"data-tpl-theme":r(z),role:`toolbar`,"aria-label":r(B).titleEditor.toolbar,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`,style:n({...r(R),top:`${s.toolbarPosition.top}px`,left:`${s.toolbarPosition.left}px`,transform:`translateY(-100%)`})},[!r(U)&&r(V)?(m(),u(f,{key:0},[p(`button`,{type:`button`,class:t([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":r(V)?.isActive(`bold`)}]),"aria-label":r(B).titleEditor.bold,title:r(B).titleEditor.bold,onClick:x[0]||=e=>r(V)?.chain().focus().toggleBold().run()},[c(r(g),{size:16,"stroke-width":2.5})],10,k),p(`button`,{type:`button`,class:t([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":r(V)?.isActive(`italic`)}]),"aria-label":r(B).titleEditor.italic,title:r(B).titleEditor.italic,onClick:x[1]||=e=>r(V)?.chain().focus().toggleItalic().run()},[c(r(v),{size:16,"stroke-width":2})],10,A),x[6]||=p(`span`,{class:`tpl:mx-1.5 tpl:h-6 tpl:w-px tpl:bg-[var(--tpl-border)]`,"aria-hidden":`true`},null,-1),p(`button`,{type:`button`,class:t([`tpl-text-toolbar-btn`,{"tpl-text-toolbar-btn--active":r(V)?.isActive(`link`)}]),"aria-label":r(B).titleEditor.addLink,title:r(B).titleEditor.addLink,onClick:x[2]||=(...e)=>r(X)&&r(X)(...e)},[c(r(y),{size:16,"stroke-width":2})],10,j),r(Y)?(m(),u(`span`,M)):o(``,!0),r(Y)?(m(),u(`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":r(B).mergeTag.add,title:r(B).mergeTag.add,onClick:x[3]||=(...e)=>r($)&&r($)(...e)},[c(r(b),{size:16,"stroke-width":2}),l(` `+d(r(B).mergeTag.add),1)],8,N)):o(``,!0)],64)):(m(),u(`div`,P,[c(r(_),{class:`tpl-spinner`,size:14,"stroke-width":2}),l(` `+d(r(B).errors.editorLoading),1)]))],12,O)])),c(ee,{editor:r(V),"editor-content":r(H),"is-loading":r(U),"init-error":r(W),onRetry:r(G)},null,8,[`editor`,`editor-content`,`is-loading`,`init-error`,`onRetry`]),c(E,{visible:r(K),"is-editing-link":r(V)?.isActive(`link`)??!1,"dialog-ref":r(J),"onUpdate:dialogRef":x[4]||=t=>e(J)?J.value=t:null,"link-url":r(q),"onUpdate:linkUrl":x[5]||=t=>e(q)?q.value=t:null,onClose:r(te),onInsert:r(Z),onRemove:r(Q),onKeydown:r(ne)},null,8,[`visible`,`is-editing-link`,`dialog-ref`,`link-url`,`onClose`,`onInsert`,`onRemove`,`onKeydown`])]))}});export{F as default};
3
- //# sourceMappingURL=TitleEditor-e_UTyxjd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../src/components/blocks/TitleEditor.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { useRichTextEditor } from \"../../composables/useRichTextEditor\";\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);\n\nconst { t } = useI18n();\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: \"TitleEditor\",\n async loadExtensions({ mergeTags, syntax }) {\n const [\n { Editor: TiptapEditor, EditorContent: EC },\n { default: StarterKit },\n { default: LinkExt },\n { MergeTagNode, 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 ],\n };\n },\n});\n</script>\n\n<template>\n <div class=\"tpl-text-editor-wrapper tpl:relative\">\n <Teleport to=\"body\">\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=\"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=\"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"],"file":"TitleEditor-e_UTyxjd.js"}
@@ -1 +0,0 @@
1
- import{C as e,E as t,T as n,w as r}from"./tiptap-Cya4P9CN.js";export{e as Link,r as default,n as isAllowedUri,t as pasteRegex};
@@ -1 +0,0 @@
1
- import{g as e,h as t}from"./tiptap-Cya4P9CN.js";export{t as Underline,e as default};
@@ -1 +0,0 @@
1
- import{F as e,j as t}from"./tiptap-Cya4P9CN.js";export{e as FontFamily,t as default};
@@ -1 +0,0 @@
1
- import{m as e,p as t}from"./tiptap-Cya4P9CN.js";export{t as StarterKit,e as default};
@@ -1 +0,0 @@
1
- import{_ as e,v as t}from"./tiptap-Cya4P9CN.js";export{e as TextAlign,t as default};
@@ -1 +0,0 @@
1
- import{F as e,I as t,L as n,N as r,P as i,R as a,z as o}from"./tiptap-Cya4P9CN.js";export{r as BackgroundColor,i as Color,e as FontFamily,t as FontSize,n as LineHeight,a as TextStyle,o as TextStyleKit};
@@ -1 +0,0 @@
1
- import{M as e,P as t}from"./tiptap-Cya4P9CN.js";export{t as Color,e as default};
@@ -1 +0,0 @@
1
- import{$ as ee,$t as te,An as ne,At as e,B as t,Bn as n,Bt as r,Cn as i,Ct as a,Dn as o,Dt as s,En as c,Et as l,Fn as u,Ft as d,G as f,Gn as p,Gt as m,H as h,Hn as g,Ht as _,In as v,It as y,J as b,Jn as x,Jt as S,K as C,Kn as w,Kt as T,Ln as E,Lt as D,Mn as O,Mt as k,Nn as A,Nt as j,On as M,Ot as N,Pn as P,Pt as F,Q as I,Qn as L,Qt as R,Rn as z,Rt as B,Sn as V,St as H,Tn as U,Tt as W,U as G,Un as K,Ut as q,V as J,Vn as Y,Vt as X,W as Z,Wn as re,Wt as ie,X as ae,Xn as oe,Xt as se,Y as ce,Yn as le,Yt as ue,Z as de,Zn as fe,Zt as pe,_n as me,_t as he,a as ge,an as _e,at as ve,bn as ye,bt as Q,c as be,cn as xe,ct as Se,d as Ce,dn as we,dt as Te,en as Ee,et as De,f as Oe,fn as ke,ft as Ae,gn as je,gt as Me,hn as Ne,ht as Pe,i as Fe,in as Ie,it as Le,jn as Re,jt as ze,kn as Be,kt as Ve,l as He,ln as Ue,lt as We,mn as Ge,mt as Ke,n as qe,nn as Je,nt as Ye,o as Xe,on as Ze,ot as Qe,pn as $e,pt as et,q as tt,qn as nt,qt as rt,r as it,rn as at,rt as ot,s as st,sn as ct,st as lt,t as ut,tn as $,tt as dt,u as ft,un as pt,ut as mt,vn as ht,vt as gt,wn as _t,wt as vt,xn as yt,xt as bt,yn as xt,yt as St,zn as Ct,zt as wt}from"./tiptap-Cya4P9CN.js";export{t as CommandManager,ut as Editor,qe as EditorContent,J as Extendable,h as Extension,G as Fragment,Z as InputRule,f as MappablePosition,C as Mark,tt as MarkView,it as MarkViewContent,b as Node,ce as NodePos,ae as NodeView,Fe as NodeViewContent,ge as NodeViewWrapper,de as PasteRule,I as ResizableNodeView,ee as ResizableNodeview,De as Tracker,Xe as VueMarkView,st as VueMarkViewRenderer,be as VueNodeViewRenderer,He as VueRenderer,dt as callOrReturn,Ye as canInsertNode,ot as cancelPositionCheck,Le as combineTransactionSteps,ve as commands,Qe as createAtomBlockMarkdownSpec,lt as createBlockMarkdownSpec,Se as createChainableState,We as createDocument,$ as createElement,$ as h,mt as createInlineMarkdownSpec,Te as createMappablePosition,Ae as createNodeFromContent,et as createStyleTag,Ke as decodeHtmlEntities,Pe as defaultBlockAt,Me as deleteProps,he as elementFromString,gt as encodeHtmlEntities,St as escapeForRegEx,Q as extensions,bt as findChildren,H as findChildrenInRange,a as findDuplicates,vt as findParentNode,W as findParentNodeClosestToPos,l as flattenExtensions,s as fromString,N as generateHTML,Ve as generateJSON,e as generateText,ze as getAttributes,k as getAttributesFromExtensions,j as getChangedRanges,F as getDebugJSON,d as getExtensionField,y as getHTMLFromFragment,D as getMarkAttributes,B as getMarkRange,wt as getMarkType,r as getMarksBetween,X as getNodeAtPosition,_ as getNodeAttributes,q as getNodeType,ie as getRenderedAttributes,m as getSchema,T as getSchemaByResolvedExtensions,rt as getSchemaTypeByName,S as getSchemaTypeNameByName,ue as getSplittedAttributes,se as getText,pe as getTextBetween,R as getTextContentFromNodes,te as getTextSerializersFromSchema,Ee as getUpdatedPosition,Je as injectExtensionAttributesToParseRule,at as inputRulesPlugin,Ie as isActive,_e as isAndroid,Ze as isAtEndOfNode,ct as isAtStartOfNode,xe as isEmptyObject,Ue as isExtensionRulesEnabled,pt as isFirefox,we as isFunction,ke as isList,$e as isMacOS,Ge as isMarkActive,Ne as isNodeActive,je as isNodeEmpty,me as isNodeSelection,ht as isNumber,xt as isPlainObject,ye as isRegExp,yt as isSafari,V as isString,i as isTextSelection,_t as isiOS,U as markInputRule,c as markPasteRule,ft as markViewProps,o as markdown,M as mergeAttributes,Be as mergeDeep,ne as minMax,Re as nodeInputRule,O as nodePasteRule,Ce as nodeViewProps,A as objectIncludes,P as parseAttributes,u as parseIndentedBlocks,v as pasteRulesPlugin,E as posToDOMRect,z as removeDuplicates,Ct as renderNestedMarkdownContent,n as resolveExtensions,Y as resolveFocusPosition,g as rewriteUnknownContent,K as schedulePositionCheck,re as selectionToInsertionEnd,p as serializeAttributes,w as sortExtensions,nt as splitExtensions,x as textInputRule,le as textPasteRule,oe as textblockTypeInputRule,fe as updateMarkViewAttributes,Oe as useEditor,L as wrappingInputRule};
@@ -1 +0,0 @@
1
- import{S as e,x as t}from"./tiptap-Cya4P9CN.js";export{t as Subscript,e as default};
@@ -1 +0,0 @@
1
- import{A as e,D as t,O as n,k as r}from"./tiptap-Cya4P9CN.js";export{t as Highlight,n as default,r as inputRegex,e as pasteRegex};
@@ -1 +0,0 @@
1
- import{b as e,y as t}from"./tiptap-Cya4P9CN.js";export{t as Superscript,e as default};