@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,72 @@
1
+ import { GeoJsonEditMode } from './geojson-edit-mode';
2
+ export class ThreeClickPolygonMode extends GeoJsonEditMode {
3
+ handleClick(event, props) {
4
+ this.addClickSequence(event);
5
+ const clickSequence = this.getClickSequence();
6
+ const tentativeFeature = this.getTentativeGuide(props);
7
+ if (clickSequence.length > 2 &&
8
+ tentativeFeature &&
9
+ tentativeFeature.geometry.type === 'Polygon') {
10
+ const editAction = this.getAddFeatureOrBooleanPolygonAction(tentativeFeature.geometry, props);
11
+ this.resetClickSequence();
12
+ if (editAction) {
13
+ props.onEdit(editAction);
14
+ }
15
+ }
16
+ }
17
+ getGuides(props) {
18
+ const { lastPointerMoveEvent, modeConfig } = props;
19
+ const clickSequence = this.getClickSequence();
20
+ const guides = {
21
+ type: 'FeatureCollection',
22
+ features: [],
23
+ };
24
+ if (clickSequence.length === 0) {
25
+ // nothing to do yet
26
+ return guides;
27
+ }
28
+ const hoveredCoord = lastPointerMoveEvent.mapCoords;
29
+ if (clickSequence.length === 1) {
30
+ guides.features.push({
31
+ type: 'Feature',
32
+ properties: {
33
+ guideType: 'tentative',
34
+ },
35
+ geometry: {
36
+ type: 'LineString',
37
+ coordinates: [clickSequence[0], hoveredCoord],
38
+ },
39
+ });
40
+ }
41
+ else {
42
+ const polygon = this.getThreeClickPolygon(clickSequence[0], clickSequence[1], hoveredCoord, modeConfig);
43
+ if (polygon) {
44
+ guides.features.push({
45
+ type: 'Feature',
46
+ properties: {
47
+ guideType: 'tentative',
48
+ },
49
+ geometry: polygon.geometry,
50
+ });
51
+ }
52
+ }
53
+ return guides;
54
+ }
55
+ getThreeClickPolygon(coord1, coord2, coord3, modeConfig) {
56
+ return null;
57
+ }
58
+ handlePointerMove(event, props) {
59
+ props.onUpdateCursor('cell');
60
+ super.handlePointerMove(event, props);
61
+ }
62
+ createTentativeFeature(props) {
63
+ const { lastPointerMoveEvent } = props;
64
+ const clickSequence = this.getClickSequence();
65
+ const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];
66
+ let tentativeFeature;
67
+ if (clickSequence.length === 2) {
68
+ tentativeFeature = this.getThreeClickPolygon(clickSequence[0], clickSequence[1], lastCoords[0], props.modeConfig);
69
+ }
70
+ return tentativeFeature;
71
+ }
72
+ }
@@ -0,0 +1,9 @@
1
+ import { PointerMoveEvent, ModeProps, StartDraggingEvent } from './types';
2
+ import { FeatureCollection } from '../geojson-types';
3
+ import { CompositeMode } from './composite-mode';
4
+ export declare class TransformMode extends CompositeMode {
5
+ constructor();
6
+ handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>): void;
7
+ handleStartDragging(event: StartDraggingEvent, props: ModeProps<FeatureCollection>): void;
8
+ getGuides(props: ModeProps<FeatureCollection>): import("./types").GuideFeatureCollection;
9
+ }
@@ -0,0 +1,63 @@
1
+ import { featureCollection } from '@turf/helpers';
2
+ import { TranslateMode } from './translate-mode';
3
+ import { ScaleMode } from './scale-mode';
4
+ import { RotateMode } from './rotate-mode';
5
+ import { CompositeMode } from './composite-mode';
6
+ export class TransformMode extends CompositeMode {
7
+ constructor() {
8
+ super([new TranslateMode(), new ScaleMode(), new RotateMode()]);
9
+ }
10
+ handlePointerMove(event, props) {
11
+ let updatedCursor = null;
12
+ super.handlePointerMove(event, {
13
+ ...props,
14
+ onUpdateCursor: (cursor) => {
15
+ updatedCursor = cursor || updatedCursor;
16
+ },
17
+ });
18
+ props.onUpdateCursor(updatedCursor);
19
+ }
20
+ handleStartDragging(event, props) {
21
+ let scaleMode = null;
22
+ let translateMode = null;
23
+ const filteredModes = [];
24
+ // If the user selects a scaling edit handle that overlaps with part of the selected feature,
25
+ // it is possible for both scale and translate actions to be triggered. This logic prevents
26
+ // this simultaneous action trigger from happening by putting a higher priority on scaling
27
+ // since the user needs to be more precise to hover over a scaling edit handle.
28
+ this._modes.forEach((mode) => {
29
+ if (mode instanceof TranslateMode) {
30
+ translateMode = mode;
31
+ }
32
+ else {
33
+ if (mode instanceof ScaleMode) {
34
+ scaleMode = mode;
35
+ }
36
+ filteredModes.push(mode);
37
+ }
38
+ });
39
+ if (scaleMode instanceof ScaleMode && !scaleMode.isEditHandleSelected()) {
40
+ filteredModes.push(translateMode);
41
+ }
42
+ filteredModes.filter(Boolean).forEach((mode) => mode.handleStartDragging(event, props));
43
+ }
44
+ getGuides(props) {
45
+ let compositeGuides = super.getGuides(props);
46
+ const rotateMode = (this._modes || []).find((mode) => mode instanceof RotateMode);
47
+ if (rotateMode instanceof RotateMode) {
48
+ const nonEnvelopeGuides = compositeGuides.features.filter((guide) => {
49
+ const { editHandleType, mode } = guide.properties || {};
50
+ // Both scale and rotate modes have the same enveloping box as a guide - only need one
51
+ const guidesToFilterOut = [mode];
52
+ // Do not render scaling edit handles if rotating
53
+ if (rotateMode.getIsRotating()) {
54
+ guidesToFilterOut.push(editHandleType);
55
+ }
56
+ return !guidesToFilterOut.includes('scale');
57
+ });
58
+ // @ts-expect-error turf types
59
+ compositeGuides = featureCollection(nonEnvelopeGuides);
60
+ }
61
+ return compositeGuides;
62
+ }
63
+ }
@@ -0,0 +1,13 @@
1
+ import { FeatureCollection, Position } from '../geojson-types';
2
+ import { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, DraggingEvent, ModeProps } from './types';
3
+ import { GeoJsonEditMode, GeoJsonEditAction } from './geojson-edit-mode';
4
+ export declare class TranslateMode extends GeoJsonEditMode {
5
+ _geometryBeforeTranslate: FeatureCollection | null | undefined;
6
+ _isTranslatable: boolean;
7
+ handleDragging(event: DraggingEvent, props: ModeProps<FeatureCollection>): void;
8
+ handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>): void;
9
+ handleStartDragging(event: StartDraggingEvent, props: ModeProps<FeatureCollection>): void;
10
+ handleStopDragging(event: StopDraggingEvent, props: ModeProps<FeatureCollection>): void;
11
+ updateCursor(props: ModeProps<FeatureCollection>): void;
12
+ getTranslateAction(startDragPoint: Position, currentPoint: Position, editType: string, props: ModeProps<FeatureCollection>): GeoJsonEditAction | null | undefined;
13
+ }
@@ -0,0 +1,113 @@
1
+ import turfBearing from '@turf/bearing';
2
+ import turfDistance from '@turf/distance';
3
+ import clone from '@turf/clone';
4
+ import { point } from '@turf/helpers';
5
+ import WebMercatorViewport from 'viewport-mercator-project';
6
+ import { mapCoords } from './utils';
7
+ import { translateFromCenter } from '../translateFromCenter';
8
+ import { GeoJsonEditMode } from './geojson-edit-mode';
9
+ import { ImmutableFeatureCollection } from './immutable-feature-collection';
10
+ export class TranslateMode extends GeoJsonEditMode {
11
+ _geometryBeforeTranslate;
12
+ _isTranslatable = undefined;
13
+ handleDragging(event, props) {
14
+ if (!this._isTranslatable) {
15
+ // Nothing to do
16
+ return;
17
+ }
18
+ if (this._geometryBeforeTranslate) {
19
+ // Translate the geometry
20
+ const editAction = this.getTranslateAction(event.pointerDownMapCoords, event.mapCoords, 'translating', props);
21
+ if (editAction) {
22
+ props.onEdit(editAction);
23
+ }
24
+ }
25
+ // cancel map panning
26
+ event.cancelPan();
27
+ }
28
+ handlePointerMove(event, props) {
29
+ this._isTranslatable = this.isSelectionPicked(event.pointerDownPicks || event.picks, props);
30
+ this.updateCursor(props);
31
+ }
32
+ handleStartDragging(event, props) {
33
+ if (!this._isTranslatable) {
34
+ return;
35
+ }
36
+ this._geometryBeforeTranslate = this.getSelectedFeaturesAsFeatureCollection(props);
37
+ }
38
+ handleStopDragging(event, props) {
39
+ if (this._geometryBeforeTranslate) {
40
+ // Translate the geometry
41
+ const editAction = this.getTranslateAction(event.pointerDownMapCoords, event.mapCoords, 'translated', props);
42
+ if (editAction) {
43
+ props.onEdit(editAction);
44
+ }
45
+ this._geometryBeforeTranslate = null;
46
+ }
47
+ }
48
+ updateCursor(props) {
49
+ if (this._isTranslatable) {
50
+ props.onUpdateCursor('move');
51
+ }
52
+ else {
53
+ props.onUpdateCursor(null);
54
+ }
55
+ }
56
+ // eslint-disable-next-line max-statements
57
+ getTranslateAction(startDragPoint, currentPoint, editType, props) {
58
+ if (!this._geometryBeforeTranslate) {
59
+ return null;
60
+ }
61
+ let updatedData = new ImmutableFeatureCollection(props.data);
62
+ const selectedIndexes = props.selectedIndexes;
63
+ const { viewport: viewportDesc, screenSpace } = props.modeConfig || {};
64
+ // move features without adapting to mercator projection
65
+ if (viewportDesc && screenSpace) {
66
+ const viewport = viewportDesc.project ? viewportDesc : new WebMercatorViewport(viewportDesc);
67
+ const from = viewport.project(startDragPoint);
68
+ const to = viewport.project(currentPoint);
69
+ const dx = to[0] - from[0];
70
+ const dy = to[1] - from[1];
71
+ for (let i = 0; i < selectedIndexes.length; i++) {
72
+ const selectedIndex = selectedIndexes[i];
73
+ const feature = this._geometryBeforeTranslate.features[i];
74
+ let coordinates = feature.geometry.coordinates;
75
+ if (coordinates) {
76
+ coordinates = mapCoords(coordinates, (coord) => {
77
+ const pixels = viewport.project(coord);
78
+ if (pixels) {
79
+ pixels[0] += dx;
80
+ pixels[1] += dy;
81
+ return viewport.unproject(pixels);
82
+ }
83
+ return null;
84
+ });
85
+ // @ts-expect-error turf types
86
+ updatedData = updatedData.replaceGeometry(selectedIndex, {
87
+ type: feature.geometry.type,
88
+ coordinates,
89
+ });
90
+ }
91
+ }
92
+ }
93
+ else {
94
+ const p1 = point(startDragPoint);
95
+ const p2 = point(currentPoint);
96
+ const distanceMoved = turfDistance(p1, p2);
97
+ const direction = turfBearing(p1, p2);
98
+ const movedFeatures = this._geometryBeforeTranslate.features.map((feature) => translateFromCenter(clone(feature), distanceMoved, direction));
99
+ for (let i = 0; i < selectedIndexes.length; i++) {
100
+ const selectedIndex = selectedIndexes[i];
101
+ const movedFeature = movedFeatures[i];
102
+ updatedData = updatedData.replaceGeometry(selectedIndex, movedFeature.geometry);
103
+ }
104
+ }
105
+ return {
106
+ updatedData: updatedData.getObject(),
107
+ editType,
108
+ editContext: {
109
+ featureIndexes: selectedIndexes,
110
+ },
111
+ };
112
+ }
113
+ }
@@ -0,0 +1,13 @@
1
+ import { ClickEvent, StartDraggingEvent, StopDraggingEvent, PointerMoveEvent, ModeProps, GuideFeatureCollection, TentativeFeature } from './types';
2
+ import { Polygon, FeatureCollection, FeatureOf, Position } from '../geojson-types';
3
+ import { GeoJsonEditMode } from './geojson-edit-mode';
4
+ export declare class TwoClickPolygonMode extends GeoJsonEditMode {
5
+ handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>): void;
6
+ handleStartDragging(event: StartDraggingEvent, props: ModeProps<FeatureCollection>): void;
7
+ handleStopDragging(event: StopDraggingEvent, props: ModeProps<FeatureCollection>): void;
8
+ checkAndFinishPolygon(props: ModeProps<FeatureCollection>): void;
9
+ getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection;
10
+ getTwoClickPolygon(coord1: Position, coord2: Position, modeConfig: any): FeatureOf<Polygon> | null | undefined;
11
+ handlePointerMove(event: PointerMoveEvent, props: ModeProps<FeatureCollection>): void;
12
+ createTentativeFeature(props: ModeProps<FeatureCollection>): TentativeFeature;
13
+ }
@@ -0,0 +1,93 @@
1
+ import { GeoJsonEditMode } from './geojson-edit-mode';
2
+ export class TwoClickPolygonMode extends GeoJsonEditMode {
3
+ handleClick(event, props) {
4
+ if (props.modeConfig && props.modeConfig.dragToDraw) {
5
+ // handled in drag handlers
6
+ return;
7
+ }
8
+ this.addClickSequence(event);
9
+ this.checkAndFinishPolygon(props);
10
+ }
11
+ handleStartDragging(event, props) {
12
+ if (!props.modeConfig || !props.modeConfig.dragToDraw) {
13
+ // handled in click handlers
14
+ return;
15
+ }
16
+ this.addClickSequence(event);
17
+ event.cancelPan();
18
+ }
19
+ handleStopDragging(event, props) {
20
+ if (!props.modeConfig || !props.modeConfig.dragToDraw) {
21
+ // handled in click handlers
22
+ return;
23
+ }
24
+ this.addClickSequence(event);
25
+ this.checkAndFinishPolygon(props);
26
+ }
27
+ checkAndFinishPolygon(props) {
28
+ const clickSequence = this.getClickSequence();
29
+ const tentativeFeature = this.getTentativeGuide(props);
30
+ if (clickSequence.length > 1 &&
31
+ tentativeFeature &&
32
+ tentativeFeature.geometry.type === 'Polygon') {
33
+ const feature = {
34
+ type: 'Feature',
35
+ properties: {
36
+ shape: tentativeFeature.properties.shape,
37
+ },
38
+ geometry: {
39
+ type: 'Polygon',
40
+ coordinates: tentativeFeature.geometry.coordinates,
41
+ },
42
+ };
43
+ const editAction = this.getAddFeatureOrBooleanPolygonAction(feature, props);
44
+ this.resetClickSequence();
45
+ if (editAction) {
46
+ props.onEdit(editAction);
47
+ }
48
+ }
49
+ }
50
+ getGuides(props) {
51
+ const { lastPointerMoveEvent, modeConfig } = props;
52
+ const clickSequence = this.getClickSequence();
53
+ const guides = {
54
+ type: 'FeatureCollection',
55
+ features: [],
56
+ };
57
+ if (clickSequence.length === 0 || !lastPointerMoveEvent) {
58
+ // nothing to do yet
59
+ return guides;
60
+ }
61
+ const corner1 = clickSequence[0];
62
+ const corner2 = lastPointerMoveEvent.mapCoords;
63
+ const polygon = this.getTwoClickPolygon(corner1, corner2, modeConfig);
64
+ if (polygon) {
65
+ guides.features.push({
66
+ type: 'Feature',
67
+ properties: {
68
+ shape: polygon.properties && polygon.properties.shape,
69
+ guideType: 'tentative',
70
+ },
71
+ geometry: polygon.geometry,
72
+ });
73
+ }
74
+ return guides;
75
+ }
76
+ getTwoClickPolygon(coord1, coord2, modeConfig) {
77
+ return null;
78
+ }
79
+ handlePointerMove(event, props) {
80
+ props.onUpdateCursor('cell');
81
+ super.handlePointerMove(event, props);
82
+ }
83
+ createTentativeFeature(props) {
84
+ const { lastPointerMoveEvent } = props;
85
+ const clickSequence = this.getClickSequence();
86
+ const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];
87
+ let tentativeFeature;
88
+ if (clickSequence.length === 1) {
89
+ tentativeFeature = this.getTwoClickPolygon(clickSequence[0], lastCoords[0], props.modeConfig);
90
+ }
91
+ return tentativeFeature;
92
+ }
93
+ }
@@ -0,0 +1,86 @@
1
+ import { Position, Point, Geometry, FeatureWithProps } from '../geojson-types';
2
+ export type ScreenCoordinates = [number, number];
3
+ export type EditAction<TData> = {
4
+ updatedData: TData;
5
+ editType: string;
6
+ editContext: any;
7
+ };
8
+ export type Pick = {
9
+ index: number;
10
+ object?: any;
11
+ isGuide?: boolean;
12
+ featureIndex?: number;
13
+ type?: string;
14
+ isEditingHandle?: boolean | null;
15
+ };
16
+ export type Viewport = {
17
+ width: number;
18
+ height: number;
19
+ longitude: number;
20
+ latitude: number;
21
+ zoom: number;
22
+ bearing?: number;
23
+ pitch?: number;
24
+ };
25
+ export type BasePointerEvent = {
26
+ picks: Pick[];
27
+ screenCoords: ScreenCoordinates;
28
+ mapCoords: Position;
29
+ sourceEvent: any;
30
+ };
31
+ export type ClickEvent = BasePointerEvent;
32
+ export type StartDraggingEvent = BasePointerEvent & {
33
+ pointerDownPicks?: Pick[] | null;
34
+ pointerDownScreenCoords: ScreenCoordinates;
35
+ pointerDownMapCoords: Position;
36
+ cancelPan: () => void;
37
+ };
38
+ export type StopDraggingEvent = BasePointerEvent & {
39
+ pointerDownPicks?: Pick[] | null;
40
+ pointerDownScreenCoords: ScreenCoordinates;
41
+ pointerDownMapCoords: Position;
42
+ };
43
+ export type DraggingEvent = BasePointerEvent & {
44
+ pointerDownPicks?: Pick[] | null;
45
+ pointerDownScreenCoords: ScreenCoordinates;
46
+ pointerDownMapCoords: Position;
47
+ cancelPan: () => void;
48
+ };
49
+ export type PointerMoveEvent = BasePointerEvent & {
50
+ pointerDownPicks?: Pick[] | null;
51
+ pointerDownScreenCoords?: ScreenCoordinates | null;
52
+ pointerDownMapCoords?: Position | null;
53
+ cancelPan: () => void;
54
+ isDragging?: boolean;
55
+ };
56
+ export type Tooltip = {
57
+ position: Position;
58
+ text: string;
59
+ };
60
+ export type EditHandleType = 'existing' | 'intermediate' | 'snap-source' | 'snap-target' | 'scale' | 'rotate';
61
+ export type EditHandleFeature = FeatureWithProps<Point, {
62
+ guideType: 'editHandle';
63
+ editHandleType: EditHandleType;
64
+ featureIndex: number;
65
+ positionIndexes?: number[];
66
+ shape?: string;
67
+ }>;
68
+ export type TentativeFeature = FeatureWithProps<Geometry, {
69
+ guideType: 'tentative';
70
+ shape?: string;
71
+ }>;
72
+ export type GuideFeature = EditHandleFeature | TentativeFeature;
73
+ export type GuideFeatureCollection = {
74
+ type: 'FeatureCollection';
75
+ features: Readonly<GuideFeature>[];
76
+ properties?: {};
77
+ };
78
+ export type ModeProps<TData> = {
79
+ data: TData;
80
+ modeConfig: any;
81
+ selectedIndexes: number[];
82
+ cursor: string | null | undefined;
83
+ lastPointerMoveEvent: PointerMoveEvent;
84
+ onEdit: (editAction: EditAction<TData>) => void;
85
+ onUpdateCursor: (cursor: string | null | undefined) => void;
86
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ import { MultiLineString } from '@turf/helpers';
2
+ import { Viewport, Pick, EditHandleFeature, EditHandleType } from './types';
3
+ import { Geometry, Position, Point, LineString, Polygon, FeatureOf, FeatureWithProps, AnyCoordinates } from '../geojson-types';
4
+ export type NearestPointType = FeatureWithProps<Point, {
5
+ dist: number;
6
+ index: number;
7
+ }>;
8
+ export declare function toDeckColor(color?: [number, number, number, number] | number, defaultColor?: [number, number, number, number]): [number, number, number, number];
9
+ export declare function recursivelyTraverseNestedArrays(array: Array<any>, prefix: Array<number>, fn: (array: Array<any>, prefix: number[]) => void): boolean;
10
+ export declare function generatePointsParallelToLinePoints(p1: Position, p2: Position, mapCoords: Position): Position[];
11
+ export declare function distance2d(x1: number, y1: number, x2: number, y2: number): number;
12
+ export declare function mix(a: number, b: number, ratio: number): number;
13
+ export declare function nearestPointOnProjectedLine(line: FeatureOf<LineString>, inPoint: FeatureOf<Point>, viewport: Viewport): NearestPointType;
14
+ export declare function nearestPointOnLine<G extends LineString | MultiLineString>(lines: FeatureOf<LineString>, inPoint: FeatureOf<Point>, viewport?: Viewport): NearestPointType;
15
+ export declare function getPickedEditHandle(picks: Pick[] | null | undefined): EditHandleFeature | null | undefined;
16
+ export declare function getPickedSnapSourceEditHandle(picks: Pick[] | null | undefined): EditHandleFeature | null | undefined;
17
+ export declare function getNonGuidePicks(picks: Pick[]): Pick[];
18
+ export declare function getPickedExistingEditHandle(picks: Pick[] | null | undefined): EditHandleFeature | null | undefined;
19
+ export declare function getPickedIntermediateEditHandle(picks: Pick[] | null | undefined): EditHandleFeature | null | undefined;
20
+ export declare function getPickedEditHandles(picks: Pick[] | null | undefined): EditHandleFeature[];
21
+ export declare function getEditHandlesForGeometry(geometry: Geometry, featureIndex: number, editHandleType?: EditHandleType): EditHandleFeature[];
22
+ /**
23
+ * Calculates coordinates for a feature preserving rectangular shape.
24
+ * @param feature Feature before modification.
25
+ * @param editHandleIndex Index of the point to modify.
26
+ * @param mapCoords New position for the point.
27
+ * @returns Updated coordinates.
28
+ */
29
+ export declare function updateRectanglePosition(feature: FeatureOf<Polygon>, editHandleIndex: number, mapCoords: Position): Position[][] | null;
30
+ /** Creates a copy of feature's coordinates.
31
+ * Each position in coordinates is transformed by calling the provided function.
32
+ * @param coords Coordinates of a feature.
33
+ * @param callback A function to transform each coordinate.
34
+ * @retuns Transformed coordinates.
35
+ */
36
+ export declare function mapCoords(coords: AnyCoordinates, callback: (coords: Position) => Position): AnyCoordinates;