leaflet-polydraw
Version:
Advanced Leaflet plugin for freehand polygon drawing, with smart merging and powerful editing tools. Compatible with both Leaflet v1.x and v2.x.
128 lines • 3.65 kB
TypeScript
import * as L from 'leaflet';
import { TurfHelper } from '../turf-helper';
import type { Feature, Polygon, MultiPolygon } from 'geojson';
import type { PolydrawConfig } from '../types/polydraw-interfaces';
import { ModeManager } from './mode-manager';
import { EventManager } from './event-manager';
export interface DrawResult {
success: boolean;
polygon?: Feature<Polygon | MultiPolygon>;
error?: string;
}
export interface PolygonDrawManagerDependencies {
turfHelper: TurfHelper;
map: L.Map;
config: PolydrawConfig;
modeManager: ModeManager;
eventManager: EventManager;
tracer: L.Polyline;
}
/**
* PolygonDrawManager handles all user-facing drawing actions.
* This includes freehand drawing and point-to-point drawing functionality.
*/
export declare class PolygonDrawManager {
private turfHelper;
private map;
private config;
private modeManager;
private eventManager;
private tracer;
private p2pMarkers;
private isModifierKeyHeld;
private markerModifierHandlers;
constructor(dependencies: PolygonDrawManagerDependencies);
/**
* Handle mouse move during freehand drawing
*/
mouseMove(event: L.LeafletMouseEvent | TouchEvent): void;
/**
* Handle mouse up/leave to complete freehand drawing
*/
mouseUpLeave(event: L.LeafletMouseEvent | TouchEvent): Promise<DrawResult>;
/**
* Handle point-to-point click
*/
/**
* Set the modifier key status
* @param isHeld - Whether the modifier key is held down
*/
setModifierKey(isHeld: boolean): void;
private shouldAllowP2PMarkerDeletion;
/**
* Handle point-to-point click
*/
handlePointToPointClick(clickLatLng: L.LatLng): void;
/**
* Handle double-click to complete point-to-point polygon
*/
handleDoubleClick(e: L.LeafletMouseEvent): void;
/**
* Handle double-tap to complete point-to-point polygon (touch devices)
*/
handleDoubleTap(event: TouchEvent): void;
/**
* Complete point-to-point polygon drawing
*/
completePointToPointPolygon(): void;
/**
* Cancel point-to-point drawing
*/
cancelPointToPointDrawing(): void;
/**
* Clear all P2P markers
*/
clearP2pMarkers(): void;
/**
* Reset the tracer
*/
resetTracer(): void;
/**
* Check if clicking on the first point to close polygon
*/
private isClickingFirstPoint;
/**
* Check if the current device supports touch
*/
private isTouchDevice;
/**
* Update the tracer polyline based on P2P markers
*/
private updateP2PTracer;
/**
* Delete a P2P marker
*/
private deleteP2PMarker;
/**
* Get current P2P markers (for external access)
*/
getP2pMarkers(): L.Marker[];
/**
* Check if currently in point-to-point drawing mode
*/
isInPointToPointMode(): boolean;
/**
* Get current tracer points count
*/
getTracerPointsCount(): number;
/**
* Set up the first marker with special properties
*/
private setupFirstMarker;
/**
* Toggle helper class for first marker when polygon can be closed.
*/
private updateFirstMarkerReadyState;
/**
* Refresh the first-marker ready state when draw mode changes.
*/
refreshP2PMarkerState(): void;
private applyP2PMarkerMode;
private updateP2PMarkerModes;
/**
* Handle marker hover for edge deletion feedback
*/
private onMarkerHoverForEdgeDeletion;
private detachMarkerModifierHandler;
}
//# sourceMappingURL=polygon-draw-manager.d.ts.map