leaflet-polydraw 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENCE +21 -0
  2. package/README.md +1006 -0
  3. package/dist/icons/icon-activate.svg +1 -0
  4. package/dist/icons/icon-add-elbow.svg +128 -0
  5. package/dist/icons/icon-bbox.svg +47 -0
  6. package/dist/icons/icon-bezier.svg +132 -0
  7. package/dist/icons/icon-draw.svg +1 -0
  8. package/dist/icons/icon-erase.svg +3 -0
  9. package/dist/icons/icon-info-white.svg +25 -0
  10. package/dist/icons/icon-settings-white.svg +15 -0
  11. package/dist/icons/icon-simplify.svg +61 -0
  12. package/dist/icons/icon-simplify2.svg +46 -0
  13. package/dist/icons/icon-subtract.svg +1 -0
  14. package/dist/icons/icon-trash-hover-white.svg +16 -0
  15. package/dist/icons/icon-trash-white.svg +16 -0
  16. package/dist/leaflet-polydraw.css +1 -0
  17. package/dist/polydraw.es.js +20688 -0
  18. package/dist/polydraw.es.js.map +1 -0
  19. package/dist/polydraw.umd.min.js +2 -0
  20. package/dist/polydraw.umd.min.js.map +1 -0
  21. package/dist/styles/polydraw.css +419 -0
  22. package/dist/types/buttons.d.ts +14 -0
  23. package/dist/types/buttons.d.ts.map +1 -0
  24. package/dist/types/coordinate-utils.d.ts +21 -0
  25. package/dist/types/coordinate-utils.d.ts.map +1 -0
  26. package/dist/types/enums.d.ts +27 -0
  27. package/dist/types/enums.d.ts.map +1 -0
  28. package/dist/types/geometry-utils.d.ts +24 -0
  29. package/dist/types/geometry-utils.d.ts.map +1 -0
  30. package/dist/types/icon-factory.d.ts +13 -0
  31. package/dist/types/icon-factory.d.ts.map +1 -0
  32. package/dist/types/index.d.ts +1 -0
  33. package/dist/types/managers/mode-manager.d.ts +91 -0
  34. package/dist/types/managers/mode-manager.d.ts.map +1 -0
  35. package/dist/types/managers/polygon-draw-manager.d.ts +88 -0
  36. package/dist/types/managers/polygon-draw-manager.d.ts.map +1 -0
  37. package/dist/types/managers/polygon-geometry-manager.d.ts +75 -0
  38. package/dist/types/managers/polygon-geometry-manager.d.ts.map +1 -0
  39. package/dist/types/managers/polygon-interaction-manager.d.ts +116 -0
  40. package/dist/types/managers/polygon-interaction-manager.d.ts.map +1 -0
  41. package/dist/types/managers/polygon-mutation-manager.d.ts +163 -0
  42. package/dist/types/managers/polygon-mutation-manager.d.ts.map +1 -0
  43. package/dist/types/map-state.d.ts +22 -0
  44. package/dist/types/map-state.d.ts.map +1 -0
  45. package/dist/types/polydraw.d.ts +87 -0
  46. package/dist/types/polydraw.d.ts.map +1 -0
  47. package/dist/types/polygon-helpers.d.ts +35 -0
  48. package/dist/types/polygon-helpers.d.ts.map +1 -0
  49. package/dist/types/polygon-information.service.d.ts +27 -0
  50. package/dist/types/polygon-information.service.d.ts.map +1 -0
  51. package/dist/types/polygon.util.d.ts +32 -0
  52. package/dist/types/polygon.util.d.ts.map +1 -0
  53. package/dist/types/turf-helper.d.ts +141 -0
  54. package/dist/types/turf-helper.d.ts.map +1 -0
  55. package/dist/types/types/polydraw-interfaces.d.ts +351 -0
  56. package/dist/types/types/polydraw-interfaces.d.ts.map +1 -0
  57. package/dist/types/utils.d.ts +57 -0
  58. package/dist/types/utils.d.ts.map +1 -0
  59. package/package.json +79 -0
