export type ControlValue = string | number | boolean;
/** A single CSS declaration a control resolves to when applied to the preview. */
export type CssDecl = {
    selector: string;
    property: string;
    value: string;
};
export type BindingStatus = 'resolved' | 'unresolved' | 'stale';
/**
 * Where a selector-bound control writes. Carries a resolution status so the UI
 * can degrade gracefully when the selector no longer matches the live DOM
 * (validated client-side after generation and after HMR).
 */
export type ControlBinding = {
    selector: string;
    property: string;
    status: BindingStatus;
};
/**
 * A generated control. `kind` is an open string — the UI renderer/resolver
 * registry dispatches on it. `config` holds kind-specific data (validated on the
 * backend for known kinds). Selector-bound kinds (scoped-slider, swatch-set)
 * carry a `binding`; composite kinds (option-cards) keep their declarations in
 * `config`.
 */
export type GeneratedControl = {
    id: string;
    kind: string;
    label: string;
    default?: ControlValue;
    /** The project's real value before tuning (reset target). */
    baseline?: ControlValue;
    binding?: ControlBinding;
    config: Record<string, unknown>;
};
export type InterfaceSection = {
    id: string;
    title: string;
    controls: GeneratedControl[];
};
export type EditorInterface = {
    version: number;
    /** The natural-language intent that produced this interface. */
    intent: string;
    sections: InterfaceSection[];
};
/** The uncommitted local draft of control values for an interface. */
export type InterfaceSession = {
    values: Record<string, ControlValue>;
};
export type ScopedSliderConfig = {
    min: number;
    max: number;
    step?: number;
    unit?: string;
};
export type SwatchSetConfig = {
    swatches: string[];
};
export type OptionCardsConfig = {
    options: Array<{
        id: string;
        label: string;
        declarations: CssDecl[];
    }>;
};
//# sourceMappingURL=editor-interface-types.d.ts.map