export type PropType = "string" | "number" | "boolean" | "array" | "object" | "function";
export type DataShape = "array" | "object" | "network" | "realtime" | "none";
export type ChartCategory = "xy" | "ordinal" | "network" | "geo" | "realtime" | "value";
/**
 * Capability tags for runtime behavior. Each chart declares which
 * features it actually supports so docs, AI/MCP tools, and CI gates
 * can read structured truth instead of inferring it from the source.
 *
 * All fields are required so a new chart entry can't omit them
 * silently — the audit's anti-goal "Do not make registry metadata
 * aspirational. It should describe real runtime behavior and be
 * checked." applies here.
 */
export interface ChartCapabilities {
    /**
     * Render pipeline. `canvas` for Stream-Frame-driven charts that
     * paint to canvas with SVG overlays for chrome (the common case).
     * `svg` for charts that are pure SVG (none today, but reserved).
     * `hybrid` for charts that use both — currently every Stream-Frame
     * HOC qualifies as hybrid; reserve `canvas` for any future
     * canvas-only fallback.
     */
    renderModes: Array<"canvas" | "svg" | "hybrid">;
    /** Renders a legend swatch column when `colorBy` (or equivalent)
     *  resolves to non-empty categories. */
    supportsLegend: boolean;
    /** Reads from a `selection` prop and dims/highlights matching
     *  marks via `wrapStyleWithSelection` or equivalent. */
    supportsSelection: boolean;
    /** Produces a hover-driven selection (used by linked crosshair /
     *  cross-filter patterns) via `linkedHover`. */
    supportsLinkedHover: boolean;
    /** Exposes a ref handle (`push`, `pushMany`, etc.) so consumers
     *  can mutate the data list without re-rendering. Hierarchy
     *  charts (Treemap/CirclePack/TreeDiagram/OrbitDiagram) and
     *  pure-synthetic charts (GaugeChart) declare false. */
    supportsPush: boolean;
    /** Renders to a static SVG via `renderChart()` from `semiotic/server`
     *  through a registered entry in `serverChartConfigs.ts`. SSR-only
     *  charts (none yet) and HOC-SSR exclusions also declare false. */
    supportsSSR: boolean;
    /**
     * How color is consumed by the chart's data marks.
     * - `categorical`: discrete buckets, paired with a `colorBy` accessor.
     * - `sequential`: continuous scale (heatmap intensity, choropleth value).
     * - `threshold`: stepped scale with explicit breakpoints (gauge zones).
     * - `continuous`: smooth interpolation along a 1-D path (gradient fill).
     * - `none`: chart doesn't use color encoding (sparkline, pure layout).
     */
    colorModel: "categorical" | "sequential" | "threshold" | "continuous" | "none";
    /**
     * Where the geometry comes from.
     * - `plugin`: a built-in plugin in the frame (sankey/force/chord/tree
     *   for network; bar/pie/swarm/etc. for ordinal; line/area/etc. for XY).
     * - `custom`: emitted via the frame's customLayout escape hatch
     *   (ProcessSankey via `customNetworkLayout`, NetworkCustomChart,
     *   XYCustomChart, OrdinalCustomChart).
     * - `synthetic`: no layout — the chart constructs its scene from
     *   the input value(s) directly (GaugeChart computes arc geometry).
     */
    layoutMode: "plugin" | "custom" | "synthetic";
    /**
     * Free-form tag list for opt-in features that don't fit the
     * boolean shape — e.g. "particles", "forecast", "anomaly", "brush",
     * "streamgraph", "minimap". Used by docs feature tables and
     * potential capability-driven AI suggestions.
     */
    specialFeatures: string[];
}
export interface ChartPropSpec {
    /** Allowed runtime types. May be a single value or a union. */
    type: PropType | PropType[];
    /** Allowed enum values for string-typed props. */
    enum?: readonly string[];
    /** Default value surfaced in schema.json (and shown in MCP getSchema). */
    default?: unknown;
    /** Schema-side description; surfaces in LLM tool definitions. */
    description?: string;
    /**
     * When true, the prop is included in validationMap but omitted from
     * schema.json. Use for handler/callback props (`onClick`, `tooltip`)
     * and pass-through escape hatches (`frameProps`) that LLMs shouldn't
     * be asked to populate.
     */
    omitFromSchema?: boolean;
}
export interface ChartSpec {
    /** Component name, must match the React export. */
    name: string;
    category: ChartCategory;
    /** Human-readable description for schema.tools[].function.description. */
    description: string;
    /** Statically-required props. Push-mode optionality lives in behaviorContracts. */
    required: string[];
    /** Drives validation dispatch (validateArrayData / validateNetworkData / …). */
    dataShape: DataShape;
    /** Accessor props validated against the data shape at runtime. */
    dataAccessors: string[];
    /**
     * Shared prop bags this chart composes. Bag props are merged in left-to-right
     * order; chart-specific `ownProps` win on key collision.
     */
    propBags: ReadonlyArray<keyof typeof PROP_BAGS>;
    /** Chart-specific prop spec, overlaid on top of the composed bags. */
    ownProps: Record<string, ChartPropSpec>;
    /**
     * Capability matrix — declarative facts about runtime behavior.
     * Drives docs feature tables, capability-aware AI/MCP tools, and
     * the `check:capabilities` drift gate (which verifies, e.g., that
     * a chart claiming `supportsSSR: true` has a matching entry in
     * `serverChartConfigs.ts`).
     */
    capabilities: ChartCapabilities;
}
export declare const PROP_BAGS: {
    readonly common: Record<string, ChartPropSpec>;
    readonly xyAxis: Record<string, ChartPropSpec>;
    readonly ordinalAxis: Record<string, ChartPropSpec>;
    readonly realtime: Record<string, ChartPropSpec>;
};
export declare const ORIENTATION_ENUM: readonly ["vertical", "horizontal"];
export declare const HORIZONTAL_VERTICAL_ENUM: readonly ["horizontal", "vertical"];
export declare const LEGEND_POSITION_ENUM: readonly ["right", "left", "top", "bottom"];
export declare const CURVE_ENUM: readonly ["linear", "monotoneX", "monotoneY", "step", "stepAfter", "stepBefore", "basis", "cardinal", "catmullRom"];
export declare const CHART_MODE_ENUM: readonly ["primary", "context", "sparkline"];
export declare const CHART_SPECS: Record<string, ChartSpec>;
/**
 * Compose a chart's full prop set (bags + ownProps) in deterministic order.
 * ownProps wins on key collision so a chart can override a shared default.
 */
export declare function composeProps(spec: ChartSpec): Record<string, ChartPropSpec>;
