import type { Accessor, Color, FilterContext, GetPickingInfoParams, Layer, LayerDataSource, LayersList, PickingInfo, UpdateParameters } from "@deck.gl/core";
import { CompositeLayer } from "@deck.gl/core";
import type { GeoJsonLayerProps } from "@deck.gl/layers";
import type { Position } from "geojson";
import type { LayerPickInfo } from "../../utils/layerTools";
import type { MarkerType } from "../utils/markers";
export declare enum SubLayerId {
    MARKERS_2D = "markers-2d",
    MARKERS_2D_OUTLINE = "markers-2d--outline",
    MARKERS_2D_PICKING = "markers-2d--picking"
}
/** A marker that exists somewhere along a trajectory path */
export type WellMarker = {
    type: MarkerType;
    positionAlongPath: number;
    properties?: Record<string, unknown>;
};
export type MarkerData<TData = unknown> = {
    type: MarkerType;
    position: Position;
    angle: number;
    positionAlongPath: number;
    properties?: Record<string, unknown>;
    sourceObject: TData;
    sourceIndex: number;
    markerIndex: number;
};
export type FlatWellMarkersLayerProps<TData> = {
    data: LayerDataSource<TData>;
    outline: boolean;
    getTrajectoryPath: Accessor<TData, Position[]>;
    getCumulativePathDistance?: Accessor<TData, number[]>;
    getMarkers: Accessor<TData, WellMarker[]>;
    getMarkerColor?: Accessor<MarkerData<TData>, Color>;
};
type InheritedGeoJsonProps = Omit<GeoJsonLayerProps, "data" | "getFillColor">;
/**
 * Wells sub-layer for displaying assorted markers along the trajectory of a well. The layer
 * is * primarily designed to be used in 2D views, so the markers are built by simple flat
 * lines, and are aligned along the XY path of the trajectories. For 3D markers, see the
 * `WellMarkersLayer` class
 */
export declare class FlatWellMarkersLayer<TData = unknown> extends CompositeLayer<FlatWellMarkersLayerProps<TData> & InheritedGeoJsonProps> {
    static readonly layerName = "FlatWellMarkersLayer";
    static readonly defaultProps: {
        getMarkers: {
            type: string;
            value: never[];
        };
        getMarkerColor: undefined;
        getCumulativePathDistance: undefined;
    };
    state: {
        markers: MarkerData<TData>[];
        highlightedSourceIndex: number;
        hoveredMarkerIndex: number;
        cumulativePathDistanceCache: Map<number, number[]>;
    };
    constructor(...args: any[]);
    updateState({ changeFlags, props, oldProps, }: UpdateParameters<this>): void;
    filterSubLayer(context: FilterContext): boolean;
    getPickingInfo({ info }: GetPickingInfoParams): LayerPickInfo<TData>;
    updateAutoHighlight(info: PickingInfo): void;
    protected getSubLayerAccessor<In, Out, TAccessor = Accessor<In, Out>>(accessor: TAccessor): TAccessor;
    private getMarkerColor;
    renderLayers(): Layer | null | LayersList;
}
export {};
