/*
 * 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 { Subject } from 'rxjs';
import { CanvasBoundsContainer } from '../../canvas/canvas-bounds-container';
import { CursorHandler } from '../../canvas/cursor.handler';
import { YAxisWidthContributor } from '../../canvas/y-axis-bounds.container';
import { BarType, FullChartColors, FullChartConfig, YAxisAlign, YAxisConfig, YAxisLabelAppearanceType, YAxisLabelMode, YAxisLabelType } from '../../chart.config';
import EventBus from '../../events/event-bus';
import { CanvasInputListenerComponent } from '../../inputlisteners/canvas-input-listener.component';
import { PriceMovement } from '../../model/candle-series.model';
import { CanvasModel } from '../../model/canvas.model';
import { ChartBaseElement } from '../../model/chart-base-element';
import { DataSeriesType } from '../../model/data-series.config';
import { DataSeriesModel } from '../../model/data-series.model';
import { ScaleModel } from '../../model/scale.model';
import { PriceAxisType } from '../labels_generator/numeric-axis-labels.generator';
import { ChartPanComponent } from '../pan/chart-pan.component';
import { VisualYAxisLabel, YAxisLabelsProvider } from './price_labels/y-axis-labels.model';
import { YAxisScaleHandler } from './y-axis-scale.handler';
import { YAxisModel } from './y-axis.model';
import { HitTestCanvasModel } from '../../model/hit-test-canvas.model';
import { ChartResizeHandler } from '../../inputhandlers/chart-resize.handler';
export type LabelColorResolver = (priceMovement: PriceMovement, colors: FullChartColors) => string;
/**
 * Y axis component. Contains all Y axis related logic.
 */
export declare class YAxisComponent extends ChartBaseElement {
    private eventBus;
    private config;
    private mainCanvasModel;
    private canvasModel;
    scale: ScaleModel;
    private canvasInputListeners;
    private canvasBoundsContainer;
    private chartPanComponent;
    private cursors;
    paneUUID: string;
    extentIdx: number;
    private hitTestCanvasModel;
    private chartResizeHandler;
    private labelsColorByChartTypeMap;
    yAxisScaleHandler: YAxisScaleHandler;
    model: YAxisModel;
    axisTypeSetSubject: Subject<PriceAxisType>;
    axisAlignSetSubject: Subject<YAxisAlign>;
    axisAlignMovedSubject: Subject<YAxisAlign>;
    readonly state: YAxisConfig;
    constructor(eventBus: EventBus, config: FullChartConfig, mainCanvasModel: CanvasModel, canvasModel: CanvasModel, scale: ScaleModel, canvasInputListeners: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, chartPanComponent: ChartPanComponent, cursors: CursorHandler, valueFormatter: (value: number) => string, dataSeriesProvider: () => DataSeriesModel | undefined, paneUUID: string, extentIdx: number, hitTestCanvasModel: HitTestCanvasModel, chartResizeHandler: ChartResizeHandler, initialState?: YAxisConfig);
    setExtentIdx(extentIdx: number): void;
    /**
     * Registers default label color resolvers for different chart types.
     * @private
     * @function
     * @name registerDefaultLabelColorResolver
     * @returns {void}
     */
    private registerDefaultLabelColorResolvers;
    protected doActivate(): void;
    updateCursor(): void;
    /**
     * Updates labels visual appearance on canvas
     */
    updateOrderedLabels(adjustYAxisWidth?: boolean): void;
    /**
     * Registers a label color resolver for a specific chart type.
     *
     * @param {BarType} chartType - The type of chart for which the label color resolver is being registered.
     * @param {LabelColorResolver} resolver - The function that will be used to resolve the color of the labels for the specified chart type.
     * @returns {void}
     */
    registerLabelColorResolver(chartType: BarType, resolver: LabelColorResolver): void;
    /**
     * Returns a function that resolves the color for a label based on the type of data series.
     * @param {DataSeriesType} candlesType - The type of data series.
     * @returns {Function} - A function that resolves the color for a label.
     * If there is no color mapping for the given data series type, it returns the default color resolver function.
     */
    getLabelsColorResolver(candlesType: DataSeriesType): LabelColorResolver;
    /**
     * You can add a custom labels provider for additional labels on YAxis (like for drawings, symbol last price, studies, etc..)
     * @param groupName - a group in which labels position recalculation algorithm will be applied, usually it's subchart name
     * @param provider
     * @param id
     */
    registerYAxisLabelsProvider(provider: YAxisLabelsProvider, groupName?: string, id?: string): string;
    /**
     * An easier way to manage custom y-axis labels, than y-axis labels providers.
     * However, overlapping avoidance is not supported
     * deprecated because of naming, use updateCustomYAxisLabel instead
     * @param name
     * @param label
     */
    addSimpleYAxisLabel(name: string, label: VisualYAxisLabel): void;
    /**
     * Update custom y-axis label
     * @param name
     * @param label
     */
    updateCustomYAxisLabel(name: string, label: VisualYAxisLabel): void;
    /**
     * @param name
     */
    deleteSimpleYAxisLabel(name: string): void;
    getAxisType(): PriceAxisType;
    /**
     * Unregister a Y axis labels provider from the specified group.
     * @param {string} groupName - The name of the group from which to unregister the provider. Defaults to LabelsGroups.MAIN.
     * @param {string} id - The ID of the provider to unregister.
     * @returns {string} - The ID of the unregistered provider.
     */
    unregisterYAxisLabelsProvider(groupName: string | undefined, id: string): string;
    getBounds(): import("../../model/bounds.model").Bounds;
    /**
     * If custom pane has y-axis it has to register width contributor to correctly calculate overall y-axis width.
     * @param contributor
     */
    registerYAxisWidthContributor(contributor: YAxisWidthContributor): void;
    /**
     * Sets the type of axis: percent, regular or logarithmic.
     * @param type - the type of axis
     */
    setAxisType(type: PriceAxisType): void;
    /**
     * Change YAxis position to left or to right
     * @param align
     */
    setYAxisAlign(align: YAxisAlign): void;
    /**
     * Controls visibility of the y-axis (additionally disable/enable component)
     */
    setVisible(isVisible: boolean): void;
    /**
     * If visible, when you can see the y-axis on the chart
     */
    isVisible(): boolean;
    /**
     * Controls lockPriceToBarRatio of the y-axis
     */
    setLockPriceToBarRatio(value?: boolean): void;
    /**
     * Changes the visual type of particular label.
     * @param type - label type
     * @param mode - visual mode
     */
    changeLabelMode(type: YAxisLabelType, mode: YAxisLabelMode): void;
    /**
     * Changes the visual type of particular label.
     * @param type - label type
     * @param mode - visual mode
     */
    changeLabelAppearance(type: YAxisLabelType, mode: YAxisLabelAppearanceType): void;
    /**
     * Sets the inverse price scale mode. Inverts Y axis vertically.
     * Inversion also works for candles, drawings and overlay studies.
     * @param inverse - true or false
     */
    togglePriceScaleInverse(inverse?: boolean): void;
    /**
     * Changes the visibility of the labels' descriptions.
     * @param {boolean} descVisibility - A boolean value indicating whether the descriptions should be visible or not.
     * @returns {void}
     */
    changeLabelsDescriptionVisibility(descVisibility: boolean): void;
    setDblClickCallback: (cb: () => void) => () => void;
    setDblTapCallback: (cb: () => void) => () => void;
}
