import { TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, HexColorStyling, NumericStyling, Cursor, Snapping } from "../../common";
import { BaseModeOptions, CustomStyling, TerraDrawBaseDrawMode } from "../base.mode";
import { BehaviorConfig } from "../base.behavior";
import { GeoJSONStoreFeatures, StoreValidation } from "../../store/store";
type TerraDrawLineStringModeKeyEvents = {
    cancel: KeyboardEvent["key"] | null;
    finish: KeyboardEvent["key"] | null;
};
type LineStringStyling = {
    lineStringWidth: NumericStyling;
    lineStringColor: HexColorStyling;
    closingPointColor: HexColorStyling;
    closingPointWidth: NumericStyling;
    closingPointOutlineColor: HexColorStyling;
    closingPointOutlineWidth: NumericStyling;
    snappingPointColor: HexColorStyling;
    snappingPointWidth: NumericStyling;
    snappingPointOutlineColor: HexColorStyling;
    snappingPointOutlineWidth: NumericStyling;
};
interface Cursors {
    start?: Cursor;
    close?: Cursor;
    dragStart?: Cursor;
    dragEnd?: Cursor;
}
interface InertCoordinates {
    strategy: "amount";
    value: number;
}
interface TerraDrawLineStringModeOptions<T extends CustomStyling> extends BaseModeOptions<T> {
    snapping?: Snapping;
    pointerDistance?: number;
    keyEvents?: TerraDrawLineStringModeKeyEvents | null;
    cursors?: Cursors;
    insertCoordinates?: InertCoordinates;
    editable?: boolean;
}
export declare class TerraDrawLineStringMode extends TerraDrawBaseDrawMode<LineStringStyling> {
    mode: "linestring";
    private currentCoordinate;
    private currentId;
    private closingPointId;
    private keyEvents;
    private snapping;
    private cursors;
    private mouseMove;
    private insertCoordinates;
    private lastCommittedCoordinates;
    private snappedPointId;
    private lastMouseMoveEvent;
    private editable;
    private editedFeatureId;
    private editedFeatureCoordinateIndex;
    private editedSnapType;
    private editedInsertIndex;
    private editedPointId;
    private coordinateSnapping;
    private insertPoint;
    private lineSnapping;
    private pixelDistance;
    private clickBoundingBox;
    constructor(options?: TerraDrawLineStringModeOptions<LineStringStyling>);
    updateOptions(options?: TerraDrawLineStringModeOptions<LineStringStyling> | undefined): void;
    private updateSnappedCoordinate;
    private close;
    private updateGeometries;
    private generateInsertCoordinates;
    private createLine;
    private firstUpdateToLine;
    private updateToLine;
    /** @internal */
    registerBehaviors(config: BehaviorConfig): void;
    /** @internal */
    start(): void;
    /** @internal */
    stop(): void;
    /** @internal */
    onMouseMove(event: TerraDrawMouseEvent): void;
    private onRightClick;
    private onLeftClick;
    /** @internal */
    onClick(event: TerraDrawMouseEvent): void;
    /** @internal */
    onKeyDown(): void;
    /** @internal */
    onKeyUp(event: TerraDrawKeyboardEvent): 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 */
    cleanUp(): void;
    /** @internal */
    styleFeature(feature: GeoJSONStoreFeatures): TerraDrawAdapterStyling;
    validateFeature(feature: unknown): StoreValidation;
    private lineStringFilter;
    private snapCoordinate;
    afterFeatureUpdated(feature: GeoJSONStoreFeatures): void;
}
export {};
