import type { IBoundsLike } from '@visactor/vutils';
import { Tag } from '@visactor/vrender-components';
import type { IGraphic } from '@visactor/vrender-core';
import { BaseComponent } from '../base/base-component';
import type { IPoint, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';
import type { IComponentOption } from '../interface';
import type { ICrossHair, CrossHairTrigger, ICartesianCrosshairSpec, IPolarCrosshairSpec, ICrosshairCategoryFieldSpec, IAxisInfo, CrossHairStateByField } from './interface';
import type { IAxis } from '../axis/interface';
export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec | IPolarCrosshairSpec> extends BaseComponent<T> implements ICrossHair {
    static specKey: string;
    specKey: string;
    layoutType: 'none';
    gridZIndex: number;
    labelZIndex: number;
    trigger: CrossHairTrigger;
    enable: boolean;
    showDefault: boolean;
    triggerOff: 'none' | number;
    protected _stateByField: CrossHairStateByField;
    private _timer?;
    private _clickLock?;
    private _hasActive?;
    private _onlyLockClick?;
    get enableRemain(): boolean;
    private _limitBounds;
    constructor(spec: T, options: IComponentOption);
    protected abstract _layoutCrosshair(x: number, y: number, tooltipData?: TooltipData, activeType?: TooltipActiveType): void;
    abstract setAxisValue(v: StringOrNumber, axis: IAxis): void;
    abstract layoutByValue(enableRemain?: boolean): void;
    protected abstract _getDatumAtPoint(axis: IAxis, point: IPoint): number | string;
    protected _setAllAxisValues(axisMap: IAxisInfo<IAxis>, point: IPoint, field: string): boolean;
    clearAxisValue(): void;
    hideCrosshair(): void;
    showCrosshair(dimInfo: {
        axis: IAxis;
        value: string | number;
    }[]): void;
    protected _getLimitBounds(): IBoundsLike;
    protected _showDefaultCrosshairBySpec(): boolean;
    protected _updateVisibleCrosshair(): void;
    protected _showDefaultCrosshair(): void;
    setAttrFromSpec(): void;
    created(): void;
    _compareSpec(spec: T, prevSpec: T): {
        change: boolean;
        reMake: boolean;
        reRender: boolean;
        reSize: boolean;
        reCompile: boolean;
    };
    protected _initEvent(): void;
    private _registerEvent;
    private _eventOff;
    onBeforeRender(): void;
    protected calculateTriggerPoint(params: any): {
        x: number;
        y: number;
    };
    private _handleIn;
    private _handleClickInEvent;
    private _handleHoverInEvent;
    private _handleOutEvent;
    private _getTriggerEvent;
    private _registerTooltipEvent;
    private _handleTooltipShow;
    private _handleTooltipHideOrRelease;
    protected _getAxisInfoByField<T = IAxis>(field: 'x' | 'y' | 'category' | 'value'): IAxisInfo<T>;
    onLayoutEnd(): void;
    protected _releaseEvent(): void;
    protected _parseFieldInfo(): void;
    protected _parseCrosshairSpec(): void;
    protected _parseField(field: ICrosshairCategoryFieldSpec, fieldName: string): any;
    protected _filterAxisByPoint<T>(axisMap: IAxisInfo<T>, relativeX: number, relativeY: number): IAxisInfo<T>;
    protected _updateCrosshairLabel(label: Tag, labelAttrs: any, callback: (label: Tag) => void): void;
    protected clearOutEvent(): void;
    protected _hideByField(field: string): void;
    hide(): void;
    protected _getNeedClearVRenderComponents(): IGraphic[];
}
