@portabletext/editor 1.54.4 → 1.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/lib/_chunks-cjs/selector.get-text-before.cjs +2 -0
  2. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
  3. package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs +93 -104
  4. package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs.map +1 -1
  5. package/lib/_chunks-cjs/selector.is-selection-expanded.cjs +18 -6
  6. package/lib/_chunks-cjs/selector.is-selection-expanded.cjs.map +1 -1
  7. package/lib/_chunks-es/selector.get-text-before.js +2 -0
  8. package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
  9. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js +93 -104
  10. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js.map +1 -1
  11. package/lib/_chunks-es/selector.is-selection-expanded.js +19 -7
  12. package/lib/_chunks-es/selector.is-selection-expanded.js.map +1 -1
  13. package/lib/behaviors/index.d.cts +1 -0
  14. package/lib/behaviors/index.d.ts +1 -0
  15. package/lib/index.cjs +129 -57
  16. package/lib/index.cjs.map +1 -1
  17. package/lib/index.d.cts +3 -0
  18. package/lib/index.d.ts +3 -0
  19. package/lib/index.js +131 -59
  20. package/lib/index.js.map +1 -1
  21. package/lib/plugins/index.cjs +1 -0
  22. package/lib/plugins/index.cjs.map +1 -1
  23. package/lib/plugins/index.d.cts +1 -0
  24. package/lib/plugins/index.d.ts +1 -0
  25. package/lib/plugins/index.js +1 -0
  26. package/lib/plugins/index.js.map +1 -1
  27. package/lib/selectors/index.cjs +15 -57
  28. package/lib/selectors/index.cjs.map +1 -1
  29. package/lib/selectors/index.d.cts +8 -0
  30. package/lib/selectors/index.d.ts +8 -0
  31. package/lib/selectors/index.js +18 -60
  32. package/lib/selectors/index.js.map +1 -1
  33. package/lib/utils/index.d.cts +1 -0
  34. package/lib/utils/index.d.ts +1 -0
  35. package/package.json +5 -5
  36. package/src/behaviors/behavior.abstract.delete.ts +2 -8
  37. package/src/behaviors/behavior.abstract.split.ts +4 -3
  38. package/src/converters/converter.portable-text.ts +2 -8
  39. package/src/converters/converter.text-html.ts +2 -8
  40. package/src/converters/converter.text-plain.ts +2 -8
  41. package/src/editor/components/render-text-block.tsx +9 -0
  42. package/src/editor/create-slate-editor.tsx +14 -3
  43. package/src/editor/editor-selector.ts +1 -0
  44. package/src/editor/editor-snapshot.ts +2 -0
  45. package/src/editor/plugins/slate-plugin.update-value.ts +5 -0
  46. package/src/internal-utils/build-index-maps.test.ts +232 -0
  47. package/src/internal-utils/build-index-maps.ts +97 -0
  48. package/src/internal-utils/create-test-snapshot.ts +17 -9
  49. package/src/internal-utils/mark-state.ts +1 -0
  50. package/src/operations/behavior.operation.decorator.add.ts +1 -0
  51. package/src/selectors/index.ts +1 -0
  52. package/src/selectors/selector.get-anchor-block.ts +3 -4
  53. package/src/selectors/selector.get-focus-block.ts +3 -3
  54. package/src/selectors/selector.get-list-state.ts +34 -96
  55. package/src/selectors/selector.get-next-block.ts +7 -16
  56. package/src/selectors/selector.get-previous-block.ts +7 -13
  57. package/src/selectors/selector.get-selected-blocks.ts +13 -1
  58. package/src/selectors/selector.get-selected-slice.ts +3 -5
  59. package/src/selectors/selector.get-selected-spans.ts +14 -3
  60. package/src/selectors/selector.get-selected-text-blocks.ts +13 -1
  61. package/src/selectors/selector.get-selected-value.ts +47 -0
  62. package/src/selectors/selector.get-selection-text.ts +3 -3
  63. package/src/selectors/selector.get-trimmed-selection.ts +13 -1
  64. package/src/selectors/selector.is-point-after-selection.ts +58 -38
  65. package/src/selectors/selector.is-point-before-selection.ts +58 -38
  66. package/src/types/editor.ts +2 -0
