@portabletext/editor 1.48.8 → 1.48.10

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,8 +1,8 @@
1
1
  "use strict";
2
- var selector_isOverlappingSelection = require("./selector.is-overlapping-selection.cjs");
2
+ var types = require("@sanity/types"), selector_isOverlappingSelection = require("./selector.is-overlapping-selection.cjs");
3
3
  const getFocusInlineObject = (snapshot) => {
4
4
  const focusChild = selector_isOverlappingSelection.getFocusChild(snapshot);
5
- return focusChild && !selector_isOverlappingSelection.isPortableTextSpan(focusChild.node) ? {
5
+ return focusChild && !types.isPortableTextSpan(focusChild.node) ? {
6
6
  node: focusChild.node,
7
7
  path: focusChild.path
8
8
  } : void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"selector.get-focus-inline-object.cjs","sources":["../../src/selectors/selector.get-focus-inline-object.ts"],"sourcesContent":["import {\n isPortableTextSpan,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getFocusChild} from './selectors'\n\n/**\n * @public\n */\nexport const getFocusInlineObject: EditorSelector<\n | {node: PortableTextObject; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = (snapshot) => {\n const focusChild = getFocusChild(snapshot)\n\n return focusChild && !isPortableTextSpan(focusChild.node)\n ? {node: focusChild.node, path: focusChild.path}\n : undefined\n}\n"],"names":["getFocusInlineObject","snapshot","focusChild","getFocusChild","isPortableTextSpan","node","path","undefined"],"mappings":";;AAWO,MAAMA,uBAGRC,CAAa,aAAA;AACVC,QAAAA,aAAaC,8CAAcF,QAAQ;AAEzC,SAAOC,cAAc,CAACE,gCAAAA,mBAAmBF,WAAWG,IAAI,IACpD;AAAA,IAACA,MAAMH,WAAWG;AAAAA,IAAMC,MAAMJ,WAAWI;AAAAA,EAAAA,IACzCC;AACN;;"}
1
+ {"version":3,"file":"selector.get-focus-inline-object.cjs","sources":["../../src/selectors/selector.get-focus-inline-object.ts"],"sourcesContent":["import {\n isPortableTextSpan,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getFocusChild} from './selectors'\n\n/**\n * @public\n */\nexport const getFocusInlineObject: EditorSelector<\n | {node: PortableTextObject; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = (snapshot) => {\n const focusChild = getFocusChild(snapshot)\n\n return focusChild && !isPortableTextSpan(focusChild.node)\n ? {node: focusChild.node, path: focusChild.path}\n : undefined\n}\n"],"names":["getFocusInlineObject","snapshot","focusChild","getFocusChild","isPortableTextSpan","node","path","undefined"],"mappings":";;AAWO,MAAMA,uBAGRC,CAAa,aAAA;AACVC,QAAAA,aAAaC,8CAAcF,QAAQ;AAEzC,SAAOC,cAAc,CAACE,MAAAA,mBAAmBF,WAAWG,IAAI,IACpD;AAAA,IAACA,MAAMH,WAAWG;AAAAA,IAAMC,MAAMJ,WAAWI;AAAAA,EAAAA,IACzCC;AACN;;"}
@@ -1,21 +1,5 @@
1
1
  "use strict";
2
- var util_sliceBlocks = require("./util.slice-blocks.cjs");
3
- const reKeySegment = /_key\s*==\s*['"](.*)['"]/;
4
- function isKeySegment(segment) {
5
- return typeof segment == "string" ? reKeySegment.test(segment.trim()) : typeof segment == "object" && "_key" in segment;
6
- }
7
- function isRecord$1(value) {
8
- return !!value && (typeof value == "object" || typeof value == "function");
9
- }
10
- function isPortableTextSpan(value) {
11
- return isRecord$1(value) && value._type === "span" && typeof value.text == "string" && ("marks" in value ? Array.isArray(value.marks) && value.marks.every((mark) => typeof mark == "string") : !0);
12
- }
13
- function defineType(schemaDefinition, defineOptions) {
14
- return schemaDefinition;
15
- }
16
- function defineField(schemaField, defineOptions) {
17
- return schemaField;
18
- }
2
+ var util_sliceBlocks = require("./util.slice-blocks.cjs"), types = require("@sanity/types");
19
3
  const isSelectionCollapsed = (snapshot) => snapshot.context.selection ? JSON.stringify(snapshot.context.selection.anchor.path) === JSON.stringify(snapshot.context.selection.focus.path) && snapshot.context.selection?.anchor.offset === snapshot.context.selection?.focus.offset : !1, getFocusBlock = (snapshot) => {
20
4
  const key = snapshot.context.selection && util_sliceBlocks.isKeyedSegment(snapshot.context.selection.focus.path[0]) ? snapshot.context.selection.focus.path[0]._key : void 0, node = key ? snapshot.context.value.find((block) => block._key === key) : void 0;
21
5
  return node && key ? {
@@ -179,7 +163,7 @@ const isSelectionCollapsed = (snapshot) => snapshot.context.selection ? JSON.str
179
163
  if (snapshot.context.selection)
180
164
  return snapshot.context.selection.backward ? snapshot.context.selection.focus : snapshot.context.selection.anchor;
181
165
  }, getNextInlineObject = (snapshot) => {
182
- const focusTextBlock = getFocusTextBlock(snapshot), selectionEndPoint = getSelectionEndPoint(snapshot), selectionEndPointChildKey = selectionEndPoint && isKeySegment(selectionEndPoint.path[2]) ? selectionEndPoint.path[2]._key : void 0;
166
+ const focusTextBlock = getFocusTextBlock(snapshot), selectionEndPoint = getSelectionEndPoint(snapshot), selectionEndPointChildKey = selectionEndPoint && types.isKeySegment(selectionEndPoint.path[2]) ? selectionEndPoint.path[2]._key : void 0;
183
167
  if (!focusTextBlock || !selectionEndPointChildKey)
184
168
  return;
185
169
  let endPointChildFound = !1, inlineObject;
@@ -200,7 +184,7 @@ const isSelectionCollapsed = (snapshot) => snapshot.context.selection ? JSON.str
200
184
  }
201
185
  return inlineObject;
202
186
  }, getPreviousInlineObject = (snapshot) => {
203
- const focusTextBlock = getFocusTextBlock(snapshot), selectionStartPoint = getSelectionStartPoint(snapshot), selectionStartPointChildKey = selectionStartPoint && isKeySegment(selectionStartPoint.path[2]) ? selectionStartPoint.path[2]._key : void 0;
187
+ const focusTextBlock = getFocusTextBlock(snapshot), selectionStartPoint = getSelectionStartPoint(snapshot), selectionStartPointChildKey = selectionStartPoint && types.isKeySegment(selectionStartPoint.path[2]) ? selectionStartPoint.path[2]._key : void 0;
204
188
  if (!focusTextBlock || !selectionStartPointChildKey)
205
189
  return;
206
190
  let inlineObject;
@@ -435,8 +419,6 @@ function isOverlappingSelection(selection) {
435
419
  return endPointBeforeSelection && !endPointEqualToOriginalStartPoint || startPointAfterSelection && !startPointEqualToOriginalEndPoint ? !1 : !originalStartPointBeforeStartPoint && originalStartPointAfterStartPoint && !originalEndPointBeforeEndPoint && originalEndPointAfterEndPoint ? !endPointEqualToOriginalStartPoint : originalStartPointBeforeStartPoint && !originalStartPointAfterStartPoint && originalEndPointBeforeEndPoint && !originalEndPointAfterEndPoint ? !startPointEqualToOriginalEndPoint : !startPointAfterSelection || !startPointBeforeSelection || !endPointAfterSelection || !endPointBeforeSelection;
436
420
  };
437
421
  }
438
- exports.defineField = defineField;
439
- exports.defineType = defineType;
440
422
  exports.getCaretWordSelection = getCaretWordSelection;
441
423
  exports.getFirstBlock = getFirstBlock;
442
424
  exports.getFocusBlock = getFocusBlock;
@@ -459,11 +441,9 @@ exports.getSelectionStartPoint = getSelectionStartPoint;
459
441
  exports.getSelectionText = getSelectionText;
460
442
  exports.isAtTheEndOfBlock = isAtTheEndOfBlock;
461
443
  exports.isAtTheStartOfBlock = isAtTheStartOfBlock;
462
- exports.isKeySegment = isKeySegment;
463
444
  exports.isOverlappingSelection = isOverlappingSelection;
464
445
  exports.isPointAfterSelection = isPointAfterSelection;
465
446
  exports.isPointBeforeSelection = isPointBeforeSelection;
466
- exports.isPortableTextSpan = isPortableTextSpan;
467
447
  exports.isSelectionCollapsed = isSelectionCollapsed;
468
448
  exports.isSelectionExpanded = isSelectionExpanded;
469
449
  //# sourceMappingURL=selector.is-overlapping-selection.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"selector.is-overlapping-selection.cjs","sources":["../../../../node_modules/.pnpm/@sanity+types@3.87.0_@types+react@19.1.2_debug@4.4.0/node_modules/@sanity/types/lib/index.mjs","../../src/selectors/selector.is-selection-collapsed.ts","../../src/selectors/selectors.ts","../../src/selectors/selector.get-selection-end-point.ts","../../src/selectors/selector.get-selection-start-point.ts","../../src/selectors/selector.get-next-inline-object.ts","../../src/selectors/selector.get-previous-inline-object.ts","../../src/selectors/selector.get-selected-slice.ts","../../src/selectors/selector.get-selection-text.ts","../../src/selectors/selector.is-selection-expanded.ts","../../src/selectors/selector.get-caret-word-selection.ts","../../src/selectors/selector.is-at-the-end-of-block.ts","../../src/selectors/selector.is-at-the-start-of-block.ts","../../src/selectors/selector.is-point-after-selection.ts","../../src/selectors/selector.is-point-before-selection.ts","../../src/selectors/selector.is-overlapping-selection.ts"],"sourcesContent":["function isObject(obj) {\n return typeof obj == \"object\" && obj !== null && !Array.isArray(obj);\n}\nfunction isReference(reference) {\n return isObject(reference) && typeof reference._ref == \"string\";\n}\nfunction isImage(value) {\n return isObject(value) && isReference(value.asset) && value.asset._ref.startsWith(\"image-\");\n}\nfunction isCrossDatasetReference(reference) {\n return isObject(reference) && typeof reference._ref == \"string\" && typeof reference._dataset == \"string\" && typeof reference._projectId == \"string\";\n}\nfunction isSanityDocument(document) {\n return isObject(document) && typeof document._id == \"string\" && typeof document._type == \"string\";\n}\nfunction isTypedObject(obj) {\n return isObject(obj) && typeof obj._type == \"string\";\n}\nfunction isKeyedObject(obj) {\n return isObject(obj) && typeof obj._key == \"string\";\n}\nfunction isGlobalDocumentReference(reference) {\n return !isObject(reference) || typeof reference._ref != \"string\" ? !1 : reference._ref.split(\":\").length === 3;\n}\nfunction isValidationErrorMarker(marker) {\n return marker.level === \"error\";\n}\nfunction isValidationWarningMarker(marker) {\n return marker.level === \"warning\";\n}\nfunction isValidationInfoMarker(marker) {\n return marker.level === \"info\";\n}\nconst MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME = \"sanity.asset.aspect\";\nfunction isAssetAspect(maybeAssetAspect) {\n return typeof maybeAssetAspect == \"object\" && maybeAssetAspect !== null && \"_type\" in maybeAssetAspect && maybeAssetAspect._type === MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME;\n}\nfunction defineAssetAspect(definition) {\n const { assetType, name } = definition;\n return {\n _type: MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME,\n _id: `${name}`,\n definition,\n ...assetType && {\n assetType: Array.isArray(assetType) ? assetType : [assetType]\n }\n };\n}\nfunction isCreateMutation(mutation) {\n return \"create\" in mutation;\n}\nfunction isCreateIfNotExistsMutation(mutation) {\n return \"createIfNotExists\" in mutation;\n}\nfunction isCreateOrReplaceMutation(mutation) {\n return \"createOrReplace\" in mutation;\n}\nfunction isDeleteMutation(mutation) {\n return \"delete\" in mutation;\n}\nfunction isPatchMutation(mutation) {\n return \"patch\" in mutation;\n}\nconst reKeySegment = /_key\\s*==\\s*['\"](.*)['\"]/, reIndexTuple = /^\\d*:\\d*$/;\nfunction isIndexSegment(segment) {\n return typeof segment == \"number\" || typeof segment == \"string\" && /^\\[\\d+\\]$/.test(segment);\n}\nfunction isKeySegment(segment) {\n return typeof segment == \"string\" ? reKeySegment.test(segment.trim()) : typeof segment == \"object\" && \"_key\" in segment;\n}\nfunction isIndexTuple(segment) {\n if (typeof segment == \"string\" && reIndexTuple.test(segment))\n return !0;\n if (!Array.isArray(segment) || segment.length !== 2)\n return !1;\n const [from, to] = segment;\n return (typeof from == \"number\" || from === \"\") && (typeof to == \"number\" || to === \"\");\n}\nfunction isRecord$1(value) {\n return !!value && (typeof value == \"object\" || typeof value == \"function\");\n}\nfunction isPortableTextTextBlock(value) {\n return isRecord$1(value) && typeof value._type == \"string\" && // block types can be named, so expect anything here.\n Array.isArray(value.children) && value.children.every((child) => isRecord$1(child)) && (\"markDefs\" in value ? Array.isArray(value.markDefs) && value.markDefs.every((def) => isRecord$1(def)) : !0) && (\"style\" in value ? typeof value.style == \"string\" : !0);\n}\nfunction isPortableTextSpan(value) {\n return isRecord$1(value) && value._type === \"span\" && typeof value.text == \"string\" && (\"marks\" in value ? Array.isArray(value.marks) && value.marks.every((mark) => typeof mark == \"string\") : !0);\n}\nfunction isPortableTextListBlock(value) {\n return isPortableTextTextBlock(value) && \"listItem\" in value && typeof value.listItem == \"string\" && \"level\" in value && Number.isInteger(value.level);\n}\nfunction isRecord(value) {\n return !!value && (typeof value == \"object\" || typeof value == \"function\");\n}\nfunction isDocumentSchemaType(type) {\n if (!isObjectSchemaType(type))\n return !1;\n let current = type;\n for (; current; ) {\n if (current.name === \"document\")\n return !0;\n current = current.type;\n }\n return !1;\n}\nfunction isObjectSchemaType(type) {\n return isRecord(type) ? type.jsonType === \"object\" : !1;\n}\nfunction isArraySchemaType(type) {\n return isRecord(type) ? type.jsonType === \"array\" : !1;\n}\nfunction isArrayOfBlocksSchemaType(type) {\n return isArraySchemaType(type) && type.of.some((memberType) => isBlockSchemaType(memberType));\n}\nfunction isArrayOfObjectsSchemaType(type) {\n return isArraySchemaType(type) && type.of.every((memberType) => isObjectSchemaType(memberType));\n}\nfunction isArrayOfPrimitivesSchemaType(type) {\n return isArraySchemaType(type) && type.of.every((memberType) => isPrimitiveSchemaType(memberType));\n}\nfunction isBooleanSchemaType(type) {\n return isRecord(type) ? type.jsonType === \"boolean\" : !1;\n}\nfunction isStringSchemaType(type) {\n return isRecord(type) ? type.jsonType === \"string\" : !1;\n}\nfunction isNumberSchemaType(type) {\n return isRecord(type) ? type.jsonType === \"number\" : !1;\n}\nfunction isPrimitiveSchemaType(type) {\n return isBooleanSchemaType(type) || isStringSchemaType(type) || isNumberSchemaType(type);\n}\nfunction isReferenceSchemaType(type) {\n return isRecord(type) && (type.name === \"reference\" || isReferenceSchemaType(type.type));\n}\nfunction isImageSchemaType(type) {\n return isRecord(type) && (type.name === \"image\" || isImageSchemaType(type.type));\n}\nfunction isFileSchemaType(type) {\n return isRecord(type) && (type.name === \"file\" || isFileSchemaType(type.type));\n}\nfunction isDeprecatedSchemaType(type) {\n return isRecord(type) ? typeof type.deprecated < \"u\" : !1;\n}\nfunction isDeprecationConfiguration(type) {\n return isRecord(type) ? typeof type.deprecated < \"u\" : !1;\n}\nfunction isCrossDatasetReferenceSchemaType(type) {\n return isRecord(type) && (type.name === \"crossDatasetReference\" || isCrossDatasetReferenceSchemaType(type.type));\n}\nfunction isTitledListValue(item) {\n return typeof item == \"object\" && item !== null && \"title\" in item && \"value\" in item;\n}\nfunction isSpanSchemaType(type) {\n return isRecord(type) ? Array.isArray(type.annotations) && Array.isArray(type.decorators) : !1;\n}\nfunction isBlockSchemaType(type) {\n if (!isRecord(type) || !Array.isArray(type.fields)) return !1;\n const maybeSpanChildren = type.fields.find(isBlockChildrenObjectField), maybeStyle = type.fields.find(isBlockStyleObjectField), maybeList = type.fields.find(isBlockListObjectField);\n return isBlockChildrenObjectField(maybeSpanChildren) && isBlockStyleObjectField(maybeStyle) && isBlockListObjectField(maybeList);\n}\nfunction isBlockStyleObjectField(field) {\n return !isRecord(field) || field.name !== \"style\" ? !1 : isRecord(field.type) && field.type.jsonType === \"string\";\n}\nfunction isBlockListObjectField(field) {\n return !isRecord(field) || field.name !== \"listItem\" ? !1 : isRecord(field.type) && field.type.jsonType === \"string\";\n}\nfunction isBlockChildrenObjectField(field) {\n return !isRecord(field) || field.name !== \"children\" || !isArraySchemaType(field.type) ? !1 : field.type.of.some(isSpanSchemaType);\n}\nfunction defineType(schemaDefinition, defineOptions) {\n return schemaDefinition;\n}\nfunction defineField(schemaField, defineOptions) {\n return schemaField;\n}\nfunction defineArrayMember(arrayOfSchema, defineOptions) {\n return arrayOfSchema;\n}\nfunction typed(input) {\n return input;\n}\nconst searchStrategies = [\"groqLegacy\", \"groq2024\"];\nfunction isSearchStrategy(maybeSearchStrategy) {\n return searchStrategies.includes(maybeSearchStrategy);\n}\nfunction isSlug(thing) {\n return isObject(thing) && typeof thing.current == \"string\";\n}\nfunction isCreateSquashedMutation(mutation) {\n return \"createSquashed\" in mutation;\n}\nfunction isValidationError(node) {\n return node.level === \"error\";\n}\nfunction isValidationWarning(node) {\n return node.level === \"warning\";\n}\nfunction isValidationInfo(node) {\n return node.level === \"info\";\n}\nexport {\n MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME,\n defineArrayMember,\n defineAssetAspect,\n defineField,\n defineType,\n isArrayOfBlocksSchemaType,\n isArrayOfObjectsSchemaType,\n isArrayOfPrimitivesSchemaType,\n isArraySchemaType,\n isAssetAspect,\n isBlockChildrenObjectField,\n isBlockListObjectField,\n isBlockSchemaType,\n isBlockStyleObjectField,\n isBooleanSchemaType,\n isCreateIfNotExistsMutation,\n isCreateMutation,\n isCreateOrReplaceMutation,\n isCreateSquashedMutation,\n isCrossDatasetReference,\n isCrossDatasetReferenceSchemaType,\n isDeleteMutation,\n isDeprecatedSchemaType,\n isDeprecationConfiguration,\n isDocumentSchemaType,\n isFileSchemaType,\n isGlobalDocumentReference,\n isImage,\n isImageSchemaType,\n isIndexSegment,\n isIndexTuple,\n isKeySegment,\n isKeyedObject,\n isNumberSchemaType,\n isObjectSchemaType,\n isPatchMutation,\n isPortableTextListBlock,\n isPortableTextSpan,\n isPortableTextTextBlock,\n isPrimitiveSchemaType,\n isReference,\n isReferenceSchemaType,\n isSanityDocument,\n isSearchStrategy,\n isSlug,\n isSpanSchemaType,\n isStringSchemaType,\n isTitledListValue,\n isTypedObject,\n isValidationError,\n isValidationErrorMarker,\n isValidationInfo,\n isValidationInfoMarker,\n isValidationWarning,\n isValidationWarningMarker,\n searchStrategies,\n typed\n};\n//# sourceMappingURL=index.mjs.map\n","import type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const isSelectionCollapsed: EditorSelector<boolean> = (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n return (\n JSON.stringify(snapshot.context.selection.anchor.path) ===\n JSON.stringify(snapshot.context.selection.focus.path) &&\n snapshot.context.selection?.anchor.offset ===\n snapshot.context.selection?.focus.offset\n )\n}\n","import type {\n KeyedSegment,\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isListBlock, isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\n\n/**\n * @public\n */\nexport const getFocusBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusListBlock: EditorSelector<\n {node: PortableTextListBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n return focusTextBlock && isListBlock(snapshot.context, focusTextBlock.node)\n ? {node: focusTextBlock.node, path: focusTextBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusBlock = getFocusBlock(snapshot)\n\n return focusBlock && isTextBlock(snapshot.context, focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusBlockObject: EditorSelector<\n {node: PortableTextObject; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusBlock = getFocusBlock(snapshot)\n\n return focusBlock && !isTextBlock(snapshot.context, focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusBlock = getFocusTextBlock(snapshot)\n\n if (!focusBlock) {\n return undefined\n }\n\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.focus.path[2])\n ? snapshot.context.selection.focus.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? focusBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...focusBlock.path, 'children', {_key: key}]}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = (snapshot) => {\n const focusChild = getFocusChild(snapshot)\n\n return focusChild && isSpan(snapshot.context, focusChild.node)\n ? {node: focusChild.node, path: focusChild.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFirstBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const node = snapshot.context.value[0]\n\n return node ? {node, path: [{_key: node._key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getLastBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const node = snapshot.context.value[snapshot.context.value.length - 1]\n ? snapshot.context.value[snapshot.context.value.length - 1]\n : undefined\n\n return node ? {node, path: [{_key: node._key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getSelectedBlocks: EditorSelector<\n Array<{node: PortableTextBlock; path: [KeyedSegment]}>\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks: Array<{node: PortableTextBlock; path: [KeyedSegment]}> =\n []\n const startKey = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n const endKey = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n\n if (!startKey || !endKey) {\n return selectedBlocks\n }\n\n for (const block of snapshot.context.value) {\n if (block._key === startKey) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n\n if (startKey === endKey) {\n break\n }\n continue\n }\n\n if (block._key === endKey) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n break\n }\n\n if (selectedBlocks.length > 0) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n }\n }\n\n return selectedBlocks\n}\n\n/**\n * @public\n */\nexport const getSelectionStartBlock: EditorSelector<\n | {\n node: PortableTextBlock\n path: [KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getSelectionEndBlock: EditorSelector<\n | {\n node: PortableTextBlock\n path: [KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getPreviousBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n let previousBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionStartBlock = getSelectionStartBlock(snapshot)\n\n if (!selectionStartBlock) {\n return undefined\n }\n\n let foundSelectionStartBlock = false\n\n for (const block of snapshot.context.value) {\n if (block._key === selectionStartBlock.node._key) {\n foundSelectionStartBlock = true\n break\n }\n\n previousBlock = {node: block, path: [{_key: block._key}]}\n }\n\n if (foundSelectionStartBlock && previousBlock) {\n return previousBlock\n }\n\n return undefined\n}\n\n/**\n * @public\n */\nexport const getNextBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n let nextBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionEndBlock = getSelectionEndBlock(snapshot)\n\n if (!selectionEndBlock) {\n return undefined\n }\n\n let foundSelectionEndBlock = false\n\n for (const block of snapshot.context.value) {\n if (block._key === selectionEndBlock.node._key) {\n foundSelectionEndBlock = true\n continue\n }\n\n if (foundSelectionEndBlock) {\n nextBlock = {node: block, path: [{_key: block._key}]}\n break\n }\n }\n\n if (foundSelectionEndBlock && nextBlock) {\n return nextBlock\n }\n\n return undefined\n}\n","import type {EditorSelectionPoint} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectionEndPoint: EditorSelector<\n EditorSelectionPoint | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n return snapshot.context.selection.backward\n ? snapshot.context.selection.anchor\n : snapshot.context.selection.focus\n}\n","import type {EditorSelectionPoint} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectionStartPoint: EditorSelector<\n EditorSelectionPoint | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n return snapshot.context.selection.backward\n ? snapshot.context.selection.focus\n : snapshot.context.selection.anchor\n}\n","import {\n isKeySegment,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan} from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n */\nexport const getNextInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionEndPoint = getSelectionEndPoint(snapshot)\n const selectionEndPointChildKey =\n selectionEndPoint && isKeySegment(selectionEndPoint.path[2])\n ? selectionEndPoint.path[2]._key\n : undefined\n\n if (!focusTextBlock || !selectionEndPointChildKey) {\n return undefined\n }\n\n let endPointChildFound = false\n let inlineObject:\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n\n for (const child of focusTextBlock.node.children) {\n if (child._key === selectionEndPointChildKey) {\n endPointChildFound = true\n continue\n }\n\n if (!isSpan(snapshot.context, child) && endPointChildFound) {\n inlineObject = {\n node: child,\n path: [...focusTextBlock.path, 'children', {_key: child._key}],\n }\n break\n }\n }\n\n return inlineObject\n}\n","import {\n isKeySegment,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan} from '../utils'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n */\nexport const getPreviousInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionStartPointChildKey =\n selectionStartPoint && isKeySegment(selectionStartPoint.path[2])\n ? selectionStartPoint.path[2]._key\n : undefined\n\n if (!focusTextBlock || !selectionStartPointChildKey) {\n return undefined\n }\n\n let inlineObject:\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n\n for (const child of focusTextBlock.node.children) {\n if (child._key === selectionStartPointChildKey) {\n break\n }\n\n if (!isSpan(snapshot.context, child)) {\n inlineObject = {\n node: child,\n path: [...focusTextBlock.path, 'children', {_key: child._key}],\n }\n }\n }\n\n return inlineObject\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {sliceBlocks} from '../utils'\n\n/**\n * @public\n */\nexport const getSelectedSlice: EditorSelector<Array<PortableTextBlock>> = (\n snapshot,\n) => {\n return sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {getSelectedSlice} from './selector.get-selected-slice'\n\n/**\n * @public\n */\nexport const getSelectionText: EditorSelector<string> = (snapshot) => {\n const selectedSlice = getSelectedSlice(snapshot)\n\n return selectedSlice.reduce((text, block) => {\n if (!isTextBlock(snapshot.context, block)) {\n return text\n }\n\n return (\n text +\n block.children.reduce((text, child) => {\n if (isSpan(snapshot.context, child)) {\n return text + child.text\n }\n\n return text\n }, '')\n )\n }, '')\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport const isSelectionExpanded: EditorSelector<boolean> = (snapshot) => {\n return !isSelectionCollapsed(snapshot)\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelection} from '../types/editor'\nimport {\n blockOffsetToSpanSelectionPoint,\n getBlockEndPoint,\n getBlockStartPoint,\n spanSelectionPointToBlockOffset,\n} from '../utils'\nimport {getNextInlineObject} from './selector.get-next-inline-object'\nimport {getPreviousInlineObject} from './selector.get-previous-inline-object'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {getSelectionText} from './selector.get-selection-text'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\nimport {isSelectionExpanded} from './selector.is-selection-expanded'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n * Returns the selection of the of the word the caret is placed in.\n * Note: Only returns a word selection if the current selection is collapsed\n */\nexport const getCaretWordSelection: EditorSelector<EditorSelection> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return null\n }\n\n if (!isSelectionCollapsed(snapshot)) {\n return null\n }\n\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionStartOffset = selectionStartPoint\n ? spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartPoint || !selectionStartOffset) {\n return null\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n const blockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const textBefore = getSelectionText({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: previousInlineObject\n ? {path: previousInlineObject.path, offset: 0}\n : blockStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n const textDirectlyBefore = textBefore.split(/\\s+/).at(-1)\n\n const nextInlineObject = getNextInlineObject(snapshot)\n const blockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const textAfter = getSelectionText({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: nextInlineObject\n ? {path: nextInlineObject.path, offset: 0}\n : blockEndPoint,\n },\n },\n })\n const textDirectlyAfter = textAfter.split(/\\s+/).at(0)\n\n if (\n (textDirectlyBefore === undefined || textDirectlyBefore === '') &&\n (textDirectlyAfter === undefined || textDirectlyAfter === '')\n ) {\n return null\n }\n\n const caretWordStartOffset: BlockOffset = textDirectlyBefore\n ? {\n ...selectionStartOffset,\n offset: selectionStartOffset.offset - textDirectlyBefore.length,\n }\n : selectionStartOffset\n const caretWordEndOffset: BlockOffset = textDirectlyAfter\n ? {\n ...selectionStartOffset,\n offset: selectionStartOffset.offset + textDirectlyAfter.length,\n }\n : selectionStartOffset\n\n const caretWordStartSelectionPoint = blockOffsetToSpanSelectionPoint({\n context: snapshot.context,\n blockOffset: caretWordStartOffset,\n direction: 'backward',\n })\n const caretWordEndSelectionPoint = blockOffsetToSpanSelectionPoint({\n context: snapshot.context,\n blockOffset: caretWordEndOffset,\n direction: 'forward',\n })\n\n if (!caretWordStartSelectionPoint || !caretWordEndSelectionPoint) {\n return null\n }\n\n const caretWordSelection = {\n anchor: caretWordStartSelectionPoint,\n focus: caretWordEndSelectionPoint,\n }\n\n return isSelectionExpanded({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: caretWordSelection,\n },\n })\n ? caretWordSelection\n : null\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport function isAtTheEndOfBlock(block: {\n node: PortableTextBlock\n path: [KeyedSegment]\n}): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection || !isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const blockEndPoint = utils.getBlockEndPoint({\n context: snapshot.context,\n block,\n })\n\n return utils.isEqualSelectionPoints(\n snapshot.context.selection.focus,\n blockEndPoint,\n )\n }\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport function isAtTheStartOfBlock(block: {\n node: PortableTextBlock\n path: [KeyedSegment]\n}): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection || !isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint({\n context: snapshot.context,\n block,\n })\n\n return utils.isEqualSelectionPoints(\n snapshot.context.selection.focus,\n blockStartPoint,\n )\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointAfterSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = snapshot.context.selection.backward\n ? reverseSelection(snapshot.context.selection)\n : snapshot.context.selection\n\n const pointBlockKey = isKeyedSegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeyedSegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeyedSegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeyedSegment(selection.focus.path[2])\n ? selection.focus.path[2]._key\n : undefined\n\n if (!pointBlockKey || !endBlockKey) {\n return false\n }\n\n let after = false\n\n for (const block of snapshot.context.value) {\n if (block._key === endBlockKey) {\n if (block._key !== pointBlockKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this block\n\n if (!isTextBlock(snapshot.context, block)) {\n break\n }\n\n if (!pointChildKey || !endChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === endChildKey) {\n if (child._key !== pointChildKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this child\n\n after = point.offset > selection.focus.offset\n break\n }\n\n if (child._key === pointChildKey) {\n break\n }\n }\n }\n\n if (block._key === pointBlockKey) {\n break\n }\n }\n\n return after\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointBeforeSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = snapshot.context.selection.backward\n ? reverseSelection(snapshot.context.selection)\n : snapshot.context.selection\n\n const pointBlockKey = isKeyedSegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeyedSegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeyedSegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeyedSegment(selection.anchor.path[2])\n ? selection.anchor.path[2]._key\n : undefined\n\n if (!pointBlockKey || !startBlockKey) {\n return false\n }\n\n let before = false\n\n for (const block of snapshot.context.value) {\n if (block._key === pointBlockKey) {\n if (block._key !== startBlockKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this block\n\n if (!isTextBlock(snapshot.context, block)) {\n break\n }\n\n if (!pointChildKey || !startChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === pointChildKey) {\n if (child._key !== startChildKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this child\n\n before = point.offset < selection.anchor.offset\n break\n }\n\n if (child._key === startChildKey) {\n break\n }\n }\n }\n\n if (block._key === startBlockKey) {\n break\n }\n }\n\n return before\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport {isEqualSelectionPoints} from '../utils'\nimport type {EditorSelector} from './../editor/editor-selector'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {isPointAfterSelection} from './selector.is-point-after-selection'\nimport {isPointBeforeSelection} from './selector.is-point-before-selection'\n\n/**\n * @public\n */\nexport function isOverlappingSelection(\n selection: EditorSelection,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!selection || !snapshot.context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n const selectionEndPoint = getSelectionEndPoint({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n\n const originalSelectionStartPoint = getSelectionStartPoint(snapshot)\n const originalSelectionEndPoint = getSelectionEndPoint(snapshot)\n\n if (\n !selectionStartPoint ||\n !selectionEndPoint ||\n !originalSelectionStartPoint ||\n !originalSelectionEndPoint\n ) {\n return false\n }\n\n const startPointBeforeSelection =\n isPointBeforeSelection(selectionStartPoint)(snapshot)\n const startPointAfterSelection =\n isPointAfterSelection(selectionStartPoint)(snapshot)\n const endPointBeforeSelection =\n isPointBeforeSelection(selectionEndPoint)(snapshot)\n const endPointAfterSelection =\n isPointAfterSelection(selectionEndPoint)(snapshot)\n\n const originalStartPointBeforeStartPoint = isPointBeforeSelection(\n originalSelectionStartPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n const originalStartPointAfterStartPoint = isPointAfterSelection(\n originalSelectionStartPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n\n const originalEndPointBeforeEndPoint = isPointBeforeSelection(\n originalSelectionEndPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionEndPoint,\n focus: selectionEndPoint,\n },\n },\n })\n const originalEndPointAfterEndPoint = isPointAfterSelection(\n originalSelectionEndPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionEndPoint,\n focus: selectionEndPoint,\n },\n },\n })\n\n const endPointEqualToOriginalStartPoint = isEqualSelectionPoints(\n selectionEndPoint,\n originalSelectionStartPoint,\n )\n const startPointEqualToOriginalEndPoint = isEqualSelectionPoints(\n selectionStartPoint,\n originalSelectionEndPoint,\n )\n\n if (endPointBeforeSelection && !endPointEqualToOriginalStartPoint) {\n return false\n }\n\n if (startPointAfterSelection && !startPointEqualToOriginalEndPoint) {\n return false\n }\n\n if (\n !originalStartPointBeforeStartPoint &&\n originalStartPointAfterStartPoint &&\n !originalEndPointBeforeEndPoint &&\n originalEndPointAfterEndPoint\n ) {\n return !endPointEqualToOriginalStartPoint\n }\n\n if (\n originalStartPointBeforeStartPoint &&\n !originalStartPointAfterStartPoint &&\n originalEndPointBeforeEndPoint &&\n !originalEndPointAfterEndPoint\n ) {\n return !startPointEqualToOriginalEndPoint\n }\n\n if (\n !startPointAfterSelection ||\n !startPointBeforeSelection ||\n !endPointAfterSelection ||\n !endPointBeforeSelection\n ) {\n return true\n }\n\n return false\n }\n}\n"],"names":["isSelectionCollapsed","snapshot","context","selection","JSON","stringify","anchor","path","focus","offset","getFocusBlock","key","isKeyedSegment","_key","undefined","node","value","find","block","getFocusListBlock","focusTextBlock","getFocusTextBlock","isListBlock","focusBlock","isTextBlock","getFocusBlockObject","getFocusChild","children","span","getFocusSpan","focusChild","isSpan","getFirstBlock","getLastBlock","length","getSelectedBlocks","selectedBlocks","startKey","backward","endKey","push","getSelectionStartBlock","getSelectionEndBlock","getPreviousBlock","previousBlock","selectionStartBlock","foundSelectionStartBlock","getNextBlock","nextBlock","selectionEndBlock","foundSelectionEndBlock","getSelectionEndPoint","getSelectionStartPoint","getNextInlineObject","selectionEndPoint","selectionEndPointChildKey","isKeySegment","endPointChildFound","inlineObject","child","getPreviousInlineObject","selectionStartPoint","selectionStartPointChildKey","getSelectedSlice","sliceBlocks","blocks","getSelectionText","reduce","text","isSelectionExpanded","getCaretWordSelection","selectionStartOffset","spanSelectionPointToBlockOffset","selectionPoint","previousInlineObject","blockStartPoint","getBlockStartPoint","textDirectlyBefore","split","at","nextInlineObject","blockEndPoint","getBlockEndPoint","textDirectlyAfter","caretWordStartOffset","caretWordEndOffset","caretWordStartSelectionPoint","blockOffsetToSpanSelectionPoint","blockOffset","direction","caretWordEndSelectionPoint","caretWordSelection","isAtTheEndOfBlock","utils","isAtTheStartOfBlock","isPointAfterSelection","point","reverseSelection","pointBlockKey","pointChildKey","endBlockKey","endChildKey","after","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection","originalSelectionStartPoint","originalSelectionEndPoint","startPointBeforeSelection","startPointAfterSelection","endPointBeforeSelection","endPointAfterSelection","originalStartPointBeforeStartPoint","originalStartPointAfterStartPoint","originalEndPointBeforeEndPoint","originalEndPointAfterEndPoint","endPointEqualToOriginalStartPoint","isEqualSelectionPoints","startPointEqualToOriginalEndPoint"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"selector.is-overlapping-selection.cjs","sources":["../../src/selectors/selector.is-selection-collapsed.ts","../../src/selectors/selectors.ts","../../src/selectors/selector.get-selection-end-point.ts","../../src/selectors/selector.get-selection-start-point.ts","../../src/selectors/selector.get-next-inline-object.ts","../../src/selectors/selector.get-previous-inline-object.ts","../../src/selectors/selector.get-selected-slice.ts","../../src/selectors/selector.get-selection-text.ts","../../src/selectors/selector.is-selection-expanded.ts","../../src/selectors/selector.get-caret-word-selection.ts","../../src/selectors/selector.is-at-the-end-of-block.ts","../../src/selectors/selector.is-at-the-start-of-block.ts","../../src/selectors/selector.is-point-after-selection.ts","../../src/selectors/selector.is-point-before-selection.ts","../../src/selectors/selector.is-overlapping-selection.ts"],"sourcesContent":["import type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const isSelectionCollapsed: EditorSelector<boolean> = (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n return (\n JSON.stringify(snapshot.context.selection.anchor.path) ===\n JSON.stringify(snapshot.context.selection.focus.path) &&\n snapshot.context.selection?.anchor.offset ===\n snapshot.context.selection?.focus.offset\n )\n}\n","import type {\n KeyedSegment,\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isListBlock, isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\n\n/**\n * @public\n */\nexport const getFocusBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusListBlock: EditorSelector<\n {node: PortableTextListBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n return focusTextBlock && isListBlock(snapshot.context, focusTextBlock.node)\n ? {node: focusTextBlock.node, path: focusTextBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusBlock = getFocusBlock(snapshot)\n\n return focusBlock && isTextBlock(snapshot.context, focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusBlockObject: EditorSelector<\n {node: PortableTextObject; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusBlock = getFocusBlock(snapshot)\n\n return focusBlock && !isTextBlock(snapshot.context, focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusBlock = getFocusTextBlock(snapshot)\n\n if (!focusBlock) {\n return undefined\n }\n\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.focus.path[2])\n ? snapshot.context.selection.focus.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? focusBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...focusBlock.path, 'children', {_key: key}]}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = (snapshot) => {\n const focusChild = getFocusChild(snapshot)\n\n return focusChild && isSpan(snapshot.context, focusChild.node)\n ? {node: focusChild.node, path: focusChild.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFirstBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const node = snapshot.context.value[0]\n\n return node ? {node, path: [{_key: node._key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getLastBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const node = snapshot.context.value[snapshot.context.value.length - 1]\n ? snapshot.context.value[snapshot.context.value.length - 1]\n : undefined\n\n return node ? {node, path: [{_key: node._key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getSelectedBlocks: EditorSelector<\n Array<{node: PortableTextBlock; path: [KeyedSegment]}>\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks: Array<{node: PortableTextBlock; path: [KeyedSegment]}> =\n []\n const startKey = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n const endKey = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n\n if (!startKey || !endKey) {\n return selectedBlocks\n }\n\n for (const block of snapshot.context.value) {\n if (block._key === startKey) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n\n if (startKey === endKey) {\n break\n }\n continue\n }\n\n if (block._key === endKey) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n break\n }\n\n if (selectedBlocks.length > 0) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n }\n }\n\n return selectedBlocks\n}\n\n/**\n * @public\n */\nexport const getSelectionStartBlock: EditorSelector<\n | {\n node: PortableTextBlock\n path: [KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getSelectionEndBlock: EditorSelector<\n | {\n node: PortableTextBlock\n path: [KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getPreviousBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n let previousBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionStartBlock = getSelectionStartBlock(snapshot)\n\n if (!selectionStartBlock) {\n return undefined\n }\n\n let foundSelectionStartBlock = false\n\n for (const block of snapshot.context.value) {\n if (block._key === selectionStartBlock.node._key) {\n foundSelectionStartBlock = true\n break\n }\n\n previousBlock = {node: block, path: [{_key: block._key}]}\n }\n\n if (foundSelectionStartBlock && previousBlock) {\n return previousBlock\n }\n\n return undefined\n}\n\n/**\n * @public\n */\nexport const getNextBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n let nextBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionEndBlock = getSelectionEndBlock(snapshot)\n\n if (!selectionEndBlock) {\n return undefined\n }\n\n let foundSelectionEndBlock = false\n\n for (const block of snapshot.context.value) {\n if (block._key === selectionEndBlock.node._key) {\n foundSelectionEndBlock = true\n continue\n }\n\n if (foundSelectionEndBlock) {\n nextBlock = {node: block, path: [{_key: block._key}]}\n break\n }\n }\n\n if (foundSelectionEndBlock && nextBlock) {\n return nextBlock\n }\n\n return undefined\n}\n","import type {EditorSelectionPoint} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectionEndPoint: EditorSelector<\n EditorSelectionPoint | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n return snapshot.context.selection.backward\n ? snapshot.context.selection.anchor\n : snapshot.context.selection.focus\n}\n","import type {EditorSelectionPoint} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectionStartPoint: EditorSelector<\n EditorSelectionPoint | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n return snapshot.context.selection.backward\n ? snapshot.context.selection.focus\n : snapshot.context.selection.anchor\n}\n","import {\n isKeySegment,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan} from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n */\nexport const getNextInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionEndPoint = getSelectionEndPoint(snapshot)\n const selectionEndPointChildKey =\n selectionEndPoint && isKeySegment(selectionEndPoint.path[2])\n ? selectionEndPoint.path[2]._key\n : undefined\n\n if (!focusTextBlock || !selectionEndPointChildKey) {\n return undefined\n }\n\n let endPointChildFound = false\n let inlineObject:\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n\n for (const child of focusTextBlock.node.children) {\n if (child._key === selectionEndPointChildKey) {\n endPointChildFound = true\n continue\n }\n\n if (!isSpan(snapshot.context, child) && endPointChildFound) {\n inlineObject = {\n node: child,\n path: [...focusTextBlock.path, 'children', {_key: child._key}],\n }\n break\n }\n }\n\n return inlineObject\n}\n","import {\n isKeySegment,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan} from '../utils'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n */\nexport const getPreviousInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionStartPointChildKey =\n selectionStartPoint && isKeySegment(selectionStartPoint.path[2])\n ? selectionStartPoint.path[2]._key\n : undefined\n\n if (!focusTextBlock || !selectionStartPointChildKey) {\n return undefined\n }\n\n let inlineObject:\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n\n for (const child of focusTextBlock.node.children) {\n if (child._key === selectionStartPointChildKey) {\n break\n }\n\n if (!isSpan(snapshot.context, child)) {\n inlineObject = {\n node: child,\n path: [...focusTextBlock.path, 'children', {_key: child._key}],\n }\n }\n }\n\n return inlineObject\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {sliceBlocks} from '../utils'\n\n/**\n * @public\n */\nexport const getSelectedSlice: EditorSelector<Array<PortableTextBlock>> = (\n snapshot,\n) => {\n return sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {getSelectedSlice} from './selector.get-selected-slice'\n\n/**\n * @public\n */\nexport const getSelectionText: EditorSelector<string> = (snapshot) => {\n const selectedSlice = getSelectedSlice(snapshot)\n\n return selectedSlice.reduce((text, block) => {\n if (!isTextBlock(snapshot.context, block)) {\n return text\n }\n\n return (\n text +\n block.children.reduce((text, child) => {\n if (isSpan(snapshot.context, child)) {\n return text + child.text\n }\n\n return text\n }, '')\n )\n }, '')\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport const isSelectionExpanded: EditorSelector<boolean> = (snapshot) => {\n return !isSelectionCollapsed(snapshot)\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelection} from '../types/editor'\nimport {\n blockOffsetToSpanSelectionPoint,\n getBlockEndPoint,\n getBlockStartPoint,\n spanSelectionPointToBlockOffset,\n} from '../utils'\nimport {getNextInlineObject} from './selector.get-next-inline-object'\nimport {getPreviousInlineObject} from './selector.get-previous-inline-object'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {getSelectionText} from './selector.get-selection-text'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\nimport {isSelectionExpanded} from './selector.is-selection-expanded'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n * Returns the selection of the of the word the caret is placed in.\n * Note: Only returns a word selection if the current selection is collapsed\n */\nexport const getCaretWordSelection: EditorSelector<EditorSelection> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return null\n }\n\n if (!isSelectionCollapsed(snapshot)) {\n return null\n }\n\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionStartOffset = selectionStartPoint\n ? spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartPoint || !selectionStartOffset) {\n return null\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n const blockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const textBefore = getSelectionText({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: previousInlineObject\n ? {path: previousInlineObject.path, offset: 0}\n : blockStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n const textDirectlyBefore = textBefore.split(/\\s+/).at(-1)\n\n const nextInlineObject = getNextInlineObject(snapshot)\n const blockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const textAfter = getSelectionText({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: nextInlineObject\n ? {path: nextInlineObject.path, offset: 0}\n : blockEndPoint,\n },\n },\n })\n const textDirectlyAfter = textAfter.split(/\\s+/).at(0)\n\n if (\n (textDirectlyBefore === undefined || textDirectlyBefore === '') &&\n (textDirectlyAfter === undefined || textDirectlyAfter === '')\n ) {\n return null\n }\n\n const caretWordStartOffset: BlockOffset = textDirectlyBefore\n ? {\n ...selectionStartOffset,\n offset: selectionStartOffset.offset - textDirectlyBefore.length,\n }\n : selectionStartOffset\n const caretWordEndOffset: BlockOffset = textDirectlyAfter\n ? {\n ...selectionStartOffset,\n offset: selectionStartOffset.offset + textDirectlyAfter.length,\n }\n : selectionStartOffset\n\n const caretWordStartSelectionPoint = blockOffsetToSpanSelectionPoint({\n context: snapshot.context,\n blockOffset: caretWordStartOffset,\n direction: 'backward',\n })\n const caretWordEndSelectionPoint = blockOffsetToSpanSelectionPoint({\n context: snapshot.context,\n blockOffset: caretWordEndOffset,\n direction: 'forward',\n })\n\n if (!caretWordStartSelectionPoint || !caretWordEndSelectionPoint) {\n return null\n }\n\n const caretWordSelection = {\n anchor: caretWordStartSelectionPoint,\n focus: caretWordEndSelectionPoint,\n }\n\n return isSelectionExpanded({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: caretWordSelection,\n },\n })\n ? caretWordSelection\n : null\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport function isAtTheEndOfBlock(block: {\n node: PortableTextBlock\n path: [KeyedSegment]\n}): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection || !isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const blockEndPoint = utils.getBlockEndPoint({\n context: snapshot.context,\n block,\n })\n\n return utils.isEqualSelectionPoints(\n snapshot.context.selection.focus,\n blockEndPoint,\n )\n }\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport function isAtTheStartOfBlock(block: {\n node: PortableTextBlock\n path: [KeyedSegment]\n}): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection || !isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint({\n context: snapshot.context,\n block,\n })\n\n return utils.isEqualSelectionPoints(\n snapshot.context.selection.focus,\n blockStartPoint,\n )\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointAfterSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = snapshot.context.selection.backward\n ? reverseSelection(snapshot.context.selection)\n : snapshot.context.selection\n\n const pointBlockKey = isKeyedSegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeyedSegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeyedSegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeyedSegment(selection.focus.path[2])\n ? selection.focus.path[2]._key\n : undefined\n\n if (!pointBlockKey || !endBlockKey) {\n return false\n }\n\n let after = false\n\n for (const block of snapshot.context.value) {\n if (block._key === endBlockKey) {\n if (block._key !== pointBlockKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this block\n\n if (!isTextBlock(snapshot.context, block)) {\n break\n }\n\n if (!pointChildKey || !endChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === endChildKey) {\n if (child._key !== pointChildKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this child\n\n after = point.offset > selection.focus.offset\n break\n }\n\n if (child._key === pointChildKey) {\n break\n }\n }\n }\n\n if (block._key === pointBlockKey) {\n break\n }\n }\n\n return after\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointBeforeSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = snapshot.context.selection.backward\n ? reverseSelection(snapshot.context.selection)\n : snapshot.context.selection\n\n const pointBlockKey = isKeyedSegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeyedSegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeyedSegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeyedSegment(selection.anchor.path[2])\n ? selection.anchor.path[2]._key\n : undefined\n\n if (!pointBlockKey || !startBlockKey) {\n return false\n }\n\n let before = false\n\n for (const block of snapshot.context.value) {\n if (block._key === pointBlockKey) {\n if (block._key !== startBlockKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this block\n\n if (!isTextBlock(snapshot.context, block)) {\n break\n }\n\n if (!pointChildKey || !startChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === pointChildKey) {\n if (child._key !== startChildKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this child\n\n before = point.offset < selection.anchor.offset\n break\n }\n\n if (child._key === startChildKey) {\n break\n }\n }\n }\n\n if (block._key === startBlockKey) {\n break\n }\n }\n\n return before\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport {isEqualSelectionPoints} from '../utils'\nimport type {EditorSelector} from './../editor/editor-selector'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {isPointAfterSelection} from './selector.is-point-after-selection'\nimport {isPointBeforeSelection} from './selector.is-point-before-selection'\n\n/**\n * @public\n */\nexport function isOverlappingSelection(\n selection: EditorSelection,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!selection || !snapshot.context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n const selectionEndPoint = getSelectionEndPoint({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n\n const originalSelectionStartPoint = getSelectionStartPoint(snapshot)\n const originalSelectionEndPoint = getSelectionEndPoint(snapshot)\n\n if (\n !selectionStartPoint ||\n !selectionEndPoint ||\n !originalSelectionStartPoint ||\n !originalSelectionEndPoint\n ) {\n return false\n }\n\n const startPointBeforeSelection =\n isPointBeforeSelection(selectionStartPoint)(snapshot)\n const startPointAfterSelection =\n isPointAfterSelection(selectionStartPoint)(snapshot)\n const endPointBeforeSelection =\n isPointBeforeSelection(selectionEndPoint)(snapshot)\n const endPointAfterSelection =\n isPointAfterSelection(selectionEndPoint)(snapshot)\n\n const originalStartPointBeforeStartPoint = isPointBeforeSelection(\n originalSelectionStartPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n const originalStartPointAfterStartPoint = isPointAfterSelection(\n originalSelectionStartPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n\n const originalEndPointBeforeEndPoint = isPointBeforeSelection(\n originalSelectionEndPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionEndPoint,\n focus: selectionEndPoint,\n },\n },\n })\n const originalEndPointAfterEndPoint = isPointAfterSelection(\n originalSelectionEndPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionEndPoint,\n focus: selectionEndPoint,\n },\n },\n })\n\n const endPointEqualToOriginalStartPoint = isEqualSelectionPoints(\n selectionEndPoint,\n originalSelectionStartPoint,\n )\n const startPointEqualToOriginalEndPoint = isEqualSelectionPoints(\n selectionStartPoint,\n originalSelectionEndPoint,\n )\n\n if (endPointBeforeSelection && !endPointEqualToOriginalStartPoint) {\n return false\n }\n\n if (startPointAfterSelection && !startPointEqualToOriginalEndPoint) {\n return false\n }\n\n if (\n !originalStartPointBeforeStartPoint &&\n originalStartPointAfterStartPoint &&\n !originalEndPointBeforeEndPoint &&\n originalEndPointAfterEndPoint\n ) {\n return !endPointEqualToOriginalStartPoint\n }\n\n if (\n originalStartPointBeforeStartPoint &&\n !originalStartPointAfterStartPoint &&\n originalEndPointBeforeEndPoint &&\n !originalEndPointAfterEndPoint\n ) {\n return !startPointEqualToOriginalEndPoint\n }\n\n if (\n !startPointAfterSelection ||\n !startPointBeforeSelection ||\n !endPointAfterSelection ||\n !endPointBeforeSelection\n ) {\n return true\n }\n\n return false\n }\n}\n"],"names":["isSelectionCollapsed","snapshot","context","selection","JSON","stringify","anchor","path","focus","offset","getFocusBlock","key","isKeyedSegment","_key","undefined","node","value","find","block","getFocusListBlock","focusTextBlock","getFocusTextBlock","isListBlock","focusBlock","isTextBlock","getFocusBlockObject","getFocusChild","children","span","getFocusSpan","focusChild","isSpan","getFirstBlock","getLastBlock","length","getSelectedBlocks","selectedBlocks","startKey","backward","endKey","push","getSelectionStartBlock","getSelectionEndBlock","getPreviousBlock","previousBlock","selectionStartBlock","foundSelectionStartBlock","getNextBlock","nextBlock","selectionEndBlock","foundSelectionEndBlock","getSelectionEndPoint","getSelectionStartPoint","getNextInlineObject","selectionEndPoint","selectionEndPointChildKey","isKeySegment","endPointChildFound","inlineObject","child","getPreviousInlineObject","selectionStartPoint","selectionStartPointChildKey","getSelectedSlice","sliceBlocks","blocks","getSelectionText","reduce","text","isSelectionExpanded","getCaretWordSelection","selectionStartOffset","spanSelectionPointToBlockOffset","selectionPoint","previousInlineObject","blockStartPoint","getBlockStartPoint","textDirectlyBefore","split","at","nextInlineObject","blockEndPoint","getBlockEndPoint","textDirectlyAfter","caretWordStartOffset","caretWordEndOffset","caretWordStartSelectionPoint","blockOffsetToSpanSelectionPoint","blockOffset","direction","caretWordEndSelectionPoint","caretWordSelection","isAtTheEndOfBlock","utils","isAtTheStartOfBlock","isPointAfterSelection","point","reverseSelection","pointBlockKey","pointChildKey","endBlockKey","endChildKey","after","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection","originalSelectionStartPoint","originalSelectionEndPoint","startPointBeforeSelection","startPointAfterSelection","endPointBeforeSelection","endPointAfterSelection","originalStartPointBeforeStartPoint","originalStartPointAfterStartPoint","originalEndPointBeforeEndPoint","originalEndPointAfterEndPoint","endPointEqualToOriginalStartPoint","isEqualSelectionPoints","startPointEqualToOriginalEndPoint"],"mappings":";;AAKO,MAAMA,uBAAiDC,CAAAA,aACvDA,SAASC,QAAQC,YAKpBC,KAAKC,UAAUJ,SAASC,QAAQC,UAAUG,OAAOC,IAAI,MACnDH,KAAKC,UAAUJ,SAASC,QAAQC,UAAUK,MAAMD,IAAI,KACtDN,SAASC,QAAQC,WAAWG,OAAOG,WACjCR,SAASC,QAAQC,WAAWK,MAAMC,SAP7B,ICQEC,gBAERT,CAAa,aAAA;AAChB,QAAMU,MAAMV,SAASC,QAAQC,aACzBS,iBAAAA,eAAeX,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,CAAC,IACrDN,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,EAAEM,OAE3CC,QAEEC,OAAOJ,MACTV,SAASC,QAAQc,MAAMC,KAAMC,CAAAA,UAAUA,MAAML,SAASF,GAAG,IACzDG;AAEJ,SAAOC,QAAQJ,MAAM;AAAA,IAACI;AAAAA,IAAMR,MAAM,CAAC;AAAA,MAACM,MAAMF;AAAAA,IAAI,CAAA;AAAA,EAAA,IAAKG;AACrD,GAKaK,oBAERlB,CAAa,aAAA;AACVmB,QAAAA,iBAAiBC,kBAAkBpB,QAAQ;AAEjD,SAAOmB,kBAAkBE,iBAAAA,YAAYrB,SAASC,SAASkB,eAAeL,IAAI,IACtE;AAAA,IAACA,MAAMK,eAAeL;AAAAA,IAAMR,MAAMa,eAAeb;AAAAA,EAAAA,IACjDO;AACN,GAKaO,oBAERpB,CAAa,aAAA;AACVsB,QAAAA,aAAab,cAAcT,QAAQ;AAEzC,SAAOsB,cAAcC,iBAAAA,YAAYvB,SAASC,SAASqB,WAAWR,IAAI,IAC9D;AAAA,IAACA,MAAMQ,WAAWR;AAAAA,IAAMR,MAAMgB,WAAWhB;AAAAA,EAAAA,IACzCO;AACN,GAKaW,sBAERxB,CAAa,aAAA;AACVsB,QAAAA,aAAab,cAAcT,QAAQ;AAEzC,SAAOsB,cAAc,CAACC,6BAAYvB,SAASC,SAASqB,WAAWR,IAAI,IAC/D;AAAA,IAACA,MAAMQ,WAAWR;AAAAA,IAAMR,MAAMgB,WAAWhB;AAAAA,EAAAA,IACzCO;AACN,GAKaY,gBAMRzB,CAAa,aAAA;AACVsB,QAAAA,aAAaF,kBAAkBpB,QAAQ;AAE7C,MAAI,CAACsB;AACH;AAGF,QAAMZ,MAAMV,SAASC,QAAQC,aACzBS,iBAAAA,eAAeX,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,CAAC,IACrDN,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,EAAEM,OAE3CC,QAEEC,OAAOJ,MACTY,WAAWR,KAAKY,SAASV,KAAMW,CAAAA,SAASA,KAAKf,SAASF,GAAG,IACzDG;AAEJ,SAAOC,QAAQJ,MACX;AAAA,IAACI;AAAAA,IAAMR,MAAM,CAAC,GAAGgB,WAAWhB,MAAM,YAAY;AAAA,MAACM,MAAMF;AAAAA,IAAI,CAAA;AAAA,EAAA,IACzDG;AACN,GAKae,eAGR5B,CAAa,aAAA;AACV6B,QAAAA,aAAaJ,cAAczB,QAAQ;AAEzC,SAAO6B,cAAcC,iBAAAA,OAAO9B,SAASC,SAAS4B,WAAWf,IAAI,IACzD;AAAA,IAACA,MAAMe,WAAWf;AAAAA,IAAMR,MAAMuB,WAAWvB;AAAAA,EAAAA,IACzCO;AACN,GAKakB,gBAER/B,CAAa,aAAA;AAChB,QAAMc,OAAOd,SAASC,QAAQc,MAAM,CAAC;AAErC,SAAOD,OAAO;AAAA,IAACA;AAAAA,IAAMR,MAAM,CAAC;AAAA,MAACM,MAAME,KAAKF;AAAAA,IAAK,CAAA;AAAA,EAAA,IAAKC;AACpD,GAKamB,eAERhC,CAAa,aAAA;AAChB,QAAMc,OAAOd,SAASC,QAAQc,MAAMf,SAASC,QAAQc,MAAMkB,SAAS,CAAC,IACjEjC,SAASC,QAAQc,MAAMf,SAASC,QAAQc,MAAMkB,SAAS,CAAC,IACxDpB;AAEJ,SAAOC,OAAO;AAAA,IAACA;AAAAA,IAAMR,MAAM,CAAC;AAAA,MAACM,MAAME,KAAKF;AAAAA,IAAK,CAAA;AAAA,EAAA,IAAKC;AACpD,GAKaqB,oBAERlC,CAAa,aAAA;AACZ,MAAA,CAACA,SAASC,QAAQC;AACpB,WAAO,CAAE;AAGX,QAAMiC,iBACJ,CAAA,GACIC,WAAWpC,SAASC,QAAQC,UAAUmC,WACxC1B,iBAAeX,eAAAA,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,CAAC,IACrDN,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,EAAEM,OACzCC,SACFF,iBAAAA,eAAeX,SAASC,QAAQC,UAAUG,OAAOC,KAAK,CAAC,CAAC,IACtDN,SAASC,QAAQC,UAAUG,OAAOC,KAAK,CAAC,EAAEM,OAC1CC,QACAyB,SAAStC,SAASC,QAAQC,UAAUmC,WACtC1B,iBAAAA,eAAeX,SAASC,QAAQC,UAAUG,OAAOC,KAAK,CAAC,CAAC,IACtDN,SAASC,QAAQC,UAAUG,OAAOC,KAAK,CAAC,EAAEM,OAC1CC,SACFF,gCAAeX,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,CAAC,IACrDN,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,EAAEM,OACzCC;AAEF,MAAA,CAACuB,YAAY,CAACE;AACTH,WAAAA;AAGElB,aAAAA,SAASjB,SAASC,QAAQc,OAAO;AACtCE,QAAAA,MAAML,SAASwB,UAAU;AAG3B,UAFAD,eAAeI,KAAK;AAAA,QAACzB,MAAMG;AAAAA,QAAOX,MAAM,CAAC;AAAA,UAACM,MAAMK,MAAML;AAAAA,QAAK,CAAA;AAAA,MAAA,CAAE,GAEzDwB,aAAaE;AACf;AAEF;AAAA,IAAA;AAGErB,QAAAA,MAAML,SAAS0B,QAAQ;AACzBH,qBAAeI,KAAK;AAAA,QAACzB,MAAMG;AAAAA,QAAOX,MAAM,CAAC;AAAA,UAACM,MAAMK,MAAML;AAAAA,QAAK,CAAA;AAAA,MAAA,CAAE;AAC7D;AAAA,IAAA;AAGEuB,mBAAeF,SAAS,KAC1BE,eAAeI,KAAK;AAAA,MAACzB,MAAMG;AAAAA,MAAOX,MAAM,CAAC;AAAA,QAACM,MAAMK,MAAML;AAAAA,MAAK,CAAA;AAAA,IAAA,CAAE;AAAA,EAAA;AAI1DuB,SAAAA;AACT,GAKaK,yBAMRxC,CAAa,aAAA;AACZ,MAAA,CAACA,SAASC,QAAQC;AACpB;AAGIQ,QAAAA,MAAMV,SAASC,QAAQC,UAAUmC,WACnC1B,iBAAeX,eAAAA,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,CAAC,IACrDN,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,EAAEM,OACzCC,SACFF,iBAAAA,eAAeX,SAASC,QAAQC,UAAUG,OAAOC,KAAK,CAAC,CAAC,IACtDN,SAASC,QAAQC,UAAUG,OAAOC,KAAK,CAAC,EAAEM,OAC1CC,QAEAC,OAAOJ,MACTV,SAASC,QAAQc,MAAMC,KAAMC,CAAUA,UAAAA,MAAML,SAASF,GAAG,IACzDG;AAEJ,SAAOC,QAAQJ,MAAM;AAAA,IAACI;AAAAA,IAAMR,MAAM,CAAC;AAAA,MAACM,MAAMF;AAAAA,IAAI,CAAA;AAAA,EAAA,IAAKG;AACrD,GAKa4B,uBAMRzC,CAAa,aAAA;AACZ,MAAA,CAACA,SAASC,QAAQC;AACpB;AAGIQ,QAAAA,MAAMV,SAASC,QAAQC,UAAUmC,WACnC1B,iBAAeX,eAAAA,SAASC,QAAQC,UAAUG,OAAOC,KAAK,CAAC,CAAC,IACtDN,SAASC,QAAQC,UAAUG,OAAOC,KAAK,CAAC,EAAEM,OAC1CC,SACFF,iBAAAA,eAAeX,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,CAAC,IACrDN,SAASC,QAAQC,UAAUK,MAAMD,KAAK,CAAC,EAAEM,OACzCC,QAEAC,OAAOJ,MACTV,SAASC,QAAQc,MAAMC,KAAMC,CAAUA,UAAAA,MAAML,SAASF,GAAG,IACzDG;AAEJ,SAAOC,QAAQJ,MAAM;AAAA,IAACI;AAAAA,IAAMR,MAAM,CAAC;AAAA,MAACM,MAAMF;AAAAA,IAAI,CAAA;AAAA,EAAA,IAAKG;AACrD,GAKa6B,mBAER1C,CAAa,aAAA;AACZ2C,MAAAA;AACEC,QAAAA,sBAAsBJ,uBAAuBxC,QAAQ;AAE3D,MAAI,CAAC4C;AACH;AAGF,MAAIC,2BAA2B;AAEpB5B,aAAAA,SAASjB,SAASC,QAAQc,OAAO;AAC1C,QAAIE,MAAML,SAASgC,oBAAoB9B,KAAKF,MAAM;AACrB,iCAAA;AAC3B;AAAA,IAAA;AAGc,oBAAA;AAAA,MAACE,MAAMG;AAAAA,MAAOX,MAAM,CAAC;AAAA,QAACM,MAAMK,MAAML;AAAAA,MAAK,CAAA;AAAA,IAAC;AAAA,EAAA;AAG1D,MAAIiC,4BAA4BF;AACvBA,WAAAA;AAIX,GAKaG,eAER9C,CAAa,aAAA;AACZ+C,MAAAA;AACEC,QAAAA,oBAAoBP,qBAAqBzC,QAAQ;AAEvD,MAAI,CAACgD;AACH;AAGF,MAAIC,yBAAyB;AAElBhC,aAAAA,SAASjB,SAASC,QAAQc,OAAO;AAC1C,QAAIE,MAAML,SAASoC,kBAAkBlC,KAAKF,MAAM;AACrB,+BAAA;AACzB;AAAA,IAAA;AAGF,QAAIqC,wBAAwB;AACd,kBAAA;AAAA,QAACnC,MAAMG;AAAAA,QAAOX,MAAM,CAAC;AAAA,UAACM,MAAMK,MAAML;AAAAA,QAAK,CAAA;AAAA,MAAC;AACpD;AAAA,IAAA;AAAA,EACF;AAGF,MAAIqC,0BAA0BF;AACrBA,WAAAA;AAIX,GCpTaG,uBAERlD,CAAa,aAAA;AAChB,MAAKA,SAASC,QAAQC;AAIfF,WAAAA,SAASC,QAAQC,UAAUmC,WAC9BrC,SAASC,QAAQC,UAAUG,SAC3BL,SAASC,QAAQC,UAAUK;AACjC,GCVa4C,yBAERnD,CAAa,aAAA;AAChB,MAAKA,SAASC,QAAQC;AAIfF,WAAAA,SAASC,QAAQC,UAAUmC,WAC9BrC,SAASC,QAAQC,UAAUK,QAC3BP,SAASC,QAAQC,UAAUG;AACjC,GCHa+C,sBAMRpD,CAAa,aAAA;AACVmB,QAAAA,iBAAiBC,kBAAkBpB,QAAQ,GAC3CqD,oBAAoBH,qBAAqBlD,QAAQ,GACjDsD,4BACJD,qBAAqBE,mBAAaF,kBAAkB/C,KAAK,CAAC,CAAC,IACvD+C,kBAAkB/C,KAAK,CAAC,EAAEM,OAC1BC;AAEF,MAAA,CAACM,kBAAkB,CAACmC;AACtB;AAGF,MAAIE,qBAAqB,IACrBC;AAOOC,aAAAA,SAASvC,eAAeL,KAAKY,UAAU;AAC5CgC,QAAAA,MAAM9C,SAAS0C,2BAA2B;AACvB,2BAAA;AACrB;AAAA,IAAA;AAGF,QAAI,CAACxB,iBAAO9B,SAAAA,SAASC,SAASyD,KAAK,KAAKF,oBAAoB;AAC3C,qBAAA;AAAA,QACb1C,MAAM4C;AAAAA,QACNpD,MAAM,CAAC,GAAGa,eAAeb,MAAM,YAAY;AAAA,UAACM,MAAM8C,MAAM9C;AAAAA,QAAK,CAAA;AAAA,MAC/D;AACA;AAAA,IAAA;AAAA,EACF;AAGK6C,SAAAA;AACT,GC1CaE,0BAMR3D,CAAa,aAAA;AACVmB,QAAAA,iBAAiBC,kBAAkBpB,QAAQ,GAC3C4D,sBAAsBT,uBAAuBnD,QAAQ,GACrD6D,8BACJD,uBAAuBL,mBAAaK,oBAAoBtD,KAAK,CAAC,CAAC,IAC3DsD,oBAAoBtD,KAAK,CAAC,EAAEM,OAC5BC;AAEF,MAAA,CAACM,kBAAkB,CAAC0C;AACtB;AAGEJ,MAAAA;AAOOC,aAAAA,SAASvC,eAAeL,KAAKY,UAAU;AAChD,QAAIgC,MAAM9C,SAASiD;AACjB;AAGG/B,qBAAAA,SAAO9B,SAASC,SAASyD,KAAK,MACjCD,eAAe;AAAA,MACb3C,MAAM4C;AAAAA,MACNpD,MAAM,CAAC,GAAGa,eAAeb,MAAM,YAAY;AAAA,QAACM,MAAM8C,MAAM9C;AAAAA,MAAK,CAAA;AAAA,IAAA;AAAA,EAC/D;AAIG6C,SAAAA;AACT,GC7CaK,mBACX9D,cAEO+D,6BAAY;AAAA,EACjB9D,SAASD,SAASC;AAAAA,EAClB+D,QAAQhE,SAASC,QAAQc;AAC3B,CAAC,GCNUkD,mBAA4CjE,CAAAA,aACjC8D,iBAAiB9D,QAAQ,EAE1BkE,OAAO,CAACC,MAAMlD,UAC5BM,iBAAAA,YAAYvB,SAASC,SAASgB,KAAK,IAKtCkD,OACAlD,MAAMS,SAASwC,OAAO,CAACC,OAAMT,UACvB5B,iBAAAA,OAAO9B,SAASC,SAASyD,KAAK,IACzBS,QAAOT,MAAMS,OAGfA,OACN,EAAE,IAXEA,MAaR,EAAE,GCnBMC,sBAAgDpE,CAAAA,aACpD,CAACD,qBAAqBC,QAAQ,GCe1BqE,wBACXrE,CACG,aAAA;AAKH,MAJI,CAACA,SAASC,QAAQC,aAIlB,CAACH,qBAAqBC,QAAQ;AACzB,WAAA;AAGHmB,QAAAA,iBAAiBC,kBAAkBpB,QAAQ,GAC3C4D,sBAAsBT,uBAAuBnD,QAAQ,GACrDsE,uBAAuBV,sBACzBW,iDAAgC;AAAA,IAC9BtE,SAASD,SAASC;AAAAA,IAClBuE,gBAAgBZ;AAAAA,EACjB,CAAA,IACD/C;AAEJ,MAAI,CAACM,kBAAkB,CAACyC,uBAAuB,CAACU;AACvC,WAAA;AAGT,QAAMG,uBAAuBd,wBAAwB3D,QAAQ,GACvD0E,kBAAkBC,iBAAAA,mBAAmB;AAAA,IACzC1E,SAASD,SAASC;AAAAA,IAClBgB,OAAOE;AAAAA,EAAAA,CACR,GAaKyD,qBAZaX,iBAAiB;AAAA,IAElChE,SAAS;AAAA,MACP,GAAGD,SAASC;AAAAA,MACZC,WAAW;AAAA,QACTG,QAAQoE,uBACJ;AAAA,UAACnE,MAAMmE,qBAAqBnE;AAAAA,UAAME,QAAQ;AAAA,QAAA,IAC1CkE;AAAAA,QACJnE,OAAOqD;AAAAA,MAAAA;AAAAA,IACT;AAAA,EAEH,CAAA,EACqCiB,MAAM,KAAK,EAAEC,GAAG,EAAE,GAElDC,mBAAmB3B,oBAAoBpD,QAAQ,GAC/CgF,gBAAgBC,iBAAAA,iBAAiB;AAAA,IACrChF,SAASD,SAASC;AAAAA,IAClBgB,OAAOE;AAAAA,EAAAA,CACR,GAaK+D,oBAZYjB,iBAAiB;AAAA,IAEjChE,SAAS;AAAA,MACP,GAAGD,SAASC;AAAAA,MACZC,WAAW;AAAA,QACTG,QAAQuD;AAAAA,QACRrD,OAAOwE,mBACH;AAAA,UAACzE,MAAMyE,iBAAiBzE;AAAAA,UAAME,QAAQ;AAAA,QAAA,IACtCwE;AAAAA,MAAAA;AAAAA,IACN;AAAA,EAEH,CAAA,EACmCH,MAAM,KAAK,EAAEC,GAAG,CAAC;AAErD,OACGF,uBAAuB/D,UAAa+D,uBAAuB,QAC3DM,sBAAsBrE,UAAaqE,sBAAsB;AAEnD,WAAA;AAGT,QAAMC,uBAAoCP,qBACtC;AAAA,IACE,GAAGN;AAAAA,IACH9D,QAAQ8D,qBAAqB9D,SAASoE,mBAAmB3C;AAAAA,EAAAA,IAE3DqC,sBACEc,qBAAkCF,oBACpC;AAAA,IACE,GAAGZ;AAAAA,IACH9D,QAAQ8D,qBAAqB9D,SAAS0E,kBAAkBjD;AAAAA,EAAAA,IAE1DqC,sBAEEe,+BAA+BC,iDAAgC;AAAA,IACnErF,SAASD,SAASC;AAAAA,IAClBsF,aAAaJ;AAAAA,IACbK,WAAW;AAAA,EAAA,CACZ,GACKC,6BAA6BH,iDAAgC;AAAA,IACjErF,SAASD,SAASC;AAAAA,IAClBsF,aAAaH;AAAAA,IACbI,WAAW;AAAA,EAAA,CACZ;AAEG,MAAA,CAACH,gCAAgC,CAACI;AAC7B,WAAA;AAGT,QAAMC,qBAAqB;AAAA,IACzBrF,QAAQgF;AAAAA,IACR9E,OAAOkF;AAAAA,EACT;AAEA,SAAOrB,oBAAoB;AAAA,IAEzBnE,SAAS;AAAA,MACP,GAAGD,SAASC;AAAAA,MACZC,WAAWwF;AAAAA,IAAAA;AAAAA,EACb,CACD,IACGA,qBACA;AACN;AC7HO,SAASC,kBAAkB1E,OAGN;AAC1B,SAAQjB,CAAa,aAAA;AACnB,QAAI,CAACA,SAASC,QAAQC,aAAa,CAACH,qBAAqBC,QAAQ;AACxD,aAAA;AAGHgF,UAAAA,gBAAgBY,iBAAAA,iBAAuB;AAAA,MAC3C3F,SAASD,SAASC;AAAAA,MAClBgB;AAAAA,IAAAA,CACD;AAED,WAAO2E,iBAAAA,uBACL5F,SAASC,QAAQC,UAAUK,OAC3ByE,aACF;AAAA,EACF;AACF;ACnBO,SAASa,oBAAoB5E,OAGR;AAC1B,SAAQjB,CAAa,aAAA;AACnB,QAAI,CAACA,SAASC,QAAQC,aAAa,CAACH,qBAAqBC,QAAQ;AACxD,aAAA;AAGH0E,UAAAA,kBAAkBkB,iBAAAA,mBAAyB;AAAA,MAC/C3F,SAASD,SAASC;AAAAA,MAClBgB;AAAAA,IAAAA,CACD;AAED,WAAO2E,iBAAAA,uBACL5F,SAASC,QAAQC,UAAUK,OAC3BmE,eACF;AAAA,EACF;AACF;AClBO,SAASoB,sBACdC,OACyB;AACzB,SAAQ/F,CAAa,aAAA;AACf,QAAA,CAACA,SAASC,QAAQC;AACb,aAAA;AAGT,UAAMA,YAAYF,SAASC,QAAQC,UAAUmC,WACzC2D,iBAAAA,iBAAiBhG,SAASC,QAAQC,SAAS,IAC3CF,SAASC,QAAQC,WAEf+F,gBAAgBtF,iBAAAA,eAAeoF,MAAMzF,KAAK,CAAC,CAAC,IAC9CyF,MAAMzF,KAAK,CAAC,EAAEM,OACdC,QACEqF,gBAAgBvF,iBAAAA,eAAeoF,MAAMzF,KAAK,CAAC,CAAC,IAC9CyF,MAAMzF,KAAK,CAAC,EAAEM,OACdC,QAEEsF,cAAcxF,iBAAeT,eAAAA,UAAUK,MAAMD,KAAK,CAAC,CAAC,IACtDJ,UAAUK,MAAMD,KAAK,CAAC,EAAEM,OACxBC,QACEuF,cAAczF,iBAAAA,eAAeT,UAAUK,MAAMD,KAAK,CAAC,CAAC,IACtDJ,UAAUK,MAAMD,KAAK,CAAC,EAAEM,OACxBC;AAEA,QAAA,CAACoF,iBAAiB,CAACE;AACd,aAAA;AAGT,QAAIE,QAAQ;AAEDpF,eAAAA,SAASjB,SAASC,QAAQc,OAAO;AACtCE,UAAAA,MAAML,SAASuF,aAAa;AAC1BlF,YAAAA,MAAML,SAASqF,eAAe;AACxB,kBAAA;AACR;AAAA,QAAA;AAKE,YAAA,CAAC1E,6BAAYvB,SAASC,SAASgB,KAAK,KAIpC,CAACiF,iBAAiB,CAACE;AACrB;AAGS1C,mBAAAA,SAASzC,MAAMS,UAAU;AAC9BgC,cAAAA,MAAM9C,SAASwF,aAAa;AAC1B1C,gBAAAA,MAAM9C,SAASsF,eAAe;AACxB,sBAAA;AACR;AAAA,YAAA;AAKMH,oBAAAA,MAAMvF,SAASN,UAAUK,MAAMC;AACvC;AAAA,UAAA;AAGF,cAAIkD,MAAM9C,SAASsF;AACjB;AAAA,QAAA;AAAA,MAEJ;AAGF,UAAIjF,MAAML,SAASqF;AACjB;AAAA,IAAA;AAIGI,WAAAA;AAAAA,EACT;AACF;AC3EO,SAASC,uBACdP,OACyB;AACzB,SAAQ/F,CAAa,aAAA;AACf,QAAA,CAACA,SAASC,QAAQC;AACb,aAAA;AAGT,UAAMA,YAAYF,SAASC,QAAQC,UAAUmC,WACzC2D,iBAAAA,iBAAiBhG,SAASC,QAAQC,SAAS,IAC3CF,SAASC,QAAQC,WAEf+F,gBAAgBtF,iBAAAA,eAAeoF,MAAMzF,KAAK,CAAC,CAAC,IAC9CyF,MAAMzF,KAAK,CAAC,EAAEM,OACdC,QACEqF,gBAAgBvF,iBAAAA,eAAeoF,MAAMzF,KAAK,CAAC,CAAC,IAC9CyF,MAAMzF,KAAK,CAAC,EAAEM,OACdC,QAEE0F,gBAAgB5F,iBAAeT,eAAAA,UAAUG,OAAOC,KAAK,CAAC,CAAC,IACzDJ,UAAUG,OAAOC,KAAK,CAAC,EAAEM,OACzBC,QACE2F,gBAAgB7F,iBAAAA,eAAeT,UAAUG,OAAOC,KAAK,CAAC,CAAC,IACzDJ,UAAUG,OAAOC,KAAK,CAAC,EAAEM,OACzBC;AAEA,QAAA,CAACoF,iBAAiB,CAACM;AACd,aAAA;AAGT,QAAIE,SAAS;AAEFxF,eAAAA,SAASjB,SAASC,QAAQc,OAAO;AACtCE,UAAAA,MAAML,SAASqF,eAAe;AAC5BhF,YAAAA,MAAML,SAAS2F,eAAe;AACvB,mBAAA;AACT;AAAA,QAAA;AAKE,YAAA,CAAChF,6BAAYvB,SAASC,SAASgB,KAAK,KAIpC,CAACiF,iBAAiB,CAACM;AACrB;AAGS9C,mBAAAA,SAASzC,MAAMS,UAAU;AAC9BgC,cAAAA,MAAM9C,SAASsF,eAAe;AAC5BxC,gBAAAA,MAAM9C,SAAS4F,eAAe;AACvB,uBAAA;AACT;AAAA,YAAA;AAKOT,qBAAAA,MAAMvF,SAASN,UAAUG,OAAOG;AACzC;AAAA,UAAA;AAGF,cAAIkD,MAAM9C,SAAS4F;AACjB;AAAA,QAAA;AAAA,MAEJ;AAGF,UAAIvF,MAAML,SAAS2F;AACjB;AAAA,IAAA;AAIGE,WAAAA;AAAAA,EACT;AACF;ACzEO,SAASC,uBACdxG,WACyB;AACzB,SAAQF,CAAa,aAAA;AACnB,QAAI,CAACE,aAAa,CAACF,SAASC,QAAQC;AAC3B,aAAA;AAGT,UAAM0D,sBAAsBT,uBAAuB;AAAA,MAEjDlD,SAAS;AAAA,QACP,GAAGD,SAASC;AAAAA,QACZC;AAAAA,MAAAA;AAAAA,IACF,CACD,GACKmD,oBAAoBH,qBAAqB;AAAA,MAE7CjD,SAAS;AAAA,QACP,GAAGD,SAASC;AAAAA,QACZC;AAAAA,MAAAA;AAAAA,IACF,CACD,GAEKyG,8BAA8BxD,uBAAuBnD,QAAQ,GAC7D4G,4BAA4B1D,qBAAqBlD,QAAQ;AAE/D,QACE,CAAC4D,uBACD,CAACP,qBACD,CAACsD,+BACD,CAACC;AAEM,aAAA;AAGHC,UAAAA,4BACJP,uBAAuB1C,mBAAmB,EAAE5D,QAAQ,GAChD8G,2BACJhB,sBAAsBlC,mBAAmB,EAAE5D,QAAQ,GAC/C+G,0BACJT,uBAAuBjD,iBAAiB,EAAErD,QAAQ,GAC9CgH,yBACJlB,sBAAsBzC,iBAAiB,EAAErD,QAAQ,GAE7CiH,qCAAqCX,uBACzCK,2BACF,EAAE;AAAA,MACA,GAAG3G;AAAAA,MACHC,SAAS;AAAA,QACP,GAAGD,SAASC;AAAAA,QACZC,WAAW;AAAA,UACTG,QAAQuD;AAAAA,UACRrD,OAAOqD;AAAAA,QAAAA;AAAAA,MACT;AAAA,IAEH,CAAA,GACKsD,oCAAoCpB,sBACxCa,2BACF,EAAE;AAAA,MACA,GAAG3G;AAAAA,MACHC,SAAS;AAAA,QACP,GAAGD,SAASC;AAAAA,QACZC,WAAW;AAAA,UACTG,QAAQuD;AAAAA,UACRrD,OAAOqD;AAAAA,QAAAA;AAAAA,MACT;AAAA,IAEH,CAAA,GAEKuD,iCAAiCb,uBACrCM,yBACF,EAAE;AAAA,MACA,GAAG5G;AAAAA,MACHC,SAAS;AAAA,QACP,GAAGD,SAASC;AAAAA,QACZC,WAAW;AAAA,UACTG,QAAQgD;AAAAA,UACR9C,OAAO8C;AAAAA,QAAAA;AAAAA,MACT;AAAA,IAEH,CAAA,GACK+D,gCAAgCtB,sBACpCc,yBACF,EAAE;AAAA,MACA,GAAG5G;AAAAA,MACHC,SAAS;AAAA,QACP,GAAGD,SAASC;AAAAA,QACZC,WAAW;AAAA,UACTG,QAAQgD;AAAAA,UACR9C,OAAO8C;AAAAA,QAAAA;AAAAA,MACT;AAAA,IACF,CACD,GAEKgE,oCAAoCC,iBACxCjE,uBAAAA,mBACAsD,2BACF,GACMY,oCAAoCD,iBAAAA,uBACxC1D,qBACAgD,yBACF;AAMA,WAJIG,2BAA2B,CAACM,qCAI5BP,4BAA4B,CAACS,oCACxB,KAIP,CAACN,sCACDC,qCACA,CAACC,kCACDC,gCAEO,CAACC,oCAIRJ,sCACA,CAACC,qCACDC,kCACA,CAACC,gCAEM,CAACG,oCAIR,CAACT,4BACD,CAACD,6BACD,CAACG,0BACD,CAACD;AAAAA,EAML;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -19,13 +19,14 @@ import { Schema } from "@sanity/schema";
19
19
  import get from "lodash/get.js";
20
20
  import isUndefined from "lodash/isUndefined.js";
21
21
  import omitBy from "lodash/omitBy.js";
22
- import { isKeySegment, defineType, defineField, isPortableTextSpan as isPortableTextSpan$1, getFocusTextBlock, getPreviousBlock, getNextBlock, getFocusBlockObject, getFocusSpan, isSelectionCollapsed, isOverlappingSelection, getSelectedBlocks, isSelectionExpanded } from "./selector.is-overlapping-selection.js";
22
+ import { isKeySegment, defineType, defineField, isPortableTextSpan as isPortableTextSpan$1 } from "@sanity/types";
23
23
  import omit from "lodash/omit.js";
24
24
  import { selectionPointToBlockOffset, blockOffsetsToSelection } from "./util.selection-point-to-block-offset.js";
25
25
  import { getTrimmedSelection, isActiveAnnotation, isActiveDecorator, getSelectedTextBlocks, isActiveListItem, isActiveStyle, isSelectingEntireBlocks, getActiveAnnotations } from "./selector.is-selecting-entire-blocks.js";
26
26
  import { DOMEditor } from "slate-dom";
27
27
  import startCase from "lodash.startcase";
28
28
  import { defineBehavior, raise, coreBehaviors } from "./behavior.core.js";
29
+ import { getFocusTextBlock, getPreviousBlock, getNextBlock, getFocusBlockObject, getFocusSpan, isSelectionCollapsed, isOverlappingSelection, getSelectedBlocks, isSelectionExpanded } from "./selector.is-overlapping-selection.js";
29
30
  import { getSelectionStartPoint, getSelectionEndPoint } from "./util.get-selection-start-point.js";
30
31
  import { Subject } from "rxjs";
31
32
  import { useEffectEvent } from "use-effect-event";
@@ -1651,8 +1652,11 @@ const debug$d = debugWithName("sync machine"), syncValueCallback = ({
1651
1652
  event
1652
1653
  }) => (assertEvent(event, "done syncing"), event.value)
1653
1654
  }),
