@devexperts/dxcharts-lite
Version:
67 lines (66 loc) • 3.12 kB
TypeScript
/*
* 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;
}