package/lib/index.d.cts CHANGED
@@ -3166,6 +3166,7 @@ export declare type EditorSnapshot = {
3166
3166
  activeAnnotations: Array<string>
3167
3167
  activeDecorators: Array<string>
3168
3168
  }
3169
+ blockIndexMap: Map<string, number>
3169
3170
  }
3170
3171
 
3171
3172
  /**
@@ -4143,6 +4144,8 @@ declare interface PortableTextSlateEditor extends ReactEditor {
4143
4144
  decoratedRanges: Array<DecoratedRange>
4144
4145
  decoratorState: Record<string, boolean | undefined>
4145
4146
  markState: MarkState | undefined
4147
+ blockIndexMap: Map<string, number>
4148
+ listIndexMap: Map<string, number>
4146
4149
  /**
4147
4150
  * Use hotkeys
4148
4151
  */
package/lib/index.d.ts CHANGED
@@ -3166,6 +3166,7 @@ export declare type EditorSnapshot = {
3166
3166
  activeAnnotations: Array<string>
3167
3167
  activeDecorators: Array<string>
3168
3168
  }
3169
+ blockIndexMap: Map<string, number>
3169
3170
  }
3170
3171
 
3171
3172
  /**
@@ -4143,6 +4144,8 @@ declare interface PortableTextSlateEditor extends ReactEditor {
4143
4144
  decoratedRanges: Array<DecoratedRange>
4144
4145
  decoratorState: Record<string, boolean | undefined>
4145
4146
  markState: MarkState | undefined
4147
+ blockIndexMap: Map<string, number>
4148
+ listIndexMap: Map<string, number>
4146
4149
  /**
4147
4150
  * Use hotkeys
4148
4151
  */
