slate-react 0.56.1 → 0.57.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +2 -2
- package/dist/components/editable.d.ts.map +1 -1
- package/dist/components/slate.d.ts +3 -2
- package/dist/components/slate.d.ts.map +1 -1
- package/dist/components/text.d.ts.map +1 -1
- package/dist/hooks/use-editor.d.ts +5 -5
- package/dist/hooks/use-editor.d.ts.map +1 -1
- package/dist/hooks/use-slate.d.ts +5 -5
- package/dist/hooks/use-slate.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +1712 -1535
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1709 -1533
- package/dist/index.js.map +1 -1
- package/dist/plugin/react-editor.d.ts +13 -0
- package/dist/plugin/react-editor.d.ts.map +1 -1
- package/dist/plugin/with-react.d.ts +2 -1
- package/dist/plugin/with-react.d.ts.map +1 -1
- package/dist/slate-react.js +10436 -9604
- package/dist/slate-react.min.js +1 -6
- package/dist/utils/dom.d.ts +11 -0
- package/dist/utils/dom.d.ts.map +1 -1
- package/dist/utils/environment.d.ts +1 -0
- package/dist/utils/environment.d.ts.map +1 -1
- package/package.json +6 -6
- package/dist/plugin/react-command.d.ts +0 -18
- package/dist/plugin/react-command.d.ts.map +0 -1
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/components/string.tsx","../src/utils/weak-maps.ts","../src/components/leaf.tsx","../src/hooks/use-isomorphic-layout-effect.ts","../src/components/text.tsx","../src/hooks/use-selected.ts","../src/components/element.tsx","../src/hooks/use-editor.tsx","../src/components/children.tsx","../src/utils/environment.ts","../src/utils/hotkeys.ts","../src/hooks/use-read-only.ts","../src/hooks/use-slate.tsx","../../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../../node_modules/@babel/runtime/helpers/nonIterableRest.js","../../../node_modules/@babel/runtime/helpers/slicedToArray.js","../src/utils/dom.ts","../src/components/editable.tsx","../../../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../../../node_modules/@babel/runtime/helpers/iterableToArray.js","../../../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../../../node_modules/@babel/runtime/helpers/toConsumableArray.js","../../../node_modules/@babel/runtime/helpers/classCallCheck.js","../src/utils/key.ts","../src/plugin/react-editor.ts","../src/hooks/use-focused.ts","../src/components/slate.tsx","../src/plugin/react-command.ts","../src/plugin/with-react.ts"],"sourcesContent":["import React from 'react'\nimport { Editor, Text, Path, Element, Node } from 'slate'\n\nimport { ReactEditor, useEditor } 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 = useEditor()\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 */\n\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\n/**\n * Symbols.\n */\n\nexport const PLACEHOLDER_SYMBOL = (Symbol('placeholder') as unknown) as string\n","import React from 'react'\nimport { Text, Element } from 'slate'\n\nimport String from './string'\nimport { PLACEHOLDER_SYMBOL } from '../utils/weak-maps'\nimport { RenderLeafProps } from './editable'\n\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 renderLeaf?: (props: RenderLeafProps) => JSX.Element\n text: Text\n}) => {\n const {\n leaf,\n isLast,\n text,\n parent,\n renderLeaf = (props: RenderLeafProps) => <DefaultLeaf {...props} />,\n } = props\n\n let children = (\n <String isLast={isLast} leaf={leaf} parent={parent} text={text} />\n )\n\n if (leaf[PLACEHOLDER_SYMBOL]) {\n children = (\n <React.Fragment>\n <span\n contentEditable={false}\n style={{\n pointerEvents: 'none',\n display: 'inline-block',\n verticalAlign: 'text-top',\n width: '0',\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: '0.333',\n }}\n >\n {leaf.placeholder}\n </span>\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.text === prev.text &&\n Text.matches(next.leaf, prev.leaf)\n )\n})\n\n/**\n * The default custom leaf renderer.\n */\n\nexport const DefaultLeaf = (props: RenderLeafProps) => {\n const { attributes, children } = props\n return <span {...attributes}>{children}</span>\n}\n\nexport default MemoizedLeaf\n","import { useLayoutEffect, useEffect } from 'react'\n\n/**\n * Prevent warning on SSR by falling back to useEffect when window is not defined\n */\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n","import React, { useRef } from 'react'\nimport { Range, Element, Text as SlateText } from 'slate'\n\nimport Leaf from './leaf'\nimport { ReactEditor, useEditor } from '..'\nimport { RenderLeafProps } 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'\n\n/**\n * Text.\n */\n\nconst Text = (props: {\n decorations: Range[]\n isLast: boolean\n parent: Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n text: SlateText\n}) => {\n const { decorations, isLast, parent, renderLeaf, text } = props\n const editor = useEditor()\n const ref = useRef<HTMLSpanElement>(null)\n const leaves = getLeaves(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 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\n/**\n * Get the leaves for a text node given decorations.\n */\n\nconst getLeaves = (node: SlateText, decorations: Range[]): SlateText[] => {\n let leaves: SlateText[] = [{ ...node }]\n\n for (const dec of decorations) {\n const { anchor, focus, ...rest } = dec\n const [start, end] = Range.edges(dec)\n const next = []\n let o = 0\n\n for (const leaf of leaves) {\n const { length } = leaf.text\n const offset = o\n o += length\n\n // If the range encompases the entire leaf, add the range.\n if (start.offset <= offset && end.offset >= offset + length) {\n Object.assign(leaf, rest)\n next.push(leaf)\n continue\n }\n\n // If the range starts after the leaf, or ends before it, continue.\n if (\n start.offset > offset + length ||\n end.offset < offset ||\n (end.offset === offset && offset !== 0)\n ) {\n next.push(leaf)\n continue\n }\n\n // Otherwise we need to split the leaf, at the start, end, or both,\n // and add the range to the middle intersecting section. Do the end\n // split first since we don't need to update the offset that way.\n let middle = leaf\n let before\n let after\n\n if (end.offset < offset + length) {\n const off = end.offset - offset\n after = { ...middle, text: middle.text.slice(off) }\n middle = { ...middle, text: middle.text.slice(0, off) }\n }\n\n if (start.offset > offset) {\n const off = start.offset - offset\n before = { ...middle, text: middle.text.slice(0, off) }\n middle = { ...middle, text: middle.text.slice(off) }\n }\n\n Object.assign(middle, rest)\n\n if (before) {\n next.push(before)\n }\n\n next.push(middle)\n\n if (after) {\n next.push(after)\n }\n }\n\n leaves = next\n }\n\n return leaves\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 )\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 Children from './children'\nimport { ReactEditor, useEditor, 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 { RenderElementProps, RenderLeafProps } from './editable'\n\n/**\n * Element.\n */\n\nconst Element = (props: {\n decorate: (entry: NodeEntry) => Range[]\n decorations: Range[]\n element: SlateElement\n renderElement?: (props: RenderElementProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n selection: Range | null\n}) => {\n const {\n decorate,\n decorations,\n element,\n renderElement = (p: RenderElementProps) => <DefaultElement {...p} />,\n renderLeaf,\n selection,\n } = props\n const ref = useRef<HTMLElement>(null)\n const editor = useEditor()\n const readOnly = useReadOnly()\n const isInline = editor.isInline(element)\n const key = ReactEditor.findKey(editor, element)\n\n let children: JSX.Element | null = (\n <Children\n decorate={decorate}\n decorations={decorations}\n node={element}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n selection={selection}\n />\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 decorations={[]} isLast={false} parent={element} text={text} />\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.decorate === next.decorate &&\n prev.element === next.element &&\n prev.renderElement === next.renderElement &&\n prev.renderLeaf === next.renderLeaf &&\n isRangeListEqual(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 = useEditor()\n const Tag = editor.isInline(element) ? 'span' : 'div'\n return (\n <Tag {...attributes} style={{ position: 'relative' }}>\n {children}\n </Tag>\n )\n}\n\n/**\n * Check if a list of ranges is 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\nconst isRangeListEqual = (list: Range[], another: Range[]): boolean => {\n if (list.length !== another.length) {\n return false\n }\n\n for (let i = 0; i < list.length; i++) {\n const range = list[i]\n const other = another[i]\n\n if (!Range.equals(range, other)) {\n return false\n }\n }\n\n return true\n}\n\nexport default MemoizedElement\n","import { Editor } from 'slate'\nimport { createContext, useContext } from 'react'\n\n/**\n * A React context for sharing the `Editor` class.\n */\n\nexport const EditorContext = createContext<Editor | null>(null)\n\n/**\n * Get the current `Editor` class that the component lives under.\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","import React from 'react'\nimport { Editor, Range, Element, NodeEntry, Ancestor, Descendant } from 'slate'\n\nimport ElementComponent from './element'\nimport TextComponent from './text'\nimport { ReactEditor } from '..'\nimport { useEditor } from '../hooks/use-editor'\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../utils/weak-maps'\nimport { RenderElementProps, RenderLeafProps } from './editable'\n\n/**\n * Children.\n */\n\nconst Children = (props: {\n decorate: (entry: NodeEntry) => Range[]\n decorations: Range[]\n node: Ancestor\n renderElement?: (props: RenderElementProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n selection: Range | null\n}) => {\n const {\n decorate,\n decorations,\n node,\n renderElement,\n renderLeaf,\n selection,\n } = props\n const editor = useEditor()\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 decorate={decorate}\n decorations={ds}\n element={n}\n key={key.id}\n renderElement={renderElement}\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 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 <React.Fragment>{children}</React.Fragment>\n}\n\nexport default Children\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_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","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 { Editor } from 'slate'\nimport { createContext, useContext } from 'react'\n\n/**\n * A React context for sharing the `Editor` class, in a way that re-renders the\n * context whenever changes occur.\n */\n\nexport const SlateContext = createContext<[Editor] | null>(null)\n\n/**\n * Get the current `Editor` class that the component lives under.\n */\n\nexport const useSlate = () => {\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","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","/**\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\nexport {\n DOMNode,\n DOMComment,\n DOMElement,\n DOMText,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n}\n\nexport type DOMPoint = [Node, number]\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 return value instanceof Node\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 * 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 const isLast = offset === node.childNodes.length\n const direction = isLast ? 'backward' : 'forward'\n const index = isLast ? offset - 1 : offset\n node = getEditableChild(node, index, direction)\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, direction)\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 * 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 { 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 i += direction === 'forward' ? 1 : -1\n }\n\n return child\n}\n","import React, { useEffect, useRef, useMemo, useCallback } from 'react'\nimport { Editor, Element, NodeEntry, Node, Range, Text } from 'slate'\nimport debounce from 'debounce'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport Children from './children'\nimport Hotkeys from '../utils/hotkeys'\nimport { IS_FIREFOX, IS_SAFARI } 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 {\n DOMElement,\n DOMNode,\n DOMRange,\n isDOMElement,\n isDOMNode,\n isDOMText,\n DOMStaticRange,\n} from '../utils/dom'\nimport {\n EDITOR_TO_ELEMENT,\n ELEMENT_TO_NODE,\n IS_READ_ONLY,\n NODE_TO_ELEMENT,\n IS_FOCUSED,\n PLACEHOLDER_SYMBOL,\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: Event) => 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 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 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 isUpdatingSelection: false,\n latestElement: null as DOMElement | null,\n }),\n []\n )\n\n // Update element-related weak maps with the DOM element ref.\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\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\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 window.document.addEventListener('selectionchange', onDOMSelectionChange)\n\n return () => {\n window.document.removeEventListener(\n 'selectionchange',\n onDOMSelectionChange\n )\n }\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) {\n // @ts-ignore The `beforeinput` event isn't recognized.\n ref.current.addEventListener('beforeinput', onDOMBeforeInput)\n }\n\n return () => {\n if (ref.current) {\n // @ts-ignore The `beforeinput` event isn't recognized.\n ref.current.removeEventListener('beforeinput', onDOMBeforeInput)\n }\n }\n }, [])\n\n // Whenever the editor updates, make sure the DOM selection state is in sync.\n useIsomorphicLayoutEffect(() => {\n const { selection } = editor\n const domSelection = window.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 const newDomRange = selection && ReactEditor.toDOMRange(editor, selection)\n\n // If the DOM selection is already correct, we're done.\n if (\n hasDomSelection &&\n newDomRange &&\n isRangeEqual(domSelection.getRangeAt(0), newDomRange)\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 domSelection.removeAllRanges()\n\n if (newDomRange) {\n domSelection.addRange(newDomRange!)\n const leafEl = newDomRange.startContainer.parentElement!\n scrollIntoView(leafEl, { scrollMode: 'if-needed' })\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 (\n event: Event & {\n data: string | null\n dataTransfer: DataTransfer | null\n getTargetRanges(): DOMStaticRange[]\n inputType: string\n isComposing: boolean\n }\n ) => {\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.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.getTargetRanges()\n\n if (targetRange) {\n const range = ReactEditor.toSlateRange(editor, targetRange)\n\n if (!selection || !Range.equals(selection, range)) {\n Editor.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 editor.exec({ type: 'delete_fragment' })\n return\n }\n\n switch (type) {\n case 'deleteByComposition':\n case 'deleteByCut':\n case 'deleteByDrag': {\n editor.exec({ type: 'delete_fragment' })\n break\n }\n\n case 'deleteContent':\n case 'deleteContentForward': {\n editor.exec({ type: 'delete_forward', unit: 'character' })\n break\n }\n\n case 'deleteContentBackward': {\n editor.exec({ type: 'delete_backward', unit: 'character' })\n break\n }\n\n case 'deleteEntireSoftLine': {\n editor.exec({ type: 'delete_backward', unit: 'line' })\n editor.exec({ type: 'delete_forward', unit: 'line' })\n break\n }\n\n case 'deleteHardLineBackward': {\n editor.exec({ type: 'delete_backward', unit: 'block' })\n break\n }\n\n case 'deleteSoftLineBackward': {\n editor.exec({ type: 'delete_backward', unit: 'line' })\n break\n }\n\n case 'deleteHardLineForward': {\n editor.exec({ type: 'delete_forward', unit: 'block' })\n break\n }\n\n case 'deleteSoftLineForward': {\n editor.exec({ type: 'delete_forward', unit: 'line' })\n break\n }\n\n case 'deleteWordBackward': {\n editor.exec({ type: 'delete_backward', unit: 'word' })\n break\n }\n\n case 'deleteWordForward': {\n editor.exec({ type: 'delete_forward', unit: 'word' })\n break\n }\n\n case 'insertLineBreak':\n case 'insertParagraph': {\n editor.exec({ type: 'insert_break' })\n break\n }\n\n case 'insertFromComposition':\n case 'insertFromDrop':\n case 'insertFromPaste':\n case 'insertFromYank':\n case 'insertReplacementText':\n case 'insertText': {\n if (data instanceof DataTransfer) {\n editor.exec({ type: 'insert_data', data })\n } else if (typeof data === 'string') {\n editor.exec({ type: 'insert_text', text: data })\n }\n\n break\n }\n }\n }\n },\n []\n )\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 debounce(() => {\n if (!readOnly && !state.isComposing && !state.isUpdatingSelection) {\n const { activeElement } = window.document\n const el = ReactEditor.toDOMNode(editor, editor)\n const domSelection = window.getSelection()\n const domRange =\n domSelection &&\n domSelection.rangeCount > 0 &&\n domSelection.getRangeAt(0)\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 (\n domRange &&\n hasEditableTarget(editor, domRange.startContainer) &&\n hasEditableTarget(editor, domRange.endContainer)\n ) {\n const range = ReactEditor.toSlateRange(editor, domRange)\n Editor.select(editor, range)\n } else {\n Editor.deselect(editor)\n }\n }\n }, 100),\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 <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: Firefox doesn't support the `beforeinput` event, so we'd\n // have to use hacks to make these replacement-based features work.\n spellCheck={IS_FIREFOX ? undefined : attributes.spellCheck}\n autoCorrect={IS_FIREFOX ? undefined : attributes.autoCorrect}\n autoCapitalize={IS_FIREFOX ? undefined : attributes.autoCapitalize}\n data-slate-editor\n data-slate-node=\"value\"\n contentEditable={readOnly ? undefined : true}\n suppressContentEditableWarning\n ref={ref}\n style={{\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.SyntheticEvent) => {\n // COMPAT: Firefox doesn'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 (IS_FIREFOX && !readOnly) {\n event.preventDefault()\n const text = (event as any).data as string\n editor.exec({ type: 'insert_text', text })\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 // 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 if (state.latestElement === window.document.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\n if (Editor.void(editor, { at: start })) {\n const range = Editor.range(editor, start)\n Editor.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 && event.data) {\n editor.exec({ type: 'insert_text', text: event.data })\n }\n }\n },\n [attributes.onCompositionEnd]\n )}\n onCompositionStart={useCallback(\n (event: React.CompositionEvent<HTMLDivElement>) => {\n if (\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCompositionStart)\n ) {\n state.isComposing = true\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 setFragmentData(event.clipboardData, editor)\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 setFragmentData(event.clipboardData, editor)\n const { selection } = editor\n\n if (selection && Range.isExpanded(selection)) {\n editor.exec({ type: 'delete_fragment' })\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 = Editor.void(editor, { at: path })\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 Editor.select(editor, range)\n }\n\n setFragmentData(event.dataTransfer, editor)\n }\n },\n [attributes.onDragStart]\n )}\n onDrop={useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n if (\n hasTarget(editor, event.target) &&\n !readOnly &&\n !isEventHandled(event, attributes.onDrop)\n ) {\n // COMPAT: Firefox doesn't fire `beforeinput` events at all, and\n // Chromium browsers don't properly fire them for files being\n // dropped into a `contenteditable`. (2019/11/26)\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1028668\n if (\n IS_FIREFOX ||\n (!IS_SAFARI && event.dataTransfer.files.length > 0)\n ) {\n event.preventDefault()\n const range = ReactEditor.findEventRange(editor, event)\n const data = event.dataTransfer\n Editor.select(editor, range)\n editor.exec({ type: 'insert_data', data })\n }\n }\n },\n [readOnly, attributes.onDrop]\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 state.latestElement = window.document.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 // 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 editor.exec({ type: 'redo' })\n return\n }\n\n if (Hotkeys.isUndo(nativeEvent)) {\n event.preventDefault()\n editor.exec({ type: 'undo' })\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 Editor.move(editor, { unit: 'line', reverse: true })\n return\n }\n\n if (Hotkeys.isMoveLineForward(nativeEvent)) {\n event.preventDefault()\n Editor.move(editor, { unit: 'line' })\n return\n }\n\n if (Hotkeys.isExtendLineBackward(nativeEvent)) {\n event.preventDefault()\n Editor.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 Editor.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 Editor.move(editor, { reverse: true })\n } else {\n Editor.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 Editor.move(editor)\n } else {\n Editor.collapse(editor, { edge: 'end' })\n }\n\n return\n }\n\n if (Hotkeys.isMoveWordBackward(nativeEvent)) {\n event.preventDefault()\n Editor.move(editor, { unit: 'word', reverse: true })\n return\n }\n\n if (Hotkeys.isMoveWordForward(nativeEvent)) {\n event.preventDefault()\n Editor.move(editor, { unit: 'word' })\n return\n }\n\n // COMPAT: Firefox doesn'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 (IS_FIREFOX) {\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.exec({ type: 'insert_break' })\n return\n }\n\n if (Hotkeys.isDeleteBackward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isExpanded(selection)) {\n editor.exec({ type: 'delete_fragment' })\n } else {\n editor.exec({ type: 'delete_backward', unit: 'character' })\n }\n\n return\n }\n\n if (Hotkeys.isDeleteForward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isExpanded(selection)) {\n editor.exec({ type: 'delete_fragment' })\n } else {\n editor.exec({ type: 'delete_forward', unit: 'character' })\n }\n\n return\n }\n\n if (Hotkeys.isDeleteLineBackward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isExpanded(selection)) {\n editor.exec({ type: 'delete_fragment' })\n } else {\n editor.exec({ type: 'delete_backward', 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.exec({ type: 'delete_fragment' })\n } else {\n editor.exec({ type: 'delete_forward', 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.exec({ type: 'delete_fragment' })\n } else {\n editor.exec({ type: 'delete_backward', 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.exec({ type: 'delete_fragment' })\n } else {\n editor.exec({ type: 'delete_forward', unit: 'word' })\n }\n\n return\n }\n }\n }\n },\n [readOnly, attributes.onKeyDown]\n )}\n onPaste={useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n // COMPAT: Firefox doesn't support the `beforeinput` event, so we\n // fall back to React's `onPaste` here instead.\n if (\n IS_FIREFOX &&\n !readOnly &&\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onPaste)\n ) {\n event.preventDefault()\n editor.exec({\n type: 'insert_data',\n data: event.clipboardData,\n })\n }\n },\n [readOnly, attributes.onPaste]\n )}\n >\n <Children\n decorate={decorate}\n decorations={decorations}\n node={editor}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n selection={editor.selection}\n />\n </Component>\n </ReadOnlyContext.Provider>\n )\n}\n\n/**\n * A default memoized decorate function.\n */\n\nconst defaultDecorate = () => []\n\n/**\n * Check if two DOM range objects are equal.\n */\n\nconst 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\nconst 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\nconst 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 an event is overrided by a handler.\n */\n\nconst isEventHandled = <\n EventType extends React.SyntheticEvent<unknown, unknown>\n>(\n event: EventType,\n handler?: (event: EventType) => void\n) => {\n if (!handler) {\n return false\n }\n\n handler(event)\n return event.isDefaultPrevented() || event.isPropagationStopped()\n}\n\n/**\n * Check if a DOM event is overrided by a handler.\n */\n\nconst isDOMEventHandled = (event: Event, handler?: (event: Event) => void) => {\n if (!handler) {\n return false\n }\n\n handler(event)\n return event.defaultPrevented\n}\n\n/**\n * Set the currently selected fragment to the clipboard.\n */\n\nconst setFragmentData = (dataTransfer: DataTransfer, editor: Editor): void => {\n const { selection } = editor\n\n if (!selection) {\n return\n }\n\n const [start, end] = Range.edges(selection)\n const startVoid = Editor.void(editor, { at: start.path })\n const endVoid = Editor.void(editor, { 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(editor, 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(editor, 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 = Node.fragment(editor, selection)\n const string = JSON.stringify(fragment)\n const encoded = window.btoa(encodeURIComponent(string))\n attach.setAttribute('data-slate-fragment', encoded)\n dataTransfer.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 dataTransfer.setData('text/html', div.innerHTML)\n dataTransfer.setData('text/plain', getPlainText(div))\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\nconst 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","function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nmodule.exports = _arrayWithoutHoles;","function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","/**\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, Element, Node, Path, Point, Range } 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} from '../utils/weak-maps'\nimport {\n DOMElement,\n DOMNode,\n DOMPoint,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n isDOMElement,\n normalizeDOMPoint,\n} from '../utils/dom'\n\nexport interface ReactEditor extends Editor {}\n\nexport const ReactEditor = {\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 * 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 IS_FOCUSED.set(editor, false)\n\n if (window.document.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 IS_FOCUSED.set(editor, true)\n\n if (window.document.activeElement !== el) {\n el.focus({ preventScroll: true })\n }\n },\n\n /**\n * Deselect the editor.\n */\n\n deselect(editor: ReactEditor): void {\n const { selection } = editor\n const domSelection = window.getSelection()\n\n if (domSelection && domSelection.rangeCount > 0) {\n domSelection.removeAllRanges()\n }\n\n if (selection) {\n Editor.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 el = ReactEditor.toDOMNode(editor, editor)\n let element\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 element = isDOMElement(target) ? target : target.parentElement\n } catch (err) {\n if (\n !err.message.includes('Permission denied to access property \"nodeType\"')\n ) {\n throw err\n }\n }\n\n if (!element) {\n return false\n }\n\n return (\n element.closest(`[data-slate-editor]`) === el &&\n (!editable || el.isContentEditable)\n )\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\n toDOMRange(editor: ReactEditor, range: Range): DOMRange {\n const { anchor, focus } = range\n const domAnchor = ReactEditor.toDOMPoint(editor, anchor)\n const domFocus = Range.isCollapsed(range)\n ? domAnchor\n : ReactEditor.toDOMPoint(editor, focus)\n\n const domRange = window.document.createRange()\n const start = Range.isBackward(range) ? domFocus : domAnchor\n const end = Range.isBackward(range) ? domAnchor : domFocus\n domRange.setStart(start[0], start[1])\n domRange.setEnd(end[0], end[1])\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 return range\n },\n\n /**\n * Find a Slate point from a DOM selection's `domNode` and `domOffset`.\n */\n\n toSlatePoint(editor: ReactEditor, domPoint: DOMPoint): Point {\n const [nearestNode, nearestOffset] = 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 range = window.document.createRange()\n range.setStart(textNode, 0)\n range.setEnd(nearestNode, nearestOffset)\n const contents = range.cloneContents()\n const removals = [\n ...contents.querySelectorAll('[data-slate-zero-width]'),\n ...contents.querySelectorAll('[contenteditable=false]'),\n ]\n\n removals.forEach(el => {\n el!.parentNode!.removeChild(el)\n })\n\n // COMPAT: Edge has a bug where Range.prototype.toString() will\n // convert \\n into \\r\\n. The bug causes a loop when slate-react\n // attempts to reposition its cursor to match the native position. Use\n // textContent.length instead.\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10291116/\n offset = contents.textContent!.length\n domNode = textNode\n } else if (voidNode) {\n // For void nodes, the element with the offset key will be a cousin, not an\n // ancestor, so find it by going down from the nearest void parent.\n\n leafNode = voidNode.querySelector('[data-slate-leaf]')!\n textNode = leafNode.closest('[data-slate-node=\"text\"]')!\n domNode = leafNode\n offset = domNode.textContent!.length\n }\n\n // COMPAT: If the parent node is a Slate zero-width space, editor is\n // because the text node should have no characters. However, during IME\n // composition the ASCII characters will be prepended to the zero-width\n // space, so subtract 1 from the offset to account for the zero-width\n // space character.\n if (\n domNode &&\n offset === domNode.textContent!.length &&\n parentNode.hasAttribute('data-slate-zero-width')\n ) {\n offset--\n }\n }\n\n if (!textNode) {\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 }\n },\n\n /**\n * Find a Slate range from a DOM range or selection.\n */\n\n toSlateRange(\n editor: ReactEditor,\n domRange: DOMRange | DOMStaticRange | DOMSelection\n ): Range {\n const el =\n domRange instanceof Selection\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 (domRange instanceof Selection) {\n anchorNode = domRange.anchorNode\n anchorOffset = domRange.anchorOffset\n focusNode = domRange.focusNode\n focusOffset = domRange.focusOffset\n isCollapsed = domRange.isCollapsed\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(editor, [anchorNode, anchorOffset])\n const focus = isCollapsed\n ? anchor\n : ReactEditor.toSlatePoint(editor, [focusNode, focusOffset])\n\n return { anchor, focus }\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 } from 'react'\nimport { Editor, Node, Range } from 'slate'\n\nimport { ReactEditor } from '../plugin/react-editor'\nimport { FocusedContext } from '../hooks/use-focused'\nimport { EditorContext } from '../hooks/use-editor'\nimport { SlateContext } from '../hooks/use-slate'\nimport { EDITOR_TO_ON_CHANGE } from '../utils/weak-maps'\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: Editor\n value: Node[]\n children: React.ReactNode\n onChange: (value: Node[]) => void\n [key: string]: any\n}) => {\n const { editor, children, onChange, value, ...rest } = props\n const [key, setKey] = useState(0)\n const context: [Editor] = useMemo(() => {\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 return (\n <SlateContext.Provider value={context}>\n <EditorContext.Provider value={editor}>\n <FocusedContext.Provider value={ReactEditor.isFocused(editor)}>\n {children}\n </FocusedContext.Provider>\n </EditorContext.Provider>\n </SlateContext.Provider>\n )\n}\n","import { Command } from 'slate'\n\n/**\n * The `InsertDataCommand` inserts content from a `DataTransfer` object.\n */\n\nexport interface InsertDataCommand {\n type: 'insert_data'\n data: DataTransfer\n}\n\n/**\n * The `ReactCommand` union for all commands that the React plugins defines.\n */\n\nexport type ReactCommand = InsertDataCommand\n\nexport const ReactCommand = {\n /**\n * Check if a value is a `ReactCommand` object.\n */\n\n isReactCommand(value: any): value is InsertDataCommand {\n if (Command.isCommand(value)) {\n switch (value.type) {\n case 'insert_data':\n return value.data instanceof DataTransfer\n }\n }\n\n return false\n },\n}\n","import ReactDOM from 'react-dom'\nimport { Editor, Node, Path, Operation, Command } from 'slate'\n\nimport { ReactEditor } from './react-editor'\nimport { ReactCommand } from './react-command'\nimport { Key } from '../utils/key'\nimport { EDITOR_TO_ON_CHANGE, NODE_TO_KEY } from '../utils/weak-maps'\n\n/**\n * `withReact` adds React and DOM specific behaviors to the editor.\n */\n\nexport const withReact = (editor: Editor): Editor => {\n const { apply, exec, onChange } = editor\n\n editor.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(editor, { at: op.path })) {\n const key = ReactEditor.findKey(editor, 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(editor, {\n at: Path.parent(op.path),\n })) {\n const key = ReactEditor.findKey(editor, node)\n matches.push([path, key])\n }\n\n break\n }\n\n case 'move_node': {\n // TODO\n break\n }\n }\n\n apply(op)\n\n for (const [path, key] of matches) {\n const [node] = Editor.node(editor, path)\n NODE_TO_KEY.set(node, key)\n }\n }\n\n editor.exec = (command: Command) => {\n if (\n ReactCommand.isReactCommand(command) &&\n command.type === 'insert_data'\n ) {\n const { data } = command\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 Editor.insertFragment(editor, parsed)\n return\n }\n\n const text = data.getData('text/plain')\n\n if (text) {\n const lines = text.split('\\n')\n let split = false\n\n for (const line of lines) {\n if (split) {\n Editor.splitNodes(editor)\n }\n\n Editor.insertText(editor, line)\n split = true\n }\n }\n } else {\n exec(command)\n }\n }\n\n editor.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(editor)\n\n if (onContextChange) {\n onContextChange()\n }\n\n onChange()\n })\n }\n\n return editor\n}\n"],"names":["Node","NODE_TO_INDEX","WeakMap","NODE_TO_PARENT","EDITOR_TO_ELEMENT","ELEMENT_TO_NODE","KEY_TO_ELEMENT","NODE_TO_ELEMENT","NODE_TO_KEY","IS_READ_ONLY","IS_FOCUSED","EDITOR_TO_ON_CHANGE","PLACEHOLDER_SYMBOL","Symbol","Text","useIsomorphicLayoutEffect","window","useLayoutEffect","useEffect","Leaf","SelectedContext","createContext","useSelected","useContext","Element","ElementComponent","TextComponent","IS_IOS","navigator","test","userAgent","MSStream","IS_APPLE","IS_FIREFOX","IS_SAFARI","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","key","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","useReadOnly","isDOMComment","value","isDOMNode","nodeType","isDOMElement","isDOMText","normalizeDOMPoint","domPoint","node","offset","childNodes","length","isLast","direction","index","getEditableChild","i","textContent","parent","child","triedForward","triedBackward","getAttribute","n","Key","id","ReactEditor","findKey","editor","get","set","findPath","path","Editor","isEditor","unshift","Error","JSON","stringify","isFocused","isReadOnly","blur","el","toDOMNode","document","activeElement","focus","preventScroll","deselect","selection","domSelection","getSelection","rangeCount","removeAllRanges","hasDOMNode","target","options","editable","element","parentElement","err","message","includes","closest","isContentEditable","domNode","toDOMPoint","point","at","selector","texts","Array","from","querySelectorAll","start","text","attr","trueLength","parseInt","end","Math","min","max","toDOMRange","range","anchor","domAnchor","domFocus","Range","isCollapsed","domRange","createRange","isBackward","setStart","setEnd","toSlateNode","domEl","hasAttribute","findEventRange","nativeEvent","x","clientX","y","clientY","isVoid","rect","getBoundingClientRect","isPrev","isInline","left","width","top","height","edge","before","after","caretRangeFromPoint","position","caretPositionFromPoint","offsetNode","toSlateRange","toSlatePoint","nearestNode","nearestOffset","parentNode","textNode","voidNode","leafNode","contents","cloneContents","removals","forEach","removeChild","querySelector","slateNode","Selection","anchorNode","startContainer","anchorOffset","focusNode","focusOffset","startOffset","endContainer","endOffset","collapsed","FocusedContext","useFocused","ReactCommand","isReactCommand","Command","isCommand","type","data","DataTransfer","withReact","apply","exec","onChange","op","matches","levels","push","Path","command","fragment","getData","decoded","decodeURIComponent","atob","parsed","parse","insertFragment","lines","split","line","splitNodes","insertText","ReactDOM","unstable_batchedUpdates","onContextChange"],"mappings":"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"}
|
|
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/utils/key.ts","../src/utils/weak-maps.ts","../src/utils/dom.ts","../src/plugin/react-editor.ts","../src/hooks/use-focused.ts","../src/hooks/use-editor.tsx","../src/hooks/use-slate.tsx","../src/components/slate.tsx","../src/hooks/use-read-only.ts","../src/hooks/use-selected.ts","../src/plugin/with-react.ts","../src/components/string.tsx","../src/components/leaf.tsx","../src/hooks/use-isomorphic-layout-effect.ts","../src/components/text.tsx","../src/components/element.tsx","../src/components/children.tsx","../src/utils/environment.ts","../src/utils/hotkeys.ts","../src/components/editable.tsx"],"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\";\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}","/**\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 { 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 */\n\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\n/**\n * Symbols.\n */\n\nexport const PLACEHOLDER_SYMBOL = (Symbol('placeholder') as unknown) as string\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\nexport {\n DOMNode,\n DOMComment,\n DOMElement,\n DOMText,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n}\n\nexport type DOMPoint = [Node, number]\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 return value instanceof Node\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 const isLast = offset === node.childNodes.length\n const direction = isLast ? 'backward' : 'forward'\n const index = isLast ? offset - 1 : offset\n node = getEditableChild(node, index, direction)\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, direction)\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 * 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 { 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 i += direction === 'forward' ? 1 : -1\n }\n\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 { Editor, Node, Path, Point, Range, Transforms, Descendant } 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} from '../utils/weak-maps'\nimport {\n DOMElement,\n DOMNode,\n DOMPoint,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n isDOMElement,\n normalizeDOMPoint,\n} from '../utils/dom'\n\n/**\n * A React and DOM-specific version of the `Editor` interface.\n */\n\nexport interface ReactEditor extends Editor {\n insertData: (data: DataTransfer) => void\n setFragmentData: (data: DataTransfer) => void\n}\n\nexport const ReactEditor = {\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 * 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 IS_FOCUSED.set(editor, false)\n\n if (window.document.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 IS_FOCUSED.set(editor, true)\n\n if (window.document.activeElement !== el) {\n el.focus({ preventScroll: true })\n }\n },\n\n /**\n * Deselect the editor.\n */\n\n deselect(editor: ReactEditor): void {\n const { selection } = editor\n const domSelection = window.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\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 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 return range\n },\n\n /**\n * Find a Slate point from a DOM selection's `domNode` and `domOffset`.\n */\n\n toSlatePoint(editor: ReactEditor, domPoint: DOMPoint): Point {\n const [nearestNode, nearestOffset] = 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 range = window.document.createRange()\n range.setStart(textNode, 0)\n range.setEnd(nearestNode, nearestOffset)\n const contents = range.cloneContents()\n const removals = [\n ...contents.querySelectorAll('[data-slate-zero-width]'),\n ...contents.querySelectorAll('[contenteditable=false]'),\n ]\n\n removals.forEach(el => {\n el!.parentNode!.removeChild(el)\n })\n\n // COMPAT: Edge has a bug where Range.prototype.toString() will\n // convert \\n into \\r\\n. The bug causes a loop when slate-react\n // attempts to reposition its cursor to match the native position. Use\n // textContent.length instead.\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10291116/\n offset = contents.textContent!.length\n domNode = textNode\n } else if (voidNode) {\n // For void nodes, the element with the offset key will be a cousin, not an\n // ancestor, so find it by going down from the nearest void parent.\n\n leafNode = voidNode.querySelector('[data-slate-leaf]')!\n textNode = leafNode.closest('[data-slate-node=\"text\"]')!\n domNode = leafNode\n offset = domNode.textContent!.length\n }\n\n // COMPAT: If the parent node is a Slate zero-width space, editor is\n // because the text node should have no characters. However, during IME\n // composition the ASCII characters will be prepended to the zero-width\n // space, so subtract 1 from the offset to account for the zero-width\n // space character.\n if (\n domNode &&\n offset === domNode.textContent!.length &&\n parentNode.hasAttribute('data-slate-zero-width')\n ) {\n offset--\n }\n }\n\n if (!textNode) {\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 }\n },\n\n /**\n * Find a Slate range from a DOM range or selection.\n */\n\n toSlateRange(\n editor: ReactEditor,\n domRange: DOMRange | DOMStaticRange | DOMSelection\n ): Range {\n const el =\n domRange instanceof Selection\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 (domRange instanceof Selection) {\n anchorNode = domRange.anchorNode\n anchorOffset = domRange.anchorOffset\n focusNode = domRange.focusNode\n focusOffset = domRange.focusOffset\n isCollapsed = domRange.isCollapsed\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(editor, [anchorNode, anchorOffset])\n const focus = isCollapsed\n ? anchor\n : ReactEditor.toSlatePoint(editor, [focusNode, focusOffset])\n\n return { anchor, focus }\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 { createContext, useContext } from 'react'\n\nimport { ReactEditor } from '../plugin/react-editor'\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 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","import { createContext, useContext } from 'react'\n\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 = () => {\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","import React, { useMemo, useState, useCallback, useEffect } from 'react'\nimport { Node } from 'slate'\n\nimport { ReactEditor } from '../plugin/react-editor'\nimport { FocusedContext } from '../hooks/use-focused'\nimport { EditorContext } from '../hooks/use-editor'\nimport { SlateContext } from '../hooks/use-slate'\nimport { EDITOR_TO_ON_CHANGE } from '../utils/weak-maps'\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: Node[]\n children: React.ReactNode\n onChange: (value: Node[]) => void\n [key: string]: any\n}) => {\n const { editor, children, onChange, value, ...rest } = props\n const [key, setKey] = useState(0)\n const context: [ReactEditor] = useMemo(() => {\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 return (\n <SlateContext.Provider value={context}>\n <EditorContext.Provider value={editor}>\n <FocusedContext.Provider value={ReactEditor.isFocused(editor)}>\n {children}\n </FocusedContext.Provider>\n </EditorContext.Provider>\n </SlateContext.Provider>\n )\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'\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 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'\n\n/**\n * `withReact` adds React and DOM specific behaviors to the editor.\n */\n\nexport const withReact = <T extends Editor>(editor: T) => {\n const e = editor as T & ReactEditor\n const { apply, onChange } = e\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 // TODO\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 Transforms.insertFragment(e, 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 Transforms.insertText(e, 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","import React from 'react'\nimport { Editor, Text, Path, Element, Node } from 'slate'\n\nimport { ReactEditor, useEditor } 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 = useEditor()\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 React from 'react'\nimport { Text, Element } from 'slate'\n\nimport String from './string'\nimport { PLACEHOLDER_SYMBOL } from '../utils/weak-maps'\nimport { RenderLeafProps } from './editable'\n\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 renderLeaf?: (props: RenderLeafProps) => JSX.Element\n text: Text\n}) => {\n const {\n leaf,\n isLast,\n text,\n parent,\n renderLeaf = (props: RenderLeafProps) => <DefaultLeaf {...props} />,\n } = props\n\n let children = (\n <String isLast={isLast} leaf={leaf} parent={parent} text={text} />\n )\n\n if (leaf[PLACEHOLDER_SYMBOL]) {\n children = (\n <React.Fragment>\n <span\n contentEditable={false}\n style={{\n pointerEvents: 'none',\n display: 'inline-block',\n verticalAlign: 'text-top',\n width: '0',\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: '0.333',\n }}\n >\n {leaf.placeholder}\n </span>\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.text === prev.text &&\n Text.matches(next.leaf, prev.leaf)\n )\n})\n\n/**\n * The default custom leaf renderer.\n */\n\nexport const DefaultLeaf = (props: RenderLeafProps) => {\n const { attributes, children } = props\n return <span {...attributes}>{children}</span>\n}\n\nexport default MemoizedLeaf\n","import { useLayoutEffect, useEffect } from 'react'\n\n/**\n * Prevent warning on SSR by falling back to useEffect when window is not defined\n */\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n","import React, { useRef } from 'react'\nimport { Range, Element, Text as SlateText } from 'slate'\n\nimport Leaf from './leaf'\nimport { ReactEditor, useEditor } from '..'\nimport { RenderLeafProps } 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'\n\n/**\n * Text.\n */\n\nconst Text = (props: {\n decorations: Range[]\n isLast: boolean\n parent: Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n text: SlateText\n}) => {\n const { decorations, isLast, parent, renderLeaf, text } = props\n const editor = useEditor()\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 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 )\n})\n\nexport default MemoizedText\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 Children from './children'\nimport { ReactEditor, useEditor, 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 { RenderElementProps, RenderLeafProps } from './editable'\n\n/**\n * Element.\n */\n\nconst Element = (props: {\n decorate: (entry: NodeEntry) => Range[]\n decorations: Range[]\n element: SlateElement\n renderElement?: (props: RenderElementProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n selection: Range | null\n}) => {\n const {\n decorate,\n decorations,\n element,\n renderElement = (p: RenderElementProps) => <DefaultElement {...p} />,\n renderLeaf,\n selection,\n } = props\n const ref = useRef<HTMLElement>(null)\n const editor = useEditor()\n const readOnly = useReadOnly()\n const isInline = editor.isInline(element)\n const key = ReactEditor.findKey(editor, element)\n\n let children: JSX.Element | null = (\n <Children\n decorate={decorate}\n decorations={decorations}\n node={element}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n selection={selection}\n />\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 decorations={[]} isLast={false} parent={element} text={text} />\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.decorate === next.decorate &&\n prev.element === next.element &&\n prev.renderElement === next.renderElement &&\n prev.renderLeaf === next.renderLeaf &&\n isRangeListEqual(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 = useEditor()\n const Tag = editor.isInline(element) ? 'span' : 'div'\n return (\n <Tag {...attributes} style={{ position: 'relative' }}>\n {children}\n </Tag>\n )\n}\n\n/**\n * Check if a list of ranges is 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\nconst isRangeListEqual = (list: Range[], another: Range[]): boolean => {\n if (list.length !== another.length) {\n return false\n }\n\n for (let i = 0; i < list.length; i++) {\n const range = list[i]\n const other = another[i]\n\n if (!Range.equals(range, other)) {\n return false\n }\n }\n\n return true\n}\n\nexport default MemoizedElement\n","import React from 'react'\nimport { Editor, Range, Element, NodeEntry, Ancestor, Descendant } from 'slate'\n\nimport ElementComponent from './element'\nimport TextComponent from './text'\nimport { ReactEditor } from '..'\nimport { useEditor } from '../hooks/use-editor'\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../utils/weak-maps'\nimport { RenderElementProps, RenderLeafProps } from './editable'\n\n/**\n * Children.\n */\n\nconst Children = (props: {\n decorate: (entry: NodeEntry) => Range[]\n decorations: Range[]\n node: Ancestor\n renderElement?: (props: RenderElementProps) => JSX.Element\n renderLeaf?: (props: RenderLeafProps) => JSX.Element\n selection: Range | null\n}) => {\n const {\n decorate,\n decorations,\n node,\n renderElement,\n renderLeaf,\n selection,\n } = props\n const editor = useEditor()\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 decorate={decorate}\n decorations={ds}\n element={n}\n key={key.id}\n renderElement={renderElement}\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 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 <React.Fragment>{children}</React.Fragment>\n}\n\nexport default Children\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_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","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 React, { useEffect, useRef, useMemo, useCallback } from 'react'\nimport {\n Editor,\n Element,\n NodeEntry,\n Node,\n Range,\n Text,\n Transforms,\n} from 'slate'\nimport throttle from 'lodash/throttle'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport Children from './children'\nimport Hotkeys from '../utils/hotkeys'\nimport { IS_FIREFOX, IS_SAFARI, IS_EDGE_LEGACY } 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 {\n DOMElement,\n DOMNode,\n DOMRange,\n isDOMElement,\n isDOMNode,\n isDOMText,\n DOMStaticRange,\n isPlainTextOnlyPaste,\n} from '../utils/dom'\nimport {\n EDITOR_TO_ELEMENT,\n ELEMENT_TO_NODE,\n IS_READ_ONLY,\n NODE_TO_ELEMENT,\n IS_FOCUSED,\n PLACEHOLDER_SYMBOL,\n} from '../utils/weak-maps'\n\n// COMPAT: Firefox/Edge Legacy don't support the `beforeinput` event\nconst HAS_BEFORE_INPUT_SUPPORT = !(IS_FIREFOX || IS_EDGE_LEGACY)\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: Event) => 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 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 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 isUpdatingSelection: false,\n latestElement: null as DOMElement | null,\n }),\n []\n )\n\n // Update element-related weak maps with the DOM element ref.\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\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\n // Whenever the editor updates, make sure the DOM selection state is in sync.\n useIsomorphicLayoutEffect(() => {\n const { selection } = editor\n const domSelection = window.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 // If the DOM selection is already correct, we're done.\n if (\n hasDomSelection &&\n selection &&\n Range.equals(ReactEditor.toSlateRange(editor, domSelection), selection)\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 domSelection.removeAllRanges()\n\n const newDomRange = selection && ReactEditor.toDOMRange(editor, selection)\n\n if (newDomRange) {\n domSelection.addRange(newDomRange!)\n const leafEl = newDomRange.startContainer.parentElement!\n scrollIntoView(leafEl, { scrollMode: 'if-needed' })\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 (\n event: Event & {\n data: string | null\n dataTransfer: DataTransfer | null\n getTargetRanges(): DOMStaticRange[]\n inputType: string\n isComposing: boolean\n }\n ) => {\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.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.getTargetRanges()\n\n if (targetRange) {\n const range = ReactEditor.toSlateRange(editor, targetRange)\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 Editor.deleteFragment(editor)\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 (data instanceof DataTransfer) {\n ReactEditor.insertData(editor, data)\n } else if (typeof data === 'string') {\n Editor.insertText(editor, data)\n }\n\n break\n }\n }\n }\n },\n [readOnly]\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) {\n // @ts-ignore The `beforeinput` event isn't recognized.\n ref.current.addEventListener('beforeinput', onDOMBeforeInput)\n }\n\n return () => {\n if (ref.current) {\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 (!readOnly && !state.isComposing && !state.isUpdatingSelection) {\n const { activeElement } = window.document\n const el = ReactEditor.toDOMNode(editor, editor)\n const domSelection = window.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 (\n domSelection &&\n hasEditableTarget(editor, domSelection.anchorNode) &&\n hasEditableTarget(editor, domSelection.focusNode)\n ) {\n const range = ReactEditor.toSlateRange(editor, domSelection)\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 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 <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={\n !HAS_BEFORE_INPUT_SUPPORT ? undefined : attributes.spellCheck\n }\n autoCorrect={\n !HAS_BEFORE_INPUT_SUPPORT ? undefined : attributes.autoCorrect\n }\n autoCapitalize={\n !HAS_BEFORE_INPUT_SUPPORT ? undefined : 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 // 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 const text = (event as any).data as string\n Editor.insertText(editor, text)\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 // 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 if (state.latestElement === window.document.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\n if (Editor.void(editor, { at: start })) {\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 && event.data) {\n Editor.insertText(editor, event.data)\n }\n }\n },\n [attributes.onCompositionEnd]\n )}\n onCompositionStart={useCallback(\n (event: React.CompositionEvent<HTMLDivElement>) => {\n if (\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onCompositionStart)\n ) {\n state.isComposing = true\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 && Range.isExpanded(selection)) {\n Editor.deleteFragment(editor)\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 = Editor.void(editor, { at: path })\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 ReactEditor.setFragmentData(editor, event.dataTransfer)\n }\n },\n [attributes.onDragStart]\n )}\n onDrop={useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n if (\n hasTarget(editor, event.target) &&\n !readOnly &&\n !isEventHandled(event, attributes.onDrop)\n ) {\n // COMPAT: Certain browsers don't fire `beforeinput` events at all, and\n // Chromium browsers don't properly fire them for files being\n // dropped into a `contenteditable`. (2019/11/26)\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1028668\n if (\n !HAS_BEFORE_INPUT_SUPPORT ||\n (!IS_SAFARI && event.dataTransfer.files.length > 0)\n ) {\n event.preventDefault()\n const range = ReactEditor.findEventRange(editor, event)\n const data = event.dataTransfer\n Transforms.select(editor, range)\n ReactEditor.insertData(editor, data)\n }\n }\n },\n [readOnly, attributes.onDrop]\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 state.latestElement = window.document.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 // COMPAT: Since we prevent the default behavior on\n // `beforeinput` events, the browser doesn't think there's ever\n // any history stack to undo or redo, so we have to manage these\n // hotkeys ourselves. (2019/11/06)\n if (Hotkeys.isRedo(nativeEvent)) {\n event.preventDefault()\n\n if (editor.redo) {\n editor.redo()\n }\n\n return\n }\n\n if (Hotkeys.isUndo(nativeEvent)) {\n event.preventDefault()\n\n if (editor.undo) {\n editor.undo()\n }\n\n return\n }\n\n // COMPAT: Certain browsers don't handle the selection updates\n // properly. In Chrome, the selection isn't properly extended.\n // And in Firefox, the selection isn't properly collapsed.\n // (2017/10/17)\n if (Hotkeys.isMoveLineBackward(nativeEvent)) {\n event.preventDefault()\n Transforms.move(editor, { unit: 'line', reverse: true })\n return\n }\n\n if (Hotkeys.isMoveLineForward(nativeEvent)) {\n event.preventDefault()\n Transforms.move(editor, { unit: 'line' })\n return\n }\n\n if (Hotkeys.isExtendLineBackward(nativeEvent)) {\n event.preventDefault()\n Transforms.move(editor, {\n unit: 'line',\n edge: 'focus',\n reverse: true,\n })\n return\n }\n\n if (Hotkeys.isExtendLineForward(nativeEvent)) {\n event.preventDefault()\n Transforms.move(editor, { unit: 'line', edge: 'focus' })\n return\n }\n\n // COMPAT: If a void node is selected, or a zero-width text node\n // adjacent to an inline is selected, we need to handle these\n // hotkeys manually because browsers won't be able to skip over\n // the void node with the zero-width space not being an empty\n // string.\n if (Hotkeys.isMoveBackward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isCollapsed(selection)) {\n Transforms.move(editor, { reverse: true })\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)\n } else {\n Transforms.collapse(editor, { edge: 'end' })\n }\n\n return\n }\n\n if (Hotkeys.isMoveWordBackward(nativeEvent)) {\n event.preventDefault()\n Transforms.move(editor, { unit: 'word', reverse: true })\n return\n }\n\n if (Hotkeys.isMoveWordForward(nativeEvent)) {\n event.preventDefault()\n Transforms.move(editor, { unit: 'word' })\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)\n } else {\n Editor.deleteBackward(editor)\n }\n\n return\n }\n\n if (Hotkeys.isDeleteForward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isExpanded(selection)) {\n Editor.deleteFragment(editor)\n } else {\n Editor.deleteForward(editor)\n }\n\n return\n }\n\n if (Hotkeys.isDeleteLineBackward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isExpanded(selection)) {\n Editor.deleteFragment(editor)\n } else {\n Editor.deleteBackward(editor, { unit: 'line' })\n }\n\n return\n }\n\n if (Hotkeys.isDeleteLineForward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isExpanded(selection)) {\n Editor.deleteFragment(editor)\n } else {\n Editor.deleteForward(editor, { unit: 'line' })\n }\n\n return\n }\n\n if (Hotkeys.isDeleteWordBackward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isExpanded(selection)) {\n Editor.deleteFragment(editor)\n } else {\n Editor.deleteBackward(editor, { unit: 'word' })\n }\n\n return\n }\n\n if (Hotkeys.isDeleteWordForward(nativeEvent)) {\n event.preventDefault()\n\n if (selection && Range.isExpanded(selection)) {\n Editor.deleteFragment(editor)\n } else {\n Editor.deleteForward(editor, { unit: 'word' })\n }\n\n return\n }\n }\n }\n },\n [readOnly, attributes.onKeyDown]\n )}\n onPaste={useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n // COMPAT: Certain browsers don't support the `beforeinput` event, so we\n // fall back to React's `onPaste` here instead.\n // COMPAT: Firefox, Chrome and Safari are not emitting `beforeinput` events\n // when \"paste without formatting\" option is used.\n // This unfortunately needs to be handled with paste events instead.\n if (\n (!HAS_BEFORE_INPUT_SUPPORT ||\n isPlainTextOnlyPaste(event.nativeEvent)) &&\n !readOnly &&\n hasEditableTarget(editor, event.target) &&\n !isEventHandled(event, attributes.onPaste)\n ) {\n event.preventDefault()\n ReactEditor.insertData(editor, event.clipboardData)\n }\n },\n [readOnly, attributes.onPaste]\n )}\n >\n <Children\n decorate={decorate}\n decorations={decorations}\n node={editor}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n selection={editor.selection}\n />\n </Component>\n </ReadOnlyContext.Provider>\n )\n}\n\n/**\n * A default memoized decorate function.\n */\n\nconst defaultDecorate = () => []\n\n/**\n * Check if two DOM range objects are equal.\n */\n\nconst 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\nconst 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\nconst 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 an event is overrided by a handler.\n */\n\nconst isEventHandled = <\n EventType extends React.SyntheticEvent<unknown, unknown>\n>(\n event: EventType,\n handler?: (event: EventType) => void\n) => {\n if (!handler) {\n return false\n }\n\n handler(event)\n return event.isDefaultPrevented() || event.isPropagationStopped()\n}\n\n/**\n * Check if a DOM event is overrided by a handler.\n */\n\nconst isDOMEventHandled = (event: Event, handler?: (event: Event) => void) => {\n if (!handler) {\n return false\n }\n\n handler(event)\n return event.defaultPrevented\n}\n"],"names":["objectWithoutPropertiesLoose","n","Key","constructor","id","NODE_TO_INDEX","WeakMap","NODE_TO_PARENT","EDITOR_TO_ELEMENT","ELEMENT_TO_NODE","KEY_TO_ELEMENT","NODE_TO_ELEMENT","NODE_TO_KEY","IS_READ_ONLY","IS_FOCUSED","EDITOR_TO_ON_CHANGE","PLACEHOLDER_SYMBOL","Symbol","isDOMComment","value","isDOMNode","nodeType","isDOMElement","Node","isDOMText","isPlainTextOnlyPaste","event","clipboardData","getData","types","length","normalizeDOMPoint","domPoint","node","offset","childNodes","isLast","direction","index","getEditableChild","i","textContent","parent","child","triedForward","triedBackward","getAttribute","getPlainText","domNode","text","nodeValue","childNode","Array","from","display","getComputedStyle","getPropertyValue","tagName","ReactEditor","findKey","editor","key","get","set","findPath","path","Editor","isEditor","unshift","Error","JSON","stringify","isFocused","isReadOnly","blur","el","toDOMNode","window","document","activeElement","focus","preventScroll","deselect","selection","domSelection","getSelection","rangeCount","removeAllRanges","Transforms","hasDOMNode","target","options","editable","editorEl","targetEl","parentElement","err","message","includes","closest","isContentEditable","insertData","data","setFragmentData","toDOMPoint","point","void","at","selector","texts","querySelectorAll","start","attr","trueLength","parseInt","end","Math","min","max","toDOMRange","range","anchor","isBackward","Range","domAnchor","domFocus","isCollapsed","domRange","createRange","startNode","startOffset","endNode","endOffset","startEl","isStartAtZeroWidth","endEl","isEndAtZeroWidth","setStart","setEnd","toSlateNode","domEl","hasAttribute","findEventRange","nativeEvent","clientX","x","clientY","y","isVoid","rect","getBoundingClientRect","isPrev","isInline","left","width","top","height","edge","before","after","caretRangeFromPoint","position","caretPositionFromPoint","offsetNode","toSlateRange","toSlatePoint","nearestNode","nearestOffset","parentNode","textNode","voidNode","leafNode","contents","cloneContents","removals","forEach","removeChild","querySelector","slateNode","Selection","anchorNode","startContainer","anchorOffset","focusNode","focusOffset","endContainer","collapsed","FocusedContext","createContext","useFocused","useContext","EditorContext","useEditor","SlateContext","useSlate","context","Slate","props","children","onChange","rest","setKey","useState","useMemo","Object","assign","values","onContextChange","useCallback","useEffect","React","Provider","ReadOnlyContext","useReadOnly","SelectedContext","useSelected","withReact","e","apply","op","matches","type","levels","push","Path","edges","startVoid","endVoid","attach","trim","r","cloneRange","setEndAfter","zw","isNewline","span","createElement","style","whiteSpace","appendChild","fragment","getFragment","string","encoded","btoa","encodeURIComponent","setAttribute","setData","div","body","innerHTML","decoded","decodeURIComponent","atob","parsed","parse","insertFragment","lines","split","line","splitNodes","always","insertText","ReactDOM","unstable_batchedUpdates","String","leaf","parentPath","ZeroWidthString","isLineBreak","slice","TextString","isTrailing","Leaf","renderLeaf","DefaultLeaf","Fragment","contentEditable","pointerEvents","verticalAlign","maxWidth","opacity","placeholder","attributes","MemoizedLeaf","memo","prev","next","Text","useIsomorphicLayoutEffect","useLayoutEffect","decorations","ref","useRef","leaves","SlateText","current","delete","MemoizedText","Element","decorate","element","renderElement","p","DefaultElement","readOnly","Children","hasInlines","dir","getDirection","Tag","color","outline","MemoizedElement","isRangeListEqual","equals","list","another","other","isLeafBlock","isElement","concat","sel","intersection","ds","dec","d","ElementComponent","TextComponent","IS_IOS","navigator","test","userAgent","MSStream","IS_APPLE","IS_FIREFOX","IS_SAFARI","IS_EDGE_LEGACY","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","isBold","isCompose","isMoveBackward","isMoveForward","isDeleteBackward","isDeleteForward","isDeleteLineBackward","isDeleteLineForward","isDeleteWordBackward","isDeleteWordForward","isExtendBackward","isExtendForward","isExtendLineBackward","isExtendLineForward","isItalic","isMoveLineBackward","isMoveLineForward","isMoveWordBackward","isMoveWordForward","isRedo","isSplitBlock","isTransposeCharacter","isUndo","HAS_BEFORE_INPUT_SUPPORT","Editable","autoFocus","defaultDecorate","onDOMBeforeInput","propsOnDOMBeforeInput","as","Component","state","isComposing","isUpdatingSelection","latestElement","hasDomSelection","newDomRange","addRange","leafEl","scrollIntoView","scrollMode","setTimeout","hasEditableTarget","isDOMEventHandled","inputType","dataTransfer","undefined","preventDefault","startsWith","targetRange","getTargetRanges","select","isExpanded","deleteFragment","unit","insertBreak","DataTransfer","addEventListener","removeEventListener","onDOMSelectionChange","throttle","role","spellCheck","autoCorrect","autoCapitalize","suppressContentEditableWarning","wordWrap","onBeforeInput","isEventHandled","onBlur","relatedTarget","onClick","hasTarget","onCompositionEnd","onCompositionStart","onCopy","onCut","onDragOver","onDragStart","voidMatch","onDrop","files","onFocus","onKeyDown","Hotkeys","move","reverse","collapse","onPaste","handler","isDefaultPrevented","isPropagationStopped","defaultPrevented"],"mappings":"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"}
|