import { DrawPlugin } from './plugin.ts';
import { DrawFeatureProperties, DrawModel } from './types.ts';
import { Feature, FeatureCollection, MultiPoint, Polygon, Position } from 'geojson';
import { GeoJSONSource, Map, MapLayerMouseEvent, MapLayerTouchEvent } from 'maplibre-gl';
export declare abstract class AbstractDrawMode {
    isTouchEventSupported: boolean;
    plugin: DrawPlugin;
    map: Map;
    source: GeoJSONSource;
    collection: FeatureCollection<Polygon | MultiPoint, DrawFeatureProperties> | undefined;
    protected constructor(plugin: DrawPlugin, map: Map, source: GeoJSONSource);
    hasPolygon(): boolean;
    getPolygon(): Feature<Polygon, DrawFeatureProperties>;
    clonePolygon(): Position[];
    isNearby(a: Position, b: {
        x: number;
        y: number;
    }, isTouch: boolean): boolean;
    getMidpoint(a: Position, b: Position): Position;
    clear(): void;
    render(): void;
    emitOnUpdate(feature?: Feature<Polygon, DrawFeatureProperties>): void;
    createCircle(center: Position, radius: number, steps?: number): Feature<Polygon, DrawFeatureProperties>;
    getAreaSize(model: Feature<Polygon, DrawFeatureProperties>): number;
    isTouchEvent(e: MapLayerMouseEvent | MapLayerTouchEvent): boolean;
    abstract register(): void;
    abstract unregister(): void;
    abstract setModel(model: DrawModel | undefined): void;
    abstract onOptionsUpdate(): void;
}
