import type { Node as ProseMirrorNode } from '@tiptap/pm/model'; /** * Caret carried by the same collaboration frame as a document update. * It is not a follow-up location message. */ export type WorkOfficeCollaborationFrameCaret = { readonly kind: 'markdown'; readonly indexUtf16: number; } | { readonly kind: 'document'; readonly paragraphId: string; readonly textId: string; readonly indexUtf16: number; } | { readonly kind: 'spreadsheet'; readonly sheetId: string; readonly row: number; readonly column: number; /** Present only for spreadsheet-splice. Cell writes omit it. */ readonly indexUtf16?: number; } | { readonly kind: 'presentation'; readonly containerKind: 'slide' | 'master' | 'layout'; readonly containerId: string; readonly elementId: string; readonly indexUtf16?: number; } | { readonly kind: 'pdf-field'; readonly fieldId: string; } | { readonly kind: 'pdf-annotation'; readonly annotationId: string; }; export interface FrameCaretLineBox { readonly from: number; readonly to: number; readonly left: number; readonly top: number; readonly right: number; readonly bottom: number; } export interface FrameCaretPaint { readonly head: number; readonly left: number; readonly top: number; readonly width: number; readonly height: number; } export declare function parseWorkOfficeCollaborationFrameCaret(value: unknown): WorkOfficeCollaborationFrameCaret; export declare function frameCaretFromOrigin(origin: unknown): WorkOfficeCollaborationFrameCaret | null; /** * Source-editor caret. JavaScript string indexes are UTF-16 code units, so * this does not insert a newline for each rendered block. */ export declare function markdownSourceCaret(source: string, indexUtf16: number): number | null; /** * Editor caret inside the addressed paragraph. Offsets count that node's text * only. Blocks before it do not add a newline. */ export declare function documentFrameCaretPosition(document: ProseMirrorNode, caret: { readonly paragraphId: string; readonly textId: string; readonly indexUtf16: number; }): number | null; /** * Paint the caret the frame already carried, after that update's layout. * A follow-up location is not read. A stale or early measure paints nothing * and does not fall back to the document end. */ export declare function paintFrameCaretAfterLayout(input: { readonly layoutSettled: boolean; readonly head: number | null; readonly documentSize: number; readonly lines: readonly FrameCaretLineBox[]; readonly followUpHead?: number | null; }): FrameCaretPaint | null; export declare function lineBoxForCaret(lines: readonly FrameCaretLineBox[], head: number): FrameCaretLineBox | null;