import { MathDocumentConstructor } from '../../core/MathDocument.js';
import { MathItem } from '../../core/MathItem.js';
import { HTMLMathItem } from '../../handlers/html/HTMLMathItem.js';
import { HTMLDocument } from '../../handlers/html/HTMLDocument.js';
import { HTMLHandler } from '../../handlers/html/HTMLHandler.js';
export declare type Constructor<T> = new (...args: any[]) => T;
export declare type LazySet = Set<string>;
export declare class LazyList<N, T, D> {
    protected id: number;
    protected items: Map<string, LazyMathItem<N, T, D>>;
    add(math: LazyMathItem<N, T, D>): string;
    get(id: string): LazyMathItem<N, T, D>;
    delete(id: string): boolean;
}
export declare const LAZYID = "data-mjx-lazy";
export interface LazyMathItem<N, T, D> extends MathItem<N, T, D> {
    lazyCompile: boolean;
    lazyTypeset: boolean;
    lazyMarker: N;
    lazyTex: boolean;
}
export declare function LazyMathItemMixin<N, T, D, B extends Constructor<HTMLMathItem<N, T, D>>>(BaseMathItem: B): Constructor<LazyMathItem<N, T, D>> & B;
export interface LazyMathDocument<N, T, D> extends HTMLDocument<N, T, D> {
    lazyObserver: IntersectionObserver;
    lazyList: LazyList<N, T, D>;
    lazyAlwaysContainers: N[];
    lazyTypesetAll(): Promise<void>;
    lazyAlways(): void;
}
export declare function LazyMathDocumentMixin<N, T, D, B extends MathDocumentConstructor<HTMLDocument<N, T, D>>>(BaseDocument: B): MathDocumentConstructor<HTMLDocument<N, T, D>> & B;
export declare function LazyHandler<N, T, D>(handler: HTMLHandler<N, T, D>): HTMLHandler<N, T, D>;