/**
 * Logical -> physical font resolution.
 *
 * A document refers to a font by its *logical* family - the name Word wrote, e.g.
 * "Calibri". The browser may not have that font (it is proprietary), so SuperDoc
 * renders a metric-compatible *physical* substitute - e.g. Carlito, whose advance
 * widths match Calibri so line breaks land where Word puts them. The logical name
 * stays the source of truth (toolbar, export); only measurement and paint use the
 * physical family, and they MUST use the same one or text is measured in one font
 * and painted in another.
 *
 * The value reaching measure and paint is a CSS font-family *stack* the layout
 * builds via `toCssFontFamily`, e.g. "Calibri, sans-serif" - so resolution applies
 * to the PRIMARY family and keeps the remaining fallbacks ("Carlito, sans-serif").
 *
 * Ships the five verified clean clones (Calibri->Carlito, Cambria->Caladea,
 * Arial->Liberation Sans, Times New Roman->Liberation Serif, Courier New->Liberation
 * Mono) - each proven to match Word's painted line breaks. Becomes customer-configurable
 * in T7; this module stays the single source of the map.
 */
export type FontResolutionReason = 
/** No substitute is known; the requested family is used as-is. */
'as_requested'
/** Replaced by a bundled metric-compatible clone. */
 | 'bundled_substitute';
export interface FontResolution {
    /** The family the document asked for (preserved for toolbar/export). */
    logicalFamily: string;
    /** The bare physical family that is actually loaded, measured, and painted. */
    physicalFamily: string;
    reason: FontResolutionReason;
}
/**
 * Structured resolution of a logical family (or CSS stack) to its bare physical
 * render family. The primary (first) family drives the result; this is what the
 * load gate awaits and what diagnostics report.
 */
export declare function resolveFontFamily(logicalFamily: string): FontResolution;
/**
 * Resolve a CSS font-family value for MEASURE and PAINT: swap the primary family
 * to its physical substitute and keep the original fallbacks.
 * "Calibri, sans-serif" -> "Carlito, sans-serif"; "Calibri" -> "Carlito".
 * An unmapped value is returned unchanged.
 */
export declare function resolvePhysicalFamily(cssFontFamily: string): string;
/**
 * The bare physical family the load gate must await - the primary family resolved
 * to its substitute. "Calibri, sans-serif" -> "Carlito"; "Calibri" -> "Carlito".
 */
export declare function resolvePrimaryPhysicalFamily(family: string): string;
/** The deduped set of physical face families a set of logical families needs loaded. */
export declare function resolvePhysicalFamilies(families: Iterable<string>): string[];
