import type { ChartDataProfile, FieldKind } from "./chartCapabilityTypes";
export type PrimaryRole = "x" | "y" | "size" | "category" | "series" | "time";
export interface FieldTypeChange {
    field: string;
    from: FieldKind | "unknown";
    to: FieldKind | "unknown";
}
export interface PrimaryRoleChange {
    role: PrimaryRole;
    from: string | undefined;
    to: string | undefined;
}
export interface ProfileDiff {
    /** Row count change (b.rowCount - a.rowCount). */
    rowCountChange: number;
    /** Fields present in b but not in a. */
    added: ReadonlyArray<string>;
    /** Fields present in a but not in b. */
    removed: ReadonlyArray<string>;
    /** Fields whose inferred type changed. */
    typeChanges: ReadonlyArray<FieldTypeChange>;
    /** Primary role re-assignments (e.g. x switched from "month" to "date"). */
    primaryChanges: ReadonlyArray<PrimaryRoleChange>;
    /** Suggestion components that fit a but not b. */
    becameUnfit: ReadonlyArray<string>;
    /** Suggestion components that fit b but not a. */
    becameFit: ReadonlyArray<string>;
    /** True when no observable change was detected. */
    unchanged: boolean;
}
/**
 * Compare two profiles and report what changed plus how the change affects
 * chart suitability. Useful for:
 *
 *   • "Why does my dashboard look different after the data refreshed?"
 *   • Editor warnings when a CSV upload would change the visible charts.
 *   • CI checks that flag when a fixture migration affects descriptor coverage.
 *
 * Doesn't compute *which suggestions ranked first* (that requires intent +
 * full suggestCharts). Reports only structural deltas — added/removed fields,
 * type changes, primary role re-assignments, fit set changes.
 *
 * @example
 * const a = profileData(yesterdaysData)
 * const b = profileData(todaysData)
 * const diff = diffProfile(a, b)
 * if (diff.becameUnfit.length) {
 *   console.warn(`These charts no longer fit: ${diff.becameUnfit.join(", ")}`)
 * }
 */
export declare function diffProfile(a: ChartDataProfile, b: ChartDataProfile): ProfileDiff;
