import { CanvasTexture, DataTexture } from 'three/webgpu'; import type { ColorRepresentation } from 'three/webgpu'; import type { WorkerModule } from 'troika-worker-utils'; import type { UserFont } from './FontResolver.cjs'; import type { SDFCanvas } from './SDFGenerator.cjs'; import type { TypesetBounds, TypesetChunkedBounds, TypesetParams, TypesetRenderResult, Typesetter } from './Typesetter.cjs'; export interface TextBuilderConfig { readonly defaultFontURL?: string | null; readonly unicodeFontsURL?: string | null; readonly sdfGlyphSize?: number; readonly sdfMargin?: number; readonly sdfExponent?: number; readonly textureWidth?: number; readonly useWorker?: boolean; } export type TextColorRanges = Readonly>; export interface TextRenderRequest extends Omit { readonly text?: string; readonly font?: string | null; readonly sdfGlyphSize?: number; readonly unicodeFontsURL?: string | null; readonly colorRanges?: TextColorRanges | null; readonly metricsOnly?: false; } export interface NormalizedTextRenderParameters extends Omit { readonly text: string; readonly font: readonly UserFont[]; readonly sdfGlyphSize: number; readonly unicodeFontsURL: string | null; readonly colorRanges?: Readonly> | null; readonly metricsOnly?: false; } export type SDFAtlasTexture = CanvasTexture | DataTexture; export interface TextRenderInfo { readonly parameters: NormalizedTextRenderParameters; readonly sdfTexture: SDFAtlasTexture; readonly sdfGlyphSize: number; readonly sdfExponent: number; readonly glyphBounds: Float32Array; /** The typesetter's glyph-id buffer is intentionally rewritten with SDF atlas indices. */ readonly glyphAtlasIndices: Uint16Array; readonly glyphColors: Uint8Array | null; readonly caretPositions: Float32Array | null; readonly chunkedBounds: readonly TypesetChunkedBounds[]; /** These legacy aggregate fields are currently absent from the Typesetter result. */ readonly ascender: number | undefined; readonly descender: number | undefined; readonly lineHeight: number | undefined; readonly capHeight: number | undefined; readonly xHeight: number | undefined; readonly topBaseline: number; readonly blockBounds: TypesetBounds; readonly visibleBounds: TypesetBounds; readonly timings: TypesetRenderResult['timings']; } export type TextRenderInfoCallback = (textRenderInfo: TextRenderInfo) => void; export interface PreloadFontOptions { readonly font?: string | null; readonly characters?: string | readonly string[]; readonly sdfGlyphSize?: number; } export interface SDFAtlasInfo { readonly sdfGlyphSize: number; readonly glyphCount: number; readonly width: number; readonly height: number; readonly bytes: number; } /** A value module injected into dependent worker modules; it is not directly callable. */ export type TypesetterWorkerModule = WorkerModule<[], Typesetter, Typesetter>; /** Lightweight atlas metrics for monitoring, without logging image data. */ export declare function getAtlasesInfo(): SDFAtlasInfo[]; /** * Customize global defaults. Configuration is locked after the first render request. * * @category Text */ export declare function configureTextBuilder(config: TextBuilderConfig): void; /** * Request the data needed to render text. The two-argument form retains the historical WebGL * default, while renderer-aware callers can select the WebGPU texture path explicitly. */ export declare function getTextRenderInfo(args: TextRenderRequest, callback: TextRenderInfoCallback): void; export declare function getTextRenderInfo(isWebGPU: boolean, args: TextRenderRequest, callback: TextRenderInfoCallback): void; /** Preload a font and optionally generate glyph SDFs for character sequences. */ export declare function preloadFont({ font, characters, sdfGlyphSize }: PreloadFontOptions, callback: TextRenderInfoCallback): void; export declare const typesetterWorkerModule: TypesetterWorkerModule; export declare function dumpSDFTextures(): void;