UNPKG

251 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.es.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../src/components/string.tsx","../src/utils/weak-maps.ts","../src/components/leaf.tsx","../src/utils/environment.ts","../src/hooks/use-isomorphic-layout-effect.ts","../src/utils/range-list.ts","../src/components/text.tsx","../src/hooks/use-selected.ts","../src/components/element.tsx","../src/hooks/use-slate-static.tsx","../src/hooks/use-decorate.ts","../src/hooks/use-children.tsx","../src/utils/hotkeys.ts","../src/hooks/use-read-only.ts","../src/hooks/use-slate.tsx","../src/utils/dom.ts","../src/components/editable.tsx","../src/utils/key.ts","../src/plugin/react-editor.ts","../src/components/android/diff-text.ts","../src/components/android/mutation-detection.ts","../src/components/android/restore-dom.ts","../src/components/android/android-input-manager.ts","../src/components/android/use-mutation-observer.ts","../src/components/android/use-track-user-input.ts","../src/components/android/use-android-input-manager.ts","../src/components/android/android-editable.tsx","../src/hooks/use-focused.ts","../src/components/slate.tsx","../src/hooks/use-editor.tsx","../src/utils/lines.ts","../src/plugin/with-react.ts","../src/index.ts"],"sourcesContent":["export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","import React from 'react'\nimport { Editor, Text, Path, Element, Node } from 'slate'\n\nimport { ReactEditor, useSlateStatic } from '..'\n\n/**\n * Leaf content strings.\n */\n\nconst String = (props: {\n isLast: boolean\n leaf: Text\n parent: Element\n text: Text\n}) => {\n const { isLast, leaf, parent, text } = props\n const editor = useSlateStatic()\n const path = ReactEditor.findPath(editor, text)\n const parentPath = Path.parent(path)\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 if (editor.isVoid(parent)) {\n return <ZeroWidthString length={Node.string(parent).length} />\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 if (\n leaf.text === '' &&\n parent.children[parent.children.length - 1] === text &&\n !editor.isInline(parent) &&\n Editor.string(editor, parentPath) === ''\n ) {\n return <ZeroWidthString isLineBreak />\n }\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 if (leaf.text === '') {\n return <ZeroWidthString />\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 if (isLast && leaf.text.slice(-1) === '\\n') {\n return <TextString isTrailing text={leaf.text} />\n }\n\n return <TextString text={leaf.text} />\n}\n\n/**\n * Leaf strings with text in them.\n */\n\nconst TextString = (props: { text: string; isTrailing?: boolean }) => {\n const { text, isTrailing = false } = props\n return (\n <span data-slate-string>\n {text}\n {isTrailing ? '\\n' : null}\n </span>\n )\n}\n\n/**\n * Leaf strings without text, render as zero-width strings.\n */\n\nconst ZeroWidthString = (props: { length?: number; isLineBreak?: boolean }) => {\n const { length = 0, isLineBreak = false } = props\n return (\n <span\n data-slate-zero-width={isLineBreak ? 'n' : 'z'}\n data-slate-length={length}\n >\n {'\\uFEFF'}\n {isLineBreak ? <br /> : null}\n </span>\n )\n}\n\nexport default String\n","import { Node, Ancestor, Editor, Range } from 'slate'\n\nimport { Key } from './key'\n\n/**\n * Two weak maps that allow us rebuild a path given a node. They are populated\n * at render time such that after a render occurs we can always backtrack.\n */\n\nexport const NODE_TO_INDEX: WeakMap<Node, number> = new WeakMap()\nexport const NODE_TO_PARENT: WeakMap<Node, Ancestor> = new WeakMap()\n\n/**\n * Weak maps that allow us to go between Slate nodes and DOM nodes. These\n * are used to resolve DOM event-related logic into Slate actions.\n */\nexport const EDITOR_TO_WINDOW: WeakMap<Editor, Window> = new WeakMap()\nexport const EDITOR_TO_ELEMENT: WeakMap<Editor, HTMLElement> = new WeakMap()\nexport const EDITOR_TO_PLACEHOLDER: WeakMap<Editor, string> = new WeakMap()\nexport const ELEMENT_TO_NODE: WeakMap<HTMLElement, Node> = new WeakMap()\nexport const KEY_TO_ELEMENT: WeakMap<Key, HTMLElement> = new WeakMap()\nexport const NODE_TO_ELEMENT: WeakMap<Node, HTMLElement> = new WeakMap()\nexport const NODE_TO_KEY: WeakMap<Node, Key> = new WeakMap()\n\n/**\n * Weak maps for storing editor-related state.\n */\n\nexport const IS_READ_ONLY: WeakMap<Editor, boolean> = new WeakMap()\nexport const IS_FOCUSED: WeakMap<Editor, boolean> = new WeakMap()\nexport const IS_DRAGGING: WeakMap<Editor, boolean> = new WeakMap()\nexport const IS_CLICKING: WeakMap<Editor, boolean> = new WeakMap()\n\n/**\n * Weak map for associating the context `onChange` context with the plugin.\n */\n\nexport const EDITOR_TO_ON_CHANGE = new WeakMap<Editor, () => void>()\n\nexport const EDITOR_TO_RESTORE_DOM = new WeakMap<Editor, () => void>()\n\n/**\n * Symbols.\n */\n\nexport const PLACEHOLDER_SYMBOL = (Symbol('placeholder') as unknown) as string\n","import React, { useRef, useEffect } from 'react'\nimport { Element, Text } from 'slate'\nimport String from './string'\nimport { PLACEHOLDER_SYMBOL } from '../utils/weak-maps'\nimport { RenderLeafProps, RenderPlaceholderProps } from './editable'\n\n// auto-incrementing key for String component, force it refresh to\n// prevent inconsistent rendering by React with IME input\nlet keyForString = 0\n/**\n * Individual leaves in a text node with unique formatting.\n */\n\nconst Leaf = (props: {\n isLast: boolean\n leaf: Text\n parent: Element\n renderPlaceholder: (props: RenderPlaceholderProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n text: Text\n}) => {\n const {\n leaf,\n isLast,\n text,\n parent,\n renderPlaceholder,\n renderLeaf = (props: RenderLeafProps) => <DefaultLeaf {...props} />,\n } = props\n\n const placeholderRef = useRef<HTMLSpanElement | null>(null)\n\n useEffect(() => {\n const placeholderEl = placeholderRef?.current\n const editorEl = document.querySelector<HTMLDivElement>(\n '[data-slate-editor=\"true\"]'\n )\n\n if (!placeholderEl || !editorEl) {\n return\n }\n\n editorEl.style.minHeight = `${placeholderEl.clientHeight}px`\n\n return () => {\n editorEl.style.minHeight = 'auto'\n }\n }, [placeholderRef, leaf])\n\n let children = (\n <String\n key={keyForString++}\n isLast={isLast}\n leaf={leaf}\n parent={parent}\n text={text}\n />\n )\n\n if (leaf[PLACEHOLDER_SYMBOL]) {\n const placeholderProps: RenderPlaceholderProps = {\n children: leaf.placeholder,\n attributes: {\n 'data-slate-placeholder': true,\n style: {\n position: 'absolute',\n pointerEvents: 'none',\n width: '100%',\n maxWidth: '100%',\n display: 'block',\n opacity: '0.333',\n userSelect: 'none',\n textDecoration: 'none',\n },\n contentEditable: false,\n ref: placeholderRef,\n },\n }\n\n children = (\n <React.Fragment>\n {renderPlaceholder(placeholderProps)}\n {children}\n </React.Fragment>\n )\n }\n\n // COMPAT: Having the `data-` attributes on these leaf elements ensures that\n // in certain misbehaving browsers they aren't weirdly cloned/destroyed by\n // contenteditable behaviors. (2019/05/08)\n const attributes: {\n 'data-slate-leaf': true\n } = {\n 'data-slate-leaf': true,\n }\n\n return renderLeaf({ attributes, children, leaf, text })\n}\n\nconst MemoizedLeaf = React.memo(Leaf, (prev, next) => {\n return (\n next.parent === prev.parent &&\n next.isLast === prev.isLast &&\n next.renderLeaf === prev.renderLeaf &&\n next.renderPlaceholder === prev.renderPlaceholder &&\n next.text === prev.text &&\n next.leaf.text === prev.leaf.text &&\n Text.matches(next.leaf, prev.leaf) &&\n next.leaf[PLACEHOLDER_SYMBOL] === prev.leaf[PLACEHOLDER_SYMBOL]\n )\n})\n\nexport const DefaultLeaf = (props: RenderLeafProps) => {\n const { attributes, children } = props\n return <span {...attributes}>{children}</span>\n}\n\nexport default MemoizedLeaf\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !window.MSStream\n\nexport const IS_APPLE =\n typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent)\n\nexport const IS_ANDROID =\n typeof navigator !== 'undefined' && /Android/.test(navigator.userAgent)\n\nexport const IS_FIREFOX =\n typeof navigator !== 'undefined' &&\n /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent)\n\nexport const IS_SAFARI =\n typeof navigator !== 'undefined' &&\n /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent)\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY =\n typeof navigator !== 'undefined' &&\n /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent)\n\nexport const IS_CHROME =\n typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent)\n\n// Native `beforeInput` events don't work well with react on Chrome 75\n// and older, Chrome 76+ can use `beforeInput` though.\nexport const IS_CHROME_LEGACY =\n typeof navigator !== 'undefined' &&\n /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent)\n\n// Firefox did not support `beforeInput` until `v87`.\nexport const IS_FIREFOX_LEGACY =\n typeof navigator !== 'undefined' &&\n /^(?!.*Seamonkey)(?=.*Firefox\\/(?:[0-7][0-9]|[0-8][0-6])).*/i.test(\n navigator.userAgent\n )\n\n// Check if DOM is available as React does internally.\n// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const CAN_USE_DOM = !!(\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined'\n)\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","import { useLayoutEffect, useEffect } from 'react'\nimport { CAN_USE_DOM } from '../utils/environment'\n\n/**\n * Prevent warning on SSR by falling back to useEffect when DOM isn't available\n */\n\nexport const useIsomorphicLayoutEffect = CAN_USE_DOM\n ? useLayoutEffect\n : useEffect\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(\n key => obj2.hasOwnProperty(key) && obj1[key] === obj2[key]\n )\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 = (\n list: Range[],\n another: Range[]\n): 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 React, { useRef } from 'react'\nimport { Range, Element, Text as SlateText } from 'slate'\n\nimport Leaf from './leaf'\nimport { ReactEditor, useSlateStatic } from '..'\nimport { RenderLeafProps, RenderPlaceholderProps } from './editable'\nimport { useIsomorphicLayoutEffect } from '../hooks/use-isomorphic-layout-effect'\nimport {\n KEY_TO_ELEMENT,\n NODE_TO_ELEMENT,\n ELEMENT_TO_NODE,\n} from '../utils/weak-maps'\nimport { isDecoratorRangeListEqual } from '../utils/range-list'\n\n/**\n * Text.\n */\n\nconst Text = (props: {\n decorations: Range[]\n isLast: boolean\n parent: Element\n renderPlaceholder: (props: RenderPlaceholderProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n text: SlateText\n}) => {\n const {\n decorations,\n isLast,\n parent,\n renderPlaceholder,\n renderLeaf,\n text,\n } = props\n const editor = useSlateStatic()\n const ref = useRef<HTMLSpanElement>(null)\n const leaves = SlateText.decorations(text, decorations)\n const key = ReactEditor.findKey(editor, text)\n const children = []\n\n for (let i = 0; i < leaves.length; i++) {\n const leaf = leaves[i]\n\n children.push(\n <Leaf\n isLast={isLast && i === leaves.length - 1}\n key={`${key.id}-${i}`}\n renderPlaceholder={renderPlaceholder}\n leaf={leaf}\n text={text}\n parent={parent}\n renderLeaf={renderLeaf}\n />\n )\n }\n\n // Update element-related weak maps with the DOM element ref.\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\n KEY_TO_ELEMENT.set(key, ref.current)\n NODE_TO_ELEMENT.set(text, ref.current)\n ELEMENT_TO_NODE.set(ref.current, text)\n } else {\n KEY_TO_ELEMENT.delete(key)\n NODE_TO_ELEMENT.delete(text)\n }\n })\n\n return (\n <span data-slate-node=\"text\" ref={ref}>\n {children}\n </span>\n )\n}\n\nconst MemoizedText = React.memo(Text, (prev, next) => {\n return (\n next.parent === prev.parent &&\n next.isLast === prev.isLast &&\n next.renderLeaf === prev.renderLeaf &&\n next.text === prev.text &&\n isDecoratorRangeListEqual(next.decorations, prev.decorations)\n )\n})\n\nexport default MemoizedText\n","import { createContext, useContext } from 'react'\n\n/**\n * A React context for sharing the `selected` state of an element.\n */\n\nexport const SelectedContext = createContext(false)\n\n/**\n * Get the current `selected` state of an element.\n */\n\nexport const useSelected = (): boolean => {\n return useContext(SelectedContext)\n}\n","import React, { useRef } from 'react'\nimport getDirection from 'direction'\nimport { Editor, Node, Range, NodeEntry, Element as SlateElement } from 'slate'\n\nimport Text from './text'\nimport useChildren from '../hooks/use-children'\nimport { ReactEditor, useSlateStatic, useReadOnly } from '..'\nimport { SelectedContext } from '../hooks/use-selected'\nimport { useIsomorphicLayoutEffect } from '../hooks/use-isomorphic-layout-effect'\nimport {\n NODE_TO_ELEMENT,\n ELEMENT_TO_NODE,\n NODE_TO_PARENT,\n NODE_TO_INDEX,\n KEY_TO_ELEMENT,\n} from '../utils/weak-maps'\nimport { isDecoratorRangeListEqual } from '../utils/range-list'\nimport {\n RenderElementProps,\n RenderLeafProps,\n RenderPlaceholderProps,\n} from './editable'\n\n/**\n * Element.\n */\n\nconst Element = (props: {\n decorations: Range[]\n element: SlateElement\n renderElement?: (props: RenderElementProps) => JSX.Element\n renderPlaceholder: (props: RenderPlaceholderProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n selection: Range | null\n}) => {\n const {\n decorations,\n element,\n renderElement = (p: RenderElementProps) => <DefaultElement {...p} />,\n renderPlaceholder,\n renderLeaf,\n selection,\n } = props\n const ref = useRef<HTMLElement>(null)\n const editor = useSlateStatic()\n const readOnly = useReadOnly()\n const isInline = editor.isInline(element)\n const key = ReactEditor.findKey(editor, element)\n let children: React.ReactNode = useChildren({\n decorations,\n node: element,\n renderElement,\n renderPlaceholder,\n renderLeaf,\n selection,\n })\n\n // Attributes that the developer must mix into the element in their\n // custom node renderer component.\n const attributes: {\n 'data-slate-node': 'element'\n 'data-slate-void'?: true\n 'data-slate-inline'?: true\n contentEditable?: false\n dir?: 'rtl'\n ref: any\n } = {\n 'data-slate-node': 'element',\n ref,\n }\n\n if (isInline) {\n attributes['data-slate-inline'] = true\n }\n\n // If it's a block node with inline children, add the proper `dir` attribute\n // for text direction.\n if (!isInline && Editor.hasInlines(editor, element)) {\n const text = Node.string(element)\n const dir = getDirection(text)\n\n if (dir === 'rtl') {\n attributes.dir = dir\n }\n }\n\n // If it's a void node, wrap the children in extra void-specific elements.\n if (Editor.isVoid(editor, element)) {\n attributes['data-slate-void'] = true\n\n if (!readOnly && isInline) {\n attributes.contentEditable = false\n }\n\n const Tag = isInline ? 'span' : 'div'\n const [[text]] = Node.texts(element)\n\n children = readOnly ? null : (\n <Tag\n data-slate-spacer\n style={{\n height: '0',\n color: 'transparent',\n outline: 'none',\n position: 'absolute',\n }}\n >\n <Text\n renderPlaceholder={renderPlaceholder}\n decorations={[]}\n isLast={false}\n parent={element}\n text={text}\n />\n </Tag>\n )\n\n NODE_TO_INDEX.set(text, 0)\n NODE_TO_PARENT.set(text, element)\n }\n\n // Update element-related weak maps with the DOM element ref.\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\n KEY_TO_ELEMENT.set(key, ref.current)\n NODE_TO_ELEMENT.set(element, ref.current)\n ELEMENT_TO_NODE.set(ref.current, element)\n } else {\n KEY_TO_ELEMENT.delete(key)\n NODE_TO_ELEMENT.delete(element)\n }\n })\n\n return (\n <SelectedContext.Provider value={!!selection}>\n {renderElement({ attributes, children, element })}\n </SelectedContext.Provider>\n )\n}\n\nconst MemoizedElement = React.memo(Element, (prev, next) => {\n return (\n prev.element === next.element &&\n prev.renderElement === next.renderElement &&\n prev.renderLeaf === next.renderLeaf &&\n isDecoratorRangeListEqual(prev.decorations, next.decorations) &&\n (prev.selection === next.selection ||\n (!!prev.selection &&\n !!next.selection &&\n Range.equals(prev.selection, next.selection)))\n )\n})\n\n/**\n * The default element renderer.\n */\n\nexport const DefaultElement = (props: RenderElementProps) => {\n const { attributes, children, element } = props\n const editor = useSlateStatic()\n const Tag = editor.isInline(element) ? 'span' : 'div'\n return (\n <Tag {...attributes} style={{ position: 'relative' }}>\n {children}\n </Tag>\n )\n}\n\nexport default MemoizedElement\n","import { createContext, useContext } from 'react'\nimport { ReactEditor } from '../plugin/react-editor'\nimport { Editor } from 'slate'\n\n/**\n * A React context for sharing the editor object.\n */\n\nexport const EditorContext = createContext<ReactEditor | null>(null)\n\n/**\n * Get the current editor object from the React context.\n */\n\nexport const useSlateStatic = (): Editor => {\n const editor = useContext(EditorContext)\n\n if (!editor) {\n throw new Error(\n `The \\`useSlateStatic\\` hook must be used inside the <Slate> component's context.`\n )\n }\n\n return editor\n}\n","import { createContext, useContext } from 'react'\nimport { Range, NodeEntry } from 'slate'\n\n/**\n * A React context for sharing the `decorate` prop of the editable.\n */\n\nexport const DecorateContext = createContext<(entry: NodeEntry) => Range[]>(\n () => []\n)\n\n/**\n * Get the current `decorate` prop of the editable.\n */\n\nexport const useDecorate = (): ((entry: NodeEntry) => Range[]) => {\n return useContext(DecorateContext)\n}\n","import React from 'react'\nimport { Editor, Range, Element, NodeEntry, Ancestor, Descendant } from 'slate'\n\nimport ElementComponent from '../components/element'\nimport TextComponent from '../components/text'\nimport { ReactEditor } from '..'\nimport { useSlateStatic } from './use-slate-static'\nimport { useDecorate } from './use-decorate'\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../utils/weak-maps'\nimport {\n RenderElementProps,\n RenderLeafProps,\n RenderPlaceholderProps,\n} from '../components/editable'\n\n/**\n * Children.\n */\n\nconst useChildren = (props: {\n decorations: Range[]\n node: Ancestor\n renderElement?: (props: RenderElementProps) => JSX.Element\n renderPlaceholder: (props: RenderPlaceholderProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n selection: Range | null\n}) => {\n const {\n decorations,\n node,\n renderElement,\n renderPlaceholder,\n renderLeaf,\n selection,\n } = props\n const decorate = useDecorate()\n const editor = useSlateStatic()\n const path = ReactEditor.findPath(editor, node)\n const children = []\n const isLeafBlock =\n Element.isElement(node) &&\n !editor.isInline(node) &&\n Editor.hasInlines(editor, node)\n\n for (let i = 0; i < node.children.length; i++) {\n const p = path.concat(i)\n const n = node.children[i] as Descendant\n const key = ReactEditor.findKey(editor, n)\n const range = Editor.range(editor, p)\n const sel = selection && Range.intersection(range, selection)\n const ds = decorate([n, p])\n\n for (const dec of decorations) {\n const d = Range.intersection(dec, range)\n\n if (d) {\n ds.push(d)\n }\n }\n\n if (Element.isElement(n)) {\n children.push(\n <ElementComponent\n decorations={ds}\n element={n}\n key={key.id}\n renderElement={renderElement}\n renderPlaceholder={renderPlaceholder}\n renderLeaf={renderLeaf}\n selection={sel}\n />\n )\n } else {\n children.push(\n <TextComponent\n decorations={ds}\n key={key.id}\n isLast={isLeafBlock && i === node.children.length - 1}\n parent={node}\n renderPlaceholder={renderPlaceholder}\n renderLeaf={renderLeaf}\n text={n}\n />\n )\n }\n\n NODE_TO_INDEX.set(n, i)\n NODE_TO_PARENT.set(n, node)\n }\n\n return children\n}\n\nexport default useChildren\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 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)) return true\n if (IS_APPLE && isApple && isApple(event)) return true\n if (!IS_APPLE && isWindows && isWindows(event)) return true\n return false\n }\n}\n\n/**\n * Hotkeys.\n */\n\nexport default {\n isBold: create('bold'),\n isCompose: create('compose'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\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}\n","import { createContext, useContext } from 'react'\n\n/**\n * A React context for sharing the `readOnly` state of the editor.\n */\n\nexport const ReadOnlyContext = createContext(false)\n\n/**\n * Get the current `readOnly` state of the editor.\n */\n\nexport const useReadOnly = (): boolean => {\n return useContext(ReadOnlyContext)\n}\n","import { createContext, useContext } from 'react'\nimport { Editor } from 'slate'\nimport { ReactEditor } from '../plugin/react-editor'\n\n/**\n * A React context for sharing the editor object, in a way that re-renders the\n * context whenever changes occur.\n */\n\nexport const SlateContext = createContext<[ReactEditor] | null>(null)\n\n/**\n * Get the current editor object from the React context.\n */\n\nexport const useSlate = (): Editor => {\n const context = useContext(SlateContext)\n\n if (!context) {\n throw new Error(\n `The \\`useSlate\\` hook must be used inside the <SlateProvider> component's context.`\n )\n }\n\n const [editor] = context\n return editor\n}\n","/**\n * Types.\n */\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nexport {\n DOMNode,\n DOMComment,\n DOMElement,\n DOMText,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n}\n\ndeclare global {\n interface Window {\n Selection: typeof Selection['constructor']\n DataTransfer: typeof DataTransfer['constructor']\n Node: typeof Node['constructor']\n }\n}\n\nexport type DOMPoint = [Node, number]\n\n/**\n * Returns the host window of a DOM node\n */\n\nexport const getDefaultView = (value: any): Window | null => {\n return (\n (value && value.ownerDocument && value.ownerDocument.defaultView) || null\n )\n}\n\n/**\n * Check if a DOM node is a comment node.\n */\n\nexport const isDOMComment = (value: any): value is DOMComment => {\n return isDOMNode(value) && value.nodeType === 8\n}\n\n/**\n * Check if a DOM node is an element node.\n */\n\nexport const isDOMElement = (value: any): value is DOMElement => {\n return isDOMNode(value) && value.nodeType === 1\n}\n\n/**\n * Check if a value is a DOM node.\n */\n\nexport const isDOMNode = (value: any): value is DOMNode => {\n const window = getDefaultView(value)\n return !!window && value instanceof window.Node\n}\n\n/**\n * Check if a value is a DOM selection.\n */\n\nexport const isDOMSelection = (value: any): value is DOMSelection => {\n const window = value && value.anchorNode && getDefaultView(value.anchorNode)\n return !!window && value instanceof window.Selection\n}\n\n/**\n * Check if a DOM node is an element node.\n */\n\nexport const isDOMText = (value: any): value is DOMText => {\n return isDOMNode(value) && value.nodeType === 3\n}\n\n/**\n * Checks whether a paste event is a plaintext-only event.\n */\n\nexport const isPlainTextOnlyPaste = (event: ClipboardEvent) => {\n return (\n event.clipboardData &&\n event.clipboardData.getData('text/plain') !== '' &&\n event.clipboardData.types.length === 1\n )\n}\n\n/**\n * Normalize a DOM point so that it always refers to a text node.\n */\n\nexport const normalizeDOMPoint = (domPoint: DOMPoint): DOMPoint => {\n let [node, offset] = domPoint\n\n // If it's an element node, its offset refers to the index of its children\n // including comment nodes, so try to find the right text child node.\n if (isDOMElement(node) && node.childNodes.length) {\n let isLast = offset === node.childNodes.length\n let index = isLast ? offset - 1 : offset\n ;[node, index] = getEditableChildAndIndex(\n node,\n index,\n isLast ? 'backward' : 'forward'\n )\n // If the editable child found is in front of input offset, we instead seek to its end\n isLast = index < offset\n\n // If the node has children, traverse until we have a leaf node. Leaf nodes\n // can be either text nodes, or other void DOM nodes.\n while (isDOMElement(node) && node.childNodes.length) {\n const i = isLast ? node.childNodes.length - 1 : 0\n node = getEditableChild(node, i, isLast ? 'backward' : 'forward')\n }\n\n // Determine the new offset inside the text node.\n offset = isLast && node.textContent != null ? node.textContent.length : 0\n }\n\n // Return the node and offset.\n return [node, offset]\n}\n\n/**\n * Determines wether the active element is nested within a shadowRoot\n */\n\nexport const hasShadowRoot = () => {\n return !!(\n window.document.activeElement && window.document.activeElement.shadowRoot\n )\n}\n\n/**\n * Get the nearest editable child and index at `index` in a `parent`, preferring\n * `direction`.\n */\n\nexport const getEditableChildAndIndex = (\n parent: DOMElement,\n index: number,\n direction: 'forward' | 'backward'\n): [DOMNode, number] => {\n const { childNodes } = parent\n let child = childNodes[index]\n let i = index\n let triedForward = false\n let triedBackward = false\n\n // While the child is a comment node, or an element node with no children,\n // keep iterating to find a sibling non-void, non-comment node.\n while (\n isDOMComment(child) ||\n (isDOMElement(child) && child.childNodes.length === 0) ||\n (isDOMElement(child) && child.getAttribute('contenteditable') === 'false')\n ) {\n if (triedForward && triedBackward) {\n break\n }\n\n if (i >= childNodes.length) {\n triedForward = true\n i = index - 1\n direction = 'backward'\n continue\n }\n\n if (i < 0) {\n triedBackward = true\n i = index + 1\n direction = 'forward'\n continue\n }\n\n child = childNodes[i]\n index = i\n i += direction === 'forward' ? 1 : -1\n }\n\n return [child, index]\n}\n\n/**\n * Get the nearest editable child at `index` in a `parent`, preferring\n * `direction`.\n */\n\nexport const getEditableChild = (\n parent: DOMElement,\n index: number,\n direction: 'forward' | 'backward'\n): DOMNode => {\n const [child] = getEditableChildAndIndex(parent, index, direction)\n return child\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 */\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","import React, { useEffect, useRef, useMemo, useCallback } from 'react'\nimport {\n Editor,\n Element,\n NodeEntry,\n Node,\n Range,\n Text,\n Transforms,\n Path,\n} from 'slate'\nimport getDirection from 'direction'\nimport throttle from 'lodash/throttle'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport useChildren from '../hooks/use-children'\nimport Hotkeys from '../utils/hotkeys'\nimport {\n HAS_BEFORE_INPUT_SUPPORT,\n IS_CHROME,\n IS_FIREFOX,\n IS_FIREFOX_LEGACY,\n IS_SAFARI,\n} from '../utils/environment'\nimport { ReactEditor } from '..'\nimport { ReadOnlyContext } from '../hooks/use-read-only'\nimport { useSlate } from '../hooks/use-slate'\nimport { useIsomorphicLayoutEffect } from '../hooks/use-isomorphic-layout-effect'\nimport { DecorateContext } from '../hooks/use-decorate'\nimport {\n DOMElement,\n DOMNode,\n DOMRange,\n getDefaultView,\n isDOMElement,\n isDOMNode,\n isPlainTextOnlyPaste,\n} from '../utils/dom'\n\nimport {\n EDITOR_TO_ELEMENT,\n ELEMENT_TO_NODE,\n IS_READ_ONLY,\n NODE_TO_ELEMENT,\n IS_FOCUSED,\n PLACEHOLDER_SYMBOL,\n EDITOR_TO_WINDOW,\n} from '../utils/weak-maps'\n\n/**\n * `RenderElementProps` are passed to the `renderElement` handler.\n */\n\nexport interface RenderElementProps {\n children: any\n element: Element\n attributes: {\n 'data-slate-node': 'element'\n 'data-slate-inline'?: true\n 'data-slate-void'?: true\n dir?: 'rtl'\n ref: any\n }\n}\n\n/**\n * `RenderLeafProps` are passed to the `renderLeaf` handler.\n */\n\nexport interface RenderLeafProps {\n children: any\n leaf: Text\n text: Text\n attributes: {\n 'data-slate-leaf': true\n }\n}\n\n/**\n * `EditableProps` are passed to the `<Editable>` component.\n */\n\nexport type EditableProps = {\n decorate?: (entry: NodeEntry) => Range[]\n onDOMBeforeInput?: (event: InputEvent) => void\n placeholder?: string\n readOnly?: boolean\n role?: string\n style?: React.CSSProperties\n renderElement?: (props: RenderElementProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n renderPlaceholder?: (props: RenderPlaceholderProps) => JSX.Element\n as?: React.ElementType\n} & React.TextareaHTMLAttributes<HTMLDivElement>\n\n/**\n * Editable.\n */\n\nexport const Editable = (props: EditableProps) => {\n const {\n autoFocus,\n decorate = defaultDecorate,\n onDOMBeforeInput: propsOnDOMBeforeInput,\n placeholder,\n readOnly = false,\n renderElement,\n renderLeaf,\n renderPlaceholder = props => <DefaultPlaceholder {...props} />,\n style = {},\n as: Component = 'div',\n ...attributes\n } = props\n const editor = useSlate()\n const ref = useRef<HTMLDivElement>(null)\n\n // Update internal state on each render.\n IS_READ_ONLY.set(editor, readOnly)\n\n // Keep track of some state for the event handler logic.\n const state = useMemo(\n () => ({\n isComposing: false,\n isDraggingInternally: false,\n isUpdatingSelection: false,\n latestElement: null as DOMElement | null,\n }),\n []\n )\n\n // Whenever the editor updates...\n useIsomorphicLayoutEffect(() => {\n // Update element-related weak maps with the DOM element ref.\n let window\n if (ref.current && (window = getDefaultView(ref.current))) {\n EDITOR_TO_WINDOW.set(editor, window)\n EDITOR_TO_ELEMENT.set(editor, ref.current)\n NODE_TO_ELEMENT.set(editor, ref.current)\n ELEMENT_TO_NODE.set(ref.current, editor)\n } else {\n NODE_TO_ELEMENT.delete(editor)\n }\n\n // Make sure the DOM selection state is in sync.\n const { selection } = editor\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n const domSelection = root.getSelection()\n\n if (state.isComposing || !domSelection || !ReactEditor.isFocused(editor)) {\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 // verify that the dom selection is in the editor\n const editorElement = EDITOR_TO_ELEMENT.get(editor)!\n let hasDomSelectionInEditor = false\n if (\n editorElement.contains(domSelection.anchorNode) &&\n editorElement.contains(domSelection.focusNode)\n ) {\n hasDomSelectionInEditor = true\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) {\n const slateRange = ReactEditor.toSlateRange(editor, domSelection, {\n exactMatch: true,\n })\n if (slateRange && Range.equals(slateRange, selection)) {\n return\n }\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 && !ReactEditor.hasRange(editor, selection)) {\n editor.selection = ReactEditor.toSlateRange(editor, domSelection, {\n exactMatch: false,\n })\n return\n }\n\n // Otherwise the DOM selection is out of sync, so update it.\n const el = ReactEditor.toDOMNode(editor, editor)\n state.isUpdatingSelection = true\n\n const newDomRange = selection && ReactEditor.toDOMRange(editor, selection)\n\n if (newDomRange) {\n if (Range.isBackward(selection!)) {\n domSelection.setBaseAndExtent(\n newDomRange.endContainer,\n newDomRange.endOffset,\n newDomRange.startContainer,\n newDomRange.startOffset\n )\n } else {\n domSelection.setBaseAndExtent(\n newDomRange.startContainer,\n newDomRange.startOffset,\n newDomRange.endContainer,\n newDomRange.endOffset\n )\n }\n const leafEl = newDomRange.startContainer.parentElement!\n leafEl.getBoundingClientRect = newDomRange.getBoundingClientRect.bind(\n newDomRange\n )\n scrollIntoView(leafEl, {\n scrollMode: 'if-needed',\n boundary: el,\n })\n // @ts-ignore\n delete leafEl.getBoundingClientRect\n } else {\n domSelection.removeAllRanges()\n }\n\n setTimeout(() => {\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 state.isUpdatingSelection = false\n })\n })\n\n // The autoFocus TextareaHTMLAttribute doesn't do anything on a div, so it\n // needs to be manually focused.\n useEffect(() => {\n if (ref.current && autoFocus) {\n ref.current.focus()\n }\n }, [autoFocus])\n\n // Listen on the native `beforeinput` event to get real \"Level 2\" events. This\n // is required because React's `beforeinput` is fake and never really attaches\n // to the real event sadly. (2019/11/01)\n // https://github.com/facebook/react/issues/11211\n const onDOMBeforeInput = useCallback(\n (event: InputEvent) => {\n if (\n !readOnly &&\n hasEditableTarget(editor, event.target) &&\n !isDOMEventHandled(event, propsOnDOMBeforeInput)\n ) {\n const { selection } = editor\n const { inputType: type } = event\n const data = (event as any).dataTransfer || event.data || undefined\n\n // These two types occur while a user is composing text and can't be\n // cancelled. Let them through and wait for the composition to end.\n if (\n type === 'insertCompositionText' ||\n type === 'deleteCompositionText'\n ) {\n return\n }\n\n event.preventDefault()\n\n // COMPAT: For the deleting forward/backward input types we don't want\n // to change the selection because it is the range that will be deleted,\n // and those commands determine that for themselves.\n if (!type.startsWith('delete') || type.startsWith('deleteBy')) {\n const [targetRange] = (event as any).getTargetRanges()\n\n if (targetRange) {\n const range = ReactEditor.toSlateRange(editor, targetRange, {\n exactMatch: false,\n })\n\n if (!selection || !Range.equals(selection, range)) {\n Transforms.select(editor, range)\n }\n }\n }\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 (\n selection &&\n Range.isExpanded(selection) &&\n type.startsWith('delete')\n ) {\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 case 'insertFromDrop':\n case 'insertFromPaste':\n case 'insertFromYank':\n case 'insertReplacementText':\n case 'insertText': {\n if (type === 'insertFromComposition') {\n // COMPAT: in Safari, `compositionend` is dispatched after the\n // `beforeinput` for \"insertFromComposition\". But if we wait for it\n // then we will abort because we're still composing and the selection\n // won't be updated properly.\n // https://www.w3.org/TR/input-events-2/\n state.isComposing = false\n }\n\n const window = ReactEditor.getWindow(editor)\n if (data instanceof window.DataTransfer) {\n ReactEditor.insertData(editor, data as DataTransfer)\n } else if (typeof data === 'string') {\n Editor.insertText(editor, data)\n }\n\n break\n }\n }\n }\n },\n [readOnly, propsOnDOMBeforeInput]\n )\n\n // Attach a native DOM event handler for `beforeinput` events, because React's\n // built-in `onBeforeInput` is actually a leaky polyfill that doesn't expose\n // real `beforeinput` events sadly... (2019/11/04)\n // https://github.com/facebook/react/issues/11211\n useIsomorphicLayoutEffect(() => {\n if (ref.current && HAS_BEFORE_INPUT_SUPPORT) {\n // @ts-ignore The `beforeinput` event isn't recognized.\n ref.current.addEventListener('beforeinput', onDOMBeforeInput)\n }\n\n return () => {\n if (ref.current && HAS_BEFORE_INPUT_SUPPORT) {\n // @ts-ignore The `beforeinput` event isn't recognized.\n ref.current.removeEventListener('beforeinput', onDOMBeforeInput)\n }\n }\n }, [onDOMBeforeInput])\n\n // Listen on the native `selectionchange` event to be able to update any time\n // the selection changes. This is required because React's `onSelect` is leaky\n // and non-standard so it doesn't fire until after a selection has been\n // released. This causes issues in situations where another change happens\n // while a selection is being dragged.\n const onDOMSelectionChange = useCallback(\n throttle(() => {\n if (\n !readOnly &&\n !state.isComposing &&\n !state.isUpdatingSelection &&\n !state.isDraggingInternally\n ) {\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n const { activeElement } = root\n const el = ReactEditor.toDOMNode(editor, editor)\n const domSelection = root.getSelection()\n\n if (activeElement === el) {\n state.latestElement = activeElement\n IS_FOCUSED.set(editor, true)\n } else {\n IS_FOCUSED.delete(editor)\n }\n\n if (!domSelection) {\n return Transforms.deselect(editor)\n }\n\n const { anchorNode, focusNode } = domSelection\n\n const anchorNodeSelectable =\n hasEditableTarget(editor, anchorNode) ||\n isTargetInsideVoid(editor, anchorNode)\n\n const focusNodeSelectable =\n hasEditableTarget(editor, focusNode) ||\n isTargetInsideVoid(editor, focusNode)\n\n if (anchorNodeSelectable && focusNodeSelectable) {\n const range = ReactEditor.toSlateRange(editor, domSelection, {\n exactMatch: false,\n })\n Transforms.select(editor, range)\n } else {\n Transforms.deselect(editor)\n }\n }\n }, 100),\n [readOnly]\n )\n\n // Attach a native DOM event handler for `selectionchange`, because React's\n // built-in `onSelect` handler doesn't fire for all selection changes. It's a\n // leaky polyfill that only fires on keypresses or clicks. Instead, we want to\n // fire for any change to the selection inside the editor. (2019/11/04)\n // https://github.com/facebook/react/issues/5785\n useIsomorphicLayoutEffect(() => {\n const window = ReactEditor.getWindow(editor)\n window.document.addEventListener('selectionchange', onDOMSelectionChange)\n\n return () => {\n window.document.removeEventListener(\n 'selectionchange',\n onDOMSelectionChange\n )\n }\n }, [onDOMSelectionChange])\n\n const decorations = decorate([editor, []])\n\n if (\n placeholder &&\n editor.children.length === 1 &&\n Array.from(Node.texts(editor)).length === 1 &&\n Node.string(editor) === ''\n ) {\n const start = Editor.start(editor, [])\n decorations.push({\n [PLACEHOLDER_SYMBOL]: true,\n placeholder,\n anchor: start,\n focus: start,\n })\n }\n\n return (\n <ReadOnlyContext.Provider value={readOnly}>\n <DecorateContext.Provider value={decorate}>\n <Component\n // COMPAT: The Grammarly Chrome extension works by changing the DOM\n // out from under `contenteditable` elements, which leads to weird\n // behaviors so we have to disable it like editor. (2017/04/24)\n data-gramm={false}\n role={readOnly ? undefined : 'textbox'}\n {...attributes}\n // COMPAT: Certain browsers don't support the `beforeinput` event, so we'd\n // have to use hacks to make these replacement-based features work.\n spellCheck={!HAS_BEFORE_INPUT_SUPPORT ? false : attributes.spellCheck}\n autoCorrect={\n !HAS_BEFORE_INPUT_SUPPORT ? 'false' : attributes.autoCorrect\n }\n autoCapitalize={\n !HAS_BEFORE_INPUT_SUPPORT ? 'false' : attributes.autoCapitalize\n }\n data-slate-editor\n data-slate-node=\"value\"\n contentEditable={readOnly ? undefined : true}\n suppressContentEditableWarning\n ref={ref}\n style={{\n // Allow positioning relative to the editable element.\n position: 'relative',\n // Prevent the default outline styles.\n outline: 'none',\n // Preserve adjacent whitespace and new lines.\n whiteSpace: 'pre-wrap',\n // Allow words to break if they are too long.\n wordWrap: 'break-word',\n // Allow for passed-in styles to override anything.\n ...style,\n }}\n onBeforeInput={useCallback(\n (event: React.FormEvent<HTMLDivElement>) => {\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 !readOnly &&\n !isEventHandled(event, attributes.onBeforeInput) &&\n hasEditableTarget(editor, event.target)\n ) {\n event.preventDefault()\n if (!state.isComposing) {\n const text = (event as any).data as string\n Editor.insertText(editor, text)\n }\n }\n },\n [readOnly]\n )}\n onBlur={useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (\n readOnly ||\n state.isUpdatingSelection ||\n !hasEditableTarget(editor, event.target) ||\n isEventHandled(event, attributes.onBlur)\n ) {\n return\n }\n\n const window = ReactEditor.getWindow(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 = ReactEditor.findDocumentOrShadowRoot(editor)\n if (state.latestElement === root.activeElement) {\n return\n }\n\n const { relatedTarget } = event\n const el = ReactEditor.toDOMNode(editor, 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 (\n isDOMElement(relatedTarget) &&\n relatedTarget.hasAttribute('data-slate-spacer')\n ) {\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 (\n relatedTarget != null &&\n isDOMNode(relatedTarget) &&\n ReactEditor.hasDOMNode(editor, relatedTarget)\n ) {\n const node = ReactEditor.toSlateNode(editor, relatedTarget)\n\n if (Element.isElement(node) && !editor.isVoid(node)) {\n return\n }\n }\n\n IS_FOCUSED.delete(editor)\n },\n [readOnly, attributes.onBlur]\n )}\n onClick={useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (\n !readOnly &&\n hasTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onClick) &&\n isDOMNode(event.target)\n ) {\n const node = ReactEditor.toSlateNode(editor, event.target)\n const path = ReactEditor.findPath(editor, node)\n const start = Editor.start(editor, path)\n const end = Editor.end(editor, path)\n\n const startVoid = Editor.void(editor, { at: start })\n const endVoid = Editor.void(editor, { at: end })\n\n if (\n startVoid &&\n endVoid &&\n Path.equals(startVoid[1], endVoid[1])\n ) {\n const range = Editor.range(editor, start)\n Transforms.select(editor, range)\n }\n }\n },\n [readOnly, attributes.onClick]\n )}\n onCompositionEnd={useCallback(\n (event: React.CompositionEvent<HTMLDivElement>) => {\n if (\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCompositionEnd)\n ) {\n state.isComposing = false\n\n // COMPAT: In Chrome, `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 (!IS_SAFARI && !IS_FIREFOX_LEGACY && event.data) {\n Editor.insertText(editor, event.data)\n }\n }\n },\n [attributes.onCompositionEnd]\n )}\n onCompositionUpdate={useCallback(\n (event: React.CompositionEvent<HTMLDivElement>) => {\n if (\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCompositionUpdate)\n ) {\n state.isComposing = true\n }\n },\n [attributes.onCompositionUpdate]\n )}\n onCompositionStart={useCallback(\n (event: React.CompositionEvent<HTMLDivElement>) => {\n if (\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCompositionStart)\n ) {\n const { selection } = editor\n if (selection && Range.isExpanded(selection)) {\n Editor.deleteFragment(editor)\n }\n }\n },\n [attributes.onCompositionStart]\n )}\n onCopy={useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n if (\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCopy)\n ) {\n event.preventDefault()\n ReactEditor.setFragmentData(editor, event.clipboardData)\n }\n },\n [attributes.onCopy]\n )}\n onCut={useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n if (\n !readOnly &&\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCut)\n ) {\n event.preventDefault()\n ReactEditor.setFragmentData(editor, event.clipboardData)\n const { selection } = editor\n\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 (Editor.isVoid(editor, node)) {\n Transforms.delete(editor)\n }\n }\n }\n }\n },\n [readOnly, attributes.onCut]\n )}\n onDragOver={useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n if (\n hasTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onDragOver)\n ) {\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 = ReactEditor.toSlateNode(editor, event.target)\n\n if (Editor.isVoid(editor, node)) {\n event.preventDefault()\n }\n }\n },\n [attributes.onDragOver]\n )}\n onDragStart={useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n if (\n hasTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onDragStart)\n ) {\n const node = ReactEditor.toSlateNode(editor, event.target)\n const path = ReactEditor.findPath(editor, node)\n const voidMatch =\n Editor.isVoid(editor, node) ||\n Editor.void(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(editor, path)\n Transforms.select(editor, range)\n }\n\n state.isDraggingInternally = true\n\n ReactEditor.setFragmentData(editor, event.dataTransfer)\n }\n },\n [attributes.onDragStart]\n )}\n onDrop={useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n if (\n !readOnly &&\n hasTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onDrop)\n ) {\n event.preventDefault()\n\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 = ReactEditor.findEventRange(editor, event)\n const data = event.dataTransfer\n\n Transforms.select(editor, range)\n\n if (state.isDraggingInternally) {\n if (draggedRange) {\n Transforms.delete(editor, {\n at: draggedRange,\n })\n }\n\n state.isDraggingInternally = false\n }\n\n ReactEditor.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 (!ReactEditor.isFocused(editor)) {\n ReactEditor.focus(editor)\n }\n }\n },\n [readOnly, attributes.onDrop]\n )}\n onDragEnd={useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n // When dropping on a different droppable element than the current editor,\n // `onDrop` is not called. So we need to clean up in `onDragEnd` instead.\n // Note: `onDragEnd` is only called when `onDrop` is not called\n if (\n !readOnly &&\n state.isDraggingInternally &&\n hasTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onDragEnd)\n ) {\n state.isDraggingInternally = false\n }\n },\n [readOnly, attributes.onDragEnd]\n )}\n onFocus={useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (\n !readOnly &&\n !state.isUpdatingSelection &&\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onFocus)\n ) {\n const el = ReactEditor.toDOMNode(editor, editor)\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n state.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(editor, true)\n }\n },\n [readOnly, attributes.onFocus]\n )}\n onKeyDown={useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n !readOnly &&\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onKeyDown)\n ) {\n const { nativeEvent } = event\n const { selection } = editor\n\n const element =\n editor.children[\n selection !== null ? selection.focus.path[0] : 0\n ]\n const isRTL = getDirection(Node.string(element)) === 'rtl'\n\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 const maybeHistoryEditor: any = editor\n\n if (typeof maybeHistoryEditor.redo === 'function') {\n maybeHistoryEditor.redo()\n }\n\n return\n }\n\n if (Hotkeys.isUndo(nativeEvent)) {\n event.preventDefault()\n const maybeHistoryEditor: any = editor\n\n if (typeof maybeHistoryEditor.undo === 'function') {\n maybeHistoryEditor.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\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 // 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 (\n Hotkeys.isBold(nativeEvent) ||\n Hotkeys.isItalic(nativeEvent) ||\n Hotkeys.isTransposeCharacter(nativeEvent)\n ) {\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, { direction: 'backward' })\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, { direction: 'forward' })\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, { direction: 'backward' })\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, { direction: 'forward' })\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, { direction: 'backward' })\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, { direction: 'forward' })\n } else {\n Editor.deleteForward(editor, { unit: 'word' })\n }\n\n return\n }\n } else {\n if (IS_CHROME) {\n // COMPAT: Chrome supports `beforeinput` event but does not fire\n // an event when deleting backwards in a selected void inline node\n if (\n selection &&\n (Hotkeys.isDeleteBackward(nativeEvent) ||\n Hotkeys.isDeleteForward(nativeEvent)) &&\n Range.isCollapsed(selection)\n ) {\n const currentNode = Node.parent(\n editor,\n selection.anchor.path\n )\n\n if (\n Element.isElement(currentNode) &&\n Editor.isVoid(editor, currentNode) &&\n Editor.isInline(editor, currentNode)\n ) {\n event.preventDefault()\n Transforms.delete(editor, { unit: 'block' })\n\n return\n }\n }\n }\n }\n }\n },\n [readOnly, attributes.onKeyDown]\n )}\n onPaste={useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n if (\n !readOnly &&\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onPaste)\n ) {\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 don't emit `beforeinput` events\n // when \"paste without formatting\" is used, so fallback. (2020/02/20)\n if (\n !HAS_BEFORE_INPUT_SUPPORT ||\n isPlainTextOnlyPaste(event.nativeEvent)\n ) {\n event.preventDefault()\n ReactEditor.insertData(editor, event.clipboardData)\n }\n }\n },\n [readOnly, attributes.onPaste]\n )}\n >\n {useChildren({\n decorations,\n node: editor,\n renderElement,\n renderPlaceholder,\n renderLeaf,\n selection: editor.selection,\n })}\n </Component>\n </DecorateContext.Provider>\n </ReadOnlyContext.Provider>\n )\n}\n\n/**\n * The props that get passed to renderPlaceholder\n */\nexport type RenderPlaceholderProps = {\n children: any\n attributes: {\n 'data-slate-placeholder': boolean\n dir?: 'rtl'\n contentEditable: boolean\n ref: React.RefObject<any>\n style: React.CSSProperties\n }\n}\n\n/**\n * The default placeholder element\n */\n\nexport const DefaultPlaceholder = ({\n attributes,\n children,\n}: RenderPlaceholderProps) => <span {...attributes}>{children}</span>\n\n/**\n * A default memoized decorate function.\n */\n\nexport const defaultDecorate: (entry: NodeEntry) => Range[] = () => []\n\n/**\n * Check if two DOM range objects are equal.\n */\n\nexport const isRangeEqual = (a: DOMRange, b: DOMRange) => {\n return (\n (a.startContainer === b.startContainer &&\n a.startOffset === b.startOffset &&\n a.endContainer === b.endContainer &&\n a.endOffset === b.endOffset) ||\n (a.startContainer === b.endContainer &&\n a.startOffset === b.endOffset &&\n a.endContainer === b.startContainer &&\n a.endOffset === b.startOffset)\n )\n}\n\n/**\n * Check if the target is in the editor.\n */\n\nexport const hasTarget = (\n editor: ReactEditor,\n target: EventTarget | null\n): target is DOMNode => {\n return isDOMNode(target) && ReactEditor.hasDOMNode(editor, target)\n}\n\n/**\n * Check if the target is editable and in the editor.\n */\n\nexport const hasEditableTarget = (\n editor: ReactEditor,\n target: EventTarget | null\n): target is DOMNode => {\n return (\n isDOMNode(target) &&\n ReactEditor.hasDOMNode(editor, target, { editable: true })\n )\n}\n\n/**\n * Check if the target is inside void and in the editor.\n */\n\nexport const isTargetInsideVoid = (\n editor: ReactEditor,\n target: EventTarget | null\n): boolean => {\n const slateNode =\n hasTarget(editor, target) && ReactEditor.toSlateNode(editor, target)\n return Editor.isVoid(editor, slateNode)\n}\n\n/**\n * Check if an event is overrided by a handler.\n */\n\nexport const isEventHandled = <\n EventType extends React.SyntheticEvent<unknown, unknown>\n>(\n event: EventType,\n handler?: (event: EventType) => void | boolean\n) => {\n if (!handler) {\n return false\n }\n // The custom event handler may return a boolean to specify whether the event\n // shall be treated as being handled or not.\n const shouldTreatEventAsHandled = handler(event)\n\n if (shouldTreatEventAsHandled != null) {\n return shouldTreatEventAsHandled\n }\n\n return event.isDefaultPrevented() || event.isPropagationStopped()\n}\n\n/**\n * Check if a DOM event is overrided by a handler.\n */\n\nexport const isDOMEventHandled = <E extends Event>(\n event: E,\n handler?: (event: E) => void | boolean\n) => {\n if (!handler) {\n return false\n }\n\n // The custom event handler may return a boolean to specify whether the event\n // shall be treated as being handled or not.\n const shouldTreatEventAsHandled = handler(event)\n\n if (shouldTreatEventAsHandled != null) {\n return shouldTreatEventAsHandled\n }\n\n return event.defaultPrevented\n}\n","/**\n * An auto-incrementing identifier for keys.\n */\n\nlet n = 0\n\n/**\n * A class that keeps track of a key string. We use a full class here because we\n * want to be able to use them as keys in `WeakMap` objects.\n */\n\nexport class Key {\n id: string\n\n constructor() {\n this.id = `${n++}`\n }\n}\n","import { Editor, Node, Path, Point, Range, Transforms, BaseEditor } from 'slate'\n\nimport { Key } from '../utils/key'\nimport {\n EDITOR_TO_ELEMENT,\n ELEMENT_TO_NODE,\n IS_FOCUSED,\n IS_READ_ONLY,\n KEY_TO_ELEMENT,\n NODE_TO_INDEX,\n NODE_TO_KEY,\n NODE_TO_PARENT,\n EDITOR_TO_WINDOW,\n} from '../utils/weak-maps'\nimport {\n DOMElement,\n DOMNode,\n DOMPoint,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n isDOMElement,\n isDOMSelection,\n normalizeDOMPoint,\n hasShadowRoot,\n} from '../utils/dom'\nimport { IS_CHROME } from '../utils/environment'\n\n/**\n * A React and DOM-specific version of the `Editor` interface.\n */\n\nexport interface ReactEditor extends BaseEditor {\n insertData: (data: DataTransfer) => void\n setFragmentData: (data: DataTransfer) => void\n hasRange: (editor: ReactEditor, range: Range) => boolean\n}\n\nexport const ReactEditor = {\n /**\n * Return the host window of the current editor.\n */\n\n getWindow(editor: ReactEditor): Window {\n const window = EDITOR_TO_WINDOW.get(editor)\n if (!window) {\n throw new Error('Unable to find a host window element for this editor')\n }\n return window\n },\n\n /**\n * Find a key for a Slate node.\n */\n\n findKey(editor: ReactEditor, node: Node): Key {\n let key = NODE_TO_KEY.get(node)\n\n if (!key) {\n key = new Key()\n NODE_TO_KEY.set(node, key)\n }\n\n return key\n },\n\n /**\n * Find the path of Slate node.\n */\n\n findPath(editor: ReactEditor, node: Node): Path {\n const path: Path = []\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)) {\n return path\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 path.unshift(i)\n child = parent\n }\n\n throw new Error(\n `Unable to find the path for Slate node: ${JSON.stringify(node)}`\n )\n },\n\n /**\n * Find the DOM node that implements DocumentOrShadowRoot for the editor.\n */\n\n findDocumentOrShadowRoot(editor: ReactEditor): Document | ShadowRoot {\n const el = ReactEditor.toDOMNode(editor, editor)\n const root = el.getRootNode()\n\n // The below exception will always be thrown for iframes because the document inside an iframe\n // does not inherit it's prototype from the parent document, therefore we return early\n if (el.ownerDocument !== document) return el.ownerDocument\n\n if (!(root instanceof Document || root instanceof ShadowRoot))\n throw new Error(\n `Unable to find DocumentOrShadowRoot for editor element: ${el}`\n )\n\n // COMPAT: Only Chrome implements the DocumentOrShadowRoot mixin for\n // ShadowRoot; other browsers still implement it on the Document\n // interface. (2020/08/08)\n // https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot#Properties\n if (root.getSelection === undefined && el.ownerDocument !== null)\n return el.ownerDocument\n\n return root\n },\n\n /**\n * Check if the editor is focused.\n */\n\n isFocused(editor: ReactEditor): boolean {\n return !!IS_FOCUSED.get(editor)\n },\n\n /**\n * Check if the editor is in read-only mode.\n */\n\n isReadOnly(editor: ReactEditor): boolean {\n return !!IS_READ_ONLY.get(editor)\n },\n\n /**\n * Blur the editor.\n */\n\n blur(editor: ReactEditor): void {\n const el = ReactEditor.toDOMNode(editor, editor)\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n IS_FOCUSED.set(editor, false)\n\n if (root.activeElement === el) {\n el.blur()\n }\n },\n\n /**\n * Focus the editor.\n */\n\n focus(editor: ReactEditor): void {\n const el = ReactEditor.toDOMNode(editor, editor)\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n IS_FOCUSED.set(editor, true)\n\n if (root.activeElement !== el) {\n el.focus({ preventScroll: true })\n }\n },\n\n /**\n * Deselect the editor.\n */\n\n deselect(editor: ReactEditor): void {\n const el = ReactEditor.toDOMNode(editor, editor)\n const { selection } = editor\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n const domSelection = root.getSelection()\n\n if (domSelection && domSelection.rangeCount > 0) {\n domSelection.removeAllRanges()\n }\n\n if (selection) {\n Transforms.deselect(editor)\n }\n },\n\n /**\n * Check if a DOM node is within the editor.\n */\n\n hasDOMNode(\n editor: ReactEditor,\n target: DOMNode,\n options: { editable?: boolean } = {}\n ): boolean {\n const { editable = false } = options\n const editorEl = ReactEditor.toDOMNode(editor, editor)\n let targetEl\n\n // COMPAT: In Firefox, reading `target.nodeType` will throw an error if\n // target is originating from an internal \"restricted\" element (e.g. a\n // stepper arrow on a number input). (2018/05/04)\n // https://github.com/ianstormtaylor/slate/issues/1819\n try {\n targetEl = (isDOMElement(target)\n ? target\n : target.parentElement) as HTMLElement\n } catch (err) {\n if (\n !err.message.includes('Permission denied to access property \"nodeType\"')\n ) {\n throw err\n }\n }\n\n if (!targetEl) {\n return false\n }\n\n return (\n targetEl.closest(`[data-slate-editor]`) === editorEl &&\n (!editable ||\n targetEl.isContentEditable ||\n !!targetEl.getAttribute('data-slate-zero-width'))\n )\n },\n\n /**\n * Insert data from a `DataTransfer` into the editor.\n */\n\n insertData(editor: ReactEditor, data: DataTransfer): void {\n editor.insertData(data)\n },\n\n /**\n * Sets data from the currently selected fragment on a `DataTransfer`.\n */\n\n setFragmentData(editor: ReactEditor, data: DataTransfer): void {\n editor.setFragmentData(data)\n },\n\n /**\n * Find the native DOM element from a Slate node.\n */\n\n toDOMNode(editor: ReactEditor, node: Node): HTMLElement {\n const domNode = Editor.isEditor(node)\n ? EDITOR_TO_ELEMENT.get(editor)\n : KEY_TO_ELEMENT.get(ReactEditor.findKey(editor, node))\n\n if (!domNode) {\n throw new Error(\n `Cannot resolve a DOM node from Slate node: ${JSON.stringify(node)}`\n )\n }\n\n return domNode\n },\n\n /**\n * Find a native DOM selection point from a Slate point.\n */\n\n toDOMPoint(editor: ReactEditor, point: Point): DOMPoint {\n const [node] = Editor.node(editor, point.path)\n const el = ReactEditor.toDOMNode(editor, node)\n let domPoint: DOMPoint | undefined\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 break\n }\n\n start = end\n }\n\n if (!domPoint) {\n throw new Error(\n `Cannot resolve a DOM point from Slate point: ${JSON.stringify(point)}`\n )\n }\n\n return domPoint\n },\n\n /**\n * Find a native DOM range from a Slate `range`.\n *\n * Notice: the returned range will always be ordinal regardless of the direction of Slate `range` due to DOM API limit.\n *\n * there is no way to create a reverse DOM Range using Range.setStart/setEnd\n * according to https://dom.spec.whatwg.org/#concept-range-bp-set.\n */\n\n toDOMRange(editor: ReactEditor, range: Range): DOMRange {\n const { anchor, focus } = range\n const isBackward = Range.isBackward(range)\n const domAnchor = ReactEditor.toDOMPoint(editor, anchor)\n const domFocus = Range.isCollapsed(range)\n ? domAnchor\n : ReactEditor.toDOMPoint(editor, focus)\n\n const window = ReactEditor.getWindow(editor)\n const domRange = window.document.createRange()\n const [startNode, startOffset] = isBackward ? domFocus : domAnchor\n const [endNode, endOffset] = isBackward ? domAnchor : domFocus\n\n // A slate Point at zero-width Leaf always has an offset of 0 but a native DOM selection at\n // zero-width node has an offset of 1 so we have to check if we are in a zero-width node and\n // adjust the offset accordingly.\n const startEl = (isDOMElement(startNode)\n ? startNode\n : startNode.parentElement) as HTMLElement\n const isStartAtZeroWidth = !!startEl.getAttribute('data-slate-zero-width')\n const endEl = (isDOMElement(endNode)\n ? endNode\n : endNode.parentElement) as HTMLElement\n const isEndAtZeroWidth = !!endEl.getAttribute('data-slate-zero-width')\n\n domRange.setStart(startNode, isStartAtZeroWidth ? 1 : startOffset)\n domRange.setEnd(endNode, isEndAtZeroWidth ? 1 : endOffset)\n return domRange\n },\n\n /**\n * Find a Slate node from a native DOM `element`.\n */\n\n toSlateNode(editor: ReactEditor, domNode: DOMNode): Node {\n let domEl = isDOMElement(domNode) ? domNode : domNode.parentElement\n\n if (domEl && !domEl.hasAttribute('data-slate-node')) {\n domEl = domEl.closest(`[data-slate-node]`)\n }\n\n const node = domEl ? ELEMENT_TO_NODE.get(domEl as HTMLElement) : null\n\n if (!node) {\n throw new Error(`Cannot resolve a Slate node from DOM node: ${domEl}`)\n }\n\n return node\n },\n\n /**\n * Get the target range from a DOM `event`.\n */\n\n findEventRange(editor: ReactEditor, event: any): Range {\n if ('nativeEvent' in event) {\n event = event.nativeEvent\n }\n\n const { clientX: x, clientY: y, target } = event\n\n if (x == null || y == null) {\n throw new Error(`Cannot resolve a Slate range from a DOM event: ${event}`)\n }\n\n const node = ReactEditor.toSlateNode(editor, event.target)\n const path = ReactEditor.findPath(editor, node)\n\n // If the drop target is inside a void node, move it into either the\n // next or previous node, depending on which side the `x` and `y`\n // coordinates are closest to.\n if (Editor.isVoid(editor, node)) {\n const rect = target.getBoundingClientRect()\n const isPrev = editor.isInline(node)\n ? x - rect.left < rect.left + rect.width - x\n : y - rect.top < rect.top + rect.height - y\n\n const edge = Editor.point(editor, path, {\n edge: isPrev ? 'start' : 'end',\n })\n const point = isPrev\n ? Editor.before(editor, edge)\n : Editor.after(editor, edge)\n\n if (point) {\n const range = Editor.range(editor, point)\n return range\n }\n }\n\n // Else resolve a range from the caret position where the drop occured.\n let domRange\n const { document } = window\n\n // COMPAT: In Firefox, `caretRangeFromPoint` doesn't exist. (2016/07/25)\n if (document.caretRangeFromPoint) {\n domRange = document.caretRangeFromPoint(x, y)\n } else {\n const position = document.caretPositionFromPoint(x, y)\n\n if (position) {\n domRange = document.createRange()\n domRange.setStart(position.offsetNode, position.offset)\n domRange.setEnd(position.offsetNode, position.offset)\n }\n }\n\n if (!domRange) {\n throw new Error(`Cannot resolve a Slate range from a DOM event: ${event}`)\n }\n\n // Resolve a Slate range from the DOM range.\n const range = ReactEditor.toSlateRange(editor, domRange, {\n exactMatch: false,\n })\n return range\n },\n\n /**\n * Find a Slate point from a DOM selection's `domNode` and `domOffset`.\n */\n\n toSlatePoint<T extends boolean>(\n editor: ReactEditor,\n domPoint: DOMPoint,\n exactMatch: T\n ): T extends true ? Point | null : Point {\n const [nearestNode, nearestOffset] = exactMatch\n ? domPoint\n : normalizeDOMPoint(domPoint)\n const parentNode = nearestNode.parentNode as DOMElement\n let textNode: DOMElement | null = null\n let offset = 0\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) {\n textNode = leafNode.closest('[data-slate-node=\"text\"]')!\n const window = ReactEditor.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(\n contents.querySelectorAll('[data-slate-zero-width]')\n ),\n ...Array.prototype.slice.call(\n contents.querySelectorAll('[contenteditable=false]')\n ),\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 leafNode = voidNode.querySelector('[data-slate-leaf]')!\n\n // COMPAT: In read-only editors the leaf is not rendered.\n if (!leafNode) {\n offset = 1\n } else {\n textNode = leafNode.closest('[data-slate-node=\"text\"]')!\n domNode = leafNode\n offset = domNode.textContent!.length\n domNode.querySelectorAll('[data-slate-zero-width]').forEach(el => {\n offset -= el.textContent!.length\n })\n }\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 (\n domNode &&\n offset === domNode.textContent!.length &&\n parentNode.hasAttribute('data-slate-zero-width')\n ) {\n offset--\n }\n }\n\n if (!textNode) {\n if (exactMatch) {\n return null as T extends true ? Point | null : Point\n }\n throw new Error(\n `Cannot resolve a Slate point from DOM point: ${domPoint}`\n )\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 const slateNode = ReactEditor.toSlateNode(editor, textNode!)\n const path = ReactEditor.findPath(editor, slateNode)\n return { path, offset } as T extends true ? Point | null : Point\n },\n\n /**\n * Find a Slate range from a DOM range or selection.\n */\n\n toSlateRange<T extends boolean>(\n editor: ReactEditor,\n domRange: DOMRange | DOMStaticRange | DOMSelection,\n options: {\n exactMatch: T\n }\n ): T extends true ? Range | null : Range {\n const { exactMatch } = options\n const el = isDOMSelection(domRange)\n ? domRange.anchorNode\n : 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()) {\n isCollapsed =\n domRange.anchorNode === domRange.focusNode &&\n 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 (\n anchorNode == null ||\n focusNode == null ||\n anchorOffset == null ||\n focusOffset == null\n ) {\n throw new Error(\n `Cannot resolve a Slate range from DOM range: ${domRange}`\n )\n }\n\n const anchor = ReactEditor.toSlatePoint(\n editor,\n [anchorNode, anchorOffset],\n exactMatch\n )\n if (!anchor) {\n return null as T extends true ? Range | null : Range\n }\n\n const focus = isCollapsed\n ? anchor\n : ReactEditor.toSlatePoint(editor, [focusNode, focusOffset], exactMatch)\n if (!focus) {\n return null as T extends true ? Range | null : Range\n }\n\n return ({ anchor, focus } as unknown) as T extends true\n ? Range | null\n : Range\n },\n\n hasRange(editor: ReactEditor, range: Range): boolean {\n const { anchor, focus } = range\n return (\n Editor.hasPath(editor, anchor.path) && Editor.hasPath(editor, focus.path)\n )\n },\n}\n","import { Editor, Path, Range, Text } from 'slate'\n\nimport { ReactEditor } from '../../'\nimport { DOMNode } from '../../utils/dom'\n\nexport type Diff = {\n start: number\n end: number\n insertText: string\n removeText: string\n}\n\nexport interface TextInsertion {\n text: Diff\n path: Path\n}\n\ntype TextRange = {\n start: number\n end: number\n}\n\n/**\n * Returns the number of characters that are the same at the beginning of the\n * String.\n *\n * @param prev the previous text\n * @param next the next text\n * @returns the offset of the start of the difference; null if there is no difference\n */\nfunction getDiffStart(prev: string, next: string): number | null {\n const length = Math.min(prev.length, next.length)\n\n for (let i = 0; i < length; i++) {\n if (prev.charAt(i) !== next.charAt(i)) return i\n }\n\n if (prev.length !== next.length) return length\n return null\n}\n\n/**\n * Returns the number of characters that are the same at the end of the String\n * up to `max`. Max prevents double-counting characters when there are\n * multiple duplicate characters around the diff area.\n *\n * @param prev the previous text\n * @param next the next text\n * @param max the max length to test.\n * @returns number of characters that are the same at the end of the string\n */\nfunction getDiffEnd(prev: string, next: string, max: number): number | null {\n const prevLength = prev.length\n const nextLength = next.length\n const length = Math.min(prevLength, nextLength, max)\n\n for (let i = 0; i < length; i++) {\n const prevChar = prev.charAt(prevLength - i - 1)\n const nextChar = next.charAt(nextLength - i - 1)\n if (prevChar !== nextChar) return i\n }\n\n if (prev.length !== next.length) return length\n return null\n}\n\n/**\n * Takes two strings and returns an object representing two offsets. The\n * first, `start` represents the number of characters that are the same at\n * the front of the String. The `end` represents the number of characters\n * that are the same at the end of the String.\n *\n * Returns null if they are identical.\n *\n * @param prev the previous text\n * @param next the next text\n * @returns the difference text range; null if there are no differences.\n */\nfunction getDiffOffsets(prev: string, next: string): TextRange | null {\n if (prev === next) return null\n const start = getDiffStart(prev, next)\n if (start === null) return null\n const maxEnd = Math.min(prev.length - start, next.length - start)\n const end = getDiffEnd(prev, next, maxEnd)!\n if (end === null) return null\n return { start, end }\n}\n\n/**\n * Takes a text string and returns a slice from the string at the given text range\n *\n * @param text the text\n * @param offsets the text range\n * @returns the text slice at text range\n */\nfunction sliceText(text: string, offsets: TextRange): string {\n return text.slice(offsets.start, text.length - offsets.end)\n}\n\n/**\n * Takes two strings and returns a smart diff that can be used to describe the\n * change in a way that can be used as operations like inserting, removing or\n * replacing text.\n *\n * @param prev the previous text\n * @param next the next text\n * @returns the text difference\n */\nexport function diffText(prev?: string, next?: string): Diff | null {\n if (prev === undefined || next === undefined) return null\n const offsets = getDiffOffsets(prev, next)\n if (offsets == null) return null\n const insertText = sliceText(next, offsets)\n const removeText = sliceText(prev, offsets)\n return {\n start: offsets.start,\n end: prev.length - offsets.end,\n insertText,\n removeText,\n }\n}\n\nexport function combineInsertedText(insertedText: TextInsertion[]): string {\n return insertedText.reduce((acc, { text }) => `${acc}${text.insertText}`, '')\n}\n\nexport function getTextInsertion<T extends Editor>(\n editor: T,\n domNode: DOMNode\n): TextInsertion | undefined {\n const node = ReactEditor.toSlateNode(editor, domNode)\n\n if (!Text.isText(node)) {\n return undefined\n }\n\n const prevText = node.text\n let nextText = domNode.textContent!\n\n // textContent will pad an extra \\n when the textContent ends with an \\n\n if (nextText.endsWith('\\n')) {\n nextText = nextText.slice(0, nextText.length - 1)\n }\n\n // If the text is no different, there is no diff.\n if (nextText !== prevText) {\n const textDiff = diffText(prevText, nextText)\n if (textDiff !== null) {\n const textPath = ReactEditor.findPath(editor, node)\n\n return {\n text: textDiff,\n path: textPath,\n }\n }\n }\n\n return undefined\n}\n\nexport function normalizeTextInsertionRange(\n editor: Editor,\n range: Range | null,\n { path, text }: TextInsertion\n) {\n const insertionRange = {\n anchor: { path, offset: text.start },\n focus: { path, offset: text.end },\n }\n\n if (!range || !Range.isCollapsed(range)) {\n return insertionRange\n }\n\n const { insertText, removeText } = text\n const isSingleCharacterInsertion =\n insertText.length === 1 || removeText.length === 1\n\n /**\n * This code handles edge cases that arise from text diffing when the\n * inserted or removed character is a single character, and the character\n * right before or after the anchor is the same as the one being inserted or\n * removed.\n *\n * Take this example: hello|o\n *\n * If another `o` is inserted at the selection's anchor in the example above,\n * it should be inserted at the anchor, but using text diffing, we actually\n * detect that the character was inserted after the second `o`:\n *\n * helloo[o]|\n *\n * Instead, in these very specific edge cases, we assume that the character\n * needs to be inserted after the anchor rather than where the diff was found:\n *\n * hello[o]|o\n */\n if (isSingleCharacterInsertion && Path.equals(range.anchor.path, path)) {\n const [text] = Array.from(\n Editor.nodes(editor, { at: range, match: Text.isText })\n )\n\n if (text) {\n const [node] = text\n const { anchor } = range\n const characterBeforeAnchor = node.text[anchor.offset - 1]\n const characterAfterAnchor = node.text[anchor.offset]\n\n if (insertText.length === 1 && insertText === characterAfterAnchor) {\n // Assume text should be inserted at the anchor\n return range\n }\n\n if (removeText.length === 1 && removeText === characterBeforeAnchor) {\n // Assume text should be removed right before the anchor\n return {\n anchor: { path, offset: anchor.offset - 1 },\n focus: { path, offset: anchor.offset },\n }\n }\n }\n }\n\n return insertionRange\n}\n","import { Editor, Node, Path, Range } from 'slate'\n\nimport { DOMNode } from '../../utils/dom'\nimport { ReactEditor } from '../..'\nimport { TextInsertion, getTextInsertion } from './diff-text'\n\ninterface MutationData {\n addedNodes: DOMNode[]\n removedNodes: DOMNode[]\n insertedText: TextInsertion[]\n characterDataMutations: MutationRecord[]\n}\n\ntype MutationDetection = (editor: Editor, mutationData: MutationData) => boolean\n\nexport function gatherMutationData(\n editor: Editor,\n mutations: MutationRecord[]\n): MutationData {\n const addedNodes: DOMNode[] = []\n const removedNodes: DOMNode[] = []\n const insertedText: TextInsertion[] = []\n const characterDataMutations: MutationRecord[] = []\n\n mutations.forEach(mutation => {\n switch (mutation.type) {\n case 'childList': {\n if (mutation.addedNodes.length) {\n mutation.addedNodes.forEach(addedNode => {\n addedNodes.push(addedNode)\n })\n }\n\n mutation.removedNodes.forEach(removedNode => {\n removedNodes.push(removedNode)\n })\n\n break\n }\n case 'characterData': {\n characterDataMutations.push(mutation)\n\n // Changes to text nodes should consider the parent element\n const { parentNode } = mutation.target\n\n if (!parentNode) {\n return\n }\n\n const textInsertion = getTextInsertion(editor, parentNode)\n\n if (!textInsertion) {\n return\n }\n\n // If we've already detected a diff at that path, we can return early\n if (\n insertedText.some(({ path }) => Path.equals(path, textInsertion.path))\n ) {\n return\n }\n\n // Add the text diff to the array of detected text insertions that need to be reconciled\n insertedText.push(textInsertion)\n }\n }\n })\n\n return { addedNodes, removedNodes, insertedText, characterDataMutations }\n}\n\n/**\n * In general, when a line break occurs, there will be more `addedNodes` than `removedNodes`.\n *\n * This isn't always the case however. In some cases, there will be more `removedNodes` than\n * `addedNodes`.\n *\n * To account for these edge cases, the most reliable strategy to detect line break mutations\n * is to check whether a new block was inserted of the same type as the current block.\n */\nexport const isLineBreak: MutationDetection = (editor, { addedNodes }) => {\n const { selection } = editor\n const parentNode = selection\n ? Node.parent(editor, selection.anchor.path)\n : null\n const parentDOMNode = parentNode\n ? ReactEditor.toDOMNode(editor, parentNode)\n : null\n\n if (!parentDOMNode) {\n return false\n }\n\n return addedNodes.some(\n addedNode =>\n addedNode instanceof HTMLElement &&\n addedNode.tagName === parentDOMNode?.tagName\n )\n}\n\n/**\n * So long as we check for line break mutations before deletion mutations,\n * we can safely assume that a set of mutations was a deletion if there are\n * removed nodes.\n */\nexport const isDeletion: MutationDetection = (_, { removedNodes }) => {\n return removedNodes.length > 0\n}\n\n/**\n * If the selection was expanded and there are removed nodes,\n * the contents of the selection need to be replaced with the diff\n */\nexport const isReplaceExpandedSelection: MutationDetection = (\n { selection },\n { removedNodes }\n) => {\n return selection\n ? Range.isExpanded(selection) && removedNodes.length > 0\n : false\n}\n\n/**\n * Plain text insertion\n */\nexport const isTextInsertion: MutationDetection = (_, { insertedText }) => {\n return insertedText.length > 0\n}\n\n/**\n * Edge case. Detect mutations that remove leaf nodes and also update character data\n */\nexport const isRemoveLeafNodes: MutationDetection = (\n _,\n { addedNodes, characterDataMutations, removedNodes }\n) => {\n return (\n removedNodes.length > 0 &&\n addedNodes.length === 0 &&\n characterDataMutations.length > 0\n )\n}\n","import { ReactEditor } from '../..'\nimport { EDITOR_TO_RESTORE_DOM } from '../../utils/weak-maps'\n\nexport function restoreDOM(editor: ReactEditor) {\n try {\n const onRestoreDOM = EDITOR_TO_RESTORE_DOM.get(editor)\n if (onRestoreDOM) {\n onRestoreDOM()\n }\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err)\n }\n}\n","import { ReactEditor } from '../../plugin/react-editor'\nimport { Editor, Range, Transforms } from 'slate'\n\nimport { DOMNode } from '../../utils/dom'\n\nimport {\n normalizeTextInsertionRange,\n combineInsertedText,\n TextInsertion,\n} from './diff-text'\nimport {\n gatherMutationData,\n isDeletion,\n isLineBreak,\n isRemoveLeafNodes,\n isReplaceExpandedSelection,\n isTextInsertion,\n} from './mutation-detection'\nimport { restoreDOM } from './restore-dom'\n\n// Replace with `const debug = console.log` to debug\nconst debug = (...message: any[]) => {}\n\n/**\n * Based loosely on:\n *\n * https://github.com/facebook/draft-js/blob/master/src/component/handlers/composition/DOMObserver.js\n * https://github.com/ProseMirror/prosemirror-view/blob/master/src/domobserver.js\n *\n * The input manager attempts to map observed mutations on the document to a\n * set of operations in order to reconcile Slate's internal value with the DOM.\n *\n * Mutations are processed synchronously as they come in. Only mutations that occur\n * during a user input loop are processed, as other mutations can occur within the\n * document that were not initiated by user input.\n *\n * The mutation reconciliation process attempts to match mutations to the following\n * patterns:\n *\n * - Text updates\n * - Deletions\n * - Line breaks\n *\n * @param editor\n */\n\nexport class AndroidInputManager {\n constructor(private editor: ReactEditor) {\n this.editor = editor\n }\n\n /**\n * Handle MutationObserver flush\n *\n * @param mutations\n */\n\n flush = (mutations: MutationRecord[]) => {\n debug('flush')\n\n try {\n this.reconcileMutations(mutations)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err)\n\n // Failed to reconcile mutations, restore DOM to its previous state\n restoreDOM(this.editor)\n }\n }\n\n /**\n * Reconcile a batch of mutations\n *\n * @param mutations\n */\n\n private reconcileMutations = (mutations: MutationRecord[]) => {\n const mutationData = gatherMutationData(this.editor, mutations)\n const { insertedText, removedNodes } = mutationData\n\n debug('processMutations', mutations, mutationData)\n\n if (isReplaceExpandedSelection(this.editor, mutationData)) {\n const text = combineInsertedText(insertedText)\n this.replaceExpandedSelection(text)\n } else if (isLineBreak(this.editor, mutationData)) {\n this.insertBreak()\n } else if (isRemoveLeafNodes(this.editor, mutationData)) {\n this.removeLeafNodes(removedNodes)\n } else if (isDeletion(this.editor, mutationData)) {\n this.deleteBackward()\n } else if (isTextInsertion(this.editor, mutationData)) {\n this.insertText(insertedText)\n }\n }\n\n /**\n * Apply text diff\n */\n\n private insertText = (insertedText: TextInsertion[]) => {\n debug('insertText')\n\n const { selection } = this.editor\n\n // Insert the batched text diffs\n insertedText.forEach(insertion => {\n Transforms.insertText(this.editor, insertion.text.insertText, {\n at: normalizeTextInsertionRange(this.editor, selection, insertion),\n })\n })\n }\n\n /**\n * Handle line breaks\n */\n\n private insertBreak = () => {\n debug('insertBreak')\n\n const { selection } = this.editor\n\n Editor.insertBreak(this.editor)\n\n // To-do: Need a more granular solution to restoring only a specific portion\n // of the document. Restoring the entire document is expensive.\n restoreDOM(this.editor)\n\n if (selection) {\n // Compat: Move selection to the newly inserted block if it has not moved\n setTimeout(() => {\n if (\n this.editor.selection &&\n Range.equals(selection, this.editor.selection)\n ) {\n Transforms.move(this.editor)\n }\n }, 100)\n }\n }\n\n /**\n * Handle expanded selection being deleted or replaced by text\n */\n\n private replaceExpandedSelection = (text: string) => {\n debug('replaceExpandedSelection')\n\n // Delete expanded selection\n Editor.deleteFragment(this.editor)\n\n if (text.length) {\n // Selection was replaced by text, insert the entire text diff\n Editor.insertText(this.editor, text)\n }\n\n restoreDOM(this.editor)\n }\n\n /**\n * Handle `backspace` that merges blocks\n */\n\n private deleteBackward = () => {\n debug('deleteBackward')\n\n Editor.deleteBackward(this.editor)\n ReactEditor.focus(this.editor)\n\n restoreDOM(this.editor)\n }\n\n /**\n * Handle mutations that remove specific leaves\n */\n private removeLeafNodes = (nodes: DOMNode[]) => {\n for (const node of nodes) {\n const slateNode = ReactEditor.toSlateNode(this.editor, node)\n\n if (slateNode) {\n const path = ReactEditor.findPath(this.editor, slateNode)\n\n Transforms.delete(this.editor, { at: path })\n restoreDOM(this.editor)\n }\n }\n }\n}\n\nexport default AndroidInputManager\n","import { RefObject, useEffect, useState } from 'react'\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect'\n\nexport function useMutationObserver(\n node: RefObject<HTMLElement>,\n callback: MutationCallback,\n options: MutationObserverInit\n) {\n const [mutationObserver] = useState(() => new MutationObserver(callback))\n\n useIsomorphicLayoutEffect(() => {\n // Disconnect mutation observer during render phase\n mutationObserver.disconnect()\n })\n\n useEffect(() => {\n if (!node.current) {\n throw new Error('Failed to attach MutationObserver, `node` is undefined')\n }\n\n // Attach mutation observer after render phase has finished\n mutationObserver.observe(node.current, options)\n\n // Clean up after effect\n return mutationObserver.disconnect.bind(mutationObserver)\n })\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nimport { ReactEditor } from '../..'\nimport { useSlateStatic } from '../../hooks/use-slate-static'\n\nexport function useTrackUserInput() {\n const editor = useSlateStatic()\n const receivedUserInput = useRef<boolean>(false)\n const animationFrameRef = useRef<number | null>(null)\n const onUserInput = useCallback(() => {\n if (receivedUserInput.current === false) {\n const window = ReactEditor.getWindow(editor)\n\n receivedUserInput.current = true\n\n if (animationFrameRef.current) {\n window.cancelAnimationFrame(animationFrameRef.current)\n }\n\n animationFrameRef.current = window.requestAnimationFrame(() => {\n receivedUserInput.current = false\n animationFrameRef.current = null\n })\n }\n }, [])\n\n useEffect(() => {\n // Reset user input tracking on every render\n if (receivedUserInput.current) {\n receivedUserInput.current = false\n }\n })\n\n return {\n receivedUserInput,\n onUserInput,\n }\n}\n","import { RefObject, useCallback, useRef, useState } from 'react'\n\nimport { useSlateStatic } from '../../hooks/use-slate-static'\n\nimport { AndroidInputManager } from './android-input-manager'\nimport { useMutationObserver } from './use-mutation-observer'\nimport { useTrackUserInput } from './use-track-user-input'\n\nconst MUTATION_OBSERVER_CONFIG: MutationObserverInit = {\n childList: true,\n characterData: true,\n characterDataOldValue: true,\n subtree: true,\n}\n\nexport function useAndroidInputManager(node: RefObject<HTMLElement>) {\n const editor = useSlateStatic()\n const [inputManager] = useState(() => new AndroidInputManager(editor))\n const { receivedUserInput, onUserInput } = useTrackUserInput()\n const timeoutId = useRef<NodeJS.Timeout | null>(null)\n const isReconciling = useRef(false)\n const flush = useCallback((mutations: MutationRecord[]) => {\n if (!receivedUserInput.current) {\n return\n }\n\n isReconciling.current = true\n inputManager.flush(mutations)\n\n if (timeoutId.current) {\n clearTimeout(timeoutId.current)\n }\n\n timeoutId.current = setTimeout(() => {\n isReconciling.current = false\n timeoutId.current = null\n }, 250)\n }, [])\n\n useMutationObserver(node, flush, MUTATION_OBSERVER_CONFIG)\n\n return {\n isReconciling,\n onUserInput,\n }\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Descendant, Editor, Element, Node, Range, Transforms } from 'slate'\nimport throttle from 'lodash/throttle'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport { DefaultPlaceholder, ReactEditor } from '../..'\nimport { ReadOnlyContext } from '../../hooks/use-read-only'\nimport { useSlate } from '../../hooks/use-slate'\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect'\nimport { DecorateContext } from '../../hooks/use-decorate'\nimport {\n DOMElement,\n isDOMElement,\n isDOMNode,\n getDefaultView,\n isPlainTextOnlyPaste,\n} from '../../utils/dom'\nimport {\n EDITOR_TO_ELEMENT,\n EDITOR_TO_RESTORE_DOM,\n EDITOR_TO_WINDOW,\n ELEMENT_TO_NODE,\n IS_FOCUSED,\n IS_READ_ONLY,\n NODE_TO_ELEMENT,\n PLACEHOLDER_SYMBOL,\n} from '../../utils/weak-maps'\nimport { EditableProps } from '../editable'\nimport useChildren from '../../hooks/use-children'\nimport {\n defaultDecorate,\n hasEditableTarget,\n isEventHandled,\n isDOMEventHandled,\n isTargetInsideVoid,\n} from '../editable'\n\nimport { useAndroidInputManager } from './use-android-input-manager'\n\n/**\n * Editable.\n */\n\nexport const AndroidEditable = (props: EditableProps): JSX.Element => {\n const {\n autoFocus,\n decorate = defaultDecorate,\n onDOMBeforeInput: propsOnDOMBeforeInput,\n placeholder,\n readOnly = false,\n renderElement,\n renderLeaf,\n renderPlaceholder = props => <DefaultPlaceholder {...props} />,\n style = {},\n as: Component = 'div',\n ...attributes\n } = props\n const editor = useSlate()\n const ref = useRef<HTMLDivElement>(null)\n const inputManager = useAndroidInputManager(ref)\n\n // Update internal state on each render.\n IS_READ_ONLY.set(editor, readOnly)\n\n // Keep track of some state for the event handler logic.\n const state = useMemo(\n () => ({\n isUpdatingSelection: false,\n latestElement: null as DOMElement | null,\n }),\n []\n )\n\n const [contentKey, setContentKey] = useState(0)\n const onRestoreDOM = useCallback(() => {\n setContentKey(prev => prev + 1)\n }, [contentKey])\n\n // Whenever the editor updates...\n useIsomorphicLayoutEffect(() => {\n // Update element-related weak maps with the DOM element ref.\n let window\n\n if (ref.current && (window = getDefaultView(ref.current))) {\n EDITOR_TO_WINDOW.set(editor, window)\n EDITOR_TO_ELEMENT.set(editor, ref.current)\n NODE_TO_ELEMENT.set(editor, ref.current)\n ELEMENT_TO_NODE.set(ref.current, editor)\n EDITOR_TO_RESTORE_DOM.set(editor, onRestoreDOM)\n } else {\n NODE_TO_ELEMENT.delete(editor)\n EDITOR_TO_RESTORE_DOM.delete(editor)\n }\n\n try {\n // Make sure the DOM selection state is in sync.\n const { selection } = editor\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n const domSelection = root.getSelection()\n\n if (!domSelection || !ReactEditor.isFocused(editor)) {\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 // verify that the dom selection is in the editor\n const editorElement = EDITOR_TO_ELEMENT.get(editor)!\n let hasDomSelectionInEditor = false\n if (\n editorElement.contains(domSelection.anchorNode) &&\n editorElement.contains(domSelection.focusNode)\n ) {\n hasDomSelectionInEditor = true\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) {\n const slateRange = ReactEditor.toSlateRange(editor, domSelection, {\n exactMatch: true,\n })\n if (slateRange && Range.equals(slateRange, selection)) {\n return\n }\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 && !ReactEditor.hasRange(editor, selection)) {\n editor.selection = ReactEditor.toSlateRange(editor, domSelection, {\n exactMatch: false,\n })\n return\n }\n\n // Otherwise the DOM selection is out of sync, so update it.\n const el = ReactEditor.toDOMNode(editor, editor)\n state.isUpdatingSelection = true\n\n const newDomRange = selection && ReactEditor.toDOMRange(editor, selection)\n\n if (newDomRange) {\n if (Range.isBackward(selection!)) {\n domSelection.setBaseAndExtent(\n newDomRange.endContainer,\n newDomRange.endOffset,\n newDomRange.startContainer,\n newDomRange.startOffset\n )\n } else {\n domSelection.setBaseAndExtent(\n newDomRange.startContainer,\n newDomRange.startOffset,\n newDomRange.endContainer,\n newDomRange.endOffset\n )\n }\n const leafEl = newDomRange.startContainer.parentElement!\n leafEl.getBoundingClientRect = newDomRange.getBoundingClientRect.bind(\n newDomRange\n )\n scrollIntoView(leafEl, {\n scrollMode: 'if-needed',\n boundary: el,\n })\n // @ts-ignore\n delete leafEl.getBoundingClientRect\n } else {\n domSelection.removeAllRanges()\n }\n\n setTimeout(() => {\n state.isUpdatingSelection = false\n })\n } catch {\n // Failed to update selection, likely due to reconciliation error\n state.isUpdatingSelection = false\n }\n })\n\n // The autoFocus TextareaHTMLAttribute doesn't do anything on a div, so it\n // needs to be manually focused.\n useEffect(() => {\n if (ref.current && autoFocus) {\n ref.current.focus()\n }\n }, [autoFocus])\n\n // Listen on the native `beforeinput` event to get real \"Level 2\" events. This\n // is required because React's `beforeinput` is fake and never really attaches\n // to the real event sadly. (2019/11/01)\n // https://github.com/facebook/react/issues/11211\n const onDOMBeforeInput = useCallback(\n (event: InputEvent) => {\n if (\n !readOnly &&\n hasEditableTarget(editor, event.target) &&\n !isDOMEventHandled(event, propsOnDOMBeforeInput)\n ) {\n inputManager.onUserInput()\n }\n },\n [readOnly, propsOnDOMBeforeInput]\n )\n\n // Attach a native DOM event handler for `beforeinput` events, because React's\n // built-in `onBeforeInput` is actually a leaky polyfill that doesn't expose\n // real `beforeinput` events sadly... (2019/11/04)\n useIsomorphicLayoutEffect(() => {\n const node = ref.current\n\n // @ts-ignore The `beforeinput` event isn't recognized.\n node?.addEventListener('beforeinput', onDOMBeforeInput)\n\n // @ts-ignore The `beforeinput` event isn't recognized.\n return () => node?.removeEventListener('beforeinput', onDOMBeforeInput)\n }, [contentKey, propsOnDOMBeforeInput])\n\n // Listen on the native `selectionchange` event to be able to update any time\n // the selection changes. This is required because React's `onSelect` is leaky\n // and non-standard so it doesn't fire until after a selection has been\n // released. This causes issues in situations where another change happens\n // while a selection is being dragged.\n const onDOMSelectionChange = useCallback(\n throttle(() => {\n try {\n if (\n !readOnly &&\n !state.isUpdatingSelection &&\n !inputManager.isReconciling.current\n ) {\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n const { activeElement } = root\n const el = ReactEditor.toDOMNode(editor, editor)\n const domSelection = root.getSelection()\n\n if (activeElement === el) {\n state.latestElement = activeElement\n IS_FOCUSED.set(editor, true)\n } else {\n IS_FOCUSED.delete(editor)\n }\n\n if (!domSelection) {\n return Transforms.deselect(editor)\n }\n\n const { anchorNode, focusNode } = domSelection\n\n const anchorNodeSelectable =\n hasEditableTarget(editor, anchorNode) ||\n isTargetInsideVoid(editor, anchorNode)\n\n const focusNodeSelectable =\n hasEditableTarget(editor, focusNode) ||\n isTargetInsideVoid(editor, focusNode)\n\n if (anchorNodeSelectable && focusNodeSelectable) {\n const range = ReactEditor.toSlateRange(editor, domSelection, {\n exactMatch: false,\n })\n Transforms.select(editor, range)\n } else {\n Transforms.deselect(editor)\n }\n }\n } catch {\n // Failed to update selection, likely due to reconciliation error\n }\n }, 100),\n [readOnly]\n )\n\n // Attach a native DOM event handler for `selectionchange`, because React's\n // built-in `onSelect` handler doesn't fire for all selection changes. It's a\n // leaky polyfill that only fires on keypresses or clicks. Instead, we want to\n // fire for any change to the selection inside the editor. (2019/11/04)\n // https://github.com/facebook/react/issues/5785\n useIsomorphicLayoutEffect(() => {\n const window = ReactEditor.getWindow(editor)\n window.document.addEventListener('selectionchange', onDOMSelectionChange)\n\n return () => {\n window.document.removeEventListener(\n 'selectionchange',\n onDOMSelectionChange\n )\n }\n })\n\n const decorations = decorate([editor, []])\n\n if (\n placeholder &&\n editor.children.length === 1 &&\n Array.from(Node.texts(editor)).length === 1 &&\n Node.string(editor) === ''\n ) {\n const start = Editor.start(editor, [])\n decorations.push({\n [PLACEHOLDER_SYMBOL]: true,\n placeholder,\n anchor: start,\n focus: start,\n })\n }\n\n return (\n <ReadOnlyContext.Provider value={readOnly}>\n <DecorateContext.Provider value={decorate}>\n <Component\n key={contentKey}\n role={readOnly ? undefined : 'textbox'}\n {...attributes}\n spellCheck={attributes.spellCheck}\n autoCorrect={attributes.autoCorrect}\n autoCapitalize={attributes.autoCapitalize}\n data-slate-editor\n data-slate-node=\"value\"\n contentEditable={readOnly ? undefined : true}\n suppressContentEditableWarning\n ref={ref}\n style={{\n // Allow positioning relative to the editable element.\n position: 'relative',\n // Prevent the default outline styles.\n outline: 'none',\n // Preserve adjacent whitespace and new lines.\n whiteSpace: 'pre-wrap',\n // Allow words to break if they are too long.\n wordWrap: 'break-word',\n // Allow for passed-in styles to override anything.\n ...style,\n }}\n onCopy={useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n if (\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCopy)\n ) {\n event.preventDefault()\n ReactEditor.setFragmentData(editor, event.clipboardData)\n }\n },\n [attributes.onCopy]\n )}\n onCut={useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n if (\n !readOnly &&\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCut)\n ) {\n event.preventDefault()\n ReactEditor.setFragmentData(editor, event.clipboardData)\n const { selection } = editor\n\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 (Editor.isVoid(editor, node)) {\n Transforms.delete(editor)\n }\n }\n }\n }\n },\n [readOnly, attributes.onCut]\n )}\n onFocus={useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (\n !readOnly &&\n !state.isUpdatingSelection &&\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onFocus)\n ) {\n const root = ReactEditor.findDocumentOrShadowRoot(editor)\n state.latestElement = root.activeElement\n\n IS_FOCUSED.set(editor, true)\n }\n },\n [readOnly, attributes.onFocus]\n )}\n onBlur={useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (\n readOnly ||\n state.isUpdatingSelection ||\n !hasEditableTarget(editor, event.target) ||\n isEventHandled(event, attributes.onBlur)\n ) {\n return\n }\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 = ReactEditor.findDocumentOrShadowRoot(editor)\n if (state.latestElement === root.activeElement) {\n return\n }\n\n const { relatedTarget } = event\n const el = ReactEditor.toDOMNode(editor, 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 (\n isDOMElement(relatedTarget) &&\n relatedTarget.hasAttribute('data-slate-spacer')\n ) {\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 (\n relatedTarget != null &&\n isDOMNode(relatedTarget) &&\n ReactEditor.hasDOMNode(editor, relatedTarget)\n ) {\n const node = ReactEditor.toSlateNode(editor, relatedTarget)\n\n if (Element.isElement(node) && !editor.isVoid(node)) {\n return\n }\n }\n\n IS_FOCUSED.delete(editor)\n },\n [readOnly, attributes.onBlur]\n )}\n onPaste={useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n // This unfortunately needs to be handled with paste events instead.\n if (\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onPaste) &&\n !readOnly\n ) {\n event.preventDefault()\n ReactEditor.insertData(editor, event.clipboardData)\n }\n },\n [readOnly, attributes.onPaste]\n )}\n >\n {useChildren({\n decorations,\n node: editor,\n renderElement,\n renderPlaceholder,\n renderLeaf,\n selection: editor.selection,\n })}\n </Component>\n </DecorateContext.Provider>\n </ReadOnlyContext.Provider>\n )\n}\n","import { createContext, useContext } from 'react'\n\n/**\n * A React context for sharing the `focused` state of the editor.\n */\n\nexport const FocusedContext = createContext(false)\n\n/**\n * Get the current `focused` state of the editor.\n */\n\nexport const useFocused = (): boolean => {\n return useContext(FocusedContext)\n}\n","import React, { useMemo, useState, useCallback, useEffect } from 'react'\nimport { Editor, Node, Element, Descendant } from 'slate'\nimport invariant from 'tiny-invariant'\n\nimport { ReactEditor } from '../plugin/react-editor'\nimport { FocusedContext } from '../hooks/use-focused'\nimport { EditorContext } from '../hooks/use-slate-static'\nimport { SlateContext } from '../hooks/use-slate'\nimport { EDITOR_TO_ON_CHANGE } from '../utils/weak-maps'\nimport { useIsomorphicLayoutEffect } from '../hooks/use-isomorphic-layout-effect'\n\n/**\n * A wrapper around the provider to handle `onChange` events, because the editor\n * is a mutable singleton so it won't ever register as \"changed\" otherwise.\n */\n\nexport const Slate = (props: {\n editor: ReactEditor\n value: Descendant[]\n children: React.ReactNode\n onChange: (value: Descendant[]) => void\n}) => {\n const { editor, children, onChange, value, ...rest } = props\n const [key, setKey] = useState(0)\n const context: [ReactEditor] = useMemo(() => {\n invariant(\n Node.isNodeList(value),\n `[Slate] value is invalid! Expected a list of elements but got: ${JSON.stringify(\n value\n )}`\n )\n invariant(\n Editor.isEditor(editor),\n `[Slate] editor is invalid! you passed: ${JSON.stringify(editor)}`\n )\n\n editor.children = value\n Object.assign(editor, rest)\n return [editor]\n }, [key, value, ...Object.values(rest)])\n\n const onContextChange = useCallback(() => {\n onChange(editor.children)\n setKey(key + 1)\n }, [key, onChange])\n\n EDITOR_TO_ON_CHANGE.set(editor, onContextChange)\n\n useEffect(() => {\n return () => {\n EDITOR_TO_ON_CHANGE.set(editor, () => {})\n }\n }, [])\n\n const [isFocused, setIsFocused] = useState(ReactEditor.isFocused(editor))\n\n useEffect(() => {\n setIsFocused(ReactEditor.isFocused(editor))\n })\n\n useIsomorphicLayoutEffect(() => {\n const fn = () => setIsFocused(ReactEditor.isFocused(editor))\n document.addEventListener('focus', fn, true)\n return () => document.removeEventListener('focus', fn, true)\n }, [])\n\n useIsomorphicLayoutEffect(() => {\n const fn = () => setIsFocused(ReactEditor.isFocused(editor))\n document.addEventListener('blur', fn, true)\n return () => document.removeEventListener('blur', fn, true)\n }, [])\n\n return (\n <SlateContext.Provider value={context}>\n <EditorContext.Provider value={editor}>\n <FocusedContext.Provider value={isFocused}>\n {children}\n </FocusedContext.Provider>\n </EditorContext.Provider>\n </SlateContext.Provider>\n )\n}\n","import { useContext } from 'react'\n\nimport { EditorContext } from './use-slate-static'\n\n/**\n * Get the current editor object from the React context.\n * @deprecated Use useSlateStatic instead.\n */\n\nexport const useEditor = () => {\n const editor = useContext(EditorContext)\n\n if (!editor) {\n throw new Error(\n `The \\`useEditor\\` hook must be used inside the <Slate> component's context.`\n )\n }\n\n return editor\n}\n","/**\n * Utilities for single-line deletion\n */\n\nimport { Range, Editor } from 'slate'\nimport { ReactEditor } from '..'\n\nconst doRectsIntersect = (rect: DOMRect, compareRect: DOMRect) => {\n const middle = (compareRect.top + compareRect.bottom) / 2\n\n return rect.top <= middle && rect.bottom >= middle\n}\n\nconst areRangesSameLine = (\n editor: ReactEditor,\n range1: Range,\n range2: Range\n) => {\n const rect1 = ReactEditor.toDOMRange(editor, range1).getBoundingClientRect()\n const rect2 = ReactEditor.toDOMRange(editor, range2).getBoundingClientRect()\n\n return doRectsIntersect(rect1, rect2) && doRectsIntersect(rect2, rect1)\n}\n\n/**\n * A helper utility that returns the end portion of a `Range`\n * which is located on a single line.\n *\n * @param {Editor} editor The editor object to compare against\n * @param {Range} parentRange The parent range to compare against\n * @returns {Range} A valid portion of the parentRange which is one a single line\n */\nexport const findCurrentLineRange = (\n editor: ReactEditor,\n parentRange: Range\n): Range => {\n const parentRangeBoundary = Editor.range(editor, Range.end(parentRange))\n const positions = Array.from(Editor.positions(editor, { at: parentRange }))\n\n let left = 0\n let right = positions.length\n let middle = Math.floor(right / 2)\n\n if (\n areRangesSameLine(\n editor,\n Editor.range(editor, positions[left]),\n parentRangeBoundary\n )\n ) {\n return Editor.range(editor, positions[left], parentRangeBoundary)\n }\n\n if (positions.length < 2) {\n return Editor.range(\n editor,\n positions[positions.length - 1],\n parentRangeBoundary\n )\n }\n\n while (middle !== positions.length && middle !== left) {\n if (\n areRangesSameLine(\n editor,\n Editor.range(editor, positions[middle]),\n parentRangeBoundary\n )\n ) {\n right = middle\n } else {\n left = middle\n }\n\n middle = Math.floor((left + right) / 2)\n }\n\n return Editor.range(editor, positions[right], parentRangeBoundary)\n}\n","import ReactDOM from 'react-dom'\nimport { Editor, Node, Path, Operation, Transforms, Range } from 'slate'\n\nimport { ReactEditor } from './react-editor'\nimport { Key } from '../utils/key'\nimport { EDITOR_TO_ON_CHANGE, NODE_TO_KEY } from '../utils/weak-maps'\nimport { isDOMText, getPlainText } from '../utils/dom'\nimport { findCurrentLineRange } from '../utils/lines'\n\n/**\n * `withReact` adds React and DOM specific behaviors to the editor.\n *\n * If you are using TypeScript, you must extend Slate's CustomTypes to use\n * this plugin.\n *\n * See https://docs.slatejs.org/concepts/11-typescript to learn how.\n */\n\nexport const withReact = <T extends Editor>(editor: T) => {\n const e = editor as T & ReactEditor\n const { apply, onChange, deleteBackward } = e\n\n e.deleteBackward = unit => {\n if (unit !== 'line') {\n return deleteBackward(unit)\n }\n\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const parentBlockEntry = Editor.above(editor, {\n match: n => Editor.isBlock(editor, n),\n at: editor.selection,\n })\n\n if (parentBlockEntry) {\n const [, parentBlockPath] = parentBlockEntry\n const parentElementRange = Editor.range(\n editor,\n parentBlockPath,\n editor.selection.anchor\n )\n\n const currentLineRange = findCurrentLineRange(e, parentElementRange)\n\n if (!Range.isCollapsed(currentLineRange)) {\n Transforms.delete(editor, { at: currentLineRange })\n }\n }\n }\n }\n\n e.apply = (op: Operation) => {\n const matches: [Path, 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 = ReactEditor.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 = ReactEditor.findKey(e, node)\n matches.push([path, key])\n }\n\n break\n }\n\n case 'move_node': {\n for (const [node, path] of Editor.levels(e, {\n at: Path.common(Path.parent(op.path), Path.parent(op.newPath)),\n })) {\n const key = ReactEditor.findKey(e, node)\n matches.push([path, key])\n }\n break\n }\n }\n\n apply(op)\n\n for (const [path, key] of matches) {\n const [node] = Editor.node(e, path)\n NODE_TO_KEY.set(node, key)\n }\n }\n\n e.setFragmentData = (data: DataTransfer) => {\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 const domRange = ReactEditor.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 contents.childNodes.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 = ReactEditor.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(\n zw => {\n const isNewline = zw.getAttribute('data-slate-zero-width') === 'n'\n zw.textContent = isNewline ? '\\n' : ''\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 = document.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 const string = JSON.stringify(fragment)\n const encoded = window.btoa(encodeURIComponent(string))\n attach.setAttribute('data-slate-fragment', encoded)\n data.setData('application/x-slate-fragment', encoded)\n\n // Add the content to a <div> so that we can get its inner HTML.\n const div = document.createElement('div')\n div.appendChild(contents)\n div.setAttribute('hidden', 'true')\n document.body.appendChild(div)\n data.setData('text/html', div.innerHTML)\n data.setData('text/plain', getPlainText(div))\n document.body.removeChild(div)\n }\n\n e.insertData = (data: DataTransfer) => {\n const fragment = data.getData('application/x-slate-fragment')\n\n if (fragment) {\n const decoded = decodeURIComponent(window.atob(fragment))\n const parsed = JSON.parse(decoded) as Node[]\n e.insertFragment(parsed)\n return\n }\n\n const text = data.getData('text/plain')\n\n if (text) {\n const lines = 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 }\n }\n\n e.onChange = () => {\n // COMPAT: React doesn't batch `setState` hook calls, which means that the\n // children and selection can get out of sync for one render pass. So we\n // have to use this unstable API to ensure it batches them. (2019/12/03)\n // https://github.com/facebook/react/issues/14259#issuecomment-439702367\n ReactDOM.unstable_batchedUpdates(() => {\n const onContextChange = EDITOR_TO_ON_CHANGE.get(e)\n\n if (onContextChange) {\n onContextChange()\n }\n\n onChange()\n })\n }\n\n return e\n}\n","// Components\n// Environment-dependent Editable\nimport { Editable as DefaultEditable } from './components/editable'\nimport { AndroidEditable } from './components/android/android-editable'\nimport { IS_ANDROID } from './utils/environment'\n\nexport const Editable = IS_ANDROID ? AndroidEditable : DefaultEditable\nexport {\n Editable as DefaultEditable,\n RenderElementProps,\n RenderLeafProps,\n RenderPlaceholderProps,\n DefaultPlaceholder,\n} from './components/editable'\nexport { AndroidEditable } from './components/android/android-editable'\nexport { DefaultElement } from './components/element'\nexport { DefaultLeaf } from './components/leaf'\nexport { Slate } from './components/slate'\n\n// Hooks\nexport { useEditor } from './hooks/use-editor'\nexport { useSlateStatic } from './hooks/use-slate-static'\nexport { useFocused } from './hooks/use-focused'\nexport { useReadOnly } from './hooks/use-read-only'\nexport { useSelected } from './hooks/use-selected'\nexport { useSlate } from './hooks/use-slate'\n\n// Plugin\nexport { ReactEditor } from './plugin/react-editor'\nexport { withReact } from './plugin/with-react'\n"],"names":["objectWithoutPropertiesLoose","String","props","isLast","leaf","parent","text","editor","useSlateStatic","path","ReactEditor","findPath","parentPath","Path","isVoid","React","ZeroWidthString","length","Node","string","children","isInline","Editor","isLineBreak","slice","TextString","isTrailing","NODE_TO_INDEX","WeakMap","NODE_TO_PARENT","EDITOR_TO_WINDOW","EDITOR_TO_ELEMENT","ELEMENT_TO_NODE","KEY_TO_ELEMENT","NODE_TO_ELEMENT","NODE_TO_KEY","IS_READ_ONLY","IS_FOCUSED","EDITOR_TO_ON_CHANGE","EDITOR_TO_RESTORE_DOM","PLACEHOLDER_SYMBOL","Symbol","keyForString","Leaf","renderPlaceholder","renderLeaf","DefaultLeaf","placeholderRef","useRef","useEffect","placeholderEl","current","editorEl","document","querySelector","style","minHeight","clientHeight","key","placeholderProps","placeholder","attributes","position","pointerEvents","width","maxWidth","display","opacity","userSelect","textDecoration","contentEditable","ref","Fragment","MemoizedLeaf","memo","prev","next","Text","matches","IS_IOS","navigator","window","test","userAgent","MSStream","IS_APPLE","IS_ANDROID","IS_FIREFOX","IS_SAFARI","IS_EDGE_LEGACY","IS_CHROME","IS_CHROME_LEGACY","IS_FIREFOX_LEGACY","CAN_USE_DOM","createElement","HAS_BEFORE_INPUT_SUPPORT","globalThis","InputEvent","prototype","getTargetRanges","useIsomorphicLayoutEffect","useLayoutEffect","shallowCompare","obj1","obj2","Object","keys","every","hasOwnProperty","isDecoratorRangeListEqual","list","another","i","range","other","rangeOwnProps","otherOwnProps","Range","equals","decorations","leaves","SlateText","findKey","push","id","set","delete","MemoizedText","SelectedContext","createContext","useSelected","useContext","Element","element","renderElement","p","DefaultElement","selection","readOnly","useReadOnly","useChildren","node","hasInlines","dir","getDirection","Tag","texts","height","color","outline","Provider","value","MemoizedElement","EditorContext","Error","DecorateContext","useDecorate","decorate","isLeafBlock","isElement","concat","n","sel","intersection","ds","dec","d","ElementComponent","TextComponent","HOTKEYS","bold","compose","moveBackward","moveForward","moveWordBackward","moveWordForward","deleteBackward","deleteForward","extendBackward","extendForward","italic","splitBlock","undo","APPLE_HOTKEYS","moveLineBackward","moveLineForward","deleteLineBackward","deleteLineForward","deleteWordBackward","deleteWordForward","extendLineBackward","extendLineForward","redo","transposeCharacter","WINDOWS_HOTKEYS","create","generic","apple","windows","isGeneric","isKeyHotkey","isApple","isWindows","event","isBold","isCompose","isMoveBackward","isMoveForward","isDeleteBackward","isDeleteForward","isDeleteLineBackward","isDeleteLineForward","isDeleteWordBackward","isDeleteWordForward","isExtendBackward","isExtendForward","isExtendLineBackward","isExtendLineForward","isItalic","isMoveLineBackward","isMoveLineForward","isMoveWordBackward","isMoveWordForward","isRedo","isSplitBlock","isTransposeCharacter","isUndo","ReadOnlyContext","SlateContext","useSlate","context","getDefaultView","ownerDocument","defaultView","isDOMComment","isDOMNode","nodeType","isDOMElement","isDOMSelection","anchorNode","Selection","isDOMText","isPlainTextOnlyPaste","clipboardData","getData","types","normalizeDOMPoint","domPoint","offset","childNodes","index","getEditableChildAndIndex","getEditableChild","textContent","hasShadowRoot","activeElement","shadowRoot","direction","child","triedForward","triedBackward","getAttribute","getPlainText","domNode","nodeValue","childNode","Array","from","getComputedStyle","getPropertyValue","tagName","Editable","autoFocus","defaultDecorate","onDOMBeforeInput","propsOnDOMBeforeInput","DefaultPlaceholder","as","Component","state","useMemo","isComposing","isDraggingInternally","isUpdatingSelection","latestElement","root","findDocumentOrShadowRoot","domSelection","getSelection","isFocused","hasDomSelection","type","editorElement","get","hasDomSelectionInEditor","contains","focusNode","slateRange","toSlateRange","exactMatch","hasRange","el","toDOMNode","newDomRange","toDOMRange","isBackward","setBaseAndExtent","endContainer","endOffset","startContainer","startOffset","leafEl","parentElement","getBoundingClientRect","bind","scrollIntoView","scrollMode","boundary","removeAllRanges","setTimeout","focus","useCallback","hasEditableTarget","target","isDOMEventHandled","inputType","data","dataTransfer","undefined","preventDefault","startsWith","targetRange","Transforms","select","isExpanded","endsWith","deleteFragment","unit","insertBreak","getWindow","DataTransfer","insertData","insertText","addEventListener","removeEventListener","onDOMSelectionChange","throttle","deselect","anchorNodeSelectable","isTargetInsideVoid","focusNodeSelectable","start","anchor","role","spellCheck","autoCorrect","autoCapitalize","suppressContentEditableWarning","whiteSpace","wordWrap","onBeforeInput","isEventHandled","onBlur","relatedTarget","hasAttribute","hasDOMNode","toSlateNode","onClick","hasTarget","end","startVoid","void","at","endVoid","onCompositionEnd","onCompositionUpdate","onCompositionStart","onCopy","setFragmentData","onCut","onDragOver","onDragStart","voidMatch","voids","onDrop","draggedRange","findEventRange","onDragEnd","onFocus","onKeyDown","nativeEvent","isRTL","Hotkeys","maybeHistoryEditor","move","reverse","edge","isCollapsed","collapse","currentNode","onPaste","editable","slateNode","handler","shouldTreatEventAsHandled","isDefaultPrevented","isPropagationStopped","defaultPrevented","Key","constructor","isEditor","unshift","JSON","stringify","getRootNode","Document","ShadowRoot","isReadOnly","blur","preventScroll","rangeCount","options","targetEl","err","message","includes","closest","isContentEditable","toDOMPoint","point","selector","querySelectorAll","attr","trueLength","parseInt","Math","min","max","domAnchor","domFocus","domRange","createRange","startNode","endNode","startEl","isStartAtZeroWidth","endEl","isEndAtZeroWidth","setStart","setEnd","domEl","clientX","x","clientY","y","rect","isPrev","left","top","before","after","caretRangeFromPoint","caretPositionFromPoint","offsetNode","toSlatePoint","nearestNode","nearestOffset","parentNode","textNode","voidNode","leafNode","contents","cloneContents","removals","call","forEach","removeChild","anchorOffset","focusOffset","collapsed","hasPath","getDiffStart","charAt","getDiffEnd","prevLength","nextLength","prevChar","nextChar","getDiffOffsets","maxEnd","sliceText","offsets","diffText","removeText","combineInsertedText","insertedText","reduce","acc","getTextInsertion","isText","prevText","nextText","textDiff","textPath","normalizeTextInsertionRange","insertionRange","isSingleCharacterInsertion","nodes","match","characterBeforeAnchor","characterAfterAnchor","gatherMutationData","mutations","addedNodes","removedNodes","characterDataMutations","mutation","addedNode","removedNode","textInsertion","some","parentDOMNode","HTMLElement","isDeletion","_","isReplaceExpandedSelection","isTextInsertion","isRemoveLeafNodes","restoreDOM","onRestoreDOM","console","error","AndroidInputManager","reconcileMutations","mutationData","replaceExpandedSelection","removeLeafNodes","insertion","useMutationObserver","callback","mutationObserver","useState","MutationObserver","disconnect","observe","useTrackUserInput","receivedUserInput","animationFrameRef","onUserInput","cancelAnimationFrame","requestAnimationFrame","MUTATION_OBSERVER_CONFIG","childList","characterData","characterDataOldValue","subtree","useAndroidInputManager","inputManager","timeoutId","isReconciling","flush","clearTimeout","AndroidEditable","contentKey","setContentKey","FocusedContext","useFocused","Slate","onChange","rest","setKey","invariant","isNodeList","assign","values","onContextChange","setIsFocused","fn","useEditor","doRectsIntersect","compareRect","middle","bottom","areRangesSameLine","range1","range2","rect1","rect2","findCurrentLineRange","parentRange","parentRangeBoundary","positions","right","floor","withReact","e","apply","parentBlockEntry","above","isBlock","parentBlockPath","parentElementRange","currentLineRange","op","levels","common","newPath","edges","attach","trim","r","cloneRange","setEndAfter","zw","isNewline","span","appendChild","fragment","getFragment","encoded","btoa","encodeURIComponent","setAttribute","setData","div","body","innerHTML","decoded","decodeURIComponent","atob","parsed","parse","insertFragment","lines","split","line","splitNodes","always","ReactDOM","unstable_batchedUpdates","DefaultEditable"],"mappings":"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"}
\No newline at end of file