import { DocumentNode, TextBlock, TextImage, TextSegment, TextStyle, TextTable } from './types'; export type { ImageStyle, TextBlock, TextBlockType, TextImage, TextSegment, TextStyle, TextTable, TextTableCell, TextTableRow } from './types'; export interface LayoutCursor { segmentIndex: number; graphemeIndex: number; } export interface RichInlineItem { text: string; font: string; letterSpacing?: number; break?: 'normal' | 'never'; extraWidth?: number; } export interface PreparedRichInline { readonly __preparedRichInlineBrand?: true; } export interface RichInlineFragmentRange { itemIndex: number; gapBefore: number; occupiedWidth: number; start: LayoutCursor; end: LayoutCursor; } export interface RichInlineLineRange { fragments: RichInlineFragmentRange[]; width: number; end: { itemIndex: number; segmentIndex: number; graphemeIndex: number; }; } export interface PreparedTextBlock { prepared?: PreparedRichInline; itemSegmentIndexes: readonly number[]; block: TextBlock; } export interface PreparedText { segments: readonly TextSegment[]; blocks: readonly PreparedTextBlock[]; baseStyle: Required>; lineHeight: number; } export interface PrepareOptions { baseStyle?: TextStyle; } export interface ExtractDocumentBlocksOptions { coverImageSrcs?: readonly string[]; } export interface LayoutOptions { inlineSize: number; lineHeight?: number; blockStart?: number; blockGap?: number; maxBlockHeight?: number; } export interface LinePosition { segmentIndex: number; cursor: LayoutCursor; } export interface LineSegmentRange { segmentIndex: number; start: LayoutCursor; end: LayoutCursor; text: string; style: TextStyle; source?: TextSegment['source']; gapBefore: number; occupiedWidth: number; } export interface LineRange { index: number; kind: 'text' | 'image' | 'table' | 'separator' | 'pre'; block?: TextBlock; image?: TextImage; table?: TextTable; start: LinePosition | null; end: LinePosition | null; text: string; width: number; top: number; height: number; inlineOffset?: number; segments: readonly LineSegmentRange[]; } export interface VisibleLineWindow { startIndex: number; endIndex: number; offsetTop: number; totalHeight: number; lines: readonly LineRange[]; } export interface CanvasProviderLike { createOffscreenCanvas?(options?: { type?: string; width?: number; height?: number; }): { getContext(type: '2d'): PretextMeasureContext | null; }; } export interface PretextMeasureContext { font: string; measureText(text: string): { width: number; }; } export interface PretextMeasurementPolyfillOptions { /** * Install an estimated text measurer when the host cannot provide a native * offscreen canvas. This keeps layout usable with less exact line breaks. */ estimatedFallback?: boolean; } /** * Installs the canvas shape expected by @chenglou/pretext in runtimes where * OffscreenCanvas is exposed by a host adapter instead of as a browser global. */ export declare function installPretextMeasurementPolyfill(canvasProvider?: CanvasProviderLike, options?: PretextMeasurementPolyfillOptions): boolean; export declare function extractDocumentSegments(nodes: readonly DocumentNode[], baseStyle?: TextStyle, options?: ExtractDocumentBlocksOptions): TextSegment[]; export declare function extractDocumentBlocks(nodes: readonly DocumentNode[], baseStyle?: TextStyle, options?: ExtractDocumentBlocksOptions): TextBlock[]; export declare function prepare(segments: readonly TextSegment[], options?: PrepareOptions): PreparedText; export declare function prepareBlocks(textBlocks: readonly TextBlock[], options?: PrepareOptions): PreparedText; export declare function layout(prepared: PreparedText, options: LayoutOptions): LineRange[]; export declare function getVisibleLines(lines: readonly LineRange[], scrollTop: number, viewportHeight: number, overscan?: number): VisibleLineWindow; export type PretextRichInlineLineRange = RichInlineLineRange; //# sourceMappingURL=pretext.d.ts.map