@portabletext/editor 1.27.0 → 1.28.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/README.md +5 -5
- package/lib/_chunks-cjs/plugin.event-listener.cjs +302 -43
- package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +88 -88
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +1 -1
- package/lib/_chunks-es/plugin.event-listener.js +302 -43
- package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js +88 -88
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
- package/lib/index.cjs +22 -21
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +257 -0
- package/lib/index.d.ts +257 -0
- package/lib/index.js +22 -21
- package/lib/index.js.map +1 -1
- package/lib/selectors/index.cjs +15 -3
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +18 -0
- package/lib/selectors/index.d.ts +18 -0
- package/lib/selectors/index.js +17 -4
- package/lib/selectors/index.js.map +1 -1
- package/package.json +3 -3
- package/src/behavior-actions/behavior.action.insert-break.ts +93 -83
- package/src/editor/PortableTextEditor.tsx +288 -1
- package/src/editor/components/DefaultObject.tsx +21 -0
- package/src/editor/components/Element.tsx +5 -5
- package/src/editor/components/Leaf.tsx +1 -6
- package/src/selectors/index.ts +4 -2
- package/src/selectors/selector.get-active-annotations.test.ts +122 -0
- package/src/selectors/selector.get-active-annotations.ts +30 -0
- package/src/selectors/selector.get-selection.ts +8 -0
- package/src/selectors/selector.get-value.ts +11 -0
- package/src/editor/nodes/DefaultAnnotation.tsx +0 -20
- package/src/editor/nodes/DefaultObject.tsx +0 -18
|
@@ -14,7 +14,94 @@ function createGuards({
|
|
|
14
14
|
isTextBlock
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
const
|
|
17
|
+
const getSelectedSpans = ({
|
|
18
|
+
context
|
|
19
|
+
}) => {
|
|
20
|
+
if (!context.selection)
|
|
21
|
+
return [];
|
|
22
|
+
const selectedSpans = [], startPoint = context.selection.backward ? context.selection.focus : context.selection.anchor, endPoint = context.selection.backward ? context.selection.anchor : context.selection.focus, startBlockKey = isKeySegment(startPoint.path[0]) ? startPoint.path[0]._key : void 0, endBlockKey = isKeySegment(endPoint.path[0]) ? endPoint.path[0]._key : void 0;
|
|
23
|
+
if (!startBlockKey || !endBlockKey)
|
|
24
|
+
return selectedSpans;
|
|
25
|
+
const startSpanKey = isKeySegment(startPoint.path[2]) ? startPoint.path[2]._key : void 0, endSpanKey = isKeySegment(endPoint.path[2]) ? endPoint.path[2]._key : void 0;
|
|
26
|
+
for (const block of context.value)
|
|
27
|
+
if (isPortableTextTextBlock(block)) {
|
|
28
|
+
if (block._key === startBlockKey) {
|
|
29
|
+
for (const child of block.children)
|
|
30
|
+
if (isPortableTextSpan(child)) {
|
|
31
|
+
if (startSpanKey && child._key === startSpanKey) {
|
|
32
|
+
if (selectedSpans.push({
|
|
33
|
+
node: child,
|
|
34
|
+
path: [{
|
|
35
|
+
_key: block._key
|
|
36
|
+
}, "children", {
|
|
37
|
+
_key: child._key
|
|
38
|
+
}]
|
|
39
|
+
}), startSpanKey === endSpanKey)
|
|
40
|
+
break;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (endSpanKey && child._key === endSpanKey) {
|
|
44
|
+
selectedSpans.push({
|
|
45
|
+
node: child,
|
|
46
|
+
path: [{
|
|
47
|
+
_key: block._key
|
|
48
|
+
}, "children", {
|
|
49
|
+
_key: child._key
|
|
50
|
+
}]
|
|
51
|
+
});
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
selectedSpans.length > 0 && selectedSpans.push({
|
|
55
|
+
node: child,
|
|
56
|
+
path: [{
|
|
57
|
+
_key: block._key
|
|
58
|
+
}, "children", {
|
|
59
|
+
_key: child._key
|
|
60
|
+
}]
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (startBlockKey === endBlockKey)
|
|
64
|
+
break;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (block._key === endBlockKey) {
|
|
68
|
+
for (const child of block.children)
|
|
69
|
+
if (isPortableTextSpan(child)) {
|
|
70
|
+
if (endSpanKey && child._key === endSpanKey) {
|
|
71
|
+
selectedSpans.push({
|
|
72
|
+
node: child,
|
|
73
|
+
path: [{
|
|
74
|
+
_key: block._key
|
|
75
|
+
}, "children", {
|
|
76
|
+
_key: child._key
|
|
77
|
+
}]
|
|
78
|
+
});
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
selectedSpans.push({
|
|
82
|
+
node: child,
|
|
83
|
+
path: [{
|
|
84
|
+
_key: block._key
|
|
85
|
+
}, "children", {
|
|
86
|
+
_key: child._key
|
|
87
|
+
}]
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
if (selectedSpans.length > 0)
|
|
93
|
+
for (const child of block.children)
|
|
94
|
+
isPortableTextSpan(child) && selectedSpans.push({
|
|
95
|
+
node: child,
|
|
96
|
+
path: [{
|
|
97
|
+
_key: block._key
|
|
98
|
+
}, "children", {
|
|
99
|
+
_key: child._key
|
|
100
|
+
}]
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return selectedSpans;
|
|
104
|
+
}, getFocusBlock = ({
|
|
18
105
|
context
|
|
19
106
|
}) => {
|
|
20
107
|
const key = context.selection && isKeySegment(context.selection.focus.path[0]) ? context.selection.focus.path[0]._key : void 0, node = key ? context.value.find((block) => block._key === key) : void 0;
|
|
@@ -236,93 +323,6 @@ const getFocusBlock = ({
|
|
|
236
323
|
const firstStyle = firstTextBlock.style;
|
|
237
324
|
if (firstStyle && selectedTextBlocks.every((block) => block.style === firstStyle))
|
|
238
325
|
return firstStyle;
|
|
239
|
-
}, getSelectedSpans = ({
|
|
240
|
-
context
|
|
241
|
-
}) => {
|
|
242
|
-
if (!context.selection)
|
|
243
|
-
return [];
|
|
244
|
-
const selectedSpans = [], startPoint = context.selection.backward ? context.selection.focus : context.selection.anchor, endPoint = context.selection.backward ? context.selection.anchor : context.selection.focus, startBlockKey = isKeySegment(startPoint.path[0]) ? startPoint.path[0]._key : void 0, endBlockKey = isKeySegment(endPoint.path[0]) ? endPoint.path[0]._key : void 0;
|
|
245
|
-
if (!startBlockKey || !endBlockKey)
|
|
246
|
-
return selectedSpans;
|
|
247
|
-
const startSpanKey = isKeySegment(startPoint.path[2]) ? startPoint.path[2]._key : void 0, endSpanKey = isKeySegment(endPoint.path[2]) ? endPoint.path[2]._key : void 0;
|
|
248
|
-
for (const block of context.value)
|
|
249
|
-
if (isPortableTextTextBlock(block)) {
|
|
250
|
-
if (block._key === startBlockKey) {
|
|
251
|
-
for (const child of block.children)
|
|
252
|
-
if (isPortableTextSpan(child)) {
|
|
253
|
-
if (startSpanKey && child._key === startSpanKey) {
|
|
254
|
-
if (selectedSpans.push({
|
|
255
|
-
node: child,
|
|
256
|
-
path: [{
|
|
257
|
-
_key: block._key
|
|
258
|
-
}, "children", {
|
|
259
|
-
_key: child._key
|
|
260
|
-
}]
|
|
261
|
-
}), startSpanKey === endSpanKey)
|
|
262
|
-
break;
|
|
263
|
-
continue;
|
|
264
|
-
}
|
|
265
|
-
if (endSpanKey && child._key === endSpanKey) {
|
|
266
|
-
selectedSpans.push({
|
|
267
|
-
node: child,
|
|
268
|
-
path: [{
|
|
269
|
-
_key: block._key
|
|
270
|
-
}, "children", {
|
|
271
|
-
_key: child._key
|
|
272
|
-
}]
|
|
273
|
-
});
|
|
274
|
-
break;
|
|
275
|
-
}
|
|
276
|
-
selectedSpans.length > 0 && selectedSpans.push({
|
|
277
|
-
node: child,
|
|
278
|
-
path: [{
|
|
279
|
-
_key: block._key
|
|
280
|
-
}, "children", {
|
|
281
|
-
_key: child._key
|
|
282
|
-
}]
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
if (startBlockKey === endBlockKey)
|
|
286
|
-
break;
|
|
287
|
-
continue;
|
|
288
|
-
}
|
|
289
|
-
if (block._key === endBlockKey) {
|
|
290
|
-
for (const child of block.children)
|
|
291
|
-
if (isPortableTextSpan(child)) {
|
|
292
|
-
if (endSpanKey && child._key === endSpanKey) {
|
|
293
|
-
selectedSpans.push({
|
|
294
|
-
node: child,
|
|
295
|
-
path: [{
|
|
296
|
-
_key: block._key
|
|
297
|
-
}, "children", {
|
|
298
|
-
_key: child._key
|
|
299
|
-
}]
|
|
300
|
-
});
|
|
301
|
-
break;
|
|
302
|
-
}
|
|
303
|
-
selectedSpans.push({
|
|
304
|
-
node: child,
|
|
305
|
-
path: [{
|
|
306
|
-
_key: block._key
|
|
307
|
-
}, "children", {
|
|
308
|
-
_key: child._key
|
|
309
|
-
}]
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
break;
|
|
313
|
-
}
|
|
314
|
-
if (selectedSpans.length > 0)
|
|
315
|
-
for (const child of block.children)
|
|
316
|
-
isPortableTextSpan(child) && selectedSpans.push({
|
|
317
|
-
node: child,
|
|
318
|
-
path: [{
|
|
319
|
-
_key: block._key
|
|
320
|
-
}, "children", {
|
|
321
|
-
_key: child._key
|
|
322
|
-
}]
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
return selectedSpans;
|
|
326
326
|
};
|
|
327
327
|
function isActiveAnnotation(annotation) {
|
|
328
328
|
return (snapshot) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selector.is-at-the-start-of-block.js","sources":["../../src/behavior-actions/behavior.guards.ts","../../src/selectors/selectors.ts","../../src/selectors/selector.get-active-list-item.ts","../../src/selectors/selector.get-active-style.ts","../../src/selectors/selector.get-selected-spans.ts","../../src/selectors/selector.is-active-annotation.ts","../../src/selectors/selector.is-selection-collapsed.ts","../../src/selectors/selector.is-selection-expanded.ts","../../src/selectors/selector.is-active-decorator.ts","../../src/selectors/selector.is-active-list-item.ts","../../src/selectors/selector.is-active-style.ts","../../src/selectors/selector.is-at-the-end-of-block.ts","../../src/selectors/selector.is-at-the-start-of-block.ts"],"sourcesContent":["import {\n isPortableTextListBlock,\n isPortableTextTextBlock,\n type PortableTextListBlock,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/define-schema'\n\n/**\n * @alpha\n */\nexport type BehaviorGuards = ReturnType<typeof createGuards>\n\nexport function createGuards({schema}: {schema: EditorSchema}) {\n function isListBlock(block: unknown): block is PortableTextListBlock {\n return isPortableTextListBlock(block) && block._type === schema.block.name\n }\n\n function isTextBlock(block: unknown): block is PortableTextTextBlock {\n return isPortableTextTextBlock(block) && block._type === schema.block.name\n }\n\n return {isListBlock, isTextBlock}\n}\n","import {\n isKeySegment,\n isPortableTextSpan,\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextBlock,\n type PortableTextListBlock,\n type PortableTextObject,\n type PortableTextSpan,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport {createGuards} from '../behavior-actions/behavior.guards'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getFocusBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const key = context.selection\n ? isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? 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> = ({context}) => {\n const guards = createGuards(context)\n const focusBlock = getFocusBlock({context})\n\n return focusBlock && guards.isListBlock(focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const focusBlock = getFocusBlock({context})\n\n return focusBlock && isPortableTextTextBlock(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> = ({context}) => {\n const focusBlock = getFocusBlock({context})\n\n return focusBlock && !isPortableTextTextBlock(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> = ({context}) => {\n const focusBlock = getFocusTextBlock({context})\n\n if (!focusBlock) {\n return undefined\n }\n\n const key = context.selection\n ? isKeySegment(context.selection.focus.path[2])\n ? 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> = ({context}) => {\n const focusChild = getFocusChild({context})\n\n return focusChild && isPortableTextSpan(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> = ({context}) => {\n const node = 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> = ({context}) => {\n const node = context.value[context.value.length - 1]\n ? context.value[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> = ({context}) => {\n if (!context.selection) {\n return []\n }\n\n const selectedBlocks: Array<{node: PortableTextBlock; path: [KeyedSegment]}> =\n []\n const startKey = context.selection.backward\n ? isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n : isKeySegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n const endKey = context.selection.backward\n ? isKeySegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n : isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n\n if (!startKey || !endKey) {\n return selectedBlocks\n }\n\n for (const block of 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> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const key = context.selection.backward\n ? isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n : isKeySegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n\n const node = key\n ? 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> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const key = context.selection.backward\n ? isKeySegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n : isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n\n const node = key\n ? 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> = ({context}) => {\n let previousBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionStartBlock = getSelectionStartBlock({context})\n\n if (!selectionStartBlock) {\n return undefined\n }\n\n let foundSelectionStartBlock = false\n\n for (const block of 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> = ({context}) => {\n let nextBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionEndBlock = getSelectionEndBlock({context})\n\n if (!selectionEndBlock) {\n return undefined\n }\n\n let foundSelectionEndBlock = false\n\n for (const block of 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 {PortableTextListBlock} from '@sanity/types'\nimport {createGuards} from '../behavior-actions/behavior.guards'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveListItem: EditorSelector<\n PortableTextListBlock['listItem'] | undefined\n> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const guards = createGuards(context)\n const selectedBlocks = getSelectedBlocks({context}).map((block) => block.node)\n const selectedTextBlocks = selectedBlocks.filter(guards.isTextBlock)\n\n const firstTextBlock = selectedTextBlocks.at(0)\n\n if (!firstTextBlock) {\n return undefined\n }\n\n const firstListItem = firstTextBlock.listItem\n\n if (!firstListItem) {\n return undefined\n }\n\n if (selectedTextBlocks.every((block) => block.listItem === firstListItem)) {\n return firstListItem\n }\n\n return undefined\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\nimport {createGuards} from '../behavior-actions/behavior.guards'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveStyle: EditorSelector<PortableTextTextBlock['style']> = ({\n context,\n}) => {\n if (!context.selection) {\n return undefined\n }\n\n const guards = createGuards(context)\n const selectedBlocks = getSelectedBlocks({context}).map((block) => block.node)\n const selectedTextBlocks = selectedBlocks.filter(guards.isTextBlock)\n\n const firstTextBlock = selectedTextBlocks.at(0)\n\n if (!firstTextBlock) {\n return undefined\n }\n\n const firstStyle = firstTextBlock.style\n\n if (!firstStyle) {\n return undefined\n }\n\n if (selectedTextBlocks.every((block) => block.style === firstStyle)) {\n return firstStyle\n }\n\n return undefined\n}\n","import {\n isKeySegment,\n isPortableTextSpan,\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextSpan,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectedSpans: EditorSelector<\n Array<{\n node: PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }>\n> = ({context}) => {\n if (!context.selection) {\n return []\n }\n\n const selectedSpans: Array<{\n node: PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }> = []\n\n const startPoint = context.selection.backward\n ? context.selection.focus\n : context.selection.anchor\n const endPoint = context.selection.backward\n ? context.selection.anchor\n : context.selection.focus\n\n const startBlockKey = isKeySegment(startPoint.path[0])\n ? startPoint.path[0]._key\n : undefined\n const endBlockKey = isKeySegment(endPoint.path[0])\n ? endPoint.path[0]._key\n : undefined\n\n if (!startBlockKey || !endBlockKey) {\n return selectedSpans\n }\n\n const startSpanKey = isKeySegment(startPoint.path[2])\n ? startPoint.path[2]._key\n : undefined\n const endSpanKey = isKeySegment(endPoint.path[2])\n ? endPoint.path[2]._key\n : undefined\n\n for (const block of context.value) {\n if (!isPortableTextTextBlock(block)) {\n continue\n }\n\n if (block._key === startBlockKey) {\n for (const child of block.children) {\n if (!isPortableTextSpan(child)) {\n continue\n }\n\n if (startSpanKey && child._key === startSpanKey) {\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n\n if (startSpanKey === endSpanKey) {\n break\n }\n\n continue\n }\n\n if (endSpanKey && child._key === endSpanKey) {\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n break\n }\n\n if (selectedSpans.length > 0) {\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n if (block._key === endBlockKey) {\n for (const child of block.children) {\n if (!isPortableTextSpan(child)) {\n continue\n }\n\n if (endSpanKey && child._key === endSpanKey) {\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n break\n }\n\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n }\n\n break\n }\n\n if (selectedSpans.length > 0) {\n for (const child of block.children) {\n if (!isPortableTextSpan(child)) {\n continue\n }\n\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n }\n }\n }\n\n return selectedSpans\n}\n","import {isPortableTextTextBlock} 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 function isActiveAnnotation(\n annotation: string,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedSpans = getSelectedSpans(snapshot)\n\n if (selectedSpans.length === 0) {\n return false\n }\n\n if (\n selectedSpans.some(\n (span) => !span.node.marks || span.node.marks?.length === 0,\n )\n ) {\n return false\n }\n\n const selectionMarkDefs = selectedBlocks.flatMap((block) =>\n isPortableTextTextBlock(block.node) ? (block.node.markDefs ?? []) : [],\n )\n\n return selectedSpans.every((span) => {\n const spanMarkDefs =\n span.node.marks?.flatMap((mark) => {\n const markDef = selectionMarkDefs.find(\n (markDef) => markDef._key === mark,\n )\n\n return markDef ? [markDef._type] : []\n }) ?? []\n\n return spanMarkDefs.includes(annotation)\n })\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const isSelectionCollapsed: EditorSelector<boolean> = ({context}) => {\n if (!context.selection) {\n return false\n }\n\n return (\n JSON.stringify(context.selection.anchor.path) ===\n JSON.stringify(context.selection.focus.path) &&\n context.selection?.anchor.offset === context.selection?.focus.offset\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> = ({context}) => {\n return !isSelectionCollapsed({context})\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedSpans} from './selector.get-selected-spans'\nimport {isSelectionExpanded} from './selector.is-selection-expanded'\n\n/**\n * @public\n */\nexport function isActiveDecorator(decorator: string): EditorSelector<boolean> {\n return (snapshot) => {\n if (isSelectionExpanded(snapshot)) {\n const selectedSpans = getSelectedSpans(snapshot)\n\n return (\n selectedSpans.length > 0 &&\n selectedSpans.every((span) => span.node.marks?.includes(decorator))\n )\n }\n\n return snapshot.context.activeDecorators.includes(decorator)\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {getActiveListItem} from './selector.get-active-list-item'\n\n/**\n * @public\n */\nexport function isActiveListItem(listItem: string): EditorSelector<boolean> {\n return (snapshot) => {\n const activeListItem = getActiveListItem(snapshot)\n\n return activeListItem === listItem\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {getActiveStyle} from './selector.get-active-style'\n\n/**\n * @public\n */\nexport function isActiveStyle(style: string): EditorSelector<boolean> {\n return (snapshot) => {\n const activeStyle = getActiveStyle(snapshot)\n\n return activeStyle === style\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 isAtTheEndOfBlock(block: {\n node: PortableTextBlock\n path: [KeyedSegment]\n}): EditorSelector<boolean> {\n return ({context}) => {\n if (!context.selection || !isSelectionCollapsed({context})) {\n return false\n }\n\n const blockEndPoint = utils.getBlockEndPoint(block)\n\n return utils.isEqualSelectionPoints(context.selection.focus, blockEndPoint)\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 ({context}) => {\n if (!context.selection || !isSelectionCollapsed({context})) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint(block)\n\n return utils.isEqualSelectionPoints(\n context.selection.focus,\n blockStartPoint,\n )\n }\n}\n"],"names":["createGuards","schema","isListBlock","block","isPortableTextListBlock","_type","name","isTextBlock","isPortableTextTextBlock","getFocusBlock","context","key","selection","isKeySegment","focus","path","_key","undefined","node","value","find","getFocusListBlock","guards","focusBlock","getFocusTextBlock","getFocusBlockObject","getFocusChild","children","span","getFocusSpan","focusChild","isPortableTextSpan","getFirstBlock","getLastBlock","length","getSelectedBlocks","selectedBlocks","startKey","backward","anchor","endKey","push","getSelectionStartBlock","getSelectionEndBlock","getPreviousBlock","previousBlock","selectionStartBlock","foundSelectionStartBlock","getNextBlock","nextBlock","selectionEndBlock","foundSelectionEndBlock","getActiveListItem","selectedTextBlocks","map","filter","firstTextBlock","at","firstListItem","listItem","every","getActiveStyle","firstStyle","style","getSelectedSpans","selectedSpans","startPoint","endPoint","startBlockKey","endBlockKey","startSpanKey","endSpanKey","child","isActiveAnnotation","annotation","snapshot","some","marks","selectionMarkDefs","flatMap","markDefs","mark","markDef","includes","isSelectionCollapsed","JSON","stringify","offset","isSelectionExpanded","isActiveDecorator","decorator","activeDecorators","isActiveListItem","isActiveStyle","isAtTheEndOfBlock","blockEndPoint","utils","isAtTheStartOfBlock","blockStartPoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selector.is-at-the-start-of-block.js","sources":["../../src/behavior-actions/behavior.guards.ts","../../src/selectors/selector.get-selected-spans.ts","../../src/selectors/selectors.ts","../../src/selectors/selector.get-active-list-item.ts","../../src/selectors/selector.get-active-style.ts","../../src/selectors/selector.is-active-annotation.ts","../../src/selectors/selector.is-selection-collapsed.ts","../../src/selectors/selector.is-selection-expanded.ts","../../src/selectors/selector.is-active-decorator.ts","../../src/selectors/selector.is-active-list-item.ts","../../src/selectors/selector.is-active-style.ts","../../src/selectors/selector.is-at-the-end-of-block.ts","../../src/selectors/selector.is-at-the-start-of-block.ts"],"sourcesContent":["import {\n isPortableTextListBlock,\n isPortableTextTextBlock,\n type PortableTextListBlock,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/define-schema'\n\n/**\n * @alpha\n */\nexport type BehaviorGuards = ReturnType<typeof createGuards>\n\nexport function createGuards({schema}: {schema: EditorSchema}) {\n function isListBlock(block: unknown): block is PortableTextListBlock {\n return isPortableTextListBlock(block) && block._type === schema.block.name\n }\n\n function isTextBlock(block: unknown): block is PortableTextTextBlock {\n return isPortableTextTextBlock(block) && block._type === schema.block.name\n }\n\n return {isListBlock, isTextBlock}\n}\n","import {\n isKeySegment,\n isPortableTextSpan,\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextSpan,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectedSpans: EditorSelector<\n Array<{\n node: PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }>\n> = ({context}) => {\n if (!context.selection) {\n return []\n }\n\n const selectedSpans: Array<{\n node: PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }> = []\n\n const startPoint = context.selection.backward\n ? context.selection.focus\n : context.selection.anchor\n const endPoint = context.selection.backward\n ? context.selection.anchor\n : context.selection.focus\n\n const startBlockKey = isKeySegment(startPoint.path[0])\n ? startPoint.path[0]._key\n : undefined\n const endBlockKey = isKeySegment(endPoint.path[0])\n ? endPoint.path[0]._key\n : undefined\n\n if (!startBlockKey || !endBlockKey) {\n return selectedSpans\n }\n\n const startSpanKey = isKeySegment(startPoint.path[2])\n ? startPoint.path[2]._key\n : undefined\n const endSpanKey = isKeySegment(endPoint.path[2])\n ? endPoint.path[2]._key\n : undefined\n\n for (const block of context.value) {\n if (!isPortableTextTextBlock(block)) {\n continue\n }\n\n if (block._key === startBlockKey) {\n for (const child of block.children) {\n if (!isPortableTextSpan(child)) {\n continue\n }\n\n if (startSpanKey && child._key === startSpanKey) {\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n\n if (startSpanKey === endSpanKey) {\n break\n }\n\n continue\n }\n\n if (endSpanKey && child._key === endSpanKey) {\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n break\n }\n\n if (selectedSpans.length > 0) {\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n if (block._key === endBlockKey) {\n for (const child of block.children) {\n if (!isPortableTextSpan(child)) {\n continue\n }\n\n if (endSpanKey && child._key === endSpanKey) {\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n break\n }\n\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n }\n\n break\n }\n\n if (selectedSpans.length > 0) {\n for (const child of block.children) {\n if (!isPortableTextSpan(child)) {\n continue\n }\n\n selectedSpans.push({\n node: child,\n path: [{_key: block._key}, 'children', {_key: child._key}],\n })\n }\n }\n }\n\n return selectedSpans\n}\n","import {\n isKeySegment,\n isPortableTextSpan,\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextBlock,\n type PortableTextListBlock,\n type PortableTextObject,\n type PortableTextSpan,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport {createGuards} from '../behavior-actions/behavior.guards'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getFocusBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const key = context.selection\n ? isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? 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> = ({context}) => {\n const guards = createGuards(context)\n const focusBlock = getFocusBlock({context})\n\n return focusBlock && guards.isListBlock(focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const focusBlock = getFocusBlock({context})\n\n return focusBlock && isPortableTextTextBlock(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> = ({context}) => {\n const focusBlock = getFocusBlock({context})\n\n return focusBlock && !isPortableTextTextBlock(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> = ({context}) => {\n const focusBlock = getFocusTextBlock({context})\n\n if (!focusBlock) {\n return undefined\n }\n\n const key = context.selection\n ? isKeySegment(context.selection.focus.path[2])\n ? 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> = ({context}) => {\n const focusChild = getFocusChild({context})\n\n return focusChild && isPortableTextSpan(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> = ({context}) => {\n const node = 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> = ({context}) => {\n const node = context.value[context.value.length - 1]\n ? context.value[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> = ({context}) => {\n if (!context.selection) {\n return []\n }\n\n const selectedBlocks: Array<{node: PortableTextBlock; path: [KeyedSegment]}> =\n []\n const startKey = context.selection.backward\n ? isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n : isKeySegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n const endKey = context.selection.backward\n ? isKeySegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n : isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n\n if (!startKey || !endKey) {\n return selectedBlocks\n }\n\n for (const block of 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> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const key = context.selection.backward\n ? isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n : isKeySegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n\n const node = key\n ? 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> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const key = context.selection.backward\n ? isKeySegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n : isKeySegment(context.selection.focus.path[0])\n ? context.selection.focus.path[0]._key\n : undefined\n\n const node = key\n ? 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> = ({context}) => {\n let previousBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionStartBlock = getSelectionStartBlock({context})\n\n if (!selectionStartBlock) {\n return undefined\n }\n\n let foundSelectionStartBlock = false\n\n for (const block of 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> = ({context}) => {\n let nextBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionEndBlock = getSelectionEndBlock({context})\n\n if (!selectionEndBlock) {\n return undefined\n }\n\n let foundSelectionEndBlock = false\n\n for (const block of 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 {PortableTextListBlock} from '@sanity/types'\nimport {createGuards} from '../behavior-actions/behavior.guards'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveListItem: EditorSelector<\n PortableTextListBlock['listItem'] | undefined\n> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const guards = createGuards(context)\n const selectedBlocks = getSelectedBlocks({context}).map((block) => block.node)\n const selectedTextBlocks = selectedBlocks.filter(guards.isTextBlock)\n\n const firstTextBlock = selectedTextBlocks.at(0)\n\n if (!firstTextBlock) {\n return undefined\n }\n\n const firstListItem = firstTextBlock.listItem\n\n if (!firstListItem) {\n return undefined\n }\n\n if (selectedTextBlocks.every((block) => block.listItem === firstListItem)) {\n return firstListItem\n }\n\n return undefined\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\nimport {createGuards} from '../behavior-actions/behavior.guards'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveStyle: EditorSelector<PortableTextTextBlock['style']> = ({\n context,\n}) => {\n if (!context.selection) {\n return undefined\n }\n\n const guards = createGuards(context)\n const selectedBlocks = getSelectedBlocks({context}).map((block) => block.node)\n const selectedTextBlocks = selectedBlocks.filter(guards.isTextBlock)\n\n const firstTextBlock = selectedTextBlocks.at(0)\n\n if (!firstTextBlock) {\n return undefined\n }\n\n const firstStyle = firstTextBlock.style\n\n if (!firstStyle) {\n return undefined\n }\n\n if (selectedTextBlocks.every((block) => block.style === firstStyle)) {\n return firstStyle\n }\n\n return undefined\n}\n","import {isPortableTextTextBlock} 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 function isActiveAnnotation(\n annotation: string,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedSpans = getSelectedSpans(snapshot)\n\n if (selectedSpans.length === 0) {\n return false\n }\n\n if (\n selectedSpans.some(\n (span) => !span.node.marks || span.node.marks?.length === 0,\n )\n ) {\n return false\n }\n\n const selectionMarkDefs = selectedBlocks.flatMap((block) =>\n isPortableTextTextBlock(block.node) ? (block.node.markDefs ?? []) : [],\n )\n\n return selectedSpans.every((span) => {\n const spanMarkDefs =\n span.node.marks?.flatMap((mark) => {\n const markDef = selectionMarkDefs.find(\n (markDef) => markDef._key === mark,\n )\n\n return markDef ? [markDef._type] : []\n }) ?? []\n\n return spanMarkDefs.includes(annotation)\n })\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const isSelectionCollapsed: EditorSelector<boolean> = ({context}) => {\n if (!context.selection) {\n return false\n }\n\n return (\n JSON.stringify(context.selection.anchor.path) ===\n JSON.stringify(context.selection.focus.path) &&\n context.selection?.anchor.offset === context.selection?.focus.offset\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> = ({context}) => {\n return !isSelectionCollapsed({context})\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedSpans} from './selector.get-selected-spans'\nimport {isSelectionExpanded} from './selector.is-selection-expanded'\n\n/**\n * @public\n */\nexport function isActiveDecorator(decorator: string): EditorSelector<boolean> {\n return (snapshot) => {\n if (isSelectionExpanded(snapshot)) {\n const selectedSpans = getSelectedSpans(snapshot)\n\n return (\n selectedSpans.length > 0 &&\n selectedSpans.every((span) => span.node.marks?.includes(decorator))\n )\n }\n\n return snapshot.context.activeDecorators.includes(decorator)\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {getActiveListItem} from './selector.get-active-list-item'\n\n/**\n * @public\n */\nexport function isActiveListItem(listItem: string): EditorSelector<boolean> {\n return (snapshot) => {\n const activeListItem = getActiveListItem(snapshot)\n\n return activeListItem === listItem\n }\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {getActiveStyle} from './selector.get-active-style'\n\n/**\n * @public\n */\nexport function isActiveStyle(style: string): EditorSelector<boolean> {\n return (snapshot) => {\n const activeStyle = getActiveStyle(snapshot)\n\n return activeStyle === style\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 isAtTheEndOfBlock(block: {\n node: PortableTextBlock\n path: [KeyedSegment]\n}): EditorSelector<boolean> {\n return ({context}) => {\n if (!context.selection || !isSelectionCollapsed({context})) {\n return false\n }\n\n const blockEndPoint = utils.getBlockEndPoint(block)\n\n return utils.isEqualSelectionPoints(context.selection.focus, blockEndPoint)\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 ({context}) => {\n if (!context.selection || !isSelectionCollapsed({context})) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint(block)\n\n return utils.isEqualSelectionPoints(\n context.selection.focus,\n blockStartPoint,\n )\n }\n}\n"],"names":["createGuards","schema","isListBlock","block","isPortableTextListBlock","_type","name","isTextBlock","isPortableTextTextBlock","getSelectedSpans","context","selection","selectedSpans","startPoint","backward","focus","anchor","endPoint","startBlockKey","isKeySegment","path","_key","undefined","endBlockKey","startSpanKey","endSpanKey","value","child","children","isPortableTextSpan","push","node","length","getFocusBlock","key","find","getFocusListBlock","guards","focusBlock","getFocusTextBlock","getFocusBlockObject","getFocusChild","span","getFocusSpan","focusChild","getFirstBlock","getLastBlock","getSelectedBlocks","selectedBlocks","startKey","endKey","getSelectionStartBlock","getSelectionEndBlock","getPreviousBlock","previousBlock","selectionStartBlock","foundSelectionStartBlock","getNextBlock","nextBlock","selectionEndBlock","foundSelectionEndBlock","getActiveListItem","selectedTextBlocks","map","filter","firstTextBlock","at","firstListItem","listItem","every","getActiveStyle","firstStyle","style","isActiveAnnotation","annotation","snapshot","some","marks","selectionMarkDefs","flatMap","markDefs","mark","markDef","includes","isSelectionCollapsed","JSON","stringify","offset","isSelectionExpanded","isActiveDecorator","decorator","activeDecorators","isActiveListItem","isActiveStyle","isAtTheEndOfBlock","blockEndPoint","utils","isAtTheStartOfBlock","blockStartPoint"],"mappings":"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"}
|
package/lib/index.cjs
CHANGED
|
@@ -51,7 +51,7 @@ function normalizeSelection(selection, value) {
|
|
|
51
51
|
backward: selection.backward
|
|
52
52
|
} : null;
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
function DefaultBlockObject(props) {
|
|
55
55
|
const $ = reactCompilerRuntime.c(4);
|
|
56
56
|
let t0;
|
|
57
57
|
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {
|
|
@@ -65,8 +65,22 @@ const DefaultObject = (props) => {
|
|
|
65
65
|
props.value._key,
|
|
66
66
|
"]"
|
|
67
67
|
] }), $[1] = props.value._key, $[2] = props.value._type, $[3] = t1) : t1 = $[3], t1;
|
|
68
|
-
}
|
|
69
|
-
|
|
68
|
+
}
|
|
69
|
+
function DefaultInlineObject(props) {
|
|
70
|
+
const $ = reactCompilerRuntime.c(4);
|
|
71
|
+
let t0;
|
|
72
|
+
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {
|
|
73
|
+
userSelect: "none"
|
|
74
|
+
}, $[0] = t0) : t0 = $[0];
|
|
75
|
+
let t1;
|
|
76
|
+
return $[1] !== props.value._key || $[2] !== props.value._type ? (t1 = /* @__PURE__ */ jsxRuntime.jsxs("span", { style: t0, children: [
|
|
77
|
+
"[",
|
|
78
|
+
props.value._type,
|
|
79
|
+
": ",
|
|
80
|
+
props.value._key,
|
|
81
|
+
"]"
|
|
82
|
+
] }), $[1] = props.value._key, $[2] = props.value._type, $[3] = t1) : t1 = $[3], t1;
|
|
83
|
+
}
|
|
70
84
|
const debug$3 = plugin_eventListener.debugWithName("components:DraggableBlock"), DraggableBlock = (t0) => {
|
|
71
85
|
const $ = reactCompilerRuntime.c(51), {
|
|
72
86
|
children,
|
|
@@ -239,7 +253,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
239
253
|
renderChild && renderChild({
|
|
240
254
|
annotations: EMPTY_ANNOTATIONS,
|
|
241
255
|
// These inline objects currently doesn't support annotations. This is a limitation of the current PT spec/model.
|
|
242
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
256
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(DefaultInlineObject, { value }),
|
|
243
257
|
editorElementRef: inlineBlockObjectRef,
|
|
244
258
|
focused,
|
|
245
259
|
path: elmPath,
|
|
@@ -248,7 +262,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
248
262
|
type: schemaType,
|
|
249
263
|
value
|
|
250
264
|
}),
|
|
251
|
-
!renderChild && /* @__PURE__ */ jsxRuntime.jsx(
|
|
265
|
+
!renderChild && /* @__PURE__ */ jsxRuntime.jsx(DefaultInlineObject, { value })
|
|
252
266
|
] }, element._key)
|
|
253
267
|
] });
|
|
254
268
|
}
|
|
@@ -311,7 +325,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
311
325
|
let renderedBlockFromProps;
|
|
312
326
|
if (renderBlock) {
|
|
313
327
|
const _props = Object.defineProperty({
|
|
314
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
328
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(DefaultBlockObject, { value }),
|
|
315
329
|
editorElementRef: blockRef,
|
|
316
330
|
focused,
|
|
317
331
|
path: blockPath,
|
|
@@ -328,23 +342,10 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
328
342
|
}
|
|
329
343
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...attributes, className, children: [
|
|
330
344
|
children,
|
|
331
|
-
/* @__PURE__ */ jsxRuntime.jsx(DraggableBlock, { element, readOnly, blockRef, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: blockRef, contentEditable: !1, children: renderedBlockFromProps || /* @__PURE__ */ jsxRuntime.jsx(
|
|
345
|
+
/* @__PURE__ */ jsxRuntime.jsx(DraggableBlock, { element, readOnly, blockRef, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: blockRef, contentEditable: !1, children: renderedBlockFromProps || /* @__PURE__ */ jsxRuntime.jsx(DefaultBlockObject, { value }) }) })
|
|
332
346
|
] }, element._key);
|
|
333
347
|
};
|
|
334
348
|
Element.displayName = "Element";
|
|
335
|
-
function DefaultAnnotation(props) {
|
|
336
|
-
const $ = reactCompilerRuntime.c(6);
|
|
337
|
-
let t0;
|
|
338
|
-
$[0] !== props.annotation ? (t0 = () => alert(JSON.stringify(props.annotation)), $[0] = props.annotation, $[1] = t0) : t0 = $[1];
|
|
339
|
-
const handleClick = t0;
|
|
340
|
-
let t1;
|
|
341
|
-
$[2] === Symbol.for("react.memo_cache_sentinel") ? (t1 = {
|
|
342
|
-
color: "blue"
|
|
343
|
-
}, $[2] = t1) : t1 = $[2];
|
|
344
|
-
let t2;
|
|
345
|
-
return $[3] !== handleClick || $[4] !== props.children ? (t2 = /* @__PURE__ */ jsxRuntime.jsx("span", { style: t1, onClick: handleClick, children: props.children }), $[3] = handleClick, $[4] = props.children, $[5] = t2) : t2 = $[5], t2;
|
|
346
|
-
}
|
|
347
|
-
DefaultAnnotation.displayName = "DefaultAnnotation";
|
|
348
349
|
const debug$2 = plugin_eventListener.debugWithName("components:Leaf"), EMPTY_MARKS = [], Leaf = (props) => {
|
|
349
350
|
const {
|
|
350
351
|
editorActor,
|
|
@@ -442,7 +443,7 @@ const debug$2 = plugin_eventListener.debugWithName("components:Leaf"), EMPTY_MAR
|
|
|
442
443
|
});
|
|
443
444
|
returnedChildren = /* @__PURE__ */ jsxRuntime.jsx("span", { ref: spanRef, children: renderAnnotation(_props_0) });
|
|
444
445
|
} else
|
|
445
|
-
returnedChildren = /* @__PURE__ */ jsxRuntime.jsx(
|
|
446
|
+
returnedChildren = /* @__PURE__ */ jsxRuntime.jsx("span", { ref: spanRef, children: returnedChildren });
|
|
446
447
|
}), block && renderChild)) {
|
|
447
448
|
const child = block.children.find((_child) => _child._key === leaf._key);
|
|
448
449
|
if (child) {
|