/**
 * Canonical intent taxonomy for chart suggestion / interrogation.
 *
 * An "intent" is what the user is trying to *see* in the data. Charts declare how
 * well they serve each intent in their capability descriptor. The suggestion engine
 * filters and ranks by intent.
 *
 * The taxonomy is fixed but extensible: consumers can call `registerIntent` to add
 * domain-specific intents at runtime. The IntentId type stays union-of-known so
 * built-in code remains type-safe; registered intents are addressable as plain strings.
 */
export type BuiltInIntentId = "trend" | "compare-series" | "compare-categories" | "rank" | "part-to-whole" | "distribution" | "correlation" | "flow" | "hierarchy" | "geo" | "outlier-detection" | "composition-over-time" | "change-detection";
/**
 * Any intent — built-in or user-registered. Custom intents are plain strings.
 */
export type IntentId = BuiltInIntentId | (string & {});
export interface IntentDescriptor {
    id: IntentId;
    label: string;
    description: string;
    /** Soft hint of which chart family typically serves this intent. */
    familyHint?: "time-series" | "categorical" | "distribution" | "relationship" | "flow" | "network" | "hierarchy" | "geo";
}
/** Get an intent descriptor by id, or undefined if not registered. */
export declare function getIntent(id: IntentId): IntentDescriptor | undefined;
/** All currently-registered intents (built-in + user-added). */
export declare function listIntents(): IntentDescriptor[];
/**
 * Register a custom intent at runtime. Idempotent — re-registering with the same id
 * replaces the descriptor.
 */
export declare function registerIntent(intent: IntentDescriptor): void;
/** Sentinel set used by capability authors to opt out of an intent without misspelling. */
export declare const BUILT_IN_INTENT_IDS: ReadonlySet<BuiltInIntentId>;
