@portabletext/editor 7.12.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/{behavior.types.action-DH6ujvaH.d.ts → behavior.types.action-Dzc2_Hey.d.ts} +88 -363
- package/lib/behavior.types.action-Dzc2_Hey.d.ts.map +1 -0
- package/lib/behavior.types.behavior-BxSLb73I.js.map +1 -1
- package/lib/behaviors/index.d.ts +1 -1
- package/lib/get-container-D1nM_ww9.js.map +1 -1
- package/lib/get-parent-Ci5241qs.js.map +1 -1
- package/lib/get-path-sub-schema-CZd9VcVM.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +520 -1262
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.d.ts +1 -4
- package/lib/plugins/index.d.ts.map +1 -1
- package/lib/plugins/index.js +0 -3
- package/lib/plugins/index.js.map +1 -1
- package/lib/{selector.is-at-the-start-of-block-D0boZbDu.js → selector.is-selecting-entire-blocks-DPnzucrd.js} +19 -41
- package/lib/selector.is-selecting-entire-blocks-DPnzucrd.js.map +1 -0
- package/lib/selectors/index.d.ts +1 -1
- package/lib/selectors/index.js +28 -2
- package/lib/selectors/index.js.map +1 -1
- package/lib/traversal/index.d.ts +1 -1
- package/lib/traversal/index.js.map +1 -1
- package/lib/use-editor-CwNeVwVC.js.map +1 -1
- package/lib/util.is-equal-selections-N1hxVUbE.js.map +1 -1
- package/lib/util.slice-blocks-B2fZcNok.js.map +1 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js.map +1 -1
- package/package.json +15 -25
- package/lib/behavior.types.action-DH6ujvaH.d.ts.map +0 -1
- package/lib/selector.is-at-the-start-of-block-D0boZbDu.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/traversal/get-annotation.ts"],"sourcesContent":["import type {PortableTextObject} from '@portabletext/schema'\nimport type {Path} from '../engine/interfaces/path'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\nimport {getTextBlock} from './get-text-block'\nimport type {TraversalSnapshot} from './traversal-snapshot'\n\n/**\n * Get the annotation at a given path.\n *\n * Annotations live in `markDefs` on a text block, alongside `children`\n * rather than inside it, so they aren't reachable through `getNode`.\n * `getAnnotation` resolves a path of the shape\n * `[..., {_key: block}, 'markDefs', {_key: annotation}, ...]` to the\n * annotation node on the enclosing text block.\n *\n * @public\n */\nexport function getAnnotation(\n snapshot: TraversalSnapshot,\n path: Path,\n): {node: PortableTextObject; path: Path} | undefined {\n // A path may cross multiple `'markDefs'` segments if a consumer\n // registers a container whose array field is named `markDefs`. Try\n // each position and pick the one whose prefix resolves to a text\n // block.\n for (let i = 0; i < path.length - 1; i++) {\n if (path[i] !== 'markDefs') {\n continue\n }\n\n const annotationSegment = path[i + 1]\n\n if (!isKeyedSegment(annotationSegment)) {\n continue\n }\n\n const block = getTextBlock(snapshot, path.slice(0, i))\n\n if (!block) {\n continue\n }\n\n const annotation = block.node.markDefs?.find(\n (markDef) => markDef._key === annotationSegment._key,\n )\n\n if (!annotation) {\n return undefined\n }\n\n return {\n node: annotation,\n path: [...block.path, 'markDefs', {_key: annotation._key}],\n }\n }\n\n return undefined\n}\n"],"mappings":";;;;;;;;;;;;;;AAiBA,SAAgB,cACd,UACA,MACoD;CAKpD,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;EACxC,IAAI,KAAK,OAAO,YACd;EAGF,IAAM,oBAAoB,KAAK,IAAI;EAEnC,IAAI,CAAC,eAAe,iBAAiB,GACnC;EAGF,IAAM,QAAQ,aAAa,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC;EAErD,IAAI,CAAC,OACH;EAGF,IAAM,aAAa,MAAM,KAAK,UAAU,MACrC,YAAY,QAAQ,SAAS,kBAAkB,IAClD;EAMA,OAJK,aAIE;GACL,MAAM;GACN,MAAM;IAAC,GAAG,MAAM;IAAM;IAAY,EAAC,MAAM,WAAW,KAAI;GAAC;EAC3D,IANE;CAOJ;AAGF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-editor-CwNeVwVC.js","names":[
|
|
1
|
+
{"version":3,"file":"use-editor-CwNeVwVC.js","names":[],"sources":["../src/internal-utils/globally-scoped-context.ts","../src/editor/editor-context.tsx","../src/editor/use-editor.ts"],"sourcesContent":["import {createContext, type Context} from 'react'\n\n/**\n * As `@portabletext/editor` is declared as a dependency, and may be\n * duplicated, sometimes across major versions it's critical that vital\n * React Contexts are shared even when there is a duplicate.\n *\n * We have to support a Sanity Plugin being able to call hooks like\n * `useEditor`, and then read the context setup by `sanity`, which calls\n * `EditorProvider`, even if the provider and hook are different instances in\n * memory.\n *\n * For this reason it's vital that all changes to globally scoped providers\n * remain fully backwards compatible.\n */\nexport function createGloballyScopedContext<\n ContextType,\n const T extends ContextType = ContextType,\n>(\n /**\n * Enforce that all Symbol.for keys used for globally scoped contexts have a predictable prefix\n */\n key: `@portabletext/editor/context/${string}`,\n defaultValue: T,\n): Context<ContextType> {\n const symbol = Symbol.for(key)\n\n /**\n * Prevent errors about re-renders on React SSR on Next.js App Router\n */\n if (typeof document === 'undefined') {\n return createContext<ContextType>(defaultValue)\n }\n\n const scope = globalThis as any\n scope[symbol] = scope[symbol] ?? createContext<T>(defaultValue)\n\n return scope[symbol]\n}\n","import type {Editor} from '../editor'\nimport {createGloballyScopedContext} from '../internal-utils/globally-scoped-context'\n\nexport const EditorContext = createGloballyScopedContext<Editor | null>(\n '@portabletext/editor/context/editor',\n null,\n)\n","import React from 'react'\nimport {EditorContext} from './editor-context'\n\n/**\n * @public\n * Get the current editor context from the `EditorProvider`.\n * Must be used inside the `EditorProvider` component.\n * @returns The current editor object.\n * @example\n * ```tsx\n * import { useEditor } from '@portabletext/editor'\n *\n * function MyComponent() {\n * const editor = useEditor()\n * }\n * ```\n * @group Hooks\n */\nexport function useEditor() {\n const editor = React.useContext(EditorContext)\n\n if (!editor) {\n throw new Error('No Editor set. Use EditorProvider to set one.')\n }\n\n return editor\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,SAAgB,4BAOd,KACA,cACsB;CACtB,IAAM,SAAS,OAAO,IAAI,GAAG;;;;CAK7B,IAAI,OAAO,WAAa,KACtB,OAAO,cAA2B,YAAY;CAGhD,IAAM,QAAQ;CAGd,OAFA,MAAM,UAAU,MAAM,WAAW,cAAiB,YAAY,GAEvD,MAAM;AACf;ACnCA,MAAa,gBAAgB,4BAC3B,uCACA,IACF;;;;;;;;;;;;;;;;ACYA,SAAgB,YAAY;CAC1B,IAAM,SAAS,MAAM,WAAW,aAAa;CAE7C,IAAI,CAAC,QACH,MAAU,MAAM,+CAA+C;CAGjE,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.is-equal-selections-N1hxVUbE.js","names":[
|
|
1
|
+
{"version":3,"file":"util.is-equal-selections-N1hxVUbE.js","names":[],"sources":["../src/utils/util.get-text-block-text.ts","../src/utils/util.is-empty-text-block.ts","../src/utils/util.is-equal-selections.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 type {EditorSelection} from '../types/editor'\nimport {isEqualSelectionPoints} from './util.is-equal-selection-points'\n\n/**\n * @public\n */\nexport function isEqualSelections(a: EditorSelection, b: EditorSelection) {\n if (!a && !b) {\n return true\n }\n\n if (!a || !b) {\n return false\n }\n\n return (\n isEqualSelectionPoints(a.anchor, b.anchor) &&\n isEqualSelectionPoints(a.focus, b.focus)\n )\n}\n"],"mappings":";;;;;AAKA,SAAgB,iBAAiB,OAA8B;CAC7D,OAAO,MAAM,SAAS,KAAK,UAAU,MAAM,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE;AAChE;;;;ACAA,SAAgB,iBACd,SACA,OACA;CACA,IAAI,CAAC,YAAY,SAAS,KAAK,GAC7B,OAAO;CAGT,IAAM,WAAW,MAAM,SAAS,OAAO,UAAU,OAAO,SAAS,KAAK,CAAC,GACjE,YAAY,iBAAiB,KAAK;CAExC,OAAO,YAAY,cAAc;AACnC;;;;ACbA,SAAgB,kBAAkB,GAAoB,GAAoB;CASxE,OARI,CAAC,KAAK,CAAC,IACF,KAGL,CAAC,KAAK,CAAC,IACF,KAIP,uBAAuB,EAAE,QAAQ,EAAE,MAAM,KACzC,uBAAuB,EAAE,OAAO,EAAE,KAAK;AAE3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.slice-blocks-B2fZcNok.js","names":["textOffsetOfChild","children","ReadonlyArray","getSpanText","child","childKey","offsetInChild","precedingTextLength","text","keyOf","undefined","length","childAtTextOffset","textOffset","key","offset","remainingOffset","_key","isSpan","isTextBlock","getNode","getParent","TraversalSnapshot","BlockOffset","EditorSelectionPoint","ChildPath","childAtTextOffset","textOffsetOfChild","isKeyedSegment","blockOffsetToSpanSelectionPoint","snapshot","blockOffset","direction","blockEntry","path","context","node","undefined","block","blockPath","placed","children","child","text","offset","_key","key","offsetLeft","selectionPoint","skippedInlineObject","length","spanSelectionPointToBlockOffset","spanSegment","at","textBlock","match","schema","PathSegment","isKeyedSegment","isEqualPathSegments","segA","segB","undefined","_key","Array","isArray","Path","isEqualPathSegments","isEqualPaths","a","b","length","i","EditorSelectionPoint","isEqualPaths","isEqualSelectionPoints","a","b","offset","path","EditorSelectionPoint","isKeyedSegment","getBlockKeyFromSelectionPoint","point","blockPathSegment","path","at","_key","undefined","getChildKeyFromSelectionPoint","childPathSegment","isSpan","isTextBlock","PortableTextBlock","EditorContext","EditorSelectionPoint","BlockPath","getBlockEndPoint","context","block","Pick","node","path","lastChild","children","length","_key","offset","text","isTextBlock","PortableTextBlock","EditorContext","EditorSelectionPoint","BlockPath","getBlockStartPoint","context","block","Pick","node","path","firstChild","children","_key","offset","EditorSelection","isEqualPaths","isSelectionCollapsed","selection","anchor","path","focus","offset","EditorSelection","EditorSelectionPoint","getSelectionEndPoint","NonNullable","TEditorSelection","selection","TEditorSelectionPoint","backward","anchor","focus","EditorSelection","EditorSelectionPoint","getSelectionStartPoint","NonNullable","TEditorSelection","selection","TEditorSelectionPoint","backward","focus","anchor","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","length","rnds8","Uint8Array","crypto","getRandomValues","reduce","str","n","getSubSchema","isSpan","isTextBlock","FieldDefinition","OfDefinition","PortableTextBlock","PortableTextListBlock","PortableTextObject","PortableTextSpan","PortableTextTextBlock","Schema","TypedObject","EditorContext","isRecord","isTypedObject","parseBlocks","schema","keyGenerator","blocks","options","normalize","removeUnusedMarkDefs","validateFields","Array","isArray","flatMap","block","parsedBlock","parseBlockInternal","parseBlock","parseSpan","span","markDefKeyMap","Map","parseSpanInternal","parseInlineObject","inlineObject","parseInlineObjectInternal","parseChild","child","parseChildInternal","parseMarkDefs","markDefs","parseMarkDefsInternal","parseTextBlock","parseBlockObject","blockObject","undefined","schemaType","blockObjects","find","name","_type","parseObject","object","isListBlock","context","Pick","level","listItem","customFields","Record","key","Object","keys","fields","some","f","_key","unparsedChildren","parsedChildren","map","filter","marks","children","length","text","normalizedChildren","reduce","index","previousChild","at","markDef","includes","styles","style","lists","list","unparsedMarkDefs","parsedMarkDefs","annotations","parsedAnnotation","set","unparsedMarks","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","resolveOfMember","of","ReadonlyArray","typeName","ancestorFields","ReadonlyMap","member","type","ancestorMatch","rootMatch","fieldsByName","field","nextAncestors","values","value","entries","parseContainerFieldValue","hasBlockMember","childBlockSubSchema","item","parsed","isSpan","isTextBlock","PortableTextBlock","EditorContext","defaultKeyGenerator","parseBlock","getSelectionEndPoint","getSelectionStartPoint","getBlockKeyFromSelectionPoint","getChildKeyFromSelectionPoint","sliceBlocks","context","blocks","Pick","keyGenerator","Array","slice","selection","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","block","_key","child","children","text","offset","push","options","normalize","removeUnusedMarkDefs","validateFields","schema","parsedStartBlock","undefined","parsedEndBlock"],"sources":["../src/utils/util.child-text-offset.ts","../src/utils/util.block-offset.ts","../src/utils/util.is-equal-path-segments.ts","../src/utils/util.is-equal-paths.ts","../src/utils/util.is-equal-selection-points.ts","../src/utils/util.selection-point.ts","../src/utils/util.get-block-end-point.ts","../src/utils/util.get-block-start-point.ts","../src/utils/util.is-selection-collapsed.ts","../src/utils/util.get-selection-end-point.ts","../src/utils/util.get-selection-start-point.ts","../src/utils/key-generator.ts","../src/utils/parse-blocks.ts","../src/utils/util.slice-blocks.ts"],"sourcesContent":["/**\n * Pure text-offset arithmetic over a node's children array, shared by\n * the snapshot-aware block-offset utils (`util.block-offset.ts`) and\n * the schema-free point transform (`engine/point/transform-point.ts`).\n * Span-ness is the caller's concern, expressed as an accessor that\n * returns the child's text when the child occupies text offsets and\n * `undefined` when it does not (inline objects, blocks).\n */\n\n/**\n * The text offset of `(childKey, offsetInChild)` within `children`:\n * the total text of the children before that child, plus the offset\n * into it. `undefined` when the child is missing or carries no text.\n */\nexport function textOffsetOfChild(\n children: ReadonlyArray<unknown>,\n getSpanText: (child: unknown) => string | undefined,\n childKey: string,\n offsetInChild: number,\n): number | undefined {\n let precedingTextLength = 0\n\n for (const child of children) {\n const text = getSpanText(child)\n if (keyOf(child) === childKey) {\n return text === undefined\n ? undefined\n : precedingTextLength + offsetInChild\n }\n if (text !== undefined) {\n precedingTextLength += text.length\n }\n }\n\n return undefined\n}\n\n/**\n * The child and child-local offset at `textOffset` within `children`.\n * Forward-boundary convention: an offset landing exactly on a span\n * boundary stays at the end of the earlier span. `undefined` when the\n * offset lies beyond the children's total text.\n */\nexport function childAtTextOffset(\n children: ReadonlyArray<unknown>,\n getSpanText: (child: unknown) => string | undefined,\n textOffset: number,\n): {key: string; offset: number} | undefined {\n let remainingOffset = textOffset\n\n for (const child of children) {\n const text = getSpanText(child)\n if (text === undefined) {\n continue\n }\n if (remainingOffset <= text.length) {\n const key = keyOf(child)\n return key === undefined ? undefined : {key, offset: remainingOffset}\n }\n remainingOffset -= text.length\n }\n\n return undefined\n}\n\nfunction keyOf(child: unknown): string | undefined {\n if (child !== null && typeof child === 'object' && '_key' in child) {\n const key = (child as {_key: unknown})._key\n return typeof key === 'string' ? key : undefined\n }\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport {getNode} from '../traversal/get-node'\nimport {getParent} from '../traversal/get-parent'\nimport type {TraversalSnapshot} from '../traversal/traversal-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {childAtTextOffset, textOffsetOfChild} from './util.child-text-offset'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n snapshot,\n blockOffset,\n direction,\n}: {\n snapshot: TraversalSnapshot\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n const blockEntry = getNode(snapshot, blockOffset.path)\n\n if (!blockEntry || !isTextBlock(snapshot.context, blockEntry.node)) {\n return undefined\n }\n\n const block = blockEntry.node\n const blockPath = blockEntry.path\n\n if (direction === 'forward') {\n const placed = childAtTextOffset(\n block.children,\n (child) =>\n isSpan(snapshot.context, child as (typeof block.children)[number])\n ? (child as {text: string}).text\n : undefined,\n blockOffset.offset,\n )\n return placed\n ? {\n path: [\n ...blockPath,\n 'children',\n {_key: placed.key},\n ] satisfies ChildPath,\n offset: placed.offset,\n }\n : undefined\n }\n\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const child of block.children) {\n if (!isSpan(snapshot.context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n // A boundary offset stays at the end of the previous span unless an\n // inline object was skipped, in which case falling through to the\n // `offsetLeft <= child.text.length` branch lands the point at the\n // start of this span instead.\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockPath, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n snapshot,\n selectionPoint,\n}: {\n snapshot: TraversalSnapshot\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n const spanSegment = selectionPoint.path.at(-1)\n\n if (!isKeyedSegment(spanSegment)) {\n return undefined\n }\n\n const textBlock = getParent(snapshot, selectionPoint.path, {\n match: (node) => isTextBlock({schema: snapshot.context.schema}, node),\n })\n\n if (!textBlock) {\n return undefined\n }\n\n const offset = textOffsetOfChild(\n textBlock.node.children,\n (child) =>\n isSpan(\n snapshot.context,\n child as (typeof textBlock.node.children)[number],\n )\n ? (child as {text: string}).text\n : undefined,\n spanSegment._key,\n selectionPoint.offset,\n )\n\n return offset === undefined ? undefined : {path: textBlock.path, offset}\n}\n","import type {PathSegment} from '../types/paths'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function isEqualPathSegments(\n segA: PathSegment | undefined,\n segB: PathSegment | undefined,\n): boolean {\n if (segA === segB) {\n return true\n }\n\n if (segA === undefined || segB === undefined) {\n return false\n }\n\n if (\n (typeof segA === 'string' || typeof segA === 'number') &&\n (typeof segB === 'string' || typeof segB === 'number')\n ) {\n return segA === segB\n }\n\n if (isKeyedSegment(segA) && isKeyedSegment(segB)) {\n return segA._key === segB._key\n }\n\n if (Array.isArray(segA) && Array.isArray(segB)) {\n return segA[0] === segB[0] && segA[1] === segB[1]\n }\n\n return false\n}\n","import type {Path} from '../types/paths'\nimport {isEqualPathSegments} from './util.is-equal-path-segments'\n\n/**\n * @public\n */\nexport function isEqualPaths(a: Path, b: Path): boolean {\n if (a.length !== b.length) {\n return false\n }\n\n for (let i = 0; i < a.length; i++) {\n if (!isEqualPathSegments(a[i], b[i])) {\n return false\n }\n }\n\n return true\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isEqualPaths} from './util.is-equal-paths'\n\n/**\n * @public\n */\nexport function isEqualSelectionPoints(\n a: EditorSelectionPoint,\n b: EditorSelectionPoint,\n) {\n return a.offset === b.offset && isEqualPaths(a.path, b.path)\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockEndPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n const lastChild = block.node.children[block.node.children.length - 1]\n\n if (lastChild) {\n return {\n path: [...block.path, 'children', {_key: lastChild._key}],\n offset: isSpan(context, lastChild) ? lastChild.text.length : 0,\n }\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import {isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n const firstChild = block.node.children[0]\n return {\n path: [...block.path, 'children', {_key: firstChild?._key ?? ''}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport {isEqualPaths} from './util.is-equal-paths'\n\n/**\n * @public\n */\nexport function isSelectionCollapsed(selection: EditorSelection) {\n if (!selection) {\n return false\n }\n\n return (\n isEqualPaths(selection.anchor.path, selection.focus.path) &&\n selection.anchor.offset === selection.focus.offset\n )\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends EditorSelectionPoint | null =\n TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends EditorSelectionPoint | null =\n TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n crypto.getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import {\n getSubSchema,\n isSpan,\n isTextBlock,\n type FieldDefinition,\n type OfDefinition,\n type PortableTextBlock,\n type PortableTextListBlock,\n type PortableTextObject,\n type PortableTextSpan,\n type PortableTextTextBlock,\n type Schema,\n type TypedObject,\n} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isRecord, isTypedObject} from './asserters'\n\nexport function parseBlocks({\n schema,\n keyGenerator,\n blocks,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n blocks: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlockInternal({\n schema,\n keyGenerator,\n block,\n options,\n })\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n schema,\n keyGenerator,\n block,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n block: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return parseBlockInternal({schema, keyGenerator, block, options})\n}\n\nexport function parseSpan({\n span,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n return parseSpanInternal({span, schema, keyGenerator, markDefKeyMap, options})\n}\n\nexport function parseInlineObject({\n inlineObject,\n schema,\n keyGenerator,\n options,\n}: {\n inlineObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n return parseInlineObjectInternal({\n inlineObject,\n schema,\n keyGenerator,\n options,\n })\n}\n\nexport function parseChild({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return parseChildInternal({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n })\n}\n\nexport function parseMarkDefs({\n schema,\n keyGenerator,\n markDefs,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n return parseMarkDefsInternal({schema, keyGenerator, markDefs, options})\n}\n\nfunction parseBlockInternal({\n schema,\n keyGenerator,\n block,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n block: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, schema, keyGenerator, options}) ??\n parseBlockObject({blockObject: block, schema, keyGenerator, options})\n )\n}\n\nfunction parseBlockObject({\n blockObject,\n schema,\n keyGenerator,\n options,\n}: {\n blockObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nfunction parseTextBlock({\n block,\n schema,\n keyGenerator,\n options,\n}: {\n block: unknown\n schema: Schema\n keyGenerator: () => string\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (block._type !== schema.block.name) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if ((schema.block.fields ?? []).some((f) => f.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n const _key =\n typeof block['_key'] === 'string' ? block['_key'] : keyGenerator()\n\n const {markDefs, markDefKeyMap} = parseMarkDefsInternal({\n schema,\n keyGenerator,\n markDefs: block['markDefs'],\n options,\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block['children'])\n ? block['children']\n : []\n\n const parsedChildren = unparsedChildren\n .map((child) =>\n parseChildInternal({child, schema, keyGenerator, markDefKeyMap, options}),\n )\n .filter((child) => child !== undefined)\n const marks = parsedChildren.flatMap((child) => child.marks ?? [])\n\n const children =\n parsedChildren.length > 0\n ? parsedChildren\n : [\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n ]\n\n const normalizedChildren = options.normalize\n ? // Ensure that inline objects re surrounded by spans\n children.reduce<Array<PortableTextObject | PortableTextSpan>>(\n (normalizedChildren, child, index) => {\n if (isSpan({schema}, child)) {\n return [...normalizedChildren, child]\n }\n\n const previousChild = normalizedChildren.at(-1)\n\n if (!previousChild || !isSpan({schema}, previousChild)) {\n return [\n ...normalizedChildren,\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n child,\n ...(index === children.length - 1\n ? [\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n ]\n : []),\n ]\n }\n\n return [...normalizedChildren, child]\n },\n [],\n )\n : children\n\n const parsedBlock: PortableTextTextBlock = {\n _type: schema.block.name,\n _key,\n children: normalizedChildren,\n ...customFields,\n }\n\n if (typeof block['markDefs'] === 'object' && block['markDefs'] !== null) {\n parsedBlock.markDefs = options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs\n }\n\n if (\n typeof block['style'] === 'string' &&\n schema.styles.find((style) => style.name === block['style'])\n ) {\n parsedBlock.style = block['style']\n }\n\n if (\n typeof block['listItem'] === 'string' &&\n schema.lists.find((list) => list.name === block['listItem'])\n ) {\n parsedBlock.listItem = block['listItem']\n }\n\n if (typeof block['level'] === 'number') {\n parsedBlock.level = block['level']\n }\n\n return parsedBlock\n}\n\nfunction parseMarkDefsInternal({\n schema,\n keyGenerator,\n markDefs,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n const unparsedMarkDefs: Array<unknown> = Array.isArray(markDefs)\n ? markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n\n const parsedMarkDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef['_key'] !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n schema,\n keyGenerator,\n schemaType,\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef['_key'], parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n return {\n markDefs: parsedMarkDefs,\n markDefKeyMap,\n }\n}\n\nfunction parseChildInternal({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return (\n parseSpanInternal({\n span: child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n }) ??\n parseInlineObjectInternal({\n inlineObject: child,\n schema,\n keyGenerator,\n options,\n })\n )\n}\n\nfunction parseSpanInternal({\n span,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isRecord(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span['marks'])\n ? span['marks']\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (schema.decorators.some((decorator) => decorator.name === mark)) {\n return [mark]\n }\n\n return []\n })\n\n if (typeof span['_type'] === 'string' && span['_type'] !== schema.span.name) {\n return undefined\n }\n\n if (typeof span['_type'] !== 'string') {\n if (typeof span['text'] === 'string') {\n return {\n _type: schema.span.name as 'span',\n _key: typeof span['_key'] === 'string' ? span['_key'] : keyGenerator(),\n text: span['text'],\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n }\n\n return undefined\n }\n\n return {\n _type: schema.span.name as 'span',\n _key: typeof span['_key'] === 'string' ? span['_key'] : keyGenerator(),\n text: typeof span['text'] === 'string' ? span['text'] : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nfunction parseInlineObjectInternal({\n inlineObject,\n schema,\n keyGenerator,\n options,\n}: {\n inlineObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n schema,\n keyGenerator,\n options,\n}: {\n annotation: TypedObject\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\n/**\n * Resolve an `of` member against a runtime `_type`. Returns the schema-type\n * to use for parsing the item, or `undefined` if no member matches.\n *\n * Three forms (one branch each):\n * - Inline declaration `{type: 'object', name: 'X', fields: [...]}` -- name\n * matches `_type`, fields are inline.\n * - Reference `{type: 'X'}` -- looks up in the ancestor chain first\n * (inline-declared types are visible to descendants), then in the schema's\n * root `blockObjects`. Mirrors `resolve-containers.ts`'s reference\n * resolution.\n * - `{type: 'block'}` -- not a non-PTE object member, returns `undefined`.\n */\nfunction resolveOfMember(\n of: ReadonlyArray<OfDefinition>,\n typeName: string,\n schema: Schema,\n ancestorFields: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>,\n): {name: string; fields: ReadonlyArray<FieldDefinition>} | undefined {\n for (const member of of) {\n if (member.type === 'block') {\n continue\n }\n if (member.type === 'object' && 'name' in member && member.name) {\n if (member.name === typeName && 'fields' in member && member.fields) {\n return {name: member.name, fields: member.fields}\n }\n continue\n }\n if (member.type === typeName) {\n const ancestorMatch = ancestorFields.get(typeName)\n if (ancestorMatch) {\n return {name: typeName, fields: ancestorMatch}\n }\n const rootMatch = schema.blockObjects.find(\n (blockObject) => blockObject.name === typeName,\n )\n if (rootMatch && 'fields' in rootMatch && rootMatch.fields) {\n return {name: rootMatch.name, fields: rootMatch.fields}\n }\n return undefined\n }\n }\n return undefined\n}\n\n/**\n * Parse an object against a `{name, fields}` schema type. Validates top-level\n * fields and recurses into any array field whose `of` contains a block-like\n * member -- parsing the nested blocks against a child `Schema` built from\n * that `of`.\n */\nfunction parseObject({\n object,\n schema,\n keyGenerator,\n schemaType,\n ancestorFields,\n options,\n}: {\n object: TypedObject\n schema: Schema\n keyGenerator: () => string\n schemaType: {\n name: string\n fields: ReadonlyArray<FieldDefinition>\n }\n ancestorFields?: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_key, ...customFields} = object\n\n const fieldsByName = new Map(\n schemaType.fields.map((field) => [field.name, field]),\n )\n\n const nextAncestors = new Map(ancestorFields ?? [])\n nextAncestors.set(schemaType.name, schemaType.fields)\n\n const values: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(customFields)) {\n if (key === '_type') {\n continue\n }\n\n if (value === undefined) {\n continue\n }\n\n const field = fieldsByName.get(key)\n\n if (options.validateFields && !field) {\n continue\n }\n\n if (field && field.type === 'array' && field.of && Array.isArray(value)) {\n values[key] = parseContainerFieldValue({\n schema,\n keyGenerator,\n of: field.of,\n value,\n ancestorFields: nextAncestors,\n options,\n })\n continue\n }\n\n values[key] = value\n }\n\n return {\n _type: schemaType.name,\n _key: typeof _key === 'string' ? _key : keyGenerator(),\n ...values,\n }\n}\n\n/**\n * Parse the value of an array field whose `of` declares what's allowed at\n * that position. Each item is dispatched per its own type:\n *\n * - Text blocks (`_type === schema.block.name`) are parsed against a child\n * sub-schema derived from the `{type: 'block'}` member of `of` (which\n * carries the styles, decorators, annotations, lists, and inline objects\n * allowed at this position).\n *\n * - Block objects (and structural objects sitting between containers and\n * text blocks) are parsed via `resolveOfMember` against the `of` array,\n * with `ancestorFields` carrying inline type declarations down to bare\n * references like `{type: 'list'}`. This lets nested containers resolve\n * to their inline shapes at any depth.\n *\n * Items that don't resolve are passed through unchanged.\n */\nfunction parseContainerFieldValue({\n schema,\n keyGenerator,\n of,\n value,\n ancestorFields,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n of: ReadonlyArray<OfDefinition>\n value: ReadonlyArray<unknown>\n ancestorFields: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>\n options: {validateFields: boolean; normalize?: boolean}\n}): Array<unknown> {\n const hasBlockMember = of.some((member) => member.type === 'block')\n const childBlockSubSchema = hasBlockMember\n ? getSubSchema(schema, of)\n : undefined\n\n return value.flatMap((item) => {\n if (!isTypedObject(item)) {\n return [item]\n }\n\n if (childBlockSubSchema && item._type === childBlockSubSchema.block.name) {\n const parsed = parseTextBlock({\n block: item,\n schema: childBlockSubSchema,\n keyGenerator,\n options: {\n normalize: false,\n removeUnusedMarkDefs: false,\n validateFields: options.validateFields,\n },\n })\n return parsed ? [parsed] : []\n }\n\n const schemaType = resolveOfMember(of, item._type, schema, ancestorFields)\n if (!schemaType) {\n return [item]\n }\n return [\n parseObject({\n object: item,\n schema,\n keyGenerator,\n schemaType: {\n name: schemaType.name,\n fields: schemaType.fields,\n },\n ancestorFields,\n options,\n }),\n ]\n })\n}\n","import {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {parseBlock} from './parse-blocks'\nimport {getSelectionEndPoint} from './util.get-selection-end-point'\nimport {getSelectionStartPoint} from './util.get-selection-start-point'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'> & {\n keyGenerator?: () => string\n }\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block: startBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block: endBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.slice-blocks-B2fZcNok.js","names":[],"sources":["../src/utils/util.child-text-offset.ts","../src/utils/util.block-offset.ts","../src/utils/util.is-equal-path-segments.ts","../src/utils/util.is-equal-paths.ts","../src/utils/util.is-equal-selection-points.ts","../src/utils/util.selection-point.ts","../src/utils/util.get-block-end-point.ts","../src/utils/util.get-block-start-point.ts","../src/utils/util.is-selection-collapsed.ts","../src/utils/util.get-selection-end-point.ts","../src/utils/util.get-selection-start-point.ts","../src/utils/key-generator.ts","../src/utils/parse-blocks.ts","../src/utils/util.slice-blocks.ts"],"sourcesContent":["/**\n * Pure text-offset arithmetic over a node's children array, shared by\n * the snapshot-aware block-offset utils (`util.block-offset.ts`) and\n * the schema-free point transform (`engine/point/transform-point.ts`).\n * Span-ness is the caller's concern, expressed as an accessor that\n * returns the child's text when the child occupies text offsets and\n * `undefined` when it does not (inline objects, blocks).\n */\n\n/**\n * The text offset of `(childKey, offsetInChild)` within `children`:\n * the total text of the children before that child, plus the offset\n * into it. `undefined` when the child is missing or carries no text.\n */\nexport function textOffsetOfChild(\n children: ReadonlyArray<unknown>,\n getSpanText: (child: unknown) => string | undefined,\n childKey: string,\n offsetInChild: number,\n): number | undefined {\n let precedingTextLength = 0\n\n for (const child of children) {\n const text = getSpanText(child)\n if (keyOf(child) === childKey) {\n return text === undefined\n ? undefined\n : precedingTextLength + offsetInChild\n }\n if (text !== undefined) {\n precedingTextLength += text.length\n }\n }\n\n return undefined\n}\n\n/**\n * The child and child-local offset at `textOffset` within `children`.\n * Forward-boundary convention: an offset landing exactly on a span\n * boundary stays at the end of the earlier span. `undefined` when the\n * offset lies beyond the children's total text.\n */\nexport function childAtTextOffset(\n children: ReadonlyArray<unknown>,\n getSpanText: (child: unknown) => string | undefined,\n textOffset: number,\n): {key: string; offset: number} | undefined {\n let remainingOffset = textOffset\n\n for (const child of children) {\n const text = getSpanText(child)\n if (text === undefined) {\n continue\n }\n if (remainingOffset <= text.length) {\n const key = keyOf(child)\n return key === undefined ? undefined : {key, offset: remainingOffset}\n }\n remainingOffset -= text.length\n }\n\n return undefined\n}\n\nfunction keyOf(child: unknown): string | undefined {\n if (child !== null && typeof child === 'object' && '_key' in child) {\n const key = (child as {_key: unknown})._key\n return typeof key === 'string' ? key : undefined\n }\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport {getNode} from '../traversal/get-node'\nimport {getParent} from '../traversal/get-parent'\nimport type {TraversalSnapshot} from '../traversal/traversal-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\nimport {childAtTextOffset, textOffsetOfChild} from './util.child-text-offset'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n snapshot,\n blockOffset,\n direction,\n}: {\n snapshot: TraversalSnapshot\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n const blockEntry = getNode(snapshot, blockOffset.path)\n\n if (!blockEntry || !isTextBlock(snapshot.context, blockEntry.node)) {\n return undefined\n }\n\n const block = blockEntry.node\n const blockPath = blockEntry.path\n\n if (direction === 'forward') {\n const placed = childAtTextOffset(\n block.children,\n (child) =>\n isSpan(snapshot.context, child as (typeof block.children)[number])\n ? (child as {text: string}).text\n : undefined,\n blockOffset.offset,\n )\n return placed\n ? {\n path: [\n ...blockPath,\n 'children',\n {_key: placed.key},\n ] satisfies ChildPath,\n offset: placed.offset,\n }\n : undefined\n }\n\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const child of block.children) {\n if (!isSpan(snapshot.context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n // A boundary offset stays at the end of the previous span unless an\n // inline object was skipped, in which case falling through to the\n // `offsetLeft <= child.text.length` branch lands the point at the\n // start of this span instead.\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockPath, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n snapshot,\n selectionPoint,\n}: {\n snapshot: TraversalSnapshot\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n const spanSegment = selectionPoint.path.at(-1)\n\n if (!isKeyedSegment(spanSegment)) {\n return undefined\n }\n\n const textBlock = getParent(snapshot, selectionPoint.path, {\n match: (node) => isTextBlock({schema: snapshot.context.schema}, node),\n })\n\n if (!textBlock) {\n return undefined\n }\n\n const offset = textOffsetOfChild(\n textBlock.node.children,\n (child) =>\n isSpan(\n snapshot.context,\n child as (typeof textBlock.node.children)[number],\n )\n ? (child as {text: string}).text\n : undefined,\n spanSegment._key,\n selectionPoint.offset,\n )\n\n return offset === undefined ? undefined : {path: textBlock.path, offset}\n}\n","import type {PathSegment} from '../types/paths'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function isEqualPathSegments(\n segA: PathSegment | undefined,\n segB: PathSegment | undefined,\n): boolean {\n if (segA === segB) {\n return true\n }\n\n if (segA === undefined || segB === undefined) {\n return false\n }\n\n if (\n (typeof segA === 'string' || typeof segA === 'number') &&\n (typeof segB === 'string' || typeof segB === 'number')\n ) {\n return segA === segB\n }\n\n if (isKeyedSegment(segA) && isKeyedSegment(segB)) {\n return segA._key === segB._key\n }\n\n if (Array.isArray(segA) && Array.isArray(segB)) {\n return segA[0] === segB[0] && segA[1] === segB[1]\n }\n\n return false\n}\n","import type {Path} from '../types/paths'\nimport {isEqualPathSegments} from './util.is-equal-path-segments'\n\n/**\n * @public\n */\nexport function isEqualPaths(a: Path, b: Path): boolean {\n if (a.length !== b.length) {\n return false\n }\n\n for (let i = 0; i < a.length; i++) {\n if (!isEqualPathSegments(a[i], b[i])) {\n return false\n }\n }\n\n return true\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isEqualPaths} from './util.is-equal-paths'\n\n/**\n * @public\n */\nexport function isEqualSelectionPoints(\n a: EditorSelectionPoint,\n b: EditorSelectionPoint,\n) {\n return a.offset === b.offset && isEqualPaths(a.path, b.path)\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockEndPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n const lastChild = block.node.children[block.node.children.length - 1]\n\n if (lastChild) {\n return {\n path: [...block.path, 'children', {_key: lastChild._key}],\n offset: isSpan(context, lastChild) ? lastChild.text.length : 0,\n }\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import {isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n const firstChild = block.node.children[0]\n return {\n path: [...block.path, 'children', {_key: firstChild?._key ?? ''}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport {isEqualPaths} from './util.is-equal-paths'\n\n/**\n * @public\n */\nexport function isSelectionCollapsed(selection: EditorSelection) {\n if (!selection) {\n return false\n }\n\n return (\n isEqualPaths(selection.anchor.path, selection.focus.path) &&\n selection.anchor.offset === selection.focus.offset\n )\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends EditorSelectionPoint | null =\n TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends EditorSelectionPoint | null =\n TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n crypto.getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import {\n getSubSchema,\n isSpan,\n isTextBlock,\n type FieldDefinition,\n type OfDefinition,\n type PortableTextBlock,\n type PortableTextListBlock,\n type PortableTextObject,\n type PortableTextSpan,\n type PortableTextTextBlock,\n type Schema,\n type TypedObject,\n} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isRecord, isTypedObject} from './asserters'\n\nexport function parseBlocks({\n schema,\n keyGenerator,\n blocks,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n blocks: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlockInternal({\n schema,\n keyGenerator,\n block,\n options,\n })\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n schema,\n keyGenerator,\n block,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n block: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return parseBlockInternal({schema, keyGenerator, block, options})\n}\n\nexport function parseSpan({\n span,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n return parseSpanInternal({span, schema, keyGenerator, markDefKeyMap, options})\n}\n\nexport function parseInlineObject({\n inlineObject,\n schema,\n keyGenerator,\n options,\n}: {\n inlineObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n return parseInlineObjectInternal({\n inlineObject,\n schema,\n keyGenerator,\n options,\n })\n}\n\nexport function parseChild({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return parseChildInternal({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n })\n}\n\nexport function parseMarkDefs({\n schema,\n keyGenerator,\n markDefs,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n return parseMarkDefsInternal({schema, keyGenerator, markDefs, options})\n}\n\nfunction parseBlockInternal({\n schema,\n keyGenerator,\n block,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n block: unknown\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, schema, keyGenerator, options}) ??\n parseBlockObject({blockObject: block, schema, keyGenerator, options})\n )\n}\n\nfunction parseBlockObject({\n blockObject,\n schema,\n keyGenerator,\n options,\n}: {\n blockObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nfunction parseTextBlock({\n block,\n schema,\n keyGenerator,\n options,\n}: {\n block: unknown\n schema: Schema\n keyGenerator: () => string\n options: {\n normalize: boolean\n removeUnusedMarkDefs: boolean\n validateFields: boolean\n }\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (block._type !== schema.block.name) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if ((schema.block.fields ?? []).some((f) => f.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n const _key =\n typeof block['_key'] === 'string' ? block['_key'] : keyGenerator()\n\n const {markDefs, markDefKeyMap} = parseMarkDefsInternal({\n schema,\n keyGenerator,\n markDefs: block['markDefs'],\n options,\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block['children'])\n ? block['children']\n : []\n\n const parsedChildren = unparsedChildren\n .map((child) =>\n parseChildInternal({child, schema, keyGenerator, markDefKeyMap, options}),\n )\n .filter((child) => child !== undefined)\n const marks = parsedChildren.flatMap((child) => child.marks ?? [])\n\n const children =\n parsedChildren.length > 0\n ? parsedChildren\n : [\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n ]\n\n const normalizedChildren = options.normalize\n ? // Ensure that inline objects re surrounded by spans\n children.reduce<Array<PortableTextObject | PortableTextSpan>>(\n (normalizedChildren, child, index) => {\n if (isSpan({schema}, child)) {\n return [...normalizedChildren, child]\n }\n\n const previousChild = normalizedChildren.at(-1)\n\n if (!previousChild || !isSpan({schema}, previousChild)) {\n return [\n ...normalizedChildren,\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n child,\n ...(index === children.length - 1\n ? [\n {\n _key: keyGenerator(),\n _type: schema.span.name,\n text: '',\n marks: [],\n },\n ]\n : []),\n ]\n }\n\n return [...normalizedChildren, child]\n },\n [],\n )\n : children\n\n const parsedBlock: PortableTextTextBlock = {\n _type: schema.block.name,\n _key,\n children: normalizedChildren,\n ...customFields,\n }\n\n if (typeof block['markDefs'] === 'object' && block['markDefs'] !== null) {\n parsedBlock.markDefs = options.removeUnusedMarkDefs\n ? markDefs.filter((markDef) => marks.includes(markDef._key))\n : markDefs\n }\n\n if (\n typeof block['style'] === 'string' &&\n schema.styles.find((style) => style.name === block['style'])\n ) {\n parsedBlock.style = block['style']\n }\n\n if (\n typeof block['listItem'] === 'string' &&\n schema.lists.find((list) => list.name === block['listItem'])\n ) {\n parsedBlock.listItem = block['listItem']\n }\n\n if (typeof block['level'] === 'number') {\n parsedBlock.level = block['level']\n }\n\n return parsedBlock\n}\n\nfunction parseMarkDefsInternal({\n schema,\n keyGenerator,\n markDefs,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n markDefs: unknown\n options: {validateFields: boolean}\n}): {\n markDefs: Array<PortableTextObject>\n markDefKeyMap: Map<string, string>\n} {\n const unparsedMarkDefs: Array<unknown> = Array.isArray(markDefs)\n ? markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n\n const parsedMarkDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef['_key'] !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n schema,\n keyGenerator,\n schemaType,\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef['_key'], parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n return {\n markDefs: parsedMarkDefs,\n markDefKeyMap,\n }\n}\n\nfunction parseChildInternal({\n child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n child: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | PortableTextObject | undefined {\n return (\n parseSpanInternal({\n span: child,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n }) ??\n parseInlineObjectInternal({\n inlineObject: child,\n schema,\n keyGenerator,\n options,\n })\n )\n}\n\nfunction parseSpanInternal({\n span,\n schema,\n keyGenerator,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n schema: Schema\n keyGenerator: () => string\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isRecord(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span['marks'])\n ? span['marks']\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (schema.decorators.some((decorator) => decorator.name === mark)) {\n return [mark]\n }\n\n return []\n })\n\n if (typeof span['_type'] === 'string' && span['_type'] !== schema.span.name) {\n return undefined\n }\n\n if (typeof span['_type'] !== 'string') {\n if (typeof span['text'] === 'string') {\n return {\n _type: schema.span.name as 'span',\n _key: typeof span['_key'] === 'string' ? span['_key'] : keyGenerator(),\n text: span['text'],\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n }\n\n return undefined\n }\n\n return {\n _type: schema.span.name as 'span',\n _key: typeof span['_key'] === 'string' ? span['_key'] : keyGenerator(),\n text: typeof span['text'] === 'string' ? span['text'] : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nfunction parseInlineObjectInternal({\n inlineObject,\n schema,\n keyGenerator,\n options,\n}: {\n inlineObject: unknown\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n schema,\n keyGenerator,\n options,\n}: {\n annotation: TypedObject\n schema: Schema\n keyGenerator: () => string\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n schema,\n keyGenerator,\n schemaType,\n options,\n })\n}\n\n/**\n * Resolve an `of` member against a runtime `_type`. Returns the schema-type\n * to use for parsing the item, or `undefined` if no member matches.\n *\n * Three forms (one branch each):\n * - Inline declaration `{type: 'object', name: 'X', fields: [...]}` -- name\n * matches `_type`, fields are inline.\n * - Reference `{type: 'X'}` -- looks up in the ancestor chain first\n * (inline-declared types are visible to descendants), then in the schema's\n * root `blockObjects`. Mirrors `resolve-containers.ts`'s reference\n * resolution.\n * - `{type: 'block'}` -- not a non-PTE object member, returns `undefined`.\n */\nfunction resolveOfMember(\n of: ReadonlyArray<OfDefinition>,\n typeName: string,\n schema: Schema,\n ancestorFields: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>,\n): {name: string; fields: ReadonlyArray<FieldDefinition>} | undefined {\n for (const member of of) {\n if (member.type === 'block') {\n continue\n }\n if (member.type === 'object' && 'name' in member && member.name) {\n if (member.name === typeName && 'fields' in member && member.fields) {\n return {name: member.name, fields: member.fields}\n }\n continue\n }\n if (member.type === typeName) {\n const ancestorMatch = ancestorFields.get(typeName)\n if (ancestorMatch) {\n return {name: typeName, fields: ancestorMatch}\n }\n const rootMatch = schema.blockObjects.find(\n (blockObject) => blockObject.name === typeName,\n )\n if (rootMatch && 'fields' in rootMatch && rootMatch.fields) {\n return {name: rootMatch.name, fields: rootMatch.fields}\n }\n return undefined\n }\n }\n return undefined\n}\n\n/**\n * Parse an object against a `{name, fields}` schema type. Validates top-level\n * fields and recurses into any array field whose `of` contains a block-like\n * member -- parsing the nested blocks against a child `Schema` built from\n * that `of`.\n */\nfunction parseObject({\n object,\n schema,\n keyGenerator,\n schemaType,\n ancestorFields,\n options,\n}: {\n object: TypedObject\n schema: Schema\n keyGenerator: () => string\n schemaType: {\n name: string\n fields: ReadonlyArray<FieldDefinition>\n }\n ancestorFields?: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_key, ...customFields} = object\n\n const fieldsByName = new Map(\n schemaType.fields.map((field) => [field.name, field]),\n )\n\n const nextAncestors = new Map(ancestorFields ?? [])\n nextAncestors.set(schemaType.name, schemaType.fields)\n\n const values: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(customFields)) {\n if (key === '_type') {\n continue\n }\n\n if (value === undefined) {\n continue\n }\n\n const field = fieldsByName.get(key)\n\n if (options.validateFields && !field) {\n continue\n }\n\n if (field && field.type === 'array' && field.of && Array.isArray(value)) {\n values[key] = parseContainerFieldValue({\n schema,\n keyGenerator,\n of: field.of,\n value,\n ancestorFields: nextAncestors,\n options,\n })\n continue\n }\n\n values[key] = value\n }\n\n return {\n _type: schemaType.name,\n _key: typeof _key === 'string' ? _key : keyGenerator(),\n ...values,\n }\n}\n\n/**\n * Parse the value of an array field whose `of` declares what's allowed at\n * that position. Each item is dispatched per its own type:\n *\n * - Text blocks (`_type === schema.block.name`) are parsed against a child\n * sub-schema derived from the `{type: 'block'}` member of `of` (which\n * carries the styles, decorators, annotations, lists, and inline objects\n * allowed at this position).\n *\n * - Block objects (and structural objects sitting between containers and\n * text blocks) are parsed via `resolveOfMember` against the `of` array,\n * with `ancestorFields` carrying inline type declarations down to bare\n * references like `{type: 'list'}`. This lets nested containers resolve\n * to their inline shapes at any depth.\n *\n * Items that don't resolve are passed through unchanged.\n */\nfunction parseContainerFieldValue({\n schema,\n keyGenerator,\n of,\n value,\n ancestorFields,\n options,\n}: {\n schema: Schema\n keyGenerator: () => string\n of: ReadonlyArray<OfDefinition>\n value: ReadonlyArray<unknown>\n ancestorFields: ReadonlyMap<string, ReadonlyArray<FieldDefinition>>\n options: {validateFields: boolean; normalize?: boolean}\n}): Array<unknown> {\n const hasBlockMember = of.some((member) => member.type === 'block')\n const childBlockSubSchema = hasBlockMember\n ? getSubSchema(schema, of)\n : undefined\n\n return value.flatMap((item) => {\n if (!isTypedObject(item)) {\n return [item]\n }\n\n if (childBlockSubSchema && item._type === childBlockSubSchema.block.name) {\n const parsed = parseTextBlock({\n block: item,\n schema: childBlockSubSchema,\n keyGenerator,\n options: {\n normalize: false,\n removeUnusedMarkDefs: false,\n validateFields: options.validateFields,\n },\n })\n return parsed ? [parsed] : []\n }\n\n const schemaType = resolveOfMember(of, item._type, schema, ancestorFields)\n if (!schemaType) {\n return [item]\n }\n return [\n parseObject({\n object: item,\n schema,\n keyGenerator,\n schemaType: {\n name: schemaType.name,\n fields: schemaType.fields,\n },\n ancestorFields,\n options,\n }),\n ]\n })\n}\n","import {isSpan, isTextBlock, type PortableTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from './key-generator'\nimport {parseBlock} from './parse-blocks'\nimport {getSelectionEndPoint} from './util.get-selection-end-point'\nimport {getSelectionStartPoint} from './util.get-selection-start-point'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from './util.selection-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'> & {\n keyGenerator?: () => string\n }\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (block._key === endBlockKey && startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block: startBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n keyGenerator: context.keyGenerator ?? defaultKeyGenerator,\n block: endBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n"],"mappings":"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"}
|
package/lib/utils/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { I as BlockOffset, at as EditorSelectionPoint, cn as KeyedSegment, et as EditorContext, it as EditorSelection, ln as Path, on as BlockPath, un as PathSegment, xt as TraversalSnapshot } from "../behavior.types.action-Dzc2_Hey.js";
|
|
2
2
|
import { PortableTextBlock, PortableTextTextBlock, isSpan, isTextBlock } from "@portabletext/schema";
|
|
3
3
|
/**
|
|
4
4
|
* @public
|
package/lib/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/utils/util.block-offset-to-block-selection-point.ts","../../src/utils/util.block-offset-to-selection-point.ts","../../src/utils/util.block-offsets-to-selection.ts","../../src/utils/util.child-selection-point-to-block-offset.ts","../../src/utils/util.merge-text-blocks.ts","../../src/utils/util.reverse-selection.ts"],"sourcesContent":["import {getNode} from '../traversal/get-node'\nimport type {TraversalSnapshot} from '../traversal/traversal-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\n\nexport function blockOffsetToBlockSelectionPoint({\n snapshot,\n blockOffset,\n}: {\n snapshot: TraversalSnapshot\n blockOffset: BlockOffset\n}): EditorSelectionPoint | undefined {\n const blockEntry = getNode(snapshot, blockOffset.path)\n\n if (!blockEntry) {\n return undefined\n }\n\n return {\n path: blockEntry.path,\n offset: blockOffset.offset,\n }\n}\n","import type {TraversalSnapshot} from '../traversal/traversal-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {blockOffsetToSpanSelectionPoint} from './util.block-offset'\nimport {blockOffsetToBlockSelectionPoint} from './util.block-offset-to-block-selection-point'\n\nexport function blockOffsetToSelectionPoint({\n snapshot,\n blockOffset,\n direction,\n}: {\n snapshot: TraversalSnapshot\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}): EditorSelectionPoint | undefined {\n const spanSelectionPoint = blockOffsetToSpanSelectionPoint({\n snapshot,\n blockOffset,\n direction,\n })\n\n if (!spanSelectionPoint) {\n return blockOffsetToBlockSelectionPoint({\n snapshot,\n blockOffset,\n })\n }\n\n return spanSelectionPoint\n}\n","import type {TraversalSnapshot} from '../traversal/traversal-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelection} from '../types/editor'\nimport {blockOffsetToSelectionPoint} from './util.block-offset-to-selection-point'\n\n/**\n * @public\n */\nexport function blockOffsetsToSelection({\n snapshot,\n offsets,\n backward,\n}: {\n snapshot: TraversalSnapshot\n offsets: {anchor: BlockOffset; focus: BlockOffset}\n backward?: boolean\n}): EditorSelection {\n const anchor = blockOffsetToSelectionPoint({\n snapshot,\n blockOffset: offsets.anchor,\n direction: backward ? 'backward' : 'forward',\n })\n const focus = blockOffsetToSelectionPoint({\n snapshot,\n blockOffset: offsets.focus,\n direction: backward ? 'forward' : 'backward',\n })\n\n if (!anchor || !focus) {\n return null\n }\n\n return {\n anchor,\n focus,\n backward,\n }\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport {getParent} from '../traversal/get-parent'\nimport type {TraversalSnapshot} from '../traversal/traversal-snapshot'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from './util.is-keyed-segment'\n\n/**\n * @public\n */\nexport function childSelectionPointToBlockOffset({\n snapshot,\n selectionPoint,\n}: {\n snapshot: TraversalSnapshot\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n const childSegment = selectionPoint.path.at(-1)\n\n if (!isKeyedSegment(childSegment)) {\n return undefined\n }\n\n const textBlock = getParent(snapshot, selectionPoint.path, {\n match: (node) => isTextBlock({schema: snapshot.context.schema}, node),\n })\n\n if (!textBlock) {\n return undefined\n }\n\n let offset = 0\n\n for (const child of textBlock.node.children) {\n if (child._key === childSegment._key) {\n return {\n path: textBlock.path,\n offset: offset + selectionPoint.offset,\n }\n }\n\n if (isSpan(snapshot.context, child)) {\n offset += child.text.length\n }\n }\n\n return undefined\n}\n","import {isTextBlock, type PortableTextTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {parseBlock} from './parse-blocks'\n\n/**\n * @beta\n */\nexport function mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n targetBlock: PortableTextTextBlock\n incomingBlock: PortableTextTextBlock\n}) {\n const parsedIncomingBlock = parseBlock({\n keyGenerator: context.keyGenerator,\n block: incomingBlock,\n options: {\n normalize: false,\n removeUnusedMarkDefs: true,\n validateFields: false,\n },\n schema: context.schema,\n })\n\n if (!parsedIncomingBlock || !isTextBlock(context, parsedIncomingBlock)) {\n return targetBlock\n }\n\n return {\n ...targetBlock,\n children: [...targetBlock.children, ...parsedIncomingBlock.children],\n markDefs: [\n ...(targetBlock.markDefs ?? []),\n ...(parsedIncomingBlock.markDefs ?? []),\n ],\n }\n}\n","import type {EditorSelection} from '../types/editor'\n\n/**\n * @public\n */\nexport function reverseSelection<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n>(selection: TEditorSelection): TEditorSelection {\n if (!selection) {\n return selection\n }\n\n if (selection.backward) {\n return {\n anchor: selection.focus,\n focus: selection.anchor,\n backward: false,\n } as TEditorSelection\n }\n\n return {\n anchor: selection.focus,\n focus: selection.anchor,\n backward: true,\n } as TEditorSelection\n}\n"],"mappings":";;;;AAKA,SAAgB,iCAAiC,EAC/C,UACA,eAImC;CACnC,IAAM,aAAa,QAAQ,UAAU,YAAY,IAAI;CAEhD,gBAIL,OAAO;EACL,MAAM,WAAW;EACjB,QAAQ,YAAY;CACtB;AACF;AChBA,SAAgB,4BAA4B,EAC1C,UACA,aACA,aAKmC;CAcnC,OAb2B,gCAAgC;EACzD;EACA;EACA;CACF,CAEK,KACI,iCAAiC;EACtC;EACA;CACF,CAAC;AAIL;;;;ACrBA,SAAgB,wBAAwB,EACtC,UACA,SACA,YAKkB;CAClB,IAAM,SAAS,4BAA4B;EACzC;EACA,aAAa,QAAQ;EACrB,WAAW,WAAW,aAAa;CACrC,CAAC,GACK,QAAQ,4BAA4B;EACxC;EACA,aAAa,QAAQ;EACrB,WAAW,WAAW,YAAY;CACpC,CAAC;CAMD,OAJI,CAAC,UAAU,CAAC,QACP,OAGF;EACL;EACA;EACA;CACF;AACF;;;;AC3BA,SAAgB,iCAAiC,EAC/C,UACA,kBAI0B;CAC1B,IAAM,eAAe,eAAe,KAAK,GAAG,EAAE;CAE9C,IAAI,CAAC,eAAe,YAAY,GAC9B;CAGF,IAAM,YAAY,UAAU,UAAU,eAAe,MAAM,EACzD,QAAQ,SAAS,cAAY,EAAC,QAAQ,SAAS,QAAQ,OAAM,GAAG,IAAI,EACtE,CAAC;CAED,IAAI,CAAC,WACH;CAGF,IAAI,SAAS;CAEb,KAAK,IAAM,SAAS,UAAU,KAAK,UAAU;EAC3C,IAAI,MAAM,SAAS,aAAa,MAC9B,OAAO;GACL,MAAM,UAAU;GAChB,QAAQ,SAAS,eAAe;EAClC;EAGF,AAAI,SAAO,SAAS,SAAS,KAAK,MAChC,UAAU,MAAM,KAAK;CAEzB;AAGF;;;;ACxCA,SAAgB,gBAAgB,EAC9B,SACA,aACA,iBAKC;CACD,IAAM,sBAAsB,WAAW;EACrC,cAAc,QAAQ;EACtB,OAAO;EACP,SAAS;GACP,WAAW;GACX,sBAAsB;GACtB,gBAAgB;EAClB;EACA,QAAQ,QAAQ;CAClB,CAAC;CAMD,OAJI,CAAC,uBAAuB,CAAC,cAAY,SAAS,mBAAmB,IAC5D,cAGF;EACL,GAAG;EACH,UAAU,CAAC,GAAG,YAAY,UAAU,GAAG,oBAAoB,QAAQ;EACnE,UAAU,CACR,GAAI,YAAY,YAAY,CAAC,GAC7B,GAAI,oBAAoB,YAAY,CAAC,CACvC;CACF;AACF;;;;AClCA,SAAgB,iBAEd,WAA+C;CAa/C,OAZK,cAID,UAAU,WACL;EACL,QAAQ,UAAU;EAClB,OAAO,UAAU;EACjB,UAAU;CACZ,IAGK;EACL,QAAQ,UAAU;EAClB,OAAO,UAAU;EACjB,UAAU;CACZ;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portabletext/editor",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0",
|
|
4
4
|
"description": "Portable Text Editor made in React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"collaborative",
|
|
@@ -29,8 +29,6 @@
|
|
|
29
29
|
],
|
|
30
30
|
"type": "module",
|
|
31
31
|
"sideEffects": false,
|
|
32
|
-
"main": "./lib/index.js",
|
|
33
|
-
"module": "./lib/index.js",
|
|
34
32
|
"types": "./lib/index.d.ts",
|
|
35
33
|
"exports": {
|
|
36
34
|
".": "./lib/index.js",
|
|
@@ -42,66 +40,57 @@
|
|
|
42
40
|
"./package.json": "./package.json"
|
|
43
41
|
},
|
|
44
42
|
"dependencies": {
|
|
45
|
-
"@portabletext/to-html": "^
|
|
43
|
+
"@portabletext/to-html": "^6.0.0",
|
|
46
44
|
"@xstate/react": "^6.1.0",
|
|
47
45
|
"debug": "^4.4.3",
|
|
48
46
|
"scroll-into-view-if-needed": "^3.1.0",
|
|
49
47
|
"xstate": "^5.32.5",
|
|
50
|
-
"@portabletext/html": "^
|
|
51
|
-
"@portabletext/keyboard-shortcuts": "^
|
|
52
|
-
"@portabletext/
|
|
53
|
-
"@portabletext/
|
|
54
|
-
"@portabletext/schema": "^2.2.4"
|
|
48
|
+
"@portabletext/html": "^2.0.0",
|
|
49
|
+
"@portabletext/keyboard-shortcuts": "^3.0.0",
|
|
50
|
+
"@portabletext/patches": "^3.0.0",
|
|
51
|
+
"@portabletext/schema": "^3.0.0"
|
|
55
52
|
},
|
|
56
53
|
"devDependencies": {
|
|
57
|
-
"@rolldown/plugin-babel": "^0.2.3",
|
|
58
54
|
"@sanity/diff-match-patch": "^3.2.0",
|
|
59
55
|
"@sanity/diff-patch": "^6.0.0",
|
|
60
56
|
"@sanity/json-match": "^1.0.5",
|
|
61
|
-
"@sanity/pkg-utils": "^12.
|
|
57
|
+
"@sanity/pkg-utils": "^12.3.0",
|
|
62
58
|
"@sanity/tsconfig": "^2.1.0",
|
|
63
59
|
"@textspec/notation": "^1.0.2",
|
|
64
60
|
"@types/debug": "^4.1.13",
|
|
65
61
|
"@types/node": "^20",
|
|
66
62
|
"@types/react": "^19.2.17",
|
|
67
63
|
"@types/react-dom": "^19.2.3",
|
|
68
|
-
"@vitejs/plugin-react": "^6.0
|
|
64
|
+
"@vitejs/plugin-react": "^6.1.0",
|
|
69
65
|
"@vitest/browser": "^4.1.10",
|
|
70
66
|
"@vitest/browser-playwright": "^4.1.10",
|
|
71
67
|
"@vitest/coverage-istanbul": "^4.1.10",
|
|
72
|
-
"babel-plugin-react-compiler": "^1.0.0",
|
|
73
|
-
"eslint": "^9.39.4",
|
|
74
|
-
"eslint-formatter-gha": "^1.6.0",
|
|
75
|
-
"eslint-plugin-react-hooks": "^7.1.1",
|
|
76
68
|
"jsdom": "^27.2.0",
|
|
69
|
+
"oxc-transform-react": "^0.145.0",
|
|
77
70
|
"react": "^19.2.8",
|
|
78
71
|
"react-dom": "^19.2.8",
|
|
79
|
-
"typescript": "
|
|
80
|
-
"typescript-eslint": "^8.62.0",
|
|
72
|
+
"typescript": "^7.0.2",
|
|
81
73
|
"vite": "^8.2.0",
|
|
82
74
|
"vitest": "^4.1.10",
|
|
83
75
|
"vitest-browser-react": "^2.2.0",
|
|
84
|
-
"@portabletext/test": "^
|
|
85
|
-
"racejar": "
|
|
76
|
+
"@portabletext/test": "^2.0.0",
|
|
77
|
+
"racejar": "3.0.0"
|
|
86
78
|
},
|
|
87
79
|
"peerDependencies": {
|
|
88
80
|
"react": "^19.2.8"
|
|
89
81
|
},
|
|
90
82
|
"engines": {
|
|
91
|
-
"node": ">=
|
|
83
|
+
"node": ">=22.12"
|
|
92
84
|
},
|
|
93
85
|
"inlinedDependencies": {
|
|
94
86
|
"@sanity/diff-match-patch": "3.2.0"
|
|
95
87
|
},
|
|
96
88
|
"scripts": {
|
|
97
89
|
"build": "pkg-utils build --strict --check",
|
|
98
|
-
"check:lint": "biome lint .",
|
|
99
|
-
"check:react-compiler": "eslint --cache .",
|
|
100
90
|
"check:types": "tsc",
|
|
101
91
|
"check:types:watch": "tsc --watch",
|
|
102
92
|
"clean": "del .turbo && del lib && del node_modules",
|
|
103
93
|
"dev": "pkg-utils watch",
|
|
104
|
-
"lint:fix": "biome lint --write .",
|
|
105
94
|
"test": "vitest --run",
|
|
106
95
|
"test:browser": "vitest --run --project browser",
|
|
107
96
|
"test:browser:chromium": "vitest --run --project \"browser (chromium)\"",
|
|
@@ -113,6 +102,7 @@
|
|
|
113
102
|
"test:browser:webkit:watch": "vitest --project \"browser (webkit)\"",
|
|
114
103
|
"test:unit": "vitest --run --project unit",
|
|
115
104
|
"test:unit:watch": "vitest --project unit",
|
|
116
|
-
"test:watch": "vitest"
|
|
105
|
+
"test:watch": "vitest",
|
|
106
|
+
"wire-catalogue:markdown": "node scripts/generate-wire-catalogue.ts"
|
|
117
107
|
}
|
|
118
108
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.types.action-DH6ujvaH.d.ts","names":[],"sources":["../src/internal-utils/mime-type.ts","../src/type-utils.ts","../src/converters/converter.types.ts","../src/types/paths.ts","../src/renderers/renderer.types.ts","../src/schema/container-types.ts","../src/editor/editor-schema.ts","../src/engine/interfaces/node.ts","../src/traversal/traversal-snapshot.ts","../src/schema/resolve-container-at.ts","../src/editor/PortableTextEditor.tsx","../src/types/options.ts","../src/editor/Editable.tsx","../src/types/editor.ts","../src/engine/types/types.ts","../src/engine/interfaces/point.ts","../src/engine/interfaces/range.ts","../src/engine/interfaces/operation.ts","../src/editor/range-decorations-machine.ts","../src/engine/core/operation-channel.ts","../src/engine/interfaces/location.ts","../src/engine/interfaces/path-ref.ts","../src/engine/interfaces/point-ref.ts","../src/engine/interfaces/range-ref.ts","../src/engine/interfaces/editor.ts","../src/engine/dom/utils/diff-text.ts","../src/engine/dom/utils/dom.ts","../src/engine/dom/plugin/dom-editor.ts","../src/types/editor-engine.ts","../src/editor/editor-snapshot.ts","../src/behaviors/behavior.types.guard.ts","../src/behaviors/behavior.types.behavior.ts","../src/types/operation.ts","../src/editor/relay.ts","../src/editor.ts","../src/editor/editor-provider.tsx","../src/editor/editor-selector.ts","../src/editor/usePortableTextEditor.ts","../src/editor/usePortableTextEditorSelection.tsx","../src/utils/key-generator.ts","../src/editor/use-editor.ts","../src/types/block-offset.ts","../src/priority/priority.types.ts","../src/behaviors/behavior.config.ts","../src/editor/editor-machine.ts","../src/internal-utils/event-position.ts","../src/types/block-with-optional-key.ts","../src/behaviors/behavior.types.event.ts","../src/editor/editor-dom.ts","../src/behaviors/behavior.types.action.ts"],"mappings":"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"}
|