/**
 * `${id}` string interpolation engine.
 *
 * Replaces `${identifier}` tokens with concrete values from a vars map.
 * Identifier grammar: `[a-zA-Z_][a-zA-Z0-9_]*` — matches the same identifier
 * pattern enforced by VariableDeclarationSchema. No expressions, no nested
 * substitution, no escapes.
 *
 * Missing keys:
 *   • lenient mode (default): leave the `${unknown}` token literal
 *   • strict mode: throw a typed error including the missing key name
 *
 * Numbers and booleans are stringified at the substitution site so they
 * can appear in string fields (e.g. `text: "Q4 ${year}"` or
 * `data-loop: "${enabled}"`). Colors are already strings (hex), so they
 * substitute as-is.
 */
import type { VariableValues } from "./types.js";
export interface InterpolateOptions {
    /** If true, throw on unknown keys instead of leaving the token literal. */
    strict?: boolean;
}
export declare class InterpolationError extends Error {
    readonly key: string;
    readonly source: string;
    constructor(key: string, source: string);
}
export declare function interpolate(source: string, vars: VariableValues, opts?: InterpolateOptions): string;
/** Quick predicate: does this string contain any interpolation tokens? */
export declare function hasInterpolation(source: string): boolean;
//# sourceMappingURL=interpolate.d.ts.map