import { TerraDrawMouseEvent, TerraDrawKeyboardEvent, TerraDrawAdapterStyling, HexColorStyling, NumericStyling, Cursor, Validation, Snapping } from "../../common";
import { BaseModeOptions, CustomStyling, TerraDrawBaseSelectMode } from "../base.mode";
import { BehaviorConfig } from "../base.behavior";
import { FeatureId, GeoJSONStoreFeatures } from "../../store/store";
import { ResizeOptions } from "./behaviors/drag-coordinate-resize.behavior";
type TerraDrawSelectModeKeyEvents = {
    deselect: KeyboardEvent["key"] | null;
    delete: KeyboardEvent["key"] | null;
    rotate: KeyboardEvent["key"][] | null;
    scale: KeyboardEvent["key"][] | null;
};
type ModeFlags = {
    feature?: {
        validation?: Validation;
        draggable?: boolean;
        rotateable?: boolean;
        scaleable?: boolean;
        selfIntersectable?: boolean;
        coordinates?: {
            snappable?: boolean | Snapping;
            midpoints?: boolean | {
                draggable?: boolean;
            };
            draggable?: boolean;
            resizable?: ResizeOptions;
            deletable?: boolean;
        };
    };
};
type SelectionStyling = {
    selectedPointColor: HexColorStyling;
    selectedPointWidth: NumericStyling;
    selectedPointOutlineColor: HexColorStyling;
    selectedPointOutlineWidth: NumericStyling;
    selectedLineStringColor: HexColorStyling;
    selectedLineStringWidth: NumericStyling;
    selectedPolygonColor: HexColorStyling;
    selectedPolygonFillOpacity: NumericStyling;
    selectedPolygonOutlineColor: HexColorStyling;
    selectedPolygonOutlineWidth: NumericStyling;
    selectionPointWidth: NumericStyling;
    selectionPointColor: HexColorStyling;
    selectionPointOutlineColor: HexColorStyling;
    selectionPointOutlineWidth: NumericStyling;
    midPointColor: HexColorStyling;
    midPointOutlineColor: HexColorStyling;
    midPointWidth: NumericStyling;
    midPointOutlineWidth: NumericStyling;
};
interface Cursors {
    pointerOver?: Cursor;
    dragStart?: Cursor;
    dragEnd?: Cursor;
    insertMidpoint?: Cursor;
}
interface TerraDrawSelectModeOptions<T extends CustomStyling> extends BaseModeOptions<T> {
    pointerDistance?: number;
    flags?: {
        [mode: string]: ModeFlags;
    };
    keyEvents?: TerraDrawSelectModeKeyEvents | null;
    dragEventThrottle?: number;
    cursors?: Cursors;
    allowManualDeselection?: boolean;
}
export declare class TerraDrawSelectMode extends TerraDrawBaseSelectMode<SelectionStyling> {
    mode: "select";
    private allowManualDeselection;
    private dragEventThrottle;
    private dragEventCount;
    private selected;
    private flags;
    private keyEvents;
    private cursors;
    private validations;
    private selectionPoints;
    private midPoints;
    private coordinateSnap;
    private featuresAtMouseEvent;
    private pixelDistance;
    private clickBoundingBox;
    private dragFeature;
    private dragCoordinate;
    private rotateFeature;
    private scaleFeature;
    private dragCoordinateResizeFeature;
    private coordinatePoints;
    private lineSnap;
    constructor(options?: TerraDrawSelectModeOptions<SelectionStyling>);
    updateOptions(options?: TerraDrawSelectModeOptions<SelectionStyling>): void;
    selectFeature(featureId: FeatureId): void;
    setSelecting(): void;
    registerBehaviors(config: BehaviorConfig): void;
    deselectFeature(): void;
    private deselect;
    private deleteSelected;
    private onRightClick;
    private select;
    private onLeftClick;
    /** @internal */
    start(): void;
    /** @internal */
    stop(): void;
    /** @internal */
    onClick(event: TerraDrawMouseEvent): void;
    private canScale;
    private canRotate;
    private preventDefaultKeyEvent;
    /** @internal */
    onKeyDown(event: TerraDrawKeyboardEvent): void;
    /** @internal */
    onKeyUp(event: TerraDrawKeyboardEvent): void;
    /** @internal */
    cleanUp(): void;
    /** @internal */
    onDragStart(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
    /** @internal */
    onDrag(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
    /** @internal */
    onDragEnd(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
    /** @internal */
    onMouseMove(event: TerraDrawMouseEvent): void;
    /** @internal */
    styleFeature(feature: GeoJSONStoreFeatures): TerraDrawAdapterStyling;
}
export {};
