@portabletext/editor 1.36.6 → 1.37.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.
- package/lib/_chunks-cjs/behavior.markdown.cjs +1 -1
- package/lib/_chunks-cjs/editor-provider.cjs +63 -4
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
- package/lib/_chunks-es/behavior.markdown.js +1 -1
- package/lib/_chunks-es/editor-provider.js +67 -8
- package/lib/_chunks-es/editor-provider.js.map +1 -1
- package/lib/behaviors/index.d.cts +1 -0
- package/lib/behaviors/index.d.ts +1 -0
- package/lib/index.d.cts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/plugins/index.cjs +1 -1
- package/lib/plugins/index.d.cts +1 -0
- package/lib/plugins/index.d.ts +1 -0
- package/lib/plugins/index.js +1 -1
- package/lib/selectors/index.cjs +69 -14
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +17 -0
- package/lib/selectors/index.d.ts +17 -0
- package/lib/selectors/index.js +63 -8
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.d.cts +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/package.json +7 -7
- package/src/behavior-actions/behavior.action.decorator.add.ts +1 -0
- package/src/behavior-actions/behavior.action.delete.text.ts +1 -0
- package/src/behavior-actions/behavior.action.delete.ts +1 -3
- package/src/behavior-actions/behavior.action.insert-blocks.ts +66 -1
- package/src/editor/editor-machine.ts +16 -3
- package/src/editor/editor-selector.ts +1 -0
- package/src/editor/editor-snapshot.ts +4 -0
- package/src/internal-utils/create-test-snapshot.ts +1 -0
- package/src/selectors/index.ts +2 -0
- package/src/selectors/selector.get-focus-inline-object.ts +21 -0
- package/src/selectors/selector.is-overlapping-selection.test.ts +171 -0
- package/src/selectors/selector.is-overlapping-selection.ts +108 -4
- package/src/selectors/selector.is-point-after-selection.ts +3 -1
- package/src/selectors/selector.is-point-before-selection.ts +3 -1
- package/src/selectors/selector.is-selecting-entire-blocks.ts +34 -0
package/lib/behaviors/index.d.ts
CHANGED
package/lib/index.d.cts
CHANGED
package/lib/index.d.ts
CHANGED
package/lib/plugins/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: !0 });
|
|
3
|
-
var reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), editorProvider = require("../_chunks-cjs/editor-provider.cjs"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), xstate = require("xstate"),
|
|
3
|
+
var reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), editorProvider = require("../_chunks-cjs/editor-provider.cjs"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), xstate = require("xstate"), util_sliceBlocks = require("../_chunks-cjs/util.slice-blocks.cjs"), util_blockOffsetsToSelection = require("../_chunks-cjs/util.block-offsets-to-selection.cjs"), utils_index = require("../utils/index.cjs"), selector_isAtTheStartOfBlock = require("../_chunks-cjs/selector.is-at-the-start-of-block.cjs"), selector_getTextBefore = require("../_chunks-cjs/selector.get-text-before.cjs"), behavior_core = require("../_chunks-cjs/behavior.core.cjs"), useEffectEvent = require("use-effect-event"), jsxRuntime = require("react/jsx-runtime"), behavior_markdown = require("../_chunks-cjs/behavior.markdown.cjs");
|
|
4
4
|
function _interopDefaultCompat(e) {
|
|
5
5
|
return e && typeof e == "object" && "default" in e ? e : { default: e };
|
|
6
6
|
}
|
package/lib/plugins/index.d.cts
CHANGED
package/lib/plugins/index.d.ts
CHANGED
package/lib/plugins/index.js
CHANGED
|
@@ -4,10 +4,10 @@ import { useEditor } from "../_chunks-es/editor-provider.js";
|
|
|
4
4
|
import { useActorRef } from "@xstate/react";
|
|
5
5
|
import isEqual from "lodash/isEqual.js";
|
|
6
6
|
import { setup, fromCallback, assign } from "xstate";
|
|
7
|
-
import { getFocusTextBlock, getPreviousInlineObject, getSelectionStartPoint, isSelectionExpanded, getSelectionEndPoint } from "../_chunks-es/selector.is-at-the-start-of-block.js";
|
|
8
7
|
import { spanSelectionPointToBlockOffset, getBlockStartPoint, getBlockEndPoint, isEqualSelectionPoints } from "../_chunks-es/util.slice-blocks.js";
|
|
9
8
|
import { blockOffsetsToSelection } from "../_chunks-es/util.block-offsets-to-selection.js";
|
|
10
9
|
import { childSelectionPointToBlockOffset, isTextBlock, splitTextBlock, mergeTextBlocks } from "../utils/index.js";
|
|
10
|
+
import { getFocusTextBlock, getPreviousInlineObject, getSelectionStartPoint, isSelectionExpanded, getSelectionEndPoint } from "../_chunks-es/selector.is-at-the-start-of-block.js";
|
|
11
11
|
import { getBlockTextBefore } from "../_chunks-es/selector.get-text-before.js";
|
|
12
12
|
import { defineBehavior, raise } from "../_chunks-es/behavior.core.js";
|
|
13
13
|
import { useEffectEvent } from "use-effect-event";
|
package/lib/selectors/index.cjs
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: !0 });
|
|
3
|
-
var
|
|
4
|
-
const
|
|
3
|
+
var util_sliceBlocks = require("../_chunks-cjs/util.slice-blocks.cjs"), selector_isAtTheStartOfBlock = require("../_chunks-cjs/selector.is-at-the-start-of-block.cjs"), types = require("@sanity/types"), selector_isActiveStyle = require("../_chunks-cjs/selector.is-active-style.cjs"), selector_getTextBefore = require("../_chunks-cjs/selector.get-text-before.cjs"), util_reverseSelection = require("../_chunks-cjs/util.reverse-selection.cjs");
|
|
4
|
+
const isSelectingEntireBlocks = (snapshot) => {
|
|
5
|
+
if (!snapshot.context.selection)
|
|
6
|
+
return !1;
|
|
7
|
+
const startPoint = snapshot.context.selection.backward ? snapshot.context.selection.focus : snapshot.context.selection.anchor, endPoint = snapshot.context.selection.backward ? snapshot.context.selection.anchor : snapshot.context.selection.focus, startBlock = selector_isAtTheStartOfBlock.getSelectionStartBlock(snapshot), endBlock = selector_isAtTheStartOfBlock.getSelectionEndBlock(snapshot);
|
|
8
|
+
if (!startBlock || !endBlock)
|
|
9
|
+
return !1;
|
|
10
|
+
const startBlockStartPoint = util_sliceBlocks.getBlockStartPoint(startBlock), endBlockEndPoint = util_sliceBlocks.getBlockEndPoint(endBlock);
|
|
11
|
+
return util_sliceBlocks.isEqualSelectionPoints(startBlockStartPoint, startPoint) && util_sliceBlocks.isEqualSelectionPoints(endBlockEndPoint, endPoint);
|
|
12
|
+
}, getActiveAnnotations = (snapshot) => {
|
|
5
13
|
if (!snapshot.context.selection)
|
|
6
14
|
return [];
|
|
7
15
|
const selectedBlocks = selector_isAtTheStartOfBlock.getSelectedBlocks(snapshot), selectedSpans = selector_isActiveStyle.getSelectedSpans(snapshot);
|
|
@@ -54,12 +62,18 @@ const getActiveAnnotations = (snapshot) => {
|
|
|
54
62
|
start,
|
|
55
63
|
end
|
|
56
64
|
} : void 0;
|
|
65
|
+
}, getFocusInlineObject = (snapshot) => {
|
|
66
|
+
const focusChild = selector_isAtTheStartOfBlock.getFocusChild(snapshot);
|
|
67
|
+
return focusChild && !types.isPortableTextSpan(focusChild.node) ? {
|
|
68
|
+
node: focusChild.node,
|
|
69
|
+
path: focusChild.path
|
|
70
|
+
} : void 0;
|
|
57
71
|
}, getSelection = (snapshot) => snapshot.context.selection, getValue = (snapshot) => snapshot.context.value;
|
|
58
72
|
function isPointAfterSelection(point) {
|
|
59
73
|
return (snapshot) => {
|
|
60
74
|
if (!snapshot.context.selection)
|
|
61
75
|
return !1;
|
|
62
|
-
const selection = util_reverseSelection.reverseSelection(snapshot.context.selection), pointBlockKey = types.isKeySegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = types.isKeySegment(point.path[2]) ? point.path[2]._key : void 0, endBlockKey = types.isKeySegment(selection.focus.path[0]) ? selection.focus.path[0]._key : void 0, endChildKey = types.isKeySegment(selection.focus.path[2]) ? selection.focus.path[2]._key : void 0;
|
|
76
|
+
const selection = snapshot.context.selection.backward ? util_reverseSelection.reverseSelection(snapshot.context.selection) : snapshot.context.selection, pointBlockKey = types.isKeySegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = types.isKeySegment(point.path[2]) ? point.path[2]._key : void 0, endBlockKey = types.isKeySegment(selection.focus.path[0]) ? selection.focus.path[0]._key : void 0, endChildKey = types.isKeySegment(selection.focus.path[2]) ? selection.focus.path[2]._key : void 0;
|
|
63
77
|
if (!pointBlockKey || !endBlockKey)
|
|
64
78
|
return !1;
|
|
65
79
|
let after = !1;
|
|
@@ -94,7 +108,7 @@ function isPointBeforeSelection(point) {
|
|
|
94
108
|
return (snapshot) => {
|
|
95
109
|
if (!snapshot.context.selection)
|
|
96
110
|
return !1;
|
|
97
|
-
const selection = util_reverseSelection.reverseSelection(snapshot.context.selection), pointBlockKey = types.isKeySegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = types.isKeySegment(point.path[2]) ? point.path[2]._key : void 0, startBlockKey = types.isKeySegment(selection.anchor.path[0]) ? selection.anchor.path[0]._key : void 0, startChildKey = types.isKeySegment(selection.anchor.path[2]) ? selection.anchor.path[2]._key : void 0;
|
|
111
|
+
const selection = snapshot.context.selection.backward ? util_reverseSelection.reverseSelection(snapshot.context.selection) : snapshot.context.selection, pointBlockKey = types.isKeySegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = types.isKeySegment(point.path[2]) ? point.path[2]._key : void 0, startBlockKey = types.isKeySegment(selection.anchor.path[0]) ? selection.anchor.path[0]._key : void 0, startChildKey = types.isKeySegment(selection.anchor.path[2]) ? selection.anchor.path[2]._key : void 0;
|
|
98
112
|
if (!pointBlockKey || !startBlockKey)
|
|
99
113
|
return !1;
|
|
100
114
|
let before = !1;
|
|
@@ -141,18 +155,49 @@ function isOverlappingSelection(selection) {
|
|
|
141
155
|
...snapshot.context,
|
|
142
156
|
selection
|
|
143
157
|
}
|
|
144
|
-
});
|
|
145
|
-
|
|
158
|
+
}), originalSelectionStartPoint = selector_isAtTheStartOfBlock.getSelectionStartPoint(snapshot), originalSelectionEndPoint = selector_isAtTheStartOfBlock.getSelectionEndPoint(snapshot);
|
|
159
|
+
if (!selectionStartPoint || !selectionEndPoint || !originalSelectionStartPoint || !originalSelectionEndPoint)
|
|
160
|
+
return !1;
|
|
161
|
+
const startPointBeforeSelection = isPointBeforeSelection(selectionStartPoint)(snapshot), startPointAfterSelection = isPointAfterSelection(selectionStartPoint)(snapshot), endPointBeforeSelection = isPointBeforeSelection(selectionEndPoint)(snapshot), endPointAfterSelection = isPointAfterSelection(selectionEndPoint)(snapshot), originalStartPointBeforeStartPoint = isPointBeforeSelection(originalSelectionStartPoint)({
|
|
162
|
+
...snapshot,
|
|
163
|
+
context: {
|
|
164
|
+
...snapshot.context,
|
|
165
|
+
selection: {
|
|
166
|
+
anchor: selectionStartPoint,
|
|
167
|
+
focus: selectionStartPoint
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}), originalStartPointAfterStartPoint = isPointAfterSelection(originalSelectionStartPoint)({
|
|
171
|
+
...snapshot,
|
|
172
|
+
context: {
|
|
173
|
+
...snapshot.context,
|
|
174
|
+
selection: {
|
|
175
|
+
anchor: selectionStartPoint,
|
|
176
|
+
focus: selectionStartPoint
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}), originalEndPointBeforeEndPoint = isPointBeforeSelection(originalSelectionEndPoint)({
|
|
180
|
+
...snapshot,
|
|
181
|
+
context: {
|
|
182
|
+
...snapshot.context,
|
|
183
|
+
selection: {
|
|
184
|
+
anchor: selectionEndPoint,
|
|
185
|
+
focus: selectionEndPoint
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}), originalEndPointAfterEndPoint = isPointAfterSelection(originalSelectionEndPoint)({
|
|
189
|
+
...snapshot,
|
|
190
|
+
context: {
|
|
191
|
+
...snapshot.context,
|
|
192
|
+
selection: {
|
|
193
|
+
anchor: selectionEndPoint,
|
|
194
|
+
focus: selectionEndPoint
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}), endPointEqualToOriginalStartPoint = util_sliceBlocks.isEqualSelectionPoints(selectionEndPoint, originalSelectionStartPoint), startPointEqualToOriginalEndPoint = util_sliceBlocks.isEqualSelectionPoints(selectionStartPoint, originalSelectionEndPoint);
|
|
198
|
+
return endPointBeforeSelection && !endPointEqualToOriginalStartPoint || startPointAfterSelection && !startPointEqualToOriginalEndPoint ? !1 : !originalStartPointBeforeStartPoint && originalStartPointAfterStartPoint && !originalEndPointBeforeEndPoint && originalEndPointAfterEndPoint ? !endPointEqualToOriginalStartPoint : originalStartPointBeforeStartPoint && !originalStartPointAfterStartPoint && originalEndPointBeforeEndPoint && !originalEndPointAfterEndPoint ? !startPointEqualToOriginalEndPoint : !startPointAfterSelection || !startPointBeforeSelection || !endPointAfterSelection || !endPointBeforeSelection;
|
|
146
199
|
};
|
|
147
200
|
}
|
|
148
|
-
exports.getActiveListItem = selector_isActiveStyle.getActiveListItem;
|
|
149
|
-
exports.getActiveStyle = selector_isActiveStyle.getActiveStyle;
|
|
150
|
-
exports.getSelectedSpans = selector_isActiveStyle.getSelectedSpans;
|
|
151
|
-
exports.getTrimmedSelection = selector_isActiveStyle.getTrimmedSelection;
|
|
152
|
-
exports.isActiveAnnotation = selector_isActiveStyle.isActiveAnnotation;
|
|
153
|
-
exports.isActiveDecorator = selector_isActiveStyle.isActiveDecorator;
|
|
154
|
-
exports.isActiveListItem = selector_isActiveStyle.isActiveListItem;
|
|
155
|
-
exports.isActiveStyle = selector_isActiveStyle.isActiveStyle;
|
|
156
201
|
exports.getCaretWordSelection = selector_isAtTheStartOfBlock.getCaretWordSelection;
|
|
157
202
|
exports.getFirstBlock = selector_isAtTheStartOfBlock.getFirstBlock;
|
|
158
203
|
exports.getFocusBlock = selector_isAtTheStartOfBlock.getFocusBlock;
|
|
@@ -177,6 +222,14 @@ exports.isAtTheEndOfBlock = selector_isAtTheStartOfBlock.isAtTheEndOfBlock;
|
|
|
177
222
|
exports.isAtTheStartOfBlock = selector_isAtTheStartOfBlock.isAtTheStartOfBlock;
|
|
178
223
|
exports.isSelectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed;
|
|
179
224
|
exports.isSelectionExpanded = selector_isAtTheStartOfBlock.isSelectionExpanded;
|
|
225
|
+
exports.getActiveListItem = selector_isActiveStyle.getActiveListItem;
|
|
226
|
+
exports.getActiveStyle = selector_isActiveStyle.getActiveStyle;
|
|
227
|
+
exports.getSelectedSpans = selector_isActiveStyle.getSelectedSpans;
|
|
228
|
+
exports.getTrimmedSelection = selector_isActiveStyle.getTrimmedSelection;
|
|
229
|
+
exports.isActiveAnnotation = selector_isActiveStyle.isActiveAnnotation;
|
|
230
|
+
exports.isActiveDecorator = selector_isActiveStyle.isActiveDecorator;
|
|
231
|
+
exports.isActiveListItem = selector_isActiveStyle.isActiveListItem;
|
|
232
|
+
exports.isActiveStyle = selector_isActiveStyle.isActiveStyle;
|
|
180
233
|
exports.getBlockTextBefore = selector_getTextBefore.getBlockTextBefore;
|
|
181
234
|
exports.getActiveAnnotations = getActiveAnnotations;
|
|
182
235
|
exports.getAnchorBlock = getAnchorBlock;
|
|
@@ -184,9 +237,11 @@ exports.getAnchorChild = getAnchorChild;
|
|
|
184
237
|
exports.getAnchorSpan = getAnchorSpan;
|
|
185
238
|
exports.getAnchorTextBlock = getAnchorTextBlock;
|
|
186
239
|
exports.getBlockOffsets = getBlockOffsets;
|
|
240
|
+
exports.getFocusInlineObject = getFocusInlineObject;
|
|
187
241
|
exports.getSelection = getSelection;
|
|
188
242
|
exports.getValue = getValue;
|
|
189
243
|
exports.isOverlappingSelection = isOverlappingSelection;
|
|
190
244
|
exports.isPointAfterSelection = isPointAfterSelection;
|
|
191
245
|
exports.isPointBeforeSelection = isPointBeforeSelection;
|
|
246
|
+
exports.isSelectingEntireBlocks = isSelectingEntireBlocks;
|
|
192
247
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/selectors/selector.get-active-annotations.ts","../../src/selectors/selector.get-anchor-block.ts","../../src/selectors/selector.get-anchor-text-block.ts","../../src/selectors/selector.get-anchor-child.ts","../../src/selectors/selector.get-anchor-span.ts","../../src/selectors/selector.get-block-offsets.ts","../../src/selectors/selector.get-selection.ts","../../src/selectors/selector.get-value.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 {isPortableTextTextBlock, type PortableTextObject} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedSpans} from './selector.get-selected-spans'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveAnnotations: EditorSelector<Array<PortableTextObject>> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedSpans = getSelectedSpans(snapshot)\n\n if (selectedSpans.length === 0) {\n return []\n }\n\n const selectionMarkDefs = selectedBlocks.flatMap((block) =>\n isPortableTextTextBlock(block.node) ? (block.node.markDefs ?? []) : [],\n )\n\n return selectionMarkDefs.filter((markDef) =>\n selectedSpans.some((span) => span.node.marks?.includes(markDef._key)),\n )\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\n\n/**\n * @public\n */\nexport const getAnchorBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.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","import {\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorBlock} from './selector.get-anchor-block'\n\n/**\n * @public\n */\nexport const getAnchorTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const anchorBlock = getAnchorBlock(snapshot)\n\n return anchorBlock && isPortableTextTextBlock(anchorBlock.node)\n ? {node: anchorBlock.node, path: anchorBlock.path}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\nimport {getAnchorTextBlock} from './selector.get-anchor-text-block'\n\n/**\n * @public\n */\nexport const getAnchorChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const anchorBlock = getAnchorTextBlock(snapshot)\n\n if (!anchorBlock) {\n return undefined\n }\n\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.anchor.path[2])\n ? snapshot.context.selection.anchor.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? anchorBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...anchorBlock.path, 'children', {_key: key}]}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport {isPortableTextSpan, type PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorChild} from './selector.get-anchor-child'\n\n/**\n * @public\n */\nexport const getAnchorSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = (snapshot) => {\n const anchorChild = getAnchorChild(snapshot)\n\n return anchorChild && isPortableTextSpan(anchorChild.node)\n ? {node: anchorChild.node, path: anchorChild.path}\n : undefined\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport type {BlockOffset} from '../types/block-offset'\nimport * as utils from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\n\n/**\n * @public\n */\nexport const getBlockOffsets: EditorSelector<\n {start: BlockOffset; end: BlockOffset} | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionEndPoint = getSelectionEndPoint(snapshot)\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return undefined\n }\n\n const start = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: selectionStartPoint,\n })\n const end = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: selectionEndPoint,\n })\n\n return start && end ? {start, end} : undefined\n}\n","import type {EditorSelection} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelection: EditorSelector<EditorSelection> = (snapshot) => {\n return snapshot.context.selection\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getValue: EditorSelector<Array<PortableTextBlock>> = (\n snapshot,\n) => {\n return snapshot.context.value\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\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 = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeySegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeySegment(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 (!isPortableTextTextBlock(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 {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\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 = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeySegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeySegment(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 (!isPortableTextTextBlock(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 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 if (!selectionStartPoint || !selectionEndPoint) {\n return false\n }\n\n if (!isPointAfterSelection(selectionStartPoint)(snapshot)) {\n return false\n }\n\n if (!isPointBeforeSelection(selectionEndPoint)(snapshot)) {\n return false\n }\n\n return true\n }\n}\n"],"names":["getActiveAnnotations","snapshot","context","selection","selectedBlocks","getSelectedBlocks","selectedSpans","getSelectedSpans","length","flatMap","block","isPortableTextTextBlock","node","markDefs","filter","markDef","some","span","marks","includes","_key","getAnchorBlock","key","isKeyedSegment","anchor","path","undefined","value","find","getAnchorTextBlock","anchorBlock","getAnchorChild","children","getAnchorSpan","anchorChild","isPortableTextSpan","getBlockOffsets","selectionStartPoint","getSelectionStartPoint","selectionEndPoint","getSelectionEndPoint","start","utils","selectionPoint","end","getSelection","getValue","isPointAfterSelection","point","reverseSelection","pointBlockKey","isKeySegment","pointChildKey","endBlockKey","focus","endChildKey","after","child","offset","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/selectors/selector.is-selecting-entire-blocks.ts","../../src/selectors/selector.get-active-annotations.ts","../../src/selectors/selector.get-anchor-block.ts","../../src/selectors/selector.get-anchor-text-block.ts","../../src/selectors/selector.get-anchor-child.ts","../../src/selectors/selector.get-anchor-span.ts","../../src/selectors/selector.get-block-offsets.ts","../../src/selectors/selector.get-focus-inline-object.ts","../../src/selectors/selector.get-selection.ts","../../src/selectors/selector.get-value.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'\nimport * as utils from '../utils'\nimport {getSelectionEndBlock, getSelectionStartBlock} from './selectors'\n\n/**\n * @public\n */\nexport const isSelectingEntireBlocks: EditorSelector<boolean> = (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const startPoint = snapshot.context.selection.backward\n ? snapshot.context.selection.focus\n : snapshot.context.selection.anchor\n const endPoint = snapshot.context.selection.backward\n ? snapshot.context.selection.anchor\n : snapshot.context.selection.focus\n\n const startBlock = getSelectionStartBlock(snapshot)\n const endBlock = getSelectionEndBlock(snapshot)\n\n if (!startBlock || !endBlock) {\n return false\n }\n\n const startBlockStartPoint = utils.getBlockStartPoint(startBlock)\n const endBlockEndPoint = utils.getBlockEndPoint(endBlock)\n\n return (\n utils.isEqualSelectionPoints(startBlockStartPoint, startPoint) &&\n utils.isEqualSelectionPoints(endBlockEndPoint, endPoint)\n )\n}\n","import {isPortableTextTextBlock, type PortableTextObject} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedSpans} from './selector.get-selected-spans'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveAnnotations: EditorSelector<Array<PortableTextObject>> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedSpans = getSelectedSpans(snapshot)\n\n if (selectedSpans.length === 0) {\n return []\n }\n\n const selectionMarkDefs = selectedBlocks.flatMap((block) =>\n isPortableTextTextBlock(block.node) ? (block.node.markDefs ?? []) : [],\n )\n\n return selectionMarkDefs.filter((markDef) =>\n selectedSpans.some((span) => span.node.marks?.includes(markDef._key)),\n )\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\n\n/**\n * @public\n */\nexport const getAnchorBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.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","import {\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorBlock} from './selector.get-anchor-block'\n\n/**\n * @public\n */\nexport const getAnchorTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const anchorBlock = getAnchorBlock(snapshot)\n\n return anchorBlock && isPortableTextTextBlock(anchorBlock.node)\n ? {node: anchorBlock.node, path: anchorBlock.path}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\nimport {getAnchorTextBlock} from './selector.get-anchor-text-block'\n\n/**\n * @public\n */\nexport const getAnchorChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const anchorBlock = getAnchorTextBlock(snapshot)\n\n if (!anchorBlock) {\n return undefined\n }\n\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.anchor.path[2])\n ? snapshot.context.selection.anchor.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? anchorBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...anchorBlock.path, 'children', {_key: key}]}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport {isPortableTextSpan, type PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorChild} from './selector.get-anchor-child'\n\n/**\n * @public\n */\nexport const getAnchorSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = (snapshot) => {\n const anchorChild = getAnchorChild(snapshot)\n\n return anchorChild && isPortableTextSpan(anchorChild.node)\n ? {node: anchorChild.node, path: anchorChild.path}\n : undefined\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport type {BlockOffset} from '../types/block-offset'\nimport * as utils from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\n\n/**\n * @public\n */\nexport const getBlockOffsets: EditorSelector<\n {start: BlockOffset; end: BlockOffset} | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionEndPoint = getSelectionEndPoint(snapshot)\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return undefined\n }\n\n const start = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: selectionStartPoint,\n })\n const end = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: selectionEndPoint,\n })\n\n return start && end ? {start, end} : undefined\n}\n","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","import type {EditorSelection} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelection: EditorSelector<EditorSelection> = (snapshot) => {\n return snapshot.context.selection\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getValue: EditorSelector<Array<PortableTextBlock>> = (\n snapshot,\n) => {\n return snapshot.context.value\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\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 = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeySegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeySegment(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 (!isPortableTextTextBlock(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 {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\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 = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeySegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeySegment(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 (!isPortableTextTextBlock(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":["isSelectingEntireBlocks","snapshot","context","selection","startPoint","backward","focus","anchor","endPoint","startBlock","getSelectionStartBlock","endBlock","getSelectionEndBlock","startBlockStartPoint","utils","endBlockEndPoint","isEqualSelectionPoints","getActiveAnnotations","selectedBlocks","getSelectedBlocks","selectedSpans","getSelectedSpans","length","flatMap","block","isPortableTextTextBlock","node","markDefs","filter","markDef","some","span","marks","includes","_key","getAnchorBlock","key","isKeyedSegment","path","undefined","value","find","getAnchorTextBlock","anchorBlock","getAnchorChild","children","getAnchorSpan","anchorChild","isPortableTextSpan","getBlockOffsets","selectionStartPoint","getSelectionStartPoint","selectionEndPoint","getSelectionEndPoint","start","selectionPoint","end","getFocusInlineObject","focusChild","getFocusChild","getSelection","getValue","isPointAfterSelection","point","reverseSelection","pointBlockKey","isKeySegment","pointChildKey","endBlockKey","endChildKey","after","child","offset","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection","originalSelectionStartPoint","originalSelectionEndPoint","startPointBeforeSelection","startPointAfterSelection","endPointBeforeSelection","endPointAfterSelection","originalStartPointBeforeStartPoint","originalStartPointAfterStartPoint","originalEndPointBeforeEndPoint","originalEndPointAfterEndPoint","endPointEqualToOriginalStartPoint","startPointEqualToOriginalEndPoint"],"mappings":"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"}
|
|
@@ -306,6 +306,7 @@ declare type EditorContext = {
|
|
|
306
306
|
activeDecorators: Array<string>
|
|
307
307
|
converters: Array<Converter>
|
|
308
308
|
keyGenerator: () => string
|
|
309
|
+
readOnly: boolean
|
|
309
310
|
schema: EditorSchema
|
|
310
311
|
selection: EditorSelection
|
|
311
312
|
value: Array<PortableTextBlock>
|
|
@@ -19489,6 +19490,17 @@ export declare const getFocusChild: EditorSelector<
|
|
|
19489
19490
|
| undefined
|
|
19490
19491
|
>
|
|
19491
19492
|
|
|
19493
|
+
/**
|
|
19494
|
+
* @public
|
|
19495
|
+
*/
|
|
19496
|
+
export declare const getFocusInlineObject: EditorSelector<
|
|
19497
|
+
| {
|
|
19498
|
+
node: PortableTextObject
|
|
19499
|
+
path: [KeyedSegment, 'children', KeyedSegment]
|
|
19500
|
+
}
|
|
19501
|
+
| undefined
|
|
19502
|
+
>
|
|
19503
|
+
|
|
19492
19504
|
/**
|
|
19493
19505
|
* @public
|
|
19494
19506
|
*/
|
|
@@ -19762,6 +19774,11 @@ export declare function isPointBeforeSelection(
|
|
|
19762
19774
|
point: EditorSelectionPoint,
|
|
19763
19775
|
): EditorSelector<boolean>
|
|
19764
19776
|
|
|
19777
|
+
/**
|
|
19778
|
+
* @public
|
|
19779
|
+
*/
|
|
19780
|
+
export declare const isSelectingEntireBlocks: EditorSelector<boolean>
|
|
19781
|
+
|
|
19765
19782
|
/**
|
|
19766
19783
|
* @public
|
|
19767
19784
|
*/
|
package/lib/selectors/index.d.ts
CHANGED
|
@@ -306,6 +306,7 @@ declare type EditorContext = {
|
|
|
306
306
|
activeDecorators: Array<string>
|
|
307
307
|
converters: Array<Converter>
|
|
308
308
|
keyGenerator: () => string
|
|
309
|
+
readOnly: boolean
|
|
309
310
|
schema: EditorSchema
|
|
310
311
|
selection: EditorSelection
|
|
311
312
|
value: Array<PortableTextBlock>
|
|
@@ -19489,6 +19490,17 @@ export declare const getFocusChild: EditorSelector<
|
|
|
19489
19490
|
| undefined
|
|
19490
19491
|
>
|
|
19491
19492
|
|
|
19493
|
+
/**
|
|
19494
|
+
* @public
|
|
19495
|
+
*/
|
|
19496
|
+
export declare const getFocusInlineObject: EditorSelector<
|
|
19497
|
+
| {
|
|
19498
|
+
node: PortableTextObject
|
|
19499
|
+
path: [KeyedSegment, 'children', KeyedSegment]
|
|
19500
|
+
}
|
|
19501
|
+
| undefined
|
|
19502
|
+
>
|
|
19503
|
+
|
|
19492
19504
|
/**
|
|
19493
19505
|
* @public
|
|
19494
19506
|
*/
|
|
@@ -19762,6 +19774,11 @@ export declare function isPointBeforeSelection(
|
|
|
19762
19774
|
point: EditorSelectionPoint,
|
|
19763
19775
|
): EditorSelector<boolean>
|
|
19764
19776
|
|
|
19777
|
+
/**
|
|
19778
|
+
* @public
|
|
19779
|
+
*/
|
|
19780
|
+
export declare const isSelectingEntireBlocks: EditorSelector<boolean>
|
|
19781
|
+
|
|
19765
19782
|
/**
|
|
19766
19783
|
* @public
|
|
19767
19784
|
*/
|
package/lib/selectors/index.js
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
|
+
import { getBlockStartPoint, getBlockEndPoint, isEqualSelectionPoints, isKeyedSegment, spanSelectionPointToBlockOffset } from "../_chunks-es/util.slice-blocks.js";
|
|
2
|
+
import { getSelectionStartBlock, getSelectionEndBlock, getSelectedBlocks, getSelectionStartPoint, getSelectionEndPoint, getFocusChild } from "../_chunks-es/selector.is-at-the-start-of-block.js";
|
|
3
|
+
import { getCaretWordSelection, getFirstBlock, getFocusBlock, getFocusBlockObject, getFocusListBlock, getFocusSpan, getFocusTextBlock, getLastBlock, getNextBlock, getNextInlineObject, getPreviousBlock, getPreviousInlineObject, getSelectedSlice, getSelectionText, isAtTheEndOfBlock, isAtTheStartOfBlock, isSelectionCollapsed, isSelectionExpanded } from "../_chunks-es/selector.is-at-the-start-of-block.js";
|
|
1
4
|
import { isPortableTextTextBlock, isPortableTextSpan, isKeySegment } from "@sanity/types";
|
|
2
5
|
import { getSelectedSpans } from "../_chunks-es/selector.is-active-style.js";
|
|
3
6
|
import { getActiveListItem, getActiveStyle, getTrimmedSelection, isActiveAnnotation, isActiveDecorator, isActiveListItem, isActiveStyle } from "../_chunks-es/selector.is-active-style.js";
|
|
4
|
-
import { getSelectedBlocks, getSelectionStartPoint, getSelectionEndPoint } from "../_chunks-es/selector.is-at-the-start-of-block.js";
|
|
5
|
-
import { getCaretWordSelection, getFirstBlock, getFocusBlock, getFocusBlockObject, getFocusChild, getFocusListBlock, getFocusSpan, getFocusTextBlock, getLastBlock, getNextBlock, getNextInlineObject, getPreviousBlock, getPreviousInlineObject, getSelectedSlice, getSelectionEndBlock, getSelectionStartBlock, getSelectionText, isAtTheEndOfBlock, isAtTheStartOfBlock, isSelectionCollapsed, isSelectionExpanded } from "../_chunks-es/selector.is-at-the-start-of-block.js";
|
|
6
|
-
import { isKeyedSegment, spanSelectionPointToBlockOffset } from "../_chunks-es/util.slice-blocks.js";
|
|
7
7
|
import { getBlockTextBefore } from "../_chunks-es/selector.get-text-before.js";
|
|
8
8
|
import { reverseSelection } from "../_chunks-es/util.reverse-selection.js";
|
|
9
|
-
const
|
|
9
|
+
const isSelectingEntireBlocks = (snapshot) => {
|
|
10
|
+
if (!snapshot.context.selection)
|
|
11
|
+
return !1;
|
|
12
|
+
const startPoint = snapshot.context.selection.backward ? snapshot.context.selection.focus : snapshot.context.selection.anchor, endPoint = snapshot.context.selection.backward ? snapshot.context.selection.anchor : snapshot.context.selection.focus, startBlock = getSelectionStartBlock(snapshot), endBlock = getSelectionEndBlock(snapshot);
|
|
13
|
+
if (!startBlock || !endBlock)
|
|
14
|
+
return !1;
|
|
15
|
+
const startBlockStartPoint = getBlockStartPoint(startBlock), endBlockEndPoint = getBlockEndPoint(endBlock);
|
|
16
|
+
return isEqualSelectionPoints(startBlockStartPoint, startPoint) && isEqualSelectionPoints(endBlockEndPoint, endPoint);
|
|
17
|
+
}, getActiveAnnotations = (snapshot) => {
|
|
10
18
|
if (!snapshot.context.selection)
|
|
11
19
|
return [];
|
|
12
20
|
const selectedBlocks = getSelectedBlocks(snapshot), selectedSpans = getSelectedSpans(snapshot);
|
|
@@ -59,12 +67,18 @@ const getActiveAnnotations = (snapshot) => {
|
|
|
59
67
|
start,
|
|
60
68
|
end
|
|
61
69
|
} : void 0;
|
|
70
|
+
}, getFocusInlineObject = (snapshot) => {
|
|
71
|
+
const focusChild = getFocusChild(snapshot);
|
|
72
|
+
return focusChild && !isPortableTextSpan(focusChild.node) ? {
|
|
73
|
+
node: focusChild.node,
|
|
74
|
+
path: focusChild.path
|
|
75
|
+
} : void 0;
|
|
62
76
|
}, getSelection = (snapshot) => snapshot.context.selection, getValue = (snapshot) => snapshot.context.value;
|
|
63
77
|
function isPointAfterSelection(point) {
|
|
64
78
|
return (snapshot) => {
|
|
65
79
|
if (!snapshot.context.selection)
|
|
66
80
|
return !1;
|
|
67
|
-
const selection = reverseSelection(snapshot.context.selection), pointBlockKey = isKeySegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = isKeySegment(point.path[2]) ? point.path[2]._key : void 0, endBlockKey = isKeySegment(selection.focus.path[0]) ? selection.focus.path[0]._key : void 0, endChildKey = isKeySegment(selection.focus.path[2]) ? selection.focus.path[2]._key : void 0;
|
|
81
|
+
const selection = snapshot.context.selection.backward ? reverseSelection(snapshot.context.selection) : snapshot.context.selection, pointBlockKey = isKeySegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = isKeySegment(point.path[2]) ? point.path[2]._key : void 0, endBlockKey = isKeySegment(selection.focus.path[0]) ? selection.focus.path[0]._key : void 0, endChildKey = isKeySegment(selection.focus.path[2]) ? selection.focus.path[2]._key : void 0;
|
|
68
82
|
if (!pointBlockKey || !endBlockKey)
|
|
69
83
|
return !1;
|
|
70
84
|
let after = !1;
|
|
@@ -99,7 +113,7 @@ function isPointBeforeSelection(point) {
|
|
|
99
113
|
return (snapshot) => {
|
|
100
114
|
if (!snapshot.context.selection)
|
|
101
115
|
return !1;
|
|
102
|
-
const selection = reverseSelection(snapshot.context.selection), pointBlockKey = isKeySegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = isKeySegment(point.path[2]) ? point.path[2]._key : void 0, startBlockKey = isKeySegment(selection.anchor.path[0]) ? selection.anchor.path[0]._key : void 0, startChildKey = isKeySegment(selection.anchor.path[2]) ? selection.anchor.path[2]._key : void 0;
|
|
116
|
+
const selection = snapshot.context.selection.backward ? reverseSelection(snapshot.context.selection) : snapshot.context.selection, pointBlockKey = isKeySegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = isKeySegment(point.path[2]) ? point.path[2]._key : void 0, startBlockKey = isKeySegment(selection.anchor.path[0]) ? selection.anchor.path[0]._key : void 0, startChildKey = isKeySegment(selection.anchor.path[2]) ? selection.anchor.path[2]._key : void 0;
|
|
103
117
|
if (!pointBlockKey || !startBlockKey)
|
|
104
118
|
return !1;
|
|
105
119
|
let before = !1;
|
|
@@ -146,8 +160,47 @@ function isOverlappingSelection(selection) {
|
|
|
146
160
|
...snapshot.context,
|
|
147
161
|
selection
|
|
148
162
|
}
|
|
149
|
-
});
|
|
150
|
-
|
|
163
|
+
}), originalSelectionStartPoint = getSelectionStartPoint(snapshot), originalSelectionEndPoint = getSelectionEndPoint(snapshot);
|
|
164
|
+
if (!selectionStartPoint || !selectionEndPoint || !originalSelectionStartPoint || !originalSelectionEndPoint)
|
|
165
|
+
return !1;
|
|
166
|
+
const startPointBeforeSelection = isPointBeforeSelection(selectionStartPoint)(snapshot), startPointAfterSelection = isPointAfterSelection(selectionStartPoint)(snapshot), endPointBeforeSelection = isPointBeforeSelection(selectionEndPoint)(snapshot), endPointAfterSelection = isPointAfterSelection(selectionEndPoint)(snapshot), originalStartPointBeforeStartPoint = isPointBeforeSelection(originalSelectionStartPoint)({
|
|
167
|
+
...snapshot,
|
|
168
|
+
context: {
|
|
169
|
+
...snapshot.context,
|
|
170
|
+
selection: {
|
|
171
|
+
anchor: selectionStartPoint,
|
|
172
|
+
focus: selectionStartPoint
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}), originalStartPointAfterStartPoint = isPointAfterSelection(originalSelectionStartPoint)({
|
|
176
|
+
...snapshot,
|
|
177
|
+
context: {
|
|
178
|
+
...snapshot.context,
|
|
179
|
+
selection: {
|
|
180
|
+
anchor: selectionStartPoint,
|
|
181
|
+
focus: selectionStartPoint
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}), originalEndPointBeforeEndPoint = isPointBeforeSelection(originalSelectionEndPoint)({
|
|
185
|
+
...snapshot,
|
|
186
|
+
context: {
|
|
187
|
+
...snapshot.context,
|
|
188
|
+
selection: {
|
|
189
|
+
anchor: selectionEndPoint,
|
|
190
|
+
focus: selectionEndPoint
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}), originalEndPointAfterEndPoint = isPointAfterSelection(originalSelectionEndPoint)({
|
|
194
|
+
...snapshot,
|
|
195
|
+
context: {
|
|
196
|
+
...snapshot.context,
|
|
197
|
+
selection: {
|
|
198
|
+
anchor: selectionEndPoint,
|
|
199
|
+
focus: selectionEndPoint
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}), endPointEqualToOriginalStartPoint = isEqualSelectionPoints(selectionEndPoint, originalSelectionStartPoint), startPointEqualToOriginalEndPoint = isEqualSelectionPoints(selectionStartPoint, originalSelectionEndPoint);
|
|
203
|
+
return endPointBeforeSelection && !endPointEqualToOriginalStartPoint || startPointAfterSelection && !startPointEqualToOriginalEndPoint ? !1 : !originalStartPointBeforeStartPoint && originalStartPointAfterStartPoint && !originalEndPointBeforeEndPoint && originalEndPointAfterEndPoint ? !endPointEqualToOriginalStartPoint : originalStartPointBeforeStartPoint && !originalStartPointAfterStartPoint && originalEndPointBeforeEndPoint && !originalEndPointAfterEndPoint ? !startPointEqualToOriginalEndPoint : !startPointAfterSelection || !startPointBeforeSelection || !endPointAfterSelection || !endPointBeforeSelection;
|
|
151
204
|
};
|
|
152
205
|
}
|
|
153
206
|
export {
|
|
@@ -165,6 +218,7 @@ export {
|
|
|
165
218
|
getFocusBlock,
|
|
166
219
|
getFocusBlockObject,
|
|
167
220
|
getFocusChild,
|
|
221
|
+
getFocusInlineObject,
|
|
168
222
|
getFocusListBlock,
|
|
169
223
|
getFocusSpan,
|
|
170
224
|
getFocusTextBlock,
|
|
@@ -193,6 +247,7 @@ export {
|
|
|
193
247
|
isOverlappingSelection,
|
|
194
248
|
isPointAfterSelection,
|
|
195
249
|
isPointBeforeSelection,
|
|
250
|
+
isSelectingEntireBlocks,
|
|
196
251
|
isSelectionCollapsed,
|
|
197
252
|
isSelectionExpanded
|
|
198
253
|
};
|