import type { Datum } from "./datumTypes";
import type { Accessor, ChartAccessor } from "./types";
import type { SelectionHookResult, SelectionStyleConfig } from "./selectionUtils";
export interface XYLineStyleOptions {
    /**
     * Base stroke width. The top-level `strokeWidth` override below
     * wins via `mergeShapeStyle` when both are supplied.
     * @default 2
     */
    lineWidth?: number;
    /** Color accessor (string field name or function). */
    colorBy?: Accessor<string> | ChartAccessor<Datum, string>;
    /** Resolved categorical color scale (typically from useChartSetup). */
    colorScale?: ((v: string) => string);
    /** Static color used as the fallback stroke when `colorBy` is unset. */
    color?: string;
    /** Custom stroke resolver. Wins over `colorBy`/`colorScale`/`color`.
     *  Receives the datum and the optional `group` key the frame
     *  passes through `resolveLineStyle`. */
    resolveStroke?: (d: Datum, group?: string) => string;
    /** When `true`, every line fills. When a `string[]`, only series
     *  whose `group` key appears in the array fill. When omitted/false,
     *  no fill is set on the style. */
    fillArea?: boolean | string[];
    /** Fill opacity used when `fillArea` triggers a fill. @default 0.3 */
    areaOpacity?: number;
    stroke?: string;
    strokeWidth?: number;
    opacity?: number;
    /** Selection hook result from `useChartSelection`/`useChartSetup`.
     *  Pass `null`/`undefined` to skip dimming entirely (MinimapChart's
     *  overview line and main line both skip selection wrapping). */
    effectiveSelectionHook?: SelectionHookResult | null;
    /** Resolved selection style config (matched/unmatched style overrides). */
    resolvedSelection?: SelectionStyleConfig;
}
/**
 * Returns a memoized `lineStyle` callback that the XY frame's
 * `resolveLineStyle` invokes with `(datum, group?)`.
 *
 * @example
 * ```tsx
 * // LineChart's recipe collapses to a single hook call:
 * const lineStyle = useXYLineStyle({
 *   lineWidth, colorBy, colorScale, color, fillArea, areaOpacity,
 *   stroke, strokeWidth, opacity,
 *   effectiveSelectionHook, resolvedSelection,
 * })
 * ```
 *
 * @example
 * ```tsx
 * // MultiAxisLineChart hands in a series-aware resolver:
 * const lineStyle = useXYLineStyle({
 *   lineWidth,
 *   resolveStroke: (d) => seriesColorMap.get(d[SERIES_FIELD]) || seriesColors[0],
 *   stroke, strokeWidth, opacity,
 *   effectiveSelectionHook: setup.effectiveSelectionHook,
 *   resolvedSelection: setup.resolvedSelection,
 * })
 * ```
 *
 * @example
 * ```tsx
 * // MinimapChart's overview line: thin stroke, no selection, no primitives.
 * const overviewLineStyle = useXYLineStyle({ lineWidth: 1, colorBy, colorScale })
 * ```
 */
export declare function useXYLineStyle(options: XYLineStyleOptions): (d: Datum, group?: string) => Datum;
