@portabletext/editor 2.5.0 → 2.6.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.
@@ -82,7 +82,7 @@ function parseTextBlock({
82
82
  return;
83
83
  const customFields = {};
84
84
  for (const key of Object.keys(block))
85
- key !== "_type" && key !== "_key" && key !== "children" && key !== "markDefs" && key !== "style" && key !== "listItem" && key !== "level" && (customFields[key] = block[key]);
85
+ 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]);
86
86
  if (block._type !== context.schema.block.name)
87
87
  return;
88
88
  const _key = options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator(), unparsedMarkDefs = Array.isArray(block.markDefs) ? block.markDefs : [], markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = unparsedMarkDefs.flatMap((markDef) => {
@@ -123,7 +123,7 @@ function parseTextBlock({
123
123
  marks: []
124
124
  }],
125
125
  markDefs,
126
- ...options.validateFields ? {} : customFields
126
+ ...customFields
127
127
  };
128
128
  if (typeof block.style == "string" && context.schema.styles.find((style) => style.name === block.style))
129
129
  parsedBlock.style = block.style;
@@ -1 +1 @@
1
- {"version":3,"file":"util.slice-blocks.cjs","sources":["../../src/utils/util.is-keyed-segment.ts","../../src/selection/selection-point.ts","../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts","../../src/utils/util.block-offset.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.get-text-block-text.ts","../../src/utils/util.is-span.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["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 '../utils/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 type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import 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 refreshKeys: 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 refreshKeys: 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: {refreshKeys: boolean; 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 isTextBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextTextBlock {\n if (!isTypedObject(block)) {\n return false\n }\n\n if (block._type !== context.schema.block.name) {\n return false\n }\n\n if (!Array.isArray(block.children)) {\n return false\n }\n\n return true\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean; validateFields: boolean}\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 customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : 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\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,\n ...(options.validateFields ? {} : 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 isSpan(\n context: Pick<EditorContext, 'schema'>,\n child: unknown,\n): child is PortableTextSpan {\n if (!isTypedObject(child)) {\n return false\n }\n\n if (child._type !== context.schema.span.name) {\n return false\n }\n\n if (typeof child.text !== 'string') {\n return false\n }\n\n return true\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: {refreshKeys: boolean; 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: options.refreshKeys\n ? context.keyGenerator()\n : typeof span._key === 'string'\n ? span._key\n : 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: {refreshKeys: boolean; 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: {refreshKeys: boolean; 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: {refreshKeys: boolean; 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: options.refreshKeys\n ? context.keyGenerator()\n : typeof object._key === 'string'\n ? object._key\n : context.keyGenerator(),\n ...values,\n }\n}\n","import type {EditorContext} from '../editor/editor-snapshot'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\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 {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\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 {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","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","import type {PortableTextChild, PortableTextSpan} from '@sanity/types'\nimport type {EditorContext} from '..'\n\n/**\n * @public\n */\nexport function isSpan(\n context: Pick<EditorContext, 'schema'>,\n child: PortableTextChild,\n): child is PortableTextSpan {\n return child._type === context.schema.span.name\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '..'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {getSelectionStartPoint} from '../utils/util.get-selection-start-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 (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(block)\n }\n }\n\n return [\n ...(startBlock ? [startBlock] : []),\n ...middleBlocks,\n ...(endBlock ? [endBlock] : []),\n ]\n}\n"],"names":["isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","path","at","_key","getChildKeyFromSelectionPoint","childPathSegment","isTypedObject","object","isRecord","_type","value","parseBlocks","context","blocks","options","Array","isArray","flatMap","block","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","isTextBlock","level","undefined","listItem","children","customFields","key","Object","keys","refreshKeys","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","child","parseSpan","span","parseInlineObject","inlineObject","filter","length","text","marks","validateFields","style","styles","defaultStyle","console","error","lists","list","isSpan","mark","markDefKey","get","decorators","some","decorator","inlineObjects","parseAnnotation","annotation","values","fields","reduce","fieldValues","field","fieldValue","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","offset","selectionPoint","skippedInlineObject","spanSelectionPointToBlockOffset","blockKey","spanKey","getBlockStartPoint","node","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","getTextBlockText","join","sliceBlocks","slice","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push"],"mappings":"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"}
1
+ {"version":3,"file":"util.slice-blocks.cjs","sources":["../../src/utils/util.is-keyed-segment.ts","../../src/selection/selection-point.ts","../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts","../../src/utils/util.block-offset.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.get-text-block-text.ts","../../src/utils/util.is-span.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["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 '../utils/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 type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import 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 refreshKeys: 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 refreshKeys: 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: {refreshKeys: boolean; 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 isTextBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextTextBlock {\n if (!isTypedObject(block)) {\n return false\n }\n\n if (block._type !== context.schema.block.name) {\n return false\n }\n\n if (!Array.isArray(block.children)) {\n return false\n }\n\n return true\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean; validateFields: boolean}\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 = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : 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\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,\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 isSpan(\n context: Pick<EditorContext, 'schema'>,\n child: unknown,\n): child is PortableTextSpan {\n if (!isTypedObject(child)) {\n return false\n }\n\n if (child._type !== context.schema.span.name) {\n return false\n }\n\n if (typeof child.text !== 'string') {\n return false\n }\n\n return true\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: {refreshKeys: boolean; 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: options.refreshKeys\n ? context.keyGenerator()\n : typeof span._key === 'string'\n ? span._key\n : 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: {refreshKeys: boolean; 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: {refreshKeys: boolean; 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: {refreshKeys: boolean; 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: options.refreshKeys\n ? context.keyGenerator()\n : typeof object._key === 'string'\n ? object._key\n : context.keyGenerator(),\n ...values,\n }\n}\n","import type {EditorContext} from '../editor/editor-snapshot'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\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 {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\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 {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","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","import type {PortableTextChild, PortableTextSpan} from '@sanity/types'\nimport type {EditorContext} from '..'\n\n/**\n * @public\n */\nexport function isSpan(\n context: Pick<EditorContext, 'schema'>,\n child: PortableTextChild,\n): child is PortableTextSpan {\n return child._type === context.schema.span.name\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '..'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {getSelectionStartPoint} from '../utils/util.get-selection-start-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 (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(block)\n }\n }\n\n return [\n ...(startBlock ? [startBlock] : []),\n ...middleBlocks,\n ...(endBlock ? [endBlock] : []),\n ]\n}\n"],"names":["isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","path","at","_key","getChildKeyFromSelectionPoint","childPathSegment","isTypedObject","object","isRecord","_type","value","parseBlocks","context","blocks","options","Array","isArray","flatMap","block","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","isTextBlock","level","undefined","listItem","children","customFields","key","Object","keys","validateFields","fields","some","field","refreshKeys","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","child","parseSpan","span","parseInlineObject","inlineObject","filter","length","text","marks","style","styles","defaultStyle","console","error","lists","list","isSpan","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","offset","selectionPoint","skippedInlineObject","spanSelectionPointToBlockOffset","blockKey","spanKey","getBlockStartPoint","node","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","getTextBlockText","join","sliceBlocks","slice","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { AnnotationDefinition, AnnotationSchemaType, BaseDefinition, BlockObject
6
6
  import * as xstate227 from "xstate";
7
7
  import { ActorRef, ActorRefFrom, EventObject, Snapshot } from "xstate";
8
8
  import { BaseRange, Descendant, Operation } from "slate";
9
- import * as react21 from "react";
9
+ import * as react20 from "react";
10
10
  import React$1, { BaseSyntheticEvent, ClipboardEvent, Component, FocusEvent, JSX, KeyboardEvent as KeyboardEvent$1, MutableRefObject, PropsWithChildren, ReactElement, RefObject, TextareaHTMLAttributes } from "react";
11
11
  import * as xstate_guards12 from "xstate/guards";
12
12
  import { Observable, Subject } from "rxjs";
@@ -215,7 +215,7 @@ declare class PortableTextEditor extends Component<PortableTextEditorProps<Inter
215
215
  componentDidUpdate(prevProps: PortableTextEditorProps): void;
216
216
  componentWillUnmount(): void;
217
217
  setEditable: (editable: EditableAPI) => void;
218
- render(): react21.JSX.Element;
218
+ render(): react20.JSX.Element;
219
219
  /**
220
220
  * @deprecated
221
221
  * Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/
@@ -609,7 +609,7 @@ type PortableTextEditableProps = Omit<TextareaHTMLAttributes<HTMLDivElement>, 'o
609
609
  * ```
610
610
  * @group Components
611
611
  */
612
- declare const PortableTextEditable: react21.ForwardRefExoticComponent<Omit<TextareaHTMLAttributes<HTMLDivElement>, "onPaste" | "onBeforeInput" | "onCopy"> & {
612
+ declare const PortableTextEditable: react20.ForwardRefExoticComponent<Omit<TextareaHTMLAttributes<HTMLDivElement>, "onPaste" | "onBeforeInput" | "onCopy"> & {
613
613
  hotkeys?: HotkeyOptions;
614
614
  onBeforeInput?: (event: InputEvent) => void;
615
615
  onPaste?: OnPasteFn;
@@ -625,7 +625,7 @@ declare const PortableTextEditable: react21.ForwardRefExoticComponent<Omit<Texta
625
625
  scrollSelectionIntoView?: ScrollSelectionIntoViewFunction;
626
626
  selection?: EditorSelection;
627
627
  spellCheck?: boolean;
628
- } & react21.RefAttributes<Omit<HTMLDivElement, "as" | "onPaste" | "onBeforeInput">>>;
628
+ } & react20.RefAttributes<Omit<HTMLDivElement, "as" | "onPaste" | "onBeforeInput">>>;
629
629
  type DecoratedRange = BaseRange & {
630
630
  rangeDecoration: RangeDecoration;
631
631
  };
@@ -1354,7 +1354,7 @@ declare const editorMachine: xstate227.StateMachine<{
1354
1354
  initialValue?: Array<PortableTextBlock>;
1355
1355
  }, xstate227.NonReducibleUnknown, InternalPatchEvent | MutationEvent | PatchesEvent | {
1356
1356
  type: "blurred";
1357
- event: react21.FocusEvent<HTMLDivElement, Element>;
1357
+ event: react20.FocusEvent<HTMLDivElement, Element>;
1358
1358
  } | {
1359
1359
  type: "done loading";
1360
1360
  } | {
@@ -1366,7 +1366,7 @@ declare const editorMachine: xstate227.StateMachine<{
1366
1366
  data: unknown;
1367
1367
  } | {
1368
1368
  type: "focused";
1369
- event: react21.FocusEvent<HTMLDivElement, Element>;
1369
+ event: react20.FocusEvent<HTMLDivElement, Element>;
1370
1370
  } | {
1371
1371
  type: "invalid value";
1372
1372
  resolution: InvalidValueResolution | null;
@@ -2022,7 +2022,7 @@ declare const editorMachine: xstate227.StateMachine<{
2022
2022
  type: "drop";
2023
2023
  }, undefined, never, never, never, never, InternalPatchEvent | MutationEvent | PatchesEvent | {
2024
2024
  type: "blurred";
2025
- event: react21.FocusEvent<HTMLDivElement, Element>;
2025
+ event: react20.FocusEvent<HTMLDivElement, Element>;
2026
2026
  } | {
2027
2027
  type: "done loading";
2028
2028
  } | {
@@ -2034,7 +2034,7 @@ declare const editorMachine: xstate227.StateMachine<{
2034
2034
  data: unknown;
2035
2035
  } | {
2036
2036
  type: "focused";
2037
- event: react21.FocusEvent<HTMLDivElement, Element>;
2037
+ event: react20.FocusEvent<HTMLDivElement, Element>;
2038
2038
  } | {
2039
2039
  type: "invalid value";
2040
2040
  resolution: InvalidValueResolution | null;
@@ -2905,7 +2905,7 @@ declare const editorMachine: xstate227.StateMachine<{
2905
2905
  type: "drop";
2906
2906
  }, undefined, never, never, never, never, InternalPatchEvent | MutationEvent | PatchesEvent | {
2907
2907
  type: "blurred";
2908
- event: react21.FocusEvent<HTMLDivElement, Element>;
2908
+ event: react20.FocusEvent<HTMLDivElement, Element>;
2909
2909
  } | {
2910
2910
  type: "done loading";
2911
2911
  } | {
@@ -2917,7 +2917,7 @@ declare const editorMachine: xstate227.StateMachine<{
2917
2917
  data: unknown;
2918
2918
  } | {
2919
2919
  type: "focused";
2920
- event: react21.FocusEvent<HTMLDivElement, Element>;
2920
+ event: react20.FocusEvent<HTMLDivElement, Element>;
2921
2921
  } | {
2922
2922
  type: "invalid value";
2923
2923
  resolution: InvalidValueResolution | null;
@@ -81,7 +81,7 @@ function parseTextBlock({
81
81
  return;
82
82
  const customFields = {};
83
83
  for (const key of Object.keys(block))
84
- key !== "_type" && key !== "_key" && key !== "children" && key !== "markDefs" && key !== "style" && key !== "listItem" && key !== "level" && (customFields[key] = block[key]);
84
+ 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]);
85
85
  if (block._type !== context.schema.block.name)
86
86
  return;
87
87
  const _key = options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator(), unparsedMarkDefs = Array.isArray(block.markDefs) ? block.markDefs : [], markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = unparsedMarkDefs.flatMap((markDef) => {
@@ -122,7 +122,7 @@ function parseTextBlock({
122
122
  marks: []
123
123
  }],
124
124
  markDefs,
125
- ...options.validateFields ? {} : customFields
125
+ ...customFields
126
126
  };
127
127
  if (typeof block.style == "string" && context.schema.styles.find((style) => style.name === block.style))
128
128
  parsedBlock.style = block.style;
@@ -1 +1 @@
1
- {"version":3,"file":"util.slice-blocks.js","sources":["../../src/utils/util.is-keyed-segment.ts","../../src/selection/selection-point.ts","../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts","../../src/utils/util.block-offset.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.get-text-block-text.ts","../../src/utils/util.is-span.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["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 '../utils/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 type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import 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 refreshKeys: 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 refreshKeys: 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: {refreshKeys: boolean; 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 isTextBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextTextBlock {\n if (!isTypedObject(block)) {\n return false\n }\n\n if (block._type !== context.schema.block.name) {\n return false\n }\n\n if (!Array.isArray(block.children)) {\n return false\n }\n\n return true\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean; validateFields: boolean}\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 customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : 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\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,\n ...(options.validateFields ? {} : 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 isSpan(\n context: Pick<EditorContext, 'schema'>,\n child: unknown,\n): child is PortableTextSpan {\n if (!isTypedObject(child)) {\n return false\n }\n\n if (child._type !== context.schema.span.name) {\n return false\n }\n\n if (typeof child.text !== 'string') {\n return false\n }\n\n return true\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: {refreshKeys: boolean; 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: options.refreshKeys\n ? context.keyGenerator()\n : typeof span._key === 'string'\n ? span._key\n : 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: {refreshKeys: boolean; 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: {refreshKeys: boolean; 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: {refreshKeys: boolean; 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: options.refreshKeys\n ? context.keyGenerator()\n : typeof object._key === 'string'\n ? object._key\n : context.keyGenerator(),\n ...values,\n }\n}\n","import type {EditorContext} from '../editor/editor-snapshot'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\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 {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\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 {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","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","import type {PortableTextChild, PortableTextSpan} from '@sanity/types'\nimport type {EditorContext} from '..'\n\n/**\n * @public\n */\nexport function isSpan(\n context: Pick<EditorContext, 'schema'>,\n child: PortableTextChild,\n): child is PortableTextSpan {\n return child._type === context.schema.span.name\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '..'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {getSelectionStartPoint} from '../utils/util.get-selection-start-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 (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(block)\n }\n }\n\n return [\n ...(startBlock ? [startBlock] : []),\n ...middleBlocks,\n ...(endBlock ? [endBlock] : []),\n ]\n}\n"],"names":["isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","path","at","_key","getChildKeyFromSelectionPoint","childPathSegment","isTypedObject","object","isRecord","_type","value","parseBlocks","context","blocks","options","Array","isArray","flatMap","block","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","isTextBlock","level","undefined","listItem","children","customFields","key","Object","keys","refreshKeys","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","child","parseSpan","span","parseInlineObject","inlineObject","filter","length","text","marks","validateFields","style","styles","defaultStyle","console","error","lists","list","isSpan","mark","markDefKey","get","decorators","some","decorator","inlineObjects","parseAnnotation","annotation","values","fields","reduce","fieldValues","field","fieldValue","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","offset","selectionPoint","skippedInlineObject","spanSelectionPointToBlockOffset","blockKey","spanKey","getBlockStartPoint","node","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","getTextBlockText","join","sliceBlocks","slice","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push"],"mappings":"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"}
1
+ {"version":3,"file":"util.slice-blocks.js","sources":["../../src/utils/util.is-keyed-segment.ts","../../src/selection/selection-point.ts","../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts","../../src/utils/util.block-offset.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.get-text-block-text.ts","../../src/utils/util.is-span.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["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 '../utils/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 type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import 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 refreshKeys: 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 refreshKeys: 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: {refreshKeys: boolean; 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 isTextBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextTextBlock {\n if (!isTypedObject(block)) {\n return false\n }\n\n if (block._type !== context.schema.block.name) {\n return false\n }\n\n if (!Array.isArray(block.children)) {\n return false\n }\n\n return true\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean; validateFields: boolean}\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 = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : 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\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,\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 isSpan(\n context: Pick<EditorContext, 'schema'>,\n child: unknown,\n): child is PortableTextSpan {\n if (!isTypedObject(child)) {\n return false\n }\n\n if (child._type !== context.schema.span.name) {\n return false\n }\n\n if (typeof child.text !== 'string') {\n return false\n }\n\n return true\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: {refreshKeys: boolean; 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: options.refreshKeys\n ? context.keyGenerator()\n : typeof span._key === 'string'\n ? span._key\n : 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: {refreshKeys: boolean; 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: {refreshKeys: boolean; 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: {refreshKeys: boolean; 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: options.refreshKeys\n ? context.keyGenerator()\n : typeof object._key === 'string'\n ? object._key\n : context.keyGenerator(),\n ...values,\n }\n}\n","import type {EditorContext} from '../editor/editor-snapshot'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\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 {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTextBlock} from '../internal-utils/parse-blocks'\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 {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","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","import type {PortableTextChild, PortableTextSpan} from '@sanity/types'\nimport type {EditorContext} from '..'\n\n/**\n * @public\n */\nexport function isSpan(\n context: Pick<EditorContext, 'schema'>,\n child: PortableTextChild,\n): child is PortableTextSpan {\n return child._type === context.schema.span.name\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '..'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {getSelectionStartPoint} from '../utils/util.get-selection-start-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 (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(block)\n }\n }\n\n return [\n ...(startBlock ? [startBlock] : []),\n ...middleBlocks,\n ...(endBlock ? [endBlock] : []),\n ]\n}\n"],"names":["isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","path","at","_key","getChildKeyFromSelectionPoint","childPathSegment","isTypedObject","object","isRecord","_type","value","parseBlocks","context","blocks","options","Array","isArray","flatMap","block","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","isTextBlock","level","undefined","listItem","children","customFields","key","Object","keys","validateFields","fields","some","field","refreshKeys","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","child","parseSpan","span","parseInlineObject","inlineObject","filter","length","text","marks","style","styles","defaultStyle","console","error","lists","list","isSpan","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","offset","selectionPoint","skippedInlineObject","spanSelectionPointToBlockOffset","blockKey","spanKey","getBlockStartPoint","node","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","getTextBlockText","join","sliceBlocks","slice","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Behavior, Editor, EditorEmittedEvent, EditorSchema } from "../_chunks-dts/behavior.types.action.js";
2
- import * as react21 from "react";
2
+ import * as react22 from "react";
3
3
  import React from "react";
4
4
  /**
5
5
  * @beta
@@ -181,7 +181,7 @@ type MarkdownPluginConfig = MarkdownBehaviorsConfig & {
181
181
  */
182
182
  declare function MarkdownPlugin(props: {
183
183
  config: MarkdownPluginConfig;
184
- }): react21.JSX.Element;
184
+ }): react22.JSX.Element;
185
185
  /**
186
186
  * @beta
187
187
  * Restrict the editor to one line. The plugin takes care of blocking
@@ -192,5 +192,5 @@ declare function MarkdownPlugin(props: {
192
192
  *
193
193
  * @deprecated Install the plugin from `@portabletext/plugin-one-line`
194
194
  */
195
- declare function OneLinePlugin(): react21.JSX.Element;
195
+ declare function OneLinePlugin(): react22.JSX.Element;
196
196
  export { BehaviorPlugin, DecoratorShortcutPlugin, EditorRefPlugin, EventListenerPlugin, MarkdownPlugin, type MarkdownPluginConfig, OneLinePlugin };
@@ -1,5 +1,5 @@
1
1
  import { BlockOffset, BlockPath, ChildPath, EditorContext, EditorSelection, EditorSelectionPoint } from "../_chunks-dts/behavior.types.action.js";
2
- import * as _sanity_types9 from "@sanity/types";
2
+ import * as _sanity_types8 from "@sanity/types";
3
3
  import { KeyedSegment, PortableTextBlock, PortableTextChild, PortableTextSpan, PortableTextTextBlock } from "@sanity/types";
4
4
  /**
5
5
  * @public
@@ -150,7 +150,7 @@ declare function mergeTextBlocks({
150
150
  context: Pick<EditorContext, 'keyGenerator' | 'schema'>;
151
151
  targetBlock: PortableTextTextBlock;
152
152
  incomingBlock: PortableTextTextBlock;
153
- }): PortableTextTextBlock<_sanity_types9.PortableTextObject | _sanity_types9.PortableTextSpan>;
153
+ }): PortableTextTextBlock<_sanity_types8.PortableTextObject | _sanity_types8.PortableTextSpan>;
154
154
  /**
155
155
  * @public
156
156
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portabletext/editor",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "Portable Text Editor made in React",
5
5
  "keywords": [
6
6
  "sanity",
@@ -79,10 +79,10 @@
79
79
  "slate-dom": "^0.117.4",
80
80
  "slate-react": "0.117.4",
81
81
  "xstate": "^5.20.2",
82
- "@portabletext/block-tools": "^3.3.1",
83
- "@portabletext/patches": "^1.1.8",
82
+ "@portabletext/block-tools": "^3.3.2",
84
83
  "@portabletext/keyboard-shortcuts": "^1.1.1",
85
- "@portabletext/schema": "^1.0.1"
84
+ "@portabletext/patches": "^1.1.8",
85
+ "@portabletext/schema": "^1.1.0"
86
86
  },
87
87
  "devDependencies": {
88
88
  "@sanity/diff-match-patch": "^3.2.0",
@@ -111,11 +111,11 @@
111
111
  "vite": "^7.1.3",
112
112
  "vitest": "^3.2.4",
113
113
  "vitest-browser-react": "^1.0.1",
114
- "@portabletext/sanity-bridge": "1.1.3",
114
+ "@portabletext/sanity-bridge": "1.1.4",
115
115
  "racejar": "1.2.14"
116
116
  },
117
117
  "peerDependencies": {
118
- "@portabletext/sanity-bridge": "^1.0.0",
118
+ "@portabletext/sanity-bridge": "^1.1.4",
119
119
  "@sanity/schema": "^4.5.0",
120
120
  "@sanity/types": "^4.5.0",
121
121
  "react": "^18.3 || ^19",
@@ -280,6 +280,95 @@ describe(parseBlock.name, () => {
280
280
  style: 'normal',
281
281
  })
282
282
  })
283
+
284
+ describe('validating custom fields', () => {
285
+ test('none defined', () => {
286
+ expect(
287
+ parseBlock({
288
+ block: {_type: 'block', map: {}},
289
+ context: {
290
+ keyGenerator: createTestKeyGenerator(),
291
+ schema: compileSchema(defineSchema({})),
292
+ },
293
+ options: {refreshKeys: false, validateFields: true},
294
+ }),
295
+ ).toEqual({
296
+ _type: 'block',
297
+ _key: 'k0',
298
+ children: [
299
+ {
300
+ _key: 'k1',
301
+ _type: 'span',
302
+ text: '',
303
+ marks: [],
304
+ },
305
+ ],
306
+ markDefs: [],
307
+ style: 'normal',
308
+ })
309
+ })
310
+
311
+ test('field defined', () => {
312
+ expect(
313
+ parseBlock({
314
+ block: {_type: 'block', map: {}},
315
+ context: {
316
+ keyGenerator: createTestKeyGenerator(),
317
+ schema: compileSchema(
318
+ defineSchema({
319
+ block: {fields: [{name: 'map', type: 'object'}]},
320
+ }),
321
+ ),
322
+ },
323
+ options: {refreshKeys: false, validateFields: true},
324
+ }),
325
+ ).toEqual({
326
+ _type: 'block',
327
+ _key: 'k0',
328
+ map: {},
329
+ children: [
330
+ {
331
+ _key: 'k1',
332
+ _type: 'span',
333
+ text: '',
334
+ marks: [],
335
+ },
336
+ ],
337
+ markDefs: [],
338
+ style: 'normal',
339
+ })
340
+ })
341
+
342
+ test('different field defined', () => {
343
+ expect(
344
+ parseBlock({
345
+ block: {_type: 'block', foo: {}},
346
+ context: {
347
+ keyGenerator: createTestKeyGenerator(),
348
+ schema: compileSchema(
349
+ defineSchema({
350
+ block: {fields: [{name: 'map', type: 'object'}]},
351
+ }),
352
+ ),
353
+ },
354
+ options: {refreshKeys: false, validateFields: true},
355
+ }),
356
+ ).toEqual({
357
+ _type: 'block',
358
+ _key: 'k0',
359
+ children: [
360
+ {
361
+ _key: 'k1',
362
+ _type: 'span',
363
+ text: '',
364
+ marks: [],
365
+ },
366
+ ],
367
+ markDefs: [],
368
+ style: 'normal',
369
+ })
370
+ })
371
+ })
283
372
  })
284
373
  })
285
374
 
@@ -129,14 +129,22 @@ export function parseTextBlock({
129
129
 
130
130
  for (const key of Object.keys(block)) {
131
131
  if (
132
- key !== '_type' &&
133
- key !== '_key' &&
134
- key !== 'children' &&
135
- key !== 'markDefs' &&
136
- key !== 'style' &&
137
- key !== 'listItem' &&
138
- key !== 'level'
132
+ key === '_type' ||
133
+ key === '_key' ||
134
+ key === 'children' ||
135
+ key === 'markDefs' ||
136
+ key === 'style' ||
137
+ key === 'listItem' ||
138
+ key === 'level'
139
139
  ) {
140
+ continue
141
+ }
142
+
143
+ if (options.validateFields) {
144
+ if (context.schema.block.fields?.some((field) => field.name === key)) {
145
+ customFields[key] = block[key]
146
+ }
147
+ } else {
140
148
  customFields[key] = block[key]
141
149
  }
142
150
  }
@@ -219,7 +227,7 @@ export function parseTextBlock({
219
227
  },
220
228
  ],
221
229
  markDefs,
222
- ...(options.validateFields ? {} : customFields),
230
+ ...customFields,
223
231
  }
224
232
 
225
233
  if (