import type { CoreNode } from '../../CoreNode.js';
import type { CoreTextNode } from '../../CoreTextNode.js';
import type { Stage } from '../../Stage.js';
import type { TrFontFace } from '../font-face-types/TrFontFace.js';
import { WebTrFontFace } from '../font-face-types/WebTrFontFace.js';
import { LightningTextTextureRenderer, type RenderInfo } from './LightningTextTextureRenderer.js';
import { TextRenderer, type TextRendererState, type TrFontProps, type TrPropSetters, type TrProps } from './TextRenderer.js';
declare module './TextRenderer.js' {
    interface TextRendererMap {
        canvas: CanvasTextRenderer;
    }
}
export interface CanvasTextRendererState extends TextRendererState {
    node: CoreTextNode;
    props: TrProps;
    fontInfo: {
        fontFace: WebTrFontFace;
        cssString: string;
        loaded: boolean;
    } | undefined;
    textureNode: CoreNode | undefined;
    lightning2TextRenderer: LightningTextTextureRenderer;
    renderInfo: RenderInfo | undefined;
}
export declare class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
    protected canvas: OffscreenCanvas | HTMLCanvasElement;
    protected context: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;
    /**
     * Font family map used to store web font faces that were added to the
     * canvas text renderer.
     */
    private fontFamilies;
    private fontFamilyArray;
    type: 'canvas' | 'sdf';
    constructor(stage: Stage);
    getPropertySetters(): Partial<TrPropSetters<CanvasTextRendererState>>;
    canRenderFont(props: TrFontProps): boolean;
    isFontFaceSupported(fontFace: TrFontFace): boolean;
    addFontFace(fontFace: TrFontFace): void;
    createState(props: TrProps, node: CoreTextNode): CanvasTextRendererState;
    updateState(state: CanvasTextRendererState): void;
    renderSingleCanvasPage(state: CanvasTextRendererState): void;
    loadFont: (state: CanvasTextRendererState) => void;
    calculateRenderInfo(state: CanvasTextRendererState): RenderInfo;
    renderQuads(): void;
    destroyState(state: CanvasTextRendererState): void;
    /**
     * Invalidate the layout cache stored in the state. This will cause the text
     * to be re-rendered on the next update.
     *
     * @remarks
     * This also invalidates the visible window cache.
     *
     * @param state
     */
    private invalidateLayoutCache;
    private onFontLoaded;
    private onFontLoadError;
}
