@portabletext/editor 2.6.2 → 2.6.4

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 (133) hide show
  1. package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs +29 -29
  2. package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs.map +1 -1
  3. package/lib/_chunks-cjs/selector.is-selection-expanded.cjs +5 -5
  4. package/lib/_chunks-cjs/selector.is-selection-expanded.cjs.map +1 -1
  5. package/lib/_chunks-cjs/util.child-selection-point-to-block-offset.cjs +3 -3
  6. package/lib/_chunks-cjs/util.child-selection-point-to-block-offset.cjs.map +1 -1
  7. package/lib/_chunks-cjs/util.is-selection-collapsed.cjs +5 -5
  8. package/lib/_chunks-cjs/util.is-selection-collapsed.cjs.map +1 -1
  9. package/lib/_chunks-cjs/util.merge-text-blocks.cjs +2 -6
  10. package/lib/_chunks-cjs/util.merge-text-blocks.cjs.map +1 -1
  11. package/lib/_chunks-cjs/util.slice-blocks.cjs +106 -117
  12. package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
  13. package/lib/_chunks-cjs/util.slice-text-block.cjs +3 -3
  14. package/lib/_chunks-cjs/util.slice-text-block.cjs.map +1 -1
  15. package/lib/_chunks-dts/behavior.types.action.d.cts +10 -10
  16. package/lib/_chunks-dts/behavior.types.action.d.ts +1 -1
  17. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js +3 -2
  18. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js.map +1 -1
  19. package/lib/_chunks-es/selector.is-selection-expanded.js +3 -2
  20. package/lib/_chunks-es/selector.is-selection-expanded.js.map +1 -1
  21. package/lib/_chunks-es/util.child-selection-point-to-block-offset.js +2 -1
  22. package/lib/_chunks-es/util.child-selection-point-to-block-offset.js.map +1 -1
  23. package/lib/_chunks-es/util.is-selection-collapsed.js +2 -1
  24. package/lib/_chunks-es/util.is-selection-collapsed.js.map +1 -1
  25. package/lib/_chunks-es/util.merge-text-blocks.js +2 -5
  26. package/lib/_chunks-es/util.merge-text-blocks.js.map +1 -1
  27. package/lib/_chunks-es/util.slice-blocks.js +101 -112
  28. package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
  29. package/lib/_chunks-es/util.slice-text-block.js +2 -1
  30. package/lib/_chunks-es/util.slice-text-block.js.map +1 -1
  31. package/lib/index.cjs +132 -95
  32. package/lib/index.cjs.map +1 -1
  33. package/lib/index.js +41 -4
  34. package/lib/index.js.map +1 -1
  35. package/lib/plugins/index.cjs +5 -5
  36. package/lib/plugins/index.cjs.map +1 -1
  37. package/lib/plugins/index.d.cts +3 -3
  38. package/lib/plugins/index.js +6 -5
  39. package/lib/plugins/index.js.map +1 -1
  40. package/lib/selectors/index.cjs +3 -3
  41. package/lib/selectors/index.cjs.map +1 -1
  42. package/lib/selectors/index.js +2 -1
  43. package/lib/selectors/index.js.map +1 -1
  44. package/lib/utils/index.cjs +14 -4
  45. package/lib/utils/index.cjs.map +1 -1
  46. package/lib/utils/index.d.cts +4 -11
  47. package/lib/utils/index.d.ts +2 -9
  48. package/lib/utils/index.js +4 -3
  49. package/lib/utils/index.js.map +1 -1
  50. package/package.json +10 -9
  51. package/src/behaviors/behavior.abstract.delete.ts +1 -1
  52. package/src/behaviors/behavior.abstract.deserialize.ts +1 -1
  53. package/src/behaviors/behavior.abstract.split.ts +2 -1
  54. package/src/behaviors/behavior.core.block-objects.ts +1 -1
  55. package/src/behaviors/behavior.core.lists.ts +2 -1
  56. package/src/behaviors/behavior.markdown.ts +1 -1
  57. package/src/converters/converter.text-plain.ts +2 -1
  58. package/src/editor/Editable.tsx +1 -1
  59. package/src/editor/__tests__/PortableTextEditor.test.tsx +1 -1
  60. package/src/editor/__tests__/RangeDecorations.test.tsx +1 -1
  61. package/src/editor/__tests__/self-solving.test.tsx +1 -1
  62. package/src/editor/components/render-element.tsx +1 -1
  63. package/src/editor/plugins/__tests__/withEditableAPIDelete.test.tsx +1 -1
  64. package/src/editor/plugins/__tests__/withEditableAPIGetFragment.test.tsx +2 -3
  65. package/src/editor/plugins/__tests__/withEditableAPIInsert.test.tsx +1 -1
  66. package/src/editor/plugins/__tests__/withEditableAPISelectionsOverlapping.test.tsx +1 -1
  67. package/src/editor/plugins/__tests__/withPortableTextLists.test.tsx +1 -1
  68. package/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx +1 -1
  69. package/src/editor/plugins/__tests__/withPortableTextSelections.test.tsx +1 -1
  70. package/src/editor/plugins/__tests__/withUndoRedo.test.tsx +1 -1
  71. package/src/editor/plugins/createWithObjectKeys.ts +1 -1
  72. package/src/editor/plugins/createWithPortableTextMarkModel.ts +1 -1
  73. package/src/editor/plugins/createWithSchemaTypes.ts +2 -5
  74. package/src/internal-utils/__tests__/valueNormalization.test.tsx +1 -1
  75. package/src/internal-utils/apply-operation-to-portable-text.test.ts +1 -1
  76. package/src/internal-utils/build-index-maps.ts +1 -1
  77. package/src/internal-utils/create-test-snapshot.ts +1 -1
  78. package/src/internal-utils/drag-selection.test.ts +1 -1
  79. package/src/internal-utils/editor-selection.ts +1 -1
  80. package/src/internal-utils/operation-to-patches.ts +1 -1
  81. package/src/internal-utils/parse-blocks.test.ts +1 -1
  82. package/src/internal-utils/parse-blocks.ts +1 -38
  83. package/src/internal-utils/selection-focus-text.ts +1 -1
  84. package/src/internal-utils/selection-text.ts +1 -1
  85. package/src/internal-utils/test-editor.tsx +1 -1
  86. package/src/internal-utils/text-block-key.ts +1 -1
  87. package/src/internal-utils/text-marks.ts +1 -1
  88. package/src/internal-utils/text-selection.ts +1 -1
  89. package/src/internal-utils/to-slate-range.test.ts +1 -1
  90. package/src/internal-utils/to-slate-range.ts +1 -1
  91. package/src/internal-utils/validateValue.ts +1 -1
  92. package/src/internal-utils/value-annotations.ts +1 -1
  93. package/src/operations/behavior.operation.block.unset.ts +2 -1
  94. package/src/operations/behavior.operation.delete.ts +98 -2
  95. package/src/operations/behavior.operation.insert.block.ts +2 -1
  96. package/src/plugins/plugin.behavior.tsx +3 -1
  97. package/src/plugins/plugin.internal.auto-close-brackets.test.tsx +1 -2
  98. package/src/plugins/plugin.markdown.test.tsx +1 -2
  99. package/src/selectors/selector.get-active-annotations.ts +1 -1
  100. package/src/selectors/selector.get-active-list-item.ts +1 -1
  101. package/src/selectors/selector.get-active-style.ts +1 -1
  102. package/src/selectors/selector.get-anchor-text-block.ts +1 -1
  103. package/src/selectors/selector.get-caret-word-selection.test.ts +1 -1
  104. package/src/selectors/selector.get-focus-block-object.ts +1 -1
  105. package/src/selectors/selector.get-focus-span.ts +1 -1
  106. package/src/selectors/selector.get-focus-text-block.ts +1 -1
  107. package/src/selectors/selector.get-list-state.ts +1 -1
  108. package/src/selectors/selector.get-next-span.ts +1 -1
  109. package/src/selectors/selector.get-previous-span.ts +1 -1
  110. package/src/selectors/selector.get-selected-spans.ts +1 -1
  111. package/src/selectors/selector.get-selected-text-blocks.ts +1 -1
  112. package/src/selectors/selector.get-selection-text.ts +1 -1
  113. package/src/selectors/selector.get-trimmed-selection.test.ts +1 -1
  114. package/src/selectors/selector.get-trimmed-selection.ts +1 -1
  115. package/src/selectors/selector.is-active-annotation.ts +1 -1
  116. package/src/selectors/selector.is-point-after-selection.ts +1 -1
  117. package/src/selectors/selector.is-point-before-selection.ts +1 -1
  118. package/src/utils/index.ts +1 -2
  119. package/src/utils/util.at-the-beginning-of-block.ts +1 -1
  120. package/src/utils/util.block-offset.ts +1 -1
  121. package/src/utils/util.child-selection-point-to-block-offset.ts +1 -1
  122. package/src/utils/util.get-block-end-point.ts +1 -1
  123. package/src/utils/util.get-block-start-point.ts +1 -1
  124. package/src/utils/util.is-empty-text-block.ts +1 -1
  125. package/src/utils/util.merge-text-blocks.ts +1 -1
  126. package/src/utils/util.slice-blocks.ts +2 -2
  127. package/src/utils/util.slice-text-block.ts +2 -2
  128. package/src/utils/util.split-text-block.ts +1 -1
  129. package/src/internal-utils/terse-pt.test.ts +0 -175
  130. package/src/internal-utils/terse-pt.ts +0 -150
  131. package/src/internal-utils/test-key-generator.ts +0 -9
  132. package/src/utils/util.is-span.ts +0 -12
  133. package/src/utils/util.is-text-block.ts +0 -13
