@portabletext/editor 2.17.1 → 2.17.2

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.
@@ -1,9 +1,5 @@
1
1
  "use strict";
2
- var schema = require("@portabletext/schema"), getRandomValues = require("get-random-values-esm");
3
- function _interopDefaultCompat(e) {
4
- return e && typeof e == "object" && "default" in e ? e : { default: e };
5
- }
6
- var getRandomValues__default = /* @__PURE__ */ _interopDefaultCompat(getRandomValues);
2
+ var schema = require("@portabletext/schema");
7
3
  function getBlockStartPoint({
8
4
  context,
9
5
  block
@@ -322,7 +318,7 @@ const defaultKeyGenerator = () => randomKey(12), getByteHexTable = /* @__PURE__
322
318
  })();
323
319
  function whatwgRNG(length = 16) {
324
320
  const rnds8 = new Uint8Array(length);
325
- return getRandomValues__default.default(rnds8), rnds8;
321
+ return crypto.getRandomValues(rnds8), rnds8;
326
322
  }
327
323
  function randomKey(length) {
328
324
  const table = getByteHexTable();
@@ -1 +1 @@
1
- {"version":3,"file":"util.get-text-block-text.cjs","sources":["../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-keyed-segment.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/asserters.ts","../../src/utils/parse-blocks.ts","../../src/utils/key-generator.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.slice-blocks.ts","../../src/utils/util.get-text-block-text.ts"],"sourcesContent":["import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n return {\n path: [...block.path, 'children', {_key: block.node.children[0]._key}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {KeyedSegment} from '@sanity/types'\n\n/**\n * @public\n */\nexport function isKeyedSegment(segment: unknown): segment is KeyedSegment {\n return typeof segment === 'object' && segment !== null && '_key' in segment\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n context,\n blockOffset,\n direction,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const block of context.value) {\n if (block._key !== blockOffset.path[0]._key) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n break\n }\n\n offsetLeft -= child.text.length\n\n continue\n }\n\n if (!isSpan(context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n if (skippedInlineObject) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: 0,\n }\n }\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n context,\n selectionPoint,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n let offset = 0\n\n const blockKey = getBlockKeyFromSelectionPoint(selectionPoint)\n const spanKey = getChildKeyFromSelectionPoint(selectionPoint)\n\n if (!blockKey || !spanKey) {\n return undefined\n }\n\n for (const block of context.value) {\n if (block._key !== blockKey) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (child._key === spanKey) {\n return {\n path: [{_key: block._key}],\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n }\n}\n","import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nexport function parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if (context.schema.block.fields?.some((field) => field.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key =\n typeof block._key === 'string' ? block._key : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n const marks = children.flatMap((child) => child.marks ?? [])\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs,\n ...customFields,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: typeof span._key === 'string' ? span._key : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_type, _key, ...customFields} = object\n\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = options.validateFields\n ? context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n : customFields\n\n return {\n _type: context.schemaType.name,\n _key:\n typeof object._key === 'string' ? object._key : context.keyGenerator(),\n ...values,\n }\n}\n","import getRandomValues from 'get-random-values-esm'\n\n/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {parseBlock} from './parse-blocks'\nimport {getSelectionEndPoint} from './util.get-selection-end-point'\nimport {getSelectionStartPoint} from './util.get-selection-start-point'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'>\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: startBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: endBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\n\n/**\n * @public\n */\nexport function getTextBlockText(block: PortableTextTextBlock) {\n return block.children.map((child) => child.text ?? '').join('')\n}\n"],"names":["getBlockStartPoint","context","block","isTextBlock","node","path","_key","children","offset","isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","at","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","selectionPoint","skippedInlineObject","value","child","isSpan","text","length","spanSelectionPointToBlockOffset","blockKey","spanKey","isTypedObject","object","isRecord","_type","parseBlocks","blocks","options","Array","isArray","flatMap","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","level","undefined","listItem","customFields","key","Object","keys","validateFields","fields","some","field","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","parseSpan","span","parseInlineObject","inlineObject","filter","marks","removeUnusedMarkDefs","includes","style","styles","defaultStyle","console","error","lists","list","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","getRandomValues","str","n","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock","getTextBlockText","join"],"mappings":"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"}
1
+ {"version":3,"file":"util.get-text-block-text.cjs","sources":["../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-keyed-segment.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/asserters.ts","../../src/utils/parse-blocks.ts","../../src/utils/key-generator.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.slice-blocks.ts","../../src/utils/util.get-text-block-text.ts"],"sourcesContent":["import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n return {\n path: [...block.path, 'children', {_key: block.node.children[0]._key}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {KeyedSegment} from '@sanity/types'\n\n/**\n * @public\n */\nexport function isKeyedSegment(segment: unknown): segment is KeyedSegment {\n return typeof segment === 'object' && segment !== null && '_key' in segment\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n context,\n blockOffset,\n direction,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const block of context.value) {\n if (block._key !== blockOffset.path[0]._key) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n break\n }\n\n offsetLeft -= child.text.length\n\n continue\n }\n\n if (!isSpan(context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n if (skippedInlineObject) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: 0,\n }\n }\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n context,\n selectionPoint,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n let offset = 0\n\n const blockKey = getBlockKeyFromSelectionPoint(selectionPoint)\n const spanKey = getChildKeyFromSelectionPoint(selectionPoint)\n\n if (!blockKey || !spanKey) {\n return undefined\n }\n\n for (const block of context.value) {\n if (block._key !== blockKey) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (child._key === spanKey) {\n return {\n path: [{_key: block._key}],\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n }\n}\n","import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nexport function parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if (context.schema.block.fields?.some((field) => field.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key =\n typeof block._key === 'string' ? block._key : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n const marks = children.flatMap((child) => child.marks ?? [])\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs,\n ...customFields,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: typeof span._key === 'string' ? span._key : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_type, _key, ...customFields} = object\n\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = options.validateFields\n ? context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n : customFields\n\n return {\n _type: context.schemaType.name,\n _key:\n typeof object._key === 'string' ? object._key : context.keyGenerator(),\n ...values,\n }\n}\n","/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n crypto.getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {parseBlock} from './parse-blocks'\nimport {getSelectionEndPoint} from './util.get-selection-end-point'\nimport {getSelectionStartPoint} from './util.get-selection-start-point'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'>\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: startBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: endBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\n\n/**\n * @public\n */\nexport function getTextBlockText(block: PortableTextTextBlock) {\n return block.children.map((child) => child.text ?? '').join('')\n}\n"],"names":["getBlockStartPoint","context","block","isTextBlock","node","path","_key","children","offset","isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","at","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","selectionPoint","skippedInlineObject","value","child","isSpan","text","length","spanSelectionPointToBlockOffset","blockKey","spanKey","isTypedObject","object","isRecord","_type","parseBlocks","blocks","options","Array","isArray","flatMap","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","level","undefined","listItem","customFields","key","Object","keys","validateFields","fields","some","field","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","parseSpan","span","parseInlineObject","inlineObject","filter","marks","removeUnusedMarkDefs","includes","style","styles","defaultStyle","console","error","lists","list","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","crypto","getRandomValues","str","n","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock","getTextBlockText","join"],"mappings":"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"}
@@ -1697,7 +1697,7 @@ declare const editorMachine: xstate229.StateMachine<{
1697
1697
  }, xstate229.AnyEventObject>;
1698
1698
  }) => {
1699
1699
  behaviors: Set<{
1700
- behavior: Behavior<"*" | "split" | `custom.${string}` | "annotation.add" | "annotation.remove" | "block.set" | "block.unset" | "child.set" | "child.unset" | "decorator.add" | "decorator.remove" | "delete" | "history.redo" | "history.undo" | "insert.block" | "insert.child" | "insert.text" | "move.backward" | "move.block" | "move.forward" | "select" | "annotation.set" | "annotation.toggle" | "decorator.toggle" | "delete.backward" | "delete.block" | "delete.child" | "delete.forward" | "delete.text" | "deserialize" | "deserialize.data" | "deserialization.success" | "deserialization.failure" | "insert.blocks" | "insert.break" | "insert.inline object" | "insert.soft break" | "insert.span" | "list item.add" | "list item.remove" | "list item.toggle" | "move.block down" | "move.block up" | "select.block" | "select.previous block" | "select.next block" | "serialize" | "serialize.data" | "serialization.success" | "serialization.failure" | "style.add" | "style.remove" | "style.toggle" | "clipboard.copy" | "clipboard.cut" | "clipboard.paste" | "drag.dragstart" | "drag.drag" | "drag.dragend" | "drag.dragenter" | "drag.dragover" | "drag.dragleave" | "drag.drop" | "input.*" | "keyboard.keydown" | "keyboard.keyup" | "mouse.click" | "style.*" | "history.*" | "split.*" | "delete.*" | "select.*" | "deserialize.*" | "serialize.*" | "annotation.*" | "block.*" | "child.*" | "decorator.*" | "insert.*" | "move.*" | "deserialization.*" | "list item.*" | "serialization.*" | "clipboard.*" | "drag.*" | "keyboard.*" | "mouse.*", true, {
1700
+ behavior: Behavior<"*" | "split" | `custom.${string}` | "annotation.add" | "annotation.remove" | "block.set" | "block.unset" | "child.set" | "child.unset" | "decorator.add" | "decorator.remove" | "delete" | "history.redo" | "history.undo" | "insert.block" | "insert.child" | "insert.text" | "move.backward" | "move.block" | "move.forward" | "select" | "annotation.set" | "annotation.toggle" | "decorator.toggle" | "delete.backward" | "delete.block" | "delete.child" | "delete.forward" | "delete.text" | "deserialize" | "deserialize.data" | "deserialization.success" | "deserialization.failure" | "insert.blocks" | "insert.break" | "insert.inline object" | "insert.soft break" | "insert.span" | "list item.add" | "list item.remove" | "list item.toggle" | "move.block down" | "move.block up" | "select.block" | "select.previous block" | "select.next block" | "serialize" | "serialize.data" | "serialization.success" | "serialization.failure" | "style.add" | "style.remove" | "style.toggle" | "clipboard.copy" | "clipboard.cut" | "clipboard.paste" | "drag.dragstart" | "drag.drag" | "drag.dragend" | "drag.dragenter" | "drag.dragover" | "drag.dragleave" | "drag.drop" | "input.*" | "keyboard.keydown" | "keyboard.keyup" | "mouse.click" | "history.*" | "split.*" | "delete.*" | "select.*" | "deserialize.*" | "serialize.*" | "annotation.*" | "block.*" | "child.*" | "decorator.*" | "insert.*" | "move.*" | "deserialization.*" | "list item.*" | "serialization.*" | "style.*" | "clipboard.*" | "drag.*" | "keyboard.*" | "mouse.*", true, {
1701
1701
  type: StrictExtract<"split" | "annotation.add" | "annotation.remove" | "block.set" | "block.unset" | "child.set" | "child.unset" | "decorator.add" | "decorator.remove" | "delete" | "history.redo" | "history.undo" | "insert.block" | "insert.child" | "insert.text" | "move.backward" | "move.block" | "move.forward" | "select" | "annotation.set" | "annotation.toggle" | "decorator.toggle" | "delete.backward" | "delete.block" | "delete.child" | "delete.forward" | "delete.text" | "deserialize" | "deserialize.data" | "deserialization.success" | "deserialization.failure" | "insert.blocks" | "insert.break" | "insert.inline object" | "insert.soft break" | "insert.span" | "list item.add" | "list item.remove" | "list item.toggle" | "move.block down" | "move.block up" | "select.block" | "select.previous block" | "select.next block" | "serialize" | "serialize.data" | "serialization.success" | "serialization.failure" | "style.add" | "style.remove" | "style.toggle", "annotation.add">;
1702
1702
  annotation: {
1703
1703
  name: string;
@@ -6,7 +6,7 @@ import { ActorRef, ActorRefFrom, EventObject, Snapshot } from "xstate";
6
6
  import * as react20 from "react";
7
7
  import React$1, { BaseSyntheticEvent, ClipboardEvent, Component, FocusEvent, JSX, KeyboardEvent as KeyboardEvent$1, MutableRefObject, PropsWithChildren, ReactElement, RefObject, TextareaHTMLAttributes } from "react";
8
8
  import { Patch, Patch as Patch$1 } from "@portabletext/patches";
9
- import * as _portabletext_schema6 from "@portabletext/schema";
9
+ import * as _portabletext_schema5 from "@portabletext/schema";
10
10
  import { AnnotationDefinition, AnnotationSchemaType, BaseDefinition, BlockObjectDefinition, BlockObjectSchemaType, DecoratorDefinition, DecoratorSchemaType, FieldDefinition, InlineObjectDefinition, InlineObjectSchemaType, ListDefinition, ListSchemaType, PortableTextObject as PortableTextObject$1, PortableTextSpan as PortableTextSpan$1, PortableTextTextBlock as PortableTextTextBlock$1, Schema, SchemaDefinition, SchemaDefinition as SchemaDefinition$1, StyleDefinition, StyleSchemaType, defineSchema } from "@portabletext/schema";
11
11
  import { Observable, Subject } from "rxjs";
12
12
  import { DOMNode } from "slate-dom";
@@ -1697,7 +1697,7 @@ declare const editorMachine: xstate229.StateMachine<{
1697
1697
  }, xstate229.AnyEventObject>;
1698
1698
  }) => {
1699
1699
  behaviors: Set<{
1700
- behavior: Behavior<"*" | "split" | `custom.${string}` | "annotation.add" | "annotation.remove" | "block.set" | "block.unset" | "child.set" | "child.unset" | "decorator.add" | "decorator.remove" | "delete" | "history.redo" | "history.undo" | "insert.block" | "insert.child" | "insert.text" | "move.backward" | "move.block" | "move.forward" | "select" | "annotation.set" | "annotation.toggle" | "decorator.toggle" | "delete.backward" | "delete.block" | "delete.child" | "delete.forward" | "delete.text" | "deserialize" | "deserialize.data" | "deserialization.success" | "deserialization.failure" | "insert.blocks" | "insert.break" | "insert.inline object" | "insert.soft break" | "insert.span" | "list item.add" | "list item.remove" | "list item.toggle" | "move.block down" | "move.block up" | "select.block" | "select.previous block" | "select.next block" | "serialize" | "serialize.data" | "serialization.success" | "serialization.failure" | "style.add" | "style.remove" | "style.toggle" | "clipboard.copy" | "clipboard.cut" | "clipboard.paste" | "drag.dragstart" | "drag.drag" | "drag.dragend" | "drag.dragenter" | "drag.dragover" | "drag.dragleave" | "drag.drop" | "input.*" | "keyboard.keydown" | "keyboard.keyup" | "mouse.click" | "history.*" | "split.*" | "delete.*" | "select.*" | "deserialize.*" | "serialize.*" | "annotation.*" | "block.*" | "child.*" | "decorator.*" | "insert.*" | "move.*" | "deserialization.*" | "list item.*" | "serialization.*" | "style.*" | "clipboard.*" | "drag.*" | "keyboard.*" | "mouse.*", true, {
1700
+ behavior: Behavior<"*" | "split" | `custom.${string}` | "annotation.add" | "annotation.remove" | "block.set" | "block.unset" | "child.set" | "child.unset" | "decorator.add" | "decorator.remove" | "delete" | "history.redo" | "history.undo" | "insert.block" | "insert.child" | "insert.text" | "move.backward" | "move.block" | "move.forward" | "select" | "annotation.set" | "annotation.toggle" | "decorator.toggle" | "delete.backward" | "delete.block" | "delete.child" | "delete.forward" | "delete.text" | "deserialize" | "deserialize.data" | "deserialization.success" | "deserialization.failure" | "insert.blocks" | "insert.break" | "insert.inline object" | "insert.soft break" | "insert.span" | "list item.add" | "list item.remove" | "list item.toggle" | "move.block down" | "move.block up" | "select.block" | "select.previous block" | "select.next block" | "serialize" | "serialize.data" | "serialization.success" | "serialization.failure" | "style.add" | "style.remove" | "style.toggle" | "clipboard.copy" | "clipboard.cut" | "clipboard.paste" | "drag.dragstart" | "drag.drag" | "drag.dragend" | "drag.dragenter" | "drag.dragover" | "drag.dragleave" | "drag.drop" | "input.*" | "keyboard.keydown" | "keyboard.keyup" | "mouse.click" | "style.*" | "history.*" | "split.*" | "delete.*" | "select.*" | "deserialize.*" | "serialize.*" | "annotation.*" | "block.*" | "child.*" | "decorator.*" | "insert.*" | "move.*" | "deserialization.*" | "list item.*" | "serialization.*" | "clipboard.*" | "drag.*" | "keyboard.*" | "mouse.*", true, {
1701
1701
  type: StrictExtract<"split" | "annotation.add" | "annotation.remove" | "block.set" | "block.unset" | "child.set" | "child.unset" | "decorator.add" | "decorator.remove" | "delete" | "history.redo" | "history.undo" | "insert.block" | "insert.child" | "insert.text" | "move.backward" | "move.block" | "move.forward" | "select" | "annotation.set" | "annotation.toggle" | "decorator.toggle" | "delete.backward" | "delete.block" | "delete.child" | "delete.forward" | "delete.text" | "deserialize" | "deserialize.data" | "deserialization.success" | "deserialization.failure" | "insert.blocks" | "insert.break" | "insert.inline object" | "insert.soft break" | "insert.span" | "list item.add" | "list item.remove" | "list item.toggle" | "move.block down" | "move.block up" | "select.block" | "select.previous block" | "select.next block" | "serialize" | "serialize.data" | "serialization.success" | "serialization.failure" | "style.add" | "style.remove" | "style.toggle", "annotation.add">;
1702
1702
  annotation: {
1703
1703
  name: string;
@@ -1982,7 +1982,7 @@ declare const editorMachine: xstate229.StateMachine<{
1982
1982
  keyGenerator: () => string;
1983
1983
  pendingEvents: never[];
1984
1984
  pendingIncomingPatchesEvents: never[];
1985
- schema: _portabletext_schema6.Schema;
1985
+ schema: _portabletext_schema5.Schema;
1986
1986
  selection: null;
1987
1987
  initialReadOnly: boolean;
1988
1988
  maxBlocks: number | undefined;
@@ -1,5 +1,4 @@
1
1
  import { isTextBlock, isSpan } from "@portabletext/schema";
2
- import getRandomValues from "get-random-values-esm";
3
2
  function getBlockStartPoint({
4
3
  context,
5
4
  block
@@ -318,7 +317,7 @@ const defaultKeyGenerator = () => randomKey(12), getByteHexTable = /* @__PURE__
318
317
  })();
319
318
  function whatwgRNG(length = 16) {
320
319
  const rnds8 = new Uint8Array(length);
321
- return getRandomValues(rnds8), rnds8;
320
+ return crypto.getRandomValues(rnds8), rnds8;
322
321
  }
323
322
  function randomKey(length) {
324
323
  const table = getByteHexTable();
@@ -1 +1 @@
1
- {"version":3,"file":"util.get-text-block-text.js","sources":["../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-keyed-segment.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/asserters.ts","../../src/utils/parse-blocks.ts","../../src/utils/key-generator.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.slice-blocks.ts","../../src/utils/util.get-text-block-text.ts"],"sourcesContent":["import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n return {\n path: [...block.path, 'children', {_key: block.node.children[0]._key}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {KeyedSegment} from '@sanity/types'\n\n/**\n * @public\n */\nexport function isKeyedSegment(segment: unknown): segment is KeyedSegment {\n return typeof segment === 'object' && segment !== null && '_key' in segment\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n context,\n blockOffset,\n direction,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const block of context.value) {\n if (block._key !== blockOffset.path[0]._key) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n break\n }\n\n offsetLeft -= child.text.length\n\n continue\n }\n\n if (!isSpan(context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n if (skippedInlineObject) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: 0,\n }\n }\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n context,\n selectionPoint,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n let offset = 0\n\n const blockKey = getBlockKeyFromSelectionPoint(selectionPoint)\n const spanKey = getChildKeyFromSelectionPoint(selectionPoint)\n\n if (!blockKey || !spanKey) {\n return undefined\n }\n\n for (const block of context.value) {\n if (block._key !== blockKey) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (child._key === spanKey) {\n return {\n path: [{_key: block._key}],\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n }\n}\n","import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nexport function parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if (context.schema.block.fields?.some((field) => field.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key =\n typeof block._key === 'string' ? block._key : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n const marks = children.flatMap((child) => child.marks ?? [])\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs,\n ...customFields,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: typeof span._key === 'string' ? span._key : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_type, _key, ...customFields} = object\n\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = options.validateFields\n ? context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n : customFields\n\n return {\n _type: context.schemaType.name,\n _key:\n typeof object._key === 'string' ? object._key : context.keyGenerator(),\n ...values,\n }\n}\n","import getRandomValues from 'get-random-values-esm'\n\n/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {parseBlock} from './parse-blocks'\nimport {getSelectionEndPoint} from './util.get-selection-end-point'\nimport {getSelectionStartPoint} from './util.get-selection-start-point'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'>\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: startBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: endBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\n\n/**\n * @public\n */\nexport function getTextBlockText(block: PortableTextTextBlock) {\n return block.children.map((child) => child.text ?? '').join('')\n}\n"],"names":["getBlockStartPoint","context","block","isTextBlock","node","path","_key","children","offset","isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","at","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","selectionPoint","skippedInlineObject","value","child","isSpan","text","length","spanSelectionPointToBlockOffset","blockKey","spanKey","isTypedObject","object","isRecord","_type","parseBlocks","blocks","options","Array","isArray","flatMap","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","level","undefined","listItem","customFields","key","Object","keys","validateFields","fields","some","field","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","parseSpan","span","parseInlineObject","inlineObject","filter","marks","removeUnusedMarkDefs","includes","style","styles","defaultStyle","console","error","lists","list","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","getRandomValues","str","n","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock","getTextBlockText","join"],"mappings":"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"}
1
+ {"version":3,"file":"util.get-text-block-text.js","sources":["../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-keyed-segment.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/asserters.ts","../../src/utils/parse-blocks.ts","../../src/utils/key-generator.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.slice-blocks.ts","../../src/utils/util.get-text-block-text.ts"],"sourcesContent":["import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n return {\n path: [...block.path, 'children', {_key: block.node.children[0]._key}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {KeyedSegment} from '@sanity/types'\n\n/**\n * @public\n */\nexport function isKeyedSegment(segment: unknown): segment is KeyedSegment {\n return typeof segment === 'object' && segment !== null && '_key' in segment\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n context,\n blockOffset,\n direction,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const block of context.value) {\n if (block._key !== blockOffset.path[0]._key) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n break\n }\n\n offsetLeft -= child.text.length\n\n continue\n }\n\n if (!isSpan(context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n if (skippedInlineObject) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: 0,\n }\n }\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n context,\n selectionPoint,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n let offset = 0\n\n const blockKey = getBlockKeyFromSelectionPoint(selectionPoint)\n const spanKey = getChildKeyFromSelectionPoint(selectionPoint)\n\n if (!blockKey || !spanKey) {\n return undefined\n }\n\n for (const block of context.value) {\n if (block._key !== blockKey) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (child._key === spanKey) {\n return {\n path: [{_key: block._key}],\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n }\n}\n","import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nexport function parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if (context.schema.block.fields?.some((field) => field.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key =\n typeof block._key === 'string' ? block._key : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n const marks = children.flatMap((child) => child.marks ?? [])\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs,\n ...customFields,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: typeof span._key === 'string' ? span._key : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_type, _key, ...customFields} = object\n\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = options.validateFields\n ? context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n : customFields\n\n return {\n _type: context.schemaType.name,\n _key:\n typeof object._key === 'string' ? object._key : context.keyGenerator(),\n ...values,\n }\n}\n","/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n crypto.getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {parseBlock} from './parse-blocks'\nimport {getSelectionEndPoint} from './util.get-selection-end-point'\nimport {getSelectionStartPoint} from './util.get-selection-start-point'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'>\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: startBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: endBlock,\n options: {removeUnusedMarkDefs: true, validateFields: false},\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\n\n/**\n * @public\n */\nexport function getTextBlockText(block: PortableTextTextBlock) {\n return block.children.map((child) => child.text ?? '').join('')\n}\n"],"names":["getBlockStartPoint","context","block","isTextBlock","node","path","_key","children","offset","isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","at","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","selectionPoint","skippedInlineObject","value","child","isSpan","text","length","spanSelectionPointToBlockOffset","blockKey","spanKey","isTypedObject","object","isRecord","_type","parseBlocks","blocks","options","Array","isArray","flatMap","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","level","undefined","listItem","customFields","key","Object","keys","validateFields","fields","some","field","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","map","parseSpan","span","parseInlineObject","inlineObject","filter","marks","removeUnusedMarkDefs","includes","style","styles","defaultStyle","console","error","lists","list","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","crypto","getRandomValues","str","n","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock","getTextBlockText","join"],"mappings":";AASO,SAASA,mBAAmB;AAAA,EACjCC;AAAAA,EACAC;AAOF,GAAyB;AACvB,SAAIC,YAAYF,SAASC,MAAME,IAAI,IAC1B;AAAA,IACLC,MAAM,CAAC,GAAGH,MAAMG,MAAM,YAAY;AAAA,MAACC,MAAMJ,MAAME,KAAKG,SAAS,CAAC,EAAED;AAAAA,IAAAA,CAAK;AAAA,IACrEE,QAAQ;AAAA,EAAA,IAIL;AAAA,IACLH,MAAMH,MAAMG;AAAAA,IACZG,QAAQ;AAAA,EAAA;AAEZ;ACzBO,SAASC,eAAeC,SAA2C;AACxE,SAAO,OAAOA,WAAY,YAAYA,YAAY,QAAQ,UAAUA;AACtE;ACJO,SAASC,8BAA8BC,OAA6B;AACzE,QAAMC,mBAAmBD,MAAMP,KAAKS,GAAG,CAAC;AAExC,MAAIL,eAAeI,gBAAgB;AACjC,WAAOA,iBAAiBP;AAI5B;AAEO,SAASS,8BAA8BH,OAA6B;AACzE,QAAMI,mBAAmBJ,MAAMP,KAAKS,GAAG,CAAC;AAExC,MAAIL,eAAeO,gBAAgB;AACjC,WAAOA,iBAAiBV;AAI5B;ACRO,SAASW,gCAAgC;AAAA,EAC9ChB;AAAAA,EACAiB;AAAAA,EACAC;AAKF,GAAG;AACD,MAAIC,aAAaF,YAAYV,QACzBa,gBACAC,sBAAsB;AAE1B,aAAWpB,SAASD,QAAQsB;AAC1B,QAAIrB,MAAMI,SAASY,YAAYb,KAAK,CAAC,EAAEC,QAIlCH,YAAYF,SAASC,KAAK;AAI/B,iBAAWsB,SAAStB,MAAMK,UAAU;AAClC,YAAIY,cAAc,WAAW;AAC3B,cAAI,CAACM,OAAOxB,SAASuB,KAAK;AACxB;AAGF,cAAIJ,cAAcI,MAAME,KAAKC,QAAQ;AACnCN,6BAAiB;AAAA,cACfhB,MAAM,CAAC,GAAGa,YAAYb,MAAM,YAAY;AAAA,gBAACC,MAAMkB,MAAMlB;AAAAA,cAAAA,CAAK;AAAA,cAC1DE,QAAQY;AAAAA,YAAAA;AAEV;AAAA,UACF;AAEAA,wBAAcI,MAAME,KAAKC;AAEzB;AAAA,QACF;AAEA,YAAI,CAACF,OAAOxB,SAASuB,KAAK,GAAG;AAC3BF,gCAAsB;AACtB;AAAA,QACF;AAEA,YAAIF,eAAe,KAAKC,kBAAkB,CAACC,qBAAqB;AAC1DA,kCACFD,iBAAiB;AAAA,YACfhB,MAAM,CAAC,GAAGa,YAAYb,MAAM,YAAY;AAAA,cAACC,MAAMkB,MAAMlB;AAAAA,YAAAA,CAAK;AAAA,YAC1DE,QAAQ;AAAA,UAAA;AAGZ;AAAA,QACF;AAEA,YAAIY,aAAaI,MAAME,KAAKC,QAAQ;AAClCP,wBAAcI,MAAME,KAAKC;AACzB;AAAA,QACF;AAEA,YAAIP,cAAcI,MAAME,KAAKC,WAC3BN,iBAAiB;AAAA,UACfhB,MAAM,CAAC,GAAGa,YAAYb,MAAM,YAAY;AAAA,YAACC,MAAMkB,MAAMlB;AAAAA,UAAAA,CAAK;AAAA,UAC1DE,QAAQY;AAAAA,QAAAA,GAGVA,cAAcI,MAAME,KAAKC,QAErBP,eAAe;AACjB;AAAA,MAGN;AAGF,SAAOC;AACT;AAKO,SAASO,gCAAgC;AAAA,EAC9C3B;AAAAA,EACAoB;AAIF,GAA4B;AAC1B,MAAIb,SAAS;AAEb,QAAMqB,WAAWlB,8BAA8BU,cAAc,GACvDS,UAAUf,8BAA8BM,cAAc;AAE5D,MAAI,EAAA,CAACQ,YAAY,CAACC;AAIlB,eAAW5B,SAASD,QAAQsB;AAC1B,UAAIrB,MAAMI,SAASuB,YAId1B,YAAYF,SAASC,KAAK;AAI/B,mBAAWsB,SAAStB,MAAMK;AACxB,cAAKkB,OAAOxB,SAASuB,KAAK,GAI1B;AAAA,gBAAIA,MAAMlB,SAASwB;AACjB,qBAAO;AAAA,gBACLzB,MAAM,CAAC;AAAA,kBAACC,MAAMJ,MAAMI;AAAAA,gBAAAA,CAAK;AAAA,gBACzBE,QAAQA,SAASa,eAAeb;AAAAA,cAAAA;AAIpCA,sBAAUgB,MAAME,KAAKC;AAAAA,UAAAA;AAAAA;AAAAA;AAG3B;ACrIO,SAASI,cAAcC,QAAwC;AACpE,SAAOC,SAASD,MAAM,KAAK,OAAOA,OAAOE,SAAU;AACrD;AAEO,SAASD,SAASV,OAAkD;AACzE,SAAO,CAAC,CAACA,UAAU,OAAOA,SAAU,YAAY,OAAOA,SAAU;AACnE;ACKO,SAASY,YAAY;AAAA,EAC1BlC;AAAAA,EACAmC;AAAAA,EACAC;AAQF,GAA6B;AAC3B,SAAKC,MAAMC,QAAQH,MAAM,IAIlBA,OAAOI,QAAStC,CAAAA,UAAU;AAC/B,UAAMuC,cAAcC,WAAW;AAAA,MAACzC;AAAAA,MAASC;AAAAA,MAAOmC;AAAAA,IAAAA,CAAQ;AAExD,WAAOI,cAAc,CAACA,WAAW,IAAI,CAAA;AAAA,EACvC,CAAC,IAPQ,CAAA;AAQX;AAEO,SAASC,WAAW;AAAA,EACzBzC;AAAAA,EACAC;AAAAA,EACAmC;AAQF,GAAkC;AAChC,SACEM,eAAe;AAAA,IAACzC;AAAAA,IAAOD;AAAAA,IAASoC;AAAAA,EAAAA,CAAQ,KACxCO,iBAAiB;AAAA,IAACC,aAAa3C;AAAAA,IAAOD;AAAAA,IAASoC;AAAAA,EAAAA,CAAQ;AAE3D;AAEO,SAASO,iBAAiB;AAAA,EAC/BC;AAAAA,EACA5C;AAAAA,EACAoC;AAKF,GAAmC;AACjC,MAAI,CAACN,cAAcc,WAAW;AAC5B;AAGF,QAAMC,aAAa7C,QAAQ8C,OAAOC,aAAaC,KAC7C,CAAC;AAAA,IAACC;AAAAA,EAAAA,MAAUA,SAASL,YAAYX,KACnC;AAEA,MAAKY;AAIL,WAAOK,YAAY;AAAA,MACjBnB,QAAQa;AAAAA,MACR5C,SAAS;AAAA,QACPmD,cAAcnD,QAAQmD;AAAAA,QACtBN;AAAAA,MAAAA;AAAAA,MAEFT;AAAAA,IAAAA,CACD;AACH;AAEO,SAASgB,YACdpD,SACAC,OACgC;AAChC,SACEC,YAAYF,SAASC,KAAK,KAC1BA,MAAMoD,UAAUC,UAChBrD,MAAMsD,aAAaD;AAEvB;AAEO,SAASZ,eAAe;AAAA,EAC7BzC;AAAAA,EACAD;AAAAA,EACAoC;AAQF,GAAsC;AACpC,MAAI,CAACN,cAAc7B,KAAK;AACtB;AAGF,QAAMuD,eAAwC,CAAA;AAE9C,aAAWC,OAAOC,OAAOC,KAAK1D,KAAK;AAE/BwD,YAAQ,WACRA,QAAQ,UACRA,QAAQ,cACRA,QAAQ,cACRA,QAAQ,WACRA,QAAQ,cACRA,QAAQ,YAKNrB,QAAQwB,iBACN5D,QAAQ8C,OAAO7C,MAAM4D,QAAQC,KAAMC,CAAAA,UAAUA,MAAMd,SAASQ,GAAG,MACjED,aAAaC,GAAG,IAAIxD,MAAMwD,GAAG,KAG/BD,aAAaC,GAAG,IAAIxD,MAAMwD,GAAG;AAIjC,MAAIxD,MAAMgC,UAAUjC,QAAQ8C,OAAO7C,MAAMgD;AACvC;AAGF,QAAM5C,OACJ,OAAOJ,MAAMI,QAAS,WAAWJ,MAAMI,OAAOL,QAAQmD,aAAAA,GAElDa,mBAAmC3B,MAAMC,QAAQrC,MAAMgE,QAAQ,IACjEhE,MAAMgE,WACN,CAAA,GACEC,gBAAgB,oBAAIC,IAAAA,GACpBF,WAAWD,iBAAiBzB,QAAS6B,CAAAA,YAAY;AACrD,QAAI,CAACtC,cAAcsC,OAAO;AACxB,aAAO,CAAA;AAGT,UAAMvB,aAAa7C,QAAQ8C,OAAOuB,YAAYrB,KAC5C,CAAC;AAAA,MAACC;AAAAA,IAAAA,MAAUA,SAASmB,QAAQnC,KAC/B;AAEA,QAAI,CAACY;AACH,aAAO,CAAA;AAGT,QAAI,OAAOuB,QAAQ/D,QAAS;AAG1B,aAAO,CAAA;AAGT,UAAMiE,mBAAmBpB,YAAY;AAAA,MACnCnB,QAAQqC;AAAAA,MACRpE,SAAS;AAAA,QACP6C;AAAAA,QACAM,cAAcnD,QAAQmD;AAAAA,MAAAA;AAAAA,MAExBf;AAAAA,IAAAA,CACD;AAED,WAAKkC,oBAILJ,cAAcK,IAAIH,QAAQ/D,MAAMiE,iBAAiBjE,IAAI,GAE9C,CAACiE,gBAAgB,KALf,CAAA;AAAA,EAMX,CAAC,GAMKhE,YAJmC+B,MAAMC,QAAQrC,MAAMK,QAAQ,IACjEL,MAAMK,WACN,CAAA,GAGDkE,IACEjD,WACCkD,UAAU;AAAA,IAACC,MAAMnD;AAAAA,IAAOvB;AAAAA,IAASkE;AAAAA,IAAe9B;AAAAA,EAAAA,CAAQ,KACxDuC,kBAAkB;AAAA,IAACC,cAAcrD;AAAAA,IAAOvB;AAAAA,IAASoC;AAAAA,EAAAA,CAAQ,CAC7D,EACCyC,OAAQtD,CAAAA,UAAUA,UAAU+B,MAAS,GAClCwB,QAAQxE,SAASiC,QAAShB,CAAAA,UAAUA,MAAMuD,SAAS,CAAA,CAAE,GAErDtC,cAAqC;AAAA,IACzCP,OAAOjC,QAAQ8C,OAAO7C,MAAMgD;AAAAA,IAC5B5C;AAAAA,IACAC,UACEA,SAASoB,SAAS,IACdpB,WACA,CACE;AAAA,MACED,MAAML,QAAQmD,aAAAA;AAAAA,MACdlB,OAAOjC,QAAQ8C,OAAO4B,KAAKzB;AAAAA,MAC3BxB,MAAM;AAAA,MACNqD,OAAO,CAAA;AAAA,IAAA,CACR;AAAA,IAETb,UAAU7B,QAAQ2C,uBACdd,SAASY,OAAQT,CAAAA,YAAYU,MAAME,SAASZ,QAAQ/D,IAAI,CAAC,IACzD4D;AAAAA,IACJ,GAAGT;AAAAA,EAAAA;AAGL,MACE,OAAOvD,MAAMgF,SAAU,YACvBjF,QAAQ8C,OAAOoC,OAAOlC,KAAMiC,CAAAA,UAAUA,MAAMhC,SAAShD,MAAMgF,KAAK;AAEhEzC,gBAAYyC,QAAQhF,MAAMgF;AAAAA,OACrB;AACL,UAAME,eAAenF,QAAQ8C,OAAOoC,OAAOrE,GAAG,CAAC,GAAGoC;AAE9CkC,qBAAiB7B,SACnBd,YAAYyC,QAAQE,eAEpBC,QAAQC,MAAM,wBAAwB;AAAA,EAE1C;AAEA,SACE,OAAOpF,MAAMsD,YAAa,YAC1BvD,QAAQ8C,OAAOwC,MAAMtC,KAAMuC,CAAAA,SAASA,KAAKtC,SAAShD,MAAMsD,QAAQ,MAEhEf,YAAYe,WAAWtD,MAAMsD,WAG3B,OAAOtD,MAAMoD,SAAU,aACzBb,YAAYa,QAAQpD,MAAMoD,QAGrBb;AACT;AAEO,SAASiC,UAAU;AAAA,EACxBC;AAAAA,EACA1E;AAAAA,EACAkE;AAAAA,EACA9B;AAMF,GAAiC;AAC/B,MAAI,CAACN,cAAc4C,IAAI;AACrB;AAGF,QAAMlB,eAAwC,CAAA;AAE9C,aAAWC,OAAOC,OAAOC,KAAKe,IAAI;AAE9BjB,YAAQ,WACRA,QAAQ,UACRA,QAAQ,UACRA,QAAQ,YAERD,aAAaC,GAAG,IAAIiB,KAAKjB,GAAG;AAKhC,MAAIiB,KAAKzC,UAAUjC,QAAQ8C,OAAO4B,KAAKzB,QAAQyB,KAAKzC,UAAU;AAC5D;AAMF,QAAM6C,SAHgCzC,MAAMC,QAAQoC,KAAKI,KAAK,IAC1DJ,KAAKI,QACL,CAAA,GACwBvC,QAASiD,CAAAA,SAAS;AAC5C,QAAI,OAAOA,QAAS;AAClB,aAAO,CAAA;AAGT,UAAMC,aAAavB,cAAcwB,IAAIF,IAAI;AAEzC,WAAIC,eAAenC,SACV,CAACmC,UAAU,IAIlBzF,QAAQ8C,OAAO6C,WAAW7B,KAAM8B,CAAAA,cAAcA,UAAU3C,SAASuC,IAAI,IAE9D,CAACA,IAAI,IAGP,CAAA;AAAA,EACT,CAAC;AAED,SAAO;AAAA,IACLvD,OAAO;AAAA,IACP5B,MAAM,OAAOqE,KAAKrE,QAAS,WAAWqE,KAAKrE,OAAOL,QAAQmD,aAAAA;AAAAA,IAC1D1B,MAAM,OAAOiD,KAAKjD,QAAS,WAAWiD,KAAKjD,OAAO;AAAA,IAClDqD;AAAAA,IACA,GAAI1C,QAAQwB,iBAAiB,KAAKJ;AAAAA,EAAAA;AAEtC;AAEO,SAASmB,kBAAkB;AAAA,EAChCC;AAAAA,EACA5E;AAAAA,EACAoC;AAKF,GAAmC;AACjC,MAAI,CAACN,cAAc8C,YAAY;AAC7B;AAGF,QAAM/B,aAAa7C,QAAQ8C,OAAO+C,cAAc7C,KAC9C,CAAC;AAAA,IAACC;AAAAA,EAAAA,MAAUA,SAAS2B,aAAa3C,KACpC;AAEA,MAAKY;AAIL,WAAOK,YAAY;AAAA,MACjBnB,QAAQ6C;AAAAA,MACR5E,SAAS;AAAA,QACPmD,cAAcnD,QAAQmD;AAAAA,QACtBN;AAAAA,MAAAA;AAAAA,MAEFT;AAAAA,IAAAA,CACD;AACH;AAEO,SAAS0D,gBAAgB;AAAA,EAC9BC;AAAAA,EACA/F;AAAAA,EACAoC;AAKF,GAAmC;AACjC,MAAI,CAACN,cAAciE,UAAU;AAC3B;AAGF,QAAMlD,aAAa7C,QAAQ8C,OAAOuB,YAAYrB,KAC5C,CAAC;AAAA,IAACC;AAAAA,EAAAA,MAAUA,SAAS8C,WAAW9D,KAClC;AAEA,MAAKY;AAIL,WAAOK,YAAY;AAAA,MACjBnB,QAAQgE;AAAAA,MACR/F,SAAS;AAAA,QACPmD,cAAcnD,QAAQmD;AAAAA,QACtBN;AAAAA,MAAAA;AAAAA,MAEFT;AAAAA,IAAAA,CACD;AACH;AAEA,SAASc,YAAY;AAAA,EACnBnB;AAAAA,EACA/B;AAAAA,EACAoC;AAOF,GAAuB;AACrB,QAAM;AAAA,IAACH;AAAAA,IAAO5B;AAAAA,IAAM,GAAGmD;AAAAA,EAAAA,IAAgBzB,QAIjCiE,SAAS5D,QAAQwB,iBACnB5D,QAAQ6C,WAAWgB,OAAOoC,OACxB,CAACC,aAAanC,UAAU;AACtB,UAAMoC,aAAapE,OAAOgC,MAAMd,IAAI;AAEpC,WAAIkD,eAAe7C,WACjB4C,YAAYnC,MAAMd,IAAI,IAAIkD,aAGrBD;AAAAA,EACT,GACA,CAAA,CACF,IACA1C;AAEJ,SAAO;AAAA,IACLvB,OAAOjC,QAAQ6C,WAAWI;AAAAA,IAC1B5C,MACE,OAAO0B,OAAO1B,QAAS,WAAW0B,OAAO1B,OAAOL,QAAQmD,aAAAA;AAAAA,IAC1D,GAAG6C;AAAAA,EAAAA;AAEP;ACtZO,MAAMI,sBAAsBA,MAAcC,UAAU,EAAE,GAEvDC,kBAAmB,uBAAM;AAC7B,MAAIC;AACJ,SAAO,MAAM;AACX,QAAIA;AACF,aAAOA;AAGTA,YAAQ,CAAA;AACR,aAASC,IAAI,GAAGA,IAAI,KAAK,EAAEA;AACzBD,YAAMC,CAAC,KAAKA,IAAI,KAAOC,SAAS,EAAE,EAAEC,MAAM,CAAC;AAE7C,WAAOH;AAAAA,EACT;AACF,GAAA;AAGA,SAASI,UAAUjF,SAAS,IAAI;AAC9B,QAAMkF,QAAQ,IAAIC,WAAWnF,MAAM;AACnCoF,SAAAA,OAAOC,gBAAgBH,KAAK,GACrBA;AACT;AAEA,SAASP,UAAU3E,QAAyB;AAC1C,QAAM6E,QAAQD,gBAAAA;AACd,SAAOK,UAAUjF,MAAM,EACpBuE,OAAO,CAACe,KAAKC,MAAMD,MAAMT,MAAMU,CAAC,GAAG,EAAE,EACrCP,MAAM,GAAGhF,MAAM;AACpB;AC3BO,SAASwF,qBAMdC,WAAoD;AACpD,SAAKA,YAKHA,UAAUC,WAAWD,UAAUE,SAASF,UAAUG,QAJ3C;AAMX;ACdO,SAASC,uBAMdJ,WAAoD;AACpD,SAAKA,YAKHA,UAAUC,WAAWD,UAAUG,QAAQH,UAAUE,SAJ1C;AAMX;ACJO,SAASG,YAAY;AAAA,EAC1BxH;AAAAA,EACAmC;AAIF,GAA6B;AAC3B,QAAMuE,QAAkC,CAAA;AAExC,MAAI,CAAC1G,QAAQmH;AACX,WAAOT;AAGT,MAAIe;AACJ,QAAMC,eAAoC,CAAA;AAC1C,MAAIC;AAEJ,QAAMC,aAAaL,uBAAuBvH,QAAQmH,SAAS,GACrDU,WAAWX,qBAAqBlH,QAAQmH,SAAS,GACjDW,gBAAgBpH,8BAA8BkH,UAAU,GACxDG,gBAAgBjH,8BAA8B8G,UAAU,GACxDI,cAActH,8BAA8BmH,QAAQ,GACpDI,cAAcnH,8BAA8B+G,QAAQ;AAE1D,MAAI,CAACC,iBAAiB,CAACE;AACrB,WAAOtB;AAGT,aAAWzG,SAASkC,QAAQ;AAC1B,QAAI,CAACjC,YAAYF,SAASC,KAAK,KACzBA,MAAMI,SAASyH,iBAAiB7H,MAAMI,SAAS2H,aAAa;AAC9DP,mBAAaxH;AACb;AAAA,IACF;AAGF,QAAIA,MAAMI,SAASyH,eAAe;AAChC,UAAI,CAAC5H,YAAYF,SAASC,KAAK,GAAG;AAChCwH,qBAAaxH;AACb;AAAA,MACF;AAEA,UAAI8H,eAAe;AACjB,mBAAWxG,SAAStB,MAAMK,UAAU;AAClC,cAAIiB,MAAMlB,SAAS0H,eAAe;AAChC,gBAAIvG,OAAOxB,SAASuB,KAAK,GAAG;AAC1B,oBAAME,OACJF,MAAMlB,SAAS4H,cACX1G,MAAME,KAAKiF,MAAMkB,WAAWrH,QAAQsH,SAAStH,MAAM,IACnDgB,MAAME,KAAKiF,MAAMkB,WAAWrH,MAAM;AAExCkH,2BAAa;AAAA,gBACX,GAAGxH;AAAAA,gBACHK,UAAU,CACR;AAAA,kBACE,GAAGiB;AAAAA,kBACHE;AAAAA,gBAAAA,CACD;AAAA,cAAA;AAAA,YAGP;AACEgG,2BAAa;AAAA,gBACX,GAAGxH;AAAAA,gBACHK,UAAU,CAACiB,KAAK;AAAA,cAAA;AAIpB,gBAAItB,MAAMI,SAAS2H,eAAeD,kBAAkBE;AAClD;AAEF;AAAA,UACF;AAEA,cAAIR,cAAcvH,YAAYF,SAASyH,UAAU,MAE7CQ,eACA1G,MAAMlB,SAAS4H,eACfzG,OAAOxB,SAASuB,KAAK,IAErBkG,WAAWnH,SAAS4H,KAAK;AAAA,YACvB,GAAG3G;AAAAA,YACHE,MAAMF,MAAME,KAAKiF,MAAM,GAAGmB,SAAStH,MAAM;AAAA,UAAA,CAC1C,IAEDkH,WAAWnH,SAAS4H,KAAK3G,KAAK,GAI9BtB,MAAMI,SAAS2H,eACfC,eACA1G,MAAMlB,SAAS4H;AAEf;AAAA,QAGN;AAEA,YAAIH,kBAAkBE;AACpB;AAGF;AAAA,MACF;AAIA,UAFAP,aAAaxH,OAET6H,kBAAkBE;AACpB;AAAA,IAEJ;AAEA,QAAI/H,MAAMI,SAAS2H,aAAa;AAC9B,UAAI,CAAC9H,YAAYF,SAASC,KAAK,GAAG;AAChC0H,mBAAW1H;AACX;AAAA,MACF;AAEA,UAAIgI,aAAa;AACfN,mBAAW;AAAA,UACT,GAAG1H;AAAAA,UACHK,UAAU,CAAA;AAAA,QAAA;AAGZ,mBAAWiB,SAAStB,MAAMK;AACxB,cAAIqH,YAAYzH,YAAYF,SAAS2H,QAAQ,GAAG;AAC9C,gBAAIpG,MAAMlB,SAAS4H,eAAezG,OAAOxB,SAASuB,KAAK,GAAG;AACxDoG,uBAASrH,SAAS4H,KAAK;AAAA,gBACrB,GAAG3G;AAAAA,gBACHE,MAAMF,MAAME,KAAKiF,MAAM,GAAGmB,SAAStH,MAAM;AAAA,cAAA,CAC1C;AAED;AAAA,YACF;AAIA,gBAFAoH,SAASrH,SAAS4H,KAAK3G,KAAK,GAExB0G,eAAe1G,MAAMlB,SAAS4H;AAChC;AAAA,UAEJ;AAGF;AAAA,MACF;AAEAN,iBAAW1H;AAEX;AAAA,IACF;AAEIwH,kBACFC,aAAaQ,KACXzF,WAAW;AAAA,MACTzC,SAAS;AAAA,QACP,GAAGA;AAAAA,QACHmD,cAAciD;AAAAA,MAAAA;AAAAA,MAEhBnG;AAAAA,MACAmC,SAAS;AAAA,QAAC2C,sBAAsB;AAAA,QAAMnB,gBAAgB;AAAA,MAAA;AAAA,IAAK,CAC5D,KAAK3D,KACR;AAAA,EAEJ;AAEA,QAAMkI,mBAAmBV,aACrBhF,WAAW;AAAA,IACTzC,SAAS;AAAA,MACP,GAAGA;AAAAA,MACHmD,cAAciD;AAAAA,IAAAA;AAAAA,IAEhBnG,OAAOwH;AAAAA,IACPrF,SAAS;AAAA,MAAC2C,sBAAsB;AAAA,MAAMnB,gBAAgB;AAAA,IAAA;AAAA,EAAK,CAC5D,IACDN,QAEE8E,iBAAiBT,WACnBlF,WAAW;AAAA,IACTzC,SAAS;AAAA,MACP,GAAGA;AAAAA,MACHmD,cAAciD;AAAAA,IAAAA;AAAAA,IAEhBnG,OAAO0H;AAAAA,IACPvF,SAAS;AAAA,MAAC2C,sBAAsB;AAAA,MAAMnB,gBAAgB;AAAA,IAAA;AAAA,EAAK,CAC5D,IACDN;AAEJ,SAAO,CACL,GAAI6E,mBAAmB,CAACA,gBAAgB,IAAI,CAAA,GAC5C,GAAGT,cACH,GAAIU,iBAAiB,CAACA,cAAc,IAAI,CAAA,CAAG;AAE/C;ACzMO,SAASC,iBAAiBpI,OAA8B;AAC7D,SAAOA,MAAMK,SAASkE,IAAKjD,CAAAA,UAAUA,MAAME,QAAQ,EAAE,EAAE6G,KAAK,EAAE;AAChE;"}
@@ -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, PortableTextTextBlock } from "@sanity/types";
4
4
  import { isSpan, isTextBlock } from "@portabletext/schema";
5
5
  /**
@@ -143,7 +143,7 @@ declare function mergeTextBlocks({
143
143
  context: Pick<EditorContext, 'keyGenerator' | 'schema'>;
144
144
  targetBlock: PortableTextTextBlock;
145
145
  incomingBlock: PortableTextTextBlock;
146
- }): PortableTextTextBlock<_sanity_types9.PortableTextObject | _sanity_types9.PortableTextSpan>;
146
+ }): PortableTextTextBlock<_sanity_types8.PortableTextObject | _sanity_types8.PortableTextSpan>;
147
147
  /**
148
148
  * @public
149
149
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portabletext/editor",
3
- "version": "2.17.1",
3
+ "version": "2.17.2",
4
4
  "description": "Portable Text Editor made in React",
5
5
  "keywords": [
6
6
  "sanity",
@@ -76,7 +76,6 @@
76
76
  "@portabletext/to-html": "^3.0.0",
77
77
  "@xstate/react": "^6.0.0",
78
78
  "debug": "^4.4.3",
79
- "get-random-values-esm": "^1.0.2",
80
79
  "immer": "^10.2.0",
81
80
  "lodash": "^4.17.21",
82
81
  "lodash.startcase": "^4.4.0",
@@ -85,7 +84,7 @@
85
84
  "slate-dom": "^0.118.1",
86
85
  "slate-react": "0.118.2",
87
86
  "xstate": "^5.23.0",
88
- "@portabletext/block-tools": "^3.5.13",
87
+ "@portabletext/block-tools": "^3.5.14",
89
88
  "@portabletext/keyboard-shortcuts": "^1.1.1",
90
89
  "@portabletext/patches": "^1.1.8",
91
90
  "@portabletext/schema": "^1.2.0"
@@ -102,9 +101,9 @@
102
101
  "@types/react": "^19.2.0",
103
102
  "@types/react-dom": "^19.2.0",
104
103
  "@vitejs/plugin-react": "^5.0.4",
105
- "@vitest/browser": "^4.0.4",
106
- "@vitest/browser-playwright": "^4.0.4",
107
- "@vitest/coverage-istanbul": "^4.0.4",
104
+ "@vitest/browser": "^4.0.5",
105
+ "@vitest/browser-playwright": "^4.0.5",
106
+ "@vitest/coverage-istanbul": "^4.0.5",
108
107
  "babel-plugin-react-compiler": "1.0.0",
109
108
  "eslint": "^9.38.0",
110
109
  "eslint-formatter-gha": "^1.6.0",
@@ -116,14 +115,14 @@
116
115
  "typescript": "5.9.3",
117
116
  "typescript-eslint": "^8.46.1",
118
117
  "vite": "^7.1.10",
119
- "vitest": "^4.0.4",
118
+ "vitest": "^4.0.5",
120
119
  "vitest-browser-react": "^2.0.2",
121
- "@portabletext/sanity-bridge": "1.1.16",
120
+ "@portabletext/sanity-bridge": "1.1.17",
122
121
  "@portabletext/test": "^0.0.0",
123
122
  "racejar": "1.3.2"
124
123
  },
125
124
  "peerDependencies": {
126
- "@portabletext/sanity-bridge": "^1.1.16",
125
+ "@portabletext/sanity-bridge": "^1.1.17",
127
126
  "@sanity/schema": "^4.12.0",
128
127
  "@sanity/types": "^4.12.0",
129
128
  "react": "^18.3 || ^19",
@@ -1,5 +1,3 @@
1
- import getRandomValues from 'get-random-values-esm'
2
-
3
1
  /**
4
2
  * @public
5
3
  */
@@ -23,7 +21,7 @@ const getByteHexTable = (() => {
23
21
  // WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html
24
22
  function whatwgRNG(length = 16) {
25
23
  const rnds8 = new Uint8Array(length)
26
- getRandomValues(rnds8)
24
+ crypto.getRandomValues(rnds8)
27
25
  return rnds8
28
26
  }
29
27