@portabletext/editor
Version:
Portable Text Editor made in React
1 lines • 18.1 kB
Source Map (JSON)
{"version":3,"file":"selector.is-selection-expanded.cjs","sources":["../../src/selectors/selector.get-selection-start-point.ts","../../src/selectors/selector.is-selection-collapsed.ts","../../src/selectors/selectors.ts","../../src/selectors/selector.get-previous-inline-object.ts","../../src/selectors/selector.get-selected-slice.ts","../../src/selectors/selector.get-selection-text.ts","../../src/selectors/selector.is-selection-expanded.ts"],"sourcesContent":["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 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 {\n KeyedSegment,\n PortableTextBlock,\n PortableTextListBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isListBlock, isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {\n getBlockKeyFromSelectionPoint,\n getChildKeyFromSelectionPoint,\n} from '../selection/selection-point'\nimport {getSelectionEndPoint, getSelectionStartPoint} from '../utils'\n\n/**\n * @public\n */\nexport const getFocusBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const key = getBlockKeyFromSelectionPoint(snapshot.context.selection.focus)\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusListBlock: EditorSelector<\n {node: PortableTextListBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const focusTextBlock = getFocusTextBlock(snapshot)\n\n return focusTextBlock && isListBlock(snapshot.context, focusTextBlock.node)\n ? {node: focusTextBlock.node, path: focusTextBlock.path}\n : undefined\n}\n\n/**\n * @public\n */\nexport const getFocusTextBlock: EditorSelector<\n {node: PortableTextTextBlock; path: [KeyedSegment]} | 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\n/**\n * @public\n */\nexport const getFocusBlockObject: EditorSelector<\n {node: PortableTextObject; path: [KeyedSegment]} | 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\n/**\n * @public\n */\nexport const getFocusChild: EditorSelector<\n | {\n node: PortableTextObject | PortableTextSpan\n path: [KeyedSegment, 'children', KeyedSegment]\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\n/**\n * @public\n */\nexport const getFocusSpan: EditorSelector<\n | {node: PortableTextSpan; path: [KeyedSegment, 'children', KeyedSegment]}\n | 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\n/**\n * @public\n */\nexport const getFirstBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const node = snapshot.context.value[0]\n\n return node ? {node, path: [{_key: node._key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getLastBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n const node = snapshot.context.value[snapshot.context.value.length - 1]\n ? snapshot.context.value[snapshot.context.value.length - 1]\n : undefined\n\n return node ? {node, path: [{_key: node._key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getSelectedBlocks: EditorSelector<\n Array<{node: PortableTextBlock; path: [KeyedSegment]}>\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return []\n }\n\n const selectedBlocks: Array<{node: PortableTextBlock; path: [KeyedSegment]}> =\n []\n const startPoint = getSelectionStartPoint(snapshot.context.selection)\n const endPoint = getSelectionEndPoint(snapshot.context.selection)\n const startKey = getBlockKeyFromSelectionPoint(startPoint)\n const endKey = getBlockKeyFromSelectionPoint(endPoint)\n\n if (!startKey || !endKey) {\n return selectedBlocks\n }\n\n for (const block of snapshot.context.value) {\n if (block._key === startKey) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n\n if (startKey === endKey) {\n break\n }\n continue\n }\n\n if (block._key === endKey) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n break\n }\n\n if (selectedBlocks.length > 0) {\n selectedBlocks.push({node: block, path: [{_key: block._key}]})\n }\n }\n\n return selectedBlocks\n}\n\n/**\n * @public\n */\nexport const getSelectionStartBlock: EditorSelector<\n | {\n node: PortableTextBlock\n path: [KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const startPoint = getSelectionStartPoint(snapshot.context.selection)\n const key = getBlockKeyFromSelectionPoint(startPoint)\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getSelectionEndBlock: EditorSelector<\n | {\n node: PortableTextBlock\n path: [KeyedSegment]\n }\n | undefined\n> = (snapshot) => {\n if (!snapshot.context.selection) {\n return undefined\n }\n\n const endPoint = getSelectionEndPoint(snapshot.context.selection)\n const key = getBlockKeyFromSelectionPoint(endPoint)\n\n const node = key\n ? snapshot.context.value.find((block) => block._key === key)\n : undefined\n\n return node && key ? {node, path: [{_key: key}]} : undefined\n}\n\n/**\n * @public\n */\nexport const getPreviousBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n let previousBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionStartBlock = getSelectionStartBlock(snapshot)\n\n if (!selectionStartBlock) {\n return undefined\n }\n\n let foundSelectionStartBlock = false\n\n for (const block of snapshot.context.value) {\n if (block._key === selectionStartBlock.node._key) {\n foundSelectionStartBlock = true\n break\n }\n\n previousBlock = {node: block, path: [{_key: block._key}]}\n }\n\n if (foundSelectionStartBlock && previousBlock) {\n return previousBlock\n }\n\n return undefined\n}\n\n/**\n * @public\n */\nexport const getNextBlock: EditorSelector<\n {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n> = (snapshot) => {\n let nextBlock: {node: PortableTextBlock; path: [KeyedSegment]} | undefined\n const selectionEndBlock = getSelectionEndBlock(snapshot)\n\n if (!selectionEndBlock) {\n return undefined\n }\n\n let foundSelectionEndBlock = false\n\n for (const block of snapshot.context.value) {\n if (block._key === selectionEndBlock.node._key) {\n foundSelectionEndBlock = true\n continue\n }\n\n if (foundSelectionEndBlock) {\n nextBlock = {node: block, path: [{_key: block._key}]}\n break\n }\n }\n\n if (foundSelectionEndBlock && nextBlock) {\n return nextBlock\n }\n\n return undefined\n}\n","import {\n isKeySegment,\n type KeyedSegment,\n type PortableTextObject,\n} from '@sanity/types'\nimport type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan} from '../utils'\nimport {getSelectionStartPoint} from './selector.get-selection-start-point'\nimport {getFocusTextBlock} from './selectors'\n\n/**\n * @public\n */\nexport const getPreviousInlineObject: EditorSelector<\n | {\n node: PortableTextObject\n path: [KeyedSegment, 'children', KeyedSegment]\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: [KeyedSegment, 'children', KeyedSegment]\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 {sliceBlocks} from '../utils'\n\n/**\n * @public\n */\nexport const getSelectedSlice: EditorSelector<Array<PortableTextBlock>> = (\n snapshot,\n) => {\n return sliceBlocks({\n context: snapshot.context,\n blocks: snapshot.context.value,\n })\n}\n","import type {EditorSelector} from '../editor/editor-selector'\nimport {isSpan, isTextBlock} from '../internal-utils/parse-blocks'\nimport {getSelectedSlice} from './selector.get-selected-slice'\n\n/**\n * @public\n */\nexport const getSelectionText: EditorSelector<string> = (snapshot) => {\n const selectedSlice = getSelectedSlice(snapshot)\n\n return selectedSlice.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'\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":["getSelectionStartPoint","snapshot","context","selection","backward","focus","anchor","isSelectionCollapsed","JSON","stringify","path","offset","getFocusBlock","key","getBlockKeyFromSelectionPoint","node","value","find","block","_key","undefined","getFocusListBlock","focusTextBlock","getFocusTextBlock","isListBlock","focusBlock","isTextBlock","getFocusBlockObject","getFocusChild","getChildKeyFromSelectionPoint","children","span","getFocusSpan","focusChild","isSpan","getFirstBlock","getLastBlock","length","getSelectedBlocks","selectedBlocks","startPoint","endPoint","getSelectionEndPoint","startKey","endKey","push","getSelectionStartBlock","getSelectionEndBlock","getPreviousBlock","previousBlock","selectionStartBlock","foundSelectionStartBlock","getNextBlock","nextBlock","selectionEndBlock","foundSelectionEndBlock","getPreviousInlineObject","selectionStartPoint","selectionStartPointChildKey","isKeySegment","inlineObject","child","getSelectedSlice","sliceBlocks","blocks","getSelectionText","reduce","text","isSelectionExpanded"],"mappings":"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"}