import { TFunction } from '@sisense/sdk-common';
import type { DrilldownOptions, Options, SeriesLegendItemClickCallbackFunction } from '@sisense/sisense-charts';
import { ChartStyleOptions, ChartType, CompleteThemeSettings, HighchartsSelectEvent, OptionsWithAlerts } from '../../../../types';
import { ChartDataOptionsInternal } from '../chart-data-options/types';
import { ChartData } from '../chart-data/types';
import { TooltipSettings } from './tooltip';
import { AxisSettings } from './translations/axis-section';
import { FunnelOptions } from './translations/funnel-plot-options';
import { LegendSettings } from './translations/legend-section';
import { MarkerSettings } from './translations/marker-section';
import { PieOptions } from './translations/pie-plot-options';
import { ScatterBubbleOptions } from './translations/scatter-plot-options';
import { HighchartsSeriesValues, HighchartsType } from './translations/translations-to-highcharts';
import { ChartDesignOptions } from './translations/types';
import { DataLabelsSettings } from './translations/value-label-section';
/**
 * Highcharts options
 *
 * @alpha
 */
export type HighchartsOptions = Pick<Options, keyof Options>;
/**
 * Convert intermediate chart data, data options, and design options
 * into pure highcharts config data.
 *
 * @param chartData - the data for the chart in an intermediate format
 * @param chartType -
 * @param chartDesignOptions -
 * @param dataOptions -
 * @param translate - translation function
 * @param themeSettings -
 * @param dateFormatter
 */
export declare const highchartsOptionsService: (chartData: ChartData, chartType: ChartType, chartDesignOptions: ChartDesignOptions, dataOptions: ChartDataOptionsInternal, translate: TFunction, themeSettings?: CompleteThemeSettings, dateFormatter?: ((date: Date, format: string) => string) | undefined) => OptionsWithAlerts<HighchartsOptionsInternal>;
export type SeriesType = HighchartsSeriesValues & {
    /**
     * Name of the series that this series is related to.
     * Used for statistical model data (forecast, trend).
     *
     * @internal
     */
    statisticalSeriesRelatesToSeries?: string;
    index?: number;
    animation?: boolean;
    showInNavigator?: boolean;
    showInLegend?: boolean;
    stickyTracking?: boolean;
    boostThreshold?: number;
    turboThreshold?: number;
    color?: string;
    yAxis?: number;
    marker?: MarkerSettings;
    type?: string;
    id?: string;
    medianWidth?: number;
    maxPointWidth?: number;
    minPointWidth?: number;
    whiskerWidth?: number;
    whiskerLength?: number | string;
    fillOpacity?: number;
    strokeOpacity?: number;
    enableMouseTracking?: boolean;
    legendIndex?: number;
    dashStyle?: string;
    lineWidth?: number;
    step?: boolean | 'left' | 'center' | 'right';
    zIndex?: number;
    keys?: string[];
    nullColor?: string;
    borderWidth?: number;
    borderColor?: string;
    colsize?: number;
    rowsize?: number;
};
type ChartPlotOptions = {
    dataLabels?: DataLabelsSettings;
    groupPadding?: number;
    pointPadding?: number;
    pointPlacement?: null;
    animation?: boolean;
    shadow?: boolean;
    marker?: MarkerSettings;
    borderWidth?: number;
    className?: string;
    events?: {
        legendItemClick?: SeriesLegendItemClickCallbackFunction;
    };
    states?: {
        inactive?: {
            enabled?: boolean;
            opacity?: number;
        };
    };
    tooltip?: TooltipSettings;
};
export type Stacking = 'normal' | 'percent' | 'stream';
export type PlotOptions = {
    series: {
        lineWidth?: number;
        dataLabels?: DataLabelsSettings;
        marker?: MarkerSettings;
        stacking?: Stacking;
        stickyTracking?: boolean;
        groupPadding?: number;
        pointPadding?: number;
        grouping?: boolean;
        events?: {
            legendItemClick?: SeriesLegendItemClickCallbackFunction;
        };
        states?: {
            select?: {
                color?: string | null;
                opacity?: number;
                borderColor?: string;
            };
        };
        allowPointSelect?: boolean;
        boostThreshold?: number;
        turboThreshold?: number;
        softThreshold?: boolean;
        fillOpacity?: number;
        connectNulls?: boolean;
        step?: boolean | 'left' | 'center' | 'right';
        animation?: {
            duration?: number;
        };
        /** Series labels are automatically placed as close to the series as possible. */
        label?: {
            enabled?: boolean;
            minFontSize?: number;
            maxFontSize?: number;
            style?: {
                color?: string;
                fontWeight?: string;
                fontSize?: string;
            };
        };
    };
    line?: ChartPlotOptions;
    area?: ChartPlotOptions;
    bar?: ChartPlotOptions;
    column?: ChartPlotOptions;
    pie?: PieOptions;
    funnel?: FunnelOptions;
    bubble?: ScatterBubbleOptions;
    sunburst?: ChartPlotOptions;
    boxplot?: ChartPlotOptions;
    scatter?: ChartPlotOptions;
    arearange?: ChartPlotOptions;
    heatmap?: ChartPlotOptions;
    streamgraph?: {
        lineWidth?: number;
        fillOpacity?: number;
        label?: {
            enabled?: boolean;
            minFontSize?: number;
            maxFontSize?: number;
            style?: {
                color?: string;
                fontWeight?: string;
                fontSize?: string;
            };
        };
        dataLabels?: DataLabelsSettings;
    };
};
/**
 * Highcharts options internal
 */
