ultisuite-client/lib/drive/docs-block-targets.ts
R3D347HR4Y 303b2b1074
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
wow
2026-06-11 01:22:40 +02:00

33 lines
854 B
TypeScript

import type { Node as ProseMirrorNode } from "@tiptap/pm/model"
export function isDocsBlockType(typeName: string): boolean {
return typeName === "paragraph" || typeName === "heading"
}
export function getDocsBlockTargets(
doc: ProseMirrorNode,
from: number,
to: number
): Array<{ pos: number; node: ProseMirrorNode }> {
const targets: Array<{ pos: number; node: ProseMirrorNode }> = []
if (from === to) {
const $pos = doc.resolve(from)
for (let depth = $pos.depth; depth > 0; depth -= 1) {
const node = $pos.node(depth)
if (isDocsBlockType(node.type.name)) {
targets.push({ pos: $pos.before(depth), node })
break
}
}
return targets
}
doc.nodesBetween(from, to, (node, pos) => {
if (!isDocsBlockType(node.type.name)) return
targets.push({ pos, node })
})
return targets
}