{"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","../../../node_modules/.pnpm/@portabletext+toolkit@2.0.17/node_modules/@portabletext/toolkit/dist/index.js","../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.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.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/legacy-schema.ts","../src/editor/editor-schema.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/editor-schema-definition.ts","../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 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'\nimport {isSpan, isTextBlock} from './parse-blocks'\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 = 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 {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 {isTextBlock} from '../../internal-utils/parse-blocks'\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: true,\n          validateFields: false,\n        },\n      })\n      return parsedBlock ? [parsedBlock] : []\n    })\n\n    if (parsedBlocks.length === 0 && blocks.length > 0) {\n      return {\n        type: 'deserialization.failure',\n        mimeType: 'application/x-portable-text',\n        reason: 'No blocks were parsed',\n      }\n    }\n\n    return {\n      type: 'deserialization.success',\n      data: parsedBlocks,\n      mimeType: 'application/x-portable-text',\n    }\n  },\n})\n","import {htmlToBlocks} from '@portabletext/block-tools'\nimport {toHTML} from '@portabletext/to-html'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {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: true,\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 type {PortableTextBlock} from '@sanity/types'\nimport {isTextBlock, 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: true,\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 type {EditorContext} from '../editor/editor-snapshot'\nimport {isTextBlock} from './parse-blocks'\n\nconst levelIndexMap = new 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  levelIndexMap.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    if (!isTextBlock(context, block)) {\n      levelIndexMap.clear()\n      previousListItem = undefined\n      continue\n    }\n\n    if (block.listItem === undefined || block.level === undefined) {\n      levelIndexMap.clear()\n      previousListItem = undefined\n      continue\n    }\n\n    if (!previousListItem) {\n      previousListItem = {\n        listItem: block.listItem,\n        level: block.level,\n      }\n      levelIndexMap.set(block.level, 1)\n      listIndexMap.set(block._key, 1)\n      continue\n    }\n\n    if (\n      previousListItem.listItem !== block.listItem &&\n      previousListItem.level === block.level\n    ) {\n      levelIndexMap.clear()\n      previousListItem = {\n        listItem: block.listItem,\n        level: block.level,\n      }\n      levelIndexMap.set(block.level, 1)\n      listIndexMap.set(block._key, 1)\n      continue\n    }\n\n    if (previousListItem.level === block.level) {\n      const levelCounter = levelIndexMap.get(block.level) ?? 0\n      levelIndexMap.set(block.level, levelCounter + 1)\n      previousListItem = {\n        listItem: block.listItem,\n        level: block.level,\n      }\n      listIndexMap.set(block._key, levelCounter + 1)\n      continue\n    }\n\n    if (previousListItem.level < block.level) {\n      levelIndexMap.set(block.level, 1)\n      previousListItem = {\n        listItem: block.listItem,\n        level: block.level,\n      }\n      listIndexMap.set(block._key, 1)\n      continue\n    }\n\n    if (previousListItem.level > block.level) {\n      const levelCounter = levelIndexMap.get(block.level) ?? 0\n      levelIndexMap.set(block.level, levelCounter + 1)\n      previousListItem = {\n        listItem: block.listItem,\n        level: block.level,\n      }\n      listIndexMap.set(block._key, levelCounter + 1)\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","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction isPortableTextSpan(node) {\n  return node._type === \"span\" && \"text\" in node && typeof node.text == \"string\" && (typeof node.marks > \"u\" || Array.isArray(node.marks) && node.marks.every(mark => typeof mark == \"string\"));\n}\nfunction isPortableTextBlock(node) {\n  return (\n    // A block doesn't _have_ to be named 'block' - to differentiate between\n    // allowed child types and marks, one might name them differently\n    typeof node._type == \"string\" &&\n    // Toolkit-types like nested spans are @-prefixed\n    node._type[0] !== \"@\" && (\n    // `markDefs` isn't _required_ per say, but if it's there, it needs to be an array\n    !(\"markDefs\" in node) || !node.markDefs || Array.isArray(node.markDefs) &&\n    // Every mark definition needs to have an `_key` to be mappable in child spans\n    node.markDefs.every(def => typeof def._key == \"string\")) &&\n    // `children` is required and needs to be an array\n    \"children\" in node && Array.isArray(node.children) &&\n    // All children are objects with `_type` (usually spans, but can contain other stuff)\n    node.children.every(child => typeof child == \"object\" && \"_type\" in child)\n  );\n}\nfunction isPortableTextListItemBlock(block) {\n  return isPortableTextBlock(block) && \"listItem\" in block && typeof block.listItem == \"string\" && (typeof block.level > \"u\" || typeof block.level == \"number\");\n}\nfunction isPortableTextToolkitList(block) {\n  return block._type === \"@list\";\n}\nfunction isPortableTextToolkitSpan(span) {\n  return span._type === \"@span\";\n}\nfunction isPortableTextToolkitTextNode(node) {\n  return node._type === \"@text\";\n}\nconst knownDecorators = [\"strong\", \"em\", \"code\", \"underline\", \"strike-through\"];\nfunction sortMarksByOccurences(span, index, blockChildren) {\n  if (!isPortableTextSpan(span) || !span.marks) return [];\n  if (!span.marks.length) return [];\n  const marks = span.marks.slice(),\n    occurences = {};\n  return marks.forEach(mark => {\n    occurences[mark] = 1;\n    for (let siblingIndex = index + 1; siblingIndex < blockChildren.length; siblingIndex++) {\n      const sibling = blockChildren[siblingIndex];\n      if (sibling && isPortableTextSpan(sibling) && Array.isArray(sibling.marks) && sibling.marks.indexOf(mark) !== -1) occurences[mark]++;else break;\n    }\n  }), marks.sort((markA, markB) => sortMarks(occurences, markA, markB));\n}\nfunction sortMarks(occurences, markA, markB) {\n  const aOccurences = occurences[markA],\n    bOccurences = occurences[markB];\n  if (aOccurences !== bOccurences) return bOccurences - aOccurences;\n  const aKnownPos = knownDecorators.indexOf(markA),\n    bKnownPos = knownDecorators.indexOf(markB);\n  return aKnownPos !== bKnownPos ? aKnownPos - bKnownPos : markA.localeCompare(markB);\n}\nfunction buildMarksTree(block) {\n  var _a, _b;\n  const {\n      children\n    } = block,\n    markDefs = (_a = block.markDefs) != null ? _a : [];\n  if (!children || !children.length) return [];\n  const sortedMarks = children.map(sortMarksByOccurences),\n    rootNode = {\n      _type: \"@span\",\n      children: [],\n      markType: \"<unknown>\"\n    };\n  let nodeStack = [rootNode];\n  for (let i = 0; i < children.length; i++) {\n    const span = children[i];\n    if (!span) continue;\n    const marksNeeded = sortedMarks[i] || [];\n    let pos = 1;\n    if (nodeStack.length > 1) for (pos; pos < nodeStack.length; pos++) {\n      const mark = ((_b = nodeStack[pos]) == null ? void 0 : _b.markKey) || \"\",\n        index = marksNeeded.indexOf(mark);\n      if (index === -1) break;\n      marksNeeded.splice(index, 1);\n    }\n    nodeStack = nodeStack.slice(0, pos);\n    let currentNode = nodeStack[nodeStack.length - 1];\n    if (currentNode) {\n      for (const markKey of marksNeeded) {\n        const markDef = markDefs == null ? void 0 : markDefs.find(def => def._key === markKey),\n          markType = markDef ? markDef._type : markKey,\n          node = {\n            _type: \"@span\",\n            _key: span._key,\n            children: [],\n            markDef,\n            markType,\n            markKey\n          };\n        currentNode.children.push(node), nodeStack.push(node), currentNode = node;\n      }\n      if (isPortableTextSpan(span)) {\n        const lines = span.text.split(`\n`);\n        for (let line = lines.length; line-- > 1;) lines.splice(line, 0, `\n`);\n        currentNode.children = currentNode.children.concat(lines.map(text => ({\n          _type: \"@text\",\n          text\n        })));\n      } else currentNode.children = currentNode.children.concat(span);\n    }\n  }\n  return rootNode.children;\n}\nfunction nestLists(blocks, mode) {\n  const tree = [];\n  let currentList;\n  for (let i = 0; i < blocks.length; i++) {\n    const block = blocks[i];\n    if (block) {\n      if (!isPortableTextListItemBlock(block)) {\n        tree.push(block), currentList = void 0;\n        continue;\n      }\n      if (!currentList) {\n        currentList = listFromBlock(block, i, mode), tree.push(currentList);\n        continue;\n      }\n      if (blockMatchesList(block, currentList)) {\n        currentList.children.push(block);\n        continue;\n      }\n      if ((block.level || 1) > currentList.level) {\n        const newList = listFromBlock(block, i, mode);\n        if (mode === \"html\") {\n          const lastListItem = currentList.children[currentList.children.length - 1],\n            newLastChild = _objectSpread(_objectSpread({}, lastListItem), {}, {\n              children: [...lastListItem.children, newList]\n            });\n          currentList.children[currentList.children.length - 1] = newLastChild;\n        } else currentList.children.push(newList);\n        currentList = newList;\n        continue;\n      }\n      if ((block.level || 1) < currentList.level) {\n        const matchingBranch = tree[tree.length - 1],\n          match = matchingBranch && findListMatching(matchingBranch, block);\n        if (match) {\n          currentList = match, currentList.children.push(block);\n          continue;\n        }\n        currentList = listFromBlock(block, i, mode), tree.push(currentList);\n        continue;\n      }\n      if (block.listItem !== currentList.listItem) {\n        const matchingBranch = tree[tree.length - 1],\n          match = matchingBranch && findListMatching(matchingBranch, {\n            level: block.level || 1\n          });\n        if (match && match.listItem === block.listItem) {\n          currentList = match, currentList.children.push(block);\n          continue;\n        } else {\n          currentList = listFromBlock(block, i, mode), tree.push(currentList);\n          continue;\n        }\n      }\n      console.warn(\"Unknown state encountered for block\", block), tree.push(block);\n    }\n  }\n  return tree;\n}\nfunction blockMatchesList(block, list) {\n  return (block.level || 1) === list.level && block.listItem === list.listItem;\n}\nfunction listFromBlock(block, index, mode) {\n  return {\n    _type: \"@list\",\n    _key: `${block._key || `${index}`}-parent`,\n    mode,\n    level: block.level || 1,\n    listItem: block.listItem,\n    children: [block]\n  };\n}\nfunction findListMatching(rootNode, matching) {\n  const level = matching.level || 1,\n    style = matching.listItem || \"normal\",\n    filterOnType = typeof matching.listItem == \"string\";\n  if (isPortableTextToolkitList(rootNode) && (rootNode.level || 1) === level && filterOnType && (rootNode.listItem || \"normal\") === style) return rootNode;\n  if (!(\"children\" in rootNode)) return;\n  const node = rootNode.children[rootNode.children.length - 1];\n  return node && !isPortableTextSpan(node) ? findListMatching(node, matching) : void 0;\n}\nfunction spanToPlainText(span) {\n  let text = \"\";\n  return span.children.forEach(current => {\n    isPortableTextToolkitTextNode(current) ? text += current.text : isPortableTextToolkitSpan(current) && (text += spanToPlainText(current));\n  }), text;\n}\nconst leadingSpace = /^\\s/,\n  trailingSpace = /\\s$/;\nfunction toPlainText(block) {\n  const blocks = Array.isArray(block) ? block : [block];\n  let text = \"\";\n  return blocks.forEach((current, index) => {\n    if (!isPortableTextBlock(current)) return;\n    let pad = !1;\n    current.children.forEach(span => {\n      isPortableTextSpan(span) ? (text += pad && text && !trailingSpace.test(text) && !leadingSpace.test(span.text) ? \" \" : \"\", text += span.text, pad = !1) : pad = !0;\n    }), index !== blocks.length - 1 && (text += `\n\n`);\n  }), text;\n}\nconst LIST_NEST_MODE_HTML = \"html\",\n  LIST_NEST_MODE_DIRECT = \"direct\";\nexport { LIST_NEST_MODE_DIRECT, LIST_NEST_MODE_HTML, buildMarksTree, isPortableTextBlock, isPortableTextListItemBlock, isPortableTextSpan, isPortableTextToolkitList, isPortableTextToolkitSpan, isPortableTextToolkitTextNode, nestLists, sortMarksByOccurences, spanToPlainText, toPlainText };\n//# sourceMappingURL=index.js.map\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 {isPortableTextBlock, isPortableTextSpan} from '@portabletext/toolkit'\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            isPortableTextSpan(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            isPortableTextSpan(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            isPortableTextSpan(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 (span && block && isPortableTextBlock(block)) {\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 = 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 {omit} from 'lodash'\nimport {Editor, Transforms} from 'slate'\nimport {isTextBlock, 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 {Transforms} from 'slate'\nimport {createPlaceholderBlock} from '../internal-utils/create-placeholder-block'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport {getBlockPath} from '../internal-utils/slate-utils'\nimport {toSlateRange} from '../internal-utils/to-slate-range'\nimport {getBlockKeyFromSelectionPoint} from '../selection/selection-point'\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  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 (!endBlockKey) {\n    throw new Error('Failed to get end block key')\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  const hanging = isTextBlock(context, endBlock) && endOffset === 0\n\n  operation.editor.delete({\n    at: range,\n    reverse: operation.direction === 'backward',\n    unit: operation.unit,\n    hanging,\n  })\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 {Editor, Path, Point, Range, Transforms, type Descendant} from 'slate'\nimport {DOMEditor} from 'slate-dom'\nimport type {EditorSchema} from '../editor/editor-schema'\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 {BehaviorOperationImplementation} 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    block: fragment,\n    placement: operation.placement,\n    select: operation.select ?? 'start',\n    editor: operation.editor,\n    schema: context.schema,\n  })\n}\n\nexport function insertBlock({\n  block,\n  placement,\n  select,\n  editor,\n  schema,\n}: {\n  block: Descendant\n  placement: 'auto' | 'after' | 'before'\n  select: 'start' | 'end' | 'none'\n  editor: PortableTextSlateEditor\n  schema: EditorSchema\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], 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], 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], 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        Transforms.setNodes(\n          editor,\n          {\n            markDefs: [...(endBlock.markDefs ?? []), ...(block.markDefs ?? [])],\n          },\n          {\n            at: endBlockPath,\n          },\n        )\n\n        if (select === 'end') {\n          Transforms.insertFragment(editor, [block], {\n            voids: true,\n          })\n\n          return\n        }\n\n        Transforms.insertFragment(editor, [block], {\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({schema}, 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 {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","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 {Editor, Element, Node, 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      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 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 {isSpan, isTextBlock} from './parse-blocks'\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 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 {\n  isListBlock,\n  isSpan,\n  isTextBlock,\n} 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 '../internal-utils/parse-blocks'\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 type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\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 {isListBlock, isTextBlock} from '../internal-utils/parse-blocks'\nimport {defaultKeyboardShortcuts} from '../keyboard-shortcuts/default-keyboard-shortcuts'\nimport * as selectors from '../selectors'\nimport {getBlockEndPoint} from '../utils'\nimport {isAtTheBeginningOfBlock} from '../utils/util.at-the-beginning-of-block'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-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 * 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  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.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} from '../internal-utils/parse-blocks'\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.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.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 {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 {isTextBlock, 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      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: {refreshKeys: true, validateFields: true},\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 type {ConverterEvent} from '../converters/converter.types'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport * as selectors from '../selectors'\nimport {getActiveDecorators} from '../selectors/selector.get-active-decorators'\nimport type {PickFromUnion} from '../type-utils'\nimport {getTextBlockText} from '../utils'\nimport {abstractAnnotationBehaviors} from './behavior.abstract.annotation'\nimport {abstractDecoratorBehaviors} from './behavior.abstract.decorator'\nimport {abstractDeleteBehaviors} from './behavior.abstract.delete'\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 {abstractSplitBehaviors} from './behavior.abstract.split'\nimport {abstractStyleBehaviors} from './behavior.abstract.style'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nconst raiseDeserializationSuccessOrFailure = defineBehavior({\n  on: 'deserialize',\n  guard: ({snapshot, event}) => {\n    let success:\n      | PickFromUnion<ConverterEvent, 'type', 'deserialization.success'>\n      | undefined\n    const failures: Array<\n      PickFromUnion<ConverterEvent, 'type', 'deserialization.failure'>\n    > = []\n\n    for (const converter of snapshot.context.converters) {\n      const data = event.originEvent.originEvent.dataTransfer.getData(\n        converter.mimeType,\n      )\n\n      if (!data) {\n        continue\n      }\n\n      const deserializeEvent = converter.deserialize({\n        snapshot,\n        event: {type: 'deserialize', data},\n      })\n\n      if (deserializeEvent.type === 'deserialization.success') {\n        success = deserializeEvent\n        break\n      } else {\n        failures.push(deserializeEvent)\n      }\n    }\n\n    if (!success) {\n      return {\n        type: 'deserialization.failure',\n        mimeType: '*/*',\n        reason: failures.map((failure) => failure.reason).join(', '),\n      } as const\n    }\n\n    return success\n  },\n  actions: [\n    ({event}, deserializeEvent) => [\n      raise({\n        ...deserializeEvent,\n        originEvent: event.originEvent,\n      }),\n    ],\n  ],\n})\n\nconst raiseSerializationSuccessOrFailure = defineBehavior({\n  on: 'serialize',\n  guard: ({snapshot, event}) => {\n    if (snapshot.context.converters.length === 0) {\n      return false\n    }\n\n    const serializeEvents = snapshot.context.converters.map((converter) =>\n      converter.serialize({\n        snapshot,\n        event: {\n          ...event,\n          originEvent: event.originEvent.type,\n        },\n      }),\n    )\n\n    if (serializeEvents.length === 0) {\n      return false\n    }\n\n    return serializeEvents\n  },\n  actions: [\n    ({event}, serializeEvents) =>\n      serializeEvents.map((serializeEvent) => {\n        return raise({\n          ...serializeEvent,\n          originEvent: event.originEvent,\n        })\n      }),\n  ],\n})\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  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  /**\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    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  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  ...abstractInsertBehaviors,\n  ...abstractKeyboardBehaviors,\n  ...abstractListItemBehaviors,\n  ...abstractMoveBehaviors,\n  ...abstractStyleBehaviors,\n  ...abstractSelectBehaviors,\n  ...abstractSplitBehaviors,\n  raiseDeserializationSuccessOrFailure,\n  raiseSerializationSuccessOrFailure,\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  '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  '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, 'serialize'>\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} 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: (event: {type: 'set drag ghost'; ghost: HTMLElement}) => 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              } 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          } 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        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: (event) => self.send(event),\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 {\n  ArraySchemaType,\n  BlockSchemaType,\n  ObjectSchemaType,\n  PortableTextBlock,\n  SchemaType,\n  SpanSchemaType,\n} from '@sanity/types'\nimport type {PortableTextMemberSchemaTypes} from '../types/editor'\n\nexport function createLegacySchema(\n  portableTextType: ArraySchemaType<PortableTextBlock>,\n): PortableTextMemberSchemaTypes {\n  if (!portableTextType) {\n    throw new Error(\"Parameter 'portabletextType' missing (required)\")\n  }\n  const blockType = portableTextType.of?.find(findBlockType) as\n    | BlockSchemaType\n    | undefined\n  if (!blockType) {\n    throw new Error('Block type is not defined in this schema (required)')\n  }\n  const childrenField = blockType.fields?.find(\n    (field) => field.name === 'children',\n  ) as {type: ArraySchemaType} | undefined\n  if (!childrenField) {\n    throw new Error('Children field for block type found in schema (required)')\n  }\n  const ofType = childrenField.type.of\n  if (!ofType) {\n    throw new Error(\n      'Valid types for block children not found in schema (required)',\n    )\n  }\n  const spanType = ofType.find((memberType) => memberType.name === 'span') as\n    | ObjectSchemaType\n    | undefined\n  if (!spanType) {\n    throw new Error('Span type not found in schema (required)')\n  }\n  const inlineObjectTypes = (ofType.filter(\n    (memberType) => memberType.name !== 'span',\n  ) || []) as ObjectSchemaType[]\n  const blockObjectTypes = (portableTextType.of?.filter(\n    (field) => field.name !== blockType.name,\n  ) || []) as ObjectSchemaType[]\n  return {\n    styles: resolveEnabledStyles(blockType),\n    decorators: resolveEnabledDecorators(spanType),\n    lists: resolveEnabledListItems(blockType),\n    block: blockType,\n    span: spanType,\n    portableText: portableTextType,\n    inlineObjects: inlineObjectTypes,\n    blockObjects: blockObjectTypes,\n    annotations: (spanType as SpanSchemaType).annotations,\n  }\n}\n\nfunction resolveEnabledStyles(blockType: ObjectSchemaType) {\n  const styleField = blockType.fields?.find(\n    (btField) => btField.name === 'style',\n  )\n  if (!styleField) {\n    throw new Error(\n      \"A field with name 'style' is not defined in the block type (required).\",\n    )\n  }\n  const textStyles =\n    styleField.type.options?.list &&\n    styleField.type.options.list?.filter(\n      (style: {value: string}) => style.value,\n    )\n  if (!textStyles || textStyles.length === 0) {\n    throw new Error(\n      'The style fields need at least one style ' +\n        \"defined. I.e: {title: 'Normal', value: 'normal'}.\",\n    )\n  }\n  return textStyles\n}\n\nfunction resolveEnabledDecorators(spanType: ObjectSchemaType) {\n  return (spanType as any).decorators\n}\n\nfunction resolveEnabledListItems(blockType: ObjectSchemaType) {\n  const listField = blockType.fields?.find(\n    (btField) => btField.name === 'listItem',\n  )\n  if (!listField) {\n    throw new Error(\n      \"A field with name 'listItem' is not defined in the block type (required).\",\n    )\n  }\n  const listItems =\n    listField.type.options?.list &&\n    listField.type.options.list.filter((list: {value: string}) => list.value)\n  if (!listItems) {\n    throw new Error('The list field need at least to be an empty array')\n  }\n  return listItems\n}\n\nfunction findBlockType(type: SchemaType): BlockSchemaType | null {\n  if (type.type) {\n    return findBlockType(type.type)\n  }\n\n  if (type.name === 'block') {\n    return type as BlockSchemaType\n  }\n\n  return null\n}\n","import {Schema as SanitySchema} from '@sanity/schema'\nimport {defineField, defineType, type ObjectSchemaType} from '@sanity/types'\nimport startCase from 'lodash.startcase'\nimport type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport type {\n  BaseDefinition,\n  FieldDefinition,\n  SchemaDefinition,\n} from './editor-schema-definition'\nimport {defaultKeyGenerator} from './key-generator'\nimport {createLegacySchema} from './legacy-schema'\n\nconst temporaryImageName = `tmp-${defaultKeyGenerator()}-image`\nconst temporaryUrlName = `tmp-${defaultKeyGenerator()}-url`\n\nconst temporaryObjectNames: Record<string, string> = {\n  image: temporaryImageName,\n  url: temporaryUrlName,\n}\n\nconst objectNames: Record<string, string> = {\n  [temporaryImageName]: 'image',\n  [temporaryUrlName]: 'url',\n}\n\nconst defaultObjectTitles: Record<string, string> = {\n  image: 'Image',\n  url: 'URL',\n}\n\n/**\n * @public\n */\nexport type EditorSchema = {\n  annotations: ReadonlyArray<AnnotationSchemaType>\n  block: {\n    name: string\n  }\n  blockObjects: ReadonlyArray<BlockObjectSchemaType>\n  decorators: ReadonlyArray<DecoratorSchemaType>\n  inlineObjects: ReadonlyArray<InlineObjectSchemaType>\n  span: {\n    name: string\n  }\n  styles: ReadonlyArray<StyleSchemaType>\n  lists: ReadonlyArray<ListSchemaType>\n}\n\n/**\n * @public\n */\nexport type AnnotationSchemaType = BaseDefinition & {\n  fields: ReadonlyArray<FieldDefinition>\n}\n\n/**\n * @public\n */\nexport type BlockObjectSchemaType = BaseDefinition & {\n  fields: ReadonlyArray<FieldDefinition>\n}\n\n/**\n * @public\n */\nexport type DecoratorSchemaType = BaseDefinition & {\n  /**\n   * @deprecated\n   * Use `name` instead\n   */\n  value: string\n}\n\n/**\n * @public\n */\nexport type InlineObjectSchemaType = BaseDefinition & {\n  fields: ReadonlyArray<FieldDefinition>\n}\n\n/**\n * @public\n */\nexport type ListSchemaType = BaseDefinition & {\n  /**\n   * @deprecated\n   * Use `name` instead\n   */\n  value: string\n}\n\n/**\n * @public\n */\nexport type StyleSchemaType = BaseDefinition & {\n  /**\n   * @deprecated\n   * Use `name` instead\n   */\n  value: string\n}\n\nexport function legacySchemaToEditorSchema(\n  schema: PortableTextMemberSchemaTypes,\n): EditorSchema {\n  return {\n    annotations: schema.annotations.map((annotation) => ({\n      name: annotation.name,\n      fields: annotation.fields.map((field) => ({\n        name: field.name,\n        type: field.type.jsonType,\n        title: field.type.title,\n      })),\n      title: annotation.title,\n    })),\n    block: {\n      name: schema.block.name,\n    },\n    blockObjects: schema.blockObjects.map((blockObject) => ({\n      name: blockObject.name,\n      fields: blockObject.fields.map((field) => ({\n        name: field.name,\n        type: field.type.jsonType,\n        title: field.type.title,\n      })),\n      title: blockObject.title,\n    })),\n    decorators: schema.decorators.map((decorator) => ({\n      name: decorator.value,\n      title: decorator.title,\n      value: decorator.value,\n    })),\n    inlineObjects: schema.inlineObjects.map((inlineObject) => ({\n      name: inlineObject.name,\n      fields: inlineObject.fields.map((field) => ({\n        name: field.name,\n        type: field.type.jsonType,\n        title: field.type.title,\n      })),\n      title: inlineObject.title,\n    })),\n    span: {\n      name: schema.span.name,\n    },\n    styles: schema.styles.map((style) => ({\n      name: style.value,\n      title: style.title,\n      value: style.value,\n    })),\n    lists: schema.lists.map((list) => ({\n      name: list.value,\n      title: list.title,\n      value: list.value,\n    })),\n  }\n}\n\nexport function compileSchemaDefinition<\n  TSchemaDefinition extends SchemaDefinition,\n>(definition: TSchemaDefinition): EditorSchema {\n  return legacySchemaToEditorSchema(\n    compileSchemaDefinitionToLegacySchema(definition),\n  )\n}\n\nexport function compileSchemaDefinitionToLegacySchema<\n  TSchemaDefinition extends SchemaDefinition,\n>(definition?: TSchemaDefinition): PortableTextMemberSchemaTypes {\n  const blockObjects =\n    definition?.blockObjects?.map((blockObject) =>\n      defineType({\n        type: 'object',\n        // Very naive way to work around `SanitySchema.compile` adding default\n        // fields to objects with certain names.\n        name: temporaryObjectNames[blockObject.name] ?? blockObject.name,\n        title:\n          blockObject.title === undefined\n            ? // This avoids the default title which is a title case of the object name\n              defaultObjectTitles[blockObject.name]\n            : blockObject.title,\n        fields:\n          blockObject.fields?.map((field) => ({\n            name: field.name,\n            type: field.type,\n            title: field.title ?? startCase(field.name),\n          })) ?? [],\n      }),\n    ) ?? []\n\n  const inlineObjects =\n    definition?.inlineObjects?.map((inlineObject) =>\n      defineType({\n        type: 'object',\n        // Very naive way to work around `SanitySchema.compile` adding default\n        // fields to objects with certain names.\n        name: temporaryObjectNames[inlineObject.name] ?? inlineObject.name,\n\n        title:\n          inlineObject.title === undefined\n            ? // This avoids the default title which is a title case of the object name\n              defaultObjectTitles[inlineObject.name]\n            : inlineObject.title,\n        fields:\n          inlineObject.fields?.map((field) => ({\n            name: field.name,\n            type: field.type,\n            title: field.title ?? startCase(field.name),\n          })) ?? [],\n      }),\n    ) ?? []\n\n  const portableTextSchema = defineField({\n    type: 'array',\n    name: 'portable-text',\n    of: [\n      ...blockObjects.map((blockObject) => ({type: blockObject.name})),\n      {\n        type: 'block',\n        name: 'block',\n        of: inlineObjects.map((inlineObject) => ({type: inlineObject.name})),\n        marks: {\n          decorators:\n            definition?.decorators?.map((decorator) => ({\n              title: decorator.title ?? startCase(decorator.name),\n              value: decorator.name,\n            })) ?? [],\n          annotations:\n            definition?.annotations?.map((annotation) => ({\n              name: annotation.name,\n              type: 'object',\n              title: annotation.title,\n              fields:\n                annotation.fields?.map((field) => ({\n                  name: field.name,\n                  title: field.title ?? startCase(field.name),\n                  type: field.type,\n                })) ?? [],\n            })) ?? [],\n        },\n        lists:\n          definition?.lists?.map((list) => ({\n            value: list.name,\n            title: list.title ?? startCase(list.name),\n          })) ?? [],\n        styles:\n          definition?.styles?.map((style) => ({\n            value: style.name,\n            title: style.title ?? startCase(style.name),\n          })) ?? [],\n      },\n    ],\n  })\n\n  const schema = SanitySchema.compile({\n    types: [portableTextSchema, ...blockObjects, ...inlineObjects],\n  }).get('portable-text')\n\n  const pteSchema = createLegacySchema(schema)\n\n  return {\n    ...pteSchema,\n    blockObjects: pteSchema.blockObjects.map((blockObject) =>\n      objectNames[blockObject.name] !== undefined\n        ? ({\n            ...blockObject,\n            name: objectNames[blockObject.name],\n            type: {\n              ...blockObject.type,\n              name: objectNames[blockObject.name],\n            },\n          } as ObjectSchemaType)\n        : blockObject,\n    ),\n    inlineObjects: pteSchema.inlineObjects.map((inlineObject) =>\n      objectNames[inlineObject.name] !== undefined\n        ? ({\n            ...inlineObject,\n            name: objectNames[inlineObject.name],\n          } as ObjectSchemaType)\n        : inlineObject,\n    ),\n  } satisfies PortableTextMemberSchemaTypes\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']> = undefined\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 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'\nimport {isTextBlock} from './parse-blocks'\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 {Editor, Text, Transforms, type Descendant, type Node} 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 editable = !context.readOnly\n      const isProcessingLocalChanges = context.isProcessingLocalChanges\n      const isChanging = isChangingRemotely(context.slateEditor) ?? false\n      const isBusy = editable && (isProcessingLocalChanges || isChanging)\n\n      debug('isBusy', {isBusy, editable, 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                Transforms.delete(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 {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 {\n  compileSchemaDefinitionToLegacySchema,\n  legacySchemaToEditorSchema,\n} from './editor-schema'\nimport {getEditorSnapshot} from './editor-selector'\nimport {defaultKeyGenerator} from './key-generator'\nimport {createLegacySchema} from './legacy-schema'\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    ? compileSchemaDefinitionToLegacySchema(config.schemaDefinition)\n    : createLegacySchema(\n        config.schema.hasOwnProperty('jsonType')\n          ? config.schema\n          : compileType(config.schema),\n      )\n  const schema = legacySchemaToEditorSchema(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  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n  type ClipboardEvent,\n  type FocusEventHandler,\n  type KeyboardEvent,\n  type MutableRefObject,\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  hotkeys?: HotkeyOptions\n  onBeforeInput?: (event: InputEvent) => void\n  onPaste?: OnPasteFn\n  onCopy?: OnCopyFn\n  ref: MutableRefObject<HTMLDivElement | null>\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 ref = useRef<HTMLDivElement | null>(null)\n  const [editableElement, setEditableElement] = useState<HTMLDivElement | null>(\n    null,\n  )\n  const [hasInvalidValue, setHasInvalidValue] = useState(false)\n\n  // Forward ref to parent component\n  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n    forwardedRef,\n    () => ref.current,\n  )\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: true,\n                      validateFields: true,\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  // 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.\n  const validateSelection = useCallback(() => {\n    if (!slateEditor.selection) {\n      return\n    }\n    const root = ReactEditor.findDocumentOrShadowRoot(slateEditor)\n    const {activeElement} = root\n    // Return if the editor isn't the active element\n    if (ref.current !== 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  }, [ref, slateEditor])\n\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  useEffect(() => {\n    if (editableElement) {\n      const mutationObserver = new MutationObserver(validateSelection)\n      mutationObserver.observe(editableElement, {\n        attributeOldValue: false,\n        attributes: false,\n        characterData: false,\n        childList: true,\n        subtree: true,\n      })\n      return () => {\n        mutationObserver.disconnect()\n      }\n    }\n    return undefined\n  }, [validateSelection, editableElement])\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  // Set the forwarded ref to be the Slate editable DOM element\n  // Also set the editable element in a state so that the MutationObserver\n  // is setup when this element is ready.\n  useEffect(() => {\n    ref.current = ReactEditor.toDOMNode(\n      slateEditor,\n      slateEditor,\n    ) as HTMLDivElement | null\n    setEditableElement(ref.current)\n  }, [slateEditor, ref])\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  if (!portableTextEditor) {\n    return null\n  }\n\n  return hasInvalidValue ? null : (\n    <SlateEditable\n      {...restProps}\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","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","/**\n * @public\n */\nexport type BaseDefinition = {\n  name: string\n  title?: string\n}\n\n/**\n * @public\n */\nexport type FieldDefinition = BaseDefinition & {\n  type: 'string' | 'number' | 'boolean' | 'array' | 'object'\n}\n\n/**\n * @public\n */\nexport type DecoratorDefinition<\n  TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = TBaseDefinition\n\n/**\n * @public\n */\nexport type AnnotationDefinition<\n  TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = TBaseDefinition & {\n  fields?: ReadonlyArray<FieldDefinition>\n}\n\n/**\n * @public\n */\nexport type BlockObjectDefinition<\n  TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = TBaseDefinition & {\n  fields?: ReadonlyArray<FieldDefinition>\n}\n\n/**\n * @public\n */\nexport type InlineObjectDefinition<\n  TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = TBaseDefinition & {\n  fields?: ReadonlyArray<FieldDefinition>\n}\n\n/**\n * @public\n */\nexport type ListDefinition<\n  TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = TBaseDefinition\n\n/**\n * @public\n */\nexport type StyleDefinition<\n  TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = TBaseDefinition\n\n/**\n * @public\n */\nexport type SchemaDefinition<\n  TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = {\n  decorators?: ReadonlyArray<DecoratorDefinition<TBaseDefinition>>\n  blockObjects?: ReadonlyArray<BlockObjectDefinition<TBaseDefinition>>\n  inlineObjects?: ReadonlyArray<InlineObjectDefinition<TBaseDefinition>>\n  annotations?: ReadonlyArray<AnnotationDefinition<TBaseDefinition>>\n  lists?: ReadonlyArray<ListDefinition<TBaseDefinition>>\n  styles?: ReadonlyArray<StyleDefinition<TBaseDefinition>>\n}\n\n/**\n * @public\n * A helper wrapper that adds editor support, such as autocomplete and type checking, for a schema definition.\n * @example\n * ```ts\n * import { defineSchema } from '@portabletext/editor'\n *\n * const schemaDefinition = defineSchema({\n *  decorators: [{name: 'strong'}, {name: 'em'}, {name: 'underline'}],\n *  annotations: [{name: 'link'}],\n *  styles: [\n *    {name: 'normal'},\n *    {name: 'h1'},\n *    {name: 'h2'},\n *    {name: 'h3'},\n *    {name: 'blockquote'},\n *  ],\n *  lists: [],\n *  inlineObjects: [],\n *  blockObjects: [],\n * }\n * ```\n */\nexport function defineSchema<const TSchemaDefinition extends SchemaDefinition>(\n  definition: TSchemaDefinition,\n): TSchemaDefinition {\n  return definition\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","levelIndexMap","Map","buildIndexMaps","clear","previousListItem","set","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","isPortableTextSpan","isPortableTextBlock","def","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","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","endBlockKey","endOffset","endBlockIndex","endBlock","anchorBlockPath","removeNodes","delete","unit","insertInlineObjectOperationImplementation","parsedInlineObject","parseInlineObject","focusTextBlock","insertSpanOperationImplementation","insertBlockOperationImplementation","fragment","insertBlock","placement","select","startBlock","startBlockPath","endBlockPath","nextPath","selectionBefore","insertFragment","currentSelection","endBlockEndPoint","adjustedSelection","transform","next","Point","endBlockStartPoint","isEmptyTextBlock","splitNodes","moveBackwardOperationImplementation","move","distance","moveBlockOperationImplementation","originKey","originBlockIndex","destinationKey","to","destinationBlockIndex","moveNodes","moveForwardOperationImplementation","selectOperationImplementation","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","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","prevPath","previous","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","previousBlock","breakingBlockObject","clickingAboveLonelyBlockObject","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","selectionCollapsed","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","emShortcut","underlineShortcut","codeShortcut","getCompoundClientRect","DOMRect","elements","firstRect","left","right","rect","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","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","abstractInsertBehaviors","getFocusTextBlock","abstractKeyboardBehaviors","abstractListItemBehaviors","selectedTextBlocks","getSelectedTextBlocks","isActiveListItem","abstractMoveBehaviors","getPreviousBlock","getNextBlock","abstractSelectBehaviors","getBlockStartPoint","abstractSplitBehaviors","blockEndPoint","newTextBlockSelection","newTextBlock","sliceTextBlock","abstractStyleBehaviors","isActiveStyle","raiseDeserializationSuccessOrFailure","success","failures","getData","deserializeEvent","failure","raiseSerializationSuccessOrFailure","serializeEvents","serializeEvent","abstractBehaviors","setData","textRuns","getTextBlockText","textRun","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","guards","slate is busy","createMachine","initialReadOnly","states","initial","exit","dragstart","internalDrag","always","parentNode","removeChild","dragend","drop","pristine","idle","normalizing","dirty","createLegacySchema","portableTextType","blockType","of","findBlockType","childrenField","ofType","spanType","memberType","inlineObjectTypes","blockObjectTypes","resolveEnabledStyles","resolveEnabledDecorators","resolveEnabledListItems","styleField","btField","textStyles","listField","listItems","temporaryImageName","temporaryUrlName","temporaryObjectNames","image","url","objectNames","defaultObjectTitles","legacySchemaToEditorSchema","jsonType","compileSchemaDefinitionToLegacySchema","defineType","startCase","portableTextSchema","defineField","SanitySchema","pteSchema","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","editable","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","mutationActor","syncActor","createActors","registerBehavior","behaviorConfigWithPriority","listener","compileSchemasFromEditorConfig","schemaDefinition","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","onPaste","onCopy","onCut","onClick","onDragStart","onDrag","onDragEnd","onDragEnter","onDragOver","onDrop","onDragLeave","propsSelection","scrollSelectionIntoView","restProps","editableElement","setEditableElement","hasInvalidValue","setHasInvalidValue","useImperativeHandle","useSlate","rangeDecorationsActor","useActorRef","renderElement","eProps","renderLeaf","leafProps","renderText","restoreSelectionFromProps","normalizedSelection","o","onReady","onInvalidValue","onValueChanged","handleCopy","clipboardData","stopPropagation","handleCut","handlePaste","onPasteResult","then","parseBlocks","catch","finally","handleOnFocus","isDefaultPrevented","handleClick","isPropagationStopped","handleOnBlur","handleOnBeforeInput","validateSelection","findDocumentOrShadowRoot","activeElement","domSelection","existingDOMRange","newDOMRange","toDOMRange","startOffset","removeAllRanges","addRange","mutationObserver","MutationObserver","observe","attributeOldValue","characterData","childList","subtree","disconnect","handleKeyDown","onKeyDown","handleKeyUp","onKeyUp","scrollSelectionIntoViewToSlate","noop","addEventListener","removeEventListener","handleDragStart","handleDrag","handleDragEnd","handleDragEnter","handleDragOver","handleDrop","handleDragLeave","SlateEditable","className","useConstant","factory","React","constant","EditorProvider","initialConfig","internalEditor","internalEditor_0","portableTextEditor_0","t4","t5","t6","t7","EditorContext","defineSchema","usePortableTextEditorSelection","setSelection"],"mappings":"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","x_google_ignoreList":[32,38]}