{"version":3,"file":"taiga-ui-editor-extensions-jump-anchor.mjs","sources":["../../../projects/editor/extensions/jump-anchor/index.ts","../../../projects/editor/extensions/jump-anchor/taiga-ui-editor-extensions-jump-anchor.ts"],"sourcesContent":["import {TUI_TIPTAP_WHITESPACE_HACK} from '@taiga-ui/editor/common';\nimport {tuiGetCurrentWordBounds, tuiGetSlicedFragment} from '@taiga-ui/editor/utils';\nimport {Mark, mergeAttributes} from '@tiptap/core';\n\ndeclare module '@tiptap/core' {\n    interface Commands<ReturnType> {\n        anchor: {\n            removeAnchor(): ReturnType;\n            setAnchor(id: string): ReturnType;\n        };\n    }\n}\n\nexport const TuiJumpAnchor = Mark.create({\n    name: 'jumpAnchor',\n    priority: 1000,\n    keepOnSplit: false,\n\n    addAttributes() {\n        return {\n            id: {\n                default: null,\n                parseHTML: (element) => element.getAttribute('id'),\n                renderHTML: (attributes) => {\n                    if (!attributes.id) {\n                        return {};\n                    }\n\n                    return {id: attributes.id};\n                },\n            },\n        };\n    },\n\n    parseHTML() {\n        return [{tag: 'a[data-type=\"jump-anchor\"]'}];\n    },\n\n    renderHTML({HTMLAttributes}) {\n        return ['a', mergeAttributes({'data-type': 'jump-anchor'}, HTMLAttributes), 0];\n    },\n\n    addCommands() {\n        return {\n            setAnchor:\n                (id) =>\n                ({chain, state, editor}) => {\n                    const {from, to} = tuiGetCurrentWordBounds(editor);\n                    const sliced = tuiGetSlicedFragment(state);\n                    const forwardSymbolIsWhitespace = sliced === ' ';\n                    const jumpAnchorMark = chain()\n                        .setTextSelection({from, to})\n                        .extendMarkRange('jumpAnchor')\n                        .setMark('jumpAnchor', {id});\n\n                    return (\n                        forwardSymbolIsWhitespace\n                            ? jumpAnchorMark.setTextSelection(to - 1)\n                            : jumpAnchorMark\n                                  .setTextSelection(to)\n                                  .insertContent(TUI_TIPTAP_WHITESPACE_HACK)\n                                  .setTextSelection(to - 1)\n                    ).run();\n                },\n\n            removeAnchor:\n                () =>\n                ({chain}) =>\n                    chain().unsetMark(this.name, {extendEmptyMarkRange: true}).run(),\n        };\n    },\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAaa,MAAA,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;AACrC,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,WAAW,EAAE,KAAK;IAElB,aAAa,GAAA;QACT,OAAO;AACH,YAAA,EAAE,EAAE;AACA,gBAAA,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;AAClD,gBAAA,UAAU,EAAE,CAAC,UAAU,KAAI;AACvB,oBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAChB,wBAAA,OAAO,EAAE,CAAC;AACb,qBAAA;AAED,oBAAA,OAAO,EAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAC,CAAC;iBAC9B;AACJ,aAAA;SACJ,CAAC;KACL;IAED,SAAS,GAAA;AACL,QAAA,OAAO,CAAC,EAAC,GAAG,EAAE,4BAA4B,EAAC,CAAC,CAAC;KAChD;IAED,UAAU,CAAC,EAAC,cAAc,EAAC,EAAA;AACvB,QAAA,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,EAAC,WAAW,EAAE,aAAa,EAAC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;KAClF;IAED,WAAW,GAAA;QACP,OAAO;AACH,YAAA,SAAS,EACL,CAAC,EAAE,KACH,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAC,KAAI;gBACvB,MAAM,EAAC,IAAI,EAAE,EAAE,EAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;AACnD,gBAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC3C,gBAAA,MAAM,yBAAyB,GAAG,MAAM,KAAK,GAAG,CAAC;gBACjD,MAAM,cAAc,GAAG,KAAK,EAAE;AACzB,qBAAA,gBAAgB,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC;qBAC5B,eAAe,CAAC,YAAY,CAAC;AAC7B,qBAAA,OAAO,CAAC,YAAY,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC;AAEjC,gBAAA,OAAO,CACH,yBAAyB;sBACnB,cAAc,CAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,CAAC;AACzC,sBAAE,cAAc;yBACT,gBAAgB,CAAC,EAAE,CAAC;yBACpB,aAAa,CAAC,0BAA0B,CAAC;yBACzC,gBAAgB,CAAC,EAAE,GAAG,CAAC,CAAC,EACrC,GAAG,EAAE,CAAC;aACX;AAEL,YAAA,YAAY,EACR,MACA,CAAC,EAAC,KAAK,EAAC,KACJ,KAAK,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,oBAAoB,EAAE,IAAI,EAAC,CAAC,CAAC,GAAG,EAAE;SAC3E,CAAC;KACL;AACJ,CAAA;;ACvED;;AAEG;;;;"}