import type { ExpressionSpecification } from 'mapbox-gl';
import { WellStatus } from '../../../constants';
import type { Coordinates } from './OffsetWellMap.types';
export type WellStatusValue = typeof WellStatus[keyof typeof WellStatus];
export type WellMarkerState = 'default' | 'hovered' | 'selected';
export type MapStyleValue = 'dark' | 'satellite';
export type StatusColorConfig = {
    fill: string;
    stroke?: string;
};
export type StatusColorsForState = Record<WellMarkerState, StatusColorConfig>;
export type StatusColorsForMapStyle = Record<WellStatusValue, StatusColorsForState>;
export type StatusColorsByMapStyle = Record<MapStyleValue, StatusColorsForMapStyle>;
export declare const StatusColors: StatusColorsByMapStyle;
/**
 * Mapbox zoom-interpolated marker sizes.
 *
 * These use Mapbox's `interpolate` expression to dynamically scale marker sizes based on zoom level.
 * This prevents the "stain effect" where markers appear too large when zoomed out.
 *
 * Expression structure: ['interpolate', interpolationType, input, stop1, output1, stop2, output2, ...]
 * - 'interpolate': Produces continuous results by interpolating between value pairs
 * - ['linear']: Linear interpolation between stops (smooth transition)
 * - ['zoom']: Uses the current map zoom level as input
 * - Stops are pairs of [zoomLevel, pixelSize]:
 *   - At zoom 1 (world view): markers are tiny
 *   - At zoom 8 (regional): markers are small
 *   - At zoom 12 (city level): markers are default size
 *   - At zoom 18 (street level): markers are larger for easier clicking
 *
 * Values between stops are linearly interpolated.
 * Example: At zoom 10 (between 8 and 12), WellMarkerSize would be ~4px.
 */
export declare const WellMarkerSize: ExpressionSpecification;
export declare const HighlightMarkerSize: ExpressionSpecification;
/**
 * Cluster configuration for Mapbox GL native clustering.
 *
 * Clustering improves performance when displaying 60k+ wells by:
 * - Reducing draw calls at low zoom levels (60k → ~350)
 * - Grouping nearby points into cluster circles with counts
 * - Automatically expanding clusters as user zooms in
 *
 * Selected/offset wells are never clustered - they use a separate non-clustered source.
 */
export declare const ClusterConfig: {
    /** Stop clustering at this zoom level (wells become individual at zoom > clusterMaxZoom) */
    readonly clusterMaxZoom: 9;
    /** Minimum zoom where individual wells are visible (clusterMaxZoom + 1) */
    readonly unclusteredMinZoom: 10;
    /** Target zoom level when flying to a selected well (comfortable visibility) */
    readonly flyToZoom: 12;
    /** Cluster points within this pixel radius */
    readonly clusterRadius: 75;
    /** Dynamic circle radius based on cluster point count */
    readonly CircleRadius: ExpressionSpecification;
    /** Dynamic circle color based on cluster point count (fallback) */
    readonly CircleColor: ExpressionSpecification;
    /** Cluster label styling */
    readonly Label: {
        readonly font: string[];
        readonly size: 14;
        readonly letterSpacing: -0.014;
        readonly offset: [number, number];
        readonly color: "#141414";
    };
};
/**
 * Cluster properties for counting well statuses within each cluster.
 *
 * Each property uses a reducer expression that sums up wells of each status type.
 * These counts are used to determine the cluster color based on the most frequent status.
 */
export declare const ClusterStatusProperties: Record<string, ExpressionSpecification>;
export declare const MapConfig: {
    readonly DefaultCoords: Coordinates;
    readonly Zoom: {
        readonly Initial: 8.5;
        readonly Max: 18;
        readonly Min: 1;
    };
    readonly Radius: {
        readonly Max: 3000;
        readonly Min: 0.01;
    };
    readonly Markers: {
        readonly WellSize: ExpressionSpecification;
        readonly HighlightSize: ExpressionSpecification;
    };
    readonly Colors: {
        readonly OffsetWell: "#03BCD4";
        readonly RadiusCircle: "#03BCD4";
        readonly DefaultWell: "#BDBDBD";
    };
    readonly SelectionColors: {
        readonly dark: {
            readonly border: "#03BCD4";
            readonly fill: "rgba(3, 188, 212, 0.08)";
            readonly borderWidth: 1;
        };
        readonly satellite: {
            readonly border: "#FFE679";
            readonly fill: "rgba(255, 193, 7, 0.08)";
            readonly borderWidth: 2;
        };
    };
    readonly LayerIds: {
        readonly Wells: "wells-layer";
        readonly WellsClusters: "wells-clusters-layer";
        readonly WellsClusterCount: "wells-cluster-count-layer";
        readonly WellsUnclustered: "wells-unclustered-layer";
        readonly SelectedWells: "selected-wells-layer";
        readonly ClusterHighlights: "cluster-highlights-layer";
        readonly RadiusCircleFill: "radius-circle-fill";
        readonly RadiusCircleStroke: "radius-circle-stroke";
        readonly RadiusCirclePreviewFill: "radius-circle-preview-fill";
        readonly RadiusCirclePreviewStroke: "radius-circle-preview-stroke";
        readonly RadiusDrawingPreviewFill: "radius-drawing-preview-fill";
        readonly RadiusDrawingPreviewStroke: "radius-drawing-preview-stroke";
        readonly WellHighlights: "well-highlights-layer";
        readonly ActiveHighlight: "active-highlight-layer";
        readonly HoverHighlight: "hover-highlight-layer";
        readonly DrawPolygonFill: "gl-draw-polygon-fill";
        readonly DrawLines: "gl-draw-lines";
        readonly DrawVertexOuter: "gl-draw-vertex-outer";
        readonly DrawMidpoint: "gl-draw-midpoint";
        readonly LoadingTilesFill: "loading-tiles-fill";
        readonly GhostZoneFill: "ghost-zone-fill";
    };
    readonly SourceIds: {
        readonly Wells: "wells";
        readonly WellsClustered: "wells-clustered";
        readonly SelectedWells: "selected-wells";
        readonly RadiusCircle: "radius-circle";
        readonly RadiusCirclePreview: "radius-circle-preview";
        readonly RadiusDrawingPreview: "radius-drawing-preview";
        readonly WellHighlights: "well-highlights";
        readonly ActiveHighlight: "active-highlight";
        readonly HoverHighlight: "hover-highlight";
        readonly LoadingTiles: "loading-tiles";
        readonly GhostZone: "ghost-zone";
    };
    readonly Styles: {
        readonly dark: "mapbox://styles/mapbox/dark-v9";
        readonly satellite: "mapbox://styles/mapbox/satellite-v9";
    };
    readonly FitBounds: {
        readonly Padding: 5;
    };
};
//# sourceMappingURL=constants.d.ts.map