import * as React from "react";
import type { ArrowOfTime, WindowMode, HoverAnnotationConfig, HoverData, AnnotationContext, DecayConfig, PulseConfig, StalenessConfig, TransitionConfig } from "../../stream/types";
import type { RealtimeFrameHandle } from "../../realtime/types";
import type { ReactNode } from "react";
import type { LegendInteractionMode, LegendPosition } from "../shared/hooks";
import type { ChartMode, ChartAccessor, SelectionConfig } from "../shared/types";
import type { OnObservationCallback } from "../../store/ObservationStore";
import type { Datum } from "../shared/datumTypes";
export interface RealtimeTemporalHistogramProps<TDatum extends Datum = Datum> {
    /** Display mode: "primary" (full chrome), "context" (compact), "sparkline" (inline) */
    mode?: ChartMode;
    /** Time interval for binning */
    binSize: number;
    /** Chart dimensions as [width, height] */
    size?: [number, number];
    /** Chart width (alternative to size) */
    width?: number;
    /** Chart height (alternative to size) */
    height?: number;
    /** Chart margins */
    margin?: {
        top?: number;
        right?: number;
        bottom?: number;
        left?: number;
    };
    /** CSS class name */
    className?: string;
    onObservation?: OnObservationCallback;
    chartId?: string;
    /** Direction time flows */
    arrowOfTime?: ArrowOfTime;
    /** Data retention strategy */
    windowMode?: WindowMode;
    /** Ring buffer capacity */
    windowSize?: number;
    /** Controlled data array */
    data?: Datum[];
    /** Time value accessor */
    timeAccessor?: ChartAccessor<TDatum, number>;
    /** Value accessor */
    valueAccessor?: ChartAccessor<TDatum, number>;
    /** Fixed time domain */
    timeExtent?: [number, number];
    /** Fixed value domain */
    valueExtent?: [number, number];
    /** Extent padding factor */
    extentPadding?: number;
    /**
     * Category accessor for stacked bars.
     * When provided, bars are stacked by category within each bin.
     */
    categoryAccessor?: ChartAccessor<TDatum, string>;
    /**
     * Category-to-color map for stacked bars.
     * Keys also determine stack order (listed keys first, then alphabetical).
     */
    colors?: Record<string, string>;
    /** Bar fill color (non-stacked mode) */
    fill?: string;
    /** Bar stroke color */
    stroke?: string;
    /** Bar stroke width */
    strokeWidth?: number;
    /** Uniform bar opacity (0–1). Pairs with `color` / `stroke` / `strokeWidth` for the designer-facing primitive vocabulary. */
    opacity?: number;
    /** Gap between bars in pixels */
    gap?: number;
    /** Show canvas-drawn axes */
    showAxes?: boolean;
    /** Background fill color */
    background?: string;
    /** Enable hover interaction */
    enableHover?: boolean | HoverAnnotationConfig;
    /** Custom tooltip renderer */
    tooltipContent?: (d: HoverData) => ReactNode;
    /** Callback on hover */
    onHover?: (d: HoverData | null) => void;
    /** Annotation objects */
    annotations?: Datum[];
    /** SVG annotation render function */
    svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
    /** Custom formatter for time axis ticks */
    tickFormatTime?: (value: number) => string;
    /** Custom formatter for value axis ticks */
    tickFormatValue?: (value: number) => string;
    /** Custom tooltip renderer (alias for tooltipContent) */
    tooltip?: (d: HoverData) => ReactNode;
    /** Enable linked hover selection events for cross-chart highlighting */
    linkedHover?: boolean | string | {
        name?: string;
        fields: string[];
    };
    /** Consume a named selection — dims unselected elements */
    selection?: SelectionConfig;
    /** Configurable opacity decay for older data */
    decay?: DecayConfig;
    /** Flash effect on newly inserted data */
    pulse?: PulseConfig;
    /** Frame-level data liveness indicator */
    staleness?: StalenessConfig;
    /** Smooth position interpolation on data change */
    transition?: TransitionConfig;
    /** Show a loading skeleton placeholder */
    loading?: boolean;
    /** Custom content to render when data is empty. Set to `false` to disable empty state. */
    emptyContent?: ReactNode | false;
    /** Brush configuration. `true` defaults to `{ dimension: "x", snap: "bin" }`. */
    brush?: boolean | "x" | {
        dimension?: "x" | "y" | "xy";
        snap?: "continuous" | "bin";
        /** Actual bin boundary values for data-driven snapping (auto-populated from histogram bins when omitted) */
        binBoundaries?: number[];
        /** When true, snap during drag (not just on release). Default false. */
        snapDuring?: boolean;
    };
    /** Callback when brush selection changes. Called with data-space extent, or null when cleared. */
    onBrush?: (extent: {
        x: [number, number];
        y: [number, number];
    } | null) => void;
    /** Linked brush for cross-chart coordination via LinkedCharts */
    linkedBrush?: string | {
        name: string;
        xField?: string;
        yField?: string;
    };
    /** Visual emphasis level for dashboard hierarchy. "primary" spans two columns in ChartGrid. */
    emphasis?: "primary" | "secondary";
    /** Show a legend */
    showLegend?: boolean;
    /** Legend position */
    legendPosition?: LegendPosition;
    /** Legend interaction mode */
    legendInteraction?: LegendInteractionMode;
    /** ID accessor for remove()/update() on the push API */
    pointIdAccessor?: string | ((d: Datum) => string);
}
/**
 * RealtimeTemporalHistogram - Streaming temporal histogram.
 *
 * Wraps StreamXYFrame with `chartType="bar"` and `runtimeMode="streaming"`,
 * binning pushed data points into time-windowed bars. Supports both simple
 * and stacked (categorical) modes.
 *
 * Edge bins that only partially fall within the visible time window are
 * rendered at proportionally narrower widths (Datadog-style).
 *
 * @example
 * ```tsx
 * // Simple histogram
 * <RealtimeTemporalHistogram
 *   ref={ref}
 *   binSize={20}
 *   fill="#007bff"
 *   enableHover
 * />
 *
 * // Stacked by category
 * <RealtimeTemporalHistogram
 *   ref={ref}
 *   binSize={25}
 *   categoryAccessor="category"
 *   colors={{ errors: "#dc3545", warnings: "#fd7e14", info: "#007bff" }}
 *   enableHover
 * />
 * ```
 */
export declare const RealtimeTemporalHistogram: {
    <TDatum extends Datum = Datum>(props: RealtimeTemporalHistogramProps<TDatum> & React.RefAttributes<RealtimeFrameHandle>): React.ReactElement | null;
    displayName?: string;
};
/** @deprecated Use RealtimeTemporalHistogram instead */
export declare const RealtimeHistogram: {
    <TDatum extends Datum = Datum>(props: RealtimeTemporalHistogramProps<TDatum> & React.RefAttributes<RealtimeFrameHandle>): React.ReactElement | null;
    displayName?: string;
};
/** @deprecated Use RealtimeTemporalHistogramProps instead */
export type RealtimeHistogramProps = RealtimeTemporalHistogramProps;