package/lib/index.js CHANGED
@@ -8,9 +8,11 @@ import { Element as Element$1, Text, Range, Editor, Node, Transforms, Path, Oper
8
8
  import { useSelected, useSlateSelector, useSlateStatic, withReact, ReactEditor, Slate, useSlate, Editable } from "slate-react";
9
9
  import debug$f from "debug";
10
10
  import { DOMEditor, isDOMNode, EDITOR_TO_PENDING_SELECTION } from "slate-dom";
11
- import { getBlockStartPoint, getBlockKeyFromSelectionPoint, isTextBlock, getChildKeyFromSelectionPoint, blockOffsetToSpanSelectionPoint, isSpan, parseBlock, parseAnnotation, parseInlineObject, isKeyedSegment, isListBlock, isTypedObject, getSelectionStartPoint, getSelectionEndPoint, getTextBlockText, parseBlocks } from "./_chunks-es/util.slice-blocks.js";
11
+ import { getBlockStartPoint, getBlockKeyFromSelectionPoint, getChildKeyFromSelectionPoint, blockOffsetToSpanSelectionPoint, parseBlock, parseAnnotation, parseInlineObject, isKeyedSegment, isListBlock, isTypedObject, getSelectionStartPoint, getSelectionEndPoint, getTextBlockText, parseBlocks } from "./_chunks-es/util.slice-blocks.js";
12
12
  import { getBlockEndPoint, isSelectionCollapsed, isEqualSelectionPoints, isEmptyTextBlock } from "./_chunks-es/util.is-selection-collapsed.js";
13
13
  import isEqual from "lodash/isEqual.js";
14
+ import { isTextBlock, isSpan, compileSchema } from "@portabletext/schema";
15
+ import { defineSchema } from "@portabletext/schema";
14
16
  import { isSelectionCollapsed as isSelectionCollapsed$1, getFocusTextBlock, getFocusSpan as getFocusSpan$1, isSelectionExpanded, getFocusBlock as getFocusBlock$1, getSelectedValue, getSelectionStartPoint as getSelectionStartPoint$1, getFocusChild as getFocusChild$1 } from "./_chunks-es/selector.is-selection-expanded.js";
15
17
  import { getFocusInlineObject, getSelectedBlocks, getSelectionStartBlock as getSelectionStartBlock$1, getSelectionEndBlock as getSelectionEndBlock$1, isOverlappingSelection, isSelectingEntireBlocks, getMarkState, getActiveDecorators, getActiveAnnotationsMarks, getTrimmedSelection, getCaretWordSelection, getFocusBlockObject, getPreviousBlock, getNextBlock, isAtTheEndOfBlock, isAtTheStartOfBlock, getFirstBlock as getFirstBlock$1, getLastBlock as getLastBlock$1, getFocusListBlock, getSelectionEndPoint as getSelectionEndPoint$1, isActiveAnnotation, isActiveDecorator, getActiveAnnotations, getSelectedTextBlocks, isActiveListItem, isActiveStyle } from "./_chunks-es/selector.is-selecting-entire-blocks.js";
16
18
  import getRandomValues from "get-random-values-esm";
@@ -18,8 +20,6 @@ import { defineBehavior, forward, raise, effect } from "./behaviors/index.js";
18
20
  import uniq from "lodash/uniq.js";
19
21
  import { Subject } from "rxjs";
20
22
  import { compileSchemaDefinitionToPortableTextMemberSchemaTypes, createPortableTextMemberSchemaTypes, portableTextMemberSchemaTypesToSchema } from "@portabletext/sanity-bridge";
21
- import { compileSchema } from "@portabletext/schema";
22
- import { defineSchema } from "@portabletext/schema";
23
23
  import { setup, assign, enqueueActions, emit, assertEvent, stateIn, fromCallback, and, not, raise as raise$1, createActor } from "xstate";
24
24
  import { htmlToBlocks } from "@portabletext/block-tools";
25
25
  import { toHTML } from "@portabletext/to-html";
@@ -3331,6 +3331,21 @@ const addAnnotationOperationImplementation = ({
3331
3331
  });
3332
3332
  if (!range)
3333
3333
  throw new Error(`Failed to get Slate Range for selection ${JSON.stringify(operation.at)}`);
3334
+ if (operation.direction === "backward" && operation.unit === "line") {
3335
+ const parentBlockEntry = Editor.above(operation.editor, {
3336
+ match: (n) => Element$1.isElement(n) && Editor.isBlock(operation.editor, n),
3337
+ at: range
3338
+ });
3339
+ if (parentBlockEntry) {
3340
+ const [, parentBlockPath] = parentBlockEntry, parentElementRange = Editor.range(operation.editor, parentBlockPath, range.anchor), currentLineRange = findCurrentLineRange(operation.editor, parentElementRange);
3341
+ if (!Range.isCollapsed(currentLineRange)) {
3342
+ Transforms.delete(operation.editor, {
3343
+ at: currentLineRange
3344
+ });
3345
+ return;
3346
+ }
3347
+ }
3348
+ }
3334
3349
  const hanging = isTextBlock(context, endBlock) && endOffset === 0;
3335
3350
  deleteText(operation.editor, {
3336
3351
  at: range,
@@ -3341,7 +3356,29 @@ const addAnnotationOperationImplementation = ({
3341
3356
  anchor: operation.editor.selection.focus,
3342
3357
  focus: operation.editor.selection.focus
3343
3358
  });
3344
- }, insertInlineObjectOperationImplementation = ({
3359
+ };
3360
+ function findCurrentLineRange(editor, parentRange) {
3361
+ const parentRangeBoundary = Editor.range(editor, Range.end(parentRange)), positions = Array.from(Editor.positions(editor, {
3362
+ at: parentRange
3363
+ }));
3364
+ let left = 0, right = positions.length, middle = Math.floor(right / 2);
3365
+ if (rangesAreOnSameLine(editor, Editor.range(editor, positions[left]), parentRangeBoundary))
3366
+ return Editor.range(editor, positions[left], parentRangeBoundary);
3367
+ if (positions.length < 2)
3368
+ return Editor.range(editor, positions[positions.length - 1], parentRangeBoundary);
3369
+ for (; middle !== positions.length && middle !== left; )
3370
+ rangesAreOnSameLine(editor, Editor.range(editor, positions[middle]), parentRangeBoundary) ? right = middle : left = middle, middle = Math.floor((left + right) / 2);
3371
+ return Editor.range(editor, positions[left], parentRangeBoundary);
3372
+ }
3373
+ function rangesAreOnSameLine(editor, range1, range2) {
3374
+ const rect1 = DOMEditor.toDOMRange(editor, range1).getBoundingClientRect(), rect2 = DOMEditor.toDOMRange(editor, range2).getBoundingClientRect();
3375
+ return domRectsIntersect(rect1, rect2) && domRectsIntersect(rect2, rect1);
3376
+ }
3377
+ function domRectsIntersect(rect, compareRect) {
3378
+ const middle = (compareRect.top + compareRect.bottom) / 2;
3379
+ return rect.top <= middle && rect.bottom >= middle;
3380
+ }
3381
+ const insertInlineObjectOperationImplementation = ({
3345
3382
  context,
3346
3383
  operation
3347
3384
  }) => {