@portabletext/editor 7.8.2 → 7.10.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 (42) hide show
  1. package/lib/_chunks-dts/behavior.types.action.d.ts +110 -274
  2. package/lib/_chunks-dts/behavior.types.action.d.ts.map +1 -1
  3. package/lib/_chunks-dts/block-offset.d.ts +10 -0
  4. package/lib/_chunks-dts/block-offset.d.ts.map +1 -0
  5. package/lib/_chunks-dts/editor-selector.d.ts +33 -0
  6. package/lib/_chunks-dts/editor-selector.d.ts.map +1 -0
  7. package/lib/_chunks-dts/editor.d.ts +99 -0
  8. package/lib/_chunks-dts/editor.d.ts.map +1 -0
  9. package/lib/_chunks-es/{get-first-child.js → get-container.js} +10 -1
  10. package/lib/_chunks-es/get-container.js.map +1 -0
  11. package/lib/_chunks-es/get-parent.js +18 -6
  12. package/lib/_chunks-es/get-parent.js.map +1 -1
  13. package/lib/_chunks-es/get-path-sub-schema.js +38 -6
  14. package/lib/_chunks-es/get-path-sub-schema.js.map +1 -1
  15. package/lib/_chunks-es/selector.is-at-the-start-of-block.js +3 -0
  16. package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
  17. package/lib/_chunks-es/{util.is-empty-text-block.js → util.is-equal-selections.js} +7 -2
  18. package/lib/_chunks-es/util.is-equal-selections.js.map +1 -0
  19. package/lib/_chunks-es/util.slice-blocks.js +1 -8
  20. package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
  21. package/lib/behaviors/index.d.ts +1 -1
  22. package/lib/index.d.ts +67 -2
  23. package/lib/index.d.ts.map +1 -0
  24. package/lib/index.js +282 -106
  25. package/lib/index.js.map +1 -1
  26. package/lib/plugins/index.d.ts +2 -1
  27. package/lib/plugins/index.d.ts.map +1 -1
  28. package/lib/selectors/index.d.ts +3 -1
  29. package/lib/selectors/index.d.ts.map +1 -1
  30. package/lib/selectors/index.js +4 -2
  31. package/lib/selectors/index.js.map +1 -1
  32. package/lib/traversal/index.d.ts +41 -7
  33. package/lib/traversal/index.d.ts.map +1 -1
  34. package/lib/traversal/index.js +24 -2
  35. package/lib/traversal/index.js.map +1 -1
  36. package/lib/utils/index.d.ts +3 -3
  37. package/lib/utils/index.d.ts.map +1 -1
  38. package/lib/utils/index.js +3 -6
  39. package/lib/utils/index.js.map +1 -1
  40. package/package.json +20 -20
  41. package/lib/_chunks-es/get-first-child.js.map +0 -1
  42. package/lib/_chunks-es/util.is-empty-text-block.js.map +0 -1
