{"version":3,"file":"plait-text.mjs","sources":["../../../packages/text/src/custom-types.ts","../../../packages/text/src/constant/mark.ts","../../../packages/text/src/constant/index.ts","../../../packages/text/src/plugins/link/link.component.ts","../../../packages/text/src/plugins/link/link-editor.ts","../../../packages/text/src/utils/clipboard.ts","../../../packages/text/src/utils/common.ts","../../../packages/text/src/plugins/link/with-link.ts","../../../packages/text/src/plugins/mark/mark.editor.ts","../../../packages/text/src/plugins/mark/with-marks.ts","../../../packages/text/src/plugins/paragraph/paragraph.component.ts","../../../packages/text/src/plugins/with-selection.ts","../../../packages/text/src/plugins/with-single.ts","../../../packages/text/src/text-node/text.component.ts","../../../packages/text/src/richtext/richtext.component.ts","../../../packages/text/src/richtext/richtext.component.html","../../../packages/text/src/utils/text-size.ts","../../../packages/text/src/plugins/align/align-editor.ts","../../../packages/text/src/utils/text-manage.ts","../../../packages/text/src/public-api.ts","../../../packages/text/src/plait-text.ts"],"sourcesContent":["import { BaseElement } from 'slate';\nimport { AngularEditor } from 'slate-angular';\n\nexport enum Alignment {\n    left = 'left',\n    center = 'center',\n    right = 'right'\n}\n\nexport type CustomText = {\n    bold?: boolean;\n    italic?: boolean;\n    strike?: boolean;\n    code?: boolean;\n    text: string;\n    underlined?: boolean;\n    color?: string;\n    [`font-size`]?: string;\n};\n\nexport interface LinkElement extends BaseElement {\n    type: 'link';\n    url: string;\n}\n\nexport interface ParagraphElement extends BaseElement {\n    align?: Alignment;\n}\n\nexport type CustomElement = ParagraphElement | LinkElement;\n\nexport type TextPlugin = (editor: AngularEditor) => AngularEditor;\n","export enum MarkTypes {\n    bold = 'bold',\n    italic = 'italic',\n    underline = 'underlined',\n    strike = 'strike',\n    color = 'color',\n    fontSize = 'font-size'\n}\n\nexport const DEFAULT_FONT_SIZE = 14;\n\nexport const DEFAULT_TEXT_COLOR = '#333333';\n\nexport const MarkProps: MarkTypes[] = [\n    MarkTypes.bold,\n    MarkTypes.color,\n    MarkTypes.italic,\n    MarkTypes.strike,\n    MarkTypes.underline,\n    MarkTypes.fontSize\n];\n","export * from './mark';\n\nexport const TEXT_DEFAULT_HEIGHT = 20;\n\nexport const CLIPBOARD_FORMAT_KEY = 'x-plait-text-fragment';\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { BaseElementComponent } from 'slate-angular';\nimport { LinkElement } from '../../custom-types';\n\n@Component({\n    selector: 'a[plaitLink]',\n    template: `\n        <span contenteditable=\"false\" class=\"link-break-char\">{{ inlineChromiumBugfix }}</span>\n        <span #outletParent></span>\n        <span contenteditable=\"false\" class=\"link-break-char\">{{ inlineChromiumBugfix }}</span>\n    `,\n    host: {\n        '[attr.href]': 'element.url',\n        target: '_blank',\n        class: 'plait-link-node'\n    },\n    standalone: true\n})\nexport class PlaitLinkNodeComponent extends BaseElementComponent<LinkElement> implements OnInit {\n    // Put this at the start and end of an inline component to work around this Chromium bug:\n    // https://bugs.chromium.org/p/chromium/issues/detail?id=1249405\n    inlineChromiumBugfix = String.fromCodePoint(160);\n\n    @ViewChild('outletParent', { read: ElementRef, static: true })\n    outletParent!: ElementRef;\n\n    getOutletParent = () => {\n        return this.outletParent.nativeElement;\n    };\n\n    ngOnInit() {\n        super.ngOnInit();\n    }\n}\n","import { Editor, Transforms, Range, Element, BaseRange, Location, Node } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { CustomElement, LinkElement } from '../../custom-types';\n\nexport const LinkEditor = {\n    wrapLink(editor: AngularEditor, text: string, url: string) {\n        if (LinkEditor.isLinkActive(editor)) {\n            LinkEditor.unwrapLink(editor);\n        }\n        const { selection } = editor;\n        const isCollapsed = selection && Range.isCollapsed(selection);\n        const link: LinkElement = {\n            type: 'link',\n            url,\n            children: [{ text }]\n        };\n        if (isCollapsed || Node.string(editor) === '') {\n            Transforms.insertNodes(editor, link);\n        } else if (AngularEditor.isReadonly(editor)) {\n            const at = { anchor: Editor.start(editor, [0]), focus: Editor.end(editor, [0]) };\n            Transforms.wrapNodes(editor, link, { split: true, at });\n        } else {\n            Transforms.wrapNodes(editor, link, { split: true });\n            Transforms.collapse(editor, { edge: 'end' });\n        }\n    },\n    unwrapLink(editor: AngularEditor, at?: Location) {\n        if (!at) {\n            at = editor.selection as BaseRange;\n            if (AngularEditor.isReadonly(editor) && editor.children && editor.children.length > 0) {\n                at = { anchor: Editor.start(editor, [0]), focus: Editor.end(editor, [0]) };\n            }\n        }\n\n        Transforms.unwrapNodes<CustomElement>(editor, { at, match: n => Element.isElement(n) && (n as LinkElement).type === 'link' });\n    },\n    isLinkActive(editor: AngularEditor) {\n        let at = editor.selection as BaseRange;\n        if (AngularEditor.isReadonly(editor) && editor.children && editor.children.length > 0) {\n            at = { anchor: Editor.start(editor, [0]), focus: Editor.end(editor, [0]) };\n        }\n        const [link] = Editor.nodes<CustomElement>(editor, { match: n => Element.isElement(n) && (n as LinkElement).type === 'link', at });\n\n        return !!link;\n    },\n    getLinkElement(editor: AngularEditor) {\n        let at = editor.selection as BaseRange;\n        if (AngularEditor.isReadonly(editor) && editor.children && editor.children.length > 0) {\n            at = { anchor: Editor.start(editor, [0]), focus: Editor.end(editor, [0]) };\n        }\n        const [link] = Editor.nodes<CustomElement>(editor, { match: n => Element.isElement(n) && (n as LinkElement).type === 'link', at });\n        return link;\n    }\n};\n","import { CLIPBOARD_FORMAT_KEY } from '../constant';\nimport { Element, Node } from 'slate';\n\nexport const getTextFromClipboard = (data: DataTransfer | null) => {\n    let plaitTextData = data?.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n    const text = (data ? data.getData(`text/plain`) : '') as string;\n    if (plaitTextData) {\n        const decoded = decodeURIComponent(window.atob(plaitTextData));\n        const res = JSON.parse(decoded) as Element[];\n        if (res.length === 1 && Node.string(res[0])) {\n            return res[0];\n        }\n    }\n    return text.trim() || '';\n};\n","import { Element } from 'slate';\nimport { Alignment, CustomText, ParagraphElement } from '../custom-types';\n\nexport const buildText = (text: string | Element, align?: Alignment, properties?: Partial<CustomText>) => {\n    properties = properties || {};\n    const plaitText = typeof text === 'string' ? { children: [{ text, ...properties }] } : text;\n    if (align) {\n        (plaitText as ParagraphElement).align = align;\n    }\n    return plaitText;\n};\n\nexport const isUrl = (string: string) => {\n    const protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n    const localhostDomainRE = /^localhost[\\:?\\d]*(?:[^\\:?\\d]\\S*)?$/;\n    const nonLocalhostDomainRE = /^[^\\s\\.]+\\.\\S{2,}$/;\n\n    if (typeof string !== 'string') {\n        return false;\n    }\n\n    var match = string.match(protocolAndDomainRE);\n    if (!match) {\n        return false;\n    }\n\n    var everythingAfterProtocol = match[1];\n    if (!everythingAfterProtocol) {\n        return false;\n    }\n\n    if (localhostDomainRE.test(everythingAfterProtocol) || nonLocalhostDomainRE.test(everythingAfterProtocol)) {\n        return true;\n    }\n\n    return false;\n};\n","import { Element, NodeEntry, Transforms, Node } from 'slate';\nimport { LinkElement } from '../../custom-types';\nimport { AngularEditor } from 'slate-angular';\nimport { LinkEditor } from './link-editor';\nimport { getTextFromClipboard } from '../../utils/clipboard';\nimport { isUrl } from '../../utils/common';\n\nexport const withLink = <T extends AngularEditor>(editor: T): T => {\n    const { isInline, normalizeNode, insertData } = editor;\n\n    editor.isInline = (element: Element) => {\n        return (element as LinkElement).type === 'link' ? true : isInline(element);\n    };\n\n    editor.normalizeNode = (nodeEntry: NodeEntry) => {\n        const node = nodeEntry[0] as LinkElement;\n        const path = nodeEntry[1];\n        if (node.type && node.type === 'link' && Node.string(node) === '') {\n            Transforms.removeNodes(editor, { at: path });\n            return;\n        }\n\n        normalizeNode(nodeEntry);\n    };\n\n    editor.insertData = data => {\n        const text = getTextFromClipboard(data);\n\n        if (typeof text === 'string' && text && isUrl(text)) {\n            LinkEditor.wrapLink(editor, text, text);\n            Transforms.move(editor, { distance: 1, unit: 'offset' });\n        } else {\n            insertData(data);\n        }\n    };\n\n    return editor;\n};\n","import { Editor, Text, Node, Element, Transforms, NodeEntry, Location } from 'slate';\nimport { DEFAULT_FONT_SIZE, DEFAULT_TEXT_COLOR, MarkProps, MarkTypes } from '../../constant/mark';\nimport { AngularEditor } from 'slate-angular';\n\nexport enum FontSizes {\n    'fontSize12' = '12',\n    'fontSize13' = '13',\n    'fontSize14' = '14',\n    'fontSize15' = '15',\n    'fontSize16' = '16',\n    'fontSize18' = '18',\n    'fontSize20' = '20',\n    'fontSize24' = '24',\n    'fontSize28' = '28',\n    'fontSize32' = '32',\n    'fontSize40' = '40',\n    'fontSize48' = '48'\n}\n\nexport interface MarkEditor extends Editor {\n    removeMark: (key: string, shouldChange?: boolean) => void;\n}\n\nexport const PlaitMarkEditor = {\n    getMarks(editor: AngularEditor) {\n        const marks: any = {};\n        let at: Location = [];\n        if (editor.selection) {\n            at = editor.selection;\n        } else if (editor.children && editor.children.length > 0) {\n            at = { anchor: Editor.start(editor, [0]), focus: Editor.end(editor, [0]) };\n        }\n        const matchResult = Editor.nodes(editor, { match: Text.isText, at });\n        for (const match of matchResult) {\n            const [node] = match as NodeEntry<Text>;\n            const { text, ...rest } = node;\n            Object.assign(marks, rest);\n        }\n        for (const key in marks) {\n            if (!MarkProps.includes(key as MarkTypes)) {\n                delete marks[key];\n            }\n        }\n        return marks;\n    },\n    getMarksByElement(element: Element) {\n        const marks: any = {};\n        const texts = Node.texts(element);\n        for (const match of texts) {\n            const [node] = match as NodeEntry<Text>;\n            const { text, ...rest } = node;\n            Object.assign(marks, rest);\n        }\n        for (const key in marks) {\n            if (!MarkProps.includes(key as MarkTypes)) {\n                delete marks[key];\n            }\n        }\n        return marks;\n    },\n    isMarkActive(editor: AngularEditor, format: MarkTypes) {\n        if (!editor?.selection) {\n            return;\n        }\n        const node = Node.get(editor, editor?.selection?.anchor?.path);\n        if (!Text.isText(node)) {\n            return false;\n        }\n        const marks = PlaitMarkEditor.getMarks(editor);\n        return marks && marks[format] ? true : false;\n    },\n    toggleMark(editor: AngularEditor, format: MarkTypes) {\n        setSelection(editor);\n        const isActive = PlaitMarkEditor.isMarkActive(editor, format);\n        if (isActive) {\n            Editor.removeMark(editor, format);\n        } else {\n            Editor.addMark(editor, format, true);\n        }\n    },\n    setFontSizeMark(editor: AngularEditor, size: FontSizes, defaultSize: number = DEFAULT_FONT_SIZE) {\n        setSelection(editor);\n        // set paragraph text fontSize\n        if (Number(size) === defaultSize) {\n            Editor.removeMark(editor, MarkTypes.fontSize);\n        } else {\n            // set paragraph text fontSize\n            Editor.addMark(editor, MarkTypes.fontSize, Number(size));\n        }\n    },\n    setColorMark(editor: AngularEditor, color: string, defaultTextColor: string = DEFAULT_TEXT_COLOR) {\n        setSelection(editor);\n\n        if (color === defaultTextColor) {\n            Editor.removeMark(editor, 'color');\n        } else {\n            Editor.addMark(editor, 'color', color);\n        }\n    }\n};\n\nexport function setSelection(editor: AngularEditor) {\n    if (AngularEditor.isReadonly(editor)) {\n        Transforms.select(editor, [0]);\n    }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { MarkTypes } from '../../constant/mark';\nimport { MarkEditor, PlaitMarkEditor } from './mark.editor';\nimport { Editor, Range, Text, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\n\nexport const withMark = <T extends AngularEditor & MarkEditor>(editor: T): T => {\n    const e = editor;\n\n    const { onKeydown } = e;\n\n    e.removeMark = (key: string, shouldChange = true) => {\n        const { selection } = e;\n        if (selection) {\n            if (Range.isExpanded(selection)) {\n                Transforms.unsetNodes(e, key, {\n                    match: Text.isText,\n                    split: true\n                });\n            } else {\n                const marks = { ...(Editor.marks(e) || {}) };\n                delete (marks as any)[key];\n                editor.marks = marks;\n                const text = Editor.string(e, selection.anchor.path);\n                if (text !== '') {\n                    Editor.setNormalizing(editor, false);\n                    e.insertText('');\n                    editor.marks = marks;\n                    Editor.setNormalizing(editor, true);\n                } else {\n                    Transforms.unsetNodes(e, key, { at: selection.anchor.path });\n                }\n                if (shouldChange) {\n                    editor.onChange();\n                }\n            }\n        }\n    };\n\n    e.addMark = (key: string, value: any) => {\n        const { selection } = editor;\n\n        if (selection) {\n            if (Range.isExpanded(selection)) {\n                Transforms.setNodes(e, { [key]: value }, { match: Text.isText, split: true });\n            } else {\n                const marks = {\n                    ...(Editor.marks(e) || {}),\n                    [key]: value\n                };\n                editor.marks = marks;\n                const text = Editor.string(e, selection.anchor.path);\n                if (text !== '') {\n                    Editor.setNormalizing(editor, false);\n                    e.insertText('');\n                    editor.marks = marks;\n                    Editor.setNormalizing(editor, true);\n                } else {\n                    Transforms.setNodes(e, { [key]: value }, { at: selection.anchor.path });\n                }\n            }\n        }\n    };\n\n    e.onKeydown = (event: KeyboardEvent) => {\n        markShortcuts(editor, event);\n        onKeydown(event);\n    };\n\n    return e;\n};\n\nconst HOTKEYS = {\n    'mod+b': MarkTypes.bold,\n    'mod+i': MarkTypes.italic,\n    'mod+u': MarkTypes.underline,\n    'mod+shift+x': MarkTypes.strike\n};\n\nexport const markShortcuts = (editor: AngularEditor, event: KeyboardEvent) => {\n    for (const hotkey in HOTKEYS) {\n        if (isKeyHotkey(hotkey, event)) {\n            event.preventDefault();\n            const mark = (HOTKEYS as any)[hotkey];\n            PlaitMarkEditor.toggleMark(editor, mark);\n        }\n    }\n};\n","import { Component, ChangeDetectionStrategy, OnInit } from '@angular/core';\nimport { BaseElementComponent } from 'slate-angular';\nimport { ParagraphElement } from '../../custom-types';\n\n@Component({\n    selector: 'div[plaitTextParagraphElement]',\n    template: ``,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    host: {\n        class: 'plait-text-paragraph'\n    }\n})\nexport class ParagraphElementComponent extends BaseElementComponent<ParagraphElement> implements OnInit {\n    ngOnInit(): void {\n        super.ngOnInit();\n        this.applyAlign();\n    }\n\n    onContextChange(): void {\n        super.onContextChange();\n        if (this.initialized) {\n            this.applyAlign();\n        }\n    }\n\n    applyAlign() {\n        if (this.element.align) {\n            if (this.nativeElement.style.textAlign !== this.element.align) {\n                this.nativeElement.style.textAlign = this.element.align;\n            }\n        } else if (this.nativeElement.style.textAlign) {\n            this.nativeElement.style.removeProperty('text-align');\n        }\n    }\n\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n    }\n}\n","import { Editor, Element, Transforms, Range, Path } from 'slate';\nimport { AngularEditor, hotkeys } from 'slate-angular';\n\nexport const withSelection = <T extends AngularEditor>(editor: T): T => {\n    const { onKeydown } = editor;\n\n    editor.onKeydown = (event: KeyboardEvent) => {\n        const { selection } = editor;\n        if (!selection || !selection.anchor || !selection.focus) {\n            onKeydown(event);\n            return;\n        }\n        const isMoveBackward = hotkeys.isMoveBackward(event);\n        const isMoveForward = hotkeys.isMoveForward(event);\n        const isCollapsed = selection && Range.isCollapsed(selection);\n        const isInlineNode = isInline(editor);\n        if (isCollapsed && isMoveForward) {\n            let isInlineCodeBefore = false;\n            if (!isInlineNode) {\n                try {\n                    const { path } = Editor.after(editor, selection)!;\n                    if (path) {\n                        isInlineCodeBefore = isInline(editor, path);\n                    }\n                } catch (error) {}\n            }\n            if (isInlineNode || isInlineCodeBefore) {\n                event.preventDefault();\n                Transforms.move(editor, { unit: 'offset' });\n                return;\n            }\n        }\n        if (isCollapsed && isMoveBackward) {\n            let isInlineCodeAfter = false;\n            if (!isInlineNode) {\n                try {\n                    const { path } = Editor.before(editor, selection)!;\n                    isInlineCodeAfter = isInline(editor, path);\n                } catch (error) {}\n            }\n            if (isInlineNode || isInlineCodeAfter) {\n                event.preventDefault();\n                Transforms.move(editor, { unit: 'offset', reverse: true });\n                return;\n            }\n        }\n        onKeydown(event);\n    };\n\n    return editor;\n};\n\nexport const isInline = (editor: Editor, path?: Path): boolean => {\n    const [inlineNode] = Editor.nodes(editor, {\n        at: path ? path : editor.selection?.anchor.path,\n        match: n => Element.isElement(n) && Editor.isInline(editor, n) && !Editor.isVoid(editor, n)\n    });\n    return !!inlineNode;\n};\n","import { AngularEditor } from 'slate-angular';\nimport { CLIPBOARD_FORMAT_KEY } from '../constant';\n\nexport const withSingleLine = <T extends AngularEditor>(editor: T) => {\n    const e = editor as T;\n    const { insertData } = e;\n\n    e.insertBreak = () => {\n        editor.insertText('\\n');\n    };\n\n    e.insertData = (data: DataTransfer) => {\n        let text = data.getData('text/plain');\n        let plaitData = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n        if (!plaitData && text) {\n            if (text.endsWith('\\n')) {\n                text = text.substring(0, text.length - 1);\n            }\n            text = text.trim().replace(/\\t+/g, ' ');\n            e.insertText(text);\n            return;\n        }\n        insertData(data);\n    };\n\n    return e;\n};\n","import { ChangeDetectorRef, Component, ElementRef, Renderer2 } from '@angular/core';\nimport { BaseTextComponent } from 'slate-angular';\nimport { MarkTypes } from '../constant/mark';\nimport { CustomText } from '../custom-types';\n\n@Component({\n    selector: 'span[plaitText]',\n    template: ``,\n    host: {\n        'data-slate-node': 'text'\n    },\n    standalone: true\n})\nexport class PlaitTextNodeComponent extends BaseTextComponent<CustomText> {\n    constructor(public elementRef: ElementRef, public renderer2: Renderer2, cdr: ChangeDetectorRef) {\n        super(elementRef, cdr);\n    }\n\n    excludes = ['color', 'font-size', 'text'];\n    attributes: string[] = [];\n\n    applyTextMark() {\n        this.attributes.forEach(attr => {\n            this.renderer2.removeAttribute(this.elementRef.nativeElement, attr);\n        });\n        this.attributes = [];\n        for (const key in this.text) {\n            if (Object.prototype.hasOwnProperty.call(this.text, key) && !this.excludes.includes(key)) {\n                const attr = `the-${key}`;\n                this.renderer2.setAttribute(this.elementRef.nativeElement, attr, 'true');\n                this.attributes.push(attr);\n            }\n        }\n\n        const fontSize = this.text[MarkTypes.fontSize];\n        if (fontSize) {\n            this.renderer2.setAttribute(this.elementRef.nativeElement, `plait-${MarkTypes.fontSize}`, fontSize);\n        } else {\n            this.renderer2.removeAttribute(this.elementRef.nativeElement, `plait-${MarkTypes.fontSize}`);\n        }\n\n        if (this.text[MarkTypes.color]) {\n            this.renderer2.setStyle(this.elementRef.nativeElement, 'color', this.text[MarkTypes.color]);\n        } else {\n            this.renderer2.removeStyle(this.elementRef.nativeElement, 'color');\n        }\n    }\n\n    onContextChange() {\n        super.onContextChange();\n        this.applyTextMark();\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnInit,\n    Output,\n    Renderer2,\n    ViewChild\n} from '@angular/core';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { Editor, Element, Text, Transforms, createEditor } from 'slate';\nimport { SlateEditable, withAngular } from 'slate-angular';\nimport { withHistory } from 'slate-history';\nimport { CLIPBOARD_FORMAT_KEY } from '../constant';\nimport { MarkTypes } from '../constant/mark';\nimport { LinkElement, TextPlugin } from '../custom-types';\nimport { PlaitLinkNodeComponent } from '../plugins/link/link.component';\nimport { withLink } from '../plugins/link/with-link';\nimport { withMark } from '../plugins/mark/with-marks';\nimport { ParagraphElementComponent } from '../plugins/paragraph/paragraph.component';\nimport { PlaitTextEditor } from '../plugins/text.editor';\nimport { withSelection } from '../plugins/with-selection';\nimport { withSingleLine } from '../plugins/with-single';\nimport { PlaitTextNodeComponent } from '../text-node/text.component';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n    selector: 'plait-richtext',\n    templateUrl: './richtext.component.html',\n    standalone: true,\n    imports: [SlateEditable, FormsModule]\n})\nexport class PlaitRichtextComponent implements OnInit, AfterViewInit {\n    @HostBinding('class') hostClass = 'plait-richtext-container';\n\n    children: Element[] = [];\n\n    @Input() textPlugins: TextPlugin[] = [];\n\n    @Input() set value(value: Element) {\n        this.children = [value];\n        this.cdr.markForCheck();\n    }\n\n    @Input() readonly = false;\n\n    @ViewChild('slateEditable')\n    slateEditable!: SlateEditable;\n\n    @Output()\n    onChange: EventEmitter<Editor> = new EventEmitter();\n\n    @Output()\n    onComposition: EventEmitter<CompositionEvent> = new EventEmitter();\n\n    editor = withSelection(withLink(withMark(withSingleLine(withHistory(withAngular(createEditor(), CLIPBOARD_FORMAT_KEY))))));\n\n    constructor(public renderer2: Renderer2, private cdr: ChangeDetectorRef, public elementRef: ElementRef<HTMLElement>) {}\n\n    valueChange() {\n        this.onChange.emit(this.editor);\n    }\n\n    ngOnInit(): void {\n        this.textPlugins.forEach(plugin => {\n            plugin(this.editor);\n        });\n    }\n\n    ngAfterViewInit(): void {}\n\n    renderElement = (element: Element) => {\n        const render = ((this.editor as unknown) as PlaitTextEditor)?.renderElement;\n        if (render && render(element)) {\n            return render(element);\n        }\n\n        if ((element as LinkElement).type === 'link') {\n            return PlaitLinkNodeComponent;\n        }\n\n        return ParagraphElementComponent;\n    };\n\n    renderText: any = (text: Text): PlaitTextNodeComponent | null => {\n        for (const key in MarkTypes) {\n            if ((text as any)[(MarkTypes as any)[key]]) {\n                return PlaitTextNodeComponent as any;\n            }\n        }\n        return null;\n    };\n\n    compositionStart = (event: CompositionEvent) => {\n        this.onComposition.emit(event);\n    };\n\n    compositionUpdate = (event: CompositionEvent) => {\n        this.onComposition.emit(event);\n    };\n\n    compositionEnd = (event: CompositionEvent) => {\n        this.onComposition.emit(event);\n    };\n\n    onKeydown = (event: KeyboardEvent) => {\n        if (isKeyHotkey('mod+a', event)) {\n            Transforms.select(this.editor, [0]);\n            event.preventDefault();\n        }\n        this.editor.onKeydown(event);\n    };\n}\n","<slate-editable\n    #slateEditable\n    [editor]=\"editor\"\n    [readonly]=\"readonly\"\n    [(ngModel)]=\"children\"\n    (ngModelChange)=\"valueChange()\"\n    [keydown]=\"onKeydown\"\n    [renderElement]=\"renderElement\"\n    [compositionStart]=\"compositionStart\"\n    [compositionUpdate]=\"compositionUpdate\"\n    [compositionEnd]=\"compositionEnd\"\n    [renderText]=\"renderText\"\n></slate-editable>\n","import { PlaitBoard } from '@plait/core';\nimport { PlaitRichtextComponent } from '../richtext/richtext.component';\nimport { Element } from 'slate';\nimport { AngularEditor } from 'slate-angular';\n\nexport function measureDivSize(div: HTMLElement) {\n    const boundaryBox = {\n        left: Number.MAX_VALUE,\n        top: Number.MAX_VALUE,\n        right: Number.NEGATIVE_INFINITY,\n        bottom: Number.NEGATIVE_INFINITY\n    };\n    for (let index = 0; index < div.childElementCount; index++) {\n        const element = div.children.item(index);\n        const nodeRectangle = element?.getBoundingClientRect();\n        if (nodeRectangle) {\n            boundaryBox.left = Math.min(boundaryBox.left, nodeRectangle.x);\n            boundaryBox.top = Math.min(boundaryBox.top, nodeRectangle.y);\n            boundaryBox.right = Math.max(boundaryBox.right, nodeRectangle.x + nodeRectangle.width);\n            boundaryBox.bottom = Math.max(boundaryBox.bottom, nodeRectangle.y + nodeRectangle.height);\n        }\n    }\n    const width = boundaryBox.right - boundaryBox.left;\n    // FIREFOX the height of inline span is less than the height of paragraph\n    const height = div.getBoundingClientRect().height;\n    return { width, height };\n}\n\nexport const getTextSize = (\n    board: PlaitBoard,\n    text: Element | string,\n    maxWordCount?: number,\n    styles?: { fontSize?: number; fontFamily?: string; width?: number }\n) => {\n    const viewContainerRef = PlaitBoard.getComponent(board).viewContainerRef;\n    const ref = viewContainerRef.createComponent(PlaitRichtextComponent);\n    const value = typeof text === 'string' ? ({ children: [{ text }] } as Element) : text;\n    ref.instance.value = value;\n    ref.instance.readonly = true;\n    ref.changeDetectorRef.detectChanges();\n    ref.instance.slateEditable.writeValue(ref.instance.children);\n    ref.instance.slateEditable.cdr.detectChanges();\n    const richtextContainer = ref.instance.elementRef.nativeElement as HTMLElement;\n    richtextContainer.style.lineHeight = 'normal';\n    if (maxWordCount) {\n        richtextContainer.style.maxWidth = `${maxWordCount}em`;\n    }\n    if (styles) {\n        if (styles.fontSize) {\n            richtextContainer.style.fontSize = `${styles.fontSize}px`;\n        }\n        if (styles.fontFamily) {\n            richtextContainer.style.fontFamily = styles.fontFamily;\n        }\n        if (styles.width) {\n            richtextContainer.style.width = `${styles.width}px`;\n        }\n    }\n    PlaitBoard.getBoardContainer(board).append(richtextContainer);\n    const paragraph = AngularEditor.toDOMNode(ref.instance.editor, ref.instance.children[0]);\n    const { width, height } = measureDivSize(paragraph);\n    ref.destroy();\n    richtextContainer.remove();\n    return { width, height };\n};\n","import { Editor, Transforms, Node } from 'slate';\nimport { Alignment, ParagraphElement } from '../../custom-types';\n\nexport const AlignEditor = {\n    isActive(editor: Editor, alignment: Alignment) {\n        const blockElement = Node.get(editor, defaultPath) as ParagraphElement;\n        if (blockElement) {\n            const { align } = blockElement;\n            return align === alignment;\n        }\n        return false;\n    },\n    setAlign(editor: Editor, alignment: Alignment) {\n        const props: Partial<ParagraphElement> = {\n            align: alignment\n        };\n        Transforms.setNodes(editor, props, {\n            at: defaultPath\n        });\n    }\n};\n\nconst defaultPath = [0];\n","import { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { BaseElement, BaseOperation, Descendant, Element, Node, Operation, Transforms } from 'slate';\nimport { PlaitRichtextComponent } from '../richtext/richtext.component';\nimport {\n    IS_TEXT_EDITABLE,\n    MERGING,\n    PlaitBoard,\n    Point,\n    RectangleClient,\n    createForeignObject,\n    createG,\n    setAngleForG,\n    toHostPoint,\n    toViewBoxPoint,\n    updateForeignObject,\n    updateForeignObjectWidth\n} from '@plait/core';\nimport { AngularEditor, EDITOR_TO_ELEMENT } from 'slate-angular';\nimport { debounceTime, filter, tap } from 'rxjs/operators';\nimport { fromEvent, timer } from 'rxjs';\nimport { measureDivSize } from './text-size';\nimport { Alignment, CustomElement, TextPlugin } from '../custom-types';\nimport { PlaitTextEditor } from '../plugins/text.editor';\nimport { AlignEditor } from '../plugins/align/align-editor';\n\nexport enum ExitOrigin {\n    'destroy' = 'destroy',\n    'default' = 'default'\n}\n\nexport interface TextManageRef {\n    newValue?: Element;\n    width: number;\n    height: number;\n    operations?: BaseOperation[];\n}\n\nexport class TextManage {\n    componentRef!: ComponentRef<PlaitRichtextComponent>;\n\n    g!: SVGGElement;\n\n    foreignObject!: SVGForeignObjectElement;\n\n    isEditing = false;\n\n    onSelectionChangeHandle: ((editor: PlaitTextEditor) => void) | null = null;\n\n    private exitHandle: (origin: ExitOrigin) => void = () => {};\n\n    setEditing(value: boolean) {\n        const editor = this.componentRef.instance.editor;\n        const editable = AngularEditor.toDOMNode(editor, editor);\n        if (value) {\n            this.isEditing = true;\n            editable.classList.add('editing');\n        } else {\n            this.isEditing = false;\n            editable.classList.remove('editing');\n        }\n    }\n\n    constructor(\n        private board: PlaitBoard,\n        private viewContainerRef: ViewContainerRef,\n        private options: {\n            getRectangle: () => RectangleClient;\n            onValueChangeHandle?: (textChangeRef: TextManageRef) => void;\n            getRenderRectangle?: () => RectangleClient;\n            textPlugins?: TextPlugin[];\n            getMaxWidth?: () => number;\n        }\n    ) {\n        if (!this.options.getMaxWidth) {\n            this.options.getMaxWidth = () => 999;\n        }\n    }\n\n    draw(value: Element) {\n        this.componentRef = this.viewContainerRef.createComponent(PlaitRichtextComponent);\n        this.componentRef.instance.value = value;\n        this.componentRef.instance.readonly = true;\n        this.options.textPlugins && (this.componentRef.instance.textPlugins = this.options.textPlugins);\n        const _rectangle = this.options.getRectangle();\n        this.g = createG();\n        this.foreignObject = createForeignObject(_rectangle.x, _rectangle.y, _rectangle.width, _rectangle.height);\n        this.g.append(this.foreignObject);\n        this.foreignObject.append(this.componentRef.instance.elementRef.nativeElement);\n        this.g.classList.add('text');\n\n        const editor = this.componentRef.instance.editor;\n\n        (editor as PlaitTextEditor).board = this.board;\n\n        let previousValue: Descendant[] = this.componentRef.instance.children;\n        let operations: BaseOperation[] = [];\n        this.componentRef.instance.onChange\n            .pipe(\n                tap(() => {\n                    operations = editor.operations;\n                    if (editor.operations.every(op => Operation.isSelectionOperation(op))) {\n                        this.onSelectionChangeHandle && this.onSelectionChangeHandle(editor);\n                    }\n                }),\n                filter(value => {\n                    return !editor.operations.every(op => Operation.isSelectionOperation(op));\n                }),\n                tap(() => {\n                    // 1.add editing class to set max width\n                    // 2.set isEditing state to avoid reset text during updating\n                    if (AngularEditor.isReadonly(editor) && !this.isEditing) {\n                        this.setEditing(true);\n                    }\n                }),\n                debounceTime(0)\n            )\n            .subscribe(value => {\n                if (previousValue === editor.children) {\n                    return;\n                }\n\n                if (AngularEditor.isReadonly(editor)) {\n                    const { x, y, height } = this.options.getRectangle();\n                    updateForeignObject(this.g, this.options.getMaxWidth!(), height, x, y);\n                    // do not need to revert because foreign will be updated when node changed\n                }\n                previousValue = editor.children;\n                const { width, height } = this.getSize();\n                this.options.onValueChangeHandle &&\n                    this.options.onValueChangeHandle({ width, height, newValue: editor.children[0] as Element, operations });\n                MERGING.set(this.board, true);\n\n                if (AngularEditor.isReadonly(editor) && this.isEditing) {\n                    this.setEditing(false);\n                }\n            });\n    }\n\n    updateRectangleWidth(width: number) {\n        updateForeignObjectWidth(this.g, width);\n    }\n\n    updateAngle(centerPoint: Point, angle: number = 0) {\n        setAngleForG(this.g, centerPoint, angle);\n    }\n\n    updateRectangle(rectangle?: RectangleClient) {\n        const { x, y, width, height } = rectangle || this.options.getRectangle();\n        if (this.isEditing) {\n            const editor = this.componentRef.instance.editor;\n            if (AlignEditor.isActive(editor, Alignment.right) || AlignEditor.isActive(editor, Alignment.center)) {\n                if (AlignEditor.isActive(editor, Alignment.right)) {\n                    const newX = x - (this.options.getMaxWidth!() - width);\n                    updateForeignObject(this.g, this.options.getMaxWidth!(), height, newX, y);\n                }\n                if (AlignEditor.isActive(editor, Alignment.center)) {\n                    const newX = x - (this.options.getMaxWidth!() - width) / 2;\n                    updateForeignObject(this.g, this.options.getMaxWidth!(), height, newX, y);\n                }\n            } else {\n                updateForeignObject(this.g, this.options.getMaxWidth!(), height, x, y);\n            }\n        } else {\n            updateForeignObject(this.g, width, height, x, y);\n            // solve text lose on move node\n            if (this.foreignObject.children.length === 0) {\n                this.foreignObject.append(this.componentRef.instance.elementRef.nativeElement);\n            }\n        }\n    }\n\n    updateText(newText: BaseElement) {\n        if (newText !== this.componentRef.instance.children[0] && !this.isEditing) {\n            this.componentRef.instance.children = [newText];\n        }\n    }\n\n    edit(onExitCallback?: (origin: ExitOrigin, text: CustomElement[]) => void) {\n        IS_TEXT_EDITABLE.set(this.board, true);\n        this.setEditing(true);\n        this.componentRef.instance.readonly = false;\n        this.componentRef.changeDetectorRef.detectChanges();\n\n        const editor = this.componentRef.instance.editor;\n        const editable = EDITOR_TO_ELEMENT.get(editor);\n        if (editable) {\n            if (Node.string(editor).length === 0) {\n                window.getSelection()?.removeAllRanges();\n            }\n            Transforms.select(editor, [0]);\n            editable.focus({ preventScroll: true });\n        }\n\n        this.updateRectangle();\n        const { width, height } = this.getSize();\n        this.options.onValueChangeHandle && this.options.onValueChangeHandle({ width, height });\n\n        const composition$ = this.componentRef.instance.onComposition.pipe(debounceTime(0)).subscribe(event => {\n            const { width, height } = this.getSize();\n            this.options.onValueChangeHandle && this.options.onValueChangeHandle({ width, height });\n            MERGING.set(this.board, true);\n        });\n\n        const mousedown$ = fromEvent<MouseEvent>(document, 'mousedown').subscribe((event: MouseEvent) => {\n            const point = toViewBoxPoint(this.board, toHostPoint(this.board, event.x, event.y));\n            const textRec = this.options.getRenderRectangle? this.options.getRenderRectangle(): this.options.getRectangle();\n            const clickInText = RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), textRec);\n            const isAttached = (event.target as HTMLElement).closest('.plait-board-attached');\n\n            if (!clickInText && !isAttached) {\n                // handle composition input state, like: Chinese IME Composition Input\n                timer(0).subscribe(() => {\n                    this.exitHandle(ExitOrigin.default);\n                });\n            }\n        });\n\n        const { onKeydown } = editor;\n        editor.onKeydown = (event: KeyboardEvent) => {\n            if (event.isComposing) {\n                return;\n            }\n            if (event.key === 'Escape' || (event.key === 'Enter' && !event.shiftKey) || event.key === 'Tab') {\n                event.preventDefault();\n                event.stopPropagation();\n                this.exitHandle(ExitOrigin.default);\n                return;\n            }\n            onKeydown(event);\n        };\n\n        this.exitHandle = (origin: ExitOrigin) => {\n            this.setEditing(false);\n\n            if (origin === ExitOrigin.default) {\n                this.updateRectangle();\n            }\n\n            mousedown$.unsubscribe();\n            composition$.unsubscribe();\n            editor.onKeydown = onKeydown;\n\n            if (origin === ExitOrigin.default) {\n                this.componentRef.instance.readonly = true;\n                AngularEditor.deselect(editor);\n            }\n\n            IS_TEXT_EDITABLE.set(this.board, false);\n            MERGING.set(this.board, false);\n\n            if (onExitCallback) {\n                onExitCallback(origin, this.componentRef.instance.children);\n            }\n        };\n    }\n\n    getSize() {\n        const editor = this.componentRef.instance.editor;\n        const transformMatrix = this.g.getAttribute('transform');\n        this.g.setAttribute('transform', '');\n        const paragraph = AngularEditor.toDOMNode(editor, editor.children[0]);\n        const { width, height } = measureDivSize(paragraph);\n        if (transformMatrix) {\n            this.g.setAttribute('transform', transformMatrix);\n        }\n        return { width, height };\n    }\n\n    setOnChangeHandle(onChange: ((editor: PlaitTextEditor) => void) | null) {\n        this.onSelectionChangeHandle = onChange;\n    }\n\n    destroy() {\n        this.g?.remove();\n        this.componentRef?.destroy();\n        this.exitHandle(ExitOrigin.destroy);\n    }\n}\n","/*\n * Public API Surface of richtext\n */\nexport * from './custom-types';\n\nexport * from './richtext/richtext.component';\nexport * from './constant';\nexport * from './utils/text-manage';\nexport * from './utils/text-size';\nexport * from './plugins/mark/mark.editor';\nexport * from './plugins/link/link-editor';\nexport * from './plugins/align/align-editor';\nexport * from './plugins/text.editor';\nexport * from './custom-types';\nexport * from './utils/clipboard';\nexport * from './utils/common';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}