{"version":3,"file":"taiga-ui-editor-utils.mjs","sources":["../../../projects/editor/utils/delete-nodes.ts","../../../projects/editor/utils/get-current-word-bounds.ts","../../../projects/editor/utils/get-mark-range.ts","../../../projects/editor/utils/get-nested-nodes.ts","../../../projects/editor/utils/get-selected-content.ts","../../../projects/editor/utils/get-selection-state.ts","../../../projects/editor/utils/get-sliced-fragment.ts","../../../projects/editor/utils/is-selection-in.ts","../../../projects/editor/utils/legacy-converter.ts","../../../projects/editor/utils/parse-node-attributes.ts","../../../projects/editor/utils/parse-style.ts","../../../projects/editor/utils/safe-link-range.ts","../../../projects/editor/utils/to-gradient.ts","../../../projects/editor/utils/taiga-ui-editor-utils.ts"],"sourcesContent":["import {type CommandProps} from '@tiptap/core';\nimport {type EditorState} from '@tiptap/pm/state';\n\nexport function tuiDeleteNode(\n    state: EditorState,\n    dispatch: CommandProps['dispatch'],\n    nodeName: string,\n): boolean {\n    const position = state.selection.$anchor;\n\n    for (let depth = position.depth; depth > 0; depth--) {\n        const node = position.node(depth);\n\n        if (node.type.name === nodeName) {\n            if (dispatch) {\n                dispatch(\n                    state.tr\n                        .delete(position.before(depth), position.after(depth))\n                        .scrollIntoView(),\n                );\n            }\n\n            return true;\n        }\n    }\n\n    return false;\n}\n","import {type Editor, type Range} from '@tiptap/core';\nimport {type ResolvedPos} from '@tiptap/pm/model';\n\nexport function tuiGetCurrentWordBounds(editor: Editor): Range {\n    const {state} = editor;\n    const {selection} = state;\n    const {$anchor, empty} = selection;\n\n    if (!empty) {\n        return {\n            from: selection.from,\n            to: selection.to,\n        };\n    }\n\n    // TODO: check is it true or not\n    if ($anchor as ResolvedPos | undefined) {\n        const {pos} = $anchor;\n        const start = $anchor.start();\n        const parent = $anchor.parent;\n        const textBefore = parent.textBetween(0, pos - start, undefined, '\\uFFFC');\n        const textAfter = parent.textBetween(\n            pos - start,\n            parent.content.size,\n            undefined,\n            '\\uFFFC',\n        );\n\n        const wordBefore = textBefore\n            // eslint-disable-next-line unicorn/prefer-string-replace-all\n            .replaceAll(/\\uFFFC/g, '')\n            .split(/\\b/)\n            .pop();\n        const wordAfter = textAfter\n            // eslint-disable-next-line unicorn/prefer-string-replace-all\n            .replaceAll(/\\uFFFC/g, '')\n            .split(/\\b/)\n            .shift();\n\n        const from = pos - (wordBefore?.length ?? 0);\n        const to = pos + (wordAfter?.length ?? 0);\n\n        return {\n            from,\n            to,\n        };\n    }\n\n    return {\n        from: selection.to,\n        to: selection.to + 1,\n    };\n}\n","import {type Range} from '@tiptap/core';\nimport {\n    type Mark as ProseMirrorMark,\n    type MarkType,\n    type ResolvedPos,\n} from '@tiptap/pm/model';\n\nfunction hasAttributes(\n    markAttributes: Record<string, unknown>,\n    attributes: Record<string, unknown>,\n): boolean {\n    const keys = Object.keys(attributes);\n\n    return (\n        !keys.length ||\n        !!keys.filter((key) => attributes[key] === markAttributes[key]).length\n    );\n}\n\nfunction findMarkInSet(\n    marks: readonly ProseMirrorMark[],\n    markType: MarkType,\n    attributes: Record<string, unknown> = {},\n): ProseMirrorMark | null {\n    return (\n        marks.find(\n            ({attrs, type}) => type === markType && hasAttributes(attrs, attributes),\n        ) || null\n    );\n}\n\nexport function tuiGetMarkRange(\n    pos?: ResolvedPos,\n    type?: MarkType,\n    attributes: Record<string, unknown> = {},\n): Range | null {\n    if (!pos || !type) {\n        return null;\n    }\n\n    const {node, offset} = pos.parent.childAfter(pos.parentOffset);\n\n    if (!node) {\n        return null;\n    }\n\n    const mark = findMarkInSet(node.marks, type, attributes);\n\n    if (!mark) {\n        return null;\n    }\n\n    let startIndex = pos.index();\n    let startPos = pos.start() + offset;\n    let endIndex = startIndex + 1;\n    let endPos = startPos + node.nodeSize;\n\n    findMarkInSet(node.marks, type, attributes);\n\n    while (startIndex > 0 && mark.isInSet(pos.parent.child(startIndex - 1).marks)) {\n        startIndex -= 1;\n        startPos -= pos.parent.child(startIndex).nodeSize;\n    }\n\n    while (\n        endIndex < pos.parent.childCount &&\n        !!findMarkInSet(pos.parent.child(endIndex).marks, type, attributes)\n    ) {\n        endPos += pos.parent.child(endIndex).nodeSize;\n        endIndex += 1;\n    }\n\n    return {\n        from: startPos,\n        to: endPos,\n    };\n}\n","import {type Attrs, Node as NodeElement} from '@tiptap/pm/model';\n\nexport function tuiGetNestedNodes(node: NodeElement): Array<Array<Attrs | string>> {\n    const nodes: Array<Array<Attrs | string>> = [];\n\n    // @note: the content field is not array type\n    node.content.forEach((child) => {\n        if (child instanceof NodeElement) {\n            nodes.push([child.type.name, child.attrs]);\n        }\n    });\n\n    return nodes;\n}\n","import {getHTMLFromFragment} from '@tiptap/core';\nimport {type EditorState} from '@tiptap/pm/state';\n\nexport function tuiGetSelectedContent(state: EditorState, current?: string): string {\n    const currentNodeContent = current ?? state.selection.$head.parent.textContent;\n    const selected = state.tr.doc.cut(state.tr.selection.from, state.tr.selection.to);\n\n    return selected.content.size\n        ? getHTMLFromFragment(selected.content, state.schema)\n        : currentNodeContent;\n}\n","import {type AbstractTuiEditor} from '@taiga-ui/editor/common';\n\nexport interface TuiSelectionState {\n    before: string;\n    after: string;\n}\n\nexport function tuiGetSelectionState(\n    editor: AbstractTuiEditor | null,\n): TuiSelectionState {\n    if (!editor?.state?.selection) {\n        return {before: '', after: ''};\n    }\n\n    const {$from, $to} = editor.state.selection;\n\n    let before = $from.nodeBefore?.textContent;\n\n    before = (\n        before?.slice((before.lastIndexOf(' ') || before.lastIndexOf('\\n')) + 1) ?? ''\n    ).trim();\n\n    const after = $to.nodeAfter?.textContent.trim() ?? '';\n\n    return {before, after};\n}\n","import {getHTMLFromFragment} from '@tiptap/core';\nimport {type Fragment} from '@tiptap/pm/model';\nimport {type EditorState} from '@tiptap/pm/state';\n\nexport function tuiGetSlicedFragment({schema, tr}: EditorState): string {\n    const selected = tr.doc.cut(tr.selection.from, tr.selection.to);\n\n    return tuiGetHtmlFromFragment(selected.content, schema);\n}\n\nexport function tuiGetHtmlFromFragment(\n    fragment: Fragment,\n    schema: EditorState['schema'],\n): string {\n    return getHTMLFromFragment(fragment, schema).replaceAll(/<[^>]+(?:>|$)/g, '');\n}\n","import {tuiIsNodeIn} from '@taiga-ui/cdk';\n\n/**\n * Checks if selection is inside a specific selector\n * @param selection\n * @param selector\n * @return true if selection is completely inside a particular selector\n */\nexport function tuiIsSelectionIn(\n    {anchorNode, focusNode}: Selection,\n    selector: string,\n): boolean {\n    // Even though focusNode/anchor-node are defined as Node, they can be null on initial nested document query\n    return (\n        !!anchorNode &&\n        !!focusNode &&\n        tuiIsNodeIn(anchorNode, selector) &&\n        tuiIsNodeIn(focusNode, selector)\n    );\n}\n","interface ServerSideGlobal extends NodeJS.Global {\n    document: Document | undefined;\n}\n\ndeclare const globalThis: ServerSideGlobal;\n\nfunction migration(element: Element): void {\n    Array.from(element.children).forEach((child) => {\n        if (child.children.length) {\n            migration(child);\n        }\n\n        if (child.tagName === 'FONT') {\n            if (child.hasAttribute('size')) {\n                switch (child.getAttribute('size')) {\n                    case '2': {\n                        migrateParagraph('13px', child);\n                        break;\n                    }\n                    case '3': {\n                        migrateParagraph('15px', child);\n                        break;\n                    }\n\n                    case '4': {\n                        migrateParagraph('17px', child);\n                        break;\n                    }\n\n                    case '5': {\n                        migrateHeading('h2', child);\n                        break;\n                    }\n\n                    case '6': {\n                        migrateHeading('h1', child);\n                        break;\n                    }\n                    default:\n                        break;\n                }\n            } else if (child.hasAttribute('color')) {\n                migrateFontHighlight(child);\n            }\n        }\n    });\n}\n\nfunction migrateHeading(selector: string, element: Element): void {\n    if (globalThis.document) {\n        const heading = document.createElement(selector);\n\n        heading.innerHTML = element.innerHTML;\n\n        if (element.parentElement?.tagName === 'P') {\n            const newRef = element.parentElement.parentElement?.insertBefore(\n                heading,\n                element.parentElement,\n            );\n\n            element.parentElement.removeChild(element);\n\n            if (newRef?.nextSibling && !newRef.nextSibling.textContent?.trim()) {\n                newRef.nextSibling.parentElement?.removeChild(newRef.nextSibling);\n            }\n        } else {\n            element.parentElement?.replaceChild(heading, element);\n        }\n    }\n}\n\nfunction migrateParagraph(fontSize: string, element: Element): void {\n    if (globalThis.document) {\n        const p = document.createElement('p');\n        const span = document.createElement('span');\n\n        span.setAttribute('style', `font-size: ${fontSize}`);\n        span.innerHTML = element.innerHTML;\n        p.append(span);\n\n        element.parentElement?.replaceChild(\n            element.parentElement.tagName === 'P' ? span : p,\n            element,\n        );\n    }\n}\n\nfunction migrateFontHighlight(element: Element): void {\n    if (globalThis.document) {\n        const span = document.createElement('span');\n\n        span.setAttribute('style', `color: ${element.getAttribute('color')}`);\n        span.innerHTML = element.innerHTML;\n        element.parentElement?.replaceChild(span, element);\n    }\n}\n\n/**\n * @description:\n * This converter help you to painlessly migrate old tags to the tui-editor[new]\n */\nexport function tuiLegacyEditorConverter(content: string): string {\n    const tree = new DOMParser().parseFromString(content, 'text/html');\n\n    migration(tree.body);\n\n    return tree.body.innerHTML;\n}\n","import {type Attribute} from '@tiptap/core';\n\nexport function tuiParseNodeAttributes(\n    attrs: string[],\n): Record<string, Partial<Attribute>> {\n    return attrs.reduce<Record<string, Partial<Attribute>>>((result, attribute) => {\n        result[attribute] = {\n            parseHTML: (element: Element | null) => element?.getAttribute(`${attribute}`),\n        };\n\n        return result;\n    }, {});\n}\n","export function tuiParseStyle(style: string): Record<string, string> {\n    return style\n        .split(';')\n        .reduce((ruleMap: Record<string, string>, ruleString?: string) => {\n            const [left, right] = ruleString?.split(':') ?? [];\n\n            if (left && right) {\n                ruleMap[left.trim()] = right.trim();\n            }\n\n            return ruleMap;\n        }, {});\n}\n","export function tuiIsSafeLinkRange(range: Range): boolean {\n    const textNodeLength = range.endContainer.nodeValue?.length ?? 0;\n\n    return (\n        range.endOffset - range.startOffset > 0 ||\n        (range.endOffset - range.startOffset === 0 && textNodeLength === 1) ||\n        (range.startOffset !== 0 &&\n            textNodeLength > 1 &&\n            range.endOffset !== textNodeLength)\n    );\n}\n","import {tuiParseColor} from '@taiga-ui/cdk';\nimport {type TuiParsedGradient} from '@taiga-ui/editor/common';\n\nexport function tuiToGradient({stops, side}: TuiParsedGradient): string {\n    return `linear-gradient(${side}, ${stops\n        .map(\n            ({color, position}) => `rgba(${tuiParseColor(color).join(', ')}) ${position}`,\n        )\n        .join(', ')})`;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NodeElement"],"mappings":"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"}