@deck.gl-community/editable-layers 9.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.md +82 -0
  2. package/dist/constants.d.ts +14 -0
  3. package/dist/constants.js +14 -0
  4. package/dist/curve-utils.d.ts +2 -0
  5. package/dist/curve-utils.js +61 -0
  6. package/dist/edit-modes/composite-mode.d.ts +14 -0
  7. package/dist/edit-modes/composite-mode.js +47 -0
  8. package/dist/edit-modes/draw-90degree-polygon-mode.d.ts +11 -0
  9. package/dist/edit-modes/draw-90degree-polygon-mode.js +179 -0
  10. package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts +24 -0
  11. package/dist/edit-modes/draw-circle-by-diameter-mode.js +78 -0
  12. package/dist/edit-modes/draw-circle-from-center-mode.d.ts +22 -0
  13. package/dist/edit-modes/draw-circle-from-center-mode.js +70 -0
  14. package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.d.ts +5 -0
  15. package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.js +20 -0
  16. package/dist/edit-modes/draw-ellipse-using-three-points-mode.d.ts +5 -0
  17. package/dist/edit-modes/draw-ellipse-using-three-points-mode.js +16 -0
  18. package/dist/edit-modes/draw-line-string-mode.d.ts +25 -0
  19. package/dist/edit-modes/draw-line-string-mode.js +170 -0
  20. package/dist/edit-modes/draw-point-mode.d.ts +8 -0
  21. package/dist/edit-modes/draw-point-mode.js +28 -0
  22. package/dist/edit-modes/draw-polygon-by-dragging-mode.d.ts +14 -0
  23. package/dist/edit-modes/draw-polygon-by-dragging-mode.js +87 -0
  24. package/dist/edit-modes/draw-polygon-mode.d.ts +10 -0
  25. package/dist/edit-modes/draw-polygon-mode.js +143 -0
  26. package/dist/edit-modes/draw-rectangle-from-center-mode.d.ts +5 -0
  27. package/dist/edit-modes/draw-rectangle-from-center-mode.js +17 -0
  28. package/dist/edit-modes/draw-rectangle-mode.d.ts +5 -0
  29. package/dist/edit-modes/draw-rectangle-mode.js +11 -0
  30. package/dist/edit-modes/draw-rectangle-using-three-points-mode.d.ts +5 -0
  31. package/dist/edit-modes/draw-rectangle-using-three-points-mode.js +28 -0
  32. package/dist/edit-modes/draw-square-from-center-mode.d.ts +5 -0
  33. package/dist/edit-modes/draw-square-from-center-mode.js +35 -0
  34. package/dist/edit-modes/draw-square-mode.d.ts +5 -0
  35. package/dist/edit-modes/draw-square-mode.js +28 -0
  36. package/dist/edit-modes/duplicate-mode.d.ts +7 -0
  37. package/dist/edit-modes/duplicate-mode.js +17 -0
  38. package/dist/edit-modes/edit-mode.d.ts +11 -0
  39. package/dist/edit-modes/edit-mode.js +2 -0
  40. package/dist/edit-modes/elevation-mode.d.ts +13 -0
  41. package/dist/edit-modes/elevation-mode.js +49 -0
  42. package/dist/edit-modes/extend-line-string-mode.d.ts +9 -0
  43. package/dist/edit-modes/extend-line-string-mode.js +72 -0
  44. package/dist/edit-modes/extrude-mode.d.ts +15 -0
  45. package/dist/edit-modes/extrude-mode.js +186 -0
  46. package/dist/edit-modes/geojson-edit-mode.d.ts +33 -0
  47. package/dist/edit-modes/geojson-edit-mode.js +208 -0
  48. package/dist/edit-modes/immutable-feature-collection.d.ts +43 -0
  49. package/dist/edit-modes/immutable-feature-collection.js +300 -0
  50. package/dist/edit-modes/measure-angle-mode.d.ts +11 -0
  51. package/dist/edit-modes/measure-angle-mode.js +99 -0
  52. package/dist/edit-modes/measure-area-mode.d.ts +8 -0
  53. package/dist/edit-modes/measure-area-mode.js +50 -0
  54. package/dist/edit-modes/measure-distance-mode.d.ts +19 -0
  55. package/dist/edit-modes/measure-distance-mode.js +171 -0
  56. package/dist/edit-modes/modify-mode.d.ts +15 -0
  57. package/dist/edit-modes/modify-mode.js +203 -0
  58. package/dist/edit-modes/resize-circle-mode.d.ts +16 -0
  59. package/dist/edit-modes/resize-circle-mode.js +142 -0
  60. package/dist/edit-modes/rotate-mode.d.ts +17 -0
  61. package/dist/edit-modes/rotate-mode.js +151 -0
  62. package/dist/edit-modes/scale-mode.d.ts +27 -0
  63. package/dist/edit-modes/scale-mode.js +173 -0
  64. package/dist/edit-modes/snappable-mode.d.ts +21 -0
  65. package/dist/edit-modes/snappable-mode.js +109 -0
  66. package/dist/edit-modes/split-polygon-mode.d.ts +10 -0
  67. package/dist/edit-modes/split-polygon-mode.js +164 -0
  68. package/dist/edit-modes/three-click-polygon-mode.d.ts +10 -0
  69. package/dist/edit-modes/three-click-polygon-mode.js +72 -0
  70. package/dist/edit-modes/transform-mode.d.ts +9 -0
  71. package/dist/edit-modes/transform-mode.js +63 -0
  72. package/dist/edit-modes/translate-mode.d.ts +13 -0
  73. package/dist/edit-modes/translate-mode.js +113 -0
  74. package/dist/edit-modes/two-click-polygon-mode.d.ts +13 -0
  75. package/dist/edit-modes/two-click-polygon-mode.js +93 -0
  76. package/dist/edit-modes/types.d.ts +86 -0
  77. package/dist/edit-modes/types.js +1 -0
  78. package/dist/edit-modes/utils.d.ts +36 -0
  79. package/dist/edit-modes/utils.js +381 -0
  80. package/dist/edit-modes/view-mode.d.ts +3 -0
  81. package/dist/edit-modes/view-mode.js +3 -0
  82. package/dist/editable-layers/editable-geojson-layer.d.ts +98 -0
  83. package/dist/editable-layers/editable-geojson-layer.js +450 -0
  84. package/dist/editable-layers/editable-h3-cluster-layer.d.ts +34 -0
  85. package/dist/editable-layers/editable-h3-cluster-layer.js +164 -0
  86. package/dist/editable-layers/editable-layer.d.ts +49 -0
  87. package/dist/editable-layers/editable-layer.js +195 -0
  88. package/dist/editable-layers/editable-path-layer.d.ts +9 -0
  89. package/dist/editable-layers/editable-path-layer.js +34 -0
  90. package/dist/editable-layers/elevated-edit-handle-layer.d.ts +7 -0
  91. package/dist/editable-layers/elevated-edit-handle-layer.js +24 -0
  92. package/dist/editable-layers/junction-scatterplot-layer.d.ts +14 -0
  93. package/dist/editable-layers/junction-scatterplot-layer.js +41 -0
  94. package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.d.ts +4 -0
  95. package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.js +55 -0
  96. package/dist/editable-layers/path-marker-layer/create-path-markers.d.ts +16 -0
  97. package/dist/editable-layers/path-marker-layer/create-path-markers.js +75 -0
  98. package/dist/editable-layers/path-marker-layer/path-marker-layer.d.ts +40 -0
  99. package/dist/editable-layers/path-marker-layer/path-marker-layer.js +121 -0
  100. package/dist/editable-layers/path-marker-layer/polyline.d.ts +18 -0
  101. package/dist/editable-layers/path-marker-layer/polyline.js +37 -0
  102. package/dist/editable-layers/path-outline-layer/path-outline-layer.d.ts +26 -0
  103. package/dist/editable-layers/path-outline-layer/path-outline-layer.js +106 -0
  104. package/dist/editable-layers/selection-layer.d.ts +26 -0
  105. package/dist/editable-layers/selection-layer.js +167 -0
  106. package/dist/geojson-types.d.ts +58 -0
  107. package/dist/geojson-types.js +2 -0
  108. package/dist/index.cjs +5825 -0
  109. package/dist/index.cjs.map +7 -0
  110. package/dist/index.d.ts +60 -0
  111. package/dist/index.js +62 -0
  112. package/dist/lib/constants.d.ts +6 -0
  113. package/dist/lib/constants.js +6 -0
  114. package/dist/lib/deck-renderer/deck-cache.d.ts +14 -0
  115. package/dist/lib/deck-renderer/deck-cache.js +51 -0
  116. package/dist/lib/deck-renderer/deck-drawer.d.ts +63 -0
  117. package/dist/lib/deck-renderer/deck-drawer.js +232 -0
  118. package/dist/lib/feature.d.ts +10 -0
  119. package/dist/lib/feature.js +16 -0
  120. package/dist/lib/layer-mouse-event.d.ts +11 -0
  121. package/dist/lib/layer-mouse-event.js +24 -0
  122. package/dist/lib/layers/junctions-layer.d.ts +8 -0
  123. package/dist/lib/layers/junctions-layer.js +33 -0
  124. package/dist/lib/layers/segments-layer.d.ts +18 -0
  125. package/dist/lib/layers/segments-layer.js +94 -0
  126. package/dist/lib/layers/texts-layer.d.ts +8 -0
  127. package/dist/lib/layers/texts-layer.js +32 -0
  128. package/dist/lib/math.d.ts +11 -0
  129. package/dist/lib/math.js +22 -0
  130. package/dist/lib/nebula-layer.d.ts +13 -0
  131. package/dist/lib/nebula-layer.js +26 -0
  132. package/dist/lib/nebula.d.ts +34 -0
  133. package/dist/lib/nebula.js +254 -0
  134. package/dist/lib/style.d.ts +19 -0
  135. package/dist/lib/style.js +20 -0
  136. package/dist/memoize.d.ts +6 -0
  137. package/dist/memoize.js +40 -0
  138. package/dist/mode-handlers/composite-mode-handler.d.ts +24 -0
  139. package/dist/mode-handlers/composite-mode-handler.js +55 -0
  140. package/dist/mode-handlers/draw-90degree-polygon-handler.d.ts +13 -0
  141. package/dist/mode-handlers/draw-90degree-polygon-handler.js +169 -0
  142. package/dist/mode-handlers/draw-circle-by-bounding-box-handler.d.ts +9 -0
  143. package/dist/mode-handlers/draw-circle-by-bounding-box-handler.js +29 -0
  144. package/dist/mode-handlers/draw-circle-from-center-handler.d.ts +9 -0
  145. package/dist/mode-handlers/draw-circle-from-center-handler.js +27 -0
  146. package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.d.ts +9 -0
  147. package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.js +30 -0
  148. package/dist/mode-handlers/draw-ellipse-using-three-points-handler.d.ts +9 -0
  149. package/dist/mode-handlers/draw-ellipse-using-three-points-handler.js +37 -0
  150. package/dist/mode-handlers/draw-line-string-handler.d.ts +9 -0
  151. package/dist/mode-handlers/draw-line-string-handler.js +83 -0
  152. package/dist/mode-handlers/draw-point-handler.d.ts +5 -0
  153. package/dist/mode-handlers/draw-point-handler.js +11 -0
  154. package/dist/mode-handlers/draw-polygon-handler.d.ts +11 -0
  155. package/dist/mode-handlers/draw-polygon-handler.js +92 -0
  156. package/dist/mode-handlers/draw-rectangle-handler.d.ts +9 -0
  157. package/dist/mode-handlers/draw-rectangle-handler.js +18 -0
  158. package/dist/mode-handlers/draw-rectangle-using-three-points-handler.d.ts +9 -0
  159. package/dist/mode-handlers/draw-rectangle-using-three-points-handler.js +49 -0
  160. package/dist/mode-handlers/duplicate-handler.d.ts +9 -0
  161. package/dist/mode-handlers/duplicate-handler.js +19 -0
  162. package/dist/mode-handlers/elevation-handler.d.ts +19 -0
  163. package/dist/mode-handlers/elevation-handler.js +48 -0
  164. package/dist/mode-handlers/extrude-handler.d.ts +18 -0
  165. package/dist/mode-handlers/extrude-handler.js +176 -0
  166. package/dist/mode-handlers/mode-handler.d.ts +61 -0
  167. package/dist/mode-handlers/mode-handler.js +286 -0
  168. package/dist/mode-handlers/modify-handler.d.ts +19 -0
  169. package/dist/mode-handlers/modify-handler.js +193 -0
  170. package/dist/mode-handlers/rotate-handler.d.ts +17 -0
  171. package/dist/mode-handlers/rotate-handler.js +74 -0
  172. package/dist/mode-handlers/scale-handler.d.ts +17 -0
  173. package/dist/mode-handlers/scale-handler.js +76 -0
  174. package/dist/mode-handlers/snappable-handler.d.ts +33 -0
  175. package/dist/mode-handlers/snappable-handler.js +133 -0
  176. package/dist/mode-handlers/split-polygon-handler.d.ts +11 -0
  177. package/dist/mode-handlers/split-polygon-handler.js +154 -0
  178. package/dist/mode-handlers/three-click-polygon-handler.d.ts +5 -0
  179. package/dist/mode-handlers/three-click-polygon-handler.js +18 -0
  180. package/dist/mode-handlers/translate-handler.d.ts +17 -0
  181. package/dist/mode-handlers/translate-handler.js +72 -0
  182. package/dist/mode-handlers/two-click-polygon-handler.d.ts +5 -0
  183. package/dist/mode-handlers/two-click-polygon-handler.js +18 -0
  184. package/dist/mode-handlers/view-handler.d.ts +8 -0
  185. package/dist/mode-handlers/view-handler.js +10 -0
  186. package/dist/shaderlib/color/color.d.ts +8 -0
  187. package/dist/shaderlib/color/color.js +51 -0
  188. package/dist/shaderlib/outline/outline.d.ts +8 -0
  189. package/dist/shaderlib/outline/outline.js +97 -0
  190. package/dist/shaderlib/utils/utils.d.ts +8 -0
  191. package/dist/shaderlib/utils/utils.js +28 -0
  192. package/dist/translateFromCenter.d.ts +4 -0
  193. package/dist/translateFromCenter.js +19 -0
  194. package/dist/types.d.ts +35 -0
  195. package/dist/types.js +1 -0
  196. package/dist/utils.d.ts +20 -0
  197. package/dist/utils.js +144 -0
  198. package/package.json +84 -0
  199. package/src/constants.ts +15 -0
  200. package/src/curve-utils.ts +77 -0
  201. package/src/edit-modes/composite-mode.ts +74 -0
  202. package/src/edit-modes/draw-90degree-polygon-mode.ts +220 -0
  203. package/src/edit-modes/draw-circle-by-diameter-mode.ts +88 -0
  204. package/src/edit-modes/draw-circle-from-center-mode.ts +79 -0
  205. package/src/edit-modes/draw-ellipse-by-bounding-box-mode.ts +25 -0
  206. package/src/edit-modes/draw-ellipse-using-three-points-mode.ts +23 -0
  207. package/src/edit-modes/draw-line-string-mode.ts +200 -0
  208. package/src/edit-modes/draw-point-mode.ts +35 -0
  209. package/src/edit-modes/draw-polygon-by-dragging-mode.ts +106 -0
  210. package/src/edit-modes/draw-polygon-mode.ts +171 -0
  211. package/src/edit-modes/draw-rectangle-from-center-mode.ts +23 -0
  212. package/src/edit-modes/draw-rectangle-mode.ts +14 -0
  213. package/src/edit-modes/draw-rectangle-using-three-points-mode.ts +36 -0
  214. package/src/edit-modes/draw-square-from-center-mode.ts +46 -0
  215. package/src/edit-modes/draw-square-mode.ts +36 -0
  216. package/src/edit-modes/duplicate-mode.ts +21 -0
  217. package/src/edit-modes/edit-mode.ts +30 -0
  218. package/src/edit-modes/elevation-mode.ts +86 -0
  219. package/src/edit-modes/extend-line-string-mode.ts +87 -0
  220. package/src/edit-modes/extrude-mode.ts +254 -0
  221. package/src/edit-modes/geojson-edit-mode.ts +283 -0
  222. package/src/edit-modes/immutable-feature-collection.ts +417 -0
  223. package/src/edit-modes/measure-angle-mode.ts +127 -0
  224. package/src/edit-modes/measure-area-mode.ts +62 -0
  225. package/src/edit-modes/measure-distance-mode.ts +215 -0
  226. package/src/edit-modes/modify-mode.ts +293 -0
  227. package/src/edit-modes/resize-circle-mode.ts +202 -0
  228. package/src/edit-modes/rotate-mode.ts +208 -0
  229. package/src/edit-modes/scale-mode.ts +231 -0
  230. package/src/edit-modes/snappable-mode.ts +174 -0
  231. package/src/edit-modes/split-polygon-mode.ts +201 -0
  232. package/src/edit-modes/three-click-polygon-mode.ts +111 -0
  233. package/src/edit-modes/transform-mode.ts +75 -0
  234. package/src/edit-modes/translate-mode.ts +161 -0
  235. package/src/edit-modes/two-click-polygon-mode.ts +132 -0
  236. package/src/edit-modes/types.ts +135 -0
  237. package/src/edit-modes/utils.ts +513 -0
  238. package/src/edit-modes/view-mode.ts +3 -0
  239. package/src/editable-layers/editable-geojson-layer.ts +603 -0
  240. package/src/editable-layers/editable-h3-cluster-layer.ts +226 -0
  241. package/src/editable-layers/editable-layer.ts +252 -0
  242. package/src/editable-layers/editable-path-layer.ts +51 -0
  243. package/src/editable-layers/elevated-edit-handle-layer.ts +33 -0
  244. package/src/editable-layers/junction-scatterplot-layer.ts +53 -0
  245. package/src/editable-layers/path-marker-layer/arrow-2d-geometry.ts +61 -0
  246. package/src/editable-layers/path-marker-layer/create-path-markers.ts +107 -0
  247. package/src/editable-layers/path-marker-layer/path-marker-layer.ts +179 -0
  248. package/src/editable-layers/path-marker-layer/polyline.ts +40 -0
  249. package/src/editable-layers/path-outline-layer/path-outline-layer.ts +147 -0
  250. package/src/editable-layers/selection-layer.ts +209 -0
  251. package/src/geojson-types.ts +89 -0
  252. package/src/index.ts +125 -0
  253. package/src/lib/constants.ts +6 -0
  254. package/src/lib/deck-renderer/deck-cache.ts +61 -0
  255. package/src/lib/deck-renderer/deck-drawer.ts +263 -0
  256. package/src/lib/feature.ts +27 -0
  257. package/src/lib/layer-mouse-event.ts +32 -0
  258. package/src/lib/layers/junctions-layer.ts +40 -0
  259. package/src/lib/layers/segments-layer.ts +108 -0
  260. package/src/lib/layers/texts-layer.ts +43 -0
  261. package/src/lib/math.ts +26 -0
  262. package/src/lib/nebula-layer.ts +33 -0
  263. package/src/lib/nebula.ts +323 -0
  264. package/src/lib/style.ts +22 -0
  265. package/src/memoize.ts +43 -0
  266. package/src/mode-handlers/composite-mode-handler.ts +89 -0
  267. package/src/mode-handlers/draw-90degree-polygon-handler.ts +201 -0
  268. package/src/mode-handlers/draw-circle-by-bounding-box-handler.ts +39 -0
  269. package/src/mode-handlers/draw-circle-from-center-handler.ts +38 -0
  270. package/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts +41 -0
  271. package/src/mode-handlers/draw-ellipse-using-three-points-handler.ts +46 -0
  272. package/src/mode-handlers/draw-line-string-handler.ts +108 -0
  273. package/src/mode-handlers/draw-point-handler.ts +15 -0
  274. package/src/mode-handlers/draw-polygon-handler.ts +121 -0
  275. package/src/mode-handlers/draw-rectangle-handler.ts +28 -0
  276. package/src/mode-handlers/draw-rectangle-using-three-points-handler.ts +60 -0
  277. package/src/mode-handlers/duplicate-handler.ts +25 -0
  278. package/src/mode-handlers/elevation-handler.ts +88 -0
  279. package/src/mode-handlers/extrude-handler.ts +245 -0
  280. package/src/mode-handlers/mode-handler.ts +394 -0
  281. package/src/mode-handlers/modify-handler.ts +263 -0
  282. package/src/mode-handlers/rotate-handler.ts +107 -0
  283. package/src/mode-handlers/scale-handler.ts +105 -0
  284. package/src/mode-handlers/snappable-handler.ts +184 -0
  285. package/src/mode-handlers/split-polygon-handler.ts +177 -0
  286. package/src/mode-handlers/three-click-polygon-handler.ts +25 -0
  287. package/src/mode-handlers/translate-handler.ts +110 -0
  288. package/src/mode-handlers/two-click-polygon-handler.ts +25 -0
  289. package/src/mode-handlers/view-handler.ts +13 -0
  290. package/src/shaderlib/color/color.ts +56 -0
  291. package/src/shaderlib/outline/outline.ts +101 -0
  292. package/src/shaderlib/utils/utils.ts +33 -0
  293. package/src/translateFromCenter.ts +48 -0
  294. package/src/types.ts +39 -0
  295. package/src/utils.ts +185 -0
