@portabletext/editor 2.17.1 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/lib/_chunks-dts/{behavior.types.action.d.cts → index.d.ts} +9 -9
  2. package/lib/_chunks-es/util.get-text-block-text.js +1 -2
  3. package/lib/_chunks-es/util.get-text-block-text.js.map +1 -1
  4. package/lib/behaviors/index.d.ts +1 -1
  5. package/lib/index.d.ts +1 -1
  6. package/lib/plugins/index.d.ts +2 -2
  7. package/lib/selectors/index.d.ts +2 -2
  8. package/lib/utils/index.d.ts +3 -3
  9. package/package.json +18 -30
  10. package/src/test/vitest/step-definitions.tsx +2 -0
  11. package/src/test/vitest/test-editor.tsx +18 -4
  12. package/src/utils/key-generator.ts +1 -3
  13. package/lib/_chunks-cjs/selector.get-selection-text.cjs +0 -89
  14. package/lib/_chunks-cjs/selector.get-selection-text.cjs.map +0 -1
  15. package/lib/_chunks-cjs/selector.get-text-before.cjs +0 -34
  16. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +0 -1
  17. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +0 -875
  18. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +0 -1
  19. package/lib/_chunks-cjs/use-editor.cjs +0 -28
  20. package/lib/_chunks-cjs/use-editor.cjs.map +0 -1
  21. package/lib/_chunks-cjs/util.child-selection-point-to-block-offset.cjs +0 -79
  22. package/lib/_chunks-cjs/util.child-selection-point-to-block-offset.cjs.map +0 -1
  23. package/lib/_chunks-cjs/util.get-text-block-text.cjs +0 -477
  24. package/lib/_chunks-cjs/util.get-text-block-text.cjs.map +0 -1
  25. package/lib/_chunks-cjs/util.is-empty-text-block.cjs +0 -38
  26. package/lib/_chunks-cjs/util.is-empty-text-block.cjs.map +0 -1
  27. package/lib/_chunks-cjs/util.merge-text-blocks.cjs +0 -23
  28. package/lib/_chunks-cjs/util.merge-text-blocks.cjs.map +0 -1
  29. package/lib/_chunks-cjs/util.slice-text-block.cjs +0 -63
  30. package/lib/_chunks-cjs/util.slice-text-block.cjs.map +0 -1
  31. package/lib/_chunks-dts/behavior.types.action.d.ts +0 -3650
  32. package/lib/behaviors/index.cjs +0 -35
  33. package/lib/behaviors/index.cjs.map +0 -1
  34. package/lib/behaviors/index.d.cts +0 -2
  35. package/lib/index.cjs +0 -12952
  36. package/lib/index.cjs.map +0 -1
  37. package/lib/index.d.cts +0 -2
  38. package/lib/plugins/index.cjs +0 -826
  39. package/lib/plugins/index.cjs.map +0 -1
  40. package/lib/plugins/index.d.cts +0 -196
  41. package/lib/selectors/index.cjs +0 -243
  42. package/lib/selectors/index.cjs.map +0 -1
  43. package/lib/selectors/index.d.cts +0 -357
  44. package/lib/utils/index.cjs +0 -97
  45. package/lib/utils/index.cjs.map +0 -1
  46. package/lib/utils/index.d.cts +0 -186
