import type { CoreTextNode } from '../CoreTextNode.js';
import type { FontMetrics, NormalizedFontMetrics, TextRenderer } from './TextRenderer.js';
import { EventEmitter } from '../../common/EventEmitter.js';
export declare enum FontState {
    Created = 0,
    Loading = 1,
    Loaded = 2,
    Failed = 3
}
export interface CoreFontProps {
    family: string;
    metrics?: FontMetrics;
}
/**
 * EventEmiter only intended to communicated with FontManager
 */
export declare abstract class CoreFont extends EventEmitter {
    protected waitingNodes?: Record<number, CoreTextNode>;
    protected normalizedMetrics?: Record<number, NormalizedFontMetrics>;
    textRenderer: TextRenderer;
    state: FontState;
    family: string;
    metrics?: FontMetrics;
    constructor(textRenderer: TextRenderer, props: CoreFontProps);
    protected onLoaded(): void;
    waiting(node: CoreTextNode): void;
    stopWaiting(node: CoreTextNode): void;
    destroy(): void;
    abstract type: string;
    abstract load(): void;
    abstract measureText(text: string, letterSpacing: number): number;
    abstract getMetrics(fontSize: number): NormalizedFontMetrics;
}