@@ -0,0 +1,88 @@
1
+ import * as L from 'leaflet';
2
+ import { TurfHelper } from '../turf-helper';
3
+ import type { Feature, Polygon, MultiPolygon } from 'geojson';
4
+ import type { PolydrawConfig } from '../types/polydraw-interfaces';
5
+ import { ModeManager } from './mode-manager';
6
+ export interface DrawResult {
7
+ success: boolean;
8
+ polygon?: Feature<Polygon | MultiPolygon>;
9
+ error?: string;
10
+ }
11
+ export interface PolygonDrawManagerDependencies {
12
+ turfHelper: TurfHelper;
13
+ map: L.Map;
14
+ config: PolydrawConfig;
15
+ modeManager: ModeManager;
16
+ tracer: L.Polyline;
17
+ }
18
+ /**
19
+ * PolygonDrawManager handles all user-facing drawing actions.
20
+ * This includes freehand drawing and point-to-point drawing functionality.
21
+ */
22
+ export declare class PolygonDrawManager {
23
+ private turfHelper;
24
+ private map;
25
+ private config;
26
+ private modeManager;
27
+ private tracer;
28
+ private eventListeners;
29
+ private p2pMarkers;
30
+ constructor(dependencies: PolygonDrawManagerDependencies);
31
+ /**
32
+ * Add event listener
33
+ */
34
+ on(event: string, callback: (...args: any[]) => void): void;
35
+ /**
36
+ * Emit event to all listeners
37
+ */
38
+ private emit;
39
+ /**
40
+ * Handle mouse move during freehand drawing
41
+ */
42
+ mouseMove(event: L.LeafletMouseEvent | TouchEvent): void;
43
+ /**
44
+ * Handle mouse up/leave to complete freehand drawing
45
+ */
46
+ mouseUpLeave(event: any): Promise<DrawResult>;
47
+ /**
48
+ * Handle point-to-point click
49
+ */
50
+ handlePointToPointClick(clickLatLng: L.LatLng): void;
51
+ /**
52
+ * Handle double-click to complete point-to-point polygon
53
+ */
54
+ handleDoubleClick(e: L.LeafletMouseEvent): void;
55
+ /**
56
+ * Complete point-to-point polygon drawing
57
+ */
58
+ completePointToPointPolygon(): void;
59
+ /**
60
+ * Cancel point-to-point drawing
61
+ */
62
+ cancelPointToPointDrawing(): void;
63
+ /**
64
+ * Clear all P2P markers
65
+ */
66
+ clearP2pMarkers(): void;
67
+ /**
68
+ * Reset the tracer
69
+ */
70
+ resetTracer(): void;
71
+ /**
72
+ * Check if clicking on the first point to close polygon
73
+ */
74
+ private isClickingFirstPoint;
75
+ /**
76
+ * Get current P2P markers (for external access)
77
+ */
78
+ getP2pMarkers(): L.Marker[];
79
+ /**
80
+ * Check if currently in point-to-point drawing mode
81
+ */
82
+ isInPointToPointMode(): boolean;
83
+ /**
84
+ * Get current tracer points count
85
+ */
86
+ getTracerPointsCount(): number;
87
+ }
88
+ //# sourceMappingURL=polygon-draw-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-draw-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/polygon-draw-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,UAAU,CAAC;IACvB,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACX,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,cAAc,CAAwD;IAG9E,OAAO,CAAC,UAAU,CAAkB;gBAExB,YAAY,EAAE,8BAA8B;IASxD;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAQ3D;;OAEG;IACH,OAAO,CAAC,IAAI;IAQZ;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,iBAAiB,GAAG,UAAU,GAAG,IAAI;IAaxD;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;IAsDnD;;OAEG;IACH,uBAAuB,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI;IAyIpD;;OAEG;IACH,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,iBAAiB,GAAG,IAAI;IAe/C;;OAEG;IACH,2BAA2B,IAAI,IAAI;IAkEnC;;OAEG;IACH,yBAAyB,IAAI,IAAI;IAOjC;;OAEG;IACH,eAAe,IAAI,IAAI;IAMvB;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0C5B;;OAEG;IACH,aAAa,IAAI,CAAC,CAAC,MAAM,EAAE;IAK3B;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAK/B;;OAEG;IACH,oBAAoB,IAAI,MAAM;CAK/B"}
@@ -0,0 +1,75 @@
1
+ import { TurfHelper } from '../turf-helper';
2
+ import type { Feature, Polygon, MultiPolygon } from 'geojson';
3
+ import type { PolydrawConfig } from '../types/polydraw-interfaces';
4
+ export interface GeometryOperationResult {
5
+ success: boolean;
6
+ result?: Feature<Polygon | MultiPolygon>;
7
+ results?: Feature<Polygon | MultiPolygon>[];
8
+ error?: string;
9
+ }
10
+ export interface PolygonGeometryManagerDependencies {
11
+ turfHelper: TurfHelper;
12
+ config: PolydrawConfig;
13
+ }
14
+ /**
15
+ * PolygonGeometryManager handles pure geometric calculations without any direct map interaction.
16
+ * This includes merging, subtracting, simplifying, and other geometric operations on polygons.
17
+ */
18
+ export declare class PolygonGeometryManager {
19
+ private turfHelper;
20
+ private config;
21
+ constructor(dependencies: PolygonGeometryManagerDependencies);
22
+ /**
23
+ * Check if two polygons intersect using multiple detection methods
24
+ */
25
+ checkPolygonIntersection(polygon1: Feature<Polygon | MultiPolygon>, polygon2: Feature<Polygon | MultiPolygon>): boolean;
26
+ /**
27
+ * Perform union operation on multiple polygons
28
+ */
29
+ unionPolygons(polygons: Feature<Polygon | MultiPolygon>[], newPolygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
30
+ /**
31
+ * Perform subtraction operation
32
+ */
33
+ subtractPolygon(existingPolygon: Feature<Polygon | MultiPolygon>, subtractPolygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
34
+ /**
35
+ * Simplify a polygon by removing every other point
36
+ */
37
+ simplifyPolygon(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
38
+ /**
39
+ * Convert polygon to bounding box
40
+ */
41
+ convertToBoundingBox(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
42
+ /**
43
+ * Apply bezier curve to polygon
44
+ */
45
+ bezierifyPolygon(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
46
+ /**
47
+ * Double the elbows of a polygon
48
+ */
49
+ doubleElbowsPolygon(latlngs: L.LatLngLiteral[]): GeometryOperationResult;
50
+ /**
51
+ * Helper method to get polygon center
52
+ */
53
+ private getPolygonCenter;
54
+ /**
55
+ * Helper method to get bounding box from polygon
56
+ */
57
+ private getBoundingBox;
58
+ /**
59
+ * Determine if two polygons should create a donut instead of a regular union
60
+ */
61
+ private shouldCreateDonutPolygon;
62
+ /**
63
+ * Create a donut polygon from two intersecting polygons
64
+ */
65
+ private createDonutPolygon;
66
+ /**
67
+ * Create donut when one polygon is completely within another
68
+ */
69
+ private createDonutFromContainment;
70
+ /**
71
+ * Create donut from intersecting polygons (C-to-O scenario)
72
+ */
73
+ private createDonutFromIntersection;
74
+ }
75
+ //# sourceMappingURL=polygon-geometry-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-geometry-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/polygon-geometry-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kCAAkC;IACjD,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;gBAEnB,YAAY,EAAE,kCAAkC;IAM5D;;OAEG;IACH,wBAAwB,CACtB,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,EACzC,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GACxC,OAAO;IAiGV;;OAEG;IACH,aAAa,CACX,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,EAC3C,UAAU,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAC1C,uBAAuB;IAsC1B;;OAEG;IACH,eAAe,CACb,eAAe,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,EAChD,eAAe,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAC/C,uBAAuB;IAgC1B;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,uBAAuB;IAiDlF;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,uBAAuB;IAgBvF;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,uBAAuB;IAiBnF;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,GAAG,uBAAuB;IAoBxE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqDxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwDtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA8BlC;;OAEG;IACH,OAAO,CAAC,2BAA2B;CA0BpC"}
@@ -0,0 +1,116 @@
1
+ import * as L from 'leaflet';
2
+ import { TurfHelper } from '../turf-helper';
3
+ import { PolygonInformationService } from '../polygon-information.service';
4
+ import type { Feature, Polygon, MultiPolygon } from 'geojson';
5
+ import type { PolydrawConfig } from '../types/polydraw-interfaces';
6
+ import { ModeManager } from './mode-manager';
7
+ export interface InteractionResult {
8
+ success: boolean;
9
+ featureGroups?: L.FeatureGroup[];
10
+ error?: string;
11
+ }
12
+ export interface PolygonInteractionManagerDependencies {
13
+ turfHelper: TurfHelper;
14
+ polygonInformation: PolygonInformationService;
15
+ map: L.Map;
16
+ config: PolydrawConfig;
17
+ modeManager: ModeManager;
18
+ }
19
+ /**
20
+ * PolygonInteractionManager handles all interactions with existing polygons.
21
+ * This includes dragging polygons, dragging markers, edge interactions, and popup menus.
22
+ */
23
+ export declare class PolygonInteractionManager {
24
+ private turfHelper;
25
+ private polygonInformation;
26
+ private map;
27
+ private config;
28
+ private modeManager;
29
+ private eventListeners;
30
+ private currentDragPolygon;
31
+ private currentModifierDragMode;
32
+ private isModifierKeyHeld;
33
+ private getFeatureGroups;
34
+ private addFeatureGroup;
35
+ private removeFeatureGroup;
36
+ constructor(dependencies: PolygonInteractionManagerDependencies, featureGroupAccess: {
37
+ getFeatureGroups: () => L.FeatureGroup[];
38
+ addFeatureGroup: (fg: L.FeatureGroup) => void;
39
+ removeFeatureGroup: (fg: L.FeatureGroup) => void;
40
+ });
41
+ /**
42
+ * Add event listener
43
+ */
44
+ on(event: string, callback: (...args: any[]) => void): void;
45
+ /**
46
+ * Emit event to all listeners
47
+ */
48
+ private emit;
49
+ /**
50
+ * Add markers to a polygon feature group
51
+ */
52
+ addMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
53
+ /**
54
+ * Add hole markers to a polygon feature group
55
+ */
56
+ addHoleMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
57
+ /**
58
+ * Add edge click listeners to a polygon
59
+ */
60
+ addEdgeClickListeners(polygon: L.Polygon, featureGroup: L.FeatureGroup): void;
61
+ /**
62
+ * Enable polygon dragging functionality
63
+ */
64
+ enablePolygonDragging(polygon: any, latlngs: Feature<Polygon | MultiPolygon>): void;
65
+ /**
66
+ * Update marker draggable state based on current mode
67
+ */
68
+ updateMarkerDraggableState(): void;
69
+ /**
70
+ * Update all markers for edge deletion visual feedback
71
+ */
72
+ updateAllMarkersForEdgeDeletion(showFeedback: boolean): void;
73
+ /**
74
+ * Update individual marker for edge deletion visual feedback
75
+ */
76
+ updateMarkerForEdgeDeletion(marker: L.Marker, showFeedback: boolean): void;
77
+ /**
78
+ * Set modifier key held state
79
+ */
80
+ setModifierKeyHeld(isHeld: boolean): void;
81
+ private onEdgeClick;
82
+ private highlightEdgeOnHover;
83
+ private elbowClicked;
84
+ private findFeatureGroupForPoly;
85
+ private markerDrag;
86
+ private markerDragEnd;
87
+ private onPolygonMouseMove;
88
+ private onPolygonMouseUp;
89
+ private offsetPolygonCoordinates;
90
+ private updateMarkersAndHoleLinesDuringDrag;
91
+ private updatePolygonAfterDrag;
92
+ private detectModifierKey;
93
+ private setSubtractVisualMode;
94
+ private updateMarkerColorsForSubtractMode;
95
+ private handleModifierToggleDuringDrag;
96
+ private isModifierDragActive;
97
+ private performModifierSubtract;
98
+ /**
99
+ * Check if two bounding boxes overlap
100
+ */
101
+ private boundingBoxesOverlap;
102
+ private isModifierKeyPressed;
103
+ private onMarkerHoverForEdgeDeletion;
104
+ private onMarkerHoverForEdgeDeletionEvent;
105
+ private onMarkerLeaveForEdgeDeletionEvent;
106
+ private getMarkerIndex;
107
+ private ensureMarkerSeparation;
108
+ private findAlternativeMarkerPosition;
109
+ private createDivIcon;
110
+ private getLatLngInfoString;
111
+ private generateMenuMarkerPopup;
112
+ private getPolygonGeoJSONFromFeatureGroup;
113
+ private getTotalPolygonPerimeter;
114
+ private generateInfoMarkerPopup;
115
+ }
116
+ //# sourceMappingURL=polygon-interaction-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-interaction-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/polygon-interaction-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ import * as L from 'leaflet';
2
+ import { TurfHelper } from '../turf-helper';
3
+ import { PolygonInformationService } from '../polygon-information.service';
4
+ import type { Feature, Polygon, MultiPolygon } from 'geojson';
5
+ import type { PolydrawConfig } from '../types/polydraw-interfaces';
6
+ import { ModeManager } from './mode-manager';
7
+ import { PolygonInteractionManager } from './polygon-interaction-manager';
8
+ export interface MutationResult {
9
+ success: boolean;
10
+ featureGroups?: L.FeatureGroup[];
11
+ error?: string;
12
+ }
13
+ export interface AddPolygonOptions {
14
+ simplify?: boolean;
15
+ noMerge?: boolean;
16
+ dynamicTolerance?: boolean;
17
+ visualOptimizationLevel?: number;
18
+ }
19
+ export interface MutationManagerDependencies {
20
+ turfHelper: TurfHelper;
21
+ polygonInformation: PolygonInformationService;
22
+ map: L.Map;
23
+ config: PolydrawConfig;
24
+ modeManager: ModeManager;
25
+ getFeatureGroups: () => L.FeatureGroup[];
26
+ }
27
+ /**
28
+ * PolygonMutationManager acts as a facade that coordinates between specialized managers.
29
+ * It maintains the arrayOfFeatureGroups as the single source of truth and delegates
30
+ * operations to the appropriate specialized managers.
31
+ */
32
+ export declare class PolygonMutationManager {
33
+ private turfHelper;
34
+ private polygonInformation;
35
+ private map;
36
+ private config;
37
+ private modeManager;
38
+ private getFeatureGroups;
39
+ private eventListeners;
40
+ private geometryManager;
41
+ private drawManager;
42
+ private interactionManager;
43
+ constructor(dependencies: MutationManagerDependencies);
44
+ /**
45
+ * Initialize the three specialized managers
46
+ */
47
+ private initializeSpecializedManagers;
48
+ /**
49
+ * Set up event forwarding from specialized managers to facade
50
+ */
51
+ private setupEventForwarding;
52
+ /**
53
+ * Handle draw completion from draw manager
54
+ */
55
+ private handleDrawCompleted;
56
+ /**
57
+ * Handle polygon modification from interaction manager
58
+ */
59
+ private handlePolygonModified;
60
+ /**
61
+ * Handle menu actions from interaction manager
62
+ */
63
+ private handleMenuAction;
64
+ /**
65
+ * Get the polygon interaction manager (for testing)
66
+ */
67
+ get polygonInteractionManager(): PolygonInteractionManager;
68
+ /**
69
+ * Add event listener
70
+ */
71
+ on(event: string, callback: (...args: any[]) => void): void;
72
+ /**
73
+ * Emit event to all listeners
74
+ */
75
+ private emit;
76
+ /**
77
+ * Add a polygon with optional merging logic
78
+ */
79
+ addPolygon(latlngs: Feature<Polygon | MultiPolygon>, options?: AddPolygonOptions): Promise<MutationResult>;
80
+ /**
81
+ * Subtract a polygon from existing polygons
82
+ */
83
+ subtractPolygon(latlngs: Feature<Polygon | MultiPolygon>): Promise<MutationResult>;
84
+ /**
85
+ * Create and add a polygon layer with all markers and interactions
86
+ */
87
+ private addPolygonLayer;
88
+ /**
89
+ * Merge a polygon with existing intersecting polygons
90
+ */
91
+ private mergePolygon;
92
+ /**
93
+ * Union multiple polygons together using geometry manager
94
+ */
95
+ private unionPolygons;
96
+ /**
97
+ * Create a polygon from GeoJSON feature
98
+ */
99
+ private getPolygon;
100
+ /**
101
+ * Internal method to add feature group to array
102
+ */
103
+ private addFeatureGroupInternal;
104
+ /**
105
+ * Internal method to remove feature group from array and map
106
+ */
107
+ private removeFeatureGroupInternal;
108
+ /**
109
+ * Update marker draggable state
110
+ */
111
+ updateMarkerDraggableState(): void;
112
+ /**
113
+ * Update all markers for edge deletion visual feedback
114
+ */
115
+ updateAllMarkersForEdgeDeletion(showFeedback: boolean): void;
116
+ /**
117
+ * Set modifier key held state
118
+ */
119
+ setModifierKeyHeld(isHeld: boolean): void;
120
+ /**
121
+ * Check if two polygons intersect (delegates to geometry manager)
122
+ */
123
+ checkPolygonIntersection(polygon1: Feature<Polygon | MultiPolygon>, polygon2: Feature<Polygon | MultiPolygon>): boolean;
124
+ /**
125
+ * Get polygon center (delegates to geometry manager)
126
+ */
127
+ getPolygonCenter(polygon: Feature<Polygon | MultiPolygon>): {
128
+ lat: number;
129
+ lng: number;
130
+ } | null;
131
+ /**
132
+ * Get bounding box from polygon (delegates to geometry manager)
133
+ */
134
+ getBoundingBox(polygon: Feature<Polygon | MultiPolygon>): {
135
+ minLat: number;
136
+ maxLat: number;
137
+ minLng: number;
138
+ maxLng: number;
139
+ } | null;
140
+ addMarker(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
141
+ addHoleMarker(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
142
+ addEdgeClickListeners(polygon: L.Polygon, featureGroup: L.FeatureGroup): void;
143
+ enablePolygonDragging(polygon: any, latlngs: Feature<Polygon | MultiPolygon>): void;
144
+ getMarkerIndex(latlngs: L.LatLngLiteral[], position: any): number;
145
+ ensureMarkerSeparation(polygonLength: number, markers: any): any;
146
+ findAlternativeMarkerPosition(polygonLength: number, originalIndex: number, usedIndices: Set<number>): number;
147
+ createDivIcon(processedClasses: string[]): L.DivIcon;
148
+ getLatLngInfoString(latlng: L.LatLngLiteral): string;
149
+ generateMenuMarkerPopup(latLngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): HTMLDivElement;
150
+ getPolygonGeoJSONFromFeatureGroup(featureGroup: L.FeatureGroup): Feature<Polygon | MultiPolygon>;
151
+ getTotalPolygonPerimeter(polygonGeoJSON: Feature<Polygon | MultiPolygon>): number;
152
+ generateInfoMarkerPopup(area: number, perimeter: number): HTMLDivElement;
153
+ onMarkerHoverForEdgeDeletion(marker: L.Marker, isHovering: boolean): void;
154
+ highlightEdgeOnHover(edgePolyline: L.Polyline, isHovering: boolean): void;
155
+ onEdgeClick(e: L.LeafletMouseEvent, edgePolyline: L.Polyline): void;
156
+ removeFeatureGroup(featureGroup: L.FeatureGroup): void;
157
+ onPolygonMouseMove(e: L.LeafletMouseEvent): void;
158
+ onPolygonMouseUp(e: L.LeafletMouseEvent): void;
159
+ updatePolygonAfterDrag(polygon: any): void;
160
+ setSubtractVisualMode(polygon: any, enabled: boolean): void;
161
+ performModifierSubtract(draggedGeoJSON: any, originalFeatureGroup: L.FeatureGroup): void;
162
+ }
163
+ //# sourceMappingURL=polygon-mutation-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-mutation-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/polygon-mutation-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import * as L from 'leaflet';
2
+ /**
3
+ * Service for managing map state and notifying listeners.
4
+ */
5
+ export declare class MapStateService {
6
+ private map;
7
+ private mapListeners;
8
+ constructor();
9
+ onMapUpdated(callback: (map: L.Map) => void): void;
10
+ private emitMapUpdated;
11
+ /**
12
+ * Updates the current map state and notifies listeners.
13
+ * @param map The Leaflet map instance.
14
+ */
15
+ updateMapState(map: L.Map): void;
16
+ /**
17
+ * Updates the polygons in the map state.
18
+ * @param polygons Array of polygons.
19
+ */
20
+ updatePolygons(polygons: L.LatLngLiteral[][][]): void;
21
+ }
22
+ //# sourceMappingURL=map-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-state.d.ts","sourceRoot":"","sources":["../../src/map-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,YAAY,CAAgC;;IAMpD,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,IAAI;IAKlD,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI;IAKhC;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,GAAG,IAAI;CAGtD"}
@@ -0,0 +1,87 @@
1
+ import * as L from 'leaflet';
2
+ import { DrawMode } from './enums';
3
+ import './styles/polydraw.css';
4
+ import type { PolydrawConfig, DrawModeChangeHandler } from './types/polydraw-interfaces';
5
+ declare class Polydraw extends L.Control {
6
+ private map;
7
+ private tracer;
8
+ private turfHelper;
9
+ private subContainer?;
10
+ private config;
11
+ private mapStateService;
12
+ private polygonInformation;
13
+ private modeManager;
14
+ private polygonMutationManager;
15
+ private arrayOfFeatureGroups;
16
+ private p2pMarkers;
17
+ private drawMode;
18
+ private drawModeListeners;
19
+ private _boundKeyDownHandler;
20
+ private _boundKeyUpHandler;
21
+ private isModifierKeyHeld;
22
+ constructor(options?: L.ControlOptions & {
23
+ config?: PolydrawConfig;
24
+ configPath?: string;
25
+ });
26
+ private loadExternalConfig;
27
+ private initializeComponents;
28
+ onAdd(_map: L.Map): HTMLElement;
29
+ addTo(map: L.Map): this;
30
+ getFeatureGroups(): L.FeatureGroup[];
31
+ onRemove(_map: L.Map): void;
32
+ addPredefinedPolygon(geographicBorders: L.LatLng[][][], options?: {
33
+ visualOptimizationLevel?: number;
34
+ }): Promise<void>;
35
+ setDrawMode(mode: DrawMode): void;
36
+ getDrawMode(): DrawMode;
37
+ onDrawModeChangeListener(callback: DrawModeChangeHandler): void;
38
+ offDrawModeChangeListener(callback: DrawModeChangeHandler): void;
39
+ private emitDrawModeChanged;
40
+ /**
41
+ * Update the draggable state of all existing markers when draw mode changes
42
+ */
43
+ private updateMarkerDraggableState;
44
+ removeAllFeatureGroups(): void;
45
+ private stopDraw;
46
+ private setLeafletMapEvents;
47
+ private resetTracker;
48
+ private drawStartedEvents;
49
+ private mouseMove;
50
+ private mouseUpLeave;
51
+ private events;
52
+ private mouseDown;
53
+ private startDraw;
54
+ private setupKeyboardHandlers;
55
+ private removeKeyboardHandlers;
56
+ private handleKeyDown;
57
+ private handleKeyUp;
58
+ /**
59
+ * Update all markers to show/hide edge deletion visual feedback
60
+ */
61
+ private updateAllMarkersForEdgeDeletion;
62
+ /**
63
+ * Update individual marker for edge deletion visual feedback
64
+ */
65
+ private updateMarkerForEdgeDeletion;
66
+ /**
67
+ * Handle marker hover when modifier key is held - event handler version
68
+ */
69
+ private onMarkerHoverForEdgeDeletionEvent;
70
+ /**
71
+ * Handle marker leave when modifier key is held - event handler version
72
+ */
73
+ private onMarkerLeaveForEdgeDeletionEvent;
74
+ private cancelPointToPointDrawing;
75
+ private handlePointToPointClick;
76
+ private isClickingFirstPoint;
77
+ private handleDoubleClick;
78
+ private completePointToPointPolygon;
79
+ private clearP2pMarkers;
80
+ /**
81
+ * Detect if modifier key is pressed (Ctrl on Windows/Linux, Cmd on Mac)
82
+ */
83
+ private isModifierKeyPressed;
84
+ private updateActivateButtonIndicator;
85
+ }
86
+ export default Polydraw;
87
+ //# sourceMappingURL=polydraw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polydraw.d.ts","sourceRoot":"","sources":["../../src/polydraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAkB,MAAM,SAAS,CAAC;AAQnD,OAAO,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzF,cAAM,QAAS,SAAQ,CAAC,CAAC,OAAO;IAC9B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,oBAAoB,CAAwB;IACpD,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,iBAAiB,CAAkB;gBAE/B,OAAO,CAAC,EAAE,CAAC,CAAC,cAAc,GAAG;QAAE,MAAM,CAAC,EAAE,cAAc,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;YAiB3E,kBAAkB;IA8BhC,OAAO,CAAC,oBAAoB;IAe5B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,WAAW;IAsMxB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI;IAMvB,gBAAgB,IAAI,CAAC,CAAC,YAAY,EAAE;IAI3C,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;IASP,oBAAoB,CAC/B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EACjC,OAAO,CAAC,EAAE;QAAE,uBAAuB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC,IAAI,CAAC;IAoDhB,WAAW,CAAC,IAAI,EAAE,QAAQ;IA4E1B,WAAW,IAAI,QAAQ;IAKhB,wBAAwB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAK/D,yBAAyB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAQvE,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA4BlC,sBAAsB;IAgBtB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,SAAS;YAaH,YAAY;IAwE1B,OAAO,CAAC,MAAM;IAuBd,OAAO,CAAC,SAAS;IAgCjB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAWvC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkBnC;;OAEG;IACH,OAAO,CAAC,iCAAiC,CAUvC;IAEF;;OAEG;IACH,OAAO,CAAC,iCAAiC,CAQvC;IAEF,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,uBAAuB;IAyI/B,OAAO,CAAC,oBAAoB;IA0C5B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,2BAA2B;IAmEnC,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,6BAA6B;CAmBtC;AASD,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import * as L from 'leaflet';
2
+ /**
3
+ * Class to hold information about a polygon, including area, perimeter, and trashcan point.
4
+ */
5
+ export declare class PolygonInfo {
6
+ polygon: L.LatLngLiteral[][][];
7
+ trashcanPoint: L.LatLngLiteral[];
8
+ sqmArea: number[];
9
+ perimeter: number[];
10
+ constructor(polygon: any);
11
+ setSqmArea(area: number): void;
12
+ private getTrashcanPoint;
13
+ private calculatePolygonArea;
14
+ private calculatePolygonPerimeter;
15
+ }
16
+ /**
17
+ * Class to manage the state of polygon drawing.
18
+ */
19
+ export declare class PolygonDrawStates {
20
+ isActivated: boolean;
21
+ isFreeDrawMode: boolean;
22
+ isMoveMode: boolean;
23
+ canRevert: boolean;
24
+ isAuto: boolean;
25
+ hasPolygons: boolean;
26
+ canUsePolyDraw: boolean;
27
+ constructor();
28
+ activate(): void;
29
+ reset(): void;
30
+ resetDrawModes(): void;
31
+ setFreeDrawMode(isAuto?: boolean): void;
32
+ setMoveMode(): void;
33
+ forceCanUseFreeDraw(): void;
34
+ }
35
+ //# sourceMappingURL=polygon-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-helpers.d.ts","sourceRoot":"","sources":["../../src/polygon-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,CAAM;IACpC,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,CAAM;IACtC,OAAO,EAAE,MAAM,EAAE,CAAM;IACvB,SAAS,EAAE,MAAM,EAAE,CAAM;gBACb,OAAO,KAAA;IAyDnB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAG9B,OAAO,CAAC,gBAAgB;IAuDxB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,yBAAyB;CAIlC;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;;IAOxB,QAAQ,IAAI,IAAI;IAKhB,KAAK,IAAI,IAAI;IASb,cAAc,IAAI,IAAI;IAKtB,eAAe,CAAC,MAAM,GAAE,OAAe,GAAG,IAAI;IAa9C,WAAW,IAAI,IAAI;IAOnB,mBAAmB,IAAI,IAAI;CAG5B"}
@@ -0,0 +1,27 @@
1
+ import { PolygonInfo, PolygonDrawStates } from './polygon-helpers';
2
+ import { MapStateService } from './map-state';
3
+ import * as L from 'leaflet';
4
+ /**
5
+ * Service for managing polygon information and draw states.
6
+ */
7
+ export declare class PolygonInformationService {
8
+ mapStateService: MapStateService;
9
+ private polygonInfoListeners;
10
+ private polygonDrawStateListeners;
11
+ polygonInformationStorage: PolygonInfo[];
12
+ constructor(mapStateService: MapStateService);
13
+ onPolygonInfoUpdated(callback: (info: PolygonInfo[]) => void): void;
14
+ private emitPolygonInfoUpdated;
15
+ onPolygonDrawStateUpdated(callback: (state: PolygonDrawStates) => void): void;
16
+ private emitPolygonDrawStateUpdated;
17
+ /**
18
+ * Updates the polygons and notifies the map state service.
19
+ */
20
+ updatePolygons(): void;
21
+ saveCurrentState(): void;
22
+ deleteTrashcan(polygon: L.LatLngLiteral[][]): void;
23
+ deleteTrashCanOnMulti(polygon: L.LatLngLiteral[][][]): void;
24
+ deletePolygonInformationStorage(): void;
25
+ createPolygonInformationStorage(arrayOfFeatureGroups: any[]): void;
26
+ }
27
+ //# sourceMappingURL=polygon-information.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-information.service.d.ts","sourceRoot":"","sources":["../../src/polygon-information.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B;;GAEG;AACH,qBAAa,yBAAyB;IAMjB,eAAe,EAAE,eAAe;IALnD,OAAO,CAAC,oBAAoB,CAAyC;IACrE,OAAO,CAAC,yBAAyB,CAA8C;IAE/E,yBAAyB,EAAE,WAAW,EAAE,CAAM;gBAE3B,eAAe,EAAE,eAAe;IAEnD,oBAAoB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,IAAI;IAInE,OAAO,CAAC,sBAAsB;IAM9B,yBAAyB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IAI7E,OAAO,CAAC,2BAA2B;IAQnC;;OAEG;IACH,cAAc,IAAI,IAAI;IAqCtB,gBAAgB,IAAI,IAAI;IAKxB,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI;IAQlD,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,GAAG,IAAI;IA0B3D,+BAA+B,IAAI,IAAI;IAIvC,+BAA+B,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAG,IAAI;CAgBnE"}