@@ -1,477 +0,0 @@
1
- "use strict";
2
- var schema = require("@portabletext/schema"), getRandomValues = require("get-random-values-esm");
3
- function _interopDefaultCompat(e) {
4
- return e && typeof e == "object" && "default" in e ? e : { default: e };
5
- }
6
- var getRandomValues__default = /* @__PURE__ */ _interopDefaultCompat(getRandomValues);
7
- function getBlockStartPoint({
8
- context,
9
- block
10
- }) {
11
- return schema.isTextBlock(context, block.node) ? {
12
- path: [...block.path, "children", {
13
- _key: block.node.children[0]._key
14
- }],
15
- offset: 0
16
- } : {
17
- path: block.path,
18
- offset: 0
19
- };
20
- }
21
- function isKeyedSegment(segment) {
22
- return typeof segment == "object" && segment !== null && "_key" in segment;
23
- }
24
- function getBlockKeyFromSelectionPoint(point) {
25
- const blockPathSegment = point.path.at(0);
26
- if (isKeyedSegment(blockPathSegment))
27
- return blockPathSegment._key;
28
- }
29
- function getChildKeyFromSelectionPoint(point) {
30
- const childPathSegment = point.path.at(2);
31
- if (isKeyedSegment(childPathSegment))
32
- return childPathSegment._key;
33
- }
34
- function blockOffsetToSpanSelectionPoint({
35
- context,
36
- blockOffset,
37
- direction
38
- }) {
39
- let offsetLeft = blockOffset.offset, selectionPoint, skippedInlineObject = !1;
40
- for (const block of context.value)
41
- if (block._key === blockOffset.path[0]._key && schema.isTextBlock(context, block))
42
- for (const child of block.children) {
43
- if (direction === "forward") {
44
- if (!schema.isSpan(context, child))
45
- continue;
46
- if (offsetLeft <= child.text.length) {
47
- selectionPoint = {
48
- path: [...blockOffset.path, "children", {
49
- _key: child._key
50
- }],
51
- offset: offsetLeft
52
- };
53
- break;
54
- }
55
- offsetLeft -= child.text.length;
56
- continue;
57
- }
58
- if (!schema.isSpan(context, child)) {
59
- skippedInlineObject = !0;
60
- continue;
61
- }
62
- if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {
63
- skippedInlineObject && (selectionPoint = {
64
- path: [...blockOffset.path, "children", {
65
- _key: child._key
66
- }],
67
- offset: 0
68
- });
69
- break;
70
- }
71
- if (offsetLeft > child.text.length) {
72
- offsetLeft -= child.text.length;
73
- continue;
74
- }
75
- if (offsetLeft <= child.text.length && (selectionPoint = {
76
- path: [...blockOffset.path, "children", {
77
- _key: child._key
78
- }],
79
- offset: offsetLeft
80
- }, offsetLeft -= child.text.length, offsetLeft !== 0))
81
- break;
82
- }
83
- return selectionPoint;
84
- }
85
- function spanSelectionPointToBlockOffset({
86
- context,
87
- selectionPoint
88
- }) {
89
- let offset = 0;
90
- const blockKey = getBlockKeyFromSelectionPoint(selectionPoint), spanKey = getChildKeyFromSelectionPoint(selectionPoint);
91
- if (!(!blockKey || !spanKey)) {
92
- for (const block of context.value)
93
- if (block._key === blockKey && schema.isTextBlock(context, block)) {
94
- for (const child of block.children)
95
- if (schema.isSpan(context, child)) {
96
- if (child._key === spanKey)
97
- return {
98
- path: [{
99
- _key: block._key
100
- }],
101
- offset: offset + selectionPoint.offset
102
- };
103
- offset += child.text.length;
104
- }
105
- }
106
- }
107
- }
108
- function isTypedObject(object) {
109
- return isRecord(object) && typeof object._type == "string";
110
- }
111
- function isRecord(value) {
112
- return !!value && (typeof value == "object" || typeof value == "function");
113
- }
114
- function parseBlocks({
115
- context,
116
- blocks,
117
- options
118
- }) {
119
- return Array.isArray(blocks) ? blocks.flatMap((block) => {
120
- const parsedBlock = parseBlock({
121
- context,
122
- block,
123
- options
124
- });
125
- return parsedBlock ? [parsedBlock] : [];
126
- }) : [];
127
- }
128
- function parseBlock({
129
- context,
130
- block,
131
- options
132
- }) {
133
- return parseTextBlock({
134
- block,
135
- context,
136
- options
137
- }) ?? parseBlockObject({
138
- blockObject: block,
139
- context,
140
- options
141
- });
142
- }
143
- function parseBlockObject({
144
- blockObject,
145
- context,
146
- options
147
- }) {
148
- if (!isTypedObject(blockObject))
149
- return;
150
- const schemaType = context.schema.blockObjects.find(({
151
- name
152
- }) => name === blockObject._type);
153
- if (schemaType)
154
- return parseObject({
155
- object: blockObject,
156
- context: {
157
- keyGenerator: context.keyGenerator,
158
- schemaType
159
- },
160
- options
161
- });
162
- }
163
- function isListBlock(context, block) {
164
- return schema.isTextBlock(context, block) && block.level !== void 0 && block.listItem !== void 0;
165
- }
166
- function parseTextBlock({
167
- block,
168
- context,
169
- options
170
- }) {
171
- if (!isTypedObject(block))
172
- return;
173
- const customFields = {};
174
- for (const key of Object.keys(block))
175
- key === "_type" || key === "_key" || key === "children" || key === "markDefs" || key === "style" || key === "listItem" || key === "level" || (options.validateFields ? context.schema.block.fields?.some((field) => field.name === key) && (customFields[key] = block[key]) : customFields[key] = block[key]);
176
- if (block._type !== context.schema.block.name)
177
- return;
178
- const _key = typeof block._key == "string" ? block._key : context.keyGenerator(), unparsedMarkDefs = Array.isArray(block.markDefs) ? block.markDefs : [], markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = unparsedMarkDefs.flatMap((markDef) => {
179
- if (!isTypedObject(markDef))
180
- return [];
181
- const schemaType = context.schema.annotations.find(({
182
- name
183
- }) => name === markDef._type);
184
- if (!schemaType)
185
- return [];
186
- if (typeof markDef._key != "string")
187
- return [];
188
- const parsedAnnotation = parseObject({
189
- object: markDef,
190
- context: {
191
- schemaType,
192
- keyGenerator: context.keyGenerator
193
- },
194
- options
195
- });
196
- return parsedAnnotation ? (markDefKeyMap.set(markDef._key, parsedAnnotation._key), [parsedAnnotation]) : [];
197
- }), children = (Array.isArray(block.children) ? block.children : []).map((child) => parseSpan({
198
- span: child,
199
- context,
200
- markDefKeyMap,
201
- options
202
- }) ?? parseInlineObject({
203
- inlineObject: child,
204
- context,
205
- options
206
- })).filter((child) => child !== void 0), marks = children.flatMap((child) => child.marks ?? []), parsedBlock = {
207
- _type: context.schema.block.name,
208
- _key,
209
- children: children.length > 0 ? children : [{
210
- _key: context.keyGenerator(),
211
- _type: context.schema.span.name,
212
- text: "",
213
- marks: []
214
- }],
215
- markDefs: options.removeUnusedMarkDefs ? markDefs.filter((markDef) => marks.includes(markDef._key)) : markDefs,
216
- ...customFields
217
- };
218
- if (typeof block.style == "string" && context.schema.styles.find((style) => style.name === block.style))
219
- parsedBlock.style = block.style;
220
- else {
221
- const defaultStyle = context.schema.styles.at(0)?.name;
222
- defaultStyle !== void 0 ? parsedBlock.style = defaultStyle : console.error("Expected default style");
223
- }
224
- return typeof block.listItem == "string" && context.schema.lists.find((list) => list.name === block.listItem) && (parsedBlock.listItem = block.listItem), typeof block.level == "number" && (parsedBlock.level = block.level), parsedBlock;
225
- }
226
- function parseSpan({
227
- span,
228
- context,
229
- markDefKeyMap,
230
- options
231
- }) {
232
- if (!isTypedObject(span))
233
- return;
234
- const customFields = {};
235
- for (const key of Object.keys(span))
236
- key !== "_type" && key !== "_key" && key !== "text" && key !== "marks" && (customFields[key] = span[key]);
237
- if (span._type !== context.schema.span.name || span._type !== "span")
238
- return;
239
- const marks = (Array.isArray(span.marks) ? span.marks : []).flatMap((mark) => {
240
- if (typeof mark != "string")
241
- return [];
242
- const markDefKey = markDefKeyMap.get(mark);
243
- return markDefKey !== void 0 ? [markDefKey] : context.schema.decorators.some((decorator) => decorator.name === mark) ? [mark] : [];
244
- });
245
- return {
246
- _type: "span",
247
- _key: typeof span._key == "string" ? span._key : context.keyGenerator(),
248
- text: typeof span.text == "string" ? span.text : "",
249
- marks,
250
- ...options.validateFields ? {} : customFields
251
- };
252
- }
253
- function parseInlineObject({
254
- inlineObject,
255
- context,
256
- options
257
- }) {
258
- if (!isTypedObject(inlineObject))
259
- return;
260
- const schemaType = context.schema.inlineObjects.find(({
261
- name
262
- }) => name === inlineObject._type);
263
- if (schemaType)
264
- return parseObject({
265
- object: inlineObject,
266
- context: {
267
- keyGenerator: context.keyGenerator,
268
- schemaType
269
- },
270
- options
271
- });
272
- }
273
- function parseAnnotation({
274
- annotation,
275
- context,
276
- options
277
- }) {
278
- if (!isTypedObject(annotation))
279
- return;
280
- const schemaType = context.schema.annotations.find(({
281
- name
282
- }) => name === annotation._type);
283
- if (schemaType)
284
- return parseObject({
285
- object: annotation,
286
- context: {
287
- keyGenerator: context.keyGenerator,
288
- schemaType
289
- },
290
- options
291
- });
292
- }
293
- function parseObject({
294
- object,
295
- context,
296
- options
297
- }) {
298
- const {
299
- _type,
300
- _key,
301
- ...customFields
302
- } = object, values = options.validateFields ? context.schemaType.fields.reduce((fieldValues, field) => {
303
- const fieldValue = object[field.name];
304
- return fieldValue !== void 0 && (fieldValues[field.name] = fieldValue), fieldValues;
305
- }, {}) : customFields;
306
- return {
307
- _type: context.schemaType.name,
308
- _key: typeof object._key == "string" ? object._key : context.keyGenerator(),
309
- ...values
310
- };
311
- }
312
- const defaultKeyGenerator = () => randomKey(12), getByteHexTable = /* @__PURE__ */ (() => {
313
- let table;
314
- return () => {
315
- if (table)
316
- return table;
317
- table = [];
318
- for (let i = 0; i < 256; ++i)
319
- table[i] = (i + 256).toString(16).slice(1);
320
- return table;
321
- };
322
- })();
323
- function whatwgRNG(length = 16) {
324
- const rnds8 = new Uint8Array(length);
325
- return getRandomValues__default.default(rnds8), rnds8;
326
- }
327
- function randomKey(length) {
328
- const table = getByteHexTable();
329
- return whatwgRNG(length).reduce((str, n) => str + table[n], "").slice(0, length);
330
- }
331
- function getSelectionEndPoint(selection) {
332
- return selection ? selection.backward ? selection.anchor : selection.focus : null;
333
- }
334
- function getSelectionStartPoint(selection) {
335
- return selection ? selection.backward ? selection.focus : selection.anchor : null;
336
- }
337
- function sliceBlocks({
338
- context,
339
- blocks
340
- }) {
341
- const slice = [];
342
- if (!context.selection)
343
- return slice;
344
- let startBlock;
345
- const middleBlocks = [];
346
- let endBlock;
347
- const startPoint = getSelectionStartPoint(context.selection), endPoint = getSelectionEndPoint(context.selection), startBlockKey = getBlockKeyFromSelectionPoint(startPoint), startChildKey = getChildKeyFromSelectionPoint(startPoint), endBlockKey = getBlockKeyFromSelectionPoint(endPoint), endChildKey = getChildKeyFromSelectionPoint(endPoint);
348
- if (!startBlockKey || !endBlockKey)
349
- return slice;
350
- for (const block of blocks) {
351
- if (!schema.isTextBlock(context, block) && block._key === startBlockKey && block._key === endBlockKey) {
352
- startBlock = block;
353
- break;
354
- }
355
- if (block._key === startBlockKey) {
356
- if (!schema.isTextBlock(context, block)) {
357
- startBlock = block;
358
- continue;
359
- }
360
- if (startChildKey) {
361
- for (const child of block.children) {
362
- if (child._key === startChildKey) {
363
- if (schema.isSpan(context, child)) {
364
- const text = child._key === endChildKey ? child.text.slice(startPoint.offset, endPoint.offset) : child.text.slice(startPoint.offset);
365
- startBlock = {
366
- ...block,
367
- children: [{
368
- ...child,
369
- text
370
- }]
371
- };
372
- } else
373
- startBlock = {
374
- ...block,
375
- children: [child]
376
- };
377
- if (block._key === endBlockKey && startChildKey === endChildKey)
378
- break;
379
- continue;
380
- }
381
- if (startBlock && schema.isTextBlock(context, startBlock) && (endChildKey && child._key === endChildKey && schema.isSpan(context, child) ? startBlock.children.push({
382
- ...child,
383
- text: child.text.slice(0, endPoint.offset)
384
- }) : startBlock.children.push(child), block._key === endBlockKey && endChildKey && child._key === endChildKey))
385
- break;
386
- }
387
- if (startBlockKey === endBlockKey)
388
- break;
389
- continue;
390
- }
391
- if (startBlock = block, startBlockKey === endBlockKey)
392
- break;
393
- }
394
- if (block._key === endBlockKey) {
395
- if (!schema.isTextBlock(context, block)) {
396
- endBlock = block;
397
- break;
398
- }
399
- if (endChildKey) {
400
- endBlock = {
401
- ...block,
402
- children: []
403
- };
404
- for (const child of block.children)
405
- if (endBlock && schema.isTextBlock(context, endBlock)) {
406
- if (child._key === endChildKey && schema.isSpan(context, child)) {
407
- endBlock.children.push({
408
- ...child,
409
- text: child.text.slice(0, endPoint.offset)
410
- });
411
- break;
412
- }
413
- if (endBlock.children.push(child), endChildKey && child._key === endChildKey)
414
- break;
415
- }
416
- break;
417
- }
418
- endBlock = block;
419
- break;
420
- }
421
- startBlock && middleBlocks.push(parseBlock({
422
- context: {
423
- ...context,
424
- keyGenerator: defaultKeyGenerator
425
- },
426
- block,
427
- options: {
428
- removeUnusedMarkDefs: !0,
429
- validateFields: !1
430
- }
431
- }) ?? block);
432
- }
433
- const parsedStartBlock = startBlock ? parseBlock({
434
- context: {
435
- ...context,
436
- keyGenerator: defaultKeyGenerator
437
- },
438
- block: startBlock,
439
- options: {
440
- removeUnusedMarkDefs: !0,
441
- validateFields: !1
442
- }
443
- }) : void 0, parsedEndBlock = endBlock ? parseBlock({
444
- context: {
445
- ...context,
446
- keyGenerator: defaultKeyGenerator
447
- },
448
- block: endBlock,
449
- options: {
450
- removeUnusedMarkDefs: !0,
451
- validateFields: !1
452
- }
453
- }) : void 0;
454
- return [...parsedStartBlock ? [parsedStartBlock] : [], ...middleBlocks, ...parsedEndBlock ? [parsedEndBlock] : []];
455
- }
456
- function getTextBlockText(block) {
457
- return block.children.map((child) => child.text ?? "").join("");
458
- }
459
- exports.blockOffsetToSpanSelectionPoint = blockOffsetToSpanSelectionPoint;
460
- exports.defaultKeyGenerator = defaultKeyGenerator;
461
- exports.getBlockKeyFromSelectionPoint = getBlockKeyFromSelectionPoint;
462
- exports.getBlockStartPoint = getBlockStartPoint;
463
- exports.getChildKeyFromSelectionPoint = getChildKeyFromSelectionPoint;
464
- exports.getSelectionEndPoint = getSelectionEndPoint;
465
- exports.getSelectionStartPoint = getSelectionStartPoint;
466
- exports.getTextBlockText = getTextBlockText;
467
- exports.isKeyedSegment = isKeyedSegment;
468
- exports.isListBlock = isListBlock;
469
- exports.isTypedObject = isTypedObject;
470
- exports.parseAnnotation = parseAnnotation;
471
- exports.parseBlock = parseBlock;
472
- exports.parseBlocks = parseBlocks;
473
- exports.parseInlineObject = parseInlineObject;
474
- exports.parseSpan = parseSpan;
475
- exports.sliceBlocks = sliceBlocks;
476
- exports.spanSelectionPointToBlockOffset = spanSelectionPointToBlockOffset;
477
- //# sourceMappingURL=util.get-text-block-text.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.get-text-block-text.cjs","sources":["../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-keyed-segment.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/asserters.ts","../../src/utils/parse-blocks.ts","../../src/utils/key-generator.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.slice-blocks.ts","../../src/utils/util.get-text-block-text.ts"],"sourcesContent":["import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n return {\n path: [...block.path, 'children', {_key: block.node.children[0]._key}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {KeyedSegment} from '@sanity/types'\n\n/**\n * @public\n */\nexport function isKeyedSegment(segment: unknown): segment is KeyedSegment {\n return typeof segment === 'object' && segment !== null && '_key' in segment\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n context,\n blockOffset,\n direction,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const block of context.value) {\n if (block._key !== blockOffset.path[0]._key) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n break\n }\n\n offsetLeft -= child.text.length\n\n continue\n }\n\n if (!isSpan(context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n if (skippedInlineObject) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: 0,\n }\n }\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n context,\n selectionPoint,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n let offset = 0\n\n const blockKey = getBlockKeyFromSelectionPoint(selectionPoint)\n const spanKey = getChildKeyFromSelectionPoint(selectionPoint)\n\n if (!blockKey || !spanKey) {\n return undefined\n }\n\n for (const block of context.value) {\n if (block._key !== blockKey) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (child._key === spanKey) {\n return {\n path: [{_key: block._key}],\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n }\n}\n","import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nexport function parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if (context.schema.block.fields?.some((field) => field.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key =\n typeof block._key === 'string' ? block._key : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n const marks = children.flatMap((child) => child.marks ?? [])\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs,\n ...customFields,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: typeof span._key === 'string' ? span._key : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_type, _key, ...customFields} = object\n\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = options.validateFields\n ? context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n : customFields\n\n return {\n _type: context.schemaType.name,\n _key:\n typeof object._key === 'string' ? object._key : context.keyGenerator(),\n ...values,\n }\n}\n","import getRandomValues from 'get-random-values-esm'\n\n/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\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 '../types/editor'\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","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {parseBlock} from './parse-blocks'\nimport {getSelectionEndPoint} from './util.get-selection-end-point'\nimport {getSelectionStartPoint} from './util.get-selection-start-point'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'>\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: startBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: endBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\n\n/**\n * @public\n */\nexport function getTextBlockText(block: PortableTextTextBlock) {\n return block.children.map((child) => child.text ?? '').join('')\n}\n"],"names":["getBlockStartPoint","context","block","isTextBlock","node","path","_key","children","offset","isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","at","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","selectionPoint","skippedInlineObject","value","child","isSpan","text","length","spanSelectionPointToBlockOffset","blockKey","spanKey","isTypedObject","object","isRecord","_type","parseBlocks","blocks","options","Array","isArray","flatMap","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","level","undefined","listItem","customFields","key","Object","keys","validateFields","fields","some","field","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","parseSpan","span","parseInlineObject","inlineObject","filter","marks","removeUnusedMarkDefs","includes","style","styles","defaultStyle","console","error","lists","list","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","getRandomValues","str","n","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock","getTextBlockText","join"],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- "use strict";
2
- var schema = require("@portabletext/schema"), util_getTextBlockText = require("./util.get-text-block-text.cjs");
3
- function getBlockEndPoint({
4
- context,
5
- block
6
- }) {
7
- if (schema.isTextBlock(context, block.node)) {
8
- const lastChild = block.node.children[block.node.children.length - 1];
9
- if (lastChild)
10
- return {
11
- path: [...block.path, "children", {
12
- _key: lastChild._key
13
- }],
14
- offset: schema.isSpan(context, lastChild) ? lastChild.text.length : 0
15
- };
16
- }
17
- return {
18
- path: block.path,
19
- offset: 0
20
- };
21
- }
22
- function isSelectionCollapsed(selection) {
23
- return selection ? JSON.stringify(selection.anchor.path) === JSON.stringify(selection.focus.path) && selection.anchor.offset === selection.focus.offset : !1;
24
- }
25
- function isEqualSelectionPoints(a, b) {
26
- return a.offset === b.offset && JSON.stringify(a.path) === JSON.stringify(b.path);
27
- }
28
- function isEmptyTextBlock(context, block) {
29
- if (!schema.isTextBlock(context, block))
30
- return !1;
31
- const onlyText = block.children.every((child) => schema.isSpan(context, child)), blockText = util_getTextBlockText.getTextBlockText(block);
32
- return onlyText && blockText === "";
33
- }
34
- exports.getBlockEndPoint = getBlockEndPoint;
35
- exports.isEmptyTextBlock = isEmptyTextBlock;
36
- exports.isEqualSelectionPoints = isEqualSelectionPoints;
37
- exports.isSelectionCollapsed = isSelectionCollapsed;
38
- //# sourceMappingURL=util.is-empty-text-block.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.is-empty-text-block.cjs","sources":["../../src/utils/util.get-block-end-point.ts","../../src/utils/util.is-selection-collapsed.ts","../../src/utils/util.is-equal-selection-points.ts","../../src/utils/util.is-empty-text-block.ts"],"sourcesContent":["import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockEndPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n const lastChild = block.node.children[block.node.children.length - 1]\n\n if (lastChild) {\n return {\n path: [...block.path, 'children', {_key: lastChild._key}],\n offset: isSpan(context, lastChild) ? lastChild.text.length : 0,\n }\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {EditorSelection} from '../types/editor'\n\n/**\n * @public\n */\nexport function isSelectionCollapsed(selection: EditorSelection) {\n if (!selection) {\n return false\n }\n\n return (\n JSON.stringify(selection.anchor.path) ===\n JSON.stringify(selection.focus.path) &&\n selection.anchor.offset === selection.focus.offset\n )\n}\n","import type {EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function isEqualSelectionPoints(\n a: EditorSelectionPoint,\n b: EditorSelectionPoint,\n) {\n return (\n a.offset === b.offset && JSON.stringify(a.path) === JSON.stringify(b.path)\n )\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {getTextBlockText} from './util.get-text-block-text'\n\n/**\n * @public\n */\nexport function isEmptyTextBlock(\n context: Pick<EditorContext, 'schema'>,\n block: PortableTextBlock,\n) {\n if (!isTextBlock(context, block)) {\n return false\n }\n\n const onlyText = block.children.every((child) => isSpan(context, child))\n const blockText = getTextBlockText(block)\n\n return onlyText && blockText === ''\n}\n"],"names":["getBlockEndPoint","context","block","isTextBlock","node","lastChild","children","length","path","_key","offset","isSpan","text","isSelectionCollapsed","selection","JSON","stringify","anchor","focus","isEqualSelectionPoints","a","b","isEmptyTextBlock","onlyText","every","child","blockText","getTextBlockText"],"mappings":";;AASO,SAASA,iBAAiB;AAAA,EAC/BC;AAAAA,EACAC;AAOF,GAAyB;AACvB,MAAIC,mBAAYF,SAASC,MAAME,IAAI,GAAG;AACpC,UAAMC,YAAYH,MAAME,KAAKE,SAASJ,MAAME,KAAKE,SAASC,SAAS,CAAC;AAEpE,QAAIF;AACF,aAAO;AAAA,QACLG,MAAM,CAAC,GAAGN,MAAMM,MAAM,YAAY;AAAA,UAACC,MAAMJ,UAAUI;AAAAA,QAAAA,CAAK;AAAA,QACxDC,QAAQC,OAAAA,OAAOV,SAASI,SAAS,IAAIA,UAAUO,KAAKL,SAAS;AAAA,MAAA;AAAA,EAGnE;AAEA,SAAO;AAAA,IACLC,MAAMN,MAAMM;AAAAA,IACZE,QAAQ;AAAA,EAAA;AAEZ;AC7BO,SAASG,qBAAqBC,WAA4B;AAC/D,SAAKA,YAKHC,KAAKC,UAAUF,UAAUG,OAAOT,IAAI,MAClCO,KAAKC,UAAUF,UAAUI,MAAMV,IAAI,KACrCM,UAAUG,OAAOP,WAAWI,UAAUI,MAAMR,SANrC;AAQX;ACVO,SAASS,uBACdC,GACAC,GACA;AACA,SACED,EAAEV,WAAWW,EAAEX,UAAUK,KAAKC,UAAUI,EAAEZ,IAAI,MAAMO,KAAKC,UAAUK,EAAEb,IAAI;AAE7E;ACJO,SAASc,iBACdrB,SACAC,OACA;AACA,MAAI,CAACC,OAAAA,YAAYF,SAASC,KAAK;AAC7B,WAAO;AAGT,QAAMqB,WAAWrB,MAAMI,SAASkB,MAAOC,CAAAA,UAAUd,cAAOV,SAASwB,KAAK,CAAC,GACjEC,YAAYC,sBAAAA,iBAAiBzB,KAAK;AAExC,SAAOqB,YAAYG,cAAc;AACnC;;;;;"}
@@ -1,23 +0,0 @@
1
- "use strict";
2
- var schema = require("@portabletext/schema"), util_getTextBlockText = require("./util.get-text-block-text.cjs");
3
- function mergeTextBlocks({
4
- context,
5
- targetBlock,
6
- incomingBlock
7
- }) {
8
- const parsedIncomingBlock = util_getTextBlockText.parseBlock({
9
- context,
10
- block: incomingBlock,
11
- options: {
12
- removeUnusedMarkDefs: !0,
13
- validateFields: !1
14
- }
15
- });
16
- return !parsedIncomingBlock || !schema.isTextBlock(context, parsedIncomingBlock) ? targetBlock : {
17
- ...targetBlock,
18
- children: [...targetBlock.children, ...parsedIncomingBlock.children],
19
- markDefs: [...targetBlock.markDefs ?? [], ...parsedIncomingBlock.markDefs ?? []]
20
- };
21
- }
22
- exports.mergeTextBlocks = mergeTextBlocks;
23
- //# sourceMappingURL=util.merge-text-blocks.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.merge-text-blocks.cjs","sources":["../../src/utils/util.merge-text-blocks.ts"],"sourcesContent":["import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {parseBlock} from './parse-blocks'\n\n/**\n * @beta\n */\nexport function mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n targetBlock: PortableTextTextBlock\n incomingBlock: PortableTextTextBlock\n}) {\n const parsedIncomingBlock = parseBlock({\n context,\n block: incomingBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n\n if (!parsedIncomingBlock || !isTextBlock(context, parsedIncomingBlock)) {\n return targetBlock\n }\n\n return {\n ...targetBlock,\n children: [...targetBlock.children, ...parsedIncomingBlock.children],\n markDefs: [\n ...(targetBlock.markDefs ?? []),\n ...(parsedIncomingBlock.markDefs ?? []),\n ],\n }\n}\n"],"names":["mergeTextBlocks","context","targetBlock","incomingBlock","parsedIncomingBlock","parseBlock","block","options","removeUnusedMarkDefs","validateFields","isTextBlock","children","markDefs"],"mappings":";;AAQO,SAASA,gBAAgB;AAAA,EAC9BC;AAAAA,EACAC;AAAAA,EACAC;AAKF,GAAG;AACD,QAAMC,sBAAsBC,sBAAAA,WAAW;AAAA,IACrCJ;AAAAA,IACAK,OAAOH;AAAAA,IACPI,SAAS;AAAA,MAACC,sBAAsB;AAAA,MAAMC,gBAAgB;AAAA,IAAA;AAAA,EAAK,CAC5D;AAED,SAAI,CAACL,uBAAuB,CAACM,OAAAA,YAAYT,SAASG,mBAAmB,IAC5DF,cAGF;AAAA,IACL,GAAGA;AAAAA,IACHS,UAAU,CAAC,GAAGT,YAAYS,UAAU,GAAGP,oBAAoBO,QAAQ;AAAA,IACnEC,UAAU,CACR,GAAIV,YAAYU,YAAY,CAAA,GAC5B,GAAIR,oBAAoBQ,YAAY,CAAA,CAAG;AAAA,EAAA;AAG7C;;"}