@@ -0,0 +1,603 @@
1
+ /* eslint-env browser */
2
+
3
+ import type { UpdateParameters, DefaultProps } from '@deck.gl/core';
4
+ import { GeoJsonLayer, ScatterplotLayer, IconLayer, TextLayer } from '@deck.gl/layers';
5
+ import {
6
+ EditAction,
7
+ ClickEvent,
8
+ StartDraggingEvent,
9
+ StopDraggingEvent,
10
+ DraggingEvent,
11
+ PointerMoveEvent,
12
+ } from '../edit-modes/types';
13
+
14
+ import {ViewMode} from '../edit-modes/view-mode';
15
+ import {TranslateMode} from '../edit-modes/translate-mode';
16
+ import {ModifyMode} from '../edit-modes/modify-mode';
17
+ import {ScaleMode} from '../edit-modes/scale-mode';
18
+ import {RotateMode} from '../edit-modes/rotate-mode';
19
+ import {DuplicateMode} from '../edit-modes/duplicate-mode';
20
+ import {SplitPolygonMode} from '../edit-modes/split-polygon-mode';
21
+ import {ExtrudeMode} from '../edit-modes/extrude-mode';
22
+ import {ElevationMode} from '../edit-modes/elevation-mode';
23
+ import {DrawPointMode} from '../edit-modes/draw-point-mode';
24
+ import {DrawLineStringMode} from '../edit-modes/draw-line-string-mode';
25
+ import {DrawPolygonMode} from '../edit-modes/draw-polygon-mode';
26
+ import {DrawRectangleMode} from '../edit-modes/draw-rectangle-mode';
27
+ import {DrawSquareMode} from '../edit-modes/draw-square-mode';
28
+ import {DrawRectangleFromCenterMode} from '../edit-modes/draw-rectangle-from-center-mode';
29
+ import {DrawSquareFromCenterMode} from '../edit-modes/draw-square-from-center-mode';
30
+ import {DrawCircleFromCenterMode} from '../edit-modes/draw-circle-from-center-mode';
31
+ import {DrawCircleByDiameterMode} from '../edit-modes/draw-circle-by-diameter-mode';
32
+ import {DrawEllipseByBoundingBoxMode} from '../edit-modes/draw-ellipse-by-bounding-box-mode';
33
+ import {DrawRectangleUsingThreePointsMode} from '../edit-modes/draw-rectangle-using-three-points-mode';
34
+ import {DrawEllipseUsingThreePointsMode} from '../edit-modes/draw-ellipse-using-three-points-mode';
35
+ import {Draw90DegreePolygonMode} from '../edit-modes/draw-90degree-polygon-mode';
36
+ import {DrawPolygonByDraggingMode} from '../edit-modes/draw-polygon-by-dragging-mode';
37
+ import {SnappableMode} from '../edit-modes/snappable-mode';
38
+ import {TransformMode} from '../edit-modes/transform-mode';
39
+ import {GeoJsonEditModeType} from '../edit-modes/geojson-edit-mode';
40
+
41
+ import { Color } from '../types';
42
+ import { PROJECTED_PIXEL_SIZE_MULTIPLIER } from '../constants';
43
+
44
+ import EditableLayer, { EditableLayerProps } from './editable-layer';
45
+ import EditablePathLayer from './editable-path-layer';
46
+ import { Feature, FeatureCollection } from '../geojson-types';
47
+
48
+ const DEFAULT_LINE_COLOR: Color = [0x0, 0x0, 0x0, 0x99];
49
+ const DEFAULT_FILL_COLOR: Color = [0x0, 0x0, 0x0, 0x90];
50
+ const DEFAULT_SELECTED_LINE_COLOR: Color = [0x0, 0x0, 0x0, 0xff];
51
+ const DEFAULT_SELECTED_FILL_COLOR: Color = [0x0, 0x0, 0x90, 0x90];
52
+ const DEFAULT_TENTATIVE_LINE_COLOR: Color = [0x90, 0x90, 0x90, 0xff];
53
+ const DEFAULT_TENTATIVE_FILL_COLOR: Color = [0x90, 0x90, 0x90, 0x90];
54
+ const DEFAULT_EDITING_EXISTING_POINT_COLOR: Color = [0xc0, 0x0, 0x0, 0xff];
55
+ const DEFAULT_EDITING_INTERMEDIATE_POINT_COLOR: Color = [0x0, 0x0, 0x0, 0x80];
56
+ const DEFAULT_EDITING_SNAP_POINT_COLOR: Color = [0x7c, 0x00, 0xc0, 0xff];
57
+ const DEFAULT_EDITING_POINT_OUTLINE_COLOR: Color = [0xff, 0xff, 0xff, 0xff];
58
+ const DEFAULT_EDITING_EXISTING_POINT_RADIUS = 5;
59
+ const DEFAULT_EDITING_INTERMEDIATE_POINT_RADIUS = 3;
60
+ const DEFAULT_EDITING_SNAP_POINT_RADIUS = 7;
61
+ const DEFAULT_TOOLTIP_FONT_SIZE = 32 * PROJECTED_PIXEL_SIZE_MULTIPLIER;
62
+
63
+ const DEFAULT_EDIT_MODE = DrawPolygonMode;
64
+
65
+ function guideAccessor(accessor) {
66
+ if (!accessor || typeof accessor !== 'function') {
67
+ return accessor;
68
+ }
69
+ return (guideMaybeWrapped) => accessor(unwrapGuide(guideMaybeWrapped));
70
+ }
71
+
72
+ // The object handed to us from deck.gl is different depending on the version of deck.gl used, unwrap as necessary
73
+ function unwrapGuide(guideMaybeWrapped) {
74
+ if (guideMaybeWrapped.__source) {
75
+ return guideMaybeWrapped.__source.object;
76
+ } else if (guideMaybeWrapped.sourceFeature) {
77
+ return guideMaybeWrapped.sourceFeature.feature;
78
+ }
79
+ // It is not wrapped, return as is
80
+ return guideMaybeWrapped;
81
+ }
82
+
83
+ function getEditHandleColor(handle) {
84
+ switch (handle.properties.editHandleType) {
85
+ case 'existing':
86
+ return DEFAULT_EDITING_EXISTING_POINT_COLOR;
87
+ case 'snap-source':
88
+ return DEFAULT_EDITING_SNAP_POINT_COLOR;
89
+ case 'intermediate':
90
+ default:
91
+ return DEFAULT_EDITING_INTERMEDIATE_POINT_COLOR;
92
+ }
93
+ }
94
+
95
+ function getEditHandleOutlineColor(handle) {
96
+ return DEFAULT_EDITING_POINT_OUTLINE_COLOR;
97
+ }
98
+
99
+ function getEditHandleRadius(handle) {
100
+ switch (handle.properties.editHandleType) {
101
+ case 'existing':
102
+ return DEFAULT_EDITING_EXISTING_POINT_RADIUS;
103
+ case 'snap':
104
+ return DEFAULT_EDITING_SNAP_POINT_RADIUS;
105
+ case 'intermediate':
106
+ default:
107
+ return DEFAULT_EDITING_INTERMEDIATE_POINT_RADIUS;
108
+ }
109
+ }
110
+
111
+ export type EditableGeojsonLayerProps<DataT = any> = EditableLayerProps & {
112
+ data: DataT;
113
+ mode?: any;
114
+ modeConfig?: any;
115
+ selectedFeatureIndexes?: number[];
116
+ onEdit?: (updatedData?, editType?: string, featureIndexes?: number[], editContext?) => void;
117
+
118
+ pickable?: boolean;
119
+ pickingRadius?: number;
120
+ pickingDepth?: number;
121
+ fp64?: boolean;
122
+ filled?: boolean;
123
+ stroked?: boolean;
124
+ lineWidthScale?: number;
125
+ lineWidthMinPixels?: number;
126
+ lineWidthMaxPixels?: number;
127
+ pickingLineWidthExtraPixels?: number;
128
+ lineWidthUnits?: string;
129
+ lineJointRounded?: boolean;
130
+ lineCapRounded?: boolean;
131
+ lineMiterLimit?: number;
132
+ pointRadiusScale?: number;
133
+ pointRadiusMinPixels?: number;
134
+ pointRadiusMaxPixels?: number;
135
+
136
+ getLineColor?: Color | ((feature, isSelected, mode) => Color);
137
+ getFillColor?: Color | ((feature, isSelected, mode) => Color);
138
+ getRadius?: number | ((f) => number);
139
+ getLineWidth?: number | ((f) => number);
140
+
141
+ getTentativeLineColor?: Color | ((feature, isSelected, mode) => Color);
142
+ getTentativeFillColor?: Color | ((feature, isSelected, mode) => Color);
143
+ getTentativeLineWidth?: number | ((f) => number);
144
+
145
+ editHandleType?: string;
146
+
147
+ editHandlePointRadiusScale?: number;
148
+ editHandlePointOutline?: boolean;
149
+ editHandlePointStrokeWidth?: number;
150
+ editHandlePointRadiusUnits?: string;
151
+ editHandlePointRadiusMinPixels?: number;
152
+ editHandlePointRadiusMaxPixels?: number;
153
+ getEditHandlePointColor?: Color | ((handle) => Color);
154
+ getEditHandlePointOutlineColor?: Color | ((handle) => Color);
155
+ getEditHandlePointRadius?: number | ((handle) => number);
156
+
157
+ // icon handles
158
+ editHandleIconAtlas?: any;
159
+ editHandleIconMapping?: any;
160
+ editHandleIconSizeScale?: number;
161
+ editHandleIconSizeUnits?: string;
162
+ getEditHandleIcon?: (handle) => string;
163
+ getEditHandleIconSize?: number;
164
+ getEditHandleIconColor?: Color | ((handle) => Color);
165
+ getEditHandleIconAngle?: number | ((handle) => number);
166
+
167
+ // misc
168
+ billboard?: boolean;
169
+ };
170
+
171
+ const defaultProps: DefaultProps<EditableGeojsonLayerProps<any>> = {
172
+ mode: DEFAULT_EDIT_MODE,
173
+
174
+ // Edit and interaction events
175
+ onEdit: () => {},
176
+
177
+ pickable: true,
178
+ pickingRadius: 10,
179
+ pickingDepth: 5,
180
+ fp64: false,
181
+ filled: true,
182
+ stroked: true,
183
+ lineWidthScale: PROJECTED_PIXEL_SIZE_MULTIPLIER,
184
+ lineWidthMinPixels: 1,
185
+ lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,
186
+ pickingLineWidthExtraPixels: 0,
187
+ lineWidthUnits: 'pixels',
188
+ lineJointRounded: false,
189
+ lineCapRounded: false,
190
+ lineMiterLimit: 4,
191
+ pointRadiusScale: 1,
192
+ pointRadiusMinPixels: 2,
193
+ pointRadiusMaxPixels: Number.MAX_SAFE_INTEGER,
194
+ getLineColor: (feature, isSelected, mode) =>
195
+ isSelected ? DEFAULT_SELECTED_LINE_COLOR : DEFAULT_LINE_COLOR,
196
+ getFillColor: (feature, isSelected, mode) =>
197
+ isSelected ? DEFAULT_SELECTED_FILL_COLOR : DEFAULT_FILL_COLOR,
198
+ getRadius: (f) =>
199
+ (f && f.properties && f.properties.radius) || (f && f.properties && f.properties.size) || 1,
200
+ getLineWidth: (f) => (f && f.properties && f.properties.lineWidth) || 3,
201
+
202
+ // Tentative feature rendering
203
+ getTentativeLineColor: (f) => DEFAULT_TENTATIVE_LINE_COLOR,
204
+ getTentativeFillColor: (f) => DEFAULT_TENTATIVE_FILL_COLOR,
205
+ getTentativeLineWidth: (f) => (f && f.properties && f.properties.lineWidth) || 3,
206
+
207
+ editHandleType: 'point',
208
+
209
+ // point handles
210
+ editHandlePointRadiusScale: 1,
211
+ editHandlePointOutline: true,
212
+ editHandlePointStrokeWidth: 2,
213
+ editHandlePointRadiusUnits: 'pixels',
214
+ editHandlePointRadiusMinPixels: 4,
215
+ editHandlePointRadiusMaxPixels: 8,
216
+ getEditHandlePointColor: getEditHandleColor,
217
+ getEditHandlePointOutlineColor: getEditHandleOutlineColor,
218
+ getEditHandlePointRadius: getEditHandleRadius,
219
+
220
+ // icon handles
221
+ editHandleIconAtlas: null,
222
+ editHandleIconMapping: null,
223
+ editHandleIconSizeScale: 1,
224
+ editHandleIconSizeUnits: 'pixels',
225
+ getEditHandleIcon: (handle) => handle.properties.editHandleType,
226
+ getEditHandleIconSize: 10,
227
+ getEditHandleIconColor: getEditHandleColor,
228
+ getEditHandleIconAngle: 0,
229
+
230
+ // misc
231
+ billboard: true,
232
+ };
233
+
234
+ // Mapping of mode name to mode class (for legacy purposes)
235
+ const modeNameMapping = {
236
+ view: ViewMode,
237
+
238
+ // Alter modes
239
+ modify: ModifyMode,
240
+ translate: new SnappableMode(new TranslateMode()),
241
+
242
+ transform: new SnappableMode(new TransformMode()),
243
+ scale: ScaleMode,
244
+ rotate: RotateMode,
245
+ duplicate: DuplicateMode,
246
+ split: SplitPolygonMode,
247
+ extrude: ExtrudeMode,
248
+ elevation: ElevationMode,
249
+
250
+ // Draw modes
251
+ drawPoint: DrawPointMode,
252
+ drawLineString: DrawLineStringMode,
253
+ drawPolygon: DrawPolygonMode,
254
+ drawRectangle: DrawRectangleMode,
255
+ drawSquare: DrawSquareMode,
256
+ drawRectangleFromCenter: DrawRectangleFromCenterMode,
257
+ drawSquareFromCenter: DrawSquareFromCenterMode,
258
+ drawCircleFromCenter: DrawCircleFromCenterMode,
259
+ drawCircleByBoundingBox: DrawCircleByDiameterMode,
260
+ drawEllipseByBoundingBox: DrawEllipseByBoundingBoxMode,
261
+ drawRectangleUsing3Points: DrawRectangleUsingThreePointsMode,
262
+ drawEllipseUsing3Points: DrawEllipseUsingThreePointsMode,
263
+ draw90DegreePolygon: Draw90DegreePolygonMode,
264
+ drawPolygonByDragging: DrawPolygonByDraggingMode,
265
+ };
266
+
267
+ export default class EditableGeoJsonLayer extends EditableLayer<
268
+ FeatureCollection,
269
+ EditableGeojsonLayerProps<FeatureCollection>
270
+ > {
271
+ static layerName = 'EditableGeoJsonLayer';
272
+ static defaultProps = defaultProps;
273
+
274
+ state: EditableLayer['state'] & {
275
+ cursor?: 'grabbing' | 'grab' | null;
276
+ mode: GeoJsonEditModeType;
277
+ lastPointerMoveEvent: PointerMoveEvent;
278
+ tentativeFeature?: Feature;
279
+ editHandles: any[];
280
+ selectedFeatures: Feature[];
281
+ } = undefined!;
282
+
283
+ // setState: ($Shape<State>) => void;
284
+ renderLayers() {
285
+ const subLayerProps = this.getSubLayerProps({
286
+ id: 'geojson',
287
+
288
+ // Proxy most GeoJsonLayer props as-is
289
+ data: this.props.data,
290
+ fp64: this.props.fp64,
291
+ filled: this.props.filled,
292
+ stroked: this.props.stroked,
293
+ lineWidthScale: this.props.lineWidthScale,
294
+ lineWidthMinPixels: this.props.lineWidthMinPixels,
295
+ lineWidthMaxPixels: this.props.lineWidthMaxPixels,
296
+ lineWidthUnits: this.props.lineWidthUnits,
297
+ lineJointRounded: this.props.lineJointRounded,
298
+ lineCapRounded: this.props.lineCapRounded,
299
+ lineMiterLimit: this.props.lineMiterLimit,
300
+ pointRadiusScale: this.props.pointRadiusScale,
301
+ pointRadiusMinPixels: this.props.pointRadiusMinPixels,
302
+ pointRadiusMaxPixels: this.props.pointRadiusMaxPixels,
303
+ getLineColor: this.selectionAwareAccessor(this.props.getLineColor),
304
+ getFillColor: this.selectionAwareAccessor(this.props.getFillColor),
305
+ getPointRadius: this.selectionAwareAccessor(this.props.getRadius),
306
+ getLineWidth: this.selectionAwareAccessor(this.props.getLineWidth),
307
+
308
+ _subLayerProps: {
309
+ linestrings: {
310
+ billboard: this.props.billboard,
311
+ updateTriggers: {
312
+ // required to update dashed array attribute
313
+ all: [this.props.selectedFeatureIndexes, this.props.mode],
314
+ },
315
+ },
316
+ 'polygons-stroke': {
317
+ billboard: this.props.billboard,
318
+ pickingLineWidthExtraPixels: this.props.pickingLineWidthExtraPixels,
319
+ type: EditablePathLayer,
320
+ updateTriggers: {
321
+ // required to update dashed array attribute
322
+ all: [this.props.selectedFeatureIndexes, this.props.mode],
323
+ },
324
+ },
325
+ },
326
+
327
+ updateTriggers: {
328
+ getLineColor: [this.props.selectedFeatureIndexes, this.props.mode],
329
+ getFillColor: [this.props.selectedFeatureIndexes, this.props.mode],
330
+ getPointRadius: [this.props.selectedFeatureIndexes, this.props.mode],
331
+ getLineWidth: [this.props.selectedFeatureIndexes, this.props.mode],
332
+ },
333
+ });
334
+
335
+ let layers: any = [new GeoJsonLayer(subLayerProps)];
336
+
337
+ layers = layers.concat(this.createGuidesLayers(), this.createTooltipsLayers());
338
+
339
+ return layers;
340
+ }
341
+
342
+ initializeState() {
343
+ super.initializeState();
344
+
345
+ this.setState({
346
+ selectedFeatures: [],
347
+ editHandles: [],
348
+ });
349
+ }
350
+
351
+ // TODO: is this the best way to properly update state from an outside event handler?
352
+ shouldUpdateState(opts: any) {
353
+ // console.log(
354
+ // 'shouldUpdateState',
355
+ // opts.changeFlags.propsOrDataChanged,
356
+ // opts.changeFlags.stateChanged
357
+ // );
358
+ return super.shouldUpdateState(opts) || opts.changeFlags.stateChanged;
359
+ }
360
+
361
+ updateState({ props, oldProps, changeFlags, context }: UpdateParameters<this>) {
362
+ super.updateState({ oldProps, props, changeFlags, context });
363
+
364
+ if (changeFlags.propsOrDataChanged) {
365
+ const modePropChanged = Object.keys(oldProps).length === 0 || props.mode !== oldProps.mode;
366
+ if (modePropChanged) {
367
+ let mode: DrawPolygonMode;
368
+ if (typeof props.mode === 'function') {
369
+ // They passed a constructor/class, so new it up
370
+ const ModeConstructor = props.mode;
371
+ mode = new ModeConstructor();
372
+ } else if (typeof props.mode === 'string') {
373
+ // Lookup the mode based on its name (for backwards compatibility)
374
+ mode = modeNameMapping[props.mode];
375
+ // eslint-disable-next-line no-console
376
+ console.warn(
377
+ 'Deprecated use of passing `mode` as a string. Pass the mode\'s class constructor instead.'
378
+ );
379
+ } else {
380
+ // Should be an instance of EditMode in this case
381
+ mode = props.mode;
382
+ }
383
+
384
+ if (!mode) {
385
+ console.warn(`No mode configured for ${String(props.mode)}`); // eslint-disable-line no-console,no-undef
386
+ // Use default mode
387
+ mode = new DEFAULT_EDIT_MODE();
388
+ }
389
+
390
+ if (mode !== this.state.mode) {
391
+ this.setState({ mode, cursor: null });
392
+ }
393
+ }
394
+ }
395
+
396
+ let selectedFeatures = [];
397
+ if (
398
+ Array.isArray(props.selectedFeatureIndexes) &&
399
+ typeof props.data === 'object' &&
400
+ 'features' in props.data
401
+ ) {
402
+ // TODO: needs improved testing, i.e. checking for duplicates, NaNs, out of range numbers, ...
403
+ const propsData = props.data;
404
+ // @ts-ignore error TS2339: Property 'features' does not exist on type 'never'
405
+ selectedFeatures = props.selectedFeatureIndexes.map((elem) => propsData.features[elem]);
406
+ }
407
+
408
+ this.setState({ selectedFeatures });
409
+ }
410
+
411
+ getModeProps(props: EditableGeojsonLayerProps<any>) {
412
+ return {
413
+ modeConfig: props.modeConfig,
414
+ data: props.data,
415
+ selectedIndexes: props.selectedFeatureIndexes,
416
+ lastPointerMoveEvent: this.state.lastPointerMoveEvent,
417
+ cursor: this.state.cursor,
418
+ onEdit: (editAction: EditAction<FeatureCollection>) => {
419
+ // Force a re-render
420
+ // This supports double-click where we need to ensure that there's a re-render between the two clicks
421
+ // even though the data wasn't changed, just the internal tentative feature.
422
+ this.setNeedsUpdate();
423
+ props.onEdit!(editAction);
424
+ },
425
+ onUpdateCursor: (cursor: string | null | undefined) => {
426
+ this.setState({ cursor });
427
+ },
428
+ };
429
+ }
430
+
431
+ selectionAwareAccessor(accessor: any) {
432
+ if (typeof accessor !== 'function') {
433
+ return accessor;
434
+ }
435
+ return (feature: Feature) =>
436
+ accessor(feature, this.isFeatureSelected(feature), this.props.mode);
437
+ }
438
+
439
+ isFeatureSelected(feature: Feature) {
440
+ if (!this.props.data || !this.props.selectedFeatureIndexes) {
441
+ return false;
442
+ }
443
+ if (!this.props.selectedFeatureIndexes.length) {
444
+ return false;
445
+ }
446
+
447
+ return this.state.selectedFeatures.includes(feature);
448
+ }
449
+
450
+ getPickingInfo({ info, sourceLayer }: Record<string, any>) {
451
+ if (sourceLayer.id.endsWith('guides')) {
452
+ // If user is picking an editing handle, add additional data to the info
453
+ info.isGuide = true;
454
+ }
455
+
456
+ return info;
457
+ }
458
+
459
+ _updateAutoHighlight(info) {
460
+ // Extra handling for guides
461
+ if (info?.sourceLayer) {
462
+ if (info.isGuide) {
463
+ for (const layer of info.sourceLayer.getSubLayers()) {
464
+ layer.updateAutoHighlight(info);
465
+ }
466
+ } else {
467
+ info.sourceLayer.updateAutoHighlight(info);
468
+ }
469
+ }
470
+ }
471
+
472
+ createGuidesLayers() {
473
+ const mode = this.getActiveMode();
474
+ const guides: FeatureCollection = mode.getGuides(this.getModeProps(this.props));
475
+
476
+ if (!guides || !guides.features.length) {
477
+ return [];
478
+ }
479
+
480
+ const subLayerProps = {
481
+ linestrings: {
482
+ billboard: this.props.billboard,
483
+ autoHighlight: false,
484
+ },
485
+ 'polygons-fill': {
486
+ autoHighlight: false,
487
+ },
488
+ 'polygons-stroke': {
489
+ billboard: this.props.billboard,
490
+ },
491
+ };
492
+
493
+ if (this.props.editHandleType === 'icon') {
494
+ subLayerProps['points-icon'] = {
495
+ type: IconLayer,
496
+ iconAtlas: this.props.editHandleIconAtlas,
497
+ iconMapping: this.props.editHandleIconMapping,
498
+ sizeUnits: this.props.editHandleIconSizeUnits,
499
+ sizeScale: this.props.editHandleIconSizeScale,
500
+ getIcon: guideAccessor(this.props.getEditHandleIcon),
501
+ getSize: guideAccessor(this.props.getEditHandleIconSize),
502
+ getColor: guideAccessor(this.props.getEditHandleIconColor),
503
+ getAngle: guideAccessor(this.props.getEditHandleIconAngle),
504
+ billboard: this.props.billboard,
505
+ };
506
+ } else {
507
+ subLayerProps['points-circle'] = {
508
+ type: ScatterplotLayer,
509
+ radiusScale: this.props.editHandlePointRadiusScale,
510
+ stroked: this.props.editHandlePointOutline,
511
+ getLineWidth: this.props.editHandlePointStrokeWidth,
512
+ radiusUnits: this.props.editHandlePointRadiusUnits,
513
+ radiusMinPixels: this.props.editHandlePointRadiusMinPixels,
514
+ radiusMaxPixels: this.props.editHandlePointRadiusMaxPixels,
515
+ getRadius: guideAccessor(this.props.getEditHandlePointRadius),
516
+ getFillColor: guideAccessor(this.props.getEditHandlePointColor),
517
+ getLineColor: guideAccessor(this.props.getEditHandlePointOutlineColor),
518
+ billboard: this.props.billboard,
519
+ };
520
+ }
521
+
522
+ const layer = new GeoJsonLayer(
523
+ this.getSubLayerProps({
524
+ id: 'guides',
525
+ data: guides,
526
+ fp64: this.props.fp64,
527
+ _subLayerProps: subLayerProps,
528
+ lineWidthScale: this.props.lineWidthScale,
529
+ lineWidthMinPixels: this.props.lineWidthMinPixels,
530
+ lineWidthMaxPixels: this.props.lineWidthMaxPixels,
531
+ lineWidthUnits: this.props.lineWidthUnits,
532
+ lineJointRounded: this.props.lineJointRounded,
533
+ lineCapRounded: this.props.lineCapRounded,
534
+ lineMiterLimit: this.props.lineMiterLimit,
535
+ getLineColor: guideAccessor(this.props.getTentativeLineColor),
536
+ getLineWidth: guideAccessor(this.props.getTentativeLineWidth),
537
+ getFillColor: guideAccessor(this.props.getTentativeFillColor),
538
+ pointType: this.props.editHandleType === 'icon' ? 'icon' : 'circle',
539
+ iconAtlas: this.props.editHandleIconAtlas,
540
+ })
541
+ );
542
+
543
+ return [layer];
544
+ }
545
+
546
+ createTooltipsLayers() {
547
+ const mode = this.getActiveMode();
548
+ const tooltips = mode.getTooltips(this.getModeProps(this.props) as any);
549
+
550
+ const layer = new TextLayer({
551
+ getSize: DEFAULT_TOOLTIP_FONT_SIZE,
552
+ ...this.getSubLayerProps({
553
+ id: 'tooltips',
554
+ data: tooltips,
555
+ }),
556
+ });
557
+
558
+ return [layer];
559
+ }
560
+
561
+ onLayerClick(event: ClickEvent): void {
562
+ this.getActiveMode().handleClick(event, this.getModeProps(this.props) as any);
563
+ }
564
+
565
+ onLayerKeyUp(event: KeyboardEvent): void {
566
+ this.getActiveMode().handleKeyUp(event, this.getModeProps(this.props) as any);
567
+ }
568
+
569
+ onStartDragging(event: StartDraggingEvent): void {
570
+ this.getActiveMode().handleStartDragging(event, this.getModeProps(this.props) as any);
571
+ }
572
+
573
+ onDragging(event: DraggingEvent): void {
574
+ this.getActiveMode().handleDragging(event, this.getModeProps(this.props) as any);
575
+ }
576
+
577
+ onStopDragging(event: StopDraggingEvent): void {
578
+ this.getActiveMode().handleStopDragging(event, this.getModeProps(this.props) as any);
579
+ }
580
+
581
+ onPointerMove(event: PointerMoveEvent): void {
582
+ this.setState({ lastPointerMoveEvent: event });
583
+ this.getActiveMode().handlePointerMove(event, this.getModeProps(this.props) as any);
584
+ }
585
+
586
+ getCursor({ isDragging }: { isDragging: boolean }): null | 'grabbing' | 'grab' {
587
+ if (this.state === null || this.state === undefined) {
588
+ // Layer in 'Awaiting state'
589
+ return null;
590
+ }
591
+
592
+ let { cursor } = this.state;
593
+ if (!cursor) {
594
+ // default cursor
595
+ cursor = isDragging ? 'grabbing' : 'grab';
596
+ }
597
+ return cursor;
598
+ }
599
+
600
+ getActiveMode(): GeoJsonEditModeType {
601
+ return this.state.mode;
602
+ }
603
+ }