import { ChartType, CompleteThemeSettingsInternal, TotalLabels } from '../../../../../../../types';
import { CartesianChartDataOptionsInternal } from '../../../../chart-data-options/types';
import { CartesianChartData } from '../../../../chart-data/types';
import { Stacking } from '../../../chart-options-service';
import { Axis, AxisMinMax, AxisSettings, PlotBand } from '../../../translations/axis-section';
import { PolarChartDesignOptions, StackableChartDesignOptions } from '../../../translations/design-options';
import { AxisClipped } from '../../../translations/translations-to-highcharts';
import { ChartDesignOptions } from '../../../translations/types';
import { withChartSpecificAxisSettings, withPolarSpecificAxisSettings, withStacking } from './axis-utils';
export { withChartSpecificAxisSettings, withPolarSpecificAxisSettings, withStacking };
/**
 * X-axis orientation type
 */
export type XAxisOrientation = 'horizontal' | 'vertical';
/**
 * Y-axis metadata containing all Y-axis related configuration
 */
export interface YAxisMeta {
    side: number[];
    chartType: (string | undefined)[];
    treatNullAsZero: boolean[];
    connectNulls: boolean[];
}
/**
 * Categories metadata containing categories, index mapping, and plot bands
 */
export interface CategoriesMeta {
    categories: string[];
    indexMap: number[];
    plotBands: PlotBand[];
}
/**
 * Parameters for building X-axis settings
 */
export interface BuildXAxisSettingsParams {
    designOptions: ChartDesignOptions;
    dataOptions: CartesianChartDataOptionsInternal;
    chartData: CartesianChartData;
    categoriesMeta: CategoriesMeta;
    orientation: XAxisOrientation;
    isContinuous: boolean;
    dateFormatter?: (date: Date, format: string) => string;
}
/**
 * Stacking configuration metadata
 */
export interface StackingMeta {
    stacking?: Stacking;
    totalLabels?: TotalLabels;
}
/**
 * Y-axis settings result containing both settings and clipping information
 */
export interface YAxisSettingsResult {
    settings: AxisSettings[];
    clipped: AxisClipped[];
}
/**
 * Determines if the X-axis should use continuous datetime scale
 *
 * @param xDataOptions - X-axis data options
 * @returns true if continuous datetime X-axis should be used
 */
export declare const isContinuousDatetimeXAxis: (xDataOptions: CartesianChartDataOptionsInternal['x']) => boolean;
/**
 * Returns true when every X-axis dimension is a datetime column.
 * Used to decide whether multi-granularity date charts can still show the navigator.
 */
export declare const areAllDatetimeXAxes: (xDataOptions: CartesianChartDataOptionsInternal['x']) => boolean;
/**
 * Builds Y-axis metadata from chart data and options
 *
 * @param chartData - Cartesian chart data
 * @param dataOptions - Chart data options
 * @returns Y-axis metadata object
 */
export declare const buildYAxisMeta: (chartData: CartesianChartData, dataOptions: CartesianChartDataOptionsInternal) => YAxisMeta;
/**
 * Determines X-axis orientation based on chart type and Y-axis chart types
 *
 * @param chartType - Main chart type
 * @param yAxisChartTypes - Array of Y-axis chart types
 * @returns X-axis orientation
 */
export declare const getXAxisOrientation: (chartType: ChartType, yAxisChartTypes: (string | undefined)[]) => XAxisOrientation;
/**
 * Builds categories metadata including categories, index map, and plot bands
 *
 * @param chartData - Chart data
 * @param dataOptions - Chart data options
 * @param designOptions - Chart design options
 * @param isContinuous - Whether X-axis is continuous
 * @returns Categories metadata object
 */
export declare const buildCategoriesMeta: (chartData: CartesianChartData, dataOptions: CartesianChartDataOptionsInternal, designOptions: ChartDesignOptions, isContinuous: boolean, dateFormatter?: ((date: Date, format: string) => string) | undefined) => CategoriesMeta;
/**
 * Builds X-axis settings based on whether it's continuous datetime or categorical
 *
 * @param params - Parameters object containing all required data
 * @param params.designOptions - Chart design options
 * @param params.dataOptions - Chart data options
 * @param params.chartData - Chart data
 * @param params.categoriesMeta - Categories metadata
 * @param params.orientation - X-axis orientation
 * @param params.isContinuous - Whether X-axis is continuous
 * @param params.dateFormatter - Optional date formatter function
 * @returns X-axis settings array
 */
export declare const buildXAxisSettings: ({ designOptions, dataOptions, chartData, categoriesMeta, orientation, isContinuous, dateFormatter, }: BuildXAxisSettingsParams) => AxisSettings[];
/**
 * Calculates Y-axis min/max values for a specific axis side
 *
 * @param axisIndex - Axis index (0 for left/primary, 1 for right/secondary)
 * @param chartType - Chart type
 * @param chartData - Chart data
 * @param designOptions - Chart design options
 * @param yAxisSide - Array indicating which side each series belongs to
 * @param treatNullAsZero - Array indicating null treatment for each series
 * @returns Axis min/max values
 */
export declare const buildYAxisMinMax: (axisIndex: 0 | 1, chartType: ChartType, chartData: CartesianChartData, designOptions: ChartDesignOptions, yAxisSide: number[], treatNullAsZero: boolean[]) => AxisMinMax;
/**
 * Builds stacking configuration metadata
 *
 * @param chartType - Chart type
 * @param designOptions - Stackable chart design options
 * @returns Stacking metadata
 */
export declare const buildStackingMeta: (chartType: ChartType, designOptions: StackableChartDesignOptions) => StackingMeta;
/**
 * Contextless transformer that normalizes Y-axis configuration for polar charts.
 * Disables Y-axis titles which are not meaningful in polar coordinate system.
 *
 * @param designOptions - Polar chart design options to normalize
 * @returns Normalized polar chart design options with Y-axis title disabled
 * @example
 * const normalizedOptions = withYAxisNormalizationForPolar(polarDesignOptions);
 */
export declare const withYAxisNormalizationForPolar: (designOptions: Readonly<PolarChartDesignOptions>) => PolarChartDesignOptions;
/**
 * Builds Y-axis settings and clipping information
 *
 * @param yAxis - Primary Y-axis configuration
 * @param y2Axis - Secondary Y-axis configuration
 * @param primaryMinMax - Primary axis min/max values
 * @param secondaryMinMax - Secondary axis min/max values (optional)
 * @param stackingMeta - Stacking configuration
 * @param totalLabelRotation - Total label rotation angle
 * @param dataOptions - Chart data options
 * @param themeSettings - Theme settings (optional)
 * @returns Y-axis settings and clipping information
 */
export declare const buildYAxisSettings: (yAxis: Axis, y2Axis: Axis | undefined, primaryMinMax: AxisMinMax, secondaryMinMax: AxisMinMax | undefined, stackingMeta: StackingMeta, dataOptions: CartesianChartDataOptionsInternal, themeSettings?: CompleteThemeSettingsInternal) => YAxisSettingsResult;
/**
 * Determines if a secondary Y-axis is needed based on Y-axis side configuration
 *
 * @param yAxisSide - Array indicating which side each series belongs to
 * @returns true if secondary Y-axis is needed
 */
export declare const hasSecondaryYAxis: (yAxisSide: number[]) => boolean;