package/lib/index.js CHANGED
@@ -9,12 +9,12 @@ import { Element as Element$1, Text, Range, Editor, Node, Point, Transforms, Pat
9
9
  import { useSelected, useSlateSelector, useSlateStatic, withReact, ReactEditor, Slate, useSlate, Editable } from "slate-react";
10
10
  import debug$f from "debug";
11
11
  import { DOMEditor, isDOMNode } from "slate-dom";
12
- import { getBlockStartPoint, getBlockKeyFromSelectionPoint, isTextBlock, parseBlock, sliceBlocks, parseAnnotation, blockOffsetToSpanSelectionPoint, parseInlineObject, isKeyedSegment, isSpan$1 as isSpan, isListBlock, isTypedObject, getSelectionStartPoint, getSelectionEndPoint, getTextBlockText, parseBlocks } from "./_chunks-es/selection-point.js";
12
+ import { getBlockStartPoint, getBlockKeyFromSelectionPoint, isTextBlock, parseBlock, parseAnnotation, blockOffsetToSpanSelectionPoint, parseInlineObject, isKeyedSegment, isSpan$1 as isSpan, isListBlock, isTypedObject, getSelectionStartPoint, getSelectionEndPoint, getTextBlockText, parseBlocks } from "./_chunks-es/selection-point.js";
13
13
  import { getBlockEndPoint, isEmptyTextBlock, isEqualSelectionPoints } from "./_chunks-es/util.is-equal-selection-points.js";
14
14
  import { isSelectionCollapsed, selectionPointToBlockOffset } from "./_chunks-es/util.selection-point-to-block-offset.js";
15
15
  import isEqual from "lodash/isEqual.js";
16
16
  import { isKeySegment, defineType, defineField } from "@sanity/types";
17
- import { isSelectionCollapsed as isSelectionCollapsed$1, getFocusTextBlock, getFocusSpan as getFocusSpan$1, isSelectionExpanded, getFocusBlock as getFocusBlock$1, getFocusChild as getFocusChild$1 } from "./_chunks-es/selector.is-selection-expanded.js";
17
+ import { isSelectionCollapsed as isSelectionCollapsed$1, getFocusTextBlock, getFocusSpan as getFocusSpan$1, isSelectionExpanded, getFocusBlock as getFocusBlock$1, getSelectedValue, getFocusChild as getFocusChild$1 } from "./_chunks-es/selector.is-selection-expanded.js";
18
18
  import { getFocusInlineObject, getSelectedBlocks, getSelectionStartBlock as getSelectionStartBlock$1, getSelectionEndBlock as getSelectionEndBlock$1, isOverlappingSelection, isSelectingEntireBlocks, getTrimmedSelection, getSelectedSpans, getCaretWordSelection, getFocusBlockObject, getPreviousBlock, getNextBlock, isAtTheEndOfBlock, isAtTheStartOfBlock, getFirstBlock as getFirstBlock$1, getLastBlock as getLastBlock$1, getFocusListBlock, isActiveAnnotation, isActiveDecorator, getSelectedTextBlocks, isActiveListItem, isActiveStyle, getActiveAnnotations as getActiveAnnotations$1 } from "./_chunks-es/selector.is-selecting-entire-blocks.js";
19
19
  import getRandomValues from "get-random-values-esm";
20
20
  import { defineBehavior, forward, raise, effect } from "./behaviors/index.js";
@@ -684,6 +684,7 @@ function getDragSelection({
684
684
  }) {
685
685
  let dragSelection = eventSelection;
686
686
  if (getFocusInlineObject({
687
+ ...snapshot,
687
688
  context: {
688
689
  ...snapshot.context,
689
690
  selection: eventSelection
@@ -696,11 +697,13 @@ function getDragSelection({
696
697
  selection: eventSelection
697
698
  }
698
699
  }), draggedTextBlock = getFocusTextBlock({
700
+ ...snapshot,
699
701
  context: {
700
702
  ...snapshot.context,
701
703
  selection: eventSelection
702
704
  }
703
705
  }), draggedSpan = getFocusSpan$1({
706
+ ...snapshot,
704
707
  context: {
705
708
  ...snapshot.context,
706
709
  selection: eventSelection
@@ -785,6 +788,7 @@ function createCoreBlockElementBehaviorsConfig({
785
788
  event
786
789
  }) => {
787
790
  const dropFocusBlock = getFocusBlock$1({
791
+ ...snapshot,
788
792
  context: {
789
793
  ...snapshot.context,
790
794
  selection: event.position.selection
@@ -800,11 +804,13 @@ function createCoreBlockElementBehaviorsConfig({
800
804
  snapshot
801
805
  });
802
806
  return getSelectedBlocks({
807
+ ...snapshot,
803
808
  context: {
804
809
  ...snapshot.context,
805
810
  selection: dragSelection
806
811
  }
807
812
  }).some((draggedBlock) => draggedBlock.node._key === key) ? !1 : isSelectingEntireBlocks({
813
+ ...snapshot,
808
814
  context: {
809
815
  ...snapshot.context,
810
816
  selection: dragSelection
@@ -936,7 +942,7 @@ function RenderTextBlock(props) {
936
942
  key: props.element._key,
937
943
  onSetDragPositionBlock: setDragPositionBlock
938
944
  });
939
- const legacySchema = useSelector(editorActor, (s) => s.context.getLegacySchema());
945
+ const legacySchema = useSelector(editorActor, (s) => s.context.getLegacySchema()), listIndex = useSlateSelector((editor_0) => editor_0.listIndexMap.get(props.textBlock._key));
940
946
  let children = props.children;
941
947
  const legacyBlockSchemaType = legacySchema.block;
942
948
  if (props.renderStyle && props.textBlock.style) {
@@ -976,6 +982,8 @@ function RenderTextBlock(props) {
976
982
  "data-level": props.textBlock.level
977
983
  } : {}, ...props.textBlock.style !== void 0 ? {
978
984
  "data-style": props.textBlock.style
985
+ } : {}, ...listIndex !== void 0 ? {
986
+ "data-list-index": listIndex
979
987
  } : {}, children: [
980
988
  dragPositionBlock === "start" ? /* @__PURE__ */ jsx(DropIndicator, {}) : null,
981
989
  /* @__PURE__ */ jsx("div", { ref: blockRef, children: props.renderBlock ? props.renderBlock({
@@ -1110,21 +1118,14 @@ const converterJson = {
1110
1118
  snapshot,
1111
1119
  event
1112
1120
  }) => {
1113
- const selection = snapshot.context.selection;
1114
- if (!selection)
1121
+ if (!snapshot.context.selection)
1115
1122
  return {
1116
1123
  type: "serialization.failure",
1117
1124
  mimeType: "application/x-portable-text",
1118
1125
  originEvent: event.originEvent,
1119
1126
  reason: "No selection"
1120
1127
  };
1121
- const blocks = sliceBlocks({
1122
- context: {
1123
- selection,
1124
- schema: snapshot.context.schema
1125
- },
1126
- blocks: snapshot.context.value
1127
- });
1128
+ const blocks = getSelectedValue(snapshot);
1128
1129
  return blocks.length === 0 ? {
1129
1130
  type: "serialization.failure",
1130
1131
  mimeType: "application/x-portable-text",
@@ -1177,21 +1178,14 @@ function createConverterTextHtml(legacySchema) {
1177
1178
  snapshot,
1178
1179
  event
1179
1180
  }) => {
1180
- const selection = snapshot.context.selection;
1181
- if (!selection)
1181
+ if (!snapshot.context.selection)
1182
1182
  return {
1183
1183
  type: "serialization.failure",
1184
1184
  mimeType: "text/html",
1185
1185
  originEvent: event.originEvent,
1186
1186
  reason: "No selection"
1187
1187
  };
1188
- const blocks = sliceBlocks({
1189
- context: {
1190
- selection,
1191
- schema: snapshot.context.schema
1192
- },
1193
- blocks: snapshot.context.value
1194
- }), html = toHTML(blocks, {
1188
+ const blocks = getSelectedValue(snapshot), html = toHTML(blocks, {
1195
1189
  onMissingComponent: !1,
1196
1190
  components: {
1197
1191
  unknownType: ({
@@ -1247,27 +1241,18 @@ function createConverterTextPlain(legacySchema) {
1247
1241
  serialize: ({
1248
1242
  snapshot,
1249
1243
  event
1250
- }) => {
1251
- const selection = snapshot.context.selection;
1252
- return selection ? {
1253
- type: "serialization.success",
1254
- data: sliceBlocks({
1255
- context: {
1256
- selection,
1257
- schema: snapshot.context.schema
1258
- },
1259
- blocks: snapshot.context.value
1260
- }).map((block) => isTextBlock(snapshot.context, block) ? block.children.map((child) => child._type === snapshot.context.schema.span.name ? child.text : event.originEvent === "drag.dragstart" ? `[${snapshot.context.schema.inlineObjects.find((inlineObjectType) => inlineObjectType.name === child._type)?.title ?? "Object"}]` : "").join("") : event.originEvent === "drag.dragstart" ? `[${snapshot.context.schema.blockObjects.find((blockObjectType) => blockObjectType.name === block._type)?.title ?? "Object"}]` : "").filter((block) => block !== "").join(`
1244
+ }) => snapshot.context.selection ? {
1245
+ type: "serialization.success",
1246
+ data: getSelectedValue(snapshot).map((block) => isTextBlock(snapshot.context, block) ? block.children.map((child) => child._type === snapshot.context.schema.span.name ? child.text : event.originEvent === "drag.dragstart" ? `[${snapshot.context.schema.inlineObjects.find((inlineObjectType) => inlineObjectType.name === child._type)?.title ?? "Object"}]` : "").join("") : event.originEvent === "drag.dragstart" ? `[${snapshot.context.schema.blockObjects.find((blockObjectType) => blockObjectType.name === block._type)?.title ?? "Object"}]` : "").filter((block) => block !== "").join(`
1261
1247
 
1262
1248
  `),
1263
- mimeType: "text/plain",
1264
- originEvent: event.originEvent
1265
- } : {
1266
- type: "serialization.failure",
1267
- mimeType: "text/plain",
1268
- originEvent: event.originEvent,
1269
- reason: "No selection"
1270
- };
1249
+ mimeType: "text/plain",
1250
+ originEvent: event.originEvent
1251
+ } : {
1252
+ type: "serialization.failure",
1253
+ mimeType: "text/plain",
1254
+ originEvent: event.originEvent,
1255
+ reason: "No selection"
1271
1256
  },
1272
1257
  deserialize: ({
1273
1258
  snapshot,
@@ -1320,6 +1305,63 @@ function compileType(rawType) {
1320
1305
  types: [rawType]
1321
1306
  }).get(rawType.name);
1322
1307
  }
1308
+ function buildIndexMaps(context, value) {
1309
+ const blockIndexMap = /* @__PURE__ */ new Map(), listIndexMap = /* @__PURE__ */ new Map(), levelIndexMap = /* @__PURE__ */ new Map();
1310
+ let previousListItem;
1311
+ for (let blockIndex = 0; blockIndex < value.length; blockIndex++) {
1312
+ const block = value.at(blockIndex);
1313
+ if (block !== void 0) {
1314
+ if (blockIndexMap.set(block._key, blockIndex), !isTextBlock(context, block)) {
1315
+ levelIndexMap.clear(), previousListItem = void 0;
1316
+ continue;
1317
+ }
1318
+ if (block.listItem === void 0 || block.level === void 0) {
1319
+ levelIndexMap.clear(), previousListItem = void 0;
1320
+ continue;
1321
+ }
1322
+ if (!previousListItem) {
1323
+ previousListItem = {
1324
+ listItem: block.listItem,
1325
+ level: block.level
1326
+ }, levelIndexMap.set(block.level, 1), listIndexMap.set(block._key, 1);
1327
+ continue;
1328
+ }
1329
+ if (previousListItem.listItem !== block.listItem) {
1330
+ levelIndexMap.clear(), previousListItem = {
1331
+ listItem: block.listItem,
1332
+ level: block.level
1333
+ }, levelIndexMap.set(block.level, 1), listIndexMap.set(block._key, 1);
1334
+ continue;
1335
+ }
1336
+ if (previousListItem.level === block.level) {
1337
+ const levelCounter = levelIndexMap.get(block.level) ?? 0;
1338
+ levelIndexMap.set(block.level, levelCounter + 1), previousListItem = {
1339
+ listItem: block.listItem,
1340
+ level: block.level
1341
+ }, listIndexMap.set(block._key, levelCounter + 1);
1342
+ continue;
1343
+ }
1344
+ if (previousListItem.level < block.level) {
1345
+ levelIndexMap.set(block.level, 1), previousListItem = {
1346
+ listItem: block.listItem,
1347
+ level: block.level
1348
+ }, listIndexMap.set(block._key, 1);
1349
+ continue;
1350
+ }
1351
+ if (previousListItem.level > block.level) {
1352
+ const levelCounter = levelIndexMap.get(block.level) ?? 0;
1353
+ levelIndexMap.set(block.level, levelCounter + 1), previousListItem = {
1354
+ listItem: block.listItem,
1355
+ level: block.level
1356
+ }, listIndexMap.set(block._key, levelCounter + 1);
1357
+ }
1358
+ }
1359
+ }
1360
+ return {
1361
+ blockIndexMap,
1362
+ listIndexMap
1363
+ };
1364
+ }
1323
1365
  function createPlaceholderBlock(context) {
1324
1366
  return {
1325
1367
  _type: context.schema.block.name,
@@ -1473,6 +1515,7 @@ function getEditorSnapshot({
1473
1515
  slateEditorInstance
1474
1516
  }) {
1475
1517
  return {
1518
+ blockIndexMap: slateEditorInstance.blockIndexMap,
1476
1519
  context: {
1477
1520
  converters: [...editorActorSnapshot.context.converters],
1478
1521
  keyGenerator: editorActorSnapshot.context.keyGenerator,
@@ -3175,6 +3218,11 @@ const addAnnotationOperationImplementation = ({
3175
3218
  },
3176
3219
  backward: editorSelection?.backward
3177
3220
  }), trimmedSelection = getTrimmedSelection({
3221
+ blockIndexMap: editor.blockIndexMap,
3222
+ beta: {
3223
+ activeAnnotations: [],
3224
+ activeDecorators: []
3225
+ },
3178
3226
  context: {
3179
3227
  converters: [],
3180
3228
  keyGenerator: context.keyGenerator,
@@ -4786,6 +4834,7 @@ function getMarkState({
4786
4834
  editor,
4787
4835
  range: editor.selection
4788
4836
  }) : null, selectedSpans = getSelectedSpans({
4837
+ blockIndexMap: editor.blockIndexMap,
4789
4838
  context: {
4790
4839
  value: editor.value,
4791
4840
  selection,
@@ -5184,7 +5233,12 @@ function pluginUpdateValue(context, editor) {
5184
5233
  apply2(operation);
5185
5234
  return;
5186
5235
  }
5187
- editor.value = applyOperationToPortableText(context, editor.value, operation), apply2(operation);
5236
+ editor.value = applyOperationToPortableText(context, editor.value, operation);
5237
+ const {
5238
+ blockIndexMap,
5239
+ listIndexMap
5240
+ } = buildIndexMaps(context, editor.value);
5241
+ editor.blockIndexMap = blockIndexMap, editor.listIndexMap = listIndexMap, apply2(operation);
5188
5242
  }, editor;
5189
5243
  }
5190
5244
  const withPlugins = (editor, options) => {
@@ -5215,7 +5269,14 @@ function createSlateEditor(config) {
5215
5269
  relayActor: config.relayActor,
5216
5270
  subscriptions: config.subscriptions
5217
5271
  });
5218
- KEY_TO_VALUE_ELEMENT.set(instance, {}), KEY_TO_SLATE_ELEMENT.set(instance, {}), instance.decoratedRanges = [], instance.decoratorState = {}, instance.markState = void 0, instance.value = [createPlaceholderBlock(config.editorActor.getSnapshot().context)];
5272
+ KEY_TO_VALUE_ELEMENT.set(instance, {}), KEY_TO_SLATE_ELEMENT.set(instance, {}), instance.decoratedRanges = [], instance.decoratorState = {}, instance.markState = void 0;
5273
+ const placeholderBlock = createPlaceholderBlock(config.editorActor.getSnapshot().context);
5274
+ instance.value = [placeholderBlock];
5275
+ const {
5276
+ blockIndexMap,
5277
+ listIndexMap
5278
+ } = buildIndexMaps(config.editorActor.getSnapshot().context, instance.value);
5279
+ instance.blockIndexMap = blockIndexMap, instance.listIndexMap = listIndexMap;
5219
5280
  const initialValue = toSlateValue(instance.value, {
5220
5281
  schemaTypes: config.editorActor.getSnapshot().context.schema
5221
5282
  });
@@ -5488,11 +5549,13 @@ const arrowDownOnLonelyBlockObject = defineBehavior({
5488
5549
  if (snapshot.context.readOnly || snapshot.context.selection && !isSelectionCollapsed$1(snapshot))
5489
5550
  return !1;
5490
5551
  const focusBlockObject = getFocusBlockObject({
5552
+ ...snapshot,
5491
5553
  context: {
5492
5554
  ...snapshot.context,
5493
5555
  selection: event.position.selection
5494
5556
  }
5495
5557
  }), previousBlock = getPreviousBlock({
5558
+ ...snapshot,
5496
5559
  context: {
5497
5560
  ...snapshot.context,
5498
5561
  selection: event.position.selection
@@ -5523,11 +5586,13 @@ const arrowDownOnLonelyBlockObject = defineBehavior({
5523
5586
  if (snapshot.context.readOnly || snapshot.context.selection && !isSelectionCollapsed$1(snapshot))
5524
5587
  return !1;
5525
5588
  const focusBlockObject = getFocusBlockObject({
5589
+ ...snapshot,
5526
5590
  context: {
5527
5591
  ...snapshot.context,
5528
5592
  selection: event.position.selection
5529
5593
  }
5530
5594
  }), nextBlock = getNextBlock({
5595
+ ...snapshot,
5531
5596
  context: {
5532
5597
  ...snapshot.context,
5533
5598
  selection: event.position.selection
@@ -5694,6 +5759,7 @@ const coreDndBehaviors = [
5694
5759
  snapshot,
5695
5760
  eventSelection: event.position.selection
5696
5761
  }), selectingEntireBlocks = isSelectingEntireBlocks({
5762
+ ...snapshot,
5697
5763
  context: {
5698
5764
  ...snapshot.context,
5699
5765
  selection: dragSelection
@@ -5882,11 +5948,13 @@ const coreDndBehaviors = [
5882
5948
  selection: dragSelection
5883
5949
  }
5884
5950
  }) : !1, draggingEntireBlocks = isSelectingEntireBlocks({
5951
+ ...snapshot,
5885
5952
  context: {
5886
5953
  ...snapshot.context,
5887
5954
  selection: dragSelection
5888
5955
  }
5889
5956
  }), draggedBlocks = getSelectedBlocks({
5957
+ ...snapshot,
5890
5958
  context: {
5891
5959
  ...snapshot.context,
5892
5960
  selection: dragSelection
@@ -6206,6 +6274,7 @@ const coreDndBehaviors = [
6206
6274
  event
6207
6275
  }) => {
6208
6276
  const blockKey = event.at[0]._key, markDefKey = event.at[2]._key, block = getFocusTextBlock({
6277
+ ...snapshot,
6209
6278
  context: {
6210
6279
  ...snapshot.context,
6211
6280
  selection: {
@@ -6365,6 +6434,7 @@ const coreDndBehaviors = [
6365
6434
  event
6366
6435
  }) => {
6367
6436
  const focusChild = getFocusChild$1({
6437
+ ...snapshot,
6368
6438
  context: {
6369
6439
  ...snapshot.context,
6370
6440
  selection: {
@@ -6422,11 +6492,9 @@ const coreDndBehaviors = [
6422
6492
  if (!selection)
6423
6493
  return !1;
6424
6494
  const trimmedSelection = getTrimmedSelection({
6495
+ ...snapshot,
6425
6496
  context: {
6426
- converters: [],
6427
- schema: snapshot.context.schema,
6428
- keyGenerator: snapshot.context.keyGenerator,
6429
- readOnly: !1,
6497
+ ...snapshot.context,
6430
6498
  value: snapshot.context.value,
6431
6499
  selection
6432
6500
  }
@@ -6636,6 +6704,7 @@ const coreDndBehaviors = [
6636
6704
  event
6637
6705
  }) => {
6638
6706
  const previousBlock = getPreviousBlock({
6707
+ ...snapshot,
6639
6708
  context: {
6640
6709
  ...snapshot.context,
6641
6710
  selection: {
@@ -6670,6 +6739,7 @@ const coreDndBehaviors = [
6670
6739
  event
6671
6740
  }) => {
6672
6741
  const nextBlock = getNextBlock({
6742
+ ...snapshot,
6673
6743
  context: {
6674
6744
  ...snapshot.context,
6675
6745
  selection: {
@@ -6833,12 +6903,13 @@ const coreDndBehaviors = [
6833
6903
  anchor: selectionStartPoint,
6834
6904
  focus: blockEndPoint
6835
6905
  }, newTextBlock = parseBlock({
6836
- block: sliceBlocks({
6906
+ block: getSelectedValue({
6907
+ ...snapshot,
6837
6908
  context: {
6838
6909
  ...snapshot.context,
6839
- selection: newTextBlockSelection
6840
- },
6841
- blocks: [focusTextBlock.node]
6910
+ selection: newTextBlockSelection,
6911
+ value: [focusTextBlock.node]
6912
+ }
6842
6913
  }).at(0),
6843
6914
  context: snapshot.context,
6844
6915
  options: {
@@ -7442,16 +7513,17 @@ function createEditorSnapshot({
7442
7513
  schema,
7443
7514
  editor,
7444
7515
  range: editor.selection
7445
- }) : null;
7516
+ }) : null, context = {
7517
+ converters,
7518
+ keyGenerator,
7519
+ readOnly,
7520
+ schema,
7521
+ selection,
7522
+ value: editor.value
7523
+ };
7446
7524
  return {
7447
- context: {
7448
- converters,
7449
- keyGenerator,
7450
- readOnly,
7451
- schema,
7452
- selection,
7453
- value: editor.value
7454
- },
7525
+ blockIndexMap: editor.blockIndexMap,
7526
+ context,
7455
7527
  beta: {
7456
7528
  activeAnnotations: getActiveAnnotations({
7457
7529
  markState: editor.markState,