import * as React from "react";
import type { Accessor } from "../charts/shared/types";
import type { Datum } from "../charts/shared/datumTypes";
/**
 * Configuration for a single tooltip field
 */
export interface TooltipField {
    /**
     * Label for this field
     */
    label?: string;
    /**
     * Field name or accessor function to get the value
     * (alias for 'accessor')
     */
    key?: Accessor;
    /**
     * Field name or accessor function to get the value
     */
    accessor?: Accessor;
    /**
     * Optional format function for the value
     */
    format?: (value: unknown) => string;
}
/**
 * Base tooltip configuration
 */
export interface TooltipConfig {
    /**
     * Array of fields to display in the tooltip
     * Can be simple field names or full TooltipField objects
     */
    fields?: Array<string | TooltipField>;
    /**
     * Custom title accessor (field name or function)
     */
    title?: Accessor<string>;
    /**
     * Custom format function for all values (if fields don't specify their own)
     */
    format?: (value: unknown) => string;
    /**
     * Custom style object for the tooltip container
     */
    style?: React.CSSProperties;
    /**
     * Custom className for the tooltip container
     */
    className?: string;
}
/**
 * Multi-line tooltip configuration
 */
export interface MultiLineTooltipConfig extends TooltipConfig {
    /**
     * Show field labels (default: true)
     */
    showLabels?: boolean;
    /**
     * Separator between label and value (default: ": ")
     */
    separator?: string;
}
/**
 * Default tooltip styles following best practices
 */
export declare const defaultTooltipStyle: React.CSSProperties;
/**
 * Create a simple tooltip that displays a single value or title
 *
 * @example
 * ```tsx
 * <Scatterplot
 *   data={data}
 *   tooltip={Tooltip({ title: "name" })}
 * />
 * ```
 *
 * @example
 * ```tsx
 * <BarChart
 *   data={data}
 *   tooltip={Tooltip({
 *     title: d => `${d.category}: ${d.value}`,
 *     style: { background: "#333" }
 *   })}
 * />
 * ```
 */
export declare function Tooltip(config?: TooltipConfig): (data: Record<string, unknown>) => React.JSX.Element | null;
/**
 * Create a multi-line tooltip that displays multiple fields
 *
 * @example
 * ```tsx
 * <Scatterplot
 *   data={data}
 *   tooltip={MultiLineTooltip({
 *     fields: ["name", "value", "category"]
 *   })}
 * />
 * ```
 *
 * @example
 * ```tsx
 * <LineChart
 *   data={data}
 *   tooltip={MultiLineTooltip({
 *     title: "series",
 *     fields: [
 *       { label: "X", accessor: "x", format: v => v.toFixed(2) },
 *       { label: "Y", accessor: "y", format: v => v.toFixed(2) },
 *       { label: "Category", accessor: "category" }
 *     ]
 *   })}
 * />
 * ```
 *
 * @example
 * ```tsx
 * <BarChart
 *   data={data}
 *   tooltip={MultiLineTooltip({
 *     fields: [
 *       { label: "Category", accessor: "category" },
 *       { label: "Sales", accessor: "value", format: v => `$${v.toLocaleString()}` }
 *     ],
 *     showLabels: true
 *   })}
 * />
 * ```
 */
export declare function MultiLineTooltip(config?: MultiLineTooltipConfig): (data: Record<string, unknown>) => React.JSX.Element | null;
/**
 * Type for tooltip prop that chart components accept
 */
export type TooltipProp = boolean | "multi" | ((data: Record<string, unknown>) => React.ReactNode) | ReturnType<typeof Tooltip> | ReturnType<typeof MultiLineTooltip> | TooltipConfig;
/**
 * The function signature that Stream Frames expect for tooltipContent.
 * Compatible with HoverData and any Record-based hover object.
 */
export type TooltipContentFn = (d: Datum) => React.ReactNode;
/**
 * Multi-point tooltip: shows all series values at the hovered X position
 * with color swatches (legend-style). Used when tooltipMode="multi".
 */
export declare function MultiPointTooltip(): TooltipContentFn;
/**
 * Convert a tooltip prop to the format Semiotic expects.
 * Returns `false` to disable, or a `TooltipContentFn` compatible with
 * all Stream Frame `tooltipContent` signatures.
 */
export declare function normalizeTooltip(tooltip: TooltipProp | undefined): false | TooltipContentFn | undefined;