export type HighchartsOptionsInternal = {
    chart: {
        type: HighchartsType;
        renderTo?: string;
        events?: {
            load?: () => void;
            redraw?: () => void;
            selection?: (nativeEvent: HighchartsSelectEvent) => void;
        };
        spacing?: number[];
        marginTop?: number;
        alignTicks?: boolean;
        polar: boolean;
        zoomType?: 'x' | 'y';
        scrollablePlotArea?: {
            minWidth?: number;
            scrollPositionX?: number;
        };
        animation?: {
            duration?: number;
        };
        zooming?: {
            type: string;
        };
        plotBorderWidth?: number;
        backgroundColor?: string;
        marginBottom?: number;
        marginLeft?: number;
        marginRight?: number;
        width?: number;
        height?: number;
    };
    title?: {
        text: string | null;
    };
    subtitle?: {
        text: string | null;
    };
    series: SeriesType[];
    xAxis?: AxisSettings[];
    yAxis?: AxisSettings[];
    legend?: LegendSettings;
    plotOptions?: PlotOptions;
    navigator?: Navigator | {
        enabled: boolean;
        series?: {
            type: ChartType;
        };
    };
    tooltip?: TooltipSettings;
    boost?: {
        useGPUTranslations: boolean;
        usePreAllocated: boolean;
    };
    credits?: {
        enabled: boolean;
    };
    exporting?: {
        enabled: boolean;
    };
    drilldown?: DrilldownOptions;
    accessibility?: {
        enabled?: boolean;
        landmarkVerbosity?: 'one' | 'all';
    };
    colorAxis?: {
        min?: number;
        max?: number;
        stops?: [number, string][];
        labels?: {
            format: string;
        };
    };
};
type Navigator = {
    series: {
        type: HighchartsType;
        dataGrouping: {
            enabled: boolean;
        };
        color?: string;
    };
    enabled: boolean;
    margin: number;
    height: number;
    xAxis: AxisSettings;
    handles: {
        symbols?: string[];
        backgroundColor?: string;
        borderColor?: string;
    };
    maskInside: boolean;
    maskFill: string;
    outlineColor: string;
    outlineWidth: number;
    threshold?: number;
    tooltipFormatter?: (min: number, max: number) => {
        left: string;
        right: string;
    };
};
declare const DEFAULT_STYLE_OPTIONS: ChartStyleOptions;
/**
 * Returns default style options, which can be used as base for custom style options.
 *
 * @returns Style options object
 */
export declare const getDefaultStyleOptions: () => typeof DEFAULT_STYLE_OPTIONS;
export {};
