{"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/internal-utils/weakMaps.ts","../src/editor/editor-actor-context.ts","../src/editor/components/drop-indicator.tsx","../src/editor/components/render-default-object.tsx","../src/internal-utils/drag-selection.ts","../src/editor/key-generator.ts","../src/priority/priority.types.ts","../src/priority/priority.core.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/hooks/usePortableTextEditor.ts","../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/operations/behavior.operation.insert.text.ts","../src/internal-utils/sibling-utils.ts","../src/internal-utils/withChanges.ts","../src/internal-utils/withUndoRedo.ts","../src/editor/editor-selector.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-inline-object.ts","../src/operations/behavior.operation.insert-span.ts","../src/operations/behavior.operation.insert.block.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-applying-behavior-operations.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/internal-utils/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-break.ts","../src/utils/util.at-the-beginning-of-block.ts","../src/behaviors/behavior.core.lists.ts","../src/behaviors/behavior.core.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/relay-actor-context.ts","../src/editor/PortableTextEditor.tsx","../src/editor/components/render-span.tsx","../src/editor/components/render-leaf.tsx","../src/editor/components/render-text.tsx","../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/Editable.tsx","../src/internal-utils/use-constant.ts","../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  PathSegment,\n  PortableTextBlock,\n  PortableTextChild,\n  PortableTextObject,\n  PortableTextTextBlock,\n} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport {Element, Text, type Descendant, type Node} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\n\nexport const EMPTY_MARKDEFS: PortableTextObject[] = []\n\nexport const VOID_CHILD_KEY = 'void-child'\n\ntype Partial<T> = {\n  [P in keyof T]?: T[P]\n}\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) => {\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({_type, _key, ...rest, children}, keyMap)\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      )\n    }) as Descendant[]\n  }\n  return []\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\nexport function findBlockAndIndexFromPath(\n  firstPathSegment: PathSegment,\n  children: (Node | Partial<Node>)[],\n): [Element | undefined, number | undefined] {\n  let blockIndex = -1\n  const isNumber = Number.isInteger(Number(firstPathSegment))\n  if (isNumber) {\n    blockIndex = Number(firstPathSegment)\n  } else if (children) {\n    blockIndex = children.findIndex(\n      (blk) =>\n        Element.isElement(blk) && isEqual({_key: blk._key}, firstPathSegment),\n    )\n  }\n  if (blockIndex > -1) {\n    return [children[blockIndex] as Element, blockIndex]\n  }\n  return [undefined, -1]\n}\n\nexport function findChildAndIndexFromPath(\n  secondPathSegment: PathSegment,\n  block: Element,\n): [Element | Text | undefined, number] {\n  let childIndex = -1\n  const isNumber = Number.isInteger(Number(secondPathSegment))\n  if (isNumber) {\n    childIndex = Number(secondPathSegment)\n  } else {\n    childIndex = block.children.findIndex((child) =>\n      isEqual({_key: child._key}, secondPathSegment),\n    )\n  }\n  if (childIndex > -1) {\n    return [block.children[childIndex] as Element | Text, childIndex]\n  }\n  return [undefined, -1]\n}\n\nexport function getValueOrInitialValue(\n  value: unknown,\n  initialValue: PortableTextBlock[],\n): PortableTextBlock[] | undefined {\n  if (value && Array.isArray(value) && value.length > 0) {\n    return value\n  }\n  return initialValue\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 [node, path] = Editor.node(editor, editor.selection.focus.path)\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 {EditorSchema, EditorSelection} from '..'\nimport type {EditorActor} from '../editor/editor-machine'\nimport {getBlockKeyFromSelectionPoint} from '../selection/selection-point'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport * as utils from '../utils'\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: utils.getBlockStartPoint({\n          context: editorActor.getSnapshot().context,\n          block: {\n            node: eventBlock,\n            path: [{_key: eventBlock._key}],\n          },\n        }),\n        focus: utils.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    utils.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: utils.getBlockStartPoint({\n          context: editorActor.getSnapshot().context,\n          block: {\n            node: eventBlock,\n            path: [{_key: eventBlock._key}],\n          },\n        }),\n        focus: utils.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 {\n  getBlockKeyFromSelectionPoint,\n  getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {isEqualSelectionPoints} from '../utils'\nimport {blockOffsetToSpanSelectionPoint} from '../utils/util.block-offset'\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 ? 'forward' : 'backward',\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 type {Editor, Range} from 'slate'\nimport type {EditorSelection} from '..'\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 {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 type {EditorSnapshot} from '..'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport type {EventPosition} from './event-position'\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 = selectors.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 = selectors.isSelectionCollapsed({\n    ...snapshot,\n    context: {\n      ...snapshot.context,\n      selection: eventSelection,\n    },\n  })\n  const draggedTextBlock = selectors.getFocusTextBlock({\n    ...snapshot,\n    context: {\n      ...snapshot.context,\n      selection: eventSelection,\n    },\n  })\n  const draggedSpan = selectors.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: utils.getBlockStartPoint({\n        context: snapshot.context,\n        block: draggedTextBlock,\n      }),\n      focus: utils.getBlockEndPoint({\n        context: snapshot.context,\n        block: draggedTextBlock,\n      }),\n    }\n  }\n\n  const selectedBlocks = selectors.getSelectedBlocks(snapshot)\n\n  if (\n    snapshot.context.selection &&\n    selectors.isSelectionExpanded(snapshot) &&\n    selectedBlocks.length > 1\n  ) {\n    const selectionStartBlock = selectors.getSelectionStartBlock(snapshot)\n    const selectionEndBlock = selectors.getSelectionEndBlock(snapshot)\n\n    if (!selectionStartBlock || !selectionEndBlock) {\n      return dragSelection\n    }\n\n    const selectionStartPoint = utils.getBlockStartPoint({\n      context: snapshot.context,\n      block: selectionStartBlock,\n    })\n    const selectionEndPoint = utils.getBlockEndPoint({\n      context: snapshot.context,\n      block: selectionEndBlock,\n    })\n\n    const eventSelectionInsideBlocks = selectors.isOverlappingSelection(\n      eventSelection,\n    )({\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 getRandomValues from 'get-random-values-esm'\n\n/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n  let table: any[]\n  return () => {\n    if (table) {\n      return table\n    }\n\n    table = []\n    for (let i = 0; i < 256; ++i) {\n      table[i] = (i + 0x100).toString(16).slice(1)\n    }\n    return table\n  }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n  const rnds8 = new Uint8Array(length)\n  getRandomValues(rnds8)\n  return rnds8\n}\n\nfunction randomKey(length?: number): string {\n  const table = getByteHexTable()\n  return whatwgRNG(length)\n    .reduce((str, n) => str + table[n], '')\n    .slice(0, length)\n}\n","import {defaultKeyGenerator} from '../editor/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 {getDragSelection} from '../internal-utils/drag-selection'\nimport type {EventPositionBlock} from '../internal-utils/event-position'\nimport {corePriority} from '../priority/priority.core'\nimport {createEditorPriority} from '../priority/priority.types'\nimport * as selectors from '../selectors'\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 = selectors.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 = selectors.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 = selectors.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  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          props.renderBlock({\n            children: <RenderDefaultBlockObject blockObject={blockObject} />,\n            editorElementRef: blockObjectRef,\n            focused,\n            path: [{_key: props.element._key}],\n            schemaType: legacySchemaType,\n            selected,\n            type: legacySchemaType,\n            value: blockObject,\n          })\n        ) : (\n          <RenderDefaultBlockObject blockObject={blockObject} />\n        )}\n      </div>\n      {dragPositionBlock === 'end' ? <DropIndicator /> : null}\n    </div>\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  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          props.renderChild({\n            annotations: [],\n            children: <RenderDefaultInlineObject inlineObject={inlineObject} />,\n            editorElementRef: inlineObjectRef,\n            selected,\n            focused,\n            path: [{_key: block._key}, 'children', {_key: props.element._key}],\n            schemaType: legacySchemaType,\n            value: inlineObject,\n            type: legacySchemaType,\n          })\n        ) : (\n          <RenderDefaultInlineObject inlineObject={inlineObject} />\n        )}\n      </span>\n    </span>\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  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 = props.renderStyle({\n        block: props.textBlock,\n        children,\n        editorElementRef: blockRef,\n        focused,\n        path: [{_key: props.textBlock._key}],\n        schemaType: legacyStyleSchemaType,\n        selected,\n        value: props.textBlock.style,\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 = props.renderListItem({\n        block: props.textBlock,\n        children,\n        editorElementRef: blockRef,\n        focused,\n        level: props.textBlock.level ?? 1,\n        path: [{_key: props.textBlock._key}],\n        selected,\n        value: props.textBlock.listItem,\n        schemaType: legacyListItemSchemaType,\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          ? props.renderBlock({\n              children,\n              editorElementRef: blockRef,\n              focused,\n              level: props.textBlock.level,\n              listItem: props.textBlock.listItem,\n              path: [{_key: props.textBlock._key}],\n              selected,\n              schemaType: props.legacySchema.block,\n              style: props.textBlock.style,\n              type: props.legacySchema.block,\n              value: props.textBlock,\n            })\n          : children}\n      </div>\n      {dragPositionBlock === 'end' ? <DropIndicator /> : null}\n    </div>\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 {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","/**\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 {parseBlock} from '../internal-utils/parse-blocks'\nimport * as selectors from '../selectors'\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 = selectors.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          refreshKeys: false,\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 {parseBlock} from '../internal-utils/parse-blocks'\nimport * as selectors from '../selectors'\nimport type {PortableTextMemberSchemaTypes} from '../types/editor'\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 = selectors.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            refreshKeys: false,\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 {parseBlock} from '../internal-utils/parse-blocks'\nimport * as selectors from '../selectors'\nimport type {PortableTextMemberSchemaTypes} from '../types/editor'\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 = selectors.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            refreshKeys: false,\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 all other list items on this level\n    levelIndexMaps.forEach((levelIndexMap, listItem) => {\n      if (listItem === block.listItem) {\n        return\n      }\n\n      levelIndexMap.set(block.level!, 0)\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\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 {Transforms} from 'slate'\nimport {EDITOR_TO_PENDING_SELECTION} from 'slate-dom'\nimport type {EditorSnapshot} from '../editor/editor-snapshot'\nimport {\n  getFocusSpan,\n  slateRangeToSelection,\n} from '../internal-utils/slate-utils'\nimport {getActiveAnnotationsMarks} from '../selectors/selector.get-active-annotation-marks'\nimport {getActiveDecorators} from '../selectors/selector.get-active-decorators'\nimport {getMarkState} from '../selectors/selector.get-mark-state'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const insertTextOperationImplementation: BehaviorOperationImplementation<\n  'insert.text'\n> = ({context, operation}) => {\n  const snapshot: EditorSnapshot = {\n    blockIndexMap: operation.editor.blockIndexMap,\n    context: {\n      value: operation.editor.value,\n      selection: operation.editor.selection\n        ? slateRangeToSelection({\n            schema: context.schema,\n            editor: operation.editor,\n            range: operation.editor.selection,\n          })\n        : null,\n      schema: context.schema,\n      keyGenerator: context.keyGenerator,\n      converters: [],\n      readOnly: false,\n    },\n    decoratorState: operation.editor.decoratorState,\n  }\n\n  const markState = getMarkState(snapshot)\n  const activeDecorators = getActiveDecorators(snapshot)\n  const activeAnnotations = getActiveAnnotationsMarks(snapshot)\n\n  const [focusSpan] = getFocusSpan({\n    editor: operation.editor,\n  })\n\n  if (!focusSpan) {\n    Transforms.insertText(operation.editor, operation.text)\n    return\n  }\n\n  if (markState && markState.state === 'unchanged') {\n    const markStateDecorators = (markState.marks ?? []).filter((mark) =>\n      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      Transforms.insertText(operation.editor, operation.text)\n      return\n    }\n  }\n\n  Transforms.insertNodes(operation.editor, {\n    _type: focusSpan._type,\n    _key: context.keyGenerator(),\n    text: operation.text,\n    marks: [...activeDecorators, ...activeAnnotations],\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(operation.editor, operation.editor.selection)\n\n  operation.editor.decoratorState = {}\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'\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","import {useSelector} from '@xstate/react'\nimport type {Editor} from '../editor'\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  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: editorActorSnapshot.context.selection,\n      value: slateEditorInstance.value,\n    },\n    decoratorState: slateEditorInstance.decoratorState,\n  }\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 {isSpan, 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 {isChangingRemotely} from '../../internal-utils/withChanges'\nimport {isRedoing, isUndoing} from '../../internal-utils/withUndoRedo'\nimport type {BehaviorOperationImplementation} from '../../operations/behavior.operations'\nimport {getActiveDecorators} from '../../selectors/selector.get-active-decorators'\nimport {getMarkState} from '../../selectors/selector.get-mark-state'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {getEditorSnapshot} from '../editor-selector'\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            editorActor.send({type: 'normalizing'})\n            Transforms.mergeNodes(editor, {\n              at: [childPath[0], childPath[1] + 1],\n              voids: true,\n            })\n            editorActor.send({type: 'done normalizing'})\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        editorActor.send({type: 'normalizing'})\n        Transforms.setNodes(editor, {markDefs: []}, {at: path})\n        editorActor.send({type: 'done normalizing'})\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        editorActor.send({type: 'normalizing'})\n        Transforms.setNodes(editor, {marks: []}, {at: path})\n        editorActor.send({type: 'done normalizing'})\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            editorActor.send({type: 'normalizing'})\n            Transforms.setNodes(\n              editor,\n              {marks: node.marks?.filter((mark) => decorators.includes(mark))},\n              {at: path},\n            )\n            editorActor.send({type: 'done normalizing'})\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              editorActor.send({type: 'normalizing'})\n              Transforms.setNodes(\n                editor,\n                {\n                  marks: marks.filter(\n                    (mark) => !orphanedAnnotations.includes(mark),\n                  ),\n                },\n                {at: childPath},\n              )\n              editorActor.send({type: 'done normalizing'})\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            editorActor.send({type: 'normalizing'})\n            Transforms.setNodes(\n              editor,\n              {\n                marks: marks.filter(\n                  (mark) => !orphanedAnnotations.includes(mark),\n                ),\n              },\n              {at: path},\n            )\n            editorActor.send({type: 'done normalizing'})\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          editorActor.send({type: 'normalizing'})\n          Transforms.setNodes(editor, {markDefs: newMarkDefs}, {at: path})\n          editorActor.send({type: 'done normalizing'})\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          editorActor.send({type: 'normalizing'})\n          Transforms.setNodes(\n            editor,\n            {\n              markDefs: newMarkDefs,\n            },\n            {at: path},\n          )\n          editorActor.send({type: 'done normalizing'})\n          return\n        }\n      }\n\n      normalizeNode(nodeEntry)\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 === 'insert_node') {\n        const {selection} = editor\n\n        if (selection) {\n          const [_block, blockPath] = Editor.node(editor, selection, {depth: 1})\n          const previousSpan = getPreviousSpan({\n            editor,\n            blockPath,\n            spanPath: op.path,\n          })\n          const previousSpanAnnotations = previousSpan\n            ? previousSpan.marks?.filter((mark) => !decorators.includes(mark))\n            : []\n\n          const nextSpan = getNextSpan({\n            editor,\n            blockPath,\n            spanPath: [op.path[0], op.path[1] - 1],\n          })\n          const nextSpanAnnotations = nextSpan\n            ? nextSpan.marks?.filter((mark) => !decorators.includes(mark))\n            : []\n\n          const annotationsEnding =\n            previousSpanAnnotations?.filter(\n              (annotation) => !nextSpanAnnotations?.includes(annotation),\n            ) ?? []\n          const atTheEndOfAnnotation = annotationsEnding.length > 0\n\n          if (\n            atTheEndOfAnnotation &&\n            isSpan(editorActor.getSnapshot().context, op.node) &&\n            op.node.marks?.some((mark) => annotationsEnding.includes(mark))\n          ) {\n            Transforms.insertNodes(editor, {\n              ...op.node,\n              _key: editorActor.getSnapshot().context.keyGenerator(),\n              marks:\n                op.node.marks?.filter(\n                  (mark) => !annotationsEnding.includes(mark),\n                ) ?? [],\n            })\n            return\n          }\n\n          const annotationsStarting =\n            nextSpanAnnotations?.filter(\n              (annotation) => !previousSpanAnnotations?.includes(annotation),\n            ) ?? []\n          const atTheStartOfAnnotation = annotationsStarting.length > 0\n\n          if (\n            atTheStartOfAnnotation &&\n            isSpan(editorActor.getSnapshot().context, op.node) &&\n            op.node.marks?.some((mark) => annotationsStarting.includes(mark))\n          ) {\n            Transforms.insertNodes(editor, {\n              ...op.node,\n              _key: editorActor.getSnapshot().context.keyGenerator(),\n              marks:\n                op.node.marks?.filter(\n                  (mark) => !annotationsStarting.includes(mark),\n                ) ?? [],\n            })\n            return\n          }\n\n          const nextSpanDecorators =\n            nextSpan?.marks?.filter((mark) => decorators.includes(mark)) ?? []\n          const decoratorStarting = nextSpanDecorators.length > 0\n\n          if (\n            decoratorStarting &&\n            atTheEndOfAnnotation &&\n            !atTheStartOfAnnotation &&\n            isSpan(editorActor.getSnapshot().context, op.node) &&\n            op.node.marks?.length === 0\n          ) {\n            Transforms.insertNodes(editor, {\n              ...op.node,\n              _key: editorActor.getSnapshot().context.keyGenerator(),\n              marks: nextSpanDecorators,\n            })\n            return\n          }\n        }\n      }\n\n      if (op.type === 'insert_text') {\n        const snapshot = getEditorSnapshot({\n          editorActorSnapshot: editorActor.getSnapshot(),\n          slateEditorInstance: editor,\n        })\n\n        const markState = getMarkState(snapshot)\n\n        if (!markState) {\n          apply(op)\n          return\n        }\n\n        if (markState.state === 'unchanged') {\n          apply(op)\n          return\n        }\n\n        Transforms.insertNodes(editor, {\n          _type: 'span',\n          _key: editorActor.getSnapshot().context.keyGenerator(),\n          text: op.text,\n          marks: markState.marks,\n        })\n\n        return\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 './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","/**\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 {isChangingRemotely} from '../../internal-utils/withChanges'\nimport {\n  isRedoing,\n  isUndoing,\n  setIsRedoing,\n  setIsUndoing,\n  withRedoing,\n  withUndoing,\n} from '../../internal-utils/withUndoRedo'\nimport type {BehaviorOperationImplementation} from '../../operations/behavior.operations'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {getCurrentUndoStepId} from '../with-undo-step'\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 {operations, history} = editor\n      const {undos} = history\n      const step = undos[undos.length - 1]\n      const lastOp =\n        step && step.operations && step.operations[step.operations.length - 1]\n      const overwrite = shouldOverwrite(op, lastOp)\n      const save = isSaving(editor)\n\n      const currentUndoStepId = getCurrentUndoStepId(editor)\n\n      let merge = currentUndoStepId === previousUndoStepId\n\n      if (save) {\n        if (!step) {\n          merge = false\n        } else if (operations.length === 0) {\n          merge =\n            currentUndoStepId === undefined && previousUndoStepId === undefined\n              ? shouldMerge(op, lastOp) || overwrite\n              : merge\n        }\n\n        if (step && merge) {\n          step.operations.push(op)\n        } else {\n          const newStep = {\n            operations: [\n              ...(editor.selection === null\n                ? []\n                : [createSelectOperation(editor)]),\n              op,\n            ],\n            timestamp: new Date(),\n          }\n          undos.push(newStep)\n          debug('Created new undo step', step)\n        }\n\n        while (undos.length > UNDO_STEP_LIMIT) {\n          undos.shift()\n        }\n\n        if (shouldClear(op)) {\n          history.redos = []\n        }\n      }\n\n      previousUndoStepId = currentUndoStepId\n\n      apply(op)\n    }\n\n    // Plugin return\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\nconst shouldOverwrite = (\n  op: Operation,\n  prev: Operation | undefined,\n): boolean => {\n  if (prev && op.type === 'set_selection' && prev.type === 'set_selection') {\n    return true\n  }\n\n  return false\n}\n\nconst shouldClear = (op: Operation): boolean => {\n  if (op.type === 'set_selection') {\n    return false\n  }\n\n  return true\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 type {Path} from '@sanity/types'\nimport {Editor, Node, Range, Text, Transforms} from 'slate'\nimport {parseAnnotation} from '../internal-utils/parse-blocks'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\n/**\n * @public\n */\nexport type AddedAnnotationPaths = {\n  /**\n   * @deprecated An annotation may be applied to multiple blocks, resulting\n   * in multiple `markDef`'s being created. Use `markDefPaths` instead.\n   */\n  markDefPath: Path\n  markDefPaths: Array<Path>\n  /**\n   * @deprecated Does not return anything meaningful since an annotation\n   * can span multiple blocks and spans. If references the span closest\n   * to the focus point of the selection.\n   */\n  spanPath: Path\n}\n\nexport const addAnnotationOperationImplementation: BehaviorOperationImplementation<\n  'annotation.add',\n  AddedAnnotationPaths | undefined\n> = ({context, operation}) => {\n  const parsedAnnotation = parseAnnotation({\n    annotation: {\n      _type: operation.annotation.name,\n      ...operation.annotation.value,\n    },\n    context,\n    options: {refreshKeys: false, 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  let paths: AddedAnnotationPaths | undefined\n  let spanPath: Path | undefined\n  let markDefPath: Path | undefined\n  const markDefPaths: Path[] = []\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      markDefPath = [{_key: block._key}, 'markDefs', {_key: annotationKey}]\n\n      if (Range.isBackward(editor.selection)) {\n        markDefPaths.unshift(markDefPath)\n      } else {\n        markDefPaths.push(markDefPath)\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      const existingSameTypeAnnotations = marks.filter((mark) =>\n        markDefs.some(\n          (markDef) =>\n            markDef._key === mark && markDef._type === parsedAnnotation._type,\n        ),\n      )\n\n      Transforms.setNodes(\n        editor,\n        {\n          marks: [\n            ...marks.filter(\n              (mark) => !existingSameTypeAnnotations.includes(mark),\n            ),\n            annotationKey,\n          ],\n        },\n        {at: path},\n      )\n\n      spanPath = [{_key: block._key}, 'children', {_key: span._key}]\n    }\n\n    blockIndex++\n  }\n\n  if (markDefPath && spanPath) {\n    paths = {\n      markDefPath,\n      markDefPaths,\n      spanPath,\n    }\n  }\n\n  return paths\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 {Editor, Transforms, type Element as SlateElement} from 'slate'\nimport {parseBlock} from '../internal-utils/parse-blocks'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {fromSlateValue, toSlateValue} from '../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const blockSetOperationImplementation: BehaviorOperationImplementation<\n  'block.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 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  const {_type, ...filteredProps} = operation.props\n\n  const updatedBlock = parseBlock({\n    context,\n    block: {\n      ...parsedBlock,\n      ...filteredProps,\n    },\n    options: {refreshKeys: false, validateFields: true},\n  })\n\n  if (!updatedBlock) {\n    throw new Error(`Unable to update block at ${JSON.stringify(operation.at)}`)\n  }\n\n  const slateBlock = toSlateValue([updatedBlock], {\n    schemaTypes: context.schema,\n  })?.at(0) as SlateElement | undefined\n\n  if (!slateBlock) {\n    throw new Error(`Unable to convert block to Slate value`)\n  }\n\n  Transforms.setNodes(operation.editor, slateBlock, {at: location})\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport {omit} from 'lodash'\nimport {Editor, Transforms} from 'slate'\nimport {parseBlock} from '../internal-utils/parse-blocks'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {fromSlateValue} from '../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\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: {refreshKeys: false, validateFields: true},\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: {refreshKeys: false, validateFields: true},\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    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    const newNode: Record<string, unknown> = {}\n\n    for (const prop of operation.props) {\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    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 {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {fromSlateValue} from '../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\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    ? utils.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    ? utils.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    ? utils.selectionPointToBlockOffset({\n        context: {\n          ...context,\n          value,\n        },\n        selectionPoint: editorSelection.anchor,\n      })\n    : undefined\n  const focusOffset = editorSelection\n    ? utils.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 = utils.blockOffsetsToSelection({\n      context: {\n        ...context,\n        value: newValue,\n      },\n      offsets: {anchor: anchorOffset, focus: focusOffset},\n      backward: editorSelection?.backward,\n    })\n\n    const trimmedSelection = selectors.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 {\n  deleteText,\n  Editor,\n  Element,\n  Range,\n  setSelection,\n  Transforms,\n} from 'slate'\nimport {DOMEditor} from 'slate-dom'\nimport {createPlaceholderBlock} from '../internal-utils/create-placeholder-block'\nimport {getBlockPath} from '../internal-utils/slate-utils'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {getBlockKeyFromSelectionPoint} from '../selection/selection-point'\nimport {PortableTextSlateEditor} from '../types/editor'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const deleteOperationImplementation: BehaviorOperationImplementation<\n  'delete'\n> = ({context, operation}) => {\n  const anchorBlockKey = getBlockKeyFromSelectionPoint(operation.at.anchor)\n  const focusBlockKey = getBlockKeyFromSelectionPoint(operation.at.focus)\n\n  const startBlockKey = operation.at.backward ? focusBlockKey : anchorBlockKey\n  const endBlockKey = operation.at.backward ? anchorBlockKey : focusBlockKey\n  const endOffset = operation.at.backward\n    ? operation.at.focus.offset\n    : operation.at.anchor.offset\n\n  if (!startBlockKey) {\n    throw new Error('Failed to get start block key')\n  }\n\n  if (!endBlockKey) {\n    throw new Error('Failed to get end block key')\n  }\n\n  const startBlockIndex = operation.editor.blockIndexMap.get(startBlockKey)\n\n  if (startBlockIndex === undefined) {\n    throw new Error('Failed to get start block index')\n  }\n\n  const startBlock = operation.editor.value.at(startBlockIndex)\n\n  if (!startBlock) {\n    throw new Error('Failed to get start block')\n  }\n\n  const endBlockIndex = operation.editor.blockIndexMap.get(endBlockKey)\n\n  if (endBlockIndex === undefined) {\n    throw new Error('Failed to get end block index')\n  }\n\n  const endBlock = operation.editor.value.at(endBlockIndex)\n\n  if (!endBlock) {\n    throw new Error('Failed to get end block')\n  }\n\n  const anchorBlockPath =\n    anchorBlockKey !== undefined\n      ? getBlockPath({\n          editor: operation.editor,\n          _key: anchorBlockKey,\n        })\n      : undefined\n  const focusBlockPath =\n    focusBlockKey !== undefined\n      ? getBlockPath({\n          editor: operation.editor,\n          _key: focusBlockKey,\n        })\n      : undefined\n\n  if (\n    operation.at.anchor.path.length === 1 &&\n    operation.at.focus.path.length === 1 &&\n    anchorBlockPath &&\n    focusBlockPath &&\n    anchorBlockPath[0] === focusBlockPath[0]\n  ) {\n    Transforms.removeNodes(operation.editor, {\n      at: [anchorBlockPath[0]],\n    })\n\n    if (operation.editor.children.length === 0) {\n      Transforms.insertNodes(operation.editor, createPlaceholderBlock(context))\n    }\n\n    return\n  }\n\n  const range = 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 (!range) {\n    throw new Error(\n      `Failed to get Slate Range for selection ${JSON.stringify(operation.at)}`,\n    )\n  }\n\n  if (operation.direction === 'backward' && operation.unit === 'line') {\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 = isTextBlock(context, endBlock) && endOffset === 0\n\n  deleteText(operation.editor, {\n    at: range,\n    reverse: operation.direction === 'backward',\n    unit: operation.unit,\n    hanging,\n  })\n\n  if (\n    operation.editor.selection &&\n    isTextBlock(context, startBlock) &&\n    isTextBlock(context, endBlock)\n  ) {\n    setSelection(operation.editor, {\n      anchor: operation.editor.selection.focus,\n      focus: operation.editor.selection.focus,\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 {Editor, Transforms, type Element} from 'slate'\nimport {parseInlineObject} from '../internal-utils/parse-blocks'\nimport {toSlateValue} from '../internal-utils/values'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const insertInlineObjectOperationImplementation: BehaviorOperationImplementation<\n  'insert.inline object'\n> = ({context, operation}) => {\n  const parsedInlineObject = parseInlineObject({\n    context,\n    inlineObject: {\n      _type: operation.inlineObject.name,\n      ...(operation.inlineObject.value ?? {}),\n    },\n    options: {refreshKeys: false, validateFields: true},\n  })\n\n  if (!parsedInlineObject) {\n    throw new Error(\n      `Failed to parse inline object ${JSON.stringify(operation.inlineObject)}`,\n    )\n  }\n\n  if (!operation.editor.selection) {\n    console.error('Unable to insert inline object without selection')\n    return\n  }\n\n  const [focusTextBlock] = Array.from(\n    Editor.nodes(operation.editor, {\n      at: operation.editor.selection.focus.path,\n      match: (node) => operation.editor.isTextBlock(node),\n    }),\n  ).at(0) ?? [undefined, undefined]\n\n  if (!focusTextBlock) {\n    console.error('Unable to perform action without focus text block')\n    return\n  }\n\n  const block = toSlateValue(\n    [\n      {\n        _type: context.schema.block.name,\n        _key: context.keyGenerator(),\n        children: [parsedInlineObject],\n      },\n    ],\n    {schemaTypes: context.schema},\n  ).at(0) as unknown as Element\n  const child = block?.children.at(0)\n\n  if (!child) {\n    console.error('Unable to insert inline object')\n    return\n  }\n\n  Transforms.insertNodes(operation.editor, child)\n}\n","import {Editor, Transforms} from 'slate'\nimport type {BehaviorOperationImplementation} from './behavior.operations'\n\nexport const insertSpanOperationImplementation: BehaviorOperationImplementation<\n  'insert.span'\n> = ({context, operation}) => {\n  if (!operation.editor.selection) {\n    console.error('Unable to perform action without selection', operation)\n    return\n  }\n\n  const [focusBlock, focusBlockPath] = Array.from(\n    Editor.nodes(operation.editor, {\n      at: operation.editor.selection.focus.path,\n      match: (node) => operation.editor.isTextBlock(node),\n    }),\n  )[0] ?? [undefined, undefined]\n\n  if (!focusBlock || !focusBlockPath) {\n    console.error('Unable to perform action without focus block', operation)\n    return\n  }\n\n  const markDefs = focusBlock.markDefs ?? []\n  const annotations = operation.annotations\n    ? operation.annotations.map((annotation) => ({\n        _type: annotation.name,\n        _key: context.keyGenerator(),\n        ...annotation.value,\n      }))\n    : undefined\n\n  if (annotations && annotations.length > 0) {\n    Transforms.setNodes(operation.editor, {\n      markDefs: [...markDefs, ...annotations],\n    })\n  }\n\n  Transforms.insertNodes(operation.editor, {\n    _type: 'span',\n    _key: context.keyGenerator(),\n    text: operation.text,\n    marks: [\n      ...(annotations?.map((annotation) => annotation._key) ?? []),\n      ...(operation.decorators ?? []),\n    ],\n  })\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 {parseBlock} from '../internal-utils/parse-blocks'\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 {isEmptyTextBlock} from '../utils'\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: {refreshKeys: false, validateFields: true},\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 {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 '../selection/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 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 {insertInlineObjectOperationImplementation} from './behavior.operation.insert-inline-object'\nimport {insertSpanOperationImplementation} from './behavior.operation.insert-span'\nimport {insertBlockOperationImplementation} from './behavior.operation.insert.block'\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  TReturnType = void,\n> = ({\n  context,\n  operation,\n}: {\n  context: BehaviorOperationImplementationContext\n  operation: PickFromUnion<BehaviorOperation, 'type', TBehaviorOperationType>\n}) => TReturnType\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.inline object': insertInlineObjectOperationImplementation,\n  'insert.span': insertSpanOperationImplementation,\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  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.inline object': {\n        behaviorOperationImplementations['insert.inline object']({\n          context,\n          operation: operation,\n        })\n        break\n      }\n      case 'insert.span': {\n        behaviorOperationImplementations['insert.span']({\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","import {Editor} from 'slate'\nimport {defaultKeyGenerator} from './key-generator'\n\nconst CURRENT_OPERATION_ID: WeakMap<Editor, string | undefined> = new WeakMap()\n\nexport function withApplyingBehaviorOperations(editor: Editor, fn: () => void) {\n  CURRENT_OPERATION_ID.set(editor, defaultKeyGenerator())\n  Editor.withoutNormalizing(editor, fn)\n  CURRENT_OPERATION_ID.set(editor, undefined)\n}\n\nexport function getCurrentOperationId(editor: Editor) {\n  return CURRENT_OPERATION_ID.get(editor)\n}\n\nexport function isApplyingBehaviorOperations(editor: Editor) {\n  return getCurrentOperationId(editor) !== undefined\n}\n","import {Editor} from 'slate'\nimport {slateRangeToSelection} from '../../internal-utils/slate-utils'\nimport {insertTextOperationImplementation} from '../../operations/behavior.operation.insert.text'\nimport {performOperation} from '../../operations/behavior.operations'\nimport type {EditorActor} from '../editor-machine'\nimport {isApplyingBehaviorOperations} from '../with-applying-behavior-operations'\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 (isApplyingBehaviorOperations(editor)) {\n        editorDelete(options)\n        return\n      }\n\n      const at = options?.at ?? editor.selection\n\n      if (!at) {\n        console.error('Unexpected call to .delete(...) without `at` option')\n        return\n      }\n\n      const range = Editor.range(editor, at)\n\n      const selection = slateRangeToSelection({\n        schema: editorActor.getSnapshot().context.schema,\n        editor,\n        range,\n      })\n\n      if (!selection) {\n        console.error(\n          'Unexpected call to .delete(...) with invalid `at` option',\n        )\n        return\n      }\n\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    }\n\n    editor.deleteBackward = (unit) => {\n      if (isApplyingBehaviorOperations(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 (isApplyingBehaviorOperations(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 (isApplyingBehaviorOperations(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 (isApplyingBehaviorOperations(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 (isApplyingBehaviorOperations(editor)) {\n        insertTextOperationImplementation({\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 (isApplyingBehaviorOperations(editor)) {\n        insertTextOperationImplementation({\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 (isApplyingBehaviorOperations(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 (isApplyingBehaviorOperations(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 (isApplyingBehaviorOperations(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 {isChangingRemotely} from '../../internal-utils/withChanges'\nimport {isRedoing, isUndoing} from '../../internal-utils/withUndoRedo'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\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 {isChangingRemotely} from '../../internal-utils/withChanges'\nimport {isRedoing, isUndoing} from '../../internal-utils/withUndoRedo'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\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      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          editorActor.send({type: 'normalizing'})\n          Transforms.setNodes(\n            editor,\n            {_key: editorActor.getSnapshot().context.keyGenerator()},\n            {at: path},\n          )\n          editorActor.send({type: 'done normalizing'})\n          return\n        }\n        // Set keys on it's children\n        for (const [child, childPath] of Node.children(editor, path)) {\n          if (!child._key) {\n            editorActor.send({type: 'normalizing'})\n            Transforms.setNodes(\n              editor,\n              {_key: editorActor.getSnapshot().context.keyGenerator()},\n              {at: childPath},\n            )\n            editorActor.send({type: 'done normalizing'})\n            return\n          }\n        }\n      }\n      normalizeNode(entry)\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 type {PortableTextSlateEditor} from '../types/editor'\nimport {isKeyedSegment} from '../utils'\nimport {isEqualToEmptyEditor, toSlateValue} from './values'\nimport {KEY_TO_SLATE_ELEMENT} from './weakMaps'\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  // Ignore patches targeting nested void data, like 'markDefs'\n  if (isTextBlock && patch.path.length > 1 && patch.path[1] !== 'children') {\n    return false\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 {get, isUndefined, omitBy} from 'lodash'\nimport {\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  if (operation.path.length === 1) {\n    const block = children[operation.path[0]]\n    if (typeof block._key !== 'string') {\n      throw new Error('Expected block to have a _key')\n    }\n    const setNode = omitBy(\n      {...children[operation.path[0]], ...operation.newProperties},\n      isUndefined,\n    ) as unknown as Descendant\n    return [\n      set(fromSlateValue([setNode], schema.block.name)[0], [\n        {_key: block._key},\n      ]),\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        const keys = Object.keys(operation.newProperties)\n        keys.forEach((keyName) => {\n          // Special case for setting _key on a child. We have to target it by index and not the _key.\n          if (keys.length === 1 && keyName === '_key') {\n            const val = get(operation.newProperties, keyName)\n            patches.push(\n              set(val, [\n                {_key: blockKey},\n                'children',\n                block.children.indexOf(child),\n                keyName,\n              ]),\n            )\n          } else {\n            const val = get(operation.newProperties, keyName)\n            patches.push(\n              set(val, [\n                {_key: blockKey},\n                'children',\n                {_key: childKey},\n                keyName,\n              ]),\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 {\n  IS_PROCESSING_REMOTE_CHANGES,\n  KEY_TO_VALUE_ELEMENT,\n} from '../../internal-utils/weakMaps'\nimport {withRemoteChanges} from '../../internal-utils/withChanges'\nimport {\n  isPatching,\n  PATCHING,\n  withoutPatching,\n} from '../../internal-utils/withoutPatching'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport type {RelayActor} from '../relay-machine'\nimport {getCurrentOperationId} from '../with-applying-behavior-operations'\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: getCurrentOperationId(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 {isChangingRemotely} from '../../internal-utils/withChanges'\nimport {isRedoing, isUndoing} from '../../internal-utils/withUndoRedo'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\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 {isListBlock} from '../../internal-utils/parse-blocks'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\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        editorActor.send({type: 'normalizing'})\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        editorActor.send({type: 'done normalizing'})\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        editorActor.send({type: 'normalizing'})\n        Transforms.setNodes(editor, {_key: key}, {at: path})\n        editorActor.send({type: 'done normalizing'})\n        return\n      }\n\n      normalizeNode(entry)\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 {SLATE_TO_PORTABLE_TEXT_RANGE} from '../../internal-utils/weakMaps'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\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 './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 {\n  KEY_TO_SLATE_ELEMENT,\n  KEY_TO_VALUE_ELEMENT,\n} from '../internal-utils/weakMaps'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorActor} from './editor-machine'\nimport {withPlugins} from './plugins/with-plugins'\nimport type {RelayActor} from './relay-machine'\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 {EditorSnapshot} from '..'\nimport type {BehaviorEvent} from '../behaviors'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport type {PickFromUnion} from '../type-utils'\nimport type {PortableTextSlateEditor} from '../types/editor'\n\nexport type EditorDom = {\n  getBlockNodes: (snapshot: EditorSnapshot) => Array<Node>\n  getChildNodes: (snapshot: EditorSnapshot) => Array<Node>\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    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 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 * as selectors from '../selectors'\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 (!selectors.isSelectionCollapsed(snapshot)) {\n      return false\n    }\n\n    const caretWordSelection = selectors.getCaretWordSelection(snapshot)\n\n    if (\n      !caretWordSelection ||\n      !selectors.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\nexport const coreAnnotationBehaviors = {\n  addAnnotationOnCollapsedSelection,\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  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  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 * as selectors from '../selectors'\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 = selectors.isSelectionCollapsed(snapshot)\n\n    if (!collapsedSelection) {\n      return false\n    }\n\n    const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n    const nextBlock = selectors.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 = selectors.isSelectionCollapsed(snapshot)\n\n    if (!collapsedSelection) {\n      return false\n    }\n\n    const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n    const previousBlock = selectors.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 = selectors.getFocusBlockObject(snapshot)\n    const collapsedSelection = selectors.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 (\n      snapshot.context.selection &&\n      !selectors.isSelectionCollapsed(snapshot)\n    ) {\n      return false\n    }\n\n    const focusBlockObject = selectors.getFocusBlockObject({\n      ...snapshot,\n      context: {\n        ...snapshot.context,\n        selection: event.position.selection,\n      },\n    })\n    const previousBlock = selectors.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 (\n      snapshot.context.selection &&\n      !selectors.isSelectionCollapsed(snapshot)\n    ) {\n      return false\n    }\n\n    const focusBlockObject = selectors.getFocusBlockObject({\n      ...snapshot,\n      context: {\n        ...snapshot.context,\n        selection: event.position.selection,\n      },\n    })\n    const nextBlock = selectors.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 = selectors.getFocusTextBlock(snapshot)\n    const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n    const previousBlock = selectors.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 = selectors.getFocusTextBlock(snapshot)\n    const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n    const nextBlock = selectors.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 '../internal-utils/drag-selection'\nimport * as selectors from '../selectors'\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 = selectors.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        ? selectors.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        ? selectors.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        ? selectors.isOverlappingSelection(dropPosition)({\n            ...snapshot,\n            context: {\n              ...snapshot.context,\n              selection: dragSelection,\n            },\n          })\n        : false\n\n      const draggingEntireBlocks = selectors.isSelectingEntireBlocks({\n        ...snapshot,\n        context: {\n          ...snapshot.context,\n          selection: dragSelection,\n        },\n      })\n\n      const draggedBlocks = selectors.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 * as selectors from '../selectors'\nimport * as utils from '../utils'\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 = selectors.getFocusTextBlock(snapshot)\n    const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n    if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n      return false\n    }\n\n    const atTheEndOfBlock =\n      selectors.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 = selectors.getFocusTextBlock(snapshot)\n    const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n    if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n      return false\n    }\n\n    const focusSpan = selectors.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 =\n      selectors.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 (!selectors.isSelectionExpanded(snapshot)) {\n      return false\n    }\n\n    const firstBlock = selectors.getFirstBlock(snapshot)\n    const lastBlock = selectors.getLastBlock(snapshot)\n\n    if (!firstBlock || !lastBlock) {\n      return false\n    }\n\n    const firstBlockStartPoint = utils.getBlockStartPoint({\n      context: snapshot.context,\n      block: firstBlock,\n    })\n    const selectionStartPoint = utils.getSelectionStartPoint(\n      snapshot.context.selection,\n    )\n    const lastBlockEndPoint = utils.getBlockEndPoint({\n      context: snapshot.context,\n      block: lastBlock,\n    })\n    const selectionEndPoint = utils.getSelectionEndPoint(\n      snapshot.context.selection,\n    )\n\n    if (\n      utils.isEqualSelectionPoints(firstBlockStartPoint, selectionStartPoint) &&\n      utils.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 (!selectors.isSelectionExpanded(snapshot)) {\n      return false\n    }\n\n    const selectedBlocks = selectors.getSelectedBlocks(snapshot)\n    const selectionStartBlock = selectors.getSelectionStartBlock(snapshot)\n    const selectionEndBlock = selectors.getSelectionEndBlock(snapshot)\n\n    if (!selectionStartBlock || !selectionEndBlock) {\n      return false\n    }\n\n    const startBlockStartPoint = utils.getBlockStartPoint({\n      context: snapshot.context,\n      block: selectionStartBlock,\n    })\n    const selectionStartPoint = utils.getSelectionStartPoint(\n      snapshot.context.selection,\n    )\n    const endBlockEndPoint = utils.getBlockEndPoint({\n      context: snapshot.context,\n      block: selectionEndBlock,\n    })\n    const selectionEndPoint = utils.getSelectionEndPoint(\n      snapshot.context.selection,\n    )\n\n    if (\n      utils.isEqualSelectionPoints(selectionStartPoint, startBlockStartPoint) &&\n      utils.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 = selectors.isSelectionCollapsed(snapshot)\n    const focusInlineObject = selectors.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 {getChildKeyFromSelectionPoint} from '../selection/selection-point'\nimport {isSelectionCollapsed} from './util.is-selection-collapsed'\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 {isListBlock} from '../internal-utils/parse-blocks'\nimport {defaultKeyboardShortcuts} from '../keyboard-shortcuts/default-keyboard-shortcuts'\nimport * as selectors from '../selectors'\nimport {\n  getBlockEndPoint,\n  getBlockStartPoint,\n  isEqualSelectionPoints,\n} from '../utils'\nimport {isAtTheBeginningOfBlock} from '../utils/util.at-the-beginning-of-block'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\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 = selectors.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 = selectors.isSelectionCollapsed(snapshot)\n    const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n    const focusSpan = selectors.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 = selectors.getFocusListBlock(snapshot)\n    const nextBlock = selectors.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 = selectors.getFocusTextBlock(snapshot)\n    const previousBlock = selectors.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 blocksToDelete = selectors.getSelectedBlocks({\n      ...snapshot,\n      context: {\n        ...snapshot.context,\n        selection: event.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 = selectors.getSelectionStartPoint({\n      ...snapshot,\n      context: {\n        ...snapshot.context,\n        selection: event.at,\n      },\n    })\n    const deleteEndPoint = selectors.getSelectionEndPoint({\n      ...snapshot,\n      context: {\n        ...snapshot.context,\n        selection: event.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 = selectors.isSelectionCollapsed(snapshot)\n    const focusListBlock = selectors.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 = selectors.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 = selectors.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 = selectors.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 = selectors.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 = selectors.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 {coreInsertBreakBehaviors} from './behavior.core.insert-break'\nimport {coreListBehaviors} from './behavior.core.lists'\n\nexport const coreBehaviorsConfig = [\n  coreAnnotationBehaviors.addAnnotationOnCollapsedSelection,\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  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 {isActiveAnnotation} from '../selectors'\nimport * as selectors from '../selectors'\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 = selectors.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'\nimport {blockOffsetsToSelection} from '../utils'\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 * as selectors from '../selectors'\nimport * as utils from '../utils'\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      if (!snapshot.context.selection) {\n        return false\n      }\n\n      return {selection: snapshot.context.selection}\n    },\n    actions: [\n      ({event}, {selection}) => [\n        raise({\n          type: 'delete',\n          direction: 'backward',\n          unit: event.unit,\n          at: selection,\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 = selectors.getPreviousBlock(snapshot)\n      const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n\n      if (!previousBlock || !focusTextBlock) {\n        return false\n      }\n\n      if (!selectors.isAtTheStartOfBlock(focusTextBlock)(snapshot)) {\n        return false\n      }\n\n      const previousBlockEndPoint = utils.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      if (!snapshot.context.selection) {\n        return false\n      }\n\n      return {selection: snapshot.context.selection}\n    },\n    actions: [\n      ({event}, {selection}) => [\n        raise({\n          type: 'delete',\n          direction: 'forward',\n          unit: event.unit,\n          at: selection,\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 = selectors.getNextBlock(snapshot)\n      const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n\n      if (!nextBlock || !focusTextBlock) {\n        return false\n      }\n\n      if (!selectors.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        }),\n      ],\n    ],\n  }),\n  defineBehavior({\n    on: 'delete.child',\n    guard: ({snapshot, event}) => {\n      const focusChild = selectors.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 = utils.blockOffsetsToSelection({\n        context: snapshot.context,\n        offsets: event.at,\n      })\n\n      if (!selection) {\n        return false\n      }\n\n      const trimmedSelection = selectors.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 * as selectors from '../selectors'\nimport {getActiveDecorators} from '../selectors/selector.get-active-decorators'\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 = selectors.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 = selectors.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 {getFocusTextBlock} from '../selectors'\nimport {isEmptyTextBlock} from '../utils'\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}) => event.placement === 'before',\n    actions: [\n      ({event}) =>\n        event.blocks.map((block, index) =>\n          raise({\n            type: 'insert.block',\n            block,\n            placement: index === 0 ? 'before' : 'after',\n            select: event.select ?? 'end',\n          }),\n        ),\n    ],\n  }),\n  defineBehavior({\n    on: 'insert.blocks',\n    guard: ({event}) => event.placement === 'after',\n    actions: [\n      ({event}) =>\n        event.blocks.map((block) =>\n          raise({\n            type: 'insert.block',\n            block,\n            placement: 'after',\n            select: event.select ?? 'end',\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      return {focusTextBlock}\n    },\n    actions: [\n      ({snapshot, event}, {focusTextBlock}) =>\n        event.blocks.length === 1\n          ? [\n              raise({\n                type: 'insert.block',\n                block: event.blocks[0],\n                placement: 'auto',\n                select: event.select ?? 'end',\n              }),\n            ]\n          : isEmptyTextBlock(snapshot.context, focusTextBlock.node)\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            : event.blocks.flatMap((block, index) =>\n                index === 0\n                  ? [\n                      raise({\n                        type: 'split',\n                      }),\n                      raise({\n                        type: 'select.previous block',\n                        select: 'end',\n                      }),\n                      raise({\n                        type: 'insert.block',\n                        block,\n                        placement: 'auto',\n                        select: event.select ?? 'end',\n                      }),\n                    ]\n                  : index === event.blocks.length - 1\n                    ? [\n                        raise({\n                          type: 'select.next block',\n                          select: 'start',\n                        }),\n                        raise({\n                          type: 'insert.block',\n                          block,\n                          placement: 'auto',\n                          select: event.select ?? 'end',\n                        }),\n                      ]\n                    : [\n                        raise({\n                          type: 'insert.block',\n                          block,\n                          placement: 'after',\n                          select: event.select ?? 'end',\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.soft break',\n    actions: [() => [raise({type: 'insert.text', text: '\\n'})]],\n  }),\n]\n","import {defaultKeyboardShortcuts} from '../keyboard-shortcuts/default-keyboard-shortcuts'\nimport * as selectors from '../selectors'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractKeyboardBehaviors = [\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      selectors.isSelectionCollapsed(snapshot) &&\n      selectors.getFocusInlineObject(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","import {getSelectedTextBlocks, isActiveListItem} from '../selectors'\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, getPreviousBlock} from '../selectors'\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 {getNextBlock, getPreviousBlock} from '../selectors'\nimport {getBlockEndPoint, getBlockStartPoint} from '../utils'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractSelectBehaviors = [\n  defineBehavior({\n    on: 'select.previous block',\n    guard: ({snapshot, event}) => {\n      const previousBlock = getPreviousBlock(snapshot)\n\n      if (!previousBlock) {\n        return false\n      }\n\n      const point =\n        event.select === 'end'\n          ? getBlockEndPoint({\n              context: snapshot.context,\n              block: previousBlock,\n            })\n          : getBlockStartPoint({\n              context: snapshot.context,\n              block: previousBlock,\n            })\n\n      return {\n        selection: {\n          anchor: point,\n          focus: point,\n        },\n      }\n    },\n    actions: [\n      (_, {selection}) => [\n        raise({\n          type: 'select',\n          at: selection,\n        }),\n      ],\n    ],\n  }),\n  defineBehavior({\n    on: 'select.next block',\n    guard: ({snapshot, event}) => {\n      const nextBlock = getNextBlock(snapshot)\n\n      if (!nextBlock) {\n        return false\n      }\n\n      const point =\n        event.select === 'end'\n          ? getBlockEndPoint({\n              context: snapshot.context,\n              block: nextBlock,\n            })\n          : getBlockStartPoint({\n              context: snapshot.context,\n              block: nextBlock,\n            })\n\n      return {selection: {anchor: point, focus: point}}\n    },\n    actions: [\n      (_, {selection}) => [\n        raise({\n          type: 'select',\n          at: selection,\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 {parseBlock} from '../internal-utils/parse-blocks'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\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      selectors.isSelectionCollapsed(snapshot) &&\n      selectors.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      selectors.isSelectionCollapsed(snapshot) &&\n      selectors.getFocusBlockObject(snapshot),\n    actions: [],\n  }),\n\n  defineBehavior({\n    on: 'split',\n    guard: ({snapshot}) => {\n      const selection = snapshot.context.selection\n\n      if (!selection || utils.isSelectionCollapsed(selection)) {\n        return false\n      }\n\n      const selectionStartBlock = selectors.getSelectionStartBlock(snapshot)\n      const selectionEndBlock = selectors.getSelectionEndBlock(snapshot)\n\n      if (!selectionStartBlock || !selectionEndBlock) {\n        return false\n      }\n\n      if (\n        !isTextBlock(snapshot.context, selectionStartBlock.node) &&\n        isTextBlock(snapshot.context, selectionEndBlock.node)\n      ) {\n        return {selection}\n      }\n\n      return false\n    },\n    actions: [(_, {selection}) => [raise({type: 'delete', at: selection})]],\n  }),\n\n  defineBehavior({\n    on: 'split',\n    guard: ({snapshot}) => {\n      const selection = snapshot.context.selection\n\n      if (!selection || utils.isSelectionCollapsed(selection)) {\n        return false\n      }\n\n      const selectionStartBlock = selectors.getSelectionStartBlock(snapshot)\n      const selectionEndBlock = selectors.getSelectionEndBlock(snapshot)\n\n      if (!selectionStartBlock || !selectionEndBlock) {\n        return false\n      }\n\n      if (selectionStartBlock.node._key === selectionEndBlock.node._key) {\n        return false\n      }\n\n      const startPoint = utils.getSelectionStartPoint(selection)\n      const startBlockEndPoint = utils.getBlockEndPoint({\n        context: snapshot.context,\n        block: selectionStartBlock,\n      })\n      const endPoint = utils.getSelectionEndPoint(selection)\n      const endBlockStartPoint = utils.getBlockStartPoint({\n        context: snapshot.context,\n        block: selectionEndBlock,\n      })\n\n      const selectedValue = selectors.getSelectedValue(snapshot)\n\n      const blocksInBetween = selectedValue.filter(\n        (block) =>\n          block._key !== selectionStartBlock.node._key &&\n          block._key !== selectionEndBlock.node._key,\n      )\n\n      return {\n        startPoint,\n        startBlockEndPoint,\n        endPoint,\n        endBlockStartPoint,\n        blocksInBetween,\n      }\n    },\n    actions: [\n      (\n        _,\n        {\n          startPoint,\n          startBlockEndPoint,\n          endPoint,\n          endBlockStartPoint,\n          blocksInBetween,\n        },\n      ) => [\n        raise({\n          type: 'delete',\n          at: {anchor: startPoint, focus: startBlockEndPoint},\n        }),\n        ...blocksInBetween.map((block) =>\n          raise({type: 'delete.block', at: [{_key: block._key}]}),\n        ),\n        raise({\n          type: 'delete',\n          at: {anchor: endBlockStartPoint, focus: endPoint},\n        }),\n      ],\n    ],\n  }),\n\n  defineBehavior({\n    on: 'split',\n    guard: ({snapshot}) => {\n      const selection = snapshot.context.selection\n\n      if (!selection || utils.isSelectionCollapsed(selection)) {\n        return false\n      }\n\n      return {selection}\n    },\n    actions: [\n      (_, {selection}) => [\n        raise({type: 'delete', at: selection}),\n        raise({type: 'split'}),\n      ],\n    ],\n  }),\n\n  defineBehavior({\n    on: 'split',\n    guard: ({snapshot}) => {\n      const selection = snapshot.context.selection\n\n      if (!selection || !utils.isSelectionCollapsed(selection)) {\n        return false\n      }\n\n      const selectionStartPoint = utils.getSelectionStartPoint(selection)\n\n      const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n\n      if (!focusTextBlock) {\n        return false\n      }\n\n      const blockEndPoint = utils.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          refreshKeys: false,\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        utils.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, isActiveStyle} from '../selectors'\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 * as selectors from '../selectors'\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 = selectors.getFocusSpan(snapshot)\n      const selectionCollapsed = selectors.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 = selectors.getFocusSpan(snapshot)\n      const selectionCollapsed = selectors.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 &&\n        selectors.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 {BlockWithOptionalKey} 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  | SyntheticBehaviorEvent\n  | CustomBehaviorEvent\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.inline object',\n  'insert.block',\n  'insert.span',\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.inline object'>\n      inlineObject: {\n        name: string\n        value?: {[prop: string]: unknown}\n      }\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.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, '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.soft break',\n  'list item.add',\n  'list item.remove',\n  'list item.toggle',\n  'move.block down',\n  'move.block up',\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.soft break'>\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.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 {withApplyingBehaviorOperations} from '../editor/with-applying-behavior-operations'\nimport {withUndoStep} from '../editor/with-undo-step'\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 CustomBehaviorEvent,\n  type SyntheticBehaviorEvent,\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: '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:\n      | {type: 'set drag ghost'; ghost: HTMLElement}\n      | SyntheticBehaviorEvent\n      | CustomBehaviorEvent,\n  ) => void\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    withApplyingBehaviorOperations(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    for (const actionSet of eventBehavior.actions) {\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      if (actions.some((action) => action.type === 'execute')) {\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        withUndoStep(editor, () => {\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: '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: 'raise',\n                behaviors,\n                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        continue\n      }\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: '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: '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        if (action.type === 'execute') {\n          console.error('Unexpected action type: `execute`')\n        }\n      }\n    }\n\n    break\n  }\n\n  if (!defaultBehaviorOverwritten && isSyntheticBehaviorEvent(event)) {\n    nativeEvent?.preventDefault()\n\n    withApplyingBehaviorOperations(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 {BehaviorEvent} 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'\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: 'normalizing'\n    }\n  | {\n      type: 'update selection'\n      selection: EditorSelection\n    }\n  | {\n      type: 'done normalizing'\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\n/**\n * @internal\n */\nexport type InternalEditorEmittedEvent =\n  | OmitFromUnion<EditorEmittedEvent, 'type', 'patch'>\n  | InternalPatchEvent\n  | PatchesEvent\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    '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: 'raise',\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              type: 'behavior event',\n              behaviorEvent: eventSentBack,\n              editor: event.editor,\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  },\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    '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                        'normalizing': {\n                          target: 'normalizing',\n                        },\n                        'internal.patch': {\n                          actions: 'defer event',\n                          target: '#editor.setup.set up.writing.dirty',\n                        },\n                        'mutation': {\n                          actions: 'defer event',\n                          target: '#editor.setup.set up.writing.dirty',\n                        },\n                      },\n                    },\n                    normalizing: {\n                      entry: [\n                        () => {\n                          debug(\n                            'entry: setup->set up->writing->pristine->normalizing',\n                          )\n                        },\n                      ],\n                      exit: [\n                        () => {\n                          debug(\n                            'exit: setup->set up->writing->pristine->normalizing',\n                          )\n                        },\n                      ],\n                      on: {\n                        'done normalizing': {\n                          target: 'idle',\n                        },\n                        'internal.patch': {\n                          actions: 'defer event',\n                        },\n                        'mutation': {\n                          actions: 'defer event',\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  setup,\n  stateIn,\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: 'mutation delay passed'\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 debouncer': fromCallback(({sendBack}) => {\n      const interval = setInterval(\n        () => {\n          sendBack({type: 'mutation delay passed'})\n        },\n        process.env.NODE_ENV === 'test' ? 250 : 0,\n      )\n\n      return () => {\n        clearInterval(interval)\n      }\n    }),\n  },\n  guards: {\n    'is read-only': ({context}) => context.readOnly,\n    'is typing': stateIn({typing: 'typing'}),\n    'slate is normalizing': ({context}) =>\n      Editor.isNormalizing(context.slateEditor),\n  },\n  delays: {\n    'type debounce': process.env.NODE_ENV === 'test' ? 0 : 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                () => {\n                  debug('exit: typing->typing')\n                },\n              ],\n            },\n          },\n          on: {\n            'not typing': {\n              target: 'idle',\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 debouncer',\n          },\n          on: {\n            'mutation delay passed': {\n              guard: and([\n                not('is read-only'),\n                not('is typing'),\n                'slate is normalizing',\n              ]),\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 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 {\n  KEY_TO_VALUE_ELEMENT,\n  SLATE_TO_PORTABLE_TEXT_RANGE,\n} from '../../internal-utils/weakMaps'\nimport {addAnnotationOperationImplementation} from '../../operations/behavior.operation.annotation.add'\nimport {isActiveAnnotation} from '../../selectors'\nimport {getActiveAnnotationsMarks} from '../../selectors/selector.get-active-annotation-marks'\nimport {getActiveDecorators} from '../../selectors/selector.get-active-decorators'\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'\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      let paths: ReturnType<EditableAPI['addAnnotation']>\n\n      Editor.withoutNormalizing(editor, () => {\n        paths = addAnnotationOperationImplementation({\n          context: {\n            keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n            schema: types,\n          },\n          operation: {\n            type: 'annotation.add',\n            annotation: {name: type.name, value: value ?? {}},\n            editor,\n          },\n        })\n      })\n      editor.onChange()\n\n      return paths\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 {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((cld) => cld._type === types.span.name)\n              .map((cld) => cld.marks || []),\n          ) as string[],\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 type {PortableTextBlock} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport {\n  deleteText,\n  Editor,\n  Text,\n  Transforms,\n  type Descendant,\n  type Node,\n} from 'slate'\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 type {ActorRefFrom} from 'xstate'\nimport {debugWithName} from '../internal-utils/debug'\nimport {validateValue} from '../internal-utils/validateValue'\nimport {toSlateValue, VOID_CHILD_KEY} from '../internal-utils/values'\nimport {\n  isChangingRemotely,\n  withRemoteChanges,\n} from '../internal-utils/withChanges'\nimport {withoutPatching} from '../internal-utils/withoutPatching'\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'\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 empty value, remove everything in the editor and insert a placeholder block\n  if (!value || value.length === 0) {\n    debug('Value is empty')\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    isChanged = true\n  }\n  // Remove, replace or add nodes according to what is changed.\n  if (value && value.length > 0) {\n    const slateValueFromProps = toSlateValue(value, {\n      schemaTypes: context.schema,\n    })\n\n    if (streamBlocks) {\n      await new Promise<void>((resolve) => {\n        Editor.withoutNormalizing(slateEditor, () => {\n          withRemoteChanges(slateEditor, () => {\n            withoutPatching(slateEditor, () => {\n              if (doneSyncing) {\n                resolve()\n                return\n              }\n\n              isChanged = removeExtraBlocks({\n                slateEditor,\n                slateValueFromProps,\n              })\n\n              const processBlocks = async () => {\n                for await (const [\n                  currentBlock,\n                  currentBlockIndex,\n                ] of getStreamedBlocks({\n                  slateValue: slateValueFromProps,\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\n                resolve()\n              }\n\n              processBlocks()\n            })\n          })\n        })\n      })\n    } else {\n      Editor.withoutNormalizing(slateEditor, () => {\n        withRemoteChanges(slateEditor, () => {\n          withoutPatching(slateEditor, () => {\n            if (doneSyncing) {\n              return\n            }\n\n            isChanged = removeExtraBlocks({\n              slateEditor,\n              slateValueFromProps,\n            })\n\n            let index = 0\n\n            for (const currentBlock of slateValueFromProps) {\n              const {blockChanged, blockValid} = syncBlock({\n                context,\n                sendBack,\n                block: currentBlock,\n                index,\n                slateEditor,\n                value,\n              })\n\n              isChanged = blockChanged || isChanged\n              isValid = isValid && blockValid\n              index++\n            }\n          })\n        })\n      })\n    }\n  }\n\n  if (!isValid) {\n    debug('Invalid value, returning')\n    doneSyncing = true\n    sendBack({type: 'done syncing', value})\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      sendBack({\n        type: 'invalid value',\n        resolution: null,\n        value,\n      })\n      doneSyncing = true\n      sendBack({type: 'done syncing', value})\n      return\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      slateEditor.onChange()\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  sendBack({type: 'done syncing', value})\n}\n\nfunction removeExtraBlocks({\n  slateEditor,\n  slateValueFromProps,\n}: {\n  slateEditor: PortableTextSlateEditor\n  slateValueFromProps: Array<Descendant>\n}) {\n  let isChanged = false\n  const childrenLength = slateEditor.children.length\n\n  // Remove blocks that have become superfluous\n  if (slateValueFromProps.length < childrenLength) {\n    for (let i = childrenLength - 1; i > slateValueFromProps.length - 1; i--) {\n      Transforms.removeNodes(slateEditor, {\n        at: [i],\n      })\n    }\n    isChanged = true\n  }\n  return isChanged\n}\n\nasync function* getStreamedBlocks({\n  slateValue,\n}: {\n  slateValue: Array<Descendant>\n}) {\n  let index = 0\n  for await (const block of slateValue) {\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\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: Descendant\n  index: number\n  slateEditor: PortableTextSlateEditor\n  value: Array<PortableTextBlock>\n}) {\n  let blockChanged = false\n  let blockValid = true\n  const currentBlock = block\n  const currentBlockIndex = index\n  const oldBlock = slateEditor.children[currentBlockIndex]\n  const hasChanges = oldBlock && !isEqual(currentBlock, oldBlock)\n\n  Editor.withoutNormalizing(slateEditor, () => {\n    withRemoteChanges(slateEditor, () => {\n      withoutPatching(slateEditor, () => {\n        if (hasChanges && blockValid) {\n          const validationValue = [value[currentBlockIndex]]\n          const validation = validateValue(\n            validationValue,\n            context.schema,\n            context.keyGenerator,\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          if (validation.valid || validation.resolution?.autoResolve) {\n            if (oldBlock._key === currentBlock._key) {\n              if (debug.enabled) debug('Updating block', oldBlock, currentBlock)\n              _updateBlock(\n                slateEditor,\n                currentBlock,\n                oldBlock,\n                currentBlockIndex,\n              )\n            } else {\n              if (debug.enabled)\n                debug('Replacing block', oldBlock, currentBlock)\n              _replaceBlock(slateEditor, currentBlock, currentBlockIndex)\n            }\n            blockChanged = true\n          } else {\n            sendBack({\n              type: 'invalid value',\n              resolution: validation.resolution,\n              value,\n            })\n            blockValid = false\n          }\n        }\n\n        if (!oldBlock && blockValid) {\n          const validationValue = [value[currentBlockIndex]]\n          const validation = validateValue(\n            validationValue,\n            context.schema,\n            context.keyGenerator,\n          )\n          if (debug.enabled)\n            debug(\n              'Validating and inserting new block in the end of the value',\n              currentBlock,\n            )\n          if (validation.valid || validation.resolution?.autoResolve) {\n            Transforms.insertNodes(slateEditor, currentBlock, {\n              at: [currentBlockIndex],\n            })\n          } else {\n            debug('Invalid', validation)\n            sendBack({\n              type: 'invalid value',\n              resolution: validation.resolution,\n              value,\n            })\n            blockValid = false\n          }\n        }\n      })\n    })\n  })\n\n  return {blockChanged, blockValid}\n}\n\n/**\n * This code is moved out of the above algorithm to keep complexity down.\n * @internal\n */\nfunction _replaceBlock(\n  slateEditor: PortableTextSlateEditor,\n  currentBlock: Descendant,\n  currentBlockIndex: number,\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] === currentBlockIndex\n  if (selectionFocusOnBlock) {\n    Transforms.deselect(slateEditor)\n  }\n  Transforms.removeNodes(slateEditor, {at: [currentBlockIndex]})\n  Transforms.insertNodes(slateEditor, currentBlock, {at: [currentBlockIndex]})\n  slateEditor.onChange()\n  if (selectionFocusOnBlock) {\n    Transforms.select(slateEditor, currentSelection)\n  }\n}\n\n/**\n * This code is moved out of the above algorithm to keep complexity down.\n * @internal\n */\nfunction _updateBlock(\n  slateEditor: PortableTextSlateEditor,\n  currentBlock: Descendant,\n  oldBlock: Descendant,\n  currentBlockIndex: number,\n) {\n  // Update the root props on the block\n  Transforms.setNodes(slateEditor, currentBlock as Partial<Node>, {\n    at: [currentBlockIndex],\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(currentBlock) &&\n    slateEditor.isTextBlock(oldBlock)\n  ) {\n    const oldBlockChildrenLength = oldBlock.children.length\n    if (currentBlock.children.length < oldBlockChildrenLength) {\n      // Remove any children that have become superfluous\n      Array.from(\n        Array(oldBlockChildrenLength - currentBlock.children.length),\n      ).forEach((_, index) => {\n        const childIndex = oldBlockChildrenLength - 1 - index\n        if (childIndex > 0) {\n          debug('Removing child')\n          Transforms.removeNodes(slateEditor, {\n            at: [currentBlockIndex, childIndex],\n          })\n        }\n      })\n    }\n    currentBlock.children.forEach(\n      (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 = [currentBlockIndex, currentBlockChildIndex]\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            Transforms.setNodes(\n              slateEditor,\n              currentBlockChild as Partial<Node>,\n              {\n                at: path,\n              },\n            )\n            const isSpanNode =\n              Text.isText(currentBlockChild) &&\n              currentBlockChild._type === 'span' &&\n              Text.isText(oldBlockChild) &&\n              oldBlockChild._type === 'span'\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              Transforms.insertText(slateEditor, currentBlockChild.text, {\n                at: path,\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              Transforms.setNodes(\n                slateEditor,\n                {_key: VOID_CHILD_KEY},\n                {\n                  at: [...path, 0],\n                  voids: true,\n                },\n              )\n            }\n            // Replace the child if _key's are different\n          } else if (oldBlockChild) {\n            debug('Replacing child', currentBlockChild)\n            Transforms.removeNodes(slateEditor, {\n              at: [currentBlockIndex, currentBlockChildIndex],\n            })\n            Transforms.insertNodes(slateEditor, currentBlockChild as Node, {\n              at: [currentBlockIndex, currentBlockChildIndex],\n            })\n            slateEditor.onChange()\n            // Insert it if it didn't exist before\n          } else if (!oldBlockChild) {\n            debug('Inserting new child', currentBlockChild)\n            Transforms.insertNodes(slateEditor, currentBlockChild as Node, {\n              at: [currentBlockIndex, currentBlockChildIndex],\n            })\n            slateEditor.onChange()\n          }\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 {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\nimport {corePriority} from '../priority/priority.core'\nimport {createEditorPriority} from '../priority/priority.types'\nimport type {EditableAPI, PortableTextSlateEditor} from '../types/editor'\nimport {createSlateEditor, type SlateEditor} from './create-slate-editor'\nimport {createEditorDom} from './editor-dom'\nimport type {EditorActor} from './editor-machine'\nimport {editorMachine} from './editor-machine'\nimport {getEditorSnapshot} from './editor-selector'\nimport {defaultKeyGenerator} from './key-generator'\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'\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        case 'blur':\n          editorActor.send({\n            type: 'blur',\n            editor: slateEditor.instance,\n          })\n          break\n\n        case 'focus':\n          editorActor.send({\n            type: 'focus',\n            editor: slateEditor.instance,\n          })\n          break\n\n        case 'insert.block object':\n          editorActor.send({\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.instance,\n          })\n          break\n\n        default:\n          editorActor.send({\n            type: 'behavior event',\n            behaviorEvent: event,\n            editor: slateEditor.instance,\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 {createContext} from 'react'\nimport type {RelayActor} from './relay-machine'\n\nexport const RelayActorContext = createContext<RelayActor>({} as RelayActor)\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 {AddedAnnotationPaths} from '../operations/behavior.operation.annotation.add'\nimport type {\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 {useSelector} from '@xstate/react'\nimport {isEqual, uniq} from 'lodash'\nimport {\n  startTransition,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n  type ReactElement,\n} from 'react'\nimport {useSelected, useSlateStatic, type RenderLeafProps} from 'slate-react'\nimport type {\n  RenderAnnotationFunction,\n  RenderChildFunction,\n  RenderDecoratorFunction,\n} from '../../types/editor'\nimport {EditorActorContext} from '../editor-actor-context'\nimport {usePortableTextEditor} from '../hooks/usePortableTextEditor'\nimport {PortableTextEditor} from '../PortableTextEditor'\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  const portableTextEditor = usePortableTextEditor()\n  const blockSelected = useSelected()\n  const [focused, setFocused] = useState(false)\n  const [selected, setSelected] = useState(false)\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  const shouldTrackSelectionAndFocus =\n    annotationMarkDefs.length > 0 && blockSelected\n\n  useEffect(() => {\n    if (!shouldTrackSelectionAndFocus) {\n      setFocused(false)\n      return\n    }\n\n    const sel = PortableTextEditor.getSelection(portableTextEditor)\n\n    if (\n      sel &&\n      isEqual(sel.focus.path, path) &&\n      PortableTextEditor.isCollapsedSelection(portableTextEditor)\n    ) {\n      startTransition(() => {\n        setFocused(true)\n      })\n    }\n  }, [shouldTrackSelectionAndFocus, path, portableTextEditor])\n\n  // Function to check if this leaf is currently inside the user's text selection\n  const setSelectedFromRange = useCallback(() => {\n    if (!shouldTrackSelectionAndFocus) {\n      return\n    }\n\n    const winSelection = window.getSelection()\n\n    if (!winSelection) {\n      setSelected(false)\n      return\n    }\n\n    if (winSelection && winSelection.rangeCount > 0) {\n      const range = winSelection.getRangeAt(0)\n\n      if (spanRef.current && range.intersectsNode(spanRef.current)) {\n        setSelected(true)\n      } else {\n        setSelected(false)\n      }\n    } else {\n      setSelected(false)\n    }\n  }, [shouldTrackSelectionAndFocus])\n\n  useEffect(() => {\n    if (!shouldTrackSelectionAndFocus) {\n      return undefined\n    }\n\n    const onBlur = editorActor.on('blurred', () => {\n      setFocused(false)\n      setSelected(false)\n    })\n\n    const onFocus = editorActor.on('focused', () => {\n      const sel = PortableTextEditor.getSelection(portableTextEditor)\n\n      if (\n        sel &&\n        isEqual(sel.focus.path, path) &&\n        PortableTextEditor.isCollapsedSelection(portableTextEditor)\n      ) {\n        setFocused(true)\n      }\n\n      setSelectedFromRange()\n    })\n\n    const onSelection = editorActor.on('selection', (event) => {\n      if (\n        event.selection &&\n        isEqual(event.selection.focus.path, path) &&\n        PortableTextEditor.isCollapsedSelection(portableTextEditor)\n      ) {\n        setFocused(true)\n      } else {\n        setFocused(false)\n      }\n      setSelectedFromRange()\n    })\n\n    return () => {\n      onBlur.unsubscribe()\n      onFocus.unsubscribe()\n      onSelection.unsubscribe()\n    }\n  }, [\n    editorActor,\n    path,\n    portableTextEditor,\n    setSelectedFromRange,\n    shouldTrackSelectionAndFocus,\n  ])\n\n  useEffect(() => setSelectedFromRange(), [setSelectedFromRange])\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 = props.renderDecorator({\n        children: children,\n        editorElementRef: spanRef,\n        focused,\n        path,\n        selected,\n        schemaType: legacyDecoratorSchemaType,\n        value: mark,\n        type: legacyDecoratorSchemaType,\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            {props.renderAnnotation({\n              block,\n              children: children,\n              editorElementRef: spanRef,\n              focused,\n              path,\n              selected,\n              schemaType: legacyAnnotationSchemaType,\n              value: annotationMarkDef,\n              type: legacyAnnotationSchemaType,\n            })}\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 = props.renderChild({\n        annotations: annotationMarkDefs,\n        children: children,\n        editorElementRef: spanRef,\n        focused,\n        path,\n        schemaType: legacySchema.span,\n        selected,\n        value: child,\n        type: legacySchema.span,\n      })\n    }\n  }\n\n  return (\n    <span {...props.attributes} ref={spanRef}>\n      {children}\n    </span>\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","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 {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 {parseBlocks} from '../internal-utils/parse-blocks'\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 {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\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 {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'\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\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                      refreshKeys: false,\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    (node: HTMLDivElement | null) => {\n      if (typeof forwardedRef === 'function') {\n        forwardedRef(node)\n      } else if (forwardedRef) {\n        forwardedRef.current = node\n      }\n\n      if (node) {\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          validateSelection(slateEditor, node)\n        })\n\n        mutationObserver.observe(node, {\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, slateEditor],\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// 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(slateEditor: Editor, activeElement: HTMLDivElement) {\n  if (!slateEditor.selection) {\n    return\n  }\n  const root = ReactEditor.findDocumentOrShadowRoot(slateEditor)\n  // Return if the editor isn't the active element\n  if (activeElement !== 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, [0, 0])\n    }\n    slateEditor.onChange()\n  }\n}\n","import React from 'react'\n\ntype ConstantRef<TConstant> = {constant: TConstant}\n\nexport default function useConstant<TConstant>(\n  factory: () => TConstant,\n): TConstant {\n  const ref = React.useRef<ConstantRef<TConstant>>(null)\n\n  if (!ref.current) {\n    ref.current = {constant: factory()}\n  }\n\n  return ref.current.constant\n}\n","import type React from 'react'\nimport {useEffect} from 'react'\nimport {Slate} from 'slate-react'\nimport type {EditorConfig} from '../editor'\nimport {stopActor} from '../internal-utils/stop-actor'\nimport useConstant from '../internal-utils/use-constant'\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} = useConstant(() => {\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.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","_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","getBlockPath","blockPath","from","Editor","nodes","at","match","n","blockIndex","getFocusBlock","selection","node","focus","path","slice","getFocusSpan","isTextSpan","getSelectionStartBlock","selectionStartPoint","Range","start","getPointBlock","point","getSelectionEndBlock","selectionEndPoint","end","getFocusChild","focusBlock","focusBlockPath","childIndex","focusChild","Node","getPointChild","pointChild","getFirstBlock","firstBlockPath","getLastBlock","lastBlockPath","getNodeBlock","schema","isEditor","isBlockElement","elementToBlock","element","parent","mode","some","isInline","blockObjects","blockObject","isListItemActive","listItem","selectedBlocks","isTextBlock","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","utils","eventSelectionFocusBlockKey","getBlockKeyFromSelectionPoint","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","blockIndexMap","get","getChildKeyFromSelectionPoint","spanSelectionPoint","blockOffsetToSpanSelectionPoint","blockOffset","childPath","pathChild","isSpan","concat","min","IS_PROCESSING_REMOTE_CHANGES","WeakMap","KEY_TO_SLATE_ELEMENT","KEY_TO_VALUE_ELEMENT","SLATE_TO_PORTABLE_TEXT_RANGE","EditorActorContext","createContext","DropIndicator","Symbol","for","jsx","width","borderBottom","zIndex","RenderDefaultBlockObject","userSelect","jsxs","RenderDefaultInlineObject","inlineObject","getDragSelection","dragSelection","selectors","draggingCollapsedSelection","draggedTextBlock","draggedSpan","selectionStartBlock","selectionEndBlock","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","whatwgRNG","rnds8","Uint8Array","getRandomValues","reduce","str","createEditorPriority","config","id","reference","corePriority","createCoreBlockElementBehaviorsConfig","key","onSetDragPositionBlock","behavior","defineBehavior","guard","dropFocusBlock","dragOrigin","draggedBlock","actions","type","effect","priority","importance","forward","useCoreBlockElementBehaviors","useContext","t2","behaviorConfigs","behaviorConfig","send","behaviorConfig_0","RenderBlockObject","dragPositionBlock","setDragPositionBlock","useState","blockObjectRef","useRef","selected","useSelected","focused","useSlateSelector","isCollapsed","legacySchemaType","legacySchema","schemaType","error","attributes","readOnly","renderBlock","editorElementRef","RenderInlineObject","inlineObjectRef","useSlateStatic","inlineObjects","findPath","display","renderChild","annotations","RenderTextBlock","blockRef","listIndex","listIndexMap","renderStyle","legacyStyleSchemaType","renderListItem","legacyListItemSchemaType","lists","list","level","spellCheck","RenderElement","useSelector","_temp","_temp2","slateStatic","s_0","s","getLegacySchema","PortableTextEditorContext","usePortableTextEditor","forEachActor","actorRef","callback","Object","values","forEach","stopActor","persistedSnapshots","ref","observers","Set","systemSnapshot","system","stop","_snapshot","_processingStatus","converterJson","mimeType","serialize","portableTextConverter","converters","converter","originEvent","reason","deserialize","converterPortableText","blocks","data","JSON","stringify","parse","parsedBlocks","flatMap","parsedBlock","parseBlock","options","refreshKeys","validateFields","createConverterTextHtml","html","toHTML","onMissingComponent","components","unknownType","htmlToBlocks","portableText","keyGenerator","unstable_whitespaceOnPasteMode","createConverterTextPlain","span","inlineObjectType","title","blockObjectType","filter","textToHtml","escapeHtml","split","line","replace","entityMap","String","createCoreConverters","compileType","rawType","Schema","compile","types","levelIndexMaps","Map","buildIndexMaps","clear","previousListItem","set","levelIndexMap","levelCounter","createPlaceholderBlock","insertTextOperationImplementation","operation","decoratorState","markState","getMarkState","activeDecorators","getActiveDecorators","activeAnnotations","getActiveAnnotationsMarks","focusSpan","Transforms","insertText","state","markStateDecorators","mark","decorators","decorator","includes","insertNodes","EDITOR_TO_PENDING_SELECTION","getPreviousSpan","spanPath","previousSpan","reverse","Path","isBefore","getNextSpan","nextSpan","isAfter","withRemoteChanges","fn","prev","isChangingRemotely","IS_UDOING","IS_REDOING","withUndoing","isUndoing","setIsUndoing","withRedoing","isRedoing","setIsRedoing","defaultCompare","a","b","useEditorSelector","selector","compare","editorActorSnapshot","getEditorSnapshot","slateEditorInstance","_internal","instance","createWithPortableTextMarkModel","apply","normalizeNode","nodeEntry","nextNode","mergeNodes","voids","setNodes","orphanedAnnotations","def","markDefKeys","newMarkDefs","markDef","has","add","operations","op","properties","newProperties","previousSelectionIsCollapsed","newSelectionIsCollapsed","newFocusSpan","movedToNextSpan","movedToPreviousSpan","_block","depth","previousSpanAnnotations","nextSpanAnnotations","annotationsEnding","annotation","atTheEndOfAnnotation","annotationsStarting","atTheStartOfAnnotation","nextSpanDecorators","isExpanded","spanHasAnnotations","deletingFromTheEnd","deletingAllText","previousSpanHasSameAnnotation","nextSpanHasSameAnnotation","withoutNormalizing","onChange","targetBlock","targetPath","oldDefs","uniq","removeDecoratorOperationImplementation","hanging","eMark","lonelyEmptySpan","existingMarksWithoutDecorator","existingMark","cloneDiff","diff2","patch","CURRENT_UNDO_STEP","withUndoStep","current","undoStepId","getCurrentUndoStepId","SAVING","REMOTE_PATCHES","UNDO_STEP_LIMIT","isSaving","getRemotePatches","createWithUndoRedo","previousSnapshot","remotePatches","previousUndoStepId","subscriptions","sub","patches","reset","origin","history","undos","redos","splice","time","Date","step","lastOp","overwrite","shouldOverwrite","save","currentUndoStepId","merge","shouldMerge","newStep","createSelectOperation","timestamp","shift","shouldClear","historyUndoOperationImplementation","otherPatches","item","transformedOperations","flatten","transformOperation","reversedOperations","Operation","inverse","withoutSaving","err","deselect","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","equals","addAnnotationOperationImplementation","parsedAnnotation","parseAnnotation","paths","markDefPath","markDefPaths","annotationKey","unshift","existingSameTypeAnnotations","removeAnnotationOperationImplementation","potentialAnnotations","selectedChild","selectedChildPath","annotationToRemove","previousSpansWithSameAnnotation","nextSpansWithSameAnnotation","marksWithoutAnnotation","blockSetOperationImplementation","location","filteredProps","updatedBlock","slateBlock","blockUnsetOperationImplementation","propsToRemove","prop","updatedTextBlock","omit","propsToSet","updatedBlockObject","childSetOperationImplementation","childEntry","definition","fields","field","childUnsetOperationImplementation","newNode","newValue","applyAll","decoratorAddOperationImplementation","manualAnchor","manualFocus","manualSelection","editorSelection","anchorOffset","focusOffset","newSelection","offsets","trimmedSelection","newRange","splitTextNodes","isRange","existingMarks","deleteOperationImplementation","anchorBlockKey","focusBlockKey","startBlockKey","endBlockKey","endOffset","startBlockIndex","startBlock","endBlockIndex","endBlock","anchorBlockPath","removeNodes","unit","parentBlockEntry","above","isBlock","parentBlockPath","parentElementRange","currentLineRange","findCurrentLineRange","delete","deleteText","setSelection","parentRange","parentRangeBoundary","positions","left","right","middle","floor","rangesAreOnSameLine","range1","range2","rect1","toDOMRange","rect2","domRectsIntersect","rect","compareRect","insertInlineObjectOperationImplementation","parsedInlineObject","parseInlineObject","focusTextBlock","insertSpanOperationImplementation","insertBlockOperationImplementation","fragment","insertBlock","placement","select","startBlockPath","endBlockPath","nextPath","selectionBefore","insertFragment","currentSelection","endBlockEndPoint","adjustedSelection","transform","next","endBlockChildKeys","endBlockMarkDefsKeys","markDefKeyMap","adjustedMarkDefs","newKey","adjustedChildren","adjustedBlock","Point","endBlockStartPoint","isEmptyTextBlock","splitNodes","moveBackwardOperationImplementation","move","distance","moveBlockOperationImplementation","originKey","originBlockIndex","destinationKey","to","destinationBlockIndex","moveNodes","moveForwardOperationImplementation","selectOperationImplementation","IS_FOCUSED","IS_READ_ONLY","behaviorOperationImplementations","performOperation","message","CURRENT_OPERATION_ID","withApplyingBehaviorOperations","getCurrentOperationId","isApplyingBehaviorOperations","createWithEventListeners","maxBlocks","editorDelete","behaviorEvent","deleteBackward","deleteForward","insertBreak","insertData","dataTransfer","insertSoftBreak","redo","setFragmentData","undo","createWithMaxBlocks","rows","createWithObjectKeys","existingKeys","descendants","prevPath","previous","prevIndex","previousBlock","previousBlockChildKeys","previousBlockMarkDefKeys","entry","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","keys","removedProperties","property","unsetNodes","isMatch","isKeyedSegment","insertTextPatch","beforeValue","textChild","prevBlock","prevChild","prevText","removeTextPatch","beforeBlock","prevTextChild","setNodePatch","setNode","omitBy","isUndefined","keyName","val","indexOf","insertNodePatch","targetKey","insert","setIfMissing","splitNodePatch","splitBlock","oldBlock","targetValue","unset","splitSpan","targetSpans","removeNodePatch","spanToRemove","mergeNodePatch","newBlock","updatedSpan","removedSpan","moveNodePatch","childToInsert","PATCHING","withoutPatching","isPatching","createWithPatches","relayActor","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","root","getNode","getSpan","getParent","parentPath","applyOperationToPortableText","draft","createDraft","applyOperationToPortableTextDraft","e","finishDraft","insertedNode","before","after","isAncestor","truePath","newParent","newIndex","valueBefore","valueAfter","hasOwnProperty","newTextBlockNode","newSpanNode","pluginUpdateValue","withPlugins","withObjectKeys","withSchemaTypes","withPatches","withMaxBlocks","withUndoRedo","withPortableTextMarkModel","withPlaceholderBlock","withUtils","createSlateEditor","withReact","createEditor","decoratedRanges","placeholderBlock","initialValue","createEditorDom","sendBack","getBlockNodes","getChildNodes","setDragGhost","ghost","childNode","setDragImage","x","y","addAnnotationOnCollapsedSelection","caretWordSelection","raise","coreAnnotationBehaviors","defaultKeyboardShortcuts","arrowDown","createKeyboardShortcut","default","alt","ctrl","meta","arrowUp","break","lineBreak","strong","bold","em","italic","underline","code","tab","shiftTab","arrowDownOnLonelyBlockObject","focusBlockObject","nextBlock","arrowUpOnLonelyBlockObject","breakingBlockObject","clickingAboveLonelyBlockObject","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","selectionCollapsed","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","emShortcut","underlineShortcut","codeShortcut","getCompoundClientRect","DOMRect","elements","firstRect","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","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","focusLevel","breakingAtTheStartOfTextBlock","focusDecorators","focusAnnotations","breakingEntireDocument","firstBlockStartPoint","lastBlockEndPoint","breakingEntireBlocks","startBlockStartPoint","breakingInlineObject","focusInlineObject","coreInsertBreakBehaviors","isAtTheBeginningOfBlock","isSelectionCollapsed","MAX_LIST_LEVEL","clearListOnBackspace","unindentListOnBackspace","mergeTextIntoListOnDelete","focusListBlock","mergeTextIntoListOnBackspace","previousBlockEndPoint","getBlockEndPoint","deletingListFromStart","blocksToDelete","middleBlocks","deleteStartPoint","deleteEndPoint","getBlockStartPoint","startBlockEndPoint","slicedEndBlock","sliceTextBlock","clearListOnEnter","indentListOnTab","selectedListBlocks","selectedListBlock","unindentListOnShiftTab","inheritListLevel","firstInsertedBlock","secondInsertedBlock","insertedListBlock","levelDifference","adjustLevel","listStartBlockFound","inheritListItem","adjustListItem","inheritListProperties","coreListBehaviors","coreBehaviorsConfig","abstractAnnotationBehaviors","markDefKey","updatedMarkDefs","isActiveAnnotation","abstractDecoratorBehaviors","isActiveDecorator","blockOffsetsToSelection","abstractDeleteBehaviors","abstractDeserializeBehaviors","getData","json","deserializeEvent","textRuns","getTextBlockText","textRun","deserializeDataEvent","abstractInsertBehaviors","getFocusTextBlock","abstractKeyboardBehaviors","abstractListItemBehaviors","selectedTextBlocks","getSelectedTextBlocks","isActiveListItem","abstractMoveBehaviors","getPreviousBlock","getNextBlock","abstractSelectBehaviors","abstractSerializeBehaviors","serializeEvent","setData","abstractSplitBehaviors","startPoint","endPoint","blocksInBetween","blockEndPoint","newTextBlockSelection","newTextBlock","abstractStyleBehaviors","isActiveStyle","abstractBehaviors","isSyntheticBehaviorEvent","isCustomBehaviorEvent","isNativeBehaviorEvent","isAbstractBehaviorEvent","abstractBehaviorEventTypes","nativeBehaviorEventTypes","startsWith","eventCategory","performEvent","behaviors","remainingEventBehaviors","nativeEvent","eventBehaviors","listenedNamespace","eventNamespace","preventDefault","guardSnapshot","nativeEventPrevented","defaultBehaviorOverwritten","eventBehaviorIndex","eventBehavior","shouldRun","actionSet","actionsSnapshot","action","sortByPriority","itemsWithPriority","itemsWithoutPriority","itemsByPriorityId","graph","inDegree","ensureNode","addEdge","fromId","toId","visited","refId","queue","degree","result","currentId","currentItem","neighborId","newDegree","createEditorSnapshot","editorMachine","events","emitted","input","tags","assign","assertEvent","behaviorsSorted","emit","pendingEvents","enqueueActions","enqueue","pendingIncomingPatchesEvents","handle blur","ReactEditor","blur","handle focus","handle behavior event","self","eventSentBack","guards","slate is busy","createMachine","initialReadOnly","states","initial","exit","dragstart","internalDrag","always","parentNode","removeChild","dragend","drop","pristine","idle","normalizing","dirty","mutationMachine","bulk","pendingMutations","lastBulk","pendingPatchEvents","actors","fromCallback","originalApply","interval","setInterval","process","env","NODE_ENV","clearInterval","is read-only","stateIn","typing","slate is normalizing","isNormalizing","delays","invoke","src","reenter","mutations","and","not","createEditableAPI","toggleMark","toggleList","toggleBlockStyle","isMarkActive","slateSelection","descendant","insertChild","focusChildPath","focusNode","hasBlockStyle","hasListStyle","findByPath","slatePath","ptBlock","ptChild","findDOMNode","spans","isAnnotationActive","annotationType","addAnnotation","SlateElement","removeAnnotation","getSelection","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","orphanedMarks","dec","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","childrenLength","slateValueFromProps","Promise","resolve","removeExtraBlocks","currentBlock","currentBlockIndex","getStreamedBlocks","slateValue","blockChanged","blockValid","syncBlock","setTimeout","hasChanges","validationValue","validation","_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","RelayActorContext","PortableTextEditor","Component","displayName","change$","Subject","unsubscribers","constructor","Number","parseInt","componentDidMount","relayActorSubscription","change","componentDidUpdate","prevProps","editorRef","componentWillUnmount","setEditable","render","legacyPatches","incomingPatches$","patches$","Fragment","Slate","blockStyle","listStyle","isObjectPath","_editor","isChildObjectEditPath","RoutePatchesObservableToEditorActor","payload","RenderSpan","spanRef","portableTextEditor","blockSelected","setFocused","setSelected","useMemo","leaf","decoratorSchemaTypes","annotationMarkDefs","shouldTrackSelectionAndFocus","sel","startTransition","setSelectedFromRange","useCallback","winSelection","rangeCount","getRangeAt","intersectsNode","onBlur","onFocus","onSelection","legacyDecoratorSchemaType","renderDecorator","annotationMarkDef","legacyAnnotationSchemaType","renderAnnotation","_child","PLACEHOLDER_STYLE","pointerEvents","RenderLeaf","renderedSpan","renderPlaceholder","placeholder","t3","rangeDecoration","component","RenderText","IS_MAC","test","navigator","userAgent","modifiers","control","aliases","cmd","command","ctl","del","down","esc","ins","mod","opt","option","return","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","rawHotkeySegment","optional","endsWith","hotkeySegment","toKeyName","modifier","alias","TypeError","keyCode","toKeyCode","toLowerCase","toUpperCase","charCodeAt","createWithHotkeys","hotkeysFromOptions","reservedHotkeys","activeHotkeys","pteWithHotKeys","cat","possibleMark","possibleCommand","moveRangeByOperation","slateOperationCallback","rangeDecorationsMachine","pendingRangeDecorations","rangeDecorations","set up initial range decorations","rangeDecorationState","slateRange","onMoved","update range decorations","move range decorations","decoratedRange","newRangeSelection","decorate","createDecorate","has pending range decorations","has range decorations","has different decorations","existingRangeDecorations","newRangeDecorations","not read only","should skip setup","skipSetup","intersection","PortableTextEditable","forwardRef","forwardedRef","hotkeys","onBeforeInput","onClick","onCopy","onCut","onDrag","onDragEnd","onDragEnter","onDragLeave","onDragOver","onDragStart","onDrop","onPaste","propsSelection","restProps","scrollSelectionIntoView","hasInvalidValue","setHasInvalidValue","useSlate","rangeDecorationsActor","useActorRef","t4","t5","t6","t7","bb0","t9","eProps","renderElement","t10","leafProps","renderLeaf","renderText","_temp3","t11","normalizedSelection","_temp4","restoreSelectionFromProps","t12","t13","onReady","onInvalidValue","onValueChanged","t14","t15","t16","clipboardData","stopPropagation","handleCopy","t17","event_0","selection_0","position_0","handleCut","t18","event_1","onPasteResult","then","result_1","selection_1","position_1","parseBlocks","catch","_temp5","finally","selection_2","position_2","handlePaste","t19","event_2","isDefaultPrevented","handleOnFocus","t20","event_3","isPropagationStopped","position_3","handleClick","t21","event_4","handleOnBlur","t22","event_5","handleOnBeforeInput","t23","event_6","onKeyDown","handleKeyDown","t24","event_7","onKeyUp","handleKeyUp","t25","bb1","noop","t26","scrollSelectionIntoViewToSlate","t27","onDragEnd_0","onDrop_0","addEventListener","removeEventListener","t28","event_8","position_4","handleDragStart","t29","event_9","handleDrag","t30","event_10","handleDragEnd","t31","event_11","position_6","handleDragEnter","t32","event_12","position_7","handleDragOver","t33","event_13","position_8","handleDrop","t34","event_14","handleDragLeave","t35","mutationObserver","MutationObserver","validateSelection","observe","attributeOldValue","characterData","childList","subtree","disconnect","callbackRef","t36","SlateEditable","className","activeElement","findDocumentOrShadowRoot","domSelection","existingDOMRange","newDOMRange","startOffset","removeAllRanges","addRange","props_0","o","useConstant","factory","React","constant","EditorProvider","initialConfig","internalEditor","internalEditor_0","portableTextEditor_0","EditorContext","usePortableTextEditorSelection"],"mappings":"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","x_google_ignoreList":[37]}