import { ILayer, IPopupOption } from '@antv/l7-core';
import { DOM } from '@antv/l7-utils';
import { Container } from 'inversify';
import Popup from './popup';
type ElementType = DOM.ElementType;
export type LayerField = {
    field: string;
    formatField?: ElementType | ((field: string, feature: any) => ElementType);
    formatValue?: ElementType | ((value: any, feature: any) => ElementType);
    getValue?: (feature: any) => any;
};
export type LayerPopupConfigItem = {
    layer: ILayer | string;
    fields?: Array<LayerField | string>;
    title?: ElementType | ((feature: any) => ElementType);
    customContent?: ElementType | ((feature: any) => ElementType);
};
export interface ILayerPopupOption extends IPopupOption {
    config?: LayerPopupConfigItem[];
    items?: LayerPopupConfigItem[];
    trigger: 'hover' | 'click';
}
type LayerMapInfo = {
    onMouseMove?: (layer: ILayer, e: any) => void;
    onMouseOut?: (layer: ILayer, e: any) => void;
    onClick?: (layer: ILayer, e: any) => void;
    onSourceUpdate?: (layer: ILayer) => void;
} & Partial<LayerPopupConfigItem>;
export { LayerPopup };
export default class LayerPopup extends Popup<ILayerPopupOption> {
    /**
     * 用于保存图层对应的事件回调以及配置信息
     * @protected
     */
    protected layerConfigMap: WeakMap<ILayer, LayerMapInfo>;
    /**
     * 当期正在展示的图层以及对应元素 id 的信息
     * @protected
     */
    protected displayFeatureInfo?: {
        layer: ILayer;
        featureId: number;
    };
    protected get layerConfigItems(): LayerPopupConfigItem[];
    addTo(scene: Container): this;
    remove(): this;
    setOptions(option: Partial<ILayerPopupOption>): this;
    protected getDefault(option: Partial<ILayerPopupOption>): ILayerPopupOption;
    /**
     * 绑定对应的图层事件
     * @protected
     */
    protected bindLayerEvent(): void;
    /**
     * 解绑对应的图层事件
     * @protected
     */
    protected unbindLayerEvent(): void;
    protected onLayerMouseMove(layer: ILayer, e: any): void;
    protected onLayerMouseOut(layer: ILayer, e: any): void;
    protected onLayerClick(layer: ILayer, e: any): void;
    protected onSourceUpdate(layer: ILayer): void;
    /**
     * 通过当前图层和对应选中的元素获取气泡展示的 HTML 内容
     * @param layer
     * @param e
     * @protected
     */
    protected getLayerInfoFrag(layer: ILayer, e: any): {
        title: DocumentFragment | undefined;
        content: DocumentFragment;
    };
    /**
     * 通过 Layer 配置访问到真实的 Layer 实例
     * @param configItem
     * @protected
     */
    protected getLayerByConfig(configItem: LayerPopupConfigItem): ILayer | undefined;
    /**
     * 判断当前展示的 Feature 是否和上一次查看的一致
     * @param layer
     * @param featureId
     * @protected
     */
    protected isSameFeature(layer: ILayer, featureId: number): boolean | undefined;
}
