import { BlockWindowEvent, Book, LinkEvent, LoadEvent, RelocateEvent } from '../../core/types'; import { LayoutMode, ReaderMark, Renderer, RendererNavigationHooks, RendererStyles } from '../../core/renderer'; import { ReaderThemeInput } from '../../core/theme'; import { LineRange, TextImage, TextTable, CanvasProviderLike } from '../../core/pretext'; interface RendererEventMap { load: LoadEvent; relocate: RelocateEvent; link: LinkEvent; 'block-window': BlockWindowEvent; snapshot: WechatMiniProgramRendererSnapshot; } type Listener = (event: T) => void; export interface WechatMiniProgramRendererConfig extends RendererNavigationHooks { /** Viewport width in CSS pixels/rpx-equivalent layout units. */ width: number; /** Viewport height in CSS pixels/rpx-equivalent layout units. */ height: number; layout?: LayoutMode; styles?: RendererStyles; maxColumnCount?: number; overscan?: number; wx?: CanvasProviderLike; /** * Called whenever the renderer snapshot changes. Pass page.setData or a * small wrapper such as snapshot => page.setData({ reader: snapshot }). */ setData?: (snapshot: WechatMiniProgramRendererSnapshot) => void; /** * Defaults to true. Set false when the host has installed a compatible * OffscreenCanvas global before constructing the renderer. */ installPretextPolyfill?: boolean; } export interface WechatMiniProgramRendererSnapshot { layout: LayoutMode; width: number; height: number; contentWidth: number; totalHeight: number; scrollTop: number; pageIndex: number; pageCount: number; sectionIndex: number; sectionCount: number; fraction: number; lines: WechatMiniProgramLineNode[]; } export type WechatMiniProgramLineNode = WechatMiniProgramTextLineNode | WechatMiniProgramImageLineNode | WechatMiniProgramTableLineNode | WechatMiniProgramSeparatorLineNode | WechatMiniProgramPreLineNode; export interface WechatMiniProgramLineBase { key: string; kind: LineRange['kind']; blockId?: string; blockType?: string; className?: string; markIds?: string[]; markKinds?: string[]; markData?: Record; style: Record; } export interface WechatMiniProgramTextLineNode extends WechatMiniProgramLineBase { kind: 'text'; fragments: WechatMiniProgramTextFragment[]; } export interface WechatMiniProgramPreLineNode extends WechatMiniProgramLineBase { kind: 'pre'; text: string; } export interface WechatMiniProgramSeparatorLineNode extends WechatMiniProgramLineBase { kind: 'separator'; } export interface WechatMiniProgramImageLineNode extends WechatMiniProgramLineBase { kind: 'image'; image: TextImage; } export interface WechatMiniProgramTableLineNode extends WechatMiniProgramLineBase { kind: 'table'; table: TextTable; columns: string; } export interface WechatMiniProgramTextFragment { key: string; text: string; style: Record; image?: { src: string; alt?: string; width: number; height: number; }; } export declare class WechatMiniProgramRenderer implements Renderer { private width; private height; private styles; private layoutMode; private maxColumnCount; private overscan; private setData?; private book; private sections; private currentIndex; private prepared; private lines; private pageIndex; private scrollTop; private progress; private lastLocation; private readonly events; private activeLoadId; private prefetchPageCount; private tocPositions; private pendingTOCItem; private beforeNavigate; private readonly marks; private columnLayout; constructor(config: WechatMiniProgramRendererConfig); open(book: Book): Promise; goTo(target: number | string): Promise; next(): Promise; prev(): Promise; goToFraction(fraction: number): Promise; setStyles(styles: RendererStyles): void; setTheme(theme: ReaderThemeInput): void; setLayout(mode: LayoutMode): void; setSpread(maxColumns: number): void; setMark(mark: ReaderMark): void; removeMark(id: string): void; clearMarks(kind?: string): void; getMarks(): ReaderMark[]; setViewport(width: number, height: number): void; setScrollTop(scrollTop: number): void; getSnapshot(): WechatMiniProgramRendererSnapshot; getLocation(): RelocateEvent | null; getSectionFractions(): number[]; refresh(): Promise; on(event: K, listener: Listener): void; on(event: string, listener: Listener): void; off(event: K, listener: Listener): void; off(event: string, listener: Listener): void; destroy(): void; private loadSection; private loadTextBlocks; private relayout; private createEmptyLayout; private createLineNode; private getLineStyle; private getColumnContentWidth; private getColumnContentPadding; private getColumnContentWidthForPadding; private createTextFragment; private getLineMarks; private publishPosition; private publishSnapshot; private emitRelocate; private emitBlockWindow; private getPrefetchBlockIds; private getSourceHeightForPages; private resolveHrefFallback; private rebuildTOCPositions; private getTOCSectionIndex; private getTOCFragment; private findTOCItem; private getCurrentTOCItem; private getAnchorSourceTop; private getAnchorIds; private resolveAnchorValue; private getScrollTopForSourceTop; private getRenderedLinePosition; private getSourceScrollTop; private getSourceViewportHeight; private getSectionFraction; private restoreSectionFraction; private getMaxScrollTop; private getContentHeight; private getBaseTextStyle; private getLineHeightPixels; private findReadablePage; private hasReadableLinesOnPage; private canNavigate; private emit; } export declare const createWechatMiniProgramRenderer: (config: WechatMiniProgramRendererConfig) => WechatMiniProgramRenderer; export {}; //# sourceMappingURL=renderer.d.ts.map