@portabletext/editor 2.8.0 → 2.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/selector.is-selection-expanded.cjs +10 -4
- package/lib/_chunks-cjs/selector.is-selection-expanded.cjs.map +1 -1
- package/lib/_chunks-cjs/util.merge-text-blocks.cjs +0 -1
- package/lib/_chunks-cjs/util.merge-text-blocks.cjs.map +1 -1
- package/lib/_chunks-cjs/util.slice-blocks.cjs +3 -6
- package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
- package/lib/_chunks-dts/behavior.types.action.d.cts +27 -31
- package/lib/_chunks-dts/behavior.types.action.d.ts +18 -22
- package/lib/_chunks-es/selector.is-selection-expanded.js +10 -4
- package/lib/_chunks-es/selector.is-selection-expanded.js.map +1 -1
- package/lib/_chunks-es/util.merge-text-blocks.js +0 -1
- package/lib/_chunks-es/util.merge-text-blocks.js.map +1 -1
- package/lib/_chunks-es/util.slice-blocks.js +3 -6
- package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
- package/lib/index.cjs +28 -51
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +28 -51
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.d.cts +3 -3
- package/lib/utils/index.d.ts +2 -2
- package/package.json +5 -5
- package/src/behaviors/behavior.abstract.split.ts +0 -1
- package/src/converters/converter.portable-text.ts +0 -1
- package/src/converters/converter.text-html.ts +0 -1
- package/src/converters/converter.text-plain.ts +0 -1
- package/src/editor/Editable.tsx +0 -1
- package/src/editor/PortableTextEditor.tsx +1 -1
- package/src/editor/plugins/createWithEditableAPI.ts +70 -28
- package/src/index.ts +1 -1
- package/src/internal-utils/parse-blocks.test.ts +23 -23
- package/src/internal-utils/parse-blocks.ts +11 -23
- package/src/internal-utils/test-editor.tsx +15 -21
- package/src/operations/behavior.operation.annotation.add.ts +2 -47
- package/src/operations/behavior.operation.block.set.ts +1 -1
- package/src/operations/behavior.operation.block.unset.ts +2 -2
- package/src/operations/behavior.operation.insert.block.ts +1 -1
- package/src/operations/behavior.operations.ts +1 -2
- package/src/plugins/plugin.internal.auto-close-brackets.test.tsx +25 -71
- package/src/plugins/plugin.markdown.test.tsx +12 -30
- package/src/selectors/selector.get-selected-value.test.ts +748 -0
- package/src/selectors/selector.get-selected-value.ts +28 -7
- package/src/selectors/selector.get-trimmed-selection.test.ts +0 -1
- package/src/types/editor.ts +19 -3
- package/src/utils/util.merge-text-blocks.ts +1 -1
- package/src/utils/util.slice-blocks.ts +3 -3
- package/src/utils/util.slice-blocks.test.ts +0 -499
|
@@ -64,11 +64,17 @@ const getFocusBlock = (snapshot) => {
|
|
|
64
64
|
const startBlockIndex = snapshot.blockIndexMap.get(startBlockKey), endBlockIndex = snapshot.blockIndexMap.get(endBlockKey);
|
|
65
65
|
if (startBlockIndex === void 0 || endBlockIndex === void 0)
|
|
66
66
|
return [];
|
|
67
|
-
const
|
|
68
|
-
return util_sliceBlocks.sliceBlocks({
|
|
67
|
+
const startBlock = snapshot.context.value.at(startBlockIndex), slicedStartBlock = startBlock ? util_sliceBlocks.sliceBlocks({
|
|
69
68
|
context: snapshot.context,
|
|
70
|
-
blocks:
|
|
71
|
-
});
|
|
69
|
+
blocks: [startBlock]
|
|
70
|
+
}).at(0) : void 0;
|
|
71
|
+
if (startBlockIndex === endBlockIndex)
|
|
72
|
+
return slicedStartBlock ? [slicedStartBlock] : [];
|
|
73
|
+
const endBlock = snapshot.context.value.at(endBlockIndex), slicedEndBlock = endBlock ? util_sliceBlocks.sliceBlocks({
|
|
74
|
+
context: snapshot.context,
|
|
75
|
+
blocks: [endBlock]
|
|
76
|
+
}).at(0) : void 0, middleBlocks = snapshot.context.value.slice(startBlockIndex + 1, endBlockIndex);
|
|
77
|
+
return [...slicedStartBlock ? [slicedStartBlock] : [], ...middleBlocks, ...slicedEndBlock ? [slicedEndBlock] : []];
|
|
72
78
|
}, getSelectionText = (snapshot) => getSelectedValue(snapshot).reduce((text, block) => schema.isTextBlock(snapshot.context, block) ? text + block.children.reduce((text2, child) => schema.isSpan(snapshot.context, child) ? text2 + child.text : text2, "") : text, ""), isSelectionCollapsed = (snapshot) => snapshot.context.selection ? JSON.stringify(snapshot.context.selection.anchor.path) === JSON.stringify(snapshot.context.selection.focus.path) && snapshot.context.selection?.anchor.offset === snapshot.context.selection?.focus.offset : !1, isSelectionExpanded = (snapshot) => !isSelectionCollapsed(snapshot);
|
|
73
79
|
exports.getFocusBlock = getFocusBlock;
|
|
74
80
|
exports.getFocusChild = getFocusChild;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selector.is-selection-expanded.cjs","sources":["../../src/selectors/selector.get-focus-block.ts","../../src/selectors/selector.get-focus-text-block.ts","../../src/selectors/selector.get-focus-child.ts","../../src/selectors/selector.get-focus-span.ts","../../src/selectors/selector.get-selection-start-point.ts","../../src/selectors/selector.get-previous-inline-object.ts","../../src/selectors/selector.get-selected-value.ts","../../src/selectors/selector.get-selection-text.ts","../../src/selectors/selector.is-selection-collapsed.ts","../../src/selectors/selector.is-selection-expanded.ts"],"sourcesContent":["import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getBlockKeyFromSelectionPoint} from '../selection/selection-point'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport const getFocusBlock: EditorSelector<\n {node: PortableTextBlock; path: BlockPath} | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = getBlockKeyFromSelectionPoint(snapshot.context.selection.focus)\n const index = key ? snapshot.blockIndexMap.get(key) : undefined\n\n const node =\n index !== undefined ? snapshot.context.value.at(index) : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {BlockPath} from '../types/paths'\nimport {getFocusBlock} from './selector.get-focus-block'\n\n/**\n * @public\n */\nexport const getFocusTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: BlockPath} | undefined\n> = (snapshot) => {\n const focusBlock = getFocusBlock(snapshot)\n\n return focusBlock && isTextBlock(snapshot.context, focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n","import type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getChildKeyFromSelectionPoint} from '../selection/selection-point'\nimport type {ChildPath} from '../types/paths'\nimport {getFocusTextBlock} from './selector.get-focus-text-block'\n\n/**\n * @public\n */\nexport const getFocusChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: ChildPath\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const focusBlock = getFocusTextBlock(snapshot)\n\n if (!focusBlock) {\n return undefined\n }\n\n const key = getChildKeyFromSelectionPoint(snapshot.context.selection.focus)\n\n const node = key\n ? focusBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...focusBlock.path, 'children', {_key: key}]}\n : undefined\n}\n","import {isSpan} from '@portabletext/schema'\nimport type {PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {ChildPath} from '../types/paths'\nimport {getFocusChild} from './selector.get-focus-child'\n\n/**\n * @public\n */\nexport const getFocusSpan: EditorSelector<\n {node: PortableTextSpan; path: ChildPath} | undefined\n> = (snapshot) => {\n const focusChild = getFocusChild(snapshot)\n\n return focusChild && isSpan(snapshot.context, focusChild.node)\n ? {node: focusChild.node, path: focusChild.path}\n : undefined\n}\n","import type {EditorSelectionPoint} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectionStartPoint: EditorSelector<\n EditorSelectionPoint | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n return snapshot.context.selection.backward\n ? snapshot.context.selection.focus\n : snapshot.context.selection.anchor\n}\n","import {isKeySegment, type PortableTextObject} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {ChildPath} from '../types/paths'\nimport {isSpan} from '../utils'\nimport {getFocusTextBlock} from './selector.get-focus-text-block'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\n\n/**\n * @public\n */\nexport const getPreviousInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: ChildPath\n }\n | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionStartPointChildKey =\n selectionStartPoint && isKeySegment(selectionStartPoint.path[2])\n ? selectionStartPoint.path[2]._key\n : undefined\n\n if (!focusTextBlock || !selectionStartPointChildKey) {\n return undefined\n }\n\n let inlineObject:\n | {\n node: PortableTextObject\n path: ChildPath\n }\n | undefined\n\n for (const child of focusTextBlock.node.children) {\n if (child._key === selectionStartPointChildKey) {\n break\n }\n\n if (!isSpan(snapshot.context, child)) {\n inlineObject = {\n node: child,\n path: [...focusTextBlock.path, 'children', {_key: child._key}],\n }\n }\n }\n\n return inlineObject\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getBlockKeyFromSelectionPoint} from '../selection/selection-point'\nimport {\n getSelectionEndPoint,\n getSelectionStartPoint,\n sliceBlocks,\n} from '../utils'\n\n/**\n * @public\n */\nexport const getSelectedValue: EditorSelector<Array<PortableTextBlock>> = (\n snapshot,\n) => {\n const selection = snapshot.context.selection\n\n if (!selection) {\n return []\n }\n\n const startPoint = getSelectionStartPoint(selection)\n const endPoint = getSelectionEndPoint(selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return []\n }\n\n const startBlockIndex = snapshot.blockIndexMap.get(startBlockKey)\n const endBlockIndex = snapshot.blockIndexMap.get(endBlockKey)\n\n if (startBlockIndex === undefined || endBlockIndex === undefined) {\n return []\n }\n\n const slicedValue = snapshot.context.value.slice(\n startBlockIndex,\n endBlockIndex + 1,\n )\n\n return sliceBlocks({\n context: snapshot.context,\n blocks: slicedValue,\n })\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedValue} from './selector.get-selected-value'\n\n/**\n * @public\n */\nexport const getSelectionText: EditorSelector<string> = (snapshot) => {\n const selectedValue = getSelectedValue(snapshot)\n\n return selectedValue.reduce((text, block) => {\n if (!isTextBlock(snapshot.context, block)) {\n return text\n }\n\n return (\n text +\n block.children.reduce((text, child) => {\n if (isSpan(snapshot.context, child)) {\n return text + child.text\n }\n\n return text\n }, '')\n )\n }, '')\n}\n","import type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const isSelectionCollapsed: EditorSelector<boolean> = (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n return (\n JSON.stringify(snapshot.context.selection.anchor.path) ===\n JSON.stringify(snapshot.context.selection.focus.path) &&\n snapshot.context.selection?.anchor.offset ===\n snapshot.context.selection?.focus.offset\n )\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport const isSelectionExpanded: EditorSelector<boolean> = (snapshot) => {\n return !isSelectionCollapsed(snapshot)\n}\n"],"names":["getFocusBlock","snapshot","context","selection","key","getBlockKeyFromSelectionPoint","focus","index","blockIndexMap","get","undefined","node","value","at","path","_key","getFocusTextBlock","focusBlock","isTextBlock","getFocusChild","getChildKeyFromSelectionPoint","children","find","span","getFocusSpan","focusChild","isSpan","getSelectionStartPoint","backward","anchor","getPreviousInlineObject","focusTextBlock","selectionStartPoint","selectionStartPointChildKey","isKeySegment","inlineObject","child","getSelectedValue","startPoint","endPoint","getSelectionEndPoint","startBlockKey","endBlockKey","startBlockIndex","endBlockIndex","slicedValue","slice","sliceBlocks","blocks","getSelectionText","reduce","text","block","isSelectionCollapsed","JSON","stringify","offset","isSelectionExpanded"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selector.is-selection-expanded.cjs","sources":["../../src/selectors/selector.get-focus-block.ts","../../src/selectors/selector.get-focus-text-block.ts","../../src/selectors/selector.get-focus-child.ts","../../src/selectors/selector.get-focus-span.ts","../../src/selectors/selector.get-selection-start-point.ts","../../src/selectors/selector.get-previous-inline-object.ts","../../src/selectors/selector.get-selected-value.ts","../../src/selectors/selector.get-selection-text.ts","../../src/selectors/selector.is-selection-collapsed.ts","../../src/selectors/selector.is-selection-expanded.ts"],"sourcesContent":["import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getBlockKeyFromSelectionPoint} from '../selection/selection-point'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport const getFocusBlock: EditorSelector<\n {node: PortableTextBlock; path: BlockPath} | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = getBlockKeyFromSelectionPoint(snapshot.context.selection.focus)\n const index = key ? snapshot.blockIndexMap.get(key) : undefined\n\n const node =\n index !== undefined ? snapshot.context.value.at(index) : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {BlockPath} from '../types/paths'\nimport {getFocusBlock} from './selector.get-focus-block'\n\n/**\n * @public\n */\nexport const getFocusTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: BlockPath} | undefined\n> = (snapshot) => {\n const focusBlock = getFocusBlock(snapshot)\n\n return focusBlock && isTextBlock(snapshot.context, focusBlock.node)\n ? {node: focusBlock.node, path: focusBlock.path}\n : undefined\n}\n","import type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getChildKeyFromSelectionPoint} from '../selection/selection-point'\nimport type {ChildPath} from '../types/paths'\nimport {getFocusTextBlock} from './selector.get-focus-text-block'\n\n/**\n * @public\n */\nexport const getFocusChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: ChildPath\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const focusBlock = getFocusTextBlock(snapshot)\n\n if (!focusBlock) {\n return undefined\n }\n\n const key = getChildKeyFromSelectionPoint(snapshot.context.selection.focus)\n\n const node = key\n ? focusBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...focusBlock.path, 'children', {_key: key}]}\n : undefined\n}\n","import {isSpan} from '@portabletext/schema'\nimport type {PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {ChildPath} from '../types/paths'\nimport {getFocusChild} from './selector.get-focus-child'\n\n/**\n * @public\n */\nexport const getFocusSpan: EditorSelector<\n {node: PortableTextSpan; path: ChildPath} | undefined\n> = (snapshot) => {\n const focusChild = getFocusChild(snapshot)\n\n return focusChild && isSpan(snapshot.context, focusChild.node)\n ? {node: focusChild.node, path: focusChild.path}\n : undefined\n}\n","import type {EditorSelectionPoint} from '..'\nimport type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const getSelectionStartPoint: EditorSelector<\n EditorSelectionPoint | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n return snapshot.context.selection.backward\n ? snapshot.context.selection.focus\n : snapshot.context.selection.anchor\n}\n","import {isKeySegment, type PortableTextObject} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {ChildPath} from '../types/paths'\nimport {isSpan} from '../utils'\nimport {getFocusTextBlock} from './selector.get-focus-text-block'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\n\n/**\n * @public\n */\nexport const getPreviousInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: ChildPath\n }\n | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n const selectionStartPoint = getSelectionStartPoint(snapshot)\n const selectionStartPointChildKey =\n selectionStartPoint && isKeySegment(selectionStartPoint.path[2])\n ? selectionStartPoint.path[2]._key\n : undefined\n\n if (!focusTextBlock || !selectionStartPointChildKey) {\n return undefined\n }\n\n let inlineObject:\n | {\n node: PortableTextObject\n path: ChildPath\n }\n | undefined\n\n for (const child of focusTextBlock.node.children) {\n if (child._key === selectionStartPointChildKey) {\n break\n }\n\n if (!isSpan(snapshot.context, child)) {\n inlineObject = {\n node: child,\n path: [...focusTextBlock.path, 'children', {_key: child._key}],\n }\n }\n }\n\n return inlineObject\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getBlockKeyFromSelectionPoint} from '../selection/selection-point'\nimport {\n getSelectionEndPoint,\n getSelectionStartPoint,\n sliceBlocks,\n} from '../utils'\n\n/**\n * @public\n */\nexport const getSelectedValue: EditorSelector<Array<PortableTextBlock>> = (\n snapshot,\n) => {\n const selection = snapshot.context.selection\n\n if (!selection) {\n return []\n }\n\n const startPoint = getSelectionStartPoint(selection)\n const endPoint = getSelectionEndPoint(selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return []\n }\n\n const startBlockIndex = snapshot.blockIndexMap.get(startBlockKey)\n const endBlockIndex = snapshot.blockIndexMap.get(endBlockKey)\n\n if (startBlockIndex === undefined || endBlockIndex === undefined) {\n return []\n }\n\n const startBlock = snapshot.context.value.at(startBlockIndex)\n const slicedStartBlock = startBlock\n ? sliceBlocks({\n context: snapshot.context,\n blocks: [startBlock],\n }).at(0)\n : undefined\n\n if (startBlockIndex === endBlockIndex) {\n return slicedStartBlock ? [slicedStartBlock] : []\n }\n\n const endBlock = snapshot.context.value.at(endBlockIndex)\n const slicedEndBlock = endBlock\n ? sliceBlocks({\n context: snapshot.context,\n blocks: [endBlock],\n }).at(0)\n : undefined\n\n const middleBlocks = snapshot.context.value.slice(\n startBlockIndex + 1,\n endBlockIndex,\n )\n\n return [\n ...(slicedStartBlock ? [slicedStartBlock] : []),\n ...middleBlocks,\n ...(slicedEndBlock ? [slicedEndBlock] : []),\n ]\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedValue} from './selector.get-selected-value'\n\n/**\n * @public\n */\nexport const getSelectionText: EditorSelector<string> = (snapshot) => {\n const selectedValue = getSelectedValue(snapshot)\n\n return selectedValue.reduce((text, block) => {\n if (!isTextBlock(snapshot.context, block)) {\n return text\n }\n\n return (\n text +\n block.children.reduce((text, child) => {\n if (isSpan(snapshot.context, child)) {\n return text + child.text\n }\n\n return text\n }, '')\n )\n }, '')\n}\n","import type {EditorSelector} from '../editor/editor-selector'\n\n/**\n * @public\n */\nexport const isSelectionCollapsed: EditorSelector<boolean> = (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n return (\n JSON.stringify(snapshot.context.selection.anchor.path) ===\n JSON.stringify(snapshot.context.selection.focus.path) &&\n snapshot.context.selection?.anchor.offset ===\n snapshot.context.selection?.focus.offset\n )\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSelectionCollapsed} from './selector.is-selection-collapsed'\n\n/**\n * @public\n */\nexport const isSelectionExpanded: EditorSelector<boolean> = (snapshot) => {\n return !isSelectionCollapsed(snapshot)\n}\n"],"names":["getFocusBlock","snapshot","context","selection","key","getBlockKeyFromSelectionPoint","focus","index","blockIndexMap","get","undefined","node","value","at","path","_key","getFocusTextBlock","focusBlock","isTextBlock","getFocusChild","getChildKeyFromSelectionPoint","children","find","span","getFocusSpan","focusChild","isSpan","getSelectionStartPoint","backward","anchor","getPreviousInlineObject","focusTextBlock","selectionStartPoint","selectionStartPointChildKey","isKeySegment","inlineObject","child","getSelectedValue","startPoint","endPoint","getSelectionEndPoint","startBlockKey","endBlockKey","startBlockIndex","endBlockIndex","startBlock","slicedStartBlock","sliceBlocks","blocks","endBlock","slicedEndBlock","middleBlocks","slice","getSelectionText","reduce","text","block","isSelectionCollapsed","JSON","stringify","offset","isSelectionExpanded"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.merge-text-blocks.cjs","sources":["../../src/utils/util.merge-text-blocks.ts"],"sourcesContent":["import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextTextBlock} from '@sanity/types'\nimport type {EditorContext} from '..'\nimport {parseBlock} from '../internal-utils/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 context,\n block: incomingBlock,\n options: {
|
|
1
|
+
{"version":3,"file":"util.merge-text-blocks.cjs","sources":["../../src/utils/util.merge-text-blocks.ts"],"sourcesContent":["import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextTextBlock} from '@sanity/types'\nimport type {EditorContext} from '..'\nimport {parseBlock} from '../internal-utils/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 context,\n block: incomingBlock,\n options: {validateFields: false},\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"],"names":["mergeTextBlocks","context","targetBlock","incomingBlock","parsedIncomingBlock","parseBlock","block","options","validateFields","isTextBlock","children","markDefs"],"mappings":";;AAQO,SAASA,gBAAgB;AAAA,EAC9BC;AAAAA,EACAC;AAAAA,EACAC;AAKF,GAAG;AACD,QAAMC,sBAAsBC,iBAAAA,WAAW;AAAA,IACrCJ;AAAAA,IACAK,OAAOH;AAAAA,IACPI,SAAS;AAAA,MAACC,gBAAgB;AAAA,IAAA;AAAA,EAAK,CAChC;AAED,SAAI,CAACJ,uBAAuB,CAACK,OAAAA,YAAYR,SAASG,mBAAmB,IAC5DF,cAGF;AAAA,IACL,GAAGA;AAAAA,IACHQ,UAAU,CAAC,GAAGR,YAAYQ,UAAU,GAAGN,oBAAoBM,QAAQ;AAAA,IACnEC,UAAU,CACR,GAAIT,YAAYS,YAAY,CAAA,GAC5B,GAAIP,oBAAoBO,YAAY,CAAA,CAAG;AAAA,EAAA;AAG7C;;"}
|
|
@@ -184,7 +184,7 @@ function parseTextBlock({
|
|
|
184
184
|
key === "_type" || key === "_key" || key === "children" || key === "markDefs" || key === "style" || key === "listItem" || key === "level" || (options.validateFields ? context.schema.block.fields?.some((field) => field.name === key) && (customFields[key] = block[key]) : customFields[key] = block[key]);
|
|
185
185
|
if (block._type !== context.schema.block.name)
|
|
186
186
|
return;
|
|
187
|
-
const _key =
|
|
187
|
+
const _key = typeof block._key == "string" ? block._key : context.keyGenerator(), unparsedMarkDefs = Array.isArray(block.markDefs) ? block.markDefs : [], markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = unparsedMarkDefs.flatMap((markDef) => {
|
|
188
188
|
if (!isTypedObject(markDef))
|
|
189
189
|
return [];
|
|
190
190
|
const schemaType = context.schema.annotations.find(({
|
|
@@ -253,7 +253,7 @@ function parseSpan({
|
|
|
253
253
|
});
|
|
254
254
|
return {
|
|
255
255
|
_type: "span",
|
|
256
|
-
_key:
|
|
256
|
+
_key: typeof span._key == "string" ? span._key : context.keyGenerator(),
|
|
257
257
|
text: typeof span.text == "string" ? span.text : "",
|
|
258
258
|
marks,
|
|
259
259
|
...options.validateFields ? {} : customFields
|
|
@@ -314,7 +314,7 @@ function parseObject({
|
|
|
314
314
|
}, {}) : customFields;
|
|
315
315
|
return {
|
|
316
316
|
_type: context.schemaType.name,
|
|
317
|
-
_key:
|
|
317
|
+
_key: typeof object._key == "string" ? object._key : context.keyGenerator(),
|
|
318
318
|
...values
|
|
319
319
|
};
|
|
320
320
|
}
|
|
@@ -428,7 +428,6 @@ function sliceBlocks({
|
|
|
428
428
|
},
|
|
429
429
|
block,
|
|
430
430
|
options: {
|
|
431
|
-
refreshKeys: !1,
|
|
432
431
|
validateFields: !1
|
|
433
432
|
}
|
|
434
433
|
}) ?? block);
|
|
@@ -440,7 +439,6 @@ function sliceBlocks({
|
|
|
440
439
|
},
|
|
441
440
|
block: startBlock,
|
|
442
441
|
options: {
|
|
443
|
-
refreshKeys: !1,
|
|
444
442
|
validateFields: !1
|
|
445
443
|
}
|
|
446
444
|
}) : void 0, parsedEndBlock = endBlock ? parseBlock({
|
|
@@ -450,7 +448,6 @@ function sliceBlocks({
|
|
|
450
448
|
},
|
|
451
449
|
block: endBlock,
|
|
452
450
|
options: {
|
|
453
|
-
refreshKeys: !1,
|
|
454
451
|
validateFields: !1
|
|
455
452
|
}
|
|
456
453
|
}) : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.slice-blocks.cjs","sources":["../../src/utils/util.is-keyed-segment.ts","../../src/selection/selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.get-text-block-text.ts","../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts","../../src/editor/key-generator.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["import type {KeyedSegment} from '@sanity/types'\n\n/**\n * @public\n */\nexport function isKeyedSegment(segment: unknown): segment is KeyedSegment {\n return typeof segment === 'object' && segment !== null && '_key' in segment\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n context,\n blockOffset,\n direction,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const block of context.value) {\n if (block._key !== blockOffset.path[0]._key) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n break\n }\n\n offsetLeft -= child.text.length\n\n continue\n }\n\n if (!isSpan(context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n if (skippedInlineObject) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: 0,\n }\n }\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n context,\n selectionPoint,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n let offset = 0\n\n const blockKey = getBlockKeyFromSelectionPoint(selectionPoint)\n const spanKey = getChildKeyFromSelectionPoint(selectionPoint)\n\n if (!blockKey || !spanKey) {\n return undefined\n }\n\n for (const block of context.value) {\n if (block._key !== blockKey) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (child._key === spanKey) {\n return {\n path: [{_key: block._key}],\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n }\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n return {\n path: [...block.path, 'children', {_key: block.node.children[0]._key}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\n\n/**\n * @public\n */\nexport function getTextBlockText(block: PortableTextTextBlock) {\n return block.children.map((child) => child.text ?? '').join('')\n}\n","import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n refreshKeys: boolean\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n refreshKeys: boolean\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nexport function parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean; validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean; validateFields: boolean}\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if (context.schema.block.fields?.some((field) => field.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n const marks = children.flatMap((child) => child.marks ?? [])\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: markDefs.filter((markDef) => marks.includes(markDef._key)),\n ...customFields,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {refreshKeys: boolean; validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof span._key === 'string'\n ? span._key\n : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean; validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean; validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {refreshKeys: boolean; validateFields: boolean}\n}): PortableTextObject {\n const {_type, _key, ...customFields} = object\n\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = options.validateFields\n ? context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n : customFields\n\n return {\n _type: context.schemaType.name,\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof object._key === 'string'\n ? object._key\n : context.keyGenerator(),\n ...values,\n }\n}\n","import getRandomValues from 'get-random-values-esm'\n\n/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from '../editor/key-generator'\nimport {parseBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {getSelectionStartPoint} from '../utils/util.get-selection-start-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'>\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block,\n options: {refreshKeys: false, validateFields: false},\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: startBlock,\n options: {refreshKeys: false, validateFields: false},\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: endBlock,\n options: {refreshKeys: false, validateFields: false},\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n"],"names":["isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","path","at","_key","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","context","blockOffset","direction","offsetLeft","offset","selectionPoint","skippedInlineObject","block","value","isTextBlock","child","children","isSpan","text","length","spanSelectionPointToBlockOffset","blockKey","spanKey","getBlockStartPoint","node","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","getTextBlockText","map","join","isTypedObject","object","isRecord","_type","parseBlocks","blocks","options","Array","isArray","flatMap","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","level","undefined","listItem","customFields","key","Object","keys","validateFields","fields","some","field","refreshKeys","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","parseSpan","span","parseInlineObject","inlineObject","filter","marks","includes","style","styles","defaultStyle","console","error","lists","list","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","getRandomValues","str","n","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.slice-blocks.cjs","sources":["../../src/utils/util.is-keyed-segment.ts","../../src/selection/selection-point.ts","../../src/utils/util.block-offset.ts","../../src/utils/util.get-block-start-point.ts","../../src/utils/util.get-selection-end-point.ts","../../src/utils/util.get-selection-start-point.ts","../../src/utils/util.get-text-block-text.ts","../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts","../../src/editor/key-generator.ts","../../src/utils/util.slice-blocks.ts"],"sourcesContent":["import type {KeyedSegment} from '@sanity/types'\n\n/**\n * @public\n */\nexport function isKeyedSegment(segment: unknown): segment is KeyedSegment {\n return typeof segment === 'object' && segment !== null && '_key' in segment\n}\n","import type {EditorSelectionPoint} from '../types/editor'\nimport {isKeyedSegment} from '../utils/util.is-keyed-segment'\n\nexport function getBlockKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const blockPathSegment = point.path.at(0)\n\n if (isKeyedSegment(blockPathSegment)) {\n return blockPathSegment._key\n }\n\n return undefined\n}\n\nexport function getChildKeyFromSelectionPoint(point: EditorSelectionPoint) {\n const childPathSegment = point.path.at(2)\n\n if (isKeyedSegment(childPathSegment)) {\n return childPathSegment._key\n }\n\n return undefined\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport type {BlockOffset} from '../types/block-offset'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {ChildPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function blockOffsetToSpanSelectionPoint({\n context,\n blockOffset,\n direction,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n blockOffset: BlockOffset\n direction: 'forward' | 'backward'\n}) {\n let offsetLeft = blockOffset.offset\n let selectionPoint: {path: ChildPath; offset: number} | undefined\n let skippedInlineObject = false\n\n for (const block of context.value) {\n if (block._key !== blockOffset.path[0]._key) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (direction === 'forward') {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n break\n }\n\n offsetLeft -= child.text.length\n\n continue\n }\n\n if (!isSpan(context, child)) {\n skippedInlineObject = true\n continue\n }\n\n if (offsetLeft === 0 && selectionPoint && !skippedInlineObject) {\n if (skippedInlineObject) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: 0,\n }\n }\n break\n }\n\n if (offsetLeft > child.text.length) {\n offsetLeft -= child.text.length\n continue\n }\n\n if (offsetLeft <= child.text.length) {\n selectionPoint = {\n path: [...blockOffset.path, 'children', {_key: child._key}],\n offset: offsetLeft,\n }\n\n offsetLeft -= child.text.length\n\n if (offsetLeft !== 0) {\n break\n }\n }\n }\n }\n\n return selectionPoint\n}\n\n/**\n * @public\n */\nexport function spanSelectionPointToBlockOffset({\n context,\n selectionPoint,\n}: {\n context: Pick<EditorContext, 'schema' | 'value'>\n selectionPoint: EditorSelectionPoint\n}): BlockOffset | undefined {\n let offset = 0\n\n const blockKey = getBlockKeyFromSelectionPoint(selectionPoint)\n const spanKey = getChildKeyFromSelectionPoint(selectionPoint)\n\n if (!blockKey || !spanKey) {\n return undefined\n }\n\n for (const block of context.value) {\n if (block._key !== blockKey) {\n continue\n }\n\n if (!isTextBlock(context, block)) {\n continue\n }\n\n for (const child of block.children) {\n if (!isSpan(context, child)) {\n continue\n }\n\n if (child._key === spanKey) {\n return {\n path: [{_key: block._key}],\n offset: offset + selectionPoint.offset,\n }\n }\n\n offset += child.text.length\n }\n }\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport type {BlockPath} from '../types/paths'\n\n/**\n * @public\n */\nexport function getBlockStartPoint({\n context,\n block,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: {\n node: PortableTextBlock\n path: BlockPath\n }\n}): EditorSelectionPoint {\n if (isTextBlock(context, block.node)) {\n return {\n path: [...block.path, 'children', {_key: block.node.children[0]._key}],\n offset: 0,\n }\n }\n\n return {\n path: block.path,\n offset: 0,\n }\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionEndPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.anchor : selection.focus\n ) as TEditorSelectionPoint\n}\n","import type {EditorSelection, EditorSelectionPoint} from '..'\n\n/**\n * @public\n */\nexport function getSelectionStartPoint<\n TEditorSelection extends NonNullable<EditorSelection> | null,\n TEditorSelectionPoint extends\n EditorSelectionPoint | null = TEditorSelection extends NonNullable<EditorSelection>\n ? EditorSelectionPoint\n : null,\n>(selection: TEditorSelection): TEditorSelectionPoint {\n if (!selection) {\n return null as TEditorSelectionPoint\n }\n\n return (\n selection.backward ? selection.focus : selection.anchor\n ) as TEditorSelectionPoint\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\n\n/**\n * @public\n */\nexport function getTextBlockText(block: PortableTextTextBlock) {\n return block.children.map((child) => child.text ?? '').join('')\n}\n","import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {isTextBlock} from '@portabletext/schema'\nimport type {\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n TypedObject,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlocks({\n context,\n blocks,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n blocks: unknown\n options: {\n validateFields: boolean\n }\n}): Array<PortableTextBlock> {\n if (!Array.isArray(blocks)) {\n return []\n }\n\n return blocks.flatMap((block) => {\n const parsedBlock = parseBlock({context, block, options})\n\n return parsedBlock ? [parsedBlock] : []\n })\n}\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n validateFields: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nexport function parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n const schemaType = context.schema.blockObjects.find(\n ({name}) => name === blockObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: blockObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function isListBlock(\n context: Pick<EditorContext, 'schema'>,\n block: unknown,\n): block is PortableTextListBlock {\n return (\n isTextBlock(context, block) &&\n block.level !== undefined &&\n block.listItem !== undefined\n )\n}\n\nexport function parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(block)) {\n if (\n key === '_type' ||\n key === '_key' ||\n key === 'children' ||\n key === 'markDefs' ||\n key === 'style' ||\n key === 'listItem' ||\n key === 'level'\n ) {\n continue\n }\n\n if (options.validateFields) {\n if (context.schema.block.fields?.some((field) => field.name === key)) {\n customFields[key] = block[key]\n }\n } else {\n customFields[key] = block[key]\n }\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key =\n typeof block._key === 'string' ? block._key : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === markDef._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n // If the `markDef` doesn't have a `_key` then we don't know what spans\n // it belongs to and therefore we have to discard it.\n return []\n }\n\n const parsedAnnotation = parseObject({\n object: markDef,\n context: {\n schemaType,\n keyGenerator: context.keyGenerator,\n },\n options,\n })\n\n if (!parsedAnnotation) {\n return []\n }\n\n markDefKeyMap.set(markDef._key, parsedAnnotation._key)\n\n return [parsedAnnotation]\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n const marks = children.flatMap((child) => child.marks ?? [])\n\n const parsedBlock: PortableTextTextBlock = {\n _type: context.schema.block.name,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: markDefs.filter((markDef) => marks.includes(markDef._key)),\n ...customFields,\n }\n\n if (\n typeof block.style === 'string' &&\n context.schema.styles.find((style) => style.name === block.style)\n ) {\n parsedBlock.style = block.style\n } else {\n const defaultStyle = context.schema.styles.at(0)?.name\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n console.error('Expected default style')\n }\n }\n\n if (\n typeof block.listItem === 'string' &&\n context.schema.lists.find((list) => list.name === block.listItem)\n ) {\n parsedBlock.listItem = block.listItem\n }\n\n if (typeof block.level === 'number') {\n parsedBlock.level = block.level\n }\n\n return parsedBlock\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {validateFields: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n const customFields: Record<string, unknown> = {}\n\n for (const key of Object.keys(span)) {\n if (\n key !== '_type' &&\n key !== '_key' &&\n key !== 'text' &&\n key !== 'marks'\n ) {\n customFields[key] = span[key]\n }\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.name === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n _type: 'span',\n _key: typeof span._key === 'string' ? span._key : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n ...(options.validateFields ? {} : customFields),\n }\n}\n\nexport function parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n const schemaType = context.schema.inlineObjects.find(\n ({name}) => name === inlineObject._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: inlineObject,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nexport function parseAnnotation({\n annotation,\n context,\n options,\n}: {\n annotation: TypedObject\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {validateFields: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(annotation)) {\n return undefined\n }\n\n const schemaType = context.schema.annotations.find(\n ({name}) => name === annotation._type,\n )\n\n if (!schemaType) {\n return undefined\n }\n\n return parseObject({\n object: annotation,\n context: {\n keyGenerator: context.keyGenerator,\n schemaType,\n },\n options,\n })\n}\n\nfunction parseObject({\n object,\n context,\n options,\n}: {\n object: TypedObject\n context: Pick<EditorContext, 'keyGenerator'> & {\n schemaType: EditorSchema['blockObjects'][0]\n }\n options: {validateFields: boolean}\n}): PortableTextObject {\n const {_type, _key, ...customFields} = object\n\n // Validates all props on the object and only takes those that match\n // the name of a field\n const values = options.validateFields\n ? context.schemaType.fields.reduce<Record<string, unknown>>(\n (fieldValues, field) => {\n const fieldValue = object[field.name]\n\n if (fieldValue !== undefined) {\n fieldValues[field.name] = fieldValue\n }\n\n return fieldValues\n },\n {},\n )\n : customFields\n\n return {\n _type: context.schemaType.name,\n _key:\n typeof object._key === 'string' ? object._key : context.keyGenerator(),\n ...values,\n }\n}\n","import getRandomValues from 'get-random-values-esm'\n\n/**\n * @public\n */\nexport const defaultKeyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","import {isSpan, isTextBlock} from '@portabletext/schema'\nimport type {PortableTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {defaultKeyGenerator} from '../editor/key-generator'\nimport {parseBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport {getSelectionEndPoint} from '../utils/util.get-selection-end-point'\nimport {getSelectionStartPoint} from '../utils/util.get-selection-start-point'\n\n/**\n * @public\n */\nexport function sliceBlocks({\n context,\n blocks,\n}: {\n context: Pick<EditorContext, 'schema' | 'selection'>\n blocks: Array<PortableTextBlock>\n}): Array<PortableTextBlock> {\n const slice: Array<PortableTextBlock> = []\n\n if (!context.selection) {\n return slice\n }\n\n let startBlock: PortableTextBlock | undefined\n const middleBlocks: PortableTextBlock[] = []\n let endBlock: PortableTextBlock | undefined\n\n const startPoint = getSelectionStartPoint(context.selection)\n const endPoint = getSelectionEndPoint(context.selection)\n const startBlockKey = getBlockKeyFromSelectionPoint(startPoint)\n const startChildKey = getChildKeyFromSelectionPoint(startPoint)\n const endBlockKey = getBlockKeyFromSelectionPoint(endPoint)\n const endChildKey = getChildKeyFromSelectionPoint(endPoint)\n\n if (!startBlockKey || !endBlockKey) {\n return slice\n }\n\n for (const block of blocks) {\n if (!isTextBlock(context, block)) {\n if (block._key === startBlockKey && block._key === endBlockKey) {\n startBlock = block\n break\n }\n }\n\n if (block._key === startBlockKey) {\n if (!isTextBlock(context, block)) {\n startBlock = block\n continue\n }\n\n if (startChildKey) {\n for (const child of block.children) {\n if (child._key === startChildKey) {\n if (isSpan(context, child)) {\n const text =\n child._key === endChildKey\n ? child.text.slice(startPoint.offset, endPoint.offset)\n : child.text.slice(startPoint.offset)\n\n startBlock = {\n ...block,\n children: [\n {\n ...child,\n text,\n },\n ],\n }\n } else {\n startBlock = {\n ...block,\n children: [child],\n }\n }\n\n if (startChildKey === endChildKey) {\n break\n }\n continue\n }\n\n if (startBlock && isTextBlock(context, startBlock)) {\n if (\n endChildKey &&\n child._key === endChildKey &&\n isSpan(context, child)\n ) {\n startBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n } else {\n startBlock.children.push(child)\n }\n\n if (\n block._key === endBlockKey &&\n endChildKey &&\n child._key === endChildKey\n ) {\n break\n }\n }\n }\n\n if (startBlockKey === endBlockKey) {\n break\n }\n\n continue\n }\n\n startBlock = block\n\n if (startBlockKey === endBlockKey) {\n break\n }\n }\n\n if (block._key === endBlockKey) {\n if (!isTextBlock(context, block)) {\n endBlock = block\n break\n }\n\n if (endChildKey) {\n endBlock = {\n ...block,\n children: [],\n }\n\n for (const child of block.children) {\n if (endBlock && isTextBlock(context, endBlock)) {\n if (child._key === endChildKey && isSpan(context, child)) {\n endBlock.children.push({\n ...child,\n text: child.text.slice(0, endPoint.offset),\n })\n\n break\n }\n\n endBlock.children.push(child)\n\n if (endChildKey && child._key === endChildKey) {\n break\n }\n }\n }\n\n break\n }\n\n endBlock = block\n\n break\n }\n\n if (startBlock) {\n middleBlocks.push(\n parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block,\n options: {validateFields: false},\n }) ?? block,\n )\n }\n }\n\n const parsedStartBlock = startBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: startBlock,\n options: {validateFields: false},\n })\n : undefined\n\n const parsedEndBlock = endBlock\n ? parseBlock({\n context: {\n ...context,\n keyGenerator: defaultKeyGenerator,\n },\n block: endBlock,\n options: {validateFields: false},\n })\n : undefined\n\n return [\n ...(parsedStartBlock ? [parsedStartBlock] : []),\n ...middleBlocks,\n ...(parsedEndBlock ? [parsedEndBlock] : []),\n ]\n}\n"],"names":["isKeyedSegment","segment","getBlockKeyFromSelectionPoint","point","blockPathSegment","path","at","_key","getChildKeyFromSelectionPoint","childPathSegment","blockOffsetToSpanSelectionPoint","context","blockOffset","direction","offsetLeft","offset","selectionPoint","skippedInlineObject","block","value","isTextBlock","child","children","isSpan","text","length","spanSelectionPointToBlockOffset","blockKey","spanKey","getBlockStartPoint","node","getSelectionEndPoint","selection","backward","anchor","focus","getSelectionStartPoint","getTextBlockText","map","join","isTypedObject","object","isRecord","_type","parseBlocks","blocks","options","Array","isArray","flatMap","parsedBlock","parseBlock","parseTextBlock","parseBlockObject","blockObject","schemaType","schema","blockObjects","find","name","parseObject","keyGenerator","isListBlock","level","undefined","listItem","customFields","key","Object","keys","validateFields","fields","some","field","unparsedMarkDefs","markDefs","markDefKeyMap","Map","markDef","annotations","parsedAnnotation","set","parseSpan","span","parseInlineObject","inlineObject","filter","marks","includes","style","styles","defaultStyle","console","error","lists","list","mark","markDefKey","get","decorators","decorator","inlineObjects","parseAnnotation","annotation","values","reduce","fieldValues","fieldValue","defaultKeyGenerator","randomKey","getByteHexTable","table","i","toString","slice","whatwgRNG","rnds8","Uint8Array","getRandomValues","str","n","sliceBlocks","startBlock","middleBlocks","endBlock","startPoint","endPoint","startBlockKey","startChildKey","endBlockKey","endChildKey","push","parsedStartBlock","parsedEndBlock"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { AnnotationDefinition, AnnotationSchemaType, BaseDefinition, BlockObject
|
|
|
6
6
|
import * as xstate227 from "xstate";
|
|
7
7
|
import { ActorRef, ActorRefFrom, EventObject, Snapshot } from "xstate";
|
|
8
8
|
import { BaseRange, Descendant, Operation } from "slate";
|
|
9
|
-
import * as
|
|
9
|
+
import * as react22 from "react";
|
|
10
10
|
import React$1, { BaseSyntheticEvent, ClipboardEvent, Component, FocusEvent, JSX, KeyboardEvent as KeyboardEvent$1, MutableRefObject, PropsWithChildren, ReactElement, RefObject, TextareaHTMLAttributes } from "react";
|
|
11
11
|
import * as xstate_guards12 from "xstate/guards";
|
|
12
12
|
import { Observable, Subject } from "rxjs";
|
|
@@ -44,23 +44,6 @@ type BehaviorConfig = {
|
|
|
44
44
|
behavior: Behavior;
|
|
45
45
|
priority: EditorPriority;
|
|
46
46
|
};
|
|
47
|
-
/**
|
|
48
|
-
* @public
|
|
49
|
-
*/
|
|
50
|
-
type AddedAnnotationPaths = {
|
|
51
|
-
/**
|
|
52
|
-
* @deprecated An annotation may be applied to multiple blocks, resulting
|
|
53
|
-
* in multiple `markDef`'s being created. Use `markDefPaths` instead.
|
|
54
|
-
*/
|
|
55
|
-
markDefPath: Path;
|
|
56
|
-
markDefPaths: Array<Path>;
|
|
57
|
-
/**
|
|
58
|
-
* @deprecated Does not return anything meaningful since an annotation
|
|
59
|
-
* can span multiple blocks and spans. If references the span closest
|
|
60
|
-
* to the focus point of the selection.
|
|
61
|
-
*/
|
|
62
|
-
spanPath: Path;
|
|
63
|
-
};
|
|
64
47
|
/**
|
|
65
48
|
* @public
|
|
66
49
|
*/
|
|
@@ -215,7 +198,7 @@ declare class PortableTextEditor extends Component<PortableTextEditorProps<Inter
|
|
|
215
198
|
componentDidUpdate(prevProps: PortableTextEditorProps): void;
|
|
216
199
|
componentWillUnmount(): void;
|
|
217
200
|
setEditable: (editable: EditableAPI) => void;
|
|
218
|
-
render():
|
|
201
|
+
render(): react22.JSX.Element;
|
|
219
202
|
/**
|
|
220
203
|
* @deprecated
|
|
221
204
|
* Use built-in selectors or write your own: https://www.portabletext.org/reference/selectors/
|
|
@@ -610,7 +593,7 @@ type PortableTextEditableProps = Omit<TextareaHTMLAttributes<HTMLDivElement>, 'o
|
|
|
610
593
|
* ```
|
|
611
594
|
* @group Components
|
|
612
595
|
*/
|
|
613
|
-
declare const PortableTextEditable:
|
|
596
|
+
declare const PortableTextEditable: react22.ForwardRefExoticComponent<Omit<PortableTextEditableProps, "ref"> & react22.RefAttributes<Omit<HTMLDivElement, "as" | "onPaste" | "onBeforeInput">>>;
|
|
614
597
|
type DecoratedRange = BaseRange & {
|
|
615
598
|
rangeDecoration: RangeDecoration;
|
|
616
599
|
};
|
|
@@ -640,6 +623,23 @@ type ChildPath = [{
|
|
|
640
623
|
interface EditableAPIDeleteOptions {
|
|
641
624
|
mode?: 'blocks' | 'children' | 'selected';
|
|
642
625
|
}
|
|
626
|
+
/**
|
|
627
|
+
* @public
|
|
628
|
+
*/
|
|
629
|
+
type AddedAnnotationPaths = {
|
|
630
|
+
/**
|
|
631
|
+
* @deprecated An annotation may be applied to multiple blocks, resulting
|
|
632
|
+
* in multiple `markDef`'s being created. Use `markDefPaths` instead.
|
|
633
|
+
*/
|
|
634
|
+
markDefPath: Path;
|
|
635
|
+
markDefPaths: Array<Path>;
|
|
636
|
+
/**
|
|
637
|
+
* @deprecated Does not return anything meaningful since an annotation
|
|
638
|
+
* can span multiple blocks and spans. If references the span closest
|
|
639
|
+
* to the focus point of the selection.
|
|
640
|
+
*/
|
|
641
|
+
spanPath: Path;
|
|
642
|
+
};
|
|
643
643
|
/** @beta */
|
|
644
644
|
interface EditableAPI {
|
|
645
645
|
activeAnnotations: () => PortableTextObject[];
|
|
@@ -648,11 +648,7 @@ interface EditableAPI {
|
|
|
648
648
|
name: string;
|
|
649
649
|
}>(type: TSchemaType, value?: {
|
|
650
650
|
[prop: string]: unknown;
|
|
651
|
-
}) =>
|
|
652
|
-
markDefPath: Path;
|
|
653
|
-
markDefPaths: Array<Path>;
|
|
654
|
-
spanPath: Path;
|
|
655
|
-
} | undefined;
|
|
651
|
+
}) => AddedAnnotationPaths | undefined;
|
|
656
652
|
blur: () => void;
|
|
657
653
|
delete: (selection: EditorSelection, options?: EditableAPIDeleteOptions) => void;
|
|
658
654
|
findByPath: (path: Path) => [PortableTextBlock | PortableTextChild | undefined, Path | undefined];
|
|
@@ -1339,7 +1335,7 @@ declare const editorMachine: xstate227.StateMachine<{
|
|
|
1339
1335
|
initialValue?: Array<PortableTextBlock>;
|
|
1340
1336
|
}, xstate227.NonReducibleUnknown, InternalPatchEvent | MutationEvent | PatchesEvent | {
|
|
1341
1337
|
type: "blurred";
|
|
1342
|
-
event:
|
|
1338
|
+
event: react22.FocusEvent<HTMLDivElement, Element>;
|
|
1343
1339
|
} | {
|
|
1344
1340
|
type: "done loading";
|
|
1345
1341
|
} | {
|
|
@@ -1351,7 +1347,7 @@ declare const editorMachine: xstate227.StateMachine<{
|
|
|
1351
1347
|
data: unknown;
|
|
1352
1348
|
} | {
|
|
1353
1349
|
type: "focused";
|
|
1354
|
-
event:
|
|
1350
|
+
event: react22.FocusEvent<HTMLDivElement, Element>;
|
|
1355
1351
|
} | {
|
|
1356
1352
|
type: "invalid value";
|
|
1357
1353
|
resolution: InvalidValueResolution | null;
|
|
@@ -2007,7 +2003,7 @@ declare const editorMachine: xstate227.StateMachine<{
|
|
|
2007
2003
|
type: "drop";
|
|
2008
2004
|
}, undefined, never, never, never, never, InternalPatchEvent | MutationEvent | PatchesEvent | {
|
|
2009
2005
|
type: "blurred";
|
|
2010
|
-
event:
|
|
2006
|
+
event: react22.FocusEvent<HTMLDivElement, Element>;
|
|
2011
2007
|
} | {
|
|
2012
2008
|
type: "done loading";
|
|
2013
2009
|
} | {
|
|
@@ -2019,7 +2015,7 @@ declare const editorMachine: xstate227.StateMachine<{
|
|
|
2019
2015
|
data: unknown;
|
|
2020
2016
|
} | {
|
|
2021
2017
|
type: "focused";
|
|
2022
|
-
event:
|
|
2018
|
+
event: react22.FocusEvent<HTMLDivElement, Element>;
|
|
2023
2019
|
} | {
|
|
2024
2020
|
type: "invalid value";
|
|
2025
2021
|
resolution: InvalidValueResolution | null;
|
|
@@ -2890,7 +2886,7 @@ declare const editorMachine: xstate227.StateMachine<{
|
|
|
2890
2886
|
type: "drop";
|
|
2891
2887
|
}, undefined, never, never, never, never, InternalPatchEvent | MutationEvent | PatchesEvent | {
|
|
2892
2888
|
type: "blurred";
|
|
2893
|
-
event:
|
|
2889
|
+
event: react22.FocusEvent<HTMLDivElement, Element>;
|
|
2894
2890
|
} | {
|
|
2895
2891
|
type: "done loading";
|
|
2896
2892
|
} | {
|
|
@@ -2902,7 +2898,7 @@ declare const editorMachine: xstate227.StateMachine<{
|
|
|
2902
2898
|
data: unknown;
|
|
2903
2899
|
} | {
|
|
2904
2900
|
type: "focused";
|
|
2905
|
-
event:
|
|
2901
|
+
event: react22.FocusEvent<HTMLDivElement, Element>;
|
|
2906
2902
|
} | {
|
|
2907
2903
|
type: "invalid value";
|
|
2908
2904
|
resolution: InvalidValueResolution | null;
|
|
@@ -44,23 +44,6 @@ type BehaviorConfig = {
|
|
|
44
44
|
behavior: Behavior;
|
|
45
45
|
priority: EditorPriority;
|
|
46
46
|
};
|
|
47
|
-
/**
|
|
48
|
-
* @public
|
|
49
|
-
*/
|
|
50
|
-
type AddedAnnotationPaths = {
|
|
51
|
-
/**
|
|
52
|
-
* @deprecated An annotation may be applied to multiple blocks, resulting
|
|
53
|
-
* in multiple `markDef`'s being created. Use `markDefPaths` instead.
|
|
54
|
-
*/
|
|
55
|
-
markDefPath: Path;
|
|
56
|
-
markDefPaths: Array<Path>;
|
|
57
|
-
/**
|
|
58
|
-
* @deprecated Does not return anything meaningful since an annotation
|
|
59
|
-
* can span multiple blocks and spans. If references the span closest
|
|
60
|
-
* to the focus point of the selection.
|
|
61
|
-
*/
|
|
62
|
-
spanPath: Path;
|
|
63
|
-
};
|
|
64
47
|
/**
|
|
65
48
|
* @public
|
|
66
49
|
*/
|
|
@@ -640,6 +623,23 @@ type ChildPath = [{
|
|
|
640
623
|
interface EditableAPIDeleteOptions {
|
|
641
624
|
mode?: 'blocks' | 'children' | 'selected';
|
|
642
625
|
}
|
|
626
|
+
/**
|
|
627
|
+
* @public
|
|
628
|
+
*/
|
|
629
|
+
type AddedAnnotationPaths = {
|
|
630
|
+
/**
|
|
631
|
+
* @deprecated An annotation may be applied to multiple blocks, resulting
|
|
632
|
+
* in multiple `markDef`'s being created. Use `markDefPaths` instead.
|
|
633
|
+
*/
|
|
634
|
+
markDefPath: Path;
|
|
635
|
+
markDefPaths: Array<Path>;
|
|
636
|
+
/**
|
|
637
|
+
* @deprecated Does not return anything meaningful since an annotation
|
|
638
|
+
* can span multiple blocks and spans. If references the span closest
|
|
639
|
+
* to the focus point of the selection.
|
|
640
|
+
*/
|
|
641
|
+
spanPath: Path;
|
|
642
|
+
};
|
|
643
643
|
/** @beta */
|
|
644
644
|
interface EditableAPI {
|
|
645
645
|
activeAnnotations: () => PortableTextObject[];
|
|
@@ -648,11 +648,7 @@ interface EditableAPI {
|
|
|
648
648
|
name: string;
|
|
649
649
|
}>(type: TSchemaType, value?: {
|
|
650
650
|
[prop: string]: unknown;
|
|
651
|
-
}) =>
|
|
652
|
-
markDefPath: Path;
|
|
653
|
-
markDefPaths: Array<Path>;
|
|
654
|
-
spanPath: Path;
|
|
655
|
-
} | undefined;
|
|
651
|
+
}) => AddedAnnotationPaths | undefined;
|
|
656
652
|
blur: () => void;
|
|
657
653
|
delete: (selection: EditorSelection, options?: EditableAPIDeleteOptions) => void;
|
|
658
654
|
findByPath: (path: Path) => [PortableTextBlock | PortableTextChild | undefined, Path | undefined];
|
|
@@ -65,11 +65,17 @@ const getFocusBlock = (snapshot) => {
|
|
|
65
65
|
const startBlockIndex = snapshot.blockIndexMap.get(startBlockKey), endBlockIndex = snapshot.blockIndexMap.get(endBlockKey);
|
|
66
66
|
if (startBlockIndex === void 0 || endBlockIndex === void 0)
|
|
67
67
|
return [];
|
|
68
|
-
const
|
|
69
|
-
return sliceBlocks({
|
|
68
|
+
const startBlock = snapshot.context.value.at(startBlockIndex), slicedStartBlock = startBlock ? sliceBlocks({
|
|
70
69
|
context: snapshot.context,
|
|
71
|
-
blocks:
|
|
72
|
-
});
|
|
70
|
+
blocks: [startBlock]
|
|
71
|
+
}).at(0) : void 0;
|
|
72
|
+
if (startBlockIndex === endBlockIndex)
|
|
73
|
+
return slicedStartBlock ? [slicedStartBlock] : [];
|
|
74
|
+
const endBlock = snapshot.context.value.at(endBlockIndex), slicedEndBlock = endBlock ? sliceBlocks({
|
|
75
|
+
context: snapshot.context,
|
|
76
|
+
blocks: [endBlock]
|
|
77
|
+
}).at(0) : void 0, middleBlocks = snapshot.context.value.slice(startBlockIndex + 1, endBlockIndex);
|
|
78
|
+
return [...slicedStartBlock ? [slicedStartBlock] : [], ...middleBlocks, ...slicedEndBlock ? [slicedEndBlock] : []];
|
|
73
79
|
}, getSelectionText = (snapshot) => getSelectedValue(snapshot).reduce((text, block) => isTextBlock(snapshot.context, block) ? text + block.children.reduce((text2, child) => isSpan(snapshot.context, child) ? text2 + child.text : text2, "") : text, ""), isSelectionCollapsed = (snapshot) => snapshot.context.selection ? JSON.stringify(snapshot.context.selection.anchor.path) === JSON.stringify(snapshot.context.selection.focus.path) && snapshot.context.selection?.anchor.offset === snapshot.context.selection?.focus.offset : !1, isSelectionExpanded = (snapshot) => !isSelectionCollapsed(snapshot);
|
|
74
80
|
export {
|
|
75
81
|
getFocusBlock,
|