leaflet-geoman.d.ts 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619
  1. import * as L from 'leaflet';
  2. // redeclare module, maintains compatibility with @types/leaflet
  3. declare module 'leaflet' {
  4. /**
  5. * Extends built in leaflet Layer Options.
  6. */
  7. interface LayerOptions {
  8. pmIgnore?: boolean;
  9. snapIgnore?: boolean;
  10. }
  11. /**
  12. * Extends built in leaflet Map Options.
  13. */
  14. interface MapOptions {
  15. pmIgnore?: boolean;
  16. }
  17. /**
  18. * Extends built in leaflet Map.
  19. */
  20. interface Map {
  21. pm: PM.PMMap;
  22. }
  23. /**
  24. * Extends built in leaflet Path.
  25. */
  26. interface Path {
  27. pm: PM.PMLayer;
  28. }
  29. /**
  30. * Extends built in leaflet ImageOverlay.
  31. */
  32. interface ImageOverlay {
  33. pm: PM.PMLayer;
  34. }
  35. /**
  36. * Extends built in leaflet LayerGroup.
  37. */
  38. interface LayerGroup {
  39. pm: PM.PMLayerGroup;
  40. }
  41. /**
  42. * Extends built in leaflet MarkerOptions with options for Text-Layer
  43. */
  44. interface MarkerOptions {
  45. textMarker?: boolean;
  46. text?: string;
  47. }
  48. /**
  49. * Extends built in leaflet Marker.
  50. */
  51. interface Marker {
  52. pm: PM.PMLayer;
  53. }
  54. /**
  55. * Extends @types/leaflet events...
  56. *
  57. * Todo: This is kind of a mess, and it makes all these event handlers show
  58. * up on Layers and Map. Leaflet itself is based around Evented, and @types/leaflet
  59. * makes this very hard to work around.
  60. *
  61. */
  62. interface Evented {
  63. /******************************************
  64. *
  65. * AVAILABLE ON MAP + LAYER, THESE ARE OK ON EVENTED.
  66. *
  67. ********************************************/
  68. /** Fired when a layer is removed via Removal Mode. */
  69. on(type: 'pm:remove', fn: PM.RemoveEventHandler): this;
  70. once(type: 'pm:remove', fn: PM.RemoveEventHandler): this;
  71. off(type: 'pm:remove', fn?: PM.RemoveEventHandler): this;
  72. /** Fired when the layer being cut. Draw+Edit Mode*/
  73. on(type: 'pm:cut', fn: PM.CutEventHandler): this;
  74. once(type: 'pm:cut', fn: PM.CutEventHandler): this;
  75. off(type: 'pm:cut', fn?: PM.CutEventHandler): this;
  76. /** Fired when rotation is enabled for a layer. */
  77. on(type: 'pm:rotateenable', fn: PM.RotateEnableEventHandler): this;
  78. once(type: 'pm:rotateenable', fn: PM.RotateEnableEventHandler): this;
  79. off(type: 'pm:rotateenable', fn?: PM.RotateEnableEventHandler): this;
  80. /** Fired when rotation is disabled for a layer. */
  81. on(type: 'pm:rotatedisable', fn: PM.RotateDisableEventHandler): this;
  82. once(type: 'pm:rotatedisable', fn: PM.RotateDisableEventHandler): this;
  83. off(type: 'pm:rotatedisable', fn?: PM.RotateDisableEventHandler): this;
  84. /** Fired when rotation starts on a layer. */
  85. on(type: 'pm:rotatestart', fn: PM.RotateStartEventHandler): this;
  86. once(type: 'pm:rotatestart', fn: PM.RotateStartEventHandler): this;
  87. off(type: 'pm:rotatestart', fn?: PM.RotateStartEventHandler): this;
  88. /** Fired when a layer is rotated. */
  89. on(type: 'pm:rotate', fn: PM.RotateEventHandler): this;
  90. once(type: 'pm:rotate', fn: PM.RotateEventHandler): this;
  91. off(type: 'pm:rotate', fn?: PM.RotateEventHandler): this;
  92. /** Fired when rotation ends on a layer. */
  93. on(type: 'pm:rotateend', fn: PM.RotateEndEventHandler): this;
  94. once(type: 'pm:rotateend', fn: PM.RotateEndEventHandler): this;
  95. off(type: 'pm:rotateend', fn?: PM.RotateEndEventHandler): this;
  96. /******************************************
  97. *
  98. * TODO: DRAW/EDIT MODE EVENTS LAYER ONLY
  99. *
  100. ********************************************/
  101. /** Fired during a marker move/drag. */
  102. on(type: 'pm:snapdrag', fn: PM.SnapEventHandler): this;
  103. once(type: 'pm:snapdrag', fn: PM.SnapEventHandler): this;
  104. off(type: 'pm:snapdrag', fn?: PM.SnapEventHandler): this;
  105. /** Fired when a vertex is snapped. */
  106. on(type: 'pm:snap', fn: PM.SnapEventHandler): this;
  107. once(type: 'pm:snap', fn: PM.SnapEventHandler): this;
  108. off(type: 'pm:snap', fn?: PM.SnapEventHandler): this;
  109. /** Fired when a vertex is unsnapped. */
  110. on(type: 'pm:unsnap', fn: PM.SnapEventHandler): this;
  111. once(type: 'pm:unsnap', fn: PM.SnapEventHandler): this;
  112. off(type: 'pm:unsnap', fn?: PM.SnapEventHandler): this;
  113. /** Called when the center of a circle is placed/moved. */
  114. on(type: 'pm:centerplaced', fn: PM.CenterPlacedEventHandler): this;
  115. once(type: 'pm:centerplaced', fn: PM.CenterPlacedEventHandler): this;
  116. off(type: 'pm:centerplaced', fn?: PM.CenterPlacedEventHandler): this;
  117. /******************************************
  118. *
  119. * TODO: CUT/EDIT MODE EVENTS LAYER ONLY
  120. *
  121. ********************************************/
  122. /** Fired when a layer is edited. */
  123. on(type: 'pm:edit', fn: PM.EditEventHandler): this;
  124. once(type: 'pm:edit', fn: PM.EditEventHandler): this;
  125. off(type: 'pm:edit', fn?: PM.EditEventHandler): this;
  126. /******************************************
  127. *
  128. * TODO: DRAW MODE EVENTS ON MAP ONLY
  129. *
  130. ********************************************/
  131. /** Fired when Drawing Mode is toggled. */
  132. on(
  133. type: 'pm:globaldrawmodetoggled',
  134. fn: PM.GlobalDrawModeToggledEventHandler,
  135. context?: any
  136. ): L.Evented;
  137. once(
  138. type: 'pm:globaldrawmodetoggled',
  139. fn: PM.GlobalDrawModeToggledEventHandler,
  140. context?: any
  141. ): L.Evented;
  142. off(
  143. type: 'pm:globaldrawmodetoggled',
  144. fn?: PM.GlobalDrawModeToggledEventHandler,
  145. context?: any
  146. ): L.Evented;
  147. /** Called when drawing mode is enabled. Payload includes the shape type and working layer. */
  148. on(
  149. type: 'pm:drawstart',
  150. fn: PM.DrawStartEventHandler,
  151. context?: any
  152. ): L.Evented;
  153. once(
  154. type: 'pm:drawstart',
  155. fn: PM.DrawStartEventHandler,
  156. context?: any
  157. ): L.Evented;
  158. off(
  159. type: 'pm:drawstart',
  160. fn?: PM.DrawStartEventHandler,
  161. context?: any
  162. ): L.Evented;
  163. /** Called when drawing mode is disabled. Payload includes the shape type. */
  164. on(
  165. type: 'pm:drawend',
  166. fn: PM.DrawEndEventHandler,
  167. context?: any
  168. ): L.Evented;
  169. once(
  170. type: 'pm:drawend',
  171. fn: PM.DrawEndEventHandler,
  172. context?: any
  173. ): L.Evented;
  174. off(
  175. type: 'pm:drawend',
  176. fn?: PM.DrawEndEventHandler,
  177. context?: any
  178. ): L.Evented;
  179. /** Called when drawing mode is disabled. Payload includes the shape type. */
  180. on(type: 'pm:create', fn: PM.CreateEventHandler, context?: any): L.Evented;
  181. once(
  182. type: 'pm:create',
  183. fn: PM.CreateEventHandler,
  184. context?: any
  185. ): L.Evented;
  186. off(
  187. type: 'pm:create',
  188. fn?: PM.CreateEventHandler,
  189. context?: any
  190. ): L.Evented;
  191. /******************************************
  192. *
  193. * TODO: DRAW MODE EVENTS ON LAYER ONLY
  194. *
  195. ********************************************/
  196. /** Called when a new vertex is added. */
  197. on(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler): this;
  198. once(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler): this;
  199. off(type: 'pm:vertexadded', fn?: PM.VertexAddedEventHandler): this;
  200. /******************************************
  201. *
  202. * TODO: EDIT MODE EVENTS ON LAYER ONLY
  203. *
  204. ********************************************/
  205. /** Fired when edit mode is disabled and a layer is edited and its coordinates have changed. */
  206. on(type: 'pm:update', fn: PM.UpdateEventHandler): this;
  207. once(type: 'pm:update', fn: PM.UpdateEventHandler): this;
  208. off(type: 'pm:update', fn?: PM.UpdateEventHandler): this;
  209. /** Fired when edit mode on a layer is enabled. */
  210. on(type: 'pm:enable', fn: PM.EnableEventHandler): this;
  211. once(type: 'pm:enable', fn: PM.EnableEventHandler): this;
  212. off(type: 'pm:enable', fn?: PM.EnableEventHandler): this;
  213. /** Fired when edit mode on a layer is disabled. */
  214. on(type: 'pm:disable', fn: PM.DisableEventHandler): this;
  215. once(type: 'pm:disable', fn: PM.DisableEventHandler): this;
  216. off(type: 'pm:disable', fn?: PM.DisableEventHandler): this;
  217. /** Fired when a vertex is added. */
  218. on(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler2): this;
  219. once(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler2): this;
  220. off(type: 'pm:vertexadded', fn?: PM.VertexAddedEventHandler2): this;
  221. /** Fired when a vertex is removed. */
  222. on(type: 'pm:vertexremoved', fn: PM.VertexRemovedEventHandler): this;
  223. once(type: 'pm:vertexremoved', fn: PM.VertexRemovedEventHandler): this;
  224. off(type: 'pm:vertexremoved', fn?: PM.VertexRemovedEventHandler): this;
  225. /** Fired when a vertex is clicked. */
  226. on(type: 'pm:vertexclick', fn: PM.VertexClickEventHandler): this;
  227. once(type: 'pm:vertexclick', fn: PM.VertexClickEventHandler): this;
  228. off(type: 'pm:vertexclick', fn?: PM.VertexClickEventHandler): this;
  229. /** Fired when dragging of a marker which corresponds to a vertex starts. */
  230. on(type: 'pm:markerdragstart', fn: PM.MarkerDragStartEventHandler): this;
  231. once(type: 'pm:markerdragstart', fn: PM.MarkerDragStartEventHandler): this;
  232. off(type: 'pm:markerdragstart', fn?: PM.MarkerDragStartEventHandler): this;
  233. /** Fired when dragging a vertex-marker. */
  234. on(type: 'pm:markerdrag', fn: PM.MarkerDragEventHandler): this;
  235. once(type: 'pm:markerdrag', fn: PM.MarkerDragEventHandler): this;
  236. off(type: 'pm:markerdrag', fn?: PM.MarkerDragEventHandler): this;
  237. /** Fired when dragging of a vertex-marker ends. */
  238. on(type: 'pm:markerdragend', fn: PM.MarkerDragEndEventHandler): this;
  239. once(type: 'pm:markerdragend', fn: PM.MarkerDragEndEventHandler): this;
  240. off(type: 'pm:markerdragend', fn?: PM.MarkerDragEndEventHandler): this;
  241. /** Fired when coords of a layer are reset. E.g. by self-intersection.. */
  242. on(type: 'pm:layerreset', fn: PM.LayerResetEventHandler): this;
  243. once(type: 'pm:layerreset', fn: PM.LayerResetEventHandler): this;
  244. off(type: 'pm:layerreset', fn?: PM.LayerResetEventHandler): this;
  245. /** When allowSelfIntersection: false, this event is fired as soon as a self-intersection is detected. */
  246. on(type: 'pm:intersect', fn: PM.IntersectEventHandler): this;
  247. once(type: 'pm:intersect', fn: PM.IntersectEventHandler): this;
  248. off(type: 'pm:intersect', fn?: PM.IntersectEventHandler): this;
  249. /** Fired coordinates of the layer changed. */
  250. on(type: 'pm:change', fn: PM.ChangeEventHandler): this;
  251. once(type: 'pm:change', fn: PM.ChangeEventHandler): this;
  252. off(type: 'pm:change', fn?: PM.ChangeEventHandler): this;
  253. /** Fired when the text of a layer is changed. */
  254. on(type: 'pm:textchange', fn: PM.TextChangeEventHandler): this;
  255. once(type: 'pm:textchange', fn: PM.TextChangeEventHandler): this;
  256. off(type: 'pm:textchange', fn?: PM.TextChangeEventHandler): this;
  257. /** Fired when the text layer is focused. */
  258. on(type: 'pm:textfocus', fn: PM.TextFocusEventHandler): this;
  259. once(type: 'pm:textfocus', fn: PM.TextFocusEventHandler): this;
  260. off(type: 'pm:textfocus', fn?: PM.TextFocusEventHandler): this;
  261. /** Fired when the text layer is blurred. */
  262. on(type: 'pm:textblur', fn: PM.TextBlurEventHandler): this;
  263. once(type: 'pm:textblur', fn: PM.TextBlurEventHandler): this;
  264. off(type: 'pm:textblur', fn?: PM.TextBlurEventHandler): this;
  265. /******************************************
  266. *
  267. * TODO: EDIT MODE EVENTS ON MAP ONLY
  268. *
  269. ********************************************/
  270. /** Fired when Edit Mode is toggled. */
  271. on(
  272. type: 'pm:globaleditmodetoggled',
  273. fn: PM.GlobalEditModeToggledEventHandler
  274. ): this;
  275. once(
  276. type: 'pm:globaleditmodetoggled',
  277. fn: PM.GlobalEditModeToggledEventHandler
  278. ): this;
  279. off(
  280. type: 'pm:globaleditmodetoggled',
  281. fn?: PM.GlobalEditModeToggledEventHandler
  282. ): this;
  283. /******************************************
  284. *
  285. * TODO: DRAG MODE EVENTS ON MAP ONLY
  286. *
  287. ********************************************/
  288. /** Fired when Drag Mode is toggled. */
  289. on(
  290. type: 'pm:globaldragmodetoggled',
  291. fn: PM.GlobalDragModeToggledEventHandler
  292. ): this;
  293. once(
  294. type: 'pm:globaldragmodetoggled',
  295. fn: PM.GlobalDragModeToggledEventHandler
  296. ): this;
  297. off(
  298. type: 'pm:globaldragmodetoggled',
  299. fn?: PM.GlobalDragModeToggledEventHandler
  300. ): this;
  301. /******************************************
  302. *
  303. * TODO: DRAG MODE EVENTS ON LAYER ONLY
  304. *
  305. ********************************************/
  306. /** Fired when a layer starts being dragged. */
  307. on(type: 'pm:dragstart', fn: PM.DragStartEventHandler): this;
  308. once(type: 'pm:dragstart', fn: PM.DragStartEventHandler): this;
  309. off(type: 'pm:dragstart', fn?: PM.DragStartEventHandler): this;
  310. /** Fired when a layer is dragged. */
  311. on(type: 'pm:drag', fn: PM.DragEventHandler): this;
  312. once(type: 'pm:drag', fn: PM.DragEventHandler): this;
  313. off(type: 'pm:drag', fn?: PM.DragEventHandler): this;
  314. /** Fired when a layer stops being dragged. */
  315. on(type: 'pm:dragend', fn: PM.DragEndEventHandler): this;
  316. once(type: 'pm:dragend', fn: PM.DragEndEventHandler): this;
  317. off(type: 'pm:dragend', fn?: PM.DragEndEventHandler): this;
  318. /** Fired when drag mode on a layer is enabled. */
  319. on(type: 'pm:dragenable', fn: PM.DragEnableEventHandler): this;
  320. once(type: 'pm:dragenable', fn: PM.DragEnableEventHandler): this;
  321. off(type: 'pm:dragenable', fn?: PM.DragEnableEventHandler): this;
  322. /** Fired when drag mode on a layer is disabled. */
  323. on(type: 'pm:dragdisable', fn: PM.DragDisableEventHandler): this;
  324. once(type: 'pm:dragdisable', fn: PM.DragDisableEventHandler): this;
  325. off(type: 'pm:dragdisable', fn?: PM.DragDisableEventHandler): this;
  326. /******************************************
  327. *
  328. * TODO: REMOVE MODE EVENTS ON MAP ONLY
  329. *
  330. ********************************************/
  331. /** Fired when Removal Mode is toggled. */
  332. on(
  333. type: 'pm:globalremovalmodetoggled',
  334. fn: PM.GlobalRemovalModeToggledEventHandler
  335. ): this;
  336. once(
  337. type: 'pm:globalremovalmodetoggled',
  338. fn: PM.GlobalRemovalModeToggledEventHandler
  339. ): this;
  340. off(
  341. type: 'pm:globalremovalmodetoggled',
  342. fn?: PM.GlobalRemovalModeToggledEventHandler
  343. ): this;
  344. /******************************************
  345. *
  346. * TODO: CUT MODE EVENTS ON MAP ONLY
  347. *
  348. ********************************************/
  349. /** Fired when a layer is removed via Removal Mode. */
  350. on(
  351. type: 'pm:globalcutmodetoggled',
  352. fn: PM.GlobalCutModeToggledEventHandler
  353. ): this;
  354. once(
  355. type: 'pm:globalcutmodetoggled',
  356. fn: PM.GlobalCutModeToggledEventHandler
  357. ): this;
  358. off(
  359. type: 'pm:globalcutmodetoggled',
  360. fn?: PM.GlobalCutModeToggledEventHandler
  361. ): this;
  362. /******************************************
  363. *
  364. * TODO: ROTATE MODE EVENTS ON MAP ONLY
  365. *
  366. ********************************************/
  367. /** Fired when Rotate Mode is toggled. */
  368. on(
  369. type: 'pm:globalrotatemodetoggled',
  370. fn: PM.GlobalRotateModeToggledEventHandler
  371. ): this;
  372. once(
  373. type: 'pm:globalrotatemodetoggled',
  374. fn: PM.GlobalRotateModeToggledEventHandler
  375. ): this;
  376. off(
  377. type: 'pm:globalrotatemodetoggled',
  378. fn?: PM.GlobalRotateModeToggledEventHandler
  379. ): this;
  380. /******************************************
  381. *
  382. * TODO: TRANSLATION EVENTS ON MAP ONLY
  383. *
  384. ********************************************/
  385. /** Standard Leaflet event. Fired when any layer is removed. */
  386. on(type: 'pm:langchange', fn: PM.LangChangeEventHandler): this;
  387. once(type: 'pm:langchange', fn: PM.LangChangeEventHandler): this;
  388. off(type: 'pm:langchange', fn?: PM.LangChangeEventHandler): this;
  389. /******************************************
  390. *
  391. * TODO: CONTROL EVENTS ON MAP ONLY
  392. *
  393. ********************************************/
  394. /** Fired when a Toolbar button is clicked. */
  395. on(type: 'pm:buttonclick', fn: PM.ButtonClickEventHandler): this;
  396. once(type: 'pm:buttonclick', fn: PM.ButtonClickEventHandler): this;
  397. off(type: 'pm:buttonclick', fn?: PM.ButtonClickEventHandler): this;
  398. /** Fired when a Toolbar action is clicked. */
  399. on(type: 'pm:actionclick', fn: PM.ActionClickEventHandler): this;
  400. once(type: 'pm:actionclick', fn: PM.ActionClickEventHandler): this;
  401. off(type: 'pm:actionclick', fn?: PM.ActionClickEventHandler): this;
  402. /******************************************
  403. *
  404. * TODO: Keyboard EVENT ON MAP ONLY
  405. *
  406. ********************************************/
  407. /** Fired when `keydown` or `keyup` on the document is fired. */
  408. on(type: 'pm:keyevent', fn: PM.KeyboardKeyEventHandler): this;
  409. once(type: 'pm:keyevent', fn: PM.KeyboardKeyEventHandler): this;
  410. off(type: 'pm:keyevent', fn?: PM.KeyboardKeyEventHandler): this;
  411. }
  412. namespace PM {
  413. export const version: string;
  414. /** Supported shape names. 'ImageOverlay' is in Edit Mode only. Also accepts custom shape name. */
  415. type SUPPORTED_SHAPES =
  416. | 'Marker'
  417. | 'Circle'
  418. | 'Line'
  419. | 'Rectangle'
  420. | 'Polygon'
  421. | 'Cut'
  422. | 'CircleMarker'
  423. | 'ImageOverlay'
  424. | 'Text'
  425. | string;
  426. type SupportLocales =
  427. | 'cz'
  428. | 'da'
  429. | 'de'
  430. | 'el'
  431. | 'en'
  432. | 'es'
  433. | 'fa'
  434. | 'fi'
  435. | 'fr'
  436. | 'hu'
  437. | 'id'
  438. | 'it'
  439. | 'ja'
  440. | 'ko'
  441. | 'nl'
  442. | 'no'
  443. | 'pl'
  444. | 'pt_br'
  445. | 'ro'
  446. | 'ru'
  447. | 'sv'
  448. | 'tr'
  449. | 'ua'
  450. | 'zh'
  451. | 'zh_tw';
  452. /**
  453. * Changes default registration of leaflet-geoman on leaflet layers.
  454. *
  455. * @param optIn - if true, a layers pmIgnore property has to be set to false to get initiated.
  456. */
  457. function setOptIn(optIn: boolean): void;
  458. /**
  459. * Enable leaflet-geoman on an ignored layer.
  460. *
  461. * @param layer - re-reads layer.options.pmIgnore to initialize leaflet-geoman.
  462. */
  463. function reInitLayer(layer: L.Layer): void;
  464. /**
  465. * PM map interface.
  466. */
  467. interface PMMap
  468. extends PMDrawMap,
  469. PMEditMap,
  470. PMDragMap,
  471. PMRemoveMap,
  472. PMCutMap,
  473. PMRotateMap {
  474. Toolbar: PMMapToolbar;
  475. Keyboard: PMMapKeyboard;
  476. /** Adds the Toolbar to the map. */
  477. addControls(options?: ToolbarOptions): void;
  478. /** Toggle the visiblity of the Toolbar. */
  479. removeControls(): void;
  480. /** Returns true if the Toolbar is visible on the map. */
  481. controlsVisible(): boolean;
  482. /** Toggle the visiblity of the Toolbar. */
  483. toggleControls(): void;
  484. setLang(
  485. lang: SupportLocales,
  486. customTranslations?: Translations,
  487. fallbackLanguage?: string
  488. ): void;
  489. /** Set globalOptions and apply them. */
  490. setGlobalOptions(options: GlobalOptions): void;
  491. /** Apply the current globalOptions to all existing layers. */
  492. applyGlobalOptions(): void;
  493. /** Returns the globalOptions. */
  494. getGlobalOptions(): GlobalOptions;
  495. }
  496. class Translations {
  497. tooltips?: {
  498. placeMarker?: string;
  499. firstVertex?: string;
  500. continueLine?: string;
  501. finishLine?: string;
  502. finishPoly?: string;
  503. finishRect?: string;
  504. startCircle?: string;
  505. finishCircle?: string;
  506. placeCircleMarker?: string;
  507. placeText?: string;
  508. };
  509. actions?: {
  510. finish?: string;
  511. cancel?: string;
  512. removeLastVertex?: string;
  513. };
  514. buttonTitles?: {
  515. drawMarkerButton?: string;
  516. drawPolyButton?: string;
  517. drawLineButton?: string;
  518. drawCircleButton?: string;
  519. drawRectButton?: string;
  520. editButton?: string;
  521. dragButton?: string;
  522. cutButton?: string;
  523. deleteButton?: string;
  524. drawCircleMarkerButton?: string;
  525. snappingButton?: string;
  526. pinningButton?: string;
  527. rotateButton?: string;
  528. drawTextButton?: string;
  529. scaleButton?: string;
  530. autoTracingButton?: string;
  531. };
  532. measurements?: {
  533. totalLength?: string;
  534. segmentLength?: string;
  535. area?: string;
  536. radius?: string;
  537. perimeter?: string;
  538. height?: string;
  539. width?: string;
  540. coordinates?: string;
  541. coordinatesMarker?: string;
  542. }
  543. }
  544. type ACTION_NAMES = 'cancel' | 'removeLastVertex' | 'finish' | 'finishMode';
  545. class Action {
  546. text: string;
  547. onClick?: (e: any) => void;
  548. }
  549. type TOOLBAR_CONTROL_ORDER =
  550. | 'drawMarker'
  551. | 'drawCircleMarker'
  552. | 'drawPolyline'
  553. | 'drawRectangle'
  554. | 'drawPolygon'
  555. | 'drawCircle'
  556. | 'editMode'
  557. | 'dragMode'
  558. | 'cutPolygon'
  559. | 'removalMode'
  560. | 'rotateMode'
  561. | 'drawText'
  562. | string;
  563. interface PMMapToolbar {
  564. /** Pass an array of button names to reorder the buttons in the Toolbar. */
  565. changeControlOrder(order?: TOOLBAR_CONTROL_ORDER[]): void;
  566. /** Receive the current order with. */
  567. getControlOrder(): TOOLBAR_CONTROL_ORDER[];
  568. /** 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. */
  569. setBlockPosition(
  570. block: 'draw' | 'edit' | 'custom' | 'options',
  571. position: L.ControlPosition
  572. ): void;
  573. /** Returns a Object with the positions for all blocks */
  574. getBlockPositions(): BlockPositions;
  575. /** To add a custom Control to the Toolbar */
  576. createCustomControl(options: CustomControlOptions): void;
  577. /** Creates a copy of a draw Control. Returns the drawInstance and the control. */
  578. copyDrawControl(
  579. copyInstance: string,
  580. options?: CustomControlOptions
  581. ): void;
  582. /** Change the actions of an existing button. */
  583. changeActionsOfControl(
  584. name: string,
  585. actions: (ACTION_NAMES | Action)[]
  586. ): void;
  587. /** Disable button by control name */
  588. setButtonDisabled(name: TOOLBAR_CONTROL_ORDER, state: boolean): void;
  589. }
  590. type KEYBOARD_EVENT_TYPE = 'current' | 'keydown' | 'keyup';
  591. interface PMMapKeyboard {
  592. /** Pass an array of button names to reorder the buttons in the Toolbar. */
  593. getLastKeyEvent(type: KEYBOARD_EVENT_TYPE[]): KeyboardKeyEventHandler;
  594. /** Returns the current pressed key. [KeyboardEvent.key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key). */
  595. getPressedKey(): string;
  596. /** Returns true if the `Shift` key is currently pressed. */
  597. isShiftKeyPressed(): boolean;
  598. /** Returns true if the `Alt` key is currently pressed. */
  599. isAltKeyPressed(): boolean;
  600. /** Returns true if the `Ctrl` key is currently pressed. */
  601. isCtrlKeyPressed(): boolean;
  602. /** Returns true if the `Meta` key is currently pressed. */
  603. isMetaKeyPressed(): boolean;
  604. }
  605. interface Button {
  606. /** Actions */
  607. actions: (ACTION_NAMES | Action)[];
  608. /** Function fired after clicking the control. */
  609. afterClick: () => void;
  610. /** CSS class with the Icon. */
  611. className: string;
  612. /** If true, other buttons will be disabled on click (default: true) */
  613. disableOtherButtons: boolean;
  614. /** Control can be toggled. */
  615. doToggle: boolean;
  616. /** Extending Class f. ex. Line, Polygon, ... L.PM.Draw.EXTENDINGCLASS */
  617. jsClass: string;
  618. /** Function fired when clicking the control. */
  619. onClick: () => void;
  620. position: L.ControlPosition;
  621. /** Text showing when you hover the control. */
  622. title: string;
  623. /** Toggle state true -> enabled, false -> disabled (default: false) */
  624. toggleStatus: boolean;
  625. /** Block of the control. 'options' is ⭐ only. */
  626. tool?: 'draw' | 'edit' | 'custom' | 'options';
  627. }
  628. interface CustomControlOptions {
  629. /** Name of the control */
  630. name: string;
  631. /** Block of the control. 'options' is ⭐ only. */
  632. block?: 'draw' | 'edit' | 'custom' | 'options';
  633. /** Text showing when you hover the control. */
  634. title?: string;
  635. /** CSS class with the Icon. */
  636. className?: string;
  637. /** Function fired when clicking the control. */
  638. onClick?: () => void;
  639. /** Function fired after clicking the control. */
  640. afterClick?: () => void;
  641. /** Actions */
  642. actions?: (ACTION_NAMES | Action)[];
  643. /** Control can be toggled. */
  644. toggle?: boolean;
  645. /** Control is disabled. */
  646. disabled?: boolean;
  647. }
  648. type PANE =
  649. | 'mapPane'
  650. | 'tilePane'
  651. | 'overlayPane'
  652. | 'shadowPane'
  653. | 'markerPane'
  654. | 'tooltipPane'
  655. | 'popupPane'
  656. | string;
  657. interface GlobalOptions extends DrawModeOptions, EditModeOptions {
  658. /** Add the created layers to a layergroup instead to the map. */
  659. layerGroup?: L.Map | L.LayerGroup;
  660. /** Prioritize the order of snapping. Default: ['Marker','CircleMarker','Circle','Line','Polygon','Rectangle']. */
  661. snappingOrder?: SUPPORTED_SHAPES[];
  662. /** Defines in which panes the layers and helper vertices are created. Default: { vertexPane: 'markerPane', layerPane: 'overlayPane', markerPane: 'markerPane' } */
  663. panes?: { vertexPane?: PANE; layerPane?: PANE; markerPane?: PANE };
  664. }
  665. interface PMDrawMap {
  666. /** Enable Draw Mode with the passed shape. */
  667. enableDraw(shape: SUPPORTED_SHAPES, options?: DrawModeOptions): void;
  668. /** Disable all drawing */
  669. disableDraw(shape?: SUPPORTED_SHAPES): void;
  670. /** Draw */
  671. Draw: Draw;
  672. /** Returns true if global Draw Mode is enabled. false when disabled. */
  673. globalDrawModeEnabled(): boolean;
  674. /** 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. */
  675. setPathOptions(
  676. options: L.PathOptions,
  677. optionsModifier?: { ignoreShapes?: SUPPORTED_SHAPES[]; merge?: boolean }
  678. ): void;
  679. /** Returns all Geoman layers on the map as array. Pass true to get a L.FeatureGroup. */
  680. getGeomanLayers(asFeatureGroup: true): L.FeatureGroup;
  681. getGeomanLayers(asFeatureGroup?: false): L.Layer[];
  682. /** Returns all Geoman draw layers on the map as array. Pass true to get a L.FeatureGroup. */
  683. getGeomanDrawLayers(asFeatureGroup: true): L.FeatureGroup;
  684. getGeomanDrawLayers(asFeatureGroup?: false): L.Layer[];
  685. }
  686. interface PMEditMap {
  687. /** Enables edit mode. The passed options are preserved, even when the mode is enabled via the Toolbar */
  688. enableGlobalEditMode(options?: EditModeOptions): void;
  689. /** Disables global edit mode. */
  690. disableGlobalEditMode(): void;
  691. /** Toggles global edit mode. */
  692. toggleGlobalEditMode(options?: EditModeOptions): void;
  693. /** Returns true if global edit mode is enabled. false when disabled. */
  694. globalEditModeEnabled(): boolean;
  695. }
  696. interface PMDragMap {
  697. /** Enables global drag mode. */
  698. enableGlobalDragMode(): void;
  699. /** Disables global drag mode. */
  700. disableGlobalDragMode(): void;
  701. /** Toggles global drag mode. */
  702. toggleGlobalDragMode(): void;
  703. /** Returns true if global drag mode is enabled. false when disabled. */
  704. globalDragModeEnabled(): boolean;
  705. }
  706. interface PMRemoveMap {
  707. /** Enables global removal mode. */
  708. enableGlobalRemovalMode(): void;
  709. /** Disables global removal mode. */
  710. disableGlobalRemovalMode(): void;
  711. /** Toggles global removal mode. */
  712. toggleGlobalRemovalMode(): void;
  713. /** Returns true if global removal mode is enabled. false when disabled. */
  714. globalRemovalModeEnabled(): boolean;
  715. }
  716. interface PMCutMap {
  717. /** Enables global cut mode. */
  718. enableGlobalCutMode(options?: CutModeOptions): void;
  719. /** Disables global cut mode. */
  720. disableGlobalCutMode(): void;
  721. /** Toggles global cut mode. */
  722. toggleGlobalCutMode(options?: CutModeOptions): void;
  723. /** Returns true if global cut mode is enabled. false when disabled. */
  724. globalCutModeEnabled(): boolean;
  725. }
  726. interface PMRotateMap {
  727. /** Enables global rotate mode. */
  728. enableGlobalRotateMode(): void;
  729. /** Disables global rotate mode. */
  730. disableGlobalRotateMode(): void;
  731. /** Toggles global rotate mode. */
  732. toggleGlobalRotateMode(): void;
  733. /** Returns true if global rotate mode is enabled. false when disabled. */
  734. globalRotateModeEnabled(): boolean;
  735. }
  736. interface PMRotateLayer {
  737. /** Enables rotate mode on the layer. */
  738. enableRotate(): void;
  739. /** Disables rotate mode on the layer. */
  740. disableRotate(): void;
  741. /** Returns if rotate mode is enabled for the layer. */
  742. rotateEnabled(): boolean;
  743. /** Rotates the layer by x degrees. */
  744. rotateLayer(degrees: number): void;
  745. /** Rotates the layer to x degrees. */
  746. rotateLayerToAngle(degrees: number): void;
  747. /** Returns the angle of the layer in degrees. */
  748. getAngle(): number;
  749. /** Set the initial angle of the layer in degrees. */
  750. setInitAngle(degrees: number): void;
  751. }
  752. interface Draw {
  753. /** Array of available shapes. */
  754. getShapes(): SUPPORTED_SHAPES[];
  755. /** Returns the active shape. */
  756. getActiveShape(): SUPPORTED_SHAPES;
  757. /** Set path options */
  758. setPathOptions(options: L.PathOptions): void;
  759. /** Set options */
  760. setOptions(options: DrawModeOptions): void;
  761. /** Get options */
  762. getOptions(): DrawModeOptions;
  763. }
  764. interface CutModeOptions {
  765. allowSelfIntersection?: boolean;
  766. }
  767. type VertexValidationHandler = (e: {
  768. layer: L.Layer;
  769. marker: L.Marker;
  770. event: any;
  771. }) => boolean;
  772. interface EditModeOptions {
  773. /** Enable snapping to other layers vertices for precision drawing. Can be disabled by holding the ALT key (default:true). */
  774. snappable?: boolean;
  775. /** The distance to another vertex when a snap should happen (default:20). */
  776. snapDistance?: number;
  777. /** Allow self intersections (default:true). */
  778. allowSelfIntersection?: boolean;
  779. /** Allow self intersections (default:true). */
  780. allowSelfIntersectionEdit?: boolean;
  781. /** Disable the removal of markers via right click / vertices via removeVertexOn. (default:false). */
  782. preventMarkerRemoval?: boolean;
  783. /** If true, vertex removal that cause a layer to fall below their minimum required vertices will remove the entire layer. If false, these vertices can't be removed. Minimum vertices are 2 for Lines and 3 for Polygons (default:true). */
  784. removeLayerBelowMinVertexCount?: boolean;
  785. /** Defines which layers should dragged with this layer together. true syncs all layers in the same LayerGroup(s) or you pass an `Array` of layers to sync. (default:false). */
  786. syncLayersOnDrag?: L.Layer[] | boolean;
  787. /** Edit-Mode for the layer can disabled (`pm.enable()`). (default:true). */
  788. allowEditing?: boolean;
  789. /** Removing can be disabled for the layer. (default:true). */
  790. allowRemoval?: boolean;
  791. /** Layer can be prevented from cutting. (default:true). */
  792. allowCutting?: boolean;
  793. /** Layer can be prevented from rotation. (default:true). */
  794. allowRotation?: boolean;
  795. /** Dragging can be disabled for the layer. (default:true). */
  796. draggable?: boolean;
  797. /** Leaflet layer event to add a vertex to a Line or Polygon, like dblclick. (default:click). */
  798. addVertexOn?:
  799. | 'click'
  800. | 'dblclick'
  801. | 'mousedown'
  802. | 'mouseover'
  803. | 'mouseout'
  804. | 'contextmenu';
  805. /** A function for validation if a vertex (of a Line / Polygon) is allowed to add. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. (default:undefined). */
  806. addVertexValidation?: undefined | VertexValidationHandler;
  807. /** Leaflet layer event to remove a vertex from a Line or Polygon, like dblclick. (default:contextmenu). */
  808. removeVertexOn?:
  809. | 'click'
  810. | 'dblclick'
  811. | 'mousedown'
  812. | 'mouseover'
  813. | 'mouseout'
  814. | 'contextmenu';
  815. /** A function for validation if a vertex (of a Line / Polygon) is allowed to remove. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. */
  816. removeVertexValidation?: undefined | VertexValidationHandler;
  817. /** A function for validation if a vertex / helper-marker is allowed to move / drag. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. */
  818. moveVertexValidation?: undefined | VertexValidationHandler;
  819. /** Shows only n markers closest to the cursor. Use -1 for no limit (default:-1). */
  820. limitMarkersToCount?: number;
  821. /** Shows markers when under the given zoom level ⭐ */
  822. limitMarkersToZoom?: number;
  823. /** Shows only markers in the viewport ⭐ */
  824. limitMarkersToViewport?: boolean;
  825. /** Shows markers only after the layer was clicked ⭐ */
  826. limitMarkersToClick?: boolean;
  827. /** Pin shared vertices/markers together during edit ⭐ */
  828. pinning?: boolean;
  829. /** Hide the middle Markers in edit mode from Polyline and Polygon. */
  830. hideMiddleMarkers?: boolean;
  831. }
  832. interface TextOptions {
  833. /** Predefined text for Text-Layer. */
  834. text?: string;
  835. /** Directly after placing the Text-Layer text editing is activated. */
  836. focusAfterDraw?: boolean;
  837. /** The text layer is removed if no text is written. */
  838. removeIfEmpty?: boolean;
  839. /** Custom CSS Classes for Text-Layer. Separated by a space. */
  840. className?: string;
  841. }
  842. interface DrawModeOptions {
  843. /** Enable snapping to other layers vertices for precision drawing. Can be disabled by holding the ALT key (default:true). */
  844. snappable?: boolean;
  845. /** The distance to another vertex when a snap should happen (default:20). */
  846. snapDistance?: number;
  847. /** Allow snapping in the middle of two vertices (middleMarker)(default:false). */
  848. snapMiddle?: boolean;
  849. /** Allow snapping between two vertices. (default: true)*/
  850. snapSegment?: boolean;
  851. /** Require the last point of a shape to be snapped. (default: false). */
  852. requireSnapToFinish?: boolean;
  853. /** Show helpful tooltips for your user (default:true). */
  854. tooltips?: boolean;
  855. /** Allow self intersections (default:true). */
  856. allowSelfIntersection?: boolean;
  857. /** Leaflet path options for the lines between drawn vertices/markers. (default:{color:'red'}). */
  858. templineStyle?: L.CircleMarkerOptions;
  859. /** Leaflet path options for the helper line between last drawn vertex and the cursor. (default:{color:'red',dashArray:[5,5]}). */
  860. hintlineStyle?: L.PathOptions;
  861. /** Leaflet path options for the drawn layer (Only for L.Path layers). (default:null). */
  862. pathOptions?: L.PathOptions;
  863. /** Leaflet marker options (only for drawing markers). (default:{draggable:true}). */
  864. markerStyle?: L.MarkerOptions;
  865. /** Show a marker at the cursor (default:true). */
  866. cursorMarker?: boolean;
  867. /** Leaflet layer event to finish the drawn shape (default:null). */
  868. finishOn?:
  869. | null
  870. | 'click'
  871. | 'dblclick'
  872. | 'mousedown'
  873. | 'mouseover'
  874. | 'mouseout'
  875. | 'contextmenu'
  876. | 'snap';
  877. /** Hide the middle Markers in edit mode from Polyline and Polygon. (default:false). */
  878. hideMiddleMarkers?: boolean;
  879. /** Set the min radius of a Circle. (default:null). */
  880. minRadiusCircle?: number;
  881. /** Set the max radius of a Circle. (default:null). */
  882. maxRadiusCircle?: number;
  883. /** Set the min radius of a CircleMarker when editable is active. (default:null). */
  884. minRadiusCircleMarker?: number;
  885. /** Set the max radius of a CircleMarker when editable is active. (default:null). */
  886. maxRadiusCircleMarker?: number;
  887. /** Makes a CircleMarker editable like a Circle (default:false). */
  888. editable?: boolean;
  889. /** Markers and CircleMarkers are editable during the draw-session (you can drag them around immediately after drawing them) (default:true). */
  890. markerEditable?: boolean;
  891. /** Draw-Mode stays enabled after finishing a layer to immediately draw the next layer. Defaults to true for Markers and CircleMarkers and false for all other layers. */
  892. continueDrawing?: boolean;
  893. /** Angel of rectangle. */
  894. rectangleAngle?: number;
  895. /** Cut-Mode: Only the passed layers can be cut. Cutted layers are removed from the Array until no layers are left anymore and cutting is working on all layers again. (Default: []) */
  896. layersToCut?: L.Layer[];
  897. textOptions?: TextOptions;
  898. }
  899. /**
  900. * PM toolbar options.
  901. */
  902. interface ToolbarOptions {
  903. /** Toolbar position. */
  904. position?: L.ControlPosition;
  905. /** The position of each block can be customized. If not set, the value from position is taken. */
  906. positions?: BlockPositions;
  907. /** Adds button to draw Markers (default:true) */
  908. drawMarker?: boolean;
  909. /** Adds button to draw CircleMarkers (default:true) */
  910. drawCircleMarker?: boolean;
  911. /** Adds button to draw Line (default:true) */
  912. drawPolyline?: boolean;
  913. /** Adds button to draw Rectangle (default:true) */
  914. drawRectangle?: boolean;
  915. /** Adds button to draw Polygon (default:true) */
  916. drawPolygon?: boolean;
  917. /** Adds button to draw Text (default:true) */
  918. drawText?: boolean;
  919. /** Adds button to draw Circle (default:true) */
  920. drawCircle?: boolean;
  921. /** Adds button to toggle edit mode for all layers (default:true) */
  922. editMode?: boolean;
  923. /** Adds button to toggle drag mode for all layers (default:true) */
  924. dragMode?: boolean;
  925. /** Adds button to cut a hole in a polygon or line (default:true) */
  926. cutPolygon?: boolean;
  927. /** Adds a button to remove layers (default:true) */
  928. removalMode?: boolean;
  929. /** Adds a button to rotate layers (default:true) */
  930. rotateMode?: boolean;
  931. /** All buttons will be displayed as one block Customize Controls (default:false) */
  932. oneBlock?: boolean;
  933. /** Shows all draw buttons / buttons in the draw block (default:true) */
  934. drawControls?: boolean;
  935. /** Shows all edit buttons / buttons in the edit block (default:true) */
  936. editControls?: boolean;
  937. /** Shows all buttons in the custom block (default:true) */
  938. customControls?: boolean;
  939. /** Shows all options buttons / buttons in the option block ⭐ */
  940. optionsControls?: boolean;
  941. /** Adds a button to toggle the Pinning Option ⭐ */
  942. pinningOption?: boolean;
  943. /** Adds a button to toggle the Snapping Option ⭐ */
  944. snappingOption?: boolean;
  945. /** Adds custom button (default:true) */
  946. // The type of custom buttons are always boolean but TS needs the other types defined too.
  947. [key: string]: L.ControlPosition | BlockPositions | boolean | undefined;
  948. }
  949. /** the position of each block. */
  950. interface BlockPositions {
  951. /** Draw control position (default:''). '' also refers to this position. */
  952. draw?: L.ControlPosition;
  953. /** Edit control position (default:''). */
  954. edit?: L.ControlPosition;
  955. /** Custom control position (default:''). */
  956. custom?: L.ControlPosition;
  957. /** Options control position (default:'') ⭐ */
  958. options?: L.ControlPosition;
  959. }
  960. interface PMEditLayer extends PMEditTextLayer {
  961. /** Enables edit mode. The passed options are preserved, even when the mode is enabled via the Toolbar */
  962. enable(options?: EditModeOptions): void;
  963. /** Sets layer options */
  964. setOptions(options?: EditModeOptions): void;
  965. /** Gets layer options */
  966. getOptions(): EditModeOptions;
  967. /** Disables edit mode. */
  968. disable(): void;
  969. /** Toggles edit mode. Passed options are preserved. */
  970. toggleEdit(options?: EditModeOptions): void;
  971. /** Returns true if edit mode is enabled. false when disabled. */
  972. enabled(): boolean;
  973. /** Returns true if Line or Polygon has a self intersection. */
  974. hasSelfIntersection(): boolean;
  975. /** Removes the layer with the same checks as GlobalRemovalMode. */
  976. remove(): void;
  977. }
  978. interface PMEditTextLayer {
  979. /** Activate text editing of Text-Layer. */
  980. focus(): void;
  981. /** Deactivate text editing of Text-Layer. */
  982. blur(): void;
  983. /** Is text editing active on Text-Layer. */
  984. hasFocus(): boolean;
  985. /** Returns the `<textarea>` DOM element of Text-Layer. */
  986. getElement(): HTMLElement;
  987. /** Set text on Text-Layer. */
  988. setText(text: string): void;
  989. /** Returns the text of Text-Layer. */
  990. getText(): string;
  991. }
  992. interface PMDragLayer {
  993. /** Enables dragging for the layer. */
  994. enableLayerDrag(): void;
  995. /** Disables dragging for the layer. */
  996. disableLayerDrag(): void;
  997. /** Returns if the layer is currently dragging. */
  998. dragging(): boolean;
  999. /** Returns if drag mode is enabled for the layer. */
  1000. layerDragEnabled(): boolean;
  1001. }
  1002. interface PMLayer extends PMRotateLayer, PMEditLayer, PMDragLayer {
  1003. /** Get shape of the layer. */
  1004. getShape(): SUPPORTED_SHAPES;
  1005. }
  1006. interface PMLayerGroup {
  1007. /** Enables edit mode for all child layers. The passed options are preserved, even when the mode is enabled via the Toolbar */
  1008. enable(options?: EditModeOptions): void;
  1009. /** Disable edit mode for all child layers.*/
  1010. disable(): void;
  1011. /** Returns if minimum one layer is enabled. */
  1012. enabled(): boolean;
  1013. /** Toggle enable / disable on all layers. */
  1014. toggleEdit(options?: EditModeOptions): void;
  1015. /** Returns the layers of the LayerGroup. `deep=true` return also the children of LayerGroup children. `filterGeoman=true` filter out layers that don't have Leaflet-Geoman or temporary stuff. `filterGroupsOut=true` does not return the LayerGroup layers self. (Default: `deep=false`,`filterGeoman=true`, `filterGroupsOut=true` ) */
  1016. getLayers(
  1017. deep?: boolean,
  1018. filterGeoman?: boolean,
  1019. filterGroupsOut?: boolean
  1020. ): L.Layer[];
  1021. /** Apply Leaflet-Geoman options to all children. The passed options are preserved, even when the mode is enabled via the Toolbar */
  1022. setOptions(options?: EditModeOptions): void;
  1023. /** Returns the options of the LayerGroup. */
  1024. getOptions(): EditModeOptions;
  1025. /** Returns if currently a layer in the LayerGroup is dragging. */
  1026. dragging(): boolean;
  1027. }
  1028. namespace Utils {
  1029. /** Returns the translation of the passed path. path = json-string f.ex. tooltips.placeMarker */
  1030. function getTranslation(path: string): string;
  1031. /** Returns the middle LatLng between two LatLngs */
  1032. function calcMiddleLatLng(
  1033. map: L.Map,
  1034. latlng1: L.LatLng,
  1035. latlng2: L.LatLng
  1036. ): L.LatLng;
  1037. /** Returns all layers that are available for Geoman */
  1038. function findLayers(map: L.Map): L.Layer[];
  1039. /** Converts a circle into a polygon with default 60 sides. For CRS.Simple maps `withBearing` needs to be false */
  1040. function circleToPolygon(
  1041. circle: L.Circle,
  1042. sides?: number,
  1043. withBearing?: boolean
  1044. ): L.Polygon;
  1045. /** Converts a px-radius (CircleMarker) to meter-radius (Circle). The center LatLng is needed because the earth has different projections on different places. **/
  1046. function pxRadiusToMeterRadius(
  1047. radiusInPx: number,
  1048. map: L.Map,
  1049. center: L.LatLng
  1050. ): number;
  1051. }
  1052. /**
  1053. * DRAW MODE MAP EVENT HANDLERS
  1054. */
  1055. export type GlobalDrawModeToggledEventHandler = (event: {
  1056. enabled: boolean;
  1057. shape: PM.SUPPORTED_SHAPES;
  1058. map: L.Map;
  1059. }) => void;
  1060. export type DrawStartEventHandler = (e: {
  1061. shape: PM.SUPPORTED_SHAPES;
  1062. workingLayer: L.Layer;
  1063. }) => void;
  1064. export type DrawEndEventHandler = (e: {
  1065. shape: PM.SUPPORTED_SHAPES;
  1066. }) => void;
  1067. export type CreateEventHandler = (e: {
  1068. shape: PM.SUPPORTED_SHAPES;
  1069. layer: L.Layer;
  1070. }) => void;
  1071. /**
  1072. * DRAW MODE LAYER EVENT HANDLERS
  1073. */
  1074. export type VertexAddedEventHandler = (e: {
  1075. shape: PM.SUPPORTED_SHAPES;
  1076. workingLayer: L.Layer;
  1077. marker: L.Marker;
  1078. latlng: L.LatLng;
  1079. }) => void;
  1080. export type SnapEventHandler = (e: {
  1081. shape: PM.SUPPORTED_SHAPES;
  1082. distance: number;
  1083. layer: L.Layer;
  1084. workingLayer: L.Layer;
  1085. marker: L.Marker;
  1086. layerInteractedWith: L.Layer;
  1087. segement: any;
  1088. snapLatLng: L.LatLng;
  1089. }) => void;
  1090. export type CenterPlacedEventHandler = (e: {
  1091. shape: PM.SUPPORTED_SHAPES;
  1092. workingLayer: L.Layer;
  1093. latlng: L.LatLng;
  1094. }) => void;
  1095. /**
  1096. * EDIT MODE LAYER EVENT HANDLERS
  1097. */
  1098. export type EditEventHandler = (e: {
  1099. shape: PM.SUPPORTED_SHAPES;
  1100. layer: L.Layer;
  1101. }) => void;
  1102. export type UpdateEventHandler = (e: {
  1103. shape: PM.SUPPORTED_SHAPES;
  1104. layer: L.Layer;
  1105. }) => void;
  1106. export type EnableEventHandler = (e: {
  1107. shape: PM.SUPPORTED_SHAPES;
  1108. layer: L.Layer;
  1109. }) => void;
  1110. export type DisableEventHandler = (e: {
  1111. shape: PM.SUPPORTED_SHAPES;
  1112. layer: L.Layer;
  1113. }) => void;
  1114. export type VertexAddedEventHandler2 = (e: {
  1115. layer: L.Layer;
  1116. indexPath: number;
  1117. latlng: L.LatLng;
  1118. marker: L.Marker;
  1119. shape: PM.SUPPORTED_SHAPES;
  1120. }) => void;
  1121. export type VertexRemovedEventHandler = (e: {
  1122. layer: L.Layer;
  1123. indexPath: number;
  1124. marker: L.Marker;
  1125. shape: PM.SUPPORTED_SHAPES;
  1126. }) => void;
  1127. export type VertexClickEventHandler = (e: {
  1128. layer: L.Layer;
  1129. indexPath: number;
  1130. markerEvent: any;
  1131. shape: PM.SUPPORTED_SHAPES;
  1132. }) => void;
  1133. export type MarkerDragStartEventHandler = (e: {
  1134. layer: L.Layer;
  1135. indexPath: number;
  1136. markerEvent: any;
  1137. shape: PM.SUPPORTED_SHAPES;
  1138. }) => void;
  1139. export type MarkerDragEventHandler = (e: {
  1140. layer: L.Layer;
  1141. indexPath: number;
  1142. markerEvent: any;
  1143. shape: PM.SUPPORTED_SHAPES;
  1144. }) => void;
  1145. export type MarkerDragEndEventHandler = (e: {
  1146. layer: L.Layer;
  1147. indexPath: number;
  1148. markerEvent: any;
  1149. shape: PM.SUPPORTED_SHAPES;
  1150. intersectionRest: boolean;
  1151. }) => void;
  1152. export type LayerResetEventHandler = (e: {
  1153. layer: L.Layer;
  1154. indexPath: number;
  1155. markerEvent: any;
  1156. shape: PM.SUPPORTED_SHAPES;
  1157. }) => void;
  1158. export type IntersectEventHandler = (e: {
  1159. shape: PM.SUPPORTED_SHAPES;
  1160. layer: L.Layer;
  1161. intersection: L.LatLng;
  1162. }) => void;
  1163. export type ChangeEventHandler = (e: {
  1164. shape: PM.SUPPORTED_SHAPES;
  1165. layer: L.Layer;
  1166. latlngs: L.LatLng | L.LatLng[];
  1167. }) => void;
  1168. export type TextChangeEventHandler = (e: {
  1169. shape: PM.SUPPORTED_SHAPES;
  1170. layer: L.Layer;
  1171. text: string;
  1172. }) => void;
  1173. export type TextFocusEventHandler = (e: {
  1174. shape: PM.SUPPORTED_SHAPES;
  1175. layer: L.Layer;
  1176. }) => void;
  1177. export type TextBlurEventHandler = (e: {
  1178. shape: PM.SUPPORTED_SHAPES;
  1179. layer: L.Layer;
  1180. }) => void;
  1181. /**
  1182. * EDIT MODE MAP EVENT HANDLERS
  1183. */
  1184. export type GlobalEditModeToggledEventHandler = (event: {
  1185. enabled: boolean;
  1186. map: L.Map;
  1187. }) => void;
  1188. /**
  1189. * DRAG MODE MAP EVENT HANDLERS
  1190. */
  1191. export type GlobalDragModeToggledEventHandler = (event: {
  1192. enabled: boolean;
  1193. map: L.Map;
  1194. }) => void;
  1195. /**
  1196. * DRAG MODE LAYER EVENT HANDLERS
  1197. */
  1198. export type DragStartEventHandler = (e: {
  1199. layer: L.Layer;
  1200. shape: PM.SUPPORTED_SHAPES;
  1201. }) => void;
  1202. export type DragEventHandler = (e: {
  1203. layer: L.Layer;
  1204. containerPoint: any;
  1205. latlng: L.LatLng;
  1206. layerPoint: L.Point;
  1207. originalEvent: any;
  1208. shape: PM.SUPPORTED_SHAPES;
  1209. }) => void;
  1210. export type DragEndEventHandler = (e: {
  1211. layer: L.Layer;
  1212. shape: PM.SUPPORTED_SHAPES;
  1213. }) => void;
  1214. export type DragEnableEventHandler = (e: {
  1215. layer: L.Layer;
  1216. shape: PM.SUPPORTED_SHAPES;
  1217. }) => void;
  1218. export type DragDisableEventHandler = (e: {
  1219. layer: L.Layer;
  1220. shape: PM.SUPPORTED_SHAPES;
  1221. }) => void;
  1222. /**
  1223. * REMOVE MODE LAYER EVENT HANDLERS
  1224. */
  1225. export type RemoveEventHandler = (e: {
  1226. layer: L.Layer;
  1227. shape: PM.SUPPORTED_SHAPES;
  1228. }) => void;
  1229. /**
  1230. * REMOVE MODE MAP EVENT HANDLERS
  1231. */
  1232. export type GlobalRemovalModeToggledEventHandler = (e: {
  1233. enabled: boolean;
  1234. map: L.Map;
  1235. }) => void;
  1236. /**
  1237. * CUT MODE MAP EVENT HANDLERS
  1238. */
  1239. export type GlobalCutModeToggledEventHandler = (e: {
  1240. enabled: boolean;
  1241. map: L.Map;
  1242. }) => void;
  1243. export type CutEventHandler = (e: {
  1244. layer: L.Layer;
  1245. originalLayer: L.Layer;
  1246. shape: PM.SUPPORTED_SHAPES;
  1247. }) => void;
  1248. /**
  1249. * ROTATE MODE LAYER EVENT HANDLERS
  1250. */
  1251. export type RotateEnableEventHandler = (e: {
  1252. layer: L.Layer;
  1253. helpLayer: L.Layer;
  1254. shape: PM.SUPPORTED_SHAPES;
  1255. }) => void;
  1256. export type RotateDisableEventHandler = (e: {
  1257. layer: L.Layer;
  1258. shape: PM.SUPPORTED_SHAPES;
  1259. }) => void;
  1260. export type RotateStartEventHandler = (e: {
  1261. layer: L.Layer;
  1262. helpLayer: L.Layer;
  1263. startAngle: number;
  1264. originLatLngs: L.LatLng[];
  1265. }) => void;
  1266. export type RotateEventHandler = (e: {
  1267. layer: L.Layer;
  1268. helpLayer: L.Layer;
  1269. startAngle: number;
  1270. angle: number;
  1271. angleDiff: number;
  1272. oldLatLngs: L.LatLng[];
  1273. newLatLngs: L.LatLng[];
  1274. }) => void;
  1275. export type RotateEndEventHandler = (e: {
  1276. layer: L.Layer;
  1277. helpLayer: L.Layer;
  1278. startAngle: number;
  1279. angle: number;
  1280. originLatLngs: L.LatLng[];
  1281. newLatLngs: L.LatLng[];
  1282. }) => void;
  1283. /**
  1284. * ROTATE MODE MAP EVENT HANDLERS
  1285. */
  1286. export type GlobalRotateModeToggledEventHandler = (e: {
  1287. enabled: boolean;
  1288. map: L.Map;
  1289. }) => void;
  1290. /**
  1291. * TRANSLATION EVENT HANDLERS
  1292. */
  1293. export type LangChangeEventHandler = (e: {
  1294. activeLang: string;
  1295. oldLang: string;
  1296. fallback: string;
  1297. translations: PM.Translations;
  1298. }) => void;
  1299. /**
  1300. * CONTROL MAP EVENT HANDLERS
  1301. */
  1302. export type ButtonClickEventHandler = (e: {
  1303. btnName: string;
  1304. button: PM.Button;
  1305. }) => void;
  1306. export type ActionClickEventHandler = (e: {
  1307. text: string;
  1308. action: string;
  1309. btnName: string;
  1310. button: PM.Button;
  1311. }) => void;
  1312. /**
  1313. * KEYBOARD EVENT HANDLERS
  1314. */
  1315. export type KeyboardKeyEventHandler = (e: {
  1316. focusOn: 'document' | 'map';
  1317. eventType: 'keydown' | 'keyup';
  1318. event: any;
  1319. }) => void;
  1320. }
  1321. }