import { ResolvedPos } from '@tiptap/pm/model' /** * Returns the text content of a resolved prosemirror position * @param $from The resolved position to get the text content from * @param maxMatch The maximum number of characters to match * @returns The text content */ export const getTextContentFromNodes = ($from: ResolvedPos, maxMatch = 500) => { let textBefore = '' const sliceEndPos = $from.parentOffset $from.parent.nodesBetween( Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => { const chunk = node.type.spec.toText?.({ node, pos, parent, index, }) || node.textContent || '%leaf%' textBefore += chunk.slice(0, Math.max(0, sliceEndPos - pos)) }, ) return textBefore }