/**
 * Phase 3 mapper: figma node tree → editable HTML with inline styles
 * (design spec §7, hybrid fidelity routing).
 *
 * - Geometry is exact for free: absolute positioning at figma bounds inside
 *   a fixed-size root — no responsive reflow, no drift.
 * - CSS where CSS is faithful: solid/linear-gradient fills, corner radius,
 *   opacity, drop shadow, blur, text styles.
 * - Everything CSS can't match faithfully (vectors, boolean ops, exotic
 *   paint, IMAGE fills) routes to the rasterize list — the caller exports
 *   those nodes as images (Phase 1) and fills in the placeholder src. A
 *   rasterized node's own fill/corner-radius CSS is never emitted — the
 *   exported image already contains it; adding both double-paints (a flat
 *   color block behind/around the real art).
 * - Bindings (§7.1): resolved sites emit var(--slug, literal) so a brand
 *   refresh propagates; unresolved sites bake the literal and carry a
 *   data-figma-unresolved flag. Never a dangling var().
 * - visible:false nodes and fills are skipped — figma's own renderer
 *   semantics, not ours.
 */
import type { FigmaNodeDocument } from "./client";
import type { ResolveBindingsResult } from "./resolveBindings";
export interface RasterizeRequest {
    nodeId: string;
    name: string;
    slug: string;
}
export interface NodeToHtmlResult {
    html: string;
    rasterize: RasterizeRequest[];
}
export { slugify } from "../tokenSlug";
export interface NodeToHtmlOptions {
    /** override for the ROOT element's slug/id — variant frames are often all
     * named "Platform=Desktop", so the caller's --name must reach the DOM id,
     * not just the output directory */
    rootName?: string;
}
export declare function nodeToHtml(root: FigmaNodeDocument, bindings: ResolveBindingsResult, opts?: NodeToHtmlOptions): NodeToHtmlResult;
//# sourceMappingURL=nodeToHtml.d.ts.map