{"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 {\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';\nimport {Plugin, PluginKey, TextSelection} from '@tiptap/pm/state';\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 toggleMark = chain()\n                            .setTextSelection({from, to})\n                            .toggleMark(this.name, attributes, {\n                                extendEmptyMarkRange: true,\n                            })\n                            .setMeta('preventAutolink', true)\n                            .setTextSelection(to);\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    addProseMirrorPlugins() {\n        return [\n            ...(this.parent?.() ?? []),\n            new Plugin({\n                key: new PluginKey('tui-link-boundary-exit'),\n                appendTransaction(transactions, _oldState, newState) {\n                    if (!transactions.some((transaction) => transaction.selectionSet)) {\n                        return null;\n                    }\n\n                    const {selection} = newState;\n\n                    if (!(selection instanceof TextSelection) || !selection.$cursor) {\n                        return null;\n                    }\n\n                    const {$cursor} = selection;\n                    const linkMark = newState.schema.marks['link'];\n\n                    if (!linkMark) {\n                        return null;\n                    }\n\n                    const linkBefore = $cursor.nodeBefore\n                        ? linkMark.isInSet($cursor.nodeBefore.marks)\n                        : null;\n                    const linkAfter = $cursor.nodeAfter\n                        ? linkMark.isInSet($cursor.nodeAfter.marks)\n                        : null;\n\n                    if (!linkBefore || linkAfter) {\n                        return null;\n                    }\n\n                    const storedMarks = newState.storedMarks ?? $cursor.marks();\n\n                    if (!storedMarks.some((mark) => mark.type === linkMark)) {\n                        return null;\n                    }\n\n                    return newState.tr.setStoredMarks(\n                        storedMarks.filter((mark) => mark.type !== linkMark),\n                    );\n                },\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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"}