@portabletext/editor 3.3.11 → 3.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-dts/index.d.ts +60 -35
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
- package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
- package/lib/_chunks-es/util.slice-text-block.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +24 -46
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.d.ts +1 -1
- package/lib/selectors/index.d.ts +2 -2
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.d.ts +4 -5
- package/lib/utils/index.js.map +1 -1
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.slice-blocks.js","sources":["../../src/utils/util.get-block-end-point.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-selection-collapsed.ts","../../src/utils/util.is-keyed-segment.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.is-equal-selection-points.ts","../../src/utils/asserters.ts","../../src/utils/parse-blocks.ts","../../src/utils/key-generator.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockEndPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n const lastChild = block.node.children[block.node.children.length - 1]\n\n if (lastChild) {\n return {\n path: [...block.path, 'children', {_key: lastChild._key}],\n offset: isSpan(context, lastChild) ? lastChild.text.length : 0,\n }\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import {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 {EditorSelection} from '../types/editor'\n\n/**\n * @public\n */\nexport function isSelectionCollapsed(selection: EditorSelection) {\n if (!selection) {\n return false\n }\n\n return (\n JSON.stringify(selection.anchor.path) ===\n JSON.stringify(selection.focus.path) &&\n selection.anchor.offset === selection.focus.offset\n )\n}\n","import type {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 {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends EditorSelectionPoint | null =\n TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends EditorSelectionPoint | null =\n TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function isEqualSelectionPoints(\n a: EditorSelectionPoint,\n b: EditorSelectionPoint,\n) {\n return (\n a.offset === b.offset && JSON.stringify(a.path) === JSON.stringify(b.path)\n )\n}\n","import 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 {isSpan, 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 {isRecord, 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 normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = 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 normalize: boolean\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 normalize: boolean\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 {markDefs, markDefKeyMap} = parseMarkDefs({\n context,\n markDefs: block.markDefs,\n options,\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const parsedChildren = unparsedChildren\n .map((child) => parseChild({child, context, markDefKeyMap, options}))\n .filter((child) => child !== undefined)\n const marks = parsedChildren.flatMap((child) => child.marks ?? [])\n\n const children =\n parsedChildren.length > 0\n ? parsedChildren\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ]\n\n const normalizedChildren = options.normalize\n ? // Ensure that inline objects re surrounded by spans\n children.reduce<Array<PortableTextObject | PortableTextSpan>>(\n (normalizedChildren, child, index) => {\n if (isSpan(context, child)) {\n return [...normalizedChildren, child]\n }\n\n const previousChild = normalizedChildren.at(-1)\n\n if (!previousChild || !isSpan(context, previousChild)) {\n return [\n ...normalizedChildren,\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n child,\n ...(index === children.length - 1\n ? [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ]\n : []),\n ]\n }\n\n return [...normalizedChildren, child]\n },\n [],\n )\n : children\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children: normalizedChildren,\n ...customFields,\n }\n\n if (typeof block.markDefs === 'object' && block.markDefs !== null) {\n parsedBlock.markDefs = options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\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 parseMarkDefs({\n context,\n markDefs,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n const unparsedMarkDefs: Array<unknown> = Array.isArray(markDefs)\n ? markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n\n const parsedMarkDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = 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 return {\n markDefs: parsedMarkDefs,\n markDefKeyMap,\n }\n}\n\nexport function parseChild({\n child,\n context,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return (\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options})\n )\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 (!isRecord(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n if (\n typeof span._type === 'string' &&\n span._type !== context.schema.span.name\n ) {\n return undefined\n }\n\n if (typeof span._type !== 'string') {\n if (typeof span.text === 'string') {\n return {\n _type: context.schema.span.name as 'span',\n _key:\n typeof span._key === 'string' ? span._key : context.keyGenerator(),\n text: span.text,\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n }\n\n return undefined\n }\n\n return {\n _type: context.schema.span.name as '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 {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 keyGenerator?: () => string\n }\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n schema: context.schema,\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n },\n block,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n schema: context.schema,\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n },\n block: startBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n schema: context.schema,\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n },\n block: endBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n"],"names":["getBlockEndPoint","context","block","isTextBlock","node","lastChild","children","length","path","_key","offset","isSpan","text","getBlockStartPoint","isSelectionCollapsed","selection","JSON","stringify","anchor","focus","isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","at","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","selectionPoint","skippedInlineObject","value","child","spanSelectionPointToBlockOffset","blockKey","spanKey","getSelectionEndPoint","backward","getSelectionStartPoint","isEqualSelectionPoints","a","b","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","markDefs","markDefKeyMap","parseMarkDefs","parsedChildren","map","parseChild","filter","marks","span","normalizedChildren","normalize","reduce","index","previousChild","removeUnusedMarkDefs","markDef","includes","style","styles","lists","list","unparsedMarkDefs","Map","annotations","parsedAnnotation","set","parseSpan","parseInlineObject","inlineObject","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","crypto","getRandomValues","str","n","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.slice-blocks.js","sources":["../../src/utils/util.get-block-end-point.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.is-selection-collapsed.ts","../../src/utils/util.is-keyed-segment.ts","../../src/utils/util.selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.is-equal-selection-points.ts","../../src/utils/asserters.ts","../../src/utils/parse-blocks.ts","../../src/utils/key-generator.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["import {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockEndPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n const lastChild = block.node.children[block.node.children.length - 1]\n\n if (lastChild) {\n return {\n path: [...block.path, 'children', {_key: lastChild._key}],\n offset: isSpan(context, lastChild) ? lastChild.text.length : 0,\n }\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import {isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n return {\n path: [...block.path, 'children', {_key: block.node.children[0]._key}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {EditorSelection} from '../types/editor'\n\n/**\n * @public\n */\nexport function isSelectionCollapsed(selection: EditorSelection) {\n if (!selection) {\n return false\n }\n\n return (\n JSON.stringify(selection.anchor.path) ===\n JSON.stringify(selection.focus.path) &&\n selection.anchor.offset === selection.focus.offset\n )\n}\n","import type {KeyedSegment} from '../types/paths'\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 {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends EditorSelectionPoint | null =\n TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends EditorSelectionPoint | null =\n TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function isEqualSelectionPoints(\n a: EditorSelectionPoint,\n b: EditorSelectionPoint,\n) {\n return (\n a.offset === b.offset && JSON.stringify(a.path) === JSON.stringify(b.path)\n )\n}\n","import type {TypedObject} from '@portabletext/schema'\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 {\n isSpan,\n isTextBlock,\n type PortableTextBlock,\n type PortableTextListBlock,\n type PortableTextObject,\n type PortableTextSpan,\n type PortableTextTextBlock,\n type TypedObject,\n} from '@portabletext/schema'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isRecord, 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 normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = 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 normalize: boolean\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 normalize: boolean\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 {markDefs, markDefKeyMap} = parseMarkDefs({\n context,\n markDefs: block.markDefs,\n options,\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const parsedChildren = unparsedChildren\n .map((child) => parseChild({child, context, markDefKeyMap, options}))\n .filter((child) => child !== undefined)\n const marks = parsedChildren.flatMap((child) => child.marks ?? [])\n\n const children =\n parsedChildren.length > 0\n ? parsedChildren\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ]\n\n const normalizedChildren = options.normalize\n ? // Ensure that inline objects re surrounded by spans\n children.reduce<Array<PortableTextObject | PortableTextSpan>>(\n (normalizedChildren, child, index) => {\n if (isSpan(context, child)) {\n return [...normalizedChildren, child]\n }\n\n const previousChild = normalizedChildren.at(-1)\n\n if (!previousChild || !isSpan(context, previousChild)) {\n return [\n ...normalizedChildren,\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n child,\n ...(index === children.length - 1\n ? [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ]\n : []),\n ]\n }\n\n return [...normalizedChildren, child]\n },\n [],\n )\n : children\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children: normalizedChildren,\n ...customFields,\n }\n\n if (typeof block.markDefs === 'object' && block.markDefs !== null) {\n parsedBlock.markDefs = options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\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 parseMarkDefs({\n context,\n markDefs,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n const unparsedMarkDefs: Array<unknown> = Array.isArray(markDefs)\n ? markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n\n const parsedMarkDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = 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 return {\n markDefs: parsedMarkDefs,\n markDefKeyMap,\n }\n}\n\nexport function parseChild({\n child,\n context,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return (\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options})\n )\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 (!isRecord(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n if (\n typeof span._type === 'string' &&\n span._type !== context.schema.span.name\n ) {\n return undefined\n }\n\n if (typeof span._type !== 'string') {\n if (typeof span.text === 'string') {\n return {\n _type: context.schema.span.name as 'span',\n _key:\n typeof span._key === 'string' ? span._key : context.keyGenerator(),\n text: span.text,\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n }\n\n return undefined\n }\n\n return {\n _type: context.schema.span.name as '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 {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {parseBlock} from './parse-blocks'\nimport {getSelectionEndPoint} from './util.get-selection-end-point'\nimport {getSelectionStartPoint} from './util.get-selection-start-point'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'> & {\n keyGenerator?: () => string\n }\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n schema: context.schema,\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n },\n block,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n schema: context.schema,\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n },\n block: startBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n schema: context.schema,\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n },\n block: endBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n"],"names":["getBlockEndPoint","context","block","isTextBlock","node","lastChild","children","length","path","_key","offset","isSpan","text","getBlockStartPoint","isSelectionCollapsed","selection","JSON","stringify","anchor","focus","isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","at","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","blockOffset","direction","offsetLeft","selectionPoint","skippedInlineObject","value","child","spanSelectionPointToBlockOffset","blockKey","spanKey","getSelectionEndPoint","backward","getSelectionStartPoint","isEqualSelectionPoints","a","b","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","markDefs","markDefKeyMap","parseMarkDefs","parsedChildren","map","parseChild","filter","marks","span","normalizedChildren","normalize","reduce","index","previousChild","removeUnusedMarkDefs","markDef","includes","style","styles","lists","list","unparsedMarkDefs","Map","annotations","parsedAnnotation","set","parseSpan","parseInlineObject","inlineObject","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","crypto","getRandomValues","str","n","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.slice-text-block.js","sources":["../../src/utils/util.get-text-block-text.ts","../../src/utils/util.is-empty-text-block.ts","../../src/utils/util.slice-text-block.ts"],"sourcesContent":["import type {PortableTextTextBlock} from '@
|
|
1
|
+
{"version":3,"file":"util.slice-text-block.js","sources":["../../src/utils/util.get-text-block-text.ts","../../src/utils/util.is-empty-text-block.ts","../../src/utils/util.slice-text-block.ts"],"sourcesContent":["import type {PortableTextTextBlock} from '@portabletext/schema'\n\n/**\n * @public\n */\nexport function getTextBlockText(block: PortableTextTextBlock) {\n return block.children.map((child) => child.text ?? '').join('')\n}\n","import {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {getTextBlockText} from './util.get-text-block-text'\n\n/**\n * @public\n */\nexport function isEmptyTextBlock(\n context: Pick<EditorContext, 'schema'>,\n block: PortableTextBlock | unknown,\n) {\n if (!isTextBlock(context, block)) {\n return false\n }\n\n const onlyText = block.children.every((child) => isSpan(context, child))\n const blockText = getTextBlockText(block)\n\n return onlyText && blockText === ''\n}\n","import {\n isSpan,\n type PortableTextChild,\n type PortableTextTextBlock,\n} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\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\nexport function sliceTextBlock({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'>\n block: PortableTextTextBlock\n}): PortableTextTextBlock {\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n\n if (!startPoint || !endPoint) {\n return block\n }\n\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n\n if (startBlockKey !== endBlockKey || startBlockKey !== block._key) {\n return block\n }\n\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startChildKey || !endChildKey) {\n return block\n }\n\n let startChildFound = false\n const children: Array<PortableTextChild> = []\n\n for (const child of block.children) {\n if (child._key === startChildKey) {\n startChildFound = true\n\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 children.push({\n ...child,\n text,\n })\n } else {\n children.push(child)\n }\n\n if (startChildKey === endChildKey) {\n break\n }\n\n continue\n }\n\n if (child._key === endChildKey) {\n if (isSpan(context, child)) {\n children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n children.push(child)\n }\n\n break\n }\n\n if (startChildFound) {\n children.push(child)\n }\n }\n\n return {\n ...block,\n children,\n }\n}\n"],"names":["getTextBlockText","block","children","map","child","text","join","isEmptyTextBlock","context","isTextBlock","onlyText","every","isSpan","blockText","sliceTextBlock","startPoint","getSelectionStartPoint","selection","endPoint","getSelectionEndPoint","startBlockKey","getBlockKeyFromSelectionPoint","endBlockKey","_key","startChildKey","getChildKeyFromSelectionPoint","endChildKey","startChildFound","slice","offset","push"],"mappings":";;AAKO,SAASA,iBAAiBC,OAA8B;AAC7D,SAAOA,MAAMC,SAASC,IAAKC,CAAAA,UAAUA,MAAMC,QAAQ,EAAE,EAAEC,KAAK,EAAE;AAChE;ACAO,SAASC,iBACdC,SACAP,OACA;AACA,MAAI,CAACQ,YAAYD,SAASP,KAAK;AAC7B,WAAO;AAGT,QAAMS,WAAWT,MAAMC,SAASS,MAAOP,CAAAA,UAAUQ,OAAOJ,SAASJ,KAAK,CAAC,GACjES,YAAYb,iBAAiBC,KAAK;AAExC,SAAOS,YAAYG,cAAc;AACnC;ACNO,SAASC,eAAe;AAAA,EAC7BN;AAAAA,EACAP;AAIF,GAA0B;AACxB,QAAMc,aAAaC,uBAAuBR,QAAQS,SAAS,GACrDC,WAAWC,qBAAqBX,QAAQS,SAAS;AAEvD,MAAI,CAACF,cAAc,CAACG;AAClB,WAAOjB;AAGT,QAAMmB,gBAAgBC,8BAA8BN,UAAU,GACxDO,cAAcD,8BAA8BH,QAAQ;AAE1D,MAAIE,kBAAkBE,eAAeF,kBAAkBnB,MAAMsB;AAC3D,WAAOtB;AAGT,QAAMuB,gBAAgBC,8BAA8BV,UAAU,GACxDW,cAAcD,8BAA8BP,QAAQ;AAE1D,MAAI,CAACM,iBAAiB,CAACE;AACrB,WAAOzB;AAGT,MAAI0B,kBAAkB;AACtB,QAAMzB,WAAqC,CAAA;AAE3C,aAAWE,SAASH,MAAMC,UAAU;AAClC,QAAIE,MAAMmB,SAASC,eAAe;AAGhC,UAFAG,kBAAkB,IAEdf,OAAOJ,SAASJ,KAAK,GAAG;AAC1B,cAAMC,OACJD,MAAMmB,SAASG,cACXtB,MAAMC,KAAKuB,MAAMb,WAAWc,QAAQX,SAASW,MAAM,IACnDzB,MAAMC,KAAKuB,MAAMb,WAAWc,MAAM;AAExC3B,iBAAS4B,KAAK;AAAA,UACZ,GAAG1B;AAAAA,UACHC;AAAAA,QAAAA,CACD;AAAA,MACH;AACEH,iBAAS4B,KAAK1B,KAAK;AAGrB,UAAIoB,kBAAkBE;AACpB;AAGF;AAAA,IACF;AAEA,QAAItB,MAAMmB,SAASG,aAAa;AAC1Bd,aAAOJ,SAASJ,KAAK,IACvBF,SAAS4B,KAAK;AAAA,QACZ,GAAG1B;AAAAA,QACHC,MAAMD,MAAMC,KAAKuB,MAAM,GAAGV,SAASW,MAAM;AAAA,MAAA,CAC1C,IAED3B,SAAS4B,KAAK1B,KAAK;AAGrB;AAAA,IACF;AAEIuB,uBACFzB,SAAS4B,KAAK1B,KAAK;AAAA,EAEvB;AAEA,SAAO;AAAA,IACL,GAAGH;AAAAA,IACHC;AAAAA,EAAAA;AAEJ;"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as BlockAnnotationRenderProps, $t as
|
|
1
|
+
import { $ as BlockAnnotationRenderProps, $t as AnnotationPath, A as PortableTextTextBlock, At as ReadyChange, B as EditorSelector, Bt as ScrollSelectionIntoViewFunction, C as ListDefinition, Ct as OnPasteResultOrPromise, D as PortableTextChild, Dt as PortableTextMemberSchemaTypes, E as PortableTextBlock, Et as PatchObservable, F as BlockOffset, Ft as RenderDecoratorFunction, G as EditorConfig, Gt as PortableTextEditable, H as EditorProvider, Ht as UndoChange, I as useEditor, It as RenderEditableFunction, Jt as PortableTextEditor, K as EditorEvent, Kt as PortableTextEditableProps, L as defaultKeyGenerator, Lt as RenderListItemFunction, M as StyleDefinition, Mt as RenderAnnotationFunction, N as StyleSchemaType, Nt as RenderBlockFunction, O as PortableTextObject, Ot as RangeDecoration, P as defineSchema, Pt as RenderChildFunction, Q as AddedAnnotationPaths, Qt as EditorSchema, R as usePortableTextEditorSelection, Rt as RenderPlaceholderFunction, S as InlineObjectSchemaType, St as OnPasteResult, T as Patch, Tt as PatchChange, U as EditorProviderProps, Ut as UnsetChange, V as useEditorSelector, Vt as SelectionChange, W as Editor, Wt as ValueChange, X as EditorContext, Xt as EditorEmittedEvent, Yt as PortableTextEditorProps, Z as EditorSnapshot, Zt as MutationEvent, _ as BlockObjectSchemaType, _t as LoadingChange, at as BlurChange, b as FieldDefinition, bt as OnCopyFn, ct as EditableAPIDeleteOptions, dt as EditorSelection, en as BlockPath, et as BlockChildRenderProps, f as PatchesEvent, ft as EditorSelectionPoint, g as BlockObjectDefinition, gt as InvalidValueResolution, h as BaseDefinition, ht as InvalidValue, it as BlockStyleRenderProps, j as SchemaDefinition, jt as RedoChange, k as PortableTextSpan, kt as RangeDecorationOnMovedDetails, lt as EditorChange, m as AnnotationSchemaType, mt as FocusChange, nt as BlockListItemRenderProps, ot as ConnectionChange, p as AnnotationDefinition, pt as ErrorChange, qt as HotkeyOptions, rt as BlockRenderProps, st as EditableAPI, tn as ChildPath, tt as BlockDecoratorRenderProps, ut as EditorChanges, v as DecoratorDefinition, vt as MutationChange, w as ListSchemaType, wt as PasteData, x as InlineObjectDefinition, xt as OnPasteFn, y as DecoratorSchemaType, yt as OnBeforeInputFn, z as usePortableTextEditor, zt as RenderStyleFunction } from "./_chunks-dts/index.js";
|
|
2
2
|
export { AddedAnnotationPaths, AnnotationDefinition, AnnotationPath, AnnotationSchemaType, BaseDefinition, BlockAnnotationRenderProps, BlockChildRenderProps, BlockDecoratorRenderProps, BlockListItemRenderProps, BlockObjectDefinition, BlockObjectSchemaType, BlockOffset, BlockPath, BlockRenderProps, BlockStyleRenderProps, BlurChange, ChildPath, ConnectionChange, DecoratorDefinition, DecoratorSchemaType, EditableAPI, EditableAPIDeleteOptions, Editor, EditorChange, EditorChanges, EditorConfig, EditorContext, EditorEmittedEvent, EditorEvent, EditorProvider, EditorProviderProps, EditorSchema, EditorSelection, EditorSelectionPoint, EditorSelector, EditorSnapshot, ErrorChange, FieldDefinition, FocusChange, HotkeyOptions, InlineObjectDefinition, InlineObjectSchemaType, InvalidValue, InvalidValueResolution, ListDefinition, ListSchemaType, LoadingChange, MutationChange, MutationEvent, OnBeforeInputFn, OnCopyFn, OnPasteFn, OnPasteResult, OnPasteResultOrPromise, PasteData, Patch, PatchChange, PatchObservable, PatchesEvent, PortableTextBlock, PortableTextChild, PortableTextEditable, PortableTextEditableProps, PortableTextEditor, PortableTextEditorProps, PortableTextMemberSchemaTypes, PortableTextObject, PortableTextSpan, PortableTextTextBlock, RangeDecoration, RangeDecorationOnMovedDetails, ReadyChange, RedoChange, RenderAnnotationFunction, RenderBlockFunction, RenderChildFunction, RenderDecoratorFunction, RenderEditableFunction, RenderListItemFunction, RenderPlaceholderFunction, RenderStyleFunction, SchemaDefinition, ScrollSelectionIntoViewFunction, SelectionChange, StyleDefinition, StyleSchemaType, UndoChange, UnsetChange, ValueChange, defineSchema, defaultKeyGenerator as keyGenerator, useEditor, useEditorSelector, usePortableTextEditor, usePortableTextEditorSelection };
|
package/lib/index.js
CHANGED
|
@@ -164,13 +164,9 @@ function isDeepEqualSets(data, other) {
|
|
|
164
164
|
return !0;
|
|
165
165
|
}
|
|
166
166
|
const VOID_CHILD_KEY = "void-child";
|
|
167
|
-
function keepObjectEquality(context, object, keyMap) {
|
|
168
|
-
const value = keyMap[object._key];
|
|
169
|
-
return value && isEqualBlocks(context, object, value) ? value : (keyMap[object._key] = object, object);
|
|
170
|
-
}
|
|
171
167
|
function toSlateBlock(block, {
|
|
172
168
|
schemaTypes
|
|
173
|
-
}
|
|
169
|
+
}) {
|
|
174
170
|
const {
|
|
175
171
|
_type,
|
|
176
172
|
_key,
|
|
@@ -189,9 +185,7 @@ function toSlateBlock(block, {
|
|
|
189
185
|
_key: childKey,
|
|
190
186
|
_type: schemaTypes.span.name,
|
|
191
187
|
text: childProps.text
|
|
192
|
-
} : childType !== schemaTypes.span.name ? (hasInlines = !0,
|
|
193
|
-
schema: schemaTypes
|
|
194
|
-
}, {
|
|
188
|
+
} : childType !== schemaTypes.span.name ? (hasInlines = !0, {
|
|
195
189
|
_type: childType,
|
|
196
190
|
_key: childKey,
|
|
197
191
|
children: [{
|
|
@@ -202,20 +196,16 @@ function toSlateBlock(block, {
|
|
|
202
196
|
}],
|
|
203
197
|
value: childProps,
|
|
204
198
|
__inline: !0
|
|
205
|
-
}
|
|
199
|
+
}) : child;
|
|
206
200
|
});
|
|
207
|
-
return !hasMissingMarkDefs && !hasMissingChildren && !hasInlines && Element$1.isElement(block) ? block :
|
|
208
|
-
schema: schemaTypes
|
|
209
|
-
}, {
|
|
201
|
+
return !hasMissingMarkDefs && !hasMissingChildren && !hasInlines && Element$1.isElement(block) ? block : {
|
|
210
202
|
_type,
|
|
211
203
|
_key,
|
|
212
204
|
...rest,
|
|
213
205
|
children
|
|
214
|
-
}
|
|
206
|
+
};
|
|
215
207
|
}
|
|
216
|
-
return
|
|
217
|
-
schema: schemaTypes
|
|
218
|
-
}, {
|
|
208
|
+
return {
|
|
219
209
|
_type,
|
|
220
210
|
_key,
|
|
221
211
|
children: [{
|
|
@@ -225,9 +215,9 @@ function toSlateBlock(block, {
|
|
|
225
215
|
marks: []
|
|
226
216
|
}],
|
|
227
217
|
value: rest
|
|
228
|
-
}
|
|
218
|
+
};
|
|
229
219
|
}
|
|
230
|
-
function fromSlateBlock(
|
|
220
|
+
function fromSlateBlock(block, textBlockType) {
|
|
231
221
|
const {
|
|
232
222
|
_key,
|
|
233
223
|
_type
|
|
@@ -250,28 +240,28 @@ function fromSlateBlock(context, block, textBlockType, keyMap = {}) {
|
|
|
250
240
|
children: _c,
|
|
251
241
|
...rest
|
|
252
242
|
} = child;
|
|
253
|
-
return
|
|
243
|
+
return {
|
|
254
244
|
...rest,
|
|
255
245
|
...v,
|
|
256
246
|
_key: k,
|
|
257
247
|
_type: t
|
|
258
|
-
}
|
|
248
|
+
};
|
|
259
249
|
}
|
|
260
250
|
return child;
|
|
261
251
|
});
|
|
262
|
-
return hasInlines ?
|
|
252
|
+
return hasInlines ? {
|
|
263
253
|
...block,
|
|
264
254
|
children,
|
|
265
255
|
_key,
|
|
266
256
|
_type
|
|
267
|
-
}
|
|
257
|
+
} : block;
|
|
268
258
|
}
|
|
269
259
|
const blockValue = "value" in block && block.value;
|
|
270
|
-
return
|
|
260
|
+
return {
|
|
271
261
|
_key,
|
|
272
262
|
_type,
|
|
273
263
|
...typeof blockValue == "object" ? blockValue : {}
|
|
274
|
-
}
|
|
264
|
+
};
|
|
275
265
|
}
|
|
276
266
|
function isEqualToEmptyEditor(initialValue, blocks, schemaTypes) {
|
|
277
267
|
if (!blocks || blocks.length !== 1)
|
|
@@ -417,9 +407,7 @@ function elementToBlock({
|
|
|
417
407
|
schema,
|
|
418
408
|
element
|
|
419
409
|
}) {
|
|
420
|
-
return fromSlateBlock(
|
|
421
|
-
schema
|
|
422
|
-
}, element, schema.block.name);
|
|
410
|
+
return fromSlateBlock(element, schema.block.name);
|
|
423
411
|
}
|
|
424
412
|
function isBlockElement({
|
|
425
413
|
editor,
|
|
@@ -3120,7 +3108,7 @@ function createPlaceholderBlock(context) {
|
|
|
3120
3108
|
}]
|
|
3121
3109
|
};
|
|
3122
3110
|
}
|
|
3123
|
-
const IS_PROCESSING_REMOTE_CHANGES = /* @__PURE__ */ new WeakMap(),
|
|
3111
|
+
const IS_PROCESSING_REMOTE_CHANGES = /* @__PURE__ */ new WeakMap(), SLATE_TO_PORTABLE_TEXT_RANGE = /* @__PURE__ */ new WeakMap();
|
|
3124
3112
|
function withRemoteChanges(editor, fn) {
|
|
3125
3113
|
const prev = isChangingRemotely(editor) || !1;
|
|
3126
3114
|
IS_PROCESSING_REMOTE_CHANGES.set(editor, !0), fn(), IS_PROCESSING_REMOTE_CHANGES.set(editor, prev);
|
|
@@ -5998,7 +5986,7 @@ function insertPatch(context, editor, patch) {
|
|
|
5998
5986
|
if (patch.path.length === 1 && patch.path[0] === 0) {
|
|
5999
5987
|
const blocksToInsert = patch.items.map((item) => toSlateBlock(item, {
|
|
6000
5988
|
schemaTypes: context.schema
|
|
6001
|
-
}
|
|
5989
|
+
}));
|
|
6002
5990
|
return Transforms.insertNodes(editor, blocksToInsert, {
|
|
6003
5991
|
at: [0]
|
|
6004
5992
|
}), !0;
|
|
@@ -6013,7 +6001,7 @@ function insertPatch(context, editor, patch) {
|
|
|
6013
6001
|
position: position2
|
|
6014
6002
|
} = patch, blocksToInsert = items2.map((item) => toSlateBlock(item, {
|
|
6015
6003
|
schemaTypes: context.schema
|
|
6016
|
-
}
|
|
6004
|
+
})), targetBlockIndex = block.index, normalizedIdx2 = position2 === "after" ? targetBlockIndex + 1 : targetBlockIndex, editorWasEmptyBefore = isEqualToEmptyEditor(context.initialValue, editor.value, context.schema);
|
|
6017
6005
|
return Transforms.insertNodes(editor, blocksToInsert, {
|
|
6018
6006
|
at: [normalizedIdx2]
|
|
6019
6007
|
}), editorWasEmptyBefore && typeof patch.path[0] == "number" && patch.path[0] === 0 && Transforms.removeNodes(editor, {
|
|
@@ -6031,7 +6019,7 @@ function insertPatch(context, editor, patch) {
|
|
|
6031
6019
|
children: items
|
|
6032
6020
|
}, {
|
|
6033
6021
|
schemaTypes: context.schema
|
|
6034
|
-
}
|
|
6022
|
+
}), normalizedIdx = position === "after" ? targetChild.index + 1 : targetChild.index, childInsertPath = [block.index, normalizedIdx];
|
|
6035
6023
|
return childrenToInsert && Element$1.isElement(childrenToInsert) && Transforms.insertNodes(editor, childrenToInsert.children, {
|
|
6036
6024
|
at: childInsertPath
|
|
6037
6025
|
}), !0;
|
|
@@ -6416,13 +6404,9 @@ function insertNodePatch(schema, children, operation, beforeValue) {
|
|
|
6416
6404
|
const block = beforeValue[operation.path[0]];
|
|
6417
6405
|
if (operation.path.length === 1) {
|
|
6418
6406
|
const position = operation.path[0] === 0 ? "before" : "after", beforeBlock = beforeValue[operation.path[0] - 1], targetKey = operation.path[0] === 0 ? block?._key : beforeBlock?._key;
|
|
6419
|
-
return targetKey ? [insert([fromSlateBlock({
|
|
6420
|
-
schema
|
|
6421
|
-
}, operation.node, schema.block.name)], position, [{
|
|
6407
|
+
return targetKey ? [insert([fromSlateBlock(operation.node, schema.block.name)], position, [{
|
|
6422
6408
|
_key: targetKey
|
|
6423
|
-
}])] : [setIfMissing(beforeValue, []), insert([fromSlateBlock(
|
|
6424
|
-
schema
|
|
6425
|
-
}, operation.node, schema.block.name)], "before", [operation.path[0]])];
|
|
6409
|
+
}])] : [setIfMissing(beforeValue, []), insert([fromSlateBlock(operation.node, schema.block.name)], "before", [operation.path[0]])];
|
|
6426
6410
|
} else if (isTextBlock({
|
|
6427
6411
|
schema
|
|
6428
6412
|
}, block) && operation.path.length === 2 && children[operation.path[0]]) {
|
|
@@ -6455,9 +6439,7 @@ function splitNodePatch(schema, children, operation, beforeValue) {
|
|
|
6455
6439
|
if (isTextBlock({
|
|
6456
6440
|
schema
|
|
6457
6441
|
}, oldBlock)) {
|
|
6458
|
-
const targetValue = fromSlateBlock(
|
|
6459
|
-
schema
|
|
6460
|
-
}, children[operation.path[0] + 1], schema.block.name);
|
|
6442
|
+
const targetValue = fromSlateBlock(children[operation.path[0] + 1], schema.block.name);
|
|
6461
6443
|
targetValue && (patches.push(insert([targetValue], "after", [{
|
|
6462
6444
|
_key: splitBlock._key
|
|
6463
6445
|
}])), oldBlock.children.slice(operation.position).forEach((span) => {
|
|
@@ -6477,8 +6459,6 @@ function splitNodePatch(schema, children, operation, beforeValue) {
|
|
|
6477
6459
|
schema
|
|
6478
6460
|
}, splitSpan)) {
|
|
6479
6461
|
const targetSpans = fromSlateBlock({
|
|
6480
|
-
schema
|
|
6481
|
-
}, {
|
|
6482
6462
|
...splitBlock,
|
|
6483
6463
|
children: splitBlock.children.slice(operation.path[1] + 1, operation.path[1] + 2)
|
|
6484
6464
|
}, schema.block.name).children;
|
|
@@ -6520,9 +6500,7 @@ function mergeNodePatch(schema, children, operation, beforeValue) {
|
|
|
6520
6500
|
const patches = [], block = beforeValue[operation.path[0]], updatedBlock = children[operation.path[0]];
|
|
6521
6501
|
if (operation.path.length === 1)
|
|
6522
6502
|
if (block?._key) {
|
|
6523
|
-
const newBlock = fromSlateBlock(
|
|
6524
|
-
schema
|
|
6525
|
-
}, children[operation.path[0] - 1], schema.block.name);
|
|
6503
|
+
const newBlock = fromSlateBlock(children[operation.path[0] - 1], schema.block.name);
|
|
6526
6504
|
patches.push(set(newBlock, [{
|
|
6527
6505
|
_key: newBlock._key
|
|
6528
6506
|
}])), patches.push(unset([{
|
|
@@ -7198,7 +7176,7 @@ function createSlateEditor(config) {
|
|
|
7198
7176
|
relayActor: config.relayActor,
|
|
7199
7177
|
subscriptions: config.subscriptions
|
|
7200
7178
|
});
|
|
7201
|
-
return
|
|
7179
|
+
return buildIndexMaps({
|
|
7202
7180
|
schema: config.editorActor.getSnapshot().context.schema,
|
|
7203
7181
|
value: instance.value
|
|
7204
7182
|
}, {
|