import { BaseProperties, PropertiesArray } from 'ag-charts-core';
import type { FontStyle, FontWeight, Padding, TextWrap } from 'ag-charts-types';
import type { ModuleContext } from '../../module/moduleContext';
import { GroupedCategoryScale } from '../../scale/groupedCategoryScale';
import { BBox } from '../../scene/bbox';
import type { ShapeColor } from '../../scene/shape/shape';
import type { AxisPrimaryTickCount } from '../../util/secondaryAxisTicks';
import type { ChartLayout } from '../chartAxis';
import { LabelBorder } from '../label';
import { CategoryAxis } from './categoryAxis';
import { type GroupedCategoryKey } from './tree';
export declare const MIN_CATEGORY_SPACING = 5;
declare class DepthLabelProperties extends BaseProperties {
    enabled: boolean;
    avoidCollisions?: boolean;
    border: LabelBorder;
    color?: string;
    cornerRadius?: number;
    spacing?: number;
    rotation?: number;
    wrapping?: TextWrap;
    truncate?: boolean;
    fill?: ShapeColor;
    fontStyle?: FontStyle;
    fontWeight?: FontWeight;
    fontSize?: number;
    fontFamily?: string;
    padding?: Padding;
}
declare class DepthTickProperties extends BaseProperties {
    enabled: boolean;
    width?: number;
    stroke?: string;
}
declare class DepthProperties extends BaseProperties {
    label: DepthLabelProperties;
    tick: DepthTickProperties;
}
export declare class GroupedCategoryAxis extends CategoryAxis<GroupedCategoryScale<GroupedCategoryKey>> {
    static readonly className = "GroupedCategoryAxis";
    static readonly type: "grouped-category";
    readonly tickScale: GroupedCategoryScale<GroupedCategoryKey, number>;
    private computedLayout?;
    private tickTreeLayout?;
    private tickNodes?;
    depthOptions: PropertiesArray<DepthProperties>;
    constructor(moduleCtx: ModuleContext);
    private resizeTickTree;
    private getDepthOptionsMap;
    private updateCategoryLabels;
    private updateAxisLine;
    private computeLayout;
    /**
     * Creates/removes/updates the scene graph nodes that constitute the axis.
     * Supposed to be called _manually_ after changing _any_ of the axis properties.
     * This allows to bulk set axis properties before updating the nodes.
     * The node changes made by this method are rendered on the next animation frame.
     * We could schedule this method call automatically on the next animation frame
     * when any of the axis properties change (the way we do when properties of scene graph's
     * nodes change), but this will mean that we first wait for the next animation
     * frame to make changes to the nodes of the axis, then wait for another animation
     * frame to render those changes. It's nice to have everything update automatically,
     * but this extra level of async indirection will not just introduce an unwanted delay,
     * it will also make it harder to reason about the program.
     */
    update(): void;
    calculateLayout(_primaryTickCount?: AxisPrimaryTickCount, chartLayout?: ChartLayout): {
        bbox: BBox;
        niceDomain: GroupedCategoryKey[];
    };
    /**
     * The length of the grid. The grid is only visible in case of a non-zero value.
     */
    onGridVisibilityChange(): void;
    protected updateScale(): void;
    processData(): void;
    filterDuplicateArrays(array: GroupedCategoryKey[]): GroupedCategoryKey[];
}
export {};