1654
- "emit done syncing initial value": emit({
1655
- type: "done syncing initial value"
1655
+ "emit done syncing value": emit({
1656
+ type: "done syncing value"
1657
+ }),
1658
+ "emit syncing value": emit({
1659
+ type: "syncing value"
1656
1660
  })
1657
1661
  },
1658
1662
  guards: {
@@ -1728,7 +1732,7 @@ const debug$d = debugWithName("sync machine"), syncValueCallback = ({
1728
1732
  }
1729
1733
  },
1730
1734
  "done syncing initial value": {
1731
- entry: ["emit done syncing initial value", () => {
1735
+ entry: ["emit done syncing value", () => {
1732
1736
  debug$d("entry: done syncing initial value");
1733
1737
  }],
1734
1738
  exit: [() => {
@@ -1787,10 +1791,10 @@ const debug$d = debugWithName("sync machine"), syncValueCallback = ({
1787
1791
  syncing: {
1788
1792
  entry: [() => {
1789
1793
  debug$d("entry: syncing->syncing");
1790
- }],
1794
+ }, "emit syncing value"],
1791
1795
  exit: [() => {
1792
1796
  debug$d("exit: syncing->syncing");
1793
- }],
1797
+ }, "emit done syncing value"],
1794
1798
  always: {
1795
1799
  guard: "pending value equals previous value",
1796
1800
  target: "idle",
@@ -7011,6 +7015,22 @@ const editorMachine = setup({
7011
7015
  "clear pending events": assign({
7012
7016
  pendingEvents: []
7013
7017
  }),
7018
+ "defer incoming patches": assign({
7019
+ pendingIncomingPatchesEvents: ({
7020
+ context,
7021
+ event
7022
+ }) => event.type === "patches" ? [...context.pendingIncomingPatchesEvents, event] : context.pendingIncomingPatchesEvents
7023
+ }),
7024
+ "emit pending incoming patches": enqueueActions(({
7025
+ context,
7026
+ enqueue
7027
+ }) => {
7028
+ for (const event of context.pendingIncomingPatchesEvents)
7029
+ enqueue.emit(event);
7030
+ }),
7031
+ "clear pending incoming patches": assign({
7032
+ pendingIncomingPatchesEvents: []
7033
+ }),
7014
7034
  "handle blur": ({
7015
7035
  event
7016
7036
  }) => {
@@ -7078,6 +7098,7 @@ const editorMachine = setup({
7078
7098
  getLegacySchema: input.getLegacySchema,
7079
7099
  keyGenerator: input.keyGenerator,
7080
7100
  pendingEvents: [],
7101
+ pendingIncomingPatchesEvents: [],
7081
7102
  schema: input.schema,
7082
7103
  selection: null,
7083
7104
  initialReadOnly: input.readOnly ?? !1,
@@ -7161,11 +7182,6 @@ const editorMachine = setup({
7161
7182
  "remove behavior": {
7162
7183
  actions: "remove behavior from context"
7163
7184
  },
7164
- patches: {
7165
- actions: emit(({
7166
- event
7167
- }) => event)
7168
- },
7169
7185
  "update behaviors": {
7170
7186
  actions: "assign behaviors"
7171
7187
  },
@@ -7212,7 +7228,7 @@ const editorMachine = setup({
7212
7228
  states: {
7213
7229
  "determine initial edit mode": {
7214
7230
  on: {
7215
- "done syncing initial value": [{
7231
+ "done syncing value": [{
7216
7232
  target: "#editor.edit mode.read only.read only",
7217
7233
  guard: ({
7218
7234
  context
@@ -7328,7 +7344,7 @@ const editorMachine = setup({
7328
7344
  initial: "setting up",
7329
7345
  states: {
7330
7346
  "setting up": {
7331
- exit: ["emit ready"],
7347
+ exit: ["emit ready", "emit pending incoming patches", "clear pending incoming patches"],
7332
7348
  on: {
7333
7349
  "internal.patch": {
7334
7350
  actions: "defer event"
@@ -7336,54 +7352,95 @@ const editorMachine = setup({
7336
7352
  mutation: {
7337
7353
  actions: "defer event"
7338
7354
  },
7339
- "done syncing initial value": {
7340
- target: "pristine"
7355
+ "done syncing value": {
7356
+ target: "set up"
7357
+ },
7358
+ patches: {
7359
+ actions: ["defer incoming patches"]
7341
7360
  }
7342
7361
  }
7343
7362
  },
7344
- pristine: {
7345
- initial: "idle",
7363
+ "set up": {
7364
+ type: "parallel",
7346
7365
  states: {
7347
- idle: {
7348
- on: {
7349
- normalizing: {
7350
- target: "normalizing"
7351
- },
7352
- "internal.patch": {
7353
- actions: "defer event",
7354
- target: "#editor.setup.dirty"
7366
+ "value sync": {
7367
+ initial: "idle",
7368
+ states: {
7369
+ idle: {
7370
+ on: {
7371
+ patches: {
7372
+ actions: [emit(({
7373
+ event
7374
+ }) => event)]
7375
+ },
7376
+ "syncing value": {
7377
+ target: "syncing value"
7378
+ }
7379
+ }
7355
7380
  },
7356
- mutation: {
7357
- actions: "defer event",
7358
- target: "#editor.setup.dirty"
7381
+ "syncing value": {
7382
+ exit: ["emit pending incoming patches", "clear pending incoming patches"],
7383
+ on: {
7384
+ patches: {
7385
+ actions: ["defer incoming patches"]
7386
+ },
7387
+ "done syncing value": {
7388
+ target: "idle"
7389
+ }
7390
+ }
7359
7391
  }
7360
7392
  }
7361
7393
  },
7362
- normalizing: {
7363
- on: {
7364
- "done normalizing": {
7365
- target: "idle"
7366
- },
7367
- "internal.patch": {
7368
- actions: "defer event"
7394
+ writing: {
7395
+ initial: "pristine",
7396
+ states: {
7397
+ pristine: {
7398
+ initial: "idle",
7399
+ states: {
7400
+ idle: {
7401
+ on: {
7402
+ normalizing: {
7403
+ target: "normalizing"
7404
+ },
7405
+ "internal.patch": {
7406
+ actions: "defer event",
7407
+ target: "#editor.setup.set up.writing.dirty"
7408
+ },
7409
+ mutation: {
7410
+ actions: "defer event",
7411
+ target: "#editor.setup.set up.writing.dirty"
7412
+ }
7413
+ }
7414
+ },
7415
+ normalizing: {
7416
+ on: {
7417
+ "done normalizing": {
7418
+ target: "idle"
7419
+ },
7420
+ "internal.patch": {
7421
+ actions: "defer event"
7422
+ },
7423
+ mutation: {
7424
+ actions: "defer event"
7425
+ }
7426
+ }
7427
+ }
7428
+ }
7369
7429
  },
7370
- mutation: {
7371
- actions: "defer event"
7430
+ dirty: {
7431
+ entry: ["emit pending events", "clear pending events"],
7432
+ on: {
7433
+ "internal.patch": {
7434
+ actions: "emit patch event"
7435
+ },
7436
+ mutation: {
7437
+ actions: "emit mutation event"
7438
+ }
7439
+ }
7372
7440
  }
7373
7441
  }
7374
7442
  }
7375
7443
  }
7376
- },
7377
- dirty: {
7378
- entry: ["emit pending events", "clear pending events"],
7379
- on: {
7380
- "internal.patch": {
7381
- actions: "emit patch event"
7382
- },
7383
- mutation: {
7384
- actions: "emit mutation event"
7385
- }
7386
- }
7387
7444
  }
7388
7445
  }
7389
7446
  }