import type { IDisposableLike } from '@breadstone/mosaik-elements';
import type { FontCategory, IFont } from './IFont';
/**
 * Font provider request options.
 *
 * @public
 */
export interface IFontProviderRequest {
    /**
     * The search text to filter fonts.
     */
    readonly searchText?: string;
    /**
     * Filter by category.
     */
    readonly category?: FontCategory;
    /**
     * Filter by starting letter.
     */
    readonly startingLetter?: string;
    /**
     * The abort signal for cancellation.
     */
    readonly signal: AbortSignal;
    /**
     * Page index for pagination.
     */
    readonly pageIndex?: number;
    /**
     * Page size for pagination.
     */
    readonly pageSize?: number;
}
/**
 * Font provider response.
 *
 * @public
 */
export interface IFontProviderResponse {
    /**
     * The fonts returned.
     */
    readonly fonts: ReadonlyArray<IFont>;
    /**
     * Total count of available fonts (for pagination).
     */
    readonly totalCount: number;
}
/**
 * Represents a font provider that can supply fonts from various sources.
 *
 * @public
 */
export interface IFontProvider {
    /**
     * The unique name of the provider.
     */
    readonly name: string;
    /**
     * The display name of the provider.
     */
    readonly displayName: string;
    /**
     * Fetches fonts based on the request options.
     *
     * @param request - The request options.
     * @returns A promise that resolves to the provider response.
     */
    fetchFonts(request: IFontProviderRequest): Promise<IFontProviderResponse>;
    /**
     * Loads a font so it can be used for rendering.
     *
     * @param font - The font to load.
     * @returns A disposable that removes the font when disposed.
     */
    loadFont(font: IFont): IDisposableLike;
    /**
     * Checks if the provider is available and functional.
     *
     * @returns A promise that resolves to true if the provider is available.
     */
    isAvailable(): Promise<boolean>;
}
/**
 * Options for creating a font provider.
 *
 * @public
 */
export interface IFontProviderOptions {
    /**
     * API key (if required).
     */
    readonly apiKey?: string;
    /**
     * Whether to cache results.
     */
    readonly cache?: boolean;
    /**
     * Default page size.
     */
    readonly pageSize?: number;
}
//# sourceMappingURL=IFontProvider.d.ts.map