@templatical/editor 0.10.3 → 0.10.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.
- package/dist/{AiChatSidebar-BMwpZx-6.js → AiChatSidebar-Djjqrmoh.js} +13 -13
- package/dist/{AiFeatureMenu-BqLi9Kh7.js → AiFeatureMenu-DR56EYbL.js} +7 -7
- package/dist/{BlockIssueBadge-3kNs6WoD.js → BlockIssueBadge-ySMhwDRR.js} +5 -5
- package/dist/{CloudEditor-DbyKnqbS.js → CloudEditor-BLlRKq5D.js} +19 -19
- package/dist/{CollaboratorBar-BXLwod21.js → CollaboratorBar-BlXmZrIj.js} +4 -4
- package/dist/{CommentsSidebar-jFZj_CTo.js → CommentsSidebar-XcYtqAn8.js} +12 -12
- package/dist/{CountdownBlock-S-SCyVye.js → CountdownBlock-sAAv3BHE.js} +3 -3
- package/dist/{CountdownToolbar-Ckdo-3P-.js → CountdownToolbar-CUvqPILZ.js} +3 -3
- package/dist/{DesignReferenceSidebar-B9QNPZNV.js → DesignReferenceSidebar-B0Upq2MY.js} +9 -9
- package/dist/{IssuesPanel-_E_fbSM8.js → IssuesPanel-BvcqQ0ec.js} +8 -8
- package/dist/{LoadingTrack-BZ5KJyZ_.js → LoadingTrack-e67FA0NP.js} +1 -1
- package/dist/{ModuleBrowserModal-Dy3fU2UD.js → ModuleBrowserModal-BdOB1Lbt.js} +10 -10
- package/dist/{ModulePreviewCanvas-Cutg3m7U.js → ModulePreviewCanvas-BeglLfBF.js} +3 -3
- package/dist/{NumberWithSuffix-BHDXHMpo.js → NumberWithSuffix-Cb7HI_yW.js} +3 -3
- package/dist/{ParagraphEditor-DkLmn3Nf.js → ParagraphEditor-4Wrd3nnB.js} +23 -23
- package/dist/{RichTextEditorContent-COijbaWp.js → RichTextEditorContent-D-uKzBDa.js} +6 -6
- package/dist/{SaveModuleDialog-C6cmHTRI.js → SaveModuleDialog-ueFhCVWN.js} +7 -7
- package/dist/{SnapshotHistory-DcLZlAhz.js → SnapshotHistory-DNuw_gCY.js} +9 -9
- package/dist/{TemplateScoringPanel-Dhf_Qgr7.js → TemplateScoringPanel-bkIhEokb.js} +14 -14
- package/dist/{TestEmailModal-iRqNzKLT.js → TestEmailModal-Tg30-itu.js} +5 -5
- package/dist/{TitleEditor-B-Adnssr.js → TitleEditor-CY8QWbEw.js} +12 -12
- package/dist/{TplModal-BlqH7CdL.js → TplModal-D338Vv9U.js} +4 -4
- package/dist/{blockTypeIcons-upTll6yr.js → blockTypeIcons-CYoPwoH9.js} +2 -2
- package/dist/bundle-stats.json +6 -6
- package/dist/cdn/chunks/{AiFeatureMenu-DwZWx_da.js → AiFeatureMenu-DRWRoPdh.js} +3 -3
- package/dist/cdn/chunks/{AiFeatureMenu-DwZWx_da.js.map → AiFeatureMenu-DRWRoPdh.js.map} +1 -1
- package/dist/cdn/chunks/{BlockIssueBadge-ClwC6oSs.js → BlockIssueBadge-D2ApLp61.js} +3 -3
- package/dist/cdn/chunks/{BlockIssueBadge-ClwC6oSs.js.map → BlockIssueBadge-D2ApLp61.js.map} +1 -1
- package/dist/cdn/chunks/{CloudEditor-BCfQOcnm.js → CloudEditor-gvOOuXac.js} +8 -8
- package/dist/cdn/chunks/{CloudEditor-BCfQOcnm.js.map → CloudEditor-gvOOuXac.js.map} +1 -1
- package/dist/cdn/chunks/{CollaboratorBar-yz1eW4cW.js → CollaboratorBar-BZK3R383.js} +4 -4
- package/dist/cdn/chunks/{CollaboratorBar-yz1eW4cW.js.map → CollaboratorBar-BZK3R383.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownBlock-CXQnTPVs.js → CountdownBlock-DU5YmjFP.js} +3 -3
- package/dist/cdn/chunks/{CountdownBlock-CXQnTPVs.js.map → CountdownBlock-DU5YmjFP.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownToolbar-TQGPjSz_.js → CountdownToolbar-C1nlFm4e.js} +4 -4
- package/dist/cdn/chunks/{CountdownToolbar-TQGPjSz_.js.map → CountdownToolbar-C1nlFm4e.js.map} +1 -1
- package/dist/cdn/chunks/{IssuesPanel-CTCK-R67.js → IssuesPanel-R3M60NTk.js} +4 -4
- package/dist/cdn/chunks/{IssuesPanel-CTCK-R67.js.map → IssuesPanel-R3M60NTk.js.map} +1 -1
- package/dist/cdn/chunks/{ModuleBrowserModal-CFpBtFiA.js → ModuleBrowserModal-DMithQu8.js} +6 -6
- package/dist/cdn/chunks/{ModuleBrowserModal-CFpBtFiA.js.map → ModuleBrowserModal-DMithQu8.js.map} +1 -1
- package/dist/cdn/chunks/{ModulePreviewCanvas-DhAubE2o.js → ModulePreviewCanvas-BNKbV_c2.js} +3 -3
- package/dist/cdn/chunks/{ModulePreviewCanvas-DhAubE2o.js.map → ModulePreviewCanvas-BNKbV_c2.js.map} +1 -1
- package/dist/cdn/chunks/{NumberWithSuffix-DUwFMc_M.js → NumberWithSuffix-C5zNn3Oc.js} +3 -3
- package/dist/cdn/chunks/{NumberWithSuffix-DUwFMc_M.js.map → NumberWithSuffix-C5zNn3Oc.js.map} +1 -1
- package/dist/cdn/chunks/{ParagraphEditor-B3az9xuj.js → ParagraphEditor-H136qVNI.js} +17 -17
- package/dist/cdn/chunks/{ParagraphEditor-B3az9xuj.js.map → ParagraphEditor-H136qVNI.js.map} +1 -1
- package/dist/cdn/chunks/{RichTextEditorContent-DtcHHUSO.js → RichTextEditorContent-BxW6vSck.js} +3 -3
- package/dist/cdn/chunks/{RichTextEditorContent-DtcHHUSO.js.map → RichTextEditorContent-BxW6vSck.js.map} +1 -1
- package/dist/cdn/chunks/{SaveModuleDialog-Da8g2aeD.js → SaveModuleDialog-BaiynUWb.js} +3 -3
- package/dist/cdn/chunks/{SaveModuleDialog-Da8g2aeD.js.map → SaveModuleDialog-BaiynUWb.js.map} +1 -1
- package/dist/cdn/chunks/{TitleEditor-jxOFe6Q6.js → TitleEditor-BBsR46vE.js} +9 -9
- package/dist/cdn/chunks/{TitleEditor-jxOFe6Q6.js.map → TitleEditor-BBsR46vE.js.map} +1 -1
- package/dist/cdn/chunks/{blockTypeIcons-Cxjz4oHg.js → blockTypeIcons-CX05RINM.js} +3 -3
- package/dist/cdn/chunks/{blockTypeIcons-Cxjz4oHg.js.map → blockTypeIcons-CX05RINM.js.map} +1 -1
- package/dist/cdn/chunks/{draggable-BTGr7_-X.js → draggable-iAb7QVJo.js} +30 -23
- package/dist/cdn/chunks/draggable-iAb7QVJo.js.map +1 -0
- package/dist/cdn/chunks/{extensions-2tEgrD-f.js → extensions-2LuW8PHB.js} +4 -4
- package/dist/cdn/chunks/{extensions-2tEgrD-f.js.map → extensions-2LuW8PHB.js.map} +1 -1
- package/dist/cdn/chunks/{features-C3H2u-FV.js → features-CxHQG9xr.js} +14 -12
- package/dist/cdn/chunks/{features-C3H2u-FV.js.map → features-CxHQG9xr.js.map} +1 -1
- package/dist/cdn/chunks/{icons-DClusKFv.js → icons-DrsFvnNP.js} +2 -2
- package/dist/cdn/chunks/{icons-DClusKFv.js.map → icons-DrsFvnNP.js.map} +1 -1
- package/dist/cdn/chunks/{media-library-8bD3x0mc.js → media-library-CDXkfBa7.js} +5 -5
- package/dist/cdn/chunks/{media-library-8bD3x0mc.js.map → media-library-CDXkfBa7.js.map} +1 -1
- package/dist/cdn/chunks/{quality-Dqwx7TdN.js → quality-HR87TCZc.js} +2 -2
- package/dist/cdn/chunks/{quality-Dqwx7TdN.js.map → quality-HR87TCZc.js.map} +1 -1
- package/dist/cdn/chunks/{renderer-DwmyVTa2.js → renderer-Dh5WdraW.js} +3 -3
- package/dist/cdn/chunks/{renderer-DwmyVTa2.js.map → renderer-Dh5WdraW.js.map} +1 -1
- package/dist/cdn/chunks/{src-C2v-Zix_.js → src-fyYLC_tY.js} +5 -5
- package/dist/cdn/chunks/{src-C2v-Zix_.js.map → src-fyYLC_tY.js.map} +1 -1
- package/dist/cdn/chunks/{styles-CwetU6QM.js → styles-NhU45rEI.js} +9 -9
- package/dist/cdn/chunks/{styles-CwetU6QM.js.map → styles-NhU45rEI.js.map} +1 -1
- package/dist/cdn/chunks/{tiptap-P5abGB13.js → tiptap-CfnwT9a8.js} +3010 -2975
- package/dist/cdn/chunks/tiptap-CfnwT9a8.js.map +1 -0
- package/dist/cdn/editor.js +6 -6
- package/dist/{check-KooI2jyS.js → check-B4oiQEsJ.js} +1 -1
- package/dist/{chevron-down-mnlFgueW.js → chevron-down-BrL7CDST.js} +1 -1
- package/dist/{circle-alert-D89_hB8j.js → circle-alert-Ddf06I0D.js} +1 -1
- package/dist/{clock-BaadyUrg.js → clock-CbIkIHL5.js} +1 -1
- package/dist/{cloud-D-FScaHx.js → cloud-Dom4EH5Z.js} +1 -1
- package/dist/{createLucideIcon-D-6fpD2L.js → createLucideIcon-Bn5l6hkC.js} +3 -3
- package/dist/{dist-Drp5bNAu.js → dist-B6B8IO1W.js} +2 -2
- package/dist/{dist-DaajG7Fo.js → dist-BRvZBY6r.js} +2 -2
- package/dist/{dist-zInT3Lf6.js → dist-BShwEwPy.js} +2138 -2103
- package/dist/dist-BVKpiz3S.js +5 -0
- package/dist/{dist-C1WcikEF.js → dist-BdIM5Jt8.js} +2 -2
- package/dist/{dist-Dnqx5UF3.js → dist-BhZo8-eC.js} +3 -3
- package/dist/dist-BzeOnbU8.js +5 -0
- package/dist/{dist-BttO3Zdx.js → dist-Ctv43HTN.js} +2 -2
- package/dist/{dist-b52vYHb5.js → dist-DDB4TfTY.js} +2 -2
- package/dist/{dist-XA2i70J5.js → dist-DS9NXb20.js} +2 -2
- package/dist/{dist-CjULgTep.js → dist-DbGsZrPu.js} +6 -6
- package/dist/{dist-sqf7pq5q.js → dist-ZiEahccA.js} +2 -2
- package/dist/{dist-cl33Ip6W.js → dist-cT52Hh9L.js} +3 -3
- package/dist/{extensions-DA-w1gVg.js → extensions-CqrSpX_i.js} +6 -6
- package/dist/{image-up-DjwfAom6.js → image-up-D3KvvHLf.js} +1 -1
- package/dist/{info-Db3HlTr8.js → info-RwcI2EUD.js} +1 -1
- package/dist/{keys-BjmL5YCT.js → keys-DSm2p8zn.js} +1 -1
- package/dist/{list-checks-BlAB0X8a.js → list-checks-ruqK9lCo.js} +1 -1
- package/dist/{loader-circle-EVqyIxjU.js → loader-circle-D4SXJ8eQ.js} +1 -1
- package/dist/{message-circle-BuI5pBVG.js → message-circle-p9UiFyS7.js} +1 -1
- package/dist/{refresh-cw-C2vM_6zQ.js → refresh-cw-C8HbO4hg.js} +1 -1
- package/dist/{scan-line-AUIh_SHI.js → scan-line-CmPIMm63.js} +1 -1
- package/dist/{send-nrbwF7xg.js → send-DacXlri3.js} +1 -1
- package/dist/{shield-check-B55Ozmva.js → shield-check-BdrHnTnJ.js} +1 -1
- package/dist/{sparkles-oh1NUSFq.js → sparkles-tT7wcus5.js} +1 -1
- package/dist/{styles-DMh_bHK0.js → styles-BmZWc8sc.js} +26 -26
- package/dist/templatical-editor.js +4 -4
- package/dist/{text-align-start-B2MqzZwU.js → text-align-start-DaSSBZVi.js} +1 -1
- package/dist/{trash-2-DH8RBwAx.js → trash-2-B0uIJOwX.js} +1 -1
- package/dist/{triangle-alert-BQHjCt3B.js → triangle-alert-FLQWRf-c.js} +1 -1
- package/dist/{useAliveFlag-B_b9ubwD.js → useAliveFlag-DlVvpZxc.js} +1 -1
- package/dist/{useCloudI18n-BHCrmQgj.js → useCloudI18n-Lh0xWlQ4.js} +2 -2
- package/dist/{useEditorCore-wBmdLj66.js → useEditorCore-CMukR8kX.js} +20 -18
- package/dist/{useI18n-Bb9-ha9X.js → useI18n-CNEz8RK7.js} +2 -2
- package/dist/{useMergeTag-HykzEtBn.js → useMergeTag-C54tabTK.js} +2 -2
- package/dist/usePopoverRoot-dvg2XFmj.js +8 -0
- package/dist/{vue.runtime.esm-bundler-MzYCkFSH.js → vue.runtime.esm-bundler-mPytWZFh.js} +32 -25
- package/dist/{x-DgCCENgP.js → x-BROzFhGs.js} +1 -1
- package/package.json +21 -21
- package/dist/cdn/chunks/draggable-BTGr7_-X.js.map +0 -1
- package/dist/cdn/chunks/tiptap-P5abGB13.js.map +0 -1
- package/dist/dist-Df4eV6Zi.js +0 -5
- package/dist/dist-WJ1fVd5b.js +0 -5
- package/dist/usePopoverRoot-BZDkRRry.js +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TitleEditor-jxOFe6Q6.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 { computed, inject } from \"vue\";\nimport {\n THEME_STYLES_KEY,\n UI_THEME_KEY,\n MERGE_TAG_PICKER_KEY,\n} 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// Hide the floating toolbar while the built-in merge tag picker modal is\n// open — see ParagraphToolbar.vue for the same rationale.\nconst picker = inject(MERGE_TAG_PICKER_KEY, null);\nconst pickerIsOpen = computed(() => picker?.isOpen.value ?? false);\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 && !pickerIsOpen\" :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.insert\"\n :title=\"t.mergeTag.insert\"\n @click=\"handleAddMergeTag\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.insert }}\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 { computed, inject } from \"vue\";\nimport {\n THEME_STYLES_KEY,\n UI_THEME_KEY,\n MERGE_TAG_PICKER_KEY,\n} 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// Hide the floating toolbar while the built-in merge tag picker modal is\n// open — see ParagraphToolbar.vue for the same rationale.\nconst picker = inject(MERGE_TAG_PICKER_KEY, null);\nconst pickerIsOpen = computed(() => picker?.isOpen.value ?? false);\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 && !pickerIsOpen\" :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.insert\"\n :title=\"t.mergeTag.insert\"\n @click=\"handleAddMergeTag\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.insert }}\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-BBsR46vE.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 { computed, inject } from \"vue\";\nimport {\n THEME_STYLES_KEY,\n UI_THEME_KEY,\n MERGE_TAG_PICKER_KEY,\n} 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// Hide the floating toolbar while the built-in merge tag picker modal is\n// open — see ParagraphToolbar.vue for the same rationale.\nconst picker = inject(MERGE_TAG_PICKER_KEY, null);\nconst pickerIsOpen = computed(() => picker?.isOpen.value ?? false);\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 && !pickerIsOpen\" :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.insert\"\n :title=\"t.mergeTag.insert\"\n @click=\"handleAddMergeTag\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.insert }}\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 { computed, inject } from \"vue\";\nimport {\n THEME_STYLES_KEY,\n UI_THEME_KEY,\n MERGE_TAG_PICKER_KEY,\n} 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// Hide the floating toolbar while the built-in merge tag picker modal is\n// open — see ParagraphToolbar.vue for the same rationale.\nconst picker = inject(MERGE_TAG_PICKER_KEY, null);\nconst pickerIsOpen = computed(() => picker?.isOpen.value ?? false);\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 && !pickerIsOpen\" :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.insert\"\n :title=\"t.mergeTag.insert\"\n @click=\"handleAddMergeTag\"\n >\n <ScanLine :size=\"16\" :stroke-width=\"2\" />\n {{ t.mergeTag.insert }}\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,5 +1,5 @@
|
|
|
1
|
-
import { Tt as e, bt as t, ft as n, gt as r, lt as i } from "./features-
|
|
2
|
-
import { D as a, E as o, J as s, P as c, U as l, a as u, j as d, w as f } from "./icons-
|
|
1
|
+
import { Tt as e, bt as t, ft as n, gt as r, lt as i } from "./features-CxHQG9xr.js";
|
|
2
|
+
import { D as a, E as o, J as s, P as c, U as l, a as u, j as d, w as f } from "./icons-DrsFvnNP.js";
|
|
3
3
|
//#region src/utils/blockTypeIcons.ts
|
|
4
4
|
var p = {
|
|
5
5
|
section: s,
|
|
@@ -19,4 +19,4 @@ var p = {
|
|
|
19
19
|
//#endregion
|
|
20
20
|
export { p as t };
|
|
21
21
|
|
|
22
|
-
//# sourceMappingURL=blockTypeIcons-
|
|
22
|
+
//# sourceMappingURL=blockTypeIcons-CX05RINM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockTypeIcons-
|
|
1
|
+
{"version":3,"file":"blockTypeIcons-CX05RINM.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;AACR"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region ../../node_modules/.pnpm/@vue+shared@3.5.
|
|
1
|
+
//#region ../../node_modules/.pnpm/@vue+shared@3.5.38/node_modules/@vue/shared/dist/shared.esm-bundler.js
|
|
2
2
|
// @__NO_SIDE_EFFECTS__
|
|
3
3
|
function e(e) {
|
|
4
4
|
let t = /* @__PURE__ */ Object.create(null);
|
|
@@ -900,25 +900,26 @@ function vn(e, n, i = t) {
|
|
|
900
900
|
if (s && n) {
|
|
901
901
|
let e = n;
|
|
902
902
|
n = (...t) => {
|
|
903
|
-
e(...t)
|
|
903
|
+
let n = e(...t);
|
|
904
|
+
return S(), n;
|
|
904
905
|
};
|
|
905
906
|
}
|
|
906
907
|
let C = b ? Array(e.length).fill(mn) : mn, w = (e) => {
|
|
907
908
|
if (!(!(m.flags & 1) || !m.dirty && !e)) if (n) {
|
|
908
|
-
let
|
|
909
|
-
if (o || y || (b ?
|
|
909
|
+
let t = m.run();
|
|
910
|
+
if (e || o || y || (b ? t.some((e, t) => k(e, C[t])) : k(t, C))) {
|
|
910
911
|
_ && _();
|
|
911
|
-
let
|
|
912
|
+
let e = gn;
|
|
912
913
|
gn = m;
|
|
913
914
|
try {
|
|
914
|
-
let
|
|
915
|
-
|
|
915
|
+
let e = [
|
|
916
|
+
t,
|
|
916
917
|
C === mn ? void 0 : b && C[0] === mn ? [] : C,
|
|
917
918
|
v
|
|
918
919
|
];
|
|
919
|
-
C =
|
|
920
|
+
C = t, f ? f(n, 3, e) : n(...e);
|
|
920
921
|
} finally {
|
|
921
|
-
gn =
|
|
922
|
+
gn = e;
|
|
922
923
|
}
|
|
923
924
|
}
|
|
924
925
|
} else m.run();
|
|
@@ -946,7 +947,7 @@ function yn(e, t = Infinity, n) {
|
|
|
946
947
|
return e;
|
|
947
948
|
}
|
|
948
949
|
//#endregion
|
|
949
|
-
//#region ../../node_modules/.pnpm/@vue+runtime-core@3.5.
|
|
950
|
+
//#region ../../node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js
|
|
950
951
|
function bn(e, t, n, r) {
|
|
951
952
|
try {
|
|
952
953
|
return r ? e(...r) : e();
|
|
@@ -1534,18 +1535,24 @@ function Br(e) {
|
|
|
1534
1535
|
l = null, Sn(t, e, 13, !r);
|
|
1535
1536
|
};
|
|
1536
1537
|
if (s && e.suspense || po) return p().then((t) => () => Vr(t, e)).catch((e) => (t(e), () => r ? z(r, { error: e }) : null));
|
|
1537
|
-
let a = /* @__PURE__ */ Xt(!1), c = /* @__PURE__ */ Xt(), d = /* @__PURE__ */ Xt(!!i);
|
|
1538
|
-
return
|
|
1539
|
-
|
|
1540
|
-
}, i
|
|
1541
|
-
|
|
1538
|
+
let a = /* @__PURE__ */ Xt(!1), c = /* @__PURE__ */ Xt(), d = /* @__PURE__ */ Xt(!!i), f, m;
|
|
1539
|
+
return ei(() => {
|
|
1540
|
+
f != null && clearTimeout(f), m != null && clearTimeout(m);
|
|
1541
|
+
}), i && (m = setTimeout(() => {
|
|
1542
|
+
e.isUnmounted || (d.value = !1);
|
|
1543
|
+
}, i)), o != null && (f = setTimeout(() => {
|
|
1544
|
+
if (!e.isUnmounted && !a.value && !c.value) {
|
|
1542
1545
|
let e = /* @__PURE__ */ Error(`Async component timed out after ${o}ms.`);
|
|
1543
1546
|
t(e), c.value = e;
|
|
1544
1547
|
}
|
|
1545
|
-
}, o), p().then(() => {
|
|
1546
|
-
a.value = !0, e.parent && Hr(e.parent.vnode) && e.parent.update();
|
|
1547
|
-
}).catch((
|
|
1548
|
-
|
|
1548
|
+
}, o)), p().then(() => {
|
|
1549
|
+
e.isUnmounted || (a.value = !0, e.parent && Hr(e.parent.vnode) && e.parent.update());
|
|
1550
|
+
}).catch((n) => {
|
|
1551
|
+
if (e.isUnmounted) {
|
|
1552
|
+
l = null;
|
|
1553
|
+
return;
|
|
1554
|
+
}
|
|
1555
|
+
t(n), c.value = n;
|
|
1549
1556
|
}), () => {
|
|
1550
1557
|
if (a.value && u) return Vr(u, e);
|
|
1551
1558
|
if (c.value && r) return z(r, { error: c.value });
|
|
@@ -1955,8 +1962,8 @@ function zi(e, n, r = t) {
|
|
|
1955
1962
|
set(e) {
|
|
1956
1963
|
let s = r.set ? r.set(e) : e;
|
|
1957
1964
|
if (!k(s, l) && !(u !== t && k(e, u))) return;
|
|
1958
|
-
let f = i.vnode.props;
|
|
1959
|
-
|
|
1965
|
+
let f = i.vnode.props, p = !!(f && (n in f || a in f || o in f) && (`onUpdate:${n}` in f || `onUpdate:${a}` in f || `onUpdate:${o}` in f));
|
|
1966
|
+
p || (l = e, c()), i.emit(`update:${n}`, s), k(e, u) && (k(e, s) && !k(s, d) || p && u !== t && !k(s, l)) && c(), u = e, d = s;
|
|
1960
1967
|
}
|
|
1961
1968
|
};
|
|
1962
1969
|
});
|
|
@@ -2965,7 +2972,7 @@ function Eo(e, t, n) {
|
|
|
2965
2972
|
La(1);
|
|
2966
2973
|
}
|
|
2967
2974
|
}
|
|
2968
|
-
var Do = "3.5.
|
|
2975
|
+
var Do = "3.5.38", Oo = void 0, ko = typeof window < "u" && window.trustedTypes;
|
|
2969
2976
|
if (ko) try {
|
|
2970
2977
|
Oo = /* @__PURE__ */ ko.createPolicy("vue", { createHTML: (e) => e });
|
|
2971
2978
|
} catch {}
|
|
@@ -4813,4 +4820,4 @@ var Vu = [
|
|
|
4813
4820
|
//#endregion
|
|
4814
4821
|
export { Zt as $, Xr as A, Xn as B, Eo as C, to as D, yi as E, fi as F, Ee as G, Un as H, oi as I, De as J, F as K, ci as L, Pa as M, Gn as N, jn as O, di as P, Vt as Q, zi as R, oo as S, Kn as T, pn as U, Hn as V, on as W, Bt as X, Rt as Y, Xt as Z, Xa as _, Rs as a, vn as at, Br as b, Gs as c, Se as ct, pr as d, P as et, To as f, za as g, Za as h, Ys as i, I as it, ei as j, $r as k, Us as l, Ba as m, Vo as n, tn as nt, Ls as o, me as ot, Ga as p, qt as q, Xs as r, en as rt, is as s, le as st, Hu as t, un as tt, ka as u, Ya as v, qn as w, jr as x, z as y, Qn as z };
|
|
4815
4822
|
|
|
4816
|
-
//# sourceMappingURL=draggable-
|
|
4823
|
+
//# sourceMappingURL=draggable-iAb7QVJo.js.map
|