@@ -30,15 +30,8 @@ function blockOffsetToSpanSelectionPoint({
30
30
  skippedInlineObject = !0;
31
31
  continue;
32
32
  }
33
- if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {
34
- skippedInlineObject && (selectionPoint = {
35
- path: [...blockPath, "children", {
36
- _key: child._key
37
- }],
38
- offset: 0
39
- });
33
+ if (offsetLeft === 0 && selectionPoint && !skippedInlineObject)
40
34
  break;
41
- }
42
35
  if (offsetLeft > child.text.length) {
43
36
  offsetLeft -= child.text.length;
44
37
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"util.slice-blocks.js","sources":["../../src/utils/util.block-offset.ts","../../src/utils/util.is-equal-path-segments.ts","../../src/utils/util.is-equal-paths.ts","../../src/utils/util.is-equal-selection-points.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.get-block-end-point.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-selection-collapsed.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/key-generator.ts","../../src/utils/parse-blocks.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["import {isSpan, isTextBlock} from '@portabletext/schema'\nimport {getNode} from '../traversal/get-node'\nimport {getParent} from '../traversal/get-parent'\nimport type {TraversalSnapshot} from '../traversal/traversal-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n snapshot,\n blockOffset,\n direction,\n}: {\n snapshot: TraversalSnapshot\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n const blockEntry = getNode(snapshot, blockOffset.path)\n\n if (!blockEntry || !isTextBlock(snapshot.context, blockEntry.node)) {\n return undefined\n }\n\n const block = blockEntry.node\n const blockPath = blockEntry.path\n\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(snapshot.context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockPath, '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(snapshot.context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n if (skippedInlineObject) {\n selectionPoint = {\n path: [...blockPath, '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: [...blockPath, '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 return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n snapshot,\n selectionPoint,\n}: {\n snapshot: TraversalSnapshot\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n const spanSegment = selectionPoint.path.at(-1)\n\n if (!isKeyedSegment(spanSegment)) {\n return undefined\n }\n\n const textBlock = getParent(snapshot, selectionPoint.path, {\n match: (node) => isTextBlock({schema: snapshot.context.schema}, node),\n })\n\n if (!textBlock) {\n return undefined\n }\n\n let offset = 0\n\n for (const child of textBlock.node.children) {\n if (!isSpan(snapshot.context, child)) {\n continue\n }\n\n if (child._key === spanSegment._key) {\n return {\n path: textBlock.path,\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n\n return undefined\n}\n","import type {PathSegment} from '../types/paths'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function isEqualPathSegments(\n segA: PathSegment | undefined,\n segB: PathSegment | undefined,\n): boolean {\n if (segA === segB) {\n return true\n }\n\n if (segA === undefined || segB === undefined) {\n return false\n }\n\n if (\n (typeof segA === 'string' || typeof segA === 'number') &&\n (typeof segB === 'string' || typeof segB === 'number')\n ) {\n return segA === segB\n }\n\n if (isKeyedSegment(segA) && isKeyedSegment(segB)) {\n return segA._key === segB._key\n }\n\n if (Array.isArray(segA) && Array.isArray(segB)) {\n return segA[0] === segB[0] && segA[1] === segB[1]\n }\n\n return false\n}\n","import type {Path} from '../types/paths'\nimport {isEqualPathSegments} from './util.is-equal-path-segments'\n\n/**\n * @public\n */\nexport function isEqualPaths(a: Path, b: Path): boolean {\n if (a.length !== b.length) {\n return false\n }\n\n for (let i = 0; i < a.length; i++) {\n if (!isEqualPathSegments(a[i], b[i])) {\n return false\n }\n }\n\n return true\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isEqualPaths} from './util.is-equal-paths'\n\n/**\n * @public\n */\nexport function isEqualSelectionPoints(\n a: EditorSelectionPoint,\n b: EditorSelectionPoint,\n) {\n return a.offset === b.offset && isEqualPaths(a.path, b.path)\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, type PortableTextBlock} from '@portabletext/schema'\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 {isTextBlock, type PortableTextBlock} from '@portabletext/schema'\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 const firstChild = block.node.children[0]\n return {\n path: [...block.path, 'children', {_key: firstChild?._key ?? ''}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport {isEqualPaths} from './util.is-equal-paths'\n\n/**\n * @public\n */\nexport function isSelectionCollapsed(selection: EditorSelection) {\n if (!selection) {\n return false\n }\n\n return (\n isEqualPaths(selection.anchor.path, selection.focus.path) &&\n selection.anchor.offset === selection.focus.offset\n )\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 EditorSelectionPoint | null =\n 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 EditorSelectionPoint | null =\n 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","/**\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 crypto.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 {\n getSubSchema,\n isSpan,\n isTextBlock,\n type FieldDefinition,\n type OfDefinition,\n type PortableTextBlock,\n type PortableTextListBlock,\n type PortableTextObject,\n type PortableTextSpan,\n type PortableTextTextBlock,\n type Schema,\n type TypedObject,\n} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isRecord, isTypedObject} from './asserters'\n\nexport function parseBlocks({\n schema,\n keyGenerator,\n blocks,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n blocks: unknown\n options: {\n normalize: boolean\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 = parseBlockInternal({\n schema,\n keyGenerator,\n block,\n options,\n })\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n schema,\n keyGenerator,\n block,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n block: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return parseBlockInternal({schema, keyGenerator, block, options})\n}\n\nexport function parseSpan({\n span,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n return parseSpanInternal({span, schema, keyGenerator, markDefKeyMap, options})\n}\n\nexport function parseInlineObject({\n inlineObject,\n schema,\n keyGenerator,\n options,\n}: {\n inlineObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n return parseInlineObjectInternal({\n inlineObject,\n schema,\n keyGenerator,\n options,\n })\n}\n\nexport function parseChild({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return parseChildInternal({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n })\n}\n\nexport function parseMarkDefs({\n schema,\n keyGenerator,\n markDefs,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n return parseMarkDefsInternal({schema, keyGenerator, markDefs, options})\n}\n\nfunction parseBlockInternal({\n schema,\n keyGenerator,\n block,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n block: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, schema, keyGenerator, options}) ??\n parseBlockObject({blockObject: block, schema, keyGenerator, options})\n )\n}\n\nfunction parseBlockObject({\n blockObject,\n schema,\n keyGenerator,\n options,\n}: {\n blockObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = 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 schema,\n keyGenerator,\n schemaType,\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\nfunction parseTextBlock({\n block,\n schema,\n keyGenerator,\n options,\n}: {\n block: unknown\n schema: Schema\n keyGenerator: () => string\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (block._type !== schema.block.name) {\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 ((schema.block.fields ?? []).some((f) => f.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n const _key =\n typeof block['_key'] === 'string' ? block['_key'] : keyGenerator()\n\n const {markDefs, markDefKeyMap} = parseMarkDefsInternal({\n schema,\n keyGenerator,\n markDefs: block['markDefs'],\n options,\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block['children'])\n ? block['children']\n : []\n\n const parsedChildren = unparsedChildren\n .map((child) =>\n parseChildInternal({child, schema, keyGenerator, markDefKeyMap, options}),\n )\n .filter((child) => child !== undefined)\n const marks = parsedChildren.flatMap((child) => child.marks ?? [])\n\n const children =\n parsedChildren.length > 0\n ? parsedChildren\n : [\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n ]\n\n const normalizedChildren = options.normalize\n ? // Ensure that inline objects re surrounded by spans\n children.reduce<Array<PortableTextObject | PortableTextSpan>>(\n (normalizedChildren, child, index) => {\n if (isSpan({schema}, child)) {\n return [...normalizedChildren, child]\n }\n\n const previousChild = normalizedChildren.at(-1)\n\n if (!previousChild || !isSpan({schema}, previousChild)) {\n return [\n ...normalizedChildren,\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n child,\n ...(index === children.length - 1\n ? [\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n ]\n : []),\n ]\n }\n\n return [...normalizedChildren, child]\n },\n [],\n )\n : children\n\n const parsedBlock: PortableTextTextBlock = {\n _type: schema.block.name,\n _key,\n children: normalizedChildren,\n ...customFields,\n }\n\n if (typeof block['markDefs'] === 'object' && block['markDefs'] !== null) {\n parsedBlock.markDefs = options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs\n }\n\n if (\n typeof block['style'] === 'string' &&\n schema.styles.find((style) => style.name === block['style'])\n ) {\n parsedBlock.style = block['style']\n }\n\n if (\n typeof block['listItem'] === 'string' &&\n 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\nfunction parseMarkDefsInternal({\n schema,\n keyGenerator,\n markDefs,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n const unparsedMarkDefs: Array<unknown> = Array.isArray(markDefs)\n ? markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n\n const parsedMarkDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = 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 schema,\n keyGenerator,\n schemaType,\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 return {\n markDefs: parsedMarkDefs,\n markDefKeyMap,\n }\n}\n\nfunction parseChildInternal({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return (\n parseSpanInternal({\n span: child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n }) ??\n parseInlineObjectInternal({\n inlineObject: child,\n schema,\n keyGenerator,\n options,\n })\n )\n}\n\nfunction parseSpanInternal({\n span,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isRecord(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 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 (schema.decorators.some((decorator) => decorator.name === mark)) {\n return [mark]\n }\n\n return []\n })\n\n if (typeof span['_type'] === 'string' && span['_type'] !== schema.span.name) {\n return undefined\n }\n\n if (typeof span['_type'] !== 'string') {\n if (typeof span['text'] === 'string') {\n return {\n _type: schema.span.name as 'span',\n _key: typeof span['_key'] === 'string' ? span['_key'] : keyGenerator(),\n text: span['text'],\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n }\n\n return undefined\n }\n\n return {\n _type: schema.span.name as 'span',\n _key: typeof span['_key'] === 'string' ? span['_key'] : keyGenerator(),\n text: typeof span['text'] === 'string' ? span['text'] : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nfunction parseInlineObjectInternal({\n inlineObject,\n schema,\n keyGenerator,\n options,\n}: {\n inlineObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = 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 schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n schema,\n keyGenerator,\n options,\n}: {\n annotation: TypedObject\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = 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 schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\n/**\n * Resolve an `of` member against a runtime `_type`. Returns the schema-type\n * to use for parsing the item, or `undefined` if no member matches.\n *\n * Three forms (one branch each):\n * - Inline declaration `{type: 'object', name: 'X', fields: [...]}` -- name\n * matches `_type`, fields are inline.\n * - Reference `{type: 'X'}` -- looks up in the ancestor chain first\n * (inline-declared types are visible to descendants), then in the schema's\n * root `blockObjects`. Mirrors `resolve-containers.ts`'s reference\n * resolution.\n * - `{type: 'block'}` -- not a non-PTE object member, returns `undefined`.\n */\nfunction resolveOfMember(\n of: ReadonlyArray<OfDefinition>,\n typeName: string,\n schema: Schema,\n ancestorFields: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>,\n): {name: string; fields: ReadonlyArray<FieldDefinition>} | undefined {\n for (const member of of) {\n if (member.type === 'block') {\n continue\n }\n if (member.type === 'object' && 'name' in member && member.name) {\n if (member.name === typeName && 'fields' in member && member.fields) {\n return {name: member.name, fields: member.fields}\n }\n continue\n }\n if (member.type === typeName) {\n const ancestorMatch = ancestorFields.get(typeName)\n if (ancestorMatch) {\n return {name: typeName, fields: ancestorMatch}\n }\n const rootMatch = schema.blockObjects.find(\n (blockObject) => blockObject.name === typeName,\n )\n if (rootMatch && 'fields' in rootMatch && rootMatch.fields) {\n return {name: rootMatch.name, fields: rootMatch.fields}\n }\n return undefined\n }\n }\n return undefined\n}\n\n/**\n * Parse an object against a `{name, fields}` schema type. Validates top-level\n * fields and recurses into any array field whose `of` contains a block-like\n * member -- parsing the nested blocks against a child `Schema` built from\n * that `of`.\n */\nfunction parseObject({\n object,\n schema,\n keyGenerator,\n schemaType,\n ancestorFields,\n options,\n}: {\n object: TypedObject\n schema: Schema\n keyGenerator: () => string\n schemaType: {\n name: string\n fields: ReadonlyArray<FieldDefinition>\n }\n ancestorFields?: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_key, ...customFields} = object\n\n const fieldsByName = new Map(\n schemaType.fields.map((field) => [field.name, field]),\n )\n\n const nextAncestors = new Map(ancestorFields ?? [])\n nextAncestors.set(schemaType.name, schemaType.fields)\n\n const values: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(customFields)) {\n if (key === '_type') {\n continue\n }\n\n if (value === undefined) {\n continue\n }\n\n const field = fieldsByName.get(key)\n\n if (options.validateFields && !field) {\n continue\n }\n\n if (field && field.type === 'array' && field.of && Array.isArray(value)) {\n values[key] = parseContainerFieldValue({\n schema,\n keyGenerator,\n of: field.of,\n value,\n ancestorFields: nextAncestors,\n options,\n })\n continue\n }\n\n values[key] = value\n }\n\n return {\n _type: schemaType.name,\n _key: typeof _key === 'string' ? _key : keyGenerator(),\n ...values,\n }\n}\n\n/**\n * Parse the value of an array field whose `of` declares what's allowed at\n * that position. Each item is dispatched per its own type:\n *\n * - Text blocks (`_type === schema.block.name`) are parsed against a child\n * sub-schema derived from the `{type: 'block'}` member of `of` (which\n * carries the styles, decorators, annotations, lists, and inline objects\n * allowed at this position).\n *\n * - Block objects (and structural objects sitting between containers and\n * text blocks) are parsed via `resolveOfMember` against the `of` array,\n * with `ancestorFields` carrying inline type declarations down to bare\n * references like `{type: 'list'}`. This lets nested containers resolve\n * to their inline shapes at any depth.\n *\n * Items that don't resolve are passed through unchanged.\n */\nfunction parseContainerFieldValue({\n schema,\n keyGenerator,\n of,\n value,\n ancestorFields,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n of: ReadonlyArray<OfDefinition>\n value: ReadonlyArray<unknown>\n ancestorFields: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>\n options: {validateFields: boolean; normalize?: boolean}\n}): Array<unknown> {\n const hasBlockMember = of.some((member) => member.type === 'block')\n const childBlockSubSchema = hasBlockMember\n ? getSubSchema(schema, of)\n : undefined\n\n return value.flatMap((item) => {\n if (!isTypedObject(item)) {\n return [item]\n }\n\n if (childBlockSubSchema && item._type === childBlockSubSchema.block.name) {\n const parsed = parseTextBlock({\n block: item,\n schema: childBlockSubSchema,\n keyGenerator,\n options: {\n normalize: false,\n removeUnusedMarkDefs: false,\n validateFields: options.validateFields,\n },\n })\n return parsed ? [parsed] : []\n }\n\n const schemaType = resolveOfMember(of, item._type, schema, ancestorFields)\n if (!schemaType) {\n return [item]\n }\n return [\n parseObject({\n object: item,\n schema,\n keyGenerator,\n schemaType: {\n name: schemaType.name,\n fields: schemaType.fields,\n },\n ancestorFields,\n options,\n }),\n ]\n })\n}\n","import {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\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 keyGenerator?: () => string\n }\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 keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block: startBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block: endBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n"],"names":["blockOffsetToSpanSelectionPoint","snapshot","blockOffset","direction","blockEntry","getNode","path","isTextBlock","context","node","block","blockPath","offsetLeft","offset","selectionPoint","skippedInlineObject","child","children","isSpan","text","length","_key","spanSelectionPointToBlockOffset","spanSegment","at","isKeyedSegment","textBlock","getParent","match","schema","isEqualPathSegments","segA","segB","undefined","Array","isArray","isEqualPaths","a","b","i","isEqualSelectionPoints","getBlockKeyFromSelectionPoint","point","blockPathSegment","getChildKeyFromSelectionPoint","childPathSegment","getBlockEndPoint","lastChild","getBlockStartPoint","firstChild","isSelectionCollapsed","selection","anchor","focus","getSelectionEndPoint","backward","getSelectionStartPoint","defaultKeyGenerator","randomKey","getByteHexTable","table","toString","slice","whatwgRNG","rnds8","Uint8Array","crypto","getRandomValues","reduce","str","n","parseBlocks","keyGenerator","blocks","options","flatMap","parsedBlock","parseBlockInternal","parseBlock","parseSpan","span","markDefKeyMap","parseSpanInternal","parseInlineObject","inlineObject","parseInlineObjectInternal","parseMarkDefs","markDefs","parseMarkDefsInternal","parseTextBlock","parseBlockObject","blockObject","isTypedObject","schemaType","blockObjects","find","name","_type","parseObject","object","isListBlock","level","listItem","customFields","key","Object","keys","validateFields","fields","some","f","parsedChildren","map","parseChildInternal","filter","marks","normalizedChildren","normalize","index","previousChild","removeUnusedMarkDefs","markDef","includes","styles","style","lists","list","unparsedMarkDefs","Map","annotations","parsedAnnotation","set","isRecord","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","resolveOfMember","of","typeName","ancestorFields","member","type","ancestorMatch","rootMatch","fieldsByName","field","nextAncestors","values","value","entries","parseContainerFieldValue","childBlockSubSchema","getSubSchema","item","parsed","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock"],"mappings":"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"}
1
+ {"version":3,"file":"util.slice-blocks.js","sources":["../../src/utils/util.block-offset.ts","../../src/utils/util.is-equal-path-segments.ts","../../src/utils/util.is-equal-paths.ts","../../src/utils/util.is-equal-selection-points.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.get-block-end-point.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-selection-collapsed.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/key-generator.ts","../../src/utils/parse-blocks.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["import {isSpan, isTextBlock} from '@portabletext/schema'\nimport {getNode} from '../traversal/get-node'\nimport {getParent} from '../traversal/get-parent'\nimport type {TraversalSnapshot} from '../traversal/traversal-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n snapshot,\n blockOffset,\n direction,\n}: {\n snapshot: TraversalSnapshot\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n const blockEntry = getNode(snapshot, blockOffset.path)\n\n if (!blockEntry || !isTextBlock(snapshot.context, blockEntry.node)) {\n return undefined\n }\n\n const block = blockEntry.node\n const blockPath = blockEntry.path\n\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(snapshot.context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockPath, '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(snapshot.context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n // A boundary offset stays at the end of the previous span unless an\n // inline object was skipped, in which case falling through to the\n // `offsetLeft <= child.text.length` branch lands the point at the\n // start of this span instead.\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: [...blockPath, '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 return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n snapshot,\n selectionPoint,\n}: {\n snapshot: TraversalSnapshot\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n const spanSegment = selectionPoint.path.at(-1)\n\n if (!isKeyedSegment(spanSegment)) {\n return undefined\n }\n\n const textBlock = getParent(snapshot, selectionPoint.path, {\n match: (node) => isTextBlock({schema: snapshot.context.schema}, node),\n })\n\n if (!textBlock) {\n return undefined\n }\n\n let offset = 0\n\n for (const child of textBlock.node.children) {\n if (!isSpan(snapshot.context, child)) {\n continue\n }\n\n if (child._key === spanSegment._key) {\n return {\n path: textBlock.path,\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n\n return undefined\n}\n","import type {PathSegment} from '../types/paths'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function isEqualPathSegments(\n segA: PathSegment | undefined,\n segB: PathSegment | undefined,\n): boolean {\n if (segA === segB) {\n return true\n }\n\n if (segA === undefined || segB === undefined) {\n return false\n }\n\n if (\n (typeof segA === 'string' || typeof segA === 'number') &&\n (typeof segB === 'string' || typeof segB === 'number')\n ) {\n return segA === segB\n }\n\n if (isKeyedSegment(segA) && isKeyedSegment(segB)) {\n return segA._key === segB._key\n }\n\n if (Array.isArray(segA) && Array.isArray(segB)) {\n return segA[0] === segB[0] && segA[1] === segB[1]\n }\n\n return false\n}\n","import type {Path} from '../types/paths'\nimport {isEqualPathSegments} from './util.is-equal-path-segments'\n\n/**\n * @public\n */\nexport function isEqualPaths(a: Path, b: Path): boolean {\n if (a.length !== b.length) {\n return false\n }\n\n for (let i = 0; i < a.length; i++) {\n if (!isEqualPathSegments(a[i], b[i])) {\n return false\n }\n }\n\n return true\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isEqualPaths} from './util.is-equal-paths'\n\n/**\n * @public\n */\nexport function isEqualSelectionPoints(\n a: EditorSelectionPoint,\n b: EditorSelectionPoint,\n) {\n return a.offset === b.offset && isEqualPaths(a.path, b.path)\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, type PortableTextBlock} from '@portabletext/schema'\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 {isTextBlock, type PortableTextBlock} from '@portabletext/schema'\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 const firstChild = block.node.children[0]\n return {\n path: [...block.path, 'children', {_key: firstChild?._key ?? ''}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport {isEqualPaths} from './util.is-equal-paths'\n\n/**\n * @public\n */\nexport function isSelectionCollapsed(selection: EditorSelection) {\n if (!selection) {\n return false\n }\n\n return (\n isEqualPaths(selection.anchor.path, selection.focus.path) &&\n selection.anchor.offset === selection.focus.offset\n )\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 EditorSelectionPoint | null =\n 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 EditorSelectionPoint | null =\n 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","/**\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 crypto.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 {\n getSubSchema,\n isSpan,\n isTextBlock,\n type FieldDefinition,\n type OfDefinition,\n type PortableTextBlock,\n type PortableTextListBlock,\n type PortableTextObject,\n type PortableTextSpan,\n type PortableTextTextBlock,\n type Schema,\n type TypedObject,\n} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isRecord, isTypedObject} from './asserters'\n\nexport function parseBlocks({\n schema,\n keyGenerator,\n blocks,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n blocks: unknown\n options: {\n normalize: boolean\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 = parseBlockInternal({\n schema,\n keyGenerator,\n block,\n options,\n })\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n schema,\n keyGenerator,\n block,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n block: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return parseBlockInternal({schema, keyGenerator, block, options})\n}\n\nexport function parseSpan({\n span,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n return parseSpanInternal({span, schema, keyGenerator, markDefKeyMap, options})\n}\n\nexport function parseInlineObject({\n inlineObject,\n schema,\n keyGenerator,\n options,\n}: {\n inlineObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n return parseInlineObjectInternal({\n inlineObject,\n schema,\n keyGenerator,\n options,\n })\n}\n\nexport function parseChild({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return parseChildInternal({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n })\n}\n\nexport function parseMarkDefs({\n schema,\n keyGenerator,\n markDefs,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n return parseMarkDefsInternal({schema, keyGenerator, markDefs, options})\n}\n\nfunction parseBlockInternal({\n schema,\n keyGenerator,\n block,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n block: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, schema, keyGenerator, options}) ??\n parseBlockObject({blockObject: block, schema, keyGenerator, options})\n )\n}\n\nfunction parseBlockObject({\n blockObject,\n schema,\n keyGenerator,\n options,\n}: {\n blockObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = 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 schema,\n keyGenerator,\n schemaType,\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\nfunction parseTextBlock({\n block,\n schema,\n keyGenerator,\n options,\n}: {\n block: unknown\n schema: Schema\n keyGenerator: () => string\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (block._type !== schema.block.name) {\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 ((schema.block.fields ?? []).some((f) => f.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n const _key =\n typeof block['_key'] === 'string' ? block['_key'] : keyGenerator()\n\n const {markDefs, markDefKeyMap} = parseMarkDefsInternal({\n schema,\n keyGenerator,\n markDefs: block['markDefs'],\n options,\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block['children'])\n ? block['children']\n : []\n\n const parsedChildren = unparsedChildren\n .map((child) =>\n parseChildInternal({child, schema, keyGenerator, markDefKeyMap, options}),\n )\n .filter((child) => child !== undefined)\n const marks = parsedChildren.flatMap((child) => child.marks ?? [])\n\n const children =\n parsedChildren.length > 0\n ? parsedChildren\n : [\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n ]\n\n const normalizedChildren = options.normalize\n ? // Ensure that inline objects re surrounded by spans\n children.reduce<Array<PortableTextObject | PortableTextSpan>>(\n (normalizedChildren, child, index) => {\n if (isSpan({schema}, child)) {\n return [...normalizedChildren, child]\n }\n\n const previousChild = normalizedChildren.at(-1)\n\n if (!previousChild || !isSpan({schema}, previousChild)) {\n return [\n ...normalizedChildren,\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n child,\n ...(index === children.length - 1\n ? [\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n ]\n : []),\n ]\n }\n\n return [...normalizedChildren, child]\n },\n [],\n )\n : children\n\n const parsedBlock: PortableTextTextBlock = {\n _type: schema.block.name,\n _key,\n children: normalizedChildren,\n ...customFields,\n }\n\n if (typeof block['markDefs'] === 'object' && block['markDefs'] !== null) {\n parsedBlock.markDefs = options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs\n }\n\n if (\n typeof block['style'] === 'string' &&\n schema.styles.find((style) => style.name === block['style'])\n ) {\n parsedBlock.style = block['style']\n }\n\n if (\n typeof block['listItem'] === 'string' &&\n 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\nfunction parseMarkDefsInternal({\n schema,\n keyGenerator,\n markDefs,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n const unparsedMarkDefs: Array<unknown> = Array.isArray(markDefs)\n ? markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n\n const parsedMarkDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = 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 schema,\n keyGenerator,\n schemaType,\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 return {\n markDefs: parsedMarkDefs,\n markDefKeyMap,\n }\n}\n\nfunction parseChildInternal({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return (\n parseSpanInternal({\n span: child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n }) ??\n parseInlineObjectInternal({\n inlineObject: child,\n schema,\n keyGenerator,\n options,\n })\n )\n}\n\nfunction parseSpanInternal({\n span,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isRecord(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 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 (schema.decorators.some((decorator) => decorator.name === mark)) {\n return [mark]\n }\n\n return []\n })\n\n if (typeof span['_type'] === 'string' && span['_type'] !== schema.span.name) {\n return undefined\n }\n\n if (typeof span['_type'] !== 'string') {\n if (typeof span['text'] === 'string') {\n return {\n _type: schema.span.name as 'span',\n _key: typeof span['_key'] === 'string' ? span['_key'] : keyGenerator(),\n text: span['text'],\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n }\n\n return undefined\n }\n\n return {\n _type: schema.span.name as 'span',\n _key: typeof span['_key'] === 'string' ? span['_key'] : keyGenerator(),\n text: typeof span['text'] === 'string' ? span['text'] : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nfunction parseInlineObjectInternal({\n inlineObject,\n schema,\n keyGenerator,\n options,\n}: {\n inlineObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = 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 schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n schema,\n keyGenerator,\n options,\n}: {\n annotation: TypedObject\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = 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 schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\n/**\n * Resolve an `of` member against a runtime `_type`. Returns the schema-type\n * to use for parsing the item, or `undefined` if no member matches.\n *\n * Three forms (one branch each):\n * - Inline declaration `{type: 'object', name: 'X', fields: [...]}` -- name\n * matches `_type`, fields are inline.\n * - Reference `{type: 'X'}` -- looks up in the ancestor chain first\n * (inline-declared types are visible to descendants), then in the schema's\n * root `blockObjects`. Mirrors `resolve-containers.ts`'s reference\n * resolution.\n * - `{type: 'block'}` -- not a non-PTE object member, returns `undefined`.\n */\nfunction resolveOfMember(\n of: ReadonlyArray<OfDefinition>,\n typeName: string,\n schema: Schema,\n ancestorFields: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>,\n): {name: string; fields: ReadonlyArray<FieldDefinition>} | undefined {\n for (const member of of) {\n if (member.type === 'block') {\n continue\n }\n if (member.type === 'object' && 'name' in member && member.name) {\n if (member.name === typeName && 'fields' in member && member.fields) {\n return {name: member.name, fields: member.fields}\n }\n continue\n }\n if (member.type === typeName) {\n const ancestorMatch = ancestorFields.get(typeName)\n if (ancestorMatch) {\n return {name: typeName, fields: ancestorMatch}\n }\n const rootMatch = schema.blockObjects.find(\n (blockObject) => blockObject.name === typeName,\n )\n if (rootMatch && 'fields' in rootMatch && rootMatch.fields) {\n return {name: rootMatch.name, fields: rootMatch.fields}\n }\n return undefined\n }\n }\n return undefined\n}\n\n/**\n * Parse an object against a `{name, fields}` schema type. Validates top-level\n * fields and recurses into any array field whose `of` contains a block-like\n * member -- parsing the nested blocks against a child `Schema` built from\n * that `of`.\n */\nfunction parseObject({\n object,\n schema,\n keyGenerator,\n schemaType,\n ancestorFields,\n options,\n}: {\n object: TypedObject\n schema: Schema\n keyGenerator: () => string\n schemaType: {\n name: string\n fields: ReadonlyArray<FieldDefinition>\n }\n ancestorFields?: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_key, ...customFields} = object\n\n const fieldsByName = new Map(\n schemaType.fields.map((field) => [field.name, field]),\n )\n\n const nextAncestors = new Map(ancestorFields ?? [])\n nextAncestors.set(schemaType.name, schemaType.fields)\n\n const values: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(customFields)) {\n if (key === '_type') {\n continue\n }\n\n if (value === undefined) {\n continue\n }\n\n const field = fieldsByName.get(key)\n\n if (options.validateFields && !field) {\n continue\n }\n\n if (field && field.type === 'array' && field.of && Array.isArray(value)) {\n values[key] = parseContainerFieldValue({\n schema,\n keyGenerator,\n of: field.of,\n value,\n ancestorFields: nextAncestors,\n options,\n })\n continue\n }\n\n values[key] = value\n }\n\n return {\n _type: schemaType.name,\n _key: typeof _key === 'string' ? _key : keyGenerator(),\n ...values,\n }\n}\n\n/**\n * Parse the value of an array field whose `of` declares what's allowed at\n * that position. Each item is dispatched per its own type:\n *\n * - Text blocks (`_type === schema.block.name`) are parsed against a child\n * sub-schema derived from the `{type: 'block'}` member of `of` (which\n * carries the styles, decorators, annotations, lists, and inline objects\n * allowed at this position).\n *\n * - Block objects (and structural objects sitting between containers and\n * text blocks) are parsed via `resolveOfMember` against the `of` array,\n * with `ancestorFields` carrying inline type declarations down to bare\n * references like `{type: 'list'}`. This lets nested containers resolve\n * to their inline shapes at any depth.\n *\n * Items that don't resolve are passed through unchanged.\n */\nfunction parseContainerFieldValue({\n schema,\n keyGenerator,\n of,\n value,\n ancestorFields,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n of: ReadonlyArray<OfDefinition>\n value: ReadonlyArray<unknown>\n ancestorFields: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>\n options: {validateFields: boolean; normalize?: boolean}\n}): Array<unknown> {\n const hasBlockMember = of.some((member) => member.type === 'block')\n const childBlockSubSchema = hasBlockMember\n ? getSubSchema(schema, of)\n : undefined\n\n return value.flatMap((item) => {\n if (!isTypedObject(item)) {\n return [item]\n }\n\n if (childBlockSubSchema && item._type === childBlockSubSchema.block.name) {\n const parsed = parseTextBlock({\n block: item,\n schema: childBlockSubSchema,\n keyGenerator,\n options: {\n normalize: false,\n removeUnusedMarkDefs: false,\n validateFields: options.validateFields,\n },\n })\n return parsed ? [parsed] : []\n }\n\n const schemaType = resolveOfMember(of, item._type, schema, ancestorFields)\n if (!schemaType) {\n return [item]\n }\n return [\n parseObject({\n object: item,\n schema,\n keyGenerator,\n schemaType: {\n name: schemaType.name,\n fields: schemaType.fields,\n },\n ancestorFields,\n options,\n }),\n ]\n })\n}\n","import {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\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 keyGenerator?: () => string\n }\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 keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block: startBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block: endBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n"],"names":["blockOffsetToSpanSelectionPoint","snapshot","blockOffset","direction","blockEntry","getNode","path","isTextBlock","context","node","block","blockPath","offsetLeft","offset","selectionPoint","skippedInlineObject","child","children","isSpan","text","length","_key","spanSelectionPointToBlockOffset","spanSegment","at","isKeyedSegment","textBlock","getParent","match","schema","isEqualPathSegments","segA","segB","undefined","Array","isArray","isEqualPaths","a","b","i","isEqualSelectionPoints","getBlockKeyFromSelectionPoint","point","blockPathSegment","getChildKeyFromSelectionPoint","childPathSegment","getBlockEndPoint","lastChild","getBlockStartPoint","firstChild","isSelectionCollapsed","selection","anchor","focus","getSelectionEndPoint","backward","getSelectionStartPoint","defaultKeyGenerator","randomKey","getByteHexTable","table","toString","slice","whatwgRNG","rnds8","Uint8Array","crypto","getRandomValues","reduce","str","n","parseBlocks","keyGenerator","blocks","options","flatMap","parsedBlock","parseBlockInternal","parseBlock","parseSpan","span","markDefKeyMap","parseSpanInternal","parseInlineObject","inlineObject","parseInlineObjectInternal","parseMarkDefs","markDefs","parseMarkDefsInternal","parseTextBlock","parseBlockObject","blockObject","isTypedObject","schemaType","blockObjects","find","name","_type","parseObject","object","isListBlock","level","listItem","customFields","key","Object","keys","validateFields","fields","some","f","parsedChildren","map","parseChildInternal","filter","marks","normalizedChildren","normalize","index","previousChild","removeUnusedMarkDefs","markDef","includes","styles","style","lists","list","unparsedMarkDefs","Map","annotations","parsedAnnotation","set","isRecord","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","resolveOfMember","of","typeName","ancestorFields","member","type","ancestorMatch","rootMatch","fieldsByName","field","nextAncestors","values","value","entries","parseContainerFieldValue","childBlockSubSchema","getSubSchema","item","parsed","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { Q as BehaviorGuard, X as Behavior, Z as defineBehavior, a as forward, c as CustomBehaviorEvent, d as SyntheticBehaviorEvent, i as execute, l as InsertPlacement, n as BehaviorActionSet, o as raise, r as effect, s as BehaviorEvent, t as BehaviorAction, u as NativeBehaviorEvent } from "../_chunks-dts/behavior.types.action.js";
1
+ import { a as forward, b as defineBehavior, c as BehaviorEvent, d as InsertPlacement, f as NativeBehaviorEvent, i as execute, l as CustomBehaviorEvent, n as BehaviorActionSet, o as raise, p as SyntheticBehaviorEvent, r as effect, t as BehaviorAction, x as BehaviorGuard, y as Behavior } from "../_chunks-dts/behavior.types.action.js";
2
2
  export { type Behavior, type BehaviorAction, type BehaviorActionSet, type BehaviorEvent, type BehaviorGuard, type CustomBehaviorEvent, type InsertPlacement, type NativeBehaviorEvent, type SyntheticBehaviorEvent, defineBehavior, effect, execute, forward, raise };
package/lib/index.d.ts CHANGED
@@ -1,2 +1,67 @@
1
- import { $ as EditorContext, $t as SpanRender, A as PortableTextTextBlock, At as HotkeyOptions, B as EditorSelector, Bt as RegisteredPositional, C as ListDefinition, Ct as RenderEditableFunction, D as PortableTextChild, Dt as ScrollSelectionIntoViewFunction, E as PortableTextBlock, Et as RenderStyleFunction, F as BlockOffset, Ft as EditorSchema, G as EditorConfig, Gt as Container, H as EditorProvider, Ht as BlockObject, I as useEditor, It as Containers, J as MutationEvent, Jt as InlineObject, K as EditorEvent, Kt as ContainerRender, L as defaultKeyGenerator, Lt as RegisteredBlockObject, M as StyleDefinition, Mt as resolveContainerAt, N as StyleSchemaType, O as PortableTextObject, Ot as PortableTextEditable, P as defineSchema, Qt as Span, R as usePortableTextEditorSelection, Rt as RegisteredContainer, S as InlineObjectSchemaType, St as RenderDecoratorFunction, T as Patch, Tt as RenderPlaceholderFunction, U as EditorProviderProps, Ut as BlockObjectRender, V as useEditorSelector, Vt as RegisteredSpan, W as Editor, Wt as BlockObjectRenderProps, Xt as InlineObjectRenderProps, Y as Operation, Yt as InlineObjectRender, Zt as RegistrableNode, _ as BlockObjectSchemaType, _t as RangeDecoration, an as defineContainer, at as BlockListItemRenderProps, b as FieldDefinition, bt as RenderBlockFunction, cn as defineTextBlock, ct as EditableAPIDeleteOptions, dn as ChildPath, dt as InvalidValueResolution, en as SpanRenderProps, et as EditorSnapshot, f as PatchesEvent, ft as OnCopyFn, g as BlockObjectDefinition, gt as PasteData, h as BaseDefinition, ht as OnPasteResultOrPromise, in as defineBlockObject, it as BlockDecoratorRenderProps, j as SchemaDefinition, jt as PortableTextEditor, k as PortableTextSpan, kt as PortableTextEditableProps, ln as AnnotationPath, lt as EditorSelection, m as AnnotationSchemaType, mt as OnPasteResult, nn as TextBlockRender, nt as BlockAnnotationRenderProps, on as defineInlineObject, ot as BlockRenderProps, p as AnnotationDefinition, pn as Path, pt as OnPasteFn, q as EditorEmittedEvent, qt as ContainerRenderProps, rn as TextBlockRenderProps, rt as BlockChildRenderProps, sn as defineSpan, st as BlockStyleRenderProps, tn as TextBlock, tt as AddedAnnotationPaths, un as BlockPath, ut as EditorSelectionPoint, v as DecoratorDefinition, vt as RangeDecorationOnMovedDetails, w as ListSchemaType, wt as RenderListItemFunction, x as InlineObjectDefinition, xt as RenderChildFunction, y as DecoratorSchemaType, yt as RenderAnnotationFunction, z as usePortableTextEditor, zt as RegisteredInlineObject } from "./_chunks-dts/behavior.types.action.js";
2
- export { AddedAnnotationPaths, AnnotationDefinition, AnnotationPath, AnnotationSchemaType, BaseDefinition, BlockAnnotationRenderProps, BlockChildRenderProps, BlockDecoratorRenderProps, BlockListItemRenderProps, BlockObject, BlockObjectDefinition, BlockObjectRender, BlockObjectRenderProps, BlockObjectSchemaType, BlockOffset, BlockPath, BlockRenderProps, BlockStyleRenderProps, ChildPath, Container, ContainerRender, ContainerRenderProps, Containers, DecoratorDefinition, DecoratorSchemaType, EditableAPIDeleteOptions, Editor, EditorConfig, EditorContext, EditorEmittedEvent, EditorEvent, EditorProvider, EditorProviderProps, EditorSchema, EditorSelection, EditorSelectionPoint, EditorSelector, EditorSnapshot, FieldDefinition, HotkeyOptions, InlineObject, InlineObjectDefinition, InlineObjectRender, InlineObjectRenderProps, InlineObjectSchemaType, InvalidValueResolution, ListDefinition, ListSchemaType, MutationEvent, OnCopyFn, OnPasteFn, OnPasteResult, OnPasteResultOrPromise, Operation, PasteData, Patch, PatchesEvent, Path, PortableTextBlock, PortableTextChild, PortableTextEditable, PortableTextEditableProps, PortableTextEditor, PortableTextObject, PortableTextSpan, PortableTextTextBlock, RangeDecoration, RangeDecorationOnMovedDetails, RegisteredBlockObject, RegisteredContainer, RegisteredInlineObject, RegisteredPositional, RegisteredSpan, RegistrableNode, RenderAnnotationFunction, RenderBlockFunction, RenderChildFunction, RenderDecoratorFunction, RenderEditableFunction, RenderListItemFunction, RenderPlaceholderFunction, RenderStyleFunction, SchemaDefinition, ScrollSelectionIntoViewFunction, Span, SpanRender, SpanRenderProps, StyleDefinition, StyleSchemaType, TextBlock, TextBlockRender, TextBlockRenderProps, defineBlockObject, defineContainer, defineInlineObject, defineSchema, defineSpan, defineTextBlock, defaultKeyGenerator as keyGenerator, resolveContainerAt, useEditor, useEditorSelector, usePortableTextEditor, usePortableTextEditorSelection };
1
+ import { $ as HotkeyOptions, A as BlockStyleRenderProps, At as defineSpan, B as RangeDecoration, C as EditorSnapshot, Ct as SpanRenderProps, D as BlockDecoratorRenderProps, Dt as defineBlockObject, E as BlockChildRenderProps, Et as TextBlockRenderProps, F as OnCopyFn, G as RenderDecoratorFunction, H as RenderAnnotationFunction, I as OnPasteFn, It as Path, J as RenderPlaceholderFunction, K as RenderEditableFunction, L as OnPasteResult, M as EditorSelection, Mt as AnnotationPath, N as EditorSelectionPoint, Nt as BlockPath, O as BlockListItemRenderProps, Ot as defineContainer, P as InvalidValueResolution, Pt as ChildPath, Q as PortableTextEditableProps, R as OnPasteResultOrPromise, S as EditorContext, St as SpanRender, T as BlockAnnotationRenderProps, Tt as TextBlockRender, U as RenderBlockFunction, V as RangeDecorationOnMovedDetails, W as RenderChildFunction, X as ScrollSelectionIntoViewFunction, Y as RenderStyleFunction, Z as PortableTextEditable, _ as MutationEvent, _t as InlineObject, at as Containers, bt as RegistrableNode, ct as RegisteredInlineObject, dt as BlockObject, et as PortableTextEditor, ft as BlockObjectRender, g as EditorEmittedEvent, gt as ContainerRenderProps, h as PatchesEvent, ht as ContainerRender, it as EditorSchema, j as EditableAPIDeleteOptions, jt as defineTextBlock, k as BlockRenderProps, kt as defineInlineObject, lt as RegisteredPositional, mt as Container, ot as RegisteredBlockObject, pt as BlockObjectRenderProps, q as RenderListItemFunction, st as RegisteredContainer, tt as resolveContainerAt, ut as RegisteredSpan, v as Operation, vt as InlineObjectRender, w as AddedAnnotationPaths, wt as TextBlock, xt as Span, yt as InlineObjectRenderProps, z as PasteData } from "./_chunks-dts/behavior.types.action.js";
2
+ import { n as EditorConfig, r as EditorEvent, t as Editor } from "./_chunks-dts/editor.js";
3
+ import { n as useEditorSelector, t as EditorSelector } from "./_chunks-dts/editor-selector.js";
4
+ import { t as BlockOffset } from "./_chunks-dts/block-offset.js";
5
+ import { AnnotationDefinition, AnnotationSchemaType, BaseDefinition, BlockObjectDefinition, BlockObjectSchemaType, DecoratorDefinition, DecoratorSchemaType, FieldDefinition, InlineObjectDefinition, InlineObjectSchemaType, ListDefinition, ListSchemaType, PortableTextBlock, PortableTextChild, PortableTextObject, PortableTextSpan, PortableTextTextBlock, SchemaDefinition, StyleDefinition, StyleSchemaType, defineSchema } from "@portabletext/schema";
6
+ import { Patch } from "@portabletext/patches";
7
+ import React from "react";
8
+ /**
9
+ * @public
10
+ */
11
+ type EditorProviderProps = {
12
+ initialConfig: EditorConfig;
13
+ children?: React.ReactNode;
14
+ };
15
+ /**
16
+ * @public
17
+ * The EditorProvider component is used to set up the editor context and configure the Portable Text Editor.
18
+ * @example
19
+ * ```tsx
20
+ * import {EditorProvider} from '@portabletext/editor'
21
+ *
22
+ * function App() {
23
+ * return (
24
+ * <EditorProvider initialConfig={{ ... }} >
25
+ * ...
26
+ * </EditorProvider>
27
+ * )
28
+ * }
29
+ *
30
+ * ```
31
+ * @group Components
32
+ */
33
+ declare function EditorProvider(props: EditorProviderProps): React.JSX.Element;
34
+ /**
35
+ * @deprecated Use `useEditor` to get the current editor instance.
36
+ * @public
37
+ * Get the current editor object from the React context.
38
+ */
39
+ declare const usePortableTextEditor: () => PortableTextEditor;
40
+ /**
41
+ * @deprecated Use `useEditorSelector` to get the current editor selection.
42
+ * @public
43
+ * Get the current editor selection from the React context.
44
+ */
45
+ declare const usePortableTextEditorSelection: () => EditorSelection;
46
+ /**
47
+ * @public
48
+ */
49
+ declare const defaultKeyGenerator: () => string;
50
+ /**
51
+ * @public
52
+ * Get the current editor context from the `EditorProvider`.
53
+ * Must be used inside the `EditorProvider` component.
54
+ * @returns The current editor object.
55
+ * @example
56
+ * ```tsx
57
+ * import { useEditor } from '@portabletext/editor'
58
+ *
59
+ * function MyComponent() {
60
+ * const editor = useEditor()
61
+ * }
62
+ * ```
63
+ * @group Hooks
64
+ */
65
+ declare function useEditor(): import("..").Editor;
66
+ export { type AddedAnnotationPaths, type AnnotationDefinition, type AnnotationPath, type AnnotationSchemaType, type BaseDefinition, type BlockAnnotationRenderProps, type BlockChildRenderProps, type BlockDecoratorRenderProps, type BlockListItemRenderProps, type BlockObject, type BlockObjectDefinition, type BlockObjectRender, type BlockObjectRenderProps, type BlockObjectSchemaType, type BlockOffset, type BlockPath, type BlockRenderProps, type BlockStyleRenderProps, type ChildPath, type Container, type ContainerRender, type ContainerRenderProps, type Containers, type DecoratorDefinition, type DecoratorSchemaType, type EditableAPIDeleteOptions, type Editor, type EditorConfig, type EditorContext, type EditorEmittedEvent, type EditorEvent, EditorProvider, type EditorProviderProps, type EditorSchema, type EditorSelection, type EditorSelectionPoint, type EditorSelector, type EditorSnapshot, type FieldDefinition, type HotkeyOptions, type InlineObject, type InlineObjectDefinition, type InlineObjectRender, type InlineObjectRenderProps, type InlineObjectSchemaType, type InvalidValueResolution, type ListDefinition, type ListSchemaType, type MutationEvent, type OnCopyFn, type OnPasteFn, type OnPasteResult, type OnPasteResultOrPromise, type Operation, type PasteData, type Patch, type PatchesEvent, type Path, type PortableTextBlock, type PortableTextChild, PortableTextEditable, type PortableTextEditableProps, PortableTextEditor, type PortableTextObject, type PortableTextSpan, type PortableTextTextBlock, type RangeDecoration, type RangeDecorationOnMovedDetails, type RegisteredBlockObject, type RegisteredContainer, type RegisteredInlineObject, type RegisteredPositional, type RegisteredSpan, type RegistrableNode, type RenderAnnotationFunction, type RenderBlockFunction, type RenderChildFunction, type RenderDecoratorFunction, type RenderEditableFunction, type RenderListItemFunction, type RenderPlaceholderFunction, type RenderStyleFunction, type SchemaDefinition, type ScrollSelectionIntoViewFunction, type Span, type SpanRender, type SpanRenderProps, type StyleDefinition, type StyleSchemaType, type TextBlock, type TextBlockRender, type TextBlockRenderProps, defineBlockObject, defineContainer, defineInlineObject, defineSchema, defineSpan, defineTextBlock, defaultKeyGenerator as keyGenerator, resolveContainerAt, useEditor, useEditorSelector, usePortableTextEditor, usePortableTextEditorSelection };
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/editor/editor-provider.tsx","../src/editor/usePortableTextEditor.ts","../src/editor/usePortableTextEditorSelection.tsx","../src/utils/key-generator.ts","../src/editor/use-editor.ts"],"mappings":";;;;;;;;;;KAeY,mBAAA;EACV,aAAA,EAAe,YAAA;EACf,QAAA,GAAW,KAAA,CAAM,SAAS;AAAA;;;;;;;;;;AAAA;AAqB5B;;;;;;;;iBAAgB,cAAA,CAAe,KAAA,EAAO,mBAAA,GAAmB,KAAA,CAAA,GAAA,CAAA,OAAA;;;;AAvBzD;;cCDa,qBAAA,QAA4B,kBAUxC;;;;;;cCdY,8BAAA,QAAqC,eAqBjD;;;;cC5BY,mBAAA;;;;;;;;;AHYb;;;;;;;iBIGgB,SAAA,iBAAS,MAAA"}