UNPKG

@zvonimirsun/leaflet-geoman

Version:

A Leaflet Plugin For Editing Geometry Layers in Leaflet 1.0

1,533 lines (1,265 loc) 88.3 kB
import * as L from 'leaflet'; // redeclare module, maintains compatibility with @types/leaflet declare module 'leaflet' { /** * Extends built in leaflet Layer Options. */ interface LayerOptions { pmIgnore?: boolean; snapIgnore?: boolean; /** Layers can be excluded from splitting with splitMark: false and splitOnlyMarkedLayers: false. Or included with splitMark: true and splitOnlyMarkedLayers: true. ⭐ */ splitMark?: boolean; } /** * Extends built in leaflet Map Options. */ interface MapOptions { pmIgnore?: boolean; } /** * Extends built in leaflet Map. */ interface Map { pm: PM.PMMap; } /** * Extends built in leaflet Path. */ interface Path { pm: PM.PMLayer; } /** * Extends built in leaflet ImageOverlay. */ interface ImageOverlay { pm: PM.PMLayer; } /** * Extends built in leaflet LayerGroup. */ interface LayerGroup { pm: PM.PMLayerGroup; } /** * Extends built in leaflet MarkerOptions with options for Text-Layer */ interface MarkerOptions { textMarker?: boolean; text?: string; /** Centers the text around the marker. ⭐ */ textMarkerCentered?: boolean; } /** * Extends built in leaflet Marker. */ interface Marker { pm: PM.PMLayer; } /** * Extends @types/leaflet events... * * Todo: This is kind of a mess, and it makes all these event handlers show * up on Layers and Map. Leaflet itself is based around Evented, and @types/leaflet * makes this very hard to work around. * */ interface Evented { /****************************************** * * AVAILABLE ON MAP + LAYER, THESE ARE OK ON EVENTED. * ********************************************/ /** Fired when a layer is removed via Removal Mode. */ on(type: 'pm:remove', fn: PM.RemoveEventHandler): this; once(type: 'pm:remove', fn: PM.RemoveEventHandler): this; off(type: 'pm:remove', fn?: PM.RemoveEventHandler): this; /** Fired when the layer being cut. Draw+Edit Mode*/ on(type: 'pm:cut', fn: PM.CutEventHandler): this; once(type: 'pm:cut', fn: PM.CutEventHandler): this; off(type: 'pm:cut', fn?: PM.CutEventHandler): this; /** Fired when the layer being split. Draw+Edit Mode ⭐*/ on(type: 'pm:split', fn: PM.SplitEventHandler): this; once(type: 'pm:split', fn: PM.SplitEventHandler): this; off(type: 'pm:split', fn?: PM.SplitEventHandler): this; /** Fired when rotation is enabled for a layer. */ on(type: 'pm:rotateenable', fn: PM.RotateEnableEventHandler): this; once(type: 'pm:rotateenable', fn: PM.RotateEnableEventHandler): this; off(type: 'pm:rotateenable', fn?: PM.RotateEnableEventHandler): this; /** Fired when rotation is disabled for a layer. */ on(type: 'pm:rotatedisable', fn: PM.RotateDisableEventHandler): this; once(type: 'pm:rotatedisable', fn: PM.RotateDisableEventHandler): this; off(type: 'pm:rotatedisable', fn?: PM.RotateDisableEventHandler): this; /** Fired when rotation starts on a layer. */ on(type: 'pm:rotatestart', fn: PM.RotateStartEventHandler): this; once(type: 'pm:rotatestart', fn: PM.RotateStartEventHandler): this; off(type: 'pm:rotatestart', fn?: PM.RotateStartEventHandler): this; /** Fired when a layer is rotated. */ on(type: 'pm:rotate', fn: PM.RotateEventHandler): this; once(type: 'pm:rotate', fn: PM.RotateEventHandler): this; off(type: 'pm:rotate', fn?: PM.RotateEventHandler): this; /** Fired when rotation ends on a layer. */ on(type: 'pm:rotateend', fn: PM.RotateEndEventHandler): this; once(type: 'pm:rotateend', fn: PM.RotateEndEventHandler): this; off(type: 'pm:rotateend', fn?: PM.RotateEndEventHandler): this; /** Fired when scaling is enabled for a layer. */ on(type: 'pm:scaleenable', fn: PM.ScaleEnableEventHandler): this; once(type: 'pm:scaleenable', fn: PM.ScaleEnableEventHandler): this; off(type: 'pm:scaleenable', fn?: PM.ScaleEnableEventHandler): this; /** Fired when scaling is disabled for a layer. */ on(type: 'pm:scaledisable', fn: PM.ScaleDisableEventHandler): this; once(type: 'pm:scaledisable', fn: PM.ScaleDisableEventHandler): this; off(type: 'pm:scaledisable', fn?: PM.ScaleDisableEventHandler): this; /** Fired when scaling starts on a layer. */ on(type: 'pm:scalestart', fn: PM.ScaleStartEventHandler): this; once(type: 'pm:scalestart', fn: PM.ScaleStartEventHandler): this; off(type: 'pm:scalestart', fn?: PM.ScaleStartEventHandler): this; /** Fired when a layer is scaled. */ on(type: 'pm:scale', fn: PM.ScaleEventHandler): this; once(type: 'pm:scale', fn: PM.ScaleEventHandler): this; off(type: 'pm:scale', fn?: PM.ScaleEventHandler): this; /** Fired when scaling ends on a layer. */ on(type: 'pm:scaleend', fn: PM.ScaleEndEventHandler): this; once(type: 'pm:scaleend', fn: PM.ScaleEndEventHandler): this; off(type: 'pm:scaleend', fn?: PM.ScaleEndEventHandler): this; /****************************************** * * TODO: DRAW/EDIT MODE EVENTS LAYER ONLY * ********************************************/ /** Fired during a marker move/drag. */ on(type: 'pm:snapdrag', fn: PM.SnapEventHandler): this; once(type: 'pm:snapdrag', fn: PM.SnapEventHandler): this; off(type: 'pm:snapdrag', fn?: PM.SnapEventHandler): this; /** Fired when a vertex is snapped. */ on(type: 'pm:snap', fn: PM.SnapEventHandler): this; once(type: 'pm:snap', fn: PM.SnapEventHandler): this; off(type: 'pm:snap', fn?: PM.SnapEventHandler): this; /** Fired when a vertex is unsnapped. */ on(type: 'pm:unsnap', fn: PM.SnapEventHandler): this; once(type: 'pm:unsnap', fn: PM.SnapEventHandler): this; off(type: 'pm:unsnap', fn?: PM.SnapEventHandler): this; /** Called when the center of a circle is placed/moved. */ on(type: 'pm:centerplaced', fn: PM.CenterPlacedEventHandler): this; once(type: 'pm:centerplaced', fn: PM.CenterPlacedEventHandler): this; off(type: 'pm:centerplaced', fn?: PM.CenterPlacedEventHandler): this; /****************************************** * * TODO: CUT/EDIT MODE EVENTS LAYER ONLY * ********************************************/ /** Fired when a layer is edited. */ on(type: 'pm:edit', fn: PM.EditEventHandler): this; once(type: 'pm:edit', fn: PM.EditEventHandler): this; off(type: 'pm:edit', fn?: PM.EditEventHandler): this; /****************************************** * * TODO: DRAW MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Drawing Mode is toggled. */ on( type: 'pm:globaldrawmodetoggled', fn: PM.GlobalDrawModeToggledEventHandler, context?: any ): L.Evented; once( type: 'pm:globaldrawmodetoggled', fn: PM.GlobalDrawModeToggledEventHandler, context?: any ): L.Evented; off( type: 'pm:globaldrawmodetoggled', fn?: PM.GlobalDrawModeToggledEventHandler, context?: any ): L.Evented; /** Called when drawing mode is enabled. Payload includes the shape type and working layer. */ on( type: 'pm:drawstart', fn: PM.DrawStartEventHandler, context?: any ): L.Evented; once( type: 'pm:drawstart', fn: PM.DrawStartEventHandler, context?: any ): L.Evented; off( type: 'pm:drawstart', fn?: PM.DrawStartEventHandler, context?: any ): L.Evented; /** Called when drawing mode is disabled. Payload includes the shape type. */ on( type: 'pm:drawend', fn: PM.DrawEndEventHandler, context?: any ): L.Evented; once( type: 'pm:drawend', fn: PM.DrawEndEventHandler, context?: any ): L.Evented; off( type: 'pm:drawend', fn?: PM.DrawEndEventHandler, context?: any ): L.Evented; /** Called when drawing mode is disabled. Payload includes the shape type. */ on(type: 'pm:create', fn: PM.CreateEventHandler, context?: any): L.Evented; once( type: 'pm:create', fn: PM.CreateEventHandler, context?: any ): L.Evented; off( type: 'pm:create', fn?: PM.CreateEventHandler, context?: any ): L.Evented; /****************************************** * * TODO: DRAW MODE EVENTS ON LAYER ONLY * ********************************************/ /** Called when a new vertex is added. */ on(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler): this; once(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler): this; off(type: 'pm:vertexadded', fn?: PM.VertexAddedEventHandler): this; /****************************************** * * TODO: EDIT MODE EVENTS ON LAYER ONLY * ********************************************/ /** Fired when edit mode is disabled and a layer is edited and its coordinates have changed. */ on(type: 'pm:update', fn: PM.UpdateEventHandler): this; once(type: 'pm:update', fn: PM.UpdateEventHandler): this; off(type: 'pm:update', fn?: PM.UpdateEventHandler): this; /** Fired when edit mode on a layer is enabled. */ on(type: 'pm:enable', fn: PM.EnableEventHandler): this; once(type: 'pm:enable', fn: PM.EnableEventHandler): this; off(type: 'pm:enable', fn?: PM.EnableEventHandler): this; /** Fired when edit mode on a layer is disabled. */ on(type: 'pm:disable', fn: PM.DisableEventHandler): this; once(type: 'pm:disable', fn: PM.DisableEventHandler): this; off(type: 'pm:disable', fn?: PM.DisableEventHandler): this; /** Fired when a vertex is added. */ on(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler2): this; once(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler2): this; off(type: 'pm:vertexadded', fn?: PM.VertexAddedEventHandler2): this; /** Fired when a vertex is removed. */ on(type: 'pm:vertexremoved', fn: PM.VertexRemovedEventHandler): this; once(type: 'pm:vertexremoved', fn: PM.VertexRemovedEventHandler): this; off(type: 'pm:vertexremoved', fn?: PM.VertexRemovedEventHandler): this; /** Fired when a vertex is clicked. */ on(type: 'pm:vertexclick', fn: PM.VertexClickEventHandler): this; once(type: 'pm:vertexclick', fn: PM.VertexClickEventHandler): this; off(type: 'pm:vertexclick', fn?: PM.VertexClickEventHandler): this; /** Fired when dragging of a marker which corresponds to a vertex starts. */ on(type: 'pm:markerdragstart', fn: PM.MarkerDragStartEventHandler): this; once(type: 'pm:markerdragstart', fn: PM.MarkerDragStartEventHandler): this; off(type: 'pm:markerdragstart', fn?: PM.MarkerDragStartEventHandler): this; /** Fired when dragging a vertex-marker. */ on(type: 'pm:markerdrag', fn: PM.MarkerDragEventHandler): this; once(type: 'pm:markerdrag', fn: PM.MarkerDragEventHandler): this; off(type: 'pm:markerdrag', fn?: PM.MarkerDragEventHandler): this; /** Fired when dragging of a vertex-marker ends. */ on(type: 'pm:markerdragend', fn: PM.MarkerDragEndEventHandler): this; once(type: 'pm:markerdragend', fn: PM.MarkerDragEndEventHandler): this; off(type: 'pm:markerdragend', fn?: PM.MarkerDragEndEventHandler): this; /** Fired when coords of a layer are reset. E.g. by self-intersection. */ on(type: 'pm:layerreset', fn: PM.LayerResetEventHandler): this; once(type: 'pm:layerreset', fn: PM.LayerResetEventHandler): this; off(type: 'pm:layerreset', fn?: PM.LayerResetEventHandler): this; /** When allowSelfIntersection: false, this event is fired as soon as a self-intersection is detected. */ on(type: 'pm:intersect', fn: PM.IntersectEventHandler): this; once(type: 'pm:intersect', fn: PM.IntersectEventHandler): this; off(type: 'pm:intersect', fn?: PM.IntersectEventHandler): this; /** Fired coordinates of the layer changed. */ on(type: 'pm:change', fn: PM.ChangeEventHandler): this; once(type: 'pm:change', fn: PM.ChangeEventHandler): this; off(type: 'pm:change', fn?: PM.ChangeEventHandler): this; /** Fired when the text of a layer is changed. */ on(type: 'pm:textchange', fn: PM.TextChangeEventHandler): this; once(type: 'pm:textchange', fn: PM.TextChangeEventHandler): this; off(type: 'pm:textchange', fn?: PM.TextChangeEventHandler): this; /** Fired when the text layer is focused. */ on(type: 'pm:textfocus', fn: PM.TextFocusEventHandler): this; once(type: 'pm:textfocus', fn: PM.TextFocusEventHandler): this; off(type: 'pm:textfocus', fn?: PM.TextFocusEventHandler): this; /** Fired when the text layer is blurred. */ on(type: 'pm:textblur', fn: PM.TextBlurEventHandler): this; once(type: 'pm:textblur', fn: PM.TextBlurEventHandler): this; off(type: 'pm:textblur', fn?: PM.TextBlurEventHandler): this; /** Fired when the layer violates requireContainment. */ on( type: 'pm:containmentviolation', fn: PM.ContainmentViolationEventHandler ): this; once( type: 'pm:containmentviolation', fn: PM.ContainmentViolationEventHandler ): this; off( type: 'pm:containmentviolation', fn?: PM.ContainmentViolationEventHandler ): this; /** Fired when the layer violates preventIntersection. */ on( type: 'pm:intersectionviolation', fn: PM.IntersectionViolationEventHandler ): this; once( type: 'pm:intersectionviolation', fn: PM.IntersectionViolationEventHandler ): this; off( type: 'pm:intersectionviolation', fn?: PM.IntersectionViolationEventHandler ): this; /** Fired when the layer changes are canceled. */ on(type: 'pm:cancel', fn: PM.CancelEventHandler): this; once(type: 'pm:cancel', fn: PM.CancelEventHandler): this; off(type: 'pm:cancel', fn?: PM.CancelEventHandler): this; /** Fired when the layer removing is canceled and the layer is re-added to the map. */ on(type: 'pm:undoremove', fn: PM.UndoRemoveEventHandler): this; once(type: 'pm:undoremove', fn: PM.UndoRemoveEventHandler): this; off(type: 'pm:undoremove', fn?: PM.UndoRemoveEventHandler): this; /****************************************** * * TODO: EDIT MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Edit Mode is toggled. */ on( type: 'pm:globaleditmodetoggled', fn: PM.GlobalEditModeToggledEventHandler ): this; once( type: 'pm:globaleditmodetoggled', fn: PM.GlobalEditModeToggledEventHandler ): this; off( type: 'pm:globaleditmodetoggled', fn?: PM.GlobalEditModeToggledEventHandler ): this; /****************************************** * * TODO: DRAG MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Drag Mode is toggled. */ on( type: 'pm:globaldragmodetoggled', fn: PM.GlobalDragModeToggledEventHandler ): this; once( type: 'pm:globaldragmodetoggled', fn: PM.GlobalDragModeToggledEventHandler ): this; off( type: 'pm:globaldragmodetoggled', fn?: PM.GlobalDragModeToggledEventHandler ): this; /****************************************** * * TODO: DRAG MODE EVENTS ON LAYER ONLY * ********************************************/ /** Fired when a layer starts being dragged. */ on(type: 'pm:dragstart', fn: PM.DragStartEventHandler): this; once(type: 'pm:dragstart', fn: PM.DragStartEventHandler): this; off(type: 'pm:dragstart', fn?: PM.DragStartEventHandler): this; /** Fired when a layer is dragged. */ on(type: 'pm:drag', fn: PM.DragEventHandler): this; once(type: 'pm:drag', fn: PM.DragEventHandler): this; off(type: 'pm:drag', fn?: PM.DragEventHandler): this; /** Fired when a layer stops being dragged. */ on(type: 'pm:dragend', fn: PM.DragEndEventHandler): this; once(type: 'pm:dragend', fn: PM.DragEndEventHandler): this; off(type: 'pm:dragend', fn?: PM.DragEndEventHandler): this; /** Fired when drag mode on a layer is enabled. */ on(type: 'pm:dragenable', fn: PM.DragEnableEventHandler): this; once(type: 'pm:dragenable', fn: PM.DragEnableEventHandler): this; off(type: 'pm:dragenable', fn?: PM.DragEnableEventHandler): this; /** Fired when drag mode on a layer is disabled. */ on(type: 'pm:dragdisable', fn: PM.DragDisableEventHandler): this; once(type: 'pm:dragdisable', fn: PM.DragDisableEventHandler): this; off(type: 'pm:dragdisable', fn?: PM.DragDisableEventHandler): this; /****************************************** * * TODO: REMOVE MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Removal Mode is toggled. */ on( type: 'pm:globalremovalmodetoggled', fn: PM.GlobalRemovalModeToggledEventHandler ): this; once( type: 'pm:globalremovalmodetoggled', fn: PM.GlobalRemovalModeToggledEventHandler ): this; off( type: 'pm:globalremovalmodetoggled', fn?: PM.GlobalRemovalModeToggledEventHandler ): this; /****************************************** * * TODO: CUT MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when a layer is removed via Removal Mode. */ on( type: 'pm:globalcutmodetoggled', fn: PM.GlobalCutModeToggledEventHandler ): this; once( type: 'pm:globalcutmodetoggled', fn: PM.GlobalCutModeToggledEventHandler ): this; off( type: 'pm:globalcutmodetoggled', fn?: PM.GlobalCutModeToggledEventHandler ): this; /****************************************** * * TODO: ROTATE MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Rotate Mode is toggled. */ on( type: 'pm:globalrotatemodetoggled', fn: PM.GlobalRotateModeToggledEventHandler ): this; once( type: 'pm:globalrotatemodetoggled', fn: PM.GlobalRotateModeToggledEventHandler ): this; off( type: 'pm:globalrotatemodetoggled', fn?: PM.GlobalRotateModeToggledEventHandler ): this; /****************************************** * * TODO: Union MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Union Mode is toggled. */ on( type: 'pm:globalunionmodetoggled', fn: PM.GlobalUnionModeToggledEventHandler ): this; once( type: 'pm:globalunionmodetoggled', fn: PM.GlobalUnionModeToggledEventHandler ): this; off( type: 'pm:globalunionmodetoggled', fn?: PM.GlobalUnionModeToggledEventHandler ): this; /** Fired when Union is executed. */ on(type: 'pm:union', fn: PM.UnionEventHandler): this; once(type: 'pm:union', fn: PM.UnionEventHandler): this; off(type: 'pm:union', fn: PM.UnionEventHandler): this; /****************************************** * * TODO: Difference MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Difference Mode is toggled. */ on( type: 'pm:globaldifferencemodetoggled', fn: PM.GlobalDifferenceModeToggledEventHandler ): this; once( type: 'pm:globaldifferencemodetoggled', fn: PM.GlobalDifferenceModeToggledEventHandler ): this; off( type: 'pm:globaldifferencemodetoggled', fn?: PM.GlobalDifferenceModeToggledEventHandler ): this; /** Fired when Difference is executed. */ on(type: 'pm:difference', fn: PM.DifferenceEventHandler): this; once(type: 'pm:difference', fn: PM.DifferenceEventHandler): this; off(type: 'pm:difference', fn?: PM.DifferenceEventHandler): this; /****************************************** * * TODO: Selection MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when a layer is added to the selection. */ on(type: 'pm:selectionadd', fn: PM.SelectionEventHandler): this; once(type: 'pm:selectionadd', fn: PM.SelectionEventHandler): this; off(type: 'pm:selectionadd', fn: PM.SelectionEventHandler): this; /** Fired when a layer is removed from the selection. */ on(type: 'pm:selectionremove', fn: PM.SelectionEventHandler): this; once(type: 'pm:selectionremove', fn: PM.SelectionEventHandler): this; off(type: 'pm:selectionremove', fn: PM.SelectionEventHandler): this; /****************************************** * * TODO: BringTo MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when SendToBack Mode is toggled. */ on( type: 'pm:globalbringtobackmodetoggled', fn: PM.GlobalSendToBackModeToggledEventHandler ): this; once( type: 'pm:globalbringtobackmodetoggled', fn: PM.GlobalSendToBackModeToggledEventHandler ): this; off( type: 'pm:globalbringtobackmodetoggled', fn?: PM.GlobalSendToBackModeToggledEventHandler ): this; /** Fired when BringToFront Mode is toggled. */ on( type: 'pm:globalbringtofrontmodetoggled', fn: PM.GlobalBringToFrontModeToggledEventHandler ): this; once( type: 'pm:globalbringtofrontmodetoggled', fn: PM.GlobalBringToFrontModeToggledEventHandler ): this; off( type: 'pm:globalbringtofrontmodetoggled', fn?: PM.GlobalBringToFrontModeToggledEventHandler ): this; /****************************************** * * TODO: CopyLayer MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when CopyLayer Mode is toggled. */ on( type: 'pm:globalcopylayermodetoggled', fn: PM.GlobalCopyLayerModeToggledEventHandler ): this; once( type: 'pm:globalcopylayermodetoggled', fn: PM.GlobalCopyLayerModeToggledEventHandler ): this; off( type: 'pm:globalcopylayermodetoggled', fn?: PM.GlobalCopyLayerModeToggledEventHandler ): this; /** Fired when CopyLayer is executed. */ on(type: 'pm:copylayer', fn: PM.CopyLayerEventHandler): this; once(type: 'pm:copylayer', fn: PM.CopyLayerEventHandler): this; off(type: 'pm:copylayer', fn?: PM.CopyLayerEventHandler): this; /****************************************** * * TODO: LINE SIMPLIFICATION MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when CopyLayer Mode is toggled. */ on( type: 'pm:globallinesimplificationmodetoggled', fn: PM.GlobalLineSimplificationModeToggledEventHandler ): this; once( type: 'pm:globallinesimplificationmodetoggled', fn: PM.GlobalLineSimplificationModeToggledEventHandler ): this; off( type: 'pm:globallinesimplificationmodetoggled', fn?: PM.GlobalLineSimplificationModeToggledEventHandler ): this; /****************************************** * * TODO: Lasso MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Lasso Mode is toggled. */ on( type: 'pm:globallassomodetoggled', fn: PM.GlobalLassoModeToggledEventHandler ): this; once( type: 'pm:globallassomodetoggled', fn: PM.GlobalLassoModeToggledEventHandler ): this; off( type: 'pm:globallassomodetoggled', fn?: PM.GlobalLassoModeToggledEventHandler ): this; /** Fired when the Lasso has been drawn. */ on(type: 'pm:lasso-select', fn: PM.LassoSelectEventHandler): this; once(type: 'pm:lasso-select', fn: PM.LassoSelectEventHandler): this; off(type: 'pm:lasso-select', fn?: PM.LassoSelectEventHandler): this; /****************************************** * * TODO: TRANSLATION EVENTS ON MAP ONLY * ********************************************/ /** Standard Leaflet event. Fired when any layer is removed. */ on(type: 'pm:langchange', fn: PM.LangChangeEventHandler): this; once(type: 'pm:langchange', fn: PM.LangChangeEventHandler): this; off(type: 'pm:langchange', fn?: PM.LangChangeEventHandler): this; /****************************************** * * TODO: CONTROL EVENTS ON MAP ONLY * ********************************************/ /** Fired when a Toolbar button is clicked. */ on(type: 'pm:buttonclick', fn: PM.ButtonClickEventHandler): this; once(type: 'pm:buttonclick', fn: PM.ButtonClickEventHandler): this; off(type: 'pm:buttonclick', fn?: PM.ButtonClickEventHandler): this; /** Fired when a Toolbar action is clicked. */ on(type: 'pm:actionclick', fn: PM.ActionClickEventHandler): this; once(type: 'pm:actionclick', fn: PM.ActionClickEventHandler): this; off(type: 'pm:actionclick', fn?: PM.ActionClickEventHandler): this; /****************************************** * * TODO: Keyboard EVENT ON MAP ONLY * ********************************************/ /** Fired when `keydown` or `keyup` on the document is fired. */ on(type: 'pm:keyevent', fn: PM.KeyboardKeyEventHandler): this; once(type: 'pm:keyevent', fn: PM.KeyboardKeyEventHandler): this; off(type: 'pm:keyevent', fn?: PM.KeyboardKeyEventHandler): this; /****************************************** * * TODO: GLOBAL OPTIONS EVENTS ON MAP ONLY * ********************************************/ /** Fired when global options are changed. */ on( type: 'pm:globaloptionschanged', fn: PM.GlobalOptionsChangedEventHandler ): this; once( type: 'pm:globaloptionschanged', fn: PM.GlobalOptionsChangedEventHandler ): this; off( type: 'pm:globaloptionschanged', fn?: PM.GlobalOptionsChangedEventHandler ): this; /****************************************** * * TODO: AUTO TRACING EVENTS ON MAP ONLY * ********************************************/ /** Fired when auto tracing is started and connected with a layer. ⭐ */ on(type: 'pm:autotracestart', fn: PM.AutoTraceEventHandler): this; once(type: 'pm:autotracestart', fn: PM.AutoTraceEventHandler): this; off(type: 'pm:autotracestart', fn?: PM.AutoTraceEventHandler): this; /** Fired when auto tracing hintline is changed. ⭐ */ on( type: 'pm:autotracelinechange', fn: PM.AutoTraceLineChangeEventHandler ): this; once( type: 'pm:autotracelinechange', fn: PM.AutoTraceLineChangeEventHandler ): this; off( type: 'pm:autotracelinechange', fn?: PM.AutoTraceLineChangeEventHandler ): this; /** Fired when auto tracing is ended. ⭐ */ on(type: 'pm:autotraceend', fn: PM.AutoTraceEventHandler): this; once(type: 'pm:autotraceend', fn: PM.AutoTraceEventHandler): this; off(type: 'pm:autotraceend', fn?: PM.AutoTraceEventHandler): this; /****************************************** * * TODO: Split MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when a layer is split via Split Mode. */ on( type: 'pm:globalsplitmodetoggled', fn: PM.GlobalSplitModeToggledEventHandler ): this; once( type: 'pm:globalsplitmodetoggled', fn: PM.GlobalSplitModeToggledEventHandler ): this; off( type: 'pm:globalsplitmodetoggled', fn?: PM.GlobalSplitModeToggledEventHandler ): this; /****************************************** * * TODO: SCALE MODE EVENTS ON MAP ONLY * ********************************************/ /** Fired when Scale Mode is toggled. */ on( type: 'pm:globalscalemodetoggled', fn: PM.GlobalScaleModeToggledEventHandler ): this; once( type: 'pm:globalscalemodetoggled', fn: PM.GlobalScaleModeToggledEventHandler ): this; off( type: 'pm:globalscalemodetoggled', fn?: PM.GlobalScaleModeToggledEventHandler ): this; /****************************************** * * TODO: GLOBAL MODE CANCEL EVENTS ON MAP ONLY * ********************************************/ /** Fired when cancel of Mode is called. */ on(type: 'pm:globalcancel', fn: PM.GlobalCancelEventHandler): this; once(type: 'pm:globalcancel', fn: PM.GlobalCancelEventHandler): this; off(type: 'pm:globalcancel', fn?: PM.GlobalCancelEventHandler): this; /****************************************** * * TODO: ERROR EVENTS ON MAP ONLY * ********************************************/ /** Fired when an error is thrown. */ on(type: 'pm:error', fn: PM.ErrorEventHandler): this; once(type: 'pm:error', fn: PM.ErrorEventHandler): this; off(type: 'pm:error', fn?: PM.ErrorEventHandler): this; } namespace PM { export const version: string; /** Supported shape names. 'ImageOverlay' is in Edit Mode only. Also accepts custom shape name. */ type SUPPORTED_SHAPES = | 'Marker' | 'Circle' | 'Line' | 'Rectangle' | 'Polygon' | 'Cut' | 'CircleMarker' | 'ImageOverlay' | 'Text' | 'Freehand' // ⭐ | 'Lasso' // ⭐ | 'CustomShape' // ⭐ | string; type SupportLocales = | 'cz' | 'da' | 'de' | 'el' | 'en' | 'es' | 'fa' | 'fi' | 'fr' | 'hu' | 'id' | 'it' | 'ja' | 'ko' | 'ky' | 'nl' | 'no' | 'pl' | 'pt_br' | 'pt_pt' | 'ro' | 'ru' | 'sv' | 'tr' | 'ua' | 'zh' | 'zh_tw'; /** * Changes default registration of leaflet-geoman on leaflet layers. * * @param optIn - if true, a layers pmIgnore property has to be set to false to get initiated. */ function setOptIn(optIn: boolean): void; /** * Enable leaflet-geoman on an ignored layer. * * @param layer - re-reads layer.options.pmIgnore to initialize leaflet-geoman. */ function reInitLayer(layer: L.Layer): void; /** * PM map interface. */ interface PMMap extends PMDrawMap, PMEditMap, PMDragMap, PMRemoveMap, PMCutMap, PMRotateMap, PMScaleMap, PMSelectionMap, PMUnionMap, PMLineSimplificationMap, PMDifferenceMap, PMLassoMap { Toolbar: PMMapToolbar; Keyboard: PMMapKeyboard; /** Adds the Toolbar to the map. */ addControls(options?: ToolbarOptions): void; /** Toggle the visiblity of the Toolbar. */ removeControls(): void; /** Returns true if the Toolbar is visible on the map. */ controlsVisible(): boolean; /** Toggle the visiblity of the Toolbar. */ toggleControls(): void; setLang( lang: SupportLocales, customTranslations?: Translations, fallbackLanguage?: string ): void; /** Set globalOptions and apply them. */ setGlobalOptions(options: GlobalOptions): void; /** Apply the current globalOptions to all existing layers. */ applyGlobalOptions(): void; /** Returns the globalOptions. */ getGlobalOptions(): GlobalOptions; } class Translations { tooltips?: { placeMarker?: string; firstVertex?: string; continueLine?: string; finishLine?: string; finishPoly?: string; finishRect?: string; startCircle?: string; finishCircle?: string; placeCircleMarker?: string; placeText?: string; selectFirstLayerFor?: string; selectSecondLayerFor?: string; 'freehand-start'?: string; 'lasso-start'?: string; placeCustomShape?: string; }; actions?: { finish?: string; cancel?: string; removeLastVertex?: string; reset?: string; clear?: string; }; buttonTitles?: { drawMarkerButton?: string; drawPolyButton?: string; drawLineButton?: string; drawCircleButton?: string; drawRectButton?: string; editButton?: string; dragButton?: string; cutButton?: string; deleteButton?: string; drawCircleMarkerButton?: string; snappingButton?: string; pinningButton?: string; rotateButton?: string; drawTextButton?: string; scaleButton?: string; autoTracingButton?: string; snapGuidesButton?: string; unionButton?: string; differenceButton?: string; sendToBackButton?: string; bringToFrontButton?: string; copyLayerButton?: string; splitButton?: string; lineSimplificationButton?: string; lassoButton?: string; freeHandButton?: string; customShapeButton?: string; }; measurements?: { totalLength?: string; segmentLength?: string; area?: string; radius?: string; perimeter?: string; height?: string; width?: string; coordinates?: string; coordinatesMarker?: string; }; } type ACTION_NAMES = 'cancel' | 'removeLastVertex' | 'finish' | 'finishMode'; class Action { text: string; onClick?: (e: any) => void; title?: string; name?: string; isActive?: () => boolean; } type TOOLBAR_CONTROL_ORDER = | 'drawMarker' | 'drawCircleMarker' | 'drawPolyline' | 'drawRectangle' | 'drawPolygon' | 'drawCircle' | 'editMode' | 'dragMode' | 'cutPolygon' | 'removalMode' | 'rotateMode' | 'drawText' | 'scaleMode' | 'pinningOption' | 'snappingOption' | 'autoTracingOption' | 'snapGuidesOption' | 'spitalMode' | 'unionMode' | 'differenceMode' | 'bringToMode' | 'drawFreehand' | 'lassoMode' | 'drawCustomShape' | string; interface PMMapToolbar { /** Pass an array of button names to reorder the buttons in the Toolbar. */ changeControlOrder(order?: TOOLBAR_CONTROL_ORDER[]): void; /** Receive the current order with. */ getControlOrder(): TOOLBAR_CONTROL_ORDER[]; /** The position of a block (draw, edit, custom, options⭐) in the Toolbar can be changed. If not set, the value from position of the Toolbar is taken. */ setBlockPosition( block: 'draw' | 'edit' | 'custom' | 'options', position: L.ControlPosition ): void; /** Returns all of the active buttons */ getButtons(): Record<string, L.Control>; /** Returns the full button object or undefined if the name does not exist */ getButton(name: string): L.Control | undefined; /** Checks whether a button has been mounted */ controlExists(name: string): boolean; /** Returns all of the custom, active buttons */ getButtonsInBlock(name: string): Record<string, L.Control>; /** Returns a Object with the positions for all blocks */ getBlockPositions(): BlockPositions; /** To add a custom Control to the Toolbar */ createCustomControl(options: CustomControlOptions): L.Control; /** Creates a copy of a draw Control. Returns the drawInstance and the control. */ copyDrawControl( copyInstance: string, options: CustomControlOptions | string ): { drawInstance: DrawShape; control: L.Control; }; /** Change the actions of an existing button. */ changeActionsOfControl( name: string, actions: (ACTION_NAMES | Action)[] ): void; /** Disable button by control name */ setButtonDisabled(name: TOOLBAR_CONTROL_ORDER, state: boolean): void; /** Deletes and removes a Control from the Toolbar */ deleteControl(name: string): void; } type KEYBOARD_EVENT_TYPE = 'current' | 'keydown' | 'keyup'; interface PMMapKeyboard { /** Pass an array of button names to reorder the buttons in the Toolbar. */ getLastKeyEvent(type: KEYBOARD_EVENT_TYPE[]): KeyboardKeyEventHandler; /** Returns the current pressed key. [KeyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key). */ getPressedKey(): string; /** Returns true if the `Shift` key is currently pressed. */ isShiftKeyPressed(): boolean; /** Returns true if the `Alt` key is currently pressed. */ isAltKeyPressed(): boolean; /** Returns true if the `Ctrl` key is currently pressed. */ isCtrlKeyPressed(): boolean; /** Returns true if the `Meta` key is currently pressed. */ isMetaKeyPressed(): boolean; } interface Button { /** Actions */ actions?: (ACTION_NAMES | Action)[]; /** Function fired after clicking the control. */ afterClick?: () => void; /** CSS class with the Icon. */ className?: string; /** If true, other buttons will be disabled on click (default: true) */ disableOtherButtons?: boolean; /** Control can be toggled. */ doToggle?: boolean; /** Extending Class f. ex. Line, Polygon, ... L.PM.Draw.EXTENDINGCLASS */ jsClass?: string; /** Function fired when clicking the control. */ onClick?: () => void; position?: L.ControlPosition; /** Text showing when you hover the control. */ title?: string; /** Toggle state true -> enabled, false -> disabled (default: false) */ toggleStatus?: boolean; /** Block of the control. 'options' is ⭐ only. */ tool?: 'draw' | 'edit' | 'custom' | 'options'; } interface CustomControlOptions { /** Name of the control */ name: string; /** Block of the control. 'options' is ⭐ only. */ block?: 'draw' | 'edit' | 'custom' | 'options'; /** Text showing when you hover the control. */ title?: string; /** CSS class with the Icon. */ className?: string; /** Function fired when clicking the control. */ onClick?: () => void; /** Function fired after clicking the control. */ afterClick?: () => void; /** Actions */ actions?: (ACTION_NAMES | Action)[]; /** Control can be toggled. */ toggle?: boolean; /** Control is disabled. */ disabled?: boolean; /** Control disables other buttons if enabled. */ disableOtherButtons?: boolean; /** Control disabled if other buttons is enabled. */ disableByOtherButtons?: boolean; } type PANE = | 'mapPane' | 'tilePane' | 'overlayPane' | 'shadowPane' | 'markerPane' | 'tooltipPane' | 'popupPane' | string; type DISPLAY_FORMAT = 'metric' | 'imperial'; interface GlobalOptions extends DrawModeOptions, EditModeOptions { /** Add the created layers to a layergroup instead to the map. */ layerGroup?: L.Map | L.LayerGroup; /** Prioritize the order of snapping. Default: ['Marker','CircleMarker','Circle','Line','Polygon','Rectangle']. */ snappingOrder?: SUPPORTED_SHAPES[]; /** Defines in which panes the layers and helper vertices are created. Default: { vertexPane: 'markerPane', layerPane: 'overlayPane', markerPane: 'markerPane' } */ panes?: { vertexPane?: PANE; layerPane?: PANE; markerPane?: PANE }; /** Measurement options. ⭐*/ measurements?: { measurement?: boolean; showTooltip?: boolean; showTooltipOnHover?: boolean; totalLength?: boolean; segmentLength?: boolean; area?: boolean; radius?: boolean; perimeter?: boolean; height?: boolean; width?: boolean; coordinates?: boolean; displayFormat?: DISPLAY_FORMAT; }; /** Until which zoom level the coordinates of the layers in the viewport will be used. Default: 10 ⭐ */ autoTraceMaxZoom?: number; /** The distance to the layer when a snap for auto tracing should happen. Default: 20 ⭐ */ autoTraceMaxDistance?: number; /** Style options for selected layers. ⭐ */ selectionLayerStyle?: L.PathOptions; /** Changing the cut behavior to use a circle instead of a polygon. Default: false ⭐ */ cutAsCircle?: boolean; /** Enable exiting active modes (draw, edit, drag, rotate, remove, cut) by pressing the Escape key. Default: false */ exitModeOnEscape?: boolean; /** Enable finishing drawing shapes (Line, Polygon, Cut) by pressing the Enter key when enough vertices are placed. Default: false */ finishOnEnter?: boolean; } interface PMDrawMap { /** Enable Draw Mode with the passed shape. */ enableDraw(shape: SUPPORTED_SHAPES, options?: DrawModeOptions): void; /** Disable all drawing */ disableDraw(shape?: SUPPORTED_SHAPES): void; /** Enable Custom Shape Draw Mode with a passed shape from the storage or as GeoJSON. ⭐ */ enableCustomShapeDraw( shape: string | object, options?: DrawModeOptions ): void; /** Disable Custom Shape drawing. ⭐ */ disableCustomShapeDraw(): void; /** Draw */ Draw: Draw; /** Returns true if global Draw Mode is enabled. false when disabled. */ globalDrawModeEnabled(): boolean; /** Customize the style of the drawn layer. Only for L.Path layers. Shapes can be excluded with a ignoreShapes array or merged with the current style with merge: true in optionsModifier. */ setPathOptions( options: L.PathOptions | L.CircleMarkerOptions, optionsModifier?: { ignoreShapes?: SUPPORTED_SHAPES[], merge?: boolean } ): void; /** Returns all Geoman layers on the map as array. Pass true to get a L.FeatureGroup. */ getGeomanLayers(asFeatureGroup: true): L.FeatureGroup; getGeomanLayers(asFeatureGroup?: false): L.Layer[]; /** Returns all Geoman draw layers on the map as array. Pass true to get a L.FeatureGroup. */ getGeomanDrawLayers(asFeatureGroup: true): L.FeatureGroup; getGeomanDrawLayers(asFeatureGroup?: false): L.Layer[]; /** Returns if CustomShape Draw Mode is enabled. ⭐ */ customShapeDrawEnabled(): boolean; /** Adds a CustomShape to the storage. ⭐ */ addCustomShape( name: string, geojson: object, options?: DrawModeOptions ): void; /** Removes a CustomShape from the storage. ⭐ */ removeCustomShape(name: string): void; /** Returns all CustomShapes in the storage. ⭐ */ getCustomShapes(): { [name: string]: { geojson: string; options?: DrawModeOptions }; }; /** Adds a CustomShape to the Toolbar. ⭐ */ addCustomShapeToToolbar( name: string, options: | { className: string; text?: string; title?: string } | { className?: string; text: string; title?: string } ): void; /** Removes a CustomShape from the Toolbar. ⭐ */ removeCustomShapeFromToolbar(name: string): void; } interface PMEditMap { /** Enables edit mode. The passed options are preserved, even when the mode is enabled via the Toolbar */ enableGlobalEditMode(options?: EditModeOptions): void; /** Disables global edit mode. */ disableGlobalEditMode(): void; /** Toggles global edit mode. */ toggleGlobalEditMode(options?: EditModeOptions): void; /** Returns true if global edit mode is enabled. false when disabled. */ globalEditModeEnabled(): boolean; } interface PMDragMap { /** Enables global drag mode. */ enableGlobalDragMode(): void; /** Disables global drag mode. */ disableGlobalDragMode(): void; /** Toggles global drag mode. */ toggleGlobalDragMode(): void; /** Returns true if global drag mode is enabled. false when disabled. */ globalDragModeEnabled(): boolean; /** Reverts the layers to the state before changing. ⭐ */ cancelGlobalDragMode(): void; } interface PMRemoveMap { /** Enables global removal mode. */ enableGlobalRemovalMode(): void; /** Disables global removal mode. */ disableGlobalRemovalMode(): void; /** Toggles global removal mode. */ toggleGlobalRemovalMode(): void; /** Returns true if global removal mode is enabled. false when disabled. */ globalRemovalModeEnabled(): boolean; /** Reverts the layers to the state before changing. ⭐ */ cancelGlobalRemovalMode(): void; } interface PMCutMap { /** Enables global cut mode. */ enableGlobalCutMode(options?: CutModeOptions): void; /** Disables global cut mode. */ disableGlobalCutMode(): void; /** Toggles global cut mode. */ toggleGlobalCutMode(options?: CutModeOptions): void; /** Returns true if global cut mode is enabled. false when disabled. */ globalCutModeEnabled(): boolean; } interface PMRotateMap { /** Enables global rotate mode. */ enableGlobalRotateMode(): void; /** Disables global rotate mode. */ disableGlobalRotateMode(): void; /** Toggles global rotate mode. */ toggleGlobalRotateMode(): void; /** Returns true if global rotate mode is enabled. false when disabled. */ globalRotateModeEnabled(): boolean; /** Reverts the layers to the state before changing. ⭐ */ cancelGlobalRotateMode(): void; } interface PMScaleMap { /** Enables global scale mode. ⭐ */ enableGlobalScaleMode(): void; /** Disables global scale mode. ⭐ */ disableGlobalScaleMode(): void; /** Toggles global scale mode. ⭐ */ toggleGlobalScaleMode(): void; /** Returns true if global scale mode is enabled. false when disabled. ⭐ */ globalScaleModeEnabled(): boolean; /** Reverts the layers to the state before changing. ⭐ */ cancelGlobalScaleMode(): void; } interface PMSelectionMap { /** Enables global selection mode. Optional a filter can be added, which checks if the selection is allowed. ⭐ */ enableSelectionTool(filterFnc?: () => boolean): void; /** Disables global selection mode. ⭐ */ disableSelectionTool(): void; /** Returns true if global selection mode is enabled. false when disabled. ⭐ */ selectionToolEnabled(): boolean; /** Adds a layer to the selection. ⭐ */ addSelection(layer: L.Layer): void; /** Removes a layer from the selection. ⭐ */ removeSelection(layer: L.Layer): void; /** Returns selected layers. ⭐ */ getSelectedLayers(): L.Layer[]; /** Returns if the layer is selected. ⭐ */ isLayerSelected(layer: L.Layer): boolean; } interface PMUnionMap { /** Enables global union mode. ⭐ */ enableGlobalUnionMode(): void; /** Disables global union mode. ⭐ */ disableGlobalUnionMode(): void; /** Toggles global union mode. ⭐ */ toggleGlobalUnionMode(): void; /** Returns true if global union mode is enabled. false when disabled. ⭐ */ globalUnionModeEnabled(): boolean; /** Unifies the two layers. ⭐ */ union(layer1: L.Layer, layer2: L.Layer): void; } interface PMDifferenceMap { /** Enables global difference mode. ⭐ */ enableGlobalDifferenceMode(): void; /** Disables global difference mode. ⭐ */ disableGlobalDifferenceMode(): void; /** Toggles global difference mode. ⭐ */ toggleGlobalDifferenceMode(): void; /** Returns true if global difference mode is enabled. false when disabled. ⭐ */ globalDifferenceModeEnabled(): boolean; /** Subtracts the second selected layer from the first selected layer. ⭐ */ difference(layer1: L.Layer, layer2: L.Layer): void; } interface PMCopyLayerMap { /** Enables global CopyLayer mode. ⭐ */ enableGlobalCopyLayerMode(): void; /** Disables global CopyLayer mode. ⭐ */ disableGlobalCopyLayerMode(): void; /** Toggles global CopyLayer mode. ⭐ */ toggleGlobalCopyLayerMode(): void; /** Returns true if global CopyLayer mode is enabled. false when disabled. ⭐ */ globalCopyLayerModeEnabled(): boolean; /** Resets the current source layer. ⭐ */ resetCopyLayerMode(): void; } interface PMLineSimplificationMap { /** Enables global LineSimplification mode. ⭐ */ enableGlobalLineSimplificationMode(): void; /** Disables global LineSimplification mode. ⭐ */ disableGlobalLineSimplificationMode(): void; /** Toggles global LineSimplification mode. ⭐ */ toggleGlobalLineSimplificationMode(): void; /** Returns true if global LineSimplification mode is enabled. false when disabled. ⭐ */ globalLineSimplificationModeEnabled(): boolean; /** Reverts the layers to the state before changing. ⭐ */ cancelGlobalLineSimplificationMode(): void; } interface PMLassoMap { /** Enables global Lasso mode. ⭐ */ enableGlobalLassoMode(options?: LassoModeOptions): void; /** Disables global Lasso mode. ⭐ */ disableGlobalLassoMode(): void; /** Toggles global Lasso mode. ⭐ */ toggleGlobalLassoMode(options?: LassoModeOptions): void; /** Returns true if global Lasso mode is enabled. false when disabled. ⭐ */ globalLassoModeEnabled(): boolean; /** Sets the Lasso Mode to Append. ⭐ */ setLassoAppendMode(): void; /** Sets the Lasso Mode to Subtract. ⭐ */ setLassoSubtractMode(): void; /** Sets the Lasso Mode to Reset. ⭐ */ setLassoResetMode(): void; /** Get current Lasso Mode. ⭐ */