/*
 * Copyright (C) 2019 - 2026 Devexperts Solutions IE Limited
 * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
 * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
 */
import { Observable, Subject } from 'rxjs';
import { Unit } from '../../model/scaling/viewport.model';
import { AnimationFrameCache } from '../../utils/performance/animation-frame-cache.utils';
import { YAxisConfig, YAxisConfigTreasuryFormat } from '../../chart.config';
export type PriceAxisType = 'regular' | 'percent' | 'logarithmic';
export interface LabelsGenerator {
    readonly observeLabelsChanged: () => Observable<NumericAxisLabel[]>;
}
/**
 * Generator of axes labels.
 */
export declare class NumericAxisLabelsGenerator implements LabelsGenerator {
    private increment;
    private startEndProvider;
    private lengthProvider;
    valueFormatter: (value: number) => string;
    private withZero;
    protected axisTypeProvider: () => PriceAxisType;
    private baseLineProvider;
    private labelFilter;
    private singleLabelHeightPixels;
    private yAxisConfig?;
    /**
     *    Multipliers which are using for price increments to
     *    calculate horizontal grid and price lines step.
     */
    private gridDistanceMultipliers;
    labelsCache: AnimationFrameCache<Array<NumericAxisLabel>>;
    lastSingleLabelHeightValue: number;
    distanceBetweenLabelsChangeSubject: Subject<NumericAxisLabel[][]>;
    newGeneratedLabelsSubject: Subject<NumericAxisLabel[]>;
    private lastStart;
    private lastEnd;
    protected treasuryFormat: YAxisConfigTreasuryFormat | undefined;
    constructor(increment: number | null, startEndProvider: () => [Unit, Unit], lengthProvider: () => Unit, valueFormatter: (value: number) => string, withZero: boolean | undefined, axisTypeProvider: () => PriceAxisType, baseLineProvider: () => number, labelFilter?: (labels: NumericAxisLabel[]) => NumericAxisLabel[], singleLabelHeightPixels?: number, yAxisConfig?: YAxisConfig | undefined);
    private generateRegularLabels;
    private generatePercentLabels;
    private generateLogarithmLabels;
    doGenerateLabels(): NumericAxisLabel[];
    private calculateMinMax;
    private getAxisStep;
    observeDistanceBetweenLabelsChanged(): Observable<NumericAxisLabel[][]>;
    observeLabelsChanged(): Observable<NumericAxisLabel[]>;
    protected calculateIncrement(valueLength: number): Unit;
    protected adjustIncrementOnAxisType(increment: number): number;
    generateNumericLabels(): Array<NumericAxisLabel>;
    private static getLabelBounds;
    /**
     * Calculates the distance between two axis labels as:
     *  - Take increment (0.01 for price or 1 for natural number);
     *  - Take step which was calculated as (chart height / max lines count provided by config (or default 10));
     *  - Multiplying increment with gridDistanceMultipliers until it will greater then step
     * @param step
     * @param increment
     */
    private calculateAxisStep;
}
export interface NumericAxisLabel {
    text: string;
    value: Unit;
}
