import * as React from "react";
import type { ChartConfig, CopyFormat } from "./export/chartConfig";
import { type DescribeLevel } from "./ai/describeChart";
export interface ChartContainerProps {
    /** Chart title */
    title?: string;
    /** Subtitle / description */
    subtitle?: string;
    /** Chart children (any Semiotic chart component) */
    children: React.ReactNode;
    /** Width — passed to child chart if not set on child. Default: "100%" */
    width?: number | string;
    /** Height of the chart area (excluding header). Default: 400 */
    height?: number;
    /** Built-in actions. Each can be true (default config), false (hidden), or config object */
    actions?: {
        export?: boolean | {
            format?: "svg" | "png";
            scale?: number;
            filename?: string;
        };
        fullscreen?: boolean;
        /** Enable "Copy Config" action button. Requires chartConfig prop. */
        copyConfig?: boolean | {
            format?: CopyFormat;
        };
        /** Enable "Data Summary" action button — shows statistical summary + sample rows */
        dataSummary?: boolean;
    };
    /**
     * Chart configuration. Enables the "Copy Config" toolbar action and the
     * `describe`/`navigable` a11y affordances. Only `component` and `props` are
     * required — the `version`/`createdAt` serialization metadata is optional
     * here and synthesized when copying.
     */
    chartConfig?: Omit<ChartConfig, "version" | "createdAt"> & Partial<Pick<ChartConfig, "version" | "createdAt">>;
    /**
     * Auto-generate a layered (L1–L3) natural-language description from
     * `chartConfig` and expose it at the container level — the opt-in path to a
     * fuller accessible reading than the bare chart's terse aria-label. Requires
     * `chartConfig`. `true` renders a screen-reader-only note; pass
     * `{ visible: true }` to also show it as a visible caption, or `{ levels }`
     * to choose verbosity. Backed by `describeChart()`.
     */
    describe?: boolean | {
        levels?: DescribeLevel[];
        visible?: boolean;
    };
    /**
     * Mount a structured, screen-reader-navigable tree of the chart (chart →
     * axes/series → data points), built from `chartConfig` — the Olli /
     * Data Navigator model, as an opt-in at the container layer. Requires
     * `chartConfig`. `true` renders it screen-reader-only; `{ visible: true }`
     * shows it; `{ maxLeaves }` caps leaves per branch. Backed by
     * `buildNavigationTree()` + `AccessibleNavTree`.
     */
    navigable?: boolean | {
        visible?: boolean;
        maxLeaves?: number;
    };
    /** Additional controls rendered in the toolbar after built-in actions */
    controls?: React.ReactNode;
    /** Loading state — shows skeleton placeholder */
    loading?: boolean;
    /** Error state — shows error message (overrides children) */
    error?: string | React.ReactNode;
    /** Wrap children in ChartErrorBoundary */
    errorBoundary?: boolean;
    /** Status indicator (wired to streaming staleness) */
    status?: "live" | "stale" | "paused" | "error" | "static";
    /** Details panel rendered alongside the chart (e.g. DetailsPanel component) */
    detailsPanel?: React.ReactNode;
    /** CSS class for the outer container */
    className?: string;
    /** Inline style overrides */
    style?: React.CSSProperties;
}
export interface ChartContainerHandle {
    /** Export chart to SVG or PNG */
    export: (options?: {
        format?: "svg" | "png";
        scale?: number;
        filename?: string;
    }) => Promise<void>;
    /** Toggle fullscreen */
    toggleFullscreen: () => void;
    /** Copy chart config to clipboard */
    copyConfig: (format?: CopyFormat) => Promise<void>;
    /** The chart container DOM element */
    element: HTMLDivElement | null;
}
export declare const ChartContainer: React.ForwardRefExoticComponent<ChartContainerProps & React.RefAttributes<ChartContainerHandle>>;
