/// <reference types="react" />
import { IExternalBaseLayer, ILayerInfo } from "../api/common";
import { RuntimeMap, MapLayer, MapGroup } from "../api/contracts/runtime-map";
import { LegendNodeExtraHTMLProps } from "./context";
export declare type MapElementChangeFunc = (objectId: string, visible: boolean) => void;
/**
 * Legend component props
 *
 * @export
 * @interface ILegendProps
 */
export interface ILegendProps {
    baseIconSize?: number;
    /**
     * @since 0.14 made optional
     */
    map?: RuntimeMap;
    stateless: boolean;
    showLayers: string[] | undefined;
    showGroups: string[] | undefined;
    hideLayers: string[] | undefined;
    hideGroups: string[] | undefined;
    locale: string;
    externalBaseLayers?: IExternalBaseLayer[] | undefined;
    onBaseLayerChanged?: (name: string) => void | undefined;
    onLayerSelectabilityChanged?: (id: string, selectable: boolean) => void | undefined;
    onGroupExpansionChanged?: (id: string, expanded: boolean) => void | undefined;
    onLayerVisibilityChanged?: MapElementChangeFunc | undefined;
    onGroupVisibilityChanged?: MapElementChangeFunc | undefined;
    currentScale: number;
    overrideSelectableLayers?: any | undefined;
    overrideExpandedItems?: any | undefined;
    maxHeight?: number;
    inlineBaseLayerSwitcher: boolean;
    externalLayers?: ILayerInfo[];
    activeMapName?: string;
    /**
     * Provide extra HTML elements to insert before a layer name in a layer legend node
     *
     * @param options
     * @since 0.14.9
     */
    provideExtraLayerIconsHtml?: (options: LegendNodeExtraHTMLProps<MapLayer>) => string[];
    /**
     * Provide extra HTML elements to insert before a group name in a group legend node
     *
     * @param options
     * @since 0.14.9
     */
    provideExtraGroupIconsHtml?: (options: LegendNodeExtraHTMLProps<MapGroup>) => string[];
}
export interface ILayerNodeProps {
    layer: MapLayer;
}
export declare const LayerNode: (props: ILayerNodeProps) => JSX.Element;
export interface IGroupNodeProps {
    group: MapGroup;
    childItems: (MapLayer | MapGroup)[];
}
export declare const GroupNode: (props: IGroupNodeProps) => JSX.Element;
/**
 * The Legend component provides a component to view the layer structure, its styles and thematics and
 * the ability to toggle the group/layer visibility of the current map
 * @param props
 */
export declare const Legend: (props: ILegendProps) => JSX.Element;
