{"version":3,"file":"slate-angular.mjs","sources":["../../packages/src/utils/block-card.ts","../../packages/src/plugins/with-dom.ts","../../packages/src/utils/environment.ts","../../packages/src/utils/weak-maps.ts","../../packages/src/components/editable/debug.ts","../../packages/src/utils/dom.ts","../../packages/src/components/block-card/block-card.ts","../../packages/src/utils/number.ts","../../packages/src/utils/virtual-scroll.ts","../../packages/src/plugins/angular-editor.ts","../../packages/src/utils/hotkeys.ts","../../packages/src/utils/view.ts","../../packages/src/utils/range-list.ts","../../packages/src/utils/global-normalize.ts","../../packages/src/utils/throttle.ts","../../packages/src/utils/clipboard/common.ts","../../packages/src/utils/clipboard/data-transfer.ts","../../packages/src/utils/clipboard/navigator-clipboard.ts","../../packages/src/utils/clipboard/clipboard.ts","../../packages/src/plugins/with-angular.ts","../../packages/src/custom-event/DOMTopLevelEventTypes.ts","../../packages/src/custom-event/FallbackCompositionState.ts","../../packages/src/custom-event/BeforeInputEventPlugin.ts","../../packages/src/custom-event/before-input-polyfill.ts","../../packages/src/types/error.ts","../../packages/src/utils/restore-dom.ts","../../packages/src/view/flavour/ref.ts","../../packages/src/view/view-interface.ts","../../packages/src/view/render/utils.ts","../../packages/src/view/flavour/base.ts","../../packages/src/view/flavour/element.ts","../../packages/src/components/element.flavour.ts","../../packages/src/view/flavour/leaf.ts","../../packages/src/components/string/string-render.ts","../../packages/src/components/leaf/leaf.flavour.ts","../../packages/src/view/render/leaves-render.ts","../../packages/src/view/flavour/text.ts","../../packages/src/components/text/default-text.flavour.ts","../../packages/src/view/render/list-render.ts","../../packages/src/components/editable/editable.component.ts","../../packages/src/components/children/children-outlet.component.ts","../../packages/src/module.ts","../../packages/src/view/base.ts","../../packages/src/public-api.ts","../../packages/src/slate-angular.ts"],"sourcesContent":["import { DOMNode, DOMSelection } from \"slate-dom\";\n\nexport const FAKE_LEFT_BLOCK_CARD_OFFSET = -1;\n\nexport const FAKE_RIGHT_BLOCK_CARD_OFFSET = -2;\n\nexport function hasBlockCardWithNode(node: DOMNode) {\n    return node && (node.parentElement.hasAttribute('card-target') || (node instanceof HTMLElement && node.hasAttribute('card-target')));\n}\n\nexport function hasBlockCard(selection: DOMSelection) {\n    return hasBlockCardWithNode(selection?.anchorNode) || hasBlockCardWithNode(selection?.focusNode);\n}\n\nexport function getCardTargetAttribute(node: DOMNode) {\n    return node.parentElement.attributes['card-target'] || (node instanceof HTMLElement && node.attributes['card-target']);\n}\n\nexport function isCardLeft(node: DOMNode) {\n    const cardTarget = getCardTargetAttribute(node);\n    return cardTarget && cardTarget.nodeValue === 'card-left';\n}\n\nexport function isCardLeftByTargetAttr(targetAttr: any) {\n    return targetAttr && targetAttr.nodeValue === 'card-left';\n}\n\nexport function isCardRightByTargetAttr(targetAttr: any) {\n    return targetAttr && targetAttr.nodeValue === 'card-right';\n}\n\nexport function isCardCenterByTargetAttr(targetAttr: any) {\n    return targetAttr && targetAttr.nodeValue === 'card-center';\n}\n","import {\n    FAKE_LEFT_BLOCK_CARD_OFFSET,\n    FAKE_RIGHT_BLOCK_CARD_OFFSET,\n    getCardTargetAttribute,\n    isCardLeftByTargetAttr\n} from '../utils/block-card';\nimport { BasePoint, BaseRange, Editor, Node, Point, Range, Element, NodeEntry, point } from 'slate';\nimport {\n    DOMEditor,\n    DOMElement,\n    DOMNode,\n    DOMRange,\n    DOMPoint,\n    DOMSelection,\n    DOMStaticRange,\n    EDITOR_TO_ELEMENT,\n    hasShadowRoot,\n    IS_CHROME,\n    isDOMElement,\n    isDOMSelection,\n    NODE_TO_ELEMENT,\n    NODE_TO_INDEX,\n    NODE_TO_PARENT,\n    normalizeDOMPoint\n} from 'slate-dom';\nimport { AngularEditor } from './angular-editor';\n\nexport interface CustomDOMEditor extends DOMEditor {\n    hasEditableTarget: (editor: CustomDOMEditor, target: EventTarget | null) => target is DOMNode;\n    hasRange: (editor: CustomDOMEditor, range: Range) => boolean;\n    hasSelectableTarget: (editor: CustomDOMEditor, target: EventTarget | null) => boolean;\n    hasTarget: (editor: CustomDOMEditor, target: EventTarget | null) => target is DOMNode;\n    insertData: (data: DataTransfer) => void;\n    insertFragmentData: (data: DataTransfer) => boolean;\n    insertTextData: (data: DataTransfer) => boolean;\n    isTargetInsideNonReadonlyVoid: (editor: CustomDOMEditor, target: EventTarget | null) => boolean;\n    setFragmentData: (data: DataTransfer, originEvent?: 'drag' | 'copy' | 'cut') => void;\n}\n\nconst customToDOMNode = (editor: Editor, node: Node): HTMLElement => {\n    const domNode = Editor.isEditor(node) ? EDITOR_TO_ELEMENT.get(editor) : NODE_TO_ELEMENT.get(node);\n\n    if (!domNode) {\n        throw new Error(`Cannot resolve a DOM node from Slate node: ${JSON.stringify(node)}`);\n    }\n\n    return domNode;\n};\nDOMEditor.toDOMNode = customToDOMNode as unknown as (editor: DOMEditor, node: Node) => HTMLElement;\n\nconst toDOMPointForBlockCard = (editor: AngularEditor, point: Point): DOMPoint | undefined => {\n    const [node] = Editor.node(editor, point.path);\n    const [parentNode] = Editor.parent(editor, point.path);\n    if (editor.isBlockCard(parentNode) || editor.isBlockCard(node)) {\n        if (point.offset < 0) {\n            if (point.offset === FAKE_LEFT_BLOCK_CARD_OFFSET) {\n                const cursorNode = CustomDOMEditor.getCardCursorNode(editor, node, { direction: 'left' });\n                return [cursorNode, 1];\n            } else {\n                const cursorNode = CustomDOMEditor.getCardCursorNode(editor, node, { direction: 'right' });\n                return [cursorNode, 1];\n            }\n        }\n        if (editor.selection && Range.isExpanded(editor.selection)) {\n            const [start, end] = Range.edges(editor.selection);\n            if (start === point) {\n                const cursorNode = CustomDOMEditor.getCardCursorNode(editor, parentNode, { direction: 'left' });\n                return [cursorNode, 1];\n            } else {\n                const cursorNode = CustomDOMEditor.getCardCursorNode(editor, parentNode, { direction: 'right' });\n                return [cursorNode, 1];\n            }\n        }\n    }\n};\n\nconst customToDOMPoint = (editor: AngularEditor, point: Point): DOMPoint => {\n    const [node] = Editor.node(editor, point.path);\n    const el = customToDOMNode(editor, node);\n    let domPoint: DOMPoint | undefined;\n\n    const domPointForBlackCard = toDOMPointForBlockCard(editor, point);\n    if (domPointForBlackCard) {\n        return domPointForBlackCard;\n    }\n\n    // If we're inside a void node, force the offset to 0, otherwise the zero\n    // width spacing character will result in an incorrect offset of 1\n    if (Editor.void(editor, { at: point })) {\n        point = { path: point.path, offset: 0 };\n    }\n\n    // For each leaf, we need to isolate its content, which means filtering\n    // to its direct text and zero-width spans. (We have to filter out any\n    // other siblings that may have been rendered alongside them.)\n    const selector = `[data-slate-string], [data-slate-zero-width]`;\n    const texts = Array.from(el.querySelectorAll(selector));\n    let start = 0;\n\n    for (const text of texts) {\n        const domNode = text.childNodes[0] as HTMLElement;\n\n        if (domNode == null || domNode.textContent == null) {\n            continue;\n        }\n\n        const { length } = domNode.textContent;\n        const attr = text.getAttribute('data-slate-length');\n        const trueLength = attr == null ? length : parseInt(attr, 10);\n        const end = start + trueLength;\n\n        if (point.offset <= end) {\n            const offset = Math.min(length, Math.max(0, point.offset - start));\n            domPoint = [domNode, offset];\n            // fixed cursor position after zero width char\n            if (offset === 0 && length === 1 && domNode.textContent === '\\uFEFF') {\n                domPoint = [domNode, offset + 1];\n            }\n            break;\n        }\n\n        start = end;\n    }\n\n    if (!domPoint) {\n        throw new Error(`Cannot resolve a DOM point from Slate point: ${JSON.stringify(point)}`);\n    }\n\n    return domPoint;\n};\nDOMEditor.toDOMPoint = customToDOMPoint as unknown as (editor: DOMEditor, point: BasePoint) => DOMPoint;\n\nconst toSlatePointForBlockCard = (editor: AngularEditor, domPoint: DOMPoint, nearestNode: DOMNode): Point | undefined => {\n    const [domNode] = domPoint;\n    const cardTargetAttr = getCardTargetAttribute(domNode);\n    if (cardTargetAttr) {\n        const domSelection = window.getSelection();\n        const blockCardEntry = CustomDOMEditor.toSlateCardEntry(editor, domNode) || CustomDOMEditor.toSlateCardEntry(editor, nearestNode);\n        const [, blockPath] = blockCardEntry;\n        if (domSelection.isCollapsed) {\n            if (isCardLeftByTargetAttr(cardTargetAttr)) {\n                return { path: blockPath, offset: -1 };\n            } else {\n                return { path: blockPath, offset: -2 };\n            }\n        }\n        if (isCardLeftByTargetAttr(cardTargetAttr)) {\n            return Editor.start(editor, blockPath);\n        } else {\n            return Editor.end(editor, blockPath);\n        }\n    }\n};\n\nconst customToSlatePoint = <T extends boolean>(\n    editor: AngularEditor,\n    domPoint: DOMPoint,\n    options: {\n        exactMatch: boolean;\n        suppressThrow: T;\n        searchDirection?: 'forward' | 'backward';\n    }\n): T extends true ? Point | null : Point => {\n    const { exactMatch, suppressThrow } = options;\n    const [nearestNode, nearestOffset] = normalizeDOMPoint(domPoint);\n    let parentNode = nearestNode.parentNode as DOMElement;\n    let textNode: DOMElement | null = null;\n    let offset = 0;\n\n    const slatePointForBlockCard = toSlatePointForBlockCard(editor, domPoint, nearestNode);\n    if (slatePointForBlockCard) {\n        return slatePointForBlockCard;\n    }\n\n    if (parentNode) {\n        const voidNode = parentNode.closest('[data-slate-void=\"true\"]');\n        let leafNode = parentNode.closest('[data-slate-leaf]');\n        let domNode: DOMElement | null = null;\n\n        // Calculate how far into the text node the `nearestNode` is, so that we\n        // can determine what the offset relative to the text node is.\n        if (leafNode && CustomDOMEditor.isLeafInEditor(editor, leafNode)) {\n            textNode = leafNode.closest('[data-slate-node=\"text\"]')!;\n            const window = DOMEditor.getWindow(editor);\n            const range = window.document.createRange();\n            range.setStart(textNode, 0);\n            range.setEnd(nearestNode, nearestOffset);\n            const contents = range.cloneContents();\n            const removals = [\n                ...Array.prototype.slice.call(contents.querySelectorAll('[data-slate-zero-width]')),\n                ...Array.prototype.slice.call(contents.querySelectorAll('[contenteditable=false]'))\n            ];\n\n            removals.forEach(el => {\n                el!.parentNode!.removeChild(el);\n            });\n\n            // COMPAT: Edge has a bug where Range.prototype.toString() will\n            // convert \\n into \\r\\n. The bug causes a loop when slate-react\n            // attempts to reposition its cursor to match the native position. Use\n            // textContent.length instead.\n            // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10291116/\n            offset = contents.textContent!.length;\n            domNode = textNode;\n        } else if (voidNode) {\n            // For void nodes, the element with the offset key will be a cousin, not an\n            // ancestor, so find it by going down from the nearest void parent.\n            const spacer = voidNode.querySelector('[data-slate-spacer=\"true\"]')!;\n            leafNode = spacer.firstElementChild;\n            parentNode = leafNode.firstElementChild;\n            textNode = spacer;\n            domNode = leafNode;\n            offset = domNode.textContent!.length;\n        }\n\n        // COMPAT: If the parent node is a Slate zero-width space, editor is\n        // because the text node should have no characters. However, during IME\n        // composition the ASCII characters will be prepended to the zero-width\n        // space, so subtract 1 from the offset to account for the zero-width\n        // space character.\n        if (domNode && offset === domNode.textContent!.length && parentNode && parentNode.hasAttribute('data-slate-zero-width')) {\n            offset--;\n        }\n    }\n\n    if (!textNode) {\n        if (suppressThrow) {\n            return null as T extends true ? Point | null : Point;\n        }\n        throw new Error(`Cannot resolve a Slate point from DOM point: ${domPoint}`);\n    }\n\n    // COMPAT: If someone is clicking from one Slate editor into another,\n    // the select event fires twice, once for the old editor's `element`\n    // first, and then afterwards for the correct `element`. (2017/03/03)\n    let slateNode = null;\n    try {\n        slateNode = CustomDOMEditor.toSlateNode(editor, textNode);\n    } catch (error) {\n        if (!suppressThrow) {\n            throw error;\n        }\n    }\n    if (!slateNode && suppressThrow) {\n        return null as T extends true ? Point | null : Point;\n    }\n    const path = CustomDOMEditor.findPath(editor, slateNode);\n    return { path, offset };\n};\nDOMEditor.toSlatePoint = customToSlatePoint as unknown as <T extends boolean>(\n    editor: DOMEditor,\n    domPoint: DOMPoint,\n    options: { exactMatch: boolean; suppressThrow: T; searchDirection?: 'forward' | 'backward' }\n) => T extends true ? BasePoint : BasePoint;\n\nconst customToSlateRange = <T extends boolean>(\n    editor: CustomDOMEditor,\n    domRange: DOMRange | DOMStaticRange | DOMSelection,\n    options?: {\n        exactMatch?: boolean;\n        suppressThrow: T;\n    }\n): T extends true ? Range | null : Range => {\n    const { exactMatch, suppressThrow } = options || {};\n    const el = isDOMSelection(domRange) ? domRange.anchorNode : domRange.startContainer;\n    let anchorNode;\n    let anchorOffset;\n    let focusNode;\n    let focusOffset;\n    let isCollapsed;\n\n    if (el) {\n        if (isDOMSelection(domRange)) {\n            anchorNode = domRange.anchorNode;\n            anchorOffset = domRange.anchorOffset;\n            focusNode = domRange.focusNode;\n            focusOffset = domRange.focusOffset;\n            // COMPAT: There's a bug in chrome that always returns `true` for\n            // `isCollapsed` for a Selection that comes from a ShadowRoot.\n            // (2020/08/08)\n            // https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n            if (IS_CHROME && hasShadowRoot(anchorNode)) {\n                isCollapsed = domRange.anchorNode === domRange.focusNode && domRange.anchorOffset === domRange.focusOffset;\n            } else {\n                isCollapsed = domRange.isCollapsed;\n            }\n        } else {\n            anchorNode = domRange.startContainer;\n            anchorOffset = domRange.startOffset;\n            focusNode = domRange.endContainer;\n            focusOffset = domRange.endOffset;\n            isCollapsed = domRange.collapsed;\n        }\n    }\n\n    if (anchorNode == null || focusNode == null || anchorOffset == null || focusOffset == null) {\n        throw new Error(`Cannot resolve a Slate range from DOM range: ${domRange}`);\n    }\n\n    const anchor = DOMEditor.toSlatePoint(editor, [anchorNode, anchorOffset], { suppressThrow, exactMatch });\n    if (!anchor) {\n        return null as T extends true ? Range | null : Range;\n    }\n\n    const focus = isCollapsed ? anchor : DOMEditor.toSlatePoint(editor, [focusNode, focusOffset], { suppressThrow, exactMatch });\n    if (!focus) {\n        return null as T extends true ? Range | null : Range;\n    }\n\n    let range: Range = { anchor: anchor as Point, focus: focus as Point };\n    // if the selection is a hanging range that ends in a void\n    // and the DOM focus is an Element\n    // (meaning that the selection ends before the element)\n    // unhang the range to avoid mistakenly including the void\n    if (\n        Range.isExpanded(range) &&\n        Range.isForward(range) &&\n        isDOMElement(focusNode) &&\n        Editor.void(editor as Editor, { at: range.focus, mode: 'highest' })\n    ) {\n        range = Editor.unhangRange(editor as Editor, range, { voids: true });\n    }\n\n    return range;\n};\nDOMEditor.toSlateRange = customToSlateRange as unknown as <T extends boolean>(\n    editor: DOMEditor,\n    domRange: Range | StaticRange | Selection,\n    options: { exactMatch: boolean; suppressThrow: T }\n) => T extends true ? BaseRange : BaseRange;\n\nexport const CustomDOMEditor = {\n    ...DOMEditor,\n    isNodeInEditor(editor: CustomDOMEditor, node: Node): boolean {\n        let child = node;\n\n        while (true) {\n            const parent = NODE_TO_PARENT.get(child);\n\n            if (parent == null) {\n                if (Editor.isEditor(child) && child === editor) {\n                    return true;\n                } else {\n                    break;\n                }\n            }\n\n            const i = NODE_TO_INDEX.get(child);\n\n            if (i == null) {\n                break;\n            }\n\n            child = parent;\n        }\n\n        return false;\n    },\n    isLeafInEditor(editor: CustomDOMEditor, leafNode: DOMElement): boolean {\n        const textNode = leafNode.closest('[data-slate-node=\"text\"]')!;\n        let node: Node | null = null;\n        try {\n            node = CustomDOMEditor.toSlateNode(editor, textNode);\n        } catch (error) {}\n        if (node && CustomDOMEditor.isNodeInEditor(editor, node)) {\n            return true;\n        } else {\n            return false;\n        }\n    },\n    /**\n     * Check if the editor is hanging right.\n     */\n    isBlockHangingRight(editor: Editor): boolean {\n        const { selection } = editor;\n        if (!selection) {\n            return false;\n        }\n        if (Range.isCollapsed(selection)) {\n            return false;\n        }\n        const [start, end] = Range.edges(selection);\n        const endBlock = Editor.above(editor, {\n            at: end,\n            match: node => Element.isElement(node) && Editor.isBlock(editor, node)\n        });\n        return Editor.isStart(editor, end, endBlock[1]);\n    },\n    isBlockCardLeftCursor(editor: Editor) {\n        return (\n            editor.selection?.anchor?.offset === FAKE_LEFT_BLOCK_CARD_OFFSET &&\n            editor.selection?.focus?.offset === FAKE_LEFT_BLOCK_CARD_OFFSET\n        );\n    },\n    isBlockCardRightCursor(editor: Editor) {\n        return (\n            editor.selection?.anchor?.offset === FAKE_RIGHT_BLOCK_CARD_OFFSET &&\n            editor.selection?.focus?.offset === FAKE_RIGHT_BLOCK_CARD_OFFSET\n        );\n    },\n    getCardCursorNode(\n        editor: AngularEditor,\n        blockCardNode: Node,\n        options: {\n            direction: 'left' | 'right' | 'center';\n        }\n    ) {\n        const blockCardElement = DOMEditor.toDOMNode(editor, blockCardNode);\n        const cardCenter = blockCardElement.parentElement;\n        return options.direction === 'left' ? cardCenter.previousElementSibling.firstChild : cardCenter.nextElementSibling.firstChild;\n    },\n    toSlateCardEntry(editor: AngularEditor, node: DOMNode): NodeEntry {\n        const element = node.parentElement.closest('.slate-block-card')?.querySelector('[card-target=\"card-center\"]').firstElementChild;\n        const slateNode = DOMEditor.toSlateNode(editor, element);\n        const path = DOMEditor.findPath(editor, slateNode);\n        return [slateNode, path];\n    }\n};\n","export const IS_IOS =\n    typeof navigator !== 'undefined' &&\n    typeof window !== 'undefined' &&\n    /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n    !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_ANDROID = typeof navigator !== 'undefined' && /Android/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])(?:\\.)/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY =\n    typeof navigator !== 'undefined' &&\n    /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent) &&\n    // Exclude Chrome version greater than 3 bits，Chrome releases v100 on 2022.03.29\n    !/Chrome?\\/(?:\\d{3,})/i.test(navigator.userAgent);\n\n// Firefox did not support `beforeInput` until `v87`.\nexport const IS_FIREFOX_LEGACY =\n    typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox\\/(?:[0-7][0-9]|[0-8][0-6])(?:\\.)).*/i.test(navigator.userAgent);\n\n// qq browser\nexport const IS_QQBROWSER = typeof navigator !== 'undefined' && /.*QQBrowser/.test(navigator.userAgent);\n\n// UC mobile browser\nexport const IS_UC_MOBILE = typeof navigator !== 'undefined' && /.*UCBrowser/.test(navigator.userAgent);\n\n// Wechat browser\nexport const IS_WECHATBROWSER = typeof navigator !== 'undefined' && /.*Wechat/.test(navigator.userAgent);\n\n// COMPAT: Firefox/Edge Legacy don't support the `beforeinput` event\n// Chrome Legacy doesn't support `beforeinput` correctly\nexport const HAS_BEFORE_INPUT_SUPPORT =\n    !IS_CHROME_LEGACY &&\n    !IS_EDGE_LEGACY &&\n    // globalThis is undefined in older browsers\n    typeof globalThis !== 'undefined' &&\n    globalThis.InputEvent &&\n    // @ts-ignore The `getTargetRanges` property isn't recognized.\n    typeof globalThis.InputEvent.prototype.getTargetRanges === 'function';\n\nexport const VIRTUAL_SCROLL_DEFAULT_BLOCK_HEIGHT = 32;\n\nexport const SLATE_DEBUG_KEY = '__SLATE_DEBUG__';\nexport const SLATE_DEBUG_KEY_SCROLL_TOP = '__SLATE_DEBUG_SCROLL_TOP__';\nexport const SLATE_DEBUG_KEY_UPDATE = '__SLATE_DEBUG_UPDATE__';\n","import { Node, Editor, Selection } from 'slate';\nimport { BaseElementComponent } from '../view/base';\nimport { BaseFlavour } from '../view/flavour/base';\n\n/**\n * Symbols.\n */\n\nexport const PLACEHOLDER_SYMBOL = Symbol('placeholder') as unknown as string;\n\n/**\n * Weak map for associating the html element with the component.\n */\nexport const ELEMENT_TO_COMPONENT: WeakMap<Node, BaseElementComponent | BaseFlavour> = new WeakMap();\n\nexport const EDITOR_TO_VIRTUAL_SCROLL_SELECTION = new WeakMap<Editor, Selection | null>();\n\nexport const EDITOR_TO_AFTER_VIEW_INIT_QUEUE: WeakMap<Editor, (() => void)[]> = new WeakMap();\n","type OverlayState = {\n    left: number;\n    top: number;\n    collapsed: boolean;\n    width: number;\n    height: number;\n};\n\nexport class VirtualScrollDebugOverlay {\n    private static instance?: VirtualScrollDebugOverlay;\n    private static readonly storageKey = 'slate_virtual_scroll_debug_overlay_state';\n    private static readonly minWidth = 320;\n    private static readonly minHeight = 240;\n    private static readonly defaultWidth = 410;\n    private static readonly defaultHeight = 480;\n\n    static getInstance(doc: Document) {\n        if (!this.instance) {\n            this.instance = new VirtualScrollDebugOverlay(doc);\n        }\n        this.instance.init();\n        return this.instance;\n    }\n\n    static log(doc: Document, type: 'log' | 'warn', ...args: any[]) {\n        this.getInstance(doc).log(type, ...args);\n    }\n\n    // will trigger selectionchange and clear editor's selection\n    static syncScrollTop(doc: Document, value: number) {\n        const instance = this.getInstance(doc);\n        instance.setScrollTopValue(value);\n    }\n\n    private container?: HTMLElement;\n    private contentWrapper?: HTMLElement;\n    private bubble?: HTMLElement;\n    private logList?: HTMLElement;\n    private selectorInput?: HTMLInputElement;\n    private distanceInput?: HTMLInputElement;\n    private collapseToggle?: HTMLButtonElement;\n    private resizeHandle?: HTMLElement;\n    private state: OverlayState = {\n        left: 16,\n        top: 16,\n        collapsed: false,\n        width: VirtualScrollDebugOverlay.defaultWidth,\n        height: VirtualScrollDebugOverlay.defaultHeight\n    };\n    private readonly originalConsoleLog = console.log.bind(console);\n    private readonly originalConsoleWarn = console.warn.bind(console);\n    private dragOffsetX = 0;\n    private dragOffsetY = 0;\n    private isDragging = false;\n    private isResizing = false;\n    private resizeStartX = 0;\n    private resizeStartY = 0;\n    private resizeStartWidth = 0;\n    private resizeStartHeight = 0;\n    private dragMoved = false;\n    private wasDragged = false;\n\n    private readonly onDragging = (event: MouseEvent) => {\n        if (!this.isDragging || !this.container) {\n            return;\n        }\n        this.dragMoved = true;\n        const nextLeft = event.clientX - this.dragOffsetX;\n        const nextTop = event.clientY - this.dragOffsetY;\n        this.container.style.left = `${nextLeft}px`;\n        this.container.style.top = `${nextTop}px`;\n        this.container.style.right = 'auto';\n        this.container.style.bottom = 'auto';\n    };\n\n    private readonly onDragEnd = () => {\n        if (!this.isDragging) {\n            return;\n        }\n        this.isDragging = false;\n        this.wasDragged = this.dragMoved;\n        this.dragMoved = false;\n        this.doc.removeEventListener('mousemove', this.onDragging);\n        this.doc.removeEventListener('mouseup', this.onDragEnd);\n        if (this.container) {\n            const rect = this.container.getBoundingClientRect();\n            this.state.left = rect.left;\n            this.state.top = rect.top;\n            this.persistState();\n            this.container.style.transition = '';\n        }\n    };\n\n    private readonly onResizing = (event: MouseEvent) => {\n        if (!this.isResizing || !this.container) {\n            return;\n        }\n        const deltaX = event.clientX - this.resizeStartX;\n        const deltaY = event.clientY - this.resizeStartY;\n        const nextWidth = Math.max(VirtualScrollDebugOverlay.minWidth, this.resizeStartWidth + deltaX);\n        const nextHeight = Math.max(VirtualScrollDebugOverlay.minHeight, this.resizeStartHeight + deltaY);\n        this.state.width = nextWidth;\n        this.state.height = nextHeight;\n        this.applySize();\n    };\n\n    private readonly onResizeEnd = () => {\n        if (!this.isResizing) {\n            return;\n        }\n        this.isResizing = false;\n        this.doc.removeEventListener('mousemove', this.onResizing);\n        this.doc.removeEventListener('mouseup', this.onResizeEnd);\n        this.persistState();\n    };\n\n    private constructor(private doc: Document) {}\n\n    init() {\n        if (!this.container) {\n            this.createContainer();\n        }\n    }\n\n    log(type: 'log' | 'warn', ...args: any[]) {\n        this.init();\n        if (type === 'warn') {\n            this.originalConsoleWarn(...args);\n        } else {\n            this.originalConsoleLog(...args);\n        }\n        this.appendLog(type, ...args);\n    }\n\n    dispose() {\n        this.container?.remove();\n        this.container = undefined;\n        this.contentWrapper = undefined;\n        this.bubble = undefined;\n        this.logList = undefined;\n        this.selectorInput = undefined;\n        this.distanceInput = undefined;\n        this.collapseToggle = undefined;\n        this.resizeHandle = undefined;\n        this.doc.removeEventListener('mousemove', this.onDragging);\n        this.doc.removeEventListener('mouseup', this.onDragEnd);\n        this.doc.removeEventListener('mousemove', this.onResizing);\n        this.doc.removeEventListener('mouseup', this.onResizeEnd);\n        this.isDragging = false;\n        this.isResizing = false;\n    }\n\n    private createContainer() {\n        this.loadState();\n        const doc = this.doc;\n        const container = doc.createElement('div');\n        container.style.position = 'fixed';\n        container.style.right = 'auto';\n        container.style.bottom = 'auto';\n        container.style.boxSizing = 'border-box';\n        container.style.background = 'rgba(17, 24, 39, 0.95)';\n        container.style.color = '#e5e7eb';\n        container.style.fontSize = '12px';\n        container.style.border = '1px solid #1f2937';\n        container.style.borderRadius = '10px';\n        container.style.fontFamily = 'Menlo, Consolas, monospace';\n        container.style.boxShadow = '0 10px 30px rgba(0, 0, 0, 0.35)';\n        container.style.zIndex = '9999';\n        container.style.display = 'flex';\n        container.style.flexDirection = 'column';\n        container.style.gap = '10px';\n        container.style.minWidth = `${VirtualScrollDebugOverlay.minWidth}px`;\n        container.style.minHeight = `${VirtualScrollDebugOverlay.minHeight}px`;\n        container.style.maxHeight = '80vh';\n        container.style.cursor = 'default';\n        container.addEventListener('mousedown', event => {\n            if (this.state.collapsed) {\n                this.startDrag(event);\n            }\n        });\n\n        const header = doc.createElement('div');\n        header.style.display = 'flex';\n        header.style.alignItems = 'center';\n        header.style.justifyContent = 'space-between';\n        header.style.cursor = 'move';\n        header.addEventListener('mousedown', event => {\n            this.startDrag(event);\n        });\n\n        const title = doc.createElement('div');\n        title.textContent = 'Virtual Scroll Debug';\n        title.style.fontWeight = '600';\n        title.style.letterSpacing = '0.3px';\n\n        const actions = doc.createElement('div');\n        actions.style.display = 'flex';\n        actions.style.gap = '6px';\n\n        const collapseButton = doc.createElement('button');\n        collapseButton.type = 'button';\n        collapseButton.textContent = '折叠';\n        collapseButton.style.background = '#1f2937';\n        collapseButton.style.color = '#e5e7eb';\n        collapseButton.style.border = '1px solid #374151';\n        collapseButton.style.borderRadius = '6px';\n        collapseButton.style.padding = '4px 8px';\n        collapseButton.style.cursor = 'pointer';\n        collapseButton.addEventListener('click', () => {\n            this.setCollapsed(!this.state.collapsed);\n        });\n\n        const clearButton = doc.createElement('button');\n        clearButton.type = 'button';\n        clearButton.textContent = '清除日志';\n        clearButton.style.background = '#374151';\n        clearButton.style.color = '#e5e7eb';\n        clearButton.style.border = '1px solid #4b5563';\n        clearButton.style.borderRadius = '6px';\n        clearButton.style.padding = '4px 10px';\n        clearButton.style.cursor = 'pointer';\n        clearButton.addEventListener('click', () => {\n            if (this.logList) {\n                this.logList.innerHTML = '';\n            }\n        });\n\n        actions.appendChild(collapseButton);\n        actions.appendChild(clearButton);\n        header.appendChild(title);\n        header.appendChild(actions);\n\n        const scrollForm = doc.createElement('div');\n        scrollForm.style.display = 'grid';\n        scrollForm.style.gridTemplateColumns = '1fr 110px 50px';\n        scrollForm.style.gap = '6px';\n        scrollForm.style.alignItems = 'center';\n\n        const selectorInput = doc.createElement('input');\n        selectorInput.placeholder = '滚动容器 selector';\n        selectorInput.style.padding = '6px 8px';\n        selectorInput.style.borderRadius = '6px';\n        selectorInput.style.border = '1px solid #4b5563';\n        selectorInput.style.background = '#111827';\n        selectorInput.style.color = '#e5e7eb';\n        selectorInput.autocomplete = 'off';\n\n        const distanceInput = doc.createElement('input');\n        distanceInput.placeholder = '滚动距离(px)';\n        distanceInput.type = 'number';\n        distanceInput.style.padding = '6px 8px';\n        distanceInput.style.borderRadius = '6px';\n        distanceInput.style.border = '1px solid #4b5563';\n        distanceInput.style.background = '#111827';\n        distanceInput.style.color = '#e5e7eb';\n\n        const scrollButton = doc.createElement('button');\n        scrollButton.type = 'button';\n        scrollButton.textContent = '滚动';\n        scrollButton.style.background = '#10b981';\n        scrollButton.style.color = '#0b1c15';\n        scrollButton.style.border = 'none';\n        scrollButton.style.borderRadius = '6px';\n        scrollButton.style.padding = '6px 10px';\n        scrollButton.style.cursor = 'pointer';\n        scrollButton.addEventListener('click', () => {\n            const selector = selectorInput.value.trim();\n            const distanceValue = Number(distanceInput.value ?? 0);\n            const distance = Number.isFinite(distanceValue) ? distanceValue : 0;\n            if (!selector) {\n                this.log('warn', '请先填写滚动容器 selector');\n                return;\n            }\n            const target = doc.querySelector(selector) as HTMLElement | null;\n            if (!target) {\n                this.log('warn', `未找到滚动容器: ${selector}`);\n                return;\n            }\n            if (typeof target.scrollTo === 'function') {\n                target.scrollTo({ top: distance, behavior: 'auto' });\n            } else if (Object.prototype.hasOwnProperty.call(target, 'scrollTop')) {\n                (target as HTMLElement & { scrollTop: number }).scrollTop = distance;\n            } else {\n                this.log('warn', '目标元素不支持滚动:', selector);\n                return;\n            }\n            this.log('log', `已将 ${selector} 滚动到`, distance);\n        });\n\n        scrollForm.appendChild(selectorInput);\n        scrollForm.appendChild(distanceInput);\n        scrollForm.appendChild(scrollButton);\n\n        const logList = doc.createElement('div');\n        logList.style.height = '260px';\n        logList.style.overflowY = 'auto';\n        logList.style.background = '#0b1220';\n        logList.style.border = '1px solid #1f2937';\n        logList.style.borderRadius = '8px';\n        logList.style.padding = '8px';\n        logList.style.display = 'flex';\n        logList.style.flexDirection = 'column';\n        logList.style.gap = '6px';\n        logList.style.flex = '1';\n        logList.style.minHeight = '160px';\n\n        const bubble = doc.createElement('div');\n        bubble.textContent = 'VS';\n        bubble.style.display = 'none';\n        bubble.style.alignItems = 'center';\n        bubble.style.justifyContent = 'center';\n        bubble.style.fontWeight = '700';\n        bubble.style.fontSize = '14px';\n        bubble.style.letterSpacing = '0.5px';\n        bubble.style.width = '100%';\n        bubble.style.height = '100%';\n        bubble.style.userSelect = 'none';\n        bubble.addEventListener('click', () => {\n            if (this.wasDragged) {\n                this.wasDragged = false;\n                return;\n            }\n            this.setCollapsed(false);\n        });\n\n        const contentWrapper = doc.createElement('div');\n        contentWrapper.style.display = 'flex';\n        contentWrapper.style.flexDirection = 'column';\n        contentWrapper.style.gap = '10px';\n        contentWrapper.style.width = '100%';\n        contentWrapper.style.height = '100%';\n        contentWrapper.appendChild(header);\n        contentWrapper.appendChild(scrollForm);\n        contentWrapper.appendChild(logList);\n\n        container.appendChild(contentWrapper);\n        container.appendChild(bubble);\n        const resizeHandle = doc.createElement('div');\n        resizeHandle.style.position = 'absolute';\n        resizeHandle.style.right = '6px';\n        resizeHandle.style.bottom = '6px';\n        resizeHandle.style.width = '14px';\n        resizeHandle.style.height = '14px';\n        resizeHandle.style.cursor = 'nwse-resize';\n        resizeHandle.style.borderRight = '2px solid #4b5563';\n        resizeHandle.style.borderBottom = '2px solid #4b5563';\n        resizeHandle.addEventListener('mousedown', event => {\n            this.startResize(event);\n        });\n        container.appendChild(resizeHandle);\n        doc.body.appendChild(container);\n\n        this.container = container;\n        this.contentWrapper = contentWrapper;\n        this.bubble = bubble;\n        this.logList = logList;\n        this.selectorInput = selectorInput;\n        this.distanceInput = distanceInput;\n        this.collapseToggle = collapseButton;\n        this.resizeHandle = resizeHandle;\n        this.applyState();\n    }\n\n    private startDrag(event: MouseEvent) {\n        if (event.button !== 0) {\n            return;\n        }\n        if (!this.container) {\n            return;\n        }\n        const rect = this.container.getBoundingClientRect();\n        this.isDragging = true;\n        this.wasDragged = false;\n        this.dragMoved = false;\n        this.dragOffsetX = event.clientX - rect.left;\n        this.dragOffsetY = event.clientY - rect.top;\n        this.container.style.transition = 'none';\n        this.doc.addEventListener('mousemove', this.onDragging);\n        this.doc.addEventListener('mouseup', this.onDragEnd);\n        if (!this.state.collapsed) {\n            event.preventDefault();\n        }\n    }\n\n    private startResize(event: MouseEvent) {\n        if (event.button !== 0 || this.state.collapsed) {\n            return;\n        }\n        if (!this.container) {\n            return;\n        }\n        const rect = this.container.getBoundingClientRect();\n        this.isResizing = true;\n        this.resizeStartX = event.clientX;\n        this.resizeStartY = event.clientY;\n        this.resizeStartWidth = rect.width;\n        this.resizeStartHeight = rect.height;\n        this.doc.addEventListener('mousemove', this.onResizing);\n        this.doc.addEventListener('mouseup', this.onResizeEnd);\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    private applyPosition() {\n        if (!this.container) {\n            return;\n        }\n        this.container.style.left = `${this.state.left}px`;\n        this.container.style.top = `${this.state.top}px`;\n    }\n\n    private applySize() {\n        if (!this.container) {\n            return;\n        }\n        const width = Math.max(VirtualScrollDebugOverlay.minWidth, this.state.width || VirtualScrollDebugOverlay.defaultWidth);\n        const height = Math.max(VirtualScrollDebugOverlay.minHeight, this.state.height || VirtualScrollDebugOverlay.defaultHeight);\n        this.state.width = width;\n        this.state.height = height;\n        this.container.style.width = `${width}px`;\n        this.container.style.height = `${height}px`;\n    }\n\n    private applyCollapsedState() {\n        if (!this.container || !this.contentWrapper || !this.bubble || !this.collapseToggle) {\n            return;\n        }\n        if (this.state.collapsed) {\n            this.container.style.width = '36px';\n            this.container.style.height = '36px';\n            this.container.style.minWidth = '';\n            this.container.style.minHeight = '';\n            this.container.style.padding = '0';\n            this.container.style.borderRadius = '50%';\n            this.container.style.display = 'flex';\n            this.container.style.flexDirection = 'row';\n            this.container.style.alignItems = 'center';\n            this.container.style.justifyContent = 'center';\n            this.container.style.cursor = 'move';\n            this.contentWrapper.style.display = 'none';\n            this.bubble.style.display = 'flex';\n            this.collapseToggle.textContent = '展开';\n            this.resizeHandle.style.display = 'none';\n        } else {\n            this.applySize();\n            this.container.style.padding = '12px';\n            this.container.style.borderRadius = '10px';\n            this.container.style.display = 'flex';\n            this.container.style.flexDirection = 'column';\n            this.container.style.gap = '10px';\n            this.container.style.cursor = 'default';\n            this.contentWrapper.style.display = 'flex';\n            this.bubble.style.display = 'none';\n            this.collapseToggle.textContent = '折叠';\n            this.resizeHandle.style.display = 'block';\n        }\n    }\n\n    private setCollapsed(collapsed: boolean) {\n        this.state.collapsed = collapsed;\n        this.applyCollapsedState();\n        this.persistState();\n    }\n\n    private applyState() {\n        this.applyPosition();\n        this.applyCollapsedState();\n    }\n\n    private loadState() {\n        try {\n            const raw = this.doc.defaultView?.localStorage?.getItem(VirtualScrollDebugOverlay.storageKey);\n            if (raw) {\n                const parsed = JSON.parse(raw) as Partial<OverlayState>;\n                if (typeof parsed.left === 'number') {\n                    this.state.left = parsed.left;\n                }\n                if (typeof parsed.top === 'number') {\n                    this.state.top = parsed.top;\n                }\n                if (typeof parsed.collapsed === 'boolean') {\n                    this.state.collapsed = parsed.collapsed;\n                }\n                if (typeof parsed.width === 'number') {\n                    this.state.width = parsed.width;\n                }\n                if (typeof parsed.height === 'number') {\n                    this.state.height = parsed.height;\n                }\n            }\n        } catch {\n            // ignore storage errors\n        }\n    }\n\n    private persistState() {\n        try {\n            this.doc.defaultView?.localStorage?.setItem(VirtualScrollDebugOverlay.storageKey, JSON.stringify(this.state));\n        } catch {\n            // ignore storage errors\n        }\n    }\n\n    private appendLog(type: 'log' | 'warn', ...args: any[]) {\n        if (!this.logList) {\n            return;\n        }\n        const item = this.doc.createElement('div');\n        item.style.display = 'flex';\n        item.style.gap = '6px';\n        item.style.alignItems = 'flex-start';\n        item.style.wordBreak = 'break-all';\n        item.style.color = type === 'warn' ? '#fbbf24' : '#9ca3af';\n\n        const time = this.doc.createElement('span');\n        time.textContent = new Date().toLocaleTimeString();\n        time.style.color = '#6b7280';\n        time.style.flexShrink = '0';\n        time.style.width = '72px';\n\n        const text = this.doc.createElement('span');\n        text.textContent = `[${type}] ${args.map(arg => this.formatValue(arg)).join(' ')}`;\n\n        item.appendChild(time);\n        item.appendChild(text);\n        this.logList.appendChild(item);\n    }\n\n    private formatValue(value: any) {\n        if (typeof value === 'string') {\n            return value;\n        }\n        try {\n            return JSON.stringify(value);\n        } catch (error) {\n            return String(value);\n        }\n    }\n\n    private setScrollTopValue(value: number) {\n        if (this.distanceInput) {\n            this.distanceInput.value = String(value ?? 0);\n        }\n    }\n}\n","import { DOMNode, DOMText, isDOMElement, isDOMNode } from 'slate-dom';\n\nexport const SlateFragmentAttributeKey = 'data-slate-angular-fragment';\n\n/**\n * Get x-slate-fragment attribute from data-slate-angular-fragment\n */\nconst catchSlateFragment = /data-slate-angular-fragment=\"(.+?)\"/m;\nexport const getSlateFragmentAttribute = (htmlData: string): string | void => {\n    const [, fragment] = htmlData.match(catchSlateFragment) || [];\n    return fragment;\n};\n\n/**\n * Check if a DOM node is an element node.\n */\nexport const isDOMText = (value: any): value is DOMText => {\n    return isDOMNode(value) && value.nodeType === 3;\n};\n\n/**\n * Get a plaintext representation of the content of a node, accounting for block\n * elements which get a newline appended.\n *\n * The domNode must be attached to the DOM.\n */\nexport const getPlainText = (domNode: DOMNode) => {\n    let text = '';\n\n    if (isDOMText(domNode) && domNode.nodeValue) {\n        return domNode.nodeValue;\n    }\n\n    if (isDOMElement(domNode)) {\n        for (const childNode of Array.from(domNode.childNodes)) {\n            text += getPlainText(childNode);\n        }\n\n        const display = getComputedStyle(domNode).getPropertyValue('display');\n\n        if (display === 'block' || display === 'list' || domNode.tagName === 'BR') {\n            text += '\\n';\n        }\n    }\n\n    return text;\n};\n\n/**\n * Get the dom selection from Shadow Root if possible, otherwise from the document\n */\nexport const getSelection = (root: Document | ShadowRoot): Selection | null => {\n    if ((root as { getSelection: () => Selection }).getSelection != null) {\n        return (root as { getSelection: () => Selection }).getSelection();\n    }\n    return document.getSelection();\n};\n\nexport const getContentHeight = (element: Element) => {\n    if (!element) return 0;\n    const style = window.getComputedStyle(element);\n    const boxSizing = style.boxSizing;\n    const height = parseFloat(style.height) || 0;\n    const paddingTop = parseFloat(style.paddingTop) || 0;\n    const paddingBottom = parseFloat(style.paddingBottom) || 0;\n    const totalPadding = paddingTop + paddingBottom;\n\n    const borderTop = parseFloat(style.borderTopWidth) || 0;\n    const borderBottom = parseFloat(style.borderBottomWidth) || 0;\n    const totalBorder = borderTop + borderBottom;\n\n    let contentHeight;\n    if (boxSizing === 'border-box') {\n        contentHeight = height - totalPadding - totalBorder;\n    } else {\n        contentHeight = height;\n    }\n\n    return Math.max(contentHeight, 0);\n};\n\nexport const getZeroTextNode = (): DOMText => {\n    return document.createTextNode('\\uFEFF');\n};","import { getZeroTextNode } from '../../utils/dom';\n\nexport const SLATE_BLOCK_CARD_CLASS_NAME = 'slate-block-card';\n\nexport class SlateBlockCard {\n    centerRootNodes: HTMLElement[];\n\n    nativeElement: HTMLElement;\n\n    centerContainer: HTMLElement;\n\n    onInit() {\n        const nativeElement = document.createElement('div');\n        nativeElement.classList.add(SLATE_BLOCK_CARD_CLASS_NAME);\n        this.nativeElement = nativeElement;\n        this.createContent();\n    }\n\n    createContent() {\n        const leftCaret = document.createElement('span');\n        leftCaret.setAttribute(`card-target`, 'card-left');\n        leftCaret.classList.add('card-left');\n        leftCaret.appendChild(getZeroTextNode());\n        const rightCaret = document.createElement('span');\n        rightCaret.setAttribute(`card-target`, 'card-right');\n        rightCaret.classList.add('card-right');\n        rightCaret.appendChild(getZeroTextNode());\n        const center = document.createElement('div');\n        center.setAttribute(`card-target`, 'card-center');\n        this.nativeElement.appendChild(leftCaret);\n        this.nativeElement.appendChild(center);\n        this.nativeElement.appendChild(rightCaret);\n        this.centerContainer = center;\n    }\n\n    append() {\n        this.centerRootNodes.forEach(rootNode => !this.centerContainer.contains(rootNode) && this.centerContainer.appendChild(rootNode));\n    }\n\n    initializeCenter(rootNodes: HTMLElement[]) {\n        this.centerRootNodes = rootNodes;\n        this.append();\n    }\n\n    onDestroy() {\n        this.nativeElement.remove();\n    }\n}\n\nexport const getBlockCardByNativeElement = (nativeElement: HTMLElement) => {\n    const blockCardElement = nativeElement?.parentElement?.parentElement;\n    if (blockCardElement && blockCardElement.classList.contains(SLATE_BLOCK_CARD_CLASS_NAME)) {\n        return blockCardElement;\n    }\n    return null;\n};\n","export const roundTo = (value: number, precision = 1): number => {\n    const factor = 10 ** precision;\n    const n = Math.round(value * factor) / factor;\n    return Object.is(n, -0) ? 0 : n;\n};\n","import { Element } from 'slate';\nimport { AngularEditor } from '../plugins/angular-editor';\nimport { SLATE_DEBUG_KEY, SLATE_DEBUG_KEY_SCROLL_TOP, SLATE_DEBUG_KEY_UPDATE } from './environment';\nimport { ELEMENT_TO_COMPONENT } from './weak-maps';\nimport { BaseElementComponent } from '../view/base';\nimport { BaseElementFlavour } from '../view/flavour/element';\nimport { VirtualScrollDebugOverlay } from '../components/editable/debug';\nimport { getBlockCardByNativeElement } from '../components/block-card/block-card';\nimport { roundTo } from './number';\nimport { SlateVirtualScrollConfig } from '../types/editable';\n\nexport const VIRTUAL_TOP_HEIGHT_CLASS_NAME = 'virtual-top-height';\n\nexport const VIRTUAL_BOTTOM_HEIGHT_CLASS_NAME = 'virtual-bottom-height';\n\nexport const VIRTUAL_CENTER_OUTLET_CLASS_NAME = 'virtual-center-outlet';\n\nexport const isDebug = localStorage.getItem(SLATE_DEBUG_KEY) === 'true';\nexport const isDebugScrollTop = localStorage.getItem(SLATE_DEBUG_KEY_SCROLL_TOP) === 'true';\nexport const isDebugUpdate = localStorage.getItem(SLATE_DEBUG_KEY_UPDATE) === 'true';\n\nexport const ELEMENT_KEY_TO_HEIGHTS = new WeakMap<AngularEditor, Map<string, number>>();\n\nexport const EDITOR_TO_BUSINESS_TOP = new WeakMap<AngularEditor, number>();\n\nexport const EDITOR_TO_VIRTUAL_SCROLL_CONFIG = new WeakMap<AngularEditor, SlateVirtualScrollConfig>();\n\nexport const EDITOR_TO_VIEWPORT_HEIGHT = new WeakMap<AngularEditor, number>();\n\nexport const EDITOR_TO_ROOT_NODE_WIDTH = new WeakMap<AngularEditor, number>();\n\nexport const EDITOR_TO_IS_FROM_SCROLL_TO = new WeakMap<AngularEditor, boolean>();\n\nexport const isValidNumber = (value: any) => {\n    return typeof value === 'number' && !Number.isNaN(value);\n};\n\nexport const debugLog = (type: 'log' | 'warn', ...args: any[]) => {\n    const doc = document;\n    VirtualScrollDebugOverlay.log(doc, type, ...args);\n};\n\nexport const cacheHeightByElement = (editor: AngularEditor, element: Element, height: number) => {\n    if (!AngularEditor.isEnabledVirtualScroll(editor)) {\n        return;\n    }\n    if (!isValidNumber(height)) {\n        console.error('cacheHeightByElement: height must be number', height);\n        return;\n    }\n    const key = AngularEditor.findKey(editor, element);\n    const heights = ELEMENT_KEY_TO_HEIGHTS.get(editor);\n    heights.set(key.id, height);\n};\n\nexport const setMinHeightByElement = (editor: AngularEditor, element: Element, rootElementMarginBottom) => {\n    if (!AngularEditor.isEnabledVirtualScroll(editor)) {\n        return;\n    }\n    const realHeight = getCachedHeightByElement(editor, element);\n    if (realHeight) {\n        const nativeElement = AngularEditor.toDOMNode(editor, element);\n        const blockCard = getBlockCardByNativeElement(nativeElement);\n        if (blockCard) {\n            const minHeight = realHeight - rootElementMarginBottom;\n            blockCard.style.minHeight = minHeight + 'px';\n        }\n    }\n};\n\nexport const clearMinHeightByElement = (editor: AngularEditor, element: Element) => {\n    if (!AngularEditor.isEnabledVirtualScroll(editor)) {\n        return;\n    }\n    const nativeElement = AngularEditor.toDOMNode(editor, element);\n    const blockCard = getBlockCardByNativeElement(nativeElement);\n    if (blockCard && blockCard.style.minHeight) {\n        blockCard.style.minHeight = '';\n        return true;\n    } else {\n        return false;\n    }\n};\n\nexport const calcHeightByElement = (editor: AngularEditor, element: Element) => {\n    const view = ELEMENT_TO_COMPONENT.get(element);\n    if (!view) {\n        return;\n    }\n    const height = (view as BaseElementComponent | BaseElementFlavour).calcHeight();\n    cacheHeightByElement(editor, element, height);\n    return height;\n};\n\nexport const measureHeightByIndics = (\n    editor: AngularEditor,\n    indics: number[],\n    source: 'need-remove-from-top' | 'need-add-from-top' | 'data-changed'\n) => {\n    let hasChanged = false;\n    indics.forEach((index, i) => {\n        const element = editor.children[index] as Element;\n        const preHeight = getCachedHeightByElement(editor, element);\n        const currentHeight = calcHeightByElement(editor, element);\n        if (isValidNumber(currentHeight) && currentHeight !== preHeight) {\n            hasChanged = true;\n        }\n        if (isDebug && isValidNumber(currentHeight)) {\n            debugLog('log', `measureHeightByIndics（${source}）, index: `, index, 'preHeight: ', preHeight, 'height: ', currentHeight);\n        }\n    });\n    return hasChanged;\n};\n\nexport const getBusinessTop = (editor: AngularEditor) => {\n    return EDITOR_TO_BUSINESS_TOP.get(editor) ?? 0;\n};\n\nexport const getViewportHeight = (editor: AngularEditor) => {\n    return EDITOR_TO_VIEWPORT_HEIGHT.get(editor) ?? window.innerHeight;\n};\n\nexport const getScrollContainer = (editor: AngularEditor) => {\n    const config = EDITOR_TO_VIRTUAL_SCROLL_CONFIG.get(editor);\n    return config?.scrollContainer || document.body;\n};\n\nexport const getCachedHeightByElement = (editor: AngularEditor, element: Element) => {\n    const heights = ELEMENT_KEY_TO_HEIGHTS.get(editor);\n    const key = AngularEditor.findKey(editor, element);\n    const height = heights?.get(key.id);\n    if (typeof height === 'number') {\n        return height;\n    }\n    if (heights?.has(key.id)) {\n        console.error('getBlockHeight: invalid height value', key.id, height);\n    }\n    return null;\n};\n\nexport const buildHeightsAndAccumulatedHeights = (editor: AngularEditor, visibleStates: boolean[]) => {\n    const children = (editor.children || []) as Element[];\n    const heights = new Array(children.length);\n    const accumulatedHeights = new Array(children.length + 1);\n    accumulatedHeights[0] = 0;\n    for (let i = 0; i < children.length; i++) {\n        const isVisible = visibleStates[i];\n        const isFloating = editor.isFloating(children[i]);\n        let height = isVisible && !isFloating ? getCachedHeightByElement(editor, children[i]) : 0;\n        if (height === null) {\n            try {\n                height = editor.getRoughHeight(children[i]);\n            } catch (error) {\n                console.error('buildHeightsAndAccumulatedHeights: getRoughHeight error', error);\n            }\n        }\n        heights[i] = height;\n        accumulatedHeights[i + 1] = accumulatedHeights[i] + height;\n    }\n    return { heights, accumulatedHeights };\n};\n\nexport const calculateAccumulatedTopHeight = (editor: AngularEditor, startIndex: number, visibleStates: boolean[]) => {\n    const { accumulatedHeights } = buildHeightsAndAccumulatedHeights(editor, visibleStates);\n    const virtualTopHeight = roundTo(accumulatedHeights[startIndex] ?? 0, 1);\n    return virtualTopHeight;\n};\n\nexport const calcBusinessTop = (editor: AngularEditor) => {\n    const editable = AngularEditor.toDOMNode(editor, editor);\n    const virtualTopElement = editable.querySelector(`.${VIRTUAL_TOP_HEIGHT_CLASS_NAME}`) as HTMLElement;\n    const virtualTopBoundingTop = virtualTopElement?.getBoundingClientRect()?.top ?? 0;\n    const virtualScrollConfig = EDITOR_TO_VIRTUAL_SCROLL_CONFIG.get(editor);\n    const scrollContainer = virtualScrollConfig?.scrollContainer;\n    const viewportBoundingTop = scrollContainer?.getBoundingClientRect()?.top ?? 0;\n    const businessTop = Math.ceil(virtualTopBoundingTop) + Math.ceil(virtualScrollConfig.scrollTop) - Math.floor(viewportBoundingTop);\n    EDITOR_TO_BUSINESS_TOP.set(editor, businessTop);\n    if (isDebug) {\n        debugLog('log', 'calcBusinessTop: ', businessTop);\n        virtualTopElement.setAttribute('data-business-top', businessTop.toString());\n    }\n    console.log(\n        'virtualTopBoundingTop: ',\n        virtualTopBoundingTop,\n        'virtualScrollConfig.scrollTop: ',\n        virtualScrollConfig.scrollTop,\n        'viewportBoundingTop: ',\n        viewportBoundingTop\n    );\n    return businessTop;\n};\n\nexport const scrollToElement = (editor: AngularEditor, element: Element, scrollTo: (scrollTop: number) => void) => {\n    const children = editor.children;\n    if (!children.length) {\n        return;\n    }\n    const anchorIndex = children.findIndex(item => item === element);\n    if (anchorIndex < 0) {\n        return;\n    }\n    const visibleStates = editor.getAllVisibleStates();\n    const { accumulatedHeights } = buildHeightsAndAccumulatedHeights(editor, visibleStates);\n    let businessTop = getBusinessTop(editor);\n    if (businessTop === 0) {\n        businessTop = calcBusinessTop(editor);\n    }\n    scrollTo((accumulatedHeights[anchorIndex] ?? 0) + businessTop);\n    EDITOR_TO_IS_FROM_SCROLL_TO.set(editor, true);\n    setTimeout(() => {\n        console.log('scrollToElement: end scroll');\n        EDITOR_TO_IS_FROM_SCROLL_TO.set(editor, false);\n    }, 0);\n};\n","import { Editor, Node, Path, Transforms, Element } from 'slate';\nimport { Injector } from '@angular/core';\nimport { SlateError } from '../types/error';\nimport { FAKE_LEFT_BLOCK_CARD_OFFSET, FAKE_RIGHT_BLOCK_CARD_OFFSET } from '../utils/block-card';\nimport { CustomDOMEditor } from './with-dom';\nimport { DOMEditor, EDITOR_TO_ELEMENT, IS_FOCUSED } from 'slate-dom';\nimport { ClipboardData } from '../types/clipboard';\nimport { EDITOR_TO_VIRTUAL_SCROLL_CONFIG } from '../utils/virtual-scroll';\n\n/**\n * An Angular and DOM-specific version of the `Editor` interface.\n */\nexport interface AngularEditor extends CustomDOMEditor {\n    deleteCutData: () => void;\n    selectAll: () => void;\n    isVisible: (element: Element) => boolean;\n    getAllVisibleStates: () => boolean[];\n    onKeydown: (event: KeyboardEvent) => void;\n    onClick: (event: MouseEvent) => void;\n    injector: Injector;\n    isBlockCard: (node: Node) => boolean;\n    isExpanded: (node: Element) => boolean;\n    isFloating: (node: Element) => boolean;\n    getRoughHeight: (node: Element, defaultHeight?: number) => number;\n    onError: (errorData: SlateError) => void;\n    customInsertFragmentData: (data: DataTransfer, clipboardData: ClipboardData | null) => Promise<boolean>;\n    customInsertTextData: (data: DataTransfer) => Promise<boolean>;\n}\n\nexport const AngularEditor = {\n    ...CustomDOMEditor,\n    /**\n     * handle editor error.\n     */\n\n    onError(errorData: SlateError) {\n        if (errorData.nativeError) {\n            throw errorData.nativeError;\n        }\n    },\n\n    /**\n     * onKeydown hook.\n     */\n    onKeydown(editor: AngularEditor, data: KeyboardEvent): void {\n        editor.onKeydown(data);\n    },\n\n    /**\n     * onClick hook.\n     */\n    onClick(editor: AngularEditor, data: MouseEvent): void {\n        editor.onClick(data);\n    },\n\n    deleteCutData(editor: AngularEditor): void {\n        editor.deleteCutData();\n    },\n\n    isLeafBlock(editor: AngularEditor, node: Node): boolean {\n        return Element.isElement(node) && !editor.isInline(node) && Editor.hasInlines(editor, node);\n    },\n\n    /**\n     * move native selection to card-left or card-right\n     * @param editor\n     * @param blockCardNode\n     * @param options\n     */\n    moveBlockCard(\n        editor: AngularEditor,\n        blockCardNode: Node,\n        options: {\n            direction: 'left' | 'right';\n        }\n    ) {\n        const cursorNode = AngularEditor.getCardCursorNode(editor, blockCardNode, options);\n        const window = AngularEditor.getWindow(editor);\n        const domSelection = window.getSelection();\n        domSelection.setBaseAndExtent(cursorNode, 1, cursorNode, 1);\n    },\n\n    /**\n     * move slate selection to card-left or card-right\n     * @param editor\n     * @param path\n     * @param options\n     */\n    moveBlockCardCursor(\n        editor: AngularEditor,\n        path: Path,\n        options: {\n            direction: 'left' | 'right';\n        }\n    ) {\n        const cursor = {\n            path,\n            offset: options.direction === 'left' ? FAKE_LEFT_BLOCK_CARD_OFFSET : FAKE_RIGHT_BLOCK_CARD_OFFSET\n        };\n        Transforms.select(editor, { anchor: cursor, focus: cursor });\n    },\n    focus: (editor, options = { retries: 5 }) => {\n        // Return if already focused\n        if (IS_FOCUSED.get(editor)) {\n            return;\n        }\n\n        // Return if no dom node is associated with the editor, which means the editor is not yet mounted\n        // or has been unmounted. This can happen especially, while retrying to focus the editor.\n        if (!EDITOR_TO_ELEMENT.get(editor)) {\n            return;\n        }\n\n        IS_FOCUSED.set(editor, true);\n        const el = DOMEditor.toDOMNode(editor, editor);\n        const root = DOMEditor.findDocumentOrShadowRoot(editor);\n        if (root.activeElement !== el) {\n            // IS_FOCUSED should be set before calling el.focus() to ensure that\n            // FocusedContext is updated to the correct value\n            el.focus({ preventScroll: true });\n        }\n    },\n    isEnabledVirtualScroll(editor: AngularEditor): boolean {\n        const config = EDITOR_TO_VIRTUAL_SCROLL_CONFIG.get(editor);\n        return config?.enabled || false;\n    }\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_APPLE } from './environment';\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS = {\n    bold: 'mod+b',\n    compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n    moveBackward: 'left',\n    moveForward: 'right',\n    moveUp: 'up',\n    moveDown: 'down',\n    moveWordBackward: 'ctrl+left',\n    moveWordForward: 'ctrl+right',\n    deleteBackward: 'shift?+backspace',\n    deleteForward: 'shift?+delete',\n    extendBackward: 'shift+left',\n    extendForward: 'shift+right',\n    italic: 'mod+i',\n    splitBlock: 'shift?+enter',\n    undo: 'mod+z'\n};\n\nconst APPLE_HOTKEYS = {\n    moveLineBackward: 'opt+up',\n    moveLineForward: 'opt+down',\n    moveWordBackward: 'opt+left',\n    moveWordForward: 'opt+right',\n    deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n    deleteForward: ['ctrl+delete', 'ctrl+d'],\n    deleteLineBackward: 'cmd+shift?+backspace',\n    deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n    deleteWordBackward: 'opt+shift?+backspace',\n    deleteWordForward: 'opt+shift?+delete',\n    extendLineBackward: 'opt+shift+up',\n    extendLineForward: 'opt+shift+down',\n    redo: 'cmd+shift+z',\n    transposeCharacter: 'ctrl+t'\n};\n\nconst WINDOWS_HOTKEYS = {\n    deleteWordBackward: 'ctrl+shift?+backspace',\n    deleteWordForward: 'ctrl+shift?+delete',\n    redo: ['ctrl+y', 'ctrl+shift+z']\n};\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n    const generic = HOTKEYS[key];\n    const apple = APPLE_HOTKEYS[key];\n    const windows = WINDOWS_HOTKEYS[key];\n    const isGeneric = generic && isKeyHotkey(generic);\n    const isApple = apple && isKeyHotkey(apple);\n    const isWindows = windows && isKeyHotkey(windows);\n\n    return (event: KeyboardEvent) => {\n        if (isGeneric && isGeneric(event)) {\n            return true;\n        }\n        if (IS_APPLE && isApple && isApple(event)) {\n            return true;\n        }\n        if (!IS_APPLE && isWindows && isWindows(event)) {\n            return true;\n        }\n        return false;\n    };\n};\n\n/**\n * Hotkeys.\n */\n\nconst hotkeys = {\n    isBold: create('bold'),\n    isCompose: create('compose'),\n    isMoveBackward: create('moveBackward'),\n    isMoveForward: create('moveForward'),\n    isMoveUp: create('moveUp'),\n    isMoveDown: create('moveDown'),\n    isDeleteBackward: create('deleteBackward'),\n    isDeleteForward: create('deleteForward'),\n    isDeleteLineBackward: create('deleteLineBackward'),\n    isDeleteLineForward: create('deleteLineForward'),\n    isDeleteWordBackward: create('deleteWordBackward'),\n    isDeleteWordForward: create('deleteWordForward'),\n    isExtendBackward: create('extendBackward'),\n    isExtendForward: create('extendForward'),\n    isExtendLineBackward: create('extendLineBackward'),\n    isExtendLineForward: create('extendLineForward'),\n    isItalic: create('italic'),\n    isMoveLineBackward: create('moveLineBackward'),\n    isMoveLineForward: create('moveLineForward'),\n    isMoveWordBackward: create('moveWordBackward'),\n    isMoveWordForward: create('moveWordForward'),\n    isRedo: create('redo'),\n    isSplitBlock: create('splitBlock'),\n    isTransposeCharacter: create('transposeCharacter'),\n    isUndo: create('undo')\n};\nexport default hotkeys;\nexport { hotkeys };\n","import { TemplateRef } from '@angular/core';\nimport { ComponentType, ViewType } from '../types/view';\nimport { BaseFlavour } from '../view/flavour/base';\n\nexport function isTemplateRef<C>(value: ViewType): value is TemplateRef<C> {\n    return value && value instanceof TemplateRef;\n}\n\nexport function isComponentType<T>(value: ViewType): value is ComponentType<T> {\n    return !isTemplateRef(value);\n}\n\nexport function isFlavourType<T>(value: ViewType): value is ComponentType<T> {\n    return value && (value as any).isFlavour === true;\n}\n\n","import { Range } from 'slate';\nimport { PLACEHOLDER_SYMBOL } from './weak-maps';\n\nexport const shallowCompare = (obj1: {}, obj2: {}) =>\n    Object.keys(obj1).length === Object.keys(obj2).length &&\n    Object.keys(obj1).every(key => obj2.hasOwnProperty(key) && obj1[key] === obj2[key]);\n\n/**\n * Check if a list of decorator ranges are equal to another.\n *\n * PERF: this requires the two lists to also have the ranges inside them in the\n * same order, but this is an okay constraint for us since decorations are\n * kept in order, and the odd case where they aren't is okay to re-render for.\n */\n\nexport const isDecoratorRangeListEqual = (list: Range[], another: Range[]): boolean => {\n    if (list.length !== another.length) {\n        return false;\n    }\n\n    for (let i = 0; i < list.length; i++) {\n        const range = list[i];\n        const other = another[i];\n\n        const { anchor: rangeAnchor, focus: rangeFocus, ...rangeOwnProps } = range;\n        const { anchor: otherAnchor, focus: otherFocus, ...otherOwnProps } = other;\n\n        if (\n            !Range.equals(range, other) ||\n            range[PLACEHOLDER_SYMBOL] !== other[PLACEHOLDER_SYMBOL] ||\n            !shallowCompare(rangeOwnProps, otherOwnProps)\n        ) {\n            return false;\n        }\n    }\n\n    return true;\n};\n","import { Descendant, Element, Text } from 'slate';\n\nconst isValid = (value: Descendant) =>\n    (Element.isElement(value) && value.children.length > 0 && (value.children as Descendant[]).every(child => isValid(child))) ||\n    Text.isText(value);\n\nconst check = (document: Element[]) => {\n    return document.every(value => Element.isElement(value) && isValid(value));\n};\n\nfunction normalize(document: Element[]) {\n    return document.filter(value => Element.isElement(value) && isValid(value));\n}\n\nexport { normalize, check, isValid };\n","export const createThrottleRAF = () => {\n    let timerId: number | null = null;\n    const throttleRAF = (fn: () => void) => {\n        const scheduleFunc = () => {\n            timerId = requestAnimationFrame(() => {\n                timerId = null;\n                fn();\n            });\n        };\n        if (timerId !== null) {\n            cancelAnimationFrame(timerId);\n            timerId = null;\n        }\n        scheduleFunc();\n    };\n    return throttleRAF;\n};\n\nexport type ThrottleRAF = (fn: () => void) => void;\n","export const isClipboardReadSupported = () => {\n    return 'clipboard' in navigator && 'read' in navigator.clipboard;\n};\n\nexport const isClipboardWriteSupported = () => {\n    return 'clipboard' in navigator && 'write' in navigator.clipboard;\n};\n\nexport const isClipboardWriteTextSupported = () => {\n    return 'clipboard' in navigator && 'writeText' in navigator.clipboard;\n};\n\nexport const isClipboardFile = (item: ClipboardItem) => {\n    return item.types.find(i => i.match(/^image\\//));\n};\n\nexport const isInvalidTable = (nodes: Element[] = []) => {\n    return nodes.some(node => node.tagName.toLowerCase() === 'tr');\n};\n\nexport const stripHtml = (html: string) => {\n    // See <https://github.com/developit/preact-markup/blob/4788b8d61b4e24f83688710746ee36e7464f7bbc/src/parse-markup.js#L60-L69>\n    const doc = document.implementation.createHTMLDocument('');\n    doc.documentElement.innerHTML = html.trim();\n    return doc.body.textContent || doc.body.innerText || '';\n};\n\nexport const blobAsString = (blob: Blob) => {\n    return new Promise<string>((resolve, reject) => {\n        const reader = new FileReader();\n        reader.addEventListener('loadend', () => {\n            const text = reader.result;\n            resolve(text as string);\n        });\n        reader.addEventListener('error', () => {\n            reject(reader.error);\n        });\n        reader.readAsText(blob);\n    });\n};\n\nexport const completeTable = (fragment: DocumentFragment) => {\n    const result = document.createDocumentFragment();\n    const table = document.createElement('table');\n    result.appendChild(table);\n    table.appendChild(fragment);\n    return result;\n};\n","import { getClipboardFromHTMLText } from './clipboard';\nimport { ClipboardData } from '../../types/clipboard';\n\nexport const setDataTransferClipboard = (dataTransfer: Pick<DataTransfer, 'getData' | 'setData'> | null, htmlText: string) => {\n    dataTransfer?.setData(`text/html`, htmlText);\n};\n\nexport const setDataTransferClipboardText = (data: Pick<DataTransfer, 'getData' | 'setData'> | null, text: string) => {\n    data?.setData(`text/plain`, text);\n};\n\nexport const getDataTransferClipboard = (data: Pick<DataTransfer, 'getData' | 'setData'> | null): ClipboardData => {\n    const html = data?.getData(`text/html`);\n    if (html) {\n        const htmlClipboardData = getClipboardFromHTMLText(html);\n        if (htmlClipboardData) {\n            return htmlClipboardData;\n        }\n        const textData = getDataTransferClipboardText(data);\n        if (textData) {\n            return {\n                html,\n                ...textData\n            };\n        } else {\n            return { html };\n        }\n    } else {\n        const textData = getDataTransferClipboardText(data);\n        return textData;\n    }\n};\n\nexport const getDataTransferClipboardText = (data: Pick<DataTransfer, 'getData' | 'setData'> | null): ClipboardData => {\n    if (!data) {\n        return null;\n    }\n    const text = data?.getData(`text/plain`);\n    if (text) {\n        const htmlClipboardData = getClipboardFromHTMLText(text);\n        if (htmlClipboardData) {\n            return htmlClipboardData;\n        }\n    }\n    return { text };\n};\n","import { Element } from 'slate';\nimport { getClipboardFromHTMLText } from './clipboard';\nimport { blobAsString, isClipboardFile, isClipboardReadSupported, isClipboardWriteSupported, stripHtml } from './common';\nimport { ClipboardData } from '../../types/clipboard';\n\nexport const setNavigatorClipboard = async (htmlText: string, data: Element[], text: string = '') => {\n    let textClipboard = text;\n    if (isClipboardWriteSupported()) {\n        await navigator.clipboard.write([\n            new ClipboardItem({\n                'text/html': new Blob([htmlText], {\n                    type: 'text/html'\n                }),\n                'text/plain': new Blob([textClipboard ?? JSON.stringify(data)], { type: 'text/plain' })\n            })\n        ]);\n    }\n};\n\nexport const getNavigatorClipboard = async () => {\n    if (!isClipboardReadSupported()) {\n        return null;\n    }\n    const clipboardItems = await navigator.clipboard.read();\n    let clipboardData: ClipboardData = {};\n\n    if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {\n        for (const item of clipboardItems) {\n            if (isClipboardFile(item)) {\n                const clipboardFiles = item.types.filter(type => type.match(/^image\\//));\n                const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)!));\n                const urls = (fileBlobs.filter(Boolean) as (File | Blob)[]).map(blob => URL.createObjectURL(blob));\n                const files = await Promise.all(\n                    urls.map(async url => {\n                        const blob = await (await fetch(url)).blob();\n                        return new File([blob], 'file', { type: blob.type });\n                    })\n                );\n                clipboardData = {\n                    ...clipboardData,\n                    files\n                };\n            }\n            if (item.types.includes('text/html')) {\n                const htmlContent = await blobAsString(await item.getType('text/html'));\n                const htmlClipboardData = getClipboardFromHTMLText(htmlContent);\n                if (htmlClipboardData) {\n                    clipboardData = { ...clipboardData, ...htmlClipboardData };\n                    return clipboardData;\n                }\n                if (htmlContent && htmlContent.trim()) {\n                    clipboardData = { ...clipboardData, html: htmlContent };\n                }\n            }\n            if (item.types.includes('text/plain')) {\n                const textContent = await blobAsString(await item.getType('text/plain'));\n                clipboardData = {\n                    ...clipboardData,\n                    text: stripHtml(textContent)\n                };\n            }\n        }\n    }\n    return clipboardData;\n};\n","import { Element } from 'slate';\nimport { ClipboardData } from '../../types/clipboard';\nimport { isClipboardReadSupported, isClipboardWriteSupported, isClipboardWriteTextSupported } from './common';\nimport { getDataTransferClipboard, setDataTransferClipboard, setDataTransferClipboardText } from './data-transfer';\nimport { getNavigatorClipboard, setNavigatorClipboard } from './navigator-clipboard';\nimport { getSlateFragmentAttribute, SlateFragmentAttributeKey } from '../dom';\n\nexport const buildHTMLText = (wrapper: HTMLElement, attach: HTMLElement, data: Element[]) => {\n    const stringObj = JSON.stringify(data);\n    const encoded = window.btoa(encodeURIComponent(stringObj));\n    attach.setAttribute(SlateFragmentAttributeKey, encoded);\n    return wrapper.innerHTML;\n};\n\nexport const getClipboardFromHTMLText = (html: string): ClipboardData => {\n    const fragmentAttribute = getSlateFragmentAttribute(html);\n    if (fragmentAttribute) {\n        try {\n            const decoded = decodeURIComponent(window.atob(fragmentAttribute));\n            const result = JSON.parse(decoded);\n            if (result && Array.isArray(result) && result.length > 0) {\n                return {\n                    elements: result\n                };\n            }\n        } catch (error) {\n            console.error(error);\n            return null;\n        }\n    }\n    return null;\n};\n\nexport const createClipboardData = (html: string, elements: Element[], text: string, files: File[]): ClipboardData => {\n    const data = { elements, text, html, files };\n    return data;\n};\n\nexport const getClipboardData = async (dataTransfer?: DataTransfer): Promise<ClipboardData> => {\n    let clipboardData = null;\n    if (dataTransfer) {\n        let filesData = {};\n        if (dataTransfer.files.length) {\n            filesData = { ...filesData, files: Array.from(dataTransfer.files) };\n        }\n        clipboardData = getDataTransferClipboard(dataTransfer);\n        return { ...clipboardData, ...filesData };\n    }\n    if (isClipboardReadSupported()) {\n        return await getNavigatorClipboard();\n    }\n    return clipboardData;\n};\n\n/**\n * @param wrapper get wrapper.innerHTML string which will be written in clipboard\n * @param attach attach must be child element of wrapper which will be attached json data\n * @returns void\n */\nexport const setClipboardData = async (\n    clipboardData: ClipboardData,\n    wrapper: HTMLElement,\n    attach: HTMLElement,\n    dataTransfer?: Pick<DataTransfer, 'getData' | 'setData'>\n) => {\n    if (!clipboardData) {\n        return;\n    }\n    const { elements, text } = clipboardData;\n    if (isClipboardWriteSupported()) {\n        const htmlText = buildHTMLText(wrapper, attach, elements);\n        // TODO\n        // maybe fail to write when copy some cell in table\n        return await setNavigatorClipboard(htmlText, elements, text);\n    }\n\n    if (dataTransfer) {\n        const htmlText = buildHTMLText(wrapper, attach, elements);\n        setDataTransferClipboard(dataTransfer, htmlText);\n        setDataTransferClipboardText(dataTransfer, text);\n        return;\n    }\n\n    const htmlText = buildHTMLText(wrapper, attach, elements);\n    // Compatible with situations where navigator.clipboard.write is not supported and dataTransfer is empty\n    // Such as contextmenu copy in Firefox.\n    if (isClipboardWriteTextSupported()) {\n        return await navigator.clipboard.writeText(htmlText);\n    } else {\n        return await fallbackCopyText(htmlText);\n    }\n};\n\nexport const fallbackCopyText = async (text: string): Promise<void> => {\n    return new Promise((resolve, reject) => {\n        const textArea = document.createElement('textarea');\n        textArea.value = text;\n        textArea.style.position = 'fixed';\n        textArea.style.left = '-999999px';\n        textArea.style.top = '-999999px';\n        textArea.style.opacity = '0';\n        \n        document.body.appendChild(textArea);\n        textArea.focus();\n        textArea.select();\n        \n        try {\n            const successful = document.execCommand('copy');\n            document.body.removeChild(textArea);\n            \n            if (successful) {\n                resolve();\n            } else {\n                reject(new Error('execCommand error'));\n            }\n        } catch (err) {\n            document.body.removeChild(textArea);\n            reject(err);\n        }\n    });\n};\n","import { Editor, Element, Node, Operation, Path, PathRef, Range, Transforms } from 'slate';\nimport { ClipboardData, OriginEvent } from '../types/clipboard';\nimport { SlateError } from '../types/error';\nimport { completeTable, EDITOR_TO_VIRTUAL_SCROLL_SELECTION, isInvalidTable, VIRTUAL_SCROLL_DEFAULT_BLOCK_HEIGHT } from '../utils';\nimport { getClipboardData, setClipboardData } from '../utils/clipboard/clipboard';\nimport { AngularEditor } from './angular-editor';\nimport { Key, NODE_TO_KEY, withDOM } from 'slate-dom';\nimport { getPlainText, isDOMText } from '../utils/dom';\n\nexport const withAngular = <T extends Editor>(editor: T, clipboardFormatKey = 'x-slate-fragment') => {\n    let e = editor as T & AngularEditor;\n    let { apply } = e;\n\n    e = withDOM(e, clipboardFormatKey);\n\n    e.setFragmentData = (dataTransfer?: Pick<DataTransfer, 'getData' | 'setData'>, originEvent?: OriginEvent) => {\n        const { selection } = e;\n\n        if (!selection) {\n            return;\n        }\n\n        const [start, end] = Range.edges(selection);\n        const startVoid = Editor.void(e, { at: start.path });\n        const endVoid = Editor.void(e, { at: end.path });\n\n        if (Range.isCollapsed(selection) && !startVoid) {\n            return;\n        }\n\n        // Create a fake selection so that we can add a Base64-encoded copy of the\n        // fragment to the HTML, to decode on future pastes.\n        let domRange: globalThis.Range;\n        if (AngularEditor.isEnabledVirtualScroll(e)) {\n            const virtualScrollSelection = EDITOR_TO_VIRTUAL_SCROLL_SELECTION.get(e);\n            if (virtualScrollSelection) {\n                domRange = AngularEditor.toDOMRange(e, virtualScrollSelection);\n            }\n        }\n        domRange = domRange ?? AngularEditor.toDOMRange(e, selection);\n        let contents = domRange.cloneContents();\n        let attach = contents.childNodes[0] as HTMLElement;\n\n        // Make sure attach is non-empty, since empty nodes will not get copied.\n        const contentsArray = Array.from(contents.children);\n        contentsArray.forEach(node => {\n            if (node.textContent && node.textContent.trim() !== '') {\n                attach = node as HTMLElement;\n            }\n        });\n\n        // COMPAT: If the end node is a void node, we need to move the end of the\n        // range from the void node's spacer span, to the end of the void node's\n        // content, since the spacer is before void's content in the DOM.\n        if (endVoid) {\n            const [voidNode] = endVoid;\n            const r = domRange.cloneRange();\n            const domNode = AngularEditor.toDOMNode(e, voidNode);\n            r.setEndAfter(domNode);\n            contents = r.cloneContents();\n        }\n\n        // COMPAT: If the start node is a void node, we need to attach the encoded\n        // fragment to the void node's content node instead of the spacer, because\n        // attaching it to empty `<div>/<span>` nodes will end up having it erased by\n        // most browsers. (2018/04/27)\n        if (startVoid) {\n            attach = contents.querySelector('[data-slate-spacer]')! as HTMLElement;\n        }\n\n        // Remove any zero-width space spans from the cloned DOM so that they don't\n        // show up elsewhere when pasted.\n        Array.from(contents.querySelectorAll('[data-slate-zero-width]')).forEach(zw => {\n            const isNewline = zw.getAttribute('data-slate-zero-width') === 'n';\n            zw.textContent = isNewline ? '\\n' : '';\n        });\n\n        // Set a `data-slate-fragment` attribute on a non-empty node, so it shows up\n        // in the HTML, and can be used for intra-Slate pasting. If it's a text\n        // node, wrap it in a `<span>` so we have something to set an attribute on.\n        if (isDOMText(attach)) {\n            const span = attach.ownerDocument.createElement('span');\n            // COMPAT: In Chrome and Safari, if we don't add the `white-space` style\n            // then leading and trailing spaces will be ignored. (2017/09/21)\n            span.style.whiteSpace = 'pre';\n            span.appendChild(attach);\n            contents.appendChild(span);\n            attach = span;\n        }\n\n        const fragment = e.getFragment();\n\n        // Add the content to a <div> so that we can get its inner HTML.\n        const div = contents.ownerDocument.createElement('div');\n        const attachWrapper = document.createElement('div');\n        const elements = Array.from(contents.children);\n        if (isInvalidTable(elements)) {\n            contents = completeTable(contents.cloneNode(true) as DocumentFragment);\n        }\n\n        attachWrapper.appendChild(contents);\n        div.appendChild(attachWrapper);\n        div.setAttribute('hidden', 'true');\n        contents.ownerDocument.body.appendChild(div);\n        setClipboardData({ text: getPlainText(div), elements: fragment as Element[] }, div, attachWrapper, dataTransfer);\n        contents.ownerDocument.body.removeChild(div);\n    };\n\n    e.deleteCutData = () => {\n        const { selection } = editor;\n        if (selection) {\n            if (Range.isExpanded(selection)) {\n                Editor.deleteFragment(editor);\n            } else {\n                const node = Node.parent(editor, selection.anchor.path);\n                if (Element.isElement(node) && Editor.isVoid(editor, node)) {\n                    Transforms.delete(editor);\n                }\n            }\n        }\n    };\n\n    e.insertData = async (data: DataTransfer) => {\n        if (!(await e.customInsertFragmentData(data, null))) {\n            e.insertTextData(data);\n        }\n    };\n\n    e.customInsertFragmentData = async (data: DataTransfer, contextClipboardData: ClipboardData): Promise<boolean> => {\n        /**\n         * Checking copied fragment from application/x-slate-fragment or data-slate-fragment\n         */\n        const clipboardData = contextClipboardData || (await getClipboardData(data));\n        if (clipboardData && clipboardData.elements) {\n            e.insertFragment(clipboardData.elements);\n            return true;\n        }\n        return false;\n    };\n\n    e.customInsertTextData = async (data: DataTransfer): Promise<boolean> => {\n        const clipboardData = await getClipboardData(data);\n\n        if (clipboardData && clipboardData.text) {\n            const lines = clipboardData.text.split(/\\r\\n|\\r|\\n/);\n            let split = false;\n\n            for (const line of lines) {\n                if (split) {\n                    Transforms.splitNodes(e, { always: true });\n                }\n\n                e.insertText(line);\n                split = true;\n            }\n            return true;\n        }\n        return false;\n    };\n\n    e.onKeydown = () => {};\n\n    e.onClick = () => {};\n\n    e.isBlockCard = element => false;\n\n    e.isExpanded = element => true;\n\n    e.onError = (errorData: SlateError) => {\n        if (errorData.nativeError) {\n            console.error(errorData.nativeError);\n        } else {\n            console.error(errorData);\n        }\n    };\n\n    // exist issue for move operation in withDOM\n    e.apply = (op: Operation) => {\n        const matches: [Path | PathRef, Key][] = [];\n\n        switch (op.type) {\n            case 'insert_text':\n            case 'remove_text':\n            case 'set_node': {\n                for (const [node, path] of Editor.levels(e, { at: op.path })) {\n                    const key = AngularEditor.findKey(e, node);\n                    matches.push([path, key]);\n                }\n\n                break;\n            }\n\n            case 'insert_node':\n            case 'remove_node':\n            case 'merge_node':\n            case 'split_node': {\n                for (const [node, path] of Editor.levels(e, {\n                    at: Path.parent(op.path)\n                })) {\n                    const key = AngularEditor.findKey(e, node);\n                    matches.push([path, key]);\n                }\n\n                break;\n            }\n\n            case 'move_node': {\n                const commonPath = Path.common(Path.parent(op.path), Path.parent(op.newPath));\n                for (const [node, path] of Editor.levels(e, {\n                    at: Path.parent(op.path)\n                })) {\n                    const key = AngularEditor.findKey(e, node);\n                    matches.push([Editor.pathRef(editor, path), key]);\n                }\n                for (const [node, path] of Editor.levels(e, {\n                    at: Path.parent(op.newPath)\n                })) {\n                    if (path.length > commonPath.length) {\n                        const key = AngularEditor.findKey(e, node);\n                        matches.push([Editor.pathRef(editor, path), key]);\n                    }\n                }\n                break;\n            }\n        }\n\n        apply(op);\n\n        for (const [source, key] of matches) {\n            const [node] = Editor.node(e, Path.isPath(source) ? source : source.current);\n            NODE_TO_KEY.set(node, key);\n        }\n    };\n\n    e.selectAll = () => {\n        Transforms.select(e, []);\n    };\n\n    e.isVisible = element => {\n        return true;\n    };\n\n    e.getAllVisibleStates = () => {\n        return new Array(e.children.length).fill(true);\n    };\n\n    e.getRoughHeight = (element: Element, defaultHeight?: number) => {\n        return defaultHeight === undefined ? VIRTUAL_SCROLL_DEFAULT_BLOCK_HEIGHT : defaultHeight;\n    };\n\n    e.isFloating = element => false;\n\n    return e;\n};\n","export const TOP_BLUR = 'blur';\nexport const TOP_COMPOSITION_END = 'compositionend';\nexport const TOP_COMPOSITION_START = 'compositionstart';\nexport const TOP_COMPOSITION_UPDATE = 'compositionupdate';\nexport const TOP_KEY_DOWN = 'keydown';\nexport const TOP_KEY_PRESS = 'keypress';\nexport const TOP_KEY_UP = 'keyup';\nexport const TOP_MOUSE_DOWN = 'mousedown';\nexport const TOP_MOUSE_MOVE = 'mousemove';\nexport const TOP_MOUSE_OUT = 'mouseout';\nexport const TOP_TEXT_INPUT = 'textInput';\nexport const TOP_PASTE = 'paste';\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\n\nlet root = null;\nlet startText = null;\nlet fallbackText = null;\n\nexport function initialize(nativeEventTarget) {\n    root = nativeEventTarget;\n    startText = getText();\n    return true;\n}\n\nexport function reset() {\n    root = null;\n    startText = null;\n    fallbackText = null;\n}\n\nexport function getData() {\n    if (fallbackText) {\n        return fallbackText;\n    }\n\n    let start;\n    const startValue = startText;\n    const startLength = startValue.length;\n    let end;\n    const endValue = getText();\n    const endLength = endValue.length;\n\n    for (start = 0; start < startLength; start++) {\n        if (startValue[start] !== endValue[start]) {\n            break;\n        }\n    }\n\n    const minEnd = startLength - start;\n    for (end = 1; end <= minEnd; end++) {\n        if (startValue[startLength - end] !== endValue[endLength - end]) {\n            break;\n        }\n    }\n\n    const sliceTail = end > 1 ? 1 - end : undefined;\n    fallbackText = endValue.slice(start, sliceTail);\n    return fallbackText;\n}\n\nexport function getText() {\n    if ('value' in root) {\n        return root.value;\n    }\n    return root.textContent;\n}\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n    TOP_BLUR,\n    TOP_COMPOSITION_START,\n    TOP_COMPOSITION_END,\n    TOP_COMPOSITION_UPDATE,\n    TOP_KEY_DOWN,\n    TOP_KEY_PRESS,\n    TOP_KEY_UP,\n    TOP_MOUSE_DOWN,\n    TOP_TEXT_INPUT,\n    TOP_PASTE\n} from './DOMTopLevelEventTypes';\nimport {\n    getData as FallbackCompositionStateGetData,\n    initialize as FallbackCompositionStateInitialize,\n    reset as FallbackCompositionStateReset\n} from './FallbackCompositionState';\n\nconst canUseDOM: boolean = !!(\n    typeof window !== 'undefined' &&\n    typeof window.document !== 'undefined' &&\n    typeof window.document.createElement !== 'undefined'\n);\n\nconst END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nconst START_KEYCODE = 229;\n\nconst canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\n\nlet documentMode = null;\nif (canUseDOM && 'documentMode' in document) {\n    documentMode = (document as any).documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nconst canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode;\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nconst useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || (documentMode && documentMode > 8 && documentMode <= 11));\n\nconst SPACEBAR_CODE = 32;\nconst SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\n// Events and their corresponding property names.\nconst eventTypes = {\n    beforeInput: {\n        phasedRegistrationNames: {\n            bubbled: 'onBeforeInput',\n            captured: 'onBeforeInputCapture'\n        },\n        dependencies: [TOP_COMPOSITION_END, TOP_KEY_PRESS, TOP_TEXT_INPUT, TOP_PASTE]\n    }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nlet hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n    return (\n        (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n        // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n        !(nativeEvent.ctrlKey && nativeEvent.altKey)\n    );\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n    switch (topLevelType) {\n        case TOP_KEY_UP:\n            // Command keys insert or clear IME input.\n            return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n        case TOP_KEY_DOWN:\n            // Expect IME keyCode on each keydown. If we get any other\n            // code we must have exited earlier.\n            return nativeEvent.keyCode !== START_KEYCODE;\n        case TOP_KEY_PRESS:\n        case TOP_MOUSE_DOWN:\n        case TOP_BLUR:\n            // Events are not possible without cancelling IME.\n            return true;\n        default:\n            return false;\n    }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n    const detail = nativeEvent.detail;\n    if (typeof detail === 'object' && 'data' in detail) {\n        return detail.data;\n    }\n    return null;\n}\n\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n */\nfunction isUsingKoreanIME(nativeEvent) {\n    return nativeEvent.locale === 'ko';\n}\n\n// Track the current IME composition status, if any.\nlet isComposing = false;\n\nfunction getNativeBeforeInputChars(topLevelType: any, nativeEvent) {\n    switch (topLevelType) {\n        case TOP_COMPOSITION_END:\n            return getDataFromCustomEvent(nativeEvent);\n        case TOP_KEY_PRESS:\n            /**\n             * If native `textInput` events are available, our goal is to make\n             * use of them. However, there is a special case: the spacebar key.\n             * In Webkit, preventing default on a spacebar `textInput` event\n             * cancels character insertion, but it *also* causes the browser\n             * to fall back to its default spacebar behavior of scrolling the\n             * page.\n             *\n             * Tracking at:\n             * https://code.google.com/p/chromium/issues/detail?id=355103\n             *\n             * To avoid this issue, use the keypress event as if no `textInput`\n             * event is available.\n             */\n            const which = nativeEvent.which;\n            if (which !== SPACEBAR_CODE) {\n                return null;\n            }\n\n            hasSpaceKeypress = true;\n            return SPACEBAR_CHAR;\n\n        case TOP_TEXT_INPUT:\n            // Record the characters to be added to the DOM.\n            const chars = nativeEvent.data;\n\n            // If it's a spacebar character, assume that we have already handled\n            // it at the keypress level and bail immediately. Android Chrome\n            // doesn't give us keycodes, so we need to ignore it.\n            if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n                return null;\n            }\n\n            return chars;\n\n        default:\n            // For other native event types, do nothing.\n            return null;\n    }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n */\nfunction getFallbackBeforeInputChars(topLevelType: any, nativeEvent) {\n    // If we are currently composing (IME) and using a fallback to do so,\n    // try to extract the composed characters from the fallback object.\n    // If composition event is available, we extract a string only at\n    // compositionevent, otherwise extract it at fallback events.\n    if (isComposing) {\n        if (topLevelType === TOP_COMPOSITION_END || (!canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent))) {\n            const chars = FallbackCompositionStateGetData();\n            FallbackCompositionStateReset();\n            isComposing = false;\n            return chars;\n        }\n        return null;\n    }\n\n    switch (topLevelType) {\n        case TOP_PASTE:\n            // If a paste event occurs after a keypress, throw out the input\n            // chars. Paste events should not lead to BeforeInput events.\n            return null;\n        case TOP_KEY_PRESS:\n            /**\n             * As of v27, Firefox may fire keypress events even when no character\n             * will be inserted. A few possibilities:\n             *\n             * - `which` is `0`. Arrow keys, Esc key, etc.\n             *\n             * - `which` is the pressed key code, but no char is available.\n             *   Ex: 'AltGr + d` in Polish. There is no modified character for\n             *   this key combination and no character is inserted into the\n             *   document, but FF fires the keypress for char code `100` anyway.\n             *   No `input` event will occur.\n             *\n             * - `which` is the pressed key code, but a command combination is\n             *   being used. Ex: `Cmd+C`. No character is inserted, and no\n             *   `input` event will occur.\n             */\n            if (!isKeypressCommand(nativeEvent)) {\n                // IE fires the `keypress` event when a user types an emoji via\n                // Touch keyboard of Windows.  In such a case, the `char` property\n                // holds an emoji character like `\\uD83D\\uDE0A`.  Because its length\n                // is 2, the property `which` does not represent an emoji correctly.\n                // In such a case, we directly return the `char` property instead of\n                // using `which`.\n                if (nativeEvent.char && nativeEvent.char.length > 1) {\n                    return nativeEvent.char;\n                } else if (nativeEvent.which) {\n                    return String.fromCharCode(nativeEvent.which);\n                }\n            }\n            return null;\n        case TOP_COMPOSITION_END:\n            return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n        default:\n            return null;\n    }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n */\nexport function extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    let chars;\n\n    if (canUseTextInputEvent) {\n        chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n    } else {\n        chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n    }\n\n    // If no characters are being inserted, no BeforeInput event should\n    // be fired.\n    if (!chars) {\n        return null;\n    }\n\n    const beforeInputEvent = new BeforeInputEvent();\n    beforeInputEvent.data = chars;\n    beforeInputEvent.nativeEvent = nativeEvent;\n    return beforeInputEvent;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nconst BeforeInputEventPlugin = {\n    extractEvents: (topLevelType, targetInst, nativeEvent, nativeEventTarget) => {\n        return extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n    }\n};\n\nexport class BeforeInputEvent {\n    data: string;\n    nativeEvent: Event;\n}\nexport default BeforeInputEventPlugin;\n","export const BEFORE_INPUT_EVENTS: {\n    name: string;\n    handler: string;\n    isTriggerBeforeInput: boolean;\n}[] = [\n    // { name: 'blur', handler: 'onBlur', isTriggerBeforeInput: true },\n    // { name: 'compositionstart', handler: 'onCompositionStart', isTriggerBeforeInput: true },\n    { name: 'compositionupdate', handler: null, isTriggerBeforeInput: true },\n    // { name: 'compositionend', handler: 'onCompositionEnd', isTriggerBeforeInput: false },\n    // { name: 'keydown', handler: 'onKeyDown', isTriggerBeforeInput: true },\n    { name: 'keypress', handler: null, isTriggerBeforeInput: true },\n    { name: 'keyup', handler: 'onKeyUp', isTriggerBeforeInput: true },\n    { name: 'mousedown', handler: 'onMouseDown', isTriggerBeforeInput: true },\n    { name: 'textInput', handler: null, isTriggerBeforeInput: true }\n    // { name: 'paste', handler: 'onPaste', isTriggerBeforeInput: true }\n];\n","import { Descendant } from 'slate';\n\nexport enum SlateErrorCode {\n    ToNativeSelectionError = 2100,\n    ToSlateSelectionError = 2101,\n    OnDOMBeforeInputError = 2102,\n    OnSyntheticBeforeInputError = 2103,\n    OnDOMKeydownError = 2104,\n    GetStartPointError = 2105,\n    NotFoundPreviousRootNodeError = 3100,\n    InvalidValueError = 4100\n}\n\nexport interface SlateError {\n    code?: SlateErrorCode | number;\n    name?: string;\n    nativeError?: Error;\n    data?: Descendant[];\n}\n","import { Editor } from 'slate';\nimport { EDITOR_TO_ELEMENT } from 'slate-dom';\n\nexport function restoreDom(editor: Editor, execute: () => void) {\n    const editable = EDITOR_TO_ELEMENT.get(editor);\n    let observer = new MutationObserver(mutations => {\n        mutations.reverse().forEach(mutation => {\n            if (mutation.type === 'characterData') {\n                // We don't want to restore the DOM for characterData mutations\n                // because this interrupts the composition.\n                return;\n            }\n\n            mutation.removedNodes.forEach(node => {\n                mutation.target.insertBefore(node, mutation.nextSibling);\n            });\n\n            mutation.addedNodes.forEach(node => {\n                mutation.target.removeChild(node);\n            });\n        });\n        disconnect();\n        execute();\n    });\n    const disconnect = () => {\n        observer.disconnect();\n        observer = null;\n    };\n    observer.observe(editable, { subtree: true, childList: true, characterData: true, characterDataOldValue: true });\n    setTimeout(() => {\n        if (observer) {\n            disconnect();\n            execute();\n        }\n    }, 0);\n}\n","import { SlateBlockCard } from '../../components/block-card/block-card';\nimport { BaseFlavour } from './base';\n\nexport class FlavourRef {\n    instance: BaseFlavour;\n\n    destroy(): void {\n        this.instance.onDestroy();\n    }\n}\n\nexport class BlockCardRef {\n    instance: SlateBlockCard;\n\n    destroy(): void {\n        this.instance.onDestroy();\n    }\n}\n","export interface BeforeContextChange<T> {\n    beforeContextChange: (value: T) => void;\n}\n\nexport interface AfterContextChange {\n    afterContextChange: () => void;\n}\n\nexport type BeforeDomMoveOrigin = 'move' | 'virtual-scroll';\n\nexport interface BeforeDomMove {\n    beforeDomMove: (origin: BeforeDomMoveOrigin) => void;\n}\n\nexport interface BeforeDomMoveRef {\n    instance: {\n        beforeDomMove: (origin: BeforeDomMoveOrigin) => void;\n    };\n}\n\nexport function hasBeforeContextChange<T>(value): value is BeforeContextChange<T> {\n    if (value.beforeContextChange) {\n        return true;\n    }\n    return false;\n}\n\nexport function hasAfterContextChange<T>(value): value is AfterContextChange {\n    if (value.afterContextChange) {\n        return true;\n    }\n    return false;\n}\n\nexport function hasBeforeDomMove(value): value is BeforeDomMoveRef {\n    if (value.instance?.beforeDomMove) {\n        return true;\n    }\n    return false;\n}\n","import { Descendant } from 'slate';\nimport { ComponentRef, EmbeddedViewRef, ViewContainerRef } from '@angular/core';\nimport { ViewType } from '../../types/view';\nimport { isComponentType, isFlavourType, isTemplateRef } from '../../utils/view';\nimport { SlateElementContext, SlateLeafContext, SlateTextContext, SlateViewContext } from '../context';\nimport { BlockCardRef, FlavourRef } from '../flavour/ref';\nimport { hasBeforeDomMove } from '../view-interface';\n\nexport function createEmbeddedViewOrComponentOrFlavour(\n    viewType: ViewType,\n    context: any,\n    viewContext: SlateViewContext,\n    viewContainerRef: ViewContainerRef\n) {\n    if (isFlavourType(viewType)) {\n        const flavourRef = new FlavourRef();\n        flavourRef.instance = new (viewType as any)();\n        flavourRef.instance.context = context;\n        flavourRef.instance.viewContext = viewContext;\n        flavourRef.instance.viewContainerRef = viewContainerRef;\n        flavourRef.instance.onInit();\n        return flavourRef;\n    }\n    if (isTemplateRef(viewType)) {\n        const embeddedViewContext = {\n            context,\n            viewContext\n        };\n        const embeddedViewRef = viewContainerRef.createEmbeddedView<any>(viewType, embeddedViewContext);\n        embeddedViewRef.detectChanges();\n        return embeddedViewRef;\n    }\n    if (isComponentType(viewType)) {\n        const componentRef = viewContainerRef.createComponent(viewType, {\n            injector: viewContainerRef.injector\n        }) as ComponentRef<any>;\n        componentRef.instance.viewContext = viewContext;\n        componentRef.instance.context = context;\n        componentRef.changeDetectorRef.detectChanges();\n        return componentRef;\n    }\n}\n\nexport function updateContext(\n    view: EmbeddedViewRef<any> | ComponentRef<any> | FlavourRef,\n    newContext: SlateElementContext | SlateTextContext | SlateLeafContext,\n    viewContext: SlateViewContext\n) {\n    if (view instanceof FlavourRef) {\n        view.instance.context = newContext;\n        return;\n    }\n    if (view instanceof ComponentRef) {\n        view.instance.context = newContext;\n    } else {\n        view.context.context = newContext;\n        view.context.viewContext = viewContext;\n        view.detectChanges();\n    }\n}\n\nexport function mount(\n    views: (EmbeddedViewRef<any> | ComponentRef<any> | FlavourRef)[],\n    blockCards: (BlockCardRef | null)[] | null,\n    outletParent: HTMLElement,\n    outletElement: HTMLElement | null\n) {\n    if (views.length > 0) {\n        const fragment = document.createDocumentFragment();\n        views.forEach((view, index) => {\n            const blockCard = blockCards ? blockCards[index] : undefined;\n            fragment.append(...getRootNodes(view, blockCard));\n        });\n        if (outletElement) {\n            outletElement.parentElement.insertBefore(fragment, outletElement);\n            outletElement.remove();\n        } else {\n            outletParent.prepend(fragment);\n        }\n    }\n}\n\nexport function getRootNodes(ref: EmbeddedViewRef<any> | ComponentRef<any> | FlavourRef, blockCard?: BlockCardRef): HTMLElement[] {\n    if (blockCard) {\n        return [blockCard.instance.nativeElement];\n    }\n    if (ref instanceof FlavourRef) {\n        return [ref.instance.nativeElement];\n    }\n    if (ref instanceof ComponentRef) {\n        ((ref.hostView as any).rootNodes as (HTMLElement | any)[]).forEach(ele => {\n            if (!(ele instanceof HTMLElement)) {\n                ele.remove();\n            }\n        });\n        return [ref.instance.nativeElement];\n    } else {\n        const result: HTMLElement[] = [];\n        ref.rootNodes.forEach(rootNode => {\n            const isHTMLElement = rootNode instanceof HTMLElement;\n            const isSlateNodeOfLeaf =\n                isHTMLElement && (rootNode.hasAttribute('data-slate-node') || rootNode.hasAttribute('data-slate-leaf'));\n            if (isSlateNodeOfLeaf && result.every(item => !item.contains(rootNode))) {\n                result.push(rootNode);\n            }\n            if (!isHTMLElement) {\n                rootNode.remove();\n            }\n        });\n        return result;\n    }\n}\n\nexport function mountOnItemChange(\n    index: number,\n    item: Descendant,\n    views: (EmbeddedViewRef<any> | ComponentRef<any>)[],\n    blockCards: (BlockCardRef | null)[] | null,\n    outletParent: HTMLElement,\n    firstRootNode: HTMLElement | null,\n    viewContext: SlateViewContext\n) {\n    const view = views[index];\n    if (hasBeforeDomMove(view)) {\n        view.instance.beforeDomMove('move');\n    }\n    let rootNodes = getRootNodes(view);\n    if (blockCards) {\n        const isBlockCard = viewContext.editor.isBlockCard(item);\n        if (isBlockCard) {\n            const blockCard = blockCards[index];\n            rootNodes = [blockCard.instance.nativeElement];\n        }\n    }\n    if (index === 0) {\n        if (firstRootNode) {\n            rootNodes.forEach(rootNode => {\n                firstRootNode.insertAdjacentElement('beforebegin', rootNode);\n            });\n        } else {\n            outletParent.prepend(...rootNodes);\n        }\n    } else {\n        const previousView = views[index - 1];\n        const blockCard = blockCards ? blockCards[index - 1] : null;\n        const previousRootNodes = getRootNodes(previousView, blockCard);\n        let previousRootNode = previousRootNodes[previousRootNodes.length - 1];\n        rootNodes.forEach(rootNode => {\n            previousRootNode.insertAdjacentElement('afterend', rootNode);\n            previousRootNode = rootNode;\n        });\n    }\n}\n","import { ViewContainerRef } from '@angular/core';\nimport { AngularEditor } from '../../plugins/angular-editor';\nimport { SlateElementContext, SlateLeafContext, SlateTextContext, SlateViewContext } from '../context';\nimport { hasAfterContextChange, hasBeforeContextChange } from '../view-interface';\n\nexport abstract class BaseFlavour<T = SlateTextContext | SlateLeafContext | SlateElementContext, K extends AngularEditor = AngularEditor> {\n    static isFlavour = true;\n\n    initialized = false;\n\n    protected _context: T;\n\n    viewContainerRef: ViewContainerRef;\n\n    set context(value: T) {\n        if (hasBeforeContextChange<T>(this)) {\n            this.beforeContextChange(value);\n        }\n        this._context = value;\n        this.onContextChange();\n        if (hasAfterContextChange<T>(this)) {\n            this.afterContextChange();\n        }\n    }\n\n    get context() {\n        return this._context;\n    }\n\n    viewContext: SlateViewContext<K>;\n\n    get editor() {\n        return this.viewContext && this.viewContext.editor;\n    }\n\n    nativeElement: HTMLElement;\n\n    abstract onContextChange();\n\n    abstract onInit();\n\n    abstract onDestroy();\n\n    abstract render();\n\n    abstract rerender();\n}\n","import { AngularEditor } from '../../plugins/angular-editor';\nimport { SlateChildrenContext, SlateElementContext } from '../context';\nimport { Descendant, Element, Range } from 'slate';\nimport { BaseFlavour } from './base';\nimport { addAfterViewInitQueue, ListRender } from '../render/list-render';\nimport { ELEMENT_TO_NODE, NODE_TO_ELEMENT } from 'slate-dom';\nimport { ELEMENT_TO_COMPONENT } from '../../utils/weak-maps';\nimport { getBlockCardByNativeElement } from '../../components/block-card/block-card';\n\nexport const DEFAULT_ELEMENT_HEIGHT = 24;\n\nexport abstract class BaseElementFlavour<T extends Element = Element, K extends AngularEditor = AngularEditor> extends BaseFlavour<\n    SlateElementContext<T>,\n    K\n> {\n    childrenContext: SlateChildrenContext;\n\n    get element(): T {\n        return this._context && this._context.element;\n    }\n\n    get selection(): Range {\n        return this._context && this._context.selection;\n    }\n\n    get decorations(): Range[] {\n        return this._context && this._context.decorations;\n    }\n\n    get children(): Descendant[] {\n        return this._context && this._context.element.children;\n    }\n\n    get isCollapsed() {\n        return this.selection && Range.isCollapsed(this.selection);\n    }\n\n    get isCollapsedAndNonReadonly() {\n        return this.selection && Range.isCollapsed(this.selection) && !this.readonly;\n    }\n\n    get readonly() {\n        return this._context && this._context.readonly;\n    }\n\n    getOutletParent = () => {\n        return this.nativeElement;\n    };\n\n    getOutletElement = () => {\n        return this.nativeElement.querySelector('.children-outlet') as HTMLElement | null;\n    };\n\n    listRender: ListRender;\n\n    onInit() {\n        this.initialized = true;\n        this.render();\n        for (const key in this._context.attributes) {\n            this.nativeElement.setAttribute(key, this._context.attributes[key]);\n        }\n        this.updateWeakMap();\n        this.listRender = new ListRender(this.viewContext, this.viewContainerRef, this.getOutletParent, this.getOutletElement);\n        if (this.editor.isExpanded(this.element)) {\n            this.listRender.initialize(this.children, this.element, this.childrenContext);\n        }\n        addAfterViewInitQueue(this.editor, () => {\n            this.afterViewInit();\n        });\n    }\n\n    afterViewInit() {\n        if (this._context.contentEditable !== undefined) {\n            this.nativeElement.setAttribute('contenteditable', this._context.contentEditable + '');\n        }\n    }\n\n    updateWeakMap() {\n        NODE_TO_ELEMENT.set(this.element, this.nativeElement);\n        ELEMENT_TO_NODE.set(this.nativeElement, this.element);\n        ELEMENT_TO_COMPONENT.set(this.element, this);\n    }\n\n    onDestroy() {\n        if (NODE_TO_ELEMENT.get(this.element) === this.nativeElement) {\n            NODE_TO_ELEMENT.delete(this.element);\n        }\n        ELEMENT_TO_NODE.delete(this.nativeElement);\n        if (ELEMENT_TO_COMPONENT.get(this.element) === this) {\n            ELEMENT_TO_COMPONENT.delete(this.element);\n        }\n        this.listRender.destroy();\n        this.nativeElement?.remove();\n    }\n\n    onContextChange() {\n        this.childrenContext = this.getChildrenContext();\n        if (!this.initialized) {\n            return;\n        }\n        this.rerender();\n        this.updateWeakMap();\n        this.updateChildrenView();\n    }\n\n    updateChildrenView() {\n        if (this.editor.isExpanded(this.element)) {\n            this.listRender.update(this.children, this.element, this.childrenContext);\n        } else {\n            if (this.listRender.initialized) {\n                this.listRender.destroy();\n            }\n        }\n    }\n\n    getChildrenContext(): SlateChildrenContext {\n        return {\n            parent: this._context.element,\n            selection: this._context.selection,\n            decorations: this._context.decorations,\n            decorate: this._context.decorate,\n            readonly: this._context.readonly\n        };\n    }\n\n    calcHeight(): number {\n        const blockCard = getBlockCardByNativeElement(this.nativeElement);\n        const target = blockCard || this.nativeElement;\n        const computedStyle = getComputedStyle(target);\n        const height =\n            Math.ceil(target.getBoundingClientRect().height) + parseFloat(computedStyle.marginTop) + parseFloat(computedStyle.marginBottom);\n        return height;\n    }\n\n    abstract render(): void;\n\n    abstract rerender(): void;\n}\n","import { BaseElementFlavour } from \"../view/flavour/element\";\nimport { AngularEditor } from \"../plugins/angular-editor\";\nimport { Element } from \"slate\";\n\nexport class DefaultElementFlavour<T extends Element = Element, K extends AngularEditor = AngularEditor> extends BaseElementFlavour<T, K> {\n    render() {\n        const nativeElement = document.createElement('div');\n        this.nativeElement = nativeElement;\n    }\n\n    rerender() {\n        // No-op\n    }\n}","import { Text } from 'slate';\nimport { SlateLeafContext } from '../context';\nimport { getContentHeight } from '../../utils/dom';\nimport { BaseFlavour } from './base';\n\nexport abstract class BaseLeafFlavour extends BaseFlavour<SlateLeafContext> {\n    placeholderElement: HTMLSpanElement;\n\n    get text(): Text {\n        return this.context && this.context.text;\n    }\n\n    get leaf(): Text {\n        return this.context && this.context.leaf;\n    }\n\n    onInit() {\n        this.render();\n        this.renderPlaceholder();\n        this.initialized = true;\n    }\n\n    onContextChange() {\n        if (!this.initialized) {\n            return;\n        }\n        this.rerender();\n        this.renderPlaceholder();\n    }\n\n    renderPlaceholder() {\n        // issue-1: IME input was interrupted\n        // issue-2: IME input focus jumping\n        // Issue occurs when the span node of the placeholder is before the slateString span node\n        if (this.context.leaf['placeholder']) {\n            if (!this.placeholderElement) {\n                this.createPlaceholder();\n            }\n            this.updatePlaceholder();\n        } else {\n            this.destroyPlaceholder();\n        }\n    }\n\n    createPlaceholder() {\n        const placeholderElement = document.createElement('span');\n        placeholderElement.innerText = this.context.leaf['placeholder'];\n        placeholderElement.contentEditable = 'false';\n        placeholderElement.setAttribute('data-slate-placeholder', 'true');\n        this.placeholderElement = placeholderElement;\n        this.nativeElement.classList.add('leaf-with-placeholder');\n        this.nativeElement.appendChild(placeholderElement);\n\n        setTimeout(() => {\n            const editorElement = this.nativeElement.closest('.the-editor-typo');\n            const editorContentHeight = getContentHeight(editorElement);\n            if (editorContentHeight > 0) {\n                // Not supported webkitLineClamp exceeds height hiding\n                placeholderElement.style.maxHeight = `${editorContentHeight}px`;\n            }\n            const lineClamp = Math.floor(editorContentHeight / this.nativeElement.offsetHeight) || 0;\n            placeholderElement.style.webkitLineClamp = `${Math.max(lineClamp, 1)}`;\n        });\n    }\n\n    updatePlaceholder() {\n        if (this.placeholderElement.innerText !== this.context.leaf['placeholder']) {\n            this.placeholderElement.innerText = this.context.leaf['placeholder'];\n        }\n    }\n\n    destroyPlaceholder() {\n        if (this.placeholderElement) {\n            this.placeholderElement.remove();\n            this.placeholderElement = null;\n            this.nativeElement.classList.remove('leaf-with-placeholder');\n        }\n    }\n\n    onDestroy() {\n        this.nativeElement?.remove();\n    }\n\n    abstract render();\n\n    abstract rerender();\n}\n","import { SlateLeafContext } from '../../view/context';\nimport { SlateViewContext } from '../../view/context';\nimport { Text, Node } from 'slate';\nimport { getZeroTextNode } from '../../utils/dom';\n\nexport enum StringType {\n    'normalString' = 'normalString',\n    'lineBreakEmptyString' = 'lineBreakEmptyString',\n    'normalEmptyText' = 'normalEmptyText',\n    'compatibleString' = 'compatibleString',\n    'voidString' = 'voidString'\n}\n\nexport class SlateStringRender {\n    nativeElement: HTMLElement;\n\n    constructor(\n        public context: SlateLeafContext,\n        public viewContext: SlateViewContext\n    ) {}\n\n    type: StringType;\n\n    // COMPAT: If the text is empty, it's because it's on the edge of an inline\n    // node, so we render a zero-width space so that the selection can be\n    // inserted next to it still.\n    isEmptyText() {\n        return this.context.leaf.text === '';\n    }\n\n    // COMPAT: Browsers will collapse trailing new lines at the end of blocks,\n    // so we need to add an extra trailing new lines to prevent that.\n    isCompatibleString() {\n        return this.context.isLast && this.context.leaf.text.slice(-1) === '\\n';\n    }\n\n    // COMPAT: Render text inside void nodes with a zero-width space.\n    // So the node can contain selection but the text is not visible.\n    isVoid() {\n        return this.viewContext.editor.isVoid(this.context.parent);\n    }\n\n    get leaf(): Text {\n        return this.context && this.context.leaf;\n    }\n\n    // COMPAT: If this is the last text node in an empty block, render a zero-\n    // width space that will convert into a line break when copying and pasting\n    // to support expected plain text.\n    isLineBreakEmptyString() {\n        return (\n            this.context.leaf.text === '' &&\n            this.context.parent.children[this.context.parent.children.length - 1] === this.context.text &&\n            !this.viewContext.editor.isInline(this.context.parent) &&\n            // [list-render] performance optimization: reduce the number of calls to the `Editor.string(editor, path)` method\n            isEmpty(this.viewContext.editor, this.context.parent)\n        );\n    }\n\n    createStringNode(type: StringType) {\n        let newNativeElement: HTMLElement;\n        switch (type) {\n            case StringType.lineBreakEmptyString:\n                newNativeElement = createLineBreakEmptyStringDOM(this.getElementStringLength());\n                break;\n            case StringType.voidString:\n            case StringType.normalEmptyText:\n                newNativeElement = createEmptyOrVoidStringNode();\n                break;\n            case StringType.compatibleString:\n                newNativeElement = createCompatibleStringNode(this.leaf.text);\n                break;\n            case StringType.normalString:\n                newNativeElement = createDefaultStringNode(this.leaf.text);\n                break;\n            default:\n                newNativeElement = createDefaultStringNode(this.leaf.text);\n        }\n        return newNativeElement;\n    }\n\n    render() {\n        this.type = this.getType();\n        this.nativeElement = this.createStringNode(this.type);\n        return this.nativeElement;\n    }\n\n    getType() {\n        if (this.isLineBreakEmptyString()) {\n            return StringType.lineBreakEmptyString;\n        }\n        if (this.isVoid()) {\n            return StringType.voidString;\n        }\n        if (this.isEmptyText()) {\n            return StringType.normalEmptyText;\n        }\n        if (this.isCompatibleString()) {\n            return StringType.compatibleString;\n        }\n        return StringType.normalString;\n    }\n\n    update(context: SlateLeafContext, viewContext: SlateViewContext) {\n        this.context = context;\n        this.viewContext = viewContext;\n        const type = this.getType();\n        if (type !== this.type) {\n            const newNativeElement = this.createStringNode(type);\n            this.nativeElement.replaceWith(newNativeElement);\n            this.nativeElement = newNativeElement;\n            this.type = type;\n            return;\n        }\n        if (this.type === StringType.normalString) {\n            this.nativeElement.textContent = this.leaf.text;\n        }\n        if (this.type === StringType.compatibleString) {\n            updateCompatibleStringNode(this.nativeElement, this.leaf.text);\n        }\n    }\n\n    getElementStringLength() {\n        return Node.string(this.context.parent).length;\n    }\n}\n\nexport const createDefaultStringNode = (text: string) => {\n    const stringNode = document.createElement('span');\n    stringNode.textContent = text;\n    stringNode.setAttribute('data-slate-string', 'true');\n    stringNode.setAttribute('editable-text', '');\n    return stringNode;\n};\n\nexport const createEmptyOrVoidStringNode = () => {\n    const stringNode = document.createElement('span');\n    stringNode.setAttribute('data-slate-string', 'true');\n    stringNode.setAttribute('data-slate-zero-width', 'z');\n    stringNode.setAttribute('data-slate-length', '0');\n    const zeroWidthSpace = getZeroTextNode();\n    stringNode.appendChild(zeroWidthSpace);\n    stringNode.setAttribute('editable-text', '');\n    return stringNode;\n};\n\nexport const createCompatibleStringNode = (text: string) => {\n    const stringNode = document.createElement('span');\n    stringNode.setAttribute('data-slate-string', 'true');\n    stringNode.textContent = text;\n    stringNode.setAttribute('editable-text', '');\n    const zeroWidthSpan = document.createElement('span');\n    const zeroWidthSpace = getZeroTextNode();\n    zeroWidthSpan.setAttribute('data-slate-zero-width', '');\n    zeroWidthSpan.appendChild(zeroWidthSpace);\n    stringNode.appendChild(zeroWidthSpan);\n    return stringNode;\n};\n\nexport const updateCompatibleStringNode = (stringNode: HTMLSpanElement, text: string) => {\n    const zeroWidthSpan = stringNode.querySelector('span');\n    stringNode.textContent = text;\n    stringNode.appendChild(zeroWidthSpan);\n    return stringNode;\n};\n\nexport const createLineBreakEmptyStringDOM = (elementStringLength: number) => {\n    const stringNode = document.createElement('span');\n    stringNode.setAttribute('data-slate-zero-width', 'n');\n    stringNode.setAttribute('data-slate-length', `${elementStringLength}`);\n    const zeroWidthSpace = getZeroTextNode();\n    stringNode.appendChild(zeroWidthSpace);\n    const brNode = document.createElement('br');\n    stringNode.appendChild(brNode);\n    stringNode.setAttribute('editable-text', '');\n    return stringNode;\n};\n\n/**\n * TODO: remove when bump slate\n * copy from slate\n * @param editor\n * @param element\n * @returns\n */\nexport const isEmpty = (editor, element) => {\n    const { children } = element;\n    const [first] = children;\n    return children.length === 0 || (children.length === 1 && Text.isText(first) && first.text === '' && !editor.isVoid(element));\n};\n","import { BaseLeafFlavour } from '../../view/flavour/leaf';\nimport { SlateStringRender } from '../string/string-render';\n\nexport class DefaultLeafFlavour extends BaseLeafFlavour {\n    stringRender: SlateStringRender | null = null;\n\n    render() {\n        const leafNode = createDefaultLeafNode();\n        this.stringRender = new SlateStringRender(this.context, this.viewContext);\n        const stringNode = this.stringRender.render();\n        leafNode.appendChild(stringNode);\n        this.nativeElement = leafNode;\n    }\n\n    rerender() {\n        this.stringRender?.update(this.context, this.viewContext);\n    }\n}\n\nexport const createDefaultLeafNode = () => {\n    const span = document.createElement('span');\n    span.setAttribute('data-slate-leaf', 'true');\n    return span;\n};\n","import { LeafPosition, Text } from 'slate';\nimport { ComponentRef, EmbeddedViewRef, IterableDiffer, IterableDiffers, ViewContainerRef } from '@angular/core';\nimport { ViewType } from '../../types/view';\nimport { SlateLeafContext, SlateTextContext, SlateViewContext } from '../context';\nimport { createEmbeddedViewOrComponentOrFlavour, getRootNodes, mount, mountOnItemChange, updateContext } from './utils';\nimport { FlavourRef } from '../flavour/ref';\nimport { DefaultLeafFlavour } from '../../components/leaf/leaf.flavour';\n\nexport class LeavesRender {\n    private decoratedLeaves: { leaf: Text; position?: LeafPosition }[];\n    private views: (EmbeddedViewRef<any> | ComponentRef<any> | FlavourRef)[] = [];\n    private contexts: SlateLeafContext[] = [];\n    private viewTypes: ViewType[] = [];\n    private differ: IterableDiffer<any>;\n\n    constructor(\n        private viewContext: SlateViewContext,\n        private viewContainerRef: ViewContainerRef,\n        private getOutletParent: () => HTMLElement,\n        private getOutletElement: () => HTMLElement\n    ) {}\n\n    public initialize(context: SlateTextContext) {\n        const { decoratedLeaves, contexts } = this.getLeaves(context);\n        this.decoratedLeaves = decoratedLeaves;\n        this.contexts = contexts;\n        this.decoratedLeaves.forEach((leaf, index) => {\n            const context = getContext(index, this.contexts);\n            const viewType = getViewType(context, this.viewContext);\n            const view = createEmbeddedViewOrComponentOrFlavour(viewType, context, this.viewContext, this.viewContainerRef);\n            this.views.push(view);\n            this.contexts.push(context);\n            this.viewTypes.push(viewType);\n        });\n        mount(this.views, null, this.getOutletParent(), this.getOutletElement());\n        const newDiffers = this.viewContext.editor.injector.get(IterableDiffers);\n        this.differ = newDiffers.find(this.decoratedLeaves).create(trackBy(this.viewContext));\n        this.differ.diff(this.decoratedLeaves);\n    }\n\n    public update(context: SlateTextContext) {\n        const { decoratedLeaves, contexts } = this.getLeaves(context);\n        const outletParent = this.getOutletParent();\n        const diffResult = this.differ.diff(decoratedLeaves);\n        if (diffResult) {\n            let firstRootNode = getRootNodes(this.views[0])[0];\n            const newContexts = [];\n            const newViewTypes = [];\n            const newViews = [];\n            diffResult.forEachItem(record => {\n                let context = getContext(record.currentIndex, contexts);\n                const viewType = getViewType(context, this.viewContext);\n                newViewTypes.push(viewType);\n                let view: EmbeddedViewRef<any> | ComponentRef<any> | FlavourRef;\n                if (record.previousIndex === null) {\n                    view = createEmbeddedViewOrComponentOrFlavour(viewType, context, this.viewContext, this.viewContainerRef);\n                    newContexts.push(context);\n                    newViews.push(view);\n                    mountOnItemChange(record.currentIndex, record.item, newViews, null, outletParent, firstRootNode, this.viewContext);\n                } else {\n                    const previousView = this.views[record.previousIndex];\n                    const previousViewType = this.viewTypes[record.previousIndex];\n                    if (previousViewType !== viewType) {\n                        view = createEmbeddedViewOrComponentOrFlavour(viewType, context, this.viewContext, this.viewContainerRef);\n                        const firstRootNode = getRootNodes(previousView, null)[0];\n                        const newRootNodes = getRootNodes(view, null);\n                        firstRootNode.replaceWith(...newRootNodes);\n                        previousView.destroy();\n                    } else {\n                        view = previousView;\n                        updateContext(previousView, context, this.viewContext);\n                    }\n                    newContexts.push(context);\n                    newViews.push(view);\n                }\n            });\n            diffResult.forEachRemovedItem(record => {\n                const view = this.views[record.previousIndex];\n                view.destroy();\n            });\n            diffResult.forEachMovedItem(record => {\n                mountOnItemChange(record.currentIndex, record.item, newViews, null, outletParent, firstRootNode, this.viewContext);\n            });\n            this.viewTypes = newViewTypes;\n            this.views = newViews;\n            this.contexts = newContexts;\n            this.decoratedLeaves = decoratedLeaves;\n        }\n    }\n\n    private getLeaves(context: SlateTextContext) {\n        const decoratedLeaves = Text.decorations(context.text, context.decorations);\n        const contexts: SlateLeafContext[] = decoratedLeaves.map((decoratedLeaf, index) => {\n            return {\n                leaf: decoratedLeaf.leaf,\n                leafPosition: decoratedLeaf.position,\n                text: context.text,\n                parent: context.parent,\n                index,\n                isLast: context.isLast && index === decoratedLeaves.length - 1\n            };\n        });\n        return { decoratedLeaves, contexts };\n    }\n\n    public destroy() {\n        this.views.forEach(view => view.destroy());\n    }\n}\n\nexport function getContext(index: number, leafContexts: SlateLeafContext[]): SlateLeafContext {\n    return leafContexts[index];\n}\n\nexport function getViewType(leafContext: SlateLeafContext, viewContext: SlateViewContext) {\n    return (viewContext.renderLeaf && viewContext.renderLeaf(leafContext.leaf)) || DefaultLeafFlavour;\n}\n\nexport function trackBy(viewContext: SlateViewContext) {\n    return (index, node) => {\n        return index;\n    };\n}\n","import { SlateTextContext } from '../context';\nimport { LeavesRender } from '../render/leaves-render';\nimport { BaseFlavour } from './base';\nimport { ELEMENT_TO_NODE, NODE_TO_ELEMENT } from 'slate-dom';\nimport { Text } from 'slate';\n\nexport abstract class BaseTextFlavour<T extends Text = Text> extends BaseFlavour<SlateTextContext<T>> {\n    get text(): T {\n        return this._context && this._context.text;\n    }\n\n    leavesRender: LeavesRender;\n\n    getOutletParent = () => {\n        return this.nativeElement;\n    };\n\n    getOutletElement = () => {\n        return this.nativeElement.querySelector('.children-outlet') as HTMLElement | null;\n    };\n\n    onInit() {\n        this.render();\n        this.updateWeakMap();\n        this.initialized = true;\n        this.leavesRender = new LeavesRender(this.viewContext, this.viewContainerRef, this.getOutletParent, this.getOutletElement);\n        this.leavesRender.initialize(this.context);\n    }\n\n    updateWeakMap() {\n        ELEMENT_TO_NODE.set(this.nativeElement, this.text);\n        NODE_TO_ELEMENT.set(this.text, this.nativeElement);\n    }\n\n    onDestroy() {\n        if (NODE_TO_ELEMENT.get(this.text) === this.nativeElement) {\n            NODE_TO_ELEMENT.delete(this.text);\n        }\n        ELEMENT_TO_NODE.delete(this.nativeElement);\n        this.leavesRender.destroy();\n        this.nativeElement?.remove();\n    }\n\n    onContextChange() {\n        if (!this.initialized) {\n            return;\n        }\n        this.rerender();\n        this.updateWeakMap();\n        this.leavesRender.update(this.context);\n    }\n\n    abstract render();\n\n    abstract rerender();\n}\n","import { BaseTextFlavour } from '../../view/flavour/text';\n\nexport class DefaultTextFlavour extends BaseTextFlavour {\n    render() {\n        const { nativeElement } = createText(this.text.text);\n        this.nativeElement = nativeElement;\n    }\n    rerender() {}\n}\n\nexport class VoidTextFlavour extends BaseTextFlavour {\n    render() {\n        const { nativeElement } = createText(this.text.text);\n        this.nativeElement = nativeElement;\n        this.nativeElement.setAttribute('data-slate-spacer', 'true');\n        this.nativeElement.classList.add('slate-spacer');\n    }\n    rerender() {}\n}\n\nexport const createText = (text: string) => {\n    const nativeElement = document.createElement('span');\n    nativeElement.setAttribute('data-slate-node', 'text');\n    return { nativeElement };\n};\n","import { Ancestor, Descendant, Range, Editor, Element, Path } from 'slate';\nimport { ComponentRef, EmbeddedViewRef, IterableDiffer, IterableDiffers, ViewContainerRef } from '@angular/core';\nimport { ViewType } from '../../types/view';\nimport { SlateChildrenContext, SlateElementContext, SlateTextContext, SlateViewContext } from '../context';\nimport { AngularEditor } from '../../plugins/angular-editor';\nimport { SlateErrorCode } from '../../types/error';\nimport { EDITOR_TO_AFTER_VIEW_INIT_QUEUE } from '../../utils/weak-maps';\nimport { isDecoratorRangeListEqual } from '../../utils/range-list';\nimport { createEmbeddedViewOrComponentOrFlavour, getRootNodes, mount, mountOnItemChange, updateContext } from './utils';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from 'slate-dom';\nimport { DefaultElementFlavour } from '../../components/element.flavour';\nimport { DefaultTextFlavour, VoidTextFlavour } from '../../components/text/default-text.flavour';\nimport { BlockCardRef, FlavourRef } from '../flavour/ref';\nimport { SlateBlockCard } from '../../components/block-card/block-card';\nimport {\n    debugLog,\n    EDITOR_TO_ROOT_NODE_WIDTH,\n    getCachedHeightByElement,\n    isDebug,\n    VIRTUAL_TOP_HEIGHT_CLASS_NAME\n} from '../../utils/virtual-scroll';\nimport { hasBeforeDomMove } from '../view-interface';\n\nexport const PRE_RENDERING_ELEMENT_ON_TOP_CLASS = 'pre-rendering-element-on-top';\n\nexport const setPreRenderingElementStyle = (editor: AngularEditor, rootNode: HTMLElement, isClear: boolean = false) => {\n    // if (isClear) {\n    //     rootNode.style.top = '';\n    //     rootNode.style.width = '';\n    //     rootNode.style.position = '';\n    //     rootNode.classList.remove(PRE_RENDERING_ELEMENT_ON_TOP_CLASS);\n    //     return;\n    // }\n    // const preRenderingWidth = EDITOR_TO_ROOT_NODE_WIDTH.get(editor) ?? 0;\n    // rootNode.style.top = '-100%';\n    // if (preRenderingWidth) {\n    //     rootNode.style.width = `${preRenderingWidth}px`;\n    // } else {\n    //     rootNode.style.width = '100%';\n    // }\n    // rootNode.style.position = 'absolute';\n    // rootNode.classList.add(PRE_RENDERING_ELEMENT_ON_TOP_CLASS);\n};\n\nexport const updatePreRenderingElementWidth = (editor: AngularEditor) => {\n    const editorDom = AngularEditor.toDOMNode(editor, editor);\n    const rootNodes = editorDom.querySelectorAll<HTMLElement>(`.${PRE_RENDERING_ELEMENT_ON_TOP_CLASS}`);\n    const preRenderingWidth = EDITOR_TO_ROOT_NODE_WIDTH.get(editor) ?? 0;\n    rootNodes.forEach(rootNode => {\n        if (preRenderingWidth) {\n            rootNode.style.width = `${preRenderingWidth}px`;\n        } else {\n            rootNode.style.width = '100%';\n        }\n    });\n};\n\nexport class ListRender {\n    private children: Descendant[] = [];\n    private views: (EmbeddedViewRef<any> | ComponentRef<any> | FlavourRef)[] = [];\n    private blockCards: (BlockCardRef | null)[] = [];\n    private contexts: (SlateTextContext | SlateElementContext)[] = [];\n    private viewTypes: ViewType[] = [];\n    private differ: IterableDiffer<any> | null = null;\n    public initialized = false;\n    private preRenderingHTMLElement: HTMLElement[][] = [];\n    private virtualTopHeightElement = null;\n\n    constructor(\n        private viewContext: SlateViewContext,\n        private viewContainerRef: ViewContainerRef,\n        private getOutletParent: () => HTMLElement,\n        private getOutletElement: () => HTMLElement | null\n    ) {}\n\n    public initialize(\n        children: Descendant[],\n        parent: Ancestor,\n        childrenContext: SlateChildrenContext,\n        preRenderingCount = 0,\n        childrenIndics?: number[]\n    ) {\n        this.initialized = true;\n        this.children = children;\n        const isRoot = parent === this.viewContext.editor;\n        const firstIndex = isRoot ? this.viewContext.editor.children.indexOf(children[0]) : 0;\n        const parentPath = AngularEditor.findPath(this.viewContext.editor, parent);\n        const getBlockIndex = (index: number) => {\n            if (childrenIndics && childrenIndics[index] !== undefined) {\n                return childrenIndics[index];\n            }\n            return isRoot ? firstIndex + index : index;\n        };\n        children.forEach((descendant, _index) => {\n            const currentIndex = getBlockIndex(_index);\n            NODE_TO_INDEX.set(descendant, currentIndex);\n            NODE_TO_PARENT.set(descendant, parent);\n            const context = getContext(currentIndex, descendant, parentPath, childrenContext, this.viewContext);\n            const viewType = getViewType(descendant, parent, this.viewContext);\n            const view = createEmbeddedViewOrComponentOrFlavour(viewType, context, this.viewContext, this.viewContainerRef);\n            const blockCard = createBlockCard(descendant, view, this.viewContext);\n            this.views.push(view);\n            this.contexts.push(context);\n            this.viewTypes.push(viewType);\n            this.blockCards.push(blockCard);\n        });\n        mount(this.views, this.blockCards, this.getOutletParent(), this.getOutletElement());\n        const newDiffers = this.viewContext.editor.injector.get(IterableDiffers);\n        this.differ = newDiffers.find(children).create(trackBy(this.viewContext));\n        this.differ.diff(children);\n        if (parent === this.viewContext.editor) {\n            executeAfterViewInit(this.viewContext.editor);\n        }\n    }\n\n    public update(\n        children: Descendant[],\n        parent: Ancestor,\n        childrenContext: SlateChildrenContext,\n        preRenderingCount = 0,\n        childrenIndics?: number[]\n    ) {\n        if (!this.initialized || this.children.length === 0) {\n            this.initialize(children, parent, childrenContext, preRenderingCount, childrenIndics);\n            return;\n        }\n        if (!this.differ) {\n            throw new Error('Exception: Can not find differ ');\n        }\n\n        const outletParent = this.getOutletParent();\n        if (this.preRenderingHTMLElement.length > 0) {\n            const preRenderingElement = [...this.preRenderingHTMLElement];\n            let previousRootNode = this.virtualTopHeightElement;\n            preRenderingElement.forEach((rootNodes, index) => {\n                if (hasBeforeDomMove(this.views[index])) {\n                    this.views[index].instance.beforeDomMove('virtual-scroll');\n                }\n                rootNodes.forEach(rootNode => {\n                    setPreRenderingElementStyle(this.viewContext.editor, rootNode, true);\n                    previousRootNode.insertAdjacentElement('afterend', rootNode);\n                    previousRootNode = rootNode;\n                });\n                if (isDebug) {\n                    debugLog(\n                        'log',\n                        'preRenderingHTMLElement index: ',\n                        this.viewContext.editor.children.indexOf(this.children[index]),\n                        'is clear true'\n                    );\n                }\n            });\n            this.preRenderingHTMLElement = [];\n        }\n        const diffResult = this.differ.diff(children);\n        const parentPath = AngularEditor.findPath(this.viewContext.editor, parent);\n        const isRoot = parent === this.viewContext.editor;\n        const firstIndex = isRoot && children.length ? this.viewContext.editor.children.indexOf(children[0]) : 0;\n        const getBlockIndex = (index: number) => {\n            if (childrenIndics && childrenIndics[index] !== undefined) {\n                return childrenIndics[index];\n            }\n            return isRoot ? firstIndex + index : index;\n        };\n        if (diffResult) {\n            let firstRootNode = getRootNodes(this.views[0], this.blockCards[0])[0];\n            const newContexts = [];\n            const newViewTypes = [];\n            const newViews = [];\n            const newBlockCards: (BlockCardRef | null)[] = [];\n            diffResult.forEachItem(record => {\n                const currentIndex = getBlockIndex(record.currentIndex);\n                NODE_TO_INDEX.set(record.item, currentIndex);\n                NODE_TO_PARENT.set(record.item, parent);\n                let context = getContext(currentIndex, record.item, parentPath, childrenContext, this.viewContext);\n                const viewType = getViewType(record.item, parent, this.viewContext);\n                newViewTypes.push(viewType);\n                let view: EmbeddedViewRef<any> | ComponentRef<any> | FlavourRef;\n                let blockCard: BlockCardRef | null;\n                if (record.previousIndex === null) {\n                    view = createEmbeddedViewOrComponentOrFlavour(viewType, context, this.viewContext, this.viewContainerRef);\n                    blockCard = createBlockCard(record.item, view, this.viewContext);\n                    newContexts.push(context);\n                    newViews.push(view);\n                    newBlockCards.push(blockCard);\n                    mountOnItemChange(\n                        record.currentIndex,\n                        record.item,\n                        newViews,\n                        newBlockCards,\n                        outletParent,\n                        firstRootNode,\n                        this.viewContext\n                    );\n                } else {\n                    const previousView = this.views[record.previousIndex];\n                    const previousViewType = this.viewTypes[record.previousIndex];\n                    const previousContext = this.contexts[record.previousIndex];\n                    const previousBlockCard = this.blockCards[record.previousIndex];\n                    if (previousViewType !== viewType) {\n                        view = createEmbeddedViewOrComponentOrFlavour(viewType, context, this.viewContext, this.viewContainerRef);\n                        blockCard = createBlockCard(record.item, view, this.viewContext);\n                        const firstRootNode = getRootNodes(previousView, previousBlockCard)[0];\n                        const newRootNodes = getRootNodes(view, blockCard);\n                        firstRootNode.replaceWith(...newRootNodes);\n                        previousView.destroy();\n                        previousBlockCard?.destroy();\n                    } else {\n                        view = previousView;\n                        blockCard = previousBlockCard;\n                        if (memoizedContext(this.viewContext, record.item, previousContext as any, context as any)) {\n                            context = previousContext;\n                        } else {\n                            updateContext(previousView, context, this.viewContext);\n                        }\n                    }\n                    newContexts.push(context);\n                    newViews.push(view);\n                    newBlockCards.push(blockCard);\n                }\n            });\n            diffResult.forEachOperation(record => {\n                // removed\n                if (record.currentIndex === null) {\n                    const view = this.views[record.previousIndex];\n                    const blockCard = this.blockCards[record.previousIndex];\n                    view.destroy();\n                    blockCard?.destroy();\n                }\n                // moved\n                if (record.previousIndex !== null && record.currentIndex !== null) {\n                    mountOnItemChange(\n                        record.currentIndex,\n                        record.item,\n                        newViews,\n                        newBlockCards,\n                        outletParent,\n                        firstRootNode,\n                        this.viewContext\n                    );\n                    // Solve the block-card DOMElement loss when moving nodes\n                    newBlockCards[record.currentIndex]?.instance.append();\n                }\n            });\n            this.viewTypes = newViewTypes;\n            this.views = newViews;\n            this.contexts = newContexts;\n            this.children = children;\n            this.blockCards = newBlockCards;\n            if (parent === this.viewContext.editor) {\n                executeAfterViewInit(this.viewContext.editor);\n            }\n        } else {\n            const newContexts = [];\n            this.children.forEach((child, _index) => {\n                const currentIndex = getBlockIndex(_index);\n                NODE_TO_INDEX.set(child, currentIndex);\n                NODE_TO_PARENT.set(child, parent);\n                let context = getContext(currentIndex, child, parentPath, childrenContext, this.viewContext);\n                const previousContext = this.contexts[_index];\n                if (memoizedContext(this.viewContext, child, previousContext as any, context as any)) {\n                    context = previousContext;\n                } else {\n                    updateContext(this.views[_index], context, this.viewContext);\n                }\n                newContexts.push(context);\n            });\n            this.contexts = newContexts;\n        }\n        if (preRenderingCount > 0) {\n            for (let i = 0; i < preRenderingCount; i++) {\n                const rootNodes = [...getRootNodes(this.views[i], this.blockCards[i])];\n                rootNodes.forEach(rootNode => {\n                    setPreRenderingElementStyle(this.viewContext.editor, rootNode);\n                });\n                this.preRenderingHTMLElement.push(rootNodes);\n                if (!this.virtualTopHeightElement) {\n                    this.virtualTopHeightElement = rootNodes[0].parentElement.querySelector(`.${VIRTUAL_TOP_HEIGHT_CLASS_NAME}`);\n                }\n                this.virtualTopHeightElement.append(...rootNodes);\n                if (isDebug) {\n                    debugLog('log', 'preRenderingHTMLElement index: ', this.viewContext.editor.children.indexOf(children[i]));\n                }\n            }\n        }\n        if (isDebug && isRoot) {\n            for (let i = 0; i < children.length; i++) {\n                const rootNodes = [...getRootNodes(this.views[i], this.blockCards[i])];\n                const index = this.viewContext.editor.children.indexOf(children[i]);\n                const height =\n                    getCachedHeightByElement(this.viewContext.editor, children[i] as Element) ||\n                    this.viewContext.editor.getRoughHeight(children[i] as Element);\n                rootNodes.forEach(rootNode => {\n                    rootNode.setAttribute('debug-index', index.toString());\n                    rootNode.setAttribute('debug-height', height?.toString());\n                    const isFloating = this.viewContext.editor.isFloating(children[i] as Element);\n                    if (isFloating) {\n                        rootNode.setAttribute('debug-floating', 'true');\n                    } else {\n                        rootNode.removeAttribute('debug-floating');\n                    }\n                });\n            }\n        }\n    }\n\n    public destroy() {\n        this.children.forEach((element: Element, index: number) => {\n            if (this.views[index]) {\n                this.views[index].destroy();\n            }\n            if (this.blockCards[index]) {\n                this.blockCards[index].destroy();\n            }\n        });\n        this.children = [];\n        this.views = [];\n        this.blockCards = [];\n        this.contexts = [];\n        this.viewTypes = [];\n        this.initialized = false;\n        this.differ = null;\n    }\n}\n\nexport function getContext(\n    index: number,\n    item: Descendant,\n    parentPath: Path,\n    childrenContext: SlateChildrenContext,\n    viewContext: SlateViewContext\n): SlateElementContext | SlateTextContext {\n    if (Element.isElement(item)) {\n        const computedContext = getCommonContext(index, item, parentPath, viewContext, childrenContext);\n        const key = AngularEditor.findKey(viewContext.editor, item);\n        const isInline = viewContext.editor.isInline(item);\n        const isVoid = viewContext.editor.isVoid(item);\n        const elementContext: SlateElementContext = {\n            element: item,\n            ...computedContext,\n            attributes: {\n                'data-slate-node': 'element',\n                'data-slate-key': key.id\n            },\n            decorate: childrenContext.decorate,\n            readonly: childrenContext.readonly\n        };\n        if (isInline) {\n            elementContext.attributes['data-slate-inline'] = true;\n        }\n        if (isVoid) {\n            elementContext.attributes['data-slate-void'] = true;\n        }\n        // add contentEditable for block element only to avoid chinese input be broken\n        if (isVoid && !isInline) {\n            elementContext.contentEditable = false;\n        }\n        return elementContext;\n    } else {\n        const computedContext = getCommonContext(index, item, parentPath, viewContext, childrenContext);\n        const isLeafBlock = AngularEditor.isLeafBlock(viewContext.editor, childrenContext.parent);\n        const textContext: SlateTextContext = {\n            decorations: computedContext.decorations,\n            isLast: isLeafBlock && index === childrenContext.parent.children.length - 1,\n            parent: childrenContext.parent as Element,\n            text: item\n        };\n        return textContext;\n    }\n}\n\nexport function getCommonContext(\n    index: number,\n    item: Descendant,\n    parentPath: Path,\n    viewContext: SlateViewContext,\n    childrenContext: SlateChildrenContext\n): { selection: Range; decorations: Range[] } {\n    const p = parentPath.concat(index);\n    try {\n        const ds = childrenContext.decorate([item, p]);\n        // [list-render] performance optimization: reduce the number of calls to the `Editor.range(viewContext.editor, p)` method\n        if (childrenContext.selection || childrenContext.decorations.length > 0) {\n            const range = Editor.range(viewContext.editor, p);\n            const sel = childrenContext.selection && Range.intersection(range, childrenContext.selection);\n            for (const dec of childrenContext.decorations) {\n                const d = Range.intersection(dec, range);\n                if (d) {\n                    ds.push(d);\n                }\n            }\n            return { selection: sel, decorations: ds };\n        } else {\n            return { selection: null, decorations: ds };\n        }\n    } catch (error) {\n        viewContext.editor.onError({\n            code: SlateErrorCode.GetStartPointError,\n            nativeError: error\n        });\n        return { selection: null, decorations: [] };\n    }\n}\n\nexport function getViewType(item: Descendant, parent: Ancestor, viewContext: SlateViewContext) {\n    if (Element.isElement(item)) {\n        return (viewContext.renderElement && viewContext.renderElement(item)) || DefaultElementFlavour;\n    } else {\n        const isVoid = viewContext.editor.isVoid(parent as Element);\n        return isVoid ? VoidTextFlavour : (viewContext.renderText && viewContext.renderText(item)) || DefaultTextFlavour;\n    }\n}\n\nexport function createBlockCard(\n    item: Descendant,\n    view: EmbeddedViewRef<any> | ComponentRef<any> | FlavourRef,\n    viewContext: SlateViewContext\n) {\n    const isBlockCard = viewContext.editor.isBlockCard(item);\n    if (isBlockCard) {\n        const rootNodes = getRootNodes(view);\n        const blockCardRef = new BlockCardRef();\n        blockCardRef.instance = new SlateBlockCard();\n        blockCardRef.instance.onInit();\n        blockCardRef.instance.initializeCenter(rootNodes);\n        return blockCardRef;\n    } else {\n        return null;\n    }\n}\n\nexport function trackBy(viewContext: SlateViewContext) {\n    return (index, node) => {\n        return viewContext.trackBy(node) || AngularEditor.findKey(viewContext.editor, node);\n    };\n}\n\nexport function memoizedContext(\n    viewContext: SlateViewContext,\n    descendant: Descendant,\n    prev: SlateElementContext | SlateTextContext,\n    next: SlateElementContext | SlateTextContext\n): boolean {\n    if (Element.isElement(descendant)) {\n        return memoizedElementContext(viewContext, prev as SlateElementContext, next as SlateElementContext);\n    } else {\n        return memoizedTextContext(prev as SlateTextContext, next as SlateTextContext);\n    }\n}\n\nexport function memoizedElementContext(viewContext: SlateViewContext, prev: SlateElementContext, next: SlateElementContext) {\n    return (\n        prev.element === next.element &&\n        (!viewContext.isStrictDecorate || prev.decorate === next.decorate) &&\n        prev.readonly === next.readonly &&\n        isDecoratorRangeListEqual(prev.decorations, next.decorations) &&\n        (prev.selection === next.selection || (!!prev.selection && !!next.selection && Range.equals(prev.selection, next.selection)))\n    );\n}\n\nexport function memoizedTextContext(prev: SlateTextContext, next: SlateTextContext) {\n    return (\n        next.parent === prev.parent &&\n        next.isLast === prev.isLast &&\n        next.text === prev.text &&\n        isDecoratorRangeListEqual(next.decorations, prev.decorations)\n    );\n}\n\nexport function addAfterViewInitQueue(editor: Editor, afterViewInitCallback: () => void) {\n    const queue = getAfterViewInitQueue(editor);\n    queue.push(afterViewInitCallback);\n    EDITOR_TO_AFTER_VIEW_INIT_QUEUE.set(editor, queue);\n}\n\nexport function getAfterViewInitQueue(editor: Editor) {\n    return EDITOR_TO_AFTER_VIEW_INIT_QUEUE.get(editor) || [];\n}\n\nexport function clearAfterViewInitQueue(editor: Editor) {\n    EDITOR_TO_AFTER_VIEW_INIT_QUEUE.set(editor, []);\n}\n\nexport function executeAfterViewInit(editor: Editor) {\n    const queue = getAfterViewInitQueue(editor);\n    queue.forEach(callback => callback());\n    clearAfterViewInitQueue(editor);\n}\n","import {\n    AfterViewChecked,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    ElementRef,\n    forwardRef,\n    HostBinding,\n    inject,\n    Injector,\n    Input,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Renderer2,\n    SimpleChanges,\n    ViewContainerRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { direction } from 'direction';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { debounceTime, filter, Subject, tap } from 'rxjs';\nimport scrollIntoView from 'scroll-into-view-if-needed';\nimport { Descendant, Editor, Element, Node, NodeEntry, Path, Range, Selection, Text as SlateText, Transforms } from 'slate';\nimport {\n    DOMElement,\n    DOMRange,\n    DOMSelection,\n    DOMStaticRange,\n    EDITOR_TO_ELEMENT,\n    EDITOR_TO_ON_CHANGE,\n    EDITOR_TO_WINDOW,\n    ELEMENT_TO_NODE,\n    getDefaultView,\n    IS_FOCUSED,\n    IS_READ_ONLY,\n    isDOMElement,\n    isDOMNode,\n    isPlainTextOnlyPaste,\n    NODE_TO_ELEMENT,\n    TRIPLE_CLICK\n} from 'slate-dom';\nimport { HistoryEditor } from 'slate-history';\nimport { BeforeInputEvent, extractBeforeInputEvent } from '../../custom-event/BeforeInputEventPlugin';\nimport { BEFORE_INPUT_EVENTS } from '../../custom-event/before-input-polyfill';\nimport { AngularEditor } from '../../plugins/angular-editor';\nimport { SlateVirtualScrollConfig, VirtualViewResult } from '../../types';\nimport { SlateErrorCode } from '../../types/error';\nimport { SlatePlaceholder } from '../../types/feature';\nimport { ViewType } from '../../types/view';\nimport {\n    buildHeightsAndAccumulatedHeights,\n    EDITOR_TO_VIRTUAL_SCROLL_SELECTION,\n    ELEMENT_KEY_TO_HEIGHTS,\n    getBusinessTop,\n    isDebug,\n    isDebugScrollTop,\n    isDecoratorRangeListEqual,\n    measureHeightByIndics,\n    roundTo\n} from '../../utils';\nimport { HAS_BEFORE_INPUT_SUPPORT, IS_ANDROID, IS_CHROME, IS_FIREFOX, IS_SAFARI } from '../../utils/environment';\nimport Hotkeys from '../../utils/hotkeys';\nimport { restoreDom } from '../../utils/restore-dom';\nimport {\n    calcBusinessTop,\n    calculateAccumulatedTopHeight,\n    debugLog,\n    EDITOR_TO_IS_FROM_SCROLL_TO,\n    EDITOR_TO_ROOT_NODE_WIDTH,\n    EDITOR_TO_VIEWPORT_HEIGHT,\n    EDITOR_TO_VIRTUAL_SCROLL_CONFIG,\n    getCachedHeightByElement,\n    getViewportHeight,\n    isDebugUpdate,\n    VIRTUAL_BOTTOM_HEIGHT_CLASS_NAME,\n    VIRTUAL_CENTER_OUTLET_CLASS_NAME,\n    VIRTUAL_TOP_HEIGHT_CLASS_NAME\n} from '../../utils/virtual-scroll';\nimport { SlateChildrenContext, SlateViewContext } from '../../view/context';\nimport { ListRender, updatePreRenderingElementWidth } from '../../view/render/list-render';\n\n// not correctly clipboardData on beforeinput\nconst forceOnDOMPaste = IS_SAFARI;\n\nclass RemeasureConfig {\n    indics: number[];\n    tryUpdateViewport: boolean;\n}\n\n@Component({\n    selector: 'slate-editable',\n    host: {\n        class: 'slate-editable-container',\n        '[attr.contenteditable]': 'readonly ? undefined : true',\n        '[attr.role]': `readonly ? undefined : 'textbox'`,\n        '[attr.spellCheck]': `!hasBeforeInputSupport ? false : spellCheck`,\n        '[attr.autoCorrect]': `!hasBeforeInputSupport ? 'false' : autoCorrect`,\n        '[attr.autoCapitalize]': `!hasBeforeInputSupport ? 'false' : autoCapitalize`\n    },\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => SlateEditable),\n            multi: true\n        }\n    ],\n    imports: []\n})\nexport class SlateEditable implements OnInit, OnChanges, OnDestroy, AfterViewChecked, DoCheck {\n    viewContext: SlateViewContext;\n    context: SlateChildrenContext;\n\n    private destroy$ = new Subject();\n\n    isComposing = false;\n    isDraggingInternally = false;\n    isUpdatingSelection = false;\n    latestElement = null as DOMElement | null;\n\n    protected manualListeners: (() => void)[] = [];\n\n    private initialized: boolean;\n\n    private onTouchedCallback: () => void = () => {};\n\n    private onChangeCallback: (_: any) => void = () => {};\n\n    @Input() editor: AngularEditor;\n\n    @Input() renderElement: (element: Element) => ViewType | null;\n\n    @Input() renderLeaf: (text: SlateText) => ViewType | null;\n\n    @Input() renderText: (text: SlateText) => ViewType | null;\n\n    @Input() decorate: (entry: NodeEntry) => Range[] = () => [];\n\n    @Input() placeholderDecorate: (editor: Editor) => SlatePlaceholder[];\n\n    @Input() scrollSelectionIntoView: (editor: AngularEditor, domRange: DOMRange) => void = defaultScrollSelectionIntoView;\n\n    @Input() isStrictDecorate: boolean = true;\n\n    @Input() trackBy: (node: Element) => any = () => null;\n\n    @Input() readonly = false;\n\n    @Input() placeholder: string;\n\n    @Input()\n    set virtualScroll(config: SlateVirtualScrollConfig) {\n        this.virtualScrollConfig = config;\n        EDITOR_TO_VIRTUAL_SCROLL_CONFIG.set(this.editor, config);\n        if (isDebugScrollTop) {\n            debugLog('log', 'virtualScrollConfig scrollTop:', config.scrollTop);\n        }\n        if (this.isEnabledVirtualScroll()) {\n            this.tryUpdateVirtualViewport();\n        }\n    }\n\n    //#region input event handler\n    @Input() beforeInput: (event: Event) => void;\n    @Input() blur: (event: Event) => void;\n    @Input() click: (event: MouseEvent) => void;\n    @Input() compositionEnd: (event: CompositionEvent) => void;\n    @Input() compositionUpdate: (event: CompositionEvent) => void;\n    @Input() compositionStart: (event: CompositionEvent) => void;\n    @Input() copy: (event: ClipboardEvent) => void;\n    @Input() cut: (event: ClipboardEvent) => void;\n    @Input() dragOver: (event: DragEvent) => void;\n    @Input() dragStart: (event: DragEvent) => void;\n    @Input() dragEnd: (event: DragEvent) => void;\n    @Input() drop: (event: DragEvent) => void;\n    @Input() focus: (event: Event) => void;\n    @Input() keydown: (event: KeyboardEvent) => void;\n    @Input() paste: (event: ClipboardEvent) => void;\n    //#endregion\n\n    //#region DOM attr\n    @Input() spellCheck = false;\n    @Input() autoCorrect = false;\n    @Input() autoCapitalize = false;\n\n    @HostBinding('attr.data-slate-editor') dataSlateEditor = true;\n    @HostBinding('attr.data-slate-node') dataSlateNode = 'value';\n    @HostBinding('attr.data-gramm') dataGramm = false;\n\n    get hasBeforeInputSupport() {\n        return HAS_BEFORE_INPUT_SUPPORT;\n    }\n    //#endregion\n\n    viewContainerRef = inject(ViewContainerRef);\n\n    getOutletParent = () => {\n        return this.elementRef.nativeElement;\n    };\n\n    getOutletElement = () => {\n        if (this.virtualScrollInitialized) {\n            return this.virtualCenterOutlet;\n        } else {\n            return null;\n        }\n    };\n\n    listRender: ListRender;\n\n    private virtualScrollConfig: SlateVirtualScrollConfig = {\n        enabled: false,\n        scrollTop: 0,\n        scrollContainer: null\n    };\n\n    private inViewportChildren: Element[] = [];\n    private inViewportIndics: number[] = [];\n    private keyHeightMap = new Map<string, number>();\n    private tryUpdateVirtualViewportAnimId: number;\n    private editorResizeObserver?: ResizeObserver;\n    private editorScrollContainerResizeObserver?: ResizeObserver;\n\n    indicsOfNeedRemeasured$ = new Subject<RemeasureConfig>();\n\n    virtualScrollInitialized = false;\n\n    virtualTopHeightElement: HTMLElement;\n\n    virtualBottomHeightElement: HTMLElement;\n\n    virtualCenterOutlet: HTMLElement;\n\n    elementRef = inject(ElementRef);\n    renderer2 = inject(Renderer2);\n    cdr = inject(ChangeDetectorRef);\n    ngZone = inject(NgZone);\n    injector = inject(Injector);\n\n    constructor() {}\n\n    ngOnInit() {\n        this.editor.injector = this.injector;\n        this.editor.children = [];\n        let window = getDefaultView(this.elementRef.nativeElement);\n        EDITOR_TO_WINDOW.set(this.editor, window);\n        EDITOR_TO_ELEMENT.set(this.editor, this.elementRef.nativeElement);\n        NODE_TO_ELEMENT.set(this.editor, this.elementRef.nativeElement);\n        ELEMENT_TO_NODE.set(this.elementRef.nativeElement, this.editor);\n        IS_READ_ONLY.set(this.editor, this.readonly);\n        ELEMENT_KEY_TO_HEIGHTS.set(this.editor, this.keyHeightMap);\n        EDITOR_TO_ON_CHANGE.set(this.editor, () => {\n            this.ngZone.run(() => {\n                this.onChange();\n            });\n        });\n        this.ngZone.runOutsideAngular(() => {\n            this.initialize();\n        });\n        this.initializeViewContext();\n        this.initializeContext();\n        // add browser class\n        let browserClass = IS_FIREFOX ? 'firefox' : IS_SAFARI ? 'safari' : '';\n        browserClass && this.elementRef.nativeElement.classList.add(browserClass);\n        this.initializeVirtualScroll();\n        this.listRender = new ListRender(this.viewContext, this.viewContainerRef, this.getOutletParent, this.getOutletElement);\n    }\n\n    ngOnChanges(simpleChanges: SimpleChanges) {\n        if (!this.initialized) {\n            return;\n        }\n        const decorateChange = simpleChanges['decorate'];\n        if (decorateChange) {\n            this.forceRender();\n        }\n        const placeholderChange = simpleChanges['placeholder'];\n        if (placeholderChange) {\n            this.render();\n        }\n        const readonlyChange = simpleChanges['readonly'];\n        if (readonlyChange) {\n            IS_READ_ONLY.set(this.editor, this.readonly);\n            this.render();\n            this.toSlateSelection();\n        }\n    }\n\n    registerOnChange(fn: any) {\n        this.onChangeCallback = fn;\n    }\n    registerOnTouched(fn: any) {\n        this.onTouchedCallback = fn;\n    }\n\n    writeValue(value: Element[]) {\n        if (value && value.length) {\n            this.editor.children = value;\n            this.initializeContext();\n            if (this.isEnabledVirtualScroll()) {\n                const previousInViewportChildren = [...this.inViewportChildren];\n                const visibleStates = this.editor.getAllVisibleStates();\n                const virtualView = this.calculateVirtualViewport(visibleStates);\n                this.applyVirtualView(virtualView);\n                const childrenForRender = virtualView.inViewportChildren;\n                if (isDebug) {\n                    debugLog('log', 'writeValue calculate: ', virtualView.inViewportIndics, 'initialized: ', this.listRender.initialized);\n                }\n                if (!this.listRender.initialized) {\n                    this.listRender.initialize(childrenForRender, this.editor, this.context, 0, virtualView.inViewportIndics);\n                } else {\n                    const { preRenderingCount, childrenWithPreRendering, childrenWithPreRenderingIndics } =\n                        this.appendPreRenderingToViewport(visibleStates);\n                    if (isDebugUpdate) {\n                        debugLog('log', 'writeValue update list render');\n                    }\n                    this.listRender.update(\n                        childrenWithPreRendering,\n                        this.editor,\n                        this.context,\n                        preRenderingCount,\n                        childrenWithPreRenderingIndics\n                    );\n                }\n                const remeasureIndics = this.getChangedIndics(previousInViewportChildren);\n                if (remeasureIndics.length) {\n                    this.indicsOfNeedRemeasured$.next({ indics: remeasureIndics, tryUpdateViewport: true });\n                }\n            } else {\n                if (!this.listRender.initialized) {\n                    this.listRender.initialize(this.editor.children, this.editor, this.context);\n                } else {\n                    this.listRender.update(this.editor.children, this.editor, this.context);\n                }\n            }\n            this.cdr.markForCheck();\n        }\n    }\n\n    initialize() {\n        this.initialized = true;\n        const window = AngularEditor.getWindow(this.editor);\n        this.addEventListener(\n            'selectionchange',\n            event => {\n                this.toSlateSelection();\n            },\n            window.document\n        );\n        if (HAS_BEFORE_INPUT_SUPPORT) {\n            this.addEventListener('beforeinput', this.onDOMBeforeInput.bind(this));\n        }\n        this.addEventListener('blur', this.onDOMBlur.bind(this));\n        this.addEventListener('click', this.onDOMClick.bind(this));\n        this.addEventListener('compositionend', this.onDOMCompositionEnd.bind(this));\n        this.addEventListener('compositionupdate', this.onDOMCompositionUpdate.bind(this));\n        this.addEventListener('compositionstart', this.onDOMCompositionStart.bind(this));\n        this.addEventListener('copy', this.onDOMCopy.bind(this));\n        this.addEventListener('cut', this.onDOMCut.bind(this));\n        this.addEventListener('dragover', this.onDOMDragOver.bind(this));\n        this.addEventListener('dragstart', this.onDOMDragStart.bind(this));\n        this.addEventListener('dragend', this.onDOMDragEnd.bind(this));\n        this.addEventListener('drop', this.onDOMDrop.bind(this));\n        this.addEventListener('focus', this.onDOMFocus.bind(this));\n        this.addEventListener('keydown', this.onDOMKeydown.bind(this));\n        this.addEventListener('paste', this.onDOMPaste.bind(this));\n        BEFORE_INPUT_EVENTS.forEach(event => {\n            this.addEventListener(event.name, () => {});\n        });\n    }\n\n    private isEnabledVirtualScroll() {\n        return !!(this.virtualScrollConfig && this.virtualScrollConfig.enabled);\n    }\n\n    initializeVirtualScroll() {\n        if (this.virtualScrollInitialized) {\n            return;\n        }\n        if (this.isEnabledVirtualScroll()) {\n            this.virtualScrollInitialized = true;\n            this.virtualTopHeightElement = document.createElement('div');\n            this.virtualTopHeightElement.classList.add(VIRTUAL_TOP_HEIGHT_CLASS_NAME);\n            this.virtualTopHeightElement.contentEditable = 'false';\n            this.virtualBottomHeightElement = document.createElement('div');\n            this.virtualBottomHeightElement.classList.add(VIRTUAL_BOTTOM_HEIGHT_CLASS_NAME);\n            this.virtualBottomHeightElement.contentEditable = 'false';\n            this.virtualCenterOutlet = document.createElement('div');\n            this.virtualCenterOutlet.classList.add(VIRTUAL_CENTER_OUTLET_CLASS_NAME);\n            this.elementRef.nativeElement.appendChild(this.virtualTopHeightElement);\n            this.elementRef.nativeElement.appendChild(this.virtualCenterOutlet);\n            this.elementRef.nativeElement.appendChild(this.virtualBottomHeightElement);\n            let editorResizeObserverRectWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n            EDITOR_TO_ROOT_NODE_WIDTH.set(this.editor, this.virtualTopHeightElement.offsetWidth);\n            this.editorResizeObserver = new ResizeObserver(entries => {\n                if (entries.length > 0 && entries[0].contentRect.width !== editorResizeObserverRectWidth) {\n                    editorResizeObserverRectWidth = entries[0].contentRect.width;\n                    this.keyHeightMap.clear();\n                    let target = this.virtualTopHeightElement;\n                    if (this.inViewportChildren[0]) {\n                        const firstElement = this.inViewportChildren[0];\n                        const firstDomElement = AngularEditor.toDOMNode(this.editor, firstElement);\n                        target = firstDomElement;\n                    }\n                    EDITOR_TO_ROOT_NODE_WIDTH.set(this.editor, target.offsetWidth);\n                    updatePreRenderingElementWidth(this.editor);\n                    if (isDebug) {\n                        debugLog(\n                            'log',\n                            'editorResizeObserverRectWidth: ',\n                            editorResizeObserverRectWidth,\n                            'EDITOR_TO_ROOT_NODE_WIDTH: ',\n                            EDITOR_TO_ROOT_NODE_WIDTH.get(this.editor)\n                        );\n                    }\n                }\n            });\n            this.editorResizeObserver.observe(this.elementRef.nativeElement);\n            if (this.virtualScrollConfig.scrollContainer) {\n                this.editorScrollContainerResizeObserver = new ResizeObserver(entries => {\n                    const height = this.virtualScrollConfig.scrollContainer.getBoundingClientRect().height;\n                    EDITOR_TO_VIEWPORT_HEIGHT.set(this.editor, height);\n                    if (isDebug) {\n                        debugLog('log', 'editorScrollContainerResizeObserver calc viewport height: ', height);\n                        this.virtualTopHeightElement.setAttribute('viewport-height', height.toString());\n                    }\n                });\n                this.editorScrollContainerResizeObserver.observe(this.virtualScrollConfig.scrollContainer);\n            }\n\n            let pendingRemeasureIndics: number[] = [];\n            this.indicsOfNeedRemeasured$\n                .pipe(\n                    tap((previousValue: RemeasureConfig) => {\n                        previousValue.indics.forEach((index: number) => {\n                            if (!pendingRemeasureIndics.includes(index)) {\n                                pendingRemeasureIndics.push(index);\n                            }\n                        });\n                    }),\n                    debounceTime(500),\n                    filter(() => pendingRemeasureIndics.length > 0)\n                )\n                .subscribe((previousValue: RemeasureConfig) => {\n                    const changed = measureHeightByIndics(this.editor, pendingRemeasureIndics, 'data-changed');\n                    if (changed) {\n                        if (previousValue.tryUpdateViewport) {\n                            this.tryUpdateVirtualViewport();\n                            if (isDebug) {\n                                debugLog(\n                                    'log',\n                                    'exist pendingRemeasureIndics: ',\n                                    pendingRemeasureIndics,\n                                    'will try to update virtual viewport'\n                                );\n                            }\n                        }\n                    }\n                    pendingRemeasureIndics = [];\n                });\n        }\n    }\n\n    getChangedIndics(previousValue: Descendant[]) {\n        const remeasureIndics = [];\n        this.inViewportChildren.forEach((child, index) => {\n            if (previousValue.indexOf(child) === -1) {\n                remeasureIndics.push(this.inViewportIndics[index]);\n            }\n        });\n        return remeasureIndics;\n    }\n\n    setVirtualSpaceHeight(topHeight: number, bottomHeight?: number) {\n        if (!this.virtualScrollInitialized) {\n            return;\n        }\n        this.virtualTopHeightElement.style.height = `${roundTo(topHeight, 1)}px`;\n        if (bottomHeight !== undefined) {\n            this.virtualBottomHeightElement.style.height = `${roundTo(bottomHeight, 1)}px`;\n        }\n    }\n\n    setTopHeightDebugInfo(accumulatedHeight: number, accumulatedEndIndex: number) {\n        if (isDebug) {\n            this.virtualTopHeightElement.setAttribute('accumulated-height', accumulatedHeight.toString());\n            this.virtualTopHeightElement.setAttribute('accumulated-height-end-index', accumulatedEndIndex.toString());\n        }\n    }\n\n    getActualVirtualTopHeight() {\n        if (!this.virtualScrollInitialized) {\n            return 0;\n        }\n        const rect = this.virtualTopHeightElement.getBoundingClientRect();\n        return roundTo(rect.height, 1);\n    }\n\n    appendPreRenderingToViewport(visibleStates: boolean[]) {\n        let preRenderingCount = 0;\n        const childrenWithPreRendering = [...this.inViewportChildren];\n        const childrenWithPreRenderingIndics = [...this.inViewportIndics];\n        const firstIndex = this.inViewportIndics[0];\n        for (let index = firstIndex - 1; index >= 0; index--) {\n            const element = this.editor.children[index] as Element;\n            if (visibleStates[index]) {\n                childrenWithPreRendering.unshift(element);\n                childrenWithPreRenderingIndics.unshift(index);\n                preRenderingCount = 1;\n                break;\n            }\n        }\n        const lastIndex = this.inViewportIndics[this.inViewportIndics.length - 1];\n        for (let index = lastIndex + 1; index < this.editor.children.length; index++) {\n            const element = this.editor.children[index] as Element;\n            if (visibleStates[index]) {\n                childrenWithPreRendering.push(element);\n                childrenWithPreRenderingIndics.push(index);\n                break;\n            }\n        }\n        return { preRenderingCount, childrenWithPreRendering, childrenWithPreRenderingIndics };\n    }\n\n    calculateIndicsStartAndEndBySelection() {\n        if (!this.editor.selection) {\n            return;\n        }\n        const isBackward = Range.isBackward(this.editor.selection);\n        const anchorIndex = this.editor.selection.anchor.path[0];\n        const focusIndex = this.editor.selection.focus.path[0];\n        let minStartIndex = anchorIndex;\n        let minEndIndex = focusIndex;\n        if (isBackward) {\n            minStartIndex = focusIndex;\n            minEndIndex = anchorIndex;\n        }\n        if (minStartIndex < this.inViewportIndics[0]) {\n            minStartIndex = this.inViewportIndics[0];\n        }\n        if (minEndIndex > this.inViewportIndics[this.inViewportIndics.length - 1]) {\n            minEndIndex = this.inViewportIndics[this.inViewportIndics.length - 1];\n        }\n        return { minStartIndex, minEndIndex };\n    }\n\n    private tryUpdateVirtualViewport() {\n        if (isDebug) {\n            debugLog('log', 'tryUpdateVirtualViewport');\n        }\n        const isFromScrollTo = EDITOR_TO_IS_FROM_SCROLL_TO.get(this.editor);\n        if (this.inViewportIndics.length > 0 && !isFromScrollTo) {\n            const realTopHeight = this.getActualVirtualTopHeight();\n            const visibleStates = this.editor.getAllVisibleStates();\n            const accumulateTopHeigh = calculateAccumulatedTopHeight(this.editor, this.inViewportIndics[0], visibleStates);\n            this.setTopHeightDebugInfo(accumulateTopHeigh, this.inViewportIndics[0] - 1);\n            if (realTopHeight !== accumulateTopHeigh && Math.abs(realTopHeight - accumulateTopHeigh) > 1) {\n                if (isDebug) {\n                    debugLog('log', 'update top height since dirty state，增加高度: ', accumulateTopHeigh - realTopHeight);\n                }\n                this.setVirtualSpaceHeight(accumulateTopHeigh);\n                return;\n            }\n        }\n        this.tryUpdateVirtualViewportAnimId && cancelAnimationFrame(this.tryUpdateVirtualViewportAnimId);\n        this.tryUpdateVirtualViewportAnimId = requestAnimationFrame(() => {\n            if (isDebug) {\n                debugLog('log', 'tryUpdateVirtualViewport Anim start');\n            }\n            const visibleStates = this.editor.getAllVisibleStates();\n            let virtualView = this.calculateVirtualViewport(visibleStates);\n            let diff = this.diffVirtualViewport(virtualView);\n            if (diff.isDifferent && diff.needRemoveOnTop && !isFromScrollTo) {\n                const remeasureIndics = diff.changedIndexesOfTop;\n                const changed = measureHeightByIndics(this.editor, remeasureIndics, 'need-remove-from-top');\n                if (changed) {\n                    virtualView = this.calculateVirtualViewport(visibleStates);\n                    diff = this.diffVirtualViewport(virtualView, 'second');\n                    if (!diff.isDifferent && isDebug) {\n                        debugLog('log', 'viewport need not change after remeasure');\n                    }\n                }\n            }\n            if (diff.isDifferent) {\n                this.applyVirtualView(virtualView);\n                if (this.listRender.initialized) {\n                    const { preRenderingCount, childrenWithPreRendering, childrenWithPreRenderingIndics } =\n                        this.appendPreRenderingToViewport(visibleStates);\n                    if (isDebugUpdate) {\n                        debugLog('log', 'tryUpdateVirtualViewport update list render');\n                    }\n                    this.listRender.update(\n                        childrenWithPreRendering,\n                        this.editor,\n                        this.context,\n                        preRenderingCount,\n                        childrenWithPreRenderingIndics\n                    );\n                    if (diff.needAddOnTop && !isFromScrollTo && diff.changedIndexesOfTop.length === 1) {\n                        const remeasureAddedIndics = diff.changedIndexesOfTop;\n                        if (isDebug) {\n                            debugLog('log', 'needAddOnTop to remeasure heights: ', remeasureAddedIndics);\n                        }\n                        const startIndexBeforeAdd = diff.changedIndexesOfTop[diff.changedIndexesOfTop.length - 1] + 1;\n                        const topHeightBeforeAdd = virtualView.accumulatedHeights[startIndexBeforeAdd];\n                        const changed = measureHeightByIndics(this.editor, remeasureAddedIndics, 'need-add-from-top');\n                        if (changed) {\n                            const newHeights = buildHeightsAndAccumulatedHeights(this.editor, visibleStates);\n                            const actualTopHeightAfterAdd = newHeights.accumulatedHeights[startIndexBeforeAdd];\n                            const newTopHeight = virtualView.top - (actualTopHeightAfterAdd - topHeightBeforeAdd);\n                            this.setTopHeightDebugInfo(\n                                newHeights.accumulatedHeights[this.inViewportIndics[0]],\n                                this.inViewportIndics[0] - 1\n                            );\n                            if (topHeightBeforeAdd !== actualTopHeightAfterAdd) {\n                                this.setVirtualSpaceHeight(newTopHeight);\n                                if (isDebug) {\n                                    debugLog(\n                                        'log',\n                                        `update top height since will add element in top，减去高度: ${actualTopHeightAfterAdd - topHeightBeforeAdd}`\n                                    );\n                                }\n                            }\n                        }\n                    }\n                    if (this.editor.selection) {\n                        this.toNativeSelection(false);\n                    }\n                }\n            }\n            if (isDebug) {\n                debugLog('log', 'tryUpdateVirtualViewport Anim end');\n            }\n        });\n    }\n\n    private calculateVirtualViewport(visibleStates: boolean[]) {\n        const children = (this.editor.children || []) as Element[];\n        if (!children.length || !this.isEnabledVirtualScroll()) {\n            return {\n                inViewportChildren: children,\n                inViewportIndics: [],\n                top: 0,\n                bottom: 0,\n                heights: []\n            };\n        }\n        const scrollTop = this.virtualScrollConfig.scrollTop;\n        let viewportHeight = getViewportHeight(this.editor);\n        const elementLength = children.length;\n        let businessTop = getBusinessTop(this.editor);\n        if (businessTop === 0 && this.virtualScrollConfig.scrollTop > 0) {\n            businessTop = calcBusinessTop(this.editor);\n        }\n        const { heights, accumulatedHeights } = buildHeightsAndAccumulatedHeights(this.editor, visibleStates);\n        let startPosition = Math.max(scrollTop - businessTop, 0);\n        let endPosition = startPosition + viewportHeight;\n        if (scrollTop < businessTop) {\n            endPosition = startPosition + viewportHeight - (businessTop - scrollTop);\n        }\n        let accumulatedOffset = 0;\n        const inViewportChildren: Element[] = [];\n        const inViewportIndics: number[] = [];\n        const indicsBySelection = this.calculateIndicsStartAndEndBySelection();\n        if (isDebug) {\n            debugLog('log', 'indicsBySelection: ', indicsBySelection);\n        }\n        for (let i = 0; i < elementLength; i++) {\n            const currentHeight = heights[i];\n            const nextOffset = accumulatedOffset + currentHeight;\n            const isVisible = visibleStates[i];\n            if (!isVisible) {\n                accumulatedOffset = nextOffset;\n                continue;\n            }\n            if (\n                (indicsBySelection && i > indicsBySelection.minEndIndex && accumulatedOffset >= endPosition) ||\n                (!indicsBySelection && accumulatedOffset >= endPosition)\n            ) {\n                break;\n            }\n            if (\n                (indicsBySelection && i < indicsBySelection.minStartIndex && nextOffset <= startPosition) ||\n                (!indicsBySelection && nextOffset <= startPosition)\n            ) {\n                accumulatedOffset = nextOffset;\n                continue;\n            }\n            inViewportChildren.push(children[i]);\n            inViewportIndics.push(i);\n            accumulatedOffset = nextOffset;\n        }\n\n        if (inViewportIndics.length === 0) {\n            inViewportChildren.push(...children);\n            inViewportIndics.push(...Array.from({ length: elementLength }, (_, i) => i));\n        } else {\n            const lastIndex = inViewportIndics[inViewportIndics.length - 1];\n            for (let i = lastIndex + 1; i < elementLength; i++) {\n                if (this.editor.isFloating(children[i])) {\n                    inViewportChildren.push(children[i]);\n                    inViewportIndics.push(i);\n                } else {\n                    break;\n                }\n            }\n        }\n        const inViewportStartIndex = inViewportIndics[0];\n        const inViewportEndIndex = inViewportIndics[inViewportIndics.length - 1];\n        const top = accumulatedHeights[inViewportStartIndex];\n        const bottom = accumulatedHeights[elementLength] - accumulatedHeights[inViewportEndIndex + 1];\n        return {\n            inViewportChildren,\n            inViewportIndics,\n            top,\n            bottom,\n            heights,\n            accumulatedHeights\n        };\n    }\n\n    private applyVirtualView(virtualView: VirtualViewResult) {\n        this.inViewportChildren = virtualView.inViewportChildren;\n        this.setVirtualSpaceHeight(virtualView.top, virtualView.bottom);\n        this.inViewportIndics = virtualView.inViewportIndics;\n        this.setTopHeightDebugInfo(virtualView.top, this.inViewportIndics[0] - 1);\n    }\n\n    private diffVirtualViewport(virtualView: VirtualViewResult, stage: 'first' | 'second' | 'onChange' = 'first') {\n        if (!this.inViewportChildren.length) {\n            if (isDebug) {\n                debugLog('log', 'diffVirtualViewport', stage, 'empty inViewportChildren', virtualView.inViewportIndics);\n            }\n            return {\n                isDifferent: true,\n                changedIndexesOfTop: [],\n                changedIndexesOfBottom: []\n            };\n        }\n        const oldIndexesInViewport = [...this.inViewportIndics];\n        const newIndexesInViewport = [...virtualView.inViewportIndics];\n        const firstNewIndex = newIndexesInViewport[0];\n        const lastNewIndex = newIndexesInViewport[newIndexesInViewport.length - 1];\n        const firstOldIndex = oldIndexesInViewport[0];\n        const lastOldIndex = oldIndexesInViewport[oldIndexesInViewport.length - 1];\n        const isSameViewport =\n            oldIndexesInViewport.length === newIndexesInViewport.length &&\n            oldIndexesInViewport.every((index, i) => index === newIndexesInViewport[i]);\n        if (firstNewIndex === firstOldIndex && lastNewIndex === lastOldIndex) {\n            return {\n                isDifferent: !isSameViewport,\n                changedIndexesOfTop: [],\n                changedIndexesOfBottom: []\n            };\n        }\n        if (firstNewIndex !== firstOldIndex || lastNewIndex !== lastOldIndex) {\n            const changedIndexesOfTop = [];\n            const changedIndexesOfBottom = [];\n            const needRemoveOnTop = firstNewIndex !== firstOldIndex && firstNewIndex > firstOldIndex;\n            const needAddOnTop = firstNewIndex !== firstOldIndex && firstNewIndex < firstOldIndex;\n            const needRemoveOnBottom = lastNewIndex !== lastOldIndex && lastOldIndex > lastNewIndex;\n            const needAddOnBottom = lastNewIndex !== lastOldIndex && lastOldIndex < lastNewIndex;\n            if (needRemoveOnTop || needAddOnBottom) {\n                // 向下\n                for (let index = 0; index < oldIndexesInViewport.length; index++) {\n                    const element = oldIndexesInViewport[index];\n                    if (!newIndexesInViewport.includes(element)) {\n                        changedIndexesOfTop.push(element);\n                    } else {\n                        break;\n                    }\n                }\n                for (let index = newIndexesInViewport.length - 1; index >= 0; index--) {\n                    const element = newIndexesInViewport[index];\n                    if (!oldIndexesInViewport.includes(element)) {\n                        changedIndexesOfBottom.push(element);\n                    } else {\n                        break;\n                    }\n                }\n            } else if (needAddOnTop || needRemoveOnBottom) {\n                // 向上\n                for (let index = 0; index < newIndexesInViewport.length; index++) {\n                    const element = newIndexesInViewport[index];\n                    if (!oldIndexesInViewport.includes(element)) {\n                        changedIndexesOfTop.push(element);\n                    } else {\n                        break;\n                    }\n                }\n                for (let index = oldIndexesInViewport.length - 1; index >= 0; index--) {\n                    const element = oldIndexesInViewport[index];\n                    if (!newIndexesInViewport.includes(element)) {\n                        changedIndexesOfBottom.push(element);\n                    } else {\n                        break;\n                    }\n                }\n            }\n            if (isDebug) {\n                debugLog('log', `====== diffVirtualViewport stage: ${stage} ======`);\n                debugLog('log', 'oldIndexesInViewport:', oldIndexesInViewport);\n                debugLog('log', 'newIndexesInViewport:', newIndexesInViewport);\n                // this.editor.children[index] will be undefined when it is removed\n                debugLog(\n                    'log',\n                    'changedIndexesOfTop:',\n                    needRemoveOnTop ? '-' : needAddOnTop ? '+' : '-',\n                    changedIndexesOfTop,\n                    changedIndexesOfTop.map(\n                        index =>\n                            (this.editor.children[index] &&\n                                getCachedHeightByElement(this.editor, this.editor.children[index] as Element)) ||\n                            0\n                    )\n                );\n                debugLog(\n                    'log',\n                    'changedIndexesOfBottom:',\n                    needAddOnBottom ? '+' : needRemoveOnBottom ? '-' : '+',\n                    changedIndexesOfBottom,\n                    changedIndexesOfBottom.map(\n                        index =>\n                            (this.editor.children[index] &&\n                                getCachedHeightByElement(this.editor, this.editor.children[index] as Element)) ||\n                            0\n                    )\n                );\n                const needTop = virtualView.heights.slice(0, newIndexesInViewport[0]).reduce((acc, height) => acc + height, 0);\n                const needBottom = virtualView.heights\n                    .slice(newIndexesInViewport[newIndexesInViewport.length - 1] + 1)\n                    .reduce((acc, height) => acc + height, 0);\n                debugLog(\n                    'log',\n                    needTop - parseFloat(this.virtualTopHeightElement.style.height),\n                    'newTopHeight:',\n                    needTop,\n                    'prevTopHeight:',\n                    parseFloat(this.virtualTopHeightElement.style.height)\n                );\n                debugLog(\n                    'log',\n                    'newBottomHeight:',\n                    needBottom,\n                    'prevBottomHeight:',\n                    parseFloat(this.virtualBottomHeightElement.style.height)\n                );\n                debugLog('warn', '=========== Dividing line ===========');\n            }\n            return {\n                isDifferent: true,\n                needRemoveOnTop,\n                needAddOnTop,\n                needRemoveOnBottom,\n                needAddOnBottom,\n                changedIndexesOfTop,\n                changedIndexesOfBottom\n            };\n        }\n        return {\n            isDifferent: false,\n            changedIndexesOfTop: [],\n            changedIndexesOfBottom: []\n        };\n    }\n\n    //#region event proxy\n    private addEventListener(eventName: string, listener: EventListener, target: HTMLElement | Document = this.elementRef.nativeElement) {\n        this.manualListeners.push(\n            this.renderer2.listen(target, eventName, (event: Event) => {\n                const beforeInputEvent = extractBeforeInputEvent(event.type, null, event, event.target);\n                if (beforeInputEvent) {\n                    this.onFallbackBeforeInput(beforeInputEvent);\n                }\n                listener(event);\n            })\n        );\n    }\n\n    calculateVirtualScrollSelection(selection: Selection) {\n        if (selection) {\n            const isBlockCardCursor = AngularEditor.isBlockCardLeftCursor(this.editor) || AngularEditor.isBlockCardRightCursor(this.editor);\n            const indics = this.inViewportIndics;\n            if (indics.length > 0) {\n                const currentVisibleRange: Range = {\n                    anchor: Editor.start(this.editor, [indics[0]]),\n                    focus: Editor.end(this.editor, [indics[indics.length - 1]])\n                };\n                const [start, end] = Range.edges(selection);\n                let forwardSelection = { anchor: start, focus: end };\n                if (!isBlockCardCursor) {\n                    forwardSelection = { anchor: start, focus: end };\n                } else {\n                    forwardSelection = { anchor: { path: start.path, offset: 0 }, focus: { path: end.path, offset: 0 } };\n                }\n                const intersectedSelection = Range.intersection(forwardSelection, currentVisibleRange);\n                if (intersectedSelection && isBlockCardCursor) {\n                    return selection;\n                }\n                EDITOR_TO_VIRTUAL_SCROLL_SELECTION.set(this.editor, intersectedSelection);\n                if (!intersectedSelection || !Range.equals(intersectedSelection, forwardSelection)) {\n                    if (isDebug) {\n                        debugLog(\n                            'log',\n                            `selection is not in visible range, selection: ${JSON.stringify(\n                                selection\n                            )}, currentVisibleRange: ${JSON.stringify(currentVisibleRange)}, intersectedSelection: ${JSON.stringify(intersectedSelection)}`\n                        );\n                    }\n                    return intersectedSelection;\n                }\n                return selection;\n            }\n        }\n        EDITOR_TO_VIRTUAL_SCROLL_SELECTION.set(this.editor, null);\n        return selection;\n    }\n\n    private isSelectionInvisible(selection: Selection) {\n        const anchorIndex = selection.anchor.path[0];\n        const focusIndex = selection.focus.path[0];\n        const anchorElement = this.editor.children[anchorIndex] as Element | undefined;\n        const focusElement = this.editor.children[focusIndex] as Element | undefined;\n        return !anchorElement || !focusElement || !this.editor.isVisible(anchorElement) || !this.editor.isVisible(focusElement);\n    }\n\n    toNativeSelection(autoScroll = true) {\n        try {\n            let { selection } = this.editor;\n\n            if (this.isEnabledVirtualScroll()) {\n                selection = this.calculateVirtualScrollSelection(selection);\n            }\n\n            const root = AngularEditor.findDocumentOrShadowRoot(this.editor);\n            const { activeElement } = root;\n            const domSelection = (root as Document).getSelection();\n\n            if ((this.isComposing && !IS_ANDROID) || !domSelection) {\n                return;\n            }\n\n            const hasDomSelection = domSelection.type !== 'None';\n\n            // If the DOM selection is properly unset, we're done.\n            if (!selection && !hasDomSelection) {\n                return;\n            }\n\n            // If the DOM selection is already correct, we're done.\n            // verify that the dom selection is in the editor\n            const editorElement = EDITOR_TO_ELEMENT.get(this.editor)!;\n            let hasDomSelectionInEditor = false;\n            if (editorElement.contains(domSelection.anchorNode) && editorElement.contains(domSelection.focusNode)) {\n                hasDomSelectionInEditor = true;\n            }\n\n            if (!hasDomSelectionInEditor && !AngularEditor.isFocused(this.editor)) {\n                return;\n            }\n\n            if (AngularEditor.isReadOnly(this.editor) && (!selection || Range.isCollapsed(selection))) {\n                return;\n            }\n\n            // If the DOM selection is in the editor and the editor selection is already correct, we're done.\n            if (hasDomSelection && hasDomSelectionInEditor && selection && hasStringTarget(domSelection)) {\n                const rangeFromDOMSelection = AngularEditor.toSlateRange(this.editor, domSelection, {\n                    exactMatch: false,\n                    suppressThrow: true\n                });\n                if (rangeFromDOMSelection && Range.equals(rangeFromDOMSelection, selection)) {\n                    return;\n                }\n            }\n\n            // prevent updating native selection when active element is void element\n            if (isTargetInsideVoid(this.editor, activeElement)) {\n                return;\n            }\n\n            // when <Editable/> is being controlled through external value\n            // then its children might just change - DOM responds to it on its own\n            // but Slate's value is not being updated through any operation\n            // and thus it doesn't transform selection on its own\n            if (selection && !AngularEditor.hasRange(this.editor, selection)) {\n                this.editor.selection = AngularEditor.toSlateRange(this.editor, domSelection, { exactMatch: false, suppressThrow: false });\n                return;\n            }\n\n            // Otherwise the DOM selection is out of sync, so update it.\n            const el = AngularEditor.toDOMNode(this.editor, this.editor);\n            this.isUpdatingSelection = true;\n\n            const newDomRange = selection && AngularEditor.toDOMRange(this.editor, selection);\n\n            if (newDomRange) {\n                // COMPAT: Since the DOM range has no concept of backwards/forwards\n                // we need to check and do the right thing here.\n                if (Range.isBackward(selection)) {\n                    // eslint-disable-next-line max-len\n                    domSelection.setBaseAndExtent(\n                        newDomRange.endContainer,\n                        newDomRange.endOffset,\n                        newDomRange.startContainer,\n                        newDomRange.startOffset\n                    );\n                } else {\n                    // eslint-disable-next-line max-len\n                    domSelection.setBaseAndExtent(\n                        newDomRange.startContainer,\n                        newDomRange.startOffset,\n                        newDomRange.endContainer,\n                        newDomRange.endOffset\n                    );\n                }\n            } else {\n                domSelection.removeAllRanges();\n            }\n\n            setTimeout(() => {\n                if (\n                    this.isEnabledVirtualScroll() &&\n                    !selection &&\n                    this.editor.selection &&\n                    autoScroll &&\n                    this.virtualScrollConfig.scrollContainer\n                ) {\n                    this.virtualScrollConfig.scrollContainer.scrollTop = this.virtualScrollConfig.scrollContainer.scrollTop + 100;\n                    this.isUpdatingSelection = false;\n                    return;\n                } else {\n                    // handle scrolling in setTimeout because of\n                    // dom should not have updated immediately after listRender's updating\n                    newDomRange && autoScroll && this.scrollSelectionIntoView(this.editor, newDomRange);\n                    // COMPAT: In Firefox, it's not enough to create a range, you also need\n                    // to focus the contenteditable element too. (2016/11/16)\n                    if (newDomRange && IS_FIREFOX) {\n                        el.focus();\n                    }\n                }\n                this.isUpdatingSelection = false;\n            });\n        } catch (error) {\n            this.editor.onError({\n                code: SlateErrorCode.ToNativeSelectionError,\n                nativeError: error\n            });\n            this.isUpdatingSelection = false;\n        }\n    }\n\n    onChange() {\n        this.forceRender();\n        this.onChangeCallback(this.editor.children);\n    }\n\n    ngAfterViewChecked() {}\n\n    ngDoCheck() {}\n\n    forceRender() {\n        this.updateContext();\n        if (this.isEnabledVirtualScroll()) {\n            this.updateListRenderAndRemeasureHeights('forceRender');\n        } else {\n            this.listRender.update(this.editor.children, this.editor, this.context);\n        }\n        // repair collaborative editing when Chinese input is interrupted by other users' cursors\n        // when the DOMElement where the selection is located is removed\n        // the compositionupdate and compositionend events will no longer be fired\n        // so isComposing needs to be corrected\n        // need exec after this.cdr.detectChanges() to render HTML\n        // need exec before this.toNativeSelection() to correct native selection\n        if (this.isComposing) {\n            // Composition input text be not rendered when user composition input with selection is expanded\n            // At this time, the following matching conditions are met, assign isComposing to false, and the status is wrong\n            // this time condition is true and isComposing is assigned false\n            // Therefore, need to wait for the composition input text to be rendered before performing condition matching\n            setTimeout(() => {\n                const textNode = Node.get(this.editor, this.editor.selection.anchor.path);\n                const textDOMNode = AngularEditor.toDOMNode(this.editor, textNode);\n                let textContent = '';\n                // skip decorate text\n                textDOMNode.querySelectorAll('[editable-text]').forEach(stringDOMNode => {\n                    let text = stringDOMNode.textContent;\n                    const zeroChar = '\\uFEFF';\n                    // remove zero with char\n                    if (text.startsWith(zeroChar)) {\n                        text = text.slice(1);\n                    }\n                    if (text.endsWith(zeroChar)) {\n                        text = text.slice(0, text.length - 1);\n                    }\n                    textContent += text;\n                });\n                if (Node.string(textNode).endsWith(textContent)) {\n                    this.isComposing = false;\n                }\n            }, 0);\n        }\n        if (this.editor.selection && this.isSelectionInvisible(this.editor.selection)) {\n            Transforms.deselect(this.editor);\n            return;\n        } else {\n            this.toNativeSelection();\n        }\n    }\n\n    render() {\n        const changed = this.updateContext();\n        if (changed) {\n            if (this.isEnabledVirtualScroll()) {\n                this.updateListRenderAndRemeasureHeights('render');\n            } else {\n                this.listRender.update(this.editor.children, this.editor, this.context);\n            }\n        }\n    }\n\n    updateListRenderAndRemeasureHeights(origin: 'render' | 'forceRender') {\n        const operations = this.editor.operations;\n        const firstIndex = this.inViewportIndics[0];\n        const operationsOfFirstElementMerged = operations.filter(\n            op => op.type === 'merge_node' && op.path.length === 1 && firstIndex === op.path[0] - 1\n        );\n        const operationsOfFirstElementSplitted = operations.filter(\n            op => op.type === 'split_node' && op.path.length === 1 && firstIndex === op.path[0]\n        );\n        const mutationOfFirstElementHeight = operationsOfFirstElementSplitted.length > 0 || operationsOfFirstElementMerged.length > 0;\n        const visibleStates = this.editor.getAllVisibleStates();\n        const previousInViewportChildren = [...this.inViewportChildren];\n        // the first element height will reset to default height when split or merge\n        // if the most top content of the first element is not in viewport, the change of height will cause the viewport to scroll\n        // to keep viewport stable, we need to use the current inViewportIndics temporarily\n        if (mutationOfFirstElementHeight) {\n            const newInViewportIndics = [];\n            const newInViewportChildren = [];\n            this.inViewportIndics.forEach(index => {\n                const element = this.editor.children[index] as Element;\n                const isVisible = visibleStates[index];\n                if (isVisible) {\n                    newInViewportIndics.push(index);\n                    newInViewportChildren.push(element);\n                }\n            });\n            if (operationsOfFirstElementSplitted.length > 0) {\n                const lastIndex = newInViewportIndics[newInViewportIndics.length - 1];\n                for (let i = lastIndex + 1; i < this.editor.children.length; i++) {\n                    const element = this.editor.children[i] as Element;\n                    const isVisible = visibleStates[i];\n                    if (isVisible) {\n                        newInViewportIndics.push(i);\n                        newInViewportChildren.push(element);\n                        break;\n                    }\n                }\n            }\n            this.inViewportIndics = newInViewportIndics;\n            this.inViewportChildren = newInViewportChildren;\n        } else {\n            let virtualView = this.calculateVirtualViewport(visibleStates);\n            let diff = this.diffVirtualViewport(virtualView, 'onChange');\n            if (diff.isDifferent && diff.needRemoveOnTop) {\n                const remeasureIndics = diff.changedIndexesOfTop;\n                const changed = measureHeightByIndics(this.editor, remeasureIndics, 'need-remove-from-top');\n                if (changed) {\n                    virtualView = this.calculateVirtualViewport(visibleStates);\n                    diff = this.diffVirtualViewport(virtualView, 'second');\n                }\n            }\n            this.applyVirtualView(virtualView);\n        }\n        const { preRenderingCount, childrenWithPreRendering, childrenWithPreRenderingIndics } =\n            this.appendPreRenderingToViewport(visibleStates);\n        if (isDebugUpdate) {\n            debugLog('log', 'updateListRenderAndRemeasureHeights update list render', 'origin', origin);\n        }\n        this.listRender.update(childrenWithPreRendering, this.editor, this.context, preRenderingCount, childrenWithPreRenderingIndics);\n        const remeasureIndics = this.getChangedIndics(previousInViewportChildren);\n        if (remeasureIndics.length) {\n            this.indicsOfNeedRemeasured$.next({ indics: remeasureIndics, tryUpdateViewport: true });\n        }\n    }\n\n    updateContext() {\n        const decorations = this.generateDecorations();\n        if (\n            this.context.selection !== this.editor.selection ||\n            this.context.decorate !== this.decorate ||\n            this.context.readonly !== this.readonly ||\n            !isDecoratorRangeListEqual(this.context.decorations, decorations)\n        ) {\n            this.context = {\n                parent: this.editor,\n                selection: this.editor.selection,\n                decorations: decorations,\n                decorate: this.decorate,\n                readonly: this.readonly\n            };\n            return true;\n        }\n        return false;\n    }\n\n    initializeContext() {\n        this.context = {\n            parent: this.editor,\n            selection: this.editor.selection,\n            decorations: this.generateDecorations(),\n            decorate: this.decorate,\n            readonly: this.readonly\n        };\n    }\n\n    initializeViewContext() {\n        this.viewContext = {\n            editor: this.editor,\n            renderElement: this.renderElement,\n            renderLeaf: this.renderLeaf,\n            renderText: this.renderText,\n            trackBy: this.trackBy,\n            isStrictDecorate: this.isStrictDecorate\n        };\n    }\n\n    composePlaceholderDecorate(editor: Editor) {\n        if (this.placeholderDecorate) {\n            return this.placeholderDecorate(editor) || [];\n        }\n\n        if (this.placeholder && editor.children.length === 1 && Array.from(Node.texts(editor)).length === 1 && Node.string(editor) === '') {\n            const start = Editor.start(editor, []);\n            return [\n                {\n                    placeholder: this.placeholder,\n                    anchor: start,\n                    focus: start\n                }\n            ];\n        } else {\n            return [];\n        }\n    }\n\n    generateDecorations() {\n        const decorations = this.decorate([this.editor, []]);\n        const placeholderDecorations = this.isComposing ? [] : this.composePlaceholderDecorate(this.editor);\n        decorations.push(...placeholderDecorations);\n        return decorations;\n    }\n\n    private toSlateSelection() {\n        if ((!this.isComposing || IS_ANDROID) && !this.isUpdatingSelection && !this.isDraggingInternally) {\n            try {\n                const root = AngularEditor.findDocumentOrShadowRoot(this.editor);\n                const { activeElement } = root;\n                const el = AngularEditor.toDOMNode(this.editor, this.editor);\n                const domSelection = (root as Document).getSelection();\n\n                if (activeElement === el) {\n                    this.latestElement = activeElement;\n                    IS_FOCUSED.set(this.editor, true);\n                } else {\n                    IS_FOCUSED.delete(this.editor);\n                }\n\n                if (!domSelection) {\n                    return Transforms.deselect(this.editor);\n                }\n\n                const editorElement = EDITOR_TO_ELEMENT.get(this.editor);\n                const hasDomSelectionInEditor =\n                    editorElement.contains(domSelection.anchorNode) && editorElement.contains(domSelection.focusNode);\n                if (!hasDomSelectionInEditor) {\n                    Transforms.deselect(this.editor);\n                    return;\n                }\n\n                // try to get the selection directly, because some terrible case can be normalize for normalizeDOMPoint\n                // for example, double-click the last cell of the table to select a non-editable DOM\n                const range = AngularEditor.toSlateRange(this.editor, domSelection, { exactMatch: false, suppressThrow: true });\n                if (range) {\n                    if (this.editor.selection && Range.equals(range, this.editor.selection) && !hasStringTarget(domSelection)) {\n                        if (!isTargetInsideVoid(this.editor, activeElement)) {\n                            // force adjust DOMSelection\n                            this.toNativeSelection(false);\n                        }\n                    } else {\n                        Transforms.select(this.editor, range);\n                    }\n                }\n            } catch (error) {\n                this.editor.onError({\n                    code: SlateErrorCode.ToSlateSelectionError,\n                    nativeError: error\n                });\n            }\n        }\n    }\n\n    private onDOMBeforeInput(\n        event: Event & {\n            inputType: string;\n            isComposing: boolean;\n            data: string | null;\n            dataTransfer: DataTransfer | null;\n            getTargetRanges(): DOMStaticRange[];\n        }\n    ) {\n        const editor = this.editor;\n        const root = AngularEditor.findDocumentOrShadowRoot(this.editor);\n        const { activeElement } = root;\n        const { selection } = editor;\n        const { inputType: type } = event;\n        const data = event.dataTransfer || event.data || undefined;\n        if (IS_ANDROID) {\n            let targetRange: Range | null = null;\n            let [nativeTargetRange] = event.getTargetRanges();\n            if (nativeTargetRange) {\n                targetRange = AngularEditor.toSlateRange(editor, nativeTargetRange, { exactMatch: false, suppressThrow: false });\n            }\n            // COMPAT: SelectionChange event is fired after the action is performed, so we\n            // have to manually get the selection here to ensure it's up-to-date.\n            const window = AngularEditor.getWindow(editor);\n            const domSelection = window.getSelection();\n            if (!targetRange && domSelection) {\n                targetRange = AngularEditor.toSlateRange(editor, domSelection, { exactMatch: false, suppressThrow: false });\n            }\n            targetRange = targetRange ?? editor.selection;\n            if (type === 'insertCompositionText') {\n                if (data && data.toString().includes('\\n')) {\n                    restoreDom(editor, () => {\n                        Editor.insertBreak(editor);\n                    });\n                } else {\n                    if (targetRange) {\n                        if (data) {\n                            restoreDom(editor, () => {\n                                Transforms.insertText(editor, data.toString(), { at: targetRange });\n                            });\n                        } else {\n                            restoreDom(editor, () => {\n                                Transforms.delete(editor, { at: targetRange });\n                            });\n                        }\n                    }\n                }\n                return;\n            }\n            if (type === 'deleteContentBackward') {\n                // gboard can not prevent default action, so must use restoreDom,\n                // sougou Keyboard can prevent default action（only in Chinese input mode）.\n                // In order to avoid weird action in Sougou Keyboard, use resotreDom only range's isCollapsed is false (recognize gboard)\n                if (!Range.isCollapsed(targetRange)) {\n                    restoreDom(editor, () => {\n                        Transforms.delete(editor, { at: targetRange });\n                    });\n                    return;\n                }\n            }\n            if (type === 'insertText') {\n                restoreDom(editor, () => {\n                    if (typeof data === 'string') {\n                        Editor.insertText(editor, data);\n                    }\n                });\n                return;\n            }\n        }\n        if (\n            !this.readonly &&\n            AngularEditor.hasEditableTarget(editor, event.target) &&\n            !isTargetInsideVoid(editor, activeElement) &&\n            !this.isDOMEventHandled(event, this.beforeInput)\n        ) {\n            try {\n                event.preventDefault();\n\n                // COMPAT: If the selection is expanded, even if the command seems like\n                // a delete forward/backward command it should delete the selection.\n                if (selection && Range.isExpanded(selection) && type.startsWith('delete')) {\n                    const direction = type.endsWith('Backward') ? 'backward' : 'forward';\n                    Editor.deleteFragment(editor, { direction });\n                    return;\n                }\n\n                switch (type) {\n                    case 'deleteByComposition':\n                    case 'deleteByCut':\n                    case 'deleteByDrag': {\n                        Editor.deleteFragment(editor);\n                        break;\n                    }\n\n                    case 'deleteContent':\n                    case 'deleteContentForward': {\n                        Editor.deleteForward(editor);\n                        break;\n                    }\n\n                    case 'deleteContentBackward': {\n                        Editor.deleteBackward(editor);\n                        break;\n                    }\n\n                    case 'deleteEntireSoftLine': {\n                        Editor.deleteBackward(editor, { unit: 'line' });\n                        Editor.deleteForward(editor, { unit: 'line' });\n                        break;\n                    }\n\n                    case 'deleteHardLineBackward': {\n                        Editor.deleteBackward(editor, { unit: 'block' });\n                        break;\n                    }\n\n                    case 'deleteSoftLineBackward': {\n                        Editor.deleteBackward(editor, { unit: 'line' });\n                        break;\n                    }\n\n                    case 'deleteHardLineForward': {\n                        Editor.deleteForward(editor, { unit: 'block' });\n                        break;\n                    }\n\n                    case 'deleteSoftLineForward': {\n                        Editor.deleteForward(editor, { unit: 'line' });\n                        break;\n                    }\n\n                    case 'deleteWordBackward': {\n                        Editor.deleteBackward(editor, { unit: 'word' });\n                        break;\n                    }\n\n                    case 'deleteWordForward': {\n                        Editor.deleteForward(editor, { unit: 'word' });\n                        break;\n                    }\n\n                    case 'insertLineBreak':\n                    case 'insertParagraph': {\n                        Editor.insertBreak(editor);\n                        break;\n                    }\n\n                    case 'insertFromComposition': {\n                        // COMPAT: in safari, `compositionend` event is dispatched after\n                        // the beforeinput event with the inputType \"insertFromComposition\" has been dispatched.\n                        // https://www.w3.org/TR/input-events-2/\n                        // so the following code is the right logic\n                        // because DOM selection in sync will be exec before `compositionend` event\n                        // isComposing is true will prevent DOM selection being update correctly.\n                        this.isComposing = false;\n                        preventInsertFromComposition(event, this.editor);\n                    }\n                    case 'insertFromDrop':\n                    case 'insertFromPaste':\n                    case 'insertFromYank':\n                    case 'insertReplacementText':\n                    case 'insertText': {\n                        // use a weak comparison instead of 'instanceof' to allow\n                        // programmatic access of paste events coming from external windows\n                        // like cypress where cy.window does not work realibly\n                        if (data?.constructor.name === 'DataTransfer') {\n                            AngularEditor.insertData(editor, data as DataTransfer);\n                        } else if (typeof data === 'string') {\n                            Editor.insertText(editor, data);\n                        }\n                        break;\n                    }\n                }\n            } catch (error) {\n                this.editor.onError({\n                    code: SlateErrorCode.OnDOMBeforeInputError,\n                    nativeError: error\n                });\n            }\n        }\n    }\n\n    private onDOMBlur(event: FocusEvent) {\n        if (\n            this.readonly ||\n            this.isUpdatingSelection ||\n            !AngularEditor.hasEditableTarget(this.editor, event.target) ||\n            this.isDOMEventHandled(event, this.blur)\n        ) {\n            return;\n        }\n\n        const window = AngularEditor.getWindow(this.editor);\n\n        // COMPAT: If the current `activeElement` is still the previous\n        // one, this is due to the window being blurred when the tab\n        // itself becomes unfocused, so we want to abort early to allow to\n        // editor to stay focused when the tab becomes focused again.\n        const root = AngularEditor.findDocumentOrShadowRoot(this.editor);\n        if (this.latestElement === root.activeElement) {\n            return;\n        }\n\n        const { relatedTarget } = event;\n        const el = AngularEditor.toDOMNode(this.editor, this.editor);\n\n        // COMPAT: The event should be ignored if the focus is returning\n        // to the editor from an embedded editable element (eg. an <input>\n        // element inside a void node).\n        if (relatedTarget === el) {\n            return;\n        }\n\n        // COMPAT: The event should be ignored if the focus is moving from\n        // the editor to inside a void node's spacer element.\n        if (isDOMElement(relatedTarget) && relatedTarget.hasAttribute('data-slate-spacer')) {\n            return;\n        }\n\n        // COMPAT: The event should be ignored if the focus is moving to a\n        // non- editable section of an element that isn't a void node (eg.\n        // a list item of the check list example).\n        if (relatedTarget != null && isDOMNode(relatedTarget) && AngularEditor.hasDOMNode(this.editor, relatedTarget)) {\n            const node = AngularEditor.toSlateNode(this.editor, relatedTarget);\n\n            if (Element.isElement(node) && !this.editor.isVoid(node)) {\n                return;\n            }\n        }\n\n        IS_FOCUSED.delete(this.editor);\n    }\n\n    private onDOMClick(event: MouseEvent) {\n        if (\n            !this.readonly &&\n            AngularEditor.hasTarget(this.editor, event.target) &&\n            !this.isDOMEventHandled(event, this.click) &&\n            isDOMNode(event.target)\n        ) {\n            const node = AngularEditor.toSlateNode(this.editor, event.target);\n            const path = AngularEditor.findPath(this.editor, node);\n            const start = Editor.start(this.editor, path);\n            const end = Editor.end(this.editor, path);\n\n            const startVoid = Editor.void(this.editor, { at: start });\n            const endVoid = Editor.void(this.editor, { at: end });\n\n            if (event.detail === TRIPLE_CLICK && path.length >= 1) {\n                let blockPath = path;\n                if (!(Element.isElement(node) && Editor.isBlock(this.editor, node))) {\n                    const block = Editor.above(this.editor, {\n                        match: n => Element.isElement(n) && Editor.isBlock(this.editor, n),\n                        at: path\n                    });\n\n                    blockPath = block?.[1] ?? path.slice(0, 1);\n                }\n\n                const range = Editor.range(this.editor, blockPath);\n                Transforms.select(this.editor, range);\n                return;\n            }\n\n            if (\n                startVoid &&\n                endVoid &&\n                Path.equals(startVoid[1], endVoid[1]) &&\n                !(AngularEditor.isBlockCardLeftCursor(this.editor) || AngularEditor.isBlockCardRightCursor(this.editor))\n            ) {\n                const range = Editor.range(this.editor, start);\n                Transforms.select(this.editor, range);\n            }\n        }\n    }\n\n    private onDOMCompositionStart(event: CompositionEvent) {\n        const { selection } = this.editor;\n        if (selection) {\n            // solve the problem of cross node Chinese input\n            if (Range.isExpanded(selection)) {\n                Editor.deleteFragment(this.editor);\n                this.forceRender();\n            }\n        }\n        if (\n            AngularEditor.hasEditableTarget(this.editor, event.target) &&\n            !isSelectionInsideVoid(this.editor) &&\n            !this.isDOMEventHandled(event, this.compositionStart)\n        ) {\n            this.isComposing = true;\n        }\n        this.render();\n    }\n\n    private onDOMCompositionUpdate(event: CompositionEvent) {\n        this.isDOMEventHandled(event, this.compositionUpdate);\n    }\n\n    private onDOMCompositionEnd(event: CompositionEvent) {\n        if (!event.data && !Range.isCollapsed(this.editor.selection)) {\n            Transforms.delete(this.editor);\n        }\n        if (\n            AngularEditor.hasEditableTarget(this.editor, event.target) &&\n            !isSelectionInsideVoid(this.editor) &&\n            !this.isDOMEventHandled(event, this.compositionEnd)\n        ) {\n            // COMPAT: In Chrome/Firefox, `beforeinput` events for compositions\n            // aren't correct and never fire the \"insertFromComposition\"\n            // type that we need. So instead, insert whenever a composition\n            // ends since it will already have been committed to the DOM.\n            if (this.isComposing === true && !IS_SAFARI && !IS_ANDROID && event.data) {\n                preventInsertFromComposition(event, this.editor);\n                Editor.insertText(this.editor, event.data);\n            }\n\n            // COMPAT: In Firefox 87.0 CompositionEnd fire twice\n            // so we need avoid repeat insertText by isComposing === true,\n            this.isComposing = false;\n        }\n        this.render();\n    }\n\n    private onDOMCopy(event: ClipboardEvent) {\n        const window = AngularEditor.getWindow(this.editor);\n        const isOutsideSlate = !hasStringTarget(window.getSelection()) && isTargetInsideVoid(this.editor, event.target);\n        if (!isOutsideSlate && AngularEditor.hasTarget(this.editor, event.target) && !this.isDOMEventHandled(event, this.copy)) {\n            event.preventDefault();\n            AngularEditor.setFragmentData(this.editor, event.clipboardData, 'copy');\n        }\n    }\n\n    private onDOMCut(event: ClipboardEvent) {\n        if (!this.readonly && AngularEditor.hasEditableTarget(this.editor, event.target) && !this.isDOMEventHandled(event, this.cut)) {\n            event.preventDefault();\n            AngularEditor.setFragmentData(this.editor, event.clipboardData, 'cut');\n            const { selection } = this.editor;\n\n            if (selection) {\n                AngularEditor.deleteCutData(this.editor);\n            }\n        }\n    }\n\n    private onDOMDragOver(event: DragEvent) {\n        if (AngularEditor.hasTarget(this.editor, event.target) && !this.isDOMEventHandled(event, this.dragOver)) {\n            // Only when the target is void, call `preventDefault` to signal\n            // that drops are allowed. Editable content is droppable by\n            // default, and calling `preventDefault` hides the cursor.\n            const node = AngularEditor.toSlateNode(this.editor, event.target);\n\n            if (Element.isElement(node) && Editor.isVoid(this.editor, node)) {\n                event.preventDefault();\n            }\n        }\n    }\n\n    private onDOMDragStart(event: DragEvent) {\n        if (!this.readonly && AngularEditor.hasTarget(this.editor, event.target) && !this.isDOMEventHandled(event, this.dragStart)) {\n            const node = AngularEditor.toSlateNode(this.editor, event.target);\n            const path = AngularEditor.findPath(this.editor, node);\n            const voidMatch =\n                Element.isElement(node) && (Editor.isVoid(this.editor, node) || Editor.void(this.editor, { at: path, voids: true }));\n\n            // If starting a drag on a void node, make sure it is selected\n            // so that it shows up in the selection's fragment.\n            if (voidMatch) {\n                const range = Editor.range(this.editor, path);\n                Transforms.select(this.editor, range);\n            }\n\n            this.isDraggingInternally = true;\n\n            AngularEditor.setFragmentData(this.editor, event.dataTransfer, 'drag');\n        }\n    }\n\n    private onDOMDrop(event: DragEvent) {\n        const editor = this.editor;\n        if (!this.readonly && AngularEditor.hasTarget(this.editor, event.target) && !this.isDOMEventHandled(event, this.drop)) {\n            event.preventDefault();\n            // Keep a reference to the dragged range before updating selection\n            const draggedRange = editor.selection;\n\n            // Find the range where the drop happened\n            const range = AngularEditor.findEventRange(editor, event);\n            const data = event.dataTransfer;\n\n            Transforms.select(editor, range);\n\n            if (this.isDraggingInternally) {\n                if (draggedRange) {\n                    Transforms.delete(editor, {\n                        at: draggedRange\n                    });\n                }\n\n                this.isDraggingInternally = false;\n            }\n\n            AngularEditor.insertData(editor, data);\n\n            // When dragging from another source into the editor, it's possible\n            // that the current editor does not have focus.\n            if (!AngularEditor.isFocused(editor)) {\n                AngularEditor.focus(editor);\n            }\n        }\n    }\n\n    private onDOMDragEnd(event: DragEvent) {\n        if (\n            !this.readonly &&\n            this.isDraggingInternally &&\n            AngularEditor.hasTarget(this.editor, event.target) &&\n            !this.isDOMEventHandled(event, this.dragEnd)\n        ) {\n            this.isDraggingInternally = false;\n        }\n    }\n\n    private onDOMFocus(event: Event) {\n        if (\n            !this.readonly &&\n            !this.isUpdatingSelection &&\n            AngularEditor.hasEditableTarget(this.editor, event.target) &&\n            !this.isDOMEventHandled(event, this.focus)\n        ) {\n            const el = AngularEditor.toDOMNode(this.editor, this.editor);\n            const root = AngularEditor.findDocumentOrShadowRoot(this.editor);\n            this.latestElement = root.activeElement;\n\n            // COMPAT: If the editor has nested editable elements, the focus\n            // can go to them. In Firefox, this must be prevented because it\n            // results in issues with keyboard navigation. (2017/03/30)\n            if (IS_FIREFOX && event.target !== el) {\n                el.focus();\n                return;\n            }\n\n            IS_FOCUSED.set(this.editor, true);\n        }\n    }\n\n    private onDOMKeydown(event: KeyboardEvent) {\n        const editor = this.editor;\n        const root = AngularEditor.findDocumentOrShadowRoot(this.editor);\n        const { activeElement } = root;\n        if (\n            !this.readonly &&\n            AngularEditor.hasEditableTarget(editor, event.target) &&\n            !isTargetInsideVoid(editor, activeElement) && // stop fire keydown handle when focus void node\n            !this.isComposing &&\n            !this.isDOMEventHandled(event, this.keydown)\n        ) {\n            const nativeEvent = event;\n            const { selection } = editor;\n\n            const element = editor.children[selection !== null ? selection.focus.path[0] : 0];\n            const isRTL = direction(Node.string(element)) === 'rtl';\n\n            try {\n                // COMPAT: Since we prevent the default behavior on\n                // `beforeinput` events, the browser doesn't think there's ever\n                // any history stack to undo or redo, so we have to manage these\n                // hotkeys ourselves. (2019/11/06)\n                if (Hotkeys.isRedo(nativeEvent)) {\n                    event.preventDefault();\n\n                    if (HistoryEditor.isHistoryEditor(editor)) {\n                        editor.redo();\n                    }\n\n                    return;\n                }\n\n                if (Hotkeys.isUndo(nativeEvent)) {\n                    event.preventDefault();\n\n                    if (HistoryEditor.isHistoryEditor(editor)) {\n                        editor.undo();\n                    }\n\n                    return;\n                }\n\n                // COMPAT: Certain browsers don't handle the selection updates\n                // properly. In Chrome, the selection isn't properly extended.\n                // And in Firefox, the selection isn't properly collapsed.\n                // (2017/10/17)\n                if (Hotkeys.isMoveLineBackward(nativeEvent)) {\n                    event.preventDefault();\n                    Transforms.move(editor, { unit: 'line', reverse: true });\n                    return;\n                }\n\n                if (Hotkeys.isMoveLineForward(nativeEvent)) {\n                    event.preventDefault();\n                    Transforms.move(editor, { unit: 'line' });\n                    return;\n                }\n\n                if (Hotkeys.isExtendLineBackward(nativeEvent)) {\n                    event.preventDefault();\n                    Transforms.move(editor, {\n                        unit: 'line',\n                        edge: 'focus',\n                        reverse: true\n                    });\n                    return;\n                }\n\n                if (Hotkeys.isExtendLineForward(nativeEvent)) {\n                    event.preventDefault();\n                    Transforms.move(editor, { unit: 'line', edge: 'focus' });\n                    return;\n                }\n\n                // COMPAT: If a void node is selected, or a zero-width text node\n                // adjacent to an inline is selected, we need to handle these\n                // hotkeys manually because browsers won't be able to skip over\n                // the void node with the zero-width space not being an empty\n                // string.\n                if (Hotkeys.isMoveBackward(nativeEvent)) {\n                    event.preventDefault();\n\n                    if (selection && Range.isCollapsed(selection)) {\n                        Transforms.move(editor, { reverse: !isRTL });\n                    } else {\n                        Transforms.collapse(editor, { edge: 'start' });\n                    }\n\n                    return;\n                }\n\n                if (Hotkeys.isMoveForward(nativeEvent)) {\n                    event.preventDefault();\n                    if (selection && Range.isCollapsed(selection)) {\n                        Transforms.move(editor, { reverse: isRTL });\n                    } else {\n                        Transforms.collapse(editor, { edge: 'end' });\n                    }\n\n                    return;\n                }\n\n                if (Hotkeys.isMoveWordBackward(nativeEvent)) {\n                    event.preventDefault();\n\n                    if (selection && Range.isExpanded(selection)) {\n                        Transforms.collapse(editor, { edge: 'focus' });\n                    }\n\n                    Transforms.move(editor, { unit: 'word', reverse: !isRTL });\n                    return;\n                }\n\n                if (Hotkeys.isMoveWordForward(nativeEvent)) {\n                    event.preventDefault();\n\n                    if (selection && Range.isExpanded(selection)) {\n                        Transforms.collapse(editor, { edge: 'focus' });\n                    }\n\n                    Transforms.move(editor, { unit: 'word', reverse: isRTL });\n                    return;\n                }\n\n                if (isKeyHotkey('mod+a', event)) {\n                    this.editor.selectAll();\n                    event.preventDefault();\n                    return;\n                }\n\n                // COMPAT: Certain browsers don't support the `beforeinput` event, so we\n                // fall back to guessing at the input intention for hotkeys.\n                // COMPAT: In iOS, some of these hotkeys are handled in the\n                if (!HAS_BEFORE_INPUT_SUPPORT) {\n                    // We don't have a core behavior for these, but they change the\n                    // DOM if we don't prevent them, so we have to.\n                    if (Hotkeys.isBold(nativeEvent) || Hotkeys.isItalic(nativeEvent) || Hotkeys.isTransposeCharacter(nativeEvent)) {\n                        event.preventDefault();\n                        return;\n                    }\n\n                    if (Hotkeys.isSplitBlock(nativeEvent)) {\n                        event.preventDefault();\n                        Editor.insertBreak(editor);\n                        return;\n                    }\n\n                    if (Hotkeys.isDeleteBackward(nativeEvent)) {\n                        event.preventDefault();\n\n                        if (selection && Range.isExpanded(selection)) {\n                            Editor.deleteFragment(editor, {\n                                direction: 'backward'\n                            });\n                        } else {\n                            Editor.deleteBackward(editor);\n                        }\n\n                        return;\n                    }\n\n                    if (Hotkeys.isDeleteForward(nativeEvent)) {\n                        event.preventDefault();\n\n                        if (selection && Range.isExpanded(selection)) {\n                            Editor.deleteFragment(editor, {\n                                direction: 'forward'\n                            });\n                        } else {\n                            Editor.deleteForward(editor);\n                        }\n\n                        return;\n                    }\n\n                    if (Hotkeys.isDeleteLineBackward(nativeEvent)) {\n                        event.preventDefault();\n\n                        if (selection && Range.isExpanded(selection)) {\n                            Editor.deleteFragment(editor, {\n                                direction: 'backward'\n                            });\n                        } else {\n                            Editor.deleteBackward(editor, { unit: 'line' });\n                        }\n\n                        return;\n                    }\n\n                    if (Hotkeys.isDeleteLineForward(nativeEvent)) {\n                        event.preventDefault();\n\n                        if (selection && Range.isExpanded(selection)) {\n                            Editor.deleteFragment(editor, {\n                                direction: 'forward'\n                            });\n                        } else {\n                            Editor.deleteForward(editor, { unit: 'line' });\n                        }\n\n                        return;\n                    }\n\n                    if (Hotkeys.isDeleteWordBackward(nativeEvent)) {\n                        event.preventDefault();\n\n                        if (selection && Range.isExpanded(selection)) {\n                            Editor.deleteFragment(editor, {\n                                direction: 'backward'\n                            });\n                        } else {\n                            Editor.deleteBackward(editor, { unit: 'word' });\n                        }\n\n                        return;\n                    }\n\n                    if (Hotkeys.isDeleteWordForward(nativeEvent)) {\n                        event.preventDefault();\n\n                        if (selection && Range.isExpanded(selection)) {\n                            Editor.deleteFragment(editor, {\n                                direction: 'forward'\n                            });\n                        } else {\n                            Editor.deleteForward(editor, { unit: 'word' });\n                        }\n\n                        return;\n                    }\n                } else {\n                    if (IS_CHROME || IS_SAFARI) {\n                        // COMPAT: Chrome and Safari support `beforeinput` event but do not fire\n                        // an event when deleting backwards in a selected void inline node\n                        if (\n                            selection &&\n                            (Hotkeys.isDeleteBackward(nativeEvent) || Hotkeys.isDeleteForward(nativeEvent)) &&\n                            Range.isCollapsed(selection)\n                        ) {\n                            const currentNode = Node.parent(editor, selection.anchor.path);\n                            if (\n                                Element.isElement(currentNode) &&\n                                Editor.isVoid(editor, currentNode) &&\n                                (Editor.isInline(editor, currentNode) || Editor.isBlock(editor, currentNode))\n                            ) {\n                                event.preventDefault();\n                                Editor.deleteBackward(editor, {\n                                    unit: 'block'\n                                });\n                                return;\n                            }\n                        }\n                    }\n                }\n            } catch (error) {\n                this.editor.onError({\n                    code: SlateErrorCode.OnDOMKeydownError,\n                    nativeError: error\n                });\n            }\n        }\n    }\n\n    private onDOMPaste(event: ClipboardEvent) {\n        // COMPAT: Certain browsers don't support the `beforeinput` event, so we\n        // fall back to React's `onPaste` here instead.\n        // COMPAT: Firefox, Chrome and Safari are not emitting `beforeinput` events\n        // when \"paste without formatting\" option is used.\n        // This unfortunately needs to be handled with paste events instead.\n        if (\n            !this.isDOMEventHandled(event, this.paste) &&\n            (!HAS_BEFORE_INPUT_SUPPORT || isPlainTextOnlyPaste(event) || forceOnDOMPaste) &&\n            !this.readonly &&\n            AngularEditor.hasEditableTarget(this.editor, event.target)\n        ) {\n            event.preventDefault();\n            AngularEditor.insertData(this.editor, event.clipboardData);\n        }\n    }\n\n    private onFallbackBeforeInput(event: BeforeInputEvent) {\n        // COMPAT: Certain browsers don't support the `beforeinput` event, so we\n        // fall back to React's leaky polyfill instead just for it. It\n        // only works for the `insertText` input type.\n        if (\n            !HAS_BEFORE_INPUT_SUPPORT &&\n            !this.readonly &&\n            !this.isDOMEventHandled(event.nativeEvent, this.beforeInput) &&\n            AngularEditor.hasEditableTarget(this.editor, event.nativeEvent.target)\n        ) {\n            event.nativeEvent.preventDefault();\n            try {\n                const text = event.data;\n                if (!Range.isCollapsed(this.editor.selection)) {\n                    Editor.deleteFragment(this.editor);\n                }\n                // just handle Non-IME input\n                if (!this.isComposing) {\n                    Editor.insertText(this.editor, text);\n                }\n            } catch (error) {\n                this.editor.onError({\n                    code: SlateErrorCode.ToNativeSelectionError,\n                    nativeError: error\n                });\n            }\n        }\n    }\n\n    private isDOMEventHandled(event: Event, handler?: (event: Event) => void) {\n        if (!handler) {\n            return false;\n        }\n        handler(event);\n        return event.defaultPrevented;\n    }\n    //#endregion\n\n    ngOnDestroy() {\n        this.editorResizeObserver?.disconnect();\n        this.editorScrollContainerResizeObserver?.disconnect();\n        NODE_TO_ELEMENT.delete(this.editor);\n        this.manualListeners.forEach(manualListener => {\n            manualListener();\n        });\n        this.destroy$.complete();\n        this.indicsOfNeedRemeasured$.complete();\n        EDITOR_TO_ON_CHANGE.delete(this.editor);\n    }\n}\n\nexport const defaultScrollSelectionIntoView = (editor: AngularEditor, domRange: DOMRange) => {\n    // This was affecting the selection of multiple blocks and dragging behavior,\n    // so enabled only if the selection has been collapsed.\n    if (domRange.getBoundingClientRect && (!editor.selection || (editor.selection && Range.isCollapsed(editor.selection)))) {\n        const leafEl = domRange.startContainer.parentElement!;\n\n        // COMPAT: In Chrome, domRange.getBoundingClientRect() can return zero dimensions for valid ranges (e.g. line breaks).\n        // When this happens, do not scroll like most editors do.\n        const domRect = domRange.getBoundingClientRect();\n        const isZeroDimensionRect = domRect.width === 0 && domRect.height === 0 && domRect.x === 0 && domRect.y === 0;\n\n        if (isZeroDimensionRect) {\n            const leafRect = leafEl.getBoundingClientRect();\n            const leafHasDimensions = leafRect.width > 0 || leafRect.height > 0;\n\n            if (leafHasDimensions) {\n                return;\n            }\n        }\n\n        leafEl.getBoundingClientRect = domRange.getBoundingClientRect.bind(domRange);\n        scrollIntoView(leafEl, {\n            scrollMode: 'if-needed'\n        });\n        delete leafEl.getBoundingClientRect;\n    }\n};\n\n/**\n * Check if the target is inside void and in the editor.\n */\n\nconst isTargetInsideVoid = (editor: AngularEditor, target: EventTarget | null): boolean => {\n    let slateNode: Node | null = null;\n    try {\n        slateNode = AngularEditor.hasTarget(editor, target) && AngularEditor.toSlateNode(editor, target);\n    } catch (error) {}\n    return slateNode && Element.isElement(slateNode) && Editor.isVoid(editor, slateNode);\n};\n\nexport const isSelectionInsideVoid = (editor: AngularEditor) => {\n    const selection = editor.selection;\n    if (selection && Range.isCollapsed(selection)) {\n        const currentNode = Node.parent(editor, selection.anchor.path);\n        return Element.isElement(currentNode) && Editor.isVoid(editor, currentNode);\n    }\n    return false;\n};\n\nconst hasStringTarget = (domSelection: DOMSelection) => {\n    return (\n        (domSelection.anchorNode.parentElement.hasAttribute('data-slate-string') ||\n            domSelection.anchorNode.parentElement.hasAttribute('data-slate-zero-width')) &&\n        (domSelection.focusNode.parentElement.hasAttribute('data-slate-string') ||\n            domSelection.focusNode.parentElement.hasAttribute('data-slate-zero-width'))\n    );\n};\n\n/**\n * remove default insert from composition\n * @param text\n */\nconst preventInsertFromComposition = (event: Event, editor: AngularEditor) => {\n    const types = ['compositionend', 'insertFromComposition'];\n    if (!types.includes(event.type)) {\n        return;\n    }\n    const insertText = (event as CompositionEvent).data;\n    const window = AngularEditor.getWindow(editor);\n    const domSelection = window.getSelection();\n    // ensure text node insert composition input text\n    if (insertText && domSelection.anchorNode instanceof Text && domSelection.anchorNode.textContent.endsWith(insertText)) {\n        const textNode = domSelection.anchorNode;\n        textNode.splitText(textNode.length - insertText.length).remove();\n    }\n};\n","import { ChangeDetectionStrategy, Component, ElementRef, inject } from '@angular/core';\n\n@Component({\n    selector: 'slate-children-outlet',\n    template: ``,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true\n})\nexport class SlateChildrenOutlet {\n    public elementRef = inject(ElementRef<HTMLElement>);\n    getNativeElement() {\n        return this.elementRef.nativeElement;\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SlateEditable } from './components/editable/editable.component';\nimport { SlateChildrenOutlet } from './components/children/children-outlet.component';\n\n@NgModule({\n    imports: [CommonModule, SlateEditable, SlateChildrenOutlet],\n    exports: [SlateEditable, SlateChildrenOutlet],\n    providers: []\n})\nexport class SlateModule {}\n","import {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    HostBinding,\n    Input,\n    OnDestroy,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n    inject\n} from '@angular/core';\nimport { Descendant, Element, Range, Text } from 'slate';\nimport { SlateChildrenOutlet } from '../components/children/children-outlet.component';\nimport { AngularEditor } from '../plugins/angular-editor';\nimport { ELEMENT_TO_COMPONENT } from '../utils/weak-maps';\nimport { SlateChildrenContext, SlateElementContext, SlateLeafContext, SlateTextContext, SlateViewContext } from './context';\nimport { hasAfterContextChange, hasBeforeContextChange } from './view-interface';\nimport { LeavesRender } from './render/leaves-render';\nimport { ListRender, addAfterViewInitQueue } from './render/list-render';\nimport { ELEMENT_TO_NODE, NODE_TO_ELEMENT } from 'slate-dom';\nimport { getContentHeight } from '../utils/dom';\nimport { SlateStringRender } from '../components/string/string-render';\nimport { getBlockCardByNativeElement } from '../components/block-card/block-card';\n\n/**\n * base class for template\n */\nexport interface BaseEmbeddedView<T, K extends AngularEditor = AngularEditor> {\n    context: T;\n    viewContext: SlateViewContext<K>;\n}\n\n/**\n * base class for custom element component or text component\n */\n@Directive()\nexport abstract class BaseComponent<\n    T = SlateTextContext | SlateLeafContext | SlateElementContext,\n    K extends AngularEditor = AngularEditor\n> {\n    initialized = false;\n\n    protected _context: T;\n\n    @Input()\n    set context(value: T) {\n        if (hasBeforeContextChange<T>(this)) {\n            this.beforeContextChange(value);\n        }\n        this._context = value;\n        this.onContextChange();\n        if (this.initialized) {\n            this.cdr.detectChanges();\n        }\n        if (hasAfterContextChange<T>(this)) {\n            this.afterContextChange();\n        }\n    }\n\n    get context() {\n        return this._context;\n    }\n\n    @Input() viewContext: SlateViewContext<K>;\n\n    get editor() {\n        return this.viewContext && this.viewContext.editor;\n    }\n\n    get nativeElement(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    public elementRef = inject(ElementRef);\n\n    public cdr = inject(ChangeDetectorRef);\n\n    abstract onContextChange();\n}\n\n/**\n * base class for custom element component\n */\n@Directive()\nexport class BaseElementComponent<T extends Element = Element, K extends AngularEditor = AngularEditor>\n    extends BaseComponent<SlateElementContext<T>, K>\n    implements OnInit, OnDestroy\n{\n    viewContainerRef = inject(ViewContainerRef);\n\n    childrenContext: SlateChildrenContext;\n\n    @ViewChild(SlateChildrenOutlet, { static: true })\n    childrenOutletInstance?: SlateChildrenOutlet;\n\n    get element(): T {\n        return this._context && this._context.element;\n    }\n\n    get selection(): Range {\n        return this._context && this._context.selection;\n    }\n\n    get decorations(): Range[] {\n        return this._context && this._context.decorations;\n    }\n\n    get children(): Descendant[] {\n        return this._context && this._context.element.children;\n    }\n\n    get isCollapsed() {\n        return this.selection && Range.isCollapsed(this.selection);\n    }\n\n    get isCollapsedAndNonReadonly() {\n        return this.selection && Range.isCollapsed(this.selection) && !this.readonly;\n    }\n\n    get readonly() {\n        return this._context && this._context.readonly;\n    }\n\n    getOutletParent = () => {\n        return this.elementRef.nativeElement;\n    };\n\n    getOutletElement = () => {\n        if (this.childrenOutletInstance) {\n            return this.childrenOutletInstance.getNativeElement();\n        }\n        return null;\n    };\n\n    listRender: ListRender;\n\n    ngOnInit() {\n        for (const key in this._context.attributes) {\n            this.nativeElement.setAttribute(key, this._context.attributes[key]);\n        }\n        this.initialized = true;\n        this.listRender = new ListRender(this.viewContext, this.viewContainerRef, this.getOutletParent, this.getOutletElement);\n        if (this.editor.isExpanded(this.element)) {\n            this.listRender.initialize(this.children, this.element, this.childrenContext);\n        }\n        addAfterViewInitQueue(this.editor, () => {\n            this.afterViewInit();\n        });\n    }\n\n    afterViewInit() {\n        if (this._context.contentEditable !== undefined) {\n            this.nativeElement.setAttribute('contenteditable', this._context.contentEditable + '');\n        }\n    }\n\n    updateWeakMap() {\n        NODE_TO_ELEMENT.set(this.element, this.nativeElement);\n        ELEMENT_TO_NODE.set(this.nativeElement, this.element);\n        ELEMENT_TO_COMPONENT.set(this.element, this);\n    }\n\n    ngOnDestroy() {\n        if (NODE_TO_ELEMENT.get(this.element) === this.nativeElement) {\n            NODE_TO_ELEMENT.delete(this.element);\n        }\n        ELEMENT_TO_NODE.delete(this.nativeElement);\n        if (ELEMENT_TO_COMPONENT.get(this.element) === this) {\n            ELEMENT_TO_COMPONENT.delete(this.element);\n        }\n        this.listRender.destroy();\n    }\n\n    onContextChange() {\n        this.childrenContext = this.getChildrenContext();\n        this.updateWeakMap();\n        if (!this.initialized) {\n            return;\n        }\n        this.updateChildrenView();\n    }\n\n    updateChildrenView() {\n        if (this.editor.isExpanded(this.element)) {\n            this.listRender.update(this.children, this.element, this.childrenContext);\n        } else {\n            if (this.listRender.initialized) {\n                this.listRender.destroy();\n            }\n        }\n    }\n\n    getChildrenContext(): SlateChildrenContext {\n        return {\n            parent: this._context.element,\n            selection: this._context.selection,\n            decorations: this._context.decorations,\n            decorate: this._context.decorate,\n            readonly: this._context.readonly\n        };\n    }\n\n    calcHeight(): number {\n        const blockCard = getBlockCardByNativeElement(this.nativeElement);\n        const target = blockCard || this.nativeElement;\n        const computedStyle = getComputedStyle(target);\n        const height =\n            Math.ceil(target.getBoundingClientRect().height) + parseFloat(computedStyle.marginTop) + parseFloat(computedStyle.marginBottom);\n        return height;\n    }\n}\n\n/**\n * base class for custom text component\n */\n@Directive()\nexport class BaseTextComponent<T extends Text = Text> extends BaseComponent<SlateTextContext<T>> implements OnInit, OnDestroy {\n    viewContainerRef = inject(ViewContainerRef);\n\n    get text(): T {\n        return this._context && this._context.text;\n    }\n\n    leavesRender: LeavesRender;\n\n    @ViewChild(SlateChildrenOutlet, { static: true })\n    childrenOutletInstance?: SlateChildrenOutlet;\n\n    getOutletParent = () => {\n        return this.elementRef.nativeElement;\n    };\n\n    getOutletElement = () => {\n        if (this.childrenOutletInstance) {\n            return this.childrenOutletInstance.getNativeElement();\n        }\n        return null;\n    };\n\n    ngOnInit() {\n        this.initialized = true;\n        this.leavesRender = new LeavesRender(this.viewContext, this.viewContainerRef, this.getOutletParent, this.getOutletElement);\n        this.leavesRender.initialize(this.context);\n    }\n\n    updateWeakMap() {\n        ELEMENT_TO_NODE.set(this.nativeElement, this.text);\n        NODE_TO_ELEMENT.set(this.text, this.nativeElement);\n    }\n\n    ngOnDestroy() {\n        if (NODE_TO_ELEMENT.get(this.text) === this.nativeElement) {\n            NODE_TO_ELEMENT.delete(this.text);\n        }\n        ELEMENT_TO_NODE.delete(this.nativeElement);\n        this.leavesRender.destroy();\n    }\n\n    onContextChange() {\n        this.updateWeakMap();\n        if (!this.initialized) {\n            return;\n        }\n        this.leavesRender.update(this.context);\n    }\n}\n\n/**\n * base class for custom leaf component\n */\n@Directive()\nexport class BaseLeafComponent extends BaseComponent<SlateLeafContext> implements OnInit {\n    placeholderElement: HTMLSpanElement;\n\n    stringRender: SlateStringRender | null = null;\n\n    @HostBinding('attr.data-slate-leaf') isSlateLeaf = true;\n\n    get text(): Text {\n        return this.context && this.context.text;\n    }\n\n    get leaf(): Text {\n        return this.context && this.context.leaf;\n    }\n\n    getOutletParent = () => {\n        return this.elementRef.nativeElement;\n    };\n\n    ngOnInit() {\n        this.initialized = true;\n    }\n\n    onContextChange() {\n        if (!this.initialized) {\n            this.stringRender = new SlateStringRender(this.context, this.viewContext);\n            const stringNode = this.stringRender.render();\n            this.getOutletParent().appendChild(stringNode);\n        } else {\n            this.stringRender?.update(this.context, this.viewContext);\n        }\n        if (!this.initialized) {\n            return;\n        }\n    }\n\n    renderPlaceholder() {\n        // issue-1: IME input was interrupted\n        // issue-2: IME input focus jumping\n        // Issue occurs when the span node of the placeholder is before the slateString span node\n        if (this.context.leaf['placeholder']) {\n            if (!this.placeholderElement) {\n                this.createPlaceholder();\n            }\n            this.updatePlaceholder();\n        } else {\n            this.destroyPlaceholder();\n        }\n    }\n\n    createPlaceholder() {\n        const placeholderElement = document.createElement('span');\n        placeholderElement.innerText = this.context.leaf['placeholder'];\n        placeholderElement.contentEditable = 'false';\n        placeholderElement.setAttribute('data-slate-placeholder', 'true');\n        this.placeholderElement = placeholderElement;\n        this.nativeElement.classList.add('leaf-with-placeholder');\n        this.nativeElement.appendChild(placeholderElement);\n\n        setTimeout(() => {\n            const editorElement = this.nativeElement.closest('.the-editor-typo');\n            const editorContentHeight = getContentHeight(editorElement);\n            if (editorContentHeight > 0) {\n                // Not supported webkitLineClamp exceeds height hiding\n                placeholderElement.style.maxHeight = `${editorContentHeight}px`;\n            }\n            const lineClamp = Math.floor(editorContentHeight / this.nativeElement.offsetHeight) || 0;\n            placeholderElement.style.webkitLineClamp = `${Math.max(lineClamp, 1)}`;\n        });\n    }\n\n    updatePlaceholder() {\n        if (this.placeholderElement.innerText !== this.context.leaf['placeholder']) {\n            this.placeholderElement.innerText = this.context.leaf['placeholder'];\n        }\n    }\n\n    destroyPlaceholder() {\n        if (this.placeholderElement) {\n            this.placeholderElement.remove();\n            this.placeholderElement = null;\n            this.nativeElement.classList.remove('leaf-with-placeholder');\n        }\n    }\n}\n","/*\n * Public API Surface of slate-angular\n */\nexport * from './plugins/angular-editor';\nexport * from './plugins/with-angular';\nexport * from './components/editable/editable.component';\nexport * from './components/children/children-outlet.component';\nexport * from './components/text/default-text.flavour';\nexport * from './components/block-card/block-card';\nexport * from './module';\nexport * from './types/error';\nexport * from './view/base';\nexport * from './view/context';\nexport * from './view/flavour';\nexport * from './view/view-interface';\nexport * from './utils';\nexport * from './types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["IS_CHROME","Text","FallbackCompositionStateGetData","FallbackCompositionStateReset","getContext","getViewType","trackBy","Hotkeys"],"mappings":"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"}