import { BehaviorConfig, TerraDrawModeBehavior } from "./base.behavior";
import { HexColor, OnFinishContext, Projection, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, TerraDrawModeRegisterConfig, TerraDrawModeState, TerraDrawMouseEvent, Validation } from "../common";
import { FeatureId, GeoJSONStore, GeoJSONStoreFeatures, StoreChangeHandler } from "../store/store";
export type CustomStyling = Record<string, string | number | ((feature: GeoJSONStoreFeatures) => HexColor) | ((feature: GeoJSONStoreFeatures) => number)>;
export declare enum ModeTypes {
    Drawing = "drawing",
    Select = "select",
    Static = "static",
    Render = "render"
}
export type BaseModeOptions<T extends CustomStyling> = {
    styles?: Partial<T>;
    pointerDistance?: number;
    validation?: Validation;
    projection?: Projection;
};
export declare abstract class TerraDrawBaseDrawMode<T extends CustomStyling> {
    protected _state: TerraDrawModeState;
    get state(): TerraDrawModeState;
    set state(_: TerraDrawModeState);
    protected _styles: Partial<T>;
    get styles(): Partial<T>;
    set styles(styling: Partial<T>);
    protected behaviors: TerraDrawModeBehavior[];
    protected validate: Validation | undefined;
    protected pointerDistance: number;
    protected coordinatePrecision: number;
    protected onStyleChange: StoreChangeHandler;
    protected store: GeoJSONStore;
    protected setDoubleClickToZoom: TerraDrawModeRegisterConfig["setDoubleClickToZoom"];
    protected unproject: TerraDrawModeRegisterConfig["unproject"];
    protected project: TerraDrawModeRegisterConfig["project"];
    protected setCursor: TerraDrawModeRegisterConfig["setCursor"];
    protected registerBehaviors(behaviorConfig: BehaviorConfig): void;
    protected projection: Projection;
    constructor(options?: BaseModeOptions<T>);
    type: ModeTypes;
    mode: string;
    protected setDrawing(): void;
    protected setStarted(): void;
    protected setStopped(): void;
    register(config: TerraDrawModeRegisterConfig): void;
    validateFeature(feature: unknown): feature is GeoJSONStoreFeatures;
    abstract start(): void;
    abstract stop(): void;
    abstract cleanUp(): void;
    abstract styleFeature(feature: GeoJSONStoreFeatures): TerraDrawAdapterStyling;
    onFinish(finishedId: FeatureId, context: OnFinishContext): void;
    onDeselect(deselectedId: FeatureId): void;
    onSelect(selectedId: FeatureId): void;
    onKeyDown(event: TerraDrawKeyboardEvent): void;
    onKeyUp(event: TerraDrawKeyboardEvent): void;
    onMouseMove(event: TerraDrawMouseEvent): void;
    onClick(event: TerraDrawMouseEvent): void;
    onDragStart(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
    onDrag(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
    onDragEnd(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
    protected getHexColorStylingValue(value: HexColor | ((feature: GeoJSONStoreFeatures) => HexColor) | undefined, defaultValue: HexColor, feature: GeoJSONStoreFeatures): HexColor;
    protected getNumericStylingValue(value: number | ((feature: GeoJSONStoreFeatures) => number) | undefined, defaultValue: number, feature: GeoJSONStoreFeatures): number;
    private getStylingValue;
}
export declare abstract class TerraDrawBaseSelectMode<T extends CustomStyling> extends TerraDrawBaseDrawMode<T> {
    type: ModeTypes;
    abstract selectFeature(featureId: FeatureId): void;
    abstract deselectFeature(featureId: FeatureId): void;
}
