{"version":3,"file":"taiga-ui-editor-extensions-link.mjs","sources":["../../../projects/editor/extensions/link/index.ts","../../../projects/editor/extensions/link/taiga-ui-editor-extensions-link.ts"],"sourcesContent":["import {TUI_TIPTAP_WHITESPACE_HACK} from '@taiga-ui/editor/common';\nimport {\n    tuiGetCurrentWordBounds,\n    tuiGetSlicedFragment,\n    tuiParseNodeAttributes,\n} from '@taiga-ui/editor/utils';\nimport {type KeyboardShortcutCommand, mergeAttributes} from '@tiptap/core';\nimport {Link, type LinkOptions} from '@tiptap/extension-link';\n\nexport const TuiLink = Link.extend<LinkOptions>({\n    addAttributes() {\n        return {\n            ...this.parent?.(),\n            ...tuiParseNodeAttributes(['download']),\n        };\n    },\n\n    addCommands() {\n        return {\n            ...this.parent?.(),\n            toggleLink:\n                (attributes) =>\n                ({chain, state, editor}) => {\n                    {\n                        const pos = state.selection.from;\n                        const resolvedPos = state.doc.resolve(pos);\n                        const node = resolvedPos.nodeAfter || resolvedPos.nodeBefore;\n                        const isImageNode = node?.type === editor.schema.nodes.image;\n\n                        if (isImageNode) {\n                            return typeof (editor.commands as any).setImageLink ===\n                                'function'\n                                ? (chain() as any).setImageLink().run()\n                                : false;\n                        }\n\n                        if (!tuiGetSlicedFragment(state).trim()) {\n                            return false;\n                        }\n\n                        const {from, to} = tuiGetCurrentWordBounds(editor);\n                        const forwardSymbol =\n                            state.selection.to < state.doc.content.size\n                                ? state.doc.textBetween(\n                                      state.selection.to,\n                                      state.selection.to + 1,\n                                  )\n                                : '';\n\n                        let toggleMark = chain()\n                            .setTextSelection({from, to})\n                            .toggleMark(this.name, attributes, {\n                                extendEmptyMarkRange: true,\n                            })\n                            .setMeta('preventAutolink', true)\n                            .setTextSelection(to);\n\n                        if (forwardSymbol === '') {\n                            toggleMark = toggleMark.insertContent(\n                                TUI_TIPTAP_WHITESPACE_HACK,\n                            );\n                        }\n\n                        return toggleMark\n                            .setTextSelection({\n                                from,\n                                to: to - from === 1 ? to : to - 1,\n                            })\n                            .run();\n                    }\n                },\n        };\n    },\n\n    renderHTML({HTMLAttributes}) {\n        return [\n            'a',\n            mergeAttributes(HTMLAttributes, {\n                target: HTMLAttributes.href?.startsWith('#') ? '_self' : '_blank',\n            }),\n            0,\n        ];\n    },\n\n    addKeyboardShortcuts(): Record<string, KeyboardShortcutCommand> {\n        return {\n            'Mod-k': ({editor}) => {\n                const isLink = this.editor.isActive('link');\n                const editorChain = editor.chain().focus();\n                const command = isLink\n                    ? editorChain.unsetLink()\n                    : editorChain.toggleLink({href: ''});\n\n                return command.run();\n            },\n        };\n    },\n\n    addPasteRules() {\n        return [\n            // Workaround for issue: https://github.com/ueberdosis/tiptap/issues/5957\n        ];\n    },\n}).configure({openOnClick: false});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}