@portabletext/editor 1.33.2 → 1.33.4
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/behavior.core.cjs +11 -204
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/behavior.markdown.cjs +7 -7
- package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
- package/lib/_chunks-cjs/plugin.event-listener.cjs +208 -33
- package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs +3 -3
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-active-style.cjs +246 -0
- package/lib/_chunks-cjs/selector.is-active-style.cjs.map +1 -0
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +31 -200
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +1 -1
- package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs +7 -5
- package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +1 -1
- package/lib/_chunks-cjs/util.reverse-selection.cjs +0 -116
- package/lib/_chunks-cjs/util.reverse-selection.cjs.map +1 -1
- package/lib/_chunks-cjs/util.slice-blocks.cjs +138 -1
- package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +9 -202
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/behavior.markdown.js +1 -1
- package/lib/_chunks-es/plugin.event-listener.js +205 -31
- package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
- package/lib/_chunks-es/selector.get-text-before.js +2 -1
- package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
- package/lib/_chunks-es/selector.is-active-style.js +249 -0
- package/lib/_chunks-es/selector.is-active-style.js.map +1 -0
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js +20 -189
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
- package/lib/_chunks-es/util.block-offsets-to-selection.js +5 -3
- package/lib/_chunks-es/util.block-offsets-to-selection.js.map +1 -1
- package/lib/_chunks-es/util.reverse-selection.js +1 -117
- package/lib/_chunks-es/util.reverse-selection.js.map +1 -1
- package/lib/_chunks-es/util.slice-blocks.js +140 -3
- package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
- package/lib/index.d.cts +1 -115
- package/lib/index.d.ts +1 -115
- package/lib/plugins/index.cjs +19 -15
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +1 -115
- package/lib/plugins/index.d.ts +1 -115
- package/lib/plugins/index.js +9 -5
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.cjs +16 -21
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +2 -0
- package/lib/selectors/index.d.ts +2 -0
- package/lib/selectors/index.js +7 -11
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.cjs +13 -13
- package/lib/utils/index.cjs.map +1 -1
- package/lib/utils/index.d.cts +2 -0
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.js +3 -3
- package/package.json +2 -2
- package/src/behaviors/behavior.core.annotations.ts +0 -24
- package/src/behaviors/behavior.core.decorators.ts +0 -19
- package/src/behaviors/behavior.core.insert-break.ts +4 -4
- package/src/behaviors/behavior.core.lists.ts +0 -30
- package/src/behaviors/behavior.core.ts +2 -17
- package/src/behaviors/behavior.default.ts +198 -0
- package/src/behaviors/behavior.foundational.ts +12 -12
- package/src/behaviors/behavior.markdown-emphasis.ts +4 -0
- package/src/converters/converter.text-html.serialize.test.ts +1 -1
- package/src/editor/PortableTextEditor.tsx +1 -1
- package/src/editor/editor-machine.ts +8 -8
- package/src/plugins/plugin.event-listener.tsx +1 -1
- package/src/selectors/selector.get-caret-word-selection.ts +9 -0
- package/src/selectors/selector.get-selection-text.test.ts +383 -36
- package/src/selectors/selector.get-selection-text.ts +13 -73
- package/src/utils/util.block-offset.test.ts +312 -0
- package/src/utils/util.block-offset.ts +39 -7
- package/src/utils/util.block-offsets-to-selection.ts +2 -0
- package/src/utils/util.slice-blocks.ts +12 -1
- package/lib/_chunks-cjs/selector.get-trimmed-selection.cjs +0 -97
- package/lib/_chunks-cjs/selector.get-trimmed-selection.cjs.map +0 -1
- package/lib/_chunks-es/selector.get-trimmed-selection.js +0 -100
- package/lib/_chunks-es/selector.get-trimmed-selection.js.map +0 -1
- package/src/behaviors/behavior.core.deserialize.ts +0 -60
- package/src/behaviors/behavior.core.serialize.ts +0 -44
- package/src/behaviors/behavior.core.style.ts +0 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/selectors/selector.get-active-annotations.ts","../../src/selectors/selector.get-anchor-block.ts","../../src/selectors/selector.get-anchor-text-block.ts","../../src/selectors/selector.get-anchor-child.ts","../../src/selectors/selector.get-anchor-span.ts","../../src/selectors/selector.get-block-offsets.ts","../../src/selectors/selector.get-selected-slice.ts","../../src/selectors/selector.get-selection.ts","../../src/selectors/selector.get-value.ts","../../src/selectors/selector.is-point-after-selection.ts","../../src/selectors/selector.is-point-before-selection.ts","../../src/selectors/selector.is-overlapping-selection.ts"],"sourcesContent":["import {isPortableTextTextBlock, type PortableTextObject} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedSpans} from './selector.get-selected-spans'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveAnnotations: EditorSelector<Array<PortableTextObject>> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedSpans = getSelectedSpans(snapshot)\n\n if (selectedSpans.length === 0) {\n return []\n }\n\n const selectionMarkDefs = selectedBlocks.flatMap((block) =>\n isPortableTextTextBlock(block.node) ? (block.node.markDefs ?? []) : [],\n )\n\n return selectionMarkDefs.filter((markDef) =>\n selectedSpans.some((span) => span.node.marks?.includes(markDef._key)),\n )\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\n\n/**\n * @public\n */\nexport const getAnchorBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const key = context.selection\n ? isKeyedSegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n","import {\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorBlock} from './selector.get-anchor-block'\n\n/**\n * @public\n */\nexport const getAnchorTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const anchorBlock = getAnchorBlock({context})\n\n return anchorBlock && isPortableTextTextBlock(anchorBlock.node)\n ? {node: anchorBlock.node, path: anchorBlock.path}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\nimport {getAnchorTextBlock} from './selector.get-anchor-text-block'\n\n/**\n * @public\n */\nexport const getAnchorChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = ({context}) => {\n const anchorBlock = getAnchorTextBlock({context})\n\n if (!anchorBlock) {\n return undefined\n }\n\n const key = context.selection\n ? isKeyedSegment(context.selection.anchor.path[2])\n ? context.selection.anchor.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? anchorBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...anchorBlock.path, 'children', {_key: key}]}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport {isPortableTextSpan, type PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorChild} from './selector.get-anchor-child'\n\n/**\n * @public\n */\nexport const getAnchorSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = ({context}) => {\n const anchorChild = getAnchorChild({context})\n\n return anchorChild && isPortableTextSpan(anchorChild.node)\n ? {node: anchorChild.node, path: anchorChild.path}\n : undefined\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\n\n/**\n * @public\n */\nexport const getBlockOffsets: EditorSelector<\n {start: utils.BlockOffset; end: utils.BlockOffset} | undefined\n> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const selectionStartPoint = getSelectionStartPoint({context})\n const selectionEndPoint = getSelectionEndPoint({context})\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return undefined\n }\n\n const start = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n const end = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionEndPoint,\n })\n\n return start && end ? {start, end} : undefined\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {sliceBlocks} from '../utils'\n\n/**\n * @public\n */\nexport const getSelectedSlice: EditorSelector<Array<PortableTextBlock>> = ({\n context,\n}) => {\n return sliceBlocks({blocks: context.value, selection: context.selection})\n}\n","import type {EditorSelection, EditorSelector} from './_exports'\n\n/**\n * @public\n */\nexport const getSelection: EditorSelector<EditorSelection> = ({context}) => {\n return context.selection\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from './_exports'\n\n/**\n * @public\n */\nexport const getValue: EditorSelector<Array<PortableTextBlock>> = ({\n context,\n}) => {\n return context.value\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointAfterSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeySegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeySegment(selection.focus.path[2])\n ? selection.focus.path[2]._key\n : undefined\n\n if (!pointBlockKey || !endBlockKey) {\n return false\n }\n\n let after = false\n\n for (const block of snapshot.context.value) {\n if (block._key === endBlockKey) {\n if (block._key !== pointBlockKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this block\n\n if (!isPortableTextTextBlock(block)) {\n break\n }\n\n if (!pointChildKey || !endChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === endChildKey) {\n if (child._key !== pointChildKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this child\n\n after = point.offset > selection.focus.offset\n break\n }\n\n if (child._key === pointChildKey) {\n break\n }\n }\n }\n\n if (block._key === pointBlockKey) {\n break\n }\n }\n\n return after\n }\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointBeforeSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeySegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeySegment(selection.anchor.path[2])\n ? selection.anchor.path[2]._key\n : undefined\n\n if (!pointBlockKey || !startBlockKey) {\n return false\n }\n\n let before = false\n\n for (const block of snapshot.context.value) {\n if (block._key === pointBlockKey) {\n if (block._key !== startBlockKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this block\n\n if (!isPortableTextTextBlock(block)) {\n break\n }\n\n if (!pointChildKey || !startChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === pointChildKey) {\n if (child._key !== startChildKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this child\n\n before = point.offset < selection.anchor.offset\n break\n }\n\n if (child._key === startChildKey) {\n break\n }\n }\n }\n\n if (block._key === startBlockKey) {\n break\n }\n }\n\n return before\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport type {EditorSelector} from './../editor/editor-selector'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {isPointAfterSelection} from './selector.is-point-after-selection'\nimport {isPointBeforeSelection} from './selector.is-point-before-selection'\n\n/**\n * @public\n */\nexport function isOverlappingSelection(\n selection: EditorSelection,\n): EditorSelector<boolean> {\n return ({context}) => {\n if (!selection || !context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint({\n context: {\n ...context,\n selection,\n },\n })\n const selectionEndPoint = getSelectionEndPoint({\n context: {\n ...context,\n selection,\n },\n })\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return false\n }\n\n if (!isPointAfterSelection(selectionStartPoint)({context})) {\n return false\n }\n\n if (!isPointBeforeSelection(selectionEndPoint)({context})) {\n return false\n }\n\n return true\n }\n}\n"],"names":["getActiveAnnotations","snapshot","context","selection","selectedBlocks","getSelectedBlocks","selectedSpans","getSelectedSpans","length","flatMap","block","isPortableTextTextBlock","node","markDefs","filter","markDef","some","span","marks","includes","_key","getAnchorBlock","key","isKeyedSegment","anchor","path","undefined","value","find","getAnchorTextBlock","anchorBlock","getAnchorChild","children","getAnchorSpan","anchorChild","isPortableTextSpan","getBlockOffsets","selectionStartPoint","getSelectionStartPoint","selectionEndPoint","getSelectionEndPoint","start","utils","selectionPoint","end","getSelectedSlice","sliceBlocks","blocks","getSelection","getValue","isPointAfterSelection","point","reverseSelection","pointBlockKey","isKeySegment","pointChildKey","endBlockKey","focus","endChildKey","after","child","offset","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/selectors/selector.get-active-annotations.ts","../../src/selectors/selector.get-anchor-block.ts","../../src/selectors/selector.get-anchor-text-block.ts","../../src/selectors/selector.get-anchor-child.ts","../../src/selectors/selector.get-anchor-span.ts","../../src/selectors/selector.get-block-offsets.ts","../../src/selectors/selector.get-selection.ts","../../src/selectors/selector.get-value.ts","../../src/selectors/selector.is-point-after-selection.ts","../../src/selectors/selector.is-point-before-selection.ts","../../src/selectors/selector.is-overlapping-selection.ts"],"sourcesContent":["import {isPortableTextTextBlock, type PortableTextObject} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedSpans} from './selector.get-selected-spans'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveAnnotations: EditorSelector<Array<PortableTextObject>> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedSpans = getSelectedSpans(snapshot)\n\n if (selectedSpans.length === 0) {\n return []\n }\n\n const selectionMarkDefs = selectedBlocks.flatMap((block) =>\n isPortableTextTextBlock(block.node) ? (block.node.markDefs ?? []) : [],\n )\n\n return selectionMarkDefs.filter((markDef) =>\n selectedSpans.some((span) => span.node.marks?.includes(markDef._key)),\n )\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\n\n/**\n * @public\n */\nexport const getAnchorBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const key = context.selection\n ? isKeyedSegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n","import {\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorBlock} from './selector.get-anchor-block'\n\n/**\n * @public\n */\nexport const getAnchorTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const anchorBlock = getAnchorBlock({context})\n\n return anchorBlock && isPortableTextTextBlock(anchorBlock.node)\n ? {node: anchorBlock.node, path: anchorBlock.path}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\nimport {getAnchorTextBlock} from './selector.get-anchor-text-block'\n\n/**\n * @public\n */\nexport const getAnchorChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = ({context}) => {\n const anchorBlock = getAnchorTextBlock({context})\n\n if (!anchorBlock) {\n return undefined\n }\n\n const key = context.selection\n ? isKeyedSegment(context.selection.anchor.path[2])\n ? context.selection.anchor.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? anchorBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...anchorBlock.path, 'children', {_key: key}]}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport {isPortableTextSpan, type PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorChild} from './selector.get-anchor-child'\n\n/**\n * @public\n */\nexport const getAnchorSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = ({context}) => {\n const anchorChild = getAnchorChild({context})\n\n return anchorChild && isPortableTextSpan(anchorChild.node)\n ? {node: anchorChild.node, path: anchorChild.path}\n : undefined\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\n\n/**\n * @public\n */\nexport const getBlockOffsets: EditorSelector<\n {start: utils.BlockOffset; end: utils.BlockOffset} | undefined\n> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const selectionStartPoint = getSelectionStartPoint({context})\n const selectionEndPoint = getSelectionEndPoint({context})\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return undefined\n }\n\n const start = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n const end = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionEndPoint,\n })\n\n return start && end ? {start, end} : undefined\n}\n","import type {EditorSelection, EditorSelector} from './_exports'\n\n/**\n * @public\n */\nexport const getSelection: EditorSelector<EditorSelection> = ({context}) => {\n return context.selection\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from './_exports'\n\n/**\n * @public\n */\nexport const getValue: EditorSelector<Array<PortableTextBlock>> = ({\n context,\n}) => {\n return context.value\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointAfterSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeySegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeySegment(selection.focus.path[2])\n ? selection.focus.path[2]._key\n : undefined\n\n if (!pointBlockKey || !endBlockKey) {\n return false\n }\n\n let after = false\n\n for (const block of snapshot.context.value) {\n if (block._key === endBlockKey) {\n if (block._key !== pointBlockKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this block\n\n if (!isPortableTextTextBlock(block)) {\n break\n }\n\n if (!pointChildKey || !endChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === endChildKey) {\n if (child._key !== pointChildKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this child\n\n after = point.offset > selection.focus.offset\n break\n }\n\n if (child._key === pointChildKey) {\n break\n }\n }\n }\n\n if (block._key === pointBlockKey) {\n break\n }\n }\n\n return after\n }\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointBeforeSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeySegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeySegment(selection.anchor.path[2])\n ? selection.anchor.path[2]._key\n : undefined\n\n if (!pointBlockKey || !startBlockKey) {\n return false\n }\n\n let before = false\n\n for (const block of snapshot.context.value) {\n if (block._key === pointBlockKey) {\n if (block._key !== startBlockKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this block\n\n if (!isPortableTextTextBlock(block)) {\n break\n }\n\n if (!pointChildKey || !startChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === pointChildKey) {\n if (child._key !== startChildKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this child\n\n before = point.offset < selection.anchor.offset\n break\n }\n\n if (child._key === startChildKey) {\n break\n }\n }\n }\n\n if (block._key === startBlockKey) {\n break\n }\n }\n\n return before\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport type {EditorSelector} from './../editor/editor-selector'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {isPointAfterSelection} from './selector.is-point-after-selection'\nimport {isPointBeforeSelection} from './selector.is-point-before-selection'\n\n/**\n * @public\n */\nexport function isOverlappingSelection(\n selection: EditorSelection,\n): EditorSelector<boolean> {\n return ({context}) => {\n if (!selection || !context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint({\n context: {\n ...context,\n selection,\n },\n })\n const selectionEndPoint = getSelectionEndPoint({\n context: {\n ...context,\n selection,\n },\n })\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return false\n }\n\n if (!isPointAfterSelection(selectionStartPoint)({context})) {\n return false\n }\n\n if (!isPointBeforeSelection(selectionEndPoint)({context})) {\n return false\n }\n\n return true\n }\n}\n"],"names":["getActiveAnnotations","snapshot","context","selection","selectedBlocks","getSelectedBlocks","selectedSpans","getSelectedSpans","length","flatMap","block","isPortableTextTextBlock","node","markDefs","filter","markDef","some","span","marks","includes","_key","getAnchorBlock","key","isKeyedSegment","anchor","path","undefined","value","find","getAnchorTextBlock","anchorBlock","getAnchorChild","children","getAnchorSpan","anchorChild","isPortableTextSpan","getBlockOffsets","selectionStartPoint","getSelectionStartPoint","selectionEndPoint","getSelectionEndPoint","start","utils","selectionPoint","end","getSelection","getValue","isPointAfterSelection","point","reverseSelection","pointBlockKey","isKeySegment","pointChildKey","endBlockKey","focus","endChildKey","after","child","offset","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection"],"mappings":"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"}
|
|
@@ -48,9 +48,11 @@ declare function blockOffsetsToSelection({
|
|
|
48
48
|
declare function blockOffsetToSpanSelectionPoint({
|
|
49
49
|
value,
|
|
50
50
|
blockOffset,
|
|
51
|
+
direction,
|
|
51
52
|
}: {
|
|
52
53
|
value: Array<PortableTextBlock>
|
|
53
54
|
blockOffset: BlockOffset
|
|
55
|
+
direction: 'forward' | 'backward'
|
|
54
56
|
}):
|
|
55
57
|
| {
|
|
56
58
|
path: [KeyedSegment, 'children', KeyedSegment]
|
package/lib/selectors/index.d.ts
CHANGED
|
@@ -48,9 +48,11 @@ declare function blockOffsetsToSelection({
|
|
|
48
48
|
declare function blockOffsetToSpanSelectionPoint({
|
|
49
49
|
value,
|
|
50
50
|
blockOffset,
|
|
51
|
+
direction,
|
|
51
52
|
}: {
|
|
52
53
|
value: Array<PortableTextBlock>
|
|
53
54
|
blockOffset: BlockOffset
|
|
55
|
+
direction: 'forward' | 'backward'
|
|
54
56
|
}):
|
|
55
57
|
| {
|
|
56
58
|
path: [KeyedSegment, 'children', KeyedSegment]
|
package/lib/selectors/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { isPortableTextTextBlock, isPortableTextSpan, isKeySegment } from "@sanity/types";
|
|
2
|
-
import {
|
|
3
|
-
import { getActiveListItem, getActiveStyle,
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { getSelectedSpans } from "../_chunks-es/selector.is-active-style.js";
|
|
3
|
+
import { getActiveListItem, getActiveStyle, getTrimmedSelection, isActiveAnnotation, isActiveDecorator, isActiveListItem, isActiveStyle } from "../_chunks-es/selector.is-active-style.js";
|
|
4
|
+
import { getSelectedBlocks, getSelectionStartPoint, getSelectionEndPoint } from "../_chunks-es/selector.is-at-the-start-of-block.js";
|
|
5
|
+
import { getCaretWordSelection, getFirstBlock, getFocusBlock, getFocusBlockObject, getFocusChild, getFocusListBlock, getFocusSpan, getFocusTextBlock, getLastBlock, getNextBlock, getNextInlineObject, getPreviousBlock, getPreviousInlineObject, getSelectedSlice, getSelectionEndBlock, getSelectionStartBlock, getSelectionText, isAtTheEndOfBlock, isAtTheStartOfBlock, isSelectionCollapsed, isSelectionExpanded } from "../_chunks-es/selector.is-at-the-start-of-block.js";
|
|
6
|
+
import { isKeyedSegment, spanSelectionPointToBlockOffset } from "../_chunks-es/util.slice-blocks.js";
|
|
6
7
|
import { getBlockTextBefore } from "../_chunks-es/selector.get-text-before.js";
|
|
7
|
-
import {
|
|
8
|
+
import { reverseSelection } from "../_chunks-es/util.reverse-selection.js";
|
|
8
9
|
const getActiveAnnotations = (snapshot) => {
|
|
9
10
|
if (!snapshot.context.selection)
|
|
10
11
|
return [];
|
|
@@ -78,12 +79,7 @@ const getActiveAnnotations = (snapshot) => {
|
|
|
78
79
|
start,
|
|
79
80
|
end
|
|
80
81
|
} : void 0;
|
|
81
|
-
},
|
|
82
|
-
context
|
|
83
|
-
}) => sliceBlocks({
|
|
84
|
-
blocks: context.value,
|
|
85
|
-
selection: context.selection
|
|
86
|
-
}), getSelection = ({
|
|
82
|
+
}, getSelection = ({
|
|
87
83
|
context
|
|
88
84
|
}) => context.selection, getValue = ({
|
|
89
85
|
context
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/selectors/selector.get-active-annotations.ts","../../src/selectors/selector.get-anchor-block.ts","../../src/selectors/selector.get-anchor-text-block.ts","../../src/selectors/selector.get-anchor-child.ts","../../src/selectors/selector.get-anchor-span.ts","../../src/selectors/selector.get-block-offsets.ts","../../src/selectors/selector.get-selected-slice.ts","../../src/selectors/selector.get-selection.ts","../../src/selectors/selector.get-value.ts","../../src/selectors/selector.is-point-after-selection.ts","../../src/selectors/selector.is-point-before-selection.ts","../../src/selectors/selector.is-overlapping-selection.ts"],"sourcesContent":["import {isPortableTextTextBlock, type PortableTextObject} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedSpans} from './selector.get-selected-spans'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveAnnotations: EditorSelector<Array<PortableTextObject>> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedSpans = getSelectedSpans(snapshot)\n\n if (selectedSpans.length === 0) {\n return []\n }\n\n const selectionMarkDefs = selectedBlocks.flatMap((block) =>\n isPortableTextTextBlock(block.node) ? (block.node.markDefs ?? []) : [],\n )\n\n return selectionMarkDefs.filter((markDef) =>\n selectedSpans.some((span) => span.node.marks?.includes(markDef._key)),\n )\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\n\n/**\n * @public\n */\nexport const getAnchorBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const key = context.selection\n ? isKeyedSegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n","import {\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorBlock} from './selector.get-anchor-block'\n\n/**\n * @public\n */\nexport const getAnchorTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const anchorBlock = getAnchorBlock({context})\n\n return anchorBlock && isPortableTextTextBlock(anchorBlock.node)\n ? {node: anchorBlock.node, path: anchorBlock.path}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\nimport {getAnchorTextBlock} from './selector.get-anchor-text-block'\n\n/**\n * @public\n */\nexport const getAnchorChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = ({context}) => {\n const anchorBlock = getAnchorTextBlock({context})\n\n if (!anchorBlock) {\n return undefined\n }\n\n const key = context.selection\n ? isKeyedSegment(context.selection.anchor.path[2])\n ? context.selection.anchor.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? anchorBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...anchorBlock.path, 'children', {_key: key}]}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport {isPortableTextSpan, type PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorChild} from './selector.get-anchor-child'\n\n/**\n * @public\n */\nexport const getAnchorSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = ({context}) => {\n const anchorChild = getAnchorChild({context})\n\n return anchorChild && isPortableTextSpan(anchorChild.node)\n ? {node: anchorChild.node, path: anchorChild.path}\n : undefined\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\n\n/**\n * @public\n */\nexport const getBlockOffsets: EditorSelector<\n {start: utils.BlockOffset; end: utils.BlockOffset} | undefined\n> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const selectionStartPoint = getSelectionStartPoint({context})\n const selectionEndPoint = getSelectionEndPoint({context})\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return undefined\n }\n\n const start = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n const end = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionEndPoint,\n })\n\n return start && end ? {start, end} : undefined\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {sliceBlocks} from '../utils'\n\n/**\n * @public\n */\nexport const getSelectedSlice: EditorSelector<Array<PortableTextBlock>> = ({\n context,\n}) => {\n return sliceBlocks({blocks: context.value, selection: context.selection})\n}\n","import type {EditorSelection, EditorSelector} from './_exports'\n\n/**\n * @public\n */\nexport const getSelection: EditorSelector<EditorSelection> = ({context}) => {\n return context.selection\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from './_exports'\n\n/**\n * @public\n */\nexport const getValue: EditorSelector<Array<PortableTextBlock>> = ({\n context,\n}) => {\n return context.value\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointAfterSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeySegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeySegment(selection.focus.path[2])\n ? selection.focus.path[2]._key\n : undefined\n\n if (!pointBlockKey || !endBlockKey) {\n return false\n }\n\n let after = false\n\n for (const block of snapshot.context.value) {\n if (block._key === endBlockKey) {\n if (block._key !== pointBlockKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this block\n\n if (!isPortableTextTextBlock(block)) {\n break\n }\n\n if (!pointChildKey || !endChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === endChildKey) {\n if (child._key !== pointChildKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this child\n\n after = point.offset > selection.focus.offset\n break\n }\n\n if (child._key === pointChildKey) {\n break\n }\n }\n }\n\n if (block._key === pointBlockKey) {\n break\n }\n }\n\n return after\n }\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointBeforeSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeySegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeySegment(selection.anchor.path[2])\n ? selection.anchor.path[2]._key\n : undefined\n\n if (!pointBlockKey || !startBlockKey) {\n return false\n }\n\n let before = false\n\n for (const block of snapshot.context.value) {\n if (block._key === pointBlockKey) {\n if (block._key !== startBlockKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this block\n\n if (!isPortableTextTextBlock(block)) {\n break\n }\n\n if (!pointChildKey || !startChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === pointChildKey) {\n if (child._key !== startChildKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this child\n\n before = point.offset < selection.anchor.offset\n break\n }\n\n if (child._key === startChildKey) {\n break\n }\n }\n }\n\n if (block._key === startBlockKey) {\n break\n }\n }\n\n return before\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport type {EditorSelector} from './../editor/editor-selector'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {isPointAfterSelection} from './selector.is-point-after-selection'\nimport {isPointBeforeSelection} from './selector.is-point-before-selection'\n\n/**\n * @public\n */\nexport function isOverlappingSelection(\n selection: EditorSelection,\n): EditorSelector<boolean> {\n return ({context}) => {\n if (!selection || !context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint({\n context: {\n ...context,\n selection,\n },\n })\n const selectionEndPoint = getSelectionEndPoint({\n context: {\n ...context,\n selection,\n },\n })\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return false\n }\n\n if (!isPointAfterSelection(selectionStartPoint)({context})) {\n return false\n }\n\n if (!isPointBeforeSelection(selectionEndPoint)({context})) {\n return false\n }\n\n return true\n }\n}\n"],"names":["getActiveAnnotations","snapshot","context","selection","selectedBlocks","getSelectedBlocks","selectedSpans","getSelectedSpans","length","flatMap","block","isPortableTextTextBlock","node","markDefs","filter","markDef","some","span","marks","includes","_key","getAnchorBlock","key","isKeyedSegment","anchor","path","undefined","value","find","getAnchorTextBlock","anchorBlock","getAnchorChild","children","getAnchorSpan","anchorChild","isPortableTextSpan","getBlockOffsets","selectionStartPoint","getSelectionStartPoint","selectionEndPoint","getSelectionEndPoint","start","utils","selectionPoint","end","getSelectedSlice","sliceBlocks","blocks","getSelection","getValue","isPointAfterSelection","point","reverseSelection","pointBlockKey","isKeySegment","pointChildKey","endBlockKey","focus","endChildKey","after","child","offset","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/selectors/selector.get-active-annotations.ts","../../src/selectors/selector.get-anchor-block.ts","../../src/selectors/selector.get-anchor-text-block.ts","../../src/selectors/selector.get-anchor-child.ts","../../src/selectors/selector.get-anchor-span.ts","../../src/selectors/selector.get-block-offsets.ts","../../src/selectors/selector.get-selection.ts","../../src/selectors/selector.get-value.ts","../../src/selectors/selector.is-point-after-selection.ts","../../src/selectors/selector.is-point-before-selection.ts","../../src/selectors/selector.is-overlapping-selection.ts"],"sourcesContent":["import {isPortableTextTextBlock, type PortableTextObject} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getSelectedSpans} from './selector.get-selected-spans'\nimport {getSelectedBlocks} from './selectors'\n\n/**\n * @public\n */\nexport const getActiveAnnotations: EditorSelector<Array<PortableTextObject>> = (\n snapshot,\n) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks = getSelectedBlocks(snapshot)\n const selectedSpans = getSelectedSpans(snapshot)\n\n if (selectedSpans.length === 0) {\n return []\n }\n\n const selectionMarkDefs = selectedBlocks.flatMap((block) =>\n isPortableTextTextBlock(block.node) ? (block.node.markDefs ?? []) : [],\n )\n\n return selectionMarkDefs.filter((markDef) =>\n selectedSpans.some((span) => span.node.marks?.includes(markDef._key)),\n )\n}\n","import type {KeyedSegment, PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\n\n/**\n * @public\n */\nexport const getAnchorBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const key = context.selection\n ? isKeyedSegment(context.selection.anchor.path[0])\n ? context.selection.anchor.path[0]._key\n : undefined\n : undefined\n\n const node = key\n ? context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n","import {\n isPortableTextTextBlock,\n type KeyedSegment,\n type PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorBlock} from './selector.get-anchor-block'\n\n/**\n * @public\n */\nexport const getAnchorTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | undefined\n> = ({context}) => {\n const anchorBlock = getAnchorBlock({context})\n\n return anchorBlock && isPortableTextTextBlock(anchorBlock.node)\n ? {node: anchorBlock.node, path: anchorBlock.path}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport type {PortableTextObject, PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isKeyedSegment} from '../utils'\nimport {getAnchorTextBlock} from './selector.get-anchor-text-block'\n\n/**\n * @public\n */\nexport const getAnchorChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\n }\n | undefined\n> = ({context}) => {\n const anchorBlock = getAnchorTextBlock({context})\n\n if (!anchorBlock) {\n return undefined\n }\n\n const key = context.selection\n ? isKeyedSegment(context.selection.anchor.path[2])\n ? context.selection.anchor.path[2]._key\n : undefined\n : undefined\n\n const node = key\n ? anchorBlock.node.children.find((span) => span._key === key)\n : undefined\n\n return node && key\n ? {node, path: [...anchorBlock.path, 'children', {_key: key}]}\n : undefined\n}\n","import type {KeyedSegment} from '@portabletext/patches'\nimport {isPortableTextSpan, type PortableTextSpan} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {getAnchorChild} from './selector.get-anchor-child'\n\n/**\n * @public\n */\nexport const getAnchorSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | undefined\n> = ({context}) => {\n const anchorChild = getAnchorChild({context})\n\n return anchorChild && isPortableTextSpan(anchorChild.node)\n ? {node: anchorChild.node, path: anchorChild.path}\n : undefined\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport * as utils from '../utils'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\n\n/**\n * @public\n */\nexport const getBlockOffsets: EditorSelector<\n {start: utils.BlockOffset; end: utils.BlockOffset} | undefined\n> = ({context}) => {\n if (!context.selection) {\n return undefined\n }\n\n const selectionStartPoint = getSelectionStartPoint({context})\n const selectionEndPoint = getSelectionEndPoint({context})\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return undefined\n }\n\n const start = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n const end = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionEndPoint,\n })\n\n return start && end ? {start, end} : undefined\n}\n","import type {EditorSelection, EditorSelector} from './_exports'\n\n/**\n * @public\n */\nexport const getSelection: EditorSelector<EditorSelection> = ({context}) => {\n return context.selection\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {EditorSelector} from './_exports'\n\n/**\n * @public\n */\nexport const getValue: EditorSelector<Array<PortableTextBlock>> = ({\n context,\n}) => {\n return context.value\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointAfterSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const endBlockKey = isKeySegment(selection.focus.path[0])\n ? selection.focus.path[0]._key\n : undefined\n const endChildKey = isKeySegment(selection.focus.path[2])\n ? selection.focus.path[2]._key\n : undefined\n\n if (!pointBlockKey || !endBlockKey) {\n return false\n }\n\n let after = false\n\n for (const block of snapshot.context.value) {\n if (block._key === endBlockKey) {\n if (block._key !== pointBlockKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this block\n\n if (!isPortableTextTextBlock(block)) {\n break\n }\n\n if (!pointChildKey || !endChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === endChildKey) {\n if (child._key !== pointChildKey) {\n after = true\n break\n }\n\n // Both the point and the selection end in this child\n\n after = point.offset > selection.focus.offset\n break\n }\n\n if (child._key === pointChildKey) {\n break\n }\n }\n }\n\n if (block._key === pointBlockKey) {\n break\n }\n }\n\n return after\n }\n}\n","import {isKeySegment, isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport type {EditorSelectionPoint} from '../types/editor'\nimport {reverseSelection} from '../utils/util.reverse-selection'\n\n/**\n * @public\n */\nexport function isPointBeforeSelection(\n point: EditorSelectionPoint,\n): EditorSelector<boolean> {\n return (snapshot) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n const selection = reverseSelection(snapshot.context.selection)\n\n const pointBlockKey = isKeySegment(point.path[0])\n ? point.path[0]._key\n : undefined\n const pointChildKey = isKeySegment(point.path[2])\n ? point.path[2]._key\n : undefined\n\n const startBlockKey = isKeySegment(selection.anchor.path[0])\n ? selection.anchor.path[0]._key\n : undefined\n const startChildKey = isKeySegment(selection.anchor.path[2])\n ? selection.anchor.path[2]._key\n : undefined\n\n if (!pointBlockKey || !startBlockKey) {\n return false\n }\n\n let before = false\n\n for (const block of snapshot.context.value) {\n if (block._key === pointBlockKey) {\n if (block._key !== startBlockKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this block\n\n if (!isPortableTextTextBlock(block)) {\n break\n }\n\n if (!pointChildKey || !startChildKey) {\n break\n }\n\n for (const child of block.children) {\n if (child._key === pointChildKey) {\n if (child._key !== startChildKey) {\n before = true\n break\n }\n\n // Both the point and the selection start in this child\n\n before = point.offset < selection.anchor.offset\n break\n }\n\n if (child._key === startChildKey) {\n break\n }\n }\n }\n\n if (block._key === startBlockKey) {\n break\n }\n }\n\n return before\n }\n}\n","import type {EditorSelection} from '../types/editor'\nimport type {EditorSelector} from './../editor/editor-selector'\nimport {getSelectionEndPoint} from './selector.get-selection-end-point'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {isPointAfterSelection} from './selector.is-point-after-selection'\nimport {isPointBeforeSelection} from './selector.is-point-before-selection'\n\n/**\n * @public\n */\nexport function isOverlappingSelection(\n selection: EditorSelection,\n): EditorSelector<boolean> {\n return ({context}) => {\n if (!selection || !context.selection) {\n return false\n }\n\n const selectionStartPoint = getSelectionStartPoint({\n context: {\n ...context,\n selection,\n },\n })\n const selectionEndPoint = getSelectionEndPoint({\n context: {\n ...context,\n selection,\n },\n })\n\n if (!selectionStartPoint || !selectionEndPoint) {\n return false\n }\n\n if (!isPointAfterSelection(selectionStartPoint)({context})) {\n return false\n }\n\n if (!isPointBeforeSelection(selectionEndPoint)({context})) {\n return false\n }\n\n return true\n }\n}\n"],"names":["getActiveAnnotations","snapshot","context","selection","selectedBlocks","getSelectedBlocks","selectedSpans","getSelectedSpans","length","flatMap","block","isPortableTextTextBlock","node","markDefs","filter","markDef","some","span","marks","includes","_key","getAnchorBlock","key","isKeyedSegment","anchor","path","undefined","value","find","getAnchorTextBlock","anchorBlock","getAnchorChild","children","getAnchorSpan","anchorChild","isPortableTextSpan","getBlockOffsets","selectionStartPoint","getSelectionStartPoint","selectionEndPoint","getSelectionEndPoint","start","utils","selectionPoint","end","getSelection","getValue","isPointAfterSelection","point","reverseSelection","pointBlockKey","isKeySegment","pointChildKey","endBlockKey","focus","endChildKey","after","child","offset","isPointBeforeSelection","startBlockKey","startChildKey","before","isOverlappingSelection"],"mappings":"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"}
|
package/lib/utils/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: !0 });
|
|
3
|
-
var
|
|
3
|
+
var util_sliceBlocks = require("../_chunks-cjs/util.slice-blocks.cjs"), util_blockOffsetsToSelection = require("../_chunks-cjs/util.block-offsets-to-selection.cjs"), util_reverseSelection = require("../_chunks-cjs/util.reverse-selection.cjs");
|
|
4
4
|
function isTextBlock(context, block) {
|
|
5
5
|
return block._type === context.schema.block.name;
|
|
6
6
|
}
|
|
@@ -53,7 +53,7 @@ function splitTextBlock({
|
|
|
53
53
|
}, "children", {
|
|
54
54
|
_key: lastChild._key
|
|
55
55
|
}],
|
|
56
|
-
offset:
|
|
56
|
+
offset: util_sliceBlocks.isSpan(context, lastChild) ? lastChild.text.length : 0
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
}).at(0);
|
|
@@ -63,18 +63,18 @@ function splitTextBlock({
|
|
|
63
63
|
after
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
|
-
exports.blockOffsetToSpanSelectionPoint =
|
|
67
|
-
exports.getBlockEndPoint =
|
|
68
|
-
exports.getBlockStartPoint =
|
|
69
|
-
exports.getTextBlockText =
|
|
70
|
-
exports.isEmptyTextBlock =
|
|
71
|
-
exports.isEqualSelectionPoints =
|
|
72
|
-
exports.isKeyedSegment =
|
|
73
|
-
exports.isSpan =
|
|
74
|
-
exports.reverseSelection = util_reverseSelection.reverseSelection;
|
|
75
|
-
exports.spanSelectionPointToBlockOffset = util_reverseSelection.spanSelectionPointToBlockOffset;
|
|
76
|
-
exports.blockOffsetsToSelection = util_blockOffsetsToSelection.blockOffsetsToSelection;
|
|
66
|
+
exports.blockOffsetToSpanSelectionPoint = util_sliceBlocks.blockOffsetToSpanSelectionPoint;
|
|
67
|
+
exports.getBlockEndPoint = util_sliceBlocks.getBlockEndPoint;
|
|
68
|
+
exports.getBlockStartPoint = util_sliceBlocks.getBlockStartPoint;
|
|
69
|
+
exports.getTextBlockText = util_sliceBlocks.getTextBlockText;
|
|
70
|
+
exports.isEmptyTextBlock = util_sliceBlocks.isEmptyTextBlock;
|
|
71
|
+
exports.isEqualSelectionPoints = util_sliceBlocks.isEqualSelectionPoints;
|
|
72
|
+
exports.isKeyedSegment = util_sliceBlocks.isKeyedSegment;
|
|
73
|
+
exports.isSpan = util_sliceBlocks.isSpan;
|
|
77
74
|
exports.sliceBlocks = util_sliceBlocks.sliceBlocks;
|
|
75
|
+
exports.spanSelectionPointToBlockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset;
|
|
76
|
+
exports.blockOffsetsToSelection = util_blockOffsetsToSelection.blockOffsetsToSelection;
|
|
77
|
+
exports.reverseSelection = util_reverseSelection.reverseSelection;
|
|
78
78
|
exports.isTextBlock = isTextBlock;
|
|
79
79
|
exports.mergeTextBlocks = mergeTextBlocks;
|
|
80
80
|
exports.splitTextBlock = splitTextBlock;
|
package/lib/utils/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/utils/util.is-text-block.ts","../../src/utils/util.merge-text-blocks.ts","../../src/utils/util.split-text-block.ts"],"sourcesContent":["import type {PortableTextBlock, PortableTextTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../selectors'\n\n/**\n * @public\n */\nexport function isTextBlock(\n context: Pick<EditorContext, 'schema'>,\n block: PortableTextBlock,\n): block is PortableTextTextBlock {\n return block._type === context.schema.block.name\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\nimport {parseBlock} from '../internal-utils/parse-blocks'\nimport type {EditorContext} from '../selectors'\nimport {isTextBlock} from './util.is-text-block'\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: {refreshKeys: true},\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 {PortableTextTextBlock} from '@sanity/types'\nimport {isTextBlock, sliceBlocks, type EditorSelectionPoint} from '.'\nimport type {EditorContext} from '../selectors'\nimport {isSpan} from './util.is-span'\n\n/**\n * @beta\n */\nexport function splitTextBlock({\n context,\n block,\n point,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: PortableTextTextBlock\n point: EditorSelectionPoint\n}): {before: PortableTextTextBlock; after: PortableTextTextBlock} | undefined {\n const firstChild = block.children.at(0)\n const lastChild = block.children.at(block.children.length - 1)\n\n if (!firstChild || !lastChild) {\n return undefined\n }\n\n const before = sliceBlocks({\n blocks: [block],\n selection: {\n anchor: {\n path: [{_key: block._key}, 'children', {_key: firstChild._key}],\n offset: 0,\n },\n focus: point,\n },\n }).at(0)\n const after = sliceBlocks({\n blocks: [block],\n selection: {\n anchor: point,\n focus: {\n path: [{_key: block._key}, 'children', {_key: lastChild._key}],\n offset: isSpan(context, lastChild) ? lastChild.text.length : 0,\n },\n },\n }).at(0)\n\n if (!before || !after) {\n return undefined\n }\n\n if (!isTextBlock(context, before) || !isTextBlock(context, after)) {\n return undefined\n }\n\n return {before, after}\n}\n"],"names":["isTextBlock","context","block","_type","schema","name","mergeTextBlocks","targetBlock","incomingBlock","parsedIncomingBlock","parseBlock","options","refreshKeys","children","markDefs","splitTextBlock","point","firstChild","at","lastChild","length","before","sliceBlocks","blocks","selection","anchor","path","_key","offset","focus","after","isSpan","text"],"mappings":";;;AAMgBA,SAAAA,YACdC,SACAC,OACgC;AAChC,SAAOA,MAAMC,UAAUF,QAAQG,OAAOF,MAAMG;AAC9C;ACHO,SAASC,gBAAgB;AAAA,EAC9BL;AAAAA,EACAM;AAAAA,EACAC;AAKF,GAAG;AACD,QAAMC,sBAAsBC,6BAAAA,WAAW;AAAA,IACrCT;AAAAA,IACAC,OAAOM;AAAAA,IACPG,SAAS;AAAA,MAACC,aAAa;AAAA,IAAA;AAAA,EAAI,CAC5B;AAED,SAAI,CAACH,uBAAuB,CAACT,YAAYC,SAASQ,mBAAmB,IAC5DF,cAGF;AAAA,IACL,GAAGA;AAAAA,IACHM,UAAU,CAAC,GAAGN,YAAYM,UAAU,GAAGJ,oBAAoBI,QAAQ;AAAA,IACnEC,UAAU,CACR,GAAIP,YAAYO,YAAY,CAAA,GAC5B,GAAIL,oBAAoBK,YAAY,CAAG,CAAA;AAAA,EAE3C;AACF;AC3BO,SAASC,eAAe;AAAA,EAC7Bd;AAAAA,EACAC;AAAAA,EACAc;AAKF,GAA8E;AAC5E,QAAMC,aAAaf,MAAMW,SAASK,GAAG,CAAC,GAChCC,YAAYjB,MAAMW,SAASK,GAAGhB,MAAMW,SAASO,SAAS,CAAC;AAEzD,MAAA,CAACH,cAAc,CAACE;AAClB;AAGF,QAAME,SAASC,iBAAAA,YAAY;AAAA,IACzBC,QAAQ,CAACrB,KAAK;AAAA,IACdsB,WAAW;AAAA,MACTC,QAAQ;AAAA,QACNC,MAAM,CAAC;AAAA,UAACC,MAAMzB,MAAMyB;AAAAA,WAAO,YAAY;AAAA,UAACA,MAAMV,WAAWU;AAAAA,QAAAA,CAAK;AAAA,QAC9DC,QAAQ;AAAA,MACV;AAAA,MACAC,OAAOb;AAAAA,IAAAA;AAAAA,EAEV,CAAA,EAAEE,GAAG,CAAC,GACDY,QAAQR,iBAAAA,YAAY;AAAA,IACxBC,QAAQ,CAACrB,KAAK;AAAA,IACdsB,WAAW;AAAA,MACTC,QAAQT;AAAAA,MACRa,OAAO;AAAA,QACLH,MAAM,CAAC;AAAA,UAACC,MAAMzB,MAAMyB;AAAAA,WAAO,YAAY;AAAA,UAACA,MAAMR,UAAUQ;AAAAA,QAAAA,CAAK;AAAA,QAC7DC,QAAQG,
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/utils/util.is-text-block.ts","../../src/utils/util.merge-text-blocks.ts","../../src/utils/util.split-text-block.ts"],"sourcesContent":["import type {PortableTextBlock, PortableTextTextBlock} from '@sanity/types'\nimport type {EditorContext} from '../selectors'\n\n/**\n * @public\n */\nexport function isTextBlock(\n context: Pick<EditorContext, 'schema'>,\n block: PortableTextBlock,\n): block is PortableTextTextBlock {\n return block._type === context.schema.block.name\n}\n","import type {PortableTextTextBlock} from '@sanity/types'\nimport {parseBlock} from '../internal-utils/parse-blocks'\nimport type {EditorContext} from '../selectors'\nimport {isTextBlock} from './util.is-text-block'\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: {refreshKeys: true},\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 {PortableTextTextBlock} from '@sanity/types'\nimport {isTextBlock, sliceBlocks, type EditorSelectionPoint} from '.'\nimport type {EditorContext} from '../selectors'\nimport {isSpan} from './util.is-span'\n\n/**\n * @beta\n */\nexport function splitTextBlock({\n context,\n block,\n point,\n}: {\n context: Pick<EditorContext, 'schema'>\n block: PortableTextTextBlock\n point: EditorSelectionPoint\n}): {before: PortableTextTextBlock; after: PortableTextTextBlock} | undefined {\n const firstChild = block.children.at(0)\n const lastChild = block.children.at(block.children.length - 1)\n\n if (!firstChild || !lastChild) {\n return undefined\n }\n\n const before = sliceBlocks({\n blocks: [block],\n selection: {\n anchor: {\n path: [{_key: block._key}, 'children', {_key: firstChild._key}],\n offset: 0,\n },\n focus: point,\n },\n }).at(0)\n const after = sliceBlocks({\n blocks: [block],\n selection: {\n anchor: point,\n focus: {\n path: [{_key: block._key}, 'children', {_key: lastChild._key}],\n offset: isSpan(context, lastChild) ? lastChild.text.length : 0,\n },\n },\n }).at(0)\n\n if (!before || !after) {\n return undefined\n }\n\n if (!isTextBlock(context, before) || !isTextBlock(context, after)) {\n return undefined\n }\n\n return {before, after}\n}\n"],"names":["isTextBlock","context","block","_type","schema","name","mergeTextBlocks","targetBlock","incomingBlock","parsedIncomingBlock","parseBlock","options","refreshKeys","children","markDefs","splitTextBlock","point","firstChild","at","lastChild","length","before","sliceBlocks","blocks","selection","anchor","path","_key","offset","focus","after","isSpan","text"],"mappings":";;;AAMgBA,SAAAA,YACdC,SACAC,OACgC;AAChC,SAAOA,MAAMC,UAAUF,QAAQG,OAAOF,MAAMG;AAC9C;ACHO,SAASC,gBAAgB;AAAA,EAC9BL;AAAAA,EACAM;AAAAA,EACAC;AAKF,GAAG;AACD,QAAMC,sBAAsBC,6BAAAA,WAAW;AAAA,IACrCT;AAAAA,IACAC,OAAOM;AAAAA,IACPG,SAAS;AAAA,MAACC,aAAa;AAAA,IAAA;AAAA,EAAI,CAC5B;AAED,SAAI,CAACH,uBAAuB,CAACT,YAAYC,SAASQ,mBAAmB,IAC5DF,cAGF;AAAA,IACL,GAAGA;AAAAA,IACHM,UAAU,CAAC,GAAGN,YAAYM,UAAU,GAAGJ,oBAAoBI,QAAQ;AAAA,IACnEC,UAAU,CACR,GAAIP,YAAYO,YAAY,CAAA,GAC5B,GAAIL,oBAAoBK,YAAY,CAAG,CAAA;AAAA,EAE3C;AACF;AC3BO,SAASC,eAAe;AAAA,EAC7Bd;AAAAA,EACAC;AAAAA,EACAc;AAKF,GAA8E;AAC5E,QAAMC,aAAaf,MAAMW,SAASK,GAAG,CAAC,GAChCC,YAAYjB,MAAMW,SAASK,GAAGhB,MAAMW,SAASO,SAAS,CAAC;AAEzD,MAAA,CAACH,cAAc,CAACE;AAClB;AAGF,QAAME,SAASC,iBAAAA,YAAY;AAAA,IACzBC,QAAQ,CAACrB,KAAK;AAAA,IACdsB,WAAW;AAAA,MACTC,QAAQ;AAAA,QACNC,MAAM,CAAC;AAAA,UAACC,MAAMzB,MAAMyB;AAAAA,WAAO,YAAY;AAAA,UAACA,MAAMV,WAAWU;AAAAA,QAAAA,CAAK;AAAA,QAC9DC,QAAQ;AAAA,MACV;AAAA,MACAC,OAAOb;AAAAA,IAAAA;AAAAA,EAEV,CAAA,EAAEE,GAAG,CAAC,GACDY,QAAQR,iBAAAA,YAAY;AAAA,IACxBC,QAAQ,CAACrB,KAAK;AAAA,IACdsB,WAAW;AAAA,MACTC,QAAQT;AAAAA,MACRa,OAAO;AAAA,QACLH,MAAM,CAAC;AAAA,UAACC,MAAMzB,MAAMyB;AAAAA,WAAO,YAAY;AAAA,UAACA,MAAMR,UAAUQ;AAAAA,QAAAA,CAAK;AAAA,QAC7DC,QAAQG,iBAAO9B,OAAAA,SAASkB,SAAS,IAAIA,UAAUa,KAAKZ,SAAS;AAAA,MAAA;AAAA,IAC/D;AAAA,EACF,CACD,EAAEF,GAAG,CAAC;AAEP,MAAI,EAACG,CAAAA,UAAU,CAACS,UAIZ,EAAC9B,CAAAA,YAAYC,SAASoB,MAAM,KAAK,CAACrB,YAAYC,SAAS6B,KAAK;AAIzD,WAAA;AAAA,MAACT;AAAAA,MAAQS;AAAAA,IAAK;AACvB;;;;;;;;;;;;;;;;"}
|
package/lib/utils/index.d.cts
CHANGED
|
@@ -46,9 +46,11 @@ export declare function blockOffsetsToSelection({
|
|
|
46
46
|
export declare function blockOffsetToSpanSelectionPoint({
|
|
47
47
|
value,
|
|
48
48
|
blockOffset,
|
|
49
|
+
direction,
|
|
49
50
|
}: {
|
|
50
51
|
value: Array<PortableTextBlock>
|
|
51
52
|
blockOffset: BlockOffset
|
|
53
|
+
direction: 'forward' | 'backward'
|
|
52
54
|
}):
|
|
53
55
|
| {
|
|
54
56
|
path: [KeyedSegment, 'children', KeyedSegment]
|
package/lib/utils/index.d.ts
CHANGED
|
@@ -46,9 +46,11 @@ export declare function blockOffsetsToSelection({
|
|
|
46
46
|
export declare function blockOffsetToSpanSelectionPoint({
|
|
47
47
|
value,
|
|
48
48
|
blockOffset,
|
|
49
|
+
direction,
|
|
49
50
|
}: {
|
|
50
51
|
value: Array<PortableTextBlock>
|
|
51
52
|
blockOffset: BlockOffset
|
|
53
|
+
direction: 'forward' | 'backward'
|
|
52
54
|
}):
|
|
53
55
|
| {
|
|
54
56
|
path: [KeyedSegment, 'children', KeyedSegment]
|
package/lib/utils/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { isSpan } from "../_chunks-es/util.
|
|
2
|
-
import { blockOffsetToSpanSelectionPoint, getBlockEndPoint, getBlockStartPoint, getTextBlockText, isEmptyTextBlock, isEqualSelectionPoints, isKeyedSegment,
|
|
1
|
+
import { sliceBlocks, isSpan } from "../_chunks-es/util.slice-blocks.js";
|
|
2
|
+
import { blockOffsetToSpanSelectionPoint, getBlockEndPoint, getBlockStartPoint, getTextBlockText, isEmptyTextBlock, isEqualSelectionPoints, isKeyedSegment, spanSelectionPointToBlockOffset } from "../_chunks-es/util.slice-blocks.js";
|
|
3
3
|
import { parseBlock } from "../_chunks-es/util.block-offsets-to-selection.js";
|
|
4
4
|
import { blockOffsetsToSelection } from "../_chunks-es/util.block-offsets-to-selection.js";
|
|
5
|
-
import {
|
|
5
|
+
import { reverseSelection } from "../_chunks-es/util.reverse-selection.js";
|
|
6
6
|
function isTextBlock(context, block) {
|
|
7
7
|
return block._type === context.schema.block.name;
|
|
8
8
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portabletext/editor",
|
|
3
|
-
"version": "1.33.
|
|
3
|
+
"version": "1.33.4",
|
|
4
4
|
"description": "Portable Text Editor made in React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"babel-plugin-react-compiler": "19.0.0-beta-30d8a17-20250209",
|
|
104
104
|
"eslint": "8.57.1",
|
|
105
105
|
"eslint-plugin-react-compiler": "19.0.0-beta-30d8a17-20250209",
|
|
106
|
-
"eslint-plugin-react-hooks": "
|
|
106
|
+
"eslint-plugin-react-hooks": "experimental",
|
|
107
107
|
"jsdom": "^26.0.0",
|
|
108
108
|
"react": "^19.0.0",
|
|
109
109
|
"react-dom": "^19.0.0",
|
|
@@ -1,28 +1,6 @@
|
|
|
1
1
|
import * as selectors from '../selectors'
|
|
2
2
|
import {defineBehavior, raise} from './behavior.types'
|
|
3
3
|
|
|
4
|
-
const toggleAnnotationOff = defineBehavior({
|
|
5
|
-
on: 'annotation.toggle',
|
|
6
|
-
guard: ({context, event}) =>
|
|
7
|
-
selectors.isActiveAnnotation(event.annotation.name)({context}),
|
|
8
|
-
actions: [
|
|
9
|
-
({event}) => [
|
|
10
|
-
raise({type: 'annotation.remove', annotation: event.annotation}),
|
|
11
|
-
],
|
|
12
|
-
],
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
const toggleAnnotationOn = defineBehavior({
|
|
16
|
-
on: 'annotation.toggle',
|
|
17
|
-
guard: ({context, event}) =>
|
|
18
|
-
!selectors.isActiveAnnotation(event.annotation.name)({context}),
|
|
19
|
-
actions: [
|
|
20
|
-
({event}) => [
|
|
21
|
-
raise({type: 'annotation.add', annotation: event.annotation}),
|
|
22
|
-
],
|
|
23
|
-
],
|
|
24
|
-
})
|
|
25
|
-
|
|
26
4
|
const addAnnotationOnCollapsedSelection = defineBehavior({
|
|
27
5
|
on: 'annotation.add',
|
|
28
6
|
guard: ({context}) => {
|
|
@@ -55,7 +33,5 @@ const addAnnotationOnCollapsedSelection = defineBehavior({
|
|
|
55
33
|
})
|
|
56
34
|
|
|
57
35
|
export const coreAnnotationBehaviors = {
|
|
58
|
-
toggleAnnotationOff,
|
|
59
|
-
toggleAnnotationOn,
|
|
60
36
|
addAnnotationOnCollapsedSelection,
|
|
61
37
|
}
|
|
@@ -1,26 +1,7 @@
|
|
|
1
1
|
import {isHotkey} from '../internal-utils/is-hotkey'
|
|
2
|
-
import * as selectors from '../selectors'
|
|
3
2
|
import {defineBehavior, raise} from './behavior.types'
|
|
4
3
|
|
|
5
4
|
export const coreDecoratorBehaviors = {
|
|
6
|
-
toggleDecoratorOff: defineBehavior({
|
|
7
|
-
on: 'decorator.toggle',
|
|
8
|
-
guard: ({context, event}) =>
|
|
9
|
-
selectors.isActiveDecorator(event.decorator)({context}),
|
|
10
|
-
actions: [
|
|
11
|
-
({event}) => [
|
|
12
|
-
raise({type: 'decorator.remove', decorator: event.decorator}),
|
|
13
|
-
],
|
|
14
|
-
],
|
|
15
|
-
}),
|
|
16
|
-
toggleDecoratorOn: defineBehavior({
|
|
17
|
-
on: 'decorator.toggle',
|
|
18
|
-
guard: ({context, event}) =>
|
|
19
|
-
!selectors.isActiveDecorator(event.decorator)({context}),
|
|
20
|
-
actions: [
|
|
21
|
-
({event}) => [raise({type: 'decorator.add', decorator: event.decorator})],
|
|
22
|
-
],
|
|
23
|
-
}),
|
|
24
5
|
strongShortcut: defineBehavior({
|
|
25
6
|
on: 'key.down',
|
|
26
7
|
guard: ({context, event}) =>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as selectors from '../selectors'
|
|
2
2
|
import {defineBehavior, raise} from './behavior.types'
|
|
3
3
|
|
|
4
|
-
const
|
|
4
|
+
const breakingAtTheEndOfTextBlock = defineBehavior({
|
|
5
5
|
on: 'insert.break',
|
|
6
6
|
guard: ({context}) => {
|
|
7
7
|
const focusTextBlock = selectors.getFocusTextBlock({context})
|
|
@@ -50,7 +50,7 @@ const atTheEndOfTextBlock = defineBehavior({
|
|
|
50
50
|
],
|
|
51
51
|
})
|
|
52
52
|
|
|
53
|
-
const
|
|
53
|
+
const breakingAtTheStartOfTextBlock = defineBehavior({
|
|
54
54
|
on: 'insert.break',
|
|
55
55
|
guard: ({context}) => {
|
|
56
56
|
const focusTextBlock = selectors.getFocusTextBlock({context})
|
|
@@ -117,6 +117,6 @@ const atTheStartOfTextBlock = defineBehavior({
|
|
|
117
117
|
})
|
|
118
118
|
|
|
119
119
|
export const coreInsertBreakBehaviors = {
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
breakingAtTheEndOfTextBlock,
|
|
121
|
+
breakingAtTheStartOfTextBlock,
|
|
122
122
|
}
|
|
@@ -6,34 +6,6 @@ import {defineBehavior, raise} from './behavior.types'
|
|
|
6
6
|
|
|
7
7
|
const MAX_LIST_LEVEL = 10
|
|
8
8
|
|
|
9
|
-
const toggleListItemOff = defineBehavior({
|
|
10
|
-
on: 'list item.toggle',
|
|
11
|
-
guard: ({context, event}) =>
|
|
12
|
-
selectors.isActiveListItem(event.listItem)({context}),
|
|
13
|
-
actions: [
|
|
14
|
-
({event}) => [
|
|
15
|
-
raise({
|
|
16
|
-
type: 'list item.remove',
|
|
17
|
-
listItem: event.listItem,
|
|
18
|
-
}),
|
|
19
|
-
],
|
|
20
|
-
],
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
const toggleListItemOn = defineBehavior({
|
|
24
|
-
on: 'list item.toggle',
|
|
25
|
-
guard: ({context, event}) =>
|
|
26
|
-
!selectors.isActiveListItem(event.listItem)({context}),
|
|
27
|
-
actions: [
|
|
28
|
-
({event}) => [
|
|
29
|
-
raise({
|
|
30
|
-
type: 'list item.add',
|
|
31
|
-
listItem: event.listItem,
|
|
32
|
-
}),
|
|
33
|
-
],
|
|
34
|
-
],
|
|
35
|
-
})
|
|
36
|
-
|
|
37
9
|
const clearListOnBackspace = defineBehavior({
|
|
38
10
|
on: 'delete.backward',
|
|
39
11
|
guard: ({context}) => {
|
|
@@ -216,8 +188,6 @@ const unindentListOnShiftTab = defineBehavior({
|
|
|
216
188
|
})
|
|
217
189
|
|
|
218
190
|
export const coreListBehaviors = {
|
|
219
|
-
toggleListItemOff,
|
|
220
|
-
toggleListItemOn,
|
|
221
191
|
clearListOnBackspace,
|
|
222
192
|
unindentListOnBackspace,
|
|
223
193
|
clearListOnEnter,
|
|
@@ -1,43 +1,28 @@
|
|
|
1
1
|
import {coreAnnotationBehaviors} from './behavior.core.annotations'
|
|
2
2
|
import {coreBlockObjectBehaviors} from './behavior.core.block-objects'
|
|
3
3
|
import {coreDecoratorBehaviors} from './behavior.core.decorators'
|
|
4
|
-
import {coreDeserializeBehaviors} from './behavior.core.deserialize'
|
|
5
4
|
import {coreInsertBreakBehaviors} from './behavior.core.insert-break'
|
|
6
5
|
import {coreListBehaviors} from './behavior.core.lists'
|
|
7
|
-
import {coreSerializeBehaviors} from './behavior.core.serialize'
|
|
8
|
-
import {coreStyleBehaviors} from './behavior.core.style'
|
|
9
6
|
|
|
10
7
|
/**
|
|
11
8
|
* @beta
|
|
12
9
|
*/
|
|
13
10
|
export const coreBehaviors = [
|
|
14
|
-
coreAnnotationBehaviors.toggleAnnotationOff,
|
|
15
|
-
coreAnnotationBehaviors.toggleAnnotationOn,
|
|
16
11
|
coreAnnotationBehaviors.addAnnotationOnCollapsedSelection,
|
|
17
|
-
coreDecoratorBehaviors.toggleDecoratorOff,
|
|
18
|
-
coreDecoratorBehaviors.toggleDecoratorOn,
|
|
19
12
|
coreDecoratorBehaviors.strongShortcut,
|
|
20
13
|
coreDecoratorBehaviors.emShortcut,
|
|
21
14
|
coreDecoratorBehaviors.underlineShortcut,
|
|
22
15
|
coreDecoratorBehaviors.codeShortcut,
|
|
23
|
-
coreDeserializeBehaviors.deserialize,
|
|
24
|
-
coreDeserializeBehaviors['deserialization.success'],
|
|
25
16
|
coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject,
|
|
26
17
|
coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject,
|
|
27
18
|
coreBlockObjectBehaviors.breakingBlockObject,
|
|
28
19
|
coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject,
|
|
29
20
|
coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject,
|
|
30
|
-
coreListBehaviors.toggleListItemOff,
|
|
31
|
-
coreListBehaviors.toggleListItemOn,
|
|
32
21
|
coreListBehaviors.clearListOnBackspace,
|
|
33
22
|
coreListBehaviors.unindentListOnBackspace,
|
|
34
23
|
coreListBehaviors.clearListOnEnter,
|
|
35
24
|
coreListBehaviors.indentListOnTab,
|
|
36
25
|
coreListBehaviors.unindentListOnShiftTab,
|
|
37
|
-
coreInsertBreakBehaviors.
|
|
38
|
-
coreInsertBreakBehaviors.
|
|
39
|
-
coreSerializeBehaviors.serialize,
|
|
40
|
-
coreSerializeBehaviors['serialization.success'],
|
|
41
|
-
coreStyleBehaviors.toggleStyleOff,
|
|
42
|
-
coreStyleBehaviors.toggleStyleOn,
|
|
26
|
+
coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock,
|
|
27
|
+
coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock,
|
|
43
28
|
]
|