import { Line, NeutralLineGeometry, ParagraphBlock, TextRun } from '../../contracts/src/index.js'; import { FontMeasureContext } from '../../../shared/font-system/src/index.js'; export interface MeasuredVisualBidiCell { readonly from: number; readonly to: number; readonly left: number; readonly right: number; readonly rtl: boolean; } /** Private measured data; source offsets stay in the line's logical UTF-16 space. */ export interface MeasuredVisualBidiLine { readonly geometry: NeutralLineGeometry; readonly cells: readonly MeasuredVisualBidiCell[]; readonly length: number; } /** This certificate deliberately excludes shaping classes not covered by the native proof. */ export declare function canMeasureVisualBidi(block: ParagraphBlock): block is ParagraphBlock & { runs: [TextRun]; }; interface VisualBidiLineInput { block: ParagraphBlock; line: Line; geometry: NeutralLineGeometry; availableWidth: number; fontContext: FontMeasureContext; ownerCurrent?: () => boolean; } /** Same measured line, source paragraph and font generation as the captured neutral candidate. */ export declare function measureVisualBidiLine(input: VisualBidiLineInput): MeasuredVisualBidiLine | null; export declare function isMeasuredVisualBidiLineCurrent(line: MeasuredVisualBidiLine, fontContext?: FontMeasureContext): boolean; export declare function measuredVisualBidiCaretX(line: MeasuredVisualBidiLine, offset: number, affinity?: 'before' | 'after' | 'inside'): number | null; export declare function measuredVisualBidiOffsetAtX(line: MeasuredVisualBidiLine, x: number): number | null; export declare function measuredVisualBidiRangeBands(line: MeasuredVisualBidiLine, from: number, to: number): { left: number; right: number; }[]; export {};