@portabletext/editor 1.48.9 → 1.48.11

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 (80) hide show
  1. package/lib/_chunks-cjs/editor-provider.cjs +879 -169
  2. package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
  3. package/lib/_chunks-cjs/selector.get-focus-inline-object.cjs +2 -2
  4. package/lib/_chunks-cjs/selector.get-focus-inline-object.cjs.map +1 -1
  5. package/lib/_chunks-cjs/selector.get-text-before.cjs +2 -2
  6. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
  7. package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs +464 -19
  8. package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs.map +1 -1
  9. package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs +9 -1
  10. package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs.map +1 -1
  11. package/lib/_chunks-cjs/util.slice-blocks.cjs +2 -2
  12. package/lib/_chunks-es/editor-provider.js +773 -65
  13. package/lib/_chunks-es/editor-provider.js.map +1 -1
  14. package/lib/_chunks-es/selector.get-focus-inline-object.js +1 -1
  15. package/lib/_chunks-es/selector.get-text-before.js +1 -1
  16. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js +448 -3
  17. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js.map +1 -1
  18. package/lib/_chunks-es/util.selection-point-to-block-offset.js +9 -1
  19. package/lib/_chunks-es/util.selection-point-to-block-offset.js.map +1 -1
  20. package/lib/_chunks-es/util.slice-blocks.js +2 -2
  21. package/lib/behaviors/index.cjs +27 -377
  22. package/lib/behaviors/index.cjs.map +1 -1
  23. package/lib/behaviors/index.d.cts +3696 -13915
  24. package/lib/behaviors/index.d.ts +3696 -13915
  25. package/lib/behaviors/index.js +22 -377
  26. package/lib/behaviors/index.js.map +1 -1
  27. package/lib/index.cjs +17 -17
  28. package/lib/index.cjs.map +1 -1
  29. package/lib/index.d.cts +3008 -394
  30. package/lib/index.d.ts +3008 -394
  31. package/lib/index.js +4 -5
  32. package/lib/index.js.map +1 -1
  33. package/lib/plugins/index.cjs +347 -30
  34. package/lib/plugins/index.cjs.map +1 -1
  35. package/lib/plugins/index.d.cts +3008 -395
  36. package/lib/plugins/index.d.ts +3008 -395
  37. package/lib/plugins/index.js +324 -8
  38. package/lib/plugins/index.js.map +1 -1
  39. package/lib/selectors/index.cjs +29 -29
  40. package/lib/selectors/index.cjs.map +1 -1
  41. package/lib/selectors/index.d.cts +3007 -387
  42. package/lib/selectors/index.d.ts +3007 -387
  43. package/lib/selectors/index.js +2 -3
  44. package/lib/selectors/index.js.map +1 -1
  45. package/lib/utils/index.cjs +5 -5
  46. package/lib/utils/index.cjs.map +1 -1
  47. package/lib/utils/index.d.cts +3008 -389
  48. package/lib/utils/index.d.ts +3008 -389
  49. package/lib/utils/index.js +2 -3
  50. package/lib/utils/index.js.map +1 -1
  51. package/package.json +1 -1
  52. package/src/behaviors/behavior.emoji-picker.ts +0 -6
  53. package/src/behaviors/behavior.markdown.ts +0 -48
  54. package/src/behaviors/index.ts +0 -15
  55. package/src/editor/create-editor.ts +0 -3
  56. package/src/editor/editor-machine.ts +105 -52
  57. package/src/editor/sync-machine.ts +10 -4
  58. package/src/internal-utils/__tests__/operationToPatches.test.ts +0 -2
  59. package/src/internal-utils/__tests__/patchToOperations.test.ts +0 -2
  60. package/src/plugins/plugin.core.tsx +1 -1
  61. package/lib/_chunks-cjs/behavior.core.cjs +0 -700
  62. package/lib/_chunks-cjs/behavior.core.cjs.map +0 -1
  63. package/lib/_chunks-cjs/behavior.markdown.cjs +0 -321
  64. package/lib/_chunks-cjs/behavior.markdown.cjs.map +0 -1
  65. package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs +0 -449
  66. package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs.map +0 -1
  67. package/lib/_chunks-cjs/util.get-selection-start-point.cjs +0 -10
  68. package/lib/_chunks-cjs/util.get-selection-start-point.cjs.map +0 -1
  69. package/lib/_chunks-es/behavior.core.js +0 -703
  70. package/lib/_chunks-es/behavior.core.js.map +0 -1
  71. package/lib/_chunks-es/behavior.markdown.js +0 -325
  72. package/lib/_chunks-es/behavior.markdown.js.map +0 -1
  73. package/lib/_chunks-es/selector.is-overlapping-selection.js +0 -451
  74. package/lib/_chunks-es/selector.is-overlapping-selection.js.map +0 -1
  75. package/lib/_chunks-es/util.get-selection-start-point.js +0 -11
  76. package/lib/_chunks-es/util.get-selection-start-point.js.map +0 -1
  77. package/src/behaviors/behavior.code-editor.ts +0 -77
  78. package/src/behaviors/behavior.links.ts +0 -84
  79. package/src/internal-utils/looks-like-url.test.ts +0 -19
  80. package/src/internal-utils/looks-like-url.ts +0 -15
@@ -1,451 +0,0 @@
1
- import { isTextBlock, isSpan, isListBlock, isKeyedSegment, isSpan$1, sliceBlocks, spanSelectionPointToBlockOffset, getBlockStartPoint, getBlockEndPoint, blockOffsetToSpanSelectionPoint, isEqualSelectionPoints, reverseSelection } from "./util.slice-blocks.js";
2
- import { isKeySegment } from "@sanity/types";
3
- const isSelectionCollapsed = (snapshot) => snapshot.context.selection ? JSON.stringify(snapshot.context.selection.anchor.path) === JSON.stringify(snapshot.context.selection.focus.path) && snapshot.context.selection?.anchor.offset === snapshot.context.selection?.focus.offset : !1, getFocusBlock = (snapshot) => {
4
- const key = snapshot.context.selection && isKeyedSegment(snapshot.context.selection.focus.path[0]) ? snapshot.context.selection.focus.path[0]._key : void 0, node = key ? snapshot.context.value.find((block) => block._key === key) : void 0;
5
- return node && key ? {
6
- node,
7
- path: [{
8
- _key: key
9
- }]
10
- } : void 0;
11
- }, getFocusListBlock = (snapshot) => {
12
- const focusTextBlock = getFocusTextBlock(snapshot);
13
- return focusTextBlock && isListBlock(snapshot.context, focusTextBlock.node) ? {
14
- node: focusTextBlock.node,
15
- path: focusTextBlock.path
16
- } : void 0;
17
- }, getFocusTextBlock = (snapshot) => {
18
- const focusBlock = getFocusBlock(snapshot);
19
- return focusBlock && isTextBlock(snapshot.context, focusBlock.node) ? {
20
- node: focusBlock.node,
21
- path: focusBlock.path
22
- } : void 0;
23
- }, getFocusBlockObject = (snapshot) => {
24
- const focusBlock = getFocusBlock(snapshot);
25
- return focusBlock && !isTextBlock(snapshot.context, focusBlock.node) ? {
26
- node: focusBlock.node,
27
- path: focusBlock.path
28
- } : void 0;
29
- }, getFocusChild = (snapshot) => {
30
- const focusBlock = getFocusTextBlock(snapshot);
31
- if (!focusBlock)
32
- return;
33
- const key = snapshot.context.selection && isKeyedSegment(snapshot.context.selection.focus.path[2]) ? snapshot.context.selection.focus.path[2]._key : void 0, node = key ? focusBlock.node.children.find((span) => span._key === key) : void 0;
34
- return node && key ? {
35
- node,
36
- path: [...focusBlock.path, "children", {
37
- _key: key
38
- }]
39
- } : void 0;
40
- }, getFocusSpan = (snapshot) => {
41
- const focusChild = getFocusChild(snapshot);
42
- return focusChild && isSpan(snapshot.context, focusChild.node) ? {
43
- node: focusChild.node,
44
- path: focusChild.path
45
- } : void 0;
46
- }, getFirstBlock = (snapshot) => {
47
- const node = snapshot.context.value[0];
48
- return node ? {
49
- node,
50
- path: [{
51
- _key: node._key
52
- }]
53
- } : void 0;
54
- }, getLastBlock = (snapshot) => {
55
- const node = snapshot.context.value[snapshot.context.value.length - 1] ? snapshot.context.value[snapshot.context.value.length - 1] : void 0;
56
- return node ? {
57
- node,
58
- path: [{
59
- _key: node._key
60
- }]
61
- } : void 0;
62
- }, getSelectedBlocks = (snapshot) => {
63
- if (!snapshot.context.selection)
64
- return [];
65
- const selectedBlocks = [], startKey = snapshot.context.selection.backward ? isKeyedSegment(snapshot.context.selection.focus.path[0]) ? snapshot.context.selection.focus.path[0]._key : void 0 : isKeyedSegment(snapshot.context.selection.anchor.path[0]) ? snapshot.context.selection.anchor.path[0]._key : void 0, endKey = snapshot.context.selection.backward ? isKeyedSegment(snapshot.context.selection.anchor.path[0]) ? snapshot.context.selection.anchor.path[0]._key : void 0 : isKeyedSegment(snapshot.context.selection.focus.path[0]) ? snapshot.context.selection.focus.path[0]._key : void 0;
66
- if (!startKey || !endKey)
67
- return selectedBlocks;
68
- for (const block of snapshot.context.value) {
69
- if (block._key === startKey) {
70
- if (selectedBlocks.push({
71
- node: block,
72
- path: [{
73
- _key: block._key
74
- }]
75
- }), startKey === endKey)
76
- break;
77
- continue;
78
- }
79
- if (block._key === endKey) {
80
- selectedBlocks.push({
81
- node: block,
82
- path: [{
83
- _key: block._key
84
- }]
85
- });
86
- break;
87
- }
88
- selectedBlocks.length > 0 && selectedBlocks.push({
89
- node: block,
90
- path: [{
91
- _key: block._key
92
- }]
93
- });
94
- }
95
- return selectedBlocks;
96
- }, getSelectionStartBlock = (snapshot) => {
97
- if (!snapshot.context.selection)
98
- return;
99
- const key = snapshot.context.selection.backward ? isKeyedSegment(snapshot.context.selection.focus.path[0]) ? snapshot.context.selection.focus.path[0]._key : void 0 : isKeyedSegment(snapshot.context.selection.anchor.path[0]) ? snapshot.context.selection.anchor.path[0]._key : void 0, node = key ? snapshot.context.value.find((block) => block._key === key) : void 0;
100
- return node && key ? {
101
- node,
102
- path: [{
103
- _key: key
104
- }]
105
- } : void 0;
106
- }, getSelectionEndBlock = (snapshot) => {
107
- if (!snapshot.context.selection)
108
- return;
109
- const key = snapshot.context.selection.backward ? isKeyedSegment(snapshot.context.selection.anchor.path[0]) ? snapshot.context.selection.anchor.path[0]._key : void 0 : isKeyedSegment(snapshot.context.selection.focus.path[0]) ? snapshot.context.selection.focus.path[0]._key : void 0, node = key ? snapshot.context.value.find((block) => block._key === key) : void 0;
110
- return node && key ? {
111
- node,
112
- path: [{
113
- _key: key
114
- }]
115
- } : void 0;
116
- }, getPreviousBlock = (snapshot) => {
117
- let previousBlock;
118
- const selectionStartBlock = getSelectionStartBlock(snapshot);
119
- if (!selectionStartBlock)
120
- return;
121
- let foundSelectionStartBlock = !1;
122
- for (const block of snapshot.context.value) {
123
- if (block._key === selectionStartBlock.node._key) {
124
- foundSelectionStartBlock = !0;
125
- break;
126
- }
127
- previousBlock = {
128
- node: block,
129
- path: [{
130
- _key: block._key
131
- }]
132
- };
133
- }
134
- if (foundSelectionStartBlock && previousBlock)
135
- return previousBlock;
136
- }, getNextBlock = (snapshot) => {
137
- let nextBlock;
138
- const selectionEndBlock = getSelectionEndBlock(snapshot);
139
- if (!selectionEndBlock)
140
- return;
141
- let foundSelectionEndBlock = !1;
142
- for (const block of snapshot.context.value) {
143
- if (block._key === selectionEndBlock.node._key) {
144
- foundSelectionEndBlock = !0;
145
- continue;
146
- }
147
- if (foundSelectionEndBlock) {
148
- nextBlock = {
149
- node: block,
150
- path: [{
151
- _key: block._key
152
- }]
153
- };
154
- break;
155
- }
156
- }
157
- if (foundSelectionEndBlock && nextBlock)
158
- return nextBlock;
159
- }, getSelectionEndPoint = (snapshot) => {
160
- if (snapshot.context.selection)
161
- return snapshot.context.selection.backward ? snapshot.context.selection.anchor : snapshot.context.selection.focus;
162
- }, getSelectionStartPoint = (snapshot) => {
163
- if (snapshot.context.selection)
164
- return snapshot.context.selection.backward ? snapshot.context.selection.focus : snapshot.context.selection.anchor;
165
- }, getNextInlineObject = (snapshot) => {
166
- const focusTextBlock = getFocusTextBlock(snapshot), selectionEndPoint = getSelectionEndPoint(snapshot), selectionEndPointChildKey = selectionEndPoint && isKeySegment(selectionEndPoint.path[2]) ? selectionEndPoint.path[2]._key : void 0;
167
- if (!focusTextBlock || !selectionEndPointChildKey)
168
- return;
169
- let endPointChildFound = !1, inlineObject;
170
- for (const child of focusTextBlock.node.children) {
171
- if (child._key === selectionEndPointChildKey) {
172
- endPointChildFound = !0;
173
- continue;
174
- }
175
- if (!isSpan$1(snapshot.context, child) && endPointChildFound) {
176
- inlineObject = {
177
- node: child,
178
- path: [...focusTextBlock.path, "children", {
179
- _key: child._key
180
- }]
181
- };
182
- break;
183
- }
184
- }
185
- return inlineObject;
186
- }, getPreviousInlineObject = (snapshot) => {
187
- const focusTextBlock = getFocusTextBlock(snapshot), selectionStartPoint = getSelectionStartPoint(snapshot), selectionStartPointChildKey = selectionStartPoint && isKeySegment(selectionStartPoint.path[2]) ? selectionStartPoint.path[2]._key : void 0;
188
- if (!focusTextBlock || !selectionStartPointChildKey)
189
- return;
190
- let inlineObject;
191
- for (const child of focusTextBlock.node.children) {
192
- if (child._key === selectionStartPointChildKey)
193
- break;
194
- isSpan$1(snapshot.context, child) || (inlineObject = {
195
- node: child,
196
- path: [...focusTextBlock.path, "children", {
197
- _key: child._key
198
- }]
199
- });
200
- }
201
- return inlineObject;
202
- }, getSelectedSlice = (snapshot) => sliceBlocks({
203
- context: snapshot.context,
204
- blocks: snapshot.context.value
205
- }), getSelectionText = (snapshot) => getSelectedSlice(snapshot).reduce((text, block) => isTextBlock(snapshot.context, block) ? text + block.children.reduce((text2, child) => isSpan(snapshot.context, child) ? text2 + child.text : text2, "") : text, ""), isSelectionExpanded = (snapshot) => !isSelectionCollapsed(snapshot), getCaretWordSelection = (snapshot) => {
206
- if (!snapshot.context.selection || !isSelectionCollapsed(snapshot))
207
- return null;
208
- const focusTextBlock = getFocusTextBlock(snapshot), selectionStartPoint = getSelectionStartPoint(snapshot), selectionStartOffset = selectionStartPoint ? spanSelectionPointToBlockOffset({
209
- context: snapshot.context,
210
- selectionPoint: selectionStartPoint
211
- }) : void 0;
212
- if (!focusTextBlock || !selectionStartPoint || !selectionStartOffset)
213
- return null;
214
- const previousInlineObject = getPreviousInlineObject(snapshot), blockStartPoint = getBlockStartPoint({
215
- context: snapshot.context,
216
- block: focusTextBlock
217
- }), textDirectlyBefore = getSelectionText({
218
- context: {
219
- ...snapshot.context,
220
- selection: {
221
- anchor: previousInlineObject ? {
222
- path: previousInlineObject.path,
223
- offset: 0
224
- } : blockStartPoint,
225
- focus: selectionStartPoint
226
- }
227
- }
228
- }).split(/\s+/).at(-1), nextInlineObject = getNextInlineObject(snapshot), blockEndPoint = getBlockEndPoint({
229
- context: snapshot.context,
230
- block: focusTextBlock
231
- }), textDirectlyAfter = getSelectionText({
232
- context: {
233
- ...snapshot.context,
234
- selection: {
235
- anchor: selectionStartPoint,
236
- focus: nextInlineObject ? {
237
- path: nextInlineObject.path,
238
- offset: 0
239
- } : blockEndPoint
240
- }
241
- }
242
- }).split(/\s+/).at(0);
243
- if ((textDirectlyBefore === void 0 || textDirectlyBefore === "") && (textDirectlyAfter === void 0 || textDirectlyAfter === ""))
244
- return null;
245
- const caretWordStartOffset = textDirectlyBefore ? {
246
- ...selectionStartOffset,
247
- offset: selectionStartOffset.offset - textDirectlyBefore.length
248
- } : selectionStartOffset, caretWordEndOffset = textDirectlyAfter ? {
249
- ...selectionStartOffset,
250
- offset: selectionStartOffset.offset + textDirectlyAfter.length
251
- } : selectionStartOffset, caretWordStartSelectionPoint = blockOffsetToSpanSelectionPoint({
252
- context: snapshot.context,
253
- blockOffset: caretWordStartOffset,
254
- direction: "backward"
255
- }), caretWordEndSelectionPoint = blockOffsetToSpanSelectionPoint({
256
- context: snapshot.context,
257
- blockOffset: caretWordEndOffset,
258
- direction: "forward"
259
- });
260
- if (!caretWordStartSelectionPoint || !caretWordEndSelectionPoint)
261
- return null;
262
- const caretWordSelection = {
263
- anchor: caretWordStartSelectionPoint,
264
- focus: caretWordEndSelectionPoint
265
- };
266
- return isSelectionExpanded({
267
- context: {
268
- ...snapshot.context,
269
- selection: caretWordSelection
270
- }
271
- }) ? caretWordSelection : null;
272
- };
273
- function isAtTheEndOfBlock(block) {
274
- return (snapshot) => {
275
- if (!snapshot.context.selection || !isSelectionCollapsed(snapshot))
276
- return !1;
277
- const blockEndPoint = getBlockEndPoint({
278
- context: snapshot.context,
279
- block
280
- });
281
- return isEqualSelectionPoints(snapshot.context.selection.focus, blockEndPoint);
282
- };
283
- }
284
- function isAtTheStartOfBlock(block) {
285
- return (snapshot) => {
286
- if (!snapshot.context.selection || !isSelectionCollapsed(snapshot))
287
- return !1;
288
- const blockStartPoint = getBlockStartPoint({
289
- context: snapshot.context,
290
- block
291
- });
292
- return isEqualSelectionPoints(snapshot.context.selection.focus, blockStartPoint);
293
- };
294
- }
295
- function isPointAfterSelection(point) {
296
- return (snapshot) => {
297
- if (!snapshot.context.selection)
298
- return !1;
299
- const selection = snapshot.context.selection.backward ? reverseSelection(snapshot.context.selection) : snapshot.context.selection, pointBlockKey = isKeyedSegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = isKeyedSegment(point.path[2]) ? point.path[2]._key : void 0, endBlockKey = isKeyedSegment(selection.focus.path[0]) ? selection.focus.path[0]._key : void 0, endChildKey = isKeyedSegment(selection.focus.path[2]) ? selection.focus.path[2]._key : void 0;
300
- if (!pointBlockKey || !endBlockKey)
301
- return !1;
302
- let after = !1;
303
- for (const block of snapshot.context.value) {
304
- if (block._key === endBlockKey) {
305
- if (block._key !== pointBlockKey) {
306
- after = !0;
307
- break;
308
- }
309
- if (!isTextBlock(snapshot.context, block) || !pointChildKey || !endChildKey)
310
- break;
311
- for (const child of block.children) {
312
- if (child._key === endChildKey) {
313
- if (child._key !== pointChildKey) {
314
- after = !0;
315
- break;
316
- }
317
- after = point.offset > selection.focus.offset;
318
- break;
319
- }
320
- if (child._key === pointChildKey)
321
- break;
322
- }
323
- }
324
- if (block._key === pointBlockKey)
325
- break;
326
- }
327
- return after;
328
- };
329
- }
330
- function isPointBeforeSelection(point) {
331
- return (snapshot) => {
332
- if (!snapshot.context.selection)
333
- return !1;
334
- const selection = snapshot.context.selection.backward ? reverseSelection(snapshot.context.selection) : snapshot.context.selection, pointBlockKey = isKeyedSegment(point.path[0]) ? point.path[0]._key : void 0, pointChildKey = isKeyedSegment(point.path[2]) ? point.path[2]._key : void 0, startBlockKey = isKeyedSegment(selection.anchor.path[0]) ? selection.anchor.path[0]._key : void 0, startChildKey = isKeyedSegment(selection.anchor.path[2]) ? selection.anchor.path[2]._key : void 0;
335
- if (!pointBlockKey || !startBlockKey)
336
- return !1;
337
- let before = !1;
338
- for (const block of snapshot.context.value) {
339
- if (block._key === pointBlockKey) {
340
- if (block._key !== startBlockKey) {
341
- before = !0;
342
- break;
343
- }
344
- if (!isTextBlock(snapshot.context, block) || !pointChildKey || !startChildKey)
345
- break;
346
- for (const child of block.children) {
347
- if (child._key === pointChildKey) {
348
- if (child._key !== startChildKey) {
349
- before = !0;
350
- break;
351
- }
352
- before = point.offset < selection.anchor.offset;
353
- break;
354
- }
355
- if (child._key === startChildKey)
356
- break;
357
- }
358
- }
359
- if (block._key === startBlockKey)
360
- break;
361
- }
362
- return before;
363
- };
364
- }
365
- function isOverlappingSelection(selection) {
366
- return (snapshot) => {
367
- if (!selection || !snapshot.context.selection)
368
- return !1;
369
- const selectionStartPoint = getSelectionStartPoint({
370
- context: {
371
- ...snapshot.context,
372
- selection
373
- }
374
- }), selectionEndPoint = getSelectionEndPoint({
375
- context: {
376
- ...snapshot.context,
377
- selection
378
- }
379
- }), originalSelectionStartPoint = getSelectionStartPoint(snapshot), originalSelectionEndPoint = getSelectionEndPoint(snapshot);
380
- if (!selectionStartPoint || !selectionEndPoint || !originalSelectionStartPoint || !originalSelectionEndPoint)
381
- return !1;
382
- const startPointBeforeSelection = isPointBeforeSelection(selectionStartPoint)(snapshot), startPointAfterSelection = isPointAfterSelection(selectionStartPoint)(snapshot), endPointBeforeSelection = isPointBeforeSelection(selectionEndPoint)(snapshot), endPointAfterSelection = isPointAfterSelection(selectionEndPoint)(snapshot), originalStartPointBeforeStartPoint = isPointBeforeSelection(originalSelectionStartPoint)({
383
- ...snapshot,
384
- context: {
385
- ...snapshot.context,
386
- selection: {
387
- anchor: selectionStartPoint,
388
- focus: selectionStartPoint
389
- }
390
- }
391
- }), originalStartPointAfterStartPoint = isPointAfterSelection(originalSelectionStartPoint)({
392
- ...snapshot,
393
- context: {
394
- ...snapshot.context,
395
- selection: {
396
- anchor: selectionStartPoint,
397
- focus: selectionStartPoint
398
- }
399
- }
400
- }), originalEndPointBeforeEndPoint = isPointBeforeSelection(originalSelectionEndPoint)({
401
- ...snapshot,
402
- context: {
403
- ...snapshot.context,
404
- selection: {
405
- anchor: selectionEndPoint,
406
- focus: selectionEndPoint
407
- }
408
- }
409
- }), originalEndPointAfterEndPoint = isPointAfterSelection(originalSelectionEndPoint)({
410
- ...snapshot,
411
- context: {
412
- ...snapshot.context,
413
- selection: {
414
- anchor: selectionEndPoint,
415
- focus: selectionEndPoint
416
- }
417
- }
418
- }), endPointEqualToOriginalStartPoint = isEqualSelectionPoints(selectionEndPoint, originalSelectionStartPoint), startPointEqualToOriginalEndPoint = isEqualSelectionPoints(selectionStartPoint, originalSelectionEndPoint);
419
- return endPointBeforeSelection && !endPointEqualToOriginalStartPoint || startPointAfterSelection && !startPointEqualToOriginalEndPoint ? !1 : !originalStartPointBeforeStartPoint && originalStartPointAfterStartPoint && !originalEndPointBeforeEndPoint && originalEndPointAfterEndPoint ? !endPointEqualToOriginalStartPoint : originalStartPointBeforeStartPoint && !originalStartPointAfterStartPoint && originalEndPointBeforeEndPoint && !originalEndPointAfterEndPoint ? !startPointEqualToOriginalEndPoint : !startPointAfterSelection || !startPointBeforeSelection || !endPointAfterSelection || !endPointBeforeSelection;
420
- };
421
- }
422
- export {
423
- getCaretWordSelection,
424
- getFirstBlock,
425
- getFocusBlock,
426
- getFocusBlockObject,
427
- getFocusChild,
428
- getFocusListBlock,
429
- getFocusSpan,
430
- getFocusTextBlock,
431
- getLastBlock,
432
- getNextBlock,
433
- getNextInlineObject,
434
- getPreviousBlock,
435
- getPreviousInlineObject,
436
- getSelectedBlocks,
437
- getSelectedSlice,
438
- getSelectionEndBlock,
439
- getSelectionEndPoint,
440
- getSelectionStartBlock,
441
- getSelectionStartPoint,
442
- getSelectionText,
443
- isAtTheEndOfBlock,
444
- isAtTheStartOfBlock,
445
- isOverlappingSelection,
446
- isPointAfterSelection,
447
- isPointBeforeSelection,
448
- isSelectionCollapsed,
449
- isSelectionExpanded
450
- };
451
- //# sourceMappingURL=selector.is-overlapping-selection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selector.is-overlapping-selection.js","sources":["../../src/selectors/selector.is-selection-collapsed.ts","../../src/selectors/selectors.ts","../../src/selectors/selector.get-selection-end-point.ts","../../src/selectors/selector.get-selection-start-point.ts","../../src/selectors/selector.get-next-inline-object.ts","../../src/selectors/selector.get-previous-inline-object.ts","../../src/selectors/selector.get-selected-slice.ts","../../src/selectors/selector.get-selection-text.ts","../../src/selectors/selector.is-selection-expanded.ts","../../src/selectors/selector.get-caret-word-selection.ts","../../src/selectors/selector.is-at-the-end-of-block.ts","../../src/selectors/selector.is-at-the-start-of-block.ts","../../src/selectors/selector.is-point-after-selection.ts","../../src/selectors/selector.is-point-before-selection.ts","../../src/selectors/selector.is-overlapping-selection.ts"],"sourcesContent":["import type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const isSelectionCollapsed: EditorSelector<boolean> = (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n return (\n JSON.stringify(snapshot.context.selection.anchor.path) ===\n JSON.stringify(snapshot.context.selection.focus.path) &&\n snapshot.context.selection?.anchor.offset ===\n snapshot.context.selection?.focus.offset\n )\n}\n","import type {\n KeyedSegment,\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isListBlock, isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\n\n/**\n * @public\n */\nexport const getFocusBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusListBlock: EditorSelector<\n {node: PortableTextListBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n return focusTextBlock && isListBlock(snapshot.context, focusTextBlock.node)\n ? {node: focusTextBlock.node, path: focusTextBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusBlock = getFocusBlock(snapshot)\n\n return focusBlock && isTextBlock(snapshot.context, focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusBlockObject: EditorSelector<\n {node: PortableTextObject; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusBlock = getFocusBlock(snapshot)\n\n return focusBlock && !isTextBlock(snapshot.context, focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusBlock = getFocusTextBlock(snapshot)\n\n if (!focusBlock) {\n return undefined\n }\n\n const key = snapshot.context.selection\n ? isKeyedSegment(snapshot.context.selection.focus.path[2])\n ? snapshot.context.selection.focus.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? focusBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...focusBlock.path, 'children', {_key: key}]}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = (snapshot) => {\n const focusChild = getFocusChild(snapshot)\n\n return focusChild && isSpan(snapshot.context, focusChild.node)\n ? {node: focusChild.node, path: focusChild.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFirstBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const node = snapshot.context.value[0]\n\n return node ? {node, path: [{_key: node._key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getLastBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const node = snapshot.context.value[snapshot.context.value.length - 1]\n ? snapshot.context.value[snapshot.context.value.length - 1]\n : undefined\n\n return node ? {node, path: [{_key: node._key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getSelectedBlocks: EditorSelector<\n Array<{node: PortableTextBlock; path: [KeyedSegment]}>\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks: Array<{node: PortableTextBlock; path: [KeyedSegment]}> =\n []\n const startKey = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n const endKey = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n\n if (!startKey || !endKey) {\n return selectedBlocks\n }\n\n for (const block of snapshot.context.value) {\n if (block._key === startKey) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n\n if (startKey === endKey) {\n break\n }\n continue\n }\n\n if (block._key === endKey) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n break\n }\n\n if (selectedBlocks.length > 0) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n }\n }\n\n return selectedBlocks\n}\n\n/**\n * @public\n */\nexport const getSelectionStartBlock: EditorSelector<\n | {\n node: PortableTextBlock\n path: [KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getSelectionEndBlock: EditorSelector<\n | {\n node: PortableTextBlock\n path: [KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = snapshot.context.selection.backward\n ? isKeyedSegment(snapshot.context.selection.anchor.path[0])\n ? snapshot.context.selection.anchor.path[0]._key\n : undefined\n : isKeyedSegment(snapshot.context.selection.focus.path[0])\n ? snapshot.context.selection.focus.path[0]._key\n : undefined\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getPreviousBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n let previousBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionStartBlock = getSelectionStartBlock(snapshot)\n\n if (!selectionStartBlock) {\n return undefined\n }\n\n let foundSelectionStartBlock = false\n\n for (const block of snapshot.context.value) {\n if (block._key === selectionStartBlock.node._key) {\n foundSelectionStartBlock = true\n break\n }\n\n previousBlock = {node: block, path: [{_key: block._key}]}\n }\n\n if (foundSelectionStartBlock && previousBlock) {\n return previousBlock\n }\n\n return undefined\n}\n\n/**\n * @public\n */\nexport const getNextBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n let nextBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionEndBlock = getSelectionEndBlock(snapshot)\n\n if (!selectionEndBlock) {\n return undefined\n }\n\n let foundSelectionEndBlock = false\n\n for (const block of snapshot.context.value) {\n if (block._key === selectionEndBlock.node._key) {\n foundSelectionEndBlock = true\n continue\n }\n\n if (foundSelectionEndBlock) {\n nextBlock = {node: block, path: [{_key: block._key}]}\n break\n }\n }\n\n if (foundSelectionEndBlock && nextBlock) {\n return nextBlock\n }\n\n return undefined\n}\n","import type {EditorSelectionPoint} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectionEndPoint: EditorSelector<\n EditorSelectionPoint | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n return snapshot.context.selection.backward\n ? snapshot.context.selection.anchor\n : snapshot.context.selection.focus\n}\n","import type {EditorSelectionPoint} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectionStartPoint: EditorSelector<\n EditorSelectionPoint | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n return snapshot.context.selection.backward\n ? snapshot.context.selection.focus\n : snapshot.context.selection.anchor\n}\n","import {\n isKeySegment,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan} from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n */\nexport const getNextInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionEndPoint = getSelectionEndPoint(snapshot)\n const selectionEndPointChildKey =\n selectionEndPoint && isKeySegment(selectionEndPoint.path[2])\n ? selectionEndPoint.path[2]._key\n : undefined\n\n if (!focusTextBlock || !selectionEndPointChildKey) {\n return undefined\n }\n\n let endPointChildFound = false\n let inlineObject:\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n\n for (const child of focusTextBlock.node.children) {\n if (child._key === selectionEndPointChildKey) {\n endPointChildFound = true\n continue\n }\n\n if (!isSpan(snapshot.context, child) && endPointChildFound) {\n inlineObject = {\n node: child,\n path: [...focusTextBlock.path, 'children', {_key: child._key}],\n }\n break\n }\n }\n\n return inlineObject\n}\n","import {\n isKeySegment,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan} from '../utils'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n */\nexport const getPreviousInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionStartPointChildKey =\n selectionStartPoint && isKeySegment(selectionStartPoint.path[2])\n ? selectionStartPoint.path[2]._key\n : undefined\n\n if (!focusTextBlock || !selectionStartPointChildKey) {\n return undefined\n }\n\n let inlineObject:\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n\n for (const child of focusTextBlock.node.children) {\n if (child._key === selectionStartPointChildKey) {\n break\n }\n\n if (!isSpan(snapshot.context, child)) {\n inlineObject = {\n node: child,\n path: [...focusTextBlock.path, 'children', {_key: child._key}],\n }\n }\n }\n\n return inlineObject\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {sliceBlocks} from '../utils'\n\n/**\n * @public\n */\nexport const getSelectedSlice: EditorSelector<Array<PortableTextBlock>> = (\n snapshot,\n) => {\n return sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {getSelectedSlice} from './selector.get-selected-slice'\n\n/**\n * @public\n */\nexport const getSelectionText: EditorSelector<string> = (snapshot) => {\n const selectedSlice = getSelectedSlice(snapshot)\n\n return selectedSlice.reduce((text, block) => {\n if (!isTextBlock(snapshot.context, block)) {\n return text\n }\n\n return (\n text +\n block.children.reduce((text, child) => {\n if (isSpan(snapshot.context, child)) {\n return text + child.text\n }\n\n return text\n }, '')\n )\n }, '')\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport const isSelectionExpanded: EditorSelector<boolean> = (snapshot) => {\n return !isSelectionCollapsed(snapshot)\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelection} from '../types/editor'\nimport {\n blockOffsetToSpanSelectionPoint,\n getBlockEndPoint,\n getBlockStartPoint,\n spanSelectionPointToBlockOffset,\n} from '../utils'\nimport {getNextInlineObject} from './selector.get-next-inline-object'\nimport {getPreviousInlineObject} from './selector.get-previous-inline-object'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {getSelectionText} from './selector.get-selection-text'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\nimport {isSelectionExpanded} from './selector.is-selection-expanded'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n * Returns the selection of the of the word the caret is placed in.\n * Note: Only returns a word selection if the current selection is collapsed\n */\nexport const getCaretWordSelection: EditorSelector<EditorSelection> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return null\n }\n\n if (!isSelectionCollapsed(snapshot)) {\n return null\n }\n\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionStartOffset = selectionStartPoint\n ? spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartPoint || !selectionStartOffset) {\n return null\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n const blockStartPoint = getBlockStartPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const textBefore = getSelectionText({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: previousInlineObject\n ? {path: previousInlineObject.path, offset: 0}\n : blockStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n const textDirectlyBefore = textBefore.split(/\\s+/).at(-1)\n\n const nextInlineObject = getNextInlineObject(snapshot)\n const blockEndPoint = getBlockEndPoint({\n context: snapshot.context,\n block: focusTextBlock,\n })\n const textAfter = getSelectionText({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: nextInlineObject\n ? {path: nextInlineObject.path, offset: 0}\n : blockEndPoint,\n },\n },\n })\n const textDirectlyAfter = textAfter.split(/\\s+/).at(0)\n\n if (\n (textDirectlyBefore === undefined || textDirectlyBefore === '') &&\n (textDirectlyAfter === undefined || textDirectlyAfter === '')\n ) {\n return null\n }\n\n const caretWordStartOffset: BlockOffset = textDirectlyBefore\n ? {\n ...selectionStartOffset,\n offset: selectionStartOffset.offset - textDirectlyBefore.length,\n }\n : selectionStartOffset\n const caretWordEndOffset: BlockOffset = textDirectlyAfter\n ? {\n ...selectionStartOffset,\n offset: selectionStartOffset.offset + textDirectlyAfter.length,\n }\n : selectionStartOffset\n\n const caretWordStartSelectionPoint = blockOffsetToSpanSelectionPoint({\n context: snapshot.context,\n blockOffset: caretWordStartOffset,\n direction: 'backward',\n })\n const caretWordEndSelectionPoint = blockOffsetToSpanSelectionPoint({\n context: snapshot.context,\n blockOffset: caretWordEndOffset,\n direction: 'forward',\n })\n\n if (!caretWordStartSelectionPoint || !caretWordEndSelectionPoint) {\n return null\n }\n\n const caretWordSelection = {\n anchor: caretWordStartSelectionPoint,\n focus: caretWordEndSelectionPoint,\n }\n\n return isSelectionExpanded({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: caretWordSelection,\n },\n })\n ? caretWordSelection\n : null\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport function isAtTheEndOfBlock(block: {\n node: PortableTextBlock\n path: [KeyedSegment]\n}): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection || !isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const blockEndPoint = utils.getBlockEndPoint({\n context: snapshot.context,\n block,\n })\n\n return utils.isEqualSelectionPoints(\n snapshot.context.selection.focus,\n blockEndPoint,\n )\n }\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport function isAtTheStartOfBlock(block: {\n node: PortableTextBlock\n path: [KeyedSegment]\n}): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection || !isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint({\n context: snapshot.context,\n block,\n })\n\n return utils.isEqualSelectionPoints(\n snapshot.context.selection.focus,\n blockStartPoint,\n )\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointAfterSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = snapshot.context.selection.backward\n ? reverseSelection(snapshot.context.selection)\n : snapshot.context.selection\n\n const pointBlockKey = isKeyedSegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeyedSegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeyedSegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeyedSegment(selection.focus.path[2])\n ? selection.focus.path[2]._key\n : undefined\n\n if (!pointBlockKey || !endBlockKey) {\n return false\n }\n\n let after = false\n\n for (const block of snapshot.context.value) {\n if (block._key === endBlockKey) {\n if (block._key !== pointBlockKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this block\n\n if (!isTextBlock(snapshot.context, block)) {\n break\n }\n\n if (!pointChildKey || !endChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === endChildKey) {\n if (child._key !== pointChildKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this child\n\n after = point.offset > selection.focus.offset\n break\n }\n\n if (child._key === pointChildKey) {\n break\n }\n }\n }\n\n if (block._key === pointBlockKey) {\n break\n }\n }\n\n return after\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointBeforeSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = snapshot.context.selection.backward\n ? reverseSelection(snapshot.context.selection)\n : snapshot.context.selection\n\n const pointBlockKey = isKeyedSegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeyedSegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeyedSegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeyedSegment(selection.anchor.path[2])\n ? selection.anchor.path[2]._key\n : undefined\n\n if (!pointBlockKey || !startBlockKey) {\n return false\n }\n\n let before = false\n\n for (const block of snapshot.context.value) {\n if (block._key === pointBlockKey) {\n if (block._key !== startBlockKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this block\n\n if (!isTextBlock(snapshot.context, block)) {\n break\n }\n\n if (!pointChildKey || !startChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === pointChildKey) {\n if (child._key !== startChildKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this child\n\n before = point.offset < selection.anchor.offset\n break\n }\n\n if (child._key === startChildKey) {\n break\n }\n }\n }\n\n if (block._key === startBlockKey) {\n break\n }\n }\n\n return before\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport {isEqualSelectionPoints} from '../utils'\nimport type {EditorSelector} from './../editor/editor-selector'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {isPointAfterSelection} from './selector.is-point-after-selection'\nimport {isPointBeforeSelection} from './selector.is-point-before-selection'\n\n/**\n * @public\n */\nexport function isOverlappingSelection(\n selection: EditorSelection,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!selection || !snapshot.context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n const selectionEndPoint = getSelectionEndPoint({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n\n const originalSelectionStartPoint = getSelectionStartPoint(snapshot)\n const originalSelectionEndPoint = getSelectionEndPoint(snapshot)\n\n if (\n !selectionStartPoint ||\n !selectionEndPoint ||\n !originalSelectionStartPoint ||\n !originalSelectionEndPoint\n ) {\n return false\n }\n\n const startPointBeforeSelection =\n isPointBeforeSelection(selectionStartPoint)(snapshot)\n const startPointAfterSelection =\n isPointAfterSelection(selectionStartPoint)(snapshot)\n const endPointBeforeSelection =\n isPointBeforeSelection(selectionEndPoint)(snapshot)\n const endPointAfterSelection =\n isPointAfterSelection(selectionEndPoint)(snapshot)\n\n const originalStartPointBeforeStartPoint = isPointBeforeSelection(\n originalSelectionStartPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n const originalStartPointAfterStartPoint = isPointAfterSelection(\n originalSelectionStartPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionStartPoint,\n focus: selectionStartPoint,\n },\n },\n })\n\n const originalEndPointBeforeEndPoint = isPointBeforeSelection(\n originalSelectionEndPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionEndPoint,\n focus: selectionEndPoint,\n },\n },\n })\n const originalEndPointAfterEndPoint = isPointAfterSelection(\n originalSelectionEndPoint,\n )({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: {\n anchor: selectionEndPoint,\n focus: selectionEndPoint,\n },\n },\n })\n\n const endPointEqualToOriginalStartPoint = isEqualSelectionPoints(\n selectionEndPoint,\n originalSelectionStartPoint,\n )\n const startPointEqualToOriginalEndPoint = isEqualSelectionPoints(\n selectionStartPoint,\n originalSelectionEndPoint,\n )\n\n if (endPointBeforeSelection && !endPointEqualToOriginalStartPoint) {\n return false\n }\n\n if (startPointAfterSelection && !startPointEqualToOriginalEndPoint) {\n return false\n }\n\n if (\n !originalStartPointBeforeStartPoint &&\n originalStartPointAfterStartPoint &&\n !originalEndPointBeforeEndPoint &&\n originalEndPointAfterEndPoint\n ) {\n return !endPointEqualToOriginalStartPoint\n }\n\n if (\n originalStartPointBeforeStartPoint &&\n !originalStartPointAfterStartPoint &&\n originalEndPointBeforeEndPoint &&\n !originalEndPointAfterEndPoint\n ) {\n return !startPointEqualToOriginalEndPoint\n }\n\n if (\n !startPointAfterSelection ||\n !startPointBeforeSelection ||\n !endPointAfterSelection ||\n !endPointBeforeSelection\n ) {\n return true\n }\n\n return false\n }\n}\n"],"names":["isSelectionCollapsed","snapshot","context","selection","JSON","stringify","anchor","path","focus","offset","getFocusBlock","key","isKeyedSegment","_key","undefined","node","value","find","block","getFocusListBlock","focusTextBlock","getFocusTextBlock","isListBlock","focusBlock","isTextBlock","getFocusBlockObject","getFocusChild","children","span","getFocusSpan","focusChild","isSpan","getFirstBlock","getLastBlock","length","getSelectedBlocks","selectedBlocks","startKey","backward","endKey","push","getSelectionStartBlock","getSelectionEndBlock","getPreviousBlock","previousBlock","selectionStartBlock","foundSelectionStartBlock","getNextBlock","nextBlock","selectionEndBlock","foundSelectionEndBlock","getSelectionEndPoint","getSelectionStartPoint","getNextInlineObject","selectionEndPoint","selectionEndPointChildKey","isKeySegment","endPointChildFound","inlineObject","child","getPreviousInlineObject","selectionStartPoint","selectionStartPointChildKey","getSelectedSlice","sliceBlocks","blocks","getSelectionText","reduce","text","isSelectionExpanded","getCaretWordSelection","selectionStartOffset","spanSelectionPointToBlockOffset","selectionPoint","previousInlineObject","blockStartPoint","getBlockStartPoint","textDirectlyBefore","split","at","nextInlineObject","blockEndPoint","getBlockEndPoint","textDirectlyAfter","caretWordStartOffset","caretWordEndOffset","caretWordStartSelectionPoint","blockOffsetToSpanSelectionPoint","blockOffset","direction","caretWordEndSelectionPoint","caretWordSelection","isAtTheEndOfBlock","utils","isAtTheStartOfBlock","isPointAfterSelection","point","reverseSelection","pointBlockKey","pointChildKey","endBlockKey","endChildKey","after","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection","originalSelectionStartPoint","originalSelectionEndPoint","startPointBeforeSelection","startPointAfterSelection","endPointBeforeSelection","endPointAfterSelection","originalStartPointBeforeStartPoint","originalStartPointAfterStartPoint","originalEndPointBeforeEndPoint","originalEndPointAfterEndPoint","endPointEqualToOriginalStartPoint","isEqualSelectionPoints","startPointEqualToOriginalEndPoint"],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- function getSelectionEndPoint(selection) {
2
- return selection ? selection.backward ? selection.anchor : selection.focus : null;
3
- }
4
- function getSelectionStartPoint(selection) {
5
- return selection ? selection.backward ? selection.focus : selection.anchor : null;
6
- }
7
- export {
8
- getSelectionEndPoint,
9
- getSelectionStartPoint
10
- };
11
- //# sourceMappingURL=util.get-selection-start-point.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.get-selection-start-point.js","sources":["../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts"],"sourcesContent":["import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n"],"names":["getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint"],"mappings":"AAKO,SAASA,qBAMdC,WAAoD;AACpD,SAAKA,YAKHA,UAAUC,WAAWD,UAAUE,SAASF,UAAUG,QAJ3C;AAMX;ACdO,SAASC,uBAMdJ,WAAoD;AACpD,SAAKA,YAKHA,UAAUC,WAAWD,UAAUG,QAAQH,UAAUE,SAJ1C;AAMX;"}
@@ -1,77 +0,0 @@
1
- import {isHotkey} from '../internal-utils/is-hotkey'
2
- import * as selectors from '../selectors'
3
- import {raise} from './behavior.types.action'
4
- import {defineBehavior} from './behavior.types.behavior'
5
-
6
- /**
7
- * @beta
8
- */
9
- export type CodeEditorBehaviorsConfig = {
10
- moveBlockUpShortcut: string
11
- moveBlockDownShortcut: string
12
- }
13
-
14
- /**
15
- * @beta
16
- */
17
- export function createCodeEditorBehaviors(config: CodeEditorBehaviorsConfig) {
18
- return [
19
- defineBehavior({
20
- on: 'keyboard.keydown',
21
- guard: ({snapshot, event}) => {
22
- const isMoveUpShortcut = isHotkey(
23
- config.moveBlockUpShortcut,
24
- event.originEvent,
25
- )
26
- const firstBlock = selectors.getFirstBlock(snapshot)
27
- const selectedBlocks = selectors.getSelectedBlocks(snapshot)
28
- const blocksAbove =
29
- firstBlock?.node._key !== selectedBlocks[0]?.node._key
30
-
31
- if (!isMoveUpShortcut || !blocksAbove) {
32
- return false
33
- }
34
-
35
- return {paths: selectedBlocks.map((block) => block.path)}
36
- },
37
- actions: [
38
- (_, {paths}) =>
39
- paths.map((at) =>
40
- raise({
41
- type: 'move.block up',
42
- at,
43
- }),
44
- ),
45
- ],
46
- }),
47
- defineBehavior({
48
- on: 'keyboard.keydown',
49
- guard: ({snapshot, event}) => {
50
- const isMoveDownShortcut = isHotkey(
51
- config.moveBlockDownShortcut,
52
- event.originEvent,
53
- )
54
- const lastBlock = selectors.getLastBlock(snapshot)
55
- const selectedBlocks = selectors.getSelectedBlocks(snapshot)
56
- const blocksBelow =
57
- lastBlock?.node._key !==
58
- selectedBlocks[selectedBlocks.length - 1]?.node._key
59
-
60
- if (!isMoveDownShortcut || !blocksBelow) {
61
- return false
62
- }
63
-
64
- return {paths: selectedBlocks.map((block) => block.path).reverse()}
65
- },
66
- actions: [
67
- (_, {paths}) =>
68
- paths.map((at) =>
69
- raise({
70
- type: 'move.block down',
71
- at,
72
- }),
73
- ),
74
- ],
75
- }),
76
- ]
77
- }