@portabletext/editor 2.17.1 → 2.18.0

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.
Files changed (46) hide show
  1. package/lib/_chunks-dts/{behavior.types.action.d.cts → index.d.ts} +9 -9
  2. package/lib/_chunks-es/util.get-text-block-text.js +1 -2
  3. package/lib/_chunks-es/util.get-text-block-text.js.map +1 -1
  4. package/lib/behaviors/index.d.ts +1 -1
  5. package/lib/index.d.ts +1 -1
  6. package/lib/plugins/index.d.ts +2 -2
  7. package/lib/selectors/index.d.ts +2 -2
  8. package/lib/utils/index.d.ts +3 -3
  9. package/package.json +18 -30
  10. package/src/test/vitest/step-definitions.tsx +2 -0
  11. package/src/test/vitest/test-editor.tsx +18 -4
  12. package/src/utils/key-generator.ts +1 -3
  13. package/lib/_chunks-cjs/selector.get-selection-text.cjs +0 -89
  14. package/lib/_chunks-cjs/selector.get-selection-text.cjs.map +0 -1
  15. package/lib/_chunks-cjs/selector.get-text-before.cjs +0 -34
  16. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +0 -1
  17. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +0 -875
  18. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +0 -1
  19. package/lib/_chunks-cjs/use-editor.cjs +0 -28
  20. package/lib/_chunks-cjs/use-editor.cjs.map +0 -1
  21. package/lib/_chunks-cjs/util.child-selection-point-to-block-offset.cjs +0 -79
  22. package/lib/_chunks-cjs/util.child-selection-point-to-block-offset.cjs.map +0 -1
  23. package/lib/_chunks-cjs/util.get-text-block-text.cjs +0 -477
  24. package/lib/_chunks-cjs/util.get-text-block-text.cjs.map +0 -1
  25. package/lib/_chunks-cjs/util.is-empty-text-block.cjs +0 -38
  26. package/lib/_chunks-cjs/util.is-empty-text-block.cjs.map +0 -1
  27. package/lib/_chunks-cjs/util.merge-text-blocks.cjs +0 -23
  28. package/lib/_chunks-cjs/util.merge-text-blocks.cjs.map +0 -1
  29. package/lib/_chunks-cjs/util.slice-text-block.cjs +0 -63
  30. package/lib/_chunks-cjs/util.slice-text-block.cjs.map +0 -1
  31. package/lib/_chunks-dts/behavior.types.action.d.ts +0 -3650
  32. package/lib/behaviors/index.cjs +0 -35
  33. package/lib/behaviors/index.cjs.map +0 -1
  34. package/lib/behaviors/index.d.cts +0 -2
  35. package/lib/index.cjs +0 -12952
  36. package/lib/index.cjs.map +0 -1
  37. package/lib/index.d.cts +0 -2
  38. package/lib/plugins/index.cjs +0 -826
  39. package/lib/plugins/index.cjs.map +0 -1
  40. package/lib/plugins/index.d.cts +0 -196
  41. package/lib/selectors/index.cjs +0 -243
  42. package/lib/selectors/index.cjs.map +0 -1
  43. package/lib/selectors/index.d.cts +0 -357
  44. package/lib/utils/index.cjs +0 -97
  45. package/lib/utils/index.cjs.map +0 -1
  46. package/lib/utils/index.d.cts +0 -186
package/lib/index.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/editor-event-listener.tsx","../src/internal-utils/debug.ts","../src/internal-utils/values.ts","../src/internal-utils/slate-utils.ts","../src/internal-utils/event-position.ts","../src/internal-utils/selection.ts","../src/internal-utils/to-slate-range.ts","../src/editor/editor-actor-context.ts","../src/editor/components/drop-indicator.tsx","../src/editor/components/render-default-object.tsx","../src/priority/priority.types.ts","../src/priority/priority.core.ts","../src/selectors/drag-selection.ts","../src/behaviors/behavior.core.block-element.ts","../src/editor/components/use-core-block-element-behaviors.ts","../src/editor/components/render-block-object.tsx","../src/editor/components/render-inline-object.tsx","../src/editor/components/render-text-block.tsx","../src/editor/components/render-element.tsx","../src/editor/editor-selector.ts","../src/editor/components/render-span.tsx","../src/editor/components/render-leaf.tsx","../src/editor/components/render-text.tsx","../src/editor/hooks/usePortableTextEditor.ts","../src/internal-utils/is-hotkey.ts","../src/editor/plugins/createWithHotKeys.ts","../src/internal-utils/move-range-by-operation.ts","../src/editor/range-decorations-machine.ts","../src/editor/relay-actor-context.ts","../src/editor/validate-selection-machine.ts","../src/editor/weakMaps.ts","../src/editor/Editable.tsx","../src/internal-utils/stop-actor.ts","../src/converters/converter.json.ts","../src/converters/converter.portable-text.ts","../src/converters/converter.text-html.ts","../src/converters/converter.text-plain.ts","../src/converters/converters.core.ts","../src/internal-utils/schema.ts","../src/internal-utils/build-index-maps.ts","../src/internal-utils/create-placeholder-block.ts","../src/internal-utils/sibling-utils.ts","../src/editor/with-normalizing-node.ts","../src/editor/withChanges.ts","../src/editor/withUndoRedo.ts","../src/editor/plugins/createWithPortableTextMarkModel.ts","../../../node_modules/.pnpm/@sanity+diff-match-patch@3.2.0/node_modules/@sanity/diff-match-patch/dist/index.js","../src/editor/with-undo-step.ts","../src/editor/plugins/createWithUndoRedo.ts","../src/operations/behavior.operation.annotation.add.ts","../src/operations/behavior.operation.annotation.remove.ts","../src/operations/behavior.operation.block.set.ts","../src/operations/behavior.operation.block.unset.ts","../src/operations/behavior.operation.child.set.ts","../src/operations/behavior.operation.child.unset.ts","../src/operations/behavior.operation.decorator.add.ts","../src/operations/behavior.operation.delete.ts","../src/operations/behavior.operation.insert.block.ts","../src/operations/behavior.operation.insert.child.ts","../src/operations/behavior.operation.insert.text.ts","../src/operations/behavior.operation.move.backward.ts","../src/operations/behavior.operation.move.block.ts","../src/operations/behavior.operation.move.forward.ts","../src/operations/behavior.operation.select.ts","../src/operations/behavior.operations.ts","../src/editor/with-performing-behavior-operation.ts","../src/editor/plugins/create-with-event-listeners.ts","../src/editor/plugins/createWithMaxBlocks.ts","../src/editor/plugins/createWithObjectKeys.ts","../src/internal-utils/applyPatch.ts","../src/internal-utils/operation-to-patches.ts","../src/editor/withoutPatching.ts","../src/editor/plugins/createWithPatches.ts","../src/editor/plugins/createWithPlaceholderBlock.ts","../src/editor/plugins/createWithSchemaTypes.ts","../src/editor/plugins/createWithUtils.ts","../src/editor/plugins/slate-plugin.update-selection.ts","../src/internal-utils/portable-text-node.ts","../src/internal-utils/apply-operation-to-portable-text.ts","../src/editor/plugins/slate-plugin.update-value.ts","../src/editor/plugins/with-plugins.ts","../src/editor/create-slate-editor.tsx","../src/editor/editor-dom.ts","../src/behaviors/behavior.core.annotations.ts","../src/keyboard-shortcuts/default-keyboard-shortcuts.ts","../src/behaviors/behavior.core.block-objects.ts","../src/behaviors/behavior.core.decorators.ts","../src/internal-utils/compound-client-rect.ts","../src/behaviors/behavior.core.dnd.ts","../src/behaviors/behavior.core.insert.ts","../src/behaviors/behavior.core.insert-break.ts","../src/utils/util.at-the-beginning-of-block.ts","../src/behaviors/behavior.core.lists.ts","../src/behaviors/behavior.core.ts","../src/editor/without-normalizing-conditional.ts","../src/behaviors/behavior.abstract.annotation.ts","../src/behaviors/behavior.abstract.decorator.ts","../src/behaviors/behavior.abstract.delete.ts","../src/behaviors/behavior.abstract.deserialize.ts","../src/behaviors/behavior.abstract.insert.ts","../src/behaviors/behavior.abstract.keyboard.ts","../src/behaviors/behavior.abstract.list-item.ts","../src/behaviors/behavior.abstract.move.ts","../src/behaviors/behavior.abstract.select.ts","../src/behaviors/behavior.abstract.serialize.ts","../src/behaviors/behavior.abstract.split.ts","../src/behaviors/behavior.abstract.style.ts","../src/behaviors/behavior.abstract.ts","../src/behaviors/behavior.types.event.ts","../src/behaviors/behavior.perform-event.ts","../src/priority/priority.sort.ts","../src/editor/editor-snapshot.ts","../src/editor/editor-machine.ts","../src/editor/mutation-machine.ts","../src/editor/plugins/createWithEditableAPI.ts","../src/editor/relay-machine.ts","../src/internal-utils/validateValue.ts","../src/editor/sync-machine.ts","../src/editor/create-editor.ts","../src/editor/event-to-change.tsx","../src/editor/PortableTextEditor.tsx","../src/editor/editor-provider.tsx","../src/editor/hooks/usePortableTextEditorSelection.tsx"],"sourcesContent":["import {useEffect} from 'react'\nimport type {EditorEmittedEvent} from './editor/relay-machine'\nimport {useEditor} from './editor/use-editor'\n\n/**\n * @public\n * @deprecated\n * This component has been renamed. Use `EventListenerPlugin` instead.\n *\n * ```\n * import {EventListenerPlugin} from '@portabletext/editor/plugins'\n * ```\n */\nexport function EditorEventListener(props: {\n on: (event: EditorEmittedEvent) => void\n}) {\n const editor = useEditor()\n\n useEffect(() => {\n const subscription = editor.on('*', props.on)\n\n return () => {\n subscription.unsubscribe()\n }\n }, [editor, props.on])\n\n return null\n}\n","import debug from 'debug'\n\nconst rootName = 'sanity-pte:'\n\nexport default debug(rootName)\nexport function debugWithName(name: string): debug.Debugger {\n const namespace = `${rootName}${name}`\n if (debug && debug.enabled(namespace)) {\n return debug(namespace)\n }\n return debug(rootName)\n}\n","import type {\n PortableTextBlock,\n PortableTextChild,\n PortableTextObject,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport {Element, Text, type Descendant} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\n\nexport const EMPTY_MARKDEFS: PortableTextObject[] = []\n\nexport const VOID_CHILD_KEY = 'void-child'\n\nfunction keepObjectEquality(\n object: PortableTextBlock | PortableTextChild,\n keyMap: Record<string, PortableTextBlock | PortableTextChild>,\n) {\n const value = keyMap[object._key]\n if (value && isEqual(object, value)) {\n return value\n }\n keyMap[object._key] = object\n return object\n}\n\nexport function toSlateValue(\n value: PortableTextBlock[] | undefined,\n {schemaTypes}: {schemaTypes: EditorSchema},\n keyMap: Record<string, any> = {},\n): Descendant[] {\n if (value && Array.isArray(value)) {\n return value.map((block) => toSlateBlock(block, {schemaTypes}, keyMap))\n }\n return []\n}\n\nexport function toSlateBlock(\n block: PortableTextBlock,\n {schemaTypes}: {schemaTypes: EditorSchema},\n keyMap: Record<string, any> = {},\n): Descendant {\n const {_type, _key, ...rest} = block\n const isPortableText = block && block._type === schemaTypes.block.name\n if (isPortableText) {\n const textBlock = block as PortableTextTextBlock\n let hasInlines = false\n const hasMissingStyle = typeof textBlock.style === 'undefined'\n const hasMissingMarkDefs = typeof textBlock.markDefs === 'undefined'\n const hasMissingChildren = typeof textBlock.children === 'undefined'\n\n const children = (textBlock.children || []).map((child) => {\n const {_type: cType, _key: cKey, ...cRest} = child\n // Return 'slate' version of inline object where the actual\n // value is stored in the `value` property.\n // In slate, inline objects are represented as regular\n // children with actual text node in order to be able to\n // be selected the same way as the rest of the (text) content.\n if (cType !== 'span') {\n hasInlines = true\n return keepObjectEquality(\n {\n _type: cType,\n _key: cKey,\n children: [\n {\n _key: VOID_CHILD_KEY,\n _type: 'span',\n text: '',\n marks: [],\n },\n ],\n value: cRest,\n __inline: true,\n },\n keyMap,\n )\n }\n // Original child object (span)\n return child\n })\n // Return original block\n if (\n !hasMissingStyle &&\n !hasMissingMarkDefs &&\n !hasMissingChildren &&\n !hasInlines &&\n Element.isElement(block)\n ) {\n // Original object\n return block\n }\n // TODO: remove this when we have a better way to handle missing style\n if (hasMissingStyle) {\n rest.style = schemaTypes.styles[0].name\n }\n return keepObjectEquality(\n {_type, _key, ...rest, children},\n keyMap,\n ) as Descendant\n }\n\n return keepObjectEquality(\n {\n _type,\n _key,\n children: [\n {\n _key: VOID_CHILD_KEY,\n _type: 'span',\n text: '',\n marks: [],\n },\n ],\n value: rest,\n },\n keyMap,\n ) as Descendant\n}\n\nexport function fromSlateValue(\n value: Descendant[],\n textBlockType: string,\n keyMap: Record<string, PortableTextBlock | PortableTextChild> = {},\n): PortableTextBlock[] {\n return value.map((block) => {\n const {_key, _type} = block\n if (!_key || !_type) {\n throw new Error('Not a valid block')\n }\n if (\n _type === textBlockType &&\n 'children' in block &&\n Array.isArray(block.children) &&\n _key\n ) {\n let hasInlines = false\n const children = block.children.map((child) => {\n const {_type: _cType} = child\n if ('value' in child && _cType !== 'span') {\n hasInlines = true\n const {\n value: v,\n _key: k,\n _type: t,\n __inline: _i,\n children: _c,\n ...rest\n } = child\n return keepObjectEquality(\n {...rest, ...v, _key: k as string, _type: t as string},\n keyMap,\n )\n }\n return child\n })\n if (!hasInlines) {\n return block as PortableTextBlock // Original object\n }\n return keepObjectEquality(\n {...block, children, _key, _type},\n keyMap,\n ) as PortableTextBlock\n }\n const blockValue = 'value' in block && block.value\n return keepObjectEquality(\n {_key, _type, ...(typeof blockValue === 'object' ? blockValue : {})},\n keyMap,\n ) as PortableTextBlock\n })\n}\n\nexport function isEqualToEmptyEditor(\n children: Descendant[] | PortableTextBlock[],\n schemaTypes: EditorSchema,\n): boolean {\n return (\n children === undefined ||\n (children && Array.isArray(children) && children.length === 0) ||\n (children &&\n Array.isArray(children) &&\n children.length === 1 &&\n Element.isElement(children[0]) &&\n children[0]._type === schemaTypes.block.name &&\n 'style' in children[0] &&\n children[0].style === schemaTypes.styles[0].name &&\n !('listItem' in children[0]) &&\n Array.isArray(children[0].children) &&\n children[0].children.length === 1 &&\n Text.isText(children[0].children[0]) &&\n children[0].children[0]._type === 'span' &&\n !children[0].children[0].marks?.join('') &&\n children[0].children[0].text === '')\n )\n}\n","import type {PortableTextSpan} from '@sanity/types'\nimport {Editor, Element, Node, Range, type Path, type Point} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\nimport {fromSlateValue} from './values'\n\nexport function getBlockPath({\n editor,\n _key,\n}: {\n editor: PortableTextSlateEditor\n _key: string\n}): [number] | undefined {\n const [, blockPath] = Array.from(\n Editor.nodes(editor, {\n at: [],\n match: (n) => n._key === _key,\n }),\n ).at(0) ?? [undefined, undefined]\n\n const blockIndex = blockPath?.at(0)\n\n if (blockIndex === undefined) {\n return undefined\n }\n\n return [blockIndex]\n}\n\nexport function getAnchorBlock({\n editor,\n}: {\n editor: PortableTextSlateEditor\n}): [node: Node, path: Path] | [undefined, undefined] {\n if (!editor.selection) {\n return [undefined, undefined]\n }\n\n try {\n return (\n Editor.node(editor, editor.selection.anchor.path.slice(0, 1)) ?? [\n undefined,\n undefined,\n ]\n )\n } catch {\n return [undefined, undefined]\n }\n}\n\nexport function getFocusBlock({\n editor,\n}: {\n editor: PortableTextSlateEditor\n}): [node: Node, path: Path] | [undefined, undefined] {\n if (!editor.selection) {\n return [undefined, undefined]\n }\n\n try {\n return (\n Editor.node(editor, editor.selection.focus.path.slice(0, 1)) ?? [\n undefined,\n undefined,\n ]\n )\n } catch {\n return [undefined, undefined]\n }\n}\n\nexport function getFocusSpan({\n editor,\n}: {\n editor: PortableTextSlateEditor\n}): [node: PortableTextSpan, path: Path] | [undefined, undefined] {\n if (!editor.selection) {\n return [undefined, undefined]\n }\n\n try {\n const [focusBlock] = getFocusBlock({editor})\n\n if (!focusBlock) {\n return [undefined, undefined]\n }\n\n if (!editor.isTextBlock(focusBlock)) {\n return [undefined, undefined]\n }\n\n const [node, path] = Editor.node(\n editor,\n editor.selection.focus.path.slice(0, 2),\n )\n\n if (editor.isTextSpan(node)) {\n return [node, path]\n }\n } catch {\n return [undefined, undefined]\n }\n\n return [undefined, undefined]\n}\n\nexport function getSelectionStartBlock({\n editor,\n}: {\n editor: PortableTextSlateEditor\n}): [node: Node, path: Path] | [undefined, undefined] {\n if (!editor.selection) {\n return [undefined, undefined]\n }\n\n const selectionStartPoint = Range.start(editor.selection)\n\n return getPointBlock({editor, point: selectionStartPoint})\n}\n\nexport function getSelectionEndBlock({\n editor,\n}: {\n editor: PortableTextSlateEditor\n}): [node: Node, path: Path] | [undefined, undefined] {\n if (!editor.selection) {\n return [undefined, undefined]\n }\n\n const selectionEndPoint = Range.end(editor.selection)\n\n return getPointBlock({editor, point: selectionEndPoint})\n}\n\nexport function getPointBlock({\n editor,\n point,\n}: {\n editor: PortableTextSlateEditor\n point: Point\n}): [node: Node, path: Path] | [undefined, undefined] {\n try {\n const [block] = Editor.node(editor, point.path.slice(0, 1)) ?? [\n undefined,\n undefined,\n ]\n return block ? [block, point.path.slice(0, 1)] : [undefined, undefined]\n } catch {\n return [undefined, undefined]\n }\n}\n\nexport function getFocusChild({\n editor,\n}: {\n editor: PortableTextSlateEditor\n}): [node: Node, path: Path] | [undefined, undefined] {\n const [focusBlock, focusBlockPath] = getFocusBlock({editor})\n const childIndex = editor.selection?.focus.path.at(1)\n\n if (!focusBlock || !focusBlockPath || childIndex === undefined) {\n return [undefined, undefined]\n }\n\n try {\n const focusChild = Node.child(focusBlock, childIndex)\n\n return focusChild\n ? [focusChild, [...focusBlockPath, childIndex]]\n : [undefined, undefined]\n } catch {\n return [undefined, undefined]\n }\n}\n\nfunction getPointChild({\n editor,\n point,\n}: {\n editor: PortableTextSlateEditor\n point: Point\n}): [node: Node, path: Path] | [undefined, undefined] {\n const [block, blockPath] = getPointBlock({editor, point})\n const childIndex = point.path.at(1)\n\n if (!block || !blockPath || childIndex === undefined) {\n return [undefined, undefined]\n }\n\n try {\n const pointChild = Node.child(block, childIndex)\n\n return pointChild\n ? [pointChild, [...blockPath, childIndex]]\n : [undefined, undefined]\n } catch {\n return [undefined, undefined]\n }\n}\n\nexport function getFirstBlock({\n editor,\n}: {\n editor: PortableTextSlateEditor\n}): [node: Node, path: Path] | [undefined, undefined] {\n if (editor.children.length === 0) {\n return [undefined, undefined]\n }\n\n const firstPoint = Editor.start(editor, [])\n const firstBlockPath = firstPoint.path.at(0)\n\n try {\n return firstBlockPath !== undefined\n ? (Editor.node(editor, [firstBlockPath]) ?? [undefined, undefined])\n : [undefined, undefined]\n } catch {\n return [undefined, undefined]\n }\n}\n\nexport function getLastBlock({\n editor,\n}: {\n editor: PortableTextSlateEditor\n}): [node: Node, path: Path] | [undefined, undefined] {\n if (editor.children.length === 0) {\n return [undefined, undefined]\n }\n\n const lastPoint = Editor.end(editor, [])\n const lastBlockPath = lastPoint.path.at(0)\n\n try {\n return lastBlockPath !== undefined\n ? (Editor.node(editor, [lastBlockPath]) ?? [undefined, undefined])\n : [undefined, undefined]\n } catch {\n return [undefined, undefined]\n }\n}\n\nexport function getNodeBlock({\n editor,\n schema,\n node,\n}: {\n editor: PortableTextSlateEditor\n schema: EditorSchema\n node: Node\n}) {\n if (Editor.isEditor(node)) {\n return undefined\n }\n\n if (isBlockElement({editor, schema}, node)) {\n return elementToBlock({schema, element: node})\n }\n\n const parent = Array.from(\n Editor.nodes(editor, {\n mode: 'highest',\n at: [],\n match: (n) =>\n isBlockElement({editor, schema}, n) &&\n n.children.some((child) => child._key === node._key),\n }),\n )\n .at(0)\n ?.at(0)\n\n return Element.isElement(parent)\n ? elementToBlock({\n schema,\n element: parent,\n })\n : undefined\n}\n\nfunction elementToBlock({\n schema,\n element,\n}: {\n schema: EditorSchema\n element: Element\n}) {\n return fromSlateValue([element], schema.block.name)?.at(0)\n}\n\nfunction isBlockElement(\n {editor, schema}: {editor: PortableTextSlateEditor; schema: EditorSchema},\n node: Node,\n): node is Element {\n return (\n Element.isElement(node) &&\n !editor.isInline(node) &&\n (schema.block.name === node._type ||\n schema.blockObjects.some(\n (blockObject) => blockObject.name === node._type,\n ))\n )\n}\n\nexport function isListItemActive({\n editor,\n listItem,\n}: {\n editor: Editor\n listItem: string\n}): boolean {\n if (!editor.selection) {\n return false\n }\n\n const selectedBlocks = [\n ...Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => editor.isTextBlock(node),\n }),\n ]\n\n if (selectedBlocks.length > 0) {\n return selectedBlocks.every(\n ([node]) => editor.isListBlock(node) && node.listItem === listItem,\n )\n }\n\n return false\n}\n\nexport function isStyleActive({\n editor,\n style,\n}: {\n editor: Editor\n style: string\n}): boolean {\n if (!editor.selection) {\n return false\n }\n\n const selectedBlocks = [\n ...Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => editor.isTextBlock(node),\n }),\n ]\n\n if (selectedBlocks.length > 0) {\n return selectedBlocks.every(([node]) => node.style === style)\n }\n\n return false\n}\n\nexport function slateRangeToSelection({\n schema,\n editor,\n range,\n}: {\n schema: EditorSchema\n editor: PortableTextSlateEditor\n range: Range\n}): EditorSelection {\n const [anchorBlock] = getPointBlock({\n editor,\n point: range.anchor,\n })\n const [focusBlock] = getPointBlock({\n editor,\n point: range.focus,\n })\n\n if (!anchorBlock || !focusBlock) {\n return null\n }\n\n const [anchorChild] =\n anchorBlock._type === schema.block.name\n ? getPointChild({\n editor,\n point: range.anchor,\n })\n : [undefined, undefined]\n const [focusChild] =\n focusBlock._type === schema.block.name\n ? getPointChild({\n editor,\n point: range.focus,\n })\n : [undefined, undefined]\n\n const selection: EditorSelection = {\n anchor: {\n path: [{_key: anchorBlock._key}],\n offset: range.anchor.offset,\n },\n focus: {\n path: [{_key: focusBlock._key}],\n offset: range.focus.offset,\n },\n backward: Range.isBackward(range),\n }\n\n if (anchorChild) {\n selection.anchor.path.push('children')\n selection.anchor.path.push({_key: anchorChild._key})\n }\n\n if (focusChild) {\n selection.focus.path.push('children')\n selection.focus.path.push({_key: focusChild._key})\n }\n\n return selection\n}\n","import {Editor, type BaseRange, type Node} from 'slate'\nimport {DOMEditor, isDOMNode} from 'slate-dom'\nimport type {EditorActor} from '../editor/editor-machine'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getBlockStartPoint} from '../utils/util.get-block-start-point'\nimport {isSelectionCollapsed} from '../utils/util.is-selection-collapsed'\nimport {getBlockKeyFromSelectionPoint} from '../utils/util.selection-point'\nimport {\n getFirstBlock,\n getLastBlock,\n getNodeBlock,\n slateRangeToSelection,\n} from './slate-utils'\n\nexport type EventPosition = {\n block: 'start' | 'end'\n /**\n * Did the event origin from the editor DOM node itself or from a child node?\n */\n isEditor: boolean\n selection: NonNullable<EditorSelection>\n}\nexport type EventPositionBlock = EventPosition['block']\n\nexport function getEventPosition({\n editorActor,\n slateEditor,\n event,\n}: {\n editorActor: EditorActor\n slateEditor: PortableTextSlateEditor\n event: DragEvent | MouseEvent\n}): EventPosition | undefined {\n if (editorActor.getSnapshot().matches({setup: 'setting up'})) {\n return undefined\n }\n\n const eventNode = getEventNode({slateEditor, event})\n\n if (!eventNode) {\n return undefined\n }\n\n const eventBlock = getNodeBlock({\n editor: slateEditor,\n schema: editorActor.getSnapshot().context.schema,\n node: eventNode,\n })\n const eventPositionBlock = getEventPositionBlock({\n node: eventNode,\n slateEditor,\n event,\n })\n const eventSelection = getEventSelection({\n schema: editorActor.getSnapshot().context.schema,\n slateEditor,\n event,\n })\n\n if (\n eventBlock &&\n eventPositionBlock &&\n !eventSelection &&\n !Editor.isEditor(eventNode)\n ) {\n // If we for some reason can't find the event selection, then we default to\n // selecting the entire block that the event originates from.\n return {\n block: eventPositionBlock,\n isEditor: false,\n selection: {\n anchor: getBlockStartPoint({\n context: editorActor.getSnapshot().context,\n block: {\n node: eventBlock,\n path: [{_key: eventBlock._key}],\n },\n }),\n focus: getBlockEndPoint({\n context: editorActor.getSnapshot().context,\n block: {\n node: eventBlock,\n path: [{_key: eventBlock._key}],\n },\n }),\n },\n }\n }\n\n if (!eventPositionBlock || !eventSelection) {\n return undefined\n }\n\n const eventSelectionFocusBlockKey = getBlockKeyFromSelectionPoint(\n eventSelection.focus,\n )\n\n if (eventSelectionFocusBlockKey === undefined) {\n return undefined\n }\n\n if (\n isSelectionCollapsed(eventSelection) &&\n eventBlock &&\n eventSelectionFocusBlockKey !== eventBlock._key\n ) {\n // If the event block and event selection somehow don't match, then the\n // event block takes precedence.\n return {\n block: eventPositionBlock,\n isEditor: false,\n selection: {\n anchor: getBlockStartPoint({\n context: editorActor.getSnapshot().context,\n block: {\n node: eventBlock,\n path: [{_key: eventBlock._key}],\n },\n }),\n focus: getBlockEndPoint({\n context: editorActor.getSnapshot().context,\n block: {\n node: eventBlock,\n path: [{_key: eventBlock._key}],\n },\n }),\n },\n }\n }\n\n return {\n block: eventPositionBlock,\n isEditor: Editor.isEditor(eventNode),\n selection: eventSelection,\n }\n}\n\nexport function getEventNode({\n slateEditor,\n event,\n}: {\n slateEditor: PortableTextSlateEditor\n event: DragEvent | MouseEvent\n}) {\n if (!DOMEditor.hasTarget(slateEditor, event.target)) {\n return undefined\n }\n\n const node = DOMEditor.toSlateNode(slateEditor, event.target)\n\n return node\n}\n\nfunction getEventPositionBlock({\n node,\n slateEditor,\n event,\n}: {\n node: Node\n slateEditor: PortableTextSlateEditor\n event: DragEvent | MouseEvent\n}): EventPositionBlock | undefined {\n const [firstBlock] = getFirstBlock({editor: slateEditor})\n\n if (!firstBlock) {\n return undefined\n }\n\n const firstBlockElement = DOMEditor.toDOMNode(slateEditor, firstBlock)\n const firstBlockRect = firstBlockElement.getBoundingClientRect()\n\n if (event.pageY < firstBlockRect.top) {\n return 'start'\n }\n\n const [lastBlock] = getLastBlock({editor: slateEditor})\n\n if (!lastBlock) {\n return undefined\n }\n\n const lastBlockElement = DOMEditor.toDOMNode(slateEditor, lastBlock)\n const lastBlockRef = lastBlockElement.getBoundingClientRect()\n\n if (event.pageY > lastBlockRef.bottom) {\n return 'end'\n }\n\n const element = DOMEditor.toDOMNode(slateEditor, node)\n const elementRect = element.getBoundingClientRect()\n const top = elementRect.top\n const height = elementRect.height\n const location = Math.abs(top - event.pageY)\n\n return location < height / 2 ? 'start' : 'end'\n}\n\nexport function getEventSelection({\n schema,\n slateEditor,\n event,\n}: {\n schema: EditorSchema\n slateEditor: PortableTextSlateEditor\n event: DragEvent | MouseEvent\n}): EditorSelection {\n const range = getSlateRangeFromEvent(slateEditor, event)\n\n const selection = range\n ? slateRangeToSelection({\n schema,\n editor: slateEditor,\n range,\n })\n : null\n\n return selection\n}\n\nfunction getSlateRangeFromEvent(\n editor: PortableTextSlateEditor,\n event: DragEvent | MouseEvent,\n) {\n if (!event.target) {\n return undefined\n }\n\n if (!isDOMNode(event.target)) {\n return undefined\n }\n\n const window = DOMEditor.getWindow(editor)\n\n let domRange: Range | undefined\n\n if (window.document.caretPositionFromPoint !== undefined) {\n const position = window.document.caretPositionFromPoint(\n event.clientX,\n event.clientY,\n )\n\n if (position) {\n try {\n domRange = window.document.createRange()\n domRange.setStart(position.offsetNode, position.offset)\n domRange.setEnd(position.offsetNode, position.offset)\n } catch {}\n }\n } else if (window.document.caretRangeFromPoint !== undefined) {\n // Use WebKit-proprietary fallback method\n domRange =\n window.document.caretRangeFromPoint(event.clientX, event.clientY) ??\n undefined\n } else {\n console.warn(\n 'Neither caretPositionFromPoint nor caretRangeFromPoint is supported',\n )\n return undefined\n }\n\n if (!domRange) {\n return undefined\n }\n\n let range: BaseRange | undefined\n\n try {\n range = DOMEditor.toSlateRange(editor, domRange, {\n exactMatch: false,\n // It can still throw even with this option set to true\n suppressThrow: false,\n })\n } catch {}\n\n return range\n}\n","import type {Path, PortableTextBlock} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\nexport function normalizePoint(\n point: EditorSelectionPoint,\n value: PortableTextBlock[],\n): EditorSelectionPoint | null {\n if (!point || !value) {\n return null\n }\n const newPath: Path = []\n let newOffset: number = point.offset || 0\n const blockKey =\n typeof point.path[0] === 'object' &&\n '_key' in point.path[0] &&\n point.path[0]._key\n const childKey =\n typeof point.path[2] === 'object' &&\n '_key' in point.path[2] &&\n point.path[2]._key\n const block: PortableTextBlock | undefined = value.find(\n (blk) => blk._key === blockKey,\n )\n if (block) {\n newPath.push({_key: block._key})\n } else {\n return null\n }\n if (block && point.path[1] === 'children') {\n if (\n !block.children ||\n (Array.isArray(block.children) && block.children.length === 0)\n ) {\n return null\n }\n const child =\n Array.isArray(block.children) &&\n block.children.find((cld) => cld._key === childKey)\n if (child) {\n newPath.push('children')\n newPath.push({_key: child._key})\n newOffset =\n child.text && child.text.length >= point.offset\n ? point.offset\n : (child.text && child.text.length) || 0\n } else {\n return null\n }\n }\n return {path: newPath, offset: newOffset}\n}\n\nexport function normalizeSelection(\n selection: EditorSelection,\n value: PortableTextBlock[] | undefined,\n): EditorSelection | null {\n if (!selection || !value || value.length === 0) {\n return null\n }\n let newAnchor: EditorSelectionPoint | null = null\n let newFocus: EditorSelectionPoint | null = null\n const {anchor, focus} = selection\n if (\n anchor &&\n value.find((blk) => isEqual({_key: blk._key}, anchor.path[0]))\n ) {\n newAnchor = normalizePoint(anchor, value)\n }\n if (focus && value.find((blk) => isEqual({_key: blk._key}, focus.path[0]))) {\n newFocus = normalizePoint(focus, value)\n }\n if (newAnchor && newFocus) {\n return {anchor: newAnchor, focus: newFocus, backward: selection.backward}\n }\n return null\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {Path, Range} from 'slate'\nimport type {EditorContext, EditorSnapshot} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {blockOffsetToSpanSelectionPoint} from '../utils/util.block-offset'\nimport {isEqualSelectionPoints} from '../utils/util.is-equal-selection-points'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../utils/util.selection-point'\n\nexport function toSlateRange(\n snapshot: {\n context: Pick<EditorContext, 'schema' | 'value' | 'selection'>\n } & Pick<EditorSnapshot, 'blockIndexMap'>,\n): Range | null {\n if (!snapshot.context.selection) {\n return null\n }\n\n if (\n isEqualSelectionPoints(\n snapshot.context.selection.anchor,\n snapshot.context.selection.focus,\n )\n ) {\n const anchorPoint = toSlateSelectionPoint(\n snapshot,\n snapshot.context.selection.anchor,\n snapshot.context.selection.backward ? 'backward' : 'forward',\n )\n\n if (!anchorPoint) {\n return null\n }\n\n return {\n anchor: anchorPoint,\n focus: anchorPoint,\n }\n }\n\n const anchorPoint = toSlateSelectionPoint(\n snapshot,\n snapshot.context.selection.anchor,\n snapshot.context.selection.backward ? 'forward' : 'backward',\n )\n const focusPoint = toSlateSelectionPoint(\n snapshot,\n snapshot.context.selection.focus,\n snapshot.context.selection.backward ? 'backward' : 'forward',\n )\n\n if (!anchorPoint || !focusPoint) {\n return null\n }\n\n return {\n anchor: anchorPoint,\n focus: focusPoint,\n }\n}\n\nfunction toSlateSelectionPoint(\n snapshot: {\n context: Pick<EditorContext, 'schema' | 'value'>\n } & Pick<EditorSnapshot, 'blockIndexMap'>,\n selectionPoint: EditorSelectionPoint,\n direction: 'forward' | 'backward',\n):\n | {\n path: Path\n offset: number\n }\n | undefined {\n const blockKey = getBlockKeyFromSelectionPoint(selectionPoint)\n\n if (!blockKey) {\n return undefined\n }\n\n const blockIndex = snapshot.blockIndexMap.get(blockKey)\n\n if (blockIndex === undefined) {\n return undefined\n }\n\n const block = snapshot.context.value.at(blockIndex)\n\n if (!block) {\n return undefined\n }\n\n if (!isTextBlock(snapshot.context, block)) {\n return {\n path: [blockIndex, 0],\n offset: 0,\n }\n }\n\n let childKey = getChildKeyFromSelectionPoint({\n path: selectionPoint.path,\n offset: 0,\n })\n\n // If the block is a text block, but there is no child key in the selection\n // point path, then we can try to find a span selection point by the offset.\n const spanSelectionPoint = !childKey\n ? blockOffsetToSpanSelectionPoint({\n context: {\n schema: snapshot.context.schema,\n value: [block],\n },\n blockOffset: {\n path: [{_key: blockKey}],\n offset: selectionPoint.offset,\n },\n direction,\n })\n : undefined\n\n childKey = spanSelectionPoint\n ? getChildKeyFromSelectionPoint(spanSelectionPoint)\n : childKey\n\n // If we still don't have a child key, then we have to resort to selecting\n // the first child of the block (which by Slate convention is a span).\n if (!childKey) {\n return {\n path: [blockIndex, 0],\n offset: 0,\n }\n }\n\n let offset = spanSelectionPoint?.offset ?? selectionPoint.offset\n let childPath: Array<number> = []\n let childIndex = -1\n let pathChild: PortableTextSpan | PortableTextObject | undefined\n\n for (const child of block.children) {\n childIndex++\n if (child._key === childKey) {\n pathChild = child\n if (isSpan(snapshot.context, child)) {\n childPath = [childIndex]\n } else {\n childPath = [childIndex, 0]\n offset = 0\n }\n break\n }\n }\n\n // If we for some unforeseen reason didn't manage to produce a child path,\n // then we have to resort to selecting the first child of the block (which\n // by Slate convention is a span).\n if (childPath.length === 0) {\n return {\n path: [blockIndex, 0],\n offset: 0,\n }\n }\n\n return {\n path: [blockIndex].concat(childPath),\n offset: isSpan(snapshot.context, pathChild)\n ? Math.min(pathChild.text.length, offset)\n : offset,\n }\n}\n","import {createContext} from 'react'\nimport type {EditorActor} from './editor-machine'\n\nexport const EditorActorContext = createContext<EditorActor>({} as EditorActor)\n","export function DropIndicator() {\n return (\n <div\n contentEditable={false}\n className=\"pt-drop-indicator\"\n style={{\n position: 'absolute',\n width: '100%',\n height: 1,\n borderBottom: '1px solid currentColor',\n zIndex: 5,\n }}\n >\n <span />\n </div>\n )\n}\n","import type {PortableTextChild, PortableTextObject} from '@sanity/types'\n\nexport function RenderDefaultBlockObject(props: {\n blockObject: PortableTextObject\n}) {\n return (\n <div style={{userSelect: 'none'}}>\n [{props.blockObject._type}: {props.blockObject._key}]\n </div>\n )\n}\n\nexport function RenderDefaultInlineObject(props: {\n inlineObject: PortableTextObject | PortableTextChild\n}) {\n return (\n <span style={{userSelect: 'none'}}>\n [{props.inlineObject._type}: {props.inlineObject._key}]\n </span>\n )\n}\n","import {defaultKeyGenerator} from '../utils/key-generator'\n\nexport type EditorPriority = {\n id: string\n name?: string\n reference?: {\n priority: EditorPriority\n importance: 'higher' | 'lower'\n }\n}\n\nexport function createEditorPriority(config?: {\n name?: string\n reference?: {\n priority: EditorPriority\n importance: 'higher' | 'lower'\n }\n}): EditorPriority {\n return {\n id: defaultKeyGenerator(),\n name: config?.name,\n reference: config?.reference,\n }\n}\n","import {createEditorPriority} from './priority.types'\n\nexport const corePriority = createEditorPriority({name: 'core'})\n","import type {EditorSnapshot} from '../editor/editor-snapshot'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getBlockStartPoint} from '../utils/util.get-block-start-point'\nimport {getFocusInlineObject} from './selector.get-focus-inline-object'\nimport {getFocusSpan} from './selector.get-focus-span'\nimport {getFocusTextBlock} from './selector.get-focus-text-block'\nimport {getSelectedBlocks} from './selector.get-selected-blocks'\nimport {getSelectionEndBlock} from './selector.get-selection-end-block'\nimport {getSelectionStartBlock} from './selector.get-selection-start-block'\nimport {isOverlappingSelection} from './selector.is-overlapping-selection'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\nimport {isSelectionExpanded} from './selector.is-selection-expanded'\n\n/**\n * Given the current editor `snapshot` and an `eventSelection` representing\n * where the drag event origins from, this function calculates the selection\n * in the editor that should be dragged.\n */\nexport function getDragSelection({\n eventSelection,\n snapshot,\n}: {\n eventSelection: EventPosition['selection']\n snapshot: EditorSnapshot\n}) {\n let dragSelection = eventSelection\n\n const draggedInlineObject = getFocusInlineObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: eventSelection,\n },\n })\n\n if (draggedInlineObject) {\n return dragSelection\n }\n\n const draggingCollapsedSelection = isSelectionCollapsed({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: eventSelection,\n },\n })\n const draggedTextBlock = getFocusTextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: eventSelection,\n },\n })\n const draggedSpan = getFocusSpan({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: eventSelection,\n },\n })\n\n if (draggingCollapsedSelection && draggedTextBlock && draggedSpan) {\n // Looks like we are dragging an empty span\n // Let's drag the entire block instead\n dragSelection = {\n anchor: getBlockStartPoint({\n context: snapshot.context,\n block: draggedTextBlock,\n }),\n focus: getBlockEndPoint({\n context: snapshot.context,\n block: draggedTextBlock,\n }),\n }\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n\n if (\n snapshot.context.selection &&\n isSelectionExpanded(snapshot) &&\n selectedBlocks.length > 1\n ) {\n const selectionStartBlock = getSelectionStartBlock(snapshot)\n const selectionEndBlock = getSelectionEndBlock(snapshot)\n\n if (!selectionStartBlock || !selectionEndBlock) {\n return dragSelection\n }\n\n const selectionStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: selectionStartBlock,\n })\n const selectionEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: selectionEndBlock,\n })\n\n const eventSelectionInsideBlocks = isOverlappingSelection(eventSelection)({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {anchor: selectionStartPoint, focus: selectionEndPoint},\n },\n })\n\n if (eventSelectionInsideBlocks) {\n dragSelection = {\n anchor: selectionStartPoint,\n focus: selectionEndPoint,\n }\n }\n }\n\n return dragSelection\n}\n","import type {EventPositionBlock} from '../internal-utils/event-position'\nimport {corePriority} from '../priority/priority.core'\nimport {createEditorPriority} from '../priority/priority.types'\nimport {getDragSelection} from '../selectors/drag-selection'\nimport {getFocusBlock} from '../selectors/selector.get-focus-block'\nimport {getSelectedBlocks} from '../selectors/selector.get-selected-blocks'\nimport {isSelectingEntireBlocks} from '../selectors/selector.is-selecting-entire-blocks'\nimport {forward} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport function createCoreBlockElementBehaviorsConfig({\n key,\n onSetDragPositionBlock,\n}: {\n key: string\n onSetDragPositionBlock: (\n eventPositionBlock: EventPositionBlock | undefined,\n ) => void\n}) {\n return [\n {\n behavior: defineBehavior({\n on: 'drag.dragover',\n guard: ({snapshot, event}) => {\n const dropFocusBlock = getFocusBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n\n if (!dropFocusBlock || dropFocusBlock.node._key !== key) {\n return false\n }\n\n const dragOrigin = event.dragOrigin\n\n if (!dragOrigin) {\n return false\n }\n\n const dragSelection = getDragSelection({\n eventSelection: dragOrigin.selection,\n snapshot,\n })\n\n const draggedBlocks = getSelectedBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragSelection,\n },\n })\n\n if (\n draggedBlocks.some((draggedBlock) => draggedBlock.node._key === key)\n ) {\n return false\n }\n\n const draggingEntireBlocks = isSelectingEntireBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragSelection,\n },\n })\n\n return draggingEntireBlocks\n },\n actions: [\n ({event}) => [\n {\n type: 'effect',\n effect: () => {\n onSetDragPositionBlock(event.position.block)\n },\n },\n ],\n ],\n }),\n priority: createEditorPriority({\n reference: {\n priority: corePriority,\n importance: 'lower',\n },\n }),\n },\n {\n behavior: defineBehavior({\n on: 'drag.*',\n guard: ({event}) => {\n return event.type !== 'drag.dragover'\n },\n actions: [\n ({event}) => [\n {\n type: 'effect',\n effect: () => {\n onSetDragPositionBlock(undefined)\n },\n },\n forward(event),\n ],\n ],\n }),\n priority: createEditorPriority({\n reference: {\n priority: corePriority,\n importance: 'lower',\n },\n }),\n },\n ]\n}\n","import {useContext, useEffect} from 'react'\nimport {createCoreBlockElementBehaviorsConfig} from '../../behaviors/behavior.core.block-element'\nimport type {EventPositionBlock} from '../../internal-utils/event-position'\nimport {EditorActorContext} from '../editor-actor-context'\n\nexport function useCoreBlockElementBehaviors({\n key,\n onSetDragPositionBlock,\n}: {\n key: string\n onSetDragPositionBlock: (\n eventPositionBlock: EventPositionBlock | undefined,\n ) => void\n}) {\n const editorActor = useContext(EditorActorContext)\n\n useEffect(() => {\n const behaviorConfigs = createCoreBlockElementBehaviorsConfig({\n key,\n onSetDragPositionBlock,\n })\n\n for (const behaviorConfig of behaviorConfigs) {\n editorActor.send({\n type: 'add behavior',\n behaviorConfig,\n })\n }\n\n return () => {\n for (const behaviorConfig of behaviorConfigs) {\n editorActor.send({\n type: 'remove behavior',\n behaviorConfig,\n })\n }\n }\n }, [editorActor, key, onSetDragPositionBlock])\n}\n","import type {PortableTextObject} from '@sanity/types'\nimport {useRef, useState, type ReactElement} from 'react'\nimport {Range, type Element as SlateElement} from 'slate'\nimport {\n useSelected,\n useSlateSelector,\n type RenderElementProps,\n} from 'slate-react'\nimport type {EventPositionBlock} from '../../internal-utils/event-position'\nimport type {\n BlockRenderProps,\n PortableTextMemberSchemaTypes,\n RenderBlockFunction,\n} from '../../types/editor'\nimport type {EditorSchema} from '../editor-schema'\nimport {DropIndicator} from './drop-indicator'\nimport {RenderDefaultBlockObject} from './render-default-object'\nimport {useCoreBlockElementBehaviors} from './use-core-block-element-behaviors'\n\nexport function RenderBlockObject(props: {\n attributes: RenderElementProps['attributes']\n blockObject: PortableTextObject | undefined\n children: ReactElement\n element: SlateElement\n legacySchema: PortableTextMemberSchemaTypes\n readOnly: boolean\n renderBlock?: RenderBlockFunction\n schema: EditorSchema\n}) {\n const [dragPositionBlock, setDragPositionBlock] =\n useState<EventPositionBlock>()\n const blockObjectRef = useRef<HTMLDivElement>(null)\n const selected = useSelected()\n const focused = useSlateSelector(\n (editor) =>\n selected &&\n editor.selection !== null &&\n Range.isCollapsed(editor.selection),\n )\n\n useCoreBlockElementBehaviors({\n key: props.element._key,\n onSetDragPositionBlock: setDragPositionBlock,\n })\n\n const legacySchemaType = props.legacySchema.blockObjects.find(\n (schemaType) => schemaType.name === props.element._type,\n )\n\n if (!legacySchemaType) {\n console.error(\n `Unable to find Block Object \"${props.element._type}\" in Schema`,\n )\n }\n\n const blockObject = props.blockObject ?? {\n _key: props.element._key,\n _type: props.element._type,\n }\n\n return (\n <div\n {...props.attributes}\n className=\"pt-block pt-object-block\"\n data-block-key={props.element._key}\n data-block-name={props.element._type}\n data-block-type=\"object\"\n >\n {dragPositionBlock === 'start' ? <DropIndicator /> : null}\n {props.children}\n <div\n ref={blockObjectRef}\n contentEditable={false}\n draggable={!props.readOnly}\n >\n {props.renderBlock && legacySchemaType ? (\n <RenderBlock\n renderBlock={props.renderBlock}\n editorElementRef={blockObjectRef}\n focused={focused}\n path={[{_key: props.element._key}]}\n schemaType={legacySchemaType}\n selected={selected}\n type={legacySchemaType}\n value={blockObject}\n >\n <RenderDefaultBlockObject blockObject={blockObject} />\n </RenderBlock>\n ) : (\n <RenderDefaultBlockObject blockObject={blockObject} />\n )}\n </div>\n {dragPositionBlock === 'end' ? <DropIndicator /> : null}\n </div>\n )\n}\n\nfunction RenderBlock({\n renderBlock,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n type,\n value,\n}: {\n renderBlock: RenderBlockFunction\n} & BlockRenderProps) {\n return renderBlock({\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n type,\n value,\n })\n}\n","import {useRef, type ReactElement} from 'react'\nimport {Range, type Element as SlateElement} from 'slate'\nimport {DOMEditor} from 'slate-dom'\nimport {\n useSelected,\n useSlateSelector,\n useSlateStatic,\n type RenderElementProps,\n} from 'slate-react'\nimport {getPointBlock} from '../../internal-utils/slate-utils'\nimport type {\n BlockChildRenderProps,\n PortableTextMemberSchemaTypes,\n RenderChildFunction,\n} from '../../types/editor'\nimport type {EditorSchema} from '../editor-schema'\nimport {RenderDefaultInlineObject} from './render-default-object'\n\nexport function RenderInlineObject(props: {\n attributes: RenderElementProps['attributes']\n children: ReactElement\n element: SlateElement\n legacySchema: PortableTextMemberSchemaTypes\n readOnly: boolean\n renderChild?: RenderChildFunction\n schema: EditorSchema\n}) {\n const inlineObjectRef = useRef<HTMLElement>(null)\n const slateEditor = useSlateStatic()\n const selected = useSelected()\n const focused = useSlateSelector(\n (editor) =>\n selected &&\n editor.selection !== null &&\n Range.isCollapsed(editor.selection),\n )\n\n const legacySchemaType = props.legacySchema.inlineObjects.find(\n (inlineObject) => inlineObject.name === props.element._type,\n )\n\n if (!legacySchemaType) {\n console.error(\n `Unable to find Inline Object \"${props.element._type}\" in Schema`,\n )\n }\n\n const path = DOMEditor.findPath(slateEditor, props.element)\n const [block] = getPointBlock({\n editor: slateEditor,\n point: {\n path,\n offset: 0,\n },\n })\n\n if (!block) {\n console.error(\n `Unable to find parent block of inline object ${props.element._key}`,\n )\n }\n\n const inlineObject = {\n _key: props.element._key,\n _type: props.element._type,\n ...('value' in props.element && typeof props.element.value === 'object'\n ? props.element.value\n : {}),\n }\n\n return (\n <span\n {...props.attributes}\n draggable={!props.readOnly}\n className=\"pt-inline-object\"\n data-child-key={inlineObject._key}\n data-child-name={inlineObject._type}\n data-child-type=\"object\"\n >\n {props.children}\n <span ref={inlineObjectRef} style={{display: 'inline-block'}}>\n {props.renderChild && block && legacySchemaType ? (\n <RenderChild\n renderChild={props.renderChild}\n annotations={[]}\n editorElementRef={inlineObjectRef}\n selected={selected}\n focused={focused}\n path={[{_key: block._key}, 'children', {_key: props.element._key}]}\n schemaType={legacySchemaType}\n value={inlineObject}\n type={legacySchemaType}\n >\n <RenderDefaultInlineObject inlineObject={inlineObject} />\n </RenderChild>\n ) : (\n <RenderDefaultInlineObject inlineObject={inlineObject} />\n )}\n </span>\n </span>\n )\n}\n\nfunction RenderChild({\n renderChild,\n annotations,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n type,\n}: {\n renderChild: RenderChildFunction\n} & BlockChildRenderProps) {\n return renderChild({\n annotations,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n type,\n })\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\nimport {useRef, useState, type ReactElement} from 'react'\nimport {Range, type Element as SlateElement} from 'slate'\nimport {\n useSelected,\n useSlateSelector,\n type RenderElementProps,\n} from 'slate-react'\nimport type {EventPositionBlock} from '../../internal-utils/event-position'\nimport type {\n BlockListItemRenderProps,\n BlockRenderProps,\n BlockStyleRenderProps,\n PortableTextMemberSchemaTypes,\n RenderBlockFunction,\n RenderListItemFunction,\n RenderStyleFunction,\n} from '../../types/editor'\nimport {DropIndicator} from './drop-indicator'\nimport {useCoreBlockElementBehaviors} from './use-core-block-element-behaviors'\n\nexport function RenderTextBlock(props: {\n attributes: RenderElementProps['attributes']\n children: ReactElement\n element: SlateElement\n legacySchema: PortableTextMemberSchemaTypes\n readOnly: boolean\n renderBlock?: RenderBlockFunction\n renderListItem?: RenderListItemFunction\n renderStyle?: RenderStyleFunction\n spellCheck?: boolean\n textBlock: PortableTextTextBlock\n}) {\n const [dragPositionBlock, setDragPositionBlock] =\n useState<EventPositionBlock>()\n const blockRef = useRef<HTMLDivElement>(null)\n\n const selected = useSelected()\n const focused = useSlateSelector(\n (editor) =>\n selected &&\n editor.selection !== null &&\n Range.isCollapsed(editor.selection),\n )\n\n useCoreBlockElementBehaviors({\n key: props.element._key,\n onSetDragPositionBlock: setDragPositionBlock,\n })\n\n const listIndex = useSlateSelector((editor) =>\n editor.listIndexMap.get(props.textBlock._key),\n )\n\n let children = props.children\n\n if (props.renderStyle && props.textBlock.style) {\n const legacyStyleSchemaType =\n props.textBlock.style !== undefined\n ? props.legacySchema.styles.find(\n (style) => style.value === props.textBlock.style,\n )\n : undefined\n\n if (legacyStyleSchemaType) {\n children = (\n <RenderStyle\n renderStyle={props.renderStyle}\n block={props.textBlock}\n editorElementRef={blockRef}\n focused={focused}\n path={[{_key: props.textBlock._key}]}\n schemaType={legacyStyleSchemaType}\n selected={selected}\n value={props.textBlock.style}\n >\n {children}\n </RenderStyle>\n )\n } else {\n console.error(\n `Unable to find Schema type for text block style ${props.textBlock.style}`,\n )\n }\n }\n\n if (props.renderListItem && props.textBlock.listItem) {\n const legacyListItemSchemaType = props.legacySchema.lists.find(\n (list) => list.value === props.textBlock.listItem,\n )\n\n if (legacyListItemSchemaType) {\n children = (\n <RenderListItem\n renderListItem={props.renderListItem}\n block={props.textBlock}\n editorElementRef={blockRef}\n focused={focused}\n level={props.textBlock.level ?? 1}\n path={[{_key: props.textBlock._key}]}\n selected={selected}\n value={props.textBlock.listItem}\n schemaType={legacyListItemSchemaType}\n >\n {children}\n </RenderListItem>\n )\n } else {\n console.error(\n `Unable to find Schema type for text block list item ${props.textBlock.listItem}`,\n )\n }\n }\n\n return (\n <div\n {...props.attributes}\n className={[\n 'pt-block',\n 'pt-text-block',\n ...(props.textBlock.style\n ? [`pt-text-block-style-${props.textBlock.style}`]\n : []),\n ...(props.textBlock.listItem\n ? [\n 'pt-list-item',\n `pt-list-item-${props.textBlock.listItem}`,\n `pt-list-item-level-${props.textBlock.level ?? 1}`,\n ]\n : []),\n ].join(' ')}\n spellCheck={props.spellCheck}\n data-block-key={props.textBlock._key}\n data-block-name={props.textBlock._type}\n data-block-type=\"text\"\n {...(props.textBlock.listItem !== undefined\n ? {\n 'data-list-item': props.textBlock.listItem,\n }\n : {})}\n {...(props.textBlock.level !== undefined\n ? {\n 'data-level': props.textBlock.level,\n }\n : {})}\n {...(props.textBlock.style !== undefined\n ? {\n 'data-style': props.textBlock.style,\n }\n : {})}\n {...(listIndex !== undefined\n ? {\n 'data-list-index': listIndex,\n }\n : {})}\n >\n {dragPositionBlock === 'start' ? <DropIndicator /> : null}\n <div ref={blockRef}>\n {props.renderBlock ? (\n <RenderBlock\n renderBlock={props.renderBlock}\n editorElementRef={blockRef}\n focused={focused}\n level={props.textBlock.level}\n listItem={props.textBlock.listItem}\n path={[{_key: props.textBlock._key}]}\n selected={selected}\n schemaType={props.legacySchema.block}\n style={props.textBlock.style}\n type={props.legacySchema.block}\n value={props.textBlock}\n >\n {children}\n </RenderBlock>\n ) : (\n children\n )}\n </div>\n {dragPositionBlock === 'end' ? <DropIndicator /> : null}\n </div>\n )\n}\n\nfunction RenderBlock({\n renderBlock,\n children,\n editorElementRef,\n focused,\n level,\n listItem,\n path,\n selected,\n style,\n schemaType,\n type,\n value,\n}: {\n renderBlock: RenderBlockFunction\n} & BlockRenderProps) {\n return renderBlock({\n children,\n editorElementRef,\n focused,\n level,\n listItem,\n path,\n selected,\n style,\n schemaType,\n type,\n value,\n })\n}\n\nfunction RenderListItem({\n renderListItem,\n block,\n children,\n editorElementRef,\n focused,\n level,\n path,\n schemaType,\n selected,\n value,\n}: {\n renderListItem: RenderListItemFunction\n} & BlockListItemRenderProps) {\n return renderListItem({\n block,\n children,\n editorElementRef,\n focused,\n level,\n path,\n schemaType,\n selected,\n value,\n })\n}\n\nfunction RenderStyle({\n renderStyle,\n block,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n}: {\n renderStyle: RenderStyleFunction\n} & BlockStyleRenderProps) {\n return renderStyle({\n block,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n })\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport {useSelector} from '@xstate/react'\nimport {useContext, type ReactElement} from 'react'\nimport type {Element as SlateElement} from 'slate'\nimport {useSlateStatic, type RenderElementProps} from 'slate-react'\nimport type {\n RenderBlockFunction,\n RenderChildFunction,\n RenderListItemFunction,\n RenderStyleFunction,\n} from '../../types/editor'\nimport {EditorActorContext} from '../editor-actor-context'\nimport {RenderBlockObject} from './render-block-object'\nimport {RenderInlineObject} from './render-inline-object'\nimport {RenderTextBlock} from './render-text-block'\n\nexport function RenderElement(props: {\n attributes: RenderElementProps['attributes']\n children: ReactElement\n element: SlateElement\n readOnly: boolean\n renderBlock?: RenderBlockFunction\n renderChild?: RenderChildFunction\n renderListItem?: RenderListItemFunction\n renderStyle?: RenderStyleFunction\n spellCheck?: boolean\n}) {\n const editorActor = useContext(EditorActorContext)\n const schema = useSelector(editorActor, (s) => s.context.schema)\n const legacySchema = useSelector(editorActor, (s) =>\n s.context.getLegacySchema(),\n )\n const slateStatic = useSlateStatic()\n\n const isInline =\n '__inline' in props.element && props.element.__inline === true\n\n if (isInline) {\n return (\n <RenderInlineObject\n attributes={props.attributes}\n element={props.element}\n legacySchema={legacySchema}\n readOnly={props.readOnly}\n renderChild={props.renderChild}\n schema={schema}\n >\n {props.children}\n </RenderInlineObject>\n )\n }\n\n const blockIndex = slateStatic.blockIndexMap.get(props.element._key)\n const block =\n blockIndex !== undefined ? slateStatic.value.at(blockIndex) : undefined\n\n if (isTextBlock({schema}, block)) {\n return (\n <RenderTextBlock\n attributes={props.attributes}\n element={props.element}\n legacySchema={legacySchema}\n readOnly={props.readOnly}\n renderBlock={props.renderBlock}\n renderListItem={props.renderListItem}\n renderStyle={props.renderStyle}\n spellCheck={props.spellCheck}\n textBlock={block}\n >\n {props.children}\n </RenderTextBlock>\n )\n }\n\n return (\n <RenderBlockObject\n attributes={props.attributes}\n blockObject={block}\n element={props.element}\n legacySchema={legacySchema}\n readOnly={props.readOnly}\n renderBlock={props.renderBlock}\n schema={schema}\n >\n {props.children}\n </RenderBlockObject>\n )\n}\n","import {useSelector} from '@xstate/react'\nimport type {Editor} from '../editor'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {InternalEditor} from './create-editor'\nimport type {EditorActor} from './editor-machine'\nimport type {EditorSnapshot} from './editor-snapshot'\n\nfunction defaultCompare<T>(a: T, b: T) {\n return a === b\n}\n\n/**\n * @public\n */\nexport type EditorSelector<TSelected> = (snapshot: EditorSnapshot) => TSelected\n\n/**\n * @public\n * Hook to select a value from the editor state.\n * @example\n * Pass a selector as the second argument\n * ```tsx\n * import { useEditorSelector } from '@portabletext/editor'\n *\n * function MyComponent(editor) {\n * const value = useEditorSelector(editor, selector)\n * }\n * ```\n * @example\n * Pass an inline selector as the second argument.\n * In this case, use the editor context to obtain the schema.\n * ```tsx\n * import { useEditorSelector } from '@portabletext/editor'\n *\n * function MyComponent(editor) {\n * const schema = useEditorSelector(editor, (snapshot) => snapshot.context.schema)\n * }\n * ```\n * @group Hooks\n */\nexport function useEditorSelector<TSelected>(\n editor: Editor,\n selector: EditorSelector<TSelected>,\n compare: (a: TSelected, b: TSelected) => boolean = defaultCompare,\n) {\n return useSelector(\n (editor as InternalEditor)._internal.editorActor,\n (editorActorSnapshot) => {\n const snapshot = getEditorSnapshot({\n editorActorSnapshot,\n slateEditorInstance: (editor as InternalEditor)._internal.slateEditor\n .instance,\n })\n\n return selector(snapshot)\n },\n compare,\n )\n}\n\nexport function getEditorSnapshot({\n editorActorSnapshot,\n slateEditorInstance,\n}: {\n editorActorSnapshot: ReturnType<EditorActor['getSnapshot']>\n slateEditorInstance: PortableTextSlateEditor\n}): EditorSnapshot {\n const selection = slateEditorInstance.selection\n ? slateRangeToSelection({\n schema: editorActorSnapshot.context.schema,\n editor: slateEditorInstance,\n range: slateEditorInstance.selection,\n })\n : null\n\n return {\n blockIndexMap: slateEditorInstance.blockIndexMap,\n context: {\n converters: [...editorActorSnapshot.context.converters],\n keyGenerator: editorActorSnapshot.context.keyGenerator,\n readOnly: editorActorSnapshot.matches({'edit mode': 'read only'}),\n schema: editorActorSnapshot.context.schema,\n selection,\n value: slateEditorInstance.value,\n },\n decoratorState: slateEditorInstance.decoratorState,\n }\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport {useSelector} from '@xstate/react'\nimport {uniq} from 'lodash'\nimport {useContext, useMemo, useRef, type ReactElement} from 'react'\nimport {useSlateStatic, type RenderLeafProps} from 'slate-react'\nimport {getFocusSpan} from '../../selectors/selector.get-focus-span'\nimport {isOverlappingSelection} from '../../selectors/selector.is-overlapping-selection'\nimport {isSelectionCollapsed} from '../../selectors/selector.is-selection-collapsed'\nimport type {\n BlockAnnotationRenderProps,\n BlockChildRenderProps,\n BlockDecoratorRenderProps,\n EditorSelection,\n RenderAnnotationFunction,\n RenderChildFunction,\n RenderDecoratorFunction,\n} from '../../types/editor'\nimport {EditorActorContext} from '../editor-actor-context'\nimport {getEditorSnapshot} from '../editor-selector'\n\nexport interface RenderSpanProps extends RenderLeafProps {\n children: ReactElement<any>\n renderAnnotation?: RenderAnnotationFunction\n renderChild?: RenderChildFunction\n renderDecorator?: RenderDecoratorFunction\n readOnly: boolean\n}\n\nexport function RenderSpan(props: RenderSpanProps) {\n const slateEditor = useSlateStatic()\n const editorActor = useContext(EditorActorContext)\n const legacySchema = useSelector(editorActor, (s) =>\n s.context.getLegacySchema(),\n )\n const spanRef = useRef<HTMLElement>(null)\n\n /**\n * A span is considered focused if the selection is collapsed and the caret\n * is inside the span.\n */\n const focused = useSelector(editorActor, (editorActorSnapshot) => {\n const snapshot = getEditorSnapshot({\n editorActorSnapshot,\n slateEditorInstance: slateEditor,\n })\n\n if (!snapshot.context.selection) {\n return false\n }\n\n if (!isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const focusedSpan = getFocusSpan(snapshot)\n\n if (!focusedSpan) {\n return false\n }\n\n return focusedSpan.node._key === props.leaf._key\n })\n\n /**\n * A span is considered selected if editor selection is overlapping with the\n * span selection points.\n */\n const selected = useSelector(editorActor, (editorActorSnapshot) => {\n const snapshot = getEditorSnapshot({\n editorActorSnapshot,\n slateEditorInstance: slateEditor,\n })\n\n if (!snapshot.context.selection) {\n return false\n }\n\n const parent = props.children.props.parent\n const block =\n parent && isTextBlock(snapshot.context, parent) ? parent : undefined\n const spanSelection: EditorSelection = block\n ? {\n anchor: {\n path: [{_key: block._key}, 'children', {_key: props.leaf._key}],\n offset: 0,\n },\n focus: {\n path: [{_key: block._key}, 'children', {_key: props.leaf._key}],\n offset: props.leaf.text.length,\n },\n }\n : null\n\n return isOverlappingSelection(spanSelection)(snapshot)\n })\n\n const parent = props.children.props.parent\n const block = parent && slateEditor.isTextBlock(parent) ? parent : undefined\n\n const path = useMemo(\n () =>\n block\n ? [{_key: block._key}, 'children', {_key: props.leaf._key}]\n : undefined,\n [block, props.leaf._key],\n )\n\n const decoratorSchemaTypes = editorActor\n .getSnapshot()\n .context.schema.decorators.map((decorator) => decorator.name)\n\n const decorators = uniq(\n (props.leaf.marks ?? []).filter((mark) =>\n decoratorSchemaTypes.includes(mark),\n ),\n )\n\n const annotationMarkDefs = (props.leaf.marks ?? []).flatMap((mark) => {\n if (decoratorSchemaTypes.includes(mark)) {\n return []\n }\n\n const markDef = block?.markDefs?.find((markDef) => markDef._key === mark)\n\n if (markDef) {\n return [markDef]\n }\n\n return []\n })\n\n let children = props.children\n\n /**\n * Support `renderDecorator` render function for each Decorator\n */\n for (const mark of decorators) {\n const legacyDecoratorSchemaType = legacySchema.decorators.find(\n (dec) => dec.value === mark,\n )\n\n if (path && legacyDecoratorSchemaType && props.renderDecorator) {\n children = (\n <RenderDecorator\n renderDecorator={props.renderDecorator}\n editorElementRef={spanRef}\n focused={focused}\n path={path}\n selected={selected}\n schemaType={legacyDecoratorSchemaType}\n value={mark}\n type={legacyDecoratorSchemaType}\n >\n {children}\n </RenderDecorator>\n )\n }\n }\n\n /**\n * Support `renderAnnotation` render function for each Annotation\n */\n for (const annotationMarkDef of annotationMarkDefs) {\n const legacyAnnotationSchemaType = legacySchema.annotations.find(\n (t) => t.name === annotationMarkDef._type,\n )\n if (legacyAnnotationSchemaType) {\n if (block && path && props.renderAnnotation) {\n children = (\n <span ref={spanRef}>\n <RenderAnnotation\n renderAnnotation={props.renderAnnotation}\n block={block}\n editorElementRef={spanRef}\n focused={focused}\n path={path}\n selected={selected}\n schemaType={legacyAnnotationSchemaType}\n value={annotationMarkDef}\n type={legacyAnnotationSchemaType}\n >\n {children}\n </RenderAnnotation>\n </span>\n )\n } else {\n children = <span ref={spanRef}>{children}</span>\n }\n }\n }\n\n /**\n * Support `renderChild` render function for the Span itself\n */\n if (block && path && props.renderChild) {\n const child = block.children.find(\n (_child) => _child._key === props.leaf._key,\n ) // Ensure object equality\n\n if (child) {\n children = (\n <RenderChild\n renderChild={props.renderChild}\n annotations={annotationMarkDefs}\n editorElementRef={spanRef}\n focused={focused}\n path={path}\n schemaType={legacySchema.span}\n selected={selected}\n value={child}\n type={legacySchema.span}\n >\n {children}\n </RenderChild>\n )\n }\n }\n\n return (\n <span {...props.attributes} ref={spanRef}>\n {children}\n </span>\n )\n}\n\nfunction RenderAnnotation({\n renderAnnotation,\n block,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n type,\n}: {\n renderAnnotation: RenderAnnotationFunction\n} & BlockAnnotationRenderProps) {\n return renderAnnotation({\n block,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n type,\n })\n}\n\nfunction RenderDecorator({\n renderDecorator,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n type,\n}: {\n renderDecorator: RenderDecoratorFunction\n} & BlockDecoratorRenderProps) {\n return renderDecorator({\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n type,\n })\n}\n\nfunction RenderChild({\n renderChild,\n annotations,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n type,\n}: {\n renderChild: RenderChildFunction\n} & BlockChildRenderProps) {\n return renderChild({\n annotations,\n children,\n editorElementRef,\n focused,\n path,\n schemaType,\n selected,\n value,\n type,\n })\n}\n","import {useSelector} from '@xstate/react'\nimport {useContext, type CSSProperties} from 'react'\nimport type {Text} from 'slate'\nimport type {RenderLeafProps} from 'slate-react'\nimport type {\n RangeDecoration,\n RenderAnnotationFunction,\n RenderChildFunction,\n RenderDecoratorFunction,\n RenderPlaceholderFunction,\n} from '../../types/editor'\nimport {EditorActorContext} from '../editor-actor-context'\nimport {RenderSpan} from './render-span'\n\nconst PLACEHOLDER_STYLE: CSSProperties = {\n position: 'absolute',\n userSelect: 'none',\n pointerEvents: 'none',\n left: 0,\n right: 0,\n}\n\nexport function RenderLeaf(\n props: RenderLeafProps & {\n leaf: Text & {placeholder?: boolean; rangeDecoration?: RangeDecoration}\n readOnly: boolean\n renderAnnotation?: RenderAnnotationFunction\n renderChild?: RenderChildFunction\n renderDecorator?: RenderDecoratorFunction\n renderPlaceholder?: RenderPlaceholderFunction\n },\n) {\n const editorActor = useContext(EditorActorContext)\n const schema = useSelector(editorActor, (s) => s.context.schema)\n\n if (props.leaf._type !== schema.span.name) {\n return props.children\n }\n\n let renderedSpan = <RenderSpan {...props} />\n\n if (\n props.renderPlaceholder &&\n props.leaf.placeholder &&\n props.text.text === ''\n ) {\n return (\n <>\n <span style={PLACEHOLDER_STYLE} contentEditable={false}>\n {props.renderPlaceholder()}\n </span>\n {renderedSpan}\n </>\n )\n }\n\n const rangeDecoration = props.leaf.rangeDecoration\n\n if (rangeDecoration) {\n renderedSpan = rangeDecoration.component({children: renderedSpan})\n }\n\n return renderedSpan\n}\n","import type {Editable} from 'slate-react'\n\nexport type RenderTextProps = Parameters<\n NonNullable<React.ComponentProps<typeof Editable>['renderText']>\n>[0]\n\nexport function RenderText(props: RenderTextProps) {\n return (\n <span\n {...props.attributes}\n data-child-key={props.text._key}\n data-child-name={props.text._type}\n data-child-type=\"span\"\n >\n {props.children}\n </span>\n )\n}\n","import {createContext, useContext} from 'react'\nimport type {PortableTextEditor} from '../PortableTextEditor'\n\n/**\n * A React context for sharing the editor object.\n */\nexport const PortableTextEditorContext =\n createContext<PortableTextEditor | null>(null)\n\n/**\n * @deprecated Use `useEditor` to get the current editor instance.\n * @public\n * Get the current editor object from the React context.\n */\nexport const usePortableTextEditor = (): PortableTextEditor => {\n const editor = useContext(PortableTextEditorContext)\n\n if (!editor) {\n throw new Error(\n `The \\`usePortableTextEditor\\` hook must be used inside the <PortableTextEditor> component's context.`,\n )\n }\n\n return editor\n}\n","export interface KeyboardEventLike {\n key: string\n keyCode?: number\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ninterface HotKey {\n keyCode?: number | undefined\n key?: string | undefined\n altKey: boolean | null\n ctrlKey: boolean | null\n metaKey: boolean | null\n shiftKey: boolean | null\n}\n\nexport const IS_MAC =\n typeof window !== 'undefined' &&\n /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent)\n\ntype Modifier = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst modifiers: Record<string, Modifier | undefined> = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey',\n}\n\nconst aliases: Record<string, string | undefined> = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta',\n}\n\nconst keyCodes: Record<string, number | undefined> = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'escape': 27,\n ' ': 32,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'arrowleft': 37,\n 'arrowup': 38,\n 'arrowright': 39,\n 'arrowdown': 40,\n 'insert': 45,\n 'delete': 46,\n 'meta': 91,\n 'numlock': 144,\n 'scrolllock': 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'f13': 124,\n 'f14': 125,\n 'f15': 126,\n 'f16': 127,\n 'f17': 128,\n 'f18': 129,\n 'f19': 130,\n 'f20': 131,\n}\n\nexport function isHotkey(hotkey: string, event: KeyboardEventLike): boolean {\n return compareHotkey(parseHotkey(hotkey), event)\n}\n\nfunction parseHotkey(hotkey: string): HotKey {\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n const parsedHotkey: HotKey = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }\n\n // Special case to handle the `+` key since we use it as a separator.\n const hotkeySegments = hotkey.replace('++', '+add').split('+')\n\n for (const rawHotkeySegment of hotkeySegments) {\n const optional =\n rawHotkeySegment.endsWith('?') && rawHotkeySegment.length > 1\n const hotkeySegment = optional\n ? rawHotkeySegment.slice(0, -1)\n : rawHotkeySegment\n const keyName = toKeyName(hotkeySegment)\n const modifier = modifiers[keyName]\n const alias = aliases[hotkeySegment]\n const code = keyCodes[keyName]\n\n if (\n hotkeySegment.length > 1 &&\n modifier === undefined &&\n alias === undefined &&\n code === undefined\n ) {\n throw new TypeError(`Unknown modifier: \"${hotkeySegment}\"`)\n }\n\n if (hotkeySegments.length === 1 || modifier === undefined) {\n parsedHotkey.key = keyName\n parsedHotkey.keyCode = toKeyCode(hotkeySegment)\n }\n\n if (modifier !== undefined) {\n parsedHotkey[modifier] = optional ? null : true\n }\n }\n\n return parsedHotkey\n}\n\nfunction compareHotkey(\n parsedHotkey: HotKey,\n event: KeyboardEventLike,\n): boolean {\n const matchingModifiers =\n (parsedHotkey.altKey != null\n ? parsedHotkey.altKey === event.altKey\n : true) &&\n (parsedHotkey.ctrlKey != null\n ? parsedHotkey.ctrlKey === event.ctrlKey\n : true) &&\n (parsedHotkey.metaKey != null\n ? parsedHotkey.metaKey === event.metaKey\n : true) &&\n (parsedHotkey.shiftKey != null\n ? parsedHotkey.shiftKey === event.shiftKey\n : true)\n\n if (!matchingModifiers) {\n return false\n }\n\n if (parsedHotkey.keyCode !== undefined && event.keyCode !== undefined) {\n if (parsedHotkey.keyCode === 91 && event.keyCode === 93) {\n return true\n }\n\n return parsedHotkey.keyCode === event.keyCode\n }\n\n return (\n parsedHotkey.keyCode === event.keyCode ||\n parsedHotkey.key === event.key.toLowerCase()\n )\n}\n\nfunction toKeyCode(name: string): number {\n const keyName = toKeyName(name)\n const keyCode = keyCodes[keyName] ?? keyName.toUpperCase().charCodeAt(0)\n\n return keyCode\n}\n\nfunction toKeyName(name: string): string {\n const keyName = name.toLowerCase()\n\n return aliases[keyName] ?? keyName\n}\n","import type {KeyboardEvent} from 'react'\nimport type {ReactEditor} from 'slate-react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {isHotkey} from '../../internal-utils/is-hotkey'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {HotkeyOptions} from '../../types/options'\nimport type {EditorActor} from '../editor-machine'\nimport type {PortableTextEditor} from '../PortableTextEditor'\n\nconst debug = debugWithName('plugin:withHotKeys')\n\n/**\n * This plugin takes care of all hotkeys in the editor\n *\n */\nexport function createWithHotkeys(\n editorActor: EditorActor,\n portableTextEditor: PortableTextEditor,\n hotkeysFromOptions?: HotkeyOptions,\n): (editor: PortableTextSlateEditor & ReactEditor) => any {\n const reservedHotkeys = ['enter', 'tab', 'shift', 'delete', 'end']\n const activeHotkeys = hotkeysFromOptions ?? {}\n return function withHotKeys(editor: PortableTextSlateEditor & ReactEditor) {\n editor.pteWithHotKeys = (event: KeyboardEvent<HTMLDivElement>): void => {\n // Wire up custom marks hotkeys\n Object.keys(activeHotkeys).forEach((cat) => {\n if (cat === 'marks') {\n for (const hotkey in activeHotkeys[cat]) {\n if (reservedHotkeys.includes(hotkey)) {\n throw new Error(`The hotkey ${hotkey} is reserved!`)\n }\n if (isHotkey(hotkey, event.nativeEvent)) {\n event.preventDefault()\n const possibleMark = activeHotkeys[cat]\n if (possibleMark) {\n const mark = possibleMark[hotkey]\n debug(`HotKey ${hotkey} to toggle ${mark}`)\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'decorator.toggle',\n decorator: mark,\n },\n editor,\n })\n }\n }\n }\n }\n if (cat === 'custom') {\n for (const hotkey in activeHotkeys[cat]) {\n if (reservedHotkeys.includes(hotkey)) {\n throw new Error(`The hotkey ${hotkey} is reserved!`)\n }\n if (isHotkey(hotkey, event.nativeEvent)) {\n const possibleCommand = activeHotkeys[cat]\n if (possibleCommand) {\n const command = possibleCommand[hotkey]\n command(event, portableTextEditor)\n }\n }\n }\n }\n })\n }\n return editor\n }\n}\n","import {Point, type Operation, type Range} from 'slate'\n\nexport function moveRangeByOperation(\n range: Range,\n operation: Operation,\n): Range | null {\n const anchor = Point.transform(range.anchor, operation)\n const focus = Point.transform(range.focus, operation)\n\n if (anchor === null || focus === null) {\n return null\n }\n\n if (Point.equals(anchor, range.anchor) && Point.equals(focus, range.focus)) {\n return range\n }\n\n return {anchor, focus}\n}\n","import {isEqual} from 'lodash'\nimport {\n Element,\n Path,\n Range,\n type BaseRange,\n type NodeEntry,\n type Operation,\n} from 'slate'\nimport {\n and,\n assign,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} from 'xstate'\nimport {moveRangeByOperation} from '../internal-utils/move-range-by-operation'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {isEqualToEmptyEditor} from '../internal-utils/values'\nimport type {PortableTextSlateEditor, RangeDecoration} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\n\nconst slateOperationCallback: CallbackLogicFunction<\n AnyEventObject,\n {type: 'slate operation'; operation: Operation},\n {slateEditor: PortableTextSlateEditor}\n> = ({input, sendBack}) => {\n const originalApply = input.slateEditor.apply\n\n input.slateEditor.apply = (op) => {\n if (op.type !== 'set_selection') {\n sendBack({type: 'slate operation', operation: op})\n }\n\n originalApply(op)\n }\n\n return () => {\n input.slateEditor.apply = originalApply\n }\n}\n\nexport type DecoratedRange = BaseRange & {rangeDecoration: RangeDecoration}\n\nexport const rangeDecorationsMachine = setup({\n types: {\n context: {} as {\n pendingRangeDecorations: Array<RangeDecoration>\n skipSetup: boolean\n readOnly: boolean\n schema: EditorSchema\n slateEditor: PortableTextSlateEditor\n decorate: {fn: (nodeEntry: NodeEntry) => Array<BaseRange>}\n },\n input: {} as {\n rangeDecorations: Array<RangeDecoration>\n readOnly: boolean\n schema: EditorSchema\n skipSetup: boolean\n slateEditor: PortableTextSlateEditor\n },\n events: {} as\n | {\n type: 'ready'\n }\n | {\n type: 'range decorations updated'\n rangeDecorations: Array<RangeDecoration>\n }\n | {\n type: 'slate operation'\n operation: Operation\n }\n | {\n type: 'update read only'\n readOnly: boolean\n },\n },\n actions: {\n 'update pending range decorations': assign({\n pendingRangeDecorations: ({context, event}) => {\n if (event.type !== 'range decorations updated') {\n return context.pendingRangeDecorations\n }\n\n return event.rangeDecorations\n },\n }),\n 'set up initial range decorations': ({context}) => {\n const rangeDecorationState: Array<DecoratedRange> = []\n\n for (const rangeDecoration of context.pendingRangeDecorations) {\n const slateRange = toSlateRange({\n context: {\n schema: context.schema,\n value: context.slateEditor.value,\n selection: rangeDecoration.selection,\n },\n blockIndexMap: context.slateEditor.blockIndexMap,\n })\n\n if (!Range.isRange(slateRange)) {\n rangeDecoration.onMoved?.({\n newSelection: null,\n rangeDecoration,\n origin: 'local',\n })\n continue\n }\n\n rangeDecorationState.push({\n rangeDecoration,\n ...slateRange,\n })\n }\n\n context.slateEditor.decoratedRanges = rangeDecorationState\n },\n 'update range decorations': ({context, event}) => {\n if (event.type !== 'range decorations updated') {\n return\n }\n\n const rangeDecorationState: Array<DecoratedRange> = []\n\n for (const rangeDecoration of event.rangeDecorations) {\n const slateRange = toSlateRange({\n context: {\n schema: context.schema,\n value: context.slateEditor.value,\n selection: rangeDecoration.selection,\n },\n blockIndexMap: context.slateEditor.blockIndexMap,\n })\n\n if (!Range.isRange(slateRange)) {\n rangeDecoration.onMoved?.({\n newSelection: null,\n rangeDecoration,\n origin: 'local',\n })\n continue\n }\n\n rangeDecorationState.push({\n rangeDecoration,\n ...slateRange,\n })\n }\n\n context.slateEditor.decoratedRanges = rangeDecorationState\n },\n\n 'move range decorations': ({context, event}) => {\n if (event.type !== 'slate operation') {\n return\n }\n\n const rangeDecorationState: Array<DecoratedRange> = []\n\n for (const decoratedRange of context.slateEditor.decoratedRanges) {\n const slateRange = toSlateRange({\n context: {\n schema: context.schema,\n value: context.slateEditor.value,\n selection: decoratedRange.rangeDecoration.selection,\n },\n blockIndexMap: context.slateEditor.blockIndexMap,\n })\n\n if (!Range.isRange(slateRange)) {\n decoratedRange.rangeDecoration.onMoved?.({\n newSelection: null,\n rangeDecoration: decoratedRange.rangeDecoration,\n origin: 'local',\n })\n continue\n }\n\n let newRange: BaseRange | null | undefined\n\n newRange = moveRangeByOperation(slateRange, event.operation)\n if (\n (newRange && newRange !== slateRange) ||\n (newRange === null && slateRange)\n ) {\n const newRangeSelection = newRange\n ? slateRangeToSelection({\n schema: context.schema,\n editor: context.slateEditor,\n range: newRange,\n })\n : null\n\n decoratedRange.rangeDecoration.onMoved?.({\n newSelection: newRangeSelection,\n rangeDecoration: decoratedRange.rangeDecoration,\n origin: 'local',\n })\n }\n\n // If the newRange is null, it means that the range is not valid anymore and should be removed\n // If it's undefined, it means that the slateRange is still valid and should be kept\n if (newRange !== null) {\n rangeDecorationState.push({\n ...(newRange || slateRange),\n rangeDecoration: {\n ...decoratedRange.rangeDecoration,\n selection: slateRangeToSelection({\n schema: context.schema,\n editor: context.slateEditor,\n range: newRange,\n }),\n },\n })\n }\n }\n\n context.slateEditor.decoratedRanges = rangeDecorationState\n },\n 'assign readOnly': assign({\n readOnly: ({context, event}) => {\n if (event.type !== 'update read only') {\n return context.readOnly\n }\n\n return event.readOnly\n },\n }),\n 'update decorate': assign({\n decorate: ({context}) => {\n return {\n fn: createDecorate(context.schema, context.slateEditor),\n }\n },\n }),\n },\n actors: {\n 'slate operation listener': fromCallback(slateOperationCallback),\n },\n guards: {\n 'has pending range decorations': ({context}) =>\n context.pendingRangeDecorations.length > 0,\n 'has range decorations': ({context}) =>\n context.slateEditor.decoratedRanges.length > 0,\n 'has different decorations': ({context, event}) => {\n if (event.type !== 'range decorations updated') {\n return false\n }\n\n const existingRangeDecorations = context.slateEditor.decoratedRanges.map(\n (decoratedRange) => ({\n anchor: decoratedRange.rangeDecoration.selection?.anchor,\n focus: decoratedRange.rangeDecoration.selection?.focus,\n payload: decoratedRange.rangeDecoration.payload,\n }),\n )\n\n const newRangeDecorations = event.rangeDecorations.map(\n (rangeDecoration) => ({\n anchor: rangeDecoration.selection?.anchor,\n focus: rangeDecoration.selection?.focus,\n payload: rangeDecoration.payload,\n }),\n )\n\n const different = !isEqual(existingRangeDecorations, newRangeDecorations)\n\n return different\n },\n 'not read only': ({context}) => !context.readOnly,\n 'should skip setup': ({context}) => context.skipSetup,\n },\n}).createMachine({\n id: 'range decorations',\n context: ({input}) => ({\n readOnly: input.readOnly,\n pendingRangeDecorations: input.rangeDecorations,\n decoratedRanges: [],\n skipSetup: input.skipSetup,\n schema: input.schema,\n slateEditor: input.slateEditor,\n decorate: {fn: createDecorate(input.schema, input.slateEditor)},\n }),\n invoke: {\n src: 'slate operation listener',\n input: ({context}) => ({slateEditor: context.slateEditor}),\n },\n on: {\n 'update read only': {\n actions: ['assign readOnly'],\n },\n },\n initial: 'setting up',\n states: {\n 'setting up': {\n always: [\n {\n guard: and(['should skip setup', 'has pending range decorations']),\n target: 'ready',\n actions: ['set up initial range decorations', 'update decorate'],\n },\n {\n guard: 'should skip setup',\n target: 'ready',\n },\n ],\n on: {\n 'range decorations updated': {\n actions: ['update pending range decorations'],\n },\n 'ready': [\n {\n target: 'ready',\n guard: 'has pending range decorations',\n actions: ['set up initial range decorations', 'update decorate'],\n },\n {\n target: 'ready',\n },\n ],\n },\n },\n 'ready': {\n initial: 'idle',\n on: {\n 'range decorations updated': {\n target: '.idle',\n guard: 'has different decorations',\n actions: ['update range decorations', 'update decorate'],\n },\n },\n states: {\n 'idle': {\n on: {\n 'slate operation': {\n target: 'moving range decorations',\n guard: and(['has range decorations', 'not read only']),\n },\n },\n },\n 'moving range decorations': {\n entry: ['move range decorations'],\n always: {\n target: 'idle',\n },\n },\n },\n },\n },\n})\n\nfunction createDecorate(\n schema: EditorSchema,\n slateEditor: PortableTextSlateEditor,\n) {\n return function decorate([node, path]: NodeEntry): Array<BaseRange> {\n if (isEqualToEmptyEditor(slateEditor.children, schema)) {\n return [\n {\n anchor: {\n path: [0, 0],\n offset: 0,\n },\n focus: {\n path: [0, 0],\n offset: 0,\n },\n placeholder: true,\n } as BaseRange,\n ]\n }\n\n // Editor node has a path length of 0 (should never be decorated)\n if (path.length === 0) {\n return []\n }\n\n if (!Element.isElement(node) || node.children.length === 0) {\n return []\n }\n\n const blockIndex = path.at(0)\n\n if (blockIndex === undefined) {\n return []\n }\n\n return slateEditor.decoratedRanges.filter((decoratedRange) => {\n // Special case in order to only return one decoration for collapsed ranges\n if (Range.isCollapsed(decoratedRange)) {\n // Collapsed ranges should only be decorated if they are on a block child level (length 2)\n return node.children.some(\n (_, childIndex) =>\n Path.equals(decoratedRange.anchor.path, [blockIndex, childIndex]) &&\n Path.equals(decoratedRange.focus.path, [blockIndex, childIndex]),\n )\n }\n\n return (\n Range.intersection(decoratedRange, {\n anchor: {path, offset: 0},\n focus: {path, offset: 0},\n }) || Range.includes(decoratedRange, path)\n )\n })\n }\n}\n","import {createContext} from 'react'\nimport type {RelayActor} from './relay-machine'\n\nexport const RelayActorContext = createContext<RelayActor>({} as RelayActor)\n","import {Editor, Transforms} from 'slate'\nimport {ReactEditor} from 'slate-react'\nimport {setup} from 'xstate'\nimport {debugWithName} from '../internal-utils/debug'\nimport type {PortableTextSlateEditor} from '../types/editor'\n\nconst debug = debugWithName('validate selection machine')\n\nconst validateSelectionSetup = setup({\n types: {\n context: {} as {\n slateEditor: PortableTextSlateEditor\n },\n input: {} as {\n slateEditor: PortableTextSlateEditor\n },\n events: {} as {\n type: 'validate selection'\n editorElement: HTMLDivElement\n },\n },\n guards: {\n 'pending operations': ({context}) =>\n context.slateEditor.operations.length > 0,\n },\n})\n\nconst validateSelectionAction = validateSelectionSetup.createAction(\n ({context, event}) => {\n validateSelection(context.slateEditor, event.editorElement)\n },\n)\n\nexport const validateSelectionMachine = validateSelectionSetup.createMachine({\n id: 'validate selection',\n context: ({input}) => ({\n slateEditor: input.slateEditor,\n }),\n initial: 'idle',\n states: {\n idle: {\n on: {\n 'validate selection': [\n {\n guard: 'pending operations',\n target: 'waiting',\n },\n {\n actions: [validateSelectionAction],\n target: 'idle',\n },\n ],\n },\n },\n waiting: {\n after: {\n 0: [\n {\n guard: 'pending operations',\n target: '.',\n reenter: true,\n },\n {\n target: 'idle',\n actions: [validateSelectionAction],\n },\n ],\n },\n on: {\n 'validate selection': {\n target: '.',\n reenter: true,\n },\n },\n },\n },\n})\n\n// This function will handle unexpected DOM changes inside the Editable rendering,\n// and make sure that we can maintain a stable slateEditor.selection when that happens.\n//\n// For example, if this Editable is rendered inside something that might re-render\n// this component (hidden contexts) while the user is still actively changing the\n// contentEditable, this could interfere with the intermediate DOM selection,\n// which again could be picked up by ReactEditor's event listeners.\n// If that range is invalid at that point, the slate.editorSelection could be\n// set either wrong, or invalid, to which slateEditor will throw exceptions\n// that are impossible to recover properly from or result in a wrong selection.\n//\n// Also the other way around, when the ReactEditor will try to create a DOM Range\n// from the current slateEditor.selection, it may throw unrecoverable errors\n// if the current editor.selection is invalid according to the DOM.\n// If this is the case, default to selecting the top of the document, if the\n// user already had a selection.\nfunction validateSelection(\n slateEditor: PortableTextSlateEditor,\n editorElement: HTMLDivElement,\n) {\n if (!slateEditor.selection) {\n return\n }\n\n let root: Document | ShadowRoot | undefined\n\n try {\n root = ReactEditor.findDocumentOrShadowRoot(slateEditor)\n } catch {}\n\n if (!root) {\n // The editor has most likely been unmounted\n return\n }\n\n // Return if the editor isn't the active element\n if (editorElement !== root.activeElement) {\n return\n }\n const window = ReactEditor.getWindow(slateEditor)\n const domSelection = window.getSelection()\n if (!domSelection || domSelection.rangeCount === 0) {\n return\n }\n const existingDOMRange = domSelection.getRangeAt(0)\n try {\n const newDOMRange = ReactEditor.toDOMRange(\n slateEditor,\n slateEditor.selection,\n )\n if (\n newDOMRange.startOffset !== existingDOMRange.startOffset ||\n newDOMRange.endOffset !== existingDOMRange.endOffset\n ) {\n debug('DOM range out of sync, validating selection')\n // Remove all ranges temporary\n domSelection?.removeAllRanges()\n // Set the correct range\n domSelection.addRange(newDOMRange)\n }\n } catch {\n debug(`Could not resolve selection, selecting top document`)\n // Deselect the editor\n Transforms.deselect(slateEditor)\n // Select top document if there is a top block to select\n if (slateEditor.children.length > 0) {\n Transforms.select(slateEditor, Editor.start(slateEditor, []))\n }\n slateEditor.onChange()\n }\n}\n","import type {Editor, Range} from 'slate'\nimport type {EditorSelection} from '../types/editor'\n\n// Is the editor currently receiving remote changes that are being applied to the content?\nexport const IS_PROCESSING_REMOTE_CHANGES: WeakMap<Editor, boolean> =\n new WeakMap()\n\nexport const KEY_TO_SLATE_ELEMENT: WeakMap<Editor, any | undefined> =\n new WeakMap()\nexport const KEY_TO_VALUE_ELEMENT: WeakMap<Editor, any | undefined> =\n new WeakMap()\n\n// Keep object relation to slate range in the portable-text-range\nexport const SLATE_TO_PORTABLE_TEXT_RANGE = new WeakMap<\n Range,\n EditorSelection\n>()\n","import {useActorRef, useSelector} from '@xstate/react'\nimport {noop} from 'lodash'\nimport {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ClipboardEvent,\n type FocusEventHandler,\n type KeyboardEvent,\n type TextareaHTMLAttributes,\n} from 'react'\nimport {Editor, Transforms, type Text} from 'slate'\nimport {\n ReactEditor,\n Editable as SlateEditable,\n useSlate,\n type RenderElementProps,\n type RenderLeafProps,\n} from 'slate-react'\nimport {debugWithName} from '../internal-utils/debug'\nimport {getEventPosition} from '../internal-utils/event-position'\nimport {normalizeSelection} from '../internal-utils/selection'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {fromSlateValue, isEqualToEmptyEditor} from '../internal-utils/values'\nimport type {\n EditorSelection,\n OnCopyFn,\n OnPasteFn,\n RangeDecoration,\n RenderAnnotationFunction,\n RenderBlockFunction,\n RenderChildFunction,\n RenderDecoratorFunction,\n RenderListItemFunction,\n RenderPlaceholderFunction,\n RenderStyleFunction,\n ScrollSelectionIntoViewFunction,\n} from '../types/editor'\nimport type {HotkeyOptions} from '../types/options'\nimport {parseBlocks} from '../utils/parse-blocks'\nimport {RenderElement} from './components/render-element'\nimport {RenderLeaf} from './components/render-leaf'\nimport {RenderText, type RenderTextProps} from './components/render-text'\nimport {EditorActorContext} from './editor-actor-context'\nimport {usePortableTextEditor} from './hooks/usePortableTextEditor'\nimport {createWithHotkeys} from './plugins/createWithHotKeys'\nimport {rangeDecorationsMachine} from './range-decorations-machine'\nimport {RelayActorContext} from './relay-actor-context'\nimport {validateSelectionMachine} from './validate-selection-machine'\nimport {KEY_TO_VALUE_ELEMENT} from './weakMaps'\n\nconst debug = debugWithName('component:Editable')\n\n/**\n * @public\n */\nexport type PortableTextEditableProps = Omit<\n TextareaHTMLAttributes<HTMLDivElement>,\n 'onPaste' | 'onCopy' | 'onBeforeInput'\n> & {\n ref?: React.Ref<HTMLDivElement>\n hotkeys?: HotkeyOptions\n onBeforeInput?: (event: InputEvent) => void\n onPaste?: OnPasteFn\n onCopy?: OnCopyFn\n rangeDecorations?: RangeDecoration[]\n renderAnnotation?: RenderAnnotationFunction\n renderBlock?: RenderBlockFunction\n renderChild?: RenderChildFunction\n renderDecorator?: RenderDecoratorFunction\n renderListItem?: RenderListItemFunction\n renderPlaceholder?: RenderPlaceholderFunction\n renderStyle?: RenderStyleFunction\n scrollSelectionIntoView?: ScrollSelectionIntoViewFunction\n selection?: EditorSelection\n spellCheck?: boolean\n}\n\n/**\n * @public\n *\n *\n * The core component that renders the editor. Must be placed within the {@link EditorProvider} component.\n *\n * @example\n * ```tsx\n * import { PortableTextEditable, EditorProvider } from '@portabletext/editor'\n *\n * function MyComponent() {\n * return (\n * <EditorProvider>\n * <PortableTextEditable />\n * </EditorProvider>\n * )\n * }\n * ```\n * @group Components\n */\nexport const PortableTextEditable = forwardRef<\n Omit<HTMLDivElement, 'as' | 'onPaste' | 'onBeforeInput'>,\n PortableTextEditableProps\n>(function PortableTextEditable(props, forwardedRef) {\n const {\n hotkeys,\n onBlur,\n onFocus,\n onBeforeInput,\n onPaste,\n onCopy,\n onCut,\n onClick,\n onDragStart,\n onDrag,\n onDragEnd,\n onDragEnter,\n onDragOver,\n onDrop,\n onDragLeave,\n rangeDecorations,\n renderAnnotation,\n renderBlock,\n renderChild,\n renderDecorator,\n renderListItem,\n renderPlaceholder,\n renderStyle,\n selection: propsSelection,\n scrollSelectionIntoView,\n spellCheck,\n ...restProps\n } = props\n\n const portableTextEditor = usePortableTextEditor()\n const [hasInvalidValue, setHasInvalidValue] = useState(false)\n\n const editorActor = useContext(EditorActorContext)\n const relayActor = useContext(RelayActorContext)\n const readOnly = useSelector(editorActor, (s) =>\n s.matches({'edit mode': 'read only'}),\n )\n const slateEditor = useSlate()\n const validateSelectionActor = useActorRef(validateSelectionMachine, {\n input: {\n slateEditor,\n },\n })\n\n const rangeDecorationsActor = useActorRef(rangeDecorationsMachine, {\n input: {\n rangeDecorations: rangeDecorations ?? [],\n readOnly,\n schema: editorActor.getSnapshot().context.schema,\n slateEditor,\n skipSetup: !editorActor.getSnapshot().matches({setup: 'setting up'}),\n },\n })\n const decorate = useSelector(\n rangeDecorationsActor,\n (s) => s.context.decorate?.fn,\n )\n\n useEffect(() => {\n rangeDecorationsActor.send({\n type: 'update read only',\n readOnly,\n })\n }, [rangeDecorationsActor, readOnly])\n\n useEffect(() => {\n rangeDecorationsActor.send({\n type: 'range decorations updated',\n rangeDecorations: rangeDecorations ?? [],\n })\n }, [rangeDecorationsActor, rangeDecorations])\n\n // Output a minimal React editor inside Editable when in readOnly mode.\n // NOTE: make sure all the plugins used here can be safely run over again at any point.\n // There will be a problem if they redefine editor methods and then calling the original method within themselves.\n useMemo(() => {\n // React/UI-specific plugins\n if (readOnly) {\n return slateEditor\n }\n const withHotKeys = createWithHotkeys(\n editorActor,\n portableTextEditor,\n hotkeys,\n )\n\n return withHotKeys(slateEditor)\n }, [editorActor, hotkeys, portableTextEditor, readOnly, slateEditor])\n\n const renderElement = useCallback(\n (eProps: RenderElementProps) => (\n <RenderElement\n {...eProps}\n readOnly={readOnly}\n renderBlock={renderBlock}\n renderChild={renderChild}\n renderListItem={renderListItem}\n renderStyle={renderStyle}\n spellCheck={spellCheck}\n />\n ),\n [\n spellCheck,\n readOnly,\n renderBlock,\n renderChild,\n renderListItem,\n renderStyle,\n ],\n )\n\n const renderLeaf = useCallback(\n (\n leafProps: RenderLeafProps & {\n leaf: Text & {placeholder?: boolean; rangeDecoration?: RangeDecoration}\n },\n ) => (\n <RenderLeaf\n {...leafProps}\n readOnly={readOnly}\n renderAnnotation={renderAnnotation}\n renderChild={renderChild}\n renderDecorator={renderDecorator}\n renderPlaceholder={renderPlaceholder}\n />\n ),\n [\n readOnly,\n renderAnnotation,\n renderChild,\n renderDecorator,\n renderPlaceholder,\n ],\n )\n\n const renderText = useCallback(\n (props: RenderTextProps) => <RenderText {...props} />,\n [],\n )\n\n const restoreSelectionFromProps = useCallback(() => {\n if (propsSelection) {\n debug(`Selection from props ${JSON.stringify(propsSelection)}`)\n const normalizedSelection = normalizeSelection(\n propsSelection,\n fromSlateValue(\n slateEditor.children,\n editorActor.getSnapshot().context.schema.block.name,\n ),\n )\n if (normalizedSelection !== null) {\n debug(\n `Normalized selection from props ${JSON.stringify(normalizedSelection)}`,\n )\n const slateRange = toSlateRange({\n context: {\n schema: editorActor.getSnapshot().context.schema,\n value: slateEditor.value,\n selection: normalizedSelection,\n },\n blockIndexMap: slateEditor.blockIndexMap,\n })\n if (slateRange) {\n Transforms.select(slateEditor, slateRange)\n // Output selection here in those cases where the editor selection was the same, and there are no set_selection operations made.\n // The selection is usually automatically emitted to change$ by the withPortableTextSelections plugin whenever there is a set_selection operation applied.\n if (!slateEditor.operations.some((o) => o.type === 'set_selection')) {\n editorActor.send({\n type: 'update selection',\n selection: normalizedSelection,\n })\n }\n slateEditor.onChange()\n }\n }\n }\n }, [editorActor, propsSelection, slateEditor])\n\n // Restore selection from props when the editor has been initialized properly with it's value\n useEffect(() => {\n const onReady = editorActor.on('ready', () => {\n rangeDecorationsActor.send({\n type: 'ready',\n })\n\n restoreSelectionFromProps()\n })\n\n const onInvalidValue = editorActor.on('invalid value', () => {\n setHasInvalidValue(true)\n })\n\n const onValueChanged = editorActor.on('value changed', () => {\n setHasInvalidValue(false)\n })\n\n return () => {\n onReady.unsubscribe()\n onInvalidValue.unsubscribe()\n onValueChanged.unsubscribe()\n }\n }, [rangeDecorationsActor, editorActor, restoreSelectionFromProps])\n\n // Restore selection from props when it changes\n useEffect(() => {\n if (propsSelection && !hasInvalidValue) {\n restoreSelectionFromProps()\n }\n }, [hasInvalidValue, propsSelection, restoreSelectionFromProps])\n\n // Handle from props onCopy function\n const handleCopy = useCallback(\n (event: ClipboardEvent<HTMLDivElement>): void | ReactEditor => {\n if (onCopy) {\n const result = onCopy(event)\n // CopyFn may return something to avoid doing default stuff\n if (result !== undefined) {\n event.preventDefault()\n }\n } else if (event.nativeEvent.clipboardData) {\n // Prevent Slate from handling the event\n event.stopPropagation()\n event.preventDefault()\n\n const selection = slateEditor.selection\n ? slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor: slateEditor,\n range: slateEditor.selection,\n })\n : undefined\n const position = selection ? {selection} : undefined\n\n if (!position) {\n console.warn('Could not find position for copy event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'clipboard.copy',\n originEvent: {\n dataTransfer: event.nativeEvent.clipboardData,\n },\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [onCopy, editorActor, slateEditor],\n )\n\n const handleCut = useCallback(\n (event: ClipboardEvent<HTMLDivElement>) => {\n if (onCut) {\n const result = onCut(event)\n // CutFn may return something to avoid doing default stuff\n if (result !== undefined) {\n event.preventDefault()\n }\n } else if (event.nativeEvent.clipboardData) {\n // Prevent Slate from handling the event\n event.stopPropagation()\n event.preventDefault()\n\n const selection = editorActor.getSnapshot().context.selection\n const position = selection ? {selection} : undefined\n\n if (!position) {\n console.warn('Could not find position for cut event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'clipboard.cut',\n originEvent: {\n dataTransfer: event.nativeEvent.clipboardData,\n },\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [onCut, editorActor, slateEditor],\n )\n\n // Handle incoming pasting events in the editor\n const handlePaste = useCallback(\n (event: ClipboardEvent<HTMLDivElement>): Promise<void> | void => {\n const value = fromSlateValue(\n slateEditor.children,\n editorActor.getSnapshot().context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(slateEditor),\n )\n const ptRange = slateEditor.selection\n ? slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor: slateEditor,\n range: slateEditor.selection,\n })\n : null\n const path = ptRange?.focus.path || []\n const onPasteResult = onPaste?.({\n event,\n value,\n path,\n schemaTypes: portableTextEditor.schemaTypes,\n })\n\n if (onPasteResult || !slateEditor.selection) {\n event.preventDefault()\n\n // Resolve it as promise (can be either async promise or sync return value)\n relayActor.send({type: 'loading'})\n\n Promise.resolve(onPasteResult)\n .then((result) => {\n debug('Custom paste function from client resolved', result)\n\n if (!result || !result.insert) {\n debug('No result from custom paste handler, pasting normally')\n\n const selection = editorActor.getSnapshot().context.selection\n const position = selection ? {selection} : undefined\n\n if (!position) {\n console.warn('Could not find position for paste event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'clipboard.paste',\n originEvent: {\n dataTransfer: event.clipboardData,\n },\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n } else if (result.insert) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'insert.blocks',\n blocks: parseBlocks({\n context: {\n keyGenerator:\n editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n blocks: result.insert,\n options: {\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n }),\n placement: 'auto',\n },\n editor: slateEditor,\n })\n } else {\n console.warn(\n 'Your onPaste function returned something unexpected:',\n result,\n )\n }\n })\n .catch((error) => {\n console.warn(error)\n\n return error\n })\n .finally(() => {\n relayActor.send({type: 'done loading'})\n })\n } else if (event.nativeEvent.clipboardData) {\n // Prevent Slate from handling the event\n event.preventDefault()\n event.stopPropagation()\n\n const selection = editorActor.getSnapshot().context.selection\n const position = selection ? {selection} : undefined\n\n if (!position) {\n console.warn('Could not find position for paste event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'clipboard.paste',\n originEvent: {\n dataTransfer: event.nativeEvent.clipboardData,\n },\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n\n debug('No result from custom paste handler, pasting normally')\n },\n [editorActor, onPaste, portableTextEditor, relayActor, slateEditor],\n )\n\n const handleOnFocus: FocusEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (onFocus) {\n onFocus(event)\n }\n\n if (!event.isDefaultPrevented()) {\n relayActor.send({type: 'focused', event})\n\n if (\n !slateEditor.selection &&\n isEqualToEmptyEditor(\n slateEditor.children,\n editorActor.getSnapshot().context.schema,\n )\n ) {\n Transforms.select(slateEditor, Editor.start(slateEditor, []))\n slateEditor.onChange()\n }\n }\n },\n [editorActor, onFocus, relayActor, slateEditor],\n )\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (onClick) {\n onClick(event)\n }\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n const position = getEventPosition({\n editorActor,\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (position) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'mouse.click',\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [onClick, editorActor, slateEditor],\n )\n\n const handleOnBlur: FocusEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (onBlur) {\n onBlur(event)\n }\n if (!event.isPropagationStopped()) {\n relayActor.send({type: 'blurred', event})\n }\n },\n [relayActor, onBlur],\n )\n\n const handleOnBeforeInput = useCallback(\n (event: InputEvent) => {\n if (onBeforeInput) {\n onBeforeInput(event)\n }\n },\n [onBeforeInput],\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (props.onKeyDown) {\n props.onKeyDown(event)\n }\n if (!event.isDefaultPrevented()) {\n slateEditor.pteWithHotKeys(event)\n }\n if (!event.isDefaultPrevented()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'keyboard.keydown',\n originEvent: {\n key: event.key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n },\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [props, editorActor, slateEditor],\n )\n\n const handleKeyUp = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (props.onKeyUp) {\n props.onKeyUp(event)\n }\n if (!event.isDefaultPrevented()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'keyboard.keyup',\n originEvent: {\n key: event.key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n },\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [props, editorActor, slateEditor],\n )\n\n const scrollSelectionIntoViewToSlate = useMemo(() => {\n // Use slate-react default scroll into view\n if (scrollSelectionIntoView === undefined) {\n return undefined\n }\n // Disable scroll into view totally\n if (scrollSelectionIntoView === null) {\n return noop\n }\n // Translate PortableTextEditor prop fn to Slate plugin fn\n return (_editor: ReactEditor, domRange: Range) => {\n scrollSelectionIntoView(portableTextEditor, domRange)\n }\n }, [portableTextEditor, scrollSelectionIntoView])\n\n useEffect(() => {\n const window = ReactEditor.getWindow(slateEditor)\n\n const onDragEnd = () => {\n editorActor.send({type: 'dragend'})\n }\n const onDrop = () => {\n editorActor.send({type: 'drop'})\n }\n\n window.document.addEventListener('dragend', onDragEnd)\n window.document.addEventListener('drop', onDrop)\n\n return () => {\n window.document.removeEventListener('dragend', onDragEnd)\n window.document.removeEventListener('drop', onDrop)\n }\n }, [slateEditor, editorActor])\n\n const handleDragStart = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragStart?.(event)\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n const position = getEventPosition({\n editorActor,\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for dragstart event')\n return\n }\n\n editorActor.send({\n type: 'dragstart',\n origin: position,\n })\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragstart',\n originEvent: {\n clientX: event.clientX,\n clientY: event.clientY,\n dataTransfer: event.dataTransfer,\n },\n position,\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n return true\n },\n [onDragStart, editorActor, slateEditor],\n )\n\n const handleDrag = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDrag?.(event)\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n const position = getEventPosition({\n editorActor,\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.drag',\n originEvent: {\n dataTransfer: event.dataTransfer,\n },\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n return true\n },\n [onDrag, editorActor, slateEditor],\n )\n\n const handleDragEnd = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragEnd?.(event)\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragend',\n originEvent: {\n dataTransfer: event.dataTransfer,\n },\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n return true\n },\n [onDragEnd, editorActor, slateEditor],\n )\n\n const handleDragEnter = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragEnter?.(event)\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n const position = getEventPosition({\n editorActor,\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragenter',\n originEvent: {\n dataTransfer: event.dataTransfer,\n },\n position,\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n return true\n },\n [onDragEnter, editorActor, slateEditor],\n )\n\n const handleDragOver = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragOver?.(event)\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n const position = getEventPosition({\n editorActor,\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragover',\n originEvent: {\n dataTransfer: event.dataTransfer,\n },\n dragOrigin: editorActor.getSnapshot().context.internalDrag?.origin,\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n\n // Prevent Slate from handling the event\n return true\n },\n [onDragOver, editorActor, slateEditor],\n )\n\n const handleDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDrop?.(event)\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n const position = getEventPosition({\n editorActor,\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for drop event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.drop',\n originEvent: {\n dataTransfer: event.dataTransfer,\n },\n dragOrigin: editorActor.getSnapshot().context.internalDrag?.origin,\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n\n // Prevent Slate from handling the event\n return true\n },\n [onDrop, editorActor, slateEditor],\n )\n\n const handleDragLeave = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragLeave?.(event)\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n const position = getEventPosition({\n editorActor,\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragleave',\n originEvent: {\n dataTransfer: event.dataTransfer,\n },\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n return true\n },\n [onDragLeave, editorActor, slateEditor],\n )\n\n const callbackRef = useCallback(\n (editorElement: HTMLDivElement | null) => {\n if (typeof forwardedRef === 'function') {\n forwardedRef(editorElement)\n } else if (forwardedRef) {\n forwardedRef.current = editorElement\n }\n\n if (editorElement) {\n // Observe mutations (child list and subtree) to this component's DOM,\n // and make sure the editor selection is valid when that happens.\n const mutationObserver = new MutationObserver(() => {\n validateSelectionActor.send({\n type: 'validate selection',\n editorElement,\n })\n })\n\n mutationObserver.observe(editorElement, {\n attributeOldValue: false,\n attributes: false,\n characterData: false,\n childList: true,\n subtree: true,\n })\n\n return () => {\n mutationObserver.disconnect()\n }\n }\n },\n [forwardedRef, validateSelectionActor],\n )\n\n if (!portableTextEditor) {\n return null\n }\n\n return hasInvalidValue ? null : (\n <SlateEditable\n {...restProps}\n ref={callbackRef}\n data-read-only={readOnly}\n autoFocus={false}\n className={restProps.className || 'pt-editable'}\n decorate={decorate}\n onBlur={handleOnBlur}\n onCopy={handleCopy}\n onCut={handleCut}\n onClick={handleClick}\n onDOMBeforeInput={handleOnBeforeInput}\n onDragStart={handleDragStart}\n onDrag={handleDrag}\n onDragEnd={handleDragEnd}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onDragLeave={handleDragLeave}\n onFocus={handleOnFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onPaste={handlePaste}\n readOnly={readOnly}\n // We have implemented our own placeholder logic with decorations.\n // This 'renderPlaceholder' should not be used.\n renderPlaceholder={undefined}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n renderText={renderText}\n scrollSelectionIntoView={scrollSelectionIntoViewToSlate}\n />\n )\n})\n\nPortableTextEditable.displayName = 'ForwardRef(PortableTextEditable)'\n","/**\n * Copy/pasted from https://github.com/statelyai/xstate/blob/main/packages/xstate-react/src/stopRootWithRehydration.ts\n * and renamed to `stopActor`\n */\n\nimport type {AnyActorRef, Snapshot} from 'xstate'\n\nconst forEachActor = (\n actorRef: AnyActorRef,\n callback: (ref: AnyActorRef) => void,\n) => {\n callback(actorRef)\n const children = actorRef.getSnapshot().children\n if (children) {\n Object.values(children).forEach((child) => {\n forEachActor(child as AnyActorRef, callback)\n })\n }\n}\n\nexport function stopActor(actorRef: AnyActorRef) {\n // persist snapshot here in a custom way allows us to persist inline actors and to preserve actor references\n // we do it to avoid setState in useEffect when the effect gets \"reconnected\"\n // this currently only happens in Strict Effects but it simulates the Offscreen aka Activity API\n // it also just allows us to end up with a somewhat more predictable behavior for the users\n const persistedSnapshots: Array<[AnyActorRef, Snapshot<unknown>]> = []\n forEachActor(actorRef, (ref) => {\n persistedSnapshots.push([ref, ref.getSnapshot()])\n // muting observers allow us to avoid `useSelector` from being notified about the stopped snapshot\n // React reconnects its subscribers (from the useSyncExternalStore) on its own\n // and userland subscibers should basically always do the same anyway\n // as each subscription should have its own cleanup logic and that should be called each such reconnect\n ;(ref as any).observers = new Set()\n })\n const systemSnapshot = actorRef.system.getSnapshot?.()\n\n actorRef.stop()\n ;(actorRef.system as any)._snapshot = systemSnapshot\n persistedSnapshots.forEach(([ref, snapshot]) => {\n ;(ref as any)._processingStatus = 0\n ;(ref as any)._snapshot = snapshot\n })\n}\n","import {defineConverter} from './converter.types'\n\nexport const converterJson = defineConverter({\n mimeType: 'application/json',\n serialize: ({snapshot, event}) => {\n const portableTextConverter = snapshot.context.converters.find(\n (converter) => converter.mimeType === 'application/x-portable-text',\n )\n\n if (!portableTextConverter) {\n return {\n type: 'serialization.failure',\n mimeType: 'application/json',\n originEvent: event.originEvent,\n reason: 'No application/x-portable-text Converter found',\n }\n }\n\n const serializationEvent = portableTextConverter.serialize({\n snapshot,\n event,\n })\n\n return {\n ...serializationEvent,\n mimeType: 'application/json',\n originEvent: event.originEvent,\n }\n },\n deserialize: ({snapshot, event}) => {\n const portableTextConverter = snapshot.context.converters.find(\n (converter) => converter.mimeType === 'application/x-portable-text',\n )\n\n if (!portableTextConverter) {\n return {\n type: 'deserialization.failure',\n mimeType: 'application/json',\n reason: 'No application/x-portable-text Converter found',\n }\n }\n\n const deserializationEvent = portableTextConverter.deserialize({\n snapshot,\n event,\n })\n\n return {\n ...deserializationEvent,\n mimeType: 'application/json',\n }\n },\n})\n","import {getSelectedValue} from '../selectors/selector.get-selected-value'\nimport {parseBlock} from '../utils/parse-blocks'\nimport {defineConverter} from './converter.types'\n\nexport const converterPortableText = defineConverter({\n mimeType: 'application/x-portable-text',\n serialize: ({snapshot, event}) => {\n const selection = snapshot.context.selection\n\n if (!selection) {\n return {\n type: 'serialization.failure',\n mimeType: 'application/x-portable-text',\n originEvent: event.originEvent,\n reason: 'No selection',\n }\n }\n\n const blocks = getSelectedValue(snapshot)\n\n if (blocks.length === 0) {\n return {\n type: 'serialization.failure',\n mimeType: 'application/x-portable-text',\n reason: 'No blocks serialized',\n originEvent: event.originEvent,\n }\n }\n\n return {\n type: 'serialization.success',\n data: JSON.stringify(blocks),\n mimeType: 'application/x-portable-text',\n originEvent: event.originEvent,\n }\n },\n deserialize: ({snapshot, event}) => {\n const blocks = JSON.parse(event.data)\n\n if (!Array.isArray(blocks)) {\n return {\n type: 'deserialization.failure',\n mimeType: 'application/x-portable-text',\n reason: 'Data is not an array',\n }\n }\n\n const parsedBlocks = blocks.flatMap((block) => {\n const parsedBlock = parseBlock({\n context: snapshot.context,\n block,\n options: {\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n })\n return parsedBlock ? [parsedBlock] : []\n })\n\n if (parsedBlocks.length === 0 && blocks.length > 0) {\n return {\n type: 'deserialization.failure',\n mimeType: 'application/x-portable-text',\n reason: 'No blocks were parsed',\n }\n }\n\n return {\n type: 'deserialization.success',\n data: parsedBlocks,\n mimeType: 'application/x-portable-text',\n }\n },\n})\n","import {htmlToBlocks} from '@portabletext/block-tools'\nimport {toHTML} from '@portabletext/to-html'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {getSelectedValue} from '../selectors/selector.get-selected-value'\nimport type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {parseBlock} from '../utils/parse-blocks'\nimport {defineConverter} from './converter.types'\n\nexport function createConverterTextHtml(\n legacySchema: PortableTextMemberSchemaTypes,\n) {\n return defineConverter({\n mimeType: 'text/html',\n serialize: ({snapshot, event}) => {\n const selection = snapshot.context.selection\n\n if (!selection) {\n return {\n type: 'serialization.failure',\n mimeType: 'text/html',\n originEvent: event.originEvent,\n reason: 'No selection',\n }\n }\n\n const blocks = getSelectedValue(snapshot)\n\n const html = toHTML(blocks, {\n onMissingComponent: false,\n components: {\n unknownType: ({children}) =>\n children !== undefined ? `${children}` : '',\n },\n })\n\n if (html === '') {\n return {\n type: 'serialization.failure',\n mimeType: 'text/html',\n originEvent: event.originEvent,\n reason: 'Serialized HTML is empty',\n }\n }\n\n return {\n type: 'serialization.success',\n data: html,\n mimeType: 'text/html',\n originEvent: event.originEvent,\n }\n },\n deserialize: ({snapshot, event}) => {\n const blocks = htmlToBlocks(event.data, legacySchema.portableText, {\n keyGenerator: snapshot.context.keyGenerator,\n unstable_whitespaceOnPasteMode:\n legacySchema.block.options.unstable_whitespaceOnPasteMode,\n }) as Array<PortableTextBlock>\n\n const parsedBlocks = blocks.flatMap((block) => {\n const parsedBlock = parseBlock({\n context: snapshot.context,\n block,\n options: {\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n })\n return parsedBlock ? [parsedBlock] : []\n })\n\n if (parsedBlocks.length === 0) {\n return {\n type: 'deserialization.failure',\n mimeType: 'text/html',\n reason: 'No blocks deserialized',\n }\n }\n\n return {\n type: 'deserialization.success',\n data: parsedBlocks,\n mimeType: 'text/html',\n }\n },\n })\n}\n","import {htmlToBlocks} from '@portabletext/block-tools'\nimport {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {getSelectedValue} from '../selectors/selector.get-selected-value'\nimport type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {parseBlock} from '../utils/parse-blocks'\nimport {defineConverter} from './converter.types'\n\nexport function createConverterTextPlain(\n legacySchema: PortableTextMemberSchemaTypes,\n) {\n return defineConverter({\n mimeType: 'text/plain',\n serialize: ({snapshot, event}) => {\n const selection = snapshot.context.selection\n\n if (!selection) {\n return {\n type: 'serialization.failure',\n mimeType: 'text/plain',\n originEvent: event.originEvent,\n reason: 'No selection',\n }\n }\n\n const blocks = getSelectedValue(snapshot)\n\n const data = blocks\n .map((block) => {\n if (isTextBlock(snapshot.context, block)) {\n return block.children\n .map((child) => {\n if (child._type === snapshot.context.schema.span.name) {\n return child.text\n }\n\n return event.originEvent === 'drag.dragstart'\n ? `[${\n snapshot.context.schema.inlineObjects.find(\n (inlineObjectType) =>\n inlineObjectType.name === child._type,\n )?.title ?? 'Object'\n }]`\n : ''\n })\n .join('')\n }\n\n return event.originEvent === 'drag.dragstart'\n ? `[${\n snapshot.context.schema.blockObjects.find(\n (blockObjectType) => blockObjectType.name === block._type,\n )?.title ?? 'Object'\n }]`\n : ''\n })\n .filter((block) => block !== '')\n .join('\\n\\n')\n\n return {\n type: 'serialization.success',\n data,\n mimeType: 'text/plain',\n originEvent: event.originEvent,\n }\n },\n deserialize: ({snapshot, event}) => {\n const html = escapeHtml(event.data)\n .split(/\\n{2,}/)\n .map((line) =>\n line\n ? `<p>${line.replace(/(?:\\r\\n|\\r|\\n)/g, '<br/>')}</p>`\n : '<p></p>',\n )\n .join('')\n\n const textToHtml = `<html><body>${html}</body></html>`\n\n const blocks = htmlToBlocks(textToHtml, legacySchema.portableText, {\n keyGenerator: snapshot.context.keyGenerator,\n }) as Array<PortableTextBlock>\n\n const parsedBlocks = blocks.flatMap((block) => {\n const parsedBlock = parseBlock({\n context: snapshot.context,\n block,\n options: {\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n })\n return parsedBlock ? [parsedBlock] : []\n })\n\n if (parsedBlocks.length === 0) {\n return {\n type: 'deserialization.failure',\n mimeType: 'text/plain',\n reason: 'No blocks deserialized',\n }\n }\n\n return {\n type: 'deserialization.success',\n data: parsedBlocks,\n mimeType: 'text/plain',\n }\n },\n })\n}\n\nconst entityMap: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;',\n}\n\nfunction escapeHtml(str: string) {\n return String(str).replace(/[&<>\"'`=/]/g, (s: string) => entityMap[s])\n}\n","import type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {converterJson} from './converter.json'\nimport {converterPortableText} from './converter.portable-text'\nimport {createConverterTextHtml} from './converter.text-html'\nimport {createConverterTextPlain} from './converter.text-plain'\n\nexport function createCoreConverters(\n legacySchema: PortableTextMemberSchemaTypes,\n) {\n return [\n converterJson,\n converterPortableText,\n createConverterTextHtml(legacySchema),\n createConverterTextPlain(legacySchema),\n ]\n}\n","import {Schema} from '@sanity/schema'\n\nexport function compileType(rawType: any) {\n return Schema.compile({\n name: 'blockTypeSchema',\n types: [rawType],\n }).get(rawType.name)\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\n\n// Maps for each list type, keeping track of the current list count for each\n// level.\nconst levelIndexMaps = new Map<string, Map<number, number>>()\n\n/**\n * Mutates the maps in place.\n */\nexport function buildIndexMaps(\n context: Pick<EditorContext, 'schema' | 'value'>,\n {\n blockIndexMap,\n listIndexMap,\n }: {\n blockIndexMap: Map<string, number>\n listIndexMap: Map<string, number>\n },\n): void {\n blockIndexMap.clear()\n listIndexMap.clear()\n levelIndexMaps.clear()\n\n let previousListItem:\n | {\n listItem: string\n level: number\n }\n | undefined\n\n for (let blockIndex = 0; blockIndex < context.value.length; blockIndex++) {\n const block = context.value.at(blockIndex)\n\n if (block === undefined) {\n continue\n }\n\n blockIndexMap.set(block._key, blockIndex)\n\n // Clear the state if we encounter a non-text block\n if (!isTextBlock(context, block)) {\n levelIndexMaps.clear()\n previousListItem = undefined\n\n continue\n }\n\n // Clear the state if we encounter a non-list text block\n if (block.listItem === undefined || block.level === undefined) {\n levelIndexMaps.clear()\n previousListItem = undefined\n\n continue\n }\n\n // If we encounter a new list item, we set the initial index to 1 for the\n // list type on that level.\n if (!previousListItem) {\n const listIndex = 1\n const levelIndexMap =\n levelIndexMaps.get(block.listItem) ?? new Map<number, number>()\n levelIndexMap.set(block.level, listIndex)\n levelIndexMaps.set(block.listItem, levelIndexMap)\n\n listIndexMap.set(block._key, listIndex)\n\n previousListItem = {\n listItem: block.listItem,\n level: block.level,\n }\n\n continue\n }\n\n // If the previous list item is of the same type but on a lower level, we\n // need to reset the level index map for that type.\n if (\n previousListItem.listItem === block.listItem &&\n previousListItem.level < block.level\n ) {\n const listIndex = 1\n const levelIndexMap =\n levelIndexMaps.get(block.listItem) ?? new Map<number, number>()\n levelIndexMap.set(block.level, listIndex)\n levelIndexMaps.set(block.listItem, levelIndexMap)\n\n listIndexMap.set(block._key, listIndex)\n\n previousListItem = {\n listItem: block.listItem,\n level: block.level,\n }\n\n continue\n }\n\n // Reset other list types at current level and deeper\n levelIndexMaps.forEach((levelIndexMap, listItem) => {\n if (listItem === block.listItem) {\n return\n }\n\n // Reset all levels that are >= current level\n const levelsToDelete: number[] = []\n\n levelIndexMap.forEach((_, level) => {\n if (level >= block.level!) {\n levelsToDelete.push(level)\n }\n })\n\n levelsToDelete.forEach((level) => {\n levelIndexMap.delete(level)\n })\n })\n\n const levelIndexMap =\n levelIndexMaps.get(block.listItem) ?? new Map<number, number>()\n const levelCounter = levelIndexMap.get(block.level) ?? 0\n levelIndexMap.set(block.level, levelCounter + 1)\n levelIndexMaps.set(block.listItem, levelIndexMap)\n\n listIndexMap.set(block._key, levelCounter + 1)\n\n previousListItem = {\n listItem: block.listItem,\n level: block.level,\n }\n }\n}\n","import type {PortableTextSpan} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\n\nexport function createPlaceholderBlock(\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>,\n) {\n return {\n _type: context.schema.block.name,\n _key: context.keyGenerator(),\n style: context.schema.styles[0].name ?? 'normal',\n markDefs: [],\n children: [\n {\n _type: context.schema.span.name,\n _key: context.keyGenerator(),\n text: '',\n marks: [],\n } as PortableTextSpan,\n ],\n }\n}\n","import type {PortableTextSpan} from '@sanity/types'\nimport {Node, Path} from 'slate'\nimport type {PortableTextSlateEditor} from '../types/editor'\n\nexport function getPreviousSpan({\n editor,\n blockPath,\n spanPath,\n}: {\n editor: PortableTextSlateEditor\n blockPath: Path\n spanPath: Path\n}): PortableTextSpan | undefined {\n let previousSpan: PortableTextSpan | undefined\n\n for (const [child, childPath] of Node.children(editor, blockPath, {\n reverse: true,\n })) {\n if (!editor.isTextSpan(child)) {\n continue\n }\n\n if (Path.isBefore(childPath, spanPath)) {\n previousSpan = child\n break\n }\n }\n\n return previousSpan\n}\n\nexport function getNextSpan({\n editor,\n blockPath,\n spanPath,\n}: {\n editor: PortableTextSlateEditor\n blockPath: Path\n spanPath: Path\n}): PortableTextSpan | undefined {\n let nextSpan: PortableTextSpan | undefined\n\n for (const [child, childPath] of Node.children(editor, blockPath)) {\n if (!editor.isTextSpan(child)) {\n continue\n }\n\n if (Path.isAfter(childPath, spanPath)) {\n nextSpan = child\n break\n }\n }\n\n return nextSpan\n}\n","import type {Editor} from 'slate'\n\nconst IS_NORMALIZING_NODE: WeakMap<Editor, boolean | undefined> = new WeakMap()\n\nexport function withNormalizeNode(editor: Editor, fn: () => void) {\n const prev = IS_NORMALIZING_NODE.get(editor)\n IS_NORMALIZING_NODE.set(editor, true)\n fn()\n IS_NORMALIZING_NODE.set(editor, prev)\n}\n\nexport function isNormalizingNode(editor: Editor) {\n return IS_NORMALIZING_NODE.get(editor) ?? false\n}\n","import type {Editor} from 'slate'\nimport {IS_PROCESSING_REMOTE_CHANGES} from './weakMaps'\n\nexport function withRemoteChanges(editor: Editor, fn: () => void): void {\n const prev = isChangingRemotely(editor) || false\n IS_PROCESSING_REMOTE_CHANGES.set(editor, true)\n fn()\n IS_PROCESSING_REMOTE_CHANGES.set(editor, prev)\n}\n\nexport function isChangingRemotely(editor: Editor): boolean | undefined {\n return IS_PROCESSING_REMOTE_CHANGES.get(editor)\n}\n","import type {Editor} from 'slate'\n\nconst IS_UDOING: WeakMap<Editor, boolean | undefined> = new WeakMap()\nconst IS_REDOING: WeakMap<Editor, boolean | undefined> = new WeakMap()\n\nexport function withUndoing(editor: Editor, fn: () => void) {\n const prev = isUndoing(editor)\n IS_UDOING.set(editor, true)\n fn()\n IS_UDOING.set(editor, prev)\n}\n\nexport function isUndoing(editor: Editor) {\n return IS_UDOING.get(editor) ?? false\n}\n\nexport function setIsUndoing(editor: Editor, isUndoing: boolean) {\n IS_UDOING.set(editor, isUndoing)\n}\n\nexport function withRedoing(editor: Editor, fn: () => void) {\n const prev = isRedoing(editor)\n IS_REDOING.set(editor, true)\n fn()\n IS_REDOING.set(editor, prev)\n}\n\nexport function isRedoing(editor: Editor) {\n return IS_REDOING.get(editor) ?? false\n}\n\nexport function setIsRedoing(editor: Editor, isRedoing: boolean) {\n IS_REDOING.set(editor, isRedoing)\n}\n","/**\n *\n * This plugin will change Slate's default marks model (every prop is a mark) with the Portable Text model (marks is an array of strings on prop .marks).\n *\n */\n\nimport {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport {isEqual, uniq} from 'lodash'\nimport {Editor, Element, Node, Path, Range, Text, Transforms} from 'slate'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {getNextSpan, getPreviousSpan} from '../../internal-utils/sibling-utils'\nimport type {BehaviorOperationImplementation} from '../../operations/behavior.operations'\nimport {getActiveDecorators} from '../../selectors/selector.get-active-decorators'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {getEditorSnapshot} from '../editor-selector'\nimport {withNormalizeNode} from '../with-normalizing-node'\nimport {isChangingRemotely} from '../withChanges'\nimport {isRedoing, isUndoing} from '../withUndoRedo'\n\nconst debug = debugWithName('plugin:withPortableTextMarkModel')\n\nexport function createWithPortableTextMarkModel(\n editorActor: EditorActor,\n): (editor: PortableTextSlateEditor) => PortableTextSlateEditor {\n return function withPortableTextMarkModel(editor: PortableTextSlateEditor) {\n const {apply, normalizeNode} = editor\n const decorators = editorActor\n .getSnapshot()\n .context.schema.decorators.map((t) => t.name)\n\n // Extend Slate's default normalization. Merge spans with same set of .marks when doing merge_node operations, and clean up markDefs / marks\n editor.normalizeNode = (nodeEntry) => {\n const [node, path] = nodeEntry\n\n if (editor.isTextBlock(node)) {\n const children = Node.children(editor, path)\n\n for (const [child, childPath] of children) {\n const nextNode = node.children[childPath[1] + 1]\n\n if (\n editor.isTextSpan(child) &&\n editor.isTextSpan(nextNode) &&\n child.marks?.every((mark) => nextNode.marks?.includes(mark)) &&\n nextNode.marks?.every((mark) => child.marks?.includes(mark))\n ) {\n debug(\n 'Merging spans',\n JSON.stringify(child, null, 2),\n JSON.stringify(nextNode, null, 2),\n )\n withNormalizeNode(editor, () => {\n Transforms.mergeNodes(editor, {\n at: [childPath[0], childPath[1] + 1],\n voids: true,\n })\n })\n return\n }\n }\n }\n\n /**\n * Add missing .markDefs to block nodes\n */\n if (editor.isTextBlock(node) && !Array.isArray(node.markDefs)) {\n debug('Adding .markDefs to block node')\n withNormalizeNode(editor, () => {\n Transforms.setNodes(editor, {markDefs: []}, {at: path})\n })\n return\n }\n\n /**\n * Add missing .marks to span nodes\n */\n if (editor.isTextSpan(node) && !Array.isArray(node.marks)) {\n debug('Adding .marks to span node')\n withNormalizeNode(editor, () => {\n Transforms.setNodes(editor, {marks: []}, {at: path})\n })\n return\n }\n\n /**\n * Remove annotations from empty spans\n */\n if (editor.isTextSpan(node)) {\n const blockPath = Path.parent(path)\n const [block] = Editor.node(editor, blockPath)\n const decorators = editorActor\n .getSnapshot()\n .context.schema.decorators.map((decorator) => decorator.name)\n const annotations = node.marks?.filter(\n (mark) => !decorators.includes(mark),\n )\n\n if (editor.isTextBlock(block)) {\n if (node.text === '' && annotations && annotations.length > 0) {\n debug('Removing annotations from empty span node')\n withNormalizeNode(editor, () => {\n Transforms.setNodes(\n editor,\n {\n marks: node.marks?.filter((mark) =>\n decorators.includes(mark),\n ),\n },\n {at: path},\n )\n })\n return\n }\n }\n }\n\n /**\n * Remove orphaned annotations from child spans of block nodes\n */\n if (editor.isTextBlock(node)) {\n const decorators = editorActor\n .getSnapshot()\n .context.schema.decorators.map((decorator) => decorator.name)\n\n for (const [child, childPath] of Node.children(editor, path)) {\n if (editor.isTextSpan(child)) {\n const marks = child.marks ?? []\n const orphanedAnnotations = marks.filter((mark) => {\n return (\n !decorators.includes(mark) &&\n !node.markDefs?.find((def) => def._key === mark)\n )\n })\n\n if (orphanedAnnotations.length > 0) {\n debug('Removing orphaned annotations from span node')\n withNormalizeNode(editor, () => {\n Transforms.setNodes(\n editor,\n {\n marks: marks.filter(\n (mark) => !orphanedAnnotations.includes(mark),\n ),\n },\n {at: childPath},\n )\n })\n return\n }\n }\n }\n }\n\n /**\n * Remove orphaned annotations from span nodes\n */\n if (editor.isTextSpan(node)) {\n const blockPath = Path.parent(path)\n const [block] = Editor.node(editor, blockPath)\n\n if (editor.isTextBlock(block)) {\n const decorators = editorActor\n .getSnapshot()\n .context.schema.decorators.map((decorator) => decorator.name)\n const marks = node.marks ?? []\n const orphanedAnnotations = marks.filter((mark) => {\n return (\n !decorators.includes(mark) &&\n !block.markDefs?.find((def) => def._key === mark)\n )\n })\n\n if (orphanedAnnotations.length > 0) {\n debug('Removing orphaned annotations from span node')\n withNormalizeNode(editor, () => {\n Transforms.setNodes(\n editor,\n {\n marks: marks.filter(\n (mark) => !orphanedAnnotations.includes(mark),\n ),\n },\n {at: path},\n )\n })\n return\n }\n }\n }\n\n // Remove duplicate markDefs\n if (editor.isTextBlock(node)) {\n const markDefs = node.markDefs ?? []\n const markDefKeys = new Set<string>()\n const newMarkDefs: Array<PortableTextObject> = []\n\n for (const markDef of markDefs) {\n if (!markDefKeys.has(markDef._key)) {\n markDefKeys.add(markDef._key)\n newMarkDefs.push(markDef)\n }\n }\n\n if (markDefs.length !== newMarkDefs.length) {\n debug('Removing duplicate markDefs')\n withNormalizeNode(editor, () => {\n Transforms.setNodes(editor, {markDefs: newMarkDefs}, {at: path})\n })\n return\n }\n }\n\n // Check consistency of markDefs (unless we are merging two nodes)\n if (\n editor.isTextBlock(node) &&\n !editor.operations.some(\n (op) =>\n op.type === 'merge_node' &&\n 'markDefs' in op.properties &&\n op.path.length === 1,\n )\n ) {\n const newMarkDefs = (node.markDefs || []).filter((def) => {\n return node.children.find((child) => {\n return (\n Text.isText(child) &&\n Array.isArray(child.marks) &&\n child.marks.includes(def._key)\n )\n })\n })\n if (node.markDefs && !isEqual(newMarkDefs, node.markDefs)) {\n debug('Removing markDef not in use')\n withNormalizeNode(editor, () => {\n Transforms.setNodes(\n editor,\n {\n markDefs: newMarkDefs,\n },\n {at: path},\n )\n })\n return\n }\n }\n\n withNormalizeNode(editor, () => {\n normalizeNode(nodeEntry)\n })\n }\n\n editor.apply = (op) => {\n /**\n * We don't want to run any side effects when the editor is processing\n * remote changes.\n */\n if (isChangingRemotely(editor)) {\n apply(op)\n return\n }\n\n /**\n * We don't want to run any side effects when the editor is undoing or\n * redoing operations.\n */\n if (isUndoing(editor) || isRedoing(editor)) {\n apply(op)\n return\n }\n\n if (op.type === 'set_selection') {\n if (\n op.properties &&\n op.newProperties &&\n op.properties.anchor &&\n op.properties.focus &&\n op.newProperties.anchor &&\n op.newProperties.focus\n ) {\n const previousSelectionIsCollapsed = Range.isCollapsed({\n anchor: op.properties.anchor,\n focus: op.properties.focus,\n })\n const newSelectionIsCollapsed = Range.isCollapsed({\n anchor: op.newProperties.anchor,\n focus: op.newProperties.focus,\n })\n\n if (previousSelectionIsCollapsed && newSelectionIsCollapsed) {\n const focusSpan: PortableTextSpan | undefined = Array.from(\n Editor.nodes(editor, {\n mode: 'lowest',\n at: op.properties.focus,\n match: (n) => editor.isTextSpan(n),\n voids: false,\n }),\n )[0]?.[0]\n const newFocusSpan: PortableTextSpan | undefined = Array.from(\n Editor.nodes(editor, {\n mode: 'lowest',\n at: op.newProperties.focus,\n match: (n) => editor.isTextSpan(n),\n voids: false,\n }),\n )[0]?.[0]\n const movedToNextSpan =\n focusSpan &&\n newFocusSpan &&\n op.newProperties.focus.path[0] === op.properties.focus.path[0] &&\n op.newProperties.focus.path[1] ===\n op.properties.focus.path[1] + 1 &&\n focusSpan.text.length === op.properties.focus.offset &&\n op.newProperties.focus.offset === 0\n const movedToPreviousSpan =\n focusSpan &&\n newFocusSpan &&\n op.newProperties.focus.path[0] === op.properties.focus.path[0] &&\n op.newProperties.focus.path[1] ===\n op.properties.focus.path[1] - 1 &&\n op.properties.focus.offset === 0 &&\n newFocusSpan.text.length === op.newProperties.focus.offset\n\n // We only want to clear the decorator state if the caret is visually\n // moving\n if (!movedToNextSpan && !movedToPreviousSpan) {\n editor.decoratorState = {}\n }\n }\n }\n }\n\n if (op.type === 'remove_text') {\n const {selection} = editor\n\n if (selection && Range.isExpanded(selection)) {\n const [block, blockPath] = Editor.node(editor, selection, {\n depth: 1,\n })\n const [span, spanPath] =\n Array.from(\n Editor.nodes(editor, {\n mode: 'lowest',\n at: {path: op.path, offset: op.offset},\n match: (n) => editor.isTextSpan(n),\n voids: false,\n }),\n )[0] ?? ([undefined, undefined] as const)\n\n if (\n span &&\n block &&\n isTextBlock(editorActor.getSnapshot().context, block)\n ) {\n const markDefs = block.markDefs ?? []\n const marks = span.marks ?? []\n const spanHasAnnotations = marks.some((mark) =>\n markDefs.find((markDef) => markDef._key === mark),\n )\n const deletingFromTheEnd =\n op.offset + op.text.length === span.text.length\n const deletingAllText = op.offset === 0 && deletingFromTheEnd\n\n const previousSpan = getPreviousSpan({editor, blockPath, spanPath})\n const nextSpan = getNextSpan({editor, blockPath, spanPath})\n\n const previousSpanHasSameAnnotation = previousSpan\n ? previousSpan.marks?.some(\n (mark) => !decorators.includes(mark) && marks.includes(mark),\n )\n : false\n const nextSpanHasSameAnnotation = nextSpan\n ? nextSpan.marks?.some(\n (mark) => !decorators.includes(mark) && marks.includes(mark),\n )\n : false\n\n if (\n spanHasAnnotations &&\n deletingAllText &&\n !previousSpanHasSameAnnotation &&\n !nextSpanHasSameAnnotation\n ) {\n const snapshot = getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: editor,\n })\n\n Editor.withoutNormalizing(editor, () => {\n apply(op)\n Transforms.setNodes(\n editor,\n {marks: getActiveDecorators(snapshot)},\n {at: op.path},\n )\n })\n\n editor.onChange()\n return\n }\n }\n }\n }\n\n /**\n * Copy over markDefs when merging blocks\n */\n if (\n op.type === 'merge_node' &&\n op.path.length === 1 &&\n 'markDefs' in op.properties &&\n op.properties._type ===\n editorActor.getSnapshot().context.schema.block.name &&\n Array.isArray(op.properties.markDefs) &&\n op.properties.markDefs.length > 0 &&\n op.path[0] - 1 >= 0\n ) {\n const [targetBlock, targetPath] = Editor.node(editor, [op.path[0] - 1])\n\n if (editor.isTextBlock(targetBlock)) {\n const oldDefs =\n (Array.isArray(targetBlock.markDefs) && targetBlock.markDefs) || []\n const newMarkDefs = uniq([...oldDefs, ...op.properties.markDefs])\n\n debug(`Copying markDefs over to merged block`, op)\n Transforms.setNodes(\n editor,\n {markDefs: newMarkDefs},\n {at: targetPath, voids: false},\n )\n apply(op)\n return\n }\n }\n\n apply(op)\n }\n\n return editor\n }\n}\n\nexport const removeDecoratorOperationImplementation: BehaviorOperationImplementation<\n 'decorator.remove'\n> = ({operation}) => {\n const editor = operation.editor\n const mark = operation.decorator\n const {selection} = editor\n\n if (selection) {\n if (Range.isExpanded(selection)) {\n // Split if needed\n Transforms.setNodes(\n editor,\n {},\n {match: Text.isText, split: true, hanging: true},\n )\n if (editor.selection) {\n const splitTextNodes = [\n ...Editor.nodes(editor, {\n at: editor.selection,\n match: Text.isText,\n }),\n ]\n splitTextNodes.forEach(([node, path]) => {\n const block = editor.children[path[0]]\n if (Element.isElement(block) && block.children.includes(node)) {\n Transforms.setNodes(\n editor,\n {\n marks: (Array.isArray(node.marks) ? node.marks : []).filter(\n (eMark: string) => eMark !== mark,\n ),\n _type: 'span',\n },\n {at: path},\n )\n }\n })\n }\n } else {\n const [block, blockPath] = Editor.node(editor, selection, {\n depth: 1,\n })\n const lonelyEmptySpan =\n editor.isTextBlock(block) &&\n block.children.length === 1 &&\n editor.isTextSpan(block.children[0]) &&\n block.children[0].text === ''\n ? block.children[0]\n : undefined\n\n if (lonelyEmptySpan) {\n const existingMarks = lonelyEmptySpan.marks ?? []\n const existingMarksWithoutDecorator = existingMarks.filter(\n (existingMark) => existingMark !== mark,\n )\n\n Transforms.setNodes(\n editor,\n {\n marks: existingMarksWithoutDecorator,\n },\n {\n at: blockPath,\n match: (node) => editor.isTextSpan(node),\n },\n )\n } else {\n editor.decoratorState[mark] = false\n }\n }\n\n if (editor.selection) {\n // Reselect\n const selection = editor.selection\n editor.selection = {...selection}\n }\n }\n}\n","function cloneDiff(diff2) {\n const [type, patch] = diff2;\n return [type, patch];\n}\nfunction getCommonOverlap(textA, textB) {\n let text1 = textA, text2 = textB;\n const text1Length = text1.length, text2Length = text2.length;\n if (text1Length === 0 || text2Length === 0)\n return 0;\n text1Length > text2Length ? text1 = text1.substring(text1Length - text2Length) : text1Length < text2Length && (text2 = text2.substring(0, text1Length));\n const textLength = Math.min(text1Length, text2Length);\n if (text1 === text2)\n return textLength;\n let best = 0, length = 1;\n for (let found = 0; found !== -1; ) {\n const pattern = text1.substring(textLength - length);\n if (found = text2.indexOf(pattern), found === -1)\n return best;\n length += found, (found === 0 || text1.substring(textLength - length) === text2.substring(0, length)) && (best = length, length++);\n }\n return best;\n}\nfunction getCommonPrefix(text1, text2) {\n if (!text1 || !text2 || text1[0] !== text2[0])\n return 0;\n let pointerMin = 0, pointerMax = Math.min(text1.length, text2.length), pointerMid = pointerMax, pointerStart = 0;\n for (; pointerMin < pointerMid; )\n text1.substring(pointerStart, pointerMid) === text2.substring(pointerStart, pointerMid) ? (pointerMin = pointerMid, pointerStart = pointerMin) : pointerMax = pointerMid, pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin);\n return pointerMid;\n}\nfunction getCommonSuffix(text1, text2) {\n if (!text1 || !text2 || text1[text1.length - 1] !== text2[text2.length - 1])\n return 0;\n let pointerMin = 0, pointerMax = Math.min(text1.length, text2.length), pointerMid = pointerMax, pointerEnd = 0;\n for (; pointerMin < pointerMid; )\n text1.substring(text1.length - pointerMid, text1.length - pointerEnd) === text2.substring(text2.length - pointerMid, text2.length - pointerEnd) ? (pointerMin = pointerMid, pointerEnd = pointerMin) : pointerMax = pointerMid, pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin);\n return pointerMid;\n}\nfunction isHighSurrogate(char) {\n const charCode = char.charCodeAt(0);\n return charCode >= 55296 && charCode <= 56319;\n}\nfunction isLowSurrogate(char) {\n const charCode = char.charCodeAt(0);\n return charCode >= 56320 && charCode <= 57343;\n}\nfunction bisect(text1, text2, deadline) {\n const text1Length = text1.length, text2Length = text2.length, maxD = Math.ceil((text1Length + text2Length) / 2), vOffset = maxD, vLength = 2 * maxD, v1 = new Array(vLength), v2 = new Array(vLength);\n for (let x = 0; x < vLength; x++)\n v1[x] = -1, v2[x] = -1;\n v1[vOffset + 1] = 0, v2[vOffset + 1] = 0;\n const delta = text1Length - text2Length, front = delta % 2 !== 0;\n let k1start = 0, k1end = 0, k2start = 0, k2end = 0;\n for (let d = 0; d < maxD && !(Date.now() > deadline); d++) {\n for (let k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n const k1Offset = vOffset + k1;\n let x1;\n k1 === -d || k1 !== d && v1[k1Offset - 1] < v1[k1Offset + 1] ? x1 = v1[k1Offset + 1] : x1 = v1[k1Offset - 1] + 1;\n let y1 = x1 - k1;\n for (; x1 < text1Length && y1 < text2Length && text1.charAt(x1) === text2.charAt(y1); )\n x1++, y1++;\n if (v1[k1Offset] = x1, x1 > text1Length)\n k1end += 2;\n else if (y1 > text2Length)\n k1start += 2;\n else if (front) {\n const k2Offset = vOffset + delta - k1;\n if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) {\n const x2 = text1Length - v2[k2Offset];\n if (x1 >= x2)\n return bisectSplit(text1, text2, x1, y1, deadline);\n }\n }\n }\n for (let k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n const k2Offset = vOffset + k2;\n let x2;\n k2 === -d || k2 !== d && v2[k2Offset - 1] < v2[k2Offset + 1] ? x2 = v2[k2Offset + 1] : x2 = v2[k2Offset - 1] + 1;\n let y2 = x2 - k2;\n for (; x2 < text1Length && y2 < text2Length && text1.charAt(text1Length - x2 - 1) === text2.charAt(text2Length - y2 - 1); )\n x2++, y2++;\n if (v2[k2Offset] = x2, x2 > text1Length)\n k2end += 2;\n else if (y2 > text2Length)\n k2start += 2;\n else if (!front) {\n const k1Offset = vOffset + delta - k2;\n if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) {\n const x1 = v1[k1Offset], y1 = vOffset + x1 - k1Offset;\n if (x2 = text1Length - x2, x1 >= x2)\n return bisectSplit(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2]\n ];\n}\nfunction bisectSplit(text1, text2, x, y, deadline) {\n const text1a = text1.substring(0, x), text2a = text2.substring(0, y), text1b = text1.substring(x), text2b = text2.substring(y), diffs = doDiff(text1a, text2a, { checkLines: !1, deadline }), diffsb = doDiff(text1b, text2b, { checkLines: !1, deadline });\n return diffs.concat(diffsb);\n}\nfunction findHalfMatch(text1, text2, timeout = 1) {\n if (timeout <= 0)\n return null;\n const longText = text1.length > text2.length ? text1 : text2, shortText = text1.length > text2.length ? text2 : text1;\n if (longText.length < 4 || shortText.length * 2 < longText.length)\n return null;\n const halfMatch1 = halfMatchI(longText, shortText, Math.ceil(longText.length / 4)), halfMatch2 = halfMatchI(longText, shortText, Math.ceil(longText.length / 2));\n let halfMatch;\n if (halfMatch1 && halfMatch2)\n halfMatch = halfMatch1[4].length > halfMatch2[4].length ? halfMatch1 : halfMatch2;\n else {\n if (!halfMatch1 && !halfMatch2)\n return null;\n halfMatch2 ? halfMatch1 || (halfMatch = halfMatch2) : halfMatch = halfMatch1;\n }\n if (!halfMatch)\n throw new Error(\"Unable to find a half match.\");\n let text1A, text1B, text2A, text2B;\n text1.length > text2.length ? (text1A = halfMatch[0], text1B = halfMatch[1], text2A = halfMatch[2], text2B = halfMatch[3]) : (text2A = halfMatch[0], text2B = halfMatch[1], text1A = halfMatch[2], text1B = halfMatch[3]);\n const midCommon = halfMatch[4];\n return [text1A, text1B, text2A, text2B, midCommon];\n}\nfunction halfMatchI(longText, shortText, i) {\n const seed = longText.slice(i, i + Math.floor(longText.length / 4));\n let j = -1, bestCommon = \"\", bestLongTextA, bestLongTextB, bestShortTextA, bestShortTextB;\n for (; (j = shortText.indexOf(seed, j + 1)) !== -1; ) {\n const prefixLength = getCommonPrefix(longText.slice(i), shortText.slice(j)), suffixLength = getCommonSuffix(longText.slice(0, i), shortText.slice(0, j));\n bestCommon.length < suffixLength + prefixLength && (bestCommon = shortText.slice(j - suffixLength, j) + shortText.slice(j, j + prefixLength), bestLongTextA = longText.slice(0, i - suffixLength), bestLongTextB = longText.slice(i + prefixLength), bestShortTextA = shortText.slice(0, j - suffixLength), bestShortTextB = shortText.slice(j + prefixLength));\n }\n return bestCommon.length * 2 >= longText.length ? [\n bestLongTextA || \"\",\n bestLongTextB || \"\",\n bestShortTextA || \"\",\n bestShortTextB || \"\",\n bestCommon || \"\"\n ] : null;\n}\nfunction charsToLines(diffs, lineArray) {\n for (let x = 0; x < diffs.length; x++) {\n const chars = diffs[x][1], text = [];\n for (let y = 0; y < chars.length; y++)\n text[y] = lineArray[chars.charCodeAt(y)];\n diffs[x][1] = text.join(\"\");\n }\n}\nfunction linesToChars(textA, textB) {\n const lineArray = [], lineHash = {};\n lineArray[0] = \"\";\n function diffLinesToMunge(text) {\n let chars = \"\", lineStart = 0, lineEnd = -1, lineArrayLength = lineArray.length;\n for (; lineEnd < text.length - 1; ) {\n lineEnd = text.indexOf(`\n`, lineStart), lineEnd === -1 && (lineEnd = text.length - 1);\n let line = text.slice(lineStart, lineEnd + 1);\n (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== void 0) ? chars += String.fromCharCode(lineHash[line]) : (lineArrayLength === maxLines && (line = text.slice(lineStart), lineEnd = text.length), chars += String.fromCharCode(lineArrayLength), lineHash[line] = lineArrayLength, lineArray[lineArrayLength++] = line), lineStart = lineEnd + 1;\n }\n return chars;\n }\n let maxLines = 4e4;\n const chars1 = diffLinesToMunge(textA);\n maxLines = 65535;\n const chars2 = diffLinesToMunge(textB);\n return { chars1, chars2, lineArray };\n}\nfunction doLineModeDiff(textA, textB, opts) {\n let text1 = textA, text2 = textB;\n const a = linesToChars(text1, text2);\n text1 = a.chars1, text2 = a.chars2;\n const linearray = a.lineArray;\n let diffs = doDiff(text1, text2, {\n checkLines: !1,\n deadline: opts.deadline\n });\n charsToLines(diffs, linearray), diffs = cleanupSemantic(diffs), diffs.push([DIFF_EQUAL, \"\"]);\n let pointer = 0, countDelete = 0, countInsert = 0, textDelete = \"\", textInsert = \"\";\n for (; pointer < diffs.length; ) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n countInsert++, textInsert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n countDelete++, textDelete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n if (countDelete >= 1 && countInsert >= 1) {\n diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert), pointer = pointer - countDelete - countInsert;\n const aa = doDiff(textDelete, textInsert, {\n checkLines: !1,\n deadline: opts.deadline\n });\n for (let j = aa.length - 1; j >= 0; j--)\n diffs.splice(pointer, 0, aa[j]);\n pointer += aa.length;\n }\n countInsert = 0, countDelete = 0, textDelete = \"\", textInsert = \"\";\n break;\n default:\n throw new Error(\"Unknown diff operation.\");\n }\n pointer++;\n }\n return diffs.pop(), diffs;\n}\nfunction computeDiff(text1, text2, opts) {\n let diffs;\n if (!text1)\n return [[DIFF_INSERT, text2]];\n if (!text2)\n return [[DIFF_DELETE, text1]];\n const longtext = text1.length > text2.length ? text1 : text2, shorttext = text1.length > text2.length ? text2 : text1, i = longtext.indexOf(shorttext);\n if (i !== -1)\n return diffs = [\n [DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)]\n ], text1.length > text2.length && (diffs[0][0] = DIFF_DELETE, diffs[2][0] = DIFF_DELETE), diffs;\n if (shorttext.length === 1)\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2]\n ];\n const halfMatch = findHalfMatch(text1, text2);\n if (halfMatch) {\n const text1A = halfMatch[0], text1B = halfMatch[1], text2A = halfMatch[2], text2B = halfMatch[3], midCommon = halfMatch[4], diffsA = doDiff(text1A, text2A, opts), diffsB = doDiff(text1B, text2B, opts);\n return diffsA.concat([[DIFF_EQUAL, midCommon]], diffsB);\n }\n return opts.checkLines && text1.length > 100 && text2.length > 100 ? doLineModeDiff(text1, text2, opts) : bisect(text1, text2, opts.deadline);\n}\nvar __defProp$2 = Object.defineProperty, __getOwnPropSymbols$2 = Object.getOwnPropertySymbols, __hasOwnProp$2 = Object.prototype.hasOwnProperty, __propIsEnum$2 = Object.prototype.propertyIsEnumerable, __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp$2.call(b, prop) && __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b))\n __propIsEnum$2.call(b, prop) && __defNormalProp$2(a, prop, b[prop]);\n return a;\n};\nconst DIFF_DELETE = -1, DIFF_INSERT = 1, DIFF_EQUAL = 0;\nfunction diff(textA, textB, opts) {\n if (textA === null || textB === null)\n throw new Error(\"Null input. (diff)\");\n const diffs = doDiff(textA, textB, createInternalOpts(opts || {}));\n return adjustDiffForSurrogatePairs(diffs), diffs;\n}\nfunction doDiff(textA, textB, options) {\n let text1 = textA, text2 = textB;\n if (text1 === text2)\n return text1 ? [[DIFF_EQUAL, text1]] : [];\n let commonlength = getCommonPrefix(text1, text2);\n const commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength), text2 = text2.substring(commonlength), commonlength = getCommonSuffix(text1, text2);\n const commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength), text2 = text2.substring(0, text2.length - commonlength);\n let diffs = computeDiff(text1, text2, options);\n return commonprefix && diffs.unshift([DIFF_EQUAL, commonprefix]), commonsuffix && diffs.push([DIFF_EQUAL, commonsuffix]), diffs = cleanupMerge(diffs), diffs;\n}\nfunction createDeadLine(timeout) {\n let t = 1;\n return typeof timeout < \"u\" && (t = timeout <= 0 ? Number.MAX_VALUE : timeout), Date.now() + t * 1e3;\n}\nfunction createInternalOpts(opts) {\n return __spreadValues$2({\n checkLines: !0,\n deadline: createDeadLine(opts.timeout || 1)\n }, opts);\n}\nfunction combineChar(data, char, dir) {\n return dir === 1 ? data + char : char + data;\n}\nfunction splitChar(data, dir) {\n return dir === 1 ? [data.substring(0, data.length - 1), data[data.length - 1]] : [data.substring(1), data[0]];\n}\nfunction hasSharedChar(diffs, i, j, dir) {\n return dir === 1 ? diffs[i][1][diffs[i][1].length - 1] === diffs[j][1][diffs[j][1].length - 1] : diffs[i][1][0] === diffs[j][1][0];\n}\nfunction deisolateChar(diffs, i, dir) {\n const inv = dir === 1 ? -1 : 1;\n let insertIdx = null, deleteIdx = null, j = i + dir;\n for (; j >= 0 && j < diffs.length && (insertIdx === null || deleteIdx === null); j += dir) {\n const [op, text2] = diffs[j];\n if (text2.length !== 0) {\n if (op === DIFF_INSERT) {\n insertIdx === null && (insertIdx = j);\n continue;\n } else if (op === DIFF_DELETE) {\n deleteIdx === null && (deleteIdx = j);\n continue;\n } else if (op === DIFF_EQUAL) {\n if (insertIdx === null && deleteIdx === null) {\n const [rest, char2] = splitChar(diffs[i][1], dir);\n diffs[i][1] = rest, diffs[j][1] = combineChar(diffs[j][1], char2, inv);\n return;\n }\n break;\n }\n }\n }\n if (insertIdx !== null && deleteIdx !== null && hasSharedChar(diffs, insertIdx, deleteIdx, dir)) {\n const [insertText, insertChar] = splitChar(diffs[insertIdx][1], inv), [deleteText] = splitChar(diffs[deleteIdx][1], inv);\n diffs[insertIdx][1] = insertText, diffs[deleteIdx][1] = deleteText, diffs[i][1] = combineChar(diffs[i][1], insertChar, dir);\n return;\n }\n const [text, char] = splitChar(diffs[i][1], dir);\n diffs[i][1] = text, insertIdx === null ? (diffs.splice(j, 0, [DIFF_INSERT, char]), deleteIdx !== null && deleteIdx >= j && deleteIdx++) : diffs[insertIdx][1] = combineChar(diffs[insertIdx][1], char, inv), deleteIdx === null ? diffs.splice(j, 0, [DIFF_DELETE, char]) : diffs[deleteIdx][1] = combineChar(diffs[deleteIdx][1], char, inv);\n}\nfunction adjustDiffForSurrogatePairs(diffs) {\n for (let i = 0; i < diffs.length; i++) {\n const [diffType, diffText] = diffs[i];\n if (diffText.length === 0) continue;\n const firstChar = diffText[0], lastChar = diffText[diffText.length - 1];\n isHighSurrogate(lastChar) && diffType === DIFF_EQUAL && deisolateChar(diffs, i, 1), isLowSurrogate(firstChar) && diffType === DIFF_EQUAL && deisolateChar(diffs, i, -1);\n }\n for (let i = 0; i < diffs.length; i++)\n diffs[i][1].length === 0 && diffs.splice(i, 1);\n}\nfunction cleanupSemantic(rawDiffs) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2)), hasChanges = !1;\n const equalities = [];\n let equalitiesLength = 0, lastEquality = null, pointer = 0, lengthInsertions1 = 0, lengthDeletions1 = 0, lengthInsertions2 = 0, lengthDeletions2 = 0;\n for (; pointer < diffs.length; )\n diffs[pointer][0] === DIFF_EQUAL ? (equalities[equalitiesLength++] = pointer, lengthInsertions1 = lengthInsertions2, lengthDeletions1 = lengthDeletions2, lengthInsertions2 = 0, lengthDeletions2 = 0, lastEquality = diffs[pointer][1]) : (diffs[pointer][0] === DIFF_INSERT ? lengthInsertions2 += diffs[pointer][1].length : lengthDeletions2 += diffs[pointer][1].length, lastEquality && lastEquality.length <= Math.max(lengthInsertions1, lengthDeletions1) && lastEquality.length <= Math.max(lengthInsertions2, lengthDeletions2) && (diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastEquality]), diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT, equalitiesLength--, equalitiesLength--, pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1, lengthInsertions1 = 0, lengthDeletions1 = 0, lengthInsertions2 = 0, lengthDeletions2 = 0, lastEquality = null, hasChanges = !0)), pointer++;\n for (hasChanges && (diffs = cleanupMerge(diffs)), diffs = cleanupSemanticLossless(diffs), pointer = 1; pointer < diffs.length; ) {\n if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) {\n const deletion = diffs[pointer - 1][1], insertion = diffs[pointer][1], overlapLength1 = getCommonOverlap(deletion, insertion), overlapLength2 = getCommonOverlap(insertion, deletion);\n overlapLength1 >= overlapLength2 ? (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) && (diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlapLength1)]), diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlapLength1), diffs[pointer + 1][1] = insertion.substring(overlapLength1), pointer++) : (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) && (diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlapLength2)]), diffs[pointer - 1][0] = DIFF_INSERT, diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlapLength2), diffs[pointer + 1][0] = DIFF_DELETE, diffs[pointer + 1][1] = deletion.substring(overlapLength2), pointer++), pointer++;\n }\n pointer++;\n }\n return diffs;\n}\nconst nonAlphaNumericRegex = /[^a-zA-Z0-9]/, whitespaceRegex = /\\s/, linebreakRegex = /[\\r\\n]/, blanklineEndRegex = /\\n\\r?\\n$/, blanklineStartRegex = /^\\r?\\n\\r?\\n/;\nfunction cleanupSemanticLossless(rawDiffs) {\n const diffs = rawDiffs.map((diff2) => cloneDiff(diff2));\n function diffCleanupSemanticScore(one, two) {\n if (!one || !two)\n return 6;\n const char1 = one.charAt(one.length - 1), char2 = two.charAt(0), nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex), nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex), whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex), whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex), lineBreak1 = whitespace1 && char1.match(linebreakRegex), lineBreak2 = whitespace2 && char2.match(linebreakRegex), blankLine1 = lineBreak1 && one.match(blanklineEndRegex), blankLine2 = lineBreak2 && two.match(blanklineStartRegex);\n return blankLine1 || blankLine2 ? 5 : lineBreak1 || lineBreak2 ? 4 : nonAlphaNumeric1 && !whitespace1 && whitespace2 ? 3 : whitespace1 || whitespace2 ? 2 : nonAlphaNumeric1 || nonAlphaNumeric2 ? 1 : 0;\n }\n let pointer = 1;\n for (; pointer < diffs.length - 1; ) {\n if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n let equality1 = diffs[pointer - 1][1], edit = diffs[pointer][1], equality2 = diffs[pointer + 1][1];\n const commonOffset = getCommonSuffix(equality1, edit);\n if (commonOffset) {\n const commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset), edit = commonString + edit.substring(0, edit.length - commonOffset), equality2 = commonString + equality2;\n }\n let bestEquality1 = equality1, bestEdit = edit, bestEquality2 = equality2, bestScore = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);\n for (; edit.charAt(0) === equality2.charAt(0); ) {\n equality1 += edit.charAt(0), edit = edit.substring(1) + equality2.charAt(0), equality2 = equality2.substring(1);\n const score = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);\n score >= bestScore && (bestScore = score, bestEquality1 = equality1, bestEdit = edit, bestEquality2 = equality2);\n }\n diffs[pointer - 1][1] !== bestEquality1 && (bestEquality1 ? diffs[pointer - 1][1] = bestEquality1 : (diffs.splice(pointer - 1, 1), pointer--), diffs[pointer][1] = bestEdit, bestEquality2 ? diffs[pointer + 1][1] = bestEquality2 : (diffs.splice(pointer + 1, 1), pointer--));\n }\n pointer++;\n }\n return diffs;\n}\nfunction cleanupMerge(rawDiffs) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2));\n diffs.push([DIFF_EQUAL, \"\"]);\n let pointer = 0, countDelete = 0, countInsert = 0, textDelete = \"\", textInsert = \"\", commonlength;\n for (; pointer < diffs.length; )\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n countInsert++, textInsert += diffs[pointer][1], pointer++;\n break;\n case DIFF_DELETE:\n countDelete++, textDelete += diffs[pointer][1], pointer++;\n break;\n case DIFF_EQUAL:\n countDelete + countInsert > 1 ? (countDelete !== 0 && countInsert !== 0 && (commonlength = getCommonPrefix(textInsert, textDelete), commonlength !== 0 && (pointer - countDelete - countInsert > 0 && diffs[pointer - countDelete - countInsert - 1][0] === DIFF_EQUAL ? diffs[pointer - countDelete - countInsert - 1][1] += textInsert.substring(\n 0,\n commonlength\n ) : (diffs.splice(0, 0, [DIFF_EQUAL, textInsert.substring(0, commonlength)]), pointer++), textInsert = textInsert.substring(commonlength), textDelete = textDelete.substring(commonlength)), commonlength = getCommonSuffix(textInsert, textDelete), commonlength !== 0 && (diffs[pointer][1] = textInsert.substring(textInsert.length - commonlength) + diffs[pointer][1], textInsert = textInsert.substring(0, textInsert.length - commonlength), textDelete = textDelete.substring(0, textDelete.length - commonlength))), pointer -= countDelete + countInsert, diffs.splice(pointer, countDelete + countInsert), textDelete.length && (diffs.splice(pointer, 0, [DIFF_DELETE, textDelete]), pointer++), textInsert.length && (diffs.splice(pointer, 0, [DIFF_INSERT, textInsert]), pointer++), pointer++) : pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL ? (diffs[pointer - 1][1] += diffs[pointer][1], diffs.splice(pointer, 1)) : pointer++, countInsert = 0, countDelete = 0, textDelete = \"\", textInsert = \"\";\n break;\n default:\n throw new Error(\"Unknown diff operation\");\n }\n diffs[diffs.length - 1][1] === \"\" && diffs.pop();\n let hasChanges = !1;\n for (pointer = 1; pointer < diffs.length - 1; )\n diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL && (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) === diffs[pointer - 1][1] ? (diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length), diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1], diffs.splice(pointer - 1, 1), hasChanges = !0) : diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1] && (diffs[pointer - 1][1] += diffs[pointer + 1][1], diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1], diffs.splice(pointer + 1, 1), hasChanges = !0)), pointer++;\n return hasChanges && (diffs = cleanupMerge(diffs)), diffs;\n}\nfunction trueCount(...args) {\n return args.reduce((n, bool) => n + (bool ? 1 : 0), 0);\n}\nfunction cleanupEfficiency(rawDiffs, editCost = 4) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2)), hasChanges = !1;\n const equalities = [];\n let equalitiesLength = 0, lastEquality = null, pointer = 0, preIns = !1, preDel = !1, postIns = !1, postDel = !1;\n for (; pointer < diffs.length; )\n diffs[pointer][0] === DIFF_EQUAL ? (diffs[pointer][1].length < editCost && (postIns || postDel) ? (equalities[equalitiesLength++] = pointer, preIns = postIns, preDel = postDel, lastEquality = diffs[pointer][1]) : (equalitiesLength = 0, lastEquality = null), postIns = !1, postDel = !1) : (diffs[pointer][0] === DIFF_DELETE ? postDel = !0 : postIns = !0, lastEquality && (preIns && preDel && postIns && postDel || lastEquality.length < editCost / 2 && trueCount(preIns, preDel, postIns, postDel) === 3) && (diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastEquality]), diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT, equalitiesLength--, lastEquality = null, preIns && preDel ? (postIns = !0, postDel = !0, equalitiesLength = 0) : (equalitiesLength--, pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1, postIns = !1, postDel = !1), hasChanges = !0)), pointer++;\n return hasChanges && (diffs = cleanupMerge(diffs)), diffs;\n}\nvar __defProp$1 = Object.defineProperty, __getOwnPropSymbols$1 = Object.getOwnPropertySymbols, __hasOwnProp$1 = Object.prototype.hasOwnProperty, __propIsEnum$1 = Object.prototype.propertyIsEnumerable, __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b))\n __propIsEnum$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);\n return a;\n};\nconst DEFAULT_OPTIONS = {\n /**\n * At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n */\n threshold: 0.5,\n /**\n * How far to search for a match (0 = exact location, 1000+ = broad match).\n * A match this many characters away from the expected location will add\n * 1.0 to the score (0.0 is a perfect match).\n */\n distance: 1e3\n};\nfunction applyDefaults(options) {\n return __spreadValues$1(__spreadValues$1({}, DEFAULT_OPTIONS), options);\n}\nconst MAX_BITS$1 = 32;\nfunction bitap(text, pattern, loc, opts = {}) {\n if (pattern.length > MAX_BITS$1)\n throw new Error(\"Pattern too long for this browser.\");\n const options = applyDefaults(opts), s = getAlphabetFromPattern(pattern);\n function getBitapScore(e, x) {\n const accuracy = e / pattern.length, proximity = Math.abs(loc - x);\n return options.distance ? accuracy + proximity / options.distance : proximity ? 1 : accuracy;\n }\n let scoreThreshold = options.threshold, bestLoc = text.indexOf(pattern, loc);\n bestLoc !== -1 && (scoreThreshold = Math.min(getBitapScore(0, bestLoc), scoreThreshold), bestLoc = text.lastIndexOf(pattern, loc + pattern.length), bestLoc !== -1 && (scoreThreshold = Math.min(getBitapScore(0, bestLoc), scoreThreshold)));\n const matchmask = 1 << pattern.length - 1;\n bestLoc = -1;\n let binMin, binMid, binMax = pattern.length + text.length, lastRd = [];\n for (let d = 0; d < pattern.length; d++) {\n for (binMin = 0, binMid = binMax; binMin < binMid; )\n getBitapScore(d, loc + binMid) <= scoreThreshold ? binMin = binMid : binMax = binMid, binMid = Math.floor((binMax - binMin) / 2 + binMin);\n binMax = binMid;\n let start = Math.max(1, loc - binMid + 1);\n const finish = Math.min(loc + binMid, text.length) + pattern.length, rd = new Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (let j = finish; j >= start; j--) {\n const charMatch = s[text.charAt(j - 1)];\n if (d === 0 ? rd[j] = (rd[j + 1] << 1 | 1) & charMatch : rd[j] = (rd[j + 1] << 1 | 1) & charMatch | ((lastRd[j + 1] | lastRd[j]) << 1 | 1) | lastRd[j + 1], rd[j] & matchmask) {\n const score = getBitapScore(d, j - 1);\n if (score <= scoreThreshold)\n if (scoreThreshold = score, bestLoc = j - 1, bestLoc > loc)\n start = Math.max(1, 2 * loc - bestLoc);\n else\n break;\n }\n }\n if (getBitapScore(d + 1, loc) > scoreThreshold)\n break;\n lastRd = rd;\n }\n return bestLoc;\n}\nfunction getAlphabetFromPattern(pattern) {\n const s = {};\n for (let i = 0; i < pattern.length; i++)\n s[pattern.charAt(i)] = 0;\n for (let i = 0; i < pattern.length; i++)\n s[pattern.charAt(i)] |= 1 << pattern.length - i - 1;\n return s;\n}\nfunction match(text, pattern, searchLocation, options = {}) {\n if (text === null || pattern === null || searchLocation === null)\n throw new Error(\"Null input. (match())\");\n const loc = Math.max(0, Math.min(searchLocation, text.length));\n if (text === pattern)\n return 0;\n if (text.length) {\n if (text.substring(loc, loc + pattern.length) === pattern)\n return loc;\n } else return -1;\n return bitap(text, pattern, loc, options);\n}\nfunction diffText1(diffs) {\n const text = [];\n for (let x = 0; x < diffs.length; x++)\n diffs[x][0] !== DIFF_INSERT && (text[x] = diffs[x][1]);\n return text.join(\"\");\n}\nfunction diffText2(diffs) {\n const text = [];\n for (let x = 0; x < diffs.length; x++)\n diffs[x][0] !== DIFF_DELETE && (text[x] = diffs[x][1]);\n return text.join(\"\");\n}\nfunction levenshtein(diffs) {\n let leven = 0, insertions = 0, deletions = 0;\n for (let x = 0; x < diffs.length; x++) {\n const op = diffs[x][0], data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n leven += Math.max(insertions, deletions), insertions = 0, deletions = 0;\n break;\n default:\n throw new Error(\"Unknown diff operation.\");\n }\n }\n return leven += Math.max(insertions, deletions), leven;\n}\nfunction xIndex(diffs, location) {\n let chars1 = 0, chars2 = 0, lastChars1 = 0, lastChars2 = 0, x;\n for (x = 0; x < diffs.length && (diffs[x][0] !== DIFF_INSERT && (chars1 += diffs[x][1].length), diffs[x][0] !== DIFF_DELETE && (chars2 += diffs[x][1].length), !(chars1 > location)); x++)\n lastChars1 = chars1, lastChars2 = chars2;\n return diffs.length !== x && diffs[x][0] === DIFF_DELETE ? lastChars2 : lastChars2 + (location - lastChars1);\n}\nfunction countUtf8Bytes(str) {\n let bytes = 0;\n for (let i = 0; i < str.length; i++) {\n const codePoint = str.codePointAt(i);\n if (typeof codePoint > \"u\")\n throw new Error(\"Failed to get codepoint\");\n bytes += utf8len(codePoint);\n }\n return bytes;\n}\nfunction adjustIndiciesToUcs2(patches, base, options = {}) {\n let byteOffset = 0, idx = 0;\n function advanceTo(target) {\n for (; byteOffset < target; ) {\n const codePoint = base.codePointAt(idx);\n if (typeof codePoint > \"u\")\n return idx;\n byteOffset += utf8len(codePoint), codePoint > 65535 ? idx += 2 : idx += 1;\n }\n if (!options.allowExceedingIndices && byteOffset !== target)\n throw new Error(\"Failed to determine byte offset\");\n return idx;\n }\n const adjusted = [];\n for (const patch of patches)\n adjusted.push({\n diffs: patch.diffs.map((diff2) => cloneDiff(diff2)),\n start1: advanceTo(patch.start1),\n start2: advanceTo(patch.start2),\n utf8Start1: patch.utf8Start1,\n utf8Start2: patch.utf8Start2,\n length1: patch.length1,\n length2: patch.length2,\n utf8Length1: patch.utf8Length1,\n utf8Length2: patch.utf8Length2\n });\n return adjusted;\n}\nfunction utf8len(codePoint) {\n return codePoint <= 127 ? 1 : codePoint <= 2047 ? 2 : codePoint <= 65535 ? 3 : 4;\n}\nconst MAX_BITS = 32, DEFAULT_MARGIN = 4;\nfunction addPadding(patches, margin = DEFAULT_MARGIN) {\n const paddingLength = margin;\n let nullPadding = \"\";\n for (let x = 1; x <= paddingLength; x++)\n nullPadding += String.fromCharCode(x);\n for (const p of patches)\n p.start1 += paddingLength, p.start2 += paddingLength, p.utf8Start1 += paddingLength, p.utf8Start2 += paddingLength;\n let patch = patches[0], diffs = patch.diffs;\n if (diffs.length === 0 || diffs[0][0] !== DIFF_EQUAL)\n diffs.unshift([DIFF_EQUAL, nullPadding]), patch.start1 -= paddingLength, patch.start2 -= paddingLength, patch.utf8Start1 -= paddingLength, patch.utf8Start2 -= paddingLength, patch.length1 += paddingLength, patch.length2 += paddingLength, patch.utf8Length1 += paddingLength, patch.utf8Length2 += paddingLength;\n else if (paddingLength > diffs[0][1].length) {\n const firstDiffLength = diffs[0][1].length, extraLength = paddingLength - firstDiffLength;\n diffs[0][1] = nullPadding.substring(firstDiffLength) + diffs[0][1], patch.start1 -= extraLength, patch.start2 -= extraLength, patch.utf8Start1 -= extraLength, patch.utf8Start2 -= extraLength, patch.length1 += extraLength, patch.length2 += extraLength, patch.utf8Length1 += extraLength, patch.utf8Length2 += extraLength;\n }\n if (patch = patches[patches.length - 1], diffs = patch.diffs, diffs.length === 0 || diffs[diffs.length - 1][0] !== DIFF_EQUAL)\n diffs.push([DIFF_EQUAL, nullPadding]), patch.length1 += paddingLength, patch.length2 += paddingLength, patch.utf8Length1 += paddingLength, patch.utf8Length2 += paddingLength;\n else if (paddingLength > diffs[diffs.length - 1][1].length) {\n const extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength), patch.length1 += extraLength, patch.length2 += extraLength, patch.utf8Length1 += extraLength, patch.utf8Length2 += extraLength;\n }\n return nullPadding;\n}\nfunction createPatchObject(start1, start2) {\n return {\n diffs: [],\n start1,\n start2,\n utf8Start1: start1,\n utf8Start2: start2,\n length1: 0,\n length2: 0,\n utf8Length1: 0,\n utf8Length2: 0\n };\n}\nfunction splitMax(patches, margin = DEFAULT_MARGIN) {\n const patchSize = MAX_BITS;\n for (let x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patchSize)\n continue;\n const bigpatch = patches[x];\n patches.splice(x--, 1);\n let start1 = bigpatch.start1, start2 = bigpatch.start2, preContext = \"\";\n for (; bigpatch.diffs.length !== 0; ) {\n const patch = createPatchObject(start1 - preContext.length, start2 - preContext.length);\n let empty = !0;\n if (preContext !== \"\") {\n const precontextByteCount = countUtf8Bytes(preContext);\n patch.length1 = preContext.length, patch.utf8Length1 = precontextByteCount, patch.length2 = preContext.length, patch.utf8Length2 = precontextByteCount, patch.diffs.push([DIFF_EQUAL, preContext]);\n }\n for (; bigpatch.diffs.length !== 0 && patch.length1 < patchSize - margin; ) {\n const diffType = bigpatch.diffs[0][0];\n let diffText = bigpatch.diffs[0][1], diffTextByteCount = countUtf8Bytes(diffText);\n if (diffType === DIFF_INSERT) {\n patch.length2 += diffText.length, patch.utf8Length2 += diffTextByteCount, start2 += diffText.length;\n const diff2 = bigpatch.diffs.shift();\n diff2 && patch.diffs.push(diff2), empty = !1;\n } else diffType === DIFF_DELETE && patch.diffs.length === 1 && patch.diffs[0][0] === DIFF_EQUAL && diffText.length > 2 * patchSize ? (patch.length1 += diffText.length, patch.utf8Length1 += diffTextByteCount, start1 += diffText.length, empty = !1, patch.diffs.push([diffType, diffText]), bigpatch.diffs.shift()) : (diffText = diffText.substring(0, patchSize - patch.length1 - margin), diffTextByteCount = countUtf8Bytes(diffText), patch.length1 += diffText.length, patch.utf8Length1 += diffTextByteCount, start1 += diffText.length, diffType === DIFF_EQUAL ? (patch.length2 += diffText.length, patch.utf8Length2 += diffTextByteCount, start2 += diffText.length) : empty = !1, patch.diffs.push([diffType, diffText]), diffText === bigpatch.diffs[0][1] ? bigpatch.diffs.shift() : bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diffText.length));\n }\n preContext = diffText2(patch.diffs), preContext = preContext.substring(preContext.length - margin);\n const postContext = diffText1(bigpatch.diffs).substring(0, margin), postContextByteCount = countUtf8Bytes(postContext);\n postContext !== \"\" && (patch.length1 += postContext.length, patch.length2 += postContext.length, patch.utf8Length1 += postContextByteCount, patch.utf8Length2 += postContextByteCount, patch.diffs.length !== 0 && patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL ? patch.diffs[patch.diffs.length - 1][1] += postContext : patch.diffs.push([DIFF_EQUAL, postContext])), empty || patches.splice(++x, 0, patch);\n }\n }\n}\nfunction apply(patches, originalText, opts = {}) {\n if (typeof patches == \"string\")\n throw new Error(\"Patches must be an array - pass the patch to `parsePatch()` first\");\n let text = originalText;\n if (patches.length === 0)\n return [text, []];\n const parsed = adjustIndiciesToUcs2(patches, text, {\n allowExceedingIndices: opts.allowExceedingIndices\n }), margin = opts.margin || DEFAULT_MARGIN, deleteThreshold = opts.deleteThreshold || 0.4, nullPadding = addPadding(parsed, margin);\n text = nullPadding + text + nullPadding, splitMax(parsed, margin);\n let delta = 0;\n const results = [];\n for (let x = 0; x < parsed.length; x++) {\n const expectedLoc = parsed[x].start2 + delta, text1 = diffText1(parsed[x].diffs);\n let startLoc, endLoc = -1;\n if (text1.length > MAX_BITS ? (startLoc = match(text, text1.substring(0, MAX_BITS), expectedLoc), startLoc !== -1 && (endLoc = match(\n text,\n text1.substring(text1.length - MAX_BITS),\n expectedLoc + text1.length - MAX_BITS\n ), (endLoc === -1 || startLoc >= endLoc) && (startLoc = -1))) : startLoc = match(text, text1, expectedLoc), startLoc === -1)\n results[x] = !1, delta -= parsed[x].length2 - parsed[x].length1;\n else {\n results[x] = !0, delta = startLoc - expectedLoc;\n let text2;\n if (endLoc === -1 ? text2 = text.substring(startLoc, startLoc + text1.length) : text2 = text.substring(startLoc, endLoc + MAX_BITS), text1 === text2)\n text = text.substring(0, startLoc) + diffText2(parsed[x].diffs) + text.substring(startLoc + text1.length);\n else {\n let diffs = diff(text1, text2, { checkLines: !1 });\n if (text1.length > MAX_BITS && levenshtein(diffs) / text1.length > deleteThreshold)\n results[x] = !1;\n else {\n diffs = cleanupSemanticLossless(diffs);\n let index1 = 0, index2 = 0;\n for (let y = 0; y < parsed[x].diffs.length; y++) {\n const mod = parsed[x].diffs[y];\n mod[0] !== DIFF_EQUAL && (index2 = xIndex(diffs, index1)), mod[0] === DIFF_INSERT ? text = text.substring(0, startLoc + index2) + mod[1] + text.substring(startLoc + index2) : mod[0] === DIFF_DELETE && (text = text.substring(0, startLoc + index2) + text.substring(startLoc + xIndex(diffs, index1 + mod[1].length))), mod[0] !== DIFF_DELETE && (index1 += mod[1].length);\n }\n }\n }\n }\n }\n return text = text.substring(nullPadding.length, text.length - nullPadding.length), [text, results];\n}\nvar __defProp = Object.defineProperty, __getOwnPropSymbols = Object.getOwnPropertySymbols, __hasOwnProp = Object.prototype.hasOwnProperty, __propIsEnum = Object.prototype.propertyIsEnumerable, __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b))\n __propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);\n return a;\n};\nconst DEFAULT_OPTS = {\n margin: 4\n};\nfunction getDefaultOpts(opts = {}) {\n return __spreadValues(__spreadValues({}, DEFAULT_OPTS), opts);\n}\nfunction make(a, b, options) {\n if (typeof a == \"string\" && typeof b == \"string\") {\n let diffs = diff(a, b, { checkLines: !0 });\n return diffs.length > 2 && (diffs = cleanupSemantic(diffs), diffs = cleanupEfficiency(diffs)), _make(a, diffs, getDefaultOpts(options));\n }\n if (a && Array.isArray(a) && typeof b > \"u\")\n return _make(diffText1(a), a, getDefaultOpts(options));\n if (typeof a == \"string\" && b && Array.isArray(b))\n return _make(a, b, getDefaultOpts(options));\n throw new Error(\"Unknown call format to make()\");\n}\nfunction _make(textA, diffs, options) {\n if (diffs.length === 0)\n return [];\n const patches = [];\n let patch = createPatchObject(0, 0), patchDiffLength = 0, charCount1 = 0, charCount2 = 0, utf8Count1 = 0, utf8Count2 = 0, prepatchText = textA, postpatchText = textA;\n for (let x = 0; x < diffs.length; x++) {\n const currentDiff = diffs[x], [diffType, diffText] = currentDiff, diffTextLength = diffText.length, diffByteLength = countUtf8Bytes(diffText);\n switch (!patchDiffLength && diffType !== DIFF_EQUAL && (patch.start1 = charCount1, patch.start2 = charCount2, patch.utf8Start1 = utf8Count1, patch.utf8Start2 = utf8Count2), diffType) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = currentDiff, patch.length2 += diffTextLength, patch.utf8Length2 += diffByteLength, postpatchText = postpatchText.substring(0, charCount2) + diffText + postpatchText.substring(charCount2);\n break;\n case DIFF_DELETE:\n patch.length1 += diffTextLength, patch.utf8Length1 += diffByteLength, patch.diffs[patchDiffLength++] = currentDiff, postpatchText = postpatchText.substring(0, charCount2) + postpatchText.substring(charCount2 + diffTextLength);\n break;\n case DIFF_EQUAL:\n diffTextLength <= 2 * options.margin && patchDiffLength && diffs.length !== x + 1 ? (patch.diffs[patchDiffLength++] = currentDiff, patch.length1 += diffTextLength, patch.length2 += diffTextLength, patch.utf8Length1 += diffByteLength, patch.utf8Length2 += diffByteLength) : diffTextLength >= 2 * options.margin && patchDiffLength && (addContext(patch, prepatchText, options), patches.push(patch), patch = createPatchObject(-1, -1), patchDiffLength = 0, prepatchText = postpatchText, charCount1 = charCount2, utf8Count1 = utf8Count2);\n break;\n default:\n throw new Error(\"Unknown diff type\");\n }\n diffType !== DIFF_INSERT && (charCount1 += diffTextLength, utf8Count1 += diffByteLength), diffType !== DIFF_DELETE && (charCount2 += diffTextLength, utf8Count2 += diffByteLength);\n }\n return patchDiffLength && (addContext(patch, prepatchText, options), patches.push(patch)), patches;\n}\nfunction addContext(patch, text, opts) {\n if (text.length === 0)\n return;\n let pattern = text.substring(patch.start2, patch.start2 + patch.length1), padding = 0;\n for (; text.indexOf(pattern) !== text.lastIndexOf(pattern) && pattern.length < MAX_BITS - opts.margin - opts.margin; )\n padding += opts.margin, pattern = text.substring(patch.start2 - padding, patch.start2 + patch.length1 + padding);\n padding += opts.margin;\n let prefixStart = patch.start2 - padding;\n prefixStart >= 1 && isLowSurrogate(text[prefixStart]) && prefixStart--;\n const prefix = text.substring(prefixStart, patch.start2);\n prefix && patch.diffs.unshift([DIFF_EQUAL, prefix]);\n const prefixLength = prefix.length, prefixUtf8Length = countUtf8Bytes(prefix);\n let suffixEnd = patch.start2 + patch.length1 + padding;\n suffixEnd < text.length && isLowSurrogate(text[suffixEnd]) && suffixEnd++;\n const suffix = text.substring(patch.start2 + patch.length1, suffixEnd);\n suffix && patch.diffs.push([DIFF_EQUAL, suffix]);\n const suffixLength = suffix.length, suffixUtf8Length = countUtf8Bytes(suffix);\n patch.start1 -= prefixLength, patch.start2 -= prefixLength, patch.utf8Start1 -= prefixUtf8Length, patch.utf8Start2 -= prefixUtf8Length, patch.length1 += prefixLength + suffixLength, patch.length2 += prefixLength + suffixLength, patch.utf8Length1 += prefixUtf8Length + suffixUtf8Length, patch.utf8Length2 += prefixUtf8Length + suffixUtf8Length;\n}\nconst patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\nfunction parse(textline) {\n if (!textline)\n return [];\n const patches = [], lines = textline.split(`\n`);\n let textPointer = 0;\n for (; textPointer < lines.length; ) {\n const m = lines[textPointer].match(patchHeader);\n if (!m)\n throw new Error(`Invalid patch string: ${lines[textPointer]}`);\n const patch = createPatchObject(toInt(m[1]), toInt(m[3]));\n for (patches.push(patch), m[2] === \"\" ? (patch.start1--, patch.utf8Start1--, patch.length1 = 1, patch.utf8Length1 = 1) : m[2] === \"0\" ? (patch.length1 = 0, patch.utf8Length1 = 0) : (patch.start1--, patch.utf8Start1--, patch.utf8Length1 = toInt(m[2]), patch.length1 = patch.utf8Length1), m[4] === \"\" ? (patch.start2--, patch.utf8Start2--, patch.length2 = 1, patch.utf8Length2 = 1) : m[4] === \"0\" ? (patch.length2 = 0, patch.utf8Length2 = 0) : (patch.start2--, patch.utf8Start2--, patch.utf8Length2 = toInt(m[4]), patch.length2 = patch.utf8Length2), textPointer++; textPointer < lines.length; ) {\n const currentLine = lines[textPointer], sign = currentLine.charAt(0);\n if (sign === \"@\")\n break;\n if (sign === \"\") {\n textPointer++;\n continue;\n }\n let line;\n try {\n line = decodeURI(currentLine.slice(1));\n } catch (ex) {\n throw new Error(`Illegal escape in parse: ${currentLine}`);\n }\n const utf8Diff = countUtf8Bytes(line) - line.length;\n if (sign === \"-\")\n patch.diffs.push([DIFF_DELETE, line]), patch.length1 -= utf8Diff;\n else if (sign === \"+\")\n patch.diffs.push([DIFF_INSERT, line]), patch.length2 -= utf8Diff;\n else if (sign === \" \")\n patch.diffs.push([DIFF_EQUAL, line]), patch.length1 -= utf8Diff, patch.length2 -= utf8Diff;\n else\n throw new Error(`Invalid patch mode \"${sign}\" in: ${line}`);\n textPointer++;\n }\n }\n return patches;\n}\nfunction toInt(num) {\n return parseInt(num, 10);\n}\nfunction stringify(patches) {\n return patches.map(stringifyPatch).join(\"\");\n}\nfunction stringifyPatch(patch) {\n const { utf8Length1, utf8Length2, utf8Start1, utf8Start2, diffs } = patch;\n let coords1;\n utf8Length1 === 0 ? coords1 = `${utf8Start1},0` : utf8Length1 === 1 ? coords1 = `${utf8Start1 + 1}` : coords1 = `${utf8Start1 + 1},${utf8Length1}`;\n let coords2;\n utf8Length2 === 0 ? coords2 = `${utf8Start2},0` : utf8Length2 === 1 ? coords2 = `${utf8Start2 + 1}` : coords2 = `${utf8Start2 + 1},${utf8Length2}`;\n const text = [`@@ -${coords1} +${coords2} @@\n`];\n let op;\n for (let x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n op = \"+\";\n break;\n case DIFF_DELETE:\n op = \"-\";\n break;\n case DIFF_EQUAL:\n op = \" \";\n break;\n default:\n throw new Error(\"Unknown patch operation.\");\n }\n text[x + 1] = `${op + encodeURI(diffs[x][1])}\n`;\n }\n return text.join(\"\").replace(/%20/g, \" \");\n}\nexport {\n DIFF_DELETE,\n DIFF_EQUAL,\n DIFF_INSERT,\n adjustIndiciesToUcs2,\n apply as applyPatches,\n cleanupEfficiency,\n cleanupSemantic,\n diff as makeDiff,\n make as makePatches,\n match,\n parse as parsePatch,\n stringifyPatch,\n stringify as stringifyPatches,\n xIndex\n};\n//# sourceMappingURL=index.js.map\n","import type {Editor} from 'slate'\nimport {defaultKeyGenerator} from '../utils/key-generator'\n\nconst CURRENT_UNDO_STEP: WeakMap<Editor, {undoStepId: string} | undefined> =\n new WeakMap()\n\nexport function withUndoStep(editor: Editor, fn: () => void) {\n const current = CURRENT_UNDO_STEP.get(editor)\n\n if (current) {\n fn()\n return\n }\n\n CURRENT_UNDO_STEP.set(\n editor,\n current ?? {\n undoStepId: defaultKeyGenerator(),\n },\n )\n fn()\n CURRENT_UNDO_STEP.set(editor, undefined)\n}\n\nexport function getCurrentUndoStepId(editor: Editor) {\n return CURRENT_UNDO_STEP.get(editor)?.undoStepId\n}\n\nexport function createUndoStep(editor: Editor) {\n CURRENT_UNDO_STEP.set(editor, {\n undoStepId: defaultKeyGenerator(),\n })\n}\n\nexport function clearUndoStep(editor: Editor) {\n CURRENT_UNDO_STEP.set(editor, undefined)\n}\n","/**\n * This plugin will make the editor support undo/redo on the local state only.\n * The undo/redo steps are rebased against incoming patches since the step occurred.\n */\n\nimport type {Patch} from '@portabletext/patches'\nimport {\n DIFF_DELETE,\n DIFF_EQUAL,\n DIFF_INSERT,\n parsePatch,\n} from '@sanity/diff-match-patch'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {flatten, isEqual} from 'lodash'\nimport {\n Editor,\n Operation,\n Path,\n Transforms,\n type Descendant,\n type SelectionOperation,\n} from 'slate'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {fromSlateValue} from '../../internal-utils/values'\nimport type {BehaviorOperationImplementation} from '../../operations/behavior.operations'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {isNormalizingNode} from '../with-normalizing-node'\nimport {getCurrentUndoStepId} from '../with-undo-step'\nimport {isChangingRemotely} from '../withChanges'\nimport {\n isRedoing,\n isUndoing,\n setIsRedoing,\n setIsUndoing,\n withRedoing,\n withUndoing,\n} from '../withUndoRedo'\n\nconst debug = debugWithName('plugin:withUndoRedo')\nconst debugVerbose = debug.enabled && false\n\nconst SAVING = new WeakMap<Editor, boolean | undefined>()\nconst REMOTE_PATCHES = new WeakMap<\n Editor,\n {\n patch: Patch\n time: Date\n snapshot: PortableTextBlock[] | undefined\n previousSnapshot: PortableTextBlock[] | undefined\n }[]\n>()\nconst UNDO_STEP_LIMIT = 1000\n\nconst isSaving = (editor: Editor): boolean | undefined => {\n const state = SAVING.get(editor)\n return state === undefined ? true : state\n}\n\nexport interface Options {\n editorActor: EditorActor\n subscriptions: Array<() => () => void>\n}\n\nconst getRemotePatches = (editor: Editor) => {\n if (!REMOTE_PATCHES.get(editor)) {\n REMOTE_PATCHES.set(editor, [])\n }\n return REMOTE_PATCHES.get(editor) || []\n}\n\nexport function createWithUndoRedo(\n options: Options,\n): (editor: PortableTextSlateEditor) => PortableTextSlateEditor {\n const {editorActor} = options\n\n return (editor: PortableTextSlateEditor) => {\n let previousSnapshot: PortableTextBlock[] | undefined = fromSlateValue(\n editor.children,\n editorActor.getSnapshot().context.schema.block.name,\n )\n const remotePatches = getRemotePatches(editor)\n let previousUndoStepId = getCurrentUndoStepId(editor)\n\n options.subscriptions.push(() => {\n debug('Subscribing to patches')\n const sub = editorActor.on('patches', ({patches, snapshot}) => {\n let reset = false\n patches.forEach((patch) => {\n if (!reset && patch.origin !== 'local' && remotePatches) {\n if (patch.type === 'unset' && patch.path.length === 0) {\n debug(\n 'Someone else cleared the content, resetting undo/redo history',\n )\n editor.history = {undos: [], redos: []}\n remotePatches.splice(0, remotePatches.length)\n SAVING.set(editor, true)\n reset = true\n return\n }\n remotePatches.push({\n patch,\n time: new Date(),\n snapshot,\n previousSnapshot,\n })\n }\n })\n previousSnapshot = snapshot\n })\n return () => {\n debug('Unsubscribing to patches')\n sub.unsubscribe()\n }\n })\n\n editor.history = {undos: [], redos: []}\n\n const {apply} = editor\n\n editor.apply = (op: Operation) => {\n if (editorActor.getSnapshot().matches({'edit mode': 'read only'})) {\n apply(op)\n return\n }\n\n /**\n * We don't want to run any side effects when the editor is processing\n * remote changes.\n */\n if (isChangingRemotely(editor)) {\n apply(op)\n return\n }\n\n /**\n * We don't want to run any side effects when the editor is undoing or\n * redoing operations.\n */\n if (isUndoing(editor) || isRedoing(editor)) {\n apply(op)\n return\n }\n\n const savingUndoSteps = isSaving(editor)\n const currentUndoStepId = getCurrentUndoStepId(editor)\n\n if (!savingUndoSteps) {\n // If we are bypassing saving undo steps, then we can just move along.\n\n previousUndoStepId = currentUndoStepId\n\n apply(op)\n\n return\n }\n\n if (op.type !== 'set_selection') {\n // Clear the repo steps if any actual changes are made\n editor.history.redos = []\n }\n\n const step = editor.history.undos.at(editor.history.undos.length - 1)\n\n if (!step) {\n // If the undo stack is empty, then we can just create a new step and\n // move along.\n\n editor.history.undos.push({\n operations: [\n ...(editor.selection === null\n ? []\n : [createSelectOperation(editor)]),\n op,\n ],\n timestamp: new Date(),\n })\n\n apply(op)\n\n previousUndoStepId = currentUndoStepId\n\n return\n }\n\n const selectingWithoutUndoStepId =\n op.type === 'set_selection' &&\n currentUndoStepId === undefined &&\n previousUndoStepId !== undefined\n const selectingWithDifferentUndoStepId =\n op.type === 'set_selection' &&\n currentUndoStepId !== undefined &&\n previousUndoStepId !== undefined &&\n previousUndoStepId !== currentUndoStepId\n\n const lastOp = step.operations.at(-1)\n const mergeOpIntoPreviousStep =\n editor.operations.length > 0\n ? currentUndoStepId === previousUndoStepId ||\n isNormalizingNode(editor)\n : selectingWithoutUndoStepId ||\n selectingWithDifferentUndoStepId ||\n (currentUndoStepId === undefined &&\n previousUndoStepId === undefined)\n ? shouldMerge(op, lastOp) ||\n (lastOp?.type === 'set_selection' && op.type === 'set_selection')\n : currentUndoStepId === previousUndoStepId ||\n isNormalizingNode(editor)\n\n if (mergeOpIntoPreviousStep) {\n step.operations.push(op)\n } else {\n editor.history.undos.push({\n operations: [\n ...(editor.selection === null\n ? []\n : [createSelectOperation(editor)]),\n op,\n ],\n timestamp: new Date(),\n })\n }\n\n // Make sure we don't exceed the maximum number of undo steps we want\n // to store.\n while (editor.history.undos.length > UNDO_STEP_LIMIT) {\n editor.history.undos.shift()\n }\n\n previousUndoStepId = currentUndoStepId\n\n apply(op)\n }\n\n return editor\n }\n}\n\nexport const historyUndoOperationImplementation: BehaviorOperationImplementation<\n 'history.undo'\n> = ({operation}) => {\n const editor = operation.editor\n const {undos} = editor.history\n const remotePatches = getRemotePatches(editor)\n\n if (undos.length > 0) {\n const step = undos[undos.length - 1]\n debug('Undoing', step)\n if (step.operations.length > 0) {\n const otherPatches = remotePatches.filter(\n (item) => item.time >= step.timestamp,\n )\n let transformedOperations = step.operations\n otherPatches.forEach((item) => {\n transformedOperations = flatten(\n transformedOperations.map((op) =>\n transformOperation(\n editor,\n item.patch,\n op,\n item.snapshot,\n item.previousSnapshot,\n ),\n ),\n )\n })\n const reversedOperations = transformedOperations\n .map(Operation.inverse)\n .reverse()\n\n try {\n Editor.withoutNormalizing(editor, () => {\n withUndoing(editor, () => {\n withoutSaving(editor, () => {\n reversedOperations.forEach((op) => {\n editor.apply(op)\n })\n })\n })\n })\n } catch (err) {\n debug('Could not perform undo step', err)\n remotePatches.splice(0, remotePatches.length)\n Transforms.deselect(editor)\n editor.history = {undos: [], redos: []}\n SAVING.set(editor, true)\n setIsUndoing(editor, false)\n editor.onChange()\n return\n }\n editor.history.redos.push(step)\n editor.history.undos.pop()\n }\n }\n}\n\nexport const historyRedoOperationImplementation: BehaviorOperationImplementation<\n 'history.redo'\n> = ({operation}) => {\n const editor = operation.editor\n const {redos} = editor.history\n const remotePatches = getRemotePatches(editor)\n\n if (redos.length > 0) {\n const step = redos[redos.length - 1]\n debug('Redoing', step)\n if (step.operations.length > 0) {\n const otherPatches = remotePatches.filter(\n (item) => item.time >= step.timestamp,\n )\n let transformedOperations = step.operations\n otherPatches.forEach((item) => {\n transformedOperations = flatten(\n transformedOperations.map((op) =>\n transformOperation(\n editor,\n item.patch,\n op,\n item.snapshot,\n item.previousSnapshot,\n ),\n ),\n )\n })\n try {\n Editor.withoutNormalizing(editor, () => {\n withRedoing(editor, () => {\n withoutSaving(editor, () => {\n transformedOperations.forEach((op) => {\n editor.apply(op)\n })\n })\n })\n })\n } catch (err) {\n debug('Could not perform redo step', err)\n remotePatches.splice(0, remotePatches.length)\n Transforms.deselect(editor)\n editor.history = {undos: [], redos: []}\n SAVING.set(editor, true)\n setIsRedoing(editor, false)\n editor.onChange()\n return\n }\n editor.history.undos.push(step)\n editor.history.redos.pop()\n }\n }\n}\n\n/**\n * This will adjust the operation paths and offsets according to the\n * remote patches by other editors since the step operations was performed.\n */\nfunction transformOperation(\n editor: PortableTextSlateEditor,\n patch: Patch,\n operation: Operation,\n snapshot: PortableTextBlock[] | undefined,\n previousSnapshot: PortableTextBlock[] | undefined,\n): Operation[] {\n if (debugVerbose) {\n debug(\n `Adjusting '${operation.type}' operation paths for '${patch.type}' patch`,\n )\n debug(`Operation ${JSON.stringify(operation)}`)\n debug(`Patch ${JSON.stringify(patch)}`)\n }\n\n const transformedOperation = {...operation}\n\n if (patch.type === 'insert' && patch.path.length === 1) {\n const insertBlockIndex = (snapshot || []).findIndex((blk) =>\n isEqual({_key: blk._key}, patch.path[0]),\n )\n debug(\n `Adjusting block path (+${patch.items.length}) for '${transformedOperation.type}' operation and patch '${patch.type}'`,\n )\n return [\n adjustBlockPath(\n transformedOperation,\n patch.items.length,\n insertBlockIndex,\n ),\n ]\n }\n\n if (patch.type === 'unset' && patch.path.length === 1) {\n const unsetBlockIndex = (previousSnapshot || []).findIndex((blk) =>\n isEqual({_key: blk._key}, patch.path[0]),\n )\n // If this operation is targeting the same block that got removed, return empty\n if (\n 'path' in transformedOperation &&\n Array.isArray(transformedOperation.path) &&\n transformedOperation.path[0] === unsetBlockIndex\n ) {\n debug('Skipping transformation that targeted removed block')\n return []\n }\n if (debugVerbose) {\n debug(`Selection ${JSON.stringify(editor.selection)}`)\n debug(\n `Adjusting block path (-1) for '${transformedOperation.type}' operation and patch '${patch.type}'`,\n )\n }\n return [adjustBlockPath(transformedOperation, -1, unsetBlockIndex)]\n }\n\n // Someone reset the whole value\n if (patch.type === 'unset' && patch.path.length === 0) {\n debug(\n `Adjusting selection for unset everything patch and ${operation.type} operation`,\n )\n return []\n }\n\n if (patch.type === 'diffMatchPatch') {\n const operationTargetBlock = findOperationTargetBlock(\n editor,\n transformedOperation,\n )\n if (\n !operationTargetBlock ||\n !isEqual({_key: operationTargetBlock._key}, patch.path[0])\n ) {\n return [transformedOperation]\n }\n const diffPatches = parsePatch(patch.value)\n diffPatches.forEach((diffPatch) => {\n let adjustOffsetBy = 0\n let changedOffset = diffPatch.utf8Start1\n const {diffs} = diffPatch\n diffs.forEach((diff, index) => {\n const [diffType, text] = diff\n if (diffType === DIFF_INSERT) {\n adjustOffsetBy += text.length\n changedOffset += text.length\n } else if (diffType === DIFF_DELETE) {\n adjustOffsetBy -= text.length\n changedOffset -= text.length\n } else if (diffType === DIFF_EQUAL) {\n // Only up to the point where there are no other changes\n if (!diffs.slice(index).every(([dType]) => dType === DIFF_EQUAL)) {\n changedOffset += text.length\n }\n }\n })\n // Adjust accordingly if someone inserted text in the same node before us\n if (transformedOperation.type === 'insert_text') {\n if (changedOffset < transformedOperation.offset) {\n transformedOperation.offset += adjustOffsetBy\n }\n }\n // Adjust accordingly if someone removed text in the same node before us\n if (transformedOperation.type === 'remove_text') {\n if (\n changedOffset <=\n transformedOperation.offset - transformedOperation.text.length\n ) {\n transformedOperation.offset += adjustOffsetBy\n }\n }\n // Adjust set_selection operation's points to new offset\n if (transformedOperation.type === 'set_selection') {\n const currentFocus = transformedOperation.properties?.focus\n ? {...transformedOperation.properties.focus}\n : undefined\n const currentAnchor = transformedOperation?.properties?.anchor\n ? {...transformedOperation.properties.anchor}\n : undefined\n const newFocus = transformedOperation?.newProperties?.focus\n ? {...transformedOperation.newProperties.focus}\n : undefined\n const newAnchor = transformedOperation?.newProperties?.anchor\n ? {...transformedOperation.newProperties.anchor}\n : undefined\n if ((currentFocus && currentAnchor) || (newFocus && newAnchor)) {\n const points = [currentFocus, currentAnchor, newFocus, newAnchor]\n points.forEach((point) => {\n if (point && changedOffset < point.offset) {\n point.offset += adjustOffsetBy\n }\n })\n if (currentFocus && currentAnchor) {\n transformedOperation.properties = {\n focus: currentFocus,\n anchor: currentAnchor,\n }\n }\n if (newFocus && newAnchor) {\n transformedOperation.newProperties = {\n focus: newFocus,\n anchor: newAnchor,\n }\n }\n }\n }\n })\n return [transformedOperation]\n }\n return [transformedOperation]\n}\n/**\n * Adjust the block path for a operation\n */\nfunction adjustBlockPath(\n operation: Operation,\n level: number,\n blockIndex: number,\n): Operation {\n const transformedOperation = {...operation}\n if (\n blockIndex >= 0 &&\n transformedOperation.type !== 'set_selection' &&\n Array.isArray(transformedOperation.path) &&\n transformedOperation.path[0] >= blockIndex + level &&\n transformedOperation.path[0] + level > -1\n ) {\n const newPath = [\n transformedOperation.path[0] + level,\n ...transformedOperation.path.slice(1),\n ]\n transformedOperation.path = newPath\n }\n if (transformedOperation.type === 'set_selection') {\n const currentFocus = transformedOperation.properties?.focus\n ? {...transformedOperation.properties.focus}\n : undefined\n const currentAnchor = transformedOperation?.properties?.anchor\n ? {...transformedOperation.properties.anchor}\n : undefined\n const newFocus = transformedOperation?.newProperties?.focus\n ? {...transformedOperation.newProperties.focus}\n : undefined\n const newAnchor = transformedOperation?.newProperties?.anchor\n ? {...transformedOperation.newProperties.anchor}\n : undefined\n if ((currentFocus && currentAnchor) || (newFocus && newAnchor)) {\n const points = [currentFocus, currentAnchor, newFocus, newAnchor]\n points.forEach((point) => {\n if (\n point &&\n point.path[0] >= blockIndex + level &&\n point.path[0] + level > -1\n ) {\n point.path = [point.path[0] + level, ...point.path.slice(1)]\n }\n })\n if (currentFocus && currentAnchor) {\n transformedOperation.properties = {\n focus: currentFocus,\n anchor: currentAnchor,\n }\n }\n if (newFocus && newAnchor) {\n transformedOperation.newProperties = {\n focus: newFocus,\n anchor: newAnchor,\n }\n }\n }\n }\n // // Assign fresh point objects (we don't want to mutate the original ones)\n return transformedOperation\n}\n\n// Helper functions for editor.apply above\n\nconst shouldMerge = (op: Operation, prev: Operation | undefined): boolean => {\n if (op.type === 'set_selection') {\n return true\n }\n\n // Text input\n if (\n prev &&\n op.type === 'insert_text' &&\n prev.type === 'insert_text' &&\n op.offset === prev.offset + prev.text.length &&\n Path.equals(op.path, prev.path) &&\n op.text !== ' ' // Tokenize between words\n ) {\n return true\n }\n\n // Text deletion\n if (\n prev &&\n op.type === 'remove_text' &&\n prev.type === 'remove_text' &&\n op.offset + op.text.length === prev.offset &&\n Path.equals(op.path, prev.path)\n ) {\n return true\n }\n\n // Don't merge\n return false\n}\n\nexport function withoutSaving(editor: Editor, fn: () => void): void {\n const prev = isSaving(editor)\n SAVING.set(editor, false)\n fn()\n SAVING.set(editor, prev)\n}\n\nfunction createSelectOperation(editor: Editor): SelectionOperation {\n return {\n type: 'set_selection',\n properties: {...editor.selection},\n newProperties: {...editor.selection},\n }\n}\n\nfunction findOperationTargetBlock(\n editor: PortableTextSlateEditor,\n operation: Operation,\n): Descendant | undefined {\n let block: Descendant | undefined\n if (operation.type === 'set_selection' && editor.selection) {\n block = editor.children[editor.selection.focus.path[0]]\n } else if ('path' in operation) {\n block = editor.children[operation.path[0]]\n }\n return block\n}\n","import {Editor, Node, Range, Text, Transforms} from 'slate'\nimport {parseAnnotation} from '../utils/parse-blocks'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const addAnnotationOperationImplementation: BehaviorOperationImplementation<\n 'annotation.add'\n> = ({context, operation}) => {\n const parsedAnnotation = parseAnnotation({\n annotation: {\n _type: operation.annotation.name,\n ...operation.annotation.value,\n },\n context,\n options: {validateFields: true},\n })\n\n if (!parsedAnnotation) {\n throw new Error(\n `Failed to parse annotation ${JSON.stringify(operation.annotation)}`,\n )\n }\n\n const editor = operation.editor\n\n if (!editor.selection || Range.isCollapsed(editor.selection)) {\n return\n }\n\n const selectedBlocks = Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => editor.isTextBlock(node),\n reverse: Range.isBackward(editor.selection),\n })\n\n let blockIndex = 0\n\n for (const [block, blockPath] of selectedBlocks) {\n if (block.children.length === 0) {\n continue\n }\n\n if (block.children.length === 1 && block.children[0].text === '') {\n continue\n }\n\n // Make sure we don't generate more keys than needed\n const annotationKey =\n blockIndex === 0 ? parsedAnnotation._key : context.keyGenerator()\n const markDefs = block.markDefs ?? []\n const existingMarkDef = markDefs.find(\n (markDef) =>\n markDef._type === parsedAnnotation._type &&\n markDef._key === annotationKey,\n )\n\n if (existingMarkDef === undefined) {\n Transforms.setNodes(\n editor,\n {\n markDefs: [\n ...markDefs,\n {\n ...parsedAnnotation,\n _key: annotationKey,\n },\n ],\n },\n {at: blockPath},\n )\n }\n\n Transforms.setNodes(editor, {}, {match: Text.isText, split: true})\n\n const children = Node.children(editor, blockPath)\n\n for (const [span, path] of children) {\n if (!editor.isTextSpan(span)) {\n continue\n }\n\n if (!Range.includes(editor.selection, path)) {\n continue\n }\n\n const marks = span.marks ?? []\n\n Transforms.setNodes(\n editor,\n {\n marks: [...marks, annotationKey],\n },\n {at: path},\n )\n }\n\n blockIndex++\n }\n}\n","import type {PortableTextSpan} from '@sanity/types'\nimport {Editor, Node, Path, Range, Transforms} from 'slate'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const removeAnnotationOperationImplementation: BehaviorOperationImplementation<\n 'annotation.remove'\n> = ({operation}) => {\n const editor = operation.editor\n\n if (!editor.selection) {\n return\n }\n\n if (Range.isCollapsed(editor.selection)) {\n const [block, blockPath] = Editor.node(editor, editor.selection, {\n depth: 1,\n })\n\n if (!editor.isTextBlock(block)) {\n return\n }\n\n const markDefs = block.markDefs ?? []\n const potentialAnnotations = markDefs.filter(\n (markDef) => markDef._type === operation.annotation.name,\n )\n\n const [selectedChild, selectedChildPath] = Editor.node(\n editor,\n editor.selection,\n {\n depth: 2,\n },\n )\n\n if (!editor.isTextSpan(selectedChild)) {\n return\n }\n\n const annotationToRemove = selectedChild.marks?.find((mark) =>\n potentialAnnotations.some((markDef) => markDef._key === mark),\n )\n\n if (!annotationToRemove) {\n return\n }\n\n const previousSpansWithSameAnnotation: Array<\n [span: PortableTextSpan, path: Path]\n > = []\n\n for (const [child, childPath] of Node.children(editor, blockPath, {\n reverse: true,\n })) {\n if (!editor.isTextSpan(child)) {\n continue\n }\n\n if (!Path.isBefore(childPath, selectedChildPath)) {\n continue\n }\n\n if (child.marks?.includes(annotationToRemove)) {\n previousSpansWithSameAnnotation.push([child, childPath])\n } else {\n break\n }\n }\n\n const nextSpansWithSameAnnotation: Array<\n [span: PortableTextSpan, path: Path]\n > = []\n\n for (const [child, childPath] of Node.children(editor, blockPath)) {\n if (!editor.isTextSpan(child)) {\n continue\n }\n\n if (!Path.isAfter(childPath, selectedChildPath)) {\n continue\n }\n\n if (child.marks?.includes(annotationToRemove)) {\n nextSpansWithSameAnnotation.push([child, childPath])\n } else {\n break\n }\n }\n\n for (const [child, childPath] of [\n ...previousSpansWithSameAnnotation,\n [selectedChild, selectedChildPath] as const,\n ...nextSpansWithSameAnnotation,\n ]) {\n Transforms.setNodes(\n editor,\n {\n marks: child.marks?.filter((mark) => mark !== annotationToRemove),\n },\n {at: childPath},\n )\n }\n } else {\n Transforms.setNodes(\n editor,\n {},\n {\n match: (node) => editor.isTextSpan(node),\n split: true,\n hanging: true,\n },\n )\n\n const blocks = Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => editor.isTextBlock(node),\n })\n\n for (const [block, blockPath] of blocks) {\n const children = Node.children(editor, blockPath)\n\n for (const [child, childPath] of children) {\n if (!editor.isTextSpan(child)) {\n continue\n }\n\n if (!Range.includes(editor.selection, childPath)) {\n continue\n }\n\n const markDefs = block.markDefs ?? []\n const marks = child.marks ?? []\n const marksWithoutAnnotation = marks.filter((mark) => {\n const markDef = markDefs.find((markDef) => markDef._key === mark)\n return markDef?._type !== operation.annotation.name\n })\n\n if (marksWithoutAnnotation.length !== marks.length) {\n Transforms.setNodes(\n editor,\n {\n marks: marksWithoutAnnotation,\n },\n {at: childPath},\n )\n }\n }\n }\n }\n}\n","import {Transforms, type Element as SlateElement} from 'slate'\nimport {toSlateBlock} from '../internal-utils/values'\nimport {parseBlock} from '../utils/parse-blocks'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const blockSetOperationImplementation: BehaviorOperationImplementation<\n 'block.set'\n> = ({context, operation}) => {\n const blockIndex = operation.editor.blockIndexMap.get(operation.at[0]._key)\n\n if (blockIndex === undefined) {\n throw new Error(\n `Unable to find block index for block at ${JSON.stringify(operation.at)}`,\n )\n }\n\n const block = operation.editor.value.at(blockIndex)\n\n if (!block) {\n throw new Error(`Unable to find block at ${JSON.stringify(operation.at)}`)\n }\n\n const {_type, ...filteredProps} = operation.props\n\n const updatedBlock = {\n ...block,\n ...filteredProps,\n }\n\n const parsedBlock = parseBlock({\n context,\n block: updatedBlock,\n options: {\n removeUnusedMarkDefs: false,\n validateFields: true,\n },\n })\n\n if (!parsedBlock) {\n throw new Error(`Unable to update block at ${JSON.stringify(operation.at)}`)\n }\n\n const slateBlock = toSlateBlock(parsedBlock, {\n schemaTypes: context.schema,\n }) as SlateElement\n\n Transforms.setNodes(operation.editor, slateBlock, {at: [blockIndex]})\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport {omit} from 'lodash'\nimport {Editor, Transforms} from 'slate'\nimport {KEY_TO_VALUE_ELEMENT} from '../editor/weakMaps'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {fromSlateValue} from '../internal-utils/values'\nimport {parseBlock} from '../utils/parse-blocks'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const blockUnsetOperationImplementation: BehaviorOperationImplementation<\n 'block.unset'\n> = ({context, operation}) => {\n const location = toSlateRange({\n context: {\n schema: context.schema,\n value: operation.editor.value,\n selection: {\n anchor: {path: operation.at, offset: 0},\n focus: {path: operation.at, offset: 0},\n },\n },\n blockIndexMap: operation.editor.blockIndexMap,\n })\n\n if (!location) {\n throw new Error(\n `Unable to convert ${JSON.stringify(operation.at)} into a Slate Range`,\n )\n }\n\n const blockEntry = Editor.node(operation.editor, location, {depth: 1})\n const block = blockEntry?.[0]\n\n if (!block) {\n throw new Error(`Unable to find block at ${JSON.stringify(operation.at)}`)\n }\n\n const parsedBlock = fromSlateValue(\n [block],\n context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(operation.editor),\n ).at(0)\n\n if (!parsedBlock) {\n throw new Error(`Unable to parse block at ${JSON.stringify(operation.at)}`)\n }\n\n if (isTextBlock(context, parsedBlock)) {\n const propsToRemove = operation.props.filter((prop) => prop !== '_type')\n\n const updatedTextBlock = parseBlock({\n context,\n block: omit(parsedBlock, propsToRemove),\n options: {\n removeUnusedMarkDefs: true,\n validateFields: true,\n },\n })\n\n if (!updatedTextBlock) {\n throw new Error(\n `Unable to update block at ${JSON.stringify(operation.at)}`,\n )\n }\n\n const propsToSet: Record<string, unknown> = {}\n\n for (const prop of propsToRemove) {\n if (!(prop in updatedTextBlock)) {\n propsToSet[prop] = undefined\n } else {\n propsToSet[prop] = (updatedTextBlock as Record<string, unknown>)[prop]\n }\n }\n\n Transforms.setNodes(operation.editor, propsToSet, {at: location})\n\n return\n }\n\n const updatedBlockObject = parseBlock({\n context,\n block: omit(\n parsedBlock,\n operation.props.filter((prop) => prop !== '_type'),\n ),\n options: {\n removeUnusedMarkDefs: true,\n validateFields: true,\n },\n })\n\n if (!updatedBlockObject) {\n throw new Error(`Unable to update block at ${JSON.stringify(operation.at)}`)\n }\n\n const {_type, _key, ...props} = updatedBlockObject\n\n Transforms.setNodes(\n operation.editor,\n {\n _type,\n _key,\n value: props,\n },\n {at: location},\n )\n}\n","import {Editor, Element, Transforms} from 'slate'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const childSetOperationImplementation: BehaviorOperationImplementation<\n 'child.set'\n> = ({context, operation}) => {\n const location = toSlateRange({\n context: {\n schema: context.schema,\n value: operation.editor.value,\n selection: {\n anchor: {path: operation.at, offset: 0},\n focus: {path: operation.at, offset: 0},\n },\n },\n blockIndexMap: operation.editor.blockIndexMap,\n })\n\n if (!location) {\n throw new Error(\n `Unable to convert ${JSON.stringify(operation.at)} into a Slate Range`,\n )\n }\n\n const childEntry = Editor.node(operation.editor, location, {depth: 2})\n const child = childEntry?.[0]\n const childPath = childEntry?.[1]\n\n if (!child || !childPath) {\n throw new Error(`Unable to find child at ${JSON.stringify(operation.at)}`)\n }\n\n if (operation.editor.isTextSpan(child)) {\n const {_type, text, ...rest} = operation.props\n\n Transforms.setNodes(\n operation.editor,\n {\n ...child,\n ...rest,\n },\n {at: childPath},\n )\n\n if (typeof text === 'string') {\n if (child.text !== text) {\n operation.editor.apply({\n type: 'remove_text',\n path: childPath,\n offset: 0,\n text: child.text,\n })\n\n operation.editor.apply({\n type: 'insert_text',\n path: childPath,\n offset: 0,\n text,\n })\n }\n }\n\n return\n }\n\n if (Element.isElement(child)) {\n const definition = context.schema.inlineObjects.find(\n (definition) => definition.name === child._type,\n )\n\n if (!definition) {\n throw new Error(\n `Unable to find schema definition for Inline Object type ${child._type}`,\n )\n }\n\n const value =\n 'value' in child && typeof child.value === 'object' ? child.value : {}\n const {_type, _key, ...rest} = operation.props\n\n for (const prop in rest) {\n if (!definition.fields.some((field) => field.name === prop)) {\n delete rest[prop]\n }\n }\n\n Transforms.setNodes(\n operation.editor,\n {\n ...child,\n _key: typeof _key === 'string' ? _key : child._key,\n value: {\n ...value,\n ...rest,\n },\n },\n {at: childPath},\n )\n\n return\n }\n\n throw new Error(\n `Unable to determine the type of child at ${JSON.stringify(operation.at)}`,\n )\n}\n","import {applyAll} from '@portabletext/patches'\nimport {Editor, Element, Transforms} from 'slate'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const childUnsetOperationImplementation: BehaviorOperationImplementation<\n 'child.unset'\n> = ({context, operation}) => {\n const location = toSlateRange({\n context: {\n schema: context.schema,\n value: operation.editor.value,\n selection: {\n anchor: {path: operation.at, offset: 0},\n focus: {path: operation.at, offset: 0},\n },\n },\n blockIndexMap: operation.editor.blockIndexMap,\n })\n\n if (!location) {\n throw new Error(\n `Unable to convert ${JSON.stringify(operation.at)} into a Slate Range`,\n )\n }\n\n const childEntry = Editor.node(operation.editor, location, {depth: 2})\n const child = childEntry?.[0]\n const childPath = childEntry?.[1]\n\n if (!child || !childPath) {\n throw new Error(`Unable to find child at ${JSON.stringify(operation.at)}`)\n }\n\n if (operation.editor.isTextSpan(child)) {\n const newNode: Record<string, unknown> = {}\n\n for (const prop of operation.props) {\n if (prop === 'text') {\n // Unsetting `text` requires special treatment\n continue\n }\n\n if (prop === '_type') {\n // It's not allowed to unset the _type of a span\n continue\n }\n\n if (prop === '_key') {\n newNode._key = context.keyGenerator()\n continue\n }\n\n newNode[prop] = null\n }\n\n Transforms.setNodes(operation.editor, newNode, {at: childPath})\n\n if (operation.props.includes('text')) {\n operation.editor.apply({\n type: 'remove_text',\n path: childPath,\n offset: 0,\n text: child.text,\n })\n }\n\n return\n }\n\n if (Element.isElement(child)) {\n const value =\n 'value' in child && typeof child.value === 'object' ? child.value : {}\n const patches = operation.props.map((prop) => ({\n type: 'unset' as const,\n path: [prop],\n }))\n const newValue = applyAll(value, patches)\n\n Transforms.setNodes(\n operation.editor,\n {\n ...child,\n _key: operation.props.includes('_key')\n ? context.keyGenerator()\n : child._key,\n value: newValue,\n },\n {at: childPath},\n )\n\n return\n }\n\n throw new Error(\n `Unable to determine the type of child at ${JSON.stringify(operation.at)}`,\n )\n}\n","import {Editor, Range, Text, Transforms} from 'slate'\nimport {KEY_TO_VALUE_ELEMENT} from '../editor/weakMaps'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {fromSlateValue} from '../internal-utils/values'\nimport {getTrimmedSelection} from '../selectors/selector.get-trimmed-selection'\nimport {blockOffsetToSpanSelectionPoint} from '../utils/util.block-offset'\nimport {blockOffsetsToSelection} from '../utils/util.block-offsets-to-selection'\nimport {selectionPointToBlockOffset} from '../utils/util.selection-point-to-block-offset'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const decoratorAddOperationImplementation: BehaviorOperationImplementation<\n 'decorator.add'\n> = ({context, operation}) => {\n const editor = operation.editor\n const mark = operation.decorator\n const value = fromSlateValue(\n editor.children,\n context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n )\n\n const manualAnchor = operation.at?.anchor\n ? blockOffsetToSpanSelectionPoint({\n context: {\n ...context,\n value,\n },\n blockOffset: operation.at.anchor,\n direction: 'backward',\n })\n : undefined\n const manualFocus = operation.at?.focus\n ? blockOffsetToSpanSelectionPoint({\n context: {\n ...context,\n value,\n },\n blockOffset: operation.at.focus,\n direction: 'forward',\n })\n : undefined\n const manualSelection =\n manualAnchor && manualFocus\n ? {\n anchor: manualAnchor,\n focus: manualFocus,\n }\n : undefined\n\n const selection = manualSelection\n ? (toSlateRange({\n context: {\n schema: context.schema,\n value: operation.editor.value,\n selection: manualSelection,\n },\n blockIndexMap: operation.editor.blockIndexMap,\n }) ?? editor.selection)\n : editor.selection\n\n if (!selection) {\n return\n }\n\n const editorSelection = slateRangeToSelection({\n schema: context.schema,\n editor,\n range: selection,\n })\n const anchorOffset = editorSelection\n ? selectionPointToBlockOffset({\n context: {\n ...context,\n value,\n },\n selectionPoint: editorSelection.anchor,\n })\n : undefined\n const focusOffset = editorSelection\n ? selectionPointToBlockOffset({\n context: {\n ...context,\n value,\n },\n selectionPoint: editorSelection.focus,\n })\n : undefined\n\n if (!anchorOffset || !focusOffset) {\n throw new Error('Unable to find anchor or focus offset')\n }\n\n if (Range.isExpanded(selection)) {\n // Split if needed\n Transforms.setNodes(\n editor,\n {},\n {at: selection, match: Text.isText, split: true, hanging: true},\n )\n\n // The value might have changed after splitting\n const newValue = fromSlateValue(\n editor.children,\n context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n )\n // We need to find the new selection from the original offsets because the\n // split operation might have changed the value.\n const newSelection = blockOffsetsToSelection({\n context: {\n ...context,\n value: newValue,\n },\n offsets: {anchor: anchorOffset, focus: focusOffset},\n backward: editorSelection?.backward,\n })\n\n const trimmedSelection = getTrimmedSelection({\n blockIndexMap: editor.blockIndexMap,\n context: {\n converters: [],\n keyGenerator: context.keyGenerator,\n readOnly: false,\n schema: context.schema,\n selection: newSelection,\n value: newValue,\n },\n decoratorState: editor.decoratorState,\n })\n\n if (!trimmedSelection) {\n throw new Error('Unable to find trimmed selection')\n }\n\n const newRange = toSlateRange({\n context: {\n schema: context.schema,\n value: operation.editor.value,\n selection: trimmedSelection,\n },\n blockIndexMap: operation.editor.blockIndexMap,\n })\n\n if (!newRange) {\n throw new Error('Unable to find new selection')\n }\n\n // Use new selection to find nodes to decorate\n const splitTextNodes = Range.isRange(newRange)\n ? [\n ...Editor.nodes(editor, {\n at: newRange,\n match: (node) => Text.isText(node),\n }),\n ]\n : []\n\n for (const [node, path] of splitTextNodes) {\n const marks = [\n ...(Array.isArray(node.marks) ? node.marks : []).filter(\n (eMark: string) => eMark !== mark,\n ),\n mark,\n ]\n Transforms.setNodes(\n editor,\n {marks},\n {at: path, match: Text.isText, split: true, hanging: true},\n )\n }\n } else {\n const selectedSpan = Array.from(\n Editor.nodes(editor, {\n at: selection,\n match: (node) => editor.isTextSpan(node),\n }),\n )?.at(0)\n\n if (!selectedSpan) {\n return\n }\n\n const [block, blockPath] = Editor.node(editor, selection, {\n depth: 1,\n })\n const lonelyEmptySpan =\n editor.isTextBlock(block) &&\n block.children.length === 1 &&\n editor.isTextSpan(block.children[0]) &&\n block.children[0].text === ''\n ? block.children[0]\n : undefined\n\n if (lonelyEmptySpan) {\n const existingMarks = lonelyEmptySpan.marks ?? []\n const existingMarksWithoutDecorator = existingMarks.filter(\n (existingMark) => existingMark !== mark,\n )\n\n Transforms.setNodes(\n editor,\n {\n marks:\n existingMarks.length === existingMarksWithoutDecorator.length\n ? [...existingMarks, mark]\n : existingMarksWithoutDecorator,\n },\n {\n at: blockPath,\n match: (node) => editor.isTextSpan(node),\n },\n )\n } else {\n editor.decoratorState[mark] = true\n }\n }\n\n if (editor.selection) {\n // Reselect\n const selection = editor.selection\n editor.selection = {...selection}\n }\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport {deleteText, Editor, Element, Range, Transforms} from 'slate'\nimport {DOMEditor} from 'slate-dom'\nimport {createPlaceholderBlock} from '../internal-utils/create-placeholder-block'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {getBlockKeyFromSelectionPoint} from '../utils/util.selection-point'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const deleteOperationImplementation: BehaviorOperationImplementation<\n 'delete'\n> = ({context, operation}) => {\n const at = operation.at\n ? toSlateRange({\n context: {\n schema: context.schema,\n value: operation.editor.value,\n selection: operation.at,\n },\n blockIndexMap: operation.editor.blockIndexMap,\n })\n : undefined\n\n const selection = operation.editor.selection\n ? slateRangeToSelection({\n schema: context.schema,\n editor: operation.editor,\n range: operation.editor.selection,\n })\n : undefined\n\n const reverse = operation.direction === 'backward'\n const anchorPoint = operation.at?.anchor ?? selection?.anchor\n const focusPoint = operation.at?.focus ?? selection?.focus\n const startPoint = reverse ? focusPoint : anchorPoint\n const endPoint = reverse ? anchorPoint : focusPoint\n const startBlockKey = startPoint\n ? getBlockKeyFromSelectionPoint(startPoint)\n : undefined\n const endBlockKey = endPoint\n ? getBlockKeyFromSelectionPoint(endPoint)\n : undefined\n const startBlockIndex = startBlockKey\n ? operation.editor.blockIndexMap.get(startBlockKey)\n : undefined\n const endBlockIndex = endBlockKey\n ? operation.editor.blockIndexMap.get(endBlockKey)\n : undefined\n const startBlock = startBlockIndex\n ? operation.editor.value.at(startBlockIndex)\n : undefined\n const endBlock = endBlockIndex\n ? operation.editor.value.at(endBlockIndex)\n : undefined\n\n if (operation.unit === 'block') {\n if (startBlockIndex === undefined || endBlockIndex === undefined) {\n throw new Error('Failed to get start or end block index')\n }\n\n Transforms.removeNodes(operation.editor, {\n at: {\n anchor: {path: [startBlockIndex], offset: 0},\n focus: {path: [endBlockIndex], offset: 0},\n },\n mode: 'highest',\n })\n\n if (operation.editor.children.length === 0) {\n Transforms.insertNodes(operation.editor, createPlaceholderBlock(context))\n }\n\n return\n }\n\n if (operation.direction === 'backward' && operation.unit === 'line') {\n const range = at ?? operation.editor.selection ?? undefined\n\n if (!range) {\n throw new Error('Unable to delete line without a selection')\n }\n\n const parentBlockEntry = Editor.above(operation.editor, {\n match: (n) => Element.isElement(n) && Editor.isBlock(operation.editor, n),\n at: range,\n })\n\n if (parentBlockEntry) {\n const [, parentBlockPath] = parentBlockEntry\n const parentElementRange = Editor.range(\n operation.editor,\n parentBlockPath,\n range.anchor,\n )\n\n const currentLineRange = findCurrentLineRange(\n operation.editor,\n parentElementRange,\n )\n\n if (!Range.isCollapsed(currentLineRange)) {\n Transforms.delete(operation.editor, {at: currentLineRange})\n return\n }\n }\n }\n\n const hanging = reverse\n ? endPoint\n ? isTextBlock(context, endBlock)\n ? endPoint.offset === 0\n : true\n : false\n : startPoint\n ? isTextBlock(context, startBlock)\n ? startPoint.offset === 0\n : true\n : false\n\n if (at) {\n deleteText(operation.editor, {\n at,\n hanging,\n reverse,\n })\n } else {\n deleteText(operation.editor, {\n hanging,\n reverse,\n })\n }\n}\n\nfunction findCurrentLineRange(\n editor: PortableTextSlateEditor,\n parentRange: Range,\n): Range {\n const parentRangeBoundary = Editor.range(editor, Range.end(parentRange))\n const positions = Array.from(Editor.positions(editor, {at: parentRange}))\n\n let left = 0\n let right = positions.length\n let middle = Math.floor(right / 2)\n\n if (\n rangesAreOnSameLine(\n editor,\n Editor.range(editor, positions[left]),\n parentRangeBoundary,\n )\n ) {\n return Editor.range(editor, positions[left], parentRangeBoundary)\n }\n\n if (positions.length < 2) {\n return Editor.range(\n editor,\n positions[positions.length - 1],\n parentRangeBoundary,\n )\n }\n\n while (middle !== positions.length && middle !== left) {\n if (\n rangesAreOnSameLine(\n editor,\n Editor.range(editor, positions[middle]),\n parentRangeBoundary,\n )\n ) {\n right = middle\n } else {\n left = middle\n }\n\n middle = Math.floor((left + right) / 2)\n }\n\n return Editor.range(editor, positions[left], parentRangeBoundary)\n}\n\nfunction rangesAreOnSameLine(editor: DOMEditor, range1: Range, range2: Range) {\n const rect1 = DOMEditor.toDOMRange(editor, range1).getBoundingClientRect()\n const rect2 = DOMEditor.toDOMRange(editor, range2).getBoundingClientRect()\n\n return domRectsIntersect(rect1, rect2) && domRectsIntersect(rect2, rect1)\n}\n\nfunction domRectsIntersect(rect: DOMRect, compareRect: DOMRect) {\n const middle = (compareRect.top + compareRect.bottom) / 2\n\n return rect.top <= middle && rect.bottom >= middle\n}\n","import {isSpan} from '@portabletext/schema'\nimport {isEqual} from 'lodash'\nimport {Editor, Path, Point, Range, Transforms, type Descendant} from 'slate'\nimport {DOMEditor} from 'slate-dom'\nimport {\n getFocusBlock,\n getFocusChild,\n getLastBlock,\n getSelectionEndBlock,\n getSelectionStartBlock,\n} from '../internal-utils/slate-utils'\nimport {isEqualToEmptyEditor, toSlateValue} from '../internal-utils/values'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {parseBlock} from '../utils/parse-blocks'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport type {\n BehaviorOperationImplementation,\n BehaviorOperationImplementationContext,\n} from './behavior.operations'\n\nexport const insertBlockOperationImplementation: BehaviorOperationImplementation<\n 'insert.block'\n> = ({context, operation}) => {\n const parsedBlock = parseBlock({\n block: operation.block,\n context,\n options: {\n removeUnusedMarkDefs: true,\n validateFields: true,\n },\n })\n\n if (!parsedBlock) {\n throw new Error(`Failed to parse block ${JSON.stringify(operation.block)}`)\n }\n\n const fragment = toSlateValue([parsedBlock], {schemaTypes: context.schema})[0]\n\n if (!fragment) {\n throw new Error(\n `Failed to convert block to Slate fragment ${JSON.stringify(parsedBlock)}`,\n )\n }\n\n insertBlock({\n context,\n block: fragment,\n placement: operation.placement,\n select: operation.select ?? 'start',\n editor: operation.editor,\n })\n}\n\nexport function insertBlock({\n context,\n block,\n placement,\n select,\n editor,\n}: {\n context: BehaviorOperationImplementationContext\n block: Descendant\n placement: 'auto' | 'after' | 'before'\n select: 'start' | 'end' | 'none'\n editor: PortableTextSlateEditor\n}) {\n const [startBlock, startBlockPath] = getSelectionStartBlock({editor})\n const [endBlock, endBlockPath] = getSelectionEndBlock({editor})\n\n if (\n !editor.selection ||\n !startBlock ||\n !startBlockPath ||\n !endBlock ||\n !endBlockPath\n ) {\n if (select !== 'none') {\n DOMEditor.focus(editor)\n }\n\n const [lastBlock, lastBlockPath] = getLastBlock({editor})\n\n if (placement === 'before') {\n Transforms.insertNodes(editor, [block], {at: [0]})\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, [0]))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, [0]))\n }\n } else if (placement === 'after') {\n const nextPath = lastBlockPath ? [lastBlockPath[0] + 1] : [0]\n Transforms.insertNodes(editor, [block], {at: nextPath})\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, nextPath))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, nextPath))\n }\n } else {\n // placement === 'auto'\n\n if (lastBlock && isEqualToEmptyEditor([lastBlock], context.schema)) {\n // And if the last block was an empty text block, let's remove\n // that too\n Transforms.removeNodes(editor, {at: lastBlockPath})\n\n Transforms.insertNodes(editor, [block], {\n at: lastBlockPath,\n select: false,\n })\n\n Transforms.deselect(editor)\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, lastBlockPath))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, lastBlockPath))\n }\n\n return\n }\n\n if (\n editor.isTextBlock(block) &&\n lastBlock &&\n editor.isTextBlock(lastBlock)\n ) {\n const selectionBefore = Editor.end(editor, lastBlockPath)\n\n Transforms.insertFragment(editor, [block], {\n at: Editor.end(editor, lastBlockPath),\n })\n\n if (select === 'start') {\n Transforms.select(editor, selectionBefore)\n } else if (select === 'none') {\n Transforms.deselect(editor)\n }\n\n return\n }\n\n const nextPath = lastBlockPath ? [lastBlockPath[0] + 1] : [0]\n\n Transforms.insertNodes(editor, [block], {at: nextPath, select: false})\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, nextPath))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, nextPath))\n }\n }\n } else {\n if (placement === 'before') {\n const currentSelection = editor.selection\n const selectionStartPoint = Range.start(currentSelection)\n\n Transforms.insertNodes(editor, [block], {\n at: [selectionStartPoint.path[0]],\n select: false,\n })\n\n if (select === 'start') {\n Transforms.select(\n editor,\n Editor.start(editor, [selectionStartPoint.path[0]]),\n )\n } else if (select === 'end') {\n Transforms.select(\n editor,\n Editor.end(editor, [selectionStartPoint.path[0]]),\n )\n }\n } else if (placement === 'after') {\n const currentSelection = editor.selection\n const selectionEndPoint = Range.end(currentSelection)\n\n const nextPath = [selectionEndPoint.path[0] + 1]\n\n Transforms.insertNodes(editor, [block], {\n at: nextPath,\n select: false,\n })\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, nextPath))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, nextPath))\n }\n } else {\n // placement === 'auto'\n\n const currentSelection = editor.selection\n const endBlockEndPoint = Editor.start(editor, endBlockPath)\n\n if (Range.isExpanded(currentSelection) && !editor.isTextBlock(block)) {\n Transforms.delete(editor, {at: currentSelection})\n\n const newSelection = editor.selection\n\n const [focusBlock, focusBlockPath] = getFocusBlock({editor})\n\n Transforms.insertNodes(editor, [block], {\n voids: true,\n })\n\n const adjustedSelection =\n newSelection.anchor.offset === 0\n ? Range.transform(newSelection, {\n type: 'insert_node',\n node: block,\n path: [newSelection.anchor.path[0]],\n })\n : newSelection\n\n if (select === 'none' && adjustedSelection) {\n Transforms.select(editor, adjustedSelection)\n }\n\n if (focusBlock && isEqualToEmptyEditor([focusBlock], context.schema)) {\n Transforms.removeNodes(editor, {at: focusBlockPath})\n }\n\n return\n }\n\n if (editor.isTextBlock(endBlock) && editor.isTextBlock(block)) {\n const selectionStartPoint = Range.start(currentSelection)\n\n if (isEqualToEmptyEditor([endBlock], context.schema)) {\n const currentSelection = editor.selection\n\n Transforms.insertNodes(editor, [block], {\n at: endBlockPath,\n select: false,\n })\n Transforms.removeNodes(editor, {at: Path.next(endBlockPath)})\n\n if (select === 'start') {\n Transforms.select(editor, selectionStartPoint)\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, endBlockPath))\n } else {\n Transforms.select(editor, currentSelection)\n }\n\n return\n }\n\n const endBlockChildKeys = endBlock.children.map((child) => child._key)\n const endBlockMarkDefsKeys =\n endBlock.markDefs?.map((markDef) => markDef._key) ?? []\n\n // Assign new keys to markDefs with duplicate keys and keep track of\n // the mapping between the old and new keys\n const markDefKeyMap = new Map<string, string>()\n const adjustedMarkDefs = block.markDefs?.map((markDef) => {\n if (endBlockMarkDefsKeys.includes(markDef._key)) {\n const newKey = context.keyGenerator()\n markDefKeyMap.set(markDef._key, newKey)\n return {\n ...markDef,\n _key: newKey,\n }\n }\n\n return markDef\n })\n\n // Assign new keys to spans with duplicate keys and update any markDef\n // key if needed\n const adjustedChildren = block.children.map((child) => {\n if (isSpan(context, child)) {\n const marks =\n child.marks?.map((mark) => {\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey) {\n return markDefKey\n }\n\n return mark\n }) ?? []\n\n if (!isEqual(child.marks, marks)) {\n return {\n ...child,\n _key: endBlockChildKeys.includes(child._key)\n ? context.keyGenerator()\n : child._key,\n marks,\n }\n }\n }\n\n if (endBlockChildKeys.includes(child._key)) {\n return {\n ...child,\n _key: context.keyGenerator(),\n }\n }\n\n return child\n })\n\n // Carry over the markDefs from the incoming block to the end block\n Transforms.setNodes(\n editor,\n {\n markDefs: [\n ...(endBlock.markDefs ?? []),\n ...(adjustedMarkDefs ?? []),\n ],\n },\n {\n at: endBlockPath,\n },\n )\n\n // If the children have changed, we need to create a new block with\n // the adjusted children\n const adjustedBlock = !isEqual(block.children, adjustedChildren)\n ? {\n ...block,\n children: adjustedChildren as Descendant[],\n }\n : block\n\n if (select === 'end') {\n Transforms.insertFragment(editor, [adjustedBlock], {\n voids: true,\n })\n\n return\n }\n\n Transforms.insertFragment(editor, [adjustedBlock], {\n at: currentSelection,\n voids: true,\n })\n\n if (select === 'start') {\n Transforms.select(editor, selectionStartPoint)\n } else {\n if (!Point.equals(selectionStartPoint, endBlockEndPoint)) {\n Transforms.select(editor, selectionStartPoint)\n }\n }\n } else {\n if (!editor.isTextBlock(endBlock)) {\n Transforms.insertNodes(editor, [block], {select: false})\n\n const nextPath = [endBlockPath[0] + 1]\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, nextPath))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, nextPath))\n }\n } else {\n const endBlockStartPoint = Editor.start(editor, endBlockPath)\n const endBlockEndPoint = Editor.end(editor, endBlockPath)\n const selectionStartPoint = Range.start(currentSelection)\n const selectionEndPoint = Range.end(currentSelection)\n\n if (\n Range.isCollapsed(currentSelection) &&\n Point.equals(selectionStartPoint, endBlockStartPoint)\n ) {\n Transforms.insertNodes(editor, [block], {\n at: endBlockPath,\n select: false,\n })\n\n if (select === 'start' || select === 'end') {\n Transforms.select(editor, Editor.start(editor, endBlockPath))\n }\n\n if (isEmptyTextBlock(context, endBlock)) {\n Transforms.removeNodes(editor, {at: Path.next(endBlockPath)})\n }\n } else if (\n Range.isCollapsed(currentSelection) &&\n Point.equals(selectionEndPoint, endBlockEndPoint)\n ) {\n const nextPath = [endBlockPath[0] + 1]\n\n Transforms.insertNodes(editor, [block], {\n at: nextPath,\n select: false,\n })\n\n if (select === 'start' || select === 'end') {\n Transforms.select(editor, Editor.start(editor, nextPath))\n }\n } else if (\n Range.isExpanded(currentSelection) &&\n Point.equals(selectionStartPoint, endBlockStartPoint) &&\n Point.equals(selectionEndPoint, endBlockEndPoint)\n ) {\n Transforms.insertFragment(editor, [block], {\n at: currentSelection,\n })\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, endBlockPath))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, endBlockPath))\n }\n } else if (\n Range.isExpanded(currentSelection) &&\n Point.equals(selectionStartPoint, endBlockStartPoint)\n ) {\n Transforms.insertFragment(editor, [block], {\n at: currentSelection,\n })\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, endBlockPath))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, endBlockPath))\n }\n } else if (\n Range.isExpanded(currentSelection) &&\n Point.equals(selectionEndPoint, endBlockEndPoint)\n ) {\n Transforms.insertFragment(editor, [block], {\n at: currentSelection,\n })\n\n if (select === 'start') {\n Transforms.select(\n editor,\n Editor.start(editor, Path.next(endBlockPath)),\n )\n } else if (select === 'end') {\n Transforms.select(\n editor,\n Editor.end(editor, Path.next(endBlockPath)),\n )\n }\n } else {\n const currentSelection = editor.selection\n const [focusChild] = getFocusChild({editor})\n\n if (focusChild && editor.isTextSpan(focusChild)) {\n Transforms.splitNodes(editor, {\n at: currentSelection,\n })\n\n Transforms.insertFragment(editor, [block], {\n at: currentSelection,\n })\n\n if (select === 'start' || select === 'end') {\n Transforms.select(editor, [endBlockPath[0] + 1])\n } else {\n Transforms.select(editor, currentSelection)\n }\n } else {\n const nextPath = [endBlockPath[0] + 1]\n Transforms.insertNodes(editor, [block], {\n at: nextPath,\n select: false,\n })\n Transforms.select(editor, currentSelection)\n\n if (select === 'start') {\n Transforms.select(editor, Editor.start(editor, nextPath))\n } else if (select === 'end') {\n Transforms.select(editor, Editor.end(editor, nextPath))\n }\n }\n }\n }\n }\n }\n }\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport {Transforms} from 'slate'\nimport {EDITOR_TO_PENDING_SELECTION} from 'slate-dom'\nimport {getFocusBlock, getFocusSpan} from '../internal-utils/slate-utils'\nimport {VOID_CHILD_KEY} from '../internal-utils/values'\nimport {parseInlineObject, parseSpan} from '../utils/parse-blocks'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const insertChildOperationImplementation: BehaviorOperationImplementation<\n 'insert.child'\n> = ({context, operation}) => {\n const focus = operation.editor.selection?.focus\n const focusBlockIndex = focus?.path.at(0)\n const focusChildIndex = focus?.path.at(1)\n\n if (focusBlockIndex === undefined || focusChildIndex === undefined) {\n throw new Error('Unable to insert child without a focus')\n }\n\n const [focusBlock, focusBlockPath] = getFocusBlock({editor: operation.editor})\n\n if (!focus || !focusBlock || !focusBlockPath) {\n throw new Error('Unable to insert child without a focus block')\n }\n\n if (!isTextBlock(context, focusBlock)) {\n throw new Error('Unable to insert child into a non-text block')\n }\n\n const markDefs = focusBlock.markDefs ?? []\n const markDefKeyMap = new Map<string, string>()\n for (const markDef of markDefs) {\n markDefKeyMap.set(markDef._key, markDef._key)\n }\n\n const span = parseSpan({\n span: operation.child,\n context,\n markDefKeyMap,\n options: {validateFields: true},\n })\n\n if (span) {\n const [focusSpan] = getFocusSpan({editor: operation.editor})\n\n if (focusSpan) {\n Transforms.insertNodes(operation.editor, span, {\n at: focus,\n select: true,\n })\n } else {\n Transforms.insertNodes(operation.editor, span, {\n at: [focusBlockIndex, focusChildIndex + 1],\n select: true,\n })\n }\n\n // This makes sure the selection is set correctly when event handling is run\n // through Slate's Android input handling\n EDITOR_TO_PENDING_SELECTION.set(\n operation.editor,\n operation.editor.selection,\n )\n\n return\n }\n\n const inlineObject = parseInlineObject({\n inlineObject: operation.child,\n context,\n options: {validateFields: true},\n })\n\n if (inlineObject) {\n const {_key, _type, ...rest} = inlineObject\n\n const [focusSpan] = getFocusSpan({editor: operation.editor})\n\n if (focusSpan) {\n Transforms.insertNodes(\n operation.editor,\n {\n _key,\n _type,\n children: [\n {\n _key: VOID_CHILD_KEY,\n _type: 'span',\n text: '',\n marks: [],\n },\n ],\n value: rest,\n __inline: true,\n },\n {\n at: focus,\n select: true,\n },\n )\n } else {\n Transforms.insertNodes(\n operation.editor,\n {\n _key,\n _type,\n children: [\n {\n _key: VOID_CHILD_KEY,\n _type: 'span',\n text: '',\n marks: [],\n },\n ],\n value: rest,\n __inline: true,\n },\n {\n at: [focusBlockIndex, focusChildIndex + 1],\n select: true,\n },\n )\n }\n\n return\n }\n\n throw new Error('Unable to parse child')\n}\n","import {Transforms} from 'slate'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const insertTextOperationImplementation: BehaviorOperationImplementation<\n 'insert.text'\n> = ({operation}) => {\n Transforms.insertText(operation.editor, operation.text)\n}\n","import {Transforms} from 'slate'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const moveBackwardOperationImplementation: BehaviorOperationImplementation<\n 'move.backward'\n> = ({operation}) => {\n Transforms.move(operation.editor, {\n unit: 'character',\n distance: operation.distance,\n reverse: true,\n })\n}\n","import {Transforms} from 'slate'\nimport {getBlockKeyFromSelectionPoint} from '../utils/util.selection-point'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const moveBlockOperationImplementation: BehaviorOperationImplementation<\n 'move.block'\n> = ({operation}) => {\n const originKey = getBlockKeyFromSelectionPoint({\n path: operation.at,\n offset: 0,\n })\n\n if (!originKey) {\n throw new Error('Failed to get block key from selection point')\n }\n\n const originBlockIndex = operation.editor.blockIndexMap.get(originKey)\n\n if (originBlockIndex === undefined) {\n throw new Error('Failed to get block index from block key')\n }\n\n const destinationKey = getBlockKeyFromSelectionPoint({\n path: operation.to,\n offset: 0,\n })\n\n if (!destinationKey) {\n throw new Error('Failed to get block key from selection point')\n }\n\n const destinationBlockIndex =\n operation.editor.blockIndexMap.get(destinationKey)\n\n if (destinationBlockIndex === undefined) {\n throw new Error('Failed to get block index from block key')\n }\n\n Transforms.moveNodes(operation.editor, {\n at: [originBlockIndex],\n to: [destinationBlockIndex],\n mode: 'highest',\n })\n}\n","import {Transforms} from 'slate'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const moveForwardOperationImplementation: BehaviorOperationImplementation<\n 'move.forward'\n> = ({operation}) => {\n Transforms.move(operation.editor, {\n unit: 'character',\n distance: operation.distance,\n })\n}\n","import {Transforms} from 'slate'\nimport {IS_FOCUSED, IS_READ_ONLY} from 'slate-dom'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const selectOperationImplementation: BehaviorOperationImplementation<\n 'select'\n> = ({context, operation}) => {\n const newSelection = toSlateRange({\n context: {\n schema: context.schema,\n value: operation.editor.value,\n selection: operation.at,\n },\n blockIndexMap: operation.editor.blockIndexMap,\n })\n\n if (newSelection) {\n Transforms.select(operation.editor, newSelection)\n } else {\n Transforms.deselect(operation.editor)\n }\n\n if (IS_FOCUSED.get(operation.editor) && IS_READ_ONLY.get(operation.editor)) {\n IS_FOCUSED.set(operation.editor, false)\n }\n}\n","import {Editor} from 'slate'\nimport type {\n AbstractBehaviorEventType,\n SyntheticBehaviorEvent,\n} from '../behaviors/behavior.types.event'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {removeDecoratorOperationImplementation} from '../editor/plugins/createWithPortableTextMarkModel'\nimport {\n historyRedoOperationImplementation,\n historyUndoOperationImplementation,\n} from '../editor/plugins/createWithUndoRedo'\nimport type {OmitFromUnion, PickFromUnion} from '../type-utils'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {addAnnotationOperationImplementation} from './behavior.operation.annotation.add'\nimport {removeAnnotationOperationImplementation} from './behavior.operation.annotation.remove'\nimport {blockSetOperationImplementation} from './behavior.operation.block.set'\nimport {blockUnsetOperationImplementation} from './behavior.operation.block.unset'\nimport {childSetOperationImplementation} from './behavior.operation.child.set'\nimport {childUnsetOperationImplementation} from './behavior.operation.child.unset'\nimport {decoratorAddOperationImplementation} from './behavior.operation.decorator.add'\nimport {deleteOperationImplementation} from './behavior.operation.delete'\nimport {insertBlockOperationImplementation} from './behavior.operation.insert.block'\nimport {insertChildOperationImplementation} from './behavior.operation.insert.child'\nimport {insertTextOperationImplementation} from './behavior.operation.insert.text'\nimport {moveBackwardOperationImplementation} from './behavior.operation.move.backward'\nimport {moveBlockOperationImplementation} from './behavior.operation.move.block'\nimport {moveForwardOperationImplementation} from './behavior.operation.move.forward'\nimport {selectOperationImplementation} from './behavior.operation.select'\n\nexport type BehaviorOperationImplementationContext = Pick<\n EditorContext,\n 'keyGenerator' | 'schema'\n>\n\nexport type BehaviorOperationImplementation<\n TBehaviorOperationType extends BehaviorOperation['type'],\n> = ({\n context,\n operation,\n}: {\n context: BehaviorOperationImplementationContext\n operation: PickFromUnion<BehaviorOperation, 'type', TBehaviorOperationType>\n}) => void\n\ntype BehaviorOperation = OmitFromUnion<\n SyntheticBehaviorEvent,\n 'type',\n AbstractBehaviorEventType\n> & {\n editor: PortableTextSlateEditor\n}\n\ntype BehaviorOperationImplementations = {\n [TBehaviorOperationType in BehaviorOperation['type']]: BehaviorOperationImplementation<TBehaviorOperationType>\n}\n\nconst behaviorOperationImplementations: BehaviorOperationImplementations = {\n 'annotation.add': addAnnotationOperationImplementation,\n 'annotation.remove': removeAnnotationOperationImplementation,\n 'block.set': blockSetOperationImplementation,\n 'block.unset': blockUnsetOperationImplementation,\n 'child.set': childSetOperationImplementation,\n 'child.unset': childUnsetOperationImplementation,\n 'decorator.add': decoratorAddOperationImplementation,\n 'decorator.remove': removeDecoratorOperationImplementation,\n 'delete': deleteOperationImplementation,\n 'history.redo': historyRedoOperationImplementation,\n 'history.undo': historyUndoOperationImplementation,\n 'insert.block': insertBlockOperationImplementation,\n 'insert.child': insertChildOperationImplementation,\n 'insert.text': insertTextOperationImplementation,\n 'move.backward': moveBackwardOperationImplementation,\n 'move.block': moveBlockOperationImplementation,\n 'move.forward': moveForwardOperationImplementation,\n 'select': selectOperationImplementation,\n}\n\nexport function performOperation({\n context,\n operation,\n}: {\n context: BehaviorOperationImplementationContext\n operation: BehaviorOperation\n}) {\n Editor.withoutNormalizing(operation.editor, () => {\n try {\n switch (operation.type) {\n case 'annotation.add': {\n behaviorOperationImplementations['annotation.add']({\n context,\n operation: operation,\n })\n break\n }\n case 'annotation.remove': {\n behaviorOperationImplementations['annotation.remove']({\n context,\n operation: operation,\n })\n break\n }\n case 'block.set': {\n behaviorOperationImplementations['block.set']({\n context,\n operation: operation,\n })\n break\n }\n case 'block.unset': {\n behaviorOperationImplementations['block.unset']({\n context,\n operation: operation,\n })\n break\n }\n case 'child.set': {\n behaviorOperationImplementations['child.set']({\n context,\n operation: operation,\n })\n break\n }\n case 'child.unset': {\n behaviorOperationImplementations['child.unset']({\n context,\n operation: operation,\n })\n break\n }\n case 'decorator.add': {\n behaviorOperationImplementations['decorator.add']({\n context,\n operation: operation,\n })\n break\n }\n case 'decorator.remove': {\n behaviorOperationImplementations['decorator.remove']({\n context,\n operation: operation,\n })\n break\n }\n case 'delete': {\n behaviorOperationImplementations.delete({\n context,\n operation: operation,\n })\n break\n }\n case 'history.redo': {\n behaviorOperationImplementations['history.redo']({\n context,\n operation: operation,\n })\n break\n }\n case 'history.undo': {\n behaviorOperationImplementations['history.undo']({\n context,\n operation: operation,\n })\n break\n }\n case 'insert.block': {\n behaviorOperationImplementations['insert.block']({\n context,\n operation: operation,\n })\n break\n }\n case 'insert.child': {\n behaviorOperationImplementations['insert.child']({\n context,\n operation: operation,\n })\n break\n }\n case 'insert.text': {\n behaviorOperationImplementations['insert.text']({\n context,\n operation: operation,\n })\n break\n }\n case 'move.backward': {\n behaviorOperationImplementations['move.backward']({\n context,\n operation: operation,\n })\n break\n }\n case 'move.block': {\n behaviorOperationImplementations['move.block']({\n context,\n operation: operation,\n })\n break\n }\n case 'move.forward': {\n behaviorOperationImplementations['move.forward']({\n context,\n operation: operation,\n })\n break\n }\n default: {\n behaviorOperationImplementations.select({\n context,\n operation: operation,\n })\n break\n }\n }\n } catch (error) {\n console.error(\n new Error(\n `Executing \"${operation.type}\" failed due to: ${error.message}`,\n ),\n )\n }\n })\n}\n","import type {Editor} from 'slate'\n\nconst IS_PERFORMING_OPERATION: WeakMap<Editor, boolean | undefined> =\n new WeakMap()\n\nexport function withPerformingBehaviorOperation(\n editor: Editor,\n fn: () => void,\n) {\n const prev = IS_PERFORMING_OPERATION.get(editor)\n\n IS_PERFORMING_OPERATION.set(editor, true)\n\n fn()\n\n IS_PERFORMING_OPERATION.set(editor, prev)\n}\n\nexport function isPerformingBehaviorOperation(editor: Editor) {\n return IS_PERFORMING_OPERATION.get(editor) ?? false\n}\n","import {Editor} from 'slate'\nimport {slateRangeToSelection} from '../../internal-utils/slate-utils'\nimport {performOperation} from '../../operations/behavior.operations'\nimport type {EditorActor} from '../editor-machine'\nimport {isPerformingBehaviorOperation} from '../with-performing-behavior-operation'\n\nexport function createWithEventListeners(editorActor: EditorActor) {\n return function withEventListeners(editor: Editor) {\n if (editorActor.getSnapshot().context.maxBlocks !== undefined) {\n return editor\n }\n\n const {delete: editorDelete, select} = editor\n\n editor.delete = (options) => {\n if (isPerformingBehaviorOperation(editor)) {\n editorDelete(options)\n return\n }\n\n const range = options?.at ? Editor.range(editor, options.at) : undefined\n const selection = range\n ? slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor,\n range,\n })\n : undefined\n\n if (selection) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'delete',\n at: selection,\n direction: options?.reverse ? 'backward' : 'forward',\n unit: options?.unit,\n },\n editor,\n })\n } else {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'delete',\n direction: options?.reverse ? 'backward' : 'forward',\n unit: options?.unit,\n },\n editor,\n })\n }\n }\n\n editor.deleteBackward = (unit) => {\n if (isPerformingBehaviorOperation(editor)) {\n console.error('Unexpected call to .deleteBackward(...)')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'delete.backward',\n unit,\n },\n editor,\n })\n return\n }\n\n editor.deleteForward = (unit) => {\n if (isPerformingBehaviorOperation(editor)) {\n console.error('Unexpected call to .deleteForward(...)')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'delete.forward',\n unit,\n },\n editor,\n })\n return\n }\n\n editor.insertBreak = () => {\n if (isPerformingBehaviorOperation(editor)) {\n console.error('Unexpected call to .insertBreak(...)')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'insert.break',\n },\n editor,\n })\n return\n }\n\n editor.insertData = (dataTransfer) => {\n if (isPerformingBehaviorOperation(editor)) {\n console.error('Unexpected call to .insertData(...)')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'input.*',\n originEvent: {\n dataTransfer,\n },\n },\n editor,\n })\n }\n\n editor.insertSoftBreak = () => {\n if (isPerformingBehaviorOperation(editor)) {\n performOperation({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n operation: {type: 'insert.text', text: '\\n', editor},\n })\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'insert.soft break',\n },\n editor,\n })\n return\n }\n\n editor.insertText = (text) => {\n if (isPerformingBehaviorOperation(editor)) {\n performOperation({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n operation: {type: 'insert.text', text, editor},\n })\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'insert.text',\n text,\n },\n editor,\n })\n return\n }\n\n editor.redo = () => {\n if (isPerformingBehaviorOperation(editor)) {\n performOperation({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n operation: {\n type: 'history.redo',\n editor,\n },\n })\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'history.redo',\n },\n editor,\n })\n return\n }\n\n editor.select = (location) => {\n if (isPerformingBehaviorOperation(editor)) {\n select(location)\n return\n }\n\n const range = Editor.range(editor, location)\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'select',\n at: slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor,\n range,\n }),\n },\n editor,\n })\n return\n }\n\n editor.setFragmentData = () => {\n console.error('Unexpected call to .setFragmentData(...)')\n return\n }\n\n editor.undo = () => {\n if (isPerformingBehaviorOperation(editor)) {\n performOperation({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n operation: {\n type: 'history.undo',\n editor,\n },\n })\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'history.undo',\n },\n editor,\n })\n return\n }\n\n return editor\n }\n}\n","import type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {isChangingRemotely} from '../withChanges'\nimport {isRedoing, isUndoing} from '../withUndoRedo'\n\n/**\n * This plugin makes sure that the PTE maxBlocks prop is respected\n *\n */\nexport function createWithMaxBlocks(editorActor: EditorActor) {\n return function withMaxBlocks(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n const {apply} = editor\n editor.apply = (operation) => {\n if (editorActor.getSnapshot().matches({'edit mode': 'read only'})) {\n apply(operation)\n return\n }\n\n /**\n * We don't want to run any side effects when the editor is processing\n * remote changes.\n */\n if (isChangingRemotely(editor)) {\n apply(operation)\n return\n }\n\n /**\n * We don't want to run any side effects when the editor is undoing or\n * redoing operations.\n */\n if (isUndoing(editor) || isRedoing(editor)) {\n apply(operation)\n return\n }\n\n const rows = editorActor.getSnapshot().context.maxBlocks ?? -1\n if (rows > 0 && editor.children.length >= rows) {\n if (\n (operation.type === 'insert_node' ||\n operation.type === 'split_node') &&\n operation.path.length === 1\n ) {\n return\n }\n }\n apply(operation)\n }\n return editor\n }\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport {isEqual} from 'lodash'\nimport {Editor, Element, Node, Path, Transforms} from 'slate'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {withNormalizeNode} from '../with-normalizing-node'\nimport {isChangingRemotely} from '../withChanges'\nimport {isRedoing, isUndoing} from '../withUndoRedo'\n\n/**\n * This plugin makes sure that every new node in the editor get a new _key prop when created\n *\n */\nexport function createWithObjectKeys(editorActor: EditorActor) {\n return function withKeys(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n const {apply, normalizeNode} = editor\n\n // The default behavior is to always generate a new key here.\n // For example, when undoing and redoing we want to retain the keys, but\n // when we create a new bold span by splitting a non-bold-span we want the produced node to get a new key.\n editor.apply = (operation) => {\n /**\n * We don't want to run any side effects when the editor is processing\n * remote changes.\n */\n if (isChangingRemotely(editor)) {\n apply(operation)\n return\n }\n\n /**\n * We don't want to run any side effects when the editor is undoing or\n * redoing operations.\n */\n if (isUndoing(editor) || isRedoing(editor)) {\n apply(operation)\n return\n }\n\n if (operation.type === 'split_node') {\n const existingKeys = [...Node.descendants(editor)].map(\n ([node]) => node._key,\n )\n\n apply({\n ...operation,\n properties: {\n ...operation.properties,\n _key:\n operation.properties._key === undefined ||\n existingKeys.includes(operation.properties._key)\n ? editorActor.getSnapshot().context.keyGenerator()\n : operation.properties._key,\n },\n })\n\n return\n }\n\n if (operation.type === 'insert_node') {\n if (!Editor.isEditor(operation.node)) {\n const existingKeys = [...Node.descendants(editor)].map(\n ([node]) => node._key,\n )\n\n apply({\n ...operation,\n node: {\n ...operation.node,\n _key:\n operation.node._key === undefined ||\n existingKeys.includes(operation.node._key)\n ? editorActor.getSnapshot().context.keyGenerator()\n : operation.node._key,\n },\n })\n\n return\n }\n }\n\n if (operation.type === 'merge_node') {\n const index = operation.path[operation.path.length - 1]\n const prevPath = Path.previous(operation.path)\n const prevIndex = prevPath[prevPath.length - 1]\n\n if (operation.path.length !== 1 || prevPath.length !== 1) {\n apply(operation)\n return\n }\n\n const block = editor.value.at(index)\n const previousBlock = editor.value.at(prevIndex)\n\n if (!block || !previousBlock) {\n apply(operation)\n return\n }\n\n if (\n !isTextBlock(editorActor.getSnapshot().context, block) ||\n !isTextBlock(editorActor.getSnapshot().context, previousBlock)\n ) {\n apply(operation)\n return\n }\n\n // If we are merging two text blocks, then we need to make sure there\n // are no duplicate keys in the blocks. Therefore, we assign new keys\n // to any child or markDef that shares key with other children or\n // markDefs in the previous block.\n const previousBlockChildKeys = previousBlock.children.map(\n (child) => child._key,\n )\n const previousBlockMarkDefKeys =\n previousBlock.markDefs?.map((markDef) => markDef._key) ?? []\n\n // Assign new keys to markDefs with duplicate keys and keep track of\n // the mapping between the old and new keys\n const markDefKeyMap = new Map<string, string>()\n const adjustedMarkDefs = block.markDefs?.map((markDef) => {\n if (previousBlockMarkDefKeys.includes(markDef._key)) {\n const newKey = editorActor.getSnapshot().context.keyGenerator()\n markDefKeyMap.set(markDef._key, newKey)\n return {\n ...markDef,\n _key: newKey,\n }\n }\n\n return markDef\n })\n\n // Assign new keys to spans with duplicate keys and update any markDef\n // key if needed\n let childIndex = 0\n for (const child of block.children) {\n if (isSpan(editorActor.getSnapshot().context, child)) {\n const marks =\n child.marks?.map((mark) => {\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey) {\n return markDefKey\n }\n\n return mark\n }) ?? []\n\n if (!isEqual(child.marks, marks)) {\n Transforms.setNodes(\n editor,\n {\n marks,\n },\n {\n at: [index, childIndex],\n },\n )\n }\n }\n\n if (previousBlockChildKeys.includes(child._key)) {\n Transforms.setNodes(\n editor,\n {\n _key: editorActor.getSnapshot().context.keyGenerator(),\n },\n {\n at: [index, childIndex],\n },\n )\n }\n childIndex++\n }\n\n apply({\n ...operation,\n properties: {\n ...operation.properties,\n // Make sure the adjusted markDefs are carried along for the merge\n // operation\n markDefs: adjustedMarkDefs,\n },\n })\n return\n }\n\n apply(operation)\n }\n\n editor.normalizeNode = (entry) => {\n const [node, path] = entry\n\n if (Element.isElement(node)) {\n const [parent] = Editor.parent(editor, path)\n\n if (parent && Editor.isEditor(parent)) {\n const blockKeys = new Set<string>()\n\n for (const sibling of parent.children) {\n if (sibling._key && blockKeys.has(sibling._key)) {\n const _key = editorActor.getSnapshot().context.keyGenerator()\n\n blockKeys.add(_key)\n\n withNormalizeNode(editor, () => {\n Transforms.setNodes(editor, {_key}, {at: path})\n })\n\n return\n }\n\n if (!sibling._key) {\n const _key = editorActor.getSnapshot().context.keyGenerator()\n\n blockKeys.add(_key)\n\n withNormalizeNode(editor, () => {\n Transforms.setNodes(editor, {_key}, {at: path})\n })\n\n return\n }\n\n blockKeys.add(sibling._key)\n }\n }\n }\n\n if (\n Element.isElement(node) &&\n node._type === editorActor.getSnapshot().context.schema.block.name\n ) {\n // Set key on block itself\n if (!node._key) {\n withNormalizeNode(editor, () => {\n Transforms.setNodes(\n editor,\n {_key: editorActor.getSnapshot().context.keyGenerator()},\n {at: path},\n )\n })\n return\n }\n\n // Set unique keys on it's children\n const childKeys = new Set<string>()\n\n for (const [child, childPath] of Node.children(editor, path)) {\n if (child._key && childKeys.has(child._key)) {\n const _key = editorActor.getSnapshot().context.keyGenerator()\n\n childKeys.add(_key)\n\n withNormalizeNode(editor, () => {\n Transforms.setNodes(editor, {_key}, {at: childPath})\n })\n\n return\n }\n\n if (!child._key) {\n const _key = editorActor.getSnapshot().context.keyGenerator()\n\n childKeys.add(_key)\n\n withNormalizeNode(editor, () => {\n Transforms.setNodes(editor, {_key}, {at: childPath})\n })\n\n return\n }\n\n childKeys.add(child._key)\n }\n }\n\n withNormalizeNode(editor, () => {\n normalizeNode(entry)\n })\n }\n\n return editor\n }\n}\n","import {\n applyAll,\n type DiffMatchPatch,\n type InsertPatch,\n type Patch,\n type SetPatch,\n type UnsetPatch,\n} from '@portabletext/patches'\nimport {\n cleanupEfficiency,\n DIFF_DELETE,\n DIFF_EQUAL,\n DIFF_INSERT,\n applyPatches as diffMatchPatchApplyPatches,\n makeDiff,\n parsePatch,\n} from '@sanity/diff-match-patch'\nimport type {Path, PortableTextBlock, PortableTextChild} from '@sanity/types'\nimport {Element, Node, Text, Transforms, type Descendant} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport {KEY_TO_SLATE_ELEMENT} from '../editor/weakMaps'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\nimport {isEqualToEmptyEditor, toSlateValue} from './values'\n\n/**\n * Creates a function that can apply a patch onto a PortableTextSlateEditor.\n */\nexport function createApplyPatch(\n schema: EditorSchema,\n): (editor: PortableTextSlateEditor, patch: Patch) => boolean {\n return (editor: PortableTextSlateEditor, patch: Patch): boolean => {\n let changed = false\n\n try {\n switch (patch.type) {\n case 'insert':\n changed = insertPatch(editor, patch, schema)\n break\n case 'unset':\n changed = unsetPatch(editor, patch)\n break\n case 'set':\n changed = setPatch(editor, patch)\n break\n case 'diffMatchPatch':\n changed = diffMatchPatch(editor, patch)\n break\n }\n } catch (err) {\n console.error(err)\n }\n\n return changed\n }\n}\n\nfunction diffMatchPatch(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection' | 'onChange'\n >,\n patch: DiffMatchPatch,\n): boolean {\n const block = findBlock(editor.children, patch.path)\n\n if (!block) {\n return false\n }\n\n const child = findBlockChild(block, patch.path)\n\n if (!child) {\n return false\n }\n\n const isSpanTextDiffMatchPatch =\n block &&\n editor.isTextBlock(block.node) &&\n patch.path.length === 4 &&\n patch.path[1] === 'children' &&\n patch.path[3] === 'text'\n\n if (!isSpanTextDiffMatchPatch || !Text.isText(child.node)) {\n return false\n }\n\n const patches = parsePatch(patch.value)\n const [newValue] = diffMatchPatchApplyPatches(patches, child.node.text, {\n allowExceedingIndices: true,\n })\n const diff = cleanupEfficiency(makeDiff(child.node.text, newValue), 5)\n\n let offset = 0\n for (const [op, text] of diff) {\n if (op === DIFF_INSERT) {\n editor.apply({\n type: 'insert_text',\n path: [block.index, child.index],\n offset,\n text,\n })\n offset += text.length\n } else if (op === DIFF_DELETE) {\n editor.apply({\n type: 'remove_text',\n path: [block.index, child.index],\n offset: offset,\n text,\n })\n } else if (op === DIFF_EQUAL) {\n offset += text.length\n }\n }\n\n return true\n}\n\nfunction insertPatch(\n editor: PortableTextSlateEditor,\n patch: InsertPatch,\n schema: EditorSchema,\n) {\n const block = findBlock(editor.children, patch.path)\n\n if (!block) {\n return false\n }\n\n if (patch.path.length > 1 && patch.path[1] !== 'children') {\n return false\n }\n\n // Insert blocks\n if (patch.path.length === 1) {\n const {items, position} = patch\n const blocksToInsert = toSlateValue(\n items as PortableTextBlock[],\n {schemaTypes: schema},\n KEY_TO_SLATE_ELEMENT.get(editor),\n ) as Descendant[]\n const targetBlockIndex = block.index\n const normalizedIdx =\n position === 'after' ? targetBlockIndex + 1 : targetBlockIndex\n\n const editorWasEmptyBefore = isEqualToEmptyEditor(editor.children, schema)\n\n Transforms.insertNodes(editor, blocksToInsert, {at: [normalizedIdx]})\n\n if (\n editorWasEmptyBefore &&\n typeof patch.path[0] === 'number' &&\n patch.path[0] === 0\n ) {\n Transforms.removeNodes(editor, {\n at: [position === 'before' ? targetBlockIndex + 1 : targetBlockIndex],\n })\n }\n\n return true\n }\n\n // Insert children\n const {items, position} = patch\n\n const targetChild = findBlockChild(block, patch.path)\n\n if (!targetChild) {\n return false\n }\n\n const childrenToInsert = toSlateValue(\n [{...block.node, children: items as PortableTextChild[]}],\n {schemaTypes: schema},\n KEY_TO_SLATE_ELEMENT.get(editor),\n )\n const normalizedIdx =\n position === 'after' ? targetChild.index + 1 : targetChild.index\n const childInsertPath = [block.index, normalizedIdx]\n\n if (childrenToInsert && Element.isElement(childrenToInsert[0])) {\n Transforms.insertNodes(editor, childrenToInsert[0].children, {\n at: childInsertPath,\n })\n }\n\n return true\n}\n\nfunction setPatch(editor: PortableTextSlateEditor, patch: SetPatch) {\n let value = patch.value\n if (typeof patch.path[3] === 'string') {\n value = {}\n value[patch.path[3]] = patch.value\n }\n\n const block = findBlock(editor.children, patch.path)\n\n if (!block) {\n return false\n }\n\n const isTextBlock = editor.isTextBlock(block.node)\n\n if (isTextBlock && patch.path[1] !== 'children') {\n const updatedBlock = applyAll(block.node, [\n {\n ...patch,\n path: patch.path.slice(1),\n },\n ])\n\n Transforms.setNodes(editor, updatedBlock as Partial<Node>, {\n at: [block.index],\n })\n\n return true\n }\n\n const child = findBlockChild(block, patch.path)\n\n // If this is targeting a text block child\n if (isTextBlock && child) {\n if (Text.isText(child.node)) {\n if (Text.isText(value)) {\n const oldText = child.node.text\n const newText = value.text\n if (oldText !== newText) {\n editor.apply({\n type: 'remove_text',\n path: [block.index, child.index],\n offset: 0,\n text: oldText,\n })\n editor.apply({\n type: 'insert_text',\n path: [block.index, child.index],\n offset: 0,\n text: newText,\n })\n // call OnChange here to emit the new selection\n // the user's selection might be interfering with\n editor.onChange()\n }\n } else {\n // Setting non-text span property\n\n const propPath = patch.path.slice(3)\n const propEntry = propPath.at(0)\n const reservedProps = ['_key', '_type', 'text']\n\n if (propEntry === undefined) {\n return false\n }\n\n if (\n typeof propEntry === 'string' &&\n reservedProps.includes(propEntry)\n ) {\n return false\n }\n\n const newNode = applyAll(child.node, [\n {\n ...patch,\n path: propPath,\n },\n ])\n\n Transforms.setNodes(editor, newNode, {at: [block.index, child.index]})\n }\n } else {\n // Setting inline object property\n\n const propPath = patch.path.slice(3)\n const reservedProps = ['_key', '_type', 'children', '__inline']\n const propEntry = propPath.at(0)\n\n if (propEntry === undefined) {\n return false\n }\n\n if (typeof propEntry === 'string' && reservedProps.includes(propEntry)) {\n return false\n }\n\n // If the child is an inline object, we need to apply the patch to the\n // `value` property object.\n const value =\n 'value' in child.node && typeof child.node.value === 'object'\n ? child.node.value\n : {}\n\n const newValue = applyAll(value, [\n {\n ...patch,\n path: patch.path.slice(3),\n },\n ])\n\n Transforms.setNodes(\n editor,\n {...child.node, value: newValue},\n {at: [block.index, child.index]},\n )\n }\n\n return true\n } else if (Element.isElement(block.node) && patch.path.length === 1) {\n const {children, ...nextRest} = value as unknown as PortableTextBlock\n const {children: _prevChildren, ...prevRest} = block.node || {\n children: undefined,\n }\n\n // Set any block properties\n editor.apply({\n type: 'set_node',\n path: [block.index],\n properties: {...prevRest},\n newProperties: nextRest,\n })\n\n // Replace the children in the block\n // Note that children must be explicitly inserted, and can't be set with set_node\n const blockNode = block.node\n\n blockNode.children.forEach((child, childIndex) => {\n editor.apply({\n type: 'remove_node',\n path: [block.index, blockNode.children.length - 1 - childIndex],\n node: child,\n })\n })\n\n if (Array.isArray(children)) {\n children.forEach((child, childIndex) => {\n editor.apply({\n type: 'insert_node',\n path: [block.index, childIndex],\n node: child,\n })\n })\n }\n } else if (block && 'value' in block.node) {\n if (patch.path.length > 1 && patch.path[1] !== 'children') {\n const newVal = applyAll(block.node.value, [\n {\n ...patch,\n path: patch.path.slice(1),\n },\n ])\n\n Transforms.setNodes(\n editor,\n {...block.node, value: newVal},\n {at: [block.index]},\n )\n } else {\n return false\n }\n }\n\n return true\n}\n\nfunction unsetPatch(editor: PortableTextSlateEditor, patch: UnsetPatch) {\n // Value\n if (patch.path.length === 0) {\n const previousSelection = editor.selection\n Transforms.deselect(editor)\n\n const children = Node.children(editor, [], {\n reverse: true,\n })\n\n for (const [_, path] of children) {\n Transforms.removeNodes(editor, {at: path})\n }\n\n Transforms.insertNodes(editor, editor.pteCreateTextBlock({decorators: []}))\n if (previousSelection) {\n Transforms.select(editor, {\n anchor: {path: [0, 0], offset: 0},\n focus: {path: [0, 0], offset: 0},\n })\n }\n // call OnChange here to emit the new selection\n editor.onChange()\n return true\n }\n\n const block = findBlock(editor.children, patch.path)\n\n if (!block) {\n return false\n }\n\n // Single blocks\n if (patch.path.length === 1) {\n if (editor.children.length === 1) {\n // `unset`ing the last block should be treated similar to `unset`ing the\n // entire editor value\n const previousSelection = editor.selection\n\n Transforms.deselect(editor)\n Transforms.removeNodes(editor, {at: [block.index]})\n Transforms.insertNodes(\n editor,\n editor.pteCreateTextBlock({decorators: []}),\n )\n\n if (previousSelection) {\n Transforms.select(editor, {\n anchor: {path: [0, 0], offset: 0},\n focus: {path: [0, 0], offset: 0},\n })\n }\n\n editor.onChange()\n\n return true\n }\n\n Transforms.removeNodes(editor, {at: [block.index]})\n\n return true\n }\n\n const child = findBlockChild(block, patch.path)\n\n // Unset on text block children\n if (editor.isTextBlock(block.node) && child) {\n if (patch.path[1] === 'children' && patch.path.length === 3) {\n Transforms.removeNodes(editor, {at: [block.index, child.index]})\n\n return true\n }\n }\n\n if (child && !Text.isText(child.node)) {\n // Unsetting inline object property\n\n const propPath = patch.path.slice(3)\n const propEntry = propPath.at(0)\n const reservedProps = ['_key', '_type', 'children', '__inline']\n\n if (propEntry === undefined) {\n return false\n }\n\n if (typeof propEntry === 'string' && reservedProps.includes(propEntry)) {\n // All custom properties are stored on the `value` property object.\n // If you try to unset any of the other top-level properties it's a\n // no-op.\n return false\n }\n\n const value =\n 'value' in child.node && typeof child.node.value === 'object'\n ? child.node.value\n : {}\n\n const newValue = applyAll(value, [\n {\n ...patch,\n path: patch.path.slice(3),\n },\n ])\n\n Transforms.setNodes(\n editor,\n {...child.node, value: newValue},\n {at: [block.index, child.index]},\n )\n\n return true\n }\n\n if (child && Text.isText(child.node)) {\n const propPath = patch.path.slice(3)\n const propEntry = propPath.at(0)\n const reservedProps = ['_key', '_type']\n\n if (propEntry === undefined) {\n return false\n }\n\n if (typeof propEntry === 'string' && reservedProps.includes(propEntry)) {\n return false\n }\n\n if (typeof propEntry === 'string' && propEntry === 'text') {\n editor.apply({\n type: 'remove_text',\n path: [block.index, child.index],\n offset: 0,\n text: child.node.text,\n })\n\n return true\n }\n\n const newNode = applyAll(child.node, [\n {\n ...patch,\n path: propPath,\n },\n ])\n const newKeys = Object.keys(newNode)\n\n const removedProperties = Object.keys(child.node).filter(\n (property) => !newKeys.includes(property),\n )\n\n Transforms.unsetNodes(editor, removedProperties, {\n at: [block.index, child.index],\n })\n\n return true\n }\n\n if (!child) {\n if ('value' in block.node) {\n const newVal = applyAll(block.node.value, [\n {\n ...patch,\n path: patch.path.slice(1),\n },\n ])\n\n Transforms.setNodes(\n editor,\n {...block.node, value: newVal},\n {at: [block.index]},\n )\n\n return true\n }\n\n return false\n }\n\n return false\n}\n\nfunction findBlock(\n children: Descendant[],\n path: Path,\n): {node: Descendant; index: number} | undefined {\n let blockIndex = -1\n\n const block = children.find((node: Descendant, index: number) => {\n const isMatch = isKeyedSegment(path[0])\n ? node._key === path[0]._key\n : index === path[0]\n\n if (isMatch) {\n blockIndex = index\n }\n\n return isMatch\n })\n\n if (!block) {\n return undefined\n }\n\n return {node: block, index: blockIndex}\n}\n\nfunction findBlockChild(\n block: {node: Descendant; index: number},\n path: Path,\n): {node: Descendant; index: number} | undefined {\n const blockNode = block.node\n\n if (!Element.isElement(blockNode) || path[1] !== 'children') {\n return undefined\n }\n\n let childIndex = -1\n\n const child = blockNode.children.find((node, index: number) => {\n const isMatch = isKeyedSegment(path[2])\n ? node._key === path[2]._key\n : index === path[2]\n\n if (isMatch) {\n childIndex = index\n }\n\n return isMatch\n })\n\n if (!child) {\n return undefined\n }\n\n return {\n node: child,\n index: childIndex,\n }\n}\n","import {\n diffMatchPatch,\n insert,\n set,\n setIfMissing,\n unset,\n type InsertPosition,\n type Patch,\n} from '@portabletext/patches'\nimport {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {Path, PortableTextSpan, PortableTextTextBlock} from '@sanity/types'\nimport {\n Element,\n Text,\n type Descendant,\n type InsertNodeOperation,\n type InsertTextOperation,\n type MergeNodeOperation,\n type MoveNodeOperation,\n type RemoveNodeOperation,\n type RemoveTextOperation,\n type SetNodeOperation,\n type SplitNodeOperation,\n} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport {fromSlateValue} from './values'\n\nexport function insertTextPatch(\n schema: EditorSchema,\n children: Descendant[],\n operation: InsertTextOperation,\n beforeValue: Descendant[],\n): Array<Patch> {\n const block =\n isTextBlock({schema}, children[operation.path[0]]) &&\n children[operation.path[0]]\n if (!block) {\n throw new Error('Could not find block')\n }\n const textChild =\n isTextBlock({schema}, block) &&\n isSpan({schema}, block.children[operation.path[1]]) &&\n (block.children[operation.path[1]] as PortableTextSpan)\n if (!textChild) {\n throw new Error('Could not find child')\n }\n const path: Path = [\n {_key: block._key},\n 'children',\n {_key: textChild._key},\n 'text',\n ]\n const prevBlock = beforeValue[operation.path[0]]\n const prevChild =\n isTextBlock({schema}, prevBlock) && prevBlock.children[operation.path[1]]\n const prevText = isSpan({schema}, prevChild) ? prevChild.text : ''\n const patch = diffMatchPatch(prevText, textChild.text, path)\n return patch.value.length ? [patch] : []\n}\n\nexport function removeTextPatch(\n schema: EditorSchema,\n children: Descendant[],\n operation: RemoveTextOperation,\n beforeValue: Descendant[],\n): Array<Patch> {\n const block = children[operation.path[0]]\n if (!block) {\n throw new Error('Could not find block')\n }\n const child =\n (isTextBlock({schema}, block) && block.children[operation.path[1]]) ||\n undefined\n const textChild: PortableTextSpan | undefined = isSpan({schema}, child)\n ? child\n : undefined\n if (child && !textChild) {\n throw new Error('Expected span')\n }\n if (!textChild) {\n throw new Error('Could not find child')\n }\n const path: Path = [\n {_key: block._key},\n 'children',\n {_key: textChild._key},\n 'text',\n ]\n const beforeBlock = beforeValue[operation.path[0]]\n const prevTextChild =\n isTextBlock({schema}, beforeBlock) &&\n beforeBlock.children[operation.path[1]]\n const prevText = isSpan({schema}, prevTextChild) && prevTextChild.text\n const patch = diffMatchPatch(prevText || '', textChild.text, path)\n return patch.value ? [patch] : []\n}\n\nexport function setNodePatch(\n schema: EditorSchema,\n children: Descendant[],\n operation: SetNodeOperation,\n): Array<Patch> {\n const blockIndex = operation.path.at(0)\n\n if (blockIndex !== undefined && operation.path.length === 1) {\n const block = children.at(blockIndex)\n\n if (!block) {\n console.error('Could not find block at index', blockIndex)\n return []\n }\n\n if (isTextBlock({schema}, block)) {\n const patches: Patch[] = []\n\n for (const key of Object.keys(operation.newProperties)) {\n const value = (operation.newProperties as Record<string, unknown>)[key]\n\n if (key === '_key') {\n patches.push(set(value, [blockIndex, '_key']))\n } else {\n patches.push(set(value, [{_key: block._key}, key]))\n }\n }\n\n for (const key of Object.keys(operation.properties)) {\n if (!(key in operation.newProperties)) {\n patches.push(unset([{_key: block._key}, key]))\n }\n }\n\n return patches\n } else {\n const patches: Patch[] = []\n\n const _key = operation.newProperties._key\n\n if (_key !== undefined) {\n patches.push(set(_key, [blockIndex, '_key']))\n }\n\n const newValue =\n 'value' in operation.newProperties &&\n typeof operation.newProperties.value === 'object'\n ? (operation.newProperties.value as Record<string, unknown>)\n : ({} satisfies Record<string, unknown>)\n\n const keys = Object.keys(newValue)\n\n for (const key of keys) {\n const value = newValue[key]\n\n patches.push(set(value, [{_key: block._key}, key]))\n }\n\n const value =\n 'value' in operation.properties &&\n typeof operation.properties.value === 'object'\n ? (operation.properties.value as Record<string, unknown>)\n : ({} satisfies Record<string, unknown>)\n\n for (const key of Object.keys(value)) {\n if (!(key in newValue)) {\n patches.push(unset([{_key: block._key}, key]))\n }\n }\n\n return patches\n }\n } else if (operation.path.length === 2) {\n const block = children[operation.path[0]]\n if (isTextBlock({schema}, block)) {\n const child = block.children[operation.path[1]]\n if (child) {\n const blockKey = block._key\n const childKey = child._key\n const patches: Patch[] = []\n\n if (Element.isElement(child)) {\n // The child is an inline object. This needs to be treated\n // differently since all custom properties are stored on a `value`\n // object.\n\n const _key = operation.newProperties._key\n\n if (_key !== undefined) {\n patches.push(\n set(_key, [\n {_key: blockKey},\n 'children',\n block.children.indexOf(child),\n '_key',\n ]),\n )\n }\n\n const properties =\n 'value' in operation.newProperties &&\n typeof operation.newProperties.value === 'object'\n ? (operation.newProperties.value as Record<string, unknown>)\n : ({} satisfies Record<string, unknown>)\n\n const keys = Object.keys(properties)\n\n for (const key of keys) {\n const value = properties[key]\n\n patches.push(\n set(value, [{_key: blockKey}, 'children', {_key: childKey}, key]),\n )\n }\n\n return patches\n }\n\n const newPropNames = Object.keys(operation.newProperties)\n\n for (const keyName of newPropNames) {\n const value = (operation.newProperties as Record<string, unknown>)[\n keyName\n ]\n\n if (keyName === '_key') {\n patches.push(\n set(value, [\n {_key: blockKey},\n 'children',\n block.children.indexOf(child),\n keyName,\n ]),\n )\n\n continue\n }\n\n patches.push(\n set(value, [\n {_key: blockKey},\n 'children',\n {_key: childKey},\n keyName,\n ]),\n )\n }\n\n const propNames = Object.keys(operation.properties)\n\n for (const keyName of propNames) {\n if (keyName in operation.newProperties) {\n continue\n }\n\n patches.push(\n unset([{_key: blockKey}, 'children', {_key: childKey}, keyName]),\n )\n }\n\n return patches\n }\n throw new Error('Could not find a valid child')\n }\n throw new Error('Could not find a valid block')\n } else {\n throw new Error(\n `Unexpected path encountered: ${JSON.stringify(operation.path)}`,\n )\n }\n}\n\nexport function insertNodePatch(\n schema: EditorSchema,\n children: Descendant[],\n operation: InsertNodeOperation,\n beforeValue: Descendant[],\n): Array<Patch> {\n const block = beforeValue[operation.path[0]]\n if (operation.path.length === 1) {\n const position = operation.path[0] === 0 ? 'before' : 'after'\n const beforeBlock = beforeValue[operation.path[0] - 1]\n const targetKey = operation.path[0] === 0 ? block?._key : beforeBlock?._key\n if (targetKey) {\n return [\n insert(\n [\n fromSlateValue(\n [operation.node as Descendant],\n schema.block.name,\n )[0],\n ],\n position,\n [{_key: targetKey}],\n ),\n ]\n }\n return [\n setIfMissing(beforeValue, []),\n insert(\n [fromSlateValue([operation.node as Descendant], schema.block.name)[0]],\n 'before',\n [operation.path[0]],\n ),\n ]\n } else if (\n isTextBlock({schema}, block) &&\n operation.path.length === 2 &&\n children[operation.path[0]]\n ) {\n const position =\n block.children.length === 0 || !block.children[operation.path[1] - 1]\n ? 'before'\n : 'after'\n const node = {...operation.node} as Descendant\n if (!node._type && Text.isText(node)) {\n node._type = 'span'\n node.marks = []\n }\n const blk = fromSlateValue(\n [\n {\n _key: 'bogus',\n _type: schema.block.name,\n children: [node],\n },\n ],\n schema.block.name,\n )[0] as PortableTextTextBlock\n const child = blk.children[0]\n return [\n insert([child], position, [\n {_key: block._key},\n 'children',\n block.children.length <= 1 || !block.children[operation.path[1] - 1]\n ? 0\n : {_key: block.children[operation.path[1] - 1]._key},\n ]),\n ]\n }\n return []\n}\n\nexport function splitNodePatch(\n schema: EditorSchema,\n children: Descendant[],\n operation: SplitNodeOperation,\n beforeValue: Descendant[],\n): Array<Patch> {\n const patches: Patch[] = []\n const splitBlock = children[operation.path[0]]\n if (!isTextBlock({schema}, splitBlock)) {\n throw new Error(\n `Block with path ${JSON.stringify(\n operation.path[0],\n )} is not a text block and can't be split`,\n )\n }\n if (operation.path.length === 1) {\n const oldBlock = beforeValue[operation.path[0]]\n if (isTextBlock({schema}, oldBlock)) {\n const targetValue = fromSlateValue(\n [children[operation.path[0] + 1]],\n schema.block.name,\n )[0]\n if (targetValue) {\n patches.push(insert([targetValue], 'after', [{_key: splitBlock._key}]))\n const spansToUnset = oldBlock.children.slice(operation.position)\n spansToUnset.forEach((span) => {\n const path = [{_key: oldBlock._key}, 'children', {_key: span._key}]\n patches.push(unset(path))\n })\n }\n }\n return patches\n }\n if (operation.path.length === 2) {\n const splitSpan = splitBlock.children[operation.path[1]]\n if (isSpan({schema}, splitSpan)) {\n const targetSpans = (\n fromSlateValue(\n [\n {\n ...splitBlock,\n children: splitBlock.children.slice(\n operation.path[1] + 1,\n operation.path[1] + 2,\n ),\n } as Descendant,\n ],\n schema.block.name,\n )[0] as PortableTextTextBlock\n ).children\n\n patches.push(\n insert(targetSpans, 'after', [\n {_key: splitBlock._key},\n 'children',\n {_key: splitSpan._key},\n ]),\n )\n patches.push(\n set(splitSpan.text, [\n {_key: splitBlock._key},\n 'children',\n {_key: splitSpan._key},\n 'text',\n ]),\n )\n }\n return patches\n }\n return patches\n}\n\nexport function removeNodePatch(\n schema: EditorSchema,\n beforeValue: Descendant[],\n operation: RemoveNodeOperation,\n): Array<Patch> {\n const block = beforeValue[operation.path[0]]\n if (operation.path.length === 1) {\n // Remove a single block\n if (block && block._key) {\n return [unset([{_key: block._key}])]\n }\n throw new Error('Block not found')\n } else if (isTextBlock({schema}, block) && operation.path.length === 2) {\n const spanToRemove = block.children[operation.path[1]]\n\n if (spanToRemove) {\n const spansMatchingKey = block.children.filter(\n (span) => span._key === operation.node._key,\n )\n\n if (spansMatchingKey.length > 1) {\n console.warn(\n `Multiple spans have \\`_key\\` ${operation.node._key}. It's ambiguous which one to remove.`,\n JSON.stringify(block, null, 2),\n )\n return []\n }\n\n return [\n unset([{_key: block._key}, 'children', {_key: spanToRemove._key}]),\n ]\n }\n return []\n } else {\n return []\n }\n}\n\nexport function mergeNodePatch(\n schema: EditorSchema,\n children: Descendant[],\n operation: MergeNodeOperation,\n beforeValue: Descendant[],\n): Array<Patch> {\n const patches: Patch[] = []\n\n const block = beforeValue[operation.path[0]]\n const updatedBlock = children[operation.path[0]]\n\n if (operation.path.length === 1) {\n if (block?._key) {\n const newBlock = fromSlateValue(\n [children[operation.path[0] - 1]],\n schema.block.name,\n )[0]\n patches.push(set(newBlock, [{_key: newBlock._key}]))\n patches.push(unset([{_key: block._key}]))\n } else {\n throw new Error('Target key not found!')\n }\n } else if (\n isTextBlock({schema}, block) &&\n isTextBlock({schema}, updatedBlock) &&\n operation.path.length === 2\n ) {\n const updatedSpan =\n updatedBlock.children[operation.path[1] - 1] &&\n isSpan({schema}, updatedBlock.children[operation.path[1] - 1])\n ? updatedBlock.children[operation.path[1] - 1]\n : undefined\n const removedSpan =\n block.children[operation.path[1]] &&\n isSpan({schema}, block.children[operation.path[1]])\n ? block.children[operation.path[1]]\n : undefined\n\n if (updatedSpan) {\n const spansMatchingKey = block.children.filter(\n (span) => span._key === updatedSpan._key,\n )\n\n if (spansMatchingKey.length === 1) {\n patches.push(\n set(updatedSpan.text, [\n {_key: block._key},\n 'children',\n {_key: updatedSpan._key},\n 'text',\n ]),\n )\n } else {\n console.warn(\n `Multiple spans have \\`_key\\` ${updatedSpan._key}. It's ambiguous which one to update.`,\n JSON.stringify(block, null, 2),\n )\n }\n }\n\n if (removedSpan) {\n const spansMatchingKey = block.children.filter(\n (span) => span._key === removedSpan._key,\n )\n\n if (spansMatchingKey.length === 1) {\n patches.push(\n unset([{_key: block._key}, 'children', {_key: removedSpan._key}]),\n )\n } else {\n console.warn(\n `Multiple spans have \\`_key\\` ${removedSpan._key}. It's ambiguous which one to remove.`,\n JSON.stringify(block, null, 2),\n )\n }\n }\n }\n return patches\n}\n\nexport function moveNodePatch(\n schema: EditorSchema,\n beforeValue: Descendant[],\n operation: MoveNodeOperation,\n): Array<Patch> {\n const patches: Patch[] = []\n const block = beforeValue[operation.path[0]]\n const targetBlock = beforeValue[operation.newPath[0]]\n\n if (!targetBlock) {\n return patches\n }\n\n if (operation.path.length === 1) {\n const position: InsertPosition =\n operation.path[0] > operation.newPath[0] ? 'before' : 'after'\n patches.push(unset([{_key: block._key}]))\n patches.push(\n insert([fromSlateValue([block], schema.block.name)[0]], position, [\n {_key: targetBlock._key},\n ]),\n )\n } else if (\n operation.path.length === 2 &&\n isTextBlock({schema}, block) &&\n isTextBlock({schema}, targetBlock)\n ) {\n const child = block.children[operation.path[1]]\n const targetChild = targetBlock.children[operation.newPath[1]]\n const position =\n operation.newPath[1] === targetBlock.children.length ? 'after' : 'before'\n const childToInsert = (\n fromSlateValue([block], schema.block.name)[0] as PortableTextTextBlock\n ).children[operation.path[1]]\n patches.push(unset([{_key: block._key}, 'children', {_key: child._key}]))\n patches.push(\n insert([childToInsert], position, [\n {_key: targetBlock._key},\n 'children',\n {_key: targetChild._key},\n ]),\n )\n }\n return patches\n}\n","import type {Editor} from 'slate'\n\nexport const PATCHING: WeakMap<Editor, boolean | undefined> = new WeakMap()\n\nexport function withoutPatching(editor: Editor, fn: () => void): void {\n const prev = isPatching(editor)\n PATCHING.set(editor, false)\n fn()\n PATCHING.set(editor, prev)\n}\n\nexport function isPatching(editor: Editor): boolean | undefined {\n return PATCHING.get(editor)\n}\n","import {insert, setIfMissing, unset, type Patch} from '@portabletext/patches'\nimport {Editor, type Descendant, type Operation} from 'slate'\nimport {createApplyPatch} from '../../internal-utils/applyPatch'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {\n insertNodePatch,\n insertTextPatch,\n mergeNodePatch,\n moveNodePatch,\n removeNodePatch,\n removeTextPatch,\n setNodePatch,\n splitNodePatch,\n} from '../../internal-utils/operation-to-patches'\nimport {fromSlateValue, isEqualToEmptyEditor} from '../../internal-utils/values'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport type {RelayActor} from '../relay-machine'\nimport {IS_PROCESSING_REMOTE_CHANGES, KEY_TO_VALUE_ELEMENT} from '../weakMaps'\nimport {getCurrentUndoStepId} from '../with-undo-step'\nimport {withRemoteChanges} from '../withChanges'\nimport {isPatching, PATCHING, withoutPatching} from '../withoutPatching'\nimport {withoutSaving} from './createWithUndoRedo'\n\nconst debug = debugWithName('plugin:withPatches')\nconst debugVerbose = false\n\ninterface Options {\n editorActor: EditorActor\n relayActor: RelayActor\n subscriptions: Array<() => () => void>\n}\n\nexport function createWithPatches({\n editorActor,\n relayActor,\n subscriptions,\n}: Options): (editor: PortableTextSlateEditor) => PortableTextSlateEditor {\n // The previous editor children are needed to figure out the _key of deleted nodes\n // The editor.children would no longer contain that information if the node is already deleted.\n let previousChildren: Descendant[]\n\n const applyPatch = createApplyPatch(editorActor.getSnapshot().context.schema)\n\n return function withPatches(editor: PortableTextSlateEditor) {\n IS_PROCESSING_REMOTE_CHANGES.set(editor, false)\n PATCHING.set(editor, true)\n previousChildren = [...editor.children]\n\n const {apply} = editor\n let bufferedPatches: Patch[] = []\n\n const handleBufferedRemotePatches = () => {\n if (bufferedPatches.length === 0) {\n return\n }\n const patches = bufferedPatches\n bufferedPatches = []\n let changed = false\n\n withRemoteChanges(editor, () => {\n Editor.withoutNormalizing(editor, () => {\n withoutPatching(editor, () => {\n withoutSaving(editor, () => {\n for (const patch of patches) {\n if (debug.enabled)\n debug(`Handling remote patch ${JSON.stringify(patch)}`)\n\n try {\n changed = applyPatch(editor, patch)\n } catch (error) {\n console.error(\n `Applying patch ${JSON.stringify(patch)} failed due to: ${error.message}`,\n )\n }\n }\n })\n })\n })\n if (changed) {\n editor.normalize()\n editor.onChange()\n }\n })\n }\n\n const handlePatches = ({patches}: {patches: Patch[]}) => {\n const remotePatches = patches.filter((p) => p.origin !== 'local')\n if (remotePatches.length === 0) {\n return\n }\n bufferedPatches = bufferedPatches.concat(remotePatches)\n handleBufferedRemotePatches()\n }\n\n subscriptions.push(() => {\n debug('Subscribing to remote patches')\n const sub = editorActor.on('patches', handlePatches)\n return () => {\n debug('Unsubscribing to remote patches')\n sub.unsubscribe()\n }\n })\n\n editor.apply = (operation: Operation): void | Editor => {\n let patches: Patch[] = []\n\n // Update previous children here before we apply\n previousChildren = editor.children\n\n const editorWasEmpty = isEqualToEmptyEditor(\n previousChildren,\n editorActor.getSnapshot().context.schema,\n )\n\n // Apply the operation\n apply(operation)\n\n const editorIsEmpty = isEqualToEmptyEditor(\n editor.children,\n editorActor.getSnapshot().context.schema,\n )\n\n if (!isPatching(editor)) {\n if (debugVerbose && debug.enabled)\n debug(\n `Editor is not producing patch for operation ${operation.type}`,\n operation,\n )\n return editor\n }\n\n // If the editor was empty and now isn't, insert the placeholder into it.\n if (\n editorWasEmpty &&\n !editorIsEmpty &&\n operation.type !== 'set_selection'\n ) {\n patches.push(insert(previousChildren, 'before', [0]))\n }\n\n switch (operation.type) {\n case 'insert_text':\n patches = [\n ...patches,\n ...insertTextPatch(\n editorActor.getSnapshot().context.schema,\n editor.children,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'remove_text':\n patches = [\n ...patches,\n ...removeTextPatch(\n editorActor.getSnapshot().context.schema,\n editor.children,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'remove_node':\n patches = [\n ...patches,\n ...removeNodePatch(\n editorActor.getSnapshot().context.schema,\n previousChildren,\n operation,\n ),\n ]\n break\n case 'split_node':\n patches = [\n ...patches,\n ...splitNodePatch(\n editorActor.getSnapshot().context.schema,\n editor.children,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'insert_node':\n patches = [\n ...patches,\n ...insertNodePatch(\n editorActor.getSnapshot().context.schema,\n editor.children,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'set_node':\n patches = [\n ...patches,\n ...setNodePatch(\n editorActor.getSnapshot().context.schema,\n editor.children,\n operation,\n ),\n ]\n break\n case 'merge_node':\n patches = [\n ...patches,\n ...mergeNodePatch(\n editorActor.getSnapshot().context.schema,\n editor.children,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'move_node':\n patches = [\n ...patches,\n ...moveNodePatch(\n editorActor.getSnapshot().context.schema,\n previousChildren,\n operation,\n ),\n ]\n break\n default:\n // Do nothing\n }\n\n // Unset the value if a operation made the editor empty\n if (\n !editorWasEmpty &&\n editorIsEmpty &&\n ['merge_node', 'set_node', 'remove_text', 'remove_node'].includes(\n operation.type,\n )\n ) {\n patches = [...patches, unset([])]\n relayActor.send({\n type: 'unset',\n previousValue: fromSlateValue(\n previousChildren,\n editorActor.getSnapshot().context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n ),\n })\n }\n\n // Prepend patches with setIfMissing if going from empty editor to something involving a patch.\n if (editorWasEmpty && patches.length > 0) {\n patches = [setIfMissing([], []), ...patches]\n }\n\n // Emit all patches\n if (patches.length > 0) {\n for (const patch of patches) {\n editorActor.send({\n type: 'internal.patch',\n patch: {...patch, origin: 'local'},\n operationId: getCurrentUndoStepId(editor),\n value: editor.value,\n })\n }\n }\n return editor\n }\n return editor\n }\n}\n","import {Editor} from 'slate'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {isChangingRemotely} from '../withChanges'\nimport {isRedoing, isUndoing} from '../withUndoRedo'\n\nconst debug = debugWithName('plugin:withPlaceholderBlock')\n\n/**\n * Keep a \"placeholder\" block present when the editor is empty\n *\n */\nexport function createWithPlaceholderBlock(\n editorActor: EditorActor,\n): (editor: PortableTextSlateEditor) => PortableTextSlateEditor {\n return function withPlaceholderBlock(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n const {apply} = editor\n\n editor.apply = (op) => {\n if (editorActor.getSnapshot().matches({'edit mode': 'read only'})) {\n apply(op)\n return\n }\n\n /**\n * We don't want to run any side effects when the editor is processing\n * remote changes.\n */\n if (isChangingRemotely(editor)) {\n apply(op)\n return\n }\n\n /**\n * We don't want to run any side effects when the editor is undoing or\n * redoing operations.\n */\n if (isUndoing(editor) || isRedoing(editor)) {\n apply(op)\n return\n }\n\n if (op.type === 'remove_node') {\n const blockIndex = op.path.at(0)\n const isLonelyBlock =\n op.path.length === 1 &&\n blockIndex === 0 &&\n editor.children.length === 1\n const isBlockObject =\n op.node._type !== editorActor.getSnapshot().context.schema.block.name\n\n if (isLonelyBlock && isBlockObject) {\n debug('Adding placeholder block')\n Editor.insertNode(editor, editor.pteCreateTextBlock({decorators: []}))\n }\n }\n\n apply(op)\n }\n\n return editor\n }\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextListBlock,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {Editor, Transforms, type Element} from 'slate'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport {isListBlock} from '../../utils/parse-blocks'\nimport type {EditorActor} from '../editor-machine'\nimport {withNormalizeNode} from '../with-normalizing-node'\n\nconst debug = debugWithName('plugin:withSchemaTypes')\n/**\n * This plugin makes sure that schema types are recognized properly by Slate as blocks, voids, inlines\n *\n */\nexport function createWithSchemaTypes({\n editorActor,\n}: {\n editorActor: EditorActor\n}) {\n return function withSchemaTypes(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n editor.isTextBlock = (value: unknown): value is PortableTextTextBlock => {\n if (Editor.isEditor(value)) {\n return false\n }\n\n return isTextBlock(editorActor.getSnapshot().context, value)\n }\n editor.isTextSpan = (value: unknown): value is PortableTextSpan => {\n if (Editor.isEditor(value)) {\n return false\n }\n\n return isSpan(editorActor.getSnapshot().context, value)\n }\n editor.isListBlock = (value: unknown): value is PortableTextListBlock => {\n if (Editor.isEditor(value)) {\n return false\n }\n\n return isListBlock(editorActor.getSnapshot().context, value)\n }\n editor.isVoid = (element: Element): boolean => {\n if (Editor.isEditor(element)) {\n return false\n }\n\n return (\n editorActor.getSnapshot().context.schema.block.name !== element._type &&\n (editorActor\n .getSnapshot()\n .context.schema.blockObjects.map((obj) => obj.name)\n .includes(element._type) ||\n editorActor\n .getSnapshot()\n .context.schema.inlineObjects.map((obj) => obj.name)\n .includes(element._type))\n )\n }\n editor.isInline = (element: Element): boolean => {\n if (Editor.isEditor(element)) {\n return false\n }\n\n const inlineSchemaTypes = editorActor\n .getSnapshot()\n .context.schema.inlineObjects.map((obj) => obj.name)\n return (\n inlineSchemaTypes.includes(element._type) &&\n '__inline' in element &&\n element.__inline === true\n )\n }\n\n // Extend Slate's default normalization\n const {normalizeNode} = editor\n editor.normalizeNode = (entry) => {\n const [node, path] = entry\n\n // If text block children node is missing _type, set it to the span type\n if (node._type === undefined && path.length === 2) {\n debug('Setting span type on text node without a type')\n const span = node as PortableTextSpan\n const key =\n span._key || editorActor.getSnapshot().context.keyGenerator()\n withNormalizeNode(editor, () => {\n Transforms.setNodes(\n editor,\n {\n ...span,\n _type: editorActor.getSnapshot().context.schema.span.name,\n _key: key,\n },\n {at: path},\n )\n })\n return\n }\n\n // catches cases when the children are missing keys but excludes it when the normalize is running the node as the editor object\n if (node._key === undefined && (path.length === 1 || path.length === 2)) {\n debug('Setting missing key on child node without a key')\n const key = editorActor.getSnapshot().context.keyGenerator()\n withNormalizeNode(editor, () => {\n Transforms.setNodes(editor, {_key: key}, {at: path})\n })\n return\n }\n\n withNormalizeNode(editor, () => {\n normalizeNode(entry)\n })\n }\n return editor\n }\n}\n","import {toSlateValue} from '../../internal-utils/values'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\n\ninterface Options {\n editorActor: EditorActor\n}\n\n/**\n * This plugin makes various util commands available in the editor\n *\n */\nexport function createWithUtils({editorActor}: Options) {\n return function withUtils(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n editor.pteCreateTextBlock = (options: {\n decorators: Array<string>\n listItem?: string\n level?: number\n }) => {\n const block = toSlateValue(\n [\n {\n _type: editorActor.getSnapshot().context.schema.block.name,\n _key: editorActor.getSnapshot().context.keyGenerator(),\n style:\n editorActor.getSnapshot().context.schema.styles[0].name ||\n 'normal',\n ...(options.listItem ? {listItem: options.listItem} : {}),\n ...(options.level ? {level: options.level} : {}),\n markDefs: [],\n children: [\n {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: '',\n marks: options.decorators.filter((decorator) =>\n editorActor\n .getSnapshot()\n .context.schema.decorators.find(\n ({name}) => name === decorator,\n ),\n ),\n },\n ],\n },\n ],\n {schemaTypes: editorActor.getSnapshot().context.schema},\n )[0]\n return block\n }\n return editor\n }\n}\n","import {slateRangeToSelection} from '../../internal-utils/slate-utils'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {SLATE_TO_PORTABLE_TEXT_RANGE} from '../weakMaps'\n\nexport function pluginUpdateSelection({\n editor,\n editorActor,\n}: {\n editor: PortableTextSlateEditor\n editorActor: EditorActor\n}) {\n const updateSelection = () => {\n if (editor.selection) {\n const existingSelection = SLATE_TO_PORTABLE_TEXT_RANGE.get(\n editor.selection,\n )\n\n if (existingSelection) {\n editorActor.send({\n type: 'update selection',\n selection: existingSelection,\n })\n } else {\n const selection = slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor,\n range: editor.selection,\n })\n\n SLATE_TO_PORTABLE_TEXT_RANGE.set(editor.selection, selection)\n\n editorActor.send({type: 'update selection', selection})\n }\n } else {\n editorActor.send({type: 'update selection', selection: null})\n }\n }\n\n const {onChange} = editor\n\n editor.onChange = () => {\n onChange()\n\n if (!editorActor.getSnapshot().matches({setup: 'setting up'})) {\n updateSelection()\n }\n }\n\n return editor\n}\n","import type {EditorSchema} from '../editor/editor-schema'\nimport {isTypedObject} from '../utils/asserters'\n\ntype Path = Array<number>\n\nexport type PortableTextNode<TEditorSchema extends EditorSchema> =\n | EditorNode<TEditorSchema>\n | TextBlockNode<TEditorSchema>\n | SpanNode<TEditorSchema>\n | PartialSpanNode\n | ObjectNode\n\n//////////\n\nexport type EditorNode<TEditorSchema extends EditorSchema> = {\n children: Array<TextBlockNode<TEditorSchema> | ObjectNode>\n}\n\nexport function isEditorNode<TEditorSchema extends EditorSchema>(\n node: unknown,\n): node is EditorNode<TEditorSchema> {\n if (typeof node === 'object' && node !== null) {\n return (\n !('_type' in node) && 'children' in node && Array.isArray(node.children)\n )\n }\n\n return false\n}\n\n//////////\n\nexport type TextBlockNode<TEditorSchema extends EditorSchema> = {\n _key: string\n _type: TEditorSchema['block']['name']\n children: Array<SpanNode<TEditorSchema> | ObjectNode>\n [other: string]: unknown\n}\n\nexport function isTextBlockNode<TEditorSchema extends EditorSchema>(\n context: {schema: TEditorSchema},\n node: unknown,\n): node is TextBlockNode<TEditorSchema> {\n return isTypedObject(node) && node._type === context.schema.block.name\n}\n\n//////////\n\nexport type SpanNode<TEditorSchema extends EditorSchema> = {\n _key: string\n _type?: TEditorSchema['span']['name']\n text: string\n [other: string]: unknown\n}\n\nexport function isSpanNode<TEditorSchema extends EditorSchema>(\n context: {schema: TEditorSchema},\n node: unknown,\n): node is SpanNode<TEditorSchema> {\n if (typeof node !== 'object' || node === null) {\n return false\n }\n\n if ('children' in node) {\n return false\n }\n\n if ('_type' in node) {\n return node._type === context.schema.span.name\n }\n\n return 'text' in node\n}\n\n//////////\n\nexport type PartialSpanNode = {\n text: string\n [other: string]: unknown\n}\n\nexport function isPartialSpanNode(node: unknown): node is PartialSpanNode {\n return (\n typeof node === 'object' &&\n node !== null &&\n 'text' in node &&\n typeof node.text === 'string'\n )\n}\n\n//////////\n\nexport type ObjectNode = {\n _type: string\n _key: string\n [other: string]: unknown\n}\n\nexport function isObjectNode(\n context: {schema: EditorSchema},\n node: unknown,\n): node is ObjectNode {\n return (\n !isEditorNode(node) &&\n !isTextBlockNode(context, node) &&\n !isSpanNode(context, node) &&\n !isPartialSpanNode(node)\n )\n}\n\n/**\n *\n */\nexport function getBlock<TEditorSchema extends EditorSchema>(\n root: EditorNode<TEditorSchema>,\n path: Path,\n): TextBlockNode<TEditorSchema> | ObjectNode | undefined {\n const index = path.at(0)\n\n if (index === undefined || path.length !== 1) {\n return undefined\n }\n\n return root.children.at(index)\n}\n\n/**\n * A \"node\" can either be\n * 1. The root (path length is 0)\n * 2. A block (path length is 1)\n * 3. A span (path length is 2)\n * 4. Or an inline object (path length is 2)\n */\nexport function getNode<TEditorSchema extends EditorSchema>(\n context: {schema: TEditorSchema},\n root: EditorNode<TEditorSchema>,\n path: Path,\n): PortableTextNode<TEditorSchema> | undefined {\n if (path.length === 0) {\n return root\n }\n\n if (path.length === 1) {\n return getBlock(root, path)\n }\n\n if (path.length === 2) {\n const block = getBlock(root, path.slice(0, 1))\n\n if (!block || !isTextBlockNode(context, block)) {\n return undefined\n }\n\n const child = block.children.at(path[1])\n\n if (!child) {\n return undefined\n }\n\n return child\n }\n}\n\nexport function getSpan<TEditorSchema extends EditorSchema>(\n context: {schema: TEditorSchema},\n root: EditorNode<TEditorSchema>,\n path: Path,\n) {\n const node = getNode(context, root, path)\n\n if (node && isSpanNode(context, node)) {\n return node\n }\n\n return undefined\n}\n\n/**\n * A parent can either be the root or a text block\n */\nexport function getParent<TEditorSchema extends EditorSchema>(\n context: {schema: TEditorSchema},\n root: EditorNode<TEditorSchema>,\n path: Path,\n) {\n if (path.length === 0) {\n return undefined\n }\n\n const parentPath = path.slice(0, -1)\n\n if (parentPath.length === 0) {\n return root\n }\n\n const blockIndex = parentPath.at(0)\n\n if (blockIndex === undefined || parentPath.length !== 1) {\n return undefined\n }\n\n const block = root.children.at(blockIndex)\n\n if (block && isTextBlockNode(context, block)) {\n return block\n }\n\n return undefined\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport {createDraft, finishDraft, type WritableDraft} from 'immer'\nimport {Element, Path, type Node, type Operation} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {OmitFromUnion} from '../type-utils'\nimport {\n getBlock,\n getNode,\n getParent,\n getSpan,\n isEditorNode,\n isObjectNode,\n isPartialSpanNode,\n isSpanNode,\n isTextBlockNode,\n type PortableTextNode,\n type SpanNode,\n type TextBlockNode,\n} from './portable-text-node'\n\nexport function applyOperationToPortableText(\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>,\n value: Array<PortableTextBlock>,\n operation: OmitFromUnion<Operation, 'type', 'set_selection'>,\n) {\n const draft = createDraft({children: value})\n\n try {\n applyOperationToPortableTextDraft(context, draft, operation)\n } catch (e) {\n console.error(e)\n }\n\n return finishDraft(draft).children\n}\n\nfunction applyOperationToPortableTextDraft(\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>,\n root: WritableDraft<{\n children: Array<PortableTextBlock>\n }>,\n operation: OmitFromUnion<Operation, 'type', 'set_selection'>,\n) {\n switch (operation.type) {\n case 'insert_node': {\n const {path, node: insertedNode} = operation\n const parent = getParent(context, root, path)\n const index = path[path.length - 1]\n\n if (!parent) {\n break\n }\n\n if (index > parent.children.length) {\n break\n }\n\n if (path.length === 1) {\n // Inserting block at the root\n\n if (isTextBlockNode(context, insertedNode)) {\n // Text blocks can be inserted as is\n\n parent.children.splice(index, 0, {\n ...insertedNode,\n children: insertedNode.children.map((child) => {\n if ('__inline' in child) {\n // Except for inline object children which need to have their\n // `value` spread onto the block\n return {\n _key: child._key,\n _type: child._type,\n ...('value' in child && typeof child.value === 'object'\n ? child.value\n : {}),\n }\n }\n\n return child\n }),\n })\n\n break\n }\n\n if (Element.isElement(insertedNode) && !('__inline' in insertedNode)) {\n // Void blocks have to have their `value` spread onto the block\n\n parent.children.splice(index, 0, {\n _key: insertedNode._key,\n _type: insertedNode._type,\n ...('value' in insertedNode &&\n typeof insertedNode.value === 'object'\n ? insertedNode.value\n : {}),\n })\n break\n }\n }\n\n if (path.length === 2) {\n // Inserting children into blocks\n\n if (!isTextBlockNode(context, parent)) {\n // Only text blocks can have children\n break\n }\n\n if (isPartialSpanNode(insertedNode)) {\n // Text nodes can be inserted as is\n\n parent.children.splice(index, 0, insertedNode)\n break\n }\n\n if ('__inline' in insertedNode) {\n // Void children have to have their `value` spread onto the block\n\n parent.children.splice(index, 0, {\n _key: insertedNode._key,\n _type: insertedNode._type,\n ...('value' in insertedNode &&\n typeof insertedNode.value === 'object'\n ? insertedNode.value\n : {}),\n })\n break\n }\n }\n\n break\n }\n\n case 'insert_text': {\n const {path, offset, text} = operation\n if (text.length === 0) break\n const span = getSpan(context, root, path)\n\n if (!span) {\n break\n }\n\n const before = span.text.slice(0, offset)\n const after = span.text.slice(offset)\n span.text = before + text + after\n\n break\n }\n\n case 'merge_node': {\n const {path} = operation\n const node = getNode(context, root, path)\n const prevPath = Path.previous(path)\n const prev = getNode(context, root, prevPath)\n const parent = getParent(context, root, path)\n\n if (!node || !prev || !parent) {\n break\n }\n\n const index = path[path.length - 1]\n\n if (isPartialSpanNode(node) && isPartialSpanNode(prev)) {\n prev.text += node.text\n } else if (\n isTextBlockNode(context, node) &&\n isTextBlockNode(context, prev)\n ) {\n prev.children.push(...node.children)\n } else {\n break\n }\n\n parent.children.splice(index, 1)\n\n break\n }\n\n case 'move_node': {\n const {path, newPath} = operation\n\n if (Path.isAncestor(path, newPath)) {\n break\n }\n\n const node = getNode(context, root, path)\n const parent = getParent(context, root, path)\n const index = path[path.length - 1]\n\n if (!node || !parent) {\n break\n }\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children.splice(index, 1)\n const truePath = Path.transform(path, operation)!\n const newParent = getNode(context, root, Path.parent(truePath))\n const newIndex = truePath[truePath.length - 1]\n\n if (!newParent) {\n break\n }\n\n if (!('children' in newParent)) {\n break\n }\n\n if (!Array.isArray(newParent.children)) {\n break\n }\n\n newParent.children.splice(newIndex, 0, node)\n\n break\n }\n\n case 'remove_node': {\n const {path} = operation\n const index = path[path.length - 1]\n const parent = getParent(context, root, path)\n parent?.children.splice(index, 1)\n\n break\n }\n\n case 'remove_text': {\n const {path, offset, text} = operation\n\n if (text.length === 0) {\n break\n }\n\n const span = getSpan(context, root, path)\n\n if (!span) {\n break\n }\n\n const before = span.text.slice(0, offset)\n const after = span.text.slice(offset + text.length)\n span.text = before + after\n\n break\n }\n\n case 'set_node': {\n const {path, properties, newProperties} = operation\n\n const node = getNode(context, root, path)\n\n if (!node) {\n break\n }\n\n if (isEditorNode(node)) {\n break\n }\n\n if (isObjectNode(context, node)) {\n const valueBefore = (\n 'value' in properties && typeof properties.value === 'object'\n ? properties.value\n : {}\n ) as Partial<Node>\n const valueAfter = (\n 'value' in newProperties && typeof newProperties.value === 'object'\n ? newProperties.value\n : {}\n ) as Partial<Node>\n\n for (const key in newProperties) {\n if (key === 'value') {\n continue\n }\n\n const value = newProperties[key as keyof Partial<Node>]\n\n if (value == null) {\n delete node[<keyof PortableTextNode<EditorSchema>>key]\n } else {\n node[<keyof PortableTextNode<EditorSchema>>key] = value\n }\n }\n\n for (const key in properties) {\n if (key === 'value') {\n continue\n }\n\n if (!newProperties.hasOwnProperty(key)) {\n delete node[<keyof PortableTextNode<EditorSchema>>key]\n }\n }\n\n for (const key in valueAfter) {\n const value = valueAfter[key as keyof Partial<Node>]\n\n if (value == null) {\n delete node[<keyof PortableTextNode<EditorSchema>>key]\n } else {\n node[<keyof PortableTextNode<EditorSchema>>key] = value\n }\n }\n\n for (const key in valueBefore) {\n if (!valueAfter.hasOwnProperty(key)) {\n delete node[<keyof PortableTextNode<EditorSchema>>key]\n }\n }\n\n break\n }\n\n if (isTextBlockNode(context, node)) {\n for (const key in newProperties) {\n if (key === 'children' || key === 'text') {\n break\n }\n\n const value = newProperties[key as keyof Partial<Node>]\n\n if (value == null) {\n delete node[<keyof Partial<Node>>key]\n } else {\n node[<keyof Partial<Node>>key] = value\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[<keyof Partial<Node>>key]\n }\n }\n\n break\n }\n\n if (isPartialSpanNode(node)) {\n for (const key in newProperties) {\n if (key === 'text') {\n break\n }\n\n const value = newProperties[key as keyof Partial<Node>]\n\n if (value == null) {\n delete node[<keyof PortableTextNode<EditorSchema>>key]\n } else {\n node[<keyof PortableTextNode<EditorSchema>>key] = value\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[<keyof PortableTextNode<EditorSchema>>key]\n }\n }\n\n break\n }\n\n break\n }\n\n case 'split_node': {\n const {path, position, properties} = operation\n\n if (path.length === 0) {\n break\n }\n\n const parent = getParent(context, root, path)\n const index = path[path.length - 1]\n\n if (!parent) {\n break\n }\n\n if (isEditorNode(parent)) {\n const block = getBlock(root, path)\n\n if (!block || !isTextBlockNode(context, block)) {\n break\n }\n\n const before = block.children.slice(0, position)\n const after = block.children.slice(position)\n block.children = before\n\n // _key is deliberately left out\n const newTextBlockNode = {\n ...properties,\n children: after,\n _type: context.schema.block.name,\n } as unknown as TextBlockNode<EditorSchema>\n\n parent.children.splice(index + 1, 0, newTextBlockNode)\n\n break\n }\n\n if (isTextBlockNode(context, parent)) {\n const node = getNode(context, root, path)\n\n if (!node || !isSpanNode(context, node)) {\n break\n }\n\n const before = node.text.slice(0, position)\n const after = node.text.slice(position)\n node.text = before\n\n // _key is deliberately left out\n const newSpanNode = {\n ...properties,\n text: after,\n } as unknown as SpanNode<EditorSchema>\n\n parent.children.splice(index + 1, 0, newSpanNode)\n }\n\n break\n }\n }\n\n return root\n}\n","import {applyOperationToPortableText} from '../../internal-utils/apply-operation-to-portable-text'\nimport {buildIndexMaps} from '../../internal-utils/build-index-maps'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorContext} from '../editor-snapshot'\n\nexport function pluginUpdateValue(\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>,\n editor: PortableTextSlateEditor,\n) {\n const {apply} = editor\n\n editor.apply = (operation) => {\n if (operation.type === 'set_selection') {\n apply(operation)\n return\n }\n\n editor.value = applyOperationToPortableText(\n context,\n editor.value,\n operation,\n )\n\n if (operation.type === 'insert_text' || operation.type === 'remove_text') {\n // Inserting and removing text has no effect on index maps so there is\n // no need to rebuild those.\n apply(operation)\n return\n }\n\n buildIndexMaps(\n {\n schema: context.schema,\n value: editor.value,\n },\n {\n blockIndexMap: editor.blockIndexMap,\n listIndexMap: editor.listIndexMap,\n },\n )\n\n apply(operation)\n }\n\n return editor\n}\n","import type {BaseOperation, Editor, Node, NodeEntry} from 'slate'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport type {RelayActor} from '../relay-machine'\nimport {createWithEventListeners} from './create-with-event-listeners'\nimport {createWithMaxBlocks} from './createWithMaxBlocks'\nimport {createWithObjectKeys} from './createWithObjectKeys'\nimport {createWithPatches} from './createWithPatches'\nimport {createWithPlaceholderBlock} from './createWithPlaceholderBlock'\nimport {createWithPortableTextMarkModel} from './createWithPortableTextMarkModel'\nimport {createWithSchemaTypes} from './createWithSchemaTypes'\nimport {createWithUndoRedo} from './createWithUndoRedo'\nimport {createWithUtils} from './createWithUtils'\nimport {pluginUpdateSelection} from './slate-plugin.update-selection'\nimport {pluginUpdateValue} from './slate-plugin.update-value'\n\nexport interface OriginalEditorFunctions {\n apply: (operation: BaseOperation) => void\n onChange: () => void\n normalizeNode: (entry: NodeEntry<Node>) => void\n}\n\ntype PluginsOptions = {\n editorActor: EditorActor\n relayActor: RelayActor\n subscriptions: Array<() => () => void>\n}\n\nexport const withPlugins = <T extends Editor>(\n editor: T,\n options: PluginsOptions,\n): PortableTextSlateEditor => {\n const e = editor as T & PortableTextSlateEditor\n const {editorActor, relayActor} = options\n const withObjectKeys = createWithObjectKeys(editorActor)\n const withSchemaTypes = createWithSchemaTypes({\n editorActor,\n })\n const withPatches = createWithPatches({\n editorActor,\n relayActor,\n subscriptions: options.subscriptions,\n })\n const withMaxBlocks = createWithMaxBlocks(editorActor)\n const withUndoRedo = createWithUndoRedo({\n editorActor,\n subscriptions: options.subscriptions,\n })\n const withPortableTextMarkModel = createWithPortableTextMarkModel(editorActor)\n\n const withPlaceholderBlock = createWithPlaceholderBlock(editorActor)\n\n const withUtils = createWithUtils({\n editorActor,\n })\n const withEventListeners = createWithEventListeners(editorActor)\n\n // Ordering is important here, selection dealing last, data manipulation in the middle and core model stuff first.\n return withEventListeners(\n withSchemaTypes(\n withObjectKeys(\n withPortableTextMarkModel(\n withPlaceholderBlock(\n withUtils(\n withMaxBlocks(\n withUndoRedo(\n withPatches(\n pluginUpdateValue(\n editorActor.getSnapshot().context,\n pluginUpdateSelection({\n editorActor,\n editor: e,\n }),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n )\n}\n","import {createEditor, type Descendant} from 'slate'\nimport {withReact} from 'slate-react'\nimport {buildIndexMaps} from '../internal-utils/build-index-maps'\nimport {createPlaceholderBlock} from '../internal-utils/create-placeholder-block'\nimport {debugWithName} from '../internal-utils/debug'\nimport {toSlateValue} from '../internal-utils/values'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorActor} from './editor-machine'\nimport {withPlugins} from './plugins/with-plugins'\nimport type {RelayActor} from './relay-machine'\nimport {KEY_TO_SLATE_ELEMENT, KEY_TO_VALUE_ELEMENT} from './weakMaps'\n\nconst debug = debugWithName('setup')\n\ntype SlateEditorConfig = {\n editorActor: EditorActor\n relayActor: RelayActor\n subscriptions: Array<() => () => void>\n}\n\nexport type SlateEditor = {\n instance: PortableTextSlateEditor\n initialValue: Array<Descendant>\n}\n\nexport function createSlateEditor(config: SlateEditorConfig): SlateEditor {\n debug('Creating new Slate editor instance')\n\n const instance = withPlugins(withReact(createEditor()), {\n editorActor: config.editorActor,\n relayActor: config.relayActor,\n subscriptions: config.subscriptions,\n })\n\n KEY_TO_VALUE_ELEMENT.set(instance, {})\n KEY_TO_SLATE_ELEMENT.set(instance, {})\n\n instance.decoratedRanges = []\n instance.decoratorState = {}\n\n const placeholderBlock = createPlaceholderBlock(\n config.editorActor.getSnapshot().context,\n )\n instance.value = [placeholderBlock]\n instance.blockIndexMap = new Map<string, number>()\n instance.listIndexMap = new Map<string, number>()\n\n buildIndexMaps(\n {\n schema: config.editorActor.getSnapshot().context.schema,\n value: instance.value,\n },\n {\n blockIndexMap: instance.blockIndexMap,\n listIndexMap: instance.listIndexMap,\n },\n )\n\n const initialValue = toSlateValue(instance.value, {\n schemaTypes: config.editorActor.getSnapshot().context.schema,\n })\n\n const slateEditor: SlateEditor = {\n instance,\n initialValue,\n }\n\n return slateEditor\n}\n","import {Editor} from 'slate'\nimport {DOMEditor} from 'slate-dom'\nimport type {BehaviorEvent} from '../behaviors/behavior.types.event'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {getSelectionEndBlock, getSelectionStartBlock} from '../selectors'\nimport type {PickFromUnion} from '../type-utils'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorSnapshot} from './editor-snapshot'\n\nexport type EditorDom = {\n getBlockNodes: (snapshot: EditorSnapshot) => Array<Node>\n getChildNodes: (snapshot: EditorSnapshot) => Array<Node>\n getEditorElement: () => Element | undefined\n getSelectionRect: (snapshot: EditorSnapshot) => DOMRect | null\n getStartBlockElement: (snapshot: EditorSnapshot) => Element | null\n getEndBlockElement: (snapshot: EditorSnapshot) => Element | null\n /**\n * Let the Editor set the drag ghost. This is to be sure that it will get\n * properly removed again when the drag ends.\n */\n setDragGhost: ({\n event,\n ghost,\n }: {\n event: PickFromUnion<BehaviorEvent, 'type', 'drag.dragstart'>\n ghost: {\n element: HTMLElement\n x: number\n y: number\n }\n }) => void\n}\n\nexport function createEditorDom(\n sendBack: (event: {type: 'set drag ghost'; ghost: HTMLElement}) => void,\n slateEditor: PortableTextSlateEditor,\n): EditorDom {\n return {\n getBlockNodes: (snapshot) => getBlockNodes(slateEditor, snapshot),\n getChildNodes: (snapshot) => getChildNodes(slateEditor, snapshot),\n getEditorElement: () => getEditorElement(slateEditor),\n getSelectionRect: (snapshot) => getSelectionRect(snapshot),\n getStartBlockElement: (snapshot) =>\n getStartBlockElement(slateEditor, snapshot),\n getEndBlockElement: (snapshot) => getEndBlockElement(slateEditor, snapshot),\n setDragGhost: ({event, ghost}) => setDragGhost({sendBack, event, ghost}),\n }\n}\n\nfunction getBlockNodes(\n slateEditor: PortableTextSlateEditor,\n snapshot: EditorSnapshot,\n) {\n if (!snapshot.context.selection) {\n return []\n }\n\n const range = toSlateRange(snapshot)\n\n if (!range) {\n return []\n }\n\n try {\n const blockEntries = Array.from(\n Editor.nodes(slateEditor, {\n at: range,\n mode: 'highest',\n match: (n) => !Editor.isEditor(n),\n }),\n )\n\n return blockEntries.map(([blockNode]) =>\n DOMEditor.toDOMNode(slateEditor, blockNode),\n )\n } catch {\n return []\n }\n}\n\nfunction getChildNodes(\n slateEditor: PortableTextSlateEditor,\n snapshot: EditorSnapshot,\n) {\n if (!snapshot.context.selection) {\n return []\n }\n\n const range = toSlateRange(snapshot)\n\n if (!range) {\n return []\n }\n\n try {\n const childEntries = Array.from(\n Editor.nodes(slateEditor, {\n at: range,\n mode: 'lowest',\n match: (n) => !Editor.isEditor(n),\n }),\n )\n\n return childEntries.map(([childNode]) =>\n DOMEditor.toDOMNode(slateEditor, childNode),\n )\n } catch {\n return []\n }\n}\n\nfunction getEditorElement(slateEditor: PortableTextSlateEditor) {\n try {\n return DOMEditor.toDOMNode(slateEditor, slateEditor)\n } catch {\n return undefined\n }\n}\n\nfunction getSelectionRect(snapshot: EditorSnapshot) {\n if (!snapshot.context.selection) {\n return null\n }\n\n try {\n const selection = window.getSelection()\n\n if (!selection) {\n return null\n }\n\n const range = selection.getRangeAt(0)\n return range.getBoundingClientRect()\n } catch {\n return null\n }\n}\n\nfunction getStartBlockElement(\n slateEditor: PortableTextSlateEditor,\n snapshot: EditorSnapshot,\n) {\n const startBlock = getSelectionStartBlock(snapshot)\n\n if (!startBlock) {\n return null\n }\n\n const startBlockNode = getBlockNodes(slateEditor, {\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: {\n path: startBlock.path,\n offset: 0,\n },\n focus: {\n path: startBlock.path,\n offset: 0,\n },\n },\n },\n })?.at(0)\n\n return startBlockNode && startBlockNode instanceof Element\n ? startBlockNode\n : null\n}\n\nfunction getEndBlockElement(\n slateEditor: PortableTextSlateEditor,\n snapshot: EditorSnapshot,\n) {\n const endBlock = getSelectionEndBlock(snapshot)\n\n if (!endBlock) {\n return null\n }\n\n const endBlockNode = getBlockNodes(slateEditor, {\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: {\n path: endBlock.path,\n offset: 0,\n },\n focus: {\n path: endBlock.path,\n offset: 0,\n },\n },\n },\n })?.at(0)\n\n return endBlockNode && endBlockNode instanceof Element ? endBlockNode : null\n}\n\nfunction setDragGhost({\n sendBack,\n event,\n ghost,\n}: {\n sendBack: (event: {type: 'set drag ghost'; ghost: HTMLElement}) => void\n event: PickFromUnion<BehaviorEvent, 'type', 'drag.dragstart'>\n ghost: {\n element: HTMLElement\n x: number\n y: number\n }\n}) {\n event.originEvent.dataTransfer.setDragImage(ghost.element, ghost.x, ghost.y)\n\n sendBack({\n type: 'set drag ghost',\n ghost: ghost.element,\n })\n}\n","import {getCaretWordSelection} from '../selectors/selector.get-caret-word-selection'\nimport {isActiveAnnotation} from '../selectors/selector.is-active-annotation'\nimport {isSelectionCollapsed} from '../selectors/selector.is-selection-collapsed'\nimport {isSelectionExpanded} from '../selectors/selector.is-selection-expanded'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nconst addAnnotationOnCollapsedSelection = defineBehavior({\n on: 'annotation.add',\n guard: ({snapshot}) => {\n if (!isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const caretWordSelection = getCaretWordSelection(snapshot)\n\n if (\n !caretWordSelection ||\n !isSelectionExpanded({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: caretWordSelection,\n },\n })\n ) {\n return false\n }\n\n return {caretWordSelection}\n },\n actions: [\n ({event}, {caretWordSelection}) => [\n raise({type: 'select', at: caretWordSelection}),\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\n/**\n * By default, same-type annotations can overlap. This Core Behavior ensures\n * that annotations of the same type are mutually exclusive.\n */\nconst preventOverlappingAnnotations = defineBehavior({\n // Given an `annotation.add` event\n on: 'annotation.add',\n // When the annotation is active in the selection\n guard: ({snapshot, event}) =>\n isActiveAnnotation(event.annotation.name, {mode: 'partial'})(snapshot),\n // Then the existing annotation is removed\n actions: [\n ({event}) => [\n raise({type: 'annotation.remove', annotation: event.annotation}),\n raise(event),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = [\n addAnnotationOnCollapsedSelection,\n preventOverlappingAnnotations,\n]\n","import {\n bold,\n code,\n createKeyboardShortcut,\n italic,\n redo,\n underline,\n undo,\n} from '@portabletext/keyboard-shortcuts'\n\nexport const defaultKeyboardShortcuts = {\n arrowDown: createKeyboardShortcut({\n default: [\n {\n key: 'ArrowDown',\n alt: false,\n ctrl: false,\n meta: false,\n shift: false,\n },\n ],\n }),\n arrowUp: createKeyboardShortcut({\n default: [\n {\n key: 'ArrowUp',\n alt: false,\n ctrl: false,\n meta: false,\n shift: false,\n },\n ],\n }),\n backspace: createKeyboardShortcut({\n default: [\n {\n key: 'Backspace',\n alt: false,\n ctrl: false,\n meta: false,\n shift: false,\n },\n ],\n }),\n break: createKeyboardShortcut({\n default: [\n {\n key: 'Enter',\n shift: false,\n },\n ],\n }),\n lineBreak: createKeyboardShortcut({\n default: [\n {\n key: 'Enter',\n shift: true,\n },\n ],\n }),\n decorators: {\n strong: bold,\n em: italic,\n underline: underline,\n code: code,\n },\n delete: createKeyboardShortcut({\n default: [\n {\n key: 'Delete',\n alt: false,\n ctrl: false,\n meta: false,\n shift: false,\n },\n ],\n }),\n history: {\n undo,\n redo,\n },\n tab: createKeyboardShortcut({\n default: [\n {\n key: 'Tab',\n alt: false,\n ctrl: false,\n meta: false,\n shift: false,\n },\n ],\n }),\n shiftTab: createKeyboardShortcut({\n default: [\n {\n key: 'Tab',\n alt: false,\n ctrl: false,\n meta: false,\n shift: true,\n },\n ],\n }),\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport {defaultKeyboardShortcuts} from '../keyboard-shortcuts/default-keyboard-shortcuts'\nimport {getFocusBlockObject} from '../selectors/selector.get-focus-block-object'\nimport {getFocusTextBlock} from '../selectors/selector.get-focus-text-block'\nimport {getNextBlock} from '../selectors/selector.get-next-block'\nimport {getPreviousBlock} from '../selectors/selector.get-previous-block'\nimport {isSelectionCollapsed} from '../selectors/selector.is-selection-collapsed'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nconst arrowDownOnLonelyBlockObject = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowDown = defaultKeyboardShortcuts.arrowDown.guard(\n event.originEvent,\n )\n\n if (!isArrowDown) {\n return false\n }\n\n const collapsedSelection = isSelectionCollapsed(snapshot)\n\n if (!collapsedSelection) {\n return false\n }\n\n const focusBlockObject = getFocusBlockObject(snapshot)\n const nextBlock = getNextBlock(snapshot)\n\n return focusBlockObject && !nextBlock\n },\n actions: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowUp = defaultKeyboardShortcuts.arrowUp.guard(event.originEvent)\n\n if (!isArrowUp) {\n return false\n }\n\n const collapsedSelection = isSelectionCollapsed(snapshot)\n\n if (!collapsedSelection) {\n return false\n }\n\n const focusBlockObject = getFocusBlockObject(snapshot)\n const previousBlock = getPreviousBlock(snapshot)\n\n return focusBlockObject && !previousBlock\n },\n actions: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'before',\n }),\n ],\n ],\n})\n\nconst breakingBlockObject = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusBlockObject = getFocusBlockObject(snapshot)\n const collapsedSelection = isSelectionCollapsed(snapshot)\n\n return collapsedSelection && focusBlockObject !== undefined\n },\n actions: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst clickingAboveLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n if (snapshot.context.readOnly) {\n return false\n }\n\n if (snapshot.context.selection && !isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const focusBlockObject = getFocusBlockObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n const previousBlock = getPreviousBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n\n return (\n event.position.isEditor &&\n event.position.block === 'start' &&\n focusBlockObject &&\n !previousBlock\n )\n },\n actions: [\n ({snapshot, event}) => [\n raise({\n type: 'select',\n at: event.position.selection,\n }),\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'before',\n select: 'start',\n }),\n ],\n ],\n})\n\nconst clickingBelowLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n if (snapshot.context.readOnly) {\n return false\n }\n\n if (snapshot.context.selection && !isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const focusBlockObject = getFocusBlockObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n const nextBlock = getNextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n\n return (\n event.position.isEditor &&\n event.position.block === 'end' &&\n focusBlockObject &&\n !nextBlock\n )\n },\n actions: [\n ({snapshot, event}) => [\n raise({\n type: 'select',\n at: event.position.selection,\n }),\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n select: 'start',\n }),\n ],\n ],\n})\n\nconst deletingEmptyTextBlockAfterBlockObject = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n const previousBlock = getPreviousBlock(snapshot)\n\n if (!focusTextBlock || !selectionCollapsed || !previousBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(snapshot.context, focusTextBlock.node) &&\n !isTextBlock(snapshot.context, previousBlock.node)\n ) {\n return {focusTextBlock, previousBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, previousBlock}) => [\n raise({\n type: 'delete.block',\n at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n at: {\n anchor: {path: previousBlock.path, offset: 0},\n focus: {path: previousBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nconst deletingEmptyTextBlockBeforeBlockObject = defineBehavior({\n on: 'delete.forward',\n guard: ({snapshot}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n const nextBlock = getNextBlock(snapshot)\n\n if (!focusTextBlock || !selectionCollapsed || !nextBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(snapshot.context, focusTextBlock.node) &&\n !isTextBlock(snapshot.context, nextBlock.node)\n ) {\n return {focusTextBlock, nextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, nextBlock}) => [\n raise({\n type: 'delete.block',\n at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n at: {\n anchor: {path: nextBlock.path, offset: 0},\n focus: {path: nextBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nexport const coreBlockObjectBehaviors = {\n arrowDownOnLonelyBlockObject,\n arrowUpOnLonelyBlockObject,\n breakingBlockObject,\n clickingAboveLonelyBlockObject,\n clickingBelowLonelyBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {defaultKeyboardShortcuts} from '../keyboard-shortcuts/default-keyboard-shortcuts'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const coreDecoratorBehaviors = {\n strongShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n defaultKeyboardShortcuts.decorators.strong.guard(event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.name === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n defaultKeyboardShortcuts.decorators.em.guard(event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.name === 'em',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n defaultKeyboardShortcuts.decorators.underline.guard(event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.name === 'underline',\n ),\n actions: [\n () => [raise({type: 'decorator.toggle', decorator: 'underline'})],\n ],\n }),\n codeShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n defaultKeyboardShortcuts.decorators.code.guard(event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.name === 'code',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","export function getCompoundClientRect(nodes: Array<Node>): DOMRect {\n if (nodes.length === 0) {\n return new DOMRect(0, 0, 0, 0)\n }\n\n const elements = nodes.filter((node) => node instanceof Element)\n\n const firstRect = elements.at(0)?.getBoundingClientRect()\n\n if (!firstRect) {\n return new DOMRect(0, 0, 0, 0)\n }\n\n let left = firstRect.left\n let top = firstRect.top\n let right = firstRect.right\n let bottom = firstRect.bottom\n\n for (let i = 1; i < elements.length; i++) {\n const rect = elements[i].getBoundingClientRect()\n left = Math.min(left, rect.left)\n top = Math.min(top, rect.top)\n right = Math.max(right, rect.right)\n bottom = Math.max(bottom, rect.bottom)\n }\n\n return new DOMRect(left, top, right - left, bottom - top)\n}\n","import {getCompoundClientRect} from '../internal-utils/compound-client-rect'\nimport {getDragSelection} from '../selectors/drag-selection'\nimport {getSelectedBlocks} from '../selectors/selector.get-selected-blocks'\nimport {isOverlappingSelection} from '../selectors/selector.is-overlapping-selection'\nimport {isSelectingEntireBlocks} from '../selectors/selector.is-selecting-entire-blocks'\nimport {effect, forward, raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const coreDndBehaviors = [\n /**\n * Core Behavior that:\n * 1. Calculates and selects a \"drag selection\"\n * 2. Constructs and sets a drag ghost element\n * 3. Forwards the dragstart event\n */\n defineBehavior({\n on: 'drag.dragstart',\n guard: ({snapshot, dom, event}) => {\n const dragSelection = getDragSelection({\n snapshot,\n eventSelection: event.position.selection,\n })\n const selectingEntireBlocks = isSelectingEntireBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragSelection,\n },\n })\n const draggedDomNodes = {\n blockNodes: dom.getBlockNodes({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragSelection,\n },\n }),\n childNodes: dom.getChildNodes({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragSelection,\n },\n }),\n }\n\n return {\n dragSelection,\n draggedDomNodes,\n selectingEntireBlocks,\n }\n },\n actions: [\n (\n {dom, event},\n {dragSelection, draggedDomNodes, selectingEntireBlocks},\n ) => {\n const dragGhost = document.createElement('div')\n\n if (selectingEntireBlocks) {\n // Clone the DOM Nodes so they won't be visually clipped by scroll-containers etc.\n const clonedBlockNodes = draggedDomNodes.blockNodes.map((node) =>\n node.cloneNode(true),\n )\n\n for (const block of clonedBlockNodes) {\n if (block instanceof HTMLElement) {\n block.style.position = 'relative'\n }\n dragGhost.appendChild(block)\n }\n\n // A custom drag ghost element can be configured using this data attribute\n const customGhost = dragGhost.querySelector(\n '[data-pt-drag-ghost-element]',\n )\n if (customGhost) {\n dragGhost.replaceChildren(customGhost)\n }\n\n // Setting the `data-dragged` attribute so the consumer can style the element while it’s dragged\n dragGhost.setAttribute('data-dragged', '')\n\n dragGhost.style.position = 'absolute'\n dragGhost.style.left = '-99999px'\n dragGhost.style.boxSizing = 'border-box'\n document.body.appendChild(dragGhost)\n\n if (customGhost) {\n const customGhostRect = customGhost.getBoundingClientRect()\n const x = event.originEvent.clientX - customGhostRect.left\n const y = event.originEvent.clientY - customGhostRect.top\n dragGhost.style.width = `${customGhostRect.width}px`\n dragGhost.style.height = `${customGhostRect.height}px`\n\n return [\n raise({\n type: 'select',\n at: dragSelection,\n }),\n effect(() => {\n dom.setDragGhost({\n event,\n ghost: {\n element: dragGhost,\n x,\n y,\n },\n })\n }),\n forward(event),\n ]\n } else {\n const blocksDomRect = getCompoundClientRect(\n draggedDomNodes.blockNodes,\n )\n const x = event.originEvent.clientX - blocksDomRect.left\n const y = event.originEvent.clientY - blocksDomRect.top\n dragGhost.style.width = `${blocksDomRect.width}px`\n dragGhost.style.height = `${blocksDomRect.height}px`\n\n return [\n raise({\n type: 'select',\n at: dragSelection,\n }),\n effect(() => {\n dom.setDragGhost({\n event,\n ghost: {element: dragGhost, x, y},\n })\n }),\n forward(event),\n ]\n }\n } else {\n const clonedChildNodes = draggedDomNodes.childNodes.map((node) =>\n node.cloneNode(true),\n )\n\n for (const child of clonedChildNodes) {\n dragGhost.appendChild(child)\n }\n\n dragGhost.style.position = 'absolute'\n dragGhost.style.left = '-99999px'\n dragGhost.style.boxSizing = 'border-box'\n document.body.appendChild(dragGhost)\n\n const childrenDomRect = getCompoundClientRect(\n draggedDomNodes.childNodes,\n )\n const x = event.originEvent.clientX - childrenDomRect.left\n const y = event.originEvent.clientY - childrenDomRect.top\n dragGhost.style.width = `${childrenDomRect.width}px`\n dragGhost.style.height = `${childrenDomRect.height}px`\n\n return [\n raise({\n type: 'select',\n at: dragSelection,\n }),\n effect(() => {\n dom.setDragGhost({\n event,\n ghost: {element: dragGhost, x, y},\n })\n }),\n forward(event),\n ]\n }\n },\n ],\n }),\n\n /**\n * When dragging over the drag origin, we don't want to show the caret in the\n * text.\n */\n defineBehavior({\n on: 'drag.dragover',\n guard: ({snapshot, event}) => {\n const dragOrigin = event.dragOrigin\n const draggingOverDragOrigin = dragOrigin\n ? isOverlappingSelection(event.position.selection)({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n : false\n\n return draggingOverDragOrigin\n },\n actions: [],\n }),\n\n /**\n * If the drop position overlaps the drag origin, then the event should be\n * cancelled.\n */\n defineBehavior({\n on: 'drag.drop',\n guard: ({snapshot, event}) => {\n const dragOrigin = event.dragOrigin\n const dropPosition = event.position.selection\n const droppingOnDragOrigin = dragOrigin\n ? isOverlappingSelection(dropPosition)({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n : false\n return droppingOnDragOrigin\n },\n actions: [],\n }),\n /**\n * If we drop and have access to a drag origin, then we can deserialize\n * without creating a new selection.\n */\n defineBehavior({\n on: 'drag.drop',\n guard: ({event}) => event.dragOrigin !== undefined,\n actions: [\n ({event}) => [\n raise({\n type: 'deserialize',\n originEvent: event,\n }),\n ],\n ],\n }),\n /**\n * Otherwise, we should to create a new selection.\n */\n defineBehavior({\n on: 'drag.drop',\n actions: [\n ({event}) => [\n raise({\n type: 'select',\n at: event.position.selection,\n }),\n raise({\n type: 'deserialize',\n originEvent: event,\n }),\n ],\n ],\n }),\n\n /**\n * Core Behavior that uses the drag origin to mimic a move operation during\n * internal dragging.\n */\n defineBehavior({\n on: 'deserialization.success',\n guard: ({snapshot, event}) => {\n if (\n event.originEvent.type !== 'drag.drop' ||\n event.originEvent.dragOrigin === undefined\n ) {\n return false\n }\n\n const dragOrigin = event.originEvent.dragOrigin\n const dragSelection = getDragSelection({\n eventSelection: dragOrigin.selection,\n snapshot,\n })\n const dropPosition = event.originEvent.position.selection\n const droppingOnDragOrigin = dragOrigin\n ? isOverlappingSelection(dropPosition)({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragSelection,\n },\n })\n : false\n\n const draggingEntireBlocks = isSelectingEntireBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragSelection,\n },\n })\n\n const draggedBlocks = getSelectedBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragSelection,\n },\n })\n\n if (!droppingOnDragOrigin) {\n return {\n dropPosition,\n draggingEntireBlocks,\n draggedBlocks,\n dragOrigin,\n originEvent: event.originEvent,\n }\n }\n\n return false\n },\n actions: [\n (\n {event},\n {\n draggingEntireBlocks,\n draggedBlocks,\n dragOrigin,\n dropPosition,\n originEvent,\n },\n ) => [\n raise({\n type: 'select',\n at: dropPosition,\n }),\n ...(draggingEntireBlocks\n ? draggedBlocks.map((block) =>\n raise({\n type: 'delete.block',\n at: block.path,\n }),\n )\n : [\n raise({\n type: 'delete',\n at: dragOrigin.selection,\n }),\n ]),\n raise({\n type: 'insert.blocks',\n blocks: event.data,\n placement: draggingEntireBlocks\n ? originEvent.position.block === 'start'\n ? 'before'\n : originEvent.position.block === 'end'\n ? 'after'\n : 'auto'\n : 'auto',\n }),\n ],\n ],\n }),\n]\n","import {getActiveAnnotationsMarks} from '../selectors/selector.get-active-annotation-marks'\nimport {getActiveDecorators} from '../selectors/selector.get-active-decorators'\nimport {getFocusSpan} from '../selectors/selector.get-focus-span'\nimport {getMarkState} from '../selectors/selector.get-mark-state'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const coreInsertBehaviors = [\n defineBehavior({\n on: 'insert.text',\n guard: ({snapshot}) => {\n const focusSpan = getFocusSpan(snapshot)\n\n if (!focusSpan) {\n return false\n }\n\n const markState = getMarkState(snapshot)\n const activeDecorators = getActiveDecorators(snapshot)\n const activeAnnotations = getActiveAnnotationsMarks(snapshot)\n\n if (markState && markState.state === 'unchanged') {\n const markStateDecorators = (markState.marks ?? []).filter((mark) =>\n snapshot.context.schema.decorators\n .map((decorator) => decorator.name)\n .includes(mark),\n )\n\n if (\n markStateDecorators.length === activeDecorators.length &&\n markStateDecorators.every((mark) => activeDecorators.includes(mark))\n ) {\n return false\n }\n }\n\n return {activeDecorators, activeAnnotations}\n },\n actions: [\n ({snapshot, event}, {activeDecorators, activeAnnotations}) => [\n raise({\n type: 'insert.child',\n child: {\n _type: snapshot.context.schema.span.name,\n text: event.text,\n marks: [...activeDecorators, ...activeAnnotations],\n },\n }),\n ],\n ],\n }),\n]\n","import {getFirstBlock} from '../selectors/selector.get-first-block'\nimport {getFocusInlineObject} from '../selectors/selector.get-focus-inline-object'\nimport {getFocusSpan} from '../selectors/selector.get-focus-span'\nimport {getFocusTextBlock} from '../selectors/selector.get-focus-text-block'\nimport {getLastBlock} from '../selectors/selector.get-last-block'\nimport {getSelectedBlocks} from '../selectors/selector.get-selected-blocks'\nimport {getSelectionEndBlock} from '../selectors/selector.get-selection-end-block'\nimport {getSelectionStartBlock} from '../selectors/selector.get-selection-start-block'\nimport {isAtTheEndOfBlock} from '../selectors/selector.is-at-the-end-of-block'\nimport {isAtTheStartOfBlock} from '../selectors/selector.is-at-the-start-of-block'\nimport {isSelectionCollapsed} from '../selectors/selector.is-selection-collapsed'\nimport {isSelectionExpanded} from '../selectors/selector.is-selection-expanded'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getBlockStartPoint} from '../utils/util.get-block-start-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {getSelectionStartPoint} from '../utils/util.get-selection-start-point'\nimport {isEqualSelectionPoints} from '../utils/util.is-equal-selection-points'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nconst breakingAtTheEndOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n\n if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const atTheEndOfBlock = isAtTheEndOfBlock(focusTextBlock)(snapshot)\n\n const focusListItem = focusTextBlock.node.listItem\n const focusLevel = focusTextBlock.node.level\n\n if (atTheEndOfBlock) {\n return {focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n ({snapshot}, {focusListItem, focusLevel}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: [\n {\n _type: snapshot.context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n listItem: focusListItem,\n level: focusLevel,\n style: snapshot.context.schema.styles[0]?.name,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst breakingAtTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n\n if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = getFocusSpan(snapshot)\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.name === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !snapshot.context.schema.decorators.some(\n (decorator) => decorator.name === mark,\n ),\n ) ?? []\n const focusListItem = focusTextBlock.node.listItem\n const focusLevel = focusTextBlock.node.level\n\n const atTheStartOfBlock = isAtTheStartOfBlock(focusTextBlock)(snapshot)\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {snapshot},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: [\n {\n _type: snapshot.context.schema.span.name,\n marks: focusAnnotations.length === 0 ? focusDecorators : [],\n text: '',\n },\n ],\n listItem: focusListItem,\n level: focusLevel,\n style: snapshot.context.schema.styles[0]?.name,\n },\n placement: 'before',\n select: 'none',\n }),\n ],\n ],\n})\n\nconst breakingEntireDocument = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n if (!isSelectionExpanded(snapshot)) {\n return false\n }\n\n const firstBlock = getFirstBlock(snapshot)\n const lastBlock = getLastBlock(snapshot)\n\n if (!firstBlock || !lastBlock) {\n return false\n }\n\n const firstBlockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: firstBlock,\n })\n const selectionStartPoint = getSelectionStartPoint(\n snapshot.context.selection,\n )\n const lastBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: lastBlock,\n })\n const selectionEndPoint = getSelectionEndPoint(snapshot.context.selection)\n\n if (\n isEqualSelectionPoints(firstBlockStartPoint, selectionStartPoint) &&\n isEqualSelectionPoints(lastBlockEndPoint, selectionEndPoint)\n ) {\n return {selection: snapshot.context.selection}\n }\n\n return false\n },\n actions: [\n (_, {selection}) => [\n raise({\n type: 'delete',\n at: selection,\n }),\n ],\n ],\n})\n\nconst breakingEntireBlocks = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n if (!isSelectionExpanded(snapshot)) {\n return false\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectionStartBlock = getSelectionStartBlock(snapshot)\n const selectionEndBlock = getSelectionEndBlock(snapshot)\n\n if (!selectionStartBlock || !selectionEndBlock) {\n return false\n }\n\n const startBlockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: selectionStartBlock,\n })\n const selectionStartPoint = getSelectionStartPoint(\n snapshot.context.selection,\n )\n const endBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: selectionEndBlock,\n })\n const selectionEndPoint = getSelectionEndPoint(snapshot.context.selection)\n\n if (\n isEqualSelectionPoints(selectionStartPoint, startBlockStartPoint) &&\n isEqualSelectionPoints(selectionEndPoint, endBlockEndPoint)\n ) {\n return {selectedBlocks}\n }\n\n return false\n },\n actions: [\n ({snapshot}, {selectedBlocks}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: [\n {\n _type: snapshot.context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n },\n placement: 'before',\n select: 'start',\n }),\n ...selectedBlocks.map((block) =>\n raise({\n type: 'delete.block',\n at: block.path,\n }),\n ),\n ],\n ],\n})\n\nconst breakingInlineObject = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n const focusInlineObject = getFocusInlineObject(snapshot)\n\n return selectionCollapsed && focusInlineObject\n },\n actions: [\n () => [raise({type: 'move.forward', distance: 1}), raise({type: 'split'})],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n breakingAtTheEndOfTextBlock,\n breakingAtTheStartOfTextBlock,\n breakingEntireDocument,\n breakingEntireBlocks,\n breakingInlineObject,\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isSelectionCollapsed} from './util.is-selection-collapsed'\nimport {getChildKeyFromSelectionPoint} from './util.selection-point'\n\nexport function isAtTheBeginningOfBlock({\n context,\n block,\n}: {\n context: EditorContext\n block: PortableTextBlock\n}) {\n if (!isTextBlock(context, block)) {\n return false\n }\n\n if (!context.selection) {\n return false\n }\n\n if (!isSelectionCollapsed(context.selection)) {\n return false\n }\n\n const focusSpanKey = getChildKeyFromSelectionPoint(context.selection.focus)\n\n return (\n focusSpanKey === block.children[0]._key &&\n context.selection.focus.offset === 0\n )\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport {defaultKeyboardShortcuts} from '../keyboard-shortcuts/default-keyboard-shortcuts'\nimport {getFocusListBlock} from '../selectors/selector.get-focus-list-block'\nimport {getFocusSpan} from '../selectors/selector.get-focus-span'\nimport {getFocusTextBlock} from '../selectors/selector.get-focus-text-block'\nimport {getNextBlock} from '../selectors/selector.get-next-block'\nimport {getPreviousBlock} from '../selectors/selector.get-previous-block'\nimport {getSelectedBlocks} from '../selectors/selector.get-selected-blocks'\nimport {getSelectionEndPoint} from '../selectors/selector.get-selection-end-point'\nimport {getSelectionStartPoint} from '../selectors/selector.get-selection-start-point'\nimport {isSelectionCollapsed} from '../selectors/selector.is-selection-collapsed'\nimport {isListBlock} from '../utils/parse-blocks'\nimport {isAtTheBeginningOfBlock} from '../utils/util.at-the-beginning-of-block'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getBlockStartPoint} from '../utils/util.get-block-start-point'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {isEqualSelectionPoints} from '../utils/util.is-equal-selection-points'\nimport {sliceTextBlock} from '../utils/util.slice-text-block'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nconst MAX_LIST_LEVEL = 10\n\nconst clearListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n if (!focusTextBlock) {\n return false\n }\n\n if (focusTextBlock.node.level !== 1) {\n return false\n }\n\n if (\n !isAtTheBeginningOfBlock({\n context: snapshot.context,\n block: focusTextBlock.node,\n })\n ) {\n return false\n }\n\n return {focusTextBlock}\n },\n actions: [\n (_, {focusTextBlock}) => [\n raise({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst unindentListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n const focusTextBlock = getFocusTextBlock(snapshot)\n const focusSpan = getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n if (\n atTheBeginningOfBLock &&\n focusTextBlock.node.level !== undefined &&\n focusTextBlock.node.level > 1\n ) {\n return {focusTextBlock, level: focusTextBlock.node.level - 1}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, level}) => [\n raise({\n type: 'block.set',\n props: {level},\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\n/**\n * Hitting Delete in an empty list item would delete it by default. Instead,\n * then text block below should be merged into it, preserving the list\n * properties.\n */\nconst mergeTextIntoListOnDelete = defineBehavior({\n on: 'delete.forward',\n guard: ({snapshot}) => {\n const focusListBlock = getFocusListBlock(snapshot)\n const nextBlock = getNextBlock(snapshot)\n\n if (!focusListBlock || !nextBlock) {\n return false\n }\n\n if (!isTextBlock(snapshot.context, nextBlock.node)) {\n return false\n }\n\n if (!isEmptyTextBlock(snapshot.context, focusListBlock.node)) {\n return false\n }\n\n return {focusListBlock, nextBlock}\n },\n actions: [\n (_, {nextBlock}) => [\n raise({\n type: 'insert.block',\n block: nextBlock.node,\n placement: 'auto',\n select: 'start',\n }),\n raise({\n type: 'delete.block',\n at: nextBlock.path,\n }),\n ],\n ],\n})\n\n/**\n * Hitting Backspace before an empty list item would delete it by default.\n * Instead, the text block below should be merged into it, preserving the list\n * properties.\n */\nconst mergeTextIntoListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const previousBlock = getPreviousBlock(snapshot)\n\n if (!focusTextBlock || !previousBlock) {\n return false\n }\n\n if (\n !isAtTheBeginningOfBlock({\n context: snapshot.context,\n block: focusTextBlock.node,\n })\n ) {\n return false\n }\n\n if (!isListBlock(snapshot.context, previousBlock.node)) {\n return false\n }\n\n if (!isEmptyTextBlock(snapshot.context, previousBlock.node)) {\n return false\n }\n\n const previousBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: previousBlock,\n })\n\n return {focusTextBlock, previousBlockEndPoint}\n },\n actions: [\n (_, {focusTextBlock, previousBlockEndPoint}) => [\n raise({\n type: 'select',\n at: {\n anchor: previousBlockEndPoint,\n focus: previousBlockEndPoint,\n },\n }),\n raise({\n type: 'insert.block',\n block: focusTextBlock.node,\n placement: 'auto',\n select: 'start',\n }),\n raise({\n type: 'delete.block',\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\n/**\n * When performing a delete operation where the start point of the operation is\n * at the start of a list item and the end point of the operation is in another\n * list item, we make sure the preserve the first list item. Otherwise, the\n * default behavior would be to preserve the last item.\n */\nconst deletingListFromStart = defineBehavior({\n on: 'delete',\n guard: ({snapshot, event}) => {\n const at = event.at ?? snapshot.context.selection\n\n if (!at) {\n return false\n }\n\n const blocksToDelete = getSelectedBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: at,\n },\n })\n\n if (blocksToDelete.length < 2) {\n return false\n }\n\n const startBlock = blocksToDelete.at(0)?.node\n const middleBlocks = blocksToDelete.slice(1, -1)\n const endBlock = blocksToDelete.at(-1)?.node\n\n if (\n !isListBlock(snapshot.context, startBlock) ||\n !isListBlock(snapshot.context, endBlock)\n ) {\n // It's that any block in between isn't a list item, but the first and\n // last blocks have to be list items for this Behavior to take effect.\n return false\n }\n\n const deleteStartPoint = getSelectionStartPoint({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: at,\n },\n })\n const deleteEndPoint = getSelectionEndPoint({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: at,\n },\n })\n\n if (!deleteStartPoint || !deleteEndPoint) {\n return false\n }\n\n const startBlockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: {\n node: startBlock,\n path: [{_key: startBlock._key}],\n },\n })\n\n if (!isEqualSelectionPoints(deleteStartPoint, startBlockStartPoint)) {\n // If we aren't deleting from the beginning of the first list item, then\n // there is no need to proceed. The default delete Behavior will suffice.\n return false\n }\n\n const startBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: {\n node: startBlock,\n path: [{_key: startBlock._key}],\n },\n })\n const endBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: {\n node: endBlock,\n path: [{_key: endBlock._key}],\n },\n })\n const slicedEndBlock = sliceTextBlock({\n context: {\n schema: snapshot.context.schema,\n selection: {\n anchor: deleteEndPoint,\n focus: endBlockEndPoint,\n },\n },\n block: endBlock,\n })\n\n return {\n startBlockStartPoint,\n startBlockEndPoint,\n middleBlocks,\n endBlock,\n slicedEndBlock,\n }\n },\n actions: [\n (\n _,\n {\n startBlockStartPoint,\n startBlockEndPoint,\n middleBlocks,\n endBlock,\n slicedEndBlock,\n },\n ) => [\n // All block in between can safely be deleted.\n ...middleBlocks.map((block) =>\n raise({type: 'delete.block', at: block.path}),\n ),\n // The last block is deleted as well.\n raise({type: 'delete.block', at: [{_key: endBlock._key}]}),\n // But in case the delete operation didn't reach all the way to the end\n // of it, we first place the caret at the end of the start block...\n raise({\n type: 'select',\n at: {\n anchor: startBlockEndPoint,\n focus: startBlockEndPoint,\n },\n }),\n // ...and insert the rest of the end block at the end of it.\n raise({\n type: 'insert.block',\n block: slicedEndBlock,\n placement: 'auto',\n select: 'none',\n }),\n // And finally, we delete the original text of the start block.\n raise({\n type: 'delete',\n at: {anchor: startBlockStartPoint, focus: startBlockEndPoint},\n }),\n ],\n ],\n})\n\n/**\n * Hitting Enter in an empty list item would create a new list item below by\n * default. Instead, the list properties should be cleared.\n */\nconst clearListOnEnter = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n const focusListBlock = getFocusListBlock(snapshot)\n\n if (\n !selectionCollapsed ||\n !focusListBlock ||\n !isEmptyTextBlock(snapshot.context, focusListBlock.node)\n ) {\n return false\n }\n\n return {focusListBlock}\n },\n actions: [\n (_, {focusListBlock}) => [\n raise({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusListBlock.path,\n }),\n ],\n ],\n})\n\n/**\n * Hitting Tab should indent the list item.\n */\nconst indentListOnTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isTab = defaultKeyboardShortcuts.tab.guard(event.originEvent)\n\n if (!isTab) {\n return false\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedListBlocks = selectedBlocks.flatMap((block) =>\n isListBlock(snapshot.context, block.node)\n ? [\n {\n node: block.node,\n path: block.path,\n },\n ]\n : [],\n )\n\n if (selectedListBlocks.length === selectedBlocks.length) {\n return {selectedListBlocks}\n }\n\n return false\n },\n actions: [\n (_, {selectedListBlocks}) =>\n selectedListBlocks.map((selectedListBlock) =>\n raise({\n type: 'block.set',\n props: {\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level + 1),\n ),\n },\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\n/**\n * Hitting Shift+Tab should unindent the list item.\n */\nconst unindentListOnShiftTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isShiftTab = defaultKeyboardShortcuts.shiftTab.guard(\n event.originEvent,\n )\n\n if (!isShiftTab) {\n return false\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedListBlocks = selectedBlocks.flatMap((block) =>\n isListBlock(snapshot.context, block.node)\n ? [\n {\n node: block.node,\n path: block.path,\n },\n ]\n : [],\n )\n\n if (selectedListBlocks.length === selectedBlocks.length) {\n return {selectedListBlocks}\n }\n\n return false\n },\n actions: [\n (_, {selectedListBlocks}) =>\n selectedListBlocks.map((selectedListBlock) =>\n raise({\n type: 'block.set',\n props: {\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level - 1),\n ),\n },\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\n/**\n * An inserted list inherits the `level` from the list item where it's\n * inserted. The entire list tree is adjusted to match the new level.\n */\nconst inheritListLevel = defineBehavior({\n on: 'insert.blocks',\n guard: ({snapshot, event}) => {\n const focusListBlock = getFocusListBlock(snapshot)\n\n if (!focusListBlock) {\n return false\n }\n\n const firstInsertedBlock = event.blocks.at(0)\n const secondInsertedBlock = event.blocks.at(1)\n const insertedListBlock = isListBlock(snapshot.context, firstInsertedBlock)\n ? firstInsertedBlock\n : isListBlock(snapshot.context, secondInsertedBlock)\n ? secondInsertedBlock\n : undefined\n\n if (!insertedListBlock) {\n return false\n }\n\n const levelDifference = focusListBlock.node.level - insertedListBlock.level\n\n if (levelDifference === 0) {\n return false\n }\n\n return {levelDifference, insertedListBlock}\n },\n actions: [\n ({snapshot, event}, {levelDifference, insertedListBlock}) => {\n let adjustLevel = true\n let listStartBlockFound = false\n\n return [\n raise({\n ...event,\n blocks: event.blocks.map((block) => {\n if (block._key === insertedListBlock._key) {\n listStartBlockFound = true\n }\n\n if (!adjustLevel) {\n return block\n }\n\n if (\n listStartBlockFound &&\n adjustLevel &&\n isListBlock(snapshot.context, block)\n ) {\n return {\n ...block,\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, block.level + levelDifference),\n ),\n }\n }\n\n if (listStartBlockFound) {\n adjustLevel = false\n }\n\n return block\n }),\n }),\n ]\n },\n ],\n})\n\n/**\n * An inserted list inherits the `listItem` from the list item at the level\n * it's inserted.\n */\nconst inheritListItem = defineBehavior({\n on: 'insert.blocks',\n guard: ({snapshot, event}) => {\n const focusListBlock = getFocusListBlock(snapshot)\n\n if (!focusListBlock) {\n return false\n }\n\n if (isEmptyTextBlock(snapshot.context, focusListBlock.node)) {\n return false\n }\n\n const firstInsertedBlock = event.blocks.at(0)\n const secondInsertedBlock = event.blocks.at(1)\n const insertedListBlock = isListBlock(snapshot.context, firstInsertedBlock)\n ? firstInsertedBlock\n : isListBlock(snapshot.context, secondInsertedBlock)\n ? secondInsertedBlock\n : undefined\n\n if (!insertedListBlock) {\n return false\n }\n\n if (focusListBlock.node.level !== insertedListBlock.level) {\n return false\n }\n\n if (focusListBlock.node.listItem === insertedListBlock.listItem) {\n return false\n }\n\n return {listItem: focusListBlock.node.listItem, insertedListBlock}\n },\n actions: [\n ({snapshot, event}, {listItem, insertedListBlock}) => {\n let adjustListItem = true\n let listStartBlockFound = false\n\n return [\n raise({\n ...event,\n blocks: event.blocks.map((block) => {\n if (block._key === insertedListBlock._key) {\n listStartBlockFound = true\n }\n\n if (!adjustListItem) {\n return block\n }\n\n if (\n listStartBlockFound &&\n adjustListItem &&\n isListBlock(snapshot.context, block)\n ) {\n return {\n ...block,\n listItem:\n block.level === insertedListBlock.level\n ? listItem\n : block.listItem,\n }\n }\n\n if (listStartBlockFound) {\n adjustListItem = false\n }\n\n return block\n }),\n }),\n ]\n },\n ],\n})\n\n/**\n * An inserted text block inherits the `listItem` and `level` from the list\n * item where it's inserted.\n */\nconst inheritListProperties = defineBehavior({\n on: 'insert.block',\n guard: ({snapshot, event}) => {\n if (event.placement !== 'auto') {\n return false\n }\n\n if (event.block._type !== snapshot.context.schema.block.name) {\n return false\n }\n\n if (event.block.listItem !== undefined) {\n return false\n }\n\n const focusListBlock = getFocusListBlock(snapshot)\n\n if (!focusListBlock) {\n return false\n }\n\n if (!isEmptyTextBlock(snapshot.context, focusListBlock.node)) {\n return false\n }\n\n return {\n level: focusListBlock.node.level,\n listItem: focusListBlock.node.listItem,\n }\n },\n actions: [\n ({event}, {level, listItem}) => [\n raise({\n ...event,\n block: {\n ...event.block,\n level,\n listItem,\n },\n }),\n ],\n ],\n})\n\nexport const coreListBehaviors = {\n clearListOnBackspace,\n unindentListOnBackspace,\n mergeTextIntoListOnDelete,\n mergeTextIntoListOnBackspace,\n deletingListFromStart,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n inheritListLevel,\n inheritListItem,\n inheritListProperties,\n}\n","import {corePriority} from '../priority/priority.core'\nimport {coreAnnotationBehaviors} from './behavior.core.annotations'\nimport {coreBlockObjectBehaviors} from './behavior.core.block-objects'\nimport {coreDecoratorBehaviors} from './behavior.core.decorators'\nimport {coreDndBehaviors} from './behavior.core.dnd'\nimport {coreInsertBehaviors} from './behavior.core.insert'\nimport {coreInsertBreakBehaviors} from './behavior.core.insert-break'\nimport {coreListBehaviors} from './behavior.core.lists'\n\nexport const coreBehaviorsConfig = [\n ...coreAnnotationBehaviors,\n coreDecoratorBehaviors.strongShortcut,\n coreDecoratorBehaviors.emShortcut,\n coreDecoratorBehaviors.underlineShortcut,\n coreDecoratorBehaviors.codeShortcut,\n ...coreDndBehaviors,\n coreBlockObjectBehaviors.clickingAboveLonelyBlockObject,\n coreBlockObjectBehaviors.clickingBelowLonelyBlockObject,\n coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject,\n coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject,\n coreBlockObjectBehaviors.breakingBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject,\n ...coreInsertBehaviors,\n coreListBehaviors.clearListOnBackspace,\n coreListBehaviors.unindentListOnBackspace,\n coreListBehaviors.mergeTextIntoListOnDelete,\n coreListBehaviors.mergeTextIntoListOnBackspace,\n coreListBehaviors.deletingListFromStart,\n coreListBehaviors.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreListBehaviors.inheritListLevel,\n coreListBehaviors.inheritListItem,\n coreListBehaviors.inheritListProperties,\n coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock,\n coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock,\n coreInsertBreakBehaviors.breakingEntireDocument,\n coreInsertBreakBehaviors.breakingEntireBlocks,\n coreInsertBreakBehaviors.breakingInlineObject,\n].map((behavior) => ({\n behavior,\n priority: corePriority,\n}))\n","import {Editor} from 'slate'\n\nexport function withoutNormalizingConditional(\n editor: Editor,\n predicate: () => boolean,\n fn: () => void,\n) {\n if (predicate()) {\n Editor.withoutNormalizing(editor, fn)\n } else {\n fn()\n }\n}\n","import {getFocusTextBlock} from '../selectors/selector.get-focus-text-block'\nimport {isActiveAnnotation} from '../selectors/selector.is-active-annotation'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractAnnotationBehaviors = [\n defineBehavior({\n on: 'annotation.set',\n guard: ({snapshot, event}) => {\n const blockKey = event.at[0]._key\n const markDefKey = event.at[2]._key\n\n const block = getFocusTextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: {\n path: [{_key: blockKey}],\n offset: 0,\n },\n focus: {\n path: [{_key: blockKey}],\n offset: 0,\n },\n },\n },\n })\n\n if (!block) {\n return false\n }\n\n const updatedMarkDefs = block.node.markDefs?.map((markDef) => {\n if (markDef._key === markDefKey) {\n return {\n ...markDef,\n ...event.props,\n }\n }\n\n return markDef\n })\n\n return {blockKey, updatedMarkDefs}\n },\n actions: [\n (_, {blockKey, updatedMarkDefs}) => [\n raise({\n type: 'block.set',\n at: [{_key: blockKey}],\n props: {markDefs: updatedMarkDefs},\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'annotation.toggle',\n guard: ({snapshot, event}) =>\n isActiveAnnotation(event.annotation.name)(snapshot),\n actions: [\n ({event}) => [\n raise({type: 'annotation.remove', annotation: event.annotation}),\n ],\n ],\n }),\n defineBehavior({\n on: 'annotation.toggle',\n guard: ({snapshot, event}) =>\n !isActiveAnnotation(event.annotation.name)(snapshot),\n actions: [\n ({event}) => [\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n }),\n]\n","import {isActiveDecorator} from '../selectors/selector.is-active-decorator'\nimport {blockOffsetsToSelection} from '../utils/util.block-offsets-to-selection'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractDecoratorBehaviors = [\n defineBehavior({\n on: 'decorator.toggle',\n guard: ({snapshot, event}) => isActiveDecorator(event.decorator)(snapshot),\n actions: [\n ({event}) => [\n raise({type: 'decorator.remove', decorator: event.decorator}),\n ],\n ],\n }),\n defineBehavior({\n on: 'decorator.toggle',\n guard: ({snapshot, event}) => {\n const manualSelection = event.at\n ? blockOffsetsToSelection({\n context: snapshot.context,\n offsets: event.at,\n })\n : null\n\n if (manualSelection) {\n return !isActiveDecorator(event.decorator)({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: manualSelection,\n },\n })\n }\n\n return !isActiveDecorator(event.decorator)(snapshot)\n },\n actions: [\n ({event}) => [\n raise({\n ...event,\n type: 'decorator.add',\n }),\n ],\n ],\n }),\n]\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport {getFocusChild} from '../selectors/selector.get-focus-child'\nimport {getFocusTextBlock} from '../selectors/selector.get-focus-text-block'\nimport {getNextBlock} from '../selectors/selector.get-next-block'\nimport {getPreviousBlock} from '../selectors/selector.get-previous-block'\nimport {getTrimmedSelection} from '../selectors/selector.get-trimmed-selection'\nimport {isAtTheEndOfBlock} from '../selectors/selector.is-at-the-end-of-block'\nimport {isAtTheStartOfBlock} from '../selectors/selector.is-at-the-start-of-block'\nimport {blockOffsetsToSelection} from '../utils/util.block-offsets-to-selection'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getBlockStartPoint} from '../utils/util.get-block-start-point'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractDeleteBehaviors = [\n defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n return snapshot.context.selection\n },\n actions: [\n ({event}) => [\n raise({\n type: 'delete',\n direction: 'backward',\n unit: event.unit,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'delete',\n guard: ({snapshot, event}) => {\n if (event.direction !== 'backward') {\n return false\n }\n\n const previousBlock = getPreviousBlock(snapshot)\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n if (!previousBlock || !focusTextBlock) {\n return false\n }\n\n if (!isAtTheStartOfBlock(focusTextBlock)(snapshot)) {\n return false\n }\n\n const previousBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: previousBlock,\n })\n\n if (!isTextBlock(snapshot.context, previousBlock.node)) {\n return false\n }\n\n return {previousBlockEndPoint, focusTextBlock}\n },\n actions: [\n (_, {previousBlockEndPoint, focusTextBlock}) => [\n raise({\n type: 'delete.block',\n at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n at: {\n anchor: previousBlockEndPoint,\n focus: previousBlockEndPoint,\n },\n }),\n raise({\n type: 'insert.block',\n block: focusTextBlock.node,\n placement: 'auto',\n select: 'start',\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'delete.forward',\n guard: ({snapshot}) => {\n return snapshot.context.selection\n },\n actions: [\n ({event}) => [\n raise({\n type: 'delete',\n direction: 'forward',\n unit: event.unit,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'delete',\n guard: ({snapshot, event}) => {\n if (event.direction !== 'forward') {\n return false\n }\n\n const at = event.at ?? snapshot.context.selection\n\n if (!at) {\n return false\n }\n\n const nextBlock = getNextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: at,\n },\n })\n const focusTextBlock = getFocusTextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: at,\n },\n })\n\n if (!nextBlock || !focusTextBlock) {\n return false\n }\n\n if (!isEmptyTextBlock(snapshot.context, focusTextBlock.node)) {\n return false\n }\n\n const nextBlockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: nextBlock,\n })\n\n return {focusTextBlock, nextBlockStartPoint}\n },\n actions: [\n (_, {focusTextBlock, nextBlockStartPoint}) => [\n raise({\n type: 'delete.block',\n at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n at: {\n anchor: nextBlockStartPoint,\n focus: nextBlockStartPoint,\n },\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'delete',\n guard: ({snapshot, event}) => {\n if (event.direction !== 'forward') {\n return false\n }\n\n const nextBlock = getNextBlock(snapshot)\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n if (!nextBlock || !focusTextBlock) {\n return false\n }\n\n if (!isAtTheEndOfBlock(focusTextBlock)(snapshot)) {\n return false\n }\n\n if (!isTextBlock(snapshot.context, nextBlock.node)) {\n return false\n }\n\n return {nextBlock}\n },\n actions: [\n (_, {nextBlock}) => [\n raise({\n type: 'delete.block',\n at: nextBlock.path,\n }),\n raise({\n type: 'insert.block',\n block: nextBlock.node,\n placement: 'auto',\n select: 'none',\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'delete.block',\n actions: [\n ({event}) => [\n raise({\n type: 'delete',\n at: {\n anchor: {\n path: event.at,\n offset: 0,\n },\n focus: {\n path: event.at,\n offset: 0,\n },\n },\n unit: 'block',\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'delete.child',\n guard: ({snapshot, event}) => {\n const focusChild = getFocusChild({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: {\n path: event.at,\n offset: 0,\n },\n focus: {\n path: event.at,\n offset: 0,\n },\n },\n },\n })\n\n if (!focusChild) {\n return false\n }\n\n if (isSpan(snapshot.context, focusChild.node)) {\n return {\n selection: {\n anchor: {\n path: event.at,\n offset: 0,\n },\n focus: {\n path: event.at,\n offset: focusChild.node.text.length,\n },\n },\n }\n }\n\n return {\n selection: {\n anchor: {\n path: event.at,\n offset: 0,\n },\n focus: {\n path: event.at,\n offset: 0,\n },\n },\n }\n },\n actions: [(_, {selection}) => [raise({type: 'delete', at: selection})]],\n }),\n defineBehavior({\n on: 'delete.text',\n guard: ({snapshot, event}) => {\n const selection = blockOffsetsToSelection({\n context: snapshot.context,\n offsets: event.at,\n })\n\n if (!selection) {\n return false\n }\n\n const trimmedSelection = getTrimmedSelection({\n ...snapshot,\n context: {\n ...snapshot.context,\n value: snapshot.context.value,\n selection,\n },\n })\n\n if (!trimmedSelection) {\n return false\n }\n\n return {\n selection: trimmedSelection,\n }\n },\n actions: [(_, {selection}) => [raise({type: 'delete', at: selection})]],\n }),\n]\n","import {isTextBlock} from '@portabletext/schema'\nimport {getActiveAnnotations} from '../selectors/selector.get-active-annotations'\nimport {getActiveDecorators} from '../selectors/selector.get-active-decorators'\nimport {getFocusTextBlock} from '../selectors/selector.get-focus-text-block'\nimport {getTextBlockText} from '../utils/util.get-text-block-text'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractDeserializeBehaviors = [\n defineBehavior({\n on: 'deserialize',\n guard: ({event}) => {\n const portableText = event.originEvent.originEvent.dataTransfer.getData(\n 'application/x-portable-text',\n )\n\n if (portableText) {\n return {\n type: 'deserialize.data',\n mimeType: 'application/x-portable-text',\n data: portableText,\n originEvent: event.originEvent,\n } as const\n }\n\n const json =\n event.originEvent.originEvent.dataTransfer.getData('application/json')\n\n if (json) {\n return {\n type: 'deserialize.data',\n mimeType: 'application/json',\n data: json,\n originEvent: event.originEvent,\n } as const\n }\n\n const html =\n event.originEvent.originEvent.dataTransfer.getData('text/html')\n\n if (html) {\n return {\n type: 'deserialize.data',\n mimeType: 'text/html',\n data: html,\n originEvent: event.originEvent,\n } as const\n }\n\n const text =\n event.originEvent.originEvent.dataTransfer.getData('text/plain')\n\n if (text) {\n return {\n type: 'deserialize.data',\n mimeType: 'text/plain',\n data: text,\n originEvent: event.originEvent,\n } as const\n }\n\n return false\n },\n actions: [(_, deserializeEvent) => [raise(deserializeEvent)]],\n }),\n defineBehavior({\n on: 'deserialize',\n actions: [\n ({event}) => [\n raise({\n type: 'deserialization.failure',\n mimeType: '*/*',\n reason: 'No Behavior was able to handle the incoming data',\n originEvent: event.originEvent,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'deserialize.data',\n guard: ({snapshot, event}) => {\n const converter = snapshot.context.converters.find(\n (converter) => converter.mimeType === event.mimeType,\n )\n\n if (!converter) {\n return false\n }\n\n return converter.deserialize({\n snapshot,\n event: {\n type: 'deserialize',\n data: event.data,\n },\n })\n },\n actions: [\n ({event}, deserializeEvent) => [\n raise({\n ...deserializeEvent,\n originEvent: event.originEvent,\n }),\n ],\n ],\n }),\n /**\n * If we are pasting text/plain into a text block then we can probably\n * assume that the intended behavior is that the pasted text inherits\n * formatting from the text it's pasted into.\n */\n defineBehavior({\n on: 'deserialization.success',\n guard: ({snapshot, event}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n if (\n focusTextBlock &&\n event.mimeType === 'text/plain' &&\n event.originEvent.type === 'clipboard.paste'\n ) {\n const activeDecorators = getActiveDecorators(snapshot)\n const activeAnnotations = getActiveAnnotations(snapshot)\n\n return {\n activeAnnotations,\n activeDecorators,\n textRuns: event.data.flatMap((block) =>\n isTextBlock(snapshot.context, block)\n ? [getTextBlockText(block)]\n : [],\n ),\n }\n }\n\n return false\n },\n actions: [\n (_, {activeAnnotations, activeDecorators, textRuns}) =>\n textRuns.flatMap((textRun, index) =>\n index !== textRuns.length - 1\n ? [\n raise({\n type: 'insert.span',\n text: textRun,\n decorators: activeDecorators,\n annotations: activeAnnotations.map(\n ({_key, _type, ...value}) => ({\n name: _type,\n value,\n }),\n ),\n }),\n raise({type: 'insert.break'}),\n ]\n : [\n raise({\n type: 'insert.span',\n text: textRun,\n decorators: activeDecorators,\n annotations: activeAnnotations.map(\n ({_key, _type, ...value}) => ({\n name: _type,\n value,\n }),\n ),\n }),\n ],\n ),\n ],\n }),\n defineBehavior({\n on: 'deserialization.success',\n actions: [\n ({event}) => [\n raise({\n type: 'insert.blocks',\n blocks: event.data,\n placement: 'auto',\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'deserialization.failure',\n guard: ({event}) => {\n if (event.mimeType === 'application/x-portable-text') {\n const json =\n event.originEvent.originEvent.dataTransfer.getData('application/json')\n\n if (json) {\n return {\n type: 'deserialize.data',\n mimeType: 'application/json',\n data: json,\n originEvent: event.originEvent,\n } as const\n }\n }\n\n if (event.mimeType === 'application/json') {\n const html =\n event.originEvent.originEvent.dataTransfer.getData('text/html')\n\n if (html) {\n return {\n type: 'deserialize.data',\n mimeType: 'text/html',\n data: html,\n originEvent: event.originEvent,\n } as const\n }\n }\n\n if (event.mimeType === 'text/html') {\n const text =\n event.originEvent.originEvent.dataTransfer.getData('text/plain')\n\n if (text) {\n return {\n type: 'deserialize.data',\n mimeType: 'text/plain',\n data: text,\n originEvent: event.originEvent,\n } as const\n }\n }\n\n return false\n },\n actions: [(_, deserializeDataEvent) => [raise(deserializeDataEvent)]],\n }),\n defineBehavior({\n on: 'deserialization.failure',\n actions: [\n ({event}) => [\n {\n type: 'effect',\n effect: () => {\n console.warn(\n `Deserialization of ${event.mimeType} failed with reason \"${event.reason}\"`,\n )\n },\n },\n ],\n ],\n }),\n]\n","import {isSelectionExpanded} from '../selectors'\nimport {getFocusTextBlock} from '../selectors/selector.get-focus-text-block'\nimport {getLastBlock} from '../selectors/selector.get-last-block'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getBlockStartPoint} from '../utils/util.get-block-start-point'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {isEqualSelectionPoints} from '../utils/util.is-equal-selection-points'\nimport {sliceTextBlock} from '../utils/util.slice-text-block'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractInsertBehaviors = [\n defineBehavior({\n on: 'insert.blocks',\n guard: ({event}) => {\n const onlyBlock =\n event.blocks.length === 1 ? event.blocks.at(0) : undefined\n\n if (!onlyBlock) {\n return false\n }\n\n return {onlyBlock}\n },\n actions: [\n ({event}, {onlyBlock}) => [\n raise({\n type: 'insert.block',\n block: onlyBlock,\n placement: event.placement,\n select: event.select ?? 'end',\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.blocks',\n guard: ({snapshot, event}) => {\n if (event.placement !== 'before') {\n return false\n }\n\n const firstBlockKey =\n event.blocks.at(0)?._key ?? snapshot.context.keyGenerator()\n const lastBlockKey =\n event.blocks.at(-1)?._key ?? snapshot.context.keyGenerator()\n\n return {firstBlockKey, lastBlockKey}\n },\n actions: [\n ({snapshot, event}, {firstBlockKey, lastBlockKey}) => [\n ...event.blocks.map((block, index) =>\n raise({\n type: 'insert.block',\n block,\n placement: index === 0 ? 'before' : 'after',\n select: index !== event.blocks.length - 1 ? 'end' : 'none',\n }),\n ),\n ...(event.select === 'none'\n ? [\n raise({\n type: 'select',\n at: snapshot.context.selection,\n }),\n ]\n : event.select === 'start'\n ? [\n raise({\n type: 'select.block',\n at: [{_key: firstBlockKey}],\n select: 'start',\n }),\n ]\n : [\n raise({\n type: 'select.block',\n at: [{_key: lastBlockKey}],\n select: 'end',\n }),\n ]),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.blocks',\n guard: ({snapshot, event}) => {\n if (event.placement !== 'after') {\n return false\n }\n\n const firstBlockKey =\n event.blocks.at(0)?._key ?? snapshot.context.keyGenerator()\n const lastBlockKey =\n event.blocks.at(-1)?._key ?? snapshot.context.keyGenerator()\n\n return {firstBlockKey, lastBlockKey}\n },\n actions: [\n ({snapshot, event}, {firstBlockKey, lastBlockKey}) => [\n ...event.blocks.map((block, index) =>\n raise({\n type: 'insert.block',\n block,\n placement: 'after',\n select: index !== event.blocks.length - 1 ? 'end' : 'none',\n }),\n ),\n ...(event.select === 'none'\n ? [\n raise({\n type: 'select',\n at: snapshot.context.selection,\n }),\n ]\n : event.select === 'start'\n ? [\n raise({\n type: 'select.block',\n at: [{_key: firstBlockKey}],\n select: 'start',\n }),\n ]\n : [\n raise({\n type: 'select.block',\n at: [{_key: lastBlockKey}],\n select: 'end',\n }),\n ]),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.blocks',\n guard: ({snapshot, event}) => {\n if (event.placement !== 'auto') {\n return false\n }\n\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n if (!focusTextBlock) {\n return false\n }\n\n if (!isEmptyTextBlock(snapshot.context, focusTextBlock.node)) {\n return false\n }\n\n const firstBlockKey =\n event.blocks.at(0)?._key ?? snapshot.context.keyGenerator()\n const lastBlockKey =\n event.blocks.at(-1)?._key ?? snapshot.context.keyGenerator()\n\n return {focusTextBlock, firstBlockKey, lastBlockKey}\n },\n actions: [\n ({event}, {firstBlockKey, lastBlockKey}) => [\n ...event.blocks.map((block, index) =>\n raise({\n type: 'insert.block',\n block,\n placement: index === 0 ? 'auto' : 'after',\n select: index !== event.blocks.length - 1 ? 'end' : 'none',\n }),\n ),\n ...(event.select === 'none' || event.select === 'start'\n ? [\n raise({\n type: 'select.block',\n at: [{_key: firstBlockKey}],\n select: 'start',\n }),\n ]\n : [\n raise({\n type: 'select.block',\n at: [{_key: lastBlockKey}],\n select: 'end',\n }),\n ]),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.blocks',\n guard: ({snapshot, event}) => {\n if (event.placement !== 'auto') {\n return false\n }\n\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n if (!focusTextBlock || !snapshot.context.selection) {\n return false\n }\n\n const focusBlockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const focusBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const focusTextBlockAfter = sliceTextBlock({\n context: {\n schema: snapshot.context.schema,\n selection: {\n anchor: snapshot.context.selection.focus,\n focus: focusBlockEndPoint,\n },\n },\n block: focusTextBlock.node,\n })\n const firstBlockKey =\n event.blocks.at(0)?._key ?? snapshot.context.keyGenerator()\n\n return {\n firstBlockKey,\n focusBlockStartPoint,\n focusBlockEndPoint,\n focusTextBlockAfter,\n selection: snapshot.context.selection,\n }\n },\n actions: [\n (\n {event},\n {\n focusBlockEndPoint,\n focusTextBlockAfter,\n selection,\n firstBlockKey,\n focusBlockStartPoint,\n },\n ) => [\n ...event.blocks.flatMap((block, index) =>\n index === 0\n ? [\n ...(isEqualSelectionPoints(selection.focus, focusBlockEndPoint)\n ? []\n : [\n raise({\n type: 'delete',\n at: {\n anchor: selection.focus,\n focus: focusBlockEndPoint,\n },\n }),\n ]),\n raise({\n type: 'insert.block',\n block,\n placement: 'auto',\n select: 'end',\n }),\n ]\n : index === event.blocks.length - 1\n ? [\n raise({\n type: 'insert.block',\n block,\n placement: 'after',\n select: 'end',\n }),\n raise({\n type: 'insert.block',\n block: focusTextBlockAfter,\n placement: 'auto',\n select: event.select === 'end' ? 'none' : 'end',\n }),\n ]\n : [\n raise({\n type: 'insert.block',\n block,\n placement: 'after',\n select: 'end',\n }),\n ],\n ),\n ...(event.select === 'none'\n ? [\n raise({\n type: 'select',\n at: selection,\n }),\n ]\n : event.select === 'start'\n ? [\n isEqualSelectionPoints(selection.focus, focusBlockStartPoint)\n ? raise({\n type: 'select.block',\n at: [{_key: firstBlockKey}],\n select: 'start',\n })\n : raise({\n type: 'select',\n at: {\n anchor: selection.focus,\n focus: selection.focus,\n },\n }),\n ]\n : []),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.blocks',\n guard: ({event}) => event.placement === 'auto',\n actions: [\n ({event}) =>\n event.blocks.map((block, index) =>\n raise({\n type: 'insert.block',\n block,\n placement: index === 0 ? 'auto' : 'after',\n select: event.select ?? 'end',\n }),\n ),\n ],\n }),\n defineBehavior({\n on: 'insert.break',\n actions: [() => [raise({type: 'split'})]],\n }),\n defineBehavior({\n on: 'insert.child',\n guard: ({snapshot}) => {\n const lastBlock = getLastBlock(snapshot)\n\n if (!lastBlock) {\n return false\n }\n\n if (snapshot.context.selection) {\n return false\n }\n\n const lastBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: lastBlock,\n })\n\n return {lastBlockEndPoint}\n },\n actions: [\n ({event}, {lastBlockEndPoint}) => [\n raise({\n type: 'select',\n at: {\n anchor: lastBlockEndPoint,\n focus: lastBlockEndPoint,\n },\n }),\n raise(event),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.child',\n guard: ({snapshot}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n return snapshot.context.selection && !focusTextBlock\n },\n actions: [\n ({snapshot, event}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: [\n {\n _type: snapshot.context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n },\n placement: 'auto',\n select: 'end',\n }),\n raise(event),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.inline object',\n actions: [\n ({event}) => [\n raise({\n type: 'insert.child',\n child: {\n _type: event.inlineObject.name,\n ...event.inlineObject.value,\n },\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.soft break',\n actions: [() => [raise({type: 'insert.text', text: '\\n'})]],\n }),\n defineBehavior({\n on: 'insert.span',\n guard: ({snapshot}) => !getFocusTextBlock(snapshot),\n actions: [\n ({snapshot, event}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: [\n {\n _type: snapshot.context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n },\n placement: 'auto',\n select: 'end',\n }),\n raise(event),\n ],\n ],\n }),\n defineBehavior({\n on: 'insert.span',\n guard: ({snapshot, event}) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const markDefs =\n event.annotations?.map((annotation) => ({\n _type: annotation.name,\n _key: snapshot.context.keyGenerator(),\n ...annotation.value,\n })) ?? []\n\n return {markDefs, focusTextBlock}\n },\n actions: [\n ({snapshot, event}, {markDefs, focusTextBlock}) => [\n ...(focusTextBlock\n ? [\n raise({\n type: 'block.set',\n at: focusTextBlock.path,\n props: {\n markDefs: [\n ...(focusTextBlock.node.markDefs ?? []),\n ...markDefs,\n ],\n },\n }),\n ]\n : []),\n raise({\n type: 'insert.child',\n child: {\n _type: snapshot.context.schema.span.name,\n text: event.text,\n marks: [\n ...(event.decorators ?? []),\n ...markDefs.map((markDef) => markDef._key),\n ],\n },\n }),\n ],\n ],\n }),\n\n /**\n * If there's an expanded selection, then we delete the selection before we\n * insert the text.\n */\n defineBehavior({\n on: 'insert.text',\n guard: ({snapshot}) => {\n return isSelectionExpanded(snapshot)\n },\n actions: [({event}) => [raise({type: 'delete'}), raise(event)]],\n }),\n\n /**\n * If there's no selection, then we select the end of the editor before we\n * we insert the text.\n */\n defineBehavior({\n on: 'insert.text',\n guard: ({snapshot}) => {\n if (snapshot.context.selection) {\n return false\n }\n\n const lastBlok = getLastBlock(snapshot)\n\n if (!lastBlok) {\n return false\n }\n\n const endPoint = getBlockEndPoint({\n context: snapshot.context,\n block: lastBlok,\n })\n return {endPoint}\n },\n actions: [\n ({event}, {endPoint}) => [\n raise({\n type: 'select',\n at: {\n anchor: endPoint,\n focus: endPoint,\n },\n }),\n raise(event),\n ],\n ],\n }),\n]\n","import {createKeyboardShortcut} from '@portabletext/keyboard-shortcuts'\nimport {isTextBlock} from '@portabletext/schema'\nimport {defaultKeyboardShortcuts} from '../keyboard-shortcuts/default-keyboard-shortcuts'\nimport {getFocusBlock} from '../selectors/selector.get-focus-block'\nimport {getFocusInlineObject} from '../selectors/selector.get-focus-inline-object'\nimport {getPreviousBlock} from '../selectors/selector.get-previous-block'\nimport {isSelectionCollapsed} from '../selectors/selector.is-selection-collapsed'\nimport {isSelectionExpanded} from '../selectors/selector.is-selection-expanded'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nconst shiftLeft = createKeyboardShortcut({\n default: [\n {\n key: 'ArrowLeft',\n shift: true,\n meta: false,\n ctrl: false,\n alt: false,\n },\n ],\n})\n\nexport const abstractKeyboardBehaviors = [\n /**\n * When Backspace is pressed on an inline object, Slate will raise a\n * `delete.backward` event with `unit: 'block'`. This is wrong and this\n * Behavior adjusts that.\n */\n defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n defaultKeyboardShortcuts.backspace.guard(event.originEvent) &&\n isSelectionCollapsed(snapshot) &&\n getFocusInlineObject(snapshot),\n actions: [() => [raise({type: 'delete.backward', unit: 'character'})]],\n }),\n /**\n * When Delete is pressed on an inline object, Slate will raise a\n * `delete.forward` event with `unit: 'block'`. This is wrong and this\n * Behavior adjusts that.\n */\n defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n defaultKeyboardShortcuts.delete.guard(event.originEvent) &&\n isSelectionCollapsed(snapshot) &&\n getFocusInlineObject(snapshot),\n actions: [() => [raise({type: 'delete.forward', unit: 'character'})]],\n }),\n\n /**\n * Allow raising an `insert.break` event when pressing Enter on an inline\n * object.\n */\n defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n defaultKeyboardShortcuts.break.guard(event.originEvent) &&\n isSelectionCollapsed(snapshot) &&\n getFocusInlineObject(snapshot),\n actions: [() => [raise({type: 'insert.break'})]],\n }),\n\n /**\n * On Firefox, Enter might collapse the selection. To mitigate this, we\n * `raise` an `insert.break` event manually.\n */\n defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n defaultKeyboardShortcuts.break.guard(event.originEvent) &&\n isSelectionExpanded(snapshot),\n actions: [() => [raise({type: 'insert.break'})]],\n }),\n\n /**\n * On WebKit, Shift+Enter results in an `insertParagraph` input event rather\n * than an `insertLineBreak` input event. This Behavior makes sure we catch\n * that `keyboard.keydown` event beforehand and raise an `insert.soft break` manually.\n */\n defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) =>\n defaultKeyboardShortcuts.lineBreak.guard(event.originEvent),\n actions: [() => [raise({type: 'insert.soft break'})]],\n }),\n\n /**\n * Manual handling of undo shortcuts.\n */\n defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) =>\n defaultKeyboardShortcuts.history.undo.guard(event.originEvent),\n actions: [() => [raise({type: 'history.undo'})]],\n }),\n\n /**\n * Manual handling of redo shortcuts.\n */\n defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) =>\n defaultKeyboardShortcuts.history.redo.guard(event.originEvent),\n actions: [() => [raise({type: 'history.redo'})]],\n }),\n\n /**\n * Fix edge case where Shift+ArrowLeft didn't reduce a selection hanging\n * onto an empty text block.\n */\n defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n if (!snapshot.context.selection || !shiftLeft.guard(event.originEvent)) {\n return false\n }\n\n const focusBlock = getFocusBlock(snapshot)\n\n if (!focusBlock) {\n return false\n }\n\n const previousBlock = getPreviousBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 0,\n },\n },\n },\n })\n\n if (!previousBlock) {\n return false\n }\n\n const hanging =\n isTextBlock(snapshot.context, focusBlock.node) &&\n snapshot.context.selection.focus.offset === 0\n\n if (hanging && isEmptyTextBlock(snapshot.context, focusBlock.node)) {\n return {previousBlock, selection: snapshot.context.selection}\n }\n\n return false\n },\n actions: [\n ({snapshot}, {previousBlock, selection}) => [\n raise({\n type: 'select',\n at: {\n anchor: selection.anchor,\n focus: getBlockEndPoint({\n context: snapshot.context,\n block: previousBlock,\n }),\n },\n }),\n ],\n ],\n }),\n]\n","import {getSelectedTextBlocks} from '../selectors/selector.get-selected-text-blocks'\nimport {isActiveListItem} from '../selectors/selector.is-active-list-item'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractListItemBehaviors = [\n defineBehavior({\n on: 'list item.add',\n guard: ({snapshot, event}) => {\n if (\n !snapshot.context.schema.lists.some(\n (list) => list.name === event.listItem,\n )\n ) {\n return false\n }\n\n const selectedTextBlocks = getSelectedTextBlocks(snapshot)\n\n return {selectedTextBlocks}\n },\n actions: [\n ({event}, {selectedTextBlocks}) =>\n selectedTextBlocks.map((block) =>\n raise({\n type: 'block.set',\n at: block.path,\n props: {\n level: block.node.level ?? 1,\n listItem: event.listItem,\n },\n }),\n ),\n ],\n }),\n defineBehavior({\n on: 'list item.remove',\n guard: ({snapshot}) => {\n const selectedTextBlocks = getSelectedTextBlocks(snapshot)\n\n return {selectedTextBlocks}\n },\n actions: [\n (_, {selectedTextBlocks}) =>\n selectedTextBlocks.map((block) =>\n raise({\n type: 'block.unset',\n at: block.path,\n props: ['level', 'listItem'],\n }),\n ),\n ],\n }),\n defineBehavior({\n on: 'list item.toggle',\n guard: ({snapshot, event}) => isActiveListItem(event.listItem)(snapshot),\n actions: [\n ({event}) => [\n raise({type: 'list item.remove', listItem: event.listItem}),\n ],\n ],\n }),\n defineBehavior({\n on: 'list item.toggle',\n guard: ({snapshot, event}) => !isActiveListItem(event.listItem)(snapshot),\n actions: [\n ({event}) => [raise({type: 'list item.add', listItem: event.listItem})],\n ],\n }),\n]\n","import {getNextBlock} from '../selectors/selector.get-next-block'\nimport {getPreviousBlock} from '../selectors/selector.get-previous-block'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractMoveBehaviors = [\n defineBehavior({\n on: 'move.block up',\n guard: ({snapshot, event}) => {\n const previousBlock = getPreviousBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: {\n path: event.at,\n offset: 0,\n },\n focus: {\n path: event.at,\n offset: 0,\n },\n },\n },\n })\n\n if (previousBlock) {\n return {previousBlock}\n }\n\n return false\n },\n actions: [\n ({event}, {previousBlock}) => [\n raise({\n type: 'move.block',\n at: event.at,\n to: previousBlock.path,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'move.block down',\n guard: ({snapshot, event}) => {\n const nextBlock = getNextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: {\n path: event.at,\n offset: 0,\n },\n focus: {\n path: event.at,\n offset: 0,\n },\n },\n },\n })\n\n if (nextBlock) {\n return {nextBlock}\n }\n\n return false\n },\n actions: [\n ({event}, {nextBlock}) => [\n raise({\n type: 'move.block',\n at: event.at,\n to: nextBlock.path,\n }),\n ],\n ],\n }),\n]\n","import {getFocusBlock} from '../selectors/selector.get-focus-block'\nimport {getNextBlock} from '../selectors/selector.get-next-block'\nimport {getPreviousBlock} from '../selectors/selector.get-previous-block'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractSelectBehaviors = [\n defineBehavior({\n on: 'select.block',\n guard: ({snapshot, event}) => {\n if (event.select !== 'end') {\n return false\n }\n\n const block = getFocusBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: {\n path: event.at,\n offset: 0,\n },\n focus: {\n path: event.at,\n offset: 0,\n },\n },\n },\n })\n\n if (!block) {\n return false\n }\n\n const blockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block,\n })\n\n return {blockEndPoint}\n },\n actions: [\n (_, {blockEndPoint}) => [\n raise({\n type: 'select',\n at: {\n anchor: blockEndPoint,\n focus: blockEndPoint,\n },\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'select.block',\n actions: [\n ({event}) => [\n raise({\n type: 'select',\n at: {\n anchor: {\n path: event.at,\n offset: 0,\n },\n focus: {\n path: event.at,\n offset: 0,\n },\n },\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'select.previous block',\n guard: ({snapshot}) => {\n const previousBlock = getPreviousBlock(snapshot)\n\n if (!previousBlock) {\n return false\n }\n\n return {previousBlock}\n },\n actions: [\n ({event}, {previousBlock}) => [\n raise({\n type: 'select.block',\n at: previousBlock.path,\n select: event.select,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'select.next block',\n guard: ({snapshot}) => {\n const nextBlock = getNextBlock(snapshot)\n\n if (!nextBlock) {\n return false\n }\n\n return {nextBlock}\n },\n actions: [\n ({event}, {nextBlock}) => [\n raise({\n type: 'select.block',\n at: nextBlock.path,\n select: event.select,\n }),\n ],\n ],\n }),\n]\n","import {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractSerializeBehaviors = [\n defineBehavior({\n on: 'serialize',\n actions: [\n ({event}) => [\n raise({\n type: 'serialize.data',\n mimeType: 'application/x-portable-text',\n originEvent: event.originEvent,\n }),\n raise({\n type: 'serialize.data',\n mimeType: 'application/json',\n originEvent: event.originEvent,\n }),\n raise({\n type: 'serialize.data',\n mimeType: 'text/html',\n originEvent: event.originEvent,\n }),\n raise({\n type: 'serialize.data',\n mimeType: 'text/plain',\n originEvent: event.originEvent,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'serialize.data',\n guard: ({snapshot, event}) => {\n const converter = snapshot.context.converters.find(\n (converter) => converter.mimeType === event.mimeType,\n )\n\n if (!converter) {\n return false\n }\n\n return converter.serialize({\n snapshot,\n event: {\n type: 'serialize',\n originEvent: event.originEvent.type,\n },\n })\n },\n actions: [\n ({event}, serializeEvent) => [\n raise({\n ...serializeEvent,\n originEvent: event.originEvent,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'serialization.success',\n actions: [\n ({event}) => [\n {\n type: 'effect',\n effect: () => {\n event.originEvent.originEvent.dataTransfer.setData(\n event.mimeType,\n event.data,\n )\n },\n },\n ],\n ],\n }),\n defineBehavior({\n on: 'serialization.failure',\n actions: [\n ({event}) => [\n {\n type: 'effect',\n effect: () => {\n console.warn(\n `Serialization of ${event.mimeType} failed with reason \"${event.reason}\"`,\n )\n },\n },\n ],\n ],\n }),\n]\n","import {isTextBlock} from '@portabletext/schema'\nimport {isSelectionExpanded} from '../selectors'\nimport {getFocusBlockObject} from '../selectors/selector.get-focus-block-object'\nimport {getFocusInlineObject} from '../selectors/selector.get-focus-inline-object'\nimport {getFocusTextBlock} from '../selectors/selector.get-focus-text-block'\nimport {getSelectionEndBlock} from '../selectors/selector.get-selection-end-block'\nimport {getSelectionStartBlock} from '../selectors/selector.get-selection-start-block'\nimport {isEqualSelectionPoints} from '../utils'\nimport {parseBlock} from '../utils/parse-blocks'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getBlockStartPoint} from '../utils/util.get-block-start-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {getSelectionStartPoint} from '../utils/util.get-selection-start-point'\nimport {isSelectionCollapsed} from '../utils/util.is-selection-collapsed'\nimport {sliceTextBlock} from '../utils/util.slice-text-block'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractSplitBehaviors = [\n /**\n * You can't split an inline object.\n */\n defineBehavior({\n on: 'split',\n guard: ({snapshot}) =>\n isSelectionCollapsed(snapshot.context.selection) &&\n getFocusInlineObject(snapshot),\n actions: [],\n }),\n\n /**\n * You can't split a block object.\n */\n defineBehavior({\n on: 'split',\n guard: ({snapshot}) =>\n isSelectionCollapsed(snapshot.context.selection) &&\n getFocusBlockObject(snapshot),\n actions: [],\n }),\n\n defineBehavior({\n on: 'split',\n guard: ({snapshot}) => {\n const selection = snapshot.context.selection\n\n if (!selection || isSelectionCollapsed(selection)) {\n return false\n }\n\n const startPoint = getSelectionStartPoint(selection)\n const endPoint = getSelectionEndPoint(selection)\n\n if (!startPoint || !endPoint) {\n return false\n }\n\n const startBlock = getSelectionStartBlock(snapshot)\n const endBlock = getSelectionEndBlock(snapshot)\n\n if (!startBlock || !endBlock) {\n return false\n }\n\n const startBlockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: startBlock,\n })\n const endBlockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: endBlock,\n })\n\n if (\n isTextBlock(snapshot.context, startBlock.node) &&\n isTextBlock(snapshot.context, endBlock.node) &&\n !isEqualSelectionPoints(startPoint, startBlockStartPoint) &&\n !isEqualSelectionPoints(endPoint, endBlockEndPoint)\n ) {\n return true\n }\n\n return false\n },\n actions: [() => [raise({type: 'delete'}), raise({type: 'split'})]],\n }),\n\n defineBehavior({\n on: 'split',\n guard: ({snapshot}) => {\n return isSelectionExpanded(snapshot)\n },\n actions: [() => [raise({type: 'delete'})]],\n }),\n\n defineBehavior({\n on: 'split',\n guard: ({snapshot}) => {\n const selection = snapshot.context.selection\n\n if (!selection || !isSelectionCollapsed(selection)) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint(selection)\n\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n if (!focusTextBlock) {\n return false\n }\n\n const blockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n\n const newTextBlockSelection = {\n anchor: selectionStartPoint,\n focus: blockEndPoint,\n }\n\n const newTextBlock = parseBlock({\n block: sliceTextBlock({\n context: {\n ...snapshot.context,\n selection: newTextBlockSelection,\n },\n block: focusTextBlock.node,\n }),\n context: snapshot.context,\n options: {\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n })\n\n if (!newTextBlock) {\n return false\n }\n\n return {\n newTextBlock,\n newTextBlockSelection,\n }\n },\n actions: [\n (_, {newTextBlock, newTextBlockSelection}) =>\n isSelectionCollapsed(newTextBlockSelection)\n ? [\n raise({\n type: 'insert.block',\n block: newTextBlock,\n placement: 'after',\n select: 'start',\n }),\n ]\n : [\n raise({type: 'delete', at: newTextBlockSelection}),\n raise({\n type: 'insert.block',\n block: newTextBlock,\n placement: 'after',\n select: 'start',\n }),\n ],\n ],\n }),\n]\n","import {getSelectedTextBlocks} from '../selectors/selector.get-selected-text-blocks'\nimport {isActiveStyle} from '../selectors/selector.is-active-style'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractStyleBehaviors = [\n defineBehavior({\n on: 'style.add',\n guard: ({snapshot}) => {\n const selectedTextBlocks = getSelectedTextBlocks(snapshot)\n\n return {selectedTextBlocks}\n },\n actions: [\n ({event}, {selectedTextBlocks}) =>\n selectedTextBlocks.map((block) =>\n raise({\n type: 'block.set',\n at: block.path,\n props: {\n style: event.style,\n },\n }),\n ),\n ],\n }),\n defineBehavior({\n on: 'style.remove',\n guard: ({snapshot}) => {\n const selectedTextBlocks = getSelectedTextBlocks(snapshot)\n\n return {selectedTextBlocks}\n },\n actions: [\n (_, {selectedTextBlocks}) =>\n selectedTextBlocks.map((block) =>\n raise({\n type: 'block.unset',\n at: block.path,\n props: ['style'],\n }),\n ),\n ],\n }),\n defineBehavior({\n on: 'style.toggle',\n guard: ({snapshot, event}) => isActiveStyle(event.style)(snapshot),\n actions: [({event}) => [raise({type: 'style.remove', style: event.style})]],\n }),\n defineBehavior({\n on: 'style.toggle',\n guard: ({snapshot, event}) => !isActiveStyle(event.style)(snapshot),\n actions: [({event}) => [raise({type: 'style.add', style: event.style})]],\n }),\n]\n","import {getFocusSpan} from '../selectors/selector.get-focus-span'\nimport {isSelectionCollapsed} from '../selectors/selector.is-selection-collapsed'\nimport {isSelectionExpanded} from '../selectors/selector.is-selection-expanded'\nimport {abstractAnnotationBehaviors} from './behavior.abstract.annotation'\nimport {abstractDecoratorBehaviors} from './behavior.abstract.decorator'\nimport {abstractDeleteBehaviors} from './behavior.abstract.delete'\nimport {abstractDeserializeBehaviors} from './behavior.abstract.deserialize'\nimport {abstractInsertBehaviors} from './behavior.abstract.insert'\nimport {abstractKeyboardBehaviors} from './behavior.abstract.keyboard'\nimport {abstractListItemBehaviors} from './behavior.abstract.list-item'\nimport {abstractMoveBehaviors} from './behavior.abstract.move'\nimport {abstractSelectBehaviors} from './behavior.abstract.select'\nimport {abstractSerializeBehaviors} from './behavior.abstract.serialize'\nimport {abstractSplitBehaviors} from './behavior.abstract.split'\nimport {abstractStyleBehaviors} from './behavior.abstract.style'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractBehaviors = [\n defineBehavior({\n on: 'clipboard.copy',\n guard: ({snapshot}) => {\n const focusSpan = getFocusSpan(snapshot)\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n\n return focusSpan && selectionCollapsed\n },\n actions: [],\n }),\n defineBehavior({\n on: 'clipboard.copy',\n actions: [\n ({event}) => [\n raise({\n type: 'serialize',\n originEvent: event,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'clipboard.cut',\n guard: ({snapshot}) => {\n const focusSpan = getFocusSpan(snapshot)\n const selectionCollapsed = isSelectionCollapsed(snapshot)\n\n return focusSpan && selectionCollapsed\n },\n actions: [],\n }),\n defineBehavior({\n on: 'clipboard.cut',\n guard: ({snapshot}) => {\n return snapshot.context.selection\n ? {\n selection: snapshot.context.selection,\n }\n : false\n },\n actions: [\n ({event}, {selection}) => [\n raise({\n type: 'serialize',\n originEvent: event,\n }),\n raise({\n type: 'delete',\n at: selection,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'drag.dragstart',\n actions: [\n ({event}) => [\n raise({\n type: 'serialize',\n originEvent: event,\n }),\n ],\n ],\n }),\n\n defineBehavior({\n on: 'clipboard.paste',\n guard: ({snapshot}) => {\n return snapshot.context.selection && isSelectionExpanded(snapshot)\n ? {selection: snapshot.context.selection}\n : false\n },\n actions: [\n ({event}, {selection}) => [\n raise({\n type: 'delete',\n at: selection,\n }),\n raise({\n type: 'deserialize',\n originEvent: event,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'clipboard.paste',\n actions: [\n ({event}) => [\n raise({\n type: 'deserialize',\n originEvent: event,\n }),\n ],\n ],\n }),\n defineBehavior({\n on: 'input.*',\n actions: [\n ({event}) => [\n raise({\n type: 'deserialize',\n originEvent: event,\n }),\n ],\n ],\n }),\n ...abstractAnnotationBehaviors,\n ...abstractDecoratorBehaviors,\n ...abstractDeleteBehaviors,\n ...abstractDeserializeBehaviors,\n ...abstractInsertBehaviors,\n ...abstractKeyboardBehaviors,\n ...abstractListItemBehaviors,\n ...abstractMoveBehaviors,\n ...abstractStyleBehaviors,\n ...abstractSelectBehaviors,\n ...abstractSerializeBehaviors,\n ...abstractSplitBehaviors,\n]\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport type {MIMEType} from '../internal-utils/mime-type'\nimport type {OmitFromUnion, PickFromUnion, StrictExtract} from '../type-utils'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {\n BlockWithOptionalKey,\n ChildWithOptionalKey,\n} from '../types/block-with-optional-key'\nimport type {EditorSelection} from '../types/editor'\nimport type {AnnotationPath, BlockPath, ChildPath} from '../types/paths'\n\n/**\n * @beta\n */\nexport type BehaviorEvent =\n | SyntheticBehaviorEvent\n | NativeBehaviorEvent\n | CustomBehaviorEvent\n\nexport type BehaviorEventTypeNamespace =\n | SyntheticBehaviorEventNamespace\n | NativeBehaviorEventNamespace\n | CustomBehaviorEventNamespace\n\ntype NamespacedBehaviorEventType<\n TNamespace extends BehaviorEventTypeNamespace | '',\n> = TNamespace extends ''\n ? BehaviorEvent['type']\n : Extract<BehaviorEvent['type'], TNamespace | `${TNamespace}.${string}`>\n\n/**************************************\n * External events\n **************************************/\n\ntype ExternalBehaviorEventNamespace = 'blur' | 'focus' | 'insert'\n\ntype ExternalBehaviorEventType<\n TNamespace extends ExternalBehaviorEventNamespace,\n TType extends string = '',\n> = TType extends '' ? `${TNamespace}` : `${TNamespace}.${TType}`\n\nexport type ExternalBehaviorEvent =\n | {\n type: ExternalBehaviorEventType<'blur'>\n }\n | {\n type: ExternalBehaviorEventType<'focus'>\n }\n | {\n type: ExternalBehaviorEventType<'insert', 'block object'>\n placement: InsertPlacement\n blockObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | BehaviorEvent\n\n/**************************************\n * Synthetic events\n **************************************/\n\nconst syntheticBehaviorEventTypes = [\n 'annotation.add',\n 'annotation.remove',\n 'block.set',\n 'block.unset',\n 'child.set',\n 'child.unset',\n 'decorator.add',\n 'decorator.remove',\n 'delete',\n 'history.redo',\n 'history.undo',\n 'insert.block',\n 'insert.child',\n 'insert.text',\n 'move.backward',\n 'move.block',\n 'move.forward',\n 'select',\n] as const\n\ntype SyntheticBehaviorEventType =\n | (typeof syntheticBehaviorEventTypes)[number]\n | (typeof abstractBehaviorEventTypes)[number]\n\ntype SyntheticBehaviorEventNamespace =\n ExtractNamespace<SyntheticBehaviorEventType>\n\n/**\n * @beta\n */\nexport type SyntheticBehaviorEvent =\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'annotation.add'>\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'annotation.remove'>\n annotation: {\n name: string\n }\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'block.set'>\n at: BlockPath\n props: Record<string, unknown>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'block.unset'>\n at: BlockPath\n props: Array<string>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'child.set'>\n at: ChildPath\n props: {[prop: string]: unknown}\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'child.unset'>\n at: ChildPath\n props: Array<string>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'decorator.add'>\n decorator: string\n at?: {\n anchor: BlockOffset\n focus: BlockOffset\n }\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'decorator.remove'>\n decorator: string\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete'>\n at?: NonNullable<EditorSelection>\n /**\n * Defaults to forward deletion.\n */\n direction?: 'backward' | 'forward'\n /**\n * Defaults to character deletion.\n */\n unit?: 'character' | 'word' | 'line' | 'block'\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'history.redo'>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'history.undo'>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'insert.block'>\n block: BlockWithOptionalKey\n placement: InsertPlacement\n select?: 'start' | 'end' | 'none'\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'insert.child'>\n child: ChildWithOptionalKey\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'insert.text'>\n text: string\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'move.backward'>\n distance: number\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'move.block'>\n at: BlockPath\n to: BlockPath\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'move.forward'>\n distance: number\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'select'>\n at: EditorSelection\n }\n | AbstractBehaviorEvent\n\n/**\n * @beta\n */\nexport type InsertPlacement = 'auto' | 'after' | 'before'\n\nexport function isSyntheticBehaviorEvent(\n event: BehaviorEvent,\n): event is OmitFromUnion<\n SyntheticBehaviorEvent,\n 'type',\n AbstractBehaviorEventType\n> {\n return (\n !isCustomBehaviorEvent(event) &&\n !isNativeBehaviorEvent(event) &&\n !isAbstractBehaviorEvent(event)\n )\n}\n\n/**************************************\n * Abstract events\n **************************************/\n\nconst abstractBehaviorEventTypes = [\n 'annotation.set',\n 'annotation.toggle',\n 'decorator.toggle',\n 'delete.backward',\n 'delete.block',\n 'delete.child',\n 'delete.forward',\n 'delete.text',\n 'deserialize',\n 'deserialize.data',\n 'deserialization.success',\n 'deserialization.failure',\n 'insert.blocks',\n 'insert.break',\n 'insert.inline object',\n 'insert.soft break',\n 'insert.span',\n 'list item.add',\n 'list item.remove',\n 'list item.toggle',\n 'move.block down',\n 'move.block up',\n 'select.block',\n 'select.previous block',\n 'select.next block',\n 'serialize',\n 'serialize.data',\n 'serialization.success',\n 'serialization.failure',\n 'split',\n 'style.add',\n 'style.remove',\n 'style.toggle',\n] as const\n\nexport type AbstractBehaviorEventType =\n (typeof abstractBehaviorEventTypes)[number]\n\ntype AbstractBehaviorEvent =\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'annotation.set'>\n at: AnnotationPath\n props: Record<string, unknown>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'annotation.toggle'>\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'decorator.toggle'>\n decorator: string\n at?: {anchor: BlockOffset; focus: BlockOffset}\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.backward'>\n unit: 'character' | 'word' | 'line' | 'block'\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.block'>\n at: BlockPath\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.child'>\n at: ChildPath\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.forward'>\n unit: 'character' | 'word' | 'line' | 'block'\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.text'>\n at: {\n anchor: BlockOffset\n focus: BlockOffset\n }\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'deserialize'>\n originEvent:\n | PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'drag.drop' | 'clipboard.paste'\n >\n | InputBehaviorEvent\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'deserialize.data'>\n mimeType: MIMEType\n data: string\n originEvent:\n | PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'drag.drop' | 'clipboard.paste'\n >\n | InputBehaviorEvent\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'serialize'>\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'serialize.data'>\n mimeType: MIMEType\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'deserialization.success'>\n mimeType: MIMEType\n data: Array<PortableTextBlock>\n originEvent:\n | PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'drag.drop' | 'clipboard.paste'\n >\n | InputBehaviorEvent\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'deserialization.failure'>\n mimeType: MIMEType\n reason: string\n originEvent:\n | PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'drag.drop' | 'clipboard.paste'\n >\n | InputBehaviorEvent\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'serialization.success'>\n mimeType: MIMEType\n data: string\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'serialization.failure'>\n mimeType: MIMEType\n reason: string\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'insert.blocks'>\n blocks: Array<BlockWithOptionalKey>\n placement: InsertPlacement\n select?: 'start' | 'end' | 'none'\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'insert.break'>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'insert.inline object'>\n inlineObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'insert.soft break'>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'insert.span'>\n text: string\n annotations?: Array<{\n name: string\n value: {[prop: string]: unknown}\n }>\n decorators?: Array<string>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'list item.add'>\n listItem: string\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'list item.remove'>\n listItem: string\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'list item.toggle'>\n listItem: string\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'move.block down'>\n at: BlockPath\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'move.block up'>\n at: BlockPath\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'select.block'>\n at: BlockPath\n select?: 'start' | 'end'\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'select.previous block'>\n select?: 'start' | 'end'\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'select.next block'>\n select?: 'start' | 'end'\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'split'>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'style.add'>\n style: string\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'style.remove'>\n style: string\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'style.toggle'>\n style: string\n }\n\nexport function isAbstractBehaviorEvent(\n event: BehaviorEvent,\n): event is AbstractBehaviorEvent {\n return (abstractBehaviorEventTypes as readonly string[]).includes(event.type)\n}\n\n/**************************************\n * Native events\n **************************************/\n\nconst nativeBehaviorEventTypes = [\n 'clipboard.copy',\n 'clipboard.cut',\n 'clipboard.paste',\n 'drag.dragstart',\n 'drag.drag',\n 'drag.dragend',\n 'drag.dragenter',\n 'drag.dragover',\n 'drag.dragleave',\n 'drag.drop',\n 'input.*',\n 'keyboard.keydown',\n 'keyboard.keyup',\n 'mouse.click',\n] as const\n\ntype NativeBehaviorEventType = (typeof nativeBehaviorEventTypes)[number]\n\ntype NativeBehaviorEventNamespace = ExtractNamespace<NativeBehaviorEventType>\n\nexport function isNativeBehaviorEvent(\n event: BehaviorEvent,\n): event is NativeBehaviorEvent {\n return (nativeBehaviorEventTypes as readonly string[]).includes(event.type)\n}\n\n/**\n * @beta\n */\nexport type NativeBehaviorEvent =\n | ClipboardBehaviorEvent\n | DragBehaviorEvent\n | InputBehaviorEvent\n | KeyboardBehaviorEvent\n | MouseBehaviorEvent\n\ntype ClipboardBehaviorEvent =\n | {\n type: StrictExtract<NativeBehaviorEventType, 'clipboard.copy'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: Pick<EventPosition, 'selection'>\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'clipboard.cut'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: Pick<EventPosition, 'selection'>\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'clipboard.paste'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: Pick<EventPosition, 'selection'>\n }\n\ntype DragBehaviorEvent =\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.dragstart'>\n originEvent: {\n clientX: number\n clientY: number\n dataTransfer: DataTransfer\n }\n position: Pick<EventPosition, 'selection'>\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.drag'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.dragend'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.dragenter'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.dragover'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n dragOrigin?: Pick<EventPosition, 'selection'>\n position: EventPosition\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.drop'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n dragOrigin?: Pick<EventPosition, 'selection'>\n position: EventPosition\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.dragleave'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n\n/**\n * Used to represent native InputEvents that hold a DataTransfer object.\n *\n * These can either be one of:\n *\n * - insertFromPaste\n * - insertFromPasteAsQuotation\n * - insertFromDrop\n * - insertReplacementText\n * - insertFromYank\n */\nexport type InputBehaviorEvent = {\n type: StrictExtract<NativeBehaviorEventType, 'input.*'>\n originEvent: {\n dataTransfer: DataTransfer\n }\n}\n\nexport type KeyboardBehaviorEvent =\n | {\n type: StrictExtract<NativeBehaviorEventType, 'keyboard.keydown'>\n originEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'keyboard.keyup'>\n originEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n\nexport type MouseBehaviorEvent = {\n type: StrictExtract<NativeBehaviorEventType, 'mouse.click'>\n position: EventPosition\n}\n\n/**************************************\n * Custom events\n **************************************/\n\ntype CustomBehaviorEventNamespace = 'custom'\n\ntype CustomBehaviorEventType<\n TNamespace extends CustomBehaviorEventNamespace,\n TType extends string = '',\n> = TType extends '' ? `${TNamespace}` : `${TNamespace}.${TType}`\n\n/**\n * @beta\n */\nexport type CustomBehaviorEvent<\n TPayload extends Record<string, unknown> = Record<string, unknown>,\n TType extends string = string,\n TInternalType extends CustomBehaviorEventType<\n 'custom',\n TType\n > = CustomBehaviorEventType<'custom', TType>,\n> = {\n type: TInternalType\n} & TPayload\n\nexport function isCustomBehaviorEvent(\n event: BehaviorEvent,\n): event is CustomBehaviorEvent {\n return event.type.startsWith('custom.')\n}\n\n/**************************************\n * Resolve behavior event\n **************************************/\n\nexport type ResolveBehaviorEvent<\n TBehaviorEventType extends\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'],\n TPayload extends Record<string, unknown> = Record<string, unknown>,\n> = TBehaviorEventType extends '*'\n ? BehaviorEvent\n : TBehaviorEventType extends `${infer TNamespace}.*`\n ? TNamespace extends BehaviorEventTypeNamespace\n ? PickFromUnion<\n BehaviorEvent,\n 'type',\n NamespacedBehaviorEventType<TNamespace>\n >\n : never\n : TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : TBehaviorEventType extends BehaviorEvent['type']\n ? PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>\n : never\n\ntype ExtractNamespace<TType extends string> =\n TType extends `${infer Namespace}.${string}` ? Namespace : TType\n","import {createEditorDom} from '../editor/editor-dom'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorSnapshot} from '../editor/editor-snapshot'\nimport {withPerformingBehaviorOperation} from '../editor/with-performing-behavior-operation'\nimport {clearUndoStep, createUndoStep} from '../editor/with-undo-step'\nimport {withoutNormalizingConditional} from '../editor/without-normalizing-conditional'\nimport {debugWithName} from '../internal-utils/debug'\nimport {performOperation} from '../operations/behavior.operations'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {abstractBehaviors} from './behavior.abstract'\nimport type {BehaviorAction} from './behavior.types.action'\nimport type {Behavior} from './behavior.types.behavior'\nimport {\n isAbstractBehaviorEvent,\n isCustomBehaviorEvent,\n isNativeBehaviorEvent,\n isSyntheticBehaviorEvent,\n type BehaviorEvent,\n type ExternalBehaviorEvent,\n} from './behavior.types.event'\n\nconst debug = debugWithName('behaviors:event')\n\nfunction eventCategory(event: BehaviorEvent) {\n return isNativeBehaviorEvent(event)\n ? 'native'\n : isAbstractBehaviorEvent(event)\n ? 'synthetic'\n : isCustomBehaviorEvent(event)\n ? 'custom'\n : 'synthetic'\n}\n\nexport function performEvent({\n mode,\n behaviors,\n remainingEventBehaviors,\n event,\n editor,\n keyGenerator,\n schema,\n getSnapshot,\n nativeEvent,\n sendBack,\n}: {\n mode: 'send' | 'raise' | 'execute' | 'forward'\n behaviors: Array<Behavior>\n remainingEventBehaviors: Array<Behavior>\n event: BehaviorEvent\n editor: PortableTextSlateEditor\n keyGenerator: () => string\n schema: EditorSchema\n getSnapshot: () => EditorSnapshot\n nativeEvent:\n | {\n preventDefault: () => void\n }\n | undefined\n sendBack: (\n event: {type: 'set drag ghost'; ghost: HTMLElement} | ExternalBehaviorEvent,\n ) => void\n}) {\n if (mode === 'send' && !isNativeBehaviorEvent(event)) {\n createUndoStep(editor)\n }\n\n debug(`(${mode}:${eventCategory(event)})`, JSON.stringify(event, null, 2))\n\n const eventBehaviors = [\n ...remainingEventBehaviors,\n ...abstractBehaviors,\n ].filter((behavior) => {\n // Catches all events\n if (behavior.on === '*') {\n return true\n }\n\n const [listenedNamespace] =\n behavior.on.includes('*') && behavior.on.includes('.')\n ? behavior.on.split('.')\n : [undefined]\n const [eventNamespace] = event.type.includes('.')\n ? event.type.split('.')\n : [undefined]\n\n // Handles scenarios like a Behavior listening for `select.*` and the event\n // `select.block` is fired.\n if (\n listenedNamespace !== undefined &&\n eventNamespace !== undefined &&\n listenedNamespace === eventNamespace\n ) {\n return true\n }\n\n // Handles scenarios like a Behavior listening for `select.*` and the event\n // `select` is fired.\n if (\n listenedNamespace !== undefined &&\n eventNamespace === undefined &&\n listenedNamespace === event.type\n ) {\n return true\n }\n\n return behavior.on === event.type\n })\n\n if (eventBehaviors.length === 0 && isSyntheticBehaviorEvent(event)) {\n nativeEvent?.preventDefault()\n\n if (mode === 'send') {\n clearUndoStep(editor)\n }\n\n withPerformingBehaviorOperation(editor, () => {\n debug(`(execute:${eventCategory(event)})`, JSON.stringify(event, null, 2))\n\n performOperation({\n context: {\n keyGenerator,\n schema,\n },\n operation: {\n ...event,\n editor,\n },\n })\n })\n\n editor.onChange()\n\n return\n }\n\n const guardSnapshot = getSnapshot()\n\n let nativeEventPrevented = false\n let defaultBehaviorOverwritten = false\n let eventBehaviorIndex = -1\n\n for (const eventBehavior of eventBehaviors) {\n eventBehaviorIndex++\n\n let shouldRun = false\n\n try {\n shouldRun =\n eventBehavior.guard === undefined ||\n eventBehavior.guard({\n snapshot: guardSnapshot,\n event,\n dom: createEditorDom(sendBack, editor),\n })\n } catch (error) {\n console.error(\n new Error(\n `Evaluating guard for \"${event.type}\" failed due to: ${error.message}`,\n ),\n )\n }\n\n if (!shouldRun) {\n continue\n }\n\n // This Behavior now \"owns\" the event and we can consider the default\n // action prevented\n defaultBehaviorOverwritten = true\n\n if (eventBehavior.actions.length === 0) {\n nativeEventPrevented = true\n }\n\n let actionSetIndex = -1\n\n for (const actionSet of eventBehavior.actions) {\n actionSetIndex++\n\n const actionsSnapshot = getSnapshot()\n\n let actions: Array<BehaviorAction> = []\n\n try {\n actions = actionSet(\n {\n snapshot: actionsSnapshot,\n event,\n dom: createEditorDom(sendBack, editor),\n },\n shouldRun,\n )\n } catch (error) {\n console.error(\n new Error(\n `Evaluating actions for \"${event.type}\" failed due to: ${error.message}`,\n ),\n )\n }\n\n if (actions.length === 0) {\n continue\n }\n\n nativeEventPrevented =\n actions.some(\n (action) => action.type === 'raise' || action.type === 'execute',\n ) || !actions.some((action) => action.type === 'forward')\n\n let undoStepCreated = false\n\n if (actionSetIndex > 0) {\n // Since there are multiple action sets\n createUndoStep(editor)\n\n undoStepCreated = true\n }\n\n if (\n !undoStepCreated &&\n actions.some((action) => action.type === 'execute')\n ) {\n // Since at least one action is about to `execute` changes in the editor,\n // we set up a new undo step.\n // All actions performed recursively from now will be squashed into this\n // undo step\n createUndoStep(editor)\n\n undoStepCreated = true\n }\n\n const actionTypes = actions.map((action) => action.type)\n const uniqueActionTypes = new Set(actionTypes)\n\n // The set of actions are all `raise` actions\n const raiseGroup =\n actionTypes.length > 1 &&\n uniqueActionTypes.size === 1 &&\n uniqueActionTypes.has('raise')\n\n // The set of actions are all `execute` actions\n const executeGroup =\n actionTypes.length > 1 &&\n uniqueActionTypes.size === 1 &&\n uniqueActionTypes.has('execute')\n\n withoutNormalizingConditional(\n editor,\n () => raiseGroup || executeGroup,\n () => {\n for (const action of actions) {\n if (action.type === 'effect') {\n try {\n action.effect({\n send: sendBack,\n })\n } catch (error) {\n console.error(\n new Error(\n `Executing effect as a result of \"${event.type}\" failed due to: ${error.message}`,\n ),\n )\n }\n\n continue\n }\n\n if (action.type === 'forward') {\n const remainingEventBehaviors = eventBehaviors.slice(\n eventBehaviorIndex + 1,\n )\n\n performEvent({\n mode: mode === 'execute' ? 'execute' : 'forward',\n behaviors,\n remainingEventBehaviors: remainingEventBehaviors,\n event: action.event,\n editor,\n keyGenerator,\n schema,\n getSnapshot,\n nativeEvent,\n sendBack,\n })\n\n continue\n }\n\n if (action.type === 'raise') {\n performEvent({\n mode: mode === 'execute' ? 'execute' : 'raise',\n behaviors,\n remainingEventBehaviors:\n mode === 'execute' ? remainingEventBehaviors : behaviors,\n event: action.event,\n editor,\n keyGenerator,\n schema,\n getSnapshot,\n nativeEvent,\n sendBack,\n })\n\n continue\n }\n\n performEvent({\n mode: 'execute',\n behaviors,\n remainingEventBehaviors: [],\n event: action.event,\n editor,\n keyGenerator,\n schema,\n getSnapshot,\n nativeEvent: undefined,\n sendBack,\n })\n }\n },\n )\n\n if (undoStepCreated) {\n clearUndoStep(editor)\n }\n }\n\n break\n }\n\n if (!defaultBehaviorOverwritten && isSyntheticBehaviorEvent(event)) {\n nativeEvent?.preventDefault()\n\n if (mode === 'send') {\n clearUndoStep(editor)\n }\n\n withPerformingBehaviorOperation(editor, () => {\n debug(`(execute:${eventCategory(event)})`, JSON.stringify(event, null, 2))\n\n performOperation({\n context: {keyGenerator, schema},\n operation: {\n ...event,\n editor,\n },\n })\n })\n\n editor.onChange()\n } else if (nativeEventPrevented) {\n nativeEvent?.preventDefault()\n }\n}\n","import type {EditorPriority} from './priority.types'\n\nexport function sortByPriority<\n T extends {\n priority?: EditorPriority\n },\n>(items: Array<T>): Array<T> {\n if (items.length === 0) {\n return []\n }\n\n // Separate items with and without priority\n const itemsWithPriority = items.filter(\n (item): item is T & {priority: EditorPriority} =>\n item.priority !== undefined,\n )\n const itemsWithoutPriority = items.filter(\n (item) => item.priority === undefined,\n )\n\n if (itemsWithPriority.length === 0) {\n return items\n }\n\n // Create a map of items by their priority ID\n const itemsByPriorityId = new Map(\n itemsWithPriority.map((item) => [item.priority.id, item]),\n )\n\n // Build the dependency graph\n const graph = new Map<string, Set<string>>()\n const inDegree = new Map<string, number>()\n\n // Helper function to ensure a node exists in the graph\n function ensureNode(id: string) {\n if (!graph.has(id)) {\n graph.set(id, new Set())\n inDegree.set(id, 0)\n }\n }\n\n // Initialize graph and in-degree for all items\n for (const item of itemsWithPriority) {\n const id = item.priority.id\n ensureNode(id)\n }\n\n // Helper function to add an edge to the graph\n function addEdge(fromId: string, toId: string) {\n if (!graph.has(fromId) || !graph.has(toId)) return\n graph.get(fromId)?.add(toId)\n inDegree.set(toId, (inDegree.get(toId) ?? 0) + 1)\n }\n\n // Add edges based on references\n for (const item of itemsWithPriority) {\n const id = item.priority.id\n const visited = new Set<string>()\n let ref = item.priority.reference\n\n while (ref) {\n const refId = ref.priority.id\n ensureNode(refId)\n\n // Check for cyclic reference\n if (visited.has(refId)) {\n throw new Error('Circular dependency detected in priorities')\n }\n visited.add(refId)\n\n if (ref.importance === 'higher') {\n // Reference must come before current item\n addEdge(id, refId)\n } else {\n // Current item must come before reference\n addEdge(refId, id)\n }\n\n ref = ref.priority.reference\n }\n }\n\n const queue: string[] = []\n\n // Find all nodes with no incoming edges\n for (const [id, degree] of inDegree) {\n if (degree === 0) {\n queue.push(id)\n }\n }\n\n const result: T[] = []\n\n // Perform topological sort\n while (queue.length > 0) {\n const currentId = queue.shift()!\n const currentItem = itemsByPriorityId.get(currentId)\n if (currentItem) {\n result.push(currentItem)\n }\n\n // Decrease in-degree of neighbors\n for (const neighborId of graph.get(currentId) ?? []) {\n const newDegree = (inDegree.get(neighborId) ?? 0) - 1\n inDegree.set(neighborId, newDegree)\n if (newDegree === 0) {\n queue.push(neighborId)\n }\n }\n }\n\n // Add any remaining items that weren't processed\n for (const item of itemsWithPriority) {\n if (!result.includes(item)) {\n result.push(item)\n }\n }\n\n // Append items without priority at the end in their original order\n return [...result, ...itemsWithoutPriority]\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {Converter} from '../converters/converter.types'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\n\n/**\n * @public\n */\nexport type EditorContext = {\n converters: Array<Converter>\n keyGenerator: () => string\n readOnly: boolean\n schema: EditorSchema\n selection: EditorSelection\n value: Array<PortableTextBlock>\n}\n\n/**\n * @public\n */\nexport type EditorSnapshot = {\n context: EditorContext\n blockIndexMap: Map<string, number>\n /**\n * @beta\n * Subject to change\n */\n decoratorState: Record<string, boolean | undefined>\n}\n\nexport function createEditorSnapshot({\n converters,\n editor,\n keyGenerator,\n readOnly,\n schema,\n}: {\n converters: Array<Converter>\n editor: PortableTextSlateEditor\n keyGenerator: () => string\n readOnly: boolean\n schema: EditorSchema\n}) {\n const selection = editor.selection\n ? slateRangeToSelection({\n schema,\n editor,\n range: editor.selection,\n })\n : null\n\n const context = {\n converters,\n keyGenerator,\n readOnly,\n schema,\n selection,\n value: editor.value,\n } satisfies EditorContext\n\n return {\n blockIndexMap: editor.blockIndexMap,\n context,\n decoratorState: editor.decoratorState,\n } satisfies EditorSnapshot\n}\n","import type {Patch} from '@portabletext/patches'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {Transforms} from 'slate'\nimport {ReactEditor} from 'slate-react'\nimport {\n assertEvent,\n assign,\n emit,\n enqueueActions,\n setup,\n type ActorRefFrom,\n} from 'xstate'\nimport type {BehaviorConfig} from '../behaviors/behavior.config'\nimport {coreBehaviorsConfig} from '../behaviors/behavior.core'\nimport {performEvent} from '../behaviors/behavior.perform-event'\nimport type {\n BehaviorEvent,\n ExternalBehaviorEvent,\n} from '../behaviors/behavior.types.event'\nimport type {Converter} from '../converters/converter.types'\nimport {debugWithName} from '../internal-utils/debug'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport {sortByPriority} from '../priority/priority.sort'\nimport type {NamespaceEvent, OmitFromUnion} from '../type-utils'\nimport type {\n EditorSelection,\n PortableTextMemberSchemaTypes,\n PortableTextSlateEditor,\n} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\nimport {createEditorSnapshot} from './editor-snapshot'\nimport type {\n EditorEmittedEvent,\n MutationEvent,\n PatchEvent,\n} from './relay-machine'\nimport {isNormalizingNode} from './with-normalizing-node'\n\nexport * from 'xstate/guards'\n\nconst debug = debugWithName('editor machine')\n\n/**\n * @public\n */\nexport type PatchesEvent = {\n type: 'patches'\n patches: Array<Patch>\n snapshot: Array<PortableTextBlock> | undefined\n}\n\n/**\n * @public\n */\nexport type ExternalEditorEvent =\n | {\n type: 'update readOnly'\n readOnly: boolean\n }\n | {\n type: 'update maxBlocks'\n maxBlocks: number | undefined\n }\n | PatchesEvent\n\ntype InternalPatchEvent = NamespaceEvent<PatchEvent, 'internal'> & {\n operationId?: string\n value: Array<PortableTextBlock>\n}\n\n/**\n * @internal\n */\nexport type EditorActor = ActorRefFrom<typeof editorMachine>\n\n/**\n * @internal\n */\nexport type InternalEditorEvent =\n | ExternalEditorEvent\n | {\n type: 'add behavior'\n behaviorConfig: BehaviorConfig\n }\n | {\n type: 'remove behavior'\n behaviorConfig: BehaviorConfig\n }\n | {\n type: 'blur'\n editor: PortableTextSlateEditor\n }\n | {\n type: 'focus'\n editor: PortableTextSlateEditor\n }\n | {\n type: 'update selection'\n selection: EditorSelection\n }\n | {\n type: 'done syncing value'\n }\n | {\n type: 'syncing value'\n }\n | {\n type: 'behavior event'\n behaviorEvent: BehaviorEvent\n editor: PortableTextSlateEditor\n nativeEvent?: {preventDefault: () => void}\n }\n | MutationEvent\n | InternalPatchEvent\n | {\n type: 'set drag ghost'\n ghost: HTMLElement\n }\n | {\n type: 'dragstart'\n ghost?: HTMLElement\n origin: Pick<EventPosition, 'selection'>\n }\n | {type: 'dragend'}\n | {type: 'drop'}\n | {type: 'add slate editor'; editor: PortableTextSlateEditor}\n\n/**\n * @internal\n */\nexport type InternalEditorEmittedEvent =\n | OmitFromUnion<EditorEmittedEvent, 'type', 'patch'>\n | InternalPatchEvent\n | PatchesEvent\n\nexport function rerouteExternalBehaviorEvent({\n event,\n slateEditor,\n}: {\n event: ExternalBehaviorEvent\n slateEditor: PortableTextSlateEditor\n}): InternalEditorEvent {\n switch (event.type) {\n case 'blur':\n return {\n type: 'blur',\n editor: slateEditor,\n }\n\n case 'focus':\n return {\n type: 'focus',\n editor: slateEditor,\n }\n\n case 'insert.block object':\n return {\n type: 'behavior event',\n behaviorEvent: {\n type: 'insert.block',\n block: {\n _type: event.blockObject.name,\n ...(event.blockObject.value ?? {}),\n },\n placement: event.placement,\n },\n editor: slateEditor,\n }\n\n default:\n return {\n type: 'behavior event',\n behaviorEvent: event,\n editor: slateEditor,\n }\n }\n}\n\n/**\n * @internal\n */\nexport const editorMachine = setup({\n types: {\n context: {} as {\n behaviors: Set<BehaviorConfig>\n behaviorsSorted: boolean\n converters: Set<Converter>\n getLegacySchema: () => PortableTextMemberSchemaTypes\n keyGenerator: () => string\n pendingEvents: Array<InternalPatchEvent | MutationEvent>\n pendingIncomingPatchesEvents: Array<PatchesEvent>\n schema: EditorSchema\n initialReadOnly: boolean\n maxBlocks: number | undefined\n selection: EditorSelection\n initialValue: Array<PortableTextBlock> | undefined\n internalDrag?: {\n origin: Pick<EventPosition, 'selection'>\n }\n dragGhost?: HTMLElement\n slateEditor?: PortableTextSlateEditor\n },\n events: {} as InternalEditorEvent,\n emitted: {} as InternalEditorEmittedEvent,\n input: {} as {\n converters?: Array<Converter>\n getLegacySchema: () => PortableTextMemberSchemaTypes\n keyGenerator: () => string\n maxBlocks?: number\n readOnly?: boolean\n schema: EditorSchema\n initialValue?: Array<PortableTextBlock>\n },\n tags: {} as 'dragging internally',\n },\n actions: {\n 'add behavior to context': assign({\n behaviors: ({context, event}) => {\n assertEvent(event, 'add behavior')\n\n return new Set([...context.behaviors, event.behaviorConfig])\n },\n behaviorsSorted: false,\n }),\n 'remove behavior from context': assign({\n behaviors: ({context, event}) => {\n assertEvent(event, 'remove behavior')\n\n context.behaviors.delete(event.behaviorConfig)\n\n return new Set([...context.behaviors])\n },\n }),\n 'add slate editor to context': assign({\n slateEditor: ({context, event}) => {\n return event.type === 'add slate editor'\n ? event.editor\n : context.slateEditor\n },\n }),\n 'emit patch event': emit(({event}) => {\n assertEvent(event, 'internal.patch')\n return event\n }),\n 'emit mutation event': emit(({event}) => {\n assertEvent(event, 'mutation')\n return event\n }),\n 'emit read only': emit({type: 'read only'}),\n 'emit editable': emit({type: 'editable'}),\n 'defer event': assign({\n pendingEvents: ({context, event}) => {\n assertEvent(event, ['internal.patch', 'mutation'])\n return [...context.pendingEvents, event]\n },\n }),\n 'emit pending events': enqueueActions(({context, enqueue}) => {\n for (const event of context.pendingEvents) {\n enqueue.emit(event)\n }\n }),\n 'emit ready': emit({type: 'ready'}),\n 'clear pending events': assign({\n pendingEvents: [],\n }),\n 'defer incoming patches': assign({\n pendingIncomingPatchesEvents: ({context, event}) => {\n return event.type === 'patches'\n ? [...context.pendingIncomingPatchesEvents, event]\n : context.pendingIncomingPatchesEvents\n },\n }),\n 'emit pending incoming patches': enqueueActions(({context, enqueue}) => {\n for (const event of context.pendingIncomingPatchesEvents) {\n enqueue.emit(event)\n }\n }),\n 'clear pending incoming patches': assign({\n pendingIncomingPatchesEvents: [],\n }),\n 'handle blur': ({event}) => {\n assertEvent(event, 'blur')\n\n try {\n ReactEditor.blur(event.editor)\n } catch (error) {\n console.error(new Error(`Failed to blur editor: ${error.message}`))\n }\n },\n 'handle focus': ({context}) => {\n if (!context.slateEditor) {\n console.error('No Slate editor found to focus')\n return\n }\n\n try {\n const currentSelection = context.slateEditor.selection\n ReactEditor.focus(context.slateEditor)\n if (currentSelection) {\n Transforms.select(context.slateEditor, currentSelection)\n }\n } catch (error) {\n console.error(new Error(`Failed to focus editor: ${error.message}`))\n }\n },\n 'handle behavior event': ({context, event, self}) => {\n assertEvent(event, ['behavior event'])\n\n try {\n const behaviors = [...context.behaviors.values()].map(\n (config) => config.behavior,\n )\n\n performEvent({\n mode: 'send',\n behaviors,\n remainingEventBehaviors: behaviors,\n event: event.behaviorEvent,\n editor: event.editor,\n keyGenerator: context.keyGenerator,\n schema: context.schema,\n getSnapshot: () =>\n createEditorSnapshot({\n converters: [...context.converters],\n editor: event.editor,\n keyGenerator: context.keyGenerator,\n readOnly: self.getSnapshot().matches({'edit mode': 'read only'}),\n schema: context.schema,\n }),\n nativeEvent: event.nativeEvent,\n sendBack: (eventSentBack) => {\n if (eventSentBack.type === 'set drag ghost') {\n self.send(eventSentBack)\n return\n }\n\n self.send(\n rerouteExternalBehaviorEvent({\n event: eventSentBack,\n slateEditor: event.editor,\n }),\n )\n },\n })\n } catch (error) {\n console.error(\n new Error(\n `Raising \"${event.behaviorEvent.type}\" failed due to: ${error.message}`,\n ),\n )\n }\n },\n 'sort behaviors': assign({\n behaviors: ({context}) =>\n !context.behaviorsSorted\n ? new Set(sortByPriority([...context.behaviors.values()]))\n : context.behaviors,\n behaviorsSorted: true,\n }),\n },\n guards: {\n 'slate is busy': ({context}) => {\n if (!context.slateEditor) {\n return false\n }\n\n return context.slateEditor.operations.length > 0\n },\n 'slate is normalizing node': ({context}) => {\n if (!context.slateEditor) {\n return false\n }\n\n return isNormalizingNode(context.slateEditor)\n },\n },\n}).createMachine({\n id: 'editor',\n context: ({input}) => ({\n behaviors: new Set(coreBehaviorsConfig),\n behaviorsSorted: false,\n converters: new Set(input.converters ?? []),\n getLegacySchema: input.getLegacySchema,\n keyGenerator: input.keyGenerator,\n pendingEvents: [],\n pendingIncomingPatchesEvents: [],\n schema: input.schema,\n selection: null,\n initialReadOnly: input.readOnly ?? false,\n maxBlocks: input.maxBlocks,\n initialValue: input.initialValue,\n }),\n on: {\n 'add behavior': {actions: 'add behavior to context'},\n 'remove behavior': {actions: 'remove behavior from context'},\n 'update maxBlocks': {\n actions: assign({maxBlocks: ({event}) => event.maxBlocks}),\n },\n 'add slate editor': {actions: 'add slate editor to context'},\n 'update selection': {\n actions: [\n assign({selection: ({event}) => event.selection}),\n emit(({event}) => ({...event, type: 'selection'})),\n ],\n },\n 'set drag ghost': {\n actions: assign({dragGhost: ({event}) => event.ghost}),\n },\n },\n type: 'parallel',\n states: {\n 'edit mode': {\n initial: 'read only',\n states: {\n 'read only': {\n initial: 'determine initial edit mode',\n on: {\n 'behavior event': {\n actions: ['sort behaviors', 'handle behavior event'],\n guard: ({event}) =>\n event.behaviorEvent.type === 'clipboard.copy' ||\n event.behaviorEvent.type === 'mouse.click' ||\n event.behaviorEvent.type === 'serialize' ||\n event.behaviorEvent.type === 'serialization.failure' ||\n event.behaviorEvent.type === 'serialization.success' ||\n event.behaviorEvent.type === 'select',\n },\n },\n states: {\n 'determine initial edit mode': {\n entry: [\n () => {\n debug(\n 'entry: edit mode->read only->determine initial edit mode',\n )\n },\n ],\n exit: [\n () => {\n debug(\n 'exit: edit mode->read only->determine initial edit mode',\n )\n },\n ],\n on: {\n 'done syncing value': [\n {\n target: '#editor.edit mode.read only.read only',\n guard: ({context}) => context.initialReadOnly,\n },\n {\n target: '#editor.edit mode.editable',\n },\n ],\n },\n },\n 'read only': {\n entry: [\n () => {\n debug('entry: edit mode->read only->read only')\n },\n ],\n exit: [\n () => {\n debug('exit: edit mode->read only->read only')\n },\n ],\n on: {\n 'update readOnly': {\n guard: ({event}) => !event.readOnly,\n target: '#editor.edit mode.editable',\n actions: ['emit editable'],\n },\n },\n },\n },\n },\n 'editable': {\n on: {\n 'update readOnly': {\n guard: ({event}) => event.readOnly,\n target: '#editor.edit mode.read only.read only',\n actions: ['emit read only'],\n },\n 'behavior event': {\n actions: ['sort behaviors', 'handle behavior event'],\n },\n 'blur': {\n actions: 'handle blur',\n },\n 'focus': {\n target: '.focusing',\n actions: [assign({slateEditor: ({event}) => event.editor})],\n },\n },\n initial: 'idle',\n states: {\n 'idle': {\n entry: [\n () => {\n debug('entry: edit mode->editable->idle')\n },\n ],\n exit: [\n () => {\n debug('exit: edit mode->editable-idle')\n },\n ],\n on: {\n dragstart: {\n actions: [\n assign({\n internalDrag: ({event}) => ({\n origin: event.origin,\n }),\n }),\n ],\n target: 'dragging internally',\n },\n },\n },\n 'focusing': {\n initial: 'checking if busy',\n states: {\n 'checking if busy': {\n entry: [\n () => {\n debug(\n 'entry: edit mode->editable->focusing->checking if busy',\n )\n },\n ],\n exit: [\n () => {\n debug(\n 'exit: edit mode->editable->focusing->checking if busy',\n )\n },\n ],\n always: [\n {\n guard: 'slate is busy',\n target: 'busy',\n },\n {\n target: '#editor.edit mode.editable.idle',\n actions: ['handle focus'],\n },\n ],\n },\n 'busy': {\n entry: [\n () => {\n debug('entry: edit mode->editable->focusing-busy')\n },\n ],\n exit: [\n () => {\n debug('exit: edit mode->editable->focusing->busy')\n },\n ],\n after: {\n 10: {\n target: 'checking if busy',\n },\n },\n },\n },\n },\n 'dragging internally': {\n entry: [\n () => {\n debug('entry: edit mode->editable->dragging internally')\n },\n ],\n exit: [\n () => {\n debug('exit: edit mode->editable->dragging internally')\n },\n ({context}) => {\n if (context.dragGhost) {\n try {\n context.dragGhost.parentNode?.removeChild(\n context.dragGhost,\n )\n } catch (error) {\n console.error(\n new Error(\n `Removing the drag ghost failed due to: ${error.message}`,\n ),\n )\n }\n }\n },\n assign({dragGhost: undefined}),\n assign({internalDrag: undefined}),\n ],\n tags: ['dragging internally'],\n on: {\n dragend: {target: 'idle'},\n drop: {target: 'idle'},\n },\n },\n },\n },\n },\n },\n 'setup': {\n initial: 'setting up',\n states: {\n 'setting up': {\n entry: [\n () => {\n debug('entry: setup->setting up')\n },\n ],\n exit: [\n () => {\n debug('exit: setup->setting up')\n },\n 'emit ready',\n 'emit pending incoming patches',\n 'clear pending incoming patches',\n ],\n on: {\n 'internal.patch': {\n actions: 'defer event',\n },\n 'mutation': {\n actions: 'defer event',\n },\n 'done syncing value': {\n target: 'set up',\n },\n 'patches': {\n actions: ['defer incoming patches'],\n },\n },\n },\n 'set up': {\n type: 'parallel',\n states: {\n 'value sync': {\n initial: 'idle',\n states: {\n 'idle': {\n entry: [\n () => {\n debug('entry: setup->set up->value sync->idle')\n },\n ],\n exit: [\n () => {\n debug('exit: setup->set up->value sync->idle')\n },\n ],\n on: {\n 'patches': {\n actions: [emit(({event}) => event)],\n },\n 'syncing value': {\n target: 'syncing value',\n },\n },\n },\n 'syncing value': {\n entry: [\n () => {\n debug('entry: setup->set up->value sync->syncing value')\n },\n ],\n exit: [\n () => {\n debug('exit: setup->set up->value sync->syncing value')\n },\n 'emit pending incoming patches',\n 'clear pending incoming patches',\n ],\n on: {\n 'patches': {\n actions: ['defer incoming patches'],\n },\n 'done syncing value': {\n target: 'idle',\n },\n },\n },\n },\n },\n 'writing': {\n initial: 'pristine',\n states: {\n pristine: {\n initial: 'idle',\n states: {\n idle: {\n entry: [\n () => {\n debug('entry: setup->set up->writing->pristine->idle')\n },\n ],\n exit: [\n () => {\n debug('exit: setup->set up->writing->pristine->idle')\n },\n ],\n on: {\n 'internal.patch': [\n {\n guard: 'slate is normalizing node',\n actions: 'defer event',\n },\n {\n actions: 'defer event',\n target: '#editor.setup.set up.writing.dirty',\n },\n ],\n 'mutation': [\n {\n guard: 'slate is normalizing node',\n actions: 'defer event',\n },\n {\n actions: 'defer event',\n target: '#editor.setup.set up.writing.dirty',\n },\n ],\n },\n },\n },\n },\n dirty: {\n entry: [\n () => {\n debug('entry: setup->set up->writing->dirty')\n },\n 'emit pending events',\n 'clear pending events',\n ],\n exit: [\n () => {\n debug('exit: setup->set up->writing->dirty')\n },\n ],\n on: {\n 'internal.patch': {\n actions: 'emit patch event',\n },\n 'mutation': {\n actions: 'emit mutation event',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n})\n","import type {Patch} from '@portabletext/patches'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {Editor} from 'slate'\nimport type {ActorRefFrom} from 'xstate'\nimport {\n and,\n assertEvent,\n assign,\n emit,\n enqueueActions,\n fromCallback,\n not,\n raise,\n setup,\n type AnyEventObject,\n} from 'xstate'\nimport {debugWithName} from '../internal-utils/debug'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\nimport type {PatchEvent} from './relay-machine'\n\nconst debug = debugWithName('mutation-machine')\n\nexport type MutationActor = ActorRefFrom<typeof mutationMachine>\n\n/**\n * Makes sure editor mutation events are debounced\n */\nexport const mutationMachine = setup({\n types: {\n context: {} as {\n pendingMutations: Array<{\n operationId?: string\n value: Array<PortableTextBlock> | undefined\n patches: Array<Patch>\n }>\n pendingPatchEvents: Array<PatchEvent>\n readOnly: boolean\n schema: EditorSchema\n slateEditor: PortableTextSlateEditor\n },\n events: {} as\n | {\n type: 'emit changes'\n }\n | {\n type: 'patch'\n patch: Patch\n operationId?: string\n value: Array<PortableTextBlock>\n }\n | {\n type: 'typing'\n }\n | {\n type: 'not typing'\n }\n | {\n type: 'update readOnly'\n readOnly: boolean\n },\n input: {} as {\n readOnly: boolean\n schema: EditorSchema\n slateEditor: PortableTextSlateEditor\n },\n emitted: {} as\n | {\n type: 'has pending mutations'\n }\n | {\n type: 'mutation'\n patches: Array<Patch>\n snapshot: Array<PortableTextBlock> | undefined\n }\n | PatchEvent,\n },\n actions: {\n 'assign readOnly': assign({\n readOnly: ({context, event}) =>\n event.type === 'update readOnly' ? event.readOnly : context.readOnly,\n }),\n 'emit patch': emit(({event}) => {\n assertEvent(event, 'patch')\n return {type: 'patch' as const, patch: event.patch}\n }),\n 'emit has pending mutations': emit({type: 'has pending mutations'}),\n 'emit mutations': enqueueActions(({context, enqueue}) => {\n for (const bulk of context.pendingMutations) {\n enqueue.emit({\n type: 'mutation',\n patches: bulk.patches,\n snapshot: bulk.value,\n })\n }\n }),\n 'clear pending mutations': assign({\n pendingMutations: [],\n }),\n 'defer mutation': assign({\n pendingMutations: ({context, event}) => {\n assertEvent(event, 'patch')\n\n if (context.pendingMutations.length === 0) {\n return [\n {\n operationId: event.operationId,\n value: event.value,\n patches: [event.patch],\n },\n ]\n }\n\n const lastBulk = context.pendingMutations.at(-1)\n\n if (lastBulk && lastBulk.operationId === event.operationId) {\n return context.pendingMutations.slice(0, -1).concat({\n value: event.value,\n operationId: lastBulk.operationId,\n patches: [...lastBulk.patches, event.patch],\n })\n }\n\n return context.pendingMutations.concat({\n value: event.value,\n operationId: event.operationId,\n patches: [event.patch],\n })\n },\n }),\n 'clear pending patch events': assign({\n pendingPatchEvents: [],\n }),\n 'defer patch': assign({\n pendingPatchEvents: ({context, event}) =>\n event.type === 'patch'\n ? [...context.pendingPatchEvents, event]\n : context.pendingPatchEvents,\n }),\n 'emit pending patch events': enqueueActions(({context, enqueue}) => {\n for (const event of context.pendingPatchEvents) {\n enqueue.emit(event)\n }\n }),\n },\n actors: {\n 'type listener': fromCallback<\n AnyEventObject,\n {slateEditor: PortableTextSlateEditor},\n {type: 'typing'} | {type: 'not typing'}\n >(({input, sendBack}) => {\n const originalApply = input.slateEditor.apply\n\n input.slateEditor.apply = (op) => {\n if (op.type === 'insert_text' || op.type === 'remove_text') {\n sendBack({type: 'typing'})\n } else {\n sendBack({type: 'not typing'})\n }\n originalApply(op)\n }\n\n return () => {\n input.slateEditor.apply = originalApply\n }\n }),\n 'mutation interval': fromCallback(({sendBack}) => {\n const interval = setInterval(\n () => {\n sendBack({type: 'emit changes'})\n },\n process.env.NODE_ENV === 'test' ? 250 : 1000,\n )\n\n return () => {\n clearInterval(interval)\n }\n }),\n },\n guards: {\n 'is read-only': ({context}) => context.readOnly,\n 'slate is normalizing': ({context}) =>\n Editor.isNormalizing(context.slateEditor),\n },\n delays: {\n 'type debounce': 250,\n },\n}).createMachine({\n id: 'mutation',\n context: ({input}) => ({\n pendingMutations: [],\n pendingPatchEvents: [],\n readOnly: input.readOnly,\n schema: input.schema,\n slateEditor: input.slateEditor,\n }),\n on: {\n 'update readOnly': {\n actions: ['assign readOnly'],\n },\n },\n type: 'parallel',\n states: {\n typing: {\n initial: 'idle',\n invoke: {\n src: 'type listener',\n input: ({context}) => ({slateEditor: context.slateEditor}),\n },\n states: {\n idle: {\n entry: [\n () => {\n debug('entry: typing->idle')\n },\n ],\n exit: [\n () => {\n debug('exit: typing->idle')\n debug('entry: typing->typing')\n },\n ],\n on: {\n typing: {\n target: 'typing',\n },\n },\n },\n typing: {\n after: {\n 'type debounce': {\n target: 'idle',\n actions: [\n raise({type: 'emit changes'}),\n () => {\n debug('exit: typing->typing')\n },\n ],\n },\n },\n on: {\n 'not typing': {\n target: 'idle',\n actions: [raise({type: 'emit changes'})],\n },\n 'typing': {\n target: 'typing',\n reenter: true,\n },\n },\n },\n },\n },\n mutations: {\n initial: 'idle',\n states: {\n 'idle': {\n entry: [\n () => {\n debug('entry: mutations->idle')\n },\n ],\n exit: [\n () => {\n debug('exit: mutations->idle')\n },\n ],\n on: {\n patch: [\n {\n guard: 'is read-only',\n actions: ['defer patch', 'defer mutation'],\n target: 'has pending mutations',\n },\n {\n actions: ['emit patch', 'defer mutation'],\n target: 'has pending mutations',\n },\n ],\n },\n },\n 'has pending mutations': {\n entry: [\n () => {\n debug('entry: mutations->has pending mutations')\n },\n 'emit has pending mutations',\n ],\n exit: [\n () => {\n debug('exit: mutations->has pending mutations')\n },\n ],\n invoke: {\n src: 'mutation interval',\n },\n on: {\n 'emit changes': {\n guard: and([not('is read-only'), 'slate is normalizing']),\n target: 'idle',\n actions: [\n 'emit pending patch events',\n 'clear pending patch events',\n 'emit mutations',\n 'clear pending mutations',\n ],\n },\n 'patch': [\n {\n guard: 'is read-only',\n actions: ['defer patch', 'defer mutation'],\n },\n {\n actions: ['emit patch', 'defer mutation'],\n },\n ],\n },\n },\n },\n },\n },\n})\n","import {isTextBlock} from '@portabletext/schema'\nimport type {\n Path,\n PortableTextBlock,\n PortableTextChild,\n PortableTextObject,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {\n Editor,\n Node,\n Range,\n Element as SlateElement,\n Text,\n Transforms,\n} from 'slate'\nimport type {DOMNode} from 'slate-dom'\nimport {ReactEditor} from 'slate-react'\nimport {buildIndexMaps} from '../../internal-utils/build-index-maps'\nimport {createPlaceholderBlock} from '../../internal-utils/create-placeholder-block'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {\n isListItemActive,\n isStyleActive,\n slateRangeToSelection,\n} from '../../internal-utils/slate-utils'\nimport {toSlateRange} from '../../internal-utils/to-slate-range'\nimport {fromSlateValue, toSlateValue} from '../../internal-utils/values'\nimport {getActiveAnnotationsMarks} from '../../selectors/selector.get-active-annotation-marks'\nimport {getActiveDecorators} from '../../selectors/selector.get-active-decorators'\nimport {getFocusBlock} from '../../selectors/selector.get-focus-block'\nimport {getFocusSpan} from '../../selectors/selector.get-focus-span'\nimport {getSelectedValue} from '../../selectors/selector.get-selected-value'\nimport {isActiveAnnotation} from '../../selectors/selector.is-active-annotation'\nimport type {\n EditableAPI,\n EditableAPIDeleteOptions,\n EditorSelection,\n PortableTextSlateEditor,\n} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {getEditorSnapshot} from '../editor-selector'\nimport {KEY_TO_VALUE_ELEMENT, SLATE_TO_PORTABLE_TEXT_RANGE} from '../weakMaps'\n\nconst debug = debugWithName('API:editable')\n\nexport function createEditableAPI(\n editor: PortableTextSlateEditor,\n editorActor: EditorActor,\n) {\n const types = editorActor.getSnapshot().context.schema\n\n const editableApi: EditableAPI = {\n focus: (): void => {\n editorActor.send({\n type: 'focus',\n editor,\n })\n },\n blur: (): void => {\n editorActor.send({\n type: 'blur',\n editor,\n })\n },\n toggleMark: (mark: string): void => {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'decorator.toggle',\n decorator: mark,\n },\n editor,\n })\n },\n toggleList: (listItem: string): void => {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'list item.toggle',\n listItem,\n },\n editor,\n })\n },\n toggleBlockStyle: (style: string): void => {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'style.toggle',\n style,\n },\n editor,\n })\n },\n isMarkActive: (mark: string): boolean => {\n const snapshot = getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: editor,\n })\n\n const activeDecorators = getActiveDecorators(snapshot)\n\n return activeDecorators.includes(mark)\n },\n marks: (): string[] => {\n const snapshot = getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: editor,\n })\n\n const activeAnnotations = getActiveAnnotationsMarks(snapshot)\n const activeDecorators = getActiveDecorators(snapshot)\n\n return [...activeAnnotations, ...activeDecorators]\n },\n undo: (): void => {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'history.undo',\n },\n editor,\n })\n },\n redo: (): void => {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'history.redo',\n },\n editor,\n })\n },\n select: (selection: EditorSelection): void => {\n const slateSelection = toSlateRange({\n context: {\n schema: editorActor.getSnapshot().context.schema,\n value: editor.value,\n selection,\n },\n blockIndexMap: editor.blockIndexMap,\n })\n\n if (slateSelection) {\n Transforms.select(editor, slateSelection)\n } else {\n Transforms.deselect(editor)\n }\n\n editor.onChange()\n },\n focusBlock: (): PortableTextBlock | undefined => {\n if (editor.selection) {\n const block = Node.descendant(\n editor,\n editor.selection.focus.path.slice(0, 1),\n )\n if (block) {\n return fromSlateValue(\n [block],\n types.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n )[0]\n }\n }\n return undefined\n },\n focusChild: (): PortableTextChild | undefined => {\n if (editor.selection) {\n const block = Node.descendant(\n editor,\n editor.selection.focus.path.slice(0, 1),\n )\n if (block && editor.isTextBlock(block)) {\n const ptBlock = fromSlateValue(\n [block],\n types.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n )[0] as PortableTextTextBlock\n return ptBlock.children[editor.selection.focus.path[1]]\n }\n }\n return undefined\n },\n insertChild: <TSchemaType extends {name: string}>(\n type: TSchemaType,\n value?: {[prop: string]: any},\n ): Path => {\n if (type.name !== types.span.name) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'insert.inline object',\n inlineObject: {\n name: type.name,\n value,\n },\n },\n editor,\n })\n\n return editor.selection\n ? (slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor,\n range: editor.selection,\n })?.focus.path ?? [])\n : []\n }\n\n if (!editor.selection) {\n throw new Error('The editor has no selection')\n }\n const [focusBlock] = Array.from(\n Editor.nodes(editor, {\n at: editor.selection.focus.path.slice(0, 1),\n match: (n) => n._type === types.block.name,\n }),\n )[0] || [undefined]\n if (!focusBlock) {\n throw new Error('No focused text block')\n }\n if (\n type.name !== types.span.name &&\n !types.inlineObjects.some((t) => t.name === type.name)\n ) {\n throw new Error(\n 'This type cannot be inserted as a child to a text block',\n )\n }\n const block = toSlateValue(\n [\n {\n _key: editorActor.getSnapshot().context.keyGenerator(),\n _type: types.block.name,\n children: [\n {\n _key: editorActor.getSnapshot().context.keyGenerator(),\n _type: type.name,\n ...(value ? value : {}),\n },\n ],\n },\n ],\n {schemaTypes: editorActor.getSnapshot().context.schema},\n )[0] as unknown as SlateElement\n const child = block.children[0]\n const focusChildPath = editor.selection.focus.path.slice(0, 2)\n const isSpanNode = child._type === types.span.name\n const focusNode = Node.get(editor, focusChildPath)\n\n // If we are inserting a span, and currently have focus on an inline object,\n // move the selection to the next span (guaranteed by normalizing rules) before inserting it.\n if (isSpanNode && focusNode._type !== types.span.name) {\n debug(\n 'Inserting span child next to inline object child, moving selection + 1',\n )\n editor.move({distance: 1, unit: 'character'})\n }\n\n Transforms.insertNodes(editor, child, {\n select: true,\n at: editor.selection,\n })\n editor.onChange()\n\n return editor.selection\n ? (slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor,\n range: editor.selection,\n })?.focus.path ?? [])\n : []\n },\n insertBlock: <TSchemaType extends {name: string}>(\n type: TSchemaType,\n value?: {[prop: string]: any},\n ): Path => {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'insert.block',\n block: {\n _type: type.name,\n ...(value ? value : {}),\n },\n placement: 'auto',\n },\n editor,\n })\n\n return editor.selection\n ? (slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor,\n range: editor.selection,\n })?.focus.path ?? [])\n : []\n },\n hasBlockStyle: (style: string): boolean => {\n try {\n return isStyleActive({editor, style})\n } catch {\n // This is fine.\n return false\n }\n },\n hasListStyle: (listItem: string): boolean => {\n try {\n return isListItemActive({editor, listItem})\n } catch {\n // This is fine.\n return false\n }\n },\n isVoid: (element: PortableTextBlock | PortableTextChild) => {\n return ![types.block.name, types.span.name].includes(element._type)\n },\n findByPath: (\n path: Path,\n ): [\n PortableTextBlock | PortableTextChild | undefined,\n Path | undefined,\n ] => {\n const slatePath = toSlateRange({\n context: {\n schema: editorActor.getSnapshot().context.schema,\n value: editor.value,\n selection: {focus: {path, offset: 0}, anchor: {path, offset: 0}},\n },\n blockIndexMap: editor.blockIndexMap,\n })\n\n if (slatePath) {\n const [block, blockPath] = Editor.node(\n editor,\n slatePath.focus.path.slice(0, 1),\n )\n if (block && blockPath && typeof block._key === 'string') {\n if (path.length === 1 && slatePath.focus.path.length === 1) {\n return [\n fromSlateValue([block], types.block.name)[0],\n [{_key: block._key}],\n ]\n }\n const ptBlock = fromSlateValue(\n [block],\n types.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n )[0]\n if (editor.isTextBlock(ptBlock)) {\n const ptChild = ptBlock.children[slatePath.focus.path[1]]\n if (ptChild) {\n return [\n ptChild,\n [{_key: block._key}, 'children', {_key: ptChild._key}],\n ]\n }\n }\n }\n }\n return [undefined, undefined]\n },\n findDOMNode: (\n element: PortableTextBlock | PortableTextChild,\n ): DOMNode | undefined => {\n let node: DOMNode | undefined\n try {\n const [item] = Array.from(\n Editor.nodes(editor, {\n at: [],\n match: (n) => n._key === element._key,\n }) || [],\n )[0] || [undefined]\n node = ReactEditor.toDOMNode(editor, item)\n } catch {\n // Nothing\n }\n return node\n },\n activeAnnotations: (): PortableTextObject[] => {\n if (!editor.selection || editor.selection.focus.path.length < 2) {\n return []\n }\n try {\n const activeAnnotations: PortableTextObject[] = []\n const spans = Editor.nodes(editor, {\n at: editor.selection,\n match: (node) =>\n Text.isText(node) &&\n node.marks !== undefined &&\n Array.isArray(node.marks) &&\n node.marks.length > 0,\n })\n for (const [span, path] of spans) {\n const [block] = Editor.node(editor, path, {depth: 1})\n if (editor.isTextBlock(block)) {\n block.markDefs?.forEach((def) => {\n if (\n Text.isText(span) &&\n span.marks &&\n Array.isArray(span.marks) &&\n span.marks.includes(def._key)\n ) {\n activeAnnotations.push(def)\n }\n })\n }\n }\n return activeAnnotations\n } catch {\n return []\n }\n },\n isAnnotationActive: (\n annotationType: PortableTextObject['_type'],\n ): boolean => {\n const snapshot = getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: editor,\n })\n\n return isActiveAnnotation(annotationType)(snapshot)\n },\n addAnnotation: (type, value) => {\n const snapshotBefore = getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: editor,\n })\n const selectedValueBefore = getSelectedValue(snapshotBefore)\n const focusSpanBefore = getFocusSpan(snapshotBefore)\n const markDefsBefore = selectedValueBefore.flatMap((block) => {\n if (isTextBlock(snapshotBefore.context, block)) {\n return block.markDefs ?? []\n }\n\n return []\n })\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'annotation.add',\n annotation: {name: type.name, value: value ?? {}},\n },\n editor,\n })\n\n const snapshotAfter = getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: editor,\n })\n\n const selectedValueAfter = getSelectedValue(snapshotAfter)\n const focusBlockAfter = getFocusBlock(snapshotAfter)\n const focusSpanAfter = getFocusSpan(snapshotAfter)\n\n const newMarkDefKeysOnFocusSpan = focusSpanAfter?.node.marks?.filter(\n (mark) =>\n !focusSpanBefore?.node.marks?.includes(mark) &&\n !snapshotAfter.context.schema.decorators\n .map((decorator) => decorator.name)\n .includes(mark),\n )\n const markDefsAfter = selectedValueAfter.flatMap((block) => {\n if (isTextBlock(snapshotAfter.context, block)) {\n return (\n block.markDefs?.map((markDef) => ({\n markDef,\n path: [{_key: block._key}, 'markDefs', {_key: markDef._key}],\n })) ?? []\n )\n }\n\n return []\n })\n const markDefs = markDefsAfter.filter(\n (markDef) =>\n !markDefsBefore.some(\n (markDefBefore) => markDefBefore._key === markDef.markDef._key,\n ),\n )\n const spanPath = focusSpanAfter?.path\n const markDef = markDefs.find((markDef) =>\n newMarkDefKeysOnFocusSpan?.some(\n (mark) => mark === markDef.markDef._key,\n ),\n )\n\n if (focusBlockAfter && spanPath && markDef) {\n return {\n markDefPath: markDef.path,\n markDefPaths: markDefs.map((markDef) => markDef.path),\n spanPath,\n }\n }\n },\n delete: (\n selection: EditorSelection,\n options?: EditableAPIDeleteOptions,\n ): void => {\n if (selection) {\n const range = toSlateRange({\n context: {\n schema: editorActor.getSnapshot().context.schema,\n value: editor.value,\n selection,\n },\n blockIndexMap: editor.blockIndexMap,\n })\n const hasRange =\n range && range.anchor.path.length > 0 && range.focus.path.length > 0\n if (!hasRange) {\n throw new Error('Invalid range')\n }\n if (range) {\n if (!options?.mode || options?.mode === 'selected') {\n debug(`Deleting content in selection`)\n Transforms.delete(editor, {\n at: range,\n hanging: true,\n voids: true,\n })\n editor.onChange()\n return\n }\n if (options?.mode === 'blocks') {\n debug(`Deleting blocks touched by selection`)\n Transforms.removeNodes(editor, {\n at: range,\n voids: true,\n match: (node) => {\n return (\n editor.isTextBlock(node) ||\n (!editor.isTextBlock(node) && SlateElement.isElement(node))\n )\n },\n })\n }\n if (options?.mode === 'children') {\n debug(`Deleting children touched by selection`)\n Transforms.removeNodes(editor, {\n at: range,\n voids: true,\n match: (node) => {\n return (\n node._type === types.span.name || // Text children\n (!editor.isTextBlock(node) && SlateElement.isElement(node)) // inline blocks\n )\n },\n })\n }\n // If the editor was emptied, insert a placeholder block\n // directly into the editor's children. We don't want to do this\n // through a Transform (because that would trigger a change event\n // that would insert the placeholder into the actual value\n // which should remain empty)\n if (editor.children.length === 0) {\n const placeholderBlock = createPlaceholderBlock(\n editorActor.getSnapshot().context,\n )\n editor.children = [placeholderBlock]\n editor.value = [placeholderBlock]\n\n buildIndexMaps(\n {\n schema: editorActor.getSnapshot().context.schema,\n value: editor.value,\n },\n {\n blockIndexMap: editor.blockIndexMap,\n listIndexMap: editor.listIndexMap,\n },\n )\n }\n\n editor.onChange()\n }\n }\n },\n removeAnnotation: <TSchemaType extends {name: string}>(\n type: TSchemaType,\n ): void => {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'annotation.remove',\n annotation: {name: type.name},\n },\n editor,\n })\n },\n getSelection: (): EditorSelection | null => {\n let ptRange: EditorSelection = null\n if (editor.selection) {\n const existing = SLATE_TO_PORTABLE_TEXT_RANGE.get(editor.selection)\n if (existing) {\n return existing\n }\n ptRange = slateRangeToSelection({\n schema: editorActor.getSnapshot().context.schema,\n editor,\n range: editor.selection,\n })\n SLATE_TO_PORTABLE_TEXT_RANGE.set(editor.selection, ptRange)\n }\n return ptRange\n },\n getValue: () => {\n return fromSlateValue(\n editor.children,\n types.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n )\n },\n isCollapsedSelection: () => {\n return !!editor.selection && Range.isCollapsed(editor.selection)\n },\n isExpandedSelection: () => {\n return !!editor.selection && Range.isExpanded(editor.selection)\n },\n insertBreak: () => {\n editor.insertBreak()\n editor.onChange()\n },\n getFragment: () => {\n return fromSlateValue(editor.getFragment(), types.block.name)\n },\n isSelectionsOverlapping: (\n selectionA: EditorSelection,\n selectionB: EditorSelection,\n ) => {\n // Convert the selections to Slate ranges\n const rangeA = toSlateRange({\n context: {\n schema: editorActor.getSnapshot().context.schema,\n value: editor.value,\n selection: selectionA,\n },\n blockIndexMap: editor.blockIndexMap,\n })\n const rangeB = toSlateRange({\n context: {\n schema: editorActor.getSnapshot().context.schema,\n value: editor.value,\n selection: selectionB,\n },\n blockIndexMap: editor.blockIndexMap,\n })\n\n // Make sure the ranges are valid\n const isValidRanges = Range.isRange(rangeA) && Range.isRange(rangeB)\n\n // Check if the ranges are overlapping\n const isOverlapping = isValidRanges && Range.includes(rangeA, rangeB)\n\n return isOverlapping\n },\n }\n\n return editableApi\n}\n","import type {Patch} from '@portabletext/patches'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {FocusEvent} from 'react'\nimport {assign, emit, setup, type ActorRefFrom} from 'xstate'\nimport type {EditorSelection, InvalidValueResolution} from '../types/editor'\n\n/**\n * @public\n */\nexport type EditorEmittedEvent =\n | {\n type: 'blurred'\n event: FocusEvent<HTMLDivElement, Element>\n }\n | {\n /**\n * @deprecated Will be removed in the next major version\n */\n type: 'done loading'\n }\n | {\n type: 'editable'\n }\n | ErrorEvent\n | {\n type: 'focused'\n event: FocusEvent<HTMLDivElement, Element>\n }\n | {\n type: 'invalid value'\n resolution: InvalidValueResolution | null\n value: Array<PortableTextBlock> | undefined\n }\n | {\n /**\n * @deprecated Will be removed in the next major version\n */\n type: 'loading'\n }\n | MutationEvent\n | PatchEvent\n | {\n type: 'read only'\n }\n | {\n type: 'ready'\n }\n | {\n type: 'selection'\n selection: EditorSelection\n }\n | {\n type: 'value changed'\n value: Array<PortableTextBlock> | undefined\n }\n\n/**\n * @deprecated The event is no longer emitted\n */\ntype ErrorEvent = {\n type: 'error'\n name: string\n description: string\n data: unknown\n}\n\nexport type InternalEditorEmittedEvent = EditorEmittedEvent | UnsetEvent\n\n/**\n * @public\n */\nexport type MutationEvent = {\n type: 'mutation'\n patches: Array<Patch>\n /**\n * @deprecated Use `value` instead\n */\n snapshot: Array<PortableTextBlock> | undefined\n value: Array<PortableTextBlock> | undefined\n}\n\nexport type PatchEvent = {\n type: 'patch'\n patch: Patch\n}\n\nexport type UnsetEvent = {\n /**\n * @deprecated Use `'patch'` events instead\n */\n type: 'unset'\n previousValue: Array<PortableTextBlock>\n}\n\nexport type RelayActor = ActorRefFrom<typeof relayMachine>\n\nexport const relayMachine = setup({\n types: {\n context: {} as {\n prevSelection: EditorSelection\n lastEventWasFocused: boolean\n },\n events: {} as InternalEditorEmittedEvent,\n emitted: {} as InternalEditorEmittedEvent,\n },\n}).createMachine({\n id: 'relay',\n context: {\n prevSelection: null,\n lastEventWasFocused: false,\n },\n on: {\n 'focused': {\n actions: [\n assign({\n lastEventWasFocused: true,\n }),\n emit(({event}) => event),\n ],\n },\n 'selection': [\n {\n guard: ({context}) => context.lastEventWasFocused,\n actions: [\n assign({\n prevSelection: ({event}) => event.selection,\n }),\n emit(({event}) => event),\n assign({\n lastEventWasFocused: false,\n }),\n ],\n },\n {\n guard: ({context, event}) => context.prevSelection !== event.selection,\n actions: [\n assign({\n prevSelection: ({event}) => event.selection,\n }),\n emit(({event}) => event),\n assign({\n lastEventWasFocused: false,\n }),\n ],\n },\n ],\n '*': {\n actions: [\n emit(({event}) => event),\n assign({\n lastEventWasFocused: false,\n }),\n ],\n },\n },\n})\n","import {insert, set, setIfMissing, unset} from '@portabletext/patches'\nimport {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextBlock,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {flatten, isPlainObject, uniq} from 'lodash'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {InvalidValueResolution} from '../types/editor'\n\nexport interface Validation {\n valid: boolean\n resolution: InvalidValueResolution | null\n value: PortableTextBlock[] | undefined\n}\n\nexport function validateValue(\n value: PortableTextBlock[] | undefined,\n types: EditorSchema,\n keyGenerator: () => string,\n): Validation {\n let resolution: InvalidValueResolution | null = null\n let valid = true\n const validChildTypes = [\n types.span.name,\n ...types.inlineObjects.map((t) => t.name),\n ]\n const validBlockTypes = [\n types.block.name,\n ...types.blockObjects.map((t) => t.name),\n ]\n\n // Undefined is allowed\n if (value === undefined) {\n return {valid: true, resolution: null, value}\n }\n // Only lengthy arrays are allowed in the editor.\n if (!Array.isArray(value) || value.length === 0) {\n return {\n valid: false,\n resolution: {\n patches: [unset([])],\n description:\n 'Editor value must be an array of Portable Text blocks, or undefined.',\n action: 'Unset the value',\n item: value,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.not-an-array.description',\n action: 'inputs.portable-text.invalid-value.not-an-array.action',\n },\n },\n value,\n }\n }\n if (\n value.some((blk: PortableTextBlock, index: number): boolean => {\n // Is the block an object?\n if (!isPlainObject(blk)) {\n resolution = {\n patches: [unset([index])],\n description: `Block must be an object, got ${String(blk)}`,\n action: `Unset invalid item`,\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.not-an-object.description',\n action: 'inputs.portable-text.invalid-value.not-an-object.action',\n values: {index},\n },\n }\n return true\n }\n // Test that every block has a _key prop\n if (!blk._key || typeof blk._key !== 'string') {\n resolution = {\n patches: [set({...blk, _key: keyGenerator()}, [index])],\n description: `Block at index ${index} is missing required _key.`,\n action: 'Set the block with a random _key value',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.missing-key.description',\n action: 'inputs.portable-text.invalid-value.missing-key.action',\n values: {index},\n },\n }\n return true\n }\n // Test that every block has valid _type\n if (!blk._type || !validBlockTypes.includes(blk._type)) {\n // Special case where block type is set to default 'block', but the block type is named something else according to the schema.\n if (blk._type === 'block') {\n const currentBlockTypeName = types.block.name\n resolution = {\n patches: [\n set({...blk, _type: currentBlockTypeName}, [{_key: blk._key}]),\n ],\n description: `Block with _key '${blk._key}' has invalid type name '${blk._type}'. According to the schema, the block type name is '${currentBlockTypeName}'`,\n action: `Use type '${currentBlockTypeName}'`,\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.incorrect-block-type.description',\n action:\n 'inputs.portable-text.invalid-value.incorrect-block-type.action',\n values: {key: blk._key, expectedTypeName: currentBlockTypeName},\n },\n }\n return true\n }\n\n // If the block has no `_type`, but aside from that is a valid Portable Text block\n if (\n !blk._type &&\n isTextBlock({schema: types}, {...blk, _type: types.block.name})\n ) {\n resolution = {\n patches: [\n set({...blk, _type: types.block.name}, [{_key: blk._key}]),\n ],\n description: `Block with _key '${blk._key}' is missing a type name. According to the schema, the block type name is '${types.block.name}'`,\n action: `Use type '${types.block.name}'`,\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.missing-block-type.description',\n action:\n 'inputs.portable-text.invalid-value.missing-block-type.action',\n values: {key: blk._key, expectedTypeName: types.block.name},\n },\n }\n return true\n }\n\n if (!blk._type) {\n resolution = {\n patches: [unset([{_key: blk._key}])],\n description: `Block with _key '${blk._key}' is missing an _type property`,\n action: 'Remove the block',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.missing-type.description',\n action: 'inputs.portable-text.invalid-value.missing-type.action',\n values: {key: blk._key},\n },\n }\n return true\n }\n\n resolution = {\n patches: [unset([{_key: blk._key}])],\n description: `Block with _key '${blk._key}' has invalid _type '${blk._type}'`,\n action: 'Remove the block',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.disallowed-type.description',\n action: 'inputs.portable-text.invalid-value.disallowed-type.action',\n values: {key: blk._key, typeName: blk._type},\n },\n }\n return true\n }\n\n // Test regular text blocks\n if (blk._type === types.block.name) {\n const textBlock = blk as PortableTextTextBlock\n // Test that it has a valid children property (array)\n if (textBlock.children && !Array.isArray(textBlock.children)) {\n resolution = {\n patches: [set({children: []}, [{_key: textBlock._key}])],\n description: `Text block with _key '${textBlock._key}' has a invalid required property 'children'.`,\n action: 'Reset the children property',\n item: textBlock,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.missing-or-invalid-children.description',\n action:\n 'inputs.portable-text.invalid-value.missing-or-invalid-children.action',\n values: {key: textBlock._key},\n },\n }\n return true\n }\n // Test that children is set and lengthy\n if (\n textBlock.children === undefined ||\n (Array.isArray(textBlock.children) && textBlock.children.length === 0)\n ) {\n const newSpan = {\n _type: types.span.name,\n _key: keyGenerator(),\n text: '',\n marks: [],\n }\n resolution = {\n autoResolve: true,\n patches: [\n setIfMissing([], [{_key: blk._key}, 'children']),\n insert([newSpan], 'after', [{_key: blk._key}, 'children', 0]),\n ],\n description: `Children for text block with _key '${blk._key}' is empty.`,\n action: 'Insert an empty text',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.empty-children.description',\n action:\n 'inputs.portable-text.invalid-value.empty-children.action',\n values: {key: blk._key},\n },\n }\n return true\n }\n\n const allUsedMarks = uniq(\n flatten(\n textBlock.children\n .filter((child) => isSpan({schema: types}, child))\n .map((cld) => cld.marks || []),\n ),\n )\n\n // Test that all markDefs are in use (remove orphaned markDefs)\n if (Array.isArray(blk.markDefs) && blk.markDefs.length > 0) {\n const unusedMarkDefs: string[] = uniq(\n blk.markDefs\n .map((def) => def._key)\n .filter((key) => !allUsedMarks.includes(key)),\n )\n if (unusedMarkDefs.length > 0) {\n resolution = {\n autoResolve: true,\n patches: unusedMarkDefs.map((markDefKey) =>\n unset([{_key: blk._key}, 'markDefs', {_key: markDefKey}]),\n ),\n description: `Block contains orphaned data (unused mark definitions): ${unusedMarkDefs.join(\n ', ',\n )}.`,\n action: 'Remove unused mark definition item',\n item: blk,\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.orphaned-mark-defs.description',\n action:\n 'inputs.portable-text.invalid-value.orphaned-mark-defs.action',\n values: {\n key: blk._key,\n unusedMarkDefs: unusedMarkDefs.map((m) => m.toString()),\n },\n },\n }\n return true\n }\n }\n\n // Test that every annotation mark used has a definition\n const annotationMarks = allUsedMarks.filter(\n (mark) => !types.decorators.map((dec) => dec.name).includes(mark),\n )\n const orphanedMarks = annotationMarks.filter(\n (mark) =>\n textBlock.markDefs === undefined ||\n !textBlock.markDefs.find((def) => def._key === mark),\n )\n if (orphanedMarks.length > 0) {\n const spanChildren = textBlock.children.filter(\n (cld) =>\n cld._type === types.span.name &&\n Array.isArray(cld.marks) &&\n cld.marks.some((mark) => orphanedMarks.includes(mark)),\n ) as PortableTextSpan[]\n if (spanChildren) {\n const orphaned = orphanedMarks.join(', ')\n resolution = {\n autoResolve: true,\n patches: spanChildren.map((child) => {\n return set(\n (child.marks || []).filter(\n (cMrk) => !orphanedMarks.includes(cMrk),\n ),\n [{_key: blk._key}, 'children', {_key: child._key}, 'marks'],\n )\n }),\n description: `Block with _key '${blk._key}' contains marks (${orphaned}) not supported by the current content model.`,\n action: 'Remove invalid marks',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.orphaned-marks.description',\n action:\n 'inputs.portable-text.invalid-value.orphaned-marks.action',\n values: {\n key: blk._key,\n orphanedMarks: orphanedMarks.map((m) => m.toString()),\n },\n },\n }\n return true\n }\n }\n\n // Test every child\n if (\n textBlock.children.some((child, cIndex: number) => {\n if (!isPlainObject(child)) {\n resolution = {\n patches: [unset([{_key: blk._key}, 'children', cIndex])],\n description: `Child at index '${cIndex}' in block with key '${blk._key}' is not an object.`,\n action: 'Remove the item',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.non-object-child.description',\n action:\n 'inputs.portable-text.invalid-value.non-object-child.action',\n values: {key: blk._key, index: cIndex},\n },\n }\n return true\n }\n\n if (!child._key || typeof child._key !== 'string') {\n const newChild = {...child, _key: keyGenerator()}\n resolution = {\n autoResolve: true,\n patches: [\n set(newChild, [{_key: blk._key}, 'children', cIndex]),\n ],\n description: `Child at index ${cIndex} is missing required _key in block with _key ${blk._key}.`,\n action: 'Set a new random _key on the object',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.missing-child-key.description',\n action:\n 'inputs.portable-text.invalid-value.missing-child-key.action',\n values: {key: blk._key, index: cIndex},\n },\n }\n return true\n }\n\n // Verify that children have valid types\n if (!child._type) {\n resolution = {\n patches: [\n unset([{_key: blk._key}, 'children', {_key: child._key}]),\n ],\n description: `Child with _key '${child._key}' in block with key '${blk._key}' is missing '_type' property.`,\n action: 'Remove the object',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.missing-child-type.description',\n action:\n 'inputs.portable-text.invalid-value.missing-child-type.action',\n values: {key: blk._key, childKey: child._key},\n },\n }\n return true\n }\n\n if (!validChildTypes.includes(child._type)) {\n resolution = {\n patches: [\n unset([{_key: blk._key}, 'children', {_key: child._key}]),\n ],\n description: `Child with _key '${child._key}' in block with key '${blk._key}' has invalid '_type' property (${child._type}).`,\n action: 'Remove the object',\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.disallowed-child-type.description',\n action:\n 'inputs.portable-text.invalid-value.disallowed-child-type.action',\n values: {\n key: blk._key,\n childKey: child._key,\n childType: child._type,\n },\n },\n }\n return true\n }\n\n // Verify that spans have .text property that is a string\n if (\n child._type === types.span.name &&\n typeof child.text !== 'string'\n ) {\n resolution = {\n patches: [\n set({...child, text: ''}, [\n {_key: blk._key},\n 'children',\n {_key: child._key},\n ]),\n ],\n description: `Child with _key '${child._key}' in block with key '${blk._key}' has missing or invalid text property!`,\n action: `Write an empty text property to the object`,\n item: blk,\n\n i18n: {\n description:\n 'inputs.portable-text.invalid-value.invalid-span-text.description',\n action:\n 'inputs.portable-text.invalid-value.invalid-span-text.action',\n values: {key: blk._key, childKey: child._key},\n },\n }\n return true\n }\n return false\n })\n ) {\n valid = false\n }\n }\n return false\n })\n ) {\n valid = false\n }\n return {valid, resolution, value}\n}\n","import type {Patch} from '@portabletext/patches'\nimport {isSpan} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport {deleteText, Editor, Transforms, type Descendant, type Node} from 'slate'\nimport type {ActorRefFrom} from 'xstate'\nimport {\n and,\n assertEvent,\n assign,\n emit,\n fromCallback,\n not,\n raise,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} from 'xstate'\nimport {debugWithName} from '../internal-utils/debug'\nimport {validateValue} from '../internal-utils/validateValue'\nimport {toSlateBlock, VOID_CHILD_KEY} from '../internal-utils/values'\nimport type {PickFromUnion} from '../type-utils'\nimport type {\n InvalidValueResolution,\n PortableTextSlateEditor,\n} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\nimport {withoutSaving} from './plugins/createWithUndoRedo'\nimport {isChangingRemotely, withRemoteChanges} from './withChanges'\nimport {withoutPatching} from './withoutPatching'\n\nconst debug = debugWithName('sync machine')\n\ntype SyncValueEvent =\n | {\n type: 'patch'\n patch: Patch\n }\n | {\n type: 'invalid value'\n resolution: InvalidValueResolution | null\n value: Array<PortableTextBlock> | undefined\n }\n | {\n type: 'value changed'\n value: Array<PortableTextBlock> | undefined\n }\n | {\n type: 'done syncing'\n value: Array<PortableTextBlock> | undefined\n }\n\nconst syncValueCallback: CallbackLogicFunction<\n AnyEventObject,\n SyncValueEvent,\n {\n context: {\n keyGenerator: () => string\n previousValue: Array<PortableTextBlock> | undefined\n readOnly: boolean\n schema: EditorSchema\n }\n slateEditor: PortableTextSlateEditor\n streamBlocks: boolean\n value: Array<PortableTextBlock> | undefined\n }\n> = ({sendBack, input}) => {\n updateValue({\n context: input.context,\n sendBack,\n slateEditor: input.slateEditor,\n value: input.value,\n streamBlocks: input.streamBlocks,\n })\n}\n\nconst syncValueLogic = fromCallback(syncValueCallback)\n\nexport type SyncActor = ActorRefFrom<typeof syncMachine>\n\n/**\n * Sync value with the editor state\n *\n * Normally nothing here should apply, and the editor and the real world are perfectly aligned.\n *\n * Inconsistencies could happen though, so we need to check the editor state when the value changes.\n *\n * For performance reasons, it makes sense to also do the content validation here, as we already\n * iterate over the value and can validate only the new content that is actually changed.\n *\n * @internal\n */\nexport const syncMachine = setup({\n types: {\n context: {} as {\n initialValue: Array<PortableTextBlock> | undefined\n initialValueSynced: boolean\n isProcessingLocalChanges: boolean\n keyGenerator: () => string\n schema: EditorSchema\n readOnly: boolean\n slateEditor: PortableTextSlateEditor\n pendingValue: Array<PortableTextBlock> | undefined\n previousValue: Array<PortableTextBlock> | undefined\n },\n input: {} as {\n initialValue: Array<PortableTextBlock> | undefined\n keyGenerator: () => string\n schema: EditorSchema\n readOnly: boolean\n slateEditor: PortableTextSlateEditor\n },\n events: {} as\n | {\n type: 'has pending mutations'\n }\n | {\n type: 'mutation'\n }\n | {\n type: 'update value'\n value: Array<PortableTextBlock> | undefined\n }\n | {\n type: 'update readOnly'\n readOnly: boolean\n }\n | SyncValueEvent,\n emitted: {} as\n | PickFromUnion<\n SyncValueEvent,\n 'type',\n 'invalid value' | 'patch' | 'value changed'\n >\n | {type: 'done syncing value'}\n | {type: 'syncing value'},\n },\n actions: {\n 'assign initial value synced': assign({\n initialValueSynced: true,\n }),\n 'assign readOnly': assign({\n readOnly: ({event}) => {\n assertEvent(event, 'update readOnly')\n return event.readOnly\n },\n }),\n 'assign pending value': assign({\n pendingValue: ({event}) => {\n assertEvent(event, 'update value')\n return event.value\n },\n }),\n 'clear pending value': assign({\n pendingValue: undefined,\n }),\n 'assign previous value': assign({\n previousValue: ({event}) => {\n assertEvent(event, 'done syncing')\n return event.value\n },\n }),\n 'emit done syncing value': emit({\n type: 'done syncing value',\n }),\n 'emit syncing value': emit({\n type: 'syncing value',\n }),\n },\n guards: {\n 'initial value synced': ({context}) => context.initialValueSynced,\n 'is busy': ({context}) => {\n const isProcessingLocalChanges = context.isProcessingLocalChanges\n const isChanging = isChangingRemotely(context.slateEditor) ?? false\n const isBusy = isProcessingLocalChanges || isChanging\n\n debug('isBusy', {isBusy, isProcessingLocalChanges, isChanging})\n\n return isBusy\n },\n 'is empty value': ({event}) => {\n return event.type === 'update value' && event.value === undefined\n },\n 'is empty array': ({event}) => {\n return (\n event.type === 'update value' &&\n Array.isArray(event.value) &&\n event.value.length === 0\n )\n },\n 'is new value': ({context, event}) => {\n return (\n event.type === 'update value' && context.previousValue !== event.value\n )\n },\n 'value changed while syncing': ({context, event}) => {\n assertEvent(event, 'done syncing')\n return context.pendingValue !== event.value\n },\n 'pending value equals previous value': ({context}) => {\n return isEqual(context.pendingValue, context.previousValue)\n },\n },\n actors: {\n 'sync value': syncValueLogic,\n },\n}).createMachine({\n id: 'sync',\n context: ({input}) => ({\n initialValue: input.initialValue,\n initialValueSynced: false,\n isProcessingLocalChanges: false,\n keyGenerator: input.keyGenerator,\n schema: input.schema,\n readOnly: input.readOnly,\n slateEditor: input.slateEditor,\n pendingValue: undefined,\n previousValue: undefined,\n }),\n entry: [\n raise(({context}) => {\n return {type: 'update value', value: context.initialValue}\n }),\n ],\n on: {\n 'has pending mutations': {\n actions: assign({\n isProcessingLocalChanges: true,\n }),\n },\n 'mutation': {\n actions: assign({\n isProcessingLocalChanges: false,\n }),\n },\n 'update readOnly': {\n actions: ['assign readOnly'],\n },\n },\n initial: 'idle',\n states: {\n idle: {\n entry: [\n () => {\n debug('entry: syncing->idle')\n },\n ],\n exit: [\n () => {\n debug('exit: syncing->idle')\n },\n ],\n on: {\n 'update value': [\n {\n guard: and(['is empty value', not('initial value synced')]),\n actions: ['assign initial value synced', 'emit done syncing value'],\n },\n {\n guard: and(['is empty array', not('initial value synced')]),\n actions: [\n 'assign initial value synced',\n emit({type: 'value changed', value: []}),\n 'emit done syncing value',\n ],\n },\n {\n guard: and(['is busy', 'is new value']),\n target: 'busy',\n actions: ['assign pending value'],\n },\n {\n guard: 'is new value',\n target: 'syncing',\n actions: ['assign pending value'],\n },\n {\n guard: not('initial value synced'),\n actions: [\n () => {\n debug('no new value – setting initial value as synced')\n },\n 'assign initial value synced',\n 'emit done syncing value',\n ],\n },\n {\n actions: [\n () => {\n debug('no new value and initial value already synced')\n },\n ],\n },\n ],\n },\n },\n busy: {\n entry: [\n () => {\n debug('entry: syncing->busy')\n },\n ],\n exit: [\n () => {\n debug('exit: syncing->busy')\n },\n ],\n after: {\n 1000: [\n {\n guard: 'is busy',\n target: '.',\n reenter: true,\n actions: [\n () => {\n debug('reenter: syncing->busy')\n },\n ],\n },\n {\n target: 'syncing',\n },\n ],\n },\n on: {\n 'update value': [\n {\n guard: 'is new value',\n actions: ['assign pending value'],\n },\n ],\n },\n },\n syncing: {\n entry: [\n () => {\n debug('entry: syncing->syncing')\n },\n 'emit syncing value',\n ],\n exit: [\n () => {\n debug('exit: syncing->syncing')\n },\n 'emit done syncing value',\n ],\n invoke: {\n src: 'sync value',\n id: 'sync value',\n input: ({context}) => {\n return {\n context: {\n keyGenerator: context.keyGenerator,\n previousValue: context.previousValue,\n readOnly: context.readOnly,\n schema: context.schema,\n },\n slateEditor: context.slateEditor,\n streamBlocks: !context.initialValueSynced,\n value: context.pendingValue,\n }\n },\n },\n on: {\n 'update value': {\n guard: 'is new value',\n actions: ['assign pending value'],\n },\n 'patch': {\n actions: [emit(({event}) => event)],\n },\n 'invalid value': {\n actions: [emit(({event}) => event)],\n },\n 'value changed': {\n actions: [emit(({event}) => event)],\n },\n 'done syncing': [\n {\n guard: 'value changed while syncing',\n actions: ['assign previous value', 'assign initial value synced'],\n target: 'syncing',\n reenter: true,\n },\n {\n target: 'idle',\n actions: [\n 'clear pending value',\n 'assign previous value',\n 'assign initial value synced',\n ],\n },\n ],\n },\n },\n },\n})\n\nasync function updateValue({\n context,\n sendBack,\n slateEditor,\n streamBlocks,\n value,\n}: {\n context: {\n keyGenerator: () => string\n previousValue: Array<PortableTextBlock> | undefined\n readOnly: boolean\n schema: EditorSchema\n }\n sendBack: (event: SyncValueEvent) => void\n slateEditor: PortableTextSlateEditor\n streamBlocks: boolean\n value: PortableTextBlock[] | undefined\n}) {\n let doneSyncing = false\n let isChanged = false\n let isValid = true\n\n const hadSelection = !!slateEditor.selection\n\n if (!value || value.length === 0) {\n debug('Value is empty')\n\n clearEditor({\n slateEditor,\n doneSyncing,\n hadSelection,\n })\n\n isChanged = true\n }\n\n // Remove, replace or add nodes according to what is changed.\n if (value && value.length > 0) {\n if (streamBlocks) {\n await new Promise<void>((resolve) => {\n if (doneSyncing) {\n resolve()\n return\n }\n\n isChanged = removeExtraBlocks({\n slateEditor,\n value,\n })\n\n const processBlocks = async () => {\n for await (const [\n currentBlock,\n currentBlockIndex,\n ] of getStreamedBlocks({\n value,\n })) {\n const {blockChanged, blockValid} = syncBlock({\n context,\n sendBack,\n block: currentBlock,\n index: currentBlockIndex,\n slateEditor,\n value,\n })\n\n isChanged = blockChanged || isChanged\n isValid = isValid && blockValid\n\n if (!isValid) {\n break\n }\n }\n\n resolve()\n }\n\n processBlocks()\n })\n } else {\n if (doneSyncing) {\n return\n }\n\n isChanged = removeExtraBlocks({\n slateEditor,\n value,\n })\n\n let index = 0\n\n for (const block of value) {\n const {blockChanged, blockValid} = syncBlock({\n context,\n sendBack,\n block,\n index,\n slateEditor,\n value,\n })\n\n isChanged = blockChanged || isChanged\n isValid = isValid && blockValid\n\n if (!blockValid) {\n break\n }\n\n index++\n }\n }\n }\n\n if (!isValid) {\n debug('Invalid value, returning')\n\n doneSyncing = true\n\n sendBack({type: 'done syncing', value})\n\n return\n }\n\n if (isChanged) {\n debug('Server value changed, syncing editor')\n try {\n slateEditor.onChange()\n } catch (err) {\n console.error(err)\n\n sendBack({\n type: 'invalid value',\n resolution: null,\n value,\n })\n\n doneSyncing = true\n\n sendBack({type: 'done syncing', value})\n\n return\n }\n\n if (hadSelection && !slateEditor.selection) {\n Transforms.select(slateEditor, {\n anchor: {path: [0, 0], offset: 0},\n focus: {path: [0, 0], offset: 0},\n })\n\n slateEditor.onChange()\n }\n\n sendBack({type: 'value changed', value})\n } else {\n debug('Server value and editor value is equal, no need to sync.')\n }\n\n doneSyncing = true\n\n sendBack({type: 'done syncing', value})\n}\n\nasync function* getStreamedBlocks({value}: {value: Array<PortableTextBlock>}) {\n let index = 0\n for await (const block of value) {\n if (index % 10 === 0) {\n await new Promise<void>((resolve) => setTimeout(resolve, 0))\n }\n yield [block, index] as const\n index++\n }\n}\n\n/**\n * Remove all blocks and insert a placeholder block\n */\nfunction clearEditor({\n slateEditor,\n doneSyncing,\n hadSelection,\n}: {\n slateEditor: PortableTextSlateEditor\n doneSyncing: boolean\n hadSelection: boolean\n}) {\n Editor.withoutNormalizing(slateEditor, () => {\n withoutSaving(slateEditor, () => {\n withRemoteChanges(slateEditor, () => {\n withoutPatching(slateEditor, () => {\n if (doneSyncing) {\n return\n }\n\n if (hadSelection) {\n Transforms.deselect(slateEditor)\n }\n\n const childrenLength = slateEditor.children.length\n\n slateEditor.children.forEach((_, index) => {\n Transforms.removeNodes(slateEditor, {\n at: [childrenLength - 1 - index],\n })\n })\n\n Transforms.insertNodes(\n slateEditor,\n slateEditor.pteCreateTextBlock({decorators: []}),\n {at: [0]},\n )\n\n // Add a new selection in the top of the document\n if (hadSelection) {\n Transforms.select(slateEditor, [0, 0])\n }\n })\n })\n })\n })\n}\n\n/**\n * Compare the length of the value and the length of the editor's children, and\n * remove blocks that have become superfluous\n */\nfunction removeExtraBlocks({\n slateEditor,\n value,\n}: {\n slateEditor: PortableTextSlateEditor\n value: Array<PortableTextBlock>\n}) {\n let isChanged = false\n\n Editor.withoutNormalizing(slateEditor, () => {\n withRemoteChanges(slateEditor, () => {\n withoutPatching(slateEditor, () => {\n const childrenLength = slateEditor.children.length\n\n if (value.length < childrenLength) {\n for (let i = childrenLength - 1; i > value.length - 1; i--) {\n Transforms.removeNodes(slateEditor, {\n at: [i],\n })\n }\n\n isChanged = true\n }\n })\n })\n })\n\n return isChanged\n}\n\nfunction syncBlock({\n context,\n sendBack,\n block,\n index,\n slateEditor,\n value,\n}: {\n context: {\n keyGenerator: () => string\n previousValue: Array<PortableTextBlock> | undefined\n readOnly: boolean\n schema: EditorSchema\n }\n sendBack: (event: SyncValueEvent) => void\n block: PortableTextBlock\n index: number\n slateEditor: PortableTextSlateEditor\n value: Array<PortableTextBlock>\n}) {\n const oldBlock = slateEditor.children.at(index)\n\n if (!oldBlock) {\n // Insert the new block\n const validation = validateValue(\n [block],\n context.schema,\n context.keyGenerator,\n )\n\n if (debug.enabled)\n debug('Validating and inserting new block in the end of the value', block)\n\n if (validation.valid || validation.resolution?.autoResolve) {\n const slateBlock = toSlateBlock(block, {\n schemaTypes: context.schema,\n })\n\n Editor.withoutNormalizing(slateEditor, () => {\n withRemoteChanges(slateEditor, () => {\n withoutPatching(slateEditor, () => {\n Transforms.insertNodes(slateEditor, slateBlock, {\n at: [index],\n })\n })\n })\n })\n\n return {\n blockChanged: true,\n blockValid: true,\n }\n }\n\n debug('Invalid', validation)\n\n sendBack({\n type: 'invalid value',\n resolution: validation.resolution,\n value,\n })\n\n return {\n blockChanged: false,\n blockValid: false,\n }\n }\n\n if (isEqual(block, oldBlock)) {\n // Nothing to sync, skipping the block\n return {\n blockChanged: false,\n blockValid: true,\n }\n }\n\n const validationValue = [value[index]]\n const validation = validateValue(\n validationValue,\n context.schema,\n context.keyGenerator,\n )\n\n // Resolve validations that can be resolved automatically, without involving the user (but only if the value was changed)\n if (\n !validation.valid &&\n validation.resolution?.autoResolve &&\n validation.resolution?.patches.length > 0\n ) {\n // Only apply auto resolution if the value has been populated before and is different from the last one.\n if (\n !context.readOnly &&\n context.previousValue &&\n context.previousValue !== value\n ) {\n // Give a console warning about the fact that it did an auto resolution\n console.warn(\n `${validation.resolution.action} for block with _key '${validationValue[0]._key}'. ${validation.resolution?.description}`,\n )\n validation.resolution.patches.forEach((patch) => {\n sendBack({type: 'patch', patch})\n })\n }\n }\n\n if (validation.valid || validation.resolution?.autoResolve) {\n if (oldBlock._key === block._key) {\n if (debug.enabled) debug('Updating block', oldBlock, block)\n\n Editor.withoutNormalizing(slateEditor, () => {\n withRemoteChanges(slateEditor, () => {\n withoutPatching(slateEditor, () => {\n updateBlock({\n context,\n slateEditor,\n oldBlock,\n block,\n index,\n })\n })\n })\n })\n } else {\n if (debug.enabled) debug('Replacing block', oldBlock, block)\n\n Editor.withoutNormalizing(slateEditor, () => {\n withRemoteChanges(slateEditor, () => {\n withoutPatching(slateEditor, () => {\n replaceBlock({\n context,\n slateEditor,\n block,\n index,\n })\n })\n })\n })\n }\n\n return {\n blockChanged: true,\n blockValid: true,\n }\n } else {\n sendBack({\n type: 'invalid value',\n resolution: validation.resolution,\n value,\n })\n\n return {\n blockChanged: false,\n blockValid: false,\n }\n }\n}\n\nfunction replaceBlock({\n context,\n slateEditor,\n block,\n index,\n}: {\n context: {\n keyGenerator: () => string\n previousValue: Array<PortableTextBlock> | undefined\n readOnly: boolean\n schema: EditorSchema\n }\n slateEditor: PortableTextSlateEditor\n block: PortableTextBlock\n index: number\n}) {\n const slateBlock = toSlateBlock(block, {\n schemaTypes: context.schema,\n })\n\n // While replacing the block and the current selection focus is on the replaced block,\n // temporarily deselect the editor then optimistically try to restore the selection afterwards.\n const currentSelection = slateEditor.selection\n const selectionFocusOnBlock =\n currentSelection && currentSelection.focus.path[0] === index\n\n if (selectionFocusOnBlock) {\n Transforms.deselect(slateEditor)\n }\n\n Transforms.removeNodes(slateEditor, {at: [index]})\n Transforms.insertNodes(slateEditor, slateBlock, {at: [index]})\n\n slateEditor.onChange()\n\n if (selectionFocusOnBlock) {\n Transforms.select(slateEditor, currentSelection)\n }\n}\n\nfunction updateBlock({\n context,\n slateEditor,\n oldBlock,\n block,\n index,\n}: {\n context: {\n keyGenerator: () => string\n previousValue: Array<PortableTextBlock> | undefined\n readOnly: boolean\n schema: EditorSchema\n }\n slateEditor: PortableTextSlateEditor\n oldBlock: Descendant\n block: PortableTextBlock\n index: number\n}) {\n const slateBlock = toSlateBlock(block, {\n schemaTypes: context.schema,\n })\n\n // Update the root props on the block\n Transforms.setNodes(slateEditor, slateBlock as Partial<Node>, {\n at: [index],\n })\n\n // Text block's need to have their children updated as well (setNode does not target a node's children)\n if (\n slateEditor.isTextBlock(slateBlock) &&\n slateEditor.isTextBlock(oldBlock)\n ) {\n const oldBlockChildrenLength = oldBlock.children.length\n if (slateBlock.children.length < oldBlockChildrenLength) {\n // Remove any children that have become superfluous\n Array.from(\n Array(oldBlockChildrenLength - slateBlock.children.length),\n ).forEach((_, index) => {\n const childIndex = oldBlockChildrenLength - 1 - index\n\n if (childIndex > 0) {\n debug('Removing child')\n\n Transforms.removeNodes(slateEditor, {\n at: [index, childIndex],\n })\n }\n })\n }\n\n slateBlock.children.forEach((currentBlockChild, currentBlockChildIndex) => {\n const oldBlockChild = oldBlock.children[currentBlockChildIndex]\n const isChildChanged = !isEqual(currentBlockChild, oldBlockChild)\n const isTextChanged = !isEqual(\n currentBlockChild.text,\n oldBlockChild?.text,\n )\n const path = [index, currentBlockChildIndex]\n\n if (isChildChanged) {\n // Update if this is the same child\n if (currentBlockChild._key === oldBlockChild?._key) {\n debug('Updating changed child', currentBlockChild, oldBlockChild)\n\n Transforms.setNodes(slateEditor, currentBlockChild as Partial<Node>, {\n at: path,\n })\n\n const isSpanNode =\n isSpan({schema: context.schema}, currentBlockChild) &&\n isSpan({schema: context.schema}, oldBlockChild)\n\n if (isSpanNode && isTextChanged) {\n if (oldBlockChild.text.length > 0) {\n deleteText(slateEditor, {\n at: {\n focus: {path, offset: 0},\n anchor: {path, offset: oldBlockChild.text.length},\n },\n })\n }\n\n Transforms.insertText(slateEditor, currentBlockChild.text, {\n at: path,\n })\n\n slateEditor.onChange()\n } else if (!isSpanNode) {\n // If it's a inline block, also update the void text node key\n debug('Updating changed inline object child', currentBlockChild)\n\n Transforms.setNodes(\n slateEditor,\n {_key: VOID_CHILD_KEY},\n {\n at: [...path, 0],\n voids: true,\n },\n )\n }\n } else if (oldBlockChild) {\n // Replace the child if _key's are different\n debug('Replacing child', currentBlockChild)\n\n Transforms.removeNodes(slateEditor, {\n at: [index, currentBlockChildIndex],\n })\n Transforms.insertNodes(slateEditor, currentBlockChild as Node, {\n at: [index, currentBlockChildIndex],\n })\n\n slateEditor.onChange()\n } else if (!oldBlockChild) {\n // Insert it if it didn't exist before\n debug('Inserting new child', currentBlockChild)\n\n Transforms.insertNodes(slateEditor, currentBlockChild as Node, {\n at: [index, currentBlockChildIndex],\n })\n\n slateEditor.onChange()\n }\n }\n })\n }\n}\n","import {\n compileSchemaDefinitionToPortableTextMemberSchemaTypes,\n createPortableTextMemberSchemaTypes,\n portableTextMemberSchemaTypesToSchema,\n} from '@portabletext/sanity-bridge'\nimport {compileSchema} from '@portabletext/schema'\nimport {createActor} from 'xstate'\nimport {createCoreConverters} from '../converters/converters.core'\nimport type {Editor, EditorConfig} from '../editor'\nimport {debugWithName} from '../internal-utils/debug'\nimport {compileType} from '../internal-utils/schema'\nimport {fromSlateValue} from '../internal-utils/values'\nimport {corePriority} from '../priority/priority.core'\nimport {createEditorPriority} from '../priority/priority.types'\nimport type {EditableAPI, PortableTextSlateEditor} from '../types/editor'\nimport {defaultKeyGenerator} from '../utils/key-generator'\nimport {createSlateEditor, type SlateEditor} from './create-slate-editor'\nimport {createEditorDom} from './editor-dom'\nimport type {EditorActor} from './editor-machine'\nimport {editorMachine, rerouteExternalBehaviorEvent} from './editor-machine'\nimport {getEditorSnapshot} from './editor-selector'\nimport {mutationMachine, type MutationActor} from './mutation-machine'\nimport {createEditableAPI} from './plugins/createWithEditableAPI'\nimport {relayMachine, type RelayActor} from './relay-machine'\nimport {syncMachine, type SyncActor} from './sync-machine'\nimport {KEY_TO_VALUE_ELEMENT} from './weakMaps'\n\nconst debug = debugWithName('setup')\n\nexport type InternalEditor = Editor & {\n _internal: {\n editable: EditableAPI\n editorActor: EditorActor\n slateEditor: SlateEditor\n }\n}\n\nexport function createInternalEditor(config: EditorConfig): {\n actors: {\n editorActor: EditorActor\n mutationActor: MutationActor\n relayActor: RelayActor\n syncActor: SyncActor\n }\n editor: InternalEditor\n subscriptions: Array<() => () => void>\n} {\n debug('Creating new Editor instance')\n\n const subscriptions: Array<() => () => void> = []\n const editorActor = createActor(editorMachine, {\n input: editorConfigToMachineInput(config),\n })\n const relayActor = createActor(relayMachine)\n const slateEditor = createSlateEditor({\n editorActor,\n relayActor,\n subscriptions,\n })\n const editable = createEditableAPI(slateEditor.instance, editorActor)\n const {mutationActor, syncActor} = createActors({\n editorActor,\n relayActor,\n slateEditor: slateEditor.instance,\n subscriptions,\n })\n\n const editor = {\n dom: createEditorDom(\n (event) => editorActor.send(event),\n slateEditor.instance,\n ),\n getSnapshot: () =>\n getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor.instance,\n }),\n registerBehavior: (behaviorConfig) => {\n const priority = createEditorPriority({\n name: 'custom',\n reference: {\n priority: corePriority,\n importance: 'higher',\n },\n })\n const behaviorConfigWithPriority = {\n ...behaviorConfig,\n priority,\n }\n\n editorActor.send({\n type: 'add behavior',\n behaviorConfig: behaviorConfigWithPriority,\n })\n\n return () => {\n editorActor.send({\n type: 'remove behavior',\n behaviorConfig: behaviorConfigWithPriority,\n })\n }\n },\n send: (event) => {\n switch (event.type) {\n case 'update value':\n syncActor.send(event)\n break\n\n case 'update readOnly':\n case 'patches':\n case 'update maxBlocks':\n editorActor.send(event)\n break\n\n default:\n editorActor.send(\n rerouteExternalBehaviorEvent({\n event,\n slateEditor: slateEditor.instance,\n }),\n )\n }\n },\n on: (event, listener) => {\n const subscription = relayActor.on(event, (event) => {\n switch (event.type) {\n case 'blurred':\n case 'done loading':\n case 'editable':\n case 'focused':\n case 'invalid value':\n case 'loading':\n case 'mutation':\n case 'patch':\n case 'read only':\n case 'ready':\n case 'selection':\n case 'value changed':\n listener(event)\n break\n }\n })\n\n return subscription\n },\n _internal: {\n editable,\n editorActor,\n slateEditor,\n },\n } satisfies InternalEditor\n\n return {\n actors: {\n editorActor,\n mutationActor,\n relayActor,\n syncActor,\n },\n editor,\n subscriptions,\n }\n}\n\nfunction editorConfigToMachineInput(config: EditorConfig) {\n const {legacySchema, schema} = compileSchemasFromEditorConfig(config)\n\n return {\n converters: createCoreConverters(legacySchema),\n getLegacySchema: () => legacySchema,\n keyGenerator: config.keyGenerator ?? defaultKeyGenerator,\n maxBlocks: config.maxBlocks,\n readOnly: config.readOnly,\n schema,\n initialValue: config.initialValue,\n } as const\n}\n\nfunction compileSchemasFromEditorConfig(config: EditorConfig) {\n const legacySchema = config.schemaDefinition\n ? compileSchemaDefinitionToPortableTextMemberSchemaTypes(\n config.schemaDefinition,\n )\n : createPortableTextMemberSchemaTypes(\n config.schema.hasOwnProperty('jsonType')\n ? config.schema\n : compileType(config.schema),\n )\n const schema = config.schemaDefinition\n ? compileSchema(config.schemaDefinition)\n : portableTextMemberSchemaTypesToSchema(legacySchema)\n\n return {\n legacySchema,\n schema,\n }\n}\n\nfunction createActors(config: {\n editorActor: EditorActor\n relayActor: RelayActor\n slateEditor: PortableTextSlateEditor\n subscriptions: Array<() => () => void>\n}): {\n mutationActor: MutationActor\n syncActor: SyncActor\n} {\n debug('Creating new Actors')\n\n const mutationActor = createActor(mutationMachine, {\n input: {\n readOnly: config.editorActor\n .getSnapshot()\n .matches({'edit mode': 'read only'}),\n schema: config.editorActor.getSnapshot().context.schema,\n slateEditor: config.slateEditor,\n },\n })\n\n const syncActor = createActor(syncMachine, {\n input: {\n initialValue: config.editorActor.getSnapshot().context.initialValue,\n keyGenerator: config.editorActor.getSnapshot().context.keyGenerator,\n readOnly: config.editorActor\n .getSnapshot()\n .matches({'edit mode': 'read only'}),\n schema: config.editorActor.getSnapshot().context.schema,\n slateEditor: config.slateEditor,\n },\n })\n\n config.subscriptions.push(() => {\n const subscription = mutationActor.on('*', (event) => {\n if (event.type === 'has pending mutations') {\n syncActor.send({type: 'has pending mutations'})\n }\n if (event.type === 'mutation') {\n syncActor.send({type: 'mutation'})\n config.editorActor.send({\n type: 'mutation',\n patches: event.patches,\n snapshot: event.snapshot,\n value: event.snapshot,\n })\n }\n if (event.type === 'patch') {\n config.relayActor.send(event)\n }\n })\n\n return () => {\n subscription.unsubscribe()\n }\n })\n\n config.subscriptions.push(() => {\n const subscription = syncActor.on('*', (event) => {\n switch (event.type) {\n case 'invalid value':\n config.relayActor.send(event)\n break\n case 'value changed':\n config.relayActor.send(event)\n break\n case 'patch':\n config.editorActor.send({\n ...event,\n type: 'internal.patch',\n value: fromSlateValue(\n config.slateEditor.children,\n config.editorActor.getSnapshot().context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(config.slateEditor),\n ),\n })\n break\n\n default:\n config.editorActor.send(event)\n }\n })\n\n return () => {\n subscription.unsubscribe()\n }\n })\n\n config.subscriptions.push(() => {\n const subscription = config.editorActor.subscribe((snapshot) => {\n if (snapshot.matches({'edit mode': 'read only'})) {\n mutationActor.send({type: 'update readOnly', readOnly: true})\n syncActor.send({type: 'update readOnly', readOnly: true})\n } else {\n mutationActor.send({type: 'update readOnly', readOnly: false})\n syncActor.send({type: 'update readOnly', readOnly: false})\n }\n })\n\n return () => {\n subscription.unsubscribe()\n }\n })\n\n config.subscriptions.push(() => {\n const subscription = config.editorActor.on('*', (event) => {\n switch (event.type) {\n case 'editable':\n case 'mutation':\n case 'ready':\n case 'read only':\n case 'selection':\n config.relayActor.send(event)\n break\n case 'internal.patch':\n mutationActor.send({...event, type: 'patch'})\n break\n }\n })\n\n return () => {\n subscription.unsubscribe()\n }\n })\n\n return {\n mutationActor,\n syncActor,\n }\n}\n","import type {EditorChange} from '../types/editor'\nimport type {InternalEditorEmittedEvent} from './relay-machine'\n\nexport function eventToChange(\n event: InternalEditorEmittedEvent,\n): EditorChange | undefined {\n switch (event.type) {\n case 'blurred': {\n return {type: 'blur', event: event.event}\n }\n case 'patch':\n return event\n case 'loading': {\n return {type: 'loading', isLoading: true}\n }\n case 'done loading': {\n return {type: 'loading', isLoading: false}\n }\n case 'focused': {\n return {type: 'focus', event: event.event}\n }\n case 'value changed': {\n return {type: 'value', value: event.value}\n }\n case 'invalid value': {\n return {\n type: 'invalidValue',\n resolution: event.resolution,\n value: event.value,\n }\n }\n case 'mutation': {\n return event\n }\n case 'ready': {\n return event\n }\n case 'selection': {\n return event\n }\n case 'unset': {\n return event\n }\n }\n}\n","import type {\n ArrayDefinition,\n ArraySchemaType,\n Path,\n PortableTextBlock,\n PortableTextChild,\n PortableTextObject,\n} from '@sanity/types'\nimport {\n Component,\n useEffect,\n type MutableRefObject,\n type PropsWithChildren,\n} from 'react'\nimport {Subject} from 'rxjs'\nimport {Slate} from 'slate-react'\nimport {debugWithName} from '../internal-utils/debug'\nimport {stopActor} from '../internal-utils/stop-actor'\nimport type {\n AddedAnnotationPaths,\n EditableAPI,\n EditableAPIDeleteOptions,\n EditorChange,\n EditorChanges,\n EditorSelection,\n PatchObservable,\n PortableTextMemberSchemaTypes,\n} from '../types/editor'\nimport {createInternalEditor, type InternalEditor} from './create-editor'\nimport {EditorActorContext} from './editor-actor-context'\nimport type {EditorActor} from './editor-machine'\nimport {eventToChange} from './event-to-change'\nimport {PortableTextEditorContext} from './hooks/usePortableTextEditor'\nimport type {MutationActor} from './mutation-machine'\nimport {RelayActorContext} from './relay-actor-context'\nimport type {RelayActor} from './relay-machine'\nimport type {SyncActor} from './sync-machine'\n\nconst debug = debugWithName('component:PortableTextEditor')\n\n/**\n * Props for the PortableTextEditor component\n *\n * @public\n * @deprecated Use `EditorProvider` instead\n */\nexport type PortableTextEditorProps<\n TEditor extends InternalEditor | undefined = undefined,\n> = PropsWithChildren<\n TEditor extends InternalEditor\n ? {\n /**\n * @internal\n */\n editor: TEditor\n }\n : {\n editor?: undefined\n\n /**\n * Function that gets called when the editor changes the value\n */\n onChange: (change: EditorChange) => void\n\n /**\n * Schema type for the portable text field\n */\n schemaType: ArraySchemaType<PortableTextBlock> | ArrayDefinition\n\n /**\n * Maximum number of blocks to allow within the editor\n */\n maxBlocks?: number | string\n\n /**\n * Function used to generate keys for array items (`_key`)\n */\n keyGenerator?: () => string\n\n /**\n * Observable of local and remote patches for the edited value.\n */\n patches$?: PatchObservable\n\n /**\n * Backward compatibility (renamed to patches$).\n */\n incomingPatches$?: PatchObservable\n\n /**\n * Whether or not the editor should be in read-only mode\n */\n readOnly?: boolean\n\n /**\n * The current value of the portable text field\n */\n value?: PortableTextBlock[]\n\n /**\n * A ref to the editor instance\n */\n editorRef?: MutableRefObject<PortableTextEditor | null>\n }\n>\n\n/**\n * The main Portable Text Editor component.\n * @public\n * @deprecated Use `EditorProvider` instead\n */\nexport class PortableTextEditor extends Component<\n PortableTextEditorProps<InternalEditor | undefined>\n> {\n public static displayName = 'PortableTextEditor'\n /**\n * An observable of all the editor changes.\n */\n public change$: EditorChanges = new Subject()\n /**\n * A lookup table for all the relevant schema types for this portable text type.\n */\n public schemaTypes: PortableTextMemberSchemaTypes\n /**\n * The editor instance\n */\n private editor: InternalEditor\n /*\n * The editor API (currently implemented with Slate).\n */\n private editable: EditableAPI\n\n private actors?: {\n editorActor: EditorActor\n mutationActor: MutationActor\n relayActor: RelayActor\n syncActor: SyncActor\n }\n\n private subscriptions: Array<() => () => void> = []\n private unsubscribers: Array<() => void> = []\n\n constructor(props: PortableTextEditorProps) {\n super(props)\n\n if (props.editor) {\n this.editor = props.editor as InternalEditor\n this.schemaTypes = this.editor._internal.editorActor\n .getSnapshot()\n .context.getLegacySchema()\n } else {\n const {actors, editor, subscriptions} = createInternalEditor({\n initialValue: props.value,\n keyGenerator: props.keyGenerator,\n maxBlocks:\n props.maxBlocks === undefined\n ? undefined\n : Number.parseInt(props.maxBlocks.toString(), 10),\n readOnly: props.readOnly,\n schema: props.schemaType,\n })\n\n this.subscriptions = subscriptions\n this.actors = actors\n\n this.editor = editor\n this.schemaTypes = actors.editorActor\n .getSnapshot()\n .context.getLegacySchema()\n }\n\n this.editable = this.editor._internal.editable\n }\n\n componentDidMount(): void {\n if (!this.actors) {\n return\n }\n\n for (const subscription of this.subscriptions) {\n this.unsubscribers.push(subscription())\n }\n\n const relayActorSubscription = this.actors.relayActor.on('*', (event) => {\n const change = eventToChange(event)\n\n if (!change) {\n return\n }\n\n if (!this.props.editor) {\n this.props.onChange(change)\n }\n\n this.change$.next(change)\n })\n\n this.unsubscribers.push(relayActorSubscription.unsubscribe)\n\n this.actors.editorActor.start()\n this.actors.mutationActor.start()\n this.actors.relayActor.start()\n this.actors.syncActor.start()\n }\n\n componentDidUpdate(prevProps: PortableTextEditorProps) {\n // Set up the schema type lookup table again if the source schema type changes\n if (\n !this.props.editor &&\n !prevProps.editor &&\n this.props.schemaType !== prevProps.schemaType\n ) {\n console.warn('Updating schema type is no longer supported')\n }\n\n if (!this.props.editor && !prevProps.editor) {\n if (this.props.readOnly !== prevProps.readOnly) {\n this.editor._internal.editorActor.send({\n type: 'update readOnly',\n readOnly: this.props.readOnly ?? false,\n })\n }\n\n if (this.props.maxBlocks !== prevProps.maxBlocks) {\n this.editor._internal.editorActor.send({\n type: 'update maxBlocks',\n maxBlocks:\n this.props.maxBlocks === undefined\n ? undefined\n : Number.parseInt(this.props.maxBlocks.toString(), 10),\n })\n }\n\n if (this.props.value !== prevProps.value) {\n this.editor.send({\n type: 'update value',\n value: this.props.value,\n })\n }\n\n if (\n this.props.editorRef !== prevProps.editorRef &&\n this.props.editorRef\n ) {\n this.props.editorRef.current = this\n }\n }\n }\n\n componentWillUnmount(): void {\n for (const unsubscribe of this.unsubscribers) {\n unsubscribe()\n }\n\n if (this.actors) {\n stopActor(this.actors.editorActor)\n stopActor(this.actors.mutationActor)\n stopActor(this.actors.relayActor)\n stopActor(this.actors.syncActor)\n }\n }\n\n public setEditable = (editable: EditableAPI) => {\n this.editor._internal.editable = {\n ...this.editor._internal.editable,\n ...editable,\n }\n }\n\n render() {\n const legacyPatches = !this.props.editor\n ? (this.props.incomingPatches$ ?? this.props.patches$)\n : undefined\n\n return (\n <>\n {legacyPatches ? (\n <RoutePatchesObservableToEditorActor\n editorActor={this.editor._internal.editorActor}\n patches$={legacyPatches}\n />\n ) : null}\n <EditorActorContext.Provider value={this.editor._internal.editorActor}>\n <RelayActorContext.Provider value={this.actors!.relayActor}>\n <Slate\n editor={this.editor._internal.slateEditor.instance}\n initialValue={this.editor._internal.slateEditor.initialValue}\n >\n <PortableTextEditorContext.Provider value={this}>\n {this.props.children}\n </PortableTextEditorContext.Provider>\n </Slate>\n </RelayActorContext.Provider>\n </EditorActorContext.Provider>\n </>\n )\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const isActive = useEditorSelector(editor, selectors.getActiveAnnotations)\n * ```\n */\n static activeAnnotations = (\n editor: PortableTextEditor,\n ): PortableTextObject[] => {\n return editor && editor.editable ? editor.editable.activeAnnotations() : []\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const isActive = useEditorSelector(editor, selectors.isActiveAnnotation(...))\n * ```\n */\n static isAnnotationActive = (\n editor: PortableTextEditor,\n annotationType: PortableTextObject['_type'],\n ): boolean => {\n return editor && editor.editable\n ? editor.editable.isAnnotationActive(annotationType)\n : false\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'annotation.add',\n * annotation: {\n * name: '...',\n * value: {...},\n * }\n * })\n * ```\n */\n static addAnnotation = <TSchemaType extends {name: string}>(\n editor: PortableTextEditor,\n type: TSchemaType,\n value?: {[prop: string]: unknown},\n ): AddedAnnotationPaths | undefined =>\n editor.editable?.addAnnotation(type, value)\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'blur',\n * })\n * ```\n */\n static blur = (editor: PortableTextEditor): void => {\n debug('Host blurred')\n editor.editable?.blur()\n }\n\n static delete = (\n editor: PortableTextEditor,\n selection: EditorSelection,\n options?: EditableAPIDeleteOptions,\n ) => editor.editable?.delete(selection, options)\n\n static findDOMNode = (\n editor: PortableTextEditor,\n element: PortableTextBlock | PortableTextChild,\n ) => {\n return editor.editable?.findDOMNode(element)\n }\n\n static findByPath = (editor: PortableTextEditor, path: Path) => {\n return editor.editable?.findByPath(path) || []\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'focus',\n * })\n * ```\n */\n static focus = (editor: PortableTextEditor): void => {\n debug('Host requesting focus')\n editor.editable?.focus()\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const focusBlock = useEditorSelector(editor, selectors.getFocusBlock)\n * ```\n */\n static focusBlock = (editor: PortableTextEditor) => {\n return editor.editable?.focusBlock()\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const focusChild = useEditorSelector(editor, selectors.getFocusChild)\n * ```\n */\n static focusChild = (\n editor: PortableTextEditor,\n ): PortableTextChild | undefined => {\n return editor.editable?.focusChild()\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const selection = useEditorSelector(editor, selectors.getSelection)\n * ```\n */\n static getSelection = (editor: PortableTextEditor) => {\n return editor.editable ? editor.editable.getSelection() : null\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const value = useEditorSelector(editor, selectors.getValue)\n * ```\n */\n static getValue = (editor: PortableTextEditor) => {\n return editor.editable?.getValue()\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const isActive = useEditorSelector(editor, selectors.isActiveStyle(...))\n * ```\n */\n static hasBlockStyle = (editor: PortableTextEditor, blockStyle: string) => {\n return editor.editable?.hasBlockStyle(blockStyle)\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const isActive = useEditorSelector(editor, selectors.isActiveListItem(...))\n * ```\n */\n static hasListStyle = (editor: PortableTextEditor, listStyle: string) => {\n return editor.editable?.hasListStyle(listStyle)\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const isSelectionCollapsed = useEditorSelector(editor, selectors.isSelectionCollapsed)\n * ```\n */\n static isCollapsedSelection = (editor: PortableTextEditor) =>\n editor.editable?.isCollapsedSelection()\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const isSelectionExpanded = useEditorSelector(editor, selectors.isSelectionExpanded)\n * ```\n */\n static isExpandedSelection = (editor: PortableTextEditor) =>\n editor.editable?.isExpandedSelection()\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const isActive = useEditorSelector(editor, selectors.isActiveDecorator(...))\n * ```\n */\n static isMarkActive = (editor: PortableTextEditor, mark: string) =>\n editor.editable?.isMarkActive(mark)\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'insert.span',\n * text: '...',\n * annotations: [{name: '...', value: {...}}],\n * decorators: ['...'],\n * })\n * editor.send({\n * type: 'insert.inline object',\n * inlineObject: {\n * name: '...',\n * value: {...},\n * },\n * })\n * ```\n */\n static insertChild = <TSchemaType extends {name: string}>(\n editor: PortableTextEditor,\n type: TSchemaType,\n value?: {[prop: string]: unknown},\n ): Path | undefined => {\n debug(`Host inserting child`)\n return editor.editable?.insertChild(type, value)\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'insert.block object',\n * blockObject: {\n * name: '...',\n * value: {...},\n * },\n * placement: 'auto' | 'after' | 'before',\n * })\n * ```\n */\n static insertBlock = <TSchemaType extends {name: string}>(\n editor: PortableTextEditor,\n type: TSchemaType,\n value?: {[prop: string]: unknown},\n ): Path | undefined => {\n return editor.editable?.insertBlock(type, value)\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'insert.break',\n * })\n * ```\n */\n static insertBreak = (editor: PortableTextEditor): void => {\n return editor.editable?.insertBreak()\n }\n\n static isVoid = (\n editor: PortableTextEditor,\n element: PortableTextBlock | PortableTextChild,\n ) => {\n return editor.editable?.isVoid(element)\n }\n\n static isObjectPath = (_editor: PortableTextEditor, path: Path): boolean => {\n if (!path || !Array.isArray(path)) return false\n const isChildObjectEditPath = path.length > 3 && path[1] === 'children'\n const isBlockObjectEditPath = path.length > 1 && path[1] !== 'children'\n return isBlockObjectEditPath || isChildObjectEditPath\n }\n\n static marks = (editor: PortableTextEditor) => {\n return editor.editable?.marks()\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'select',\n * selection: {...},\n * })\n * ```\n */\n static select = (\n editor: PortableTextEditor,\n selection: EditorSelection | null,\n ) => {\n debug(`Host setting selection`, selection)\n editor.editable?.select(selection)\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'annotation.remove',\n * annotation: {\n * name: '...',\n * },\n * })\n * ```\n */\n static removeAnnotation = <TSchemaType extends {name: string}>(\n editor: PortableTextEditor,\n type: TSchemaType,\n ) => editor.editable?.removeAnnotation(type)\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'style.toggle',\n * style: '...',\n * })\n * ```\n */\n static toggleBlockStyle = (\n editor: PortableTextEditor,\n blockStyle: string,\n ) => {\n debug(`Host is toggling block style`)\n return editor.editable?.toggleBlockStyle(blockStyle)\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'list item.toggle',\n * listItem: '...',\n * })\n * ```\n */\n static toggleList = (editor: PortableTextEditor, listStyle: string): void => {\n return editor.editable?.toggleList(listStyle)\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'decorator.toggle',\n * decorator: '...',\n * })\n * ```\n */\n static toggleMark = (editor: PortableTextEditor, mark: string): void => {\n debug(`Host toggling mark`, mark)\n editor.editable?.toggleMark(mark)\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const selectedSlice = useEditorSelector(editor, selectors.getSelectedSlice)\n * ```\n */\n static getFragment = (\n editor: PortableTextEditor,\n ): PortableTextBlock[] | undefined => {\n return editor.editable?.getFragment()\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'history.undo',\n * })\n * ```\n */\n static undo = (editor: PortableTextEditor): void => {\n debug('Host undoing')\n editor.editable?.undo()\n }\n\n /**\n * @deprecated\n * Use `editor.send(...)` instead\n *\n * ```\n * const editor = useEditor()\n * editor.send({\n * type: 'history.redo',\n * })\n * ```\n */\n static redo = (editor: PortableTextEditor): void => {\n debug('Host redoing')\n editor.editable?.redo()\n }\n\n /**\n * @deprecated\n * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/\n *\n * ```\n * import * as selectors from '@portabletext/editor/selectors'\n * const editor = useEditor()\n * const isOverlapping = useEditorSelector(editor, selectors.isOverlappingSelection(selectionB))\n * ```\n */\n static isSelectionsOverlapping = (\n editor: PortableTextEditor,\n selectionA: EditorSelection,\n selectionB: EditorSelection,\n ) => {\n return editor.editable?.isSelectionsOverlapping(selectionA, selectionB)\n }\n}\n\nfunction RoutePatchesObservableToEditorActor(props: {\n editorActor: EditorActor\n patches$: PatchObservable\n}) {\n useEffect(() => {\n const subscription = props.patches$.subscribe((payload) => {\n props.editorActor.send({\n type: 'patches',\n ...payload,\n })\n })\n\n return () => {\n subscription.unsubscribe()\n }\n }, [props.editorActor, props.patches$])\n\n return null\n}\n","import type React from 'react'\nimport {useEffect, useState} from 'react'\nimport {Slate} from 'slate-react'\nimport type {EditorConfig} from '../editor'\nimport {stopActor} from '../internal-utils/stop-actor'\nimport {createInternalEditor} from './create-editor'\nimport {EditorActorContext} from './editor-actor-context'\nimport {EditorContext} from './editor-context'\nimport {eventToChange} from './event-to-change'\nimport {PortableTextEditorContext} from './hooks/usePortableTextEditor'\nimport {\n PortableTextEditor,\n type PortableTextEditorProps,\n} from './PortableTextEditor'\nimport {RelayActorContext} from './relay-actor-context'\n\n/**\n * @public\n */\nexport type EditorProviderProps = {\n initialConfig: EditorConfig\n children?: React.ReactNode\n}\n\n/**\n * @public\n * The EditorProvider component is used to set up the editor context and configure the Portable Text Editor.\n * @example\n * ```tsx\n * import {EditorProvider} from '@portabletext/editor'\n *\n * function App() {\n * return (\n * <EditorProvider initialConfig={{ ... }} >\n * ...\n * </EditorProvider>\n * )\n * }\n *\n * ```\n * @group Components\n */\nexport function EditorProvider(props: EditorProviderProps) {\n const [{internalEditor, portableTextEditor}] = useState(() => {\n const internalEditor = createInternalEditor(props.initialConfig)\n const portableTextEditor = new PortableTextEditor({\n editor: internalEditor.editor,\n } as unknown as PortableTextEditorProps)\n\n return {internalEditor, portableTextEditor}\n })\n\n useEffect(() => {\n const unsubscribers: Array<() => void> = []\n\n for (const subscription of internalEditor.subscriptions) {\n unsubscribers.push(subscription())\n }\n\n const relayActorSubscription = internalEditor.actors.relayActor.on(\n '*',\n (event) => {\n const change = eventToChange(event)\n\n if (change) {\n portableTextEditor.change$.next(change)\n }\n },\n )\n unsubscribers.push(relayActorSubscription.unsubscribe)\n\n internalEditor.actors.editorActor.start()\n internalEditor.actors.editorActor.send({\n type: 'add slate editor',\n editor: internalEditor.editor._internal.slateEditor.instance,\n })\n internalEditor.actors.mutationActor.start()\n internalEditor.actors.relayActor.start()\n internalEditor.actors.syncActor.start()\n\n return () => {\n for (const unsubscribe of unsubscribers) {\n unsubscribe()\n }\n\n stopActor(internalEditor.actors.editorActor)\n stopActor(internalEditor.actors.mutationActor)\n stopActor(internalEditor.actors.relayActor)\n stopActor(internalEditor.actors.syncActor)\n }\n }, [internalEditor, portableTextEditor])\n\n return (\n <EditorContext.Provider value={internalEditor.editor}>\n <EditorActorContext.Provider value={internalEditor.actors.editorActor}>\n <RelayActorContext.Provider value={internalEditor.actors.relayActor}>\n <Slate\n editor={internalEditor.editor._internal.slateEditor.instance}\n initialValue={\n internalEditor.editor._internal.slateEditor.initialValue\n }\n >\n <PortableTextEditorContext.Provider value={portableTextEditor}>\n {props.children}\n </PortableTextEditorContext.Provider>\n </Slate>\n </RelayActorContext.Provider>\n </EditorActorContext.Provider>\n </EditorContext.Provider>\n )\n}\n","import {startTransition, useContext, useEffect, useState} from 'react'\nimport type {EditorSelection} from '../../types/editor'\nimport {EditorActorContext} from '../editor-actor-context'\n\n/**\n * @deprecated Use `useEditorSelector` to get the current editor selection.\n * @public\n * Get the current editor selection from the React context.\n */\nexport const usePortableTextEditorSelection = (): EditorSelection => {\n const editorActor = useContext(EditorActorContext)\n const [selection, setSelection] = useState<EditorSelection>(null)\n\n useEffect(() => {\n const subscription = editorActor.on('selection', (event) => {\n // Set the selection state in a transition, we don't need the state immediately.\n startTransition(() => {\n setSelection(event.selection)\n })\n })\n\n return () => {\n subscription.unsubscribe()\n }\n }, [editorActor])\n\n return selection\n}\n"],"names":["EditorEventListener","props","$","_c","editor","useEditor","t0","t1","on","subscription","unsubscribe","useEffect","rootName","debug","debugWithName","name","namespace","enabled","VOID_CHILD_KEY","keepObjectEquality","object","keyMap","value","_key","isEqual","toSlateValue","schemaTypes","Array","isArray","map","block","toSlateBlock","_type","rest","textBlock","hasInlines","hasMissingStyle","style","hasMissingMarkDefs","markDefs","hasMissingChildren","children","child","cType","cKey","cRest","text","marks","__inline","Element","isElement","styles","fromSlateValue","textBlockType","Error","_cType","v","k","t","_i","blockValue","isEqualToEmptyEditor","undefined","length","Text","isText","join","getFocusBlock","selection","Editor","node","focus","path","slice","getFocusSpan","focusBlock","isTextBlock","isTextSpan","getSelectionStartBlock","selectionStartPoint","Range","start","getPointBlock","point","getSelectionEndBlock","selectionEndPoint","end","getFocusChild","focusBlockPath","childIndex","at","focusChild","Node","getPointChild","blockPath","pointChild","getFirstBlock","firstBlockPath","getLastBlock","lastBlockPath","getNodeBlock","schema","isEditor","isBlockElement","elementToBlock","element","parent","from","nodes","mode","match","n","some","isInline","blockObjects","blockObject","isListItemActive","listItem","selectedBlocks","every","isListBlock","isStyleActive","slateRangeToSelection","range","anchorBlock","anchor","anchorChild","offset","backward","isBackward","push","getEventPosition","editorActor","slateEditor","event","getSnapshot","matches","setup","eventNode","getEventNode","eventBlock","context","eventPositionBlock","getEventPositionBlock","eventSelection","getEventSelection","getBlockStartPoint","getBlockEndPoint","eventSelectionFocusBlockKey","getBlockKeyFromSelectionPoint","isSelectionCollapsed","DOMEditor","hasTarget","target","toSlateNode","firstBlock","firstBlockRect","toDOMNode","getBoundingClientRect","pageY","top","lastBlock","lastBlockRef","bottom","elementRect","height","Math","abs","getSlateRangeFromEvent","isDOMNode","window","getWindow","domRange","document","caretPositionFromPoint","position","clientX","clientY","createRange","setStart","offsetNode","setEnd","caretRangeFromPoint","console","warn","toSlateRange","exactMatch","suppressThrow","normalizePoint","newPath","newOffset","blockKey","childKey","find","blk","cld","normalizeSelection","newAnchor","newFocus","snapshot","isEqualSelectionPoints","anchorPoint","toSlateSelectionPoint","focusPoint","selectionPoint","direction","blockIndex","blockIndexMap","get","getChildKeyFromSelectionPoint","spanSelectionPoint","blockOffsetToSpanSelectionPoint","blockOffset","childPath","pathChild","isSpan","concat","min","EditorActorContext","createContext","DropIndicator","Symbol","for","jsx","width","borderBottom","zIndex","RenderDefaultBlockObject","userSelect","jsxs","RenderDefaultInlineObject","inlineObject","createEditorPriority","config","id","defaultKeyGenerator","reference","corePriority","getDragSelection","dragSelection","getFocusInlineObject","draggingCollapsedSelection","draggedTextBlock","getFocusTextBlock","draggedSpan","getSelectedBlocks","isSelectionExpanded","selectionStartBlock","selectionEndBlock","isOverlappingSelection","createCoreBlockElementBehaviorsConfig","key","onSetDragPositionBlock","behavior","defineBehavior","guard","dropFocusBlock","dragOrigin","draggedBlock","isSelectingEntireBlocks","actions","type","effect","priority","importance","forward","useCoreBlockElementBehaviors","useContext","t2","behaviorConfigs","behaviorConfig","send","behaviorConfig_0","RenderBlockObject","dragPositionBlock","setDragPositionBlock","useState","blockObjectRef","useRef","selected","useSelected","isCollapsed","focused","useSlateSelector","legacySchema","t3","schemaType","legacySchemaType","error","t4","t5","readOnly","t6","renderBlock","RenderBlock","t7","t8","t9","attributes","editorElementRef","RenderInlineObject","inlineObjectRef","useSlateStatic","inlineObjects","findPath","inlineObject_0","display","renderChild","RenderChild","annotations","RenderTextBlock","blockRef","editor_0","listIndexMap","listIndex","renderStyle","legacyStyleSchemaType","renderListItem","lists","list","legacyListItemSchemaType","level","t10","t11","t12","t13","t14","t15","t16","spellCheck","RenderListItem","RenderStyle","RenderElement","useSelector","_temp","_temp2","slateStatic","s_0","s","getLegacySchema","defaultCompare","a","b","useEditorSelector","selector","compare","editorActorSnapshot","getEditorSnapshot","slateEditorInstance","_internal","instance","converters","keyGenerator","decoratorState","RenderSpan","spanRef","leaf","focusedSpan","editorActorSnapshot_0","snapshot_0","spanSelection","parent_0","block_0","annotationMarkDefs","renderAnnotation","renderDecorator","decoratorSchemaTypes","decorators","uniq","filter","mark","includes","flatMap","mark_0","markDef_0","markDef","mark_1","legacyDecoratorSchemaType","dec","annotationMarkDef","legacyAnnotationSchemaType","_child","span","decorator","RenderAnnotation","RenderDecorator","PLACEHOLDER_STYLE","pointerEvents","left","right","RenderLeaf","renderedSpan","renderPlaceholder","placeholder","rangeDecoration","component","RenderText","PortableTextEditorContext","usePortableTextEditor","IS_MAC","test","navigator","userAgent","modifiers","alt","control","meta","shift","aliases","add","break","cmd","command","ctl","ctrl","del","down","esc","ins","mod","opt","option","return","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","replace","split","rawHotkeySegment","optional","endsWith","hotkeySegment","keyName","toKeyName","modifier","alias","code","TypeError","keyCode","toKeyCode","toLowerCase","toUpperCase","charCodeAt","createWithHotkeys","portableTextEditor","hotkeysFromOptions","reservedHotkeys","activeHotkeys","pteWithHotKeys","Object","keys","forEach","cat","nativeEvent","preventDefault","possibleMark","behaviorEvent","possibleCommand","moveRangeByOperation","operation","Point","transform","equals","slateOperationCallback","input","sendBack","originalApply","apply","op","rangeDecorationsMachine","types","events","assign","pendingRangeDecorations","rangeDecorations","set up initial range decorations","rangeDecorationState","slateRange","isRange","onMoved","newSelection","origin","decoratedRanges","update range decorations","move range decorations","decoratedRange","newRange","newRangeSelection","decorate","fn","createDecorate","actors","fromCallback","guards","has pending range decorations","has range decorations","has different decorations","existingRangeDecorations","payload","newRangeDecorations","not read only","should skip setup","skipSetup","createMachine","invoke","src","initial","states","always","and","entry","_","Path","intersection","RelayActorContext","validateSelectionSetup","pending operations","operations","validateSelectionAction","createAction","validateSelection","editorElement","validateSelectionMachine","idle","waiting","after","reenter","root","ReactEditor","findDocumentOrShadowRoot","activeElement","domSelection","getSelection","rangeCount","existingDOMRange","getRangeAt","newDOMRange","toDOMRange","startOffset","endOffset","removeAllRanges","addRange","Transforms","deselect","select","onChange","IS_PROCESSING_REMOTE_CHANGES","WeakMap","KEY_TO_SLATE_ELEMENT","KEY_TO_VALUE_ELEMENT","SLATE_TO_PORTABLE_TEXT_RANGE","PortableTextEditable","forwardRef","forwardedRef","hotkeys","onBeforeInput","onBlur","onClick","onCopy","onCut","onDrag","onDragEnd","onDragEnter","onDragLeave","onDragOver","onDragStart","onDrop","onFocus","onPaste","propsSelection","restProps","scrollSelectionIntoView","hasInvalidValue","setHasInvalidValue","relayActor","useSlate","validateSelectionActor","useActorRef","rangeDecorationsActor","bb0","eProps","renderElement","leafProps","renderLeaf","renderText","_temp3","JSON","stringify","normalizedSelection","_temp4","restoreSelectionFromProps","onReady","onInvalidValue","onValueChanged","t17","t18","t19","clipboardData","stopPropagation","originEvent","dataTransfer","handleCopy","t20","event_0","selection_0","position_0","handleCut","t21","event_1","onPasteResult","Promise","resolve","then","result_1","result","insert","selection_1","position_1","blocks","parseBlocks","options","removeUnusedMarkDefs","validateFields","placement","catch","_temp5","finally","selection_2","position_2","handlePaste","t22","event_2","isDefaultPrevented","handleOnFocus","t23","event_3","isPropagationStopped","position_3","handleClick","t24","event_4","handleOnBlur","t25","event_5","handleOnBeforeInput","t26","event_6","onKeyDown","handleKeyDown","t27","event_7","onKeyUp","handleKeyUp","t28","bb1","noop","t29","_editor","scrollSelectionIntoViewToSlate","t30","onDragEnd_0","onDrop_0","addEventListener","removeEventListener","t31","event_8","position_4","handleDragStart","t32","event_9","handleDrag","t33","event_10","handleDragEnd","t34","event_11","position_6","handleDragEnter","t35","event_12","position_7","internalDrag","handleDragOver","t36","event_13","position_8","handleDrop","t37","event_14","handleDragLeave","t38","current","mutationObserver","MutationObserver","observe","attributeOldValue","characterData","childList","subtree","disconnect","callbackRef","t39","SlateEditable","className","displayName","props_0","o","forEachActor","actorRef","callback","values","stopActor","persistedSnapshots","ref","observers","Set","systemSnapshot","system","stop","_snapshot","_processingStatus","converterJson","mimeType","serialize","portableTextConverter","converter","reason","deserialize","converterPortableText","getSelectedValue","data","parse","parsedBlocks","parsedBlock","parseBlock","createConverterTextHtml","html","toHTML","onMissingComponent","components","unknownType","htmlToBlocks","portableText","unstable_whitespaceOnPasteMode","createConverterTextPlain","inlineObjectType","title","blockObjectType","textToHtml","escapeHtml","line","entityMap","str","String","createCoreConverters","compileType","rawType","Schema","compile","levelIndexMaps","Map","buildIndexMaps","clear","previousListItem","set","levelIndexMap","levelsToDelete","delete","levelCounter","createPlaceholderBlock","getPreviousSpan","spanPath","previousSpan","reverse","isBefore","getNextSpan","nextSpan","isAfter","IS_NORMALIZING_NODE","withNormalizeNode","prev","isNormalizingNode","withRemoteChanges","isChangingRemotely","IS_UDOING","IS_REDOING","withUndoing","isUndoing","setIsUndoing","withRedoing","isRedoing","setIsRedoing","createWithPortableTextMarkModel","normalizeNode","nodeEntry","nextNode","mergeNodes","voids","setNodes","orphanedAnnotations","def","markDefKeys","newMarkDefs","has","properties","newProperties","previousSelectionIsCollapsed","newSelectionIsCollapsed","focusSpan","newFocusSpan","movedToNextSpan","movedToPreviousSpan","isExpanded","depth","spanHasAnnotations","deletingFromTheEnd","deletingAllText","previousSpanHasSameAnnotation","nextSpanHasSameAnnotation","withoutNormalizing","getActiveDecorators","targetBlock","targetPath","oldDefs","removeDecoratorOperationImplementation","hanging","eMark","lonelyEmptySpan","existingMarksWithoutDecorator","existingMark","cloneDiff","diff2","patch","CURRENT_UNDO_STEP","getCurrentUndoStepId","undoStepId","createUndoStep","clearUndoStep","SAVING","REMOTE_PATCHES","UNDO_STEP_LIMIT","isSaving","state","getRemotePatches","createWithUndoRedo","previousSnapshot","remotePatches","previousUndoStepId","subscriptions","sub","patches","reset","history","undos","redos","splice","time","Date","savingUndoSteps","currentUndoStepId","step","createSelectOperation","timestamp","selectingWithoutUndoStepId","selectingWithDifferentUndoStepId","lastOp","shouldMerge","historyUndoOperationImplementation","otherPatches","item","transformedOperations","flatten","transformOperation","reversedOperations","Operation","inverse","withoutSaving","err","pop","historyRedoOperationImplementation","transformedOperation","insertBlockIndex","findIndex","items","adjustBlockPath","unsetBlockIndex","operationTargetBlock","findOperationTargetBlock","parsePatch","diffPatch","adjustOffsetBy","changedOffset","utf8Start1","diffs","diff","index","diffType","DIFF_INSERT","DIFF_DELETE","DIFF_EQUAL","dType","currentFocus","currentAnchor","addAnnotationOperationImplementation","parsedAnnotation","parseAnnotation","annotation","annotationKey","removeAnnotationOperationImplementation","potentialAnnotations","selectedChild","selectedChildPath","annotationToRemove","previousSpansWithSameAnnotation","nextSpansWithSameAnnotation","marksWithoutAnnotation","blockSetOperationImplementation","filteredProps","updatedBlock","slateBlock","blockUnsetOperationImplementation","location","propsToRemove","prop","updatedTextBlock","omit","propsToSet","updatedBlockObject","childSetOperationImplementation","childEntry","definition","fields","field","childUnsetOperationImplementation","newNode","newValue","applyAll","decoratorAddOperationImplementation","manualAnchor","manualFocus","manualSelection","editorSelection","anchorOffset","selectionPointToBlockOffset","focusOffset","blockOffsetsToSelection","offsets","trimmedSelection","getTrimmedSelection","splitTextNodes","existingMarks","deleteOperationImplementation","startPoint","endPoint","startBlockKey","endBlockKey","startBlockIndex","endBlockIndex","startBlock","endBlock","unit","removeNodes","insertNodes","parentBlockEntry","above","isBlock","parentBlockPath","parentElementRange","currentLineRange","findCurrentLineRange","deleteText","parentRange","parentRangeBoundary","positions","middle","floor","rangesAreOnSameLine","range1","range2","rect1","rect2","domRectsIntersect","rect","compareRect","insertBlockOperationImplementation","fragment","insertBlock","startBlockPath","endBlockPath","nextPath","selectionBefore","insertFragment","currentSelection","endBlockEndPoint","adjustedSelection","next","endBlockChildKeys","endBlockMarkDefsKeys","markDefKeyMap","adjustedMarkDefs","newKey","adjustedChildren","adjustedBlock","endBlockStartPoint","isEmptyTextBlock","splitNodes","insertChildOperationImplementation","focusBlockIndex","focusChildIndex","parseSpan","EDITOR_TO_PENDING_SELECTION","parseInlineObject","insertTextOperationImplementation","insertText","moveBackwardOperationImplementation","move","distance","moveBlockOperationImplementation","originKey","originBlockIndex","destinationKey","to","destinationBlockIndex","moveNodes","moveForwardOperationImplementation","selectOperationImplementation","IS_FOCUSED","IS_READ_ONLY","behaviorOperationImplementations","performOperation","message","IS_PERFORMING_OPERATION","withPerformingBehaviorOperation","isPerformingBehaviorOperation","createWithEventListeners","maxBlocks","editorDelete","deleteBackward","deleteForward","insertBreak","insertData","insertSoftBreak","redo","setFragmentData","undo","createWithMaxBlocks","rows","createWithObjectKeys","existingKeys","descendants","prevPath","previous","prevIndex","previousBlock","previousBlockChildKeys","previousBlockMarkDefKeys","blockKeys","sibling","childKeys","createApplyPatch","changed","insertPatch","unsetPatch","setPatch","diffMatchPatch","findBlock","findBlockChild","diffMatchPatchApplyPatches","allowExceedingIndices","cleanupEfficiency","makeDiff","blocksToInsert","targetBlockIndex","normalizedIdx","editorWasEmptyBefore","targetChild","childrenToInsert","childInsertPath","oldText","newText","propPath","propEntry","reservedProps","nextRest","_prevChildren","prevRest","blockNode","newVal","previousSelection","pteCreateTextBlock","newKeys","removedProperties","property","unsetNodes","isMatch","isKeyedSegment","insertTextPatch","beforeValue","textChild","prevBlock","prevChild","prevText","removeTextPatch","beforeBlock","prevTextChild","setNodePatch","unset","indexOf","newPropNames","propNames","insertNodePatch","targetKey","setIfMissing","splitNodePatch","splitBlock","oldBlock","targetValue","splitSpan","targetSpans","removeNodePatch","spanToRemove","mergeNodePatch","newBlock","updatedSpan","removedSpan","moveNodePatch","childToInsert","PATCHING","withoutPatching","isPatching","createWithPatches","previousChildren","applyPatch","bufferedPatches","handleBufferedRemotePatches","normalize","handlePatches","p","editorWasEmpty","editorIsEmpty","previousValue","operationId","createWithPlaceholderBlock","isLonelyBlock","isBlockObject","insertNode","createWithSchemaTypes","isVoid","obj","createWithUtils","pluginUpdateSelection","updateSelection","existingSelection","isEditorNode","isTextBlockNode","isTypedObject","isSpanNode","isPartialSpanNode","isObjectNode","getBlock","getNode","getSpan","getParent","parentPath","applyOperationToPortableText","draft","createDraft","applyOperationToPortableTextDraft","e","finishDraft","insertedNode","before","isAncestor","truePath","newParent","newIndex","valueBefore","valueAfter","hasOwnProperty","newTextBlockNode","newSpanNode","pluginUpdateValue","withPlugins","withObjectKeys","withSchemaTypes","withPatches","withMaxBlocks","withUndoRedo","withPortableTextMarkModel","withPlaceholderBlock","withUtils","createSlateEditor","withReact","createEditor","placeholderBlock","initialValue","createEditorDom","getBlockNodes","getChildNodes","getEditorElement","getSelectionRect","getStartBlockElement","getEndBlockElement","setDragGhost","ghost","childNode","startBlockNode","endBlockNode","setDragImage","x","y","addAnnotationOnCollapsedSelection","caretWordSelection","getCaretWordSelection","raise","preventOverlappingAnnotations","isActiveAnnotation","coreAnnotationBehaviors","defaultKeyboardShortcuts","arrowDown","createKeyboardShortcut","default","arrowUp","backspace","lineBreak","strong","bold","em","italic","underline","tab","shiftTab","arrowDownOnLonelyBlockObject","focusBlockObject","getFocusBlockObject","nextBlock","getNextBlock","arrowUpOnLonelyBlockObject","getPreviousBlock","breakingBlockObject","clickingAboveLonelyBlockObject","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","emShortcut","underlineShortcut","codeShortcut","getCompoundClientRect","DOMRect","elements","firstRect","i","max","coreDndBehaviors","dom","selectingEntireBlocks","draggedDomNodes","blockNodes","childNodes","dragGhost","createElement","clonedBlockNodes","cloneNode","HTMLElement","appendChild","customGhost","querySelector","replaceChildren","setAttribute","boxSizing","body","customGhostRect","blocksDomRect","clonedChildNodes","childrenDomRect","dropPosition","droppingOnDragOrigin","draggingEntireBlocks","draggedBlocks","coreInsertBehaviors","markState","getMarkState","activeDecorators","activeAnnotations","getActiveAnnotationsMarks","markStateDecorators","breakingAtTheEndOfTextBlock","atTheEndOfBlock","isAtTheEndOfBlock","focusListItem","focusLevel","breakingAtTheStartOfTextBlock","focusDecorators","focusAnnotations","isAtTheStartOfBlock","breakingEntireDocument","firstBlockStartPoint","getSelectionStartPoint","lastBlockEndPoint","getSelectionEndPoint","breakingEntireBlocks","startBlockStartPoint","breakingInlineObject","focusInlineObject","coreInsertBreakBehaviors","isAtTheBeginningOfBlock","MAX_LIST_LEVEL","clearListOnBackspace","unindentListOnBackspace","mergeTextIntoListOnDelete","focusListBlock","getFocusListBlock","mergeTextIntoListOnBackspace","previousBlockEndPoint","deletingListFromStart","blocksToDelete","middleBlocks","deleteStartPoint","deleteEndPoint","startBlockEndPoint","slicedEndBlock","sliceTextBlock","clearListOnEnter","indentListOnTab","selectedListBlocks","selectedListBlock","unindentListOnShiftTab","inheritListLevel","firstInsertedBlock","secondInsertedBlock","insertedListBlock","levelDifference","adjustLevel","listStartBlockFound","inheritListItem","adjustListItem","inheritListProperties","coreListBehaviors","coreBehaviorsConfig","withoutNormalizingConditional","predicate","abstractAnnotationBehaviors","markDefKey","updatedMarkDefs","abstractDecoratorBehaviors","isActiveDecorator","abstractDeleteBehaviors","nextBlockStartPoint","abstractDeserializeBehaviors","getData","json","deserializeEvent","getActiveAnnotations","textRuns","getTextBlockText","textRun","deserializeDataEvent","abstractInsertBehaviors","onlyBlock","firstBlockKey","lastBlockKey","focusBlockStartPoint","focusBlockEndPoint","focusTextBlockAfter","lastBlok","shiftLeft","abstractKeyboardBehaviors","abstractListItemBehaviors","selectedTextBlocks","getSelectedTextBlocks","isActiveListItem","abstractMoveBehaviors","abstractSelectBehaviors","blockEndPoint","abstractSerializeBehaviors","serializeEvent","setData","abstractSplitBehaviors","newTextBlockSelection","newTextBlock","abstractStyleBehaviors","isActiveStyle","abstractBehaviors","isSyntheticBehaviorEvent","isCustomBehaviorEvent","isNativeBehaviorEvent","isAbstractBehaviorEvent","abstractBehaviorEventTypes","nativeBehaviorEventTypes","startsWith","eventCategory","performEvent","behaviors","remainingEventBehaviors","eventBehaviors","listenedNamespace","eventNamespace","guardSnapshot","nativeEventPrevented","defaultBehaviorOverwritten","eventBehaviorIndex","eventBehavior","shouldRun","actionSetIndex","actionSet","actionsSnapshot","action","undoStepCreated","actionTypes","uniqueActionTypes","raiseGroup","size","executeGroup","sortByPriority","itemsWithPriority","itemsWithoutPriority","itemsByPriorityId","graph","inDegree","ensureNode","addEdge","fromId","toId","visited","refId","queue","degree","currentId","currentItem","neighborId","newDegree","createEditorSnapshot","rerouteExternalBehaviorEvent","editorMachine","emitted","tags","assertEvent","behaviorsSorted","emit","pendingEvents","enqueueActions","enqueue","pendingIncomingPatchesEvents","handle blur","blur","handle focus","handle behavior event","self","eventSentBack","slate is busy","slate is normalizing node","initialReadOnly","exit","dragstart","parentNode","removeChild","dragend","drop","pristine","dirty","mutationMachine","bulk","pendingMutations","lastBulk","pendingPatchEvents","interval","setInterval","process","env","NODE_ENV","clearInterval","is read-only","slate is normalizing","isNormalizing","delays","typing","mutations","not","createEditableAPI","toggleMark","toggleList","toggleBlockStyle","isMarkActive","slateSelection","descendant","insertChild","focusChildPath","focusNode","hasBlockStyle","hasListStyle","findByPath","slatePath","ptBlock","ptChild","findDOMNode","spans","isAnnotationActive","annotationType","addAnnotation","snapshotBefore","selectedValueBefore","focusSpanBefore","markDefsBefore","snapshotAfter","selectedValueAfter","focusBlockAfter","focusSpanAfter","newMarkDefKeysOnFocusSpan","markDefBefore","markDefPath","markDefPaths","SlateElement","removeAnnotation","ptRange","existing","getValue","isCollapsedSelection","isExpandedSelection","getFragment","isSelectionsOverlapping","selectionA","selectionB","rangeA","rangeB","relayMachine","prevSelection","lastEventWasFocused","validateValue","resolution","valid","validChildTypes","validBlockTypes","description","i18n","isPlainObject","currentBlockTypeName","expectedTypeName","typeName","newSpan","autoResolve","allUsedMarks","unusedMarkDefs","m","toString","orphanedMarks","spanChildren","orphaned","cMrk","cIndex","newChild","childType","syncValueCallback","updateValue","streamBlocks","syncValueLogic","syncMachine","initialValueSynced","pendingValue","initial value synced","is busy","isProcessingLocalChanges","isChanging","isBusy","is empty value","is empty array","is new value","value changed while syncing","pending value equals previous value","busy","syncing","doneSyncing","isChanged","isValid","hadSelection","clearEditor","removeExtraBlocks","currentBlock","currentBlockIndex","getStreamedBlocks","blockChanged","blockValid","syncBlock","setTimeout","childrenLength","validation","validationValue","updateBlock","replaceBlock","selectionFocusOnBlock","oldBlockChildrenLength","currentBlockChild","currentBlockChildIndex","oldBlockChild","isChildChanged","isTextChanged","createInternalEditor","createActor","editorConfigToMachineInput","editable","mutationActor","syncActor","createActors","registerBehavior","behaviorConfigWithPriority","listener","compileSchemasFromEditorConfig","schemaDefinition","compileSchemaDefinitionToPortableTextMemberSchemaTypes","createPortableTextMemberSchemaTypes","compileSchema","portableTextMemberSchemaTypesToSchema","subscribe","eventToChange","isLoading","PortableTextEditor","Component","change$","Subject","unsubscribers","constructor","Number","parseInt","componentDidMount","relayActorSubscription","change","componentDidUpdate","prevProps","editorRef","componentWillUnmount","setEditable","render","legacyPatches","incomingPatches$","patches$","Fragment","Slate","blockStyle","listStyle","isObjectPath","isChildObjectEditPath","RoutePatchesObservableToEditorActor","EditorProvider","initialConfig","internalEditor","internalEditor_0","portableTextEditor_0","EditorContext","usePortableTextEditorSelection","setSelection","startTransition"],"mappings":"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","x_google_ignoreList":[46]}