import { Feature, Polygon } from 'geojson';
import Layer, { LayerBaseConfig, LayerBaseConfigPartial, LayerColorConfig, LayerHeightConfig, LayerRadiusConfig, LayerSizeConfig, LayerStrokeColorConfig } from '../base-layer';
import { GeojsonDataMaps, DeckGlGeoTypes, COLUMN_MODE_GEOJSON } from './geojson-utils';
import GeojsonLayerIcon from './geojson-layer-icon';
import { ColorRange, VisConfigNumber, VisConfigColorSelect, VisConfigColorRange, VisConfigRange, VisConfigBoolean, Merge, RGBColor, LayerColumn } from '@kepler.gl/types';
import { KeplerTable } from '@kepler.gl/table';
import { DataContainerInterface } from '@kepler.gl/utils';
export declare const geojsonVisConfigs: {
    opacity: 'opacity';
    strokeOpacity: VisConfigNumber;
    thickness: VisConfigNumber;
    strokeColor: 'strokeColor';
    colorRange: 'colorRange';
    strokeColorRange: 'strokeColorRange';
    radius: 'radius';
    sizeRange: 'strokeWidthRange';
    radiusRange: 'radiusRange';
    heightRange: 'elevationRange';
    elevationScale: 'elevationScale';
    stroked: 'stroked';
    filled: 'filled';
    enable3d: 'enable3d';
    wireframe: 'wireframe';
    fixedHeight: 'fixedHeight';
};
export type GeoJsonVisConfigSettings = {
    opacity: VisConfigNumber;
    strokeOpacity: VisConfigNumber;
    thickness: VisConfigNumber;
    strokeColor: VisConfigColorSelect;
    colorRange: VisConfigColorRange;
    strokeColorRange: VisConfigColorRange;
    radius: VisConfigNumber;
    sizeRange: VisConfigRange;
    radiusRange: VisConfigRange;
    heightRange: VisConfigRange;
    elevationScale: VisConfigNumber;
    fixedHeight: VisConfigBoolean;
    stroked: VisConfigBoolean;
    filled: VisConfigBoolean;
    enable3d: VisConfigBoolean;
    wireframe: VisConfigBoolean;
};
export type GeoJsonLayerColumnsConfig = {
    geojson: LayerColumn;
};
export type GeoJsonLayerVisConfig = {
    opacity: number;
    strokeOpacity: number;
    thickness: number;
    strokeColor: RGBColor;
    colorRange: ColorRange;
    strokeColorRange: ColorRange;
    radius: number;
    sizeRange: [number, number];
    radiusRange: [number, number];
    heightRange: [number, number];
    elevationScale: number;
    stroked: boolean;
    filled: boolean;
    enable3d: boolean;
    wireframe: boolean;
    fixedHeight: boolean;
};
type GeoJsonLayerVisualChannelConfig = LayerColorConfig & LayerStrokeColorConfig & LayerSizeConfig & LayerHeightConfig & LayerRadiusConfig;
export type GeoJsonLayerConfig = Merge<LayerBaseConfig, {
    columns: GeoJsonLayerColumnsConfig;
    visConfig: GeoJsonLayerVisConfig;
}> & GeoJsonLayerVisualChannelConfig;
export type GeoJsonLayerMeta = {
    featureTypes?: DeckGlGeoTypes;
    fixedRadius?: boolean;
};
export declare const geoJsonRequiredColumns: ['geojson'];
type ObjectInfo = {
    index: number;
    object?: Feature | undefined;
    picked: boolean;
    layer: Layer;
    radius?: number;
    id?: string;
};
export declare const featureAccessor: ({ geojson }: GeoJsonLayerColumnsConfig) => (dc: DataContainerInterface) => (d: any) => any;
export declare const defaultElevation = 500;
export declare const defaultLineWidth = 1;
export declare const defaultRadius = 1;
export declare const COLUMN_MODE_TABLE = "table";
export default class GeoJsonLayer extends Layer {
    config: GeoJsonLayerConfig;
    visConfigSettings: GeoJsonVisConfigSettings;
    meta: GeoJsonLayerMeta;
    geoArrowMode: boolean;
    dataToFeature: GeojsonDataMaps;
    dataContainer: DataContainerInterface | null;
    filteredIndex: Uint8ClampedArray | null;
    filteredIndexTrigger: number[] | null;
    centroids: Array<number[] | null>;
    _layerInfoModal: {
        [COLUMN_MODE_TABLE]: () => React.JSX.Element;
        [COLUMN_MODE_GEOJSON]: () => React.JSX.Element;
    };
    constructor(props: any);
    get type(): "geojson";
    static get type(): 'geojson';
    get name(): 'Polygon';
    get layerIcon(): typeof GeojsonLayerIcon;
    get columnPairs(): import("@kepler.gl/types").ColumnPairs;
    get supportedColumnModes(): ({
        key: string;
        label: string;
        requiredColumns: string[];
        optionalColumns?: undefined;
    } | {
        key: string;
        label: string;
        requiredColumns: string[];
        optionalColumns: string[];
    })[];
    get layerInfoModal(): {
        geojson: {
            id: string;
            template: () => React.JSX.Element;
            modalProps: {
                title: string;
            };
        };
        table: {
            id: string;
            template: () => React.JSX.Element;
            modalProps: {
                title: string;
            };
        };
    };
    accessVSFieldValue(): (field: any, d: any) => any;
    get visualChannels(): {
        color: {
            accessor: string;
            condition: (config: any) => any;
            nullValue: any;
            getAttributeValue: (config: any) => (d: any) => any;
            defaultValue: (config: any) => any;
            property: string;
            field: string;
            scale: string;
            domain: string;
            range: string;
            key: string;
            channelScaleType: string;
            defaultMeasure?: any;
            fixed?: any;
            supportedFieldTypes?: Array<import("@kepler.gl/types").SupportedFieldTypes>;
            aggregation?: import("@kepler.gl/types").VisualChannelAggregation;
        };
        strokeColor: {
            property: string;
            field: string;
            scale: string;
            domain: string;
            range: string;
            key: string;
            channelScaleType: "color";
            accessor: string;
            condition: (config: any) => any;
            nullValue: any;
            getAttributeValue: (config: any) => (d: any) => any;
            defaultValue: (config: any) => any;
        };
        size: {
            property: string;
            accessor: string;
            condition: (config: any) => any;
            nullValue: number;
            getAttributeValue: () => (d: any) => any;
            field: string;
            scale: string;
            domain: string;
            range: string;
            key: string;
            channelScaleType: string;
            defaultMeasure?: any;
            defaultValue?: ((config: any) => any) | any;
            fixed?: any;
            supportedFieldTypes?: Array<import("@kepler.gl/types").SupportedFieldTypes>;
            aggregation?: import("@kepler.gl/types").VisualChannelAggregation;
        };
        height: {
            property: string;
            field: string;
            scale: string;
            domain: string;
            range: string;
            key: string;
            fixed: string;
            channelScaleType: "size";
            accessor: string;
            condition: (config: any) => any;
            nullValue: number;
            getAttributeValue: () => (d: any) => any;
        };
        radius: {
            property: string;
            field: string;
            scale: string;
            domain: string;
            range: string;
            key: string;
            channelScaleType: "radius";
            accessor: string;
            nullValue: number;
            getAttributeValue: () => (d: any) => any;
        };
    };
    static findDefaultLayerProps({ label, fields }: KeplerTable): {
        props: {
            label: string;
            columns: any;
            isVisible: boolean;
        }[];
    };
    getDefaultLayerConfig(props: LayerBaseConfigPartial): {
        columnMode: string;
        heightField: null;
        heightDomain: number[];
        heightScale: string;
        radiusField: null;
        radiusDomain: number[];
        radiusScale: string;
        strokeColorField: null;
        strokeColorDomain: number[];
        strokeColorScale: string;
        colorUI: {
            strokeColorRange: import("@kepler.gl/types").ColorUI;
            color: import("@kepler.gl/types").ColorUI;
            colorRange: import("@kepler.gl/types").ColorUI;
        };
        dataId: string;
        label: string;
        color: RGBColor;
        columns: import("@kepler.gl/types").LayerColumns;
        isVisible: boolean;
        isConfigActive: boolean;
        highlightColor: RGBColor | import("@kepler.gl/types").RGBAColor;
        hidden: boolean;
        visConfig: import("@kepler.gl/types").LayerVisConfig;
        textLabel: import("@kepler.gl/types").LayerTextLabel[];
        animation: {
            enabled: boolean;
            domain?: [number, number] | null;
        };
        aggregatedBins?: import("@kepler.gl/types").AggregatedBin[];
        colorField?: import("@kepler.gl/types").VisualChannelField | undefined;
        colorDomain?: import("@kepler.gl/types").VisualChannelDomain | undefined;
        colorScale?: string | number | symbol | undefined;
        sizeDomain?: import("@kepler.gl/types").VisualChannelDomain | undefined;
        sizeScale?: string | number | symbol | undefined;
        sizeField?: import("@kepler.gl/types").VisualChannelField | undefined;
    };
    getHoverData(object: any, dataContainer: any): any;
    getFilteredItemCount(): number | null;
    calculateDataAttribute(dataset: KeplerTable): GeojsonDataMaps;
    formatLayerData(datasets: any, oldLayerData: any): {};
    isInPolygon(data: DataContainerInterface, index: number, polygon: Feature<Polygon>): boolean;
    updateLayerMeta(dataset: KeplerTable): void;
    setInitialLayerConfig(dataset: KeplerTable): this;
    isLayerHovered(objectInfo: ObjectInfo): boolean;
    hasHoveredObject(objectInfo: ObjectInfo): Feature | null;
    getElevationZoomFactor({ zoom, zoomOffset }: {
        zoom: any;
        zoomOffset?: number | undefined;
    }): number;
    renderLayer(opts: any): any[];
}
export {};
