@portabletext/editor 1.48.12 → 1.48.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"editor-provider.cjs","sources":["../../src/internal-utils/debug.ts","../../src/internal-utils/values.ts","../../src/internal-utils/weakMaps.ts","../../src/editor/mutation-machine.ts","../../src/internal-utils/validateValue.ts","../../src/internal-utils/withChanges.ts","../../src/internal-utils/withoutPatching.ts","../../../../node_modules/.pnpm/@sanity+diff-match-patch@3.2.0/node_modules/@sanity/diff-match-patch/dist/index.js","../../src/internal-utils/withUndoRedo.ts","../../src/editor/key-generator.ts","../../src/editor/with-applying-behavior-actions.ts","../../src/editor/plugins/createWithUndoRedo.ts","../../src/editor/sync-machine.ts","../../src/editor/components/Synchronizer.tsx","../../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/operationToPatches.ts","../../src/behavior-actions/behavior.action.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/editor/plugins/createWithPortableTextMarkModel.ts","../../src/behavior-actions/behavior.action.annotation.add.ts","../../src/behavior-actions/behavior.action.annotation.remove.ts","../../src/internal-utils/paths.ts","../../src/internal-utils/ranges.ts","../../src/behavior-actions/behavior.action.block.set.ts","../../src/behavior-actions/behavior.action.block.unset.ts","../../src/internal-utils/slate-utils.ts","../../src/behavior-actions/behavior.action.decorator.add.ts","../../src/behavior-actions/behavior.action.delete.ts","../../src/behavior-actions/behavior.action.delete.backward.ts","../../src/behavior-actions/behavior.action.delete.block.ts","../../src/behavior-actions/behavior.action.delete.forward.ts","../../src/behavior-actions/behavior.action.effect.ts","../../src/behavior-actions/behavior.action.insert-inline-object.ts","../../src/behavior-actions/behavior.action.insert-span.ts","../../src/behavior-actions/behavior.action.insert.block.ts","../../src/behavior-actions/behavior.action.move.backward.ts","../../src/behavior-actions/behavior.action.move.block.ts","../../src/behavior-actions/behavior.action.move.forward.ts","../../src/behavior-actions/behavior.action.select.ts","../../src/behavior-actions/behavior.actions.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/editor/plugins/createWithPatches.ts","../../src/editor/plugins/createWithPlaceholderBlock.ts","../../src/editor/plugins/createWithPortableTextBlockStyle.ts","../../src/editor/plugins/createWithPortableTextSelections.ts","../../src/editor/plugins/createWithSchemaTypes.ts","../../src/editor/plugins/createWithUtils.ts","../../src/editor/plugins/with-plugins.ts","../../src/editor/create-slate-editor.tsx","../../src/editor/legacy-schema.ts","../../src/editor/editor-schema.ts","../../src/internal-utils/slate-children-to-blocks.ts","../../src/editor/get-active-decorators.ts","../../src/editor/editor-selector.ts","../../src/editor/plugins/createWithEditableAPI.ts","../../src/editor/create-editor.ts","../../src/editor/editor-actor-context.ts","../../src/internal-utils/global-scope.ts","../../src/internal-utils/globally-scoped-context.ts","../../src/editor/editor-context.tsx","../../src/behaviors/behavior.core.annotations.ts","../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.core.block-objects.ts","../../src/behaviors/behavior.core.decorators.ts","../../src/behaviors/behavior.core.dnd.ts","../../src/behaviors/behavior.core.insert-break.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.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/internal-utils/key-is.ts","../../src/behaviors/behavior.default.raise-soft-break.ts","../../src/behaviors/behavior.default.ts","../../src/behaviors/behavior.types.event.ts","../../src/behaviors/behavior.perform-event.ts","../../src/editor/editor-snapshot.ts","../../src/editor/editor-machine.ts","../../src/editor/hooks/usePortableTextEditor.ts","../../src/editor/hooks/usePortableTextEditorSelection.tsx","../../src/editor/PortableTextEditor.tsx","../../src/editor/editor-provider.tsx"],"sourcesContent":["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 {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 type {Patch} from '@portabletext/patches'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {Editor} from 'slate'\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 type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\n\n/**\n * Makes sure editor mutation events are debounced\n */\nexport const mutationMachine = setup({\n types: {\n context: {} as {\n pendingMutations: Array<{\n actionId?: string\n value: Array<PortableTextBlock> | undefined\n patches: Array<Patch>\n }>\n schema: EditorSchema\n slateEditor: PortableTextSlateEditor\n },\n events: {} as\n | {\n type: 'patch'\n patch: Patch\n actionId?: string\n value: Array<PortableTextBlock>\n }\n | {\n type: 'typing'\n }\n | {\n type: 'not typing'\n },\n input: {} as {\n schema: EditorSchema\n slateEditor: PortableTextSlateEditor\n },\n emitted: {} as\n | {\n type: 'has pending patches'\n }\n | {\n type: 'mutation'\n patches: Array<Patch>\n snapshot: Array<PortableTextBlock> | undefined\n },\n },\n actions: {\n 'emit has pending patches': emit({type: 'has pending patches'}),\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 patch': assign({\n pendingMutations: ({context, event}) => {\n assertEvent(event, 'patch')\n\n if (context.pendingMutations.length === 0) {\n return [\n {\n actionId: event.actionId,\n value: event.value,\n patches: [event.patch],\n },\n ]\n }\n\n const lastBulk = context.pendingMutations.at(-1)\n\n if (lastBulk && lastBulk.actionId === event.actionId) {\n return context.pendingMutations.slice(0, -1).concat({\n value: event.value,\n actionId: lastBulk.actionId,\n patches: [...lastBulk.patches, event.patch],\n })\n }\n\n return context.pendingMutations.concat({\n value: event.value,\n actionId: event.actionId,\n patches: [event.patch],\n })\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 },\n guards: {\n 'is typing': stateIn({typing: 'typing'}),\n 'no pending mutations': ({context}) =>\n context.pendingMutations.length === 0,\n 'slate is normalizing': ({context}) =>\n Editor.isNormalizing(context.slateEditor),\n },\n delays: {\n 'mutation debounce': process.env.NODE_ENV === 'test' ? 250 : 0,\n 'type debounce': process.env.NODE_ENV === 'test' ? 0 : 250,\n },\n}).createMachine({\n id: 'mutation',\n context: ({input}) => ({\n pendingMutations: [],\n schema: input.schema,\n slateEditor: input.slateEditor,\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 on: {\n typing: {\n target: 'typing',\n },\n },\n },\n typing: {\n after: {\n 'type debounce': {\n target: 'idle',\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 on: {\n patch: {\n actions: ['defer patch', 'emit has pending patches'],\n target: 'emitting mutations',\n },\n },\n },\n 'emitting mutations': {\n after: {\n 'mutation debounce': [\n {\n guard: and([not('is typing'), 'slate is normalizing']),\n target: 'idle',\n actions: ['emit mutations', 'clear pending mutations'],\n },\n {\n target: 'emitting mutations',\n reenter: true,\n },\n ],\n },\n on: {\n patch: {\n target: 'emitting mutations',\n actions: ['defer patch'],\n reenter: true,\n },\n },\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 {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\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","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'\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 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 {Editor} from 'slate'\nimport {defaultKeyGenerator} from './key-generator'\n\nconst CURRENT_ACTION_ID: WeakMap<Editor, string | undefined> = new WeakMap()\n\nexport function withApplyingBehaviorActions(editor: Editor, fn: () => void) {\n CURRENT_ACTION_ID.set(editor, defaultKeyGenerator())\n Editor.withoutNormalizing(editor, fn)\n CURRENT_ACTION_ID.set(editor, undefined)\n}\n\nexport function getCurrentActionId(editor: Editor) {\n return CURRENT_ACTION_ID.get(editor)\n}\n\nexport function isApplyingBehaviorActions(editor: Editor) {\n return getCurrentActionId(editor) !== undefined\n}\n\n////////\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 type {BehaviorActionImplementation} from '../../behavior-actions/behavior.actions'\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 {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {getCurrentUndoStepId} from '../with-applying-behavior-actions'\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 =\n currentUndoStepId !== undefined && previousUndoStepId === undefined\n ? false\n : currentUndoStepId !== undefined && previousUndoStepId !== undefined\n ? currentUndoStepId === previousUndoStepId\n : true\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 historyUndoActionImplementation: BehaviorActionImplementation<\n 'history.undo'\n> = ({action}) => {\n const editor = action.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 historyRedoActionImplementation: BehaviorActionImplementation<\n 'history.redo'\n> = ({action}) => {\n const editor = action.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 {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 assertEvent,\n assign,\n emit,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} 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\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 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 keyGenerator: () => string\n schema: EditorSchema\n readOnly: boolean\n slateEditor: PortableTextSlateEditor\n },\n events: {} as\n | {\n type: 'has pending patches'\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 '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 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 on: {\n 'has pending patches': {\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 type: 'parallel',\n states: {\n 'setting up': {\n initial: 'syncing initial value',\n states: {\n 'syncing initial value': {\n entry: [\n () => {\n debug('entry: syncing initial value')\n },\n ],\n exit: [\n () => {\n debug('exit: syncing initial value')\n },\n ],\n always: {\n guard: 'initial value synced',\n target: 'done syncing initial value',\n },\n },\n 'done syncing initial value': {\n entry: [\n 'emit done syncing value',\n () => {\n debug('entry: done syncing initial value')\n },\n ],\n exit: [\n () => {\n debug('exit: done syncing initial value')\n },\n ],\n type: 'final',\n },\n },\n },\n 'syncing': {\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: 'is busy',\n target: 'busy',\n actions: ['assign pending value'],\n },\n {\n target: 'syncing',\n actions: ['assign pending value'],\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 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 always: {\n guard: 'pending value equals previous value',\n target: 'idle',\n actions: ['clear pending value', 'assign initial value synced'],\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 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: [\n 'assign previous value',\n 'assign initial value synced',\n ],\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 },\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 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 withoutPatching(slateEditor, () => {\n if (hadSelection) {\n Transforms.deselect(slateEditor)\n }\n const childrenLength = slateEditor.children.length\n slateEditor.children.forEach((_, index) => {\n Transforms.removeNodes(slateEditor, {\n at: [childrenLength - 1 - index],\n })\n })\n Transforms.insertNodes(\n slateEditor,\n slateEditor.pteCreateTextBlock({decorators: []}),\n {at: [0]},\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 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 await new Promise<void>((resolve) => {\n Editor.withoutNormalizing(slateEditor, () => {\n withRemoteChanges(slateEditor, () => {\n withoutPatching(slateEditor, async () => {\n const childrenLength = slateEditor.children.length\n\n // Remove blocks that have become superfluous\n if (slateValueFromProps.length < childrenLength) {\n for (\n let i = childrenLength - 1;\n i > slateValueFromProps.length - 1;\n i--\n ) {\n Transforms.removeNodes(slateEditor, {\n at: [i],\n })\n }\n isChanged = true\n }\n\n for await (const [currentBlock, currentBlockIndex] of getBlocks({\n slateValue: slateValueFromProps,\n streamBlocks,\n })) {\n // Go through all of the blocks and see if they need to be updated\n const {blockChanged, blockValid} = syncBlock({\n context,\n sendBack,\n block: currentBlock,\n index: currentBlockIndex,\n slateEditor,\n value,\n })\n isChanged = blockChanged || isChanged\n isValid = isValid && blockValid\n }\n\n resolve()\n })\n })\n })\n })\n }\n\n if (!isValid) {\n debug('Invalid value, returning')\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 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 sendBack({type: 'done syncing', value})\n}\n\nasync function* getBlocks({\n slateValue,\n streamBlocks,\n}: {\n slateValue: Array<Descendant>\n streamBlocks: boolean\n}) {\n let index = 0\n for await (const block of slateValue) {\n if (streamBlocks && 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 {useActorRef, useSelector} from '@xstate/react'\nimport {useEffect} from 'react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {fromSlateValue} from '../../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../../internal-utils/weakMaps'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {mutationMachine} from '../mutation-machine'\nimport {syncMachine} from '../sync-machine'\n\nconst debug = debugWithName('component:PortableTextEditor:Synchronizer')\n\n/**\n * @internal\n */\nexport interface SynchronizerProps {\n editorActor: EditorActor\n slateEditor: PortableTextSlateEditor\n}\n\n/**\n * Synchronizes the server value with the editor, and provides various contexts for the editor state.\n * @internal\n */\nexport function Synchronizer(props: SynchronizerProps) {\n const {editorActor, slateEditor} = props\n\n const incomingValue = useSelector(\n props.editorActor,\n (s) => s.context.incomingValue,\n )\n const readOnly = useSelector(props.editorActor, (s) =>\n s.matches({'edit mode': 'read only'}),\n )\n const syncActorRef = useActorRef(syncMachine, {\n input: {\n keyGenerator: props.editorActor.getSnapshot().context.keyGenerator,\n readOnly: props.editorActor\n .getSnapshot()\n .matches({'edit mode': 'read only'}),\n schema: props.editorActor.getSnapshot().context.schema,\n slateEditor,\n },\n })\n const mutationActorRef = useActorRef(mutationMachine, {\n input: {\n schema: props.editorActor.getSnapshot().context.schema,\n slateEditor,\n },\n })\n\n useEffect(() => {\n const subscription = mutationActorRef.on('*', (event) => {\n if (event.type === 'has pending patches') {\n syncActorRef.send({type: 'has pending patches'})\n }\n if (event.type === 'mutation') {\n syncActorRef.send({type: 'mutation'})\n editorActor.send({\n type: 'mutation',\n patches: event.patches,\n snapshot: event.snapshot,\n value: event.snapshot,\n })\n }\n })\n\n return () => {\n subscription.unsubscribe()\n }\n }, [mutationActorRef, syncActorRef, editorActor])\n\n useEffect(() => {\n const subscription = syncActorRef.on('*', (event) => {\n switch (event.type) {\n case 'invalid value':\n props.editorActor.send({\n ...event,\n type: 'notify.invalid value',\n })\n break\n case 'value changed':\n props.editorActor.send({\n ...event,\n type: 'notify.value changed',\n })\n break\n case 'patch':\n props.editorActor.send({\n ...event,\n type: 'internal.patch',\n value: fromSlateValue(\n slateEditor.children,\n props.editorActor.getSnapshot().context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(slateEditor),\n ),\n })\n break\n\n default:\n props.editorActor.send(event)\n }\n })\n\n return () => {\n subscription.unsubscribe()\n }\n }, [props.editorActor, slateEditor, syncActorRef])\n\n useEffect(() => {\n syncActorRef.send({type: 'update readOnly', readOnly})\n }, [syncActorRef, readOnly])\n\n useEffect(() => {\n debug('Value from props changed, syncing new value')\n syncActorRef.send({type: 'update value', value: incomingValue})\n }, [syncActorRef, incomingValue])\n\n // Subscribe to, and handle changes from the editor\n useEffect(() => {\n debug('Subscribing to patch events')\n const sub = editorActor.on('internal.patch', (event) => {\n mutationActorRef.send({...event, type: 'patch'})\n })\n return () => {\n debug('Unsubscribing to patch events')\n sub.unsubscribe()\n }\n }, [editorActor, mutationActorRef, slateEditor])\n\n return null\n}\n\nSynchronizer.displayName = 'Synchronizer'\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 {sliceBlocks} from '../utils'\nimport {defineConverter} from './converter.types'\n\nexport const converterPortableText = defineConverter({\n mimeType: 'application/x-portable-text',\n serialize: ({snapshot, event}) => {\n const selection =\n snapshot.beta.internalDrag?.origin.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 = sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\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 /**\n * If we are dragging internally then we would like to keep the\n * dropped portable text as is.\n */\n refreshKeys: !snapshot.beta.hasTag?.('dragging internally'),\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 type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {sliceBlocks} from '../utils'\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 =\n snapshot.beta.internalDrag?.origin.selection ??\n 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 = sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\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 },\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 type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {sliceBlocks} from '../utils'\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 =\n snapshot.beta.internalDrag?.origin.selection ??\n 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 = sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\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 snapshot.beta.hasTag('dragging internally')\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 snapshot.beta.hasTag('dragging internally')\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 },\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 {\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 {EditorActor} from '../editor/editor-machine'\nimport type {PatchFunctions} from '../editor/plugins/createWithPatches'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {debugWithName} from './debug'\nimport {fromSlateValue} from './values'\n\nconst debug = debugWithName('operationToPatches')\n\nexport function createOperationToPatches(\n editorActor: EditorActor,\n): PatchFunctions {\n const textBlockName = editorActor.getSnapshot().context.schema.block.name\n function insertTextPatch(\n editor: PortableTextSlateEditor,\n operation: InsertTextOperation,\n beforeValue: Descendant[],\n ) {\n if (debug.enabled) {\n debug('Operation', JSON.stringify(operation, null, 2))\n }\n const block =\n editor.isTextBlock(editor.children[operation.path[0]]) &&\n editor.children[operation.path[0]]\n if (!block) {\n throw new Error('Could not find block')\n }\n const textChild =\n editor.isTextBlock(block) &&\n editor.isTextSpan(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 editor.isTextBlock(prevBlock) && prevBlock.children[operation.path[1]]\n const prevText = editor.isTextSpan(prevChild) ? prevChild.text : ''\n const patch = diffMatchPatch(prevText, textChild.text, path)\n return patch.value.length ? [patch] : []\n }\n\n function removeTextPatch(\n editor: PortableTextSlateEditor,\n operation: RemoveTextOperation,\n beforeValue: Descendant[],\n ) {\n const block = editor && editor.children[operation.path[0]]\n if (!block) {\n throw new Error('Could not find block')\n }\n const child =\n (editor.isTextBlock(block) && block.children[operation.path[1]]) ||\n undefined\n const textChild: PortableTextSpan | undefined = editor.isTextSpan(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 editor.isTextBlock(beforeBlock) && beforeBlock.children[operation.path[1]]\n const prevText = editor.isTextSpan(prevTextChild) && prevTextChild.text\n const patch = diffMatchPatch(prevText || '', textChild.text, path)\n return patch.value ? [patch] : []\n }\n\n function setNodePatch(\n editor: PortableTextSlateEditor,\n operation: SetNodeOperation,\n ) {\n if (operation.path.length === 1) {\n const block = editor.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 {...editor.children[operation.path[0]], ...operation.newProperties},\n isUndefined,\n ) as unknown as Descendant\n return [\n set(fromSlateValue([setNode], textBlockName)[0], [{_key: block._key}]),\n ]\n } else if (operation.path.length === 2) {\n const block = editor.children[operation.path[0]]\n if (editor.isTextBlock(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\n function insertNodePatch(\n editor: PortableTextSlateEditor,\n operation: InsertNodeOperation,\n beforeValue: Descendant[],\n ): Patch[] {\n const block = beforeValue[operation.path[0]]\n const isTextBlock = editor.isTextBlock(block)\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 =\n operation.path[0] === 0 ? block?._key : beforeBlock?._key\n if (targetKey) {\n return [\n insert(\n [fromSlateValue([operation.node as Descendant], textBlockName)[0]],\n position,\n [{_key: targetKey}],\n ),\n ]\n }\n return [\n setIfMissing(beforeValue, []),\n insert(\n [fromSlateValue([operation.node as Descendant], textBlockName)[0]],\n 'before',\n [operation.path[0]],\n ),\n ]\n } else if (\n isTextBlock &&\n operation.path.length === 2 &&\n editor.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: textBlockName,\n children: [node],\n },\n ],\n textBlockName,\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 debug(\n 'Something was inserted into a void block. Not producing editor patches.',\n )\n return []\n }\n\n function splitNodePatch(\n editor: PortableTextSlateEditor,\n operation: SplitNodeOperation,\n beforeValue: Descendant[],\n ) {\n const patches: Patch[] = []\n const splitBlock = editor.children[operation.path[0]]\n if (!editor.isTextBlock(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 (editor.isTextBlock(oldBlock)) {\n const targetValue = fromSlateValue(\n [editor.children[operation.path[0] + 1]],\n textBlockName,\n )[0]\n if (targetValue) {\n patches.push(\n insert([targetValue], 'after', [{_key: splitBlock._key}]),\n )\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 (editor.isTextSpan(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 textBlockName,\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\n function removeNodePatch(\n editor: PortableTextSlateEditor,\n operation: RemoveNodeOperation,\n beforeValue: Descendant[],\n ) {\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 (editor.isTextBlock(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 debug('Span not found in editor trying to remove node')\n return []\n } else {\n debug('Not creating patch inside object block')\n return []\n }\n }\n\n function mergeNodePatch(\n editor: PortableTextSlateEditor,\n operation: MergeNodeOperation,\n beforeValue: Descendant[],\n ) {\n const patches: Patch[] = []\n\n const block = beforeValue[operation.path[0]]\n const updatedBlock = editor.children[operation.path[0]]\n\n if (operation.path.length === 1) {\n if (block?._key) {\n const newBlock = fromSlateValue(\n [editor.children[operation.path[0] - 1]],\n textBlockName,\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 editor.isTextBlock(block) &&\n editor.isTextBlock(updatedBlock) &&\n operation.path.length === 2\n ) {\n const updatedSpan =\n updatedBlock.children[operation.path[1] - 1] &&\n editor.isTextSpan(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 editor.isTextSpan(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 } else {\n debug(\"Void nodes can't be merged, not creating any patches\")\n }\n return patches\n }\n\n function moveNodePatch(\n editor: PortableTextSlateEditor,\n operation: MoveNodeOperation,\n beforeValue: Descendant[],\n ) {\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], textBlockName)[0]], position, [\n {_key: targetBlock._key},\n ]),\n )\n } else if (\n operation.path.length === 2 &&\n editor.isTextBlock(block) &&\n editor.isTextBlock(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\n ? 'after'\n : 'before'\n const childToInsert = (\n fromSlateValue([block], textBlockName)[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\n return {\n insertNodePatch,\n insertTextPatch,\n mergeNodePatch,\n moveNodePatch,\n removeNodePatch,\n removeTextPatch,\n setNodePatch,\n splitNodePatch,\n }\n}\n","import {Transforms} from 'slate'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const insertTextActionImplementation: BehaviorActionImplementation<\n 'insert.text'\n> = ({action}) => {\n if (action.editor.marks) {\n Transforms.insertNodes(action.editor, {\n text: action.text,\n ...action.editor.marks,\n })\n } else {\n Transforms.insertText(action.editor, action.text)\n }\n\n action.editor.marks = null\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","/**\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 type {BehaviorActionImplementation} from '../../behavior-actions/behavior.actions'\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 {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\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 const marks = Editor.marks(editor)\n\n if (\n marks &&\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 // If the editor has marks and we are not visually moving the\n // selection then we just abort. Otherwise the marks would be\n // cleared and we can't use them for the possible subsequent insert\n // operation.\n if (movedToNextSpan || movedToPreviousSpan) {\n return\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 {selection} = editor\n const collapsedSelection = selection\n ? Range.isCollapsed(selection)\n : false\n\n if (selection && collapsedSelection) {\n const [_block, blockPath] = Editor.node(editor, selection, {\n depth: 1,\n })\n\n const [span, spanPath] =\n Array.from(\n Editor.nodes(editor, {\n mode: 'lowest',\n at: selection.focus,\n match: (n) => editor.isTextSpan(n),\n voids: false,\n }),\n )[0] ?? ([undefined, undefined] as const)\n\n const marks = span.marks ?? []\n const marksWithoutAnnotations = marks.filter((mark) =>\n decorators.includes(mark),\n )\n const spanHasAnnotations =\n marks.length > marksWithoutAnnotations.length\n\n const spanIsEmpty = span.text.length === 0\n\n const atTheBeginningOfSpan = selection.anchor.offset === 0\n const atTheEndOfSpan = selection.anchor.offset === span.text.length\n\n const previousSpan = getPreviousSpan({editor, blockPath, spanPath})\n const nextSpan = getNextSpan({editor, blockPath, spanPath})\n const nextSpanAnnotations =\n nextSpan?.marks?.filter((mark) => !decorators.includes(mark)) ?? []\n const spanAnnotations = marks.filter(\n (mark) => !decorators.includes(mark),\n )\n\n const previousSpanHasAnnotations = previousSpan\n ? previousSpan.marks?.some((mark) => !decorators.includes(mark))\n : false\n const previousSpanHasSameAnnotations = previousSpan\n ? previousSpan.marks\n ?.filter((mark) => !decorators.includes(mark))\n .every((mark) => marks.includes(mark))\n : false\n const previousSpanHasSameAnnotation = previousSpan\n ? previousSpan.marks?.some(\n (mark) => !decorators.includes(mark) && marks.includes(mark),\n )\n : false\n\n const previousSpanHasSameMarks = previousSpan\n ? previousSpan.marks?.every((mark) => marks.includes(mark))\n : false\n const nextSpanSharesSomeAnnotations = spanAnnotations.some((mark) =>\n nextSpanAnnotations?.includes(mark),\n )\n\n if (spanHasAnnotations && !spanIsEmpty) {\n if (atTheBeginningOfSpan) {\n if (previousSpanHasSameMarks) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: previousSpan?.marks ?? [],\n })\n return\n } else if (previousSpanHasSameAnnotations) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: previousSpan?.marks ?? [],\n })\n return\n } else if (previousSpanHasSameAnnotation) {\n apply(op)\n return\n } else if (!previousSpan) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: [],\n })\n return\n }\n }\n\n if (atTheEndOfSpan) {\n if (\n (nextSpan &&\n nextSpanSharesSomeAnnotations &&\n nextSpanAnnotations.length < spanAnnotations.length) ||\n !nextSpanSharesSomeAnnotations\n ) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: nextSpan?.marks ?? [],\n })\n return\n }\n\n if (!nextSpan) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: [],\n })\n return\n }\n }\n }\n\n if (atTheBeginningOfSpan && !spanIsEmpty && !!previousSpan) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: previousSpanHasAnnotations\n ? []\n : (previousSpan.marks ?? []).filter((mark) =>\n decorators.includes(mark),\n ),\n })\n return\n }\n }\n }\n\n if (op.type === 'remove_text') {\n const {selection} = editor\n\n if (selection && Range.isExpanded(selection)) {\n const [block, blockPath] = Editor.node(editor, selection, {\n depth: 1,\n })\n const [span, spanPath] =\n Array.from(\n Editor.nodes(editor, {\n mode: 'lowest',\n at: {path: op.path, offset: op.offset},\n match: (n) => editor.isTextSpan(n),\n voids: false,\n }),\n )[0] ?? ([undefined, undefined] as const)\n\n if (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 marksWithoutAnnotationMarks: string[] = (\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n ).filter((mark) => decorators.includes(mark))\n\n Editor.withoutNormalizing(editor, () => {\n apply(op)\n Transforms.setNodes(\n editor,\n {marks: marksWithoutAnnotationMarks},\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 removeDecoratorActionImplementation: BehaviorActionImplementation<\n 'decorator.remove'\n> = ({action}) => {\n const editor = action.editor\n const mark = action.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 const existingMarks: string[] =\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n const marks = {\n ...(Editor.marks(editor) || {}),\n marks: existingMarks.filter((eMark) => eMark !== mark),\n } as Text\n editor.marks = {marks: marks.marks, _type: 'span'} as Text\n }\n }\n\n if (editor.selection) {\n // Reselect\n const selection = editor.selection\n editor.selection = {...selection}\n }\n }\n}\n\nexport function isDecoratorActive({\n editor,\n decorator,\n}: {\n editor: PortableTextSlateEditor\n decorator: string\n}) {\n if (!editor.selection) {\n return false\n }\n\n const selectedTextNodes = Array.from(\n Editor.nodes(editor, {match: Text.isText, at: editor.selection}),\n )\n\n if (selectedTextNodes.length === 0) {\n return false\n }\n\n if (Range.isExpanded(editor.selection)) {\n return selectedTextNodes.every((n) => {\n const [node] = n\n\n return node.marks?.includes(decorator)\n })\n }\n\n return (\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n ).includes(decorator)\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 {BehaviorActionImplementation} from './behavior.actions'\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 addAnnotationActionImplementation: BehaviorActionImplementation<\n 'annotation.add',\n AddedAnnotationPaths | undefined\n> = ({context, action}) => {\n const parsedAnnotation = parseAnnotation({\n annotation: {\n _type: action.annotation.name,\n ...action.annotation.value,\n },\n context,\n options: {refreshKeys: false},\n })\n\n if (!parsedAnnotation) {\n throw new Error(\n `Failed to parse annotation ${JSON.stringify(action.annotation)}`,\n )\n }\n\n const editor = action.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 {BehaviorActionImplementation} from './behavior.actions'\n\nexport const removeAnnotationActionImplementation: BehaviorActionImplementation<\n 'annotation.remove'\n> = ({action}) => {\n const editor = action.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 === action.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 !== action.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 {isKeySegment, type Path} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport {Editor, Element, type Descendant, type Path as SlatePath} from 'slate'\n\nexport function toSlatePath(path: Path, editor: Editor): SlatePath {\n if (!editor) {\n return []\n }\n const [block, blockPath] = Array.from(\n Editor.nodes(editor, {\n at: [],\n match: (n) =>\n isKeySegment(path[0]) && (n as Descendant)._key === path[0]._key,\n }),\n )[0] || [undefined, undefined]\n\n if (!block || !Element.isElement(block)) {\n return []\n }\n\n if (editor.isVoid(block)) {\n return [blockPath[0], 0]\n }\n\n const childPath = [path[2]]\n const childIndex = block.children.findIndex((child) =>\n isEqual([{_key: child._key}], childPath),\n )\n\n if (childIndex >= 0 && block.children[childIndex]) {\n const child = block.children[childIndex]\n if (Element.isElement(child) && editor.isVoid(child)) {\n return blockPath.concat(childIndex).concat(0)\n }\n return blockPath.concat(childIndex)\n }\n\n return [blockPath[0], 0]\n}\n","import {Point, type Editor, type Operation, type Range} from 'slate'\nimport type {EditorSelection} from '../types/editor'\nimport {toSlatePath} from './paths'\n\nexport interface ObjectWithKeyAndType {\n _key: string\n _type: string\n children?: ObjectWithKeyAndType[]\n}\n\nexport function toSlateRange(\n selection: EditorSelection,\n editor: Editor,\n): Range | null {\n if (!selection || !editor) {\n return null\n }\n const anchor = {\n path: toSlatePath(selection.anchor.path, editor),\n offset: selection.anchor.offset,\n }\n const focus = {\n path: toSlatePath(selection.focus.path, editor),\n offset: selection.focus.offset,\n }\n if (focus.path.length === 0 || anchor.path.length === 0) {\n return null\n }\n const range = anchor && focus ? {anchor, focus} : null\n return range\n}\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 {Editor, Transforms, type Element as SlateElement} from 'slate'\nimport {parseBlock} from '../internal-utils/parse-blocks'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport {fromSlateValue, toSlateValue} from '../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const blockSetBehaviorActionImplementation: BehaviorActionImplementation<\n 'block.set'\n> = ({context, action}) => {\n const location = toSlateRange(\n {\n anchor: {path: action.at, offset: 0},\n focus: {path: action.at, offset: 0},\n },\n action.editor,\n )\n\n if (!location) {\n throw new Error(\n `Unable to convert ${JSON.stringify(action.at)} into a Slate Range`,\n )\n }\n\n const blockEntry = Editor.node(action.editor, location, {depth: 1})\n const block = blockEntry?.[0]\n\n if (!block) {\n throw new Error(`Unable to find block at ${JSON.stringify(action.at)}`)\n }\n\n const parsedBlock = fromSlateValue(\n [block],\n context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(action.editor),\n ).at(0)\n\n if (!parsedBlock) {\n throw new Error(`Unable to parse block at ${JSON.stringify(action.at)}`)\n }\n\n const {_type, ...filteredProps} = action.props\n\n const updatedBlock = parseBlock({\n context,\n block: {\n ...parsedBlock,\n ...filteredProps,\n },\n options: {refreshKeys: false},\n })\n\n if (!updatedBlock) {\n throw new Error(`Unable to update block at ${JSON.stringify(action.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(action.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/ranges'\nimport {fromSlateValue} from '../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const blockUnsetBehaviorActionImplementation: BehaviorActionImplementation<\n 'block.unset'\n> = ({context, action}) => {\n const location = toSlateRange(\n {\n anchor: {path: action.at, offset: 0},\n focus: {path: action.at, offset: 0},\n },\n action.editor,\n )\n\n if (!location) {\n throw new Error(\n `Unable to convert ${JSON.stringify(action.at)} into a Slate Range`,\n )\n }\n\n const blockEntry = Editor.node(action.editor, location, {depth: 1})\n const block = blockEntry?.[0]\n\n if (!block) {\n throw new Error(`Unable to find block at ${JSON.stringify(action.at)}`)\n }\n\n const parsedBlock = fromSlateValue(\n [block],\n context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(action.editor),\n ).at(0)\n\n if (!parsedBlock) {\n throw new Error(`Unable to parse block at ${JSON.stringify(action.at)}`)\n }\n\n if (isTextBlock(context, parsedBlock)) {\n const propsToRemove = action.props.filter((prop) => prop !== '_type')\n\n const updatedTextBlock = parseBlock({\n context,\n block: omit(parsedBlock, propsToRemove),\n options: {refreshKeys: false},\n })\n\n if (!updatedTextBlock) {\n throw new Error(`Unable to update block at ${JSON.stringify(action.at)}`)\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(action.editor, propsToSet, {at: location})\n\n return\n }\n\n const updatedBlockObject = parseBlock({\n context,\n block: omit(\n parsedBlock,\n action.props.filter((prop) => prop !== '_type'),\n ),\n options: {refreshKeys: false},\n })\n\n if (!updatedBlockObject) {\n throw new Error(`Unable to update block at ${JSON.stringify(action.at)}`)\n }\n\n const {_type, _key, ...props} = updatedBlockObject\n\n Transforms.setNodes(\n action.editor,\n {\n _type,\n _key,\n value: props,\n },\n {at: location},\n )\n}\n","import {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 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 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\nfunction 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 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 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, Range, Text, Transforms} from 'slate'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\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 {BehaviorActionImplementation} from './behavior.actions'\n\nexport const decoratorAddActionImplementation: BehaviorActionImplementation<\n 'decorator.add'\n> = ({context, action}) => {\n const editor = action.editor\n const mark = action.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 = action.at?.anchor\n ? utils.blockOffsetToSpanSelectionPoint({\n context: {\n ...context,\n value,\n },\n blockOffset: action.at.anchor,\n direction: 'backward',\n })\n : undefined\n const manualFocus = action.at?.focus\n ? utils.blockOffsetToSpanSelectionPoint({\n context: {\n ...context,\n value,\n },\n blockOffset: action.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(manualSelection, action.editor) ?? 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 beta: {hasTag: () => false, internalDrag: undefined},\n context: {\n activeDecorators: [],\n converters: [],\n keyGenerator: context.keyGenerator,\n readOnly: false,\n schema: context.schema,\n selection: newSelection,\n value: newValue,\n },\n })\n\n if (!trimmedSelection) {\n throw new Error('Unable to find trimmed selection')\n }\n\n const newRange = toSlateRange(trimmedSelection, editor)\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 const existingMarks: string[] =\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n const marks = {\n ...(Editor.marks(editor) || {}),\n marks: [...existingMarks, mark],\n }\n editor.marks = marks as Text\n }\n }\n\n if (editor.selection) {\n // Reselect\n const selection = editor.selection\n editor.selection = {...selection}\n }\n}\n","import {Range} from 'slate'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport {getFocusBlock, getFocusChild} from '../internal-utils/slate-utils'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const deleteActionImplementation: BehaviorActionImplementation<\n 'delete'\n> = ({context, action}) => {\n const range = toSlateRange(action.at, action.editor)\n\n if (!range) {\n throw new Error(\n `Failed to get Slate Range for selection ${JSON.stringify(action.at)}`,\n )\n }\n\n if (Range.isCollapsed(range)) {\n const [focusBlock] = getFocusBlock({\n editor: {...action.editor, selection: range},\n })\n const [focusChild] = getFocusChild({\n editor: {...action.editor, selection: range},\n })\n\n if (\n focusBlock &&\n focusBlock._type === context.schema.block.name &&\n focusChild &&\n focusChild._type === context.schema.span.name\n ) {\n return\n }\n }\n\n action.editor.delete({at: range})\n}\n","import type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const deleteBackwardActionImplementation: BehaviorActionImplementation<\n 'delete.backward'\n> = ({action}) => {\n action.editor.deleteBackward(action.unit)\n}\n","import {Transforms} from 'slate'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const deleteBlockActionImplementation: BehaviorActionImplementation<\n 'delete.block'\n> = ({action}) => {\n const range = toSlateRange(\n {\n anchor: {path: action.at, offset: 0},\n focus: {path: action.at, offset: 0},\n },\n action.editor,\n )\n\n if (!range) {\n console.error('Unable to find Slate range from selection points')\n return\n }\n\n Transforms.removeNodes(action.editor, {\n at: range,\n })\n}\n","import type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const deleteForwardActionImplementation: BehaviorActionImplementation<\n 'delete.forward'\n> = ({action}) => {\n action.editor.deleteForward(action.unit)\n}\n","import type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const effectActionImplementation: BehaviorActionImplementation<\n 'effect'\n> = ({action}) => {\n action.effect()\n}\n","import {Editor, Transforms, type Element} from 'slate'\nimport {parseInlineObject} from '../internal-utils/parse-blocks'\nimport {toSlateValue} from '../internal-utils/values'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const insertInlineObjectActionImplementation: BehaviorActionImplementation<\n 'insert.inline object'\n> = ({context, action}) => {\n const parsedInlineObject = parseInlineObject({\n context,\n inlineObject: {\n _type: action.inlineObject.name,\n ...(action.inlineObject.value ?? {}),\n },\n options: {refreshKeys: false},\n })\n\n if (!parsedInlineObject) {\n throw new Error(\n `Failed to parse inline object ${JSON.stringify(action.inlineObject)}`,\n )\n }\n\n if (!action.editor.selection) {\n console.error('Unable to insert inline object without selection')\n return\n }\n\n const [focusTextBlock] = Array.from(\n Editor.nodes(action.editor, {\n at: action.editor.selection.focus.path,\n match: (node) => action.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(action.editor, child)\n}\n","import {Editor, Transforms} from 'slate'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const insertSpanActionImplementation: BehaviorActionImplementation<\n 'insert.span'\n> = ({context, action}) => {\n if (!action.editor.selection) {\n console.error('Unable to perform action without selection', action)\n return\n }\n\n const [focusBlock, focusBlockPath] = Array.from(\n Editor.nodes(action.editor, {\n at: action.editor.selection.focus.path,\n match: (node) => action.editor.isTextBlock(node),\n }),\n )[0] ?? [undefined, undefined]\n\n if (!focusBlock || !focusBlockPath) {\n console.error('Unable to perform action without focus block', action)\n return\n }\n\n const markDefs = focusBlock.markDefs ?? []\n const annotations = action.annotations\n ? action.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(action.editor, {\n markDefs: [...markDefs, ...annotations],\n })\n }\n\n Transforms.insertNodes(action.editor, {\n _type: 'span',\n _key: context.keyGenerator(),\n text: action.text,\n marks: [\n ...(annotations?.map((annotation) => annotation._key) ?? []),\n ...(action.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 type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const insertBlockActionImplementation: BehaviorActionImplementation<\n 'insert.block'\n> = ({context, action}) => {\n const parsedBlock = parseBlock({\n block: action.block,\n context,\n options: {refreshKeys: false},\n })\n\n if (!parsedBlock) {\n throw new Error(`Failed to parse block ${JSON.stringify(action.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: action.placement,\n select: action.select ?? 'start',\n editor: action.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, 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 } 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 (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 (isEqualToEmptyEditor([endBlock], schema)) {\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.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 {BehaviorActionImplementation} from './behavior.actions'\n\nexport const moveBackwardActionImplementation: BehaviorActionImplementation<\n 'move.backward'\n> = ({action}) => {\n Transforms.move(action.editor, {\n unit: 'character',\n distance: action.distance,\n reverse: true,\n })\n}\n","import {Transforms} from 'slate'\nimport {toSlatePath} from '../internal-utils/paths'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const moveBlockActionImplementation: BehaviorActionImplementation<\n 'move.block'\n> = ({action}) => {\n const at = [toSlatePath(action.at, action.editor)[0]]\n const to = [toSlatePath(action.to, action.editor)[0]]\n\n Transforms.moveNodes(action.editor, {\n at,\n to,\n mode: 'highest',\n })\n}\n","import {Transforms} from 'slate'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const moveForwardActionImplementation: BehaviorActionImplementation<\n 'move.forward'\n> = ({action}) => {\n Transforms.move(action.editor, {\n unit: 'character',\n distance: action.distance,\n })\n}\n","import {Transforms} from 'slate'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const selectActionImplementation: BehaviorActionImplementation<\n 'select'\n> = ({action}) => {\n const newSelection = toSlateRange(action.at, action.editor)\n\n if (newSelection) {\n Transforms.select(action.editor, newSelection)\n } else {\n Transforms.deselect(action.editor)\n }\n}\n","import type {InternalBehaviorAction} from '../behaviors/behavior.types.action'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {removeDecoratorActionImplementation} from '../editor/plugins/createWithPortableTextMarkModel'\nimport {\n historyRedoActionImplementation,\n historyUndoActionImplementation,\n} from '../editor/plugins/createWithUndoRedo'\nimport type {PickFromUnion} from '../type-utils'\nimport {addAnnotationActionImplementation} from './behavior.action.annotation.add'\nimport {removeAnnotationActionImplementation} from './behavior.action.annotation.remove'\nimport {blockSetBehaviorActionImplementation} from './behavior.action.block.set'\nimport {blockUnsetBehaviorActionImplementation} from './behavior.action.block.unset'\nimport {decoratorAddActionImplementation} from './behavior.action.decorator.add'\nimport {deleteActionImplementation} from './behavior.action.delete'\nimport {deleteBackwardActionImplementation} from './behavior.action.delete.backward'\nimport {deleteBlockActionImplementation} from './behavior.action.delete.block'\nimport {deleteForwardActionImplementation} from './behavior.action.delete.forward'\nimport {effectActionImplementation} from './behavior.action.effect'\nimport {insertInlineObjectActionImplementation} from './behavior.action.insert-inline-object'\nimport {insertSpanActionImplementation} from './behavior.action.insert-span'\nimport {insertBlockActionImplementation} from './behavior.action.insert.block'\nimport {insertTextActionImplementation} from './behavior.action.insert.text'\nimport {moveBackwardActionImplementation} from './behavior.action.move.backward'\nimport {moveBlockActionImplementation} from './behavior.action.move.block'\nimport {moveForwardActionImplementation} from './behavior.action.move.forward'\nimport {selectActionImplementation} from './behavior.action.select'\n\nexport type BehaviorActionImplementationContext = Pick<\n EditorContext,\n 'keyGenerator' | 'schema'\n>\n\nexport type BehaviorActionImplementation<\n TBehaviorActionType extends InternalBehaviorAction['type'],\n TReturnType = void,\n> = ({\n context,\n action,\n}: {\n context: BehaviorActionImplementationContext\n action: PickFromUnion<InternalBehaviorAction, 'type', TBehaviorActionType>\n}) => TReturnType\n\ntype BehaviorActionImplementations = {\n [TBehaviorActionType in InternalBehaviorAction['type']]: BehaviorActionImplementation<TBehaviorActionType>\n}\n\nconst behaviorActionImplementations: BehaviorActionImplementations = {\n 'annotation.add': addAnnotationActionImplementation,\n 'annotation.remove': removeAnnotationActionImplementation,\n 'block.set': blockSetBehaviorActionImplementation,\n 'block.unset': blockUnsetBehaviorActionImplementation,\n 'decorator.add': decoratorAddActionImplementation,\n 'decorator.remove': removeDecoratorActionImplementation,\n 'delete': deleteActionImplementation,\n 'delete.backward': deleteBackwardActionImplementation,\n 'delete.forward': deleteForwardActionImplementation,\n 'delete.block': deleteBlockActionImplementation,\n 'history.redo': historyRedoActionImplementation,\n 'history.undo': historyUndoActionImplementation,\n 'insert.block': insertBlockActionImplementation,\n 'insert.inline object': insertInlineObjectActionImplementation,\n 'insert.span': insertSpanActionImplementation,\n 'insert.text': insertTextActionImplementation,\n 'effect': effectActionImplementation,\n 'move.backward': moveBackwardActionImplementation,\n 'move.block': moveBlockActionImplementation,\n 'move.forward': moveForwardActionImplementation,\n 'select': selectActionImplementation,\n}\n\nexport function performAction({\n context,\n action,\n}: {\n context: BehaviorActionImplementationContext\n action: InternalBehaviorAction\n}) {\n switch (action.type) {\n case 'annotation.add': {\n behaviorActionImplementations['annotation.add']({\n context,\n action,\n })\n break\n }\n case 'annotation.remove': {\n behaviorActionImplementations['annotation.remove']({\n context,\n action,\n })\n break\n }\n case 'block.set': {\n behaviorActionImplementations['block.set']({\n context,\n action,\n })\n break\n }\n case 'block.unset': {\n behaviorActionImplementations['block.unset']({\n context,\n action,\n })\n break\n }\n case 'decorator.add': {\n behaviorActionImplementations['decorator.add']({\n context,\n action,\n })\n break\n }\n case 'decorator.remove': {\n behaviorActionImplementations['decorator.remove']({\n context,\n action,\n })\n break\n }\n case 'delete': {\n behaviorActionImplementations.delete({\n context,\n action,\n })\n break\n }\n case 'delete.backward': {\n behaviorActionImplementations['delete.backward']({\n context,\n action,\n })\n break\n }\n case 'delete.block': {\n behaviorActionImplementations['delete.block']({\n context,\n action,\n })\n break\n }\n case 'delete.forward': {\n behaviorActionImplementations['delete.forward']({\n context,\n action,\n })\n break\n }\n case 'effect': {\n behaviorActionImplementations.effect({\n context,\n action,\n })\n break\n }\n case 'history.redo': {\n behaviorActionImplementations['history.redo']({\n context,\n action,\n })\n break\n }\n case 'history.undo': {\n behaviorActionImplementations['history.undo']({\n context,\n action,\n })\n break\n }\n case 'insert.block': {\n behaviorActionImplementations['insert.block']({\n context,\n action,\n })\n break\n }\n case 'insert.inline object': {\n behaviorActionImplementations['insert.inline object']({\n context,\n action,\n })\n break\n }\n case 'insert.span': {\n behaviorActionImplementations['insert.span']({\n context,\n action,\n })\n break\n }\n case 'insert.text': {\n behaviorActionImplementations['insert.text']({\n context,\n action,\n })\n break\n }\n case 'move.backward': {\n behaviorActionImplementations['move.backward']({\n context,\n action,\n })\n break\n }\n case 'move.block': {\n behaviorActionImplementations['move.block']({\n context,\n action,\n })\n break\n }\n case 'move.forward': {\n behaviorActionImplementations['move.forward']({\n context,\n action,\n })\n break\n }\n default: {\n behaviorActionImplementations.select({\n context,\n action,\n })\n break\n }\n }\n}\n","import {Editor} from 'slate'\nimport {insertTextActionImplementation} from '../../behavior-actions/behavior.action.insert.text'\nimport {performAction} from '../../behavior-actions/behavior.actions'\nimport {slateRangeToSelection} from '../../internal-utils/slate-utils'\nimport type {EditorActor} from '../editor-machine'\nimport {isApplyingBehaviorActions} from '../with-applying-behavior-actions'\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 {deleteBackward, deleteForward, insertBreak, insertText, select} =\n editor\n\n editor.deleteBackward = (unit) => {\n if (isApplyingBehaviorActions(editor)) {\n deleteBackward(unit)\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 (isApplyingBehaviorActions(editor)) {\n deleteForward(unit)\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 (isApplyingBehaviorActions(editor)) {\n 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 (isApplyingBehaviorActions(editor)) {\n throw new Error('Unexpected call to .insertData(...)')\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 (isApplyingBehaviorActions(editor)) {\n insertTextActionImplementation({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n action: {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, options) => {\n if (isApplyingBehaviorActions(editor)) {\n insertText(text, options)\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 (isApplyingBehaviorActions(editor)) {\n performAction({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n action: {\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 (isApplyingBehaviorActions(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.warn('Unexpected call to .setFragmentData(...)')\n return\n }\n\n editor.undo = () => {\n if (isApplyingBehaviorActions(editor)) {\n performAction({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n action: {\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 {\n KeyedSegment,\n Path,\n PathSegment,\n PortableTextBlock,\n PortableTextChild,\n} from '@sanity/types'\nimport {\n Element,\n Text,\n Transforms,\n type Descendant,\n type Node,\n type Path as SlatePath,\n} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {debugWithName} from './debug'\nimport {toSlateValue} from './values'\nimport {KEY_TO_SLATE_ELEMENT} from './weakMaps'\n\nconst debug = debugWithName('applyPatches')\nconst debugVerbose = debug.enabled && true\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 // Save some CPU cycles by not stringifying unless enabled\n if (debugVerbose) {\n debug(\n '\\n\\nNEW PATCH =============================================================',\n )\n debug(JSON.stringify(patch, null, 2))\n }\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 default:\n debug('Unhandled patch', patch.type)\n }\n } catch (err) {\n console.error(err)\n }\n\n return changed\n }\n}\n\n/**\n * Apply a remote diff match patch to the current PTE instance.\n * Note meant for external consumption, only exported for testing purposes.\n *\n * @param editor - Portable text slate editor instance\n * @param patch - The PTE diff match patch operation to apply\n * @returns true if the patch was applied, false otherwise\n * @internal\n */\nexport function diffMatchPatch(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection' | 'onChange'\n >,\n patch: DiffMatchPatch,\n): boolean {\n const {block, child, childPath} = findBlockAndChildFromPath(\n editor,\n patch.path,\n )\n if (!block) {\n debug('Block not found')\n return false\n }\n if (!child || !childPath) {\n debug('Child not found')\n return false\n }\n const isSpanTextDiffMatchPatch =\n block &&\n editor.isTextBlock(block) &&\n patch.path.length === 4 &&\n patch.path[1] === 'children' &&\n patch.path[3] === 'text'\n\n if (!isSpanTextDiffMatchPatch || !Text.isText(child)) {\n return false\n }\n\n const patches = parsePatch(patch.value)\n const [newValue] = diffMatchPatchApplyPatches(patches, child.text, {\n allowExceedingIndices: true,\n })\n const diff = cleanupEfficiency(makeDiff(child.text, newValue), 5)\n\n debugState(editor, 'before')\n let offset = 0\n for (const [op, text] of diff) {\n if (op === DIFF_INSERT) {\n editor.apply({type: 'insert_text', path: childPath, offset, text})\n offset += text.length\n } else if (op === DIFF_DELETE) {\n editor.apply({type: 'remove_text', path: childPath, offset: offset, text})\n } else if (op === DIFF_EQUAL) {\n offset += text.length\n }\n }\n debugState(editor, 'after')\n\n return true\n}\n\nfunction insertPatch(\n editor: PortableTextSlateEditor,\n patch: InsertPatch,\n schema: EditorSchema,\n) {\n const {\n block: targetBlock,\n child: targetChild,\n blockPath: targetBlockPath,\n childPath: targetChildPath,\n } = findBlockAndChildFromPath(editor, patch.path)\n if (!targetBlock || !targetBlockPath) {\n debug('Block not found')\n return false\n }\n if (patch.path.length > 1 && patch.path[1] !== 'children') {\n debug('Ignoring patch targeting void value')\n return false\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 = targetBlockPath[0]\n const normalizedIdx =\n position === 'after' ? targetBlockIndex + 1 : targetBlockIndex\n debug(`Inserting blocks at path [${normalizedIdx}]`)\n debugState(editor, 'before')\n Transforms.insertNodes(editor, blocksToInsert, {at: [normalizedIdx]})\n debugState(editor, 'after')\n return true\n }\n // Insert children\n const {items, position} = patch\n if (!targetChild || !targetChildPath) {\n debug('Child not found')\n return false\n }\n const childrenToInsert =\n targetBlock &&\n toSlateValue(\n [{...targetBlock, children: items as PortableTextChild[]}],\n {schemaTypes: schema},\n KEY_TO_SLATE_ELEMENT.get(editor),\n )\n const targetChildIndex = targetChildPath[1]\n const normalizedIdx =\n position === 'after' ? targetChildIndex + 1 : targetChildIndex\n const childInsertPath = [targetChildPath[0], normalizedIdx]\n debug(`Inserting children at path ${childInsertPath}`)\n debugState(editor, 'before')\n if (childrenToInsert && Element.isElement(childrenToInsert[0])) {\n Transforms.insertNodes(editor, childrenToInsert[0].children, {\n at: childInsertPath,\n })\n }\n debugState(editor, 'after')\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 const {block, blockPath, child, childPath} = findBlockAndChildFromPath(\n editor,\n patch.path,\n )\n\n if (!block) {\n debug('Block not found')\n return false\n }\n const isTextBlock = editor.isTextBlock(block)\n\n // Ignore patches targeting nested void data, like 'markDefs'\n if (isTextBlock && patch.path.length > 1 && patch.path[1] !== 'children') {\n debug('Ignoring setting void value')\n return false\n }\n\n debugState(editor, 'before')\n\n // If this is targeting a text block child\n if (isTextBlock && child && childPath) {\n if (Text.isText(value) && Text.isText(child)) {\n const newText = child.text\n const oldText = value.text\n if (oldText !== newText) {\n debug('Setting text property')\n editor.apply({\n type: 'remove_text',\n path: childPath,\n offset: 0,\n text: newText,\n })\n editor.apply({\n type: 'insert_text',\n path: childPath,\n offset: 0,\n text: value.text,\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 debug('Setting non-text property')\n editor.apply({\n type: 'set_node',\n path: childPath,\n properties: {},\n newProperties: value as Partial<Node>,\n })\n }\n return true\n } else if (Element.isElement(block) && patch.path.length === 1 && blockPath) {\n debug('Setting block property')\n const {children, ...nextRest} = value as unknown as PortableTextBlock\n const {children: prevChildren, ...prevRest} = block || {children: undefined}\n // Set any block properties\n editor.apply({\n type: 'set_node',\n path: blockPath,\n properties: {...prevRest},\n newProperties: nextRest,\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 debug('Setting children')\n block.children.forEach((c, cIndex) => {\n editor.apply({\n type: 'remove_node',\n path: blockPath.concat(block.children.length - 1 - cIndex),\n node: c,\n })\n })\n if (Array.isArray(children)) {\n children.forEach((c, cIndex) => {\n editor.apply({\n type: 'insert_node',\n path: blockPath.concat(cIndex),\n node: c,\n })\n })\n }\n } else if (block && 'value' in block) {\n if (patch.path.length > 1 && patch.path[1] !== 'children') {\n const newVal = applyAll(block.value, [\n {\n ...patch,\n path: patch.path.slice(1),\n },\n ])\n Transforms.setNodes(editor, {...block, value: newVal}, {at: blockPath})\n } else {\n return false\n }\n }\n debugState(editor, 'after')\n return true\n}\n\nfunction unsetPatch(editor: PortableTextSlateEditor, patch: UnsetPatch) {\n // Value\n if (patch.path.length === 0) {\n debug('Removing everything')\n debugState(editor, 'before')\n const previousSelection = editor.selection\n Transforms.deselect(editor)\n editor.children.forEach((_child, i) => {\n Transforms.removeNodes(editor, {at: [i]})\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 debugState(editor, 'after')\n return true\n }\n const {block, blockPath, child, childPath} = findBlockAndChildFromPath(\n editor,\n patch.path,\n )\n\n // Single blocks\n if (patch.path.length === 1) {\n if (!block || !blockPath) {\n debug('Block not found')\n return false\n }\n const blockIndex = blockPath[0]\n debug(`Removing block at path [${blockIndex}]`)\n debugState(editor, 'before')\n\n Transforms.removeNodes(editor, {at: [blockIndex]})\n debugState(editor, 'after')\n return true\n }\n\n // Unset on text block children\n if (\n editor.isTextBlock(block) &&\n patch.path[1] === 'children' &&\n patch.path.length === 3\n ) {\n if (!child || !childPath) {\n debug('Child not found')\n return false\n }\n debug(`Unsetting child at path ${JSON.stringify(childPath)}`)\n debugState(editor, 'before')\n if (debugVerbose) {\n debug(`Removing child at path ${JSON.stringify(childPath)}`)\n }\n Transforms.removeNodes(editor, {at: childPath})\n debugState(editor, 'after')\n return true\n }\n return false\n}\n\nfunction isKeyedSegment(segment: PathSegment): segment is KeyedSegment {\n return typeof segment === 'object' && '_key' in segment\n}\n\nfunction debugState(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection'\n >,\n stateName: string,\n) {\n if (!debugVerbose) {\n return\n }\n\n debug(`Children ${stateName}:`, JSON.stringify(editor.children, null, 2))\n debug(`Selection ${stateName}: `, JSON.stringify(editor.selection, null, 2))\n}\n\nfunction findBlockFromPath(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection' | 'onChange'\n >,\n path: Path,\n): {block?: Descendant; path?: SlatePath} {\n let blockIndex = -1\n const block = editor.children.find((node: Descendant, index: number) => {\n const isMatch = isKeyedSegment(path[0])\n ? node._key === path[0]._key\n : index === path[0]\n if (isMatch) {\n blockIndex = index\n }\n return isMatch\n })\n if (!block) {\n return {}\n }\n return {block, path: [blockIndex] as SlatePath}\n}\n\nfunction findBlockAndChildFromPath(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection' | 'onChange'\n >,\n path: Path,\n): {\n child?: Descendant\n childPath?: SlatePath\n block?: Descendant\n blockPath?: SlatePath\n} {\n const {block, path: blockPath} = findBlockFromPath(editor, path)\n if (!(Element.isElement(block) && path[1] === 'children')) {\n return {block, blockPath, child: undefined, childPath: undefined}\n }\n let childIndex = -1\n const child = block.children.find((node, index: number) => {\n const isMatch = isKeyedSegment(path[2])\n ? node._key === path[2]._key\n : index === path[2]\n if (isMatch) {\n childIndex = index\n }\n return isMatch\n })\n if (!child) {\n return {block, blockPath, child: undefined, childPath: undefined}\n }\n return {\n block,\n child,\n blockPath,\n childPath: blockPath?.concat(childIndex) as SlatePath,\n }\n}\n","import {insert, setIfMissing, unset, type Patch} from '@portabletext/patches'\nimport {\n Editor,\n type Descendant,\n type InsertNodeOperation,\n type InsertTextOperation,\n type MergeNodeOperation,\n type MoveNodeOperation,\n type Operation,\n type RemoveNodeOperation,\n type RemoveTextOperation,\n type SetNodeOperation,\n type SplitNodeOperation,\n} from 'slate'\nimport {createApplyPatch} from '../../internal-utils/applyPatch'\nimport {debugWithName} from '../../internal-utils/debug'\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 {getCurrentActionId} from '../with-applying-behavior-actions'\nimport {withoutSaving} from './createWithUndoRedo'\n\nconst debug = debugWithName('plugin:withPatches')\nconst debugVerbose = false\n\nexport interface PatchFunctions {\n insertNodePatch: (\n editor: PortableTextSlateEditor,\n operation: InsertNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n insertTextPatch: (\n editor: PortableTextSlateEditor,\n operation: InsertTextOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n mergeNodePatch: (\n editor: PortableTextSlateEditor,\n operation: MergeNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n moveNodePatch: (\n editor: PortableTextSlateEditor,\n operation: MoveNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n removeNodePatch: (\n editor: PortableTextSlateEditor,\n operation: RemoveNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n removeTextPatch: (\n editor: PortableTextSlateEditor,\n operation: RemoveTextOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n setNodePatch: (\n editor: PortableTextSlateEditor,\n operation: SetNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n splitNodePatch: (\n editor: PortableTextSlateEditor,\n operation: SplitNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n}\n\ninterface Options {\n editorActor: EditorActor\n patchFunctions: PatchFunctions\n subscriptions: Array<() => () => void>\n}\n\nexport function createWithPatches({\n editorActor,\n patchFunctions,\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 withRemoteChanges(editor, () => {\n Editor.withoutNormalizing(editor, () => {\n withoutPatching(editor, () => {\n withoutSaving(editor, () => {\n patches.forEach((patch) => {\n if (debug.enabled)\n debug(`Handling remote patch ${JSON.stringify(patch)}`)\n changed = applyPatch(editor, patch)\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 ...patchFunctions.insertTextPatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'remove_text':\n patches = [\n ...patches,\n ...patchFunctions.removeTextPatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'remove_node':\n patches = [\n ...patches,\n ...patchFunctions.removeNodePatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'split_node':\n patches = [\n ...patches,\n ...patchFunctions.splitNodePatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'insert_node':\n patches = [\n ...patches,\n ...patchFunctions.insertNodePatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'set_node':\n patches = [\n ...patches,\n ...patchFunctions.setNodePatch(editor, operation, previousChildren),\n ]\n break\n case 'merge_node':\n patches = [\n ...patches,\n ...patchFunctions.mergeNodePatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'move_node':\n patches = [\n ...patches,\n ...patchFunctions.moveNodePatch(\n editor,\n operation,\n previousChildren,\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 editorActor.send({\n type: 'notify.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 actionId: getCurrentActionId(editor),\n value: fromSlateValue(\n editor.children,\n editorActor.getSnapshot().context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n ),\n })\n }\n }\n return editor\n }\n return editor\n }\n}\n","import {Editor, Path} 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 {SlateTextBlock, VoidElement} from '../../types/slate'\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 node = op.node as SlateTextBlock | VoidElement\n if (op.path[0] === 0 && Editor.isVoid(editor, node)) {\n // Check next path, if it exists, do nothing\n const nextPath = Path.next(op.path)\n // Is removing the first block which is a void (not a text block), add a new empty text block in it, if there is no other element in the next path\n if (!editor.children[nextPath[0]]) {\n debug('Adding placeholder block')\n Editor.insertNode(\n editor,\n editor.pteCreateTextBlock({decorators: []}),\n )\n }\n }\n }\n apply(op)\n }\n return editor\n }\n}\n","import {Editor, Path, Text as SlateText, Transforms} from 'slate'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\n\nconst debug = debugWithName('plugin:withPortableTextBlockStyle')\n\nexport function createWithPortableTextBlockStyle(\n editorActor: EditorActor,\n): (editor: PortableTextSlateEditor) => PortableTextSlateEditor {\n const defaultStyle = editorActor.getSnapshot().context.schema.styles[0].name\n return function withPortableTextBlockStyle(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n // Extend Slate's default normalization to reset split node to normal style\n // if there is no text at the right end of the split.\n const {normalizeNode} = editor\n\n editor.normalizeNode = (nodeEntry) => {\n const [, path] = nodeEntry\n\n for (const op of editor.operations) {\n if (\n op.type === 'split_node' &&\n op.path.length === 1 &&\n editor.isTextBlock(op.properties) &&\n op.properties.style !== defaultStyle &&\n op.path[0] === path[0] &&\n !Path.equals(path, op.path)\n ) {\n const [child] = Editor.node(editor, [op.path[0] + 1, 0])\n if (SlateText.isText(child) && child.text === '') {\n debug(`Normalizing split node to ${defaultStyle} style`, op)\n editorActor.send({type: 'normalizing'})\n Transforms.setNodes(\n editor,\n {style: defaultStyle},\n {at: [op.path[0] + 1], voids: false},\n )\n editorActor.send({type: 'done normalizing'})\n return\n }\n }\n }\n\n normalizeNode(nodeEntry)\n }\n\n return editor\n }\n}\n","import type {BaseRange} from 'slate'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {slateRangeToSelection} from '../../internal-utils/slate-utils'\nimport {SLATE_TO_PORTABLE_TEXT_RANGE} from '../../internal-utils/weakMaps'\nimport type {EditorSelection, PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\n\nconst debug = debugWithName('plugin:withPortableTextSelections')\nconst debugVerbose = debug.enabled && false\n\n// This plugin will make sure that we emit a PT selection whenever the editor has changed.\nexport function createWithPortableTextSelections(\n editorActor: EditorActor,\n): (editor: PortableTextSlateEditor) => PortableTextSlateEditor {\n let prevSelection: BaseRange | null = null\n return function withPortableTextSelections(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n const emitPortableTextSelection = () => {\n if (prevSelection !== editor.selection) {\n let ptRange: EditorSelection | null = null\n if (editor.selection) {\n const existing = SLATE_TO_PORTABLE_TEXT_RANGE.get(editor.selection)\n if (existing) {\n ptRange = existing\n } else {\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 }\n if (debugVerbose) {\n debug(\n `Emitting selection ${JSON.stringify(ptRange || null)} (${JSON.stringify(\n editor.selection,\n )})`,\n )\n }\n if (ptRange) {\n editorActor.send({type: 'notify.selection', selection: ptRange})\n } else {\n editorActor.send({type: 'notify.selection', selection: null})\n }\n }\n prevSelection = editor.selection\n }\n\n const {onChange} = editor\n editor.onChange = () => {\n onChange()\n if (!editorActor.getSnapshot().matches({setup: 'setting up'})) {\n emitPortableTextSelection()\n }\n }\n return editor\n }\n}\n","import type {\n PortableTextListBlock,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {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 return isTextBlock(editorActor.getSnapshot().context, value)\n }\n editor.isTextSpan = (value: unknown): value is PortableTextSpan => {\n return isSpan(editorActor.getSnapshot().context, value)\n }\n editor.isListBlock = (value: unknown): value is PortableTextListBlock => {\n return isListBlock(editorActor.getSnapshot().context, value)\n }\n editor.isVoid = (element: Element): boolean => {\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 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 type {BaseOperation, Editor, Node, NodeEntry} from 'slate'\nimport {createOperationToPatches} from '../../internal-utils/operationToPatches'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-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 {createWithPortableTextBlockStyle} from './createWithPortableTextBlockStyle'\nimport {createWithPortableTextMarkModel} from './createWithPortableTextMarkModel'\nimport {createWithPortableTextSelections} from './createWithPortableTextSelections'\nimport {createWithSchemaTypes} from './createWithSchemaTypes'\nimport {createWithUndoRedo} from './createWithUndoRedo'\nimport {createWithUtils} from './createWithUtils'\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 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} = options\n const operationToPatches = createOperationToPatches(editorActor)\n const withObjectKeys = createWithObjectKeys(editorActor)\n const withSchemaTypes = createWithSchemaTypes({\n editorActor,\n })\n const withPatches = createWithPatches({\n editorActor,\n patchFunctions: operationToPatches,\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 const withPortableTextBlockStyle =\n createWithPortableTextBlockStyle(editorActor)\n\n const withPlaceholderBlock = createWithPlaceholderBlock(editorActor)\n\n const withUtils = createWithUtils({\n editorActor,\n })\n const withPortableTextSelections =\n createWithPortableTextSelections(editorActor)\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 withPortableTextBlockStyle(\n withPlaceholderBlock(\n withUtils(\n withMaxBlocks(\n withUndoRedo(withPatches(withPortableTextSelections(e))),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n )\n}\n","import {createEditor, type Descendant} from 'slate'\nimport {withReact} from 'slate-react'\nimport {debugWithName} from '../internal-utils/debug'\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'\n\nconst debug = debugWithName('component:PortableTextEditor:SlateContainer')\n\ntype SlateEditorConfig = {\n editorActor: EditorActor\n}\n\nexport type SlateEditor = {\n instance: PortableTextSlateEditor\n initialValue: Array<Descendant>\n}\n\nconst slateEditors = new WeakMap<EditorActor, SlateEditor>()\n\nexport function createSlateEditor(config: SlateEditorConfig): SlateEditor {\n const existingSlateEditor = slateEditors.get(config.editorActor)\n\n if (existingSlateEditor) {\n debug('Reusing existing Slate editor instance', config.editorActor.id)\n return existingSlateEditor\n }\n\n debug('Creating new Slate editor instance', config.editorActor.id)\n\n const unsubscriptions: Array<() => void> = []\n const subscriptions: Array<() => () => void> = []\n\n const instance = withPlugins(withReact(createEditor()), {\n editorActor: config.editorActor,\n subscriptions,\n })\n\n KEY_TO_VALUE_ELEMENT.set(instance, {})\n KEY_TO_SLATE_ELEMENT.set(instance, {})\n\n for (const subscription of subscriptions) {\n unsubscriptions.push(subscription())\n }\n\n const initialValue = [instance.pteCreateTextBlock({decorators: []})]\n\n const slateEditor: SlateEditor = {\n instance,\n initialValue,\n }\n\n slateEditors.set(config.editorActor, slateEditor)\n\n return slateEditor\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 {defaultKeyGenerator} from './key-generator'\nimport {createLegacySchema} from './legacy-schema'\n\n/**\n * @public\n */\nexport type BaseDefinition = {\n name: string\n title?: string\n}\n\nexport type FieldDefinition = {\n name: string\n type: 'string' | 'number' | 'boolean' | 'array' | 'object'\n}\n\n/**\n * @public\n */\nexport type SchemaDefinition<\n TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = {\n decorators?: ReadonlyArray<TBaseDefinition>\n blockObjects?: ReadonlyArray<\n TBaseDefinition & {fields?: ReadonlyArray<FieldDefinition>}\n >\n inlineObjects?: ReadonlyArray<\n TBaseDefinition & {fields?: ReadonlyArray<FieldDefinition>}\n >\n annotations?: ReadonlyArray<\n TBaseDefinition & {fields?: ReadonlyArray<FieldDefinition>}\n >\n lists?: ReadonlyArray<TBaseDefinition>\n styles?: ReadonlyArray<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\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<\n BaseDefinition & {\n fields: ReadonlyArray<{name: string; type: string}>\n }\n >\n block: {\n name: string\n }\n blockObjects: ReadonlyArray<\n BaseDefinition & {\n fields: ReadonlyArray<{name: string; type: string}>\n }\n >\n decorators: ReadonlyArray<\n BaseDefinition & {\n /**\n * @deprecated\n * Use `name` instead\n */\n value: string\n }\n >\n inlineObjects: ReadonlyArray<\n BaseDefinition & {\n fields: ReadonlyArray<{name: string; type: string}>\n }\n >\n span: {\n name: string\n }\n styles: ReadonlyArray<\n BaseDefinition & {\n /**\n * @deprecated\n * Use `name` instead\n */\n value: string\n }\n >\n lists: ReadonlyArray<\n BaseDefinition & {\n /**\n * @deprecated\n * Use `name` instead\n */\n value: string\n }\n >\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 })),\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 })),\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 })),\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 })) ?? [],\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 })) ?? [],\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 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 {PortableTextBlock} from '@sanity/types'\nimport type {Descendant} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\n\nexport function slateChildrenToBlocks(\n schema: EditorSchema,\n value: Array<Descendant>,\n): Array<PortableTextBlock> {\n const blocks: Array<PortableTextBlock> = new Array(value.length)\n\n for (let blockIndex = 0; blockIndex < value.length; blockIndex++) {\n const descendant = value[blockIndex]\n\n if (descendant._type !== schema.block.name) {\n blocks[blockIndex] = {\n _key: descendant._key,\n _type: descendant._type,\n ...('value' in descendant && typeof descendant.value === 'object'\n ? descendant.value\n : {}),\n }\n continue\n }\n\n const children = 'children' in descendant ? descendant.children : []\n const processedChildren = new Array(children.length)\n\n for (let childIndex = 0; childIndex < children.length; childIndex++) {\n const child = children[childIndex]\n processedChildren[childIndex] =\n child._type === schema.span.name\n ? child\n : {\n _key: child._key,\n _type: child._type,\n ...('value' in child && typeof child.value === 'object'\n ? child.value\n : {}),\n }\n }\n\n blocks[blockIndex] = {\n ...descendant,\n children: processedChildren,\n }\n }\n\n return blocks\n}\n","import {Editor} from 'slate'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\n\nexport function getActiveDecorators({\n schema,\n slateEditorInstance,\n}: {\n schema: EditorSchema\n slateEditorInstance: PortableTextSlateEditor\n}) {\n const decorators = schema.decorators.map((decorator) => decorator.name)\n\n const marks =\n {\n ...(Editor.marks(slateEditorInstance) ?? {}),\n }.marks ?? []\n\n return marks.filter((mark) => decorators.includes(mark))\n}\n","import {useSelector} from '@xstate/react'\nimport {slateChildrenToBlocks} from '../internal-utils/slate-children-to-blocks'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {Editor, InternalEditor} from './create-editor'\nimport type {EditorActor} from './editor-machine'\nimport type {EditorSnapshot} from './editor-snapshot'\nimport {getActiveDecorators} from './get-active-decorators'\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 context: {\n converters: [...editorActorSnapshot.context.converters],\n activeDecorators: getActiveDecorators({\n schema: editorActorSnapshot.context.schema,\n slateEditorInstance,\n }),\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: slateChildrenToBlocks(\n editorActorSnapshot.context.schema,\n slateEditorInstance.children,\n ),\n },\n beta: {\n hasTag: (tag) => editorActorSnapshot.hasTag(tag),\n internalDrag: editorActorSnapshot.context.internalDrag,\n },\n }\n}\n","import {\n isPortableTextSpan,\n type Path,\n type PortableTextBlock,\n type PortableTextChild,\n type PortableTextObject,\n type 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 {addAnnotationActionImplementation} from '../../behavior-actions/behavior.action.annotation.add'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {toSlateRange} from '../../internal-utils/ranges'\nimport {\n isListItemActive,\n isStyleActive,\n slateRangeToSelection,\n} from '../../internal-utils/slate-utils'\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 type {\n EditableAPI,\n EditableAPIDeleteOptions,\n EditorSelection,\n PortableTextSlateEditor,\n} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {isDecoratorActive} from './createWithPortableTextMarkModel'\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 // Try/catch this, as Slate may error because the selection is currently wrong\n // TODO: catch only relevant error from Slate\n try {\n return isDecoratorActive({editor, decorator: mark})\n } catch (err) {\n console.warn(err)\n return false\n }\n },\n marks: (): string[] => {\n return (\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n )\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(selection, editor)\n if (slateSelection) {\n Transforms.select(editor, slateSelection)\n } else {\n Transforms.deselect(editor)\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 {focus: {path, offset: 0}, anchor: {path, offset: 0}},\n editor,\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 return isAnnotationActive({editor, annotation: {name: annotationType}})\n },\n addAnnotation: (type, value) => {\n let paths: ReturnType<EditableAPI['addAnnotation']> = undefined\n\n Editor.withoutNormalizing(editor, () => {\n paths = addAnnotationActionImplementation({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: types,\n },\n action: {\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(selection, editor)\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 editor.children = [editor.pteCreateTextBlock({decorators: []})]\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(selectionA, editor)\n const rangeB = toSlateRange(selectionB, editor)\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\nfunction isAnnotationActive({\n editor,\n annotation,\n}: {\n editor: PortableTextSlateEditor\n annotation: {\n name: string\n }\n}) {\n if (!editor.selection || editor.selection.focus.path.length < 2) {\n return false\n }\n\n try {\n const spans = [\n ...Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => Text.isText(node),\n }),\n ]\n\n if (spans.length === 0) {\n return false\n }\n\n if (\n spans.some(\n ([span]) =>\n !isPortableTextSpan(span) || !span.marks || span.marks?.length === 0,\n )\n )\n return false\n\n const selectionMarkDefs = spans.reduce((accMarkDefs, [, path]) => {\n const [block] = Editor.node(editor, path, {depth: 1})\n if (editor.isTextBlock(block) && block.markDefs) {\n return [...accMarkDefs, ...block.markDefs]\n }\n return accMarkDefs\n }, [] as PortableTextObject[])\n\n return spans.every(([span]) => {\n if (!isPortableTextSpan(span)) return false\n\n const spanMarkDefs = span.marks?.map(\n (markKey) =>\n selectionMarkDefs.find((def) => def?._key === markKey)?._type,\n )\n\n return spanMarkDefs?.includes(annotation.name)\n })\n } catch {\n return false\n }\n}\n","import type {\n ArrayDefinition,\n ArraySchemaType,\n PortableTextBlock,\n} from '@sanity/types'\nimport type {ActorRef, EventObject, Snapshot} from 'xstate'\nimport type {Behavior} from '../behaviors/behavior.types.behavior'\nimport type {ExternalBehaviorEvent} from '../behaviors/behavior.types.event'\nimport {createCoreConverters} from '../converters/converters.core'\nimport {compileType} from '../internal-utils/schema'\nimport type {EditableAPI} from '../types/editor'\nimport {createSlateEditor, type SlateEditor} from './create-slate-editor'\nimport type {\n EditorActor,\n EditorEmittedEvent,\n ExternalEditorEvent,\n} from './editor-machine'\nimport {\n compileSchemaDefinitionToLegacySchema,\n legacySchemaToEditorSchema,\n type SchemaDefinition,\n} from './editor-schema'\nimport {getEditorSnapshot} from './editor-selector'\nimport type {EditorSnapshot} from './editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {createLegacySchema} from './legacy-schema'\nimport {createEditableAPI} from './plugins/createWithEditableAPI'\n\n/**\n * @public\n */\nexport type EditorConfig = {\n /**\n * @beta\n */\n keyGenerator?: () => string\n /**\n * @deprecated Will be removed in the next major version\n */\n maxBlocks?: number\n readOnly?: boolean\n initialValue?: Array<PortableTextBlock>\n} & (\n | {\n schemaDefinition: SchemaDefinition\n schema?: undefined\n }\n | {\n schemaDefinition?: undefined\n schema: ArraySchemaType<PortableTextBlock> | ArrayDefinition\n }\n)\n\n/**\n * @public\n */\nexport type EditorEvent = ExternalEditorEvent | ExternalBehaviorEvent\n\n/**\n * @public\n */\nexport type Editor = {\n getSnapshot: () => EditorSnapshot\n /**\n * @beta\n */\n registerBehavior: (config: {behavior: Behavior}) => () => void\n send: (event: EditorEvent) => void\n on: ActorRef<Snapshot<unknown>, EventObject, EditorEmittedEvent>['on']\n}\n\nexport type InternalEditor = Editor & {\n _internal: {\n editable: EditableAPI\n editorActor: EditorActor\n slateEditor: SlateEditor\n }\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\nexport function 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\nexport function createInternalEditor(editorActor: EditorActor): InternalEditor {\n const slateEditor = createSlateEditor({editorActor})\n const editable = createEditableAPI(slateEditor.instance, editorActor)\n\n return {\n getSnapshot: () =>\n getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor.instance,\n }),\n registerBehavior: (config) => {\n editorActor.send({\n type: 'add behavior',\n behavior: config.behavior,\n })\n\n return () => {\n editorActor.send({\n type: 'remove behavior',\n behavior: config.behavior,\n })\n }\n },\n send: (event) => {\n switch (event.type) {\n case 'add behavior':\n case 'remove behavior':\n case 'update key generator':\n case 'update readOnly':\n case 'patches':\n case 'update value':\n case 'update schema':\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 = editorActor.on(event, (event) => {\n switch (event.type) {\n case 'blurred':\n case 'done loading':\n case 'editable':\n case 'error':\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 }\n}\n","import {createContext} from 'react'\nimport type {EditorActor} from './editor-machine'\n\nexport const EditorActorContext = createContext<EditorActor>({} as EditorActor)\n","/**\n * Gets the global scope instance in a given environment.\n *\n * The strategy is to return the most modern, and if not, the most common:\n * - The `globalThis` variable is the modern approach to accessing the global scope\n * - The `window` variable is the global scope in a web browser\n * - The `self` variable is the global scope in workers and others\n * - The `global` variable is the global scope in Node.js\n */\nfunction getGlobalScope() {\n if (typeof globalThis !== 'undefined') return globalThis\n if (typeof window !== 'undefined') return window\n if (typeof self !== 'undefined') return self\n if (typeof global !== 'undefined') return global\n\n throw new Error('@portabletext/editor: could not locate global scope')\n}\n\nexport const globalScope = getGlobalScope() as any\n","import {createContext, type Context} from 'react'\nimport {globalScope} from './global-scope'\n\n/**\n * As `@portabletext/editor` is declared as a dependency, and may be\n * duplicated, sometimes across major versions it's critical that vital\n * React Contexts are shared even when there is a duplicate.\n *\n * We have to support a Sanity Plugin being able to call hooks like\n * `useEditor`, and then read the context setup by `sanity`, which calls\n * `EditorProvider`, even if the provider and hook are different instances in\n * memory.\n *\n * For this reason it's vital that all changes to globally scoped providers\n * remain fully backwards compatible.\n */\nexport function createGloballyScopedContext<\n ContextType,\n const T extends ContextType = ContextType,\n>(\n /**\n * Enforce that all Symbol.for keys used for globally scoped contexts have a predictable prefix\n */\n key: `@portabletext/editor/context/${string}`,\n defaultValue: T,\n): Context<ContextType> {\n const symbol = Symbol.for(key)\n\n /**\n * Prevent errors about re-renders on React SSR on Next.js App Router\n */\n if (typeof document === 'undefined') {\n return createContext<ContextType>(defaultValue)\n }\n\n globalScope[symbol] = globalScope[symbol] ?? createContext<T>(defaultValue)\n\n return globalScope[symbol]\n}\n","import {createGloballyScopedContext} from '../internal-utils/globally-scoped-context'\nimport type {Editor} from './create-editor'\n\nexport const EditorContext = createGloballyScopedContext<Editor | null>(\n '@portabletext/editor/context/editor',\n null,\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","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\nconst 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 {isHotkey} from '../internal-utils/is-hotkey'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\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 = isHotkey('ArrowDown', event.originEvent)\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 = isHotkey('ArrowUp', 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 {isHotkey} from '../internal-utils/is-hotkey'\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 isHotkey('mod+b', 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 isHotkey('mod+i', 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 isHotkey('mod+u', 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 isHotkey(\"mod+'\", 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","import * as selectors from '../selectors'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const coreDndBehaviors = [\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 = snapshot.beta.internalDrag?.origin\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","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\nexport const coreInsertBreakBehaviors = {\n breakingAtTheEndOfTextBlock,\n breakingAtTheStartOfTextBlock,\n breakingEntireDocument,\n breakingEntireBlocks,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport {isListBlock} from '../internal-utils/parse-blocks'\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 MAX_LIST_LEVEL = 10\n\nconst clearListOnBackspace = 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 (atTheBeginningOfBLock && focusTextBlock.node.level === 1) {\n return {focusTextBlock}\n }\n\n return false\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\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\nconst indentListOnTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isTab = isHotkey('Tab', 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\nconst unindentListOnShiftTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isShiftTab = isHotkey('Shift+Tab', event.originEvent)\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\nexport const coreListBehaviors = {\n clearListOnBackspace,\n unindentListOnBackspace,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n}\n","import {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\n/**\n * @beta\n */\nexport const coreBehaviors = [\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.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock,\n coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock,\n coreInsertBreakBehaviors.breakingEntireDocument,\n coreInsertBreakBehaviors.breakingEntireBlocks,\n]\n","import {isActiveAnnotation} from '../selectors'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractAnnotationBehaviors = [\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 * 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.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 beta: {hasTag: () => false, internalDrag: undefined},\n context: {\n converters: [],\n schema: snapshot.context.schema,\n keyGenerator: snapshot.context.keyGenerator,\n activeDecorators: [],\n readOnly: false,\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: '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: '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: '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: '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: '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: 'end',\n }),\n ]\n : [\n raise({\n type: 'insert.block',\n block,\n placement: 'after',\n 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: '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 {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}) => {\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: 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 {getSelectionStartPoint} from '../utils'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {sliceBlocks} from '../utils/util.slice-blocks'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractSplitBehaviors = [\n defineBehavior({\n on: 'split',\n guard: ({snapshot}) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint(\n snapshot.context.selection,\n )\n const selectionEndPoint = getSelectionEndPoint(snapshot.context.selection)\n\n const focusTextBlock = selectors.getFocusTextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionEndPoint,\n },\n },\n })\n\n if (focusTextBlock) {\n const blockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const newTextBlockSelection = {\n anchor: selectionEndPoint,\n focus: blockEndPoint,\n }\n const newTextBlock = parseBlock({\n block: sliceBlocks({\n context: {\n ...snapshot.context,\n selection: newTextBlockSelection,\n },\n blocks: [focusTextBlock.node],\n }).at(0),\n context: snapshot.context,\n options: {refreshKeys: true},\n })\n\n if (!newTextBlock || !isTextBlock(snapshot.context, newTextBlock)) {\n return false\n }\n\n return {\n newTextBlock,\n newTextBlockSelection,\n selection: {\n anchor: selectionStartPoint,\n focus: blockEndPoint,\n },\n }\n }\n\n const focusBlockObject = selectors.getFocusBlockObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionEndPoint,\n },\n },\n })\n\n if (focusBlockObject) {\n const newTextBlock = parseBlock({\n block: {\n _type: snapshot.context.schema.block.name,\n children: [],\n },\n context: snapshot.context,\n options: {refreshKeys: true},\n })\n\n if (!newTextBlock) {\n return false\n }\n\n return {\n newTextBlock,\n newTextBlockSelection: {\n anchor: selectionEndPoint,\n focus: selectionEndPoint,\n },\n selection: snapshot.context.selection,\n }\n }\n\n return false\n },\n actions: [\n (_, {newTextBlock, selection}) => [\n raise({\n type: 'delete',\n at: selection,\n }),\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","export const keyIs = {\n lineBreak: (event) => event.key === 'Enter' && event.shiftKey,\n} satisfies Record<string, KeyboardEventPredicate>\n\ntype KeyboardEventPredicate = (\n event: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >,\n) => boolean\n","import {keyIs} from '../internal-utils/key-is'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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 */\nexport const raiseInsertSoftBreak = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => keyIs.lineBreak(event.originEvent),\n actions: [() => [raise({type: 'insert.soft break'})]],\n})\n","import type {ConverterEvent} from '../converters/converter.types'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport * as selectors from '../selectors'\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 {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 {raiseInsertSoftBreak} from './behavior.default.raise-soft-break'\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 defaultBehaviors = [\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 defineBehavior({\n on: 'drag.drop',\n guard: ({snapshot, event}) => {\n const dragOrigin = snapshot.beta.internalDrag?.origin\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 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 defineBehavior({\n on: 'deserialization.success',\n guard: ({snapshot, event}) => {\n if (\n event.originEvent.type !== 'drag.drop' ||\n snapshot.beta.internalDrag === undefined\n ) {\n return false\n }\n\n const dragOrigin = snapshot.beta.internalDrag.origin\n const dropPosition = event.originEvent.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\n const draggingEntireBlocks = selectors.isSelectingEntireBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n\n const draggedBlocks = selectors.getSelectedBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n\n if (!droppingOnDragOrigin) {\n return {\n draggingEntireBlocks,\n draggedBlocks,\n dragOrigin,\n originEvent: event.originEvent,\n }\n }\n\n return false\n },\n actions: [\n (\n {event},\n {draggingEntireBlocks, draggedBlocks, dragOrigin, originEvent},\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 * 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 = snapshot.context.activeDecorators\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 ...abstractListItemBehaviors,\n ...abstractMoveBehaviors,\n ...abstractStyleBehaviors,\n ...abstractSelectBehaviors,\n ...abstractSplitBehaviors,\n raiseDeserializationSuccessOrFailure,\n raiseSerializationSuccessOrFailure,\n raiseInsertSoftBreak,\n]\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {TextUnit} from 'slate'\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'\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 'decorator.add',\n 'decorator.remove',\n 'delete',\n 'delete.backward',\n 'delete.block',\n 'delete.forward',\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: [KeyedSegment]\n props: Record<string, unknown>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'block.unset'>\n at: [KeyedSegment]\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 | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.backward'>\n unit: TextUnit\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.block'>\n at: [KeyedSegment]\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.forward'>\n unit: TextUnit\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: [KeyedSegment]\n to: [KeyedSegment]\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\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.toggle',\n 'decorator.toggle',\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.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.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 }\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: [KeyedSegment]\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'move.block up'>\n at: [KeyedSegment]\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 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 position: EventPosition\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.drop'>\n originEvent: {\n dataTransfer: DataTransfer\n }\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 type {Behavior, BehaviorEvent} from '.'\nimport {performAction} from '../behavior-actions/behavior.actions'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorSnapshot} from '../editor/editor-snapshot'\nimport {\n withApplyingBehaviorActions,\n withUndoStep,\n} from '../editor/with-applying-behavior-actions'\nimport {debugWithName} from '../internal-utils/debug'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {defaultBehaviors} from './behavior.default'\nimport {\n isAbstractBehaviorEvent,\n isCustomBehaviorEvent,\n isNativeBehaviorEvent,\n isSyntheticBehaviorEvent,\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}: {\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}) {\n debug(`(${mode}:${eventCategory(event)})`, JSON.stringify(event, null, 2))\n\n const eventBehaviors = [\n ...remainingEventBehaviors,\n ...defaultBehaviors,\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 withApplyingBehaviorActions(editor, () => {\n try {\n debug(\n `(execute:${eventCategory(event)})`,\n JSON.stringify(event, null, 2),\n )\n\n performAction({\n context: {\n keyGenerator,\n schema,\n },\n action: {\n ...event,\n editor,\n },\n })\n } catch (error) {\n console.error(\n new Error(\n `Executing \"${event.type}\" failed due to: ${error.message}`,\n ),\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 })\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 const actions = actionSet(\n {\n snapshot: actionsSnapshot,\n event,\n },\n shouldRun,\n )\n\n if (actions.length === 0) {\n continue\n }\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 nativeEventPrevented = true\n\n performAction({\n context: {\n keyGenerator,\n schema,\n },\n action: {\n ...action,\n editor,\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 })\n\n continue\n }\n\n if (action.type === 'raise') {\n nativeEventPrevented = true\n\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 })\n\n continue\n }\n\n nativeEventPrevented = true\n\n performEvent({\n mode: 'execute',\n behaviors,\n remainingEventBehaviors: isAbstractBehaviorEvent(action.event)\n ? behaviors\n : [],\n event: action.event,\n editor,\n keyGenerator,\n schema,\n getSnapshot,\n nativeEvent: undefined,\n })\n }\n })\n\n continue\n }\n\n for (const action of actions) {\n if (action.type === 'effect') {\n nativeEventPrevented = true\n\n performAction({\n context: {\n keyGenerator,\n schema,\n },\n action: {\n ...action,\n editor,\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 })\n\n continue\n }\n\n if (action.type === 'raise') {\n nativeEventPrevented = true\n\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 })\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 withApplyingBehaviorActions(editor, () => {\n try {\n debug(\n `(execute:${eventCategory(event)})`,\n JSON.stringify(event, null, 2),\n )\n\n performAction({\n context: {keyGenerator, schema},\n action: {\n ...event,\n editor,\n },\n })\n } catch (error) {\n console.error(\n new Error(\n `Executing \"${event.type}\" failed due to: ${error.message}`,\n ),\n )\n }\n })\n\n editor.onChange()\n } else if (nativeEventPrevented) {\n nativeEvent?.preventDefault()\n }\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {Converter} from '../converters/converter.types'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport {slateChildrenToBlocks} from '../internal-utils/slate-children-to-blocks'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\nimport type {HasTag} from './editor-machine'\nimport type {EditorSchema} from './editor-schema'\nimport {getActiveDecorators} from './get-active-decorators'\n\n/**\n * @public\n */\nexport type EditorContext = {\n activeDecorators: Array<string>\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 /**\n * @beta\n * Do not rely on this externally\n */\n beta: {\n hasTag: HasTag\n internalDrag:\n | {\n origin: Pick<EventPosition, 'selection'>\n }\n | undefined\n }\n}\n\nexport function createEditorSnapshot({\n converters,\n editor,\n keyGenerator,\n readOnly,\n schema,\n hasTag,\n internalDrag,\n}: {\n converters: Array<Converter>\n editor: PortableTextSlateEditor\n keyGenerator: () => string\n readOnly: boolean\n schema: EditorSchema\n hasTag: HasTag\n internalDrag:\n | {\n origin: Pick<EventPosition, 'selection'>\n }\n | undefined\n}) {\n const value = slateChildrenToBlocks(schema, editor.children)\n const selection = editor.selection\n ? slateRangeToSelection({\n schema,\n editor,\n range: editor.selection,\n })\n : null\n\n const context = {\n activeDecorators: getActiveDecorators({\n schema,\n slateEditorInstance: editor,\n }),\n converters,\n keyGenerator,\n readOnly,\n schema,\n selection,\n value,\n } satisfies EditorContext\n\n return {\n context,\n beta: {\n hasTag,\n internalDrag,\n },\n } satisfies EditorSnapshot\n}\n","import type {Patch} from '@portabletext/patches'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {FocusEvent} from 'react'\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 {coreBehaviors} from '../behaviors/behavior.core'\nimport {performEvent} from '../behaviors/behavior.perform-event'\nimport type {Behavior} from '../behaviors/behavior.types.behavior'\nimport type {BehaviorEvent} from '../behaviors/behavior.types.event'\nimport type {Converter} from '../converters/converter.types'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport type {NamespaceEvent} from '../type-utils'\nimport type {\n EditorSelection,\n InvalidValueResolution,\n PortableTextMemberSchemaTypes,\n PortableTextSlateEditor,\n} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\nimport {createEditorSnapshot} from './editor-snapshot'\n\nexport * from 'xstate/guards'\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 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\n/**\n * @public\n */\nexport type ExternalEditorEvent =\n | {\n type: 'add behavior'\n behavior: Behavior\n }\n | {\n type: 'remove behavior'\n behavior: Behavior\n }\n | {\n type: 'update readOnly'\n readOnly: boolean\n }\n | {\n type: 'update schema'\n schema: EditorSchema\n }\n | {\n type: 'update key generator'\n keyGenerator: () => string\n }\n | {\n type: 'update value'\n value: Array<PortableTextBlock> | undefined\n }\n | {\n type: 'update maxBlocks'\n maxBlocks: number | undefined\n }\n | PatchesEvent\n\n/**\n * @public\n */\nexport type EditorEmittedEvent =\n | {\n type: 'blurred'\n event: FocusEvent<HTMLDivElement, Element>\n }\n | {\n type: 'done loading'\n }\n | {\n type: 'editable'\n }\n | {\n type: 'error'\n name: string\n description: string\n data: unknown\n }\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 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\ntype PatchEvent = {\n type: 'patch'\n patch: Patch\n}\n\ntype InternalPatchEvent = NamespaceEvent<PatchEvent, 'internal'> & {\n actionId?: string\n value: Array<PortableTextBlock>\n}\n\ntype UnsetEvent = {\n type: 'unset'\n previousValue: Array<PortableTextBlock>\n}\n\n/**\n * @internal\n */\nexport type EditorActor = ActorRefFrom<typeof editorMachine>\nexport type HasTag = ReturnType<EditorActor['getSnapshot']>['hasTag']\n\n/**\n * @internal\n */\nexport type InternalEditorEvent =\n | ExternalEditorEvent\n | {\n type: 'blur'\n editor: PortableTextSlateEditor\n }\n | {\n type: 'focus'\n editor: PortableTextSlateEditor\n }\n | {\n type: 'normalizing'\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 | NamespaceEvent<EditorEmittedEvent, 'notify'>\n | NamespaceEvent<UnsetEvent, 'notify'>\n | {\n type: 'dragstart'\n origin: Pick<EventPosition, 'selection'>\n ghost?: HTMLElement\n }\n | {type: 'dragend'}\n | {type: 'drop'}\n\n/**\n * @internal\n */\nexport type InternalEditorEmittedEvent =\n | EditorEmittedEvent\n | InternalPatchEvent\n | PatchesEvent\n | UnsetEvent\n\n/**\n * @internal\n */\nexport const editorMachine = setup({\n types: {\n context: {} as {\n behaviors: Set<Behavior>\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 incomingValue: Array<PortableTextBlock> | undefined\n internalDrag?: {\n ghost?: HTMLElement\n origin: Pick<EventPosition, 'selection'>\n }\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.behavior])\n },\n }),\n 'remove behavior from context': assign({\n behaviors: ({context, event}) => {\n assertEvent(event, 'remove behavior')\n\n context.behaviors.delete(event.behavior)\n\n return new Set([...context.behaviors])\n },\n }),\n 'assign schema': assign({\n schema: ({event}) => {\n assertEvent(event, 'update schema')\n return event.schema\n },\n }),\n 'emit patch event': enqueueActions(({event, enqueue}) => {\n assertEvent(event, 'internal.patch')\n\n enqueue.emit(event)\n enqueue.emit({type: 'patch', patch: event.patch})\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 if (event.type === 'internal.patch') {\n enqueue.emit(event)\n enqueue.emit({type: 'patch', patch: event.patch})\n } else {\n enqueue.emit(event)\n }\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 performEvent({\n mode: 'raise',\n behaviors: [...context.behaviors.values()],\n remainingEventBehaviors: [...context.behaviors.values()],\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 hasTag: (tag) => self.getSnapshot().hasTag(tag),\n internalDrag: context.internalDrag,\n }),\n nativeEvent: event.nativeEvent,\n })\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([...coreBehaviors]),\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 incomingValue: input.initialValue,\n }),\n on: {\n 'notify.blurred': {\n actions: emit(({event}) => ({...event, type: 'blurred'})),\n },\n 'notify.done loading': {actions: emit({type: 'done loading'})},\n 'notify.error': {actions: emit(({event}) => ({...event, type: 'error'}))},\n 'notify.invalid value': {\n actions: emit(({event}) => ({...event, type: 'invalid value'})),\n },\n 'notify.focused': {\n actions: emit(({event}) => ({...event, type: 'focused'})),\n },\n 'notify.selection': {\n actions: [\n assign({selection: ({event}) => event.selection}),\n emit(({event}) => ({...event, type: 'selection'})),\n ],\n },\n 'notify.unset': {actions: emit(({event}) => ({...event, type: 'unset'}))},\n 'notify.loading': {actions: emit({type: 'loading'})},\n 'notify.value changed': {\n actions: emit(({event}) => ({...event, type: 'value changed'})),\n },\n\n 'add behavior': {actions: 'add behavior to context'},\n 'remove behavior': {actions: 'remove behavior from context'},\n 'update key generator': {\n actions: assign({keyGenerator: ({event}) => event.keyGenerator}),\n },\n 'update schema': {actions: 'assign schema'},\n 'update value': {\n actions: assign({incomingValue: ({event}) => event.value}),\n },\n 'update maxBlocks': {\n actions: assign({maxBlocks: ({event}) => event.maxBlocks}),\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: '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 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 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: '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 on: {\n dragstart: {\n actions: [\n assign({\n internalDrag: ({event}) => ({\n ghost: event.ghost,\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 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 after: {\n 10: {\n target: 'checking if busy',\n },\n },\n },\n },\n },\n 'dragging internally': {\n exit: [\n ({context}) => {\n if (context.internalDrag?.ghost) {\n try {\n context.internalDrag.ghost.parentNode?.removeChild(\n context.internalDrag.ghost,\n )\n } catch (error) {\n console.error(\n new Error(\n `Removing the internal drag ghost failed due to: ${error.message}`,\n ),\n )\n }\n }\n },\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 exit: [\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 on: {\n 'patches': {\n actions: [emit(({event}) => event)],\n },\n 'syncing value': {\n target: 'syncing value',\n },\n },\n },\n 'syncing value': {\n exit: [\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 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 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: ['emit pending events', 'clear pending events'],\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 {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","import {\n createContext,\n startTransition,\n useContext,\n useEffect,\n useState,\n} from 'react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {EditorSelection} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\n\n/**\n * A React context for sharing the editor selection.\n */\nconst PortableTextEditorSelectionContext =\n createContext<EditorSelection | null>(null)\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 selection = useContext(PortableTextEditorSelectionContext)\n\n if (selection === undefined) {\n throw new Error(\n `The \\`usePortableTextEditorSelection\\` hook must be used inside the <PortableTextEditor> component's context.`,\n )\n }\n return selection\n}\nconst debug = debugWithName('component:PortableTextEditor:SelectionProvider')\nconst debugVerbose = debug.enabled && false\n\n/**\n * @internal\n */\nexport function PortableTextEditorSelectionProvider(\n props: React.PropsWithChildren<{\n editorActor: EditorActor\n }>,\n) {\n const [selection, setSelection] = useState<EditorSelection>(null)\n\n // Subscribe to, and handle changes from the editor\n useEffect(() => {\n debug('Subscribing to selection changes')\n const subscription = props.editorActor.on('selection', (event) => {\n // Set the selection state in a transition, we don't need the state immediately.\n startTransition(() => {\n if (debugVerbose) debug('Setting selection')\n setSelection(event.selection)\n })\n })\n\n return () => {\n debug('Unsubscribing to selection changes')\n subscription.unsubscribe()\n }\n }, [props.editorActor])\n\n return (\n <PortableTextEditorSelectionContext.Provider value={selection}>\n {props.children}\n </PortableTextEditorSelectionContext.Provider>\n )\n}\n","import type {\n ArrayDefinition,\n ArraySchemaType,\n Path,\n PortableTextBlock,\n PortableTextChild,\n PortableTextObject,\n} from '@sanity/types'\nimport {\n Component,\n useEffect,\n type MutableRefObject,\n type PropsWithChildren,\n} from 'react'\nimport {Subject} from 'rxjs'\nimport {Slate} from 'slate-react'\nimport {useEffectEvent} from 'use-effect-event'\nimport {createActor} from 'xstate'\nimport type {AddedAnnotationPaths} from '../behavior-actions/behavior.action.annotation.add'\nimport {createCoreConverters} from '../converters/converters.core'\nimport {debugWithName} from '../internal-utils/debug'\nimport {compileType} from '../internal-utils/schema'\nimport type {\n EditableAPI,\n EditableAPIDeleteOptions,\n EditorChange,\n EditorChanges,\n EditorSelection,\n PatchObservable,\n PortableTextMemberSchemaTypes,\n} from '../types/editor'\nimport {Synchronizer} from './components/Synchronizer'\nimport {createInternalEditor, type InternalEditor} from './create-editor'\nimport {EditorActorContext} from './editor-actor-context'\nimport {editorMachine, type EditorActor} from './editor-machine'\nimport {legacySchemaToEditorSchema} from './editor-schema'\nimport {PortableTextEditorContext} from './hooks/usePortableTextEditor'\nimport {PortableTextEditorSelectionProvider} from './hooks/usePortableTextEditorSelection'\nimport {defaultKeyGenerator} from './key-generator'\nimport {createLegacySchema} from './legacy-schema'\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 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 legacySchema = createLegacySchema(\n props.schemaType.hasOwnProperty('jsonType')\n ? props.schemaType\n : compileType(props.schemaType),\n )\n const schema = legacySchemaToEditorSchema(legacySchema)\n const editorActor = createActor(editorMachine, {\n input: {\n converters: createCoreConverters(legacySchema),\n getLegacySchema: () => legacySchema,\n initialValue: props.value,\n keyGenerator: props.keyGenerator ?? defaultKeyGenerator,\n maxBlocks:\n props.maxBlocks === undefined\n ? undefined\n : Number.parseInt(props.maxBlocks.toString(), 10),\n readOnly: props.readOnly,\n schema,\n },\n })\n editorActor.start()\n\n this.editor = createInternalEditor(editorActor)\n this.schemaTypes = legacySchema\n }\n\n this.editable = this.editor._internal.editable\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 this.schemaTypes = createLegacySchema(\n this.props.schemaType.hasOwnProperty('jsonType')\n ? this.props.schemaType\n : compileType(this.props.schemaType),\n )\n\n this.editor._internal.editorActor.send({\n type: 'update schema',\n schema: legacySchemaToEditorSchema(this.schemaTypes),\n })\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._internal.editorActor.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 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 <RouteEventsToChanges\n editorActor={this.editor._internal.editorActor}\n onChange={(change) => {\n if (!this.props.editor) {\n this.props.onChange(change)\n }\n /**\n * For backwards compatibility, we relay all changes to the\n * `change$` Subject as well.\n */\n this.change$.next(change)\n }}\n />\n <Synchronizer\n editorActor={this.editor._internal.editorActor}\n slateEditor={this.editor._internal.slateEditor.instance}\n />\n <EditorActorContext.Provider value={this.editor._internal.editorActor}>\n <Slate\n editor={this.editor._internal.slateEditor.instance}\n initialValue={this.editor._internal.slateEditor.initialValue}\n >\n <PortableTextEditorContext.Provider value={this}>\n <PortableTextEditorSelectionProvider\n editorActor={this.editor._internal.editorActor}\n >\n {this.props.children}\n </PortableTextEditorSelectionProvider>\n </PortableTextEditorContext.Provider>\n </Slate>\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\nexport function RouteEventsToChanges(props: {\n editorActor: EditorActor\n onChange: (change: EditorChange) => void\n}) {\n // We want to ensure that _when_ `props.onChange` is called, it uses the current value.\n // But we don't want to have the `useEffect` run setup + teardown + setup every time the prop might change, as that's unnecessary.\n // So we use our own polyfill that lets us use an upcoming React hook that solves this exact problem.\n // https://19.react.dev/learn/separating-events-from-effects#declaring-an-effect-event\n const handleChange = useEffectEvent((change: EditorChange) =>\n props.onChange(change),\n )\n\n useEffect(() => {\n debug('Subscribing to editor changes')\n const sub = props.editorActor.on('*', (event) => {\n switch (event.type) {\n case 'blurred': {\n handleChange({type: 'blur', event: event.event})\n break\n }\n case 'patch':\n handleChange(event)\n break\n case 'loading': {\n handleChange({type: 'loading', isLoading: true})\n break\n }\n case 'done loading': {\n handleChange({type: 'loading', isLoading: false})\n break\n }\n case 'focused': {\n handleChange({type: 'focus', event: event.event})\n break\n }\n case 'value changed': {\n handleChange({type: 'value', value: event.value})\n break\n }\n case 'invalid value': {\n handleChange({\n type: 'invalidValue',\n resolution: event.resolution,\n value: event.value,\n })\n break\n }\n case 'error': {\n handleChange({\n ...event,\n level: 'warning',\n })\n break\n }\n case 'mutation': {\n handleChange(event)\n break\n }\n case 'ready': {\n handleChange(event)\n break\n }\n case 'selection': {\n handleChange(event)\n break\n }\n case 'unset': {\n handleChange(event)\n break\n }\n }\n })\n return () => {\n debug('Unsubscribing to changes')\n sub.unsubscribe()\n }\n }, [props.editorActor])\n\n return null\n}\n","import {useActorRef} from '@xstate/react'\nimport React, {useMemo} from 'react'\nimport {Slate} from 'slate-react'\nimport {Synchronizer} from './components/Synchronizer'\nimport {\n createInternalEditor,\n editorConfigToMachineInput,\n type EditorConfig,\n} from './create-editor'\nimport {EditorActorContext} from './editor-actor-context'\nimport {EditorContext} from './editor-context'\nimport {editorMachine} from './editor-machine'\nimport {PortableTextEditorContext} from './hooks/usePortableTextEditor'\nimport {PortableTextEditorSelectionProvider} from './hooks/usePortableTextEditorSelection'\nimport {\n PortableTextEditor,\n RouteEventsToChanges,\n type PortableTextEditorProps,\n} from './PortableTextEditor'\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 editorActor = useActorRef(editorMachine, {\n input: editorConfigToMachineInput(props.initialConfig),\n })\n const internalEditor = useMemo(\n () => createInternalEditor(editorActor),\n [editorActor],\n )\n const portableTextEditor = useMemo(\n () =>\n new PortableTextEditor({\n editor: internalEditor,\n } as unknown as PortableTextEditorProps),\n [internalEditor],\n )\n\n return (\n <EditorContext.Provider value={internalEditor}>\n <RouteEventsToChanges\n editorActor={editorActor}\n onChange={(change) => {\n portableTextEditor.change$.next(change)\n }}\n />\n <Synchronizer\n editorActor={editorActor}\n slateEditor={internalEditor._internal.slateEditor.instance}\n />\n <EditorActorContext.Provider value={editorActor}>\n <Slate\n editor={internalEditor._internal.slateEditor.instance}\n initialValue={internalEditor._internal.slateEditor.initialValue}\n >\n <PortableTextEditorContext.Provider value={portableTextEditor}>\n <PortableTextEditorSelectionProvider editorActor={editorActor}>\n {props.children}\n </PortableTextEditorSelectionProvider>\n </PortableTextEditorContext.Provider>\n </Slate>\n </EditorActorContext.Provider>\n </EditorContext.Provider>\n )\n}\n\n/**\n * @public\n * Get the current editor context from the `EditorProvider`.\n * Must be used inside the `EditorProvider` component.\n * @returns The current editor object.\n * @example\n * ```tsx\n * import { useEditor } from '@portabletext/editor'\n *\n * function MyComponent() {\n * const editor = useEditor()\n * }\n * ```\n * @group Hooks\n */\nexport function useEditor() {\n const editor = React.useContext(EditorContext)\n\n if (!editor) {\n throw new Error('No Editor set. Use EditorProvider to set one.')\n }\n\n return editor\n}\n"],"names":["rootName","debug","debugWithName","name","namespace","enabled","EMPTY_MARKDEFS","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","_c","blockValue","isEqualToEmptyEditor","undefined","length","Text","isText","join","IS_PROCESSING_REMOTE_CHANGES","WeakMap","KEY_TO_SLATE_ELEMENT","KEY_TO_VALUE_ELEMENT","SLATE_TO_PORTABLE_TEXT_RANGE","mutationMachine","setup","types","context","events","input","emitted","actions","emit","type","enqueueActions","enqueue","bulk","pendingMutations","patches","snapshot","assign","event","assertEvent","actionId","patch","lastBulk","at","slice","concat","actors","fromCallback","sendBack","originalApply","slateEditor","apply","op","guards","stateIn","typing","no pending mutations","slate is normalizing","Editor","isNormalizing","delays","process","env","NODE_ENV","createMachine","id","schema","states","initial","invoke","src","idle","on","target","after","reenter","mutations","guard","and","not","validateValue","keyGenerator","resolution","valid","validChildTypes","span","inlineObjects","validBlockTypes","blockObjects","unset","description","action","item","i18n","some","blk","index","isPlainObject","String","values","set","includes","currentBlockTypeName","key","expectedTypeName","isTextBlock","typeName","newSpan","autoResolve","setIfMissing","insert","allUsedMarks","uniq","flatten","filter","cld","unusedMarkDefs","def","markDefKey","m","toString","orphanedMarks","mark","decorators","dec","find","spanChildren","orphaned","cMrk","cIndex","newChild","childKey","childType","withRemoteChanges","editor","fn","prev","isChangingRemotely","get","PATCHING","withoutPatching","isPatching","cloneDiff","diff2","IS_UDOING","IS_REDOING","withUndoing","isUndoing","setIsUndoing","withRedoing","isRedoing","setIsRedoing","defaultKeyGenerator","randomKey","getByteHexTable","table","i","whatwgRNG","rnds8","Uint8Array","getRandomValues","reduce","str","n","CURRENT_ACTION_ID","withApplyingBehaviorActions","withoutNormalizing","getCurrentActionId","isApplyingBehaviorActions","CURRENT_UNDO_STEP","withUndoStep","current","undoStepId","getCurrentUndoStepId","SAVING","REMOTE_PATCHES","UNDO_STEP_LIMIT","isSaving","state","getRemotePatches","createWithUndoRedo","options","editorActor","previousSnapshot","getSnapshot","remotePatches","previousUndoStepId","subscriptions","push","sub","reset","forEach","origin","path","history","undos","redos","splice","time","Date","unsubscribe","matches","operations","step","lastOp","overwrite","shouldOverwrite","save","currentUndoStepId","merge","shouldMerge","newStep","selection","createSelectOperation","timestamp","shift","shouldClear","historyUndoActionImplementation","otherPatches","transformedOperations","transformOperation","reversedOperations","Operation","inverse","reverse","withoutSaving","err","Transforms","deselect","onChange","pop","historyRedoActionImplementation","operation","transformedOperation","insertBlockIndex","findIndex","items","adjustBlockPath","unsetBlockIndex","operationTargetBlock","findOperationTargetBlock","parsePatch","diffPatch","adjustOffsetBy","changedOffset","utf8Start1","diffs","diff","diffType","DIFF_INSERT","DIFF_DELETE","DIFF_EQUAL","every","dType","offset","currentFocus","properties","focus","currentAnchor","anchor","newFocus","newProperties","newAnchor","point","level","blockIndex","newPath","Path","equals","syncValueCallback","streamBlocks","syncValueLogic","syncMachine","initialValueSynced","readOnly","pendingValue","previousValue","initial value synced","is busy","editable","isProcessingLocalChanges","isChanging","isBusy","value changed while syncing","pending value equals previous value","entry","exit","always","busy","syncing","updateValue","isChanged","isValid","hadSelection","childrenLength","_","removeNodes","insertNodes","pteCreateTextBlock","select","slateValueFromProps","Promise","resolve","currentBlock","currentBlockIndex","getBlocks","slateValue","blockChanged","blockValid","syncBlock","error","setTimeout","oldBlock","hasChanges","validationValue","validation","console","warn","_updateBlock","_replaceBlock","currentSelection","selectionFocusOnBlock","setNodes","oldBlockChildrenLength","from","childIndex","currentBlockChild","currentBlockChildIndex","oldBlockChild","isChildChanged","isTextChanged","isSpanNode","delete","insertText","voids","Synchronizer","props","$","incomingValue","useSelector","_temp","_temp2","t0","t1","t2","t3","t4","syncActorRef","useActorRef","t5","t6","mutationActorRef","t7","t8","subscription","send","useEffect","t10","t9","subscription_0","event_0","bb15","t11","t12","t13","t14","t15","event_1","t16","s_0","s","displayName","converterJson","mimeType","serialize","portableTextConverter","converters","converter","originEvent","reason","deserialize","converterPortableText","beta","internalDrag","blocks","sliceBlocks","data","JSON","stringify","parse","parsedBlocks","flatMap","parsedBlock","parseBlock","refreshKeys","hasTag","createConverterTextHtml","legacySchema","html","toHTML","onMissingComponent","components","unknownType","htmlToBlocks","portableText","unstable_whitespaceOnPasteMode","createConverterTextPlain","inlineObjectType","title","blockObjectType","textToHtml","escapeHtml","split","line","replace","entityMap","createCoreConverters","compileType","rawType","Schema","compile","createOperationToPatches","textBlockName","insertTextPatch","beforeValue","textChild","isTextSpan","prevBlock","prevChild","prevText","diffMatchPatch","removeTextPatch","beforeBlock","prevTextChild","setNodePatch","setNode","omitBy","isUndefined","blockKey","keys","Object","keyName","val","indexOf","insertNodePatch","position","targetKey","node","splitNodePatch","splitBlock","targetValue","splitSpan","targetSpans","removeNodePatch","spanToRemove","mergeNodePatch","updatedBlock","newBlock","updatedSpan","removedSpan","moveNodePatch","targetBlock","targetChild","childToInsert","insertTextActionImplementation","isPortableTextSpan","isPortableTextBlock","getPreviousSpan","blockPath","spanPath","previousSpan","childPath","Node","isBefore","getNextSpan","nextSpan","isAfter","createWithPortableTextMarkModel","normalizeNode","nodeEntry","nextNode","mergeNodes","parent","decorator","annotations","orphanedAnnotations","markDefKeys","Set","newMarkDefs","markDef","has","add","previousSelectionIsCollapsed","Range","isCollapsed","newSelectionIsCollapsed","focusSpan","nodes","mode","match","newFocusSpan","movedToNextSpan","movedToPreviousSpan","_block","depth","previousSpanAnnotations","nextSpanAnnotations","annotationsEnding","annotation","atTheEndOfAnnotation","annotationsStarting","atTheStartOfAnnotation","nextSpanDecorators","collapsedSelection","marksWithoutAnnotations","spanHasAnnotations","spanIsEmpty","atTheBeginningOfSpan","atTheEndOfSpan","spanAnnotations","previousSpanHasAnnotations","previousSpanHasSameAnnotations","previousSpanHasSameAnnotation","previousSpanHasSameMarks","nextSpanSharesSomeAnnotations","isExpanded","deletingFromTheEnd","deletingAllText","nextSpanHasSameAnnotation","marksWithoutAnnotationMarks","targetPath","oldDefs","removeDecoratorActionImplementation","hanging","eMark","lonelyEmptySpan","existingMarksWithoutDecorator","existingMark","existingMarks","isDecoratorActive","selectedTextNodes","addAnnotationActionImplementation","parsedAnnotation","parseAnnotation","paths","markDefPath","markDefPaths","selectedBlocks","isBackward","annotationKey","unshift","existingSameTypeAnnotations","removeAnnotationActionImplementation","potentialAnnotations","selectedChild","selectedChildPath","annotationToRemove","previousSpansWithSameAnnotation","nextSpansWithSameAnnotation","marksWithoutAnnotation","toSlatePath","isKeySegment","isVoid","toSlateRange","moveRangeByOperation","range","Point","transform","blockSetBehaviorActionImplementation","location","filteredProps","slateBlock","blockUnsetBehaviorActionImplementation","propsToRemove","prop","updatedTextBlock","omit","propsToSet","updatedBlockObject","getFocusBlock","getSelectionStartBlock","selectionStartPoint","start","getPointBlock","getSelectionEndBlock","selectionEndPoint","end","getFocusChild","focusBlock","focusBlockPath","focusChild","getPointChild","pointChild","getFirstBlock","firstBlockPath","getLastBlock","lastBlockPath","getNodeBlock","isEditor","isBlockElement","elementToBlock","element","isInline","blockObject","isListItemActive","listItem","isListBlock","isStyleActive","slateRangeToSelection","anchorBlock","anchorChild","backward","decoratorAddActionImplementation","manualAnchor","utils","blockOffset","direction","manualFocus","manualSelection","editorSelection","anchorOffset","selectionPoint","focusOffset","newValue","newSelection","offsets","trimmedSelection","selectors","activeDecorators","newRange","splitTextNodes","isRange","deleteActionImplementation","deleteBackwardActionImplementation","deleteBackward","unit","deleteBlockActionImplementation","deleteForwardActionImplementation","deleteForward","effectActionImplementation","effect","insertInlineObjectActionImplementation","parsedInlineObject","parseInlineObject","inlineObject","focusTextBlock","insertSpanActionImplementation","insertBlockActionImplementation","fragment","placement","insertBlock","startBlock","startBlockPath","endBlock","endBlockPath","DOMEditor","lastBlock","nextPath","selectionBefore","insertFragment","endBlockEndPoint","adjustedSelection","endBlockStartPoint","next","moveBackwardActionImplementation","move","distance","moveBlockActionImplementation","to","moveNodes","moveForwardActionImplementation","selectActionImplementation","behaviorActionImplementations","performAction","createWithEventListeners","maxBlocks","insertBreak","behaviorEvent","insertData","dataTransfer","insertSoftBreak","redo","setFragmentData","undo","createWithMaxBlocks","rows","createWithObjectKeys","existingKeys","descendants","debugVerbose","createApplyPatch","changed","insertPatch","unsetPatch","setPatch","findBlockAndChildFromPath","diffMatchPatchApplyPatches","allowExceedingIndices","cleanupEfficiency","makeDiff","debugState","targetBlockPath","targetChildPath","blocksToInsert","targetBlockIndex","normalizedIdx","childrenToInsert","targetChildIndex","childInsertPath","newText","nextRest","prevChildren","prevRest","c","newVal","applyAll","previousSelection","_child","isKeyedSegment","segment","stateName","findBlockFromPath","isMatch","createWithPatches","patchFunctions","previousChildren","applyPatch","bufferedPatches","handleBufferedRemotePatches","normalize","handlePatches","p","editorWasEmpty","editorIsEmpty","createWithPlaceholderBlock","insertNode","createWithPortableTextBlockStyle","defaultStyle","SlateText","createWithPortableTextSelections","prevSelection","emitPortableTextSelection","ptRange","existing","createWithSchemaTypes","isSpan","obj","createWithUtils","withPlugins","e","operationToPatches","withObjectKeys","withSchemaTypes","withPatches","withMaxBlocks","withUndoRedo","withPortableTextMarkModel","withPortableTextBlockStyle","withPlaceholderBlock","withUtils","withPortableTextSelections","slateEditors","createSlateEditor","config","existingSlateEditor","unsubscriptions","instance","withReact","createEditor","initialValue","createLegacySchema","portableTextType","blockType","of","findBlockType","childrenField","fields","field","ofType","spanType","memberType","inlineObjectTypes","blockObjectTypes","resolveEnabledStyles","resolveEnabledDecorators","lists","resolveEnabledListItems","styleField","btField","textStyles","list","listField","listItems","defineSchema","definition","temporaryImageName","temporaryUrlName","temporaryObjectNames","image","url","objectNames","defaultObjectTitles","legacySchemaToEditorSchema","jsonType","compileSchemaDefinitionToLegacySchema","defineType","portableTextSchema","defineField","startCase","SanitySchema","pteSchema","slateChildrenToBlocks","descendant","processedChildren","getActiveDecorators","slateEditorInstance","defaultCompare","a","b","useEditorSelector","selector","compare","editorActorSnapshot","getEditorSnapshot","_internal","tag","createEditableAPI","blur","toggleMark","toggleList","toggleBlockStyle","isMarkActive","slateSelection","insertChild","focusChildPath","focusNode","hasBlockStyle","hasListStyle","findByPath","slatePath","ptBlock","ptChild","findDOMNode","ReactEditor","toDOMNode","activeAnnotations","spans","isAnnotationActive","annotationType","addAnnotation","SlateElement","removeAnnotation","getSelection","getValue","isCollapsedSelection","isExpandedSelection","getFragment","isSelectionsOverlapping","selectionA","selectionB","rangeA","rangeB","selectionMarkDefs","accMarkDefs","markKey","compileSchemasFromEditorConfig","schemaDefinition","hasOwnProperty","editorConfigToMachineInput","getLegacySchema","createInternalEditor","registerBehavior","behavior","listener","EditorActorContext","createContext","getGlobalScope","globalThis","window","self","global","globalScope","createGloballyScopedContext","defaultValue","symbol","Symbol","for","document","EditorContext","addAnnotationOnCollapsedSelection","defineBehavior","isSelectionCollapsed","caretWordSelection","getCaretWordSelection","raise","coreAnnotationBehaviors","IS_MAC","test","navigator","userAgent","modifiers","alt","control","meta","aliases","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","rawHotkeySegment","optional","endsWith","hotkeySegment","toKeyName","modifier","alias","code","TypeError","keyCode","toKeyCode","toLowerCase","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","focusBlockObject","nextBlock","arrowUpOnLonelyBlockObject","previousBlock","breakingBlockObject","getFocusBlockObject","clickingAboveLonelyBlockObject","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","selectionCollapsed","isEmptyTextBlock","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","emShortcut","underlineShortcut","codeShortcut","coreDndBehaviors","dragOrigin","isOverlappingSelection","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","focusLevel","breakingAtTheStartOfTextBlock","focusDecorators","focusAnnotations","breakingEntireDocument","firstBlock","firstBlockStartPoint","lastBlockEndPoint","breakingEntireBlocks","selectionStartBlock","selectionEndBlock","startBlockStartPoint","coreInsertBreakBehaviors","MAX_LIST_LEVEL","clearListOnBackspace","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedListBlocks","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreBehaviors","abstractAnnotationBehaviors","isActiveAnnotation","abstractDecoratorBehaviors","isActiveDecorator","blockOffsetsToSelection","abstractDeleteBehaviors","abstractInsertBehaviors","getFocusTextBlock","abstractListItemBehaviors","selectedTextBlocks","getSelectedTextBlocks","isActiveListItem","abstractMoveBehaviors","getPreviousBlock","getNextBlock","abstractSelectBehaviors","getBlockEndPoint","getBlockStartPoint","abstractSplitBehaviors","getSelectionStartPoint","getSelectionEndPoint","blockEndPoint","newTextBlockSelection","newTextBlock","abstractStyleBehaviors","isActiveStyle","keyIs","lineBreak","raiseInsertSoftBreak","raiseDeserializationSuccessOrFailure","success","failures","getData","deserializeEvent","failure","raiseSerializationSuccessOrFailure","serializeEvents","serializeEvent","defaultBehaviors","setData","dropPosition","droppingOnDragOrigin","draggingEntireBlocks","draggedBlocks","getActiveAnnotations","textRuns","getTextBlockText","textRun","isSelectionExpanded","isSyntheticBehaviorEvent","isCustomBehaviorEvent","isNativeBehaviorEvent","isAbstractBehaviorEvent","abstractBehaviorEventTypes","nativeBehaviorEventTypes","startsWith","eventCategory","performEvent","behaviors","remainingEventBehaviors","nativeEvent","eventBehaviors","listenedNamespace","eventNamespace","preventDefault","message","guardSnapshot","nativeEventPrevented","defaultBehaviorOverwritten","eventBehaviorIndex","eventBehavior","shouldRun","actionSet","actionsSnapshot","createEditorSnapshot","editorMachine","tags","pendingEvents","pendingIncomingPatchesEvents","handle blur","handle focus","handle behavior event","slate is busy","initialReadOnly","dragstart","ghost","parentNode","removeChild","dragend","drop","pristine","normalizing","dirty","PortableTextEditorContext","usePortableTextEditor","useContext","PortableTextEditorSelectionContext","usePortableTextEditorSelection","PortableTextEditorSelectionProvider","setSelection","useState","startTransition","jsx","PortableTextEditor","Component","change$","Subject","constructor","schemaType","createActor","Number","parseInt","componentDidUpdate","prevProps","editorRef","setEditable","render","legacyPatches","incomingPatches$","patches$","change","Slate","blockStyle","listStyle","isObjectPath","_editor","isChildObjectEditPath","RoutePatchesObservableToEditorActor","subscribe","payload","RouteEventsToChanges","handleChange","useEffectEvent","bb5","isLoading","EditorProvider","initialConfig","internalEditor","useMemo","portableTextEditor","jsxs","useEditor","React"],"mappings":"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","x_google_ignoreList":[7,22]}
1
+ {"version":3,"file":"editor-provider.cjs","sources":["../../src/internal-utils/debug.ts","../../src/internal-utils/values.ts","../../src/internal-utils/weakMaps.ts","../../src/editor/mutation-machine.ts","../../src/internal-utils/validateValue.ts","../../src/internal-utils/withChanges.ts","../../src/internal-utils/withoutPatching.ts","../../../../node_modules/.pnpm/@sanity+diff-match-patch@3.2.0/node_modules/@sanity/diff-match-patch/dist/index.js","../../src/internal-utils/withUndoRedo.ts","../../src/editor/key-generator.ts","../../src/editor/with-applying-behavior-actions.ts","../../src/editor/plugins/createWithUndoRedo.ts","../../src/editor/sync-machine.ts","../../src/editor/components/Synchronizer.tsx","../../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/operationToPatches.ts","../../src/behavior-actions/behavior.action.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/editor/plugins/createWithPortableTextMarkModel.ts","../../src/behavior-actions/behavior.action.annotation.add.ts","../../src/behavior-actions/behavior.action.annotation.remove.ts","../../src/internal-utils/paths.ts","../../src/internal-utils/ranges.ts","../../src/behavior-actions/behavior.action.block.set.ts","../../src/behavior-actions/behavior.action.block.unset.ts","../../src/internal-utils/slate-utils.ts","../../src/behavior-actions/behavior.action.decorator.add.ts","../../src/behavior-actions/behavior.action.delete.ts","../../src/behavior-actions/behavior.action.delete.backward.ts","../../src/behavior-actions/behavior.action.delete.block.ts","../../src/behavior-actions/behavior.action.delete.forward.ts","../../src/behavior-actions/behavior.action.insert-inline-object.ts","../../src/behavior-actions/behavior.action.insert-span.ts","../../src/behavior-actions/behavior.action.insert.block.ts","../../src/behavior-actions/behavior.action.move.backward.ts","../../src/behavior-actions/behavior.action.move.block.ts","../../src/behavior-actions/behavior.action.move.forward.ts","../../src/behavior-actions/behavior.action.select.ts","../../src/behavior-actions/behavior.actions.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/editor/plugins/createWithPatches.ts","../../src/editor/plugins/createWithPlaceholderBlock.ts","../../src/editor/plugins/createWithPortableTextBlockStyle.ts","../../src/editor/plugins/createWithPortableTextSelections.ts","../../src/editor/plugins/createWithSchemaTypes.ts","../../src/editor/plugins/createWithUtils.ts","../../src/editor/plugins/with-plugins.ts","../../src/editor/create-slate-editor.tsx","../../src/editor/legacy-schema.ts","../../src/editor/editor-schema.ts","../../src/internal-utils/slate-children-to-blocks.ts","../../src/editor/get-active-decorators.ts","../../src/editor/editor-selector.ts","../../src/editor/plugins/createWithEditableAPI.ts","../../src/editor/create-editor.ts","../../src/editor/editor-actor-context.ts","../../src/internal-utils/global-scope.ts","../../src/internal-utils/globally-scoped-context.ts","../../src/editor/editor-context.tsx","../../src/behaviors/behavior.core.annotations.ts","../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.core.block-objects.ts","../../src/behaviors/behavior.core.decorators.ts","../../src/behaviors/behavior.core.dnd.ts","../../src/behaviors/behavior.core.insert-break.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.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/internal-utils/key-is.ts","../../src/behaviors/behavior.default.raise-soft-break.ts","../../src/behaviors/behavior.default.ts","../../src/behaviors/behavior.types.event.ts","../../src/behaviors/behavior.perform-event.ts","../../src/editor/editor-snapshot.ts","../../src/editor/editor-machine.ts","../../src/editor/hooks/usePortableTextEditor.ts","../../src/editor/hooks/usePortableTextEditorSelection.tsx","../../src/editor/PortableTextEditor.tsx","../../src/editor/editor-provider.tsx"],"sourcesContent":["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 {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 type {Patch} from '@portabletext/patches'\nimport type {PortableTextBlock} from '@sanity/types'\nimport {Editor} from 'slate'\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 type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\n\n/**\n * Makes sure editor mutation events are debounced\n */\nexport const mutationMachine = setup({\n types: {\n context: {} as {\n pendingMutations: Array<{\n actionId?: string\n value: Array<PortableTextBlock> | undefined\n patches: Array<Patch>\n }>\n schema: EditorSchema\n slateEditor: PortableTextSlateEditor\n },\n events: {} as\n | {\n type: 'patch'\n patch: Patch\n actionId?: string\n value: Array<PortableTextBlock>\n }\n | {\n type: 'typing'\n }\n | {\n type: 'not typing'\n },\n input: {} as {\n schema: EditorSchema\n slateEditor: PortableTextSlateEditor\n },\n emitted: {} as\n | {\n type: 'has pending patches'\n }\n | {\n type: 'mutation'\n patches: Array<Patch>\n snapshot: Array<PortableTextBlock> | undefined\n },\n },\n actions: {\n 'emit has pending patches': emit({type: 'has pending patches'}),\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 patch': assign({\n pendingMutations: ({context, event}) => {\n assertEvent(event, 'patch')\n\n if (context.pendingMutations.length === 0) {\n return [\n {\n actionId: event.actionId,\n value: event.value,\n patches: [event.patch],\n },\n ]\n }\n\n const lastBulk = context.pendingMutations.at(-1)\n\n if (lastBulk && lastBulk.actionId === event.actionId) {\n return context.pendingMutations.slice(0, -1).concat({\n value: event.value,\n actionId: lastBulk.actionId,\n patches: [...lastBulk.patches, event.patch],\n })\n }\n\n return context.pendingMutations.concat({\n value: event.value,\n actionId: event.actionId,\n patches: [event.patch],\n })\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 },\n guards: {\n 'is typing': stateIn({typing: 'typing'}),\n 'no pending mutations': ({context}) =>\n context.pendingMutations.length === 0,\n 'slate is normalizing': ({context}) =>\n Editor.isNormalizing(context.slateEditor),\n },\n delays: {\n 'mutation debounce': process.env.NODE_ENV === 'test' ? 250 : 0,\n 'type debounce': process.env.NODE_ENV === 'test' ? 0 : 250,\n },\n}).createMachine({\n id: 'mutation',\n context: ({input}) => ({\n pendingMutations: [],\n schema: input.schema,\n slateEditor: input.slateEditor,\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 on: {\n typing: {\n target: 'typing',\n },\n },\n },\n typing: {\n after: {\n 'type debounce': {\n target: 'idle',\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 on: {\n patch: {\n actions: ['defer patch', 'emit has pending patches'],\n target: 'emitting mutations',\n },\n },\n },\n 'emitting mutations': {\n after: {\n 'mutation debounce': [\n {\n guard: and([not('is typing'), 'slate is normalizing']),\n target: 'idle',\n actions: ['emit mutations', 'clear pending mutations'],\n },\n {\n target: 'emitting mutations',\n reenter: true,\n },\n ],\n },\n on: {\n patch: {\n target: 'emitting mutations',\n actions: ['defer patch'],\n reenter: true,\n },\n },\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 {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\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","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'\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 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 {Editor} from 'slate'\nimport {defaultKeyGenerator} from './key-generator'\n\nconst CURRENT_ACTION_ID: WeakMap<Editor, string | undefined> = new WeakMap()\n\nexport function withApplyingBehaviorActions(editor: Editor, fn: () => void) {\n CURRENT_ACTION_ID.set(editor, defaultKeyGenerator())\n Editor.withoutNormalizing(editor, fn)\n CURRENT_ACTION_ID.set(editor, undefined)\n}\n\nexport function getCurrentActionId(editor: Editor) {\n return CURRENT_ACTION_ID.get(editor)\n}\n\nexport function isApplyingBehaviorActions(editor: Editor) {\n return getCurrentActionId(editor) !== undefined\n}\n\n////////\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 type {BehaviorActionImplementation} from '../../behavior-actions/behavior.actions'\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 {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {getCurrentUndoStepId} from '../with-applying-behavior-actions'\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 =\n currentUndoStepId !== undefined && previousUndoStepId === undefined\n ? false\n : currentUndoStepId !== undefined && previousUndoStepId !== undefined\n ? currentUndoStepId === previousUndoStepId\n : true\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 historyUndoActionImplementation: BehaviorActionImplementation<\n 'history.undo'\n> = ({action}) => {\n const editor = action.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 historyRedoActionImplementation: BehaviorActionImplementation<\n 'history.redo'\n> = ({action}) => {\n const editor = action.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 {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 assertEvent,\n assign,\n emit,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} 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\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 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 keyGenerator: () => string\n schema: EditorSchema\n readOnly: boolean\n slateEditor: PortableTextSlateEditor\n },\n events: {} as\n | {\n type: 'has pending patches'\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 '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 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 on: {\n 'has pending patches': {\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 type: 'parallel',\n states: {\n 'setting up': {\n initial: 'syncing initial value',\n states: {\n 'syncing initial value': {\n entry: [\n () => {\n debug('entry: syncing initial value')\n },\n ],\n exit: [\n () => {\n debug('exit: syncing initial value')\n },\n ],\n always: {\n guard: 'initial value synced',\n target: 'done syncing initial value',\n },\n },\n 'done syncing initial value': {\n entry: [\n 'emit done syncing value',\n () => {\n debug('entry: done syncing initial value')\n },\n ],\n exit: [\n () => {\n debug('exit: done syncing initial value')\n },\n ],\n type: 'final',\n },\n },\n },\n 'syncing': {\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: 'is busy',\n target: 'busy',\n actions: ['assign pending value'],\n },\n {\n target: 'syncing',\n actions: ['assign pending value'],\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 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 always: {\n guard: 'pending value equals previous value',\n target: 'idle',\n actions: ['clear pending value', 'assign initial value synced'],\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 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: [\n 'assign previous value',\n 'assign initial value synced',\n ],\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 },\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 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 withoutPatching(slateEditor, () => {\n if (hadSelection) {\n Transforms.deselect(slateEditor)\n }\n const childrenLength = slateEditor.children.length\n slateEditor.children.forEach((_, index) => {\n Transforms.removeNodes(slateEditor, {\n at: [childrenLength - 1 - index],\n })\n })\n Transforms.insertNodes(\n slateEditor,\n slateEditor.pteCreateTextBlock({decorators: []}),\n {at: [0]},\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 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 await new Promise<void>((resolve) => {\n Editor.withoutNormalizing(slateEditor, () => {\n withRemoteChanges(slateEditor, () => {\n withoutPatching(slateEditor, async () => {\n const childrenLength = slateEditor.children.length\n\n // Remove blocks that have become superfluous\n if (slateValueFromProps.length < childrenLength) {\n for (\n let i = childrenLength - 1;\n i > slateValueFromProps.length - 1;\n i--\n ) {\n Transforms.removeNodes(slateEditor, {\n at: [i],\n })\n }\n isChanged = true\n }\n\n for await (const [currentBlock, currentBlockIndex] of getBlocks({\n slateValue: slateValueFromProps,\n streamBlocks,\n })) {\n // Go through all of the blocks and see if they need to be updated\n const {blockChanged, blockValid} = syncBlock({\n context,\n sendBack,\n block: currentBlock,\n index: currentBlockIndex,\n slateEditor,\n value,\n })\n isChanged = blockChanged || isChanged\n isValid = isValid && blockValid\n }\n\n resolve()\n })\n })\n })\n })\n }\n\n if (!isValid) {\n debug('Invalid value, returning')\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 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 sendBack({type: 'done syncing', value})\n}\n\nasync function* getBlocks({\n slateValue,\n streamBlocks,\n}: {\n slateValue: Array<Descendant>\n streamBlocks: boolean\n}) {\n let index = 0\n for await (const block of slateValue) {\n if (streamBlocks && 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 {useActorRef, useSelector} from '@xstate/react'\nimport {useEffect} from 'react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {fromSlateValue} from '../../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../../internal-utils/weakMaps'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {mutationMachine} from '../mutation-machine'\nimport {syncMachine} from '../sync-machine'\n\nconst debug = debugWithName('component:PortableTextEditor:Synchronizer')\n\n/**\n * @internal\n */\nexport interface SynchronizerProps {\n editorActor: EditorActor\n slateEditor: PortableTextSlateEditor\n}\n\n/**\n * Synchronizes the server value with the editor, and provides various contexts for the editor state.\n * @internal\n */\nexport function Synchronizer(props: SynchronizerProps) {\n const {editorActor, slateEditor} = props\n\n const incomingValue = useSelector(\n props.editorActor,\n (s) => s.context.incomingValue,\n )\n const readOnly = useSelector(props.editorActor, (s) =>\n s.matches({'edit mode': 'read only'}),\n )\n const syncActorRef = useActorRef(syncMachine, {\n input: {\n keyGenerator: props.editorActor.getSnapshot().context.keyGenerator,\n readOnly: props.editorActor\n .getSnapshot()\n .matches({'edit mode': 'read only'}),\n schema: props.editorActor.getSnapshot().context.schema,\n slateEditor,\n },\n })\n const mutationActorRef = useActorRef(mutationMachine, {\n input: {\n schema: props.editorActor.getSnapshot().context.schema,\n slateEditor,\n },\n })\n\n useEffect(() => {\n const subscription = mutationActorRef.on('*', (event) => {\n if (event.type === 'has pending patches') {\n syncActorRef.send({type: 'has pending patches'})\n }\n if (event.type === 'mutation') {\n syncActorRef.send({type: 'mutation'})\n editorActor.send({\n type: 'mutation',\n patches: event.patches,\n snapshot: event.snapshot,\n value: event.snapshot,\n })\n }\n })\n\n return () => {\n subscription.unsubscribe()\n }\n }, [mutationActorRef, syncActorRef, editorActor])\n\n useEffect(() => {\n const subscription = syncActorRef.on('*', (event) => {\n switch (event.type) {\n case 'invalid value':\n props.editorActor.send({\n ...event,\n type: 'notify.invalid value',\n })\n break\n case 'value changed':\n props.editorActor.send({\n ...event,\n type: 'notify.value changed',\n })\n break\n case 'patch':\n props.editorActor.send({\n ...event,\n type: 'internal.patch',\n value: fromSlateValue(\n slateEditor.children,\n props.editorActor.getSnapshot().context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(slateEditor),\n ),\n })\n break\n\n default:\n props.editorActor.send(event)\n }\n })\n\n return () => {\n subscription.unsubscribe()\n }\n }, [props.editorActor, slateEditor, syncActorRef])\n\n useEffect(() => {\n syncActorRef.send({type: 'update readOnly', readOnly})\n }, [syncActorRef, readOnly])\n\n useEffect(() => {\n debug('Value from props changed, syncing new value')\n syncActorRef.send({type: 'update value', value: incomingValue})\n }, [syncActorRef, incomingValue])\n\n // Subscribe to, and handle changes from the editor\n useEffect(() => {\n debug('Subscribing to patch events')\n const sub = editorActor.on('internal.patch', (event) => {\n mutationActorRef.send({...event, type: 'patch'})\n })\n return () => {\n debug('Unsubscribing to patch events')\n sub.unsubscribe()\n }\n }, [editorActor, mutationActorRef, slateEditor])\n\n return null\n}\n\nSynchronizer.displayName = 'Synchronizer'\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 {sliceBlocks} from '../utils'\nimport {defineConverter} from './converter.types'\n\nexport const converterPortableText = defineConverter({\n mimeType: 'application/x-portable-text',\n serialize: ({snapshot, event}) => {\n const selection =\n snapshot.beta.internalDrag?.origin.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 = sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\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 /**\n * If we are dragging internally then we would like to keep the\n * dropped portable text as is.\n */\n refreshKeys: !snapshot.beta.hasTag?.('dragging internally'),\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 type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {sliceBlocks} from '../utils'\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 =\n snapshot.beta.internalDrag?.origin.selection ??\n 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 = sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\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 },\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 type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {sliceBlocks} from '../utils'\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 =\n snapshot.beta.internalDrag?.origin.selection ??\n 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 = sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\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 snapshot.beta.hasTag('dragging internally')\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 snapshot.beta.hasTag('dragging internally')\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 },\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 {\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 {EditorActor} from '../editor/editor-machine'\nimport type {PatchFunctions} from '../editor/plugins/createWithPatches'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {debugWithName} from './debug'\nimport {fromSlateValue} from './values'\n\nconst debug = debugWithName('operationToPatches')\n\nexport function createOperationToPatches(\n editorActor: EditorActor,\n): PatchFunctions {\n const textBlockName = editorActor.getSnapshot().context.schema.block.name\n function insertTextPatch(\n editor: PortableTextSlateEditor,\n operation: InsertTextOperation,\n beforeValue: Descendant[],\n ) {\n if (debug.enabled) {\n debug('Operation', JSON.stringify(operation, null, 2))\n }\n const block =\n editor.isTextBlock(editor.children[operation.path[0]]) &&\n editor.children[operation.path[0]]\n if (!block) {\n throw new Error('Could not find block')\n }\n const textChild =\n editor.isTextBlock(block) &&\n editor.isTextSpan(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 editor.isTextBlock(prevBlock) && prevBlock.children[operation.path[1]]\n const prevText = editor.isTextSpan(prevChild) ? prevChild.text : ''\n const patch = diffMatchPatch(prevText, textChild.text, path)\n return patch.value.length ? [patch] : []\n }\n\n function removeTextPatch(\n editor: PortableTextSlateEditor,\n operation: RemoveTextOperation,\n beforeValue: Descendant[],\n ) {\n const block = editor && editor.children[operation.path[0]]\n if (!block) {\n throw new Error('Could not find block')\n }\n const child =\n (editor.isTextBlock(block) && block.children[operation.path[1]]) ||\n undefined\n const textChild: PortableTextSpan | undefined = editor.isTextSpan(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 editor.isTextBlock(beforeBlock) && beforeBlock.children[operation.path[1]]\n const prevText = editor.isTextSpan(prevTextChild) && prevTextChild.text\n const patch = diffMatchPatch(prevText || '', textChild.text, path)\n return patch.value ? [patch] : []\n }\n\n function setNodePatch(\n editor: PortableTextSlateEditor,\n operation: SetNodeOperation,\n ) {\n if (operation.path.length === 1) {\n const block = editor.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 {...editor.children[operation.path[0]], ...operation.newProperties},\n isUndefined,\n ) as unknown as Descendant\n return [\n set(fromSlateValue([setNode], textBlockName)[0], [{_key: block._key}]),\n ]\n } else if (operation.path.length === 2) {\n const block = editor.children[operation.path[0]]\n if (editor.isTextBlock(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\n function insertNodePatch(\n editor: PortableTextSlateEditor,\n operation: InsertNodeOperation,\n beforeValue: Descendant[],\n ): Patch[] {\n const block = beforeValue[operation.path[0]]\n const isTextBlock = editor.isTextBlock(block)\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 =\n operation.path[0] === 0 ? block?._key : beforeBlock?._key\n if (targetKey) {\n return [\n insert(\n [fromSlateValue([operation.node as Descendant], textBlockName)[0]],\n position,\n [{_key: targetKey}],\n ),\n ]\n }\n return [\n setIfMissing(beforeValue, []),\n insert(\n [fromSlateValue([operation.node as Descendant], textBlockName)[0]],\n 'before',\n [operation.path[0]],\n ),\n ]\n } else if (\n isTextBlock &&\n operation.path.length === 2 &&\n editor.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: textBlockName,\n children: [node],\n },\n ],\n textBlockName,\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 debug(\n 'Something was inserted into a void block. Not producing editor patches.',\n )\n return []\n }\n\n function splitNodePatch(\n editor: PortableTextSlateEditor,\n operation: SplitNodeOperation,\n beforeValue: Descendant[],\n ) {\n const patches: Patch[] = []\n const splitBlock = editor.children[operation.path[0]]\n if (!editor.isTextBlock(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 (editor.isTextBlock(oldBlock)) {\n const targetValue = fromSlateValue(\n [editor.children[operation.path[0] + 1]],\n textBlockName,\n )[0]\n if (targetValue) {\n patches.push(\n insert([targetValue], 'after', [{_key: splitBlock._key}]),\n )\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 (editor.isTextSpan(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 textBlockName,\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\n function removeNodePatch(\n editor: PortableTextSlateEditor,\n operation: RemoveNodeOperation,\n beforeValue: Descendant[],\n ) {\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 (editor.isTextBlock(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 debug('Span not found in editor trying to remove node')\n return []\n } else {\n debug('Not creating patch inside object block')\n return []\n }\n }\n\n function mergeNodePatch(\n editor: PortableTextSlateEditor,\n operation: MergeNodeOperation,\n beforeValue: Descendant[],\n ) {\n const patches: Patch[] = []\n\n const block = beforeValue[operation.path[0]]\n const updatedBlock = editor.children[operation.path[0]]\n\n if (operation.path.length === 1) {\n if (block?._key) {\n const newBlock = fromSlateValue(\n [editor.children[operation.path[0] - 1]],\n textBlockName,\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 editor.isTextBlock(block) &&\n editor.isTextBlock(updatedBlock) &&\n operation.path.length === 2\n ) {\n const updatedSpan =\n updatedBlock.children[operation.path[1] - 1] &&\n editor.isTextSpan(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 editor.isTextSpan(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 } else {\n debug(\"Void nodes can't be merged, not creating any patches\")\n }\n return patches\n }\n\n function moveNodePatch(\n editor: PortableTextSlateEditor,\n operation: MoveNodeOperation,\n beforeValue: Descendant[],\n ) {\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], textBlockName)[0]], position, [\n {_key: targetBlock._key},\n ]),\n )\n } else if (\n operation.path.length === 2 &&\n editor.isTextBlock(block) &&\n editor.isTextBlock(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\n ? 'after'\n : 'before'\n const childToInsert = (\n fromSlateValue([block], textBlockName)[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\n return {\n insertNodePatch,\n insertTextPatch,\n mergeNodePatch,\n moveNodePatch,\n removeNodePatch,\n removeTextPatch,\n setNodePatch,\n splitNodePatch,\n }\n}\n","import {Transforms} from 'slate'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const insertTextActionImplementation: BehaviorActionImplementation<\n 'insert.text'\n> = ({action}) => {\n if (action.editor.marks) {\n Transforms.insertNodes(action.editor, {\n text: action.text,\n ...action.editor.marks,\n })\n } else {\n Transforms.insertText(action.editor, action.text)\n }\n\n action.editor.marks = null\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","/**\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 type {BehaviorActionImplementation} from '../../behavior-actions/behavior.actions'\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 {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\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 const marks = Editor.marks(editor)\n\n if (\n marks &&\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 // If the editor has marks and we are not visually moving the\n // selection then we just abort. Otherwise the marks would be\n // cleared and we can't use them for the possible subsequent insert\n // operation.\n if (movedToNextSpan || movedToPreviousSpan) {\n return\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 {selection} = editor\n const collapsedSelection = selection\n ? Range.isCollapsed(selection)\n : false\n\n if (selection && collapsedSelection) {\n const [_block, blockPath] = Editor.node(editor, selection, {\n depth: 1,\n })\n\n const [span, spanPath] =\n Array.from(\n Editor.nodes(editor, {\n mode: 'lowest',\n at: selection.focus,\n match: (n) => editor.isTextSpan(n),\n voids: false,\n }),\n )[0] ?? ([undefined, undefined] as const)\n\n const marks = span.marks ?? []\n const marksWithoutAnnotations = marks.filter((mark) =>\n decorators.includes(mark),\n )\n const spanHasAnnotations =\n marks.length > marksWithoutAnnotations.length\n\n const spanIsEmpty = span.text.length === 0\n\n const atTheBeginningOfSpan = selection.anchor.offset === 0\n const atTheEndOfSpan = selection.anchor.offset === span.text.length\n\n const previousSpan = getPreviousSpan({editor, blockPath, spanPath})\n const nextSpan = getNextSpan({editor, blockPath, spanPath})\n const nextSpanAnnotations =\n nextSpan?.marks?.filter((mark) => !decorators.includes(mark)) ?? []\n const spanAnnotations = marks.filter(\n (mark) => !decorators.includes(mark),\n )\n\n const previousSpanHasAnnotations = previousSpan\n ? previousSpan.marks?.some((mark) => !decorators.includes(mark))\n : false\n const previousSpanHasSameAnnotations = previousSpan\n ? previousSpan.marks\n ?.filter((mark) => !decorators.includes(mark))\n .every((mark) => marks.includes(mark))\n : false\n const previousSpanHasSameAnnotation = previousSpan\n ? previousSpan.marks?.some(\n (mark) => !decorators.includes(mark) && marks.includes(mark),\n )\n : false\n\n const previousSpanHasSameMarks = previousSpan\n ? previousSpan.marks?.every((mark) => marks.includes(mark))\n : false\n const nextSpanSharesSomeAnnotations = spanAnnotations.some((mark) =>\n nextSpanAnnotations?.includes(mark),\n )\n\n if (spanHasAnnotations && !spanIsEmpty) {\n if (atTheBeginningOfSpan) {\n if (previousSpanHasSameMarks) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: previousSpan?.marks ?? [],\n })\n return\n } else if (previousSpanHasSameAnnotations) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: previousSpan?.marks ?? [],\n })\n return\n } else if (previousSpanHasSameAnnotation) {\n apply(op)\n return\n } else if (!previousSpan) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: [],\n })\n return\n }\n }\n\n if (atTheEndOfSpan) {\n if (\n (nextSpan &&\n nextSpanSharesSomeAnnotations &&\n nextSpanAnnotations.length < spanAnnotations.length) ||\n !nextSpanSharesSomeAnnotations\n ) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: nextSpan?.marks ?? [],\n })\n return\n }\n\n if (!nextSpan) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: [],\n })\n return\n }\n }\n }\n\n if (atTheBeginningOfSpan && !spanIsEmpty && !!previousSpan) {\n Transforms.insertNodes(editor, {\n _type: 'span',\n _key: editorActor.getSnapshot().context.keyGenerator(),\n text: op.text,\n marks: previousSpanHasAnnotations\n ? []\n : (previousSpan.marks ?? []).filter((mark) =>\n decorators.includes(mark),\n ),\n })\n return\n }\n }\n }\n\n if (op.type === 'remove_text') {\n const {selection} = editor\n\n if (selection && Range.isExpanded(selection)) {\n const [block, blockPath] = Editor.node(editor, selection, {\n depth: 1,\n })\n const [span, spanPath] =\n Array.from(\n Editor.nodes(editor, {\n mode: 'lowest',\n at: {path: op.path, offset: op.offset},\n match: (n) => editor.isTextSpan(n),\n voids: false,\n }),\n )[0] ?? ([undefined, undefined] as const)\n\n if (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 marksWithoutAnnotationMarks: string[] = (\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n ).filter((mark) => decorators.includes(mark))\n\n Editor.withoutNormalizing(editor, () => {\n apply(op)\n Transforms.setNodes(\n editor,\n {marks: marksWithoutAnnotationMarks},\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 removeDecoratorActionImplementation: BehaviorActionImplementation<\n 'decorator.remove'\n> = ({action}) => {\n const editor = action.editor\n const mark = action.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 const existingMarks: string[] =\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n const marks = {\n ...(Editor.marks(editor) || {}),\n marks: existingMarks.filter((eMark) => eMark !== mark),\n } as Text\n editor.marks = {marks: marks.marks, _type: 'span'} as Text\n }\n }\n\n if (editor.selection) {\n // Reselect\n const selection = editor.selection\n editor.selection = {...selection}\n }\n }\n}\n\nexport function isDecoratorActive({\n editor,\n decorator,\n}: {\n editor: PortableTextSlateEditor\n decorator: string\n}) {\n if (!editor.selection) {\n return false\n }\n\n const selectedTextNodes = Array.from(\n Editor.nodes(editor, {match: Text.isText, at: editor.selection}),\n )\n\n if (selectedTextNodes.length === 0) {\n return false\n }\n\n if (Range.isExpanded(editor.selection)) {\n return selectedTextNodes.every((n) => {\n const [node] = n\n\n return node.marks?.includes(decorator)\n })\n }\n\n return (\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n ).includes(decorator)\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 {BehaviorActionImplementation} from './behavior.actions'\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 addAnnotationActionImplementation: BehaviorActionImplementation<\n 'annotation.add',\n AddedAnnotationPaths | undefined\n> = ({context, action}) => {\n const parsedAnnotation = parseAnnotation({\n annotation: {\n _type: action.annotation.name,\n ...action.annotation.value,\n },\n context,\n options: {refreshKeys: false},\n })\n\n if (!parsedAnnotation) {\n throw new Error(\n `Failed to parse annotation ${JSON.stringify(action.annotation)}`,\n )\n }\n\n const editor = action.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 {BehaviorActionImplementation} from './behavior.actions'\n\nexport const removeAnnotationActionImplementation: BehaviorActionImplementation<\n 'annotation.remove'\n> = ({action}) => {\n const editor = action.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 === action.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 !== action.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 {isKeySegment, type Path} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport {Editor, Element, type Descendant, type Path as SlatePath} from 'slate'\n\nexport function toSlatePath(path: Path, editor: Editor): SlatePath {\n if (!editor) {\n return []\n }\n const [block, blockPath] = Array.from(\n Editor.nodes(editor, {\n at: [],\n match: (n) =>\n isKeySegment(path[0]) && (n as Descendant)._key === path[0]._key,\n }),\n )[0] || [undefined, undefined]\n\n if (!block || !Element.isElement(block)) {\n return []\n }\n\n if (editor.isVoid(block)) {\n return [blockPath[0], 0]\n }\n\n const childPath = [path[2]]\n const childIndex = block.children.findIndex((child) =>\n isEqual([{_key: child._key}], childPath),\n )\n\n if (childIndex >= 0 && block.children[childIndex]) {\n const child = block.children[childIndex]\n if (Element.isElement(child) && editor.isVoid(child)) {\n return blockPath.concat(childIndex).concat(0)\n }\n return blockPath.concat(childIndex)\n }\n\n return [blockPath[0], 0]\n}\n","import {Point, type Editor, type Operation, type Range} from 'slate'\nimport type {EditorSelection} from '../types/editor'\nimport {toSlatePath} from './paths'\n\nexport interface ObjectWithKeyAndType {\n _key: string\n _type: string\n children?: ObjectWithKeyAndType[]\n}\n\nexport function toSlateRange(\n selection: EditorSelection,\n editor: Editor,\n): Range | null {\n if (!selection || !editor) {\n return null\n }\n const anchor = {\n path: toSlatePath(selection.anchor.path, editor),\n offset: selection.anchor.offset,\n }\n const focus = {\n path: toSlatePath(selection.focus.path, editor),\n offset: selection.focus.offset,\n }\n if (focus.path.length === 0 || anchor.path.length === 0) {\n return null\n }\n const range = anchor && focus ? {anchor, focus} : null\n return range\n}\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 {Editor, Transforms, type Element as SlateElement} from 'slate'\nimport {parseBlock} from '../internal-utils/parse-blocks'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport {fromSlateValue, toSlateValue} from '../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const blockSetBehaviorActionImplementation: BehaviorActionImplementation<\n 'block.set'\n> = ({context, action}) => {\n const location = toSlateRange(\n {\n anchor: {path: action.at, offset: 0},\n focus: {path: action.at, offset: 0},\n },\n action.editor,\n )\n\n if (!location) {\n throw new Error(\n `Unable to convert ${JSON.stringify(action.at)} into a Slate Range`,\n )\n }\n\n const blockEntry = Editor.node(action.editor, location, {depth: 1})\n const block = blockEntry?.[0]\n\n if (!block) {\n throw new Error(`Unable to find block at ${JSON.stringify(action.at)}`)\n }\n\n const parsedBlock = fromSlateValue(\n [block],\n context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(action.editor),\n ).at(0)\n\n if (!parsedBlock) {\n throw new Error(`Unable to parse block at ${JSON.stringify(action.at)}`)\n }\n\n const {_type, ...filteredProps} = action.props\n\n const updatedBlock = parseBlock({\n context,\n block: {\n ...parsedBlock,\n ...filteredProps,\n },\n options: {refreshKeys: false},\n })\n\n if (!updatedBlock) {\n throw new Error(`Unable to update block at ${JSON.stringify(action.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(action.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/ranges'\nimport {fromSlateValue} from '../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../internal-utils/weakMaps'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const blockUnsetBehaviorActionImplementation: BehaviorActionImplementation<\n 'block.unset'\n> = ({context, action}) => {\n const location = toSlateRange(\n {\n anchor: {path: action.at, offset: 0},\n focus: {path: action.at, offset: 0},\n },\n action.editor,\n )\n\n if (!location) {\n throw new Error(\n `Unable to convert ${JSON.stringify(action.at)} into a Slate Range`,\n )\n }\n\n const blockEntry = Editor.node(action.editor, location, {depth: 1})\n const block = blockEntry?.[0]\n\n if (!block) {\n throw new Error(`Unable to find block at ${JSON.stringify(action.at)}`)\n }\n\n const parsedBlock = fromSlateValue(\n [block],\n context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(action.editor),\n ).at(0)\n\n if (!parsedBlock) {\n throw new Error(`Unable to parse block at ${JSON.stringify(action.at)}`)\n }\n\n if (isTextBlock(context, parsedBlock)) {\n const propsToRemove = action.props.filter((prop) => prop !== '_type')\n\n const updatedTextBlock = parseBlock({\n context,\n block: omit(parsedBlock, propsToRemove),\n options: {refreshKeys: false},\n })\n\n if (!updatedTextBlock) {\n throw new Error(`Unable to update block at ${JSON.stringify(action.at)}`)\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(action.editor, propsToSet, {at: location})\n\n return\n }\n\n const updatedBlockObject = parseBlock({\n context,\n block: omit(\n parsedBlock,\n action.props.filter((prop) => prop !== '_type'),\n ),\n options: {refreshKeys: false},\n })\n\n if (!updatedBlockObject) {\n throw new Error(`Unable to update block at ${JSON.stringify(action.at)}`)\n }\n\n const {_type, _key, ...props} = updatedBlockObject\n\n Transforms.setNodes(\n action.editor,\n {\n _type,\n _key,\n value: props,\n },\n {at: location},\n )\n}\n","import {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 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 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\nfunction 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 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 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, Range, Text, Transforms} from 'slate'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\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 {BehaviorActionImplementation} from './behavior.actions'\n\nexport const decoratorAddActionImplementation: BehaviorActionImplementation<\n 'decorator.add'\n> = ({context, action}) => {\n const editor = action.editor\n const mark = action.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 = action.at?.anchor\n ? utils.blockOffsetToSpanSelectionPoint({\n context: {\n ...context,\n value,\n },\n blockOffset: action.at.anchor,\n direction: 'backward',\n })\n : undefined\n const manualFocus = action.at?.focus\n ? utils.blockOffsetToSpanSelectionPoint({\n context: {\n ...context,\n value,\n },\n blockOffset: action.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(manualSelection, action.editor) ?? 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 beta: {hasTag: () => false, internalDrag: undefined},\n context: {\n activeDecorators: [],\n converters: [],\n keyGenerator: context.keyGenerator,\n readOnly: false,\n schema: context.schema,\n selection: newSelection,\n value: newValue,\n },\n })\n\n if (!trimmedSelection) {\n throw new Error('Unable to find trimmed selection')\n }\n\n const newRange = toSlateRange(trimmedSelection, editor)\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 const existingMarks: string[] =\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n const marks = {\n ...(Editor.marks(editor) || {}),\n marks: [...existingMarks, mark],\n }\n editor.marks = marks as Text\n }\n }\n\n if (editor.selection) {\n // Reselect\n const selection = editor.selection\n editor.selection = {...selection}\n }\n}\n","import {Range} from 'slate'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport {getFocusBlock, getFocusChild} from '../internal-utils/slate-utils'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const deleteActionImplementation: BehaviorActionImplementation<\n 'delete'\n> = ({context, action}) => {\n const range = toSlateRange(action.at, action.editor)\n\n if (!range) {\n throw new Error(\n `Failed to get Slate Range for selection ${JSON.stringify(action.at)}`,\n )\n }\n\n if (Range.isCollapsed(range)) {\n const [focusBlock] = getFocusBlock({\n editor: {...action.editor, selection: range},\n })\n const [focusChild] = getFocusChild({\n editor: {...action.editor, selection: range},\n })\n\n if (\n focusBlock &&\n focusBlock._type === context.schema.block.name &&\n focusChild &&\n focusChild._type === context.schema.span.name\n ) {\n return\n }\n }\n\n action.editor.delete({at: range})\n}\n","import type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const deleteBackwardActionImplementation: BehaviorActionImplementation<\n 'delete.backward'\n> = ({action}) => {\n action.editor.deleteBackward(action.unit)\n}\n","import {Transforms} from 'slate'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const deleteBlockActionImplementation: BehaviorActionImplementation<\n 'delete.block'\n> = ({action}) => {\n const range = toSlateRange(\n {\n anchor: {path: action.at, offset: 0},\n focus: {path: action.at, offset: 0},\n },\n action.editor,\n )\n\n if (!range) {\n console.error('Unable to find Slate range from selection points')\n return\n }\n\n Transforms.removeNodes(action.editor, {\n at: range,\n })\n}\n","import type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const deleteForwardActionImplementation: BehaviorActionImplementation<\n 'delete.forward'\n> = ({action}) => {\n action.editor.deleteForward(action.unit)\n}\n","import {Editor, Transforms, type Element} from 'slate'\nimport {parseInlineObject} from '../internal-utils/parse-blocks'\nimport {toSlateValue} from '../internal-utils/values'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const insertInlineObjectActionImplementation: BehaviorActionImplementation<\n 'insert.inline object'\n> = ({context, action}) => {\n const parsedInlineObject = parseInlineObject({\n context,\n inlineObject: {\n _type: action.inlineObject.name,\n ...(action.inlineObject.value ?? {}),\n },\n options: {refreshKeys: false},\n })\n\n if (!parsedInlineObject) {\n throw new Error(\n `Failed to parse inline object ${JSON.stringify(action.inlineObject)}`,\n )\n }\n\n if (!action.editor.selection) {\n console.error('Unable to insert inline object without selection')\n return\n }\n\n const [focusTextBlock] = Array.from(\n Editor.nodes(action.editor, {\n at: action.editor.selection.focus.path,\n match: (node) => action.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(action.editor, child)\n}\n","import {Editor, Transforms} from 'slate'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const insertSpanActionImplementation: BehaviorActionImplementation<\n 'insert.span'\n> = ({context, action}) => {\n if (!action.editor.selection) {\n console.error('Unable to perform action without selection', action)\n return\n }\n\n const [focusBlock, focusBlockPath] = Array.from(\n Editor.nodes(action.editor, {\n at: action.editor.selection.focus.path,\n match: (node) => action.editor.isTextBlock(node),\n }),\n )[0] ?? [undefined, undefined]\n\n if (!focusBlock || !focusBlockPath) {\n console.error('Unable to perform action without focus block', action)\n return\n }\n\n const markDefs = focusBlock.markDefs ?? []\n const annotations = action.annotations\n ? action.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(action.editor, {\n markDefs: [...markDefs, ...annotations],\n })\n }\n\n Transforms.insertNodes(action.editor, {\n _type: 'span',\n _key: context.keyGenerator(),\n text: action.text,\n marks: [\n ...(annotations?.map((annotation) => annotation._key) ?? []),\n ...(action.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 type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const insertBlockActionImplementation: BehaviorActionImplementation<\n 'insert.block'\n> = ({context, action}) => {\n const parsedBlock = parseBlock({\n block: action.block,\n context,\n options: {refreshKeys: false},\n })\n\n if (!parsedBlock) {\n throw new Error(`Failed to parse block ${JSON.stringify(action.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: action.placement,\n select: action.select ?? 'start',\n editor: action.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, 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 } 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 (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 (isEqualToEmptyEditor([endBlock], schema)) {\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.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 {BehaviorActionImplementation} from './behavior.actions'\n\nexport const moveBackwardActionImplementation: BehaviorActionImplementation<\n 'move.backward'\n> = ({action}) => {\n Transforms.move(action.editor, {\n unit: 'character',\n distance: action.distance,\n reverse: true,\n })\n}\n","import {Transforms} from 'slate'\nimport {toSlatePath} from '../internal-utils/paths'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const moveBlockActionImplementation: BehaviorActionImplementation<\n 'move.block'\n> = ({action}) => {\n const at = [toSlatePath(action.at, action.editor)[0]]\n const to = [toSlatePath(action.to, action.editor)[0]]\n\n Transforms.moveNodes(action.editor, {\n at,\n to,\n mode: 'highest',\n })\n}\n","import {Transforms} from 'slate'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const moveForwardActionImplementation: BehaviorActionImplementation<\n 'move.forward'\n> = ({action}) => {\n Transforms.move(action.editor, {\n unit: 'character',\n distance: action.distance,\n })\n}\n","import {Transforms} from 'slate'\nimport {toSlateRange} from '../internal-utils/ranges'\nimport type {BehaviorActionImplementation} from './behavior.actions'\n\nexport const selectActionImplementation: BehaviorActionImplementation<\n 'select'\n> = ({action}) => {\n const newSelection = toSlateRange(action.at, action.editor)\n\n if (newSelection) {\n Transforms.select(action.editor, newSelection)\n } else {\n Transforms.deselect(action.editor)\n }\n}\n","import type {InternalBehaviorAction} from '../behaviors/behavior.types.action'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {removeDecoratorActionImplementation} from '../editor/plugins/createWithPortableTextMarkModel'\nimport {\n historyRedoActionImplementation,\n historyUndoActionImplementation,\n} from '../editor/plugins/createWithUndoRedo'\nimport type {PickFromUnion} from '../type-utils'\nimport {addAnnotationActionImplementation} from './behavior.action.annotation.add'\nimport {removeAnnotationActionImplementation} from './behavior.action.annotation.remove'\nimport {blockSetBehaviorActionImplementation} from './behavior.action.block.set'\nimport {blockUnsetBehaviorActionImplementation} from './behavior.action.block.unset'\nimport {decoratorAddActionImplementation} from './behavior.action.decorator.add'\nimport {deleteActionImplementation} from './behavior.action.delete'\nimport {deleteBackwardActionImplementation} from './behavior.action.delete.backward'\nimport {deleteBlockActionImplementation} from './behavior.action.delete.block'\nimport {deleteForwardActionImplementation} from './behavior.action.delete.forward'\nimport {insertInlineObjectActionImplementation} from './behavior.action.insert-inline-object'\nimport {insertSpanActionImplementation} from './behavior.action.insert-span'\nimport {insertBlockActionImplementation} from './behavior.action.insert.block'\nimport {insertTextActionImplementation} from './behavior.action.insert.text'\nimport {moveBackwardActionImplementation} from './behavior.action.move.backward'\nimport {moveBlockActionImplementation} from './behavior.action.move.block'\nimport {moveForwardActionImplementation} from './behavior.action.move.forward'\nimport {selectActionImplementation} from './behavior.action.select'\n\nexport type BehaviorActionImplementationContext = Pick<\n EditorContext,\n 'keyGenerator' | 'schema'\n>\n\nexport type BehaviorActionImplementation<\n TBehaviorActionType extends InternalBehaviorAction['type'],\n TReturnType = void,\n> = ({\n context,\n action,\n}: {\n context: BehaviorActionImplementationContext\n action: PickFromUnion<InternalBehaviorAction, 'type', TBehaviorActionType>\n}) => TReturnType\n\ntype BehaviorActionImplementations = {\n [TBehaviorActionType in InternalBehaviorAction['type']]: BehaviorActionImplementation<TBehaviorActionType>\n}\n\nconst behaviorActionImplementations: BehaviorActionImplementations = {\n 'annotation.add': addAnnotationActionImplementation,\n 'annotation.remove': removeAnnotationActionImplementation,\n 'block.set': blockSetBehaviorActionImplementation,\n 'block.unset': blockUnsetBehaviorActionImplementation,\n 'decorator.add': decoratorAddActionImplementation,\n 'decorator.remove': removeDecoratorActionImplementation,\n 'delete': deleteActionImplementation,\n 'delete.backward': deleteBackwardActionImplementation,\n 'delete.forward': deleteForwardActionImplementation,\n 'delete.block': deleteBlockActionImplementation,\n 'history.redo': historyRedoActionImplementation,\n 'history.undo': historyUndoActionImplementation,\n 'insert.block': insertBlockActionImplementation,\n 'insert.inline object': insertInlineObjectActionImplementation,\n 'insert.span': insertSpanActionImplementation,\n 'insert.text': insertTextActionImplementation,\n 'move.backward': moveBackwardActionImplementation,\n 'move.block': moveBlockActionImplementation,\n 'move.forward': moveForwardActionImplementation,\n 'select': selectActionImplementation,\n}\n\nexport function performAction({\n context,\n action,\n}: {\n context: BehaviorActionImplementationContext\n action: InternalBehaviorAction\n}) {\n switch (action.type) {\n case 'annotation.add': {\n behaviorActionImplementations['annotation.add']({\n context,\n action,\n })\n break\n }\n case 'annotation.remove': {\n behaviorActionImplementations['annotation.remove']({\n context,\n action,\n })\n break\n }\n case 'block.set': {\n behaviorActionImplementations['block.set']({\n context,\n action,\n })\n break\n }\n case 'block.unset': {\n behaviorActionImplementations['block.unset']({\n context,\n action,\n })\n break\n }\n case 'decorator.add': {\n behaviorActionImplementations['decorator.add']({\n context,\n action,\n })\n break\n }\n case 'decorator.remove': {\n behaviorActionImplementations['decorator.remove']({\n context,\n action,\n })\n break\n }\n case 'delete': {\n behaviorActionImplementations.delete({\n context,\n action,\n })\n break\n }\n case 'delete.backward': {\n behaviorActionImplementations['delete.backward']({\n context,\n action,\n })\n break\n }\n case 'delete.block': {\n behaviorActionImplementations['delete.block']({\n context,\n action,\n })\n break\n }\n case 'delete.forward': {\n behaviorActionImplementations['delete.forward']({\n context,\n action,\n })\n break\n }\n case 'history.redo': {\n behaviorActionImplementations['history.redo']({\n context,\n action,\n })\n break\n }\n case 'history.undo': {\n behaviorActionImplementations['history.undo']({\n context,\n action,\n })\n break\n }\n case 'insert.block': {\n behaviorActionImplementations['insert.block']({\n context,\n action,\n })\n break\n }\n case 'insert.inline object': {\n behaviorActionImplementations['insert.inline object']({\n context,\n action,\n })\n break\n }\n case 'insert.span': {\n behaviorActionImplementations['insert.span']({\n context,\n action,\n })\n break\n }\n case 'insert.text': {\n behaviorActionImplementations['insert.text']({\n context,\n action,\n })\n break\n }\n case 'move.backward': {\n behaviorActionImplementations['move.backward']({\n context,\n action,\n })\n break\n }\n case 'move.block': {\n behaviorActionImplementations['move.block']({\n context,\n action,\n })\n break\n }\n case 'move.forward': {\n behaviorActionImplementations['move.forward']({\n context,\n action,\n })\n break\n }\n default: {\n behaviorActionImplementations.select({\n context,\n action,\n })\n break\n }\n }\n}\n","import {Editor} from 'slate'\nimport {insertTextActionImplementation} from '../../behavior-actions/behavior.action.insert.text'\nimport {performAction} from '../../behavior-actions/behavior.actions'\nimport {slateRangeToSelection} from '../../internal-utils/slate-utils'\nimport type {EditorActor} from '../editor-machine'\nimport {isApplyingBehaviorActions} from '../with-applying-behavior-actions'\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 {deleteBackward, deleteForward, insertBreak, insertText, select} =\n editor\n\n editor.deleteBackward = (unit) => {\n if (isApplyingBehaviorActions(editor)) {\n deleteBackward(unit)\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 (isApplyingBehaviorActions(editor)) {\n deleteForward(unit)\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 (isApplyingBehaviorActions(editor)) {\n 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 (isApplyingBehaviorActions(editor)) {\n throw new Error('Unexpected call to .insertData(...)')\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 (isApplyingBehaviorActions(editor)) {\n insertTextActionImplementation({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n action: {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, options) => {\n if (isApplyingBehaviorActions(editor)) {\n insertText(text, options)\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 (isApplyingBehaviorActions(editor)) {\n performAction({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n action: {\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 (isApplyingBehaviorActions(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.warn('Unexpected call to .setFragmentData(...)')\n return\n }\n\n editor.undo = () => {\n if (isApplyingBehaviorActions(editor)) {\n performAction({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n action: {\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 {\n KeyedSegment,\n Path,\n PathSegment,\n PortableTextBlock,\n PortableTextChild,\n} from '@sanity/types'\nimport {\n Element,\n Text,\n Transforms,\n type Descendant,\n type Node,\n type Path as SlatePath,\n} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {debugWithName} from './debug'\nimport {toSlateValue} from './values'\nimport {KEY_TO_SLATE_ELEMENT} from './weakMaps'\n\nconst debug = debugWithName('applyPatches')\nconst debugVerbose = debug.enabled && true\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 // Save some CPU cycles by not stringifying unless enabled\n if (debugVerbose) {\n debug(\n '\\n\\nNEW PATCH =============================================================',\n )\n debug(JSON.stringify(patch, null, 2))\n }\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 default:\n debug('Unhandled patch', patch.type)\n }\n } catch (err) {\n console.error(err)\n }\n\n return changed\n }\n}\n\n/**\n * Apply a remote diff match patch to the current PTE instance.\n * Note meant for external consumption, only exported for testing purposes.\n *\n * @param editor - Portable text slate editor instance\n * @param patch - The PTE diff match patch operation to apply\n * @returns true if the patch was applied, false otherwise\n * @internal\n */\nexport function diffMatchPatch(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection' | 'onChange'\n >,\n patch: DiffMatchPatch,\n): boolean {\n const {block, child, childPath} = findBlockAndChildFromPath(\n editor,\n patch.path,\n )\n if (!block) {\n debug('Block not found')\n return false\n }\n if (!child || !childPath) {\n debug('Child not found')\n return false\n }\n const isSpanTextDiffMatchPatch =\n block &&\n editor.isTextBlock(block) &&\n patch.path.length === 4 &&\n patch.path[1] === 'children' &&\n patch.path[3] === 'text'\n\n if (!isSpanTextDiffMatchPatch || !Text.isText(child)) {\n return false\n }\n\n const patches = parsePatch(patch.value)\n const [newValue] = diffMatchPatchApplyPatches(patches, child.text, {\n allowExceedingIndices: true,\n })\n const diff = cleanupEfficiency(makeDiff(child.text, newValue), 5)\n\n debugState(editor, 'before')\n let offset = 0\n for (const [op, text] of diff) {\n if (op === DIFF_INSERT) {\n editor.apply({type: 'insert_text', path: childPath, offset, text})\n offset += text.length\n } else if (op === DIFF_DELETE) {\n editor.apply({type: 'remove_text', path: childPath, offset: offset, text})\n } else if (op === DIFF_EQUAL) {\n offset += text.length\n }\n }\n debugState(editor, 'after')\n\n return true\n}\n\nfunction insertPatch(\n editor: PortableTextSlateEditor,\n patch: InsertPatch,\n schema: EditorSchema,\n) {\n const {\n block: targetBlock,\n child: targetChild,\n blockPath: targetBlockPath,\n childPath: targetChildPath,\n } = findBlockAndChildFromPath(editor, patch.path)\n if (!targetBlock || !targetBlockPath) {\n debug('Block not found')\n return false\n }\n if (patch.path.length > 1 && patch.path[1] !== 'children') {\n debug('Ignoring patch targeting void value')\n return false\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 = targetBlockPath[0]\n const normalizedIdx =\n position === 'after' ? targetBlockIndex + 1 : targetBlockIndex\n debug(`Inserting blocks at path [${normalizedIdx}]`)\n debugState(editor, 'before')\n Transforms.insertNodes(editor, blocksToInsert, {at: [normalizedIdx]})\n debugState(editor, 'after')\n return true\n }\n // Insert children\n const {items, position} = patch\n if (!targetChild || !targetChildPath) {\n debug('Child not found')\n return false\n }\n const childrenToInsert =\n targetBlock &&\n toSlateValue(\n [{...targetBlock, children: items as PortableTextChild[]}],\n {schemaTypes: schema},\n KEY_TO_SLATE_ELEMENT.get(editor),\n )\n const targetChildIndex = targetChildPath[1]\n const normalizedIdx =\n position === 'after' ? targetChildIndex + 1 : targetChildIndex\n const childInsertPath = [targetChildPath[0], normalizedIdx]\n debug(`Inserting children at path ${childInsertPath}`)\n debugState(editor, 'before')\n if (childrenToInsert && Element.isElement(childrenToInsert[0])) {\n Transforms.insertNodes(editor, childrenToInsert[0].children, {\n at: childInsertPath,\n })\n }\n debugState(editor, 'after')\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 const {block, blockPath, child, childPath} = findBlockAndChildFromPath(\n editor,\n patch.path,\n )\n\n if (!block) {\n debug('Block not found')\n return false\n }\n const isTextBlock = editor.isTextBlock(block)\n\n // Ignore patches targeting nested void data, like 'markDefs'\n if (isTextBlock && patch.path.length > 1 && patch.path[1] !== 'children') {\n debug('Ignoring setting void value')\n return false\n }\n\n debugState(editor, 'before')\n\n // If this is targeting a text block child\n if (isTextBlock && child && childPath) {\n if (Text.isText(value) && Text.isText(child)) {\n const newText = child.text\n const oldText = value.text\n if (oldText !== newText) {\n debug('Setting text property')\n editor.apply({\n type: 'remove_text',\n path: childPath,\n offset: 0,\n text: newText,\n })\n editor.apply({\n type: 'insert_text',\n path: childPath,\n offset: 0,\n text: value.text,\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 debug('Setting non-text property')\n editor.apply({\n type: 'set_node',\n path: childPath,\n properties: {},\n newProperties: value as Partial<Node>,\n })\n }\n return true\n } else if (Element.isElement(block) && patch.path.length === 1 && blockPath) {\n debug('Setting block property')\n const {children, ...nextRest} = value as unknown as PortableTextBlock\n const {children: prevChildren, ...prevRest} = block || {children: undefined}\n // Set any block properties\n editor.apply({\n type: 'set_node',\n path: blockPath,\n properties: {...prevRest},\n newProperties: nextRest,\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 debug('Setting children')\n block.children.forEach((c, cIndex) => {\n editor.apply({\n type: 'remove_node',\n path: blockPath.concat(block.children.length - 1 - cIndex),\n node: c,\n })\n })\n if (Array.isArray(children)) {\n children.forEach((c, cIndex) => {\n editor.apply({\n type: 'insert_node',\n path: blockPath.concat(cIndex),\n node: c,\n })\n })\n }\n } else if (block && 'value' in block) {\n if (patch.path.length > 1 && patch.path[1] !== 'children') {\n const newVal = applyAll(block.value, [\n {\n ...patch,\n path: patch.path.slice(1),\n },\n ])\n Transforms.setNodes(editor, {...block, value: newVal}, {at: blockPath})\n } else {\n return false\n }\n }\n debugState(editor, 'after')\n return true\n}\n\nfunction unsetPatch(editor: PortableTextSlateEditor, patch: UnsetPatch) {\n // Value\n if (patch.path.length === 0) {\n debug('Removing everything')\n debugState(editor, 'before')\n const previousSelection = editor.selection\n Transforms.deselect(editor)\n editor.children.forEach((_child, i) => {\n Transforms.removeNodes(editor, {at: [i]})\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 debugState(editor, 'after')\n return true\n }\n const {block, blockPath, child, childPath} = findBlockAndChildFromPath(\n editor,\n patch.path,\n )\n\n // Single blocks\n if (patch.path.length === 1) {\n if (!block || !blockPath) {\n debug('Block not found')\n return false\n }\n const blockIndex = blockPath[0]\n debug(`Removing block at path [${blockIndex}]`)\n debugState(editor, 'before')\n\n Transforms.removeNodes(editor, {at: [blockIndex]})\n debugState(editor, 'after')\n return true\n }\n\n // Unset on text block children\n if (\n editor.isTextBlock(block) &&\n patch.path[1] === 'children' &&\n patch.path.length === 3\n ) {\n if (!child || !childPath) {\n debug('Child not found')\n return false\n }\n debug(`Unsetting child at path ${JSON.stringify(childPath)}`)\n debugState(editor, 'before')\n if (debugVerbose) {\n debug(`Removing child at path ${JSON.stringify(childPath)}`)\n }\n Transforms.removeNodes(editor, {at: childPath})\n debugState(editor, 'after')\n return true\n }\n return false\n}\n\nfunction isKeyedSegment(segment: PathSegment): segment is KeyedSegment {\n return typeof segment === 'object' && '_key' in segment\n}\n\nfunction debugState(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection'\n >,\n stateName: string,\n) {\n if (!debugVerbose) {\n return\n }\n\n debug(`Children ${stateName}:`, JSON.stringify(editor.children, null, 2))\n debug(`Selection ${stateName}: `, JSON.stringify(editor.selection, null, 2))\n}\n\nfunction findBlockFromPath(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection' | 'onChange'\n >,\n path: Path,\n): {block?: Descendant; path?: SlatePath} {\n let blockIndex = -1\n const block = editor.children.find((node: Descendant, index: number) => {\n const isMatch = isKeyedSegment(path[0])\n ? node._key === path[0]._key\n : index === path[0]\n if (isMatch) {\n blockIndex = index\n }\n return isMatch\n })\n if (!block) {\n return {}\n }\n return {block, path: [blockIndex] as SlatePath}\n}\n\nfunction findBlockAndChildFromPath(\n editor: Pick<\n PortableTextSlateEditor,\n 'children' | 'isTextBlock' | 'apply' | 'selection' | 'onChange'\n >,\n path: Path,\n): {\n child?: Descendant\n childPath?: SlatePath\n block?: Descendant\n blockPath?: SlatePath\n} {\n const {block, path: blockPath} = findBlockFromPath(editor, path)\n if (!(Element.isElement(block) && path[1] === 'children')) {\n return {block, blockPath, child: undefined, childPath: undefined}\n }\n let childIndex = -1\n const child = block.children.find((node, index: number) => {\n const isMatch = isKeyedSegment(path[2])\n ? node._key === path[2]._key\n : index === path[2]\n if (isMatch) {\n childIndex = index\n }\n return isMatch\n })\n if (!child) {\n return {block, blockPath, child: undefined, childPath: undefined}\n }\n return {\n block,\n child,\n blockPath,\n childPath: blockPath?.concat(childIndex) as SlatePath,\n }\n}\n","import {insert, setIfMissing, unset, type Patch} from '@portabletext/patches'\nimport {\n Editor,\n type Descendant,\n type InsertNodeOperation,\n type InsertTextOperation,\n type MergeNodeOperation,\n type MoveNodeOperation,\n type Operation,\n type RemoveNodeOperation,\n type RemoveTextOperation,\n type SetNodeOperation,\n type SplitNodeOperation,\n} from 'slate'\nimport {createApplyPatch} from '../../internal-utils/applyPatch'\nimport {debugWithName} from '../../internal-utils/debug'\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 {getCurrentActionId} from '../with-applying-behavior-actions'\nimport {withoutSaving} from './createWithUndoRedo'\n\nconst debug = debugWithName('plugin:withPatches')\nconst debugVerbose = false\n\nexport interface PatchFunctions {\n insertNodePatch: (\n editor: PortableTextSlateEditor,\n operation: InsertNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n insertTextPatch: (\n editor: PortableTextSlateEditor,\n operation: InsertTextOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n mergeNodePatch: (\n editor: PortableTextSlateEditor,\n operation: MergeNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n moveNodePatch: (\n editor: PortableTextSlateEditor,\n operation: MoveNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n removeNodePatch: (\n editor: PortableTextSlateEditor,\n operation: RemoveNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n removeTextPatch: (\n editor: PortableTextSlateEditor,\n operation: RemoveTextOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n setNodePatch: (\n editor: PortableTextSlateEditor,\n operation: SetNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n splitNodePatch: (\n editor: PortableTextSlateEditor,\n operation: SplitNodeOperation,\n previousChildren: Descendant[],\n ) => Patch[]\n}\n\ninterface Options {\n editorActor: EditorActor\n patchFunctions: PatchFunctions\n subscriptions: Array<() => () => void>\n}\n\nexport function createWithPatches({\n editorActor,\n patchFunctions,\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 withRemoteChanges(editor, () => {\n Editor.withoutNormalizing(editor, () => {\n withoutPatching(editor, () => {\n withoutSaving(editor, () => {\n patches.forEach((patch) => {\n if (debug.enabled)\n debug(`Handling remote patch ${JSON.stringify(patch)}`)\n changed = applyPatch(editor, patch)\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 ...patchFunctions.insertTextPatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'remove_text':\n patches = [\n ...patches,\n ...patchFunctions.removeTextPatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'remove_node':\n patches = [\n ...patches,\n ...patchFunctions.removeNodePatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'split_node':\n patches = [\n ...patches,\n ...patchFunctions.splitNodePatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'insert_node':\n patches = [\n ...patches,\n ...patchFunctions.insertNodePatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'set_node':\n patches = [\n ...patches,\n ...patchFunctions.setNodePatch(editor, operation, previousChildren),\n ]\n break\n case 'merge_node':\n patches = [\n ...patches,\n ...patchFunctions.mergeNodePatch(\n editor,\n operation,\n previousChildren,\n ),\n ]\n break\n case 'move_node':\n patches = [\n ...patches,\n ...patchFunctions.moveNodePatch(\n editor,\n operation,\n previousChildren,\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 editorActor.send({\n type: 'notify.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 actionId: getCurrentActionId(editor),\n value: fromSlateValue(\n editor.children,\n editorActor.getSnapshot().context.schema.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n ),\n })\n }\n }\n return editor\n }\n return editor\n }\n}\n","import {Editor, Path} 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 {SlateTextBlock, VoidElement} from '../../types/slate'\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 node = op.node as SlateTextBlock | VoidElement\n if (op.path[0] === 0 && Editor.isVoid(editor, node)) {\n // Check next path, if it exists, do nothing\n const nextPath = Path.next(op.path)\n // Is removing the first block which is a void (not a text block), add a new empty text block in it, if there is no other element in the next path\n if (!editor.children[nextPath[0]]) {\n debug('Adding placeholder block')\n Editor.insertNode(\n editor,\n editor.pteCreateTextBlock({decorators: []}),\n )\n }\n }\n }\n apply(op)\n }\n return editor\n }\n}\n","import {Editor, Path, Text as SlateText, Transforms} from 'slate'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\n\nconst debug = debugWithName('plugin:withPortableTextBlockStyle')\n\nexport function createWithPortableTextBlockStyle(\n editorActor: EditorActor,\n): (editor: PortableTextSlateEditor) => PortableTextSlateEditor {\n const defaultStyle = editorActor.getSnapshot().context.schema.styles[0].name\n return function withPortableTextBlockStyle(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n // Extend Slate's default normalization to reset split node to normal style\n // if there is no text at the right end of the split.\n const {normalizeNode} = editor\n\n editor.normalizeNode = (nodeEntry) => {\n const [, path] = nodeEntry\n\n for (const op of editor.operations) {\n if (\n op.type === 'split_node' &&\n op.path.length === 1 &&\n editor.isTextBlock(op.properties) &&\n op.properties.style !== defaultStyle &&\n op.path[0] === path[0] &&\n !Path.equals(path, op.path)\n ) {\n const [child] = Editor.node(editor, [op.path[0] + 1, 0])\n if (SlateText.isText(child) && child.text === '') {\n debug(`Normalizing split node to ${defaultStyle} style`, op)\n editorActor.send({type: 'normalizing'})\n Transforms.setNodes(\n editor,\n {style: defaultStyle},\n {at: [op.path[0] + 1], voids: false},\n )\n editorActor.send({type: 'done normalizing'})\n return\n }\n }\n }\n\n normalizeNode(nodeEntry)\n }\n\n return editor\n }\n}\n","import type {BaseRange} from 'slate'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {slateRangeToSelection} from '../../internal-utils/slate-utils'\nimport {SLATE_TO_PORTABLE_TEXT_RANGE} from '../../internal-utils/weakMaps'\nimport type {EditorSelection, PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\n\nconst debug = debugWithName('plugin:withPortableTextSelections')\nconst debugVerbose = debug.enabled && false\n\n// This plugin will make sure that we emit a PT selection whenever the editor has changed.\nexport function createWithPortableTextSelections(\n editorActor: EditorActor,\n): (editor: PortableTextSlateEditor) => PortableTextSlateEditor {\n let prevSelection: BaseRange | null = null\n return function withPortableTextSelections(\n editor: PortableTextSlateEditor,\n ): PortableTextSlateEditor {\n const emitPortableTextSelection = () => {\n if (prevSelection !== editor.selection) {\n let ptRange: EditorSelection | null = null\n if (editor.selection) {\n const existing = SLATE_TO_PORTABLE_TEXT_RANGE.get(editor.selection)\n if (existing) {\n ptRange = existing\n } else {\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 }\n if (debugVerbose) {\n debug(\n `Emitting selection ${JSON.stringify(ptRange || null)} (${JSON.stringify(\n editor.selection,\n )})`,\n )\n }\n if (ptRange) {\n editorActor.send({type: 'notify.selection', selection: ptRange})\n } else {\n editorActor.send({type: 'notify.selection', selection: null})\n }\n }\n prevSelection = editor.selection\n }\n\n const {onChange} = editor\n editor.onChange = () => {\n onChange()\n if (!editorActor.getSnapshot().matches({setup: 'setting up'})) {\n emitPortableTextSelection()\n }\n }\n return editor\n }\n}\n","import type {\n PortableTextListBlock,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {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 return isTextBlock(editorActor.getSnapshot().context, value)\n }\n editor.isTextSpan = (value: unknown): value is PortableTextSpan => {\n return isSpan(editorActor.getSnapshot().context, value)\n }\n editor.isListBlock = (value: unknown): value is PortableTextListBlock => {\n return isListBlock(editorActor.getSnapshot().context, value)\n }\n editor.isVoid = (element: Element): boolean => {\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 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 type {BaseOperation, Editor, Node, NodeEntry} from 'slate'\nimport {createOperationToPatches} from '../../internal-utils/operationToPatches'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {EditorActor} from '../editor-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 {createWithPortableTextBlockStyle} from './createWithPortableTextBlockStyle'\nimport {createWithPortableTextMarkModel} from './createWithPortableTextMarkModel'\nimport {createWithPortableTextSelections} from './createWithPortableTextSelections'\nimport {createWithSchemaTypes} from './createWithSchemaTypes'\nimport {createWithUndoRedo} from './createWithUndoRedo'\nimport {createWithUtils} from './createWithUtils'\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 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} = options\n const operationToPatches = createOperationToPatches(editorActor)\n const withObjectKeys = createWithObjectKeys(editorActor)\n const withSchemaTypes = createWithSchemaTypes({\n editorActor,\n })\n const withPatches = createWithPatches({\n editorActor,\n patchFunctions: operationToPatches,\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 const withPortableTextBlockStyle =\n createWithPortableTextBlockStyle(editorActor)\n\n const withPlaceholderBlock = createWithPlaceholderBlock(editorActor)\n\n const withUtils = createWithUtils({\n editorActor,\n })\n const withPortableTextSelections =\n createWithPortableTextSelections(editorActor)\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 withPortableTextBlockStyle(\n withPlaceholderBlock(\n withUtils(\n withMaxBlocks(\n withUndoRedo(withPatches(withPortableTextSelections(e))),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n )\n}\n","import {createEditor, type Descendant} from 'slate'\nimport {withReact} from 'slate-react'\nimport {debugWithName} from '../internal-utils/debug'\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'\n\nconst debug = debugWithName('component:PortableTextEditor:SlateContainer')\n\ntype SlateEditorConfig = {\n editorActor: EditorActor\n}\n\nexport type SlateEditor = {\n instance: PortableTextSlateEditor\n initialValue: Array<Descendant>\n}\n\nconst slateEditors = new WeakMap<EditorActor, SlateEditor>()\n\nexport function createSlateEditor(config: SlateEditorConfig): SlateEditor {\n const existingSlateEditor = slateEditors.get(config.editorActor)\n\n if (existingSlateEditor) {\n debug('Reusing existing Slate editor instance', config.editorActor.id)\n return existingSlateEditor\n }\n\n debug('Creating new Slate editor instance', config.editorActor.id)\n\n const unsubscriptions: Array<() => void> = []\n const subscriptions: Array<() => () => void> = []\n\n const instance = withPlugins(withReact(createEditor()), {\n editorActor: config.editorActor,\n subscriptions,\n })\n\n KEY_TO_VALUE_ELEMENT.set(instance, {})\n KEY_TO_SLATE_ELEMENT.set(instance, {})\n\n for (const subscription of subscriptions) {\n unsubscriptions.push(subscription())\n }\n\n const initialValue = [instance.pteCreateTextBlock({decorators: []})]\n\n const slateEditor: SlateEditor = {\n instance,\n initialValue,\n }\n\n slateEditors.set(config.editorActor, slateEditor)\n\n return slateEditor\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 {defaultKeyGenerator} from './key-generator'\nimport {createLegacySchema} from './legacy-schema'\n\n/**\n * @public\n */\nexport type BaseDefinition = {\n name: string\n title?: string\n}\n\nexport type FieldDefinition = {\n name: string\n type: 'string' | 'number' | 'boolean' | 'array' | 'object'\n}\n\n/**\n * @public\n */\nexport type SchemaDefinition<\n TBaseDefinition extends BaseDefinition = BaseDefinition,\n> = {\n decorators?: ReadonlyArray<TBaseDefinition>\n blockObjects?: ReadonlyArray<\n TBaseDefinition & {fields?: ReadonlyArray<FieldDefinition>}\n >\n inlineObjects?: ReadonlyArray<\n TBaseDefinition & {fields?: ReadonlyArray<FieldDefinition>}\n >\n annotations?: ReadonlyArray<\n TBaseDefinition & {fields?: ReadonlyArray<FieldDefinition>}\n >\n lists?: ReadonlyArray<TBaseDefinition>\n styles?: ReadonlyArray<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\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<\n BaseDefinition & {\n fields: ReadonlyArray<{name: string; type: string}>\n }\n >\n block: {\n name: string\n }\n blockObjects: ReadonlyArray<\n BaseDefinition & {\n fields: ReadonlyArray<{name: string; type: string}>\n }\n >\n decorators: ReadonlyArray<\n BaseDefinition & {\n /**\n * @deprecated\n * Use `name` instead\n */\n value: string\n }\n >\n inlineObjects: ReadonlyArray<\n BaseDefinition & {\n fields: ReadonlyArray<{name: string; type: string}>\n }\n >\n span: {\n name: string\n }\n styles: ReadonlyArray<\n BaseDefinition & {\n /**\n * @deprecated\n * Use `name` instead\n */\n value: string\n }\n >\n lists: ReadonlyArray<\n BaseDefinition & {\n /**\n * @deprecated\n * Use `name` instead\n */\n value: string\n }\n >\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 })),\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 })),\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 })),\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 })) ?? [],\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 })) ?? [],\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 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 {PortableTextBlock} from '@sanity/types'\nimport type {Descendant} from 'slate'\nimport type {EditorSchema} from '../editor/editor-schema'\n\nexport function slateChildrenToBlocks(\n schema: EditorSchema,\n value: Array<Descendant>,\n): Array<PortableTextBlock> {\n const blocks: Array<PortableTextBlock> = new Array(value.length)\n\n for (let blockIndex = 0; blockIndex < value.length; blockIndex++) {\n const descendant = value[blockIndex]\n\n if (descendant._type !== schema.block.name) {\n blocks[blockIndex] = {\n _key: descendant._key,\n _type: descendant._type,\n ...('value' in descendant && typeof descendant.value === 'object'\n ? descendant.value\n : {}),\n }\n continue\n }\n\n const children = 'children' in descendant ? descendant.children : []\n const processedChildren = new Array(children.length)\n\n for (let childIndex = 0; childIndex < children.length; childIndex++) {\n const child = children[childIndex]\n processedChildren[childIndex] =\n child._type === schema.span.name\n ? child\n : {\n _key: child._key,\n _type: child._type,\n ...('value' in child && typeof child.value === 'object'\n ? child.value\n : {}),\n }\n }\n\n blocks[blockIndex] = {\n ...descendant,\n children: processedChildren,\n }\n }\n\n return blocks\n}\n","import {Editor} from 'slate'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\n\nexport function getActiveDecorators({\n schema,\n slateEditorInstance,\n}: {\n schema: EditorSchema\n slateEditorInstance: PortableTextSlateEditor\n}) {\n const decorators = schema.decorators.map((decorator) => decorator.name)\n\n const marks =\n {\n ...(Editor.marks(slateEditorInstance) ?? {}),\n }.marks ?? []\n\n return marks.filter((mark) => decorators.includes(mark))\n}\n","import {useSelector} from '@xstate/react'\nimport {slateChildrenToBlocks} from '../internal-utils/slate-children-to-blocks'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {Editor, InternalEditor} from './create-editor'\nimport type {EditorActor} from './editor-machine'\nimport type {EditorSnapshot} from './editor-snapshot'\nimport {getActiveDecorators} from './get-active-decorators'\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 context: {\n converters: [...editorActorSnapshot.context.converters],\n activeDecorators: getActiveDecorators({\n schema: editorActorSnapshot.context.schema,\n slateEditorInstance,\n }),\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: slateChildrenToBlocks(\n editorActorSnapshot.context.schema,\n slateEditorInstance.children,\n ),\n },\n beta: {\n hasTag: (tag) => editorActorSnapshot.hasTag(tag),\n internalDrag: editorActorSnapshot.context.internalDrag,\n },\n }\n}\n","import {\n isPortableTextSpan,\n type Path,\n type PortableTextBlock,\n type PortableTextChild,\n type PortableTextObject,\n type 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 {addAnnotationActionImplementation} from '../../behavior-actions/behavior.action.annotation.add'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {toSlateRange} from '../../internal-utils/ranges'\nimport {\n isListItemActive,\n isStyleActive,\n slateRangeToSelection,\n} from '../../internal-utils/slate-utils'\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 type {\n EditableAPI,\n EditableAPIDeleteOptions,\n EditorSelection,\n PortableTextSlateEditor,\n} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {isDecoratorActive} from './createWithPortableTextMarkModel'\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 // Try/catch this, as Slate may error because the selection is currently wrong\n // TODO: catch only relevant error from Slate\n try {\n return isDecoratorActive({editor, decorator: mark})\n } catch (err) {\n console.warn(err)\n return false\n }\n },\n marks: (): string[] => {\n return (\n {\n ...(Editor.marks(editor) || {}),\n }.marks || []\n )\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(selection, editor)\n if (slateSelection) {\n Transforms.select(editor, slateSelection)\n } else {\n Transforms.deselect(editor)\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 {focus: {path, offset: 0}, anchor: {path, offset: 0}},\n editor,\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 return isAnnotationActive({editor, annotation: {name: annotationType}})\n },\n addAnnotation: (type, value) => {\n let paths: ReturnType<EditableAPI['addAnnotation']> = undefined\n\n Editor.withoutNormalizing(editor, () => {\n paths = addAnnotationActionImplementation({\n context: {\n keyGenerator: editorActor.getSnapshot().context.keyGenerator,\n schema: types,\n },\n action: {\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(selection, editor)\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 editor.children = [editor.pteCreateTextBlock({decorators: []})]\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(selectionA, editor)\n const rangeB = toSlateRange(selectionB, editor)\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\nfunction isAnnotationActive({\n editor,\n annotation,\n}: {\n editor: PortableTextSlateEditor\n annotation: {\n name: string\n }\n}) {\n if (!editor.selection || editor.selection.focus.path.length < 2) {\n return false\n }\n\n try {\n const spans = [\n ...Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => Text.isText(node),\n }),\n ]\n\n if (spans.length === 0) {\n return false\n }\n\n if (\n spans.some(\n ([span]) =>\n !isPortableTextSpan(span) || !span.marks || span.marks?.length === 0,\n )\n )\n return false\n\n const selectionMarkDefs = spans.reduce((accMarkDefs, [, path]) => {\n const [block] = Editor.node(editor, path, {depth: 1})\n if (editor.isTextBlock(block) && block.markDefs) {\n return [...accMarkDefs, ...block.markDefs]\n }\n return accMarkDefs\n }, [] as PortableTextObject[])\n\n return spans.every(([span]) => {\n if (!isPortableTextSpan(span)) return false\n\n const spanMarkDefs = span.marks?.map(\n (markKey) =>\n selectionMarkDefs.find((def) => def?._key === markKey)?._type,\n )\n\n return spanMarkDefs?.includes(annotation.name)\n })\n } catch {\n return false\n }\n}\n","import type {\n ArrayDefinition,\n ArraySchemaType,\n PortableTextBlock,\n} from '@sanity/types'\nimport type {ActorRef, EventObject, Snapshot} from 'xstate'\nimport type {Behavior} from '../behaviors/behavior.types.behavior'\nimport type {ExternalBehaviorEvent} from '../behaviors/behavior.types.event'\nimport {createCoreConverters} from '../converters/converters.core'\nimport {compileType} from '../internal-utils/schema'\nimport type {EditableAPI} from '../types/editor'\nimport {createSlateEditor, type SlateEditor} from './create-slate-editor'\nimport type {\n EditorActor,\n EditorEmittedEvent,\n ExternalEditorEvent,\n} from './editor-machine'\nimport {\n compileSchemaDefinitionToLegacySchema,\n legacySchemaToEditorSchema,\n type SchemaDefinition,\n} from './editor-schema'\nimport {getEditorSnapshot} from './editor-selector'\nimport type {EditorSnapshot} from './editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {createLegacySchema} from './legacy-schema'\nimport {createEditableAPI} from './plugins/createWithEditableAPI'\n\n/**\n * @public\n */\nexport type EditorConfig = {\n /**\n * @beta\n */\n keyGenerator?: () => string\n /**\n * @deprecated Will be removed in the next major version\n */\n maxBlocks?: number\n readOnly?: boolean\n initialValue?: Array<PortableTextBlock>\n} & (\n | {\n schemaDefinition: SchemaDefinition\n schema?: undefined\n }\n | {\n schemaDefinition?: undefined\n schema: ArraySchemaType<PortableTextBlock> | ArrayDefinition\n }\n)\n\n/**\n * @public\n */\nexport type EditorEvent = ExternalEditorEvent | ExternalBehaviorEvent\n\n/**\n * @public\n */\nexport type Editor = {\n getSnapshot: () => EditorSnapshot\n /**\n * @beta\n */\n registerBehavior: (config: {behavior: Behavior}) => () => void\n send: (event: EditorEvent) => void\n on: ActorRef<Snapshot<unknown>, EventObject, EditorEmittedEvent>['on']\n}\n\nexport type InternalEditor = Editor & {\n _internal: {\n editable: EditableAPI\n editorActor: EditorActor\n slateEditor: SlateEditor\n }\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\nexport function 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\nexport function createInternalEditor(editorActor: EditorActor): InternalEditor {\n const slateEditor = createSlateEditor({editorActor})\n const editable = createEditableAPI(slateEditor.instance, editorActor)\n\n return {\n getSnapshot: () =>\n getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor.instance,\n }),\n registerBehavior: (config) => {\n editorActor.send({\n type: 'add behavior',\n behavior: config.behavior,\n })\n\n return () => {\n editorActor.send({\n type: 'remove behavior',\n behavior: config.behavior,\n })\n }\n },\n send: (event) => {\n switch (event.type) {\n case 'add behavior':\n case 'remove behavior':\n case 'update key generator':\n case 'update readOnly':\n case 'patches':\n case 'update value':\n case 'update schema':\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 = editorActor.on(event, (event) => {\n switch (event.type) {\n case 'blurred':\n case 'done loading':\n case 'editable':\n case 'error':\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 }\n}\n","import {createContext} from 'react'\nimport type {EditorActor} from './editor-machine'\n\nexport const EditorActorContext = createContext<EditorActor>({} as EditorActor)\n","/**\n * Gets the global scope instance in a given environment.\n *\n * The strategy is to return the most modern, and if not, the most common:\n * - The `globalThis` variable is the modern approach to accessing the global scope\n * - The `window` variable is the global scope in a web browser\n * - The `self` variable is the global scope in workers and others\n * - The `global` variable is the global scope in Node.js\n */\nfunction getGlobalScope() {\n if (typeof globalThis !== 'undefined') return globalThis\n if (typeof window !== 'undefined') return window\n if (typeof self !== 'undefined') return self\n if (typeof global !== 'undefined') return global\n\n throw new Error('@portabletext/editor: could not locate global scope')\n}\n\nexport const globalScope = getGlobalScope() as any\n","import {createContext, type Context} from 'react'\nimport {globalScope} from './global-scope'\n\n/**\n * As `@portabletext/editor` is declared as a dependency, and may be\n * duplicated, sometimes across major versions it's critical that vital\n * React Contexts are shared even when there is a duplicate.\n *\n * We have to support a Sanity Plugin being able to call hooks like\n * `useEditor`, and then read the context setup by `sanity`, which calls\n * `EditorProvider`, even if the provider and hook are different instances in\n * memory.\n *\n * For this reason it's vital that all changes to globally scoped providers\n * remain fully backwards compatible.\n */\nexport function createGloballyScopedContext<\n ContextType,\n const T extends ContextType = ContextType,\n>(\n /**\n * Enforce that all Symbol.for keys used for globally scoped contexts have a predictable prefix\n */\n key: `@portabletext/editor/context/${string}`,\n defaultValue: T,\n): Context<ContextType> {\n const symbol = Symbol.for(key)\n\n /**\n * Prevent errors about re-renders on React SSR on Next.js App Router\n */\n if (typeof document === 'undefined') {\n return createContext<ContextType>(defaultValue)\n }\n\n globalScope[symbol] = globalScope[symbol] ?? createContext<T>(defaultValue)\n\n return globalScope[symbol]\n}\n","import {createGloballyScopedContext} from '../internal-utils/globally-scoped-context'\nimport type {Editor} from './create-editor'\n\nexport const EditorContext = createGloballyScopedContext<Editor | null>(\n '@portabletext/editor/context/editor',\n null,\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","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\nconst 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 {isHotkey} from '../internal-utils/is-hotkey'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\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 = isHotkey('ArrowDown', event.originEvent)\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 = isHotkey('ArrowUp', 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 {isHotkey} from '../internal-utils/is-hotkey'\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 isHotkey('mod+b', 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 isHotkey('mod+i', 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 isHotkey('mod+u', 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 isHotkey(\"mod+'\", 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","import * as selectors from '../selectors'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const coreDndBehaviors = [\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 = snapshot.beta.internalDrag?.origin\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","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\nexport const coreInsertBreakBehaviors = {\n breakingAtTheEndOfTextBlock,\n breakingAtTheStartOfTextBlock,\n breakingEntireDocument,\n breakingEntireBlocks,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport {isListBlock} from '../internal-utils/parse-blocks'\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 MAX_LIST_LEVEL = 10\n\nconst clearListOnBackspace = 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 (atTheBeginningOfBLock && focusTextBlock.node.level === 1) {\n return {focusTextBlock}\n }\n\n return false\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\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\nconst indentListOnTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isTab = isHotkey('Tab', 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\nconst unindentListOnShiftTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isShiftTab = isHotkey('Shift+Tab', event.originEvent)\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\nexport const coreListBehaviors = {\n clearListOnBackspace,\n unindentListOnBackspace,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n}\n","import {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\n/**\n * @beta\n */\nexport const coreBehaviors = [\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.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock,\n coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock,\n coreInsertBreakBehaviors.breakingEntireDocument,\n coreInsertBreakBehaviors.breakingEntireBlocks,\n]\n","import {isActiveAnnotation} from '../selectors'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractAnnotationBehaviors = [\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 * 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.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 beta: {hasTag: () => false, internalDrag: undefined},\n context: {\n converters: [],\n schema: snapshot.context.schema,\n keyGenerator: snapshot.context.keyGenerator,\n activeDecorators: [],\n readOnly: false,\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: '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: '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: '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: '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: '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: 'end',\n }),\n ]\n : [\n raise({\n type: 'insert.block',\n block,\n placement: 'after',\n 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: '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 {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}) => {\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: 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 {getSelectionStartPoint} from '../utils'\nimport {getBlockEndPoint} from '../utils/util.get-block-end-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {sliceBlocks} from '../utils/util.slice-blocks'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const abstractSplitBehaviors = [\n defineBehavior({\n on: 'split',\n guard: ({snapshot}) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint(\n snapshot.context.selection,\n )\n const selectionEndPoint = getSelectionEndPoint(snapshot.context.selection)\n\n const focusTextBlock = selectors.getFocusTextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionEndPoint,\n },\n },\n })\n\n if (focusTextBlock) {\n const blockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const newTextBlockSelection = {\n anchor: selectionEndPoint,\n focus: blockEndPoint,\n }\n const newTextBlock = parseBlock({\n block: sliceBlocks({\n context: {\n ...snapshot.context,\n selection: newTextBlockSelection,\n },\n blocks: [focusTextBlock.node],\n }).at(0),\n context: snapshot.context,\n options: {refreshKeys: true},\n })\n\n if (!newTextBlock || !isTextBlock(snapshot.context, newTextBlock)) {\n return false\n }\n\n return {\n newTextBlock,\n newTextBlockSelection,\n selection: {\n anchor: selectionStartPoint,\n focus: blockEndPoint,\n },\n }\n }\n\n const focusBlockObject = selectors.getFocusBlockObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionEndPoint,\n },\n },\n })\n\n if (focusBlockObject) {\n const newTextBlock = parseBlock({\n block: {\n _type: snapshot.context.schema.block.name,\n children: [],\n },\n context: snapshot.context,\n options: {refreshKeys: true},\n })\n\n if (!newTextBlock) {\n return false\n }\n\n return {\n newTextBlock,\n newTextBlockSelection: {\n anchor: selectionEndPoint,\n focus: selectionEndPoint,\n },\n selection: snapshot.context.selection,\n }\n }\n\n return false\n },\n actions: [\n (_, {newTextBlock, selection}) => [\n raise({\n type: 'delete',\n at: selection,\n }),\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","export const keyIs = {\n lineBreak: (event) => event.key === 'Enter' && event.shiftKey,\n} satisfies Record<string, KeyboardEventPredicate>\n\ntype KeyboardEventPredicate = (\n event: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >,\n) => boolean\n","import {keyIs} from '../internal-utils/key-is'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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 */\nexport const raiseInsertSoftBreak = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => keyIs.lineBreak(event.originEvent),\n actions: [() => [raise({type: 'insert.soft break'})]],\n})\n","import type {ConverterEvent} from '../converters/converter.types'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport * as selectors from '../selectors'\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 {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 {raiseInsertSoftBreak} from './behavior.default.raise-soft-break'\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 defaultBehaviors = [\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 defineBehavior({\n on: 'drag.drop',\n guard: ({snapshot, event}) => {\n const dragOrigin = snapshot.beta.internalDrag?.origin\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 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 defineBehavior({\n on: 'deserialization.success',\n guard: ({snapshot, event}) => {\n if (\n event.originEvent.type !== 'drag.drop' ||\n snapshot.beta.internalDrag === undefined\n ) {\n return false\n }\n\n const dragOrigin = snapshot.beta.internalDrag.origin\n const dropPosition = event.originEvent.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\n const draggingEntireBlocks = selectors.isSelectingEntireBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n\n const draggedBlocks = selectors.getSelectedBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n\n if (!droppingOnDragOrigin) {\n return {\n draggingEntireBlocks,\n draggedBlocks,\n dragOrigin,\n originEvent: event.originEvent,\n }\n }\n\n return false\n },\n actions: [\n (\n {event},\n {draggingEntireBlocks, draggedBlocks, dragOrigin, originEvent},\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 * 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 = snapshot.context.activeDecorators\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 ...abstractListItemBehaviors,\n ...abstractMoveBehaviors,\n ...abstractStyleBehaviors,\n ...abstractSelectBehaviors,\n ...abstractSplitBehaviors,\n raiseDeserializationSuccessOrFailure,\n raiseSerializationSuccessOrFailure,\n raiseInsertSoftBreak,\n]\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {TextUnit} from 'slate'\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'\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 'decorator.add',\n 'decorator.remove',\n 'delete',\n 'delete.backward',\n 'delete.block',\n 'delete.forward',\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: [KeyedSegment]\n props: Record<string, unknown>\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'block.unset'>\n at: [KeyedSegment]\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 | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.backward'>\n unit: TextUnit\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.block'>\n at: [KeyedSegment]\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'delete.forward'>\n unit: TextUnit\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: [KeyedSegment]\n to: [KeyedSegment]\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\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.toggle',\n 'decorator.toggle',\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.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.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 }\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: [KeyedSegment]\n }\n | {\n type: StrictExtract<SyntheticBehaviorEventType, 'move.block up'>\n at: [KeyedSegment]\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 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 position: EventPosition\n }\n | {\n type: StrictExtract<NativeBehaviorEventType, 'drag.drop'>\n originEvent: {\n dataTransfer: DataTransfer\n }\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 {performAction} from '../behavior-actions/behavior.actions'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorSnapshot} from '../editor/editor-snapshot'\nimport {\n withApplyingBehaviorActions,\n withUndoStep,\n} from '../editor/with-applying-behavior-actions'\nimport {debugWithName} from '../internal-utils/debug'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport {defaultBehaviors} from './behavior.default'\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}: {\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}) {\n debug(`(${mode}:${eventCategory(event)})`, JSON.stringify(event, null, 2))\n\n const eventBehaviors = [\n ...remainingEventBehaviors,\n ...defaultBehaviors,\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 withApplyingBehaviorActions(editor, () => {\n try {\n debug(\n `(execute:${eventCategory(event)})`,\n JSON.stringify(event, null, 2),\n )\n\n performAction({\n context: {\n keyGenerator,\n schema,\n },\n action: {\n ...event,\n editor,\n },\n })\n } catch (error) {\n console.error(\n new Error(\n `Executing \"${event.type}\" failed due to: ${error.message}`,\n ),\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 })\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 },\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 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 nativeEventPrevented = true\n\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 })\n\n continue\n }\n\n if (action.type === 'raise') {\n nativeEventPrevented = true\n\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 })\n\n continue\n }\n\n nativeEventPrevented = true\n\n performEvent({\n mode: 'execute',\n behaviors,\n remainingEventBehaviors: isAbstractBehaviorEvent(action.event)\n ? behaviors\n : [],\n event: action.event,\n editor,\n keyGenerator,\n schema,\n getSnapshot,\n nativeEvent: undefined,\n })\n }\n })\n\n continue\n }\n\n for (const action of actions) {\n if (action.type === 'effect') {\n nativeEventPrevented = true\n\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 })\n\n continue\n }\n\n if (action.type === 'raise') {\n nativeEventPrevented = true\n\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 })\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 withApplyingBehaviorActions(editor, () => {\n try {\n debug(\n `(execute:${eventCategory(event)})`,\n JSON.stringify(event, null, 2),\n )\n\n performAction({\n context: {keyGenerator, schema},\n action: {\n ...event,\n editor,\n },\n })\n } catch (error) {\n console.error(\n new Error(\n `Executing \"${event.type}\" failed due to: ${error.message}`,\n ),\n )\n }\n })\n\n editor.onChange()\n } else if (nativeEventPrevented) {\n nativeEvent?.preventDefault()\n }\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {Converter} from '../converters/converter.types'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport {slateChildrenToBlocks} from '../internal-utils/slate-children-to-blocks'\nimport {slateRangeToSelection} from '../internal-utils/slate-utils'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\nimport type {HasTag} from './editor-machine'\nimport type {EditorSchema} from './editor-schema'\nimport {getActiveDecorators} from './get-active-decorators'\n\n/**\n * @public\n */\nexport type EditorContext = {\n activeDecorators: Array<string>\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 /**\n * @beta\n * Do not rely on this externally\n */\n beta: {\n hasTag: HasTag\n internalDrag:\n | {\n origin: Pick<EventPosition, 'selection'>\n }\n | undefined\n }\n}\n\nexport function createEditorSnapshot({\n converters,\n editor,\n keyGenerator,\n readOnly,\n schema,\n hasTag,\n internalDrag,\n}: {\n converters: Array<Converter>\n editor: PortableTextSlateEditor\n keyGenerator: () => string\n readOnly: boolean\n schema: EditorSchema\n hasTag: HasTag\n internalDrag:\n | {\n origin: Pick<EventPosition, 'selection'>\n }\n | undefined\n}) {\n const value = slateChildrenToBlocks(schema, editor.children)\n const selection = editor.selection\n ? slateRangeToSelection({\n schema,\n editor,\n range: editor.selection,\n })\n : null\n\n const context = {\n activeDecorators: getActiveDecorators({\n schema,\n slateEditorInstance: editor,\n }),\n converters,\n keyGenerator,\n readOnly,\n schema,\n selection,\n value,\n } satisfies EditorContext\n\n return {\n context,\n beta: {\n hasTag,\n internalDrag,\n },\n } satisfies EditorSnapshot\n}\n","import type {Patch} from '@portabletext/patches'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {FocusEvent} from 'react'\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 {coreBehaviors} from '../behaviors/behavior.core'\nimport {performEvent} from '../behaviors/behavior.perform-event'\nimport type {Behavior} from '../behaviors/behavior.types.behavior'\nimport type {BehaviorEvent} from '../behaviors/behavior.types.event'\nimport type {Converter} from '../converters/converter.types'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport type {NamespaceEvent} from '../type-utils'\nimport type {\n EditorSelection,\n InvalidValueResolution,\n PortableTextMemberSchemaTypes,\n PortableTextSlateEditor,\n} from '../types/editor'\nimport type {EditorSchema} from './editor-schema'\nimport {createEditorSnapshot} from './editor-snapshot'\n\nexport * from 'xstate/guards'\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 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\n/**\n * @public\n */\nexport type ExternalEditorEvent =\n | {\n type: 'add behavior'\n behavior: Behavior\n }\n | {\n type: 'remove behavior'\n behavior: Behavior\n }\n | {\n type: 'update readOnly'\n readOnly: boolean\n }\n | {\n type: 'update schema'\n schema: EditorSchema\n }\n | {\n type: 'update key generator'\n keyGenerator: () => string\n }\n | {\n type: 'update value'\n value: Array<PortableTextBlock> | undefined\n }\n | {\n type: 'update maxBlocks'\n maxBlocks: number | undefined\n }\n | PatchesEvent\n\n/**\n * @public\n */\nexport type EditorEmittedEvent =\n | {\n type: 'blurred'\n event: FocusEvent<HTMLDivElement, Element>\n }\n | {\n type: 'done loading'\n }\n | {\n type: 'editable'\n }\n | {\n type: 'error'\n name: string\n description: string\n data: unknown\n }\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 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\ntype PatchEvent = {\n type: 'patch'\n patch: Patch\n}\n\ntype InternalPatchEvent = NamespaceEvent<PatchEvent, 'internal'> & {\n actionId?: string\n value: Array<PortableTextBlock>\n}\n\ntype UnsetEvent = {\n type: 'unset'\n previousValue: Array<PortableTextBlock>\n}\n\n/**\n * @internal\n */\nexport type EditorActor = ActorRefFrom<typeof editorMachine>\nexport type HasTag = ReturnType<EditorActor['getSnapshot']>['hasTag']\n\n/**\n * @internal\n */\nexport type InternalEditorEvent =\n | ExternalEditorEvent\n | {\n type: 'blur'\n editor: PortableTextSlateEditor\n }\n | {\n type: 'focus'\n editor: PortableTextSlateEditor\n }\n | {\n type: 'normalizing'\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 | NamespaceEvent<EditorEmittedEvent, 'notify'>\n | NamespaceEvent<UnsetEvent, 'notify'>\n | {\n type: 'dragstart'\n origin: Pick<EventPosition, 'selection'>\n ghost?: HTMLElement\n }\n | {type: 'dragend'}\n | {type: 'drop'}\n\n/**\n * @internal\n */\nexport type InternalEditorEmittedEvent =\n | EditorEmittedEvent\n | InternalPatchEvent\n | PatchesEvent\n | UnsetEvent\n\n/**\n * @internal\n */\nexport const editorMachine = setup({\n types: {\n context: {} as {\n behaviors: Set<Behavior>\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 incomingValue: Array<PortableTextBlock> | undefined\n internalDrag?: {\n ghost?: HTMLElement\n origin: Pick<EventPosition, 'selection'>\n }\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.behavior])\n },\n }),\n 'remove behavior from context': assign({\n behaviors: ({context, event}) => {\n assertEvent(event, 'remove behavior')\n\n context.behaviors.delete(event.behavior)\n\n return new Set([...context.behaviors])\n },\n }),\n 'assign schema': assign({\n schema: ({event}) => {\n assertEvent(event, 'update schema')\n return event.schema\n },\n }),\n 'emit patch event': enqueueActions(({event, enqueue}) => {\n assertEvent(event, 'internal.patch')\n\n enqueue.emit(event)\n enqueue.emit({type: 'patch', patch: event.patch})\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 if (event.type === 'internal.patch') {\n enqueue.emit(event)\n enqueue.emit({type: 'patch', patch: event.patch})\n } else {\n enqueue.emit(event)\n }\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 performEvent({\n mode: 'raise',\n behaviors: [...context.behaviors.values()],\n remainingEventBehaviors: [...context.behaviors.values()],\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 hasTag: (tag) => self.getSnapshot().hasTag(tag),\n internalDrag: context.internalDrag,\n }),\n nativeEvent: event.nativeEvent,\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 },\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([...coreBehaviors]),\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 incomingValue: input.initialValue,\n }),\n on: {\n 'notify.blurred': {\n actions: emit(({event}) => ({...event, type: 'blurred'})),\n },\n 'notify.done loading': {actions: emit({type: 'done loading'})},\n 'notify.error': {actions: emit(({event}) => ({...event, type: 'error'}))},\n 'notify.invalid value': {\n actions: emit(({event}) => ({...event, type: 'invalid value'})),\n },\n 'notify.focused': {\n actions: emit(({event}) => ({...event, type: 'focused'})),\n },\n 'notify.selection': {\n actions: [\n assign({selection: ({event}) => event.selection}),\n emit(({event}) => ({...event, type: 'selection'})),\n ],\n },\n 'notify.unset': {actions: emit(({event}) => ({...event, type: 'unset'}))},\n 'notify.loading': {actions: emit({type: 'loading'})},\n 'notify.value changed': {\n actions: emit(({event}) => ({...event, type: 'value changed'})),\n },\n\n 'add behavior': {actions: 'add behavior to context'},\n 'remove behavior': {actions: 'remove behavior from context'},\n 'update key generator': {\n actions: assign({keyGenerator: ({event}) => event.keyGenerator}),\n },\n 'update schema': {actions: 'assign schema'},\n 'update value': {\n actions: assign({incomingValue: ({event}) => event.value}),\n },\n 'update maxBlocks': {\n actions: assign({maxBlocks: ({event}) => event.maxBlocks}),\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: '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 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 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: '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 on: {\n dragstart: {\n actions: [\n assign({\n internalDrag: ({event}) => ({\n ghost: event.ghost,\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 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 after: {\n 10: {\n target: 'checking if busy',\n },\n },\n },\n },\n },\n 'dragging internally': {\n exit: [\n ({context}) => {\n if (context.internalDrag?.ghost) {\n try {\n context.internalDrag.ghost.parentNode?.removeChild(\n context.internalDrag.ghost,\n )\n } catch (error) {\n console.error(\n new Error(\n `Removing the internal drag ghost failed due to: ${error.message}`,\n ),\n )\n }\n }\n },\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 exit: [\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 on: {\n 'patches': {\n actions: [emit(({event}) => event)],\n },\n 'syncing value': {\n target: 'syncing value',\n },\n },\n },\n 'syncing value': {\n exit: [\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 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 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: ['emit pending events', 'clear pending events'],\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 {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","import {\n createContext,\n startTransition,\n useContext,\n useEffect,\n useState,\n} from 'react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {EditorSelection} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\n\n/**\n * A React context for sharing the editor selection.\n */\nconst PortableTextEditorSelectionContext =\n createContext<EditorSelection | null>(null)\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 selection = useContext(PortableTextEditorSelectionContext)\n\n if (selection === undefined) {\n throw new Error(\n `The \\`usePortableTextEditorSelection\\` hook must be used inside the <PortableTextEditor> component's context.`,\n )\n }\n return selection\n}\nconst debug = debugWithName('component:PortableTextEditor:SelectionProvider')\nconst debugVerbose = debug.enabled && false\n\n/**\n * @internal\n */\nexport function PortableTextEditorSelectionProvider(\n props: React.PropsWithChildren<{\n editorActor: EditorActor\n }>,\n) {\n const [selection, setSelection] = useState<EditorSelection>(null)\n\n // Subscribe to, and handle changes from the editor\n useEffect(() => {\n debug('Subscribing to selection changes')\n const subscription = props.editorActor.on('selection', (event) => {\n // Set the selection state in a transition, we don't need the state immediately.\n startTransition(() => {\n if (debugVerbose) debug('Setting selection')\n setSelection(event.selection)\n })\n })\n\n return () => {\n debug('Unsubscribing to selection changes')\n subscription.unsubscribe()\n }\n }, [props.editorActor])\n\n return (\n <PortableTextEditorSelectionContext.Provider value={selection}>\n {props.children}\n </PortableTextEditorSelectionContext.Provider>\n )\n}\n","import type {\n ArrayDefinition,\n ArraySchemaType,\n Path,\n PortableTextBlock,\n PortableTextChild,\n PortableTextObject,\n} from '@sanity/types'\nimport {\n Component,\n useEffect,\n type MutableRefObject,\n type PropsWithChildren,\n} from 'react'\nimport {Subject} from 'rxjs'\nimport {Slate} from 'slate-react'\nimport {useEffectEvent} from 'use-effect-event'\nimport {createActor} from 'xstate'\nimport type {AddedAnnotationPaths} from '../behavior-actions/behavior.action.annotation.add'\nimport {createCoreConverters} from '../converters/converters.core'\nimport {debugWithName} from '../internal-utils/debug'\nimport {compileType} from '../internal-utils/schema'\nimport type {\n EditableAPI,\n EditableAPIDeleteOptions,\n EditorChange,\n EditorChanges,\n EditorSelection,\n PatchObservable,\n PortableTextMemberSchemaTypes,\n} from '../types/editor'\nimport {Synchronizer} from './components/Synchronizer'\nimport {createInternalEditor, type InternalEditor} from './create-editor'\nimport {EditorActorContext} from './editor-actor-context'\nimport {editorMachine, type EditorActor} from './editor-machine'\nimport {legacySchemaToEditorSchema} from './editor-schema'\nimport {PortableTextEditorContext} from './hooks/usePortableTextEditor'\nimport {PortableTextEditorSelectionProvider} from './hooks/usePortableTextEditorSelection'\nimport {defaultKeyGenerator} from './key-generator'\nimport {createLegacySchema} from './legacy-schema'\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 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 legacySchema = createLegacySchema(\n props.schemaType.hasOwnProperty('jsonType')\n ? props.schemaType\n : compileType(props.schemaType),\n )\n const schema = legacySchemaToEditorSchema(legacySchema)\n const editorActor = createActor(editorMachine, {\n input: {\n converters: createCoreConverters(legacySchema),\n getLegacySchema: () => legacySchema,\n initialValue: props.value,\n keyGenerator: props.keyGenerator ?? defaultKeyGenerator,\n maxBlocks:\n props.maxBlocks === undefined\n ? undefined\n : Number.parseInt(props.maxBlocks.toString(), 10),\n readOnly: props.readOnly,\n schema,\n },\n })\n editorActor.start()\n\n this.editor = createInternalEditor(editorActor)\n this.schemaTypes = legacySchema\n }\n\n this.editable = this.editor._internal.editable\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 this.schemaTypes = createLegacySchema(\n this.props.schemaType.hasOwnProperty('jsonType')\n ? this.props.schemaType\n : compileType(this.props.schemaType),\n )\n\n this.editor._internal.editorActor.send({\n type: 'update schema',\n schema: legacySchemaToEditorSchema(this.schemaTypes),\n })\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._internal.editorActor.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 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 <RouteEventsToChanges\n editorActor={this.editor._internal.editorActor}\n onChange={(change) => {\n if (!this.props.editor) {\n this.props.onChange(change)\n }\n /**\n * For backwards compatibility, we relay all changes to the\n * `change$` Subject as well.\n */\n this.change$.next(change)\n }}\n />\n <Synchronizer\n editorActor={this.editor._internal.editorActor}\n slateEditor={this.editor._internal.slateEditor.instance}\n />\n <EditorActorContext.Provider value={this.editor._internal.editorActor}>\n <Slate\n editor={this.editor._internal.slateEditor.instance}\n initialValue={this.editor._internal.slateEditor.initialValue}\n >\n <PortableTextEditorContext.Provider value={this}>\n <PortableTextEditorSelectionProvider\n editorActor={this.editor._internal.editorActor}\n >\n {this.props.children}\n </PortableTextEditorSelectionProvider>\n </PortableTextEditorContext.Provider>\n </Slate>\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\nexport function RouteEventsToChanges(props: {\n editorActor: EditorActor\n onChange: (change: EditorChange) => void\n}) {\n // We want to ensure that _when_ `props.onChange` is called, it uses the current value.\n // But we don't want to have the `useEffect` run setup + teardown + setup every time the prop might change, as that's unnecessary.\n // So we use our own polyfill that lets us use an upcoming React hook that solves this exact problem.\n // https://19.react.dev/learn/separating-events-from-effects#declaring-an-effect-event\n const handleChange = useEffectEvent((change: EditorChange) =>\n props.onChange(change),\n )\n\n useEffect(() => {\n debug('Subscribing to editor changes')\n const sub = props.editorActor.on('*', (event) => {\n switch (event.type) {\n case 'blurred': {\n handleChange({type: 'blur', event: event.event})\n break\n }\n case 'patch':\n handleChange(event)\n break\n case 'loading': {\n handleChange({type: 'loading', isLoading: true})\n break\n }\n case 'done loading': {\n handleChange({type: 'loading', isLoading: false})\n break\n }\n case 'focused': {\n handleChange({type: 'focus', event: event.event})\n break\n }\n case 'value changed': {\n handleChange({type: 'value', value: event.value})\n break\n }\n case 'invalid value': {\n handleChange({\n type: 'invalidValue',\n resolution: event.resolution,\n value: event.value,\n })\n break\n }\n case 'error': {\n handleChange({\n ...event,\n level: 'warning',\n })\n break\n }\n case 'mutation': {\n handleChange(event)\n break\n }\n case 'ready': {\n handleChange(event)\n break\n }\n case 'selection': {\n handleChange(event)\n break\n }\n case 'unset': {\n handleChange(event)\n break\n }\n }\n })\n return () => {\n debug('Unsubscribing to changes')\n sub.unsubscribe()\n }\n }, [props.editorActor])\n\n return null\n}\n","import {useActorRef} from '@xstate/react'\nimport React, {useMemo} from 'react'\nimport {Slate} from 'slate-react'\nimport {Synchronizer} from './components/Synchronizer'\nimport {\n createInternalEditor,\n editorConfigToMachineInput,\n type EditorConfig,\n} from './create-editor'\nimport {EditorActorContext} from './editor-actor-context'\nimport {EditorContext} from './editor-context'\nimport {editorMachine} from './editor-machine'\nimport {PortableTextEditorContext} from './hooks/usePortableTextEditor'\nimport {PortableTextEditorSelectionProvider} from './hooks/usePortableTextEditorSelection'\nimport {\n PortableTextEditor,\n RouteEventsToChanges,\n type PortableTextEditorProps,\n} from './PortableTextEditor'\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 editorActor = useActorRef(editorMachine, {\n input: editorConfigToMachineInput(props.initialConfig),\n })\n const internalEditor = useMemo(\n () => createInternalEditor(editorActor),\n [editorActor],\n )\n const portableTextEditor = useMemo(\n () =>\n new PortableTextEditor({\n editor: internalEditor,\n } as unknown as PortableTextEditorProps),\n [internalEditor],\n )\n\n return (\n <EditorContext.Provider value={internalEditor}>\n <RouteEventsToChanges\n editorActor={editorActor}\n onChange={(change) => {\n portableTextEditor.change$.next(change)\n }}\n />\n <Synchronizer\n editorActor={editorActor}\n slateEditor={internalEditor._internal.slateEditor.instance}\n />\n <EditorActorContext.Provider value={editorActor}>\n <Slate\n editor={internalEditor._internal.slateEditor.instance}\n initialValue={internalEditor._internal.slateEditor.initialValue}\n >\n <PortableTextEditorContext.Provider value={portableTextEditor}>\n <PortableTextEditorSelectionProvider editorActor={editorActor}>\n {props.children}\n </PortableTextEditorSelectionProvider>\n </PortableTextEditorContext.Provider>\n </Slate>\n </EditorActorContext.Provider>\n </EditorContext.Provider>\n )\n}\n\n/**\n * @public\n * Get the current editor context from the `EditorProvider`.\n * Must be used inside the `EditorProvider` component.\n * @returns The current editor object.\n * @example\n * ```tsx\n * import { useEditor } from '@portabletext/editor'\n *\n * function MyComponent() {\n * const editor = useEditor()\n * }\n * ```\n * @group Hooks\n */\nexport function useEditor() {\n const editor = React.useContext(EditorContext)\n\n if (!editor) {\n throw new Error('No Editor set. Use EditorProvider to set one.')\n }\n\n return editor\n}\n"],"names":["rootName","debug","debugWithName","name","namespace","enabled","EMPTY_MARKDEFS","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","_c","blockValue","isEqualToEmptyEditor","undefined","length","Text","isText","join","IS_PROCESSING_REMOTE_CHANGES","WeakMap","KEY_TO_SLATE_ELEMENT","KEY_TO_VALUE_ELEMENT","SLATE_TO_PORTABLE_TEXT_RANGE","mutationMachine","setup","types","context","events","input","emitted","actions","emit","type","enqueueActions","enqueue","bulk","pendingMutations","patches","snapshot","assign","event","assertEvent","actionId","patch","lastBulk","at","slice","concat","actors","fromCallback","sendBack","originalApply","slateEditor","apply","op","guards","stateIn","typing","no pending mutations","slate is normalizing","Editor","isNormalizing","delays","process","env","NODE_ENV","createMachine","id","schema","states","initial","invoke","src","idle","on","target","after","reenter","mutations","guard","and","not","validateValue","keyGenerator","resolution","valid","validChildTypes","span","inlineObjects","validBlockTypes","blockObjects","unset","description","action","item","i18n","some","blk","index","isPlainObject","String","values","set","includes","currentBlockTypeName","key","expectedTypeName","isTextBlock","typeName","newSpan","autoResolve","setIfMissing","insert","allUsedMarks","uniq","flatten","filter","cld","unusedMarkDefs","def","markDefKey","m","toString","orphanedMarks","mark","decorators","dec","find","spanChildren","orphaned","cMrk","cIndex","newChild","childKey","childType","withRemoteChanges","editor","fn","prev","isChangingRemotely","get","PATCHING","withoutPatching","isPatching","cloneDiff","diff2","IS_UDOING","IS_REDOING","withUndoing","isUndoing","setIsUndoing","withRedoing","isRedoing","setIsRedoing","defaultKeyGenerator","randomKey","getByteHexTable","table","i","whatwgRNG","rnds8","Uint8Array","getRandomValues","reduce","str","n","CURRENT_ACTION_ID","withApplyingBehaviorActions","withoutNormalizing","getCurrentActionId","isApplyingBehaviorActions","CURRENT_UNDO_STEP","withUndoStep","current","undoStepId","getCurrentUndoStepId","SAVING","REMOTE_PATCHES","UNDO_STEP_LIMIT","isSaving","state","getRemotePatches","createWithUndoRedo","options","editorActor","previousSnapshot","getSnapshot","remotePatches","previousUndoStepId","subscriptions","push","sub","reset","forEach","origin","path","history","undos","redos","splice","time","Date","unsubscribe","matches","operations","step","lastOp","overwrite","shouldOverwrite","save","currentUndoStepId","merge","shouldMerge","newStep","selection","createSelectOperation","timestamp","shift","shouldClear","historyUndoActionImplementation","otherPatches","transformedOperations","transformOperation","reversedOperations","Operation","inverse","reverse","withoutSaving","err","Transforms","deselect","onChange","pop","historyRedoActionImplementation","operation","transformedOperation","insertBlockIndex","findIndex","items","adjustBlockPath","unsetBlockIndex","operationTargetBlock","findOperationTargetBlock","parsePatch","diffPatch","adjustOffsetBy","changedOffset","utf8Start1","diffs","diff","diffType","DIFF_INSERT","DIFF_DELETE","DIFF_EQUAL","every","dType","offset","currentFocus","properties","focus","currentAnchor","anchor","newFocus","newProperties","newAnchor","point","level","blockIndex","newPath","Path","equals","syncValueCallback","streamBlocks","syncValueLogic","syncMachine","initialValueSynced","readOnly","pendingValue","previousValue","initial value synced","is busy","editable","isProcessingLocalChanges","isChanging","isBusy","value changed while syncing","pending value equals previous value","entry","exit","always","busy","syncing","updateValue","isChanged","isValid","hadSelection","childrenLength","_","removeNodes","insertNodes","pteCreateTextBlock","select","slateValueFromProps","Promise","resolve","currentBlock","currentBlockIndex","getBlocks","slateValue","blockChanged","blockValid","syncBlock","error","setTimeout","oldBlock","hasChanges","validationValue","validation","console","warn","_updateBlock","_replaceBlock","currentSelection","selectionFocusOnBlock","setNodes","oldBlockChildrenLength","from","childIndex","currentBlockChild","currentBlockChildIndex","oldBlockChild","isChildChanged","isTextChanged","isSpanNode","delete","insertText","voids","Synchronizer","props","$","incomingValue","useSelector","_temp","_temp2","t0","t1","t2","t3","t4","syncActorRef","useActorRef","t5","t6","mutationActorRef","t7","t8","subscription","send","useEffect","t10","t9","subscription_0","event_0","bb15","t11","t12","t13","t14","t15","event_1","t16","s_0","s","displayName","converterJson","mimeType","serialize","portableTextConverter","converters","converter","originEvent","reason","deserialize","converterPortableText","beta","internalDrag","blocks","sliceBlocks","data","JSON","stringify","parse","parsedBlocks","flatMap","parsedBlock","parseBlock","refreshKeys","hasTag","createConverterTextHtml","legacySchema","html","toHTML","onMissingComponent","components","unknownType","htmlToBlocks","portableText","unstable_whitespaceOnPasteMode","createConverterTextPlain","inlineObjectType","title","blockObjectType","textToHtml","escapeHtml","split","line","replace","entityMap","createCoreConverters","compileType","rawType","Schema","compile","createOperationToPatches","textBlockName","insertTextPatch","beforeValue","textChild","isTextSpan","prevBlock","prevChild","prevText","diffMatchPatch","removeTextPatch","beforeBlock","prevTextChild","setNodePatch","setNode","omitBy","isUndefined","blockKey","keys","Object","keyName","val","indexOf","insertNodePatch","position","targetKey","node","splitNodePatch","splitBlock","targetValue","splitSpan","targetSpans","removeNodePatch","spanToRemove","mergeNodePatch","updatedBlock","newBlock","updatedSpan","removedSpan","moveNodePatch","targetBlock","targetChild","childToInsert","insertTextActionImplementation","isPortableTextSpan","isPortableTextBlock","getPreviousSpan","blockPath","spanPath","previousSpan","childPath","Node","isBefore","getNextSpan","nextSpan","isAfter","createWithPortableTextMarkModel","normalizeNode","nodeEntry","nextNode","mergeNodes","parent","decorator","annotations","orphanedAnnotations","markDefKeys","Set","newMarkDefs","markDef","has","add","previousSelectionIsCollapsed","Range","isCollapsed","newSelectionIsCollapsed","focusSpan","nodes","mode","match","newFocusSpan","movedToNextSpan","movedToPreviousSpan","_block","depth","previousSpanAnnotations","nextSpanAnnotations","annotationsEnding","annotation","atTheEndOfAnnotation","annotationsStarting","atTheStartOfAnnotation","nextSpanDecorators","collapsedSelection","marksWithoutAnnotations","spanHasAnnotations","spanIsEmpty","atTheBeginningOfSpan","atTheEndOfSpan","spanAnnotations","previousSpanHasAnnotations","previousSpanHasSameAnnotations","previousSpanHasSameAnnotation","previousSpanHasSameMarks","nextSpanSharesSomeAnnotations","isExpanded","deletingFromTheEnd","deletingAllText","nextSpanHasSameAnnotation","marksWithoutAnnotationMarks","targetPath","oldDefs","removeDecoratorActionImplementation","hanging","eMark","lonelyEmptySpan","existingMarksWithoutDecorator","existingMark","existingMarks","isDecoratorActive","selectedTextNodes","addAnnotationActionImplementation","parsedAnnotation","parseAnnotation","paths","markDefPath","markDefPaths","selectedBlocks","isBackward","annotationKey","unshift","existingSameTypeAnnotations","removeAnnotationActionImplementation","potentialAnnotations","selectedChild","selectedChildPath","annotationToRemove","previousSpansWithSameAnnotation","nextSpansWithSameAnnotation","marksWithoutAnnotation","toSlatePath","isKeySegment","isVoid","toSlateRange","moveRangeByOperation","range","Point","transform","blockSetBehaviorActionImplementation","location","filteredProps","slateBlock","blockUnsetBehaviorActionImplementation","propsToRemove","prop","updatedTextBlock","omit","propsToSet","updatedBlockObject","getFocusBlock","getSelectionStartBlock","selectionStartPoint","start","getPointBlock","getSelectionEndBlock","selectionEndPoint","end","getFocusChild","focusBlock","focusBlockPath","focusChild","getPointChild","pointChild","getFirstBlock","firstBlockPath","getLastBlock","lastBlockPath","getNodeBlock","isEditor","isBlockElement","elementToBlock","element","isInline","blockObject","isListItemActive","listItem","isListBlock","isStyleActive","slateRangeToSelection","anchorBlock","anchorChild","backward","decoratorAddActionImplementation","manualAnchor","utils","blockOffset","direction","manualFocus","manualSelection","editorSelection","anchorOffset","selectionPoint","focusOffset","newValue","newSelection","offsets","trimmedSelection","selectors","activeDecorators","newRange","splitTextNodes","isRange","deleteActionImplementation","deleteBackwardActionImplementation","deleteBackward","unit","deleteBlockActionImplementation","deleteForwardActionImplementation","deleteForward","insertInlineObjectActionImplementation","parsedInlineObject","parseInlineObject","inlineObject","focusTextBlock","insertSpanActionImplementation","insertBlockActionImplementation","fragment","placement","insertBlock","startBlock","startBlockPath","endBlock","endBlockPath","DOMEditor","lastBlock","nextPath","selectionBefore","insertFragment","endBlockEndPoint","adjustedSelection","endBlockStartPoint","next","moveBackwardActionImplementation","move","distance","moveBlockActionImplementation","to","moveNodes","moveForwardActionImplementation","selectActionImplementation","behaviorActionImplementations","performAction","createWithEventListeners","maxBlocks","insertBreak","behaviorEvent","insertData","dataTransfer","insertSoftBreak","redo","setFragmentData","undo","createWithMaxBlocks","rows","createWithObjectKeys","existingKeys","descendants","debugVerbose","createApplyPatch","changed","insertPatch","unsetPatch","setPatch","findBlockAndChildFromPath","diffMatchPatchApplyPatches","allowExceedingIndices","cleanupEfficiency","makeDiff","debugState","targetBlockPath","targetChildPath","blocksToInsert","targetBlockIndex","normalizedIdx","childrenToInsert","targetChildIndex","childInsertPath","newText","nextRest","prevChildren","prevRest","c","newVal","applyAll","previousSelection","_child","isKeyedSegment","segment","stateName","findBlockFromPath","isMatch","createWithPatches","patchFunctions","previousChildren","applyPatch","bufferedPatches","handleBufferedRemotePatches","normalize","handlePatches","p","editorWasEmpty","editorIsEmpty","createWithPlaceholderBlock","insertNode","createWithPortableTextBlockStyle","defaultStyle","SlateText","createWithPortableTextSelections","prevSelection","emitPortableTextSelection","ptRange","existing","createWithSchemaTypes","isSpan","obj","createWithUtils","withPlugins","e","operationToPatches","withObjectKeys","withSchemaTypes","withPatches","withMaxBlocks","withUndoRedo","withPortableTextMarkModel","withPortableTextBlockStyle","withPlaceholderBlock","withUtils","withPortableTextSelections","slateEditors","createSlateEditor","config","existingSlateEditor","unsubscriptions","instance","withReact","createEditor","initialValue","createLegacySchema","portableTextType","blockType","of","findBlockType","childrenField","fields","field","ofType","spanType","memberType","inlineObjectTypes","blockObjectTypes","resolveEnabledStyles","resolveEnabledDecorators","lists","resolveEnabledListItems","styleField","btField","textStyles","list","listField","listItems","defineSchema","definition","temporaryImageName","temporaryUrlName","temporaryObjectNames","image","url","objectNames","defaultObjectTitles","legacySchemaToEditorSchema","jsonType","compileSchemaDefinitionToLegacySchema","defineType","portableTextSchema","defineField","startCase","SanitySchema","pteSchema","slateChildrenToBlocks","descendant","processedChildren","getActiveDecorators","slateEditorInstance","defaultCompare","a","b","useEditorSelector","selector","compare","editorActorSnapshot","getEditorSnapshot","_internal","tag","createEditableAPI","blur","toggleMark","toggleList","toggleBlockStyle","isMarkActive","slateSelection","insertChild","focusChildPath","focusNode","hasBlockStyle","hasListStyle","findByPath","slatePath","ptBlock","ptChild","findDOMNode","ReactEditor","toDOMNode","activeAnnotations","spans","isAnnotationActive","annotationType","addAnnotation","SlateElement","removeAnnotation","getSelection","getValue","isCollapsedSelection","isExpandedSelection","getFragment","isSelectionsOverlapping","selectionA","selectionB","rangeA","rangeB","selectionMarkDefs","accMarkDefs","markKey","compileSchemasFromEditorConfig","schemaDefinition","hasOwnProperty","editorConfigToMachineInput","getLegacySchema","createInternalEditor","registerBehavior","behavior","listener","EditorActorContext","createContext","getGlobalScope","globalThis","window","self","global","globalScope","createGloballyScopedContext","defaultValue","symbol","Symbol","for","document","EditorContext","addAnnotationOnCollapsedSelection","defineBehavior","isSelectionCollapsed","caretWordSelection","getCaretWordSelection","raise","coreAnnotationBehaviors","IS_MAC","test","navigator","userAgent","modifiers","alt","control","meta","aliases","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","rawHotkeySegment","optional","endsWith","hotkeySegment","toKeyName","modifier","alias","code","TypeError","keyCode","toKeyCode","toLowerCase","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","focusBlockObject","nextBlock","arrowUpOnLonelyBlockObject","previousBlock","breakingBlockObject","getFocusBlockObject","clickingAboveLonelyBlockObject","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","selectionCollapsed","isEmptyTextBlock","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","emShortcut","underlineShortcut","codeShortcut","coreDndBehaviors","dragOrigin","isOverlappingSelection","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","focusLevel","breakingAtTheStartOfTextBlock","focusDecorators","focusAnnotations","breakingEntireDocument","firstBlock","firstBlockStartPoint","lastBlockEndPoint","breakingEntireBlocks","selectionStartBlock","selectionEndBlock","startBlockStartPoint","coreInsertBreakBehaviors","MAX_LIST_LEVEL","clearListOnBackspace","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedListBlocks","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreBehaviors","abstractAnnotationBehaviors","isActiveAnnotation","abstractDecoratorBehaviors","isActiveDecorator","blockOffsetsToSelection","abstractDeleteBehaviors","abstractInsertBehaviors","getFocusTextBlock","abstractListItemBehaviors","selectedTextBlocks","getSelectedTextBlocks","isActiveListItem","abstractMoveBehaviors","getPreviousBlock","getNextBlock","abstractSelectBehaviors","getBlockEndPoint","getBlockStartPoint","abstractSplitBehaviors","getSelectionStartPoint","getSelectionEndPoint","blockEndPoint","newTextBlockSelection","newTextBlock","abstractStyleBehaviors","isActiveStyle","keyIs","lineBreak","raiseInsertSoftBreak","raiseDeserializationSuccessOrFailure","success","failures","getData","deserializeEvent","failure","raiseSerializationSuccessOrFailure","serializeEvents","serializeEvent","defaultBehaviors","effect","setData","dropPosition","droppingOnDragOrigin","draggingEntireBlocks","draggedBlocks","getActiveAnnotations","textRuns","getTextBlockText","textRun","isSelectionExpanded","isSyntheticBehaviorEvent","isCustomBehaviorEvent","isNativeBehaviorEvent","isAbstractBehaviorEvent","abstractBehaviorEventTypes","nativeBehaviorEventTypes","startsWith","eventCategory","performEvent","behaviors","remainingEventBehaviors","nativeEvent","eventBehaviors","listenedNamespace","eventNamespace","preventDefault","message","guardSnapshot","nativeEventPrevented","defaultBehaviorOverwritten","eventBehaviorIndex","eventBehavior","shouldRun","actionSet","actionsSnapshot","createEditorSnapshot","editorMachine","tags","pendingEvents","pendingIncomingPatchesEvents","handle blur","handle focus","handle behavior event","slate is busy","initialReadOnly","dragstart","ghost","parentNode","removeChild","dragend","drop","pristine","normalizing","dirty","PortableTextEditorContext","usePortableTextEditor","useContext","PortableTextEditorSelectionContext","usePortableTextEditorSelection","PortableTextEditorSelectionProvider","setSelection","useState","startTransition","jsx","PortableTextEditor","Component","change$","Subject","constructor","schemaType","createActor","Number","parseInt","componentDidUpdate","prevProps","editorRef","setEditable","render","legacyPatches","incomingPatches$","patches$","change","Slate","blockStyle","listStyle","isObjectPath","_editor","isChildObjectEditPath","RoutePatchesObservableToEditorActor","subscribe","payload","RouteEventsToChanges","handleChange","useEffectEvent","bb5","isLoading","EditorProvider","initialConfig","internalEditor","useMemo","portableTextEditor","jsxs","useEditor","React"],"mappings":"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","x_google_ignoreList":[7,22]}