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

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 (279) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +2 -81
  3. package/dist/constants.js +4 -1
  4. package/dist/edit-modes/composite-mode.d.ts +1 -1
  5. package/dist/edit-modes/composite-mode.js +4 -1
  6. package/dist/edit-modes/draw-90degree-polygon-mode.d.ts +1 -1
  7. package/dist/edit-modes/draw-90degree-polygon-mode.js +29 -24
  8. package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts +1 -1
  9. package/dist/edit-modes/draw-circle-by-diameter-mode.js +7 -4
  10. package/dist/edit-modes/draw-circle-from-center-mode.d.ts +1 -1
  11. package/dist/edit-modes/draw-circle-from-center-mode.js +7 -4
  12. package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.d.ts +1 -1
  13. package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.js +3 -0
  14. package/dist/edit-modes/draw-ellipse-using-three-points-mode.d.ts +1 -1
  15. package/dist/edit-modes/draw-ellipse-using-three-points-mode.js +3 -0
  16. package/dist/edit-modes/draw-line-string-mode.d.ts +1 -1
  17. package/dist/edit-modes/draw-line-string-mode.js +19 -16
  18. package/dist/edit-modes/draw-point-mode.d.ts +1 -1
  19. package/dist/edit-modes/draw-point-mode.js +7 -4
  20. package/dist/edit-modes/draw-polygon-by-dragging-mode.d.ts +1 -1
  21. package/dist/edit-modes/draw-polygon-by-dragging-mode.js +10 -5
  22. package/dist/edit-modes/draw-polygon-mode.d.ts +1 -1
  23. package/dist/edit-modes/draw-polygon-mode.js +20 -16
  24. package/dist/edit-modes/draw-rectangle-from-center-mode.d.ts +1 -1
  25. package/dist/edit-modes/draw-rectangle-from-center-mode.js +3 -0
  26. package/dist/edit-modes/draw-rectangle-mode.d.ts +1 -1
  27. package/dist/edit-modes/draw-rectangle-mode.js +3 -0
  28. package/dist/edit-modes/draw-rectangle-using-three-points-mode.d.ts +1 -1
  29. package/dist/edit-modes/draw-rectangle-using-three-points-mode.js +8 -5
  30. package/dist/edit-modes/draw-square-from-center-mode.d.ts +1 -1
  31. package/dist/edit-modes/draw-square-from-center-mode.js +3 -0
  32. package/dist/edit-modes/draw-square-mode.d.ts +1 -1
  33. package/dist/edit-modes/draw-square-mode.js +3 -0
  34. package/dist/edit-modes/duplicate-mode.d.ts +1 -1
  35. package/dist/edit-modes/duplicate-mode.js +3 -0
  36. package/dist/edit-modes/edit-mode.js +3 -1
  37. package/dist/edit-modes/elevation-mode.d.ts +2 -2
  38. package/dist/edit-modes/elevation-mode.js +8 -5
  39. package/dist/edit-modes/extend-line-string-mode.d.ts +1 -1
  40. package/dist/edit-modes/extend-line-string-mode.js +9 -6
  41. package/dist/edit-modes/extrude-mode.d.ts +1 -1
  42. package/dist/edit-modes/extrude-mode.js +10 -7
  43. package/dist/edit-modes/geojson-edit-mode.d.ts +1 -1
  44. package/dist/edit-modes/geojson-edit-mode.js +18 -15
  45. package/dist/edit-modes/immutable-feature-collection.d.ts +2 -1
  46. package/dist/edit-modes/immutable-feature-collection.js +25 -20
  47. package/dist/edit-modes/measure-angle-mode.d.ts +1 -1
  48. package/dist/edit-modes/measure-angle-mode.js +8 -8
  49. package/dist/edit-modes/measure-area-mode.d.ts +1 -1
  50. package/dist/edit-modes/measure-area-mode.js +7 -5
  51. package/dist/edit-modes/measure-distance-mode.d.ts +1 -1
  52. package/dist/edit-modes/measure-distance-mode.js +17 -14
  53. package/dist/edit-modes/modify-mode.d.ts +1 -1
  54. package/dist/edit-modes/modify-mode.js +17 -14
  55. package/dist/edit-modes/resize-circle-mode.d.ts +2 -2
  56. package/dist/edit-modes/resize-circle-mode.js +3 -1
  57. package/dist/edit-modes/rotate-mode.d.ts +1 -1
  58. package/dist/edit-modes/rotate-mode.js +8 -5
  59. package/dist/edit-modes/scale-mode.d.ts +1 -1
  60. package/dist/edit-modes/scale-mode.js +8 -5
  61. package/dist/edit-modes/snappable-mode.d.ts +1 -1
  62. package/dist/edit-modes/snappable-mode.js +8 -5
  63. package/dist/edit-modes/split-polygon-mode.d.ts +1 -1
  64. package/dist/edit-modes/split-polygon-mode.js +12 -9
  65. package/dist/edit-modes/three-click-polygon-mode.d.ts +1 -1
  66. package/dist/edit-modes/three-click-polygon-mode.js +9 -6
  67. package/dist/edit-modes/transform-mode.d.ts +1 -1
  68. package/dist/edit-modes/transform-mode.js +4 -1
  69. package/dist/edit-modes/translate-mode.d.ts +1 -1
  70. package/dist/edit-modes/translate-mode.js +7 -4
  71. package/dist/edit-modes/two-click-polygon-mode.d.ts +1 -1
  72. package/dist/edit-modes/two-click-polygon-mode.js +9 -6
  73. package/dist/edit-modes/types.d.ts +1 -1
  74. package/dist/edit-modes/types.js +3 -0
  75. package/dist/edit-modes/utils.d.ts +1 -1
  76. package/dist/edit-modes/utils.js +21 -19
  77. package/dist/edit-modes/view-mode.js +3 -0
  78. package/dist/editable-layers/editable-geojson-layer.d.ts +4 -4
  79. package/dist/editable-layers/editable-geojson-layer.js +27 -26
  80. package/dist/editable-layers/editable-h3-cluster-layer.d.ts +2 -2
  81. package/dist/editable-layers/editable-h3-cluster-layer.js +6 -3
  82. package/dist/editable-layers/editable-layer.d.ts +5 -5
  83. package/dist/editable-layers/editable-layer.js +18 -15
  84. package/dist/editable-layers/editable-path-layer.d.ts +1 -1
  85. package/dist/editable-layers/editable-path-layer.js +10 -7
  86. package/dist/editable-layers/elevated-edit-handle-layer.d.ts +1 -1
  87. package/dist/editable-layers/elevated-edit-handle-layer.js +6 -3
  88. package/dist/editable-layers/junction-scatterplot-layer.d.ts +2 -2
  89. package/dist/editable-layers/junction-scatterplot-layer.js +10 -7
  90. package/dist/editable-layers/selection-layer.d.ts +1 -1
  91. package/dist/editable-layers/selection-layer.js +5 -2
  92. package/dist/index.cjs +65 -537
  93. package/dist/index.cjs.map +4 -4
  94. package/dist/index.d.ts +19 -20
  95. package/dist/index.js +20 -18
  96. package/dist/lib/constants.js +3 -0
  97. package/dist/lib/deck-renderer/deck-cache.d.ts +1 -1
  98. package/dist/lib/deck-renderer/deck-cache.js +1 -1
  99. package/dist/lib/deck-renderer/deck-drawer.d.ts +2 -3
  100. package/dist/lib/deck-renderer/deck-drawer.js +12 -12
  101. package/dist/lib/feature.d.ts +4 -4
  102. package/dist/lib/feature.js +4 -1
  103. package/dist/lib/layer-mouse-event.d.ts +2 -2
  104. package/dist/lib/layer-mouse-event.js +4 -1
  105. package/dist/lib/layers/junctions-layer.d.ts +4 -4
  106. package/dist/lib/layers/junctions-layer.js +10 -7
  107. package/dist/lib/layers/segments-layer.d.ts +4 -4
  108. package/dist/lib/layers/segments-layer.js +11 -8
  109. package/dist/lib/layers/texts-layer.d.ts +3 -3
  110. package/dist/lib/layers/texts-layer.js +8 -5
  111. package/dist/lib/math.d.ts +1 -1
  112. package/dist/lib/math.js +3 -0
  113. package/dist/lib/{nebula.d.ts → nebula-core.d.ts} +2 -2
  114. package/dist/lib/{nebula.js → nebula-core.js} +7 -4
  115. package/dist/lib/nebula-layer.d.ts +2 -2
  116. package/dist/lib/nebula-layer.js +4 -1
  117. package/dist/lib/style.js +5 -2
  118. package/dist/mode-handlers/composite-mode-handler.d.ts +1 -1
  119. package/dist/mode-handlers/draw-90degree-polygon-handler.d.ts +1 -1
  120. package/dist/mode-handlers/draw-90degree-polygon-handler.js +13 -10
  121. package/dist/mode-handlers/draw-circle-by-bounding-box-handler.js +3 -0
  122. package/dist/mode-handlers/draw-circle-from-center-handler.js +3 -0
  123. package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.js +3 -0
  124. package/dist/mode-handlers/draw-ellipse-using-three-points-handler.js +5 -2
  125. package/dist/mode-handlers/draw-line-string-handler.js +7 -4
  126. package/dist/mode-handlers/draw-point-handler.js +4 -1
  127. package/dist/mode-handlers/draw-polygon-handler.d.ts +1 -1
  128. package/dist/mode-handlers/draw-polygon-handler.js +10 -7
  129. package/dist/mode-handlers/draw-rectangle-handler.js +3 -0
  130. package/dist/mode-handlers/draw-rectangle-using-three-points-handler.js +11 -8
  131. package/dist/mode-handlers/duplicate-handler.js +3 -0
  132. package/dist/mode-handlers/elevation-handler.d.ts +2 -2
  133. package/dist/mode-handlers/elevation-handler.js +8 -5
  134. package/dist/mode-handlers/extrude-handler.js +10 -7
  135. package/dist/mode-handlers/mode-handler.d.ts +1 -1
  136. package/dist/mode-handlers/mode-handler.js +17 -14
  137. package/dist/mode-handlers/modify-handler.d.ts +2 -2
  138. package/dist/mode-handlers/modify-handler.js +18 -15
  139. package/dist/mode-handlers/rotate-handler.d.ts +1 -1
  140. package/dist/mode-handlers/rotate-handler.js +4 -1
  141. package/dist/mode-handlers/scale-handler.d.ts +1 -1
  142. package/dist/mode-handlers/scale-handler.js +5 -2
  143. package/dist/mode-handlers/snappable-handler.d.ts +1 -1
  144. package/dist/mode-handlers/snappable-handler.js +6 -3
  145. package/dist/mode-handlers/split-polygon-handler.js +11 -8
  146. package/dist/mode-handlers/three-click-polygon-handler.js +3 -0
  147. package/dist/mode-handlers/translate-handler.d.ts +1 -1
  148. package/dist/mode-handlers/translate-handler.js +4 -1
  149. package/dist/mode-handlers/two-click-polygon-handler.js +3 -0
  150. package/dist/mode-handlers/view-handler.d.ts +1 -1
  151. package/dist/mode-handlers/view-handler.js +3 -0
  152. package/dist/shaderlib/color/color.d.ts +7 -6
  153. package/dist/shaderlib/color/color.js +7 -4
  154. package/dist/shaderlib/utils/utils.d.ts +2 -2
  155. package/dist/shaderlib/utils/utils.js +5 -2
  156. package/dist/{curve-utils.js → utils/curve-utils.js} +7 -4
  157. package/dist/{geojson-types.d.ts → utils/geojson-types.d.ts} +2 -25
  158. package/dist/utils/geojson-types.js +4 -0
  159. package/dist/{memoize.d.ts → utils/memoize.d.ts} +1 -1
  160. package/dist/{memoize.js → utils/memoize.js} +4 -1
  161. package/dist/{translateFromCenter.js → utils/translate-from-center.js} +4 -1
  162. package/dist/utils/types.js +4 -0
  163. package/dist/{utils.js → utils/utils.js} +8 -6
  164. package/package.json +10 -10
  165. package/src/constants.ts +5 -1
  166. package/src/edit-modes/composite-mode.ts +9 -5
  167. package/src/edit-modes/draw-90degree-polygon-mode.ts +38 -34
  168. package/src/edit-modes/draw-circle-by-diameter-mode.ts +16 -12
  169. package/src/edit-modes/draw-circle-from-center-mode.ts +15 -11
  170. package/src/edit-modes/draw-ellipse-by-bounding-box-mode.ts +8 -4
  171. package/src/edit-modes/draw-ellipse-using-three-points-mode.ts +9 -5
  172. package/src/edit-modes/draw-line-string-mode.ts +29 -25
  173. package/src/edit-modes/draw-point-mode.ts +13 -9
  174. package/src/edit-modes/draw-polygon-by-dragging-mode.ts +16 -16
  175. package/src/edit-modes/draw-polygon-mode.ts +28 -23
  176. package/src/edit-modes/draw-rectangle-from-center-mode.ts +6 -2
  177. package/src/edit-modes/draw-rectangle-mode.ts +6 -2
  178. package/src/edit-modes/draw-rectangle-using-three-points-mode.ts +12 -8
  179. package/src/edit-modes/draw-square-from-center-mode.ts +7 -3
  180. package/src/edit-modes/draw-square-mode.ts +7 -3
  181. package/src/edit-modes/duplicate-mode.ts +7 -3
  182. package/src/edit-modes/edit-mode.ts +5 -1
  183. package/src/edit-modes/elevation-mode.ts +13 -9
  184. package/src/edit-modes/extend-line-string-mode.ts +16 -12
  185. package/src/edit-modes/extrude-mode.ts +22 -18
  186. package/src/edit-modes/geojson-edit-mode.ts +37 -33
  187. package/src/edit-modes/immutable-feature-collection.ts +28 -22
  188. package/src/edit-modes/measure-angle-mode.ts +66 -59
  189. package/src/edit-modes/measure-area-mode.ts +13 -10
  190. package/src/edit-modes/measure-distance-mode.ts +37 -33
  191. package/src/edit-modes/modify-mode.ts +36 -32
  192. package/src/edit-modes/resize-circle-mode.ts +8 -5
  193. package/src/edit-modes/rotate-mode.ts +22 -18
  194. package/src/edit-modes/scale-mode.ts +29 -23
  195. package/src/edit-modes/snappable-mode.ts +19 -15
  196. package/src/edit-modes/split-polygon-mode.ts +25 -21
  197. package/src/edit-modes/three-click-polygon-mode.ts +15 -11
  198. package/src/edit-modes/transform-mode.ts +15 -11
  199. package/src/edit-modes/translate-mode.ts +15 -11
  200. package/src/edit-modes/two-click-polygon-mode.ts +15 -11
  201. package/src/edit-modes/types.ts +5 -1
  202. package/src/edit-modes/utils.ts +33 -30
  203. package/src/edit-modes/view-mode.ts +5 -1
  204. package/src/editable-layers/editable-geojson-layer.ts +44 -41
  205. package/src/editable-layers/editable-h3-cluster-layer.ts +17 -14
  206. package/src/editable-layers/editable-layer.ts +42 -32
  207. package/src/editable-layers/editable-path-layer.ts +12 -8
  208. package/src/editable-layers/elevated-edit-handle-layer.ts +11 -7
  209. package/src/editable-layers/junction-scatterplot-layer.ts +15 -11
  210. package/src/editable-layers/selection-layer.ts +11 -7
  211. package/src/index.ts +68 -65
  212. package/src/lib/constants.ts +4 -0
  213. package/src/lib/deck-renderer/deck-cache.ts +1 -1
  214. package/src/lib/deck-renderer/deck-drawer.ts +28 -28
  215. package/src/lib/feature.ts +7 -3
  216. package/src/lib/layer-mouse-event.ts +7 -6
  217. package/src/lib/layers/junctions-layer.ts +14 -10
  218. package/src/lib/layers/segments-layer.ts +24 -20
  219. package/src/lib/layers/texts-layer.ts +18 -14
  220. package/src/lib/math.ts +5 -1
  221. package/src/lib/{nebula.ts → nebula-core.ts} +8 -4
  222. package/src/lib/nebula-layer.ts +9 -5
  223. package/src/lib/style.ts +6 -2
  224. package/src/mode-handlers/composite-mode-handler.ts +6 -6
  225. package/src/mode-handlers/draw-90degree-polygon-handler.ts +22 -18
  226. package/src/mode-handlers/draw-circle-by-bounding-box-handler.ts +10 -6
  227. package/src/mode-handlers/draw-circle-from-center-handler.ts +10 -6
  228. package/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts +9 -5
  229. package/src/mode-handlers/draw-ellipse-using-three-points-handler.ts +12 -8
  230. package/src/mode-handlers/draw-line-string-handler.ts +12 -8
  231. package/src/mode-handlers/draw-point-handler.ts +9 -5
  232. package/src/mode-handlers/draw-polygon-handler.ts +16 -12
  233. package/src/mode-handlers/draw-rectangle-handler.ts +8 -4
  234. package/src/mode-handlers/draw-rectangle-using-three-points-handler.ts +17 -13
  235. package/src/mode-handlers/duplicate-handler.ts +8 -4
  236. package/src/mode-handlers/elevation-handler.ts +14 -10
  237. package/src/mode-handlers/extrude-handler.ts +15 -11
  238. package/src/mode-handlers/mode-handler.ts +26 -28
  239. package/src/mode-handlers/modify-handler.ts +29 -25
  240. package/src/mode-handlers/rotate-handler.ts +13 -17
  241. package/src/mode-handlers/scale-handler.ts +13 -13
  242. package/src/mode-handlers/snappable-handler.ts +28 -24
  243. package/src/mode-handlers/split-polygon-handler.ts +22 -18
  244. package/src/mode-handlers/three-click-polygon-handler.ts +6 -2
  245. package/src/mode-handlers/translate-handler.ts +12 -8
  246. package/src/mode-handlers/two-click-polygon-handler.ts +6 -2
  247. package/src/mode-handlers/view-handler.ts +7 -3
  248. package/src/shaderlib/color/color.ts +10 -5
  249. package/src/shaderlib/utils/utils.ts +6 -2
  250. package/src/{curve-utils.ts → utils/curve-utils.ts} +11 -7
  251. package/src/{geojson-types.ts → utils/geojson-types.ts} +16 -31
  252. package/src/{memoize.ts → utils/memoize.ts} +5 -1
  253. package/src/{translateFromCenter.ts → utils/translate-from-center.ts} +8 -4
  254. package/src/{types.ts → utils/types.ts} +4 -0
  255. package/src/{utils.ts → utils/utils.ts} +14 -11
  256. package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.d.ts +0 -4
  257. package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.js +0 -55
  258. package/dist/editable-layers/path-marker-layer/create-path-markers.d.ts +0 -16
  259. package/dist/editable-layers/path-marker-layer/create-path-markers.js +0 -75
  260. package/dist/editable-layers/path-marker-layer/path-marker-layer.d.ts +0 -40
  261. package/dist/editable-layers/path-marker-layer/path-marker-layer.js +0 -121
  262. package/dist/editable-layers/path-marker-layer/polyline.d.ts +0 -18
  263. package/dist/editable-layers/path-marker-layer/polyline.js +0 -37
  264. package/dist/editable-layers/path-outline-layer/path-outline-layer.d.ts +0 -26
  265. package/dist/editable-layers/path-outline-layer/path-outline-layer.js +0 -106
  266. package/dist/geojson-types.js +0 -2
  267. package/dist/shaderlib/outline/outline.d.ts +0 -8
  268. package/dist/shaderlib/outline/outline.js +0 -97
  269. package/dist/types.js +0 -1
  270. package/src/editable-layers/path-marker-layer/arrow-2d-geometry.ts +0 -61
  271. package/src/editable-layers/path-marker-layer/create-path-markers.ts +0 -107
  272. package/src/editable-layers/path-marker-layer/path-marker-layer.ts +0 -179
  273. package/src/editable-layers/path-marker-layer/polyline.ts +0 -40
  274. package/src/editable-layers/path-outline-layer/path-outline-layer.ts +0 -147
  275. package/src/shaderlib/outline/outline.ts +0 -101
  276. /package/dist/{curve-utils.d.ts → utils/curve-utils.d.ts} +0 -0
  277. /package/dist/{translateFromCenter.d.ts → utils/translate-from-center.d.ts} +0 -0
  278. /package/dist/{types.d.ts → utils/types.d.ts} +0 -0
  279. /package/dist/{utils.d.ts → utils/utils.d.ts} +0 -0
@@ -1,63 +1,70 @@
1
1
  import turfBearing from '@turf/bearing';
2
2
  import turfCenter from '@turf/center';
3
- import memoize from '../memoize';
3
+ import {memoize} from '../utils/memoize';
4
4
 
5
- import { ClickEvent, PointerMoveEvent, Tooltip, ModeProps, GuideFeatureCollection } from './types';
6
- import { FeatureCollection, Position } from '../geojson-types';
7
- import { GeoJsonEditMode } from './geojson-edit-mode';
5
+ import {ClickEvent, PointerMoveEvent, Tooltip, ModeProps, GuideFeatureCollection} from './types';
6
+ import {FeatureCollection, Position} from '../utils/geojson-types';
7
+ import {GeoJsonEditMode} from './geojson-edit-mode';
8
8
 
9
9
  const DEFAULT_TOOLTIPS: Tooltip[] = [];
10
10
 
11
11
  export class MeasureAngleMode extends GeoJsonEditMode {
12
- _getTooltips = memoize(({ modeConfig, vertex, point1, point2 }: {
13
- modeConfig: any,
14
- vertex: any,
15
- point1: Position,
16
- point2: Position
17
- }): Tooltip[] => {
18
- let tooltips = DEFAULT_TOOLTIPS;
19
-
20
- if (vertex && point1 && point2) {
21
- const { formatTooltip, measurementCallback } = modeConfig || {};
22
- const units = 'deg';
23
-
24
- const angle1 = turfBearing(vertex, point1);
25
- const angle2 = turfBearing(vertex, point2);
26
- let angle = Math.abs(angle1 - angle2);
27
- if (angle > 180) {
28
- angle = 360 - angle;
12
+ _getTooltips = memoize(
13
+ ({
14
+ modeConfig,
15
+ vertex,
16
+ point1,
17
+ point2
18
+ }: {
19
+ modeConfig: any;
20
+ vertex: any;
21
+ point1: Position;
22
+ point2: Position;
23
+ }): Tooltip[] => {
24
+ let tooltips = DEFAULT_TOOLTIPS;
25
+
26
+ if (vertex && point1 && point2) {
27
+ const {formatTooltip, measurementCallback} = modeConfig || {};
28
+ const units = 'deg';
29
+
30
+ const angle1 = turfBearing(vertex, point1);
31
+ const angle2 = turfBearing(vertex, point2);
32
+ let angle = Math.abs(angle1 - angle2);
33
+ if (angle > 180) {
34
+ angle = 360 - angle;
35
+ }
36
+
37
+ let text: string;
38
+ if (formatTooltip) {
39
+ text = formatTooltip(angle);
40
+ } else {
41
+ // By default, round to 2 decimal places and append units
42
+ // @ts-expect-error angle isn't string
43
+ text = `${parseFloat(angle).toFixed(2)} ${units}`;
44
+ }
45
+
46
+ if (measurementCallback) {
47
+ measurementCallback(angle);
48
+ }
49
+
50
+ const position = turfCenter({
51
+ type: 'FeatureCollection',
52
+ features: [point1, point2].map((p) => ({
53
+ type: 'Feature',
54
+ geometry: {
55
+ type: 'Point',
56
+ coordinates: p
57
+ },
58
+ properties: {}
59
+ }))
60
+ }).geometry.coordinates;
61
+
62
+ tooltips = [{position, text}];
29
63
  }
30
64
 
31
- let text: string;
32
- if (formatTooltip) {
33
- text = formatTooltip(angle);
34
- } else {
35
- // By default, round to 2 decimal places and append units
36
- // @ts-expect-error angle isn't string
37
- text = `${parseFloat(angle).toFixed(2)} ${units}`;
38
- }
39
-
40
- if (measurementCallback) {
41
- measurementCallback(angle);
42
- }
43
-
44
- const position = turfCenter({
45
- type: 'FeatureCollection',
46
- features: [point1, point2].map((p) => ({
47
- type: 'Feature',
48
- geometry: {
49
- type: 'Point',
50
- coordinates: p,
51
- },
52
- properties: {}
53
- })),
54
- }).geometry.coordinates as Position;
55
-
56
- tooltips = [{position, text}];
65
+ return tooltips;
57
66
  }
58
-
59
- return tooltips;
60
- });
67
+ );
61
68
 
62
69
  handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>): void {
63
70
  if (this.getClickSequence().length >= 3) {
@@ -86,28 +93,28 @@ export class MeasureAngleMode extends GeoJsonEditMode {
86
93
 
87
94
  // Return features that can be used as a guide for editing the data
88
95
  getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
89
- const guides: GuideFeatureCollection = { type: 'FeatureCollection', features: [] };
90
- const { features } = guides;
96
+ const guides: GuideFeatureCollection = {type: 'FeatureCollection', features: []};
97
+ const {features} = guides;
91
98
 
92
99
  const points = this.getPoints(props);
93
100
 
94
101
  if (points.length > 2) {
95
102
  features.push({
96
103
  type: 'Feature',
97
- properties: { guideType: 'tentative' },
104
+ properties: {guideType: 'tentative'},
98
105
  geometry: {
99
106
  type: 'LineString',
100
- coordinates: [points[1], points[0], points[2]],
101
- },
107
+ coordinates: [points[1], points[0], points[2]]
108
+ }
102
109
  });
103
110
  } else if (points.length > 1) {
104
111
  features.push({
105
112
  type: 'Feature',
106
- properties: { guideType: 'tentative' },
113
+ properties: {guideType: 'tentative'},
107
114
  geometry: {
108
115
  type: 'LineString',
109
- coordinates: [points[1], points[0]],
110
- },
116
+ coordinates: [points[1], points[0]]
117
+ }
111
118
  });
112
119
  }
113
120
 
@@ -121,7 +128,7 @@ export class MeasureAngleMode extends GeoJsonEditMode {
121
128
  modeConfig: props.modeConfig,
122
129
  vertex: points[0],
123
130
  point1: points[1],
124
- point2: points[2],
131
+ point2: points[2]
125
132
  }) as Tooltip[];
126
133
  }
127
134
  }
@@ -1,8 +1,12 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
1
5
  import turfArea from '@turf/area';
2
6
  import turfCentroid from '@turf/centroid';
3
- import { ClickEvent, Tooltip, ModeProps } from './types';
4
- import { FeatureCollection } from '../geojson-types';
5
- import { DrawPolygonMode } from './draw-polygon-mode';
7
+ import {ClickEvent, Tooltip, ModeProps} from './types';
8
+ import {FeatureCollection} from '../utils/geojson-types';
9
+ import {DrawPolygonMode} from './draw-polygon-mode';
6
10
 
7
11
  const DEFAULT_TOOLTIPS = [];
8
12
 
@@ -10,7 +14,7 @@ export class MeasureAreaMode extends DrawPolygonMode {
10
14
  handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {
11
15
  const propsWithoutEdit = {
12
16
  ...props,
13
- onEdit: () => {},
17
+ onEdit: () => {}
14
18
  };
15
19
 
16
20
  super.handleClick(event, propsWithoutEdit);
@@ -19,7 +23,7 @@ export class MeasureAreaMode extends DrawPolygonMode {
19
23
  handleKeyUp(event: KeyboardEvent, props: ModeProps<FeatureCollection>): void {
20
24
  const propsWithoutEdit = {
21
25
  ...props,
22
- onEdit: () => {},
26
+ onEdit: () => {}
23
27
  };
24
28
 
25
29
  super.handleKeyUp(event, propsWithoutEdit);
@@ -29,8 +33,8 @@ export class MeasureAreaMode extends DrawPolygonMode {
29
33
  const tentativeGuide = this.getTentativeGuide(props);
30
34
 
31
35
  if (tentativeGuide && tentativeGuide.geometry.type === 'Polygon') {
32
- const { modeConfig } = props;
33
- const { formatTooltip, measurementCallback } = modeConfig || {};
36
+ const {modeConfig} = props;
37
+ const {formatTooltip, measurementCallback} = modeConfig || {};
34
38
  const units = 'sq. m';
35
39
 
36
40
  const centroid = turfCentroid(tentativeGuide);
@@ -51,10 +55,9 @@ export class MeasureAreaMode extends DrawPolygonMode {
51
55
 
52
56
  return [
53
57
  {
54
- // @ts-expect-error turf types diff
55
58
  position: centroid.geometry.coordinates,
56
- text,
57
- },
59
+ text
60
+ }
58
61
  ];
59
62
  }
60
63
  return DEFAULT_TOOLTIPS;
@@ -1,24 +1,28 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
1
5
  import turfDistance from '@turf/distance';
2
6
  import turfMidpoint from '@turf/midpoint';
3
- import { FeatureCollection, Position } from '../geojson-types';
7
+ import {FeatureCollection, Position} from '../utils/geojson-types';
4
8
  import {
5
9
  ClickEvent,
6
10
  PointerMoveEvent,
7
11
  ModeProps,
8
12
  GuideFeatureCollection,
9
13
  Tooltip,
10
- GuideFeature,
14
+ GuideFeature
11
15
  } from './types';
12
- import { getPickedEditHandle } from './utils';
13
- import { GeoJsonEditMode } from './geojson-edit-mode';
16
+ import {getPickedEditHandle} from './utils';
17
+ import {GeoJsonEditMode} from './geojson-edit-mode';
14
18
 
15
19
  export class MeasureDistanceMode extends GeoJsonEditMode {
16
20
  _isMeasuringSessionFinished = false;
17
21
  _currentTooltips: Tooltip[] = [];
18
22
  _currentDistance = 0;
19
23
 
20
- _calculateDistanceForTooltip = ({ positionA, positionB, modeConfig }) => {
21
- const { turfOptions, measurementCallback } = modeConfig || {};
24
+ _calculateDistanceForTooltip = ({positionA, positionB, modeConfig}) => {
25
+ const {turfOptions, measurementCallback} = modeConfig || {};
22
26
  const distance = turfDistance(positionA, positionB, turfOptions);
23
27
 
24
28
  if (measurementCallback) {
@@ -29,7 +33,7 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
29
33
  };
30
34
 
31
35
  _formatTooltip(distance, modeConfig?) {
32
- const { formatTooltip, turfOptions } = modeConfig || {};
36
+ const {formatTooltip, turfOptions} = modeConfig || {};
33
37
  const units = (turfOptions && turfOptions.units) || 'kilometers';
34
38
 
35
39
  let text;
@@ -44,8 +48,8 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
44
48
  }
45
49
 
46
50
  handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {
47
- const { modeConfig, data, onEdit } = props;
48
- const { centerTooltipsOnLine = false } = modeConfig || {};
51
+ const {modeConfig, data, onEdit} = props;
52
+ const {centerTooltipsOnLine = false} = modeConfig || {};
49
53
 
50
54
  // restart measuring session
51
55
  if (this._isMeasuringSessionFinished) {
@@ -55,7 +59,7 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
55
59
  this._currentDistance = 0;
56
60
  }
57
61
 
58
- const { picks } = event;
62
+ const {picks} = event;
59
63
  const clickedEditHandle = getPickedEditHandle(picks);
60
64
 
61
65
  let positionAdded = false;
@@ -79,19 +83,19 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
79
83
  this._currentDistance += this._calculateDistanceForTooltip({
80
84
  positionA: clickSequence[clickSequence.length - 2],
81
85
  positionB: clickSequence[clickSequence.length - 1],
82
- modeConfig,
86
+ modeConfig
83
87
  });
84
88
 
85
89
  const tooltipPosition = centerTooltipsOnLine
86
90
  ? turfMidpoint(
87
- clickSequence[clickSequence.length - 2],
88
- clickSequence[clickSequence.length - 1]
89
- ).geometry.coordinates
91
+ clickSequence[clickSequence.length - 2],
92
+ clickSequence[clickSequence.length - 1]
93
+ ).geometry.coordinates
90
94
  : event.mapCoords;
91
95
 
92
96
  this._currentTooltips.push({
93
- position: tooltipPosition as Position,
94
- text: this._formatTooltip(this._currentDistance, modeConfig),
97
+ position: tooltipPosition,
98
+ text: this._formatTooltip(this._currentDistance, modeConfig)
95
99
  });
96
100
  }
97
101
 
@@ -101,8 +105,8 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
101
105
  updatedData: data,
102
106
  editType: 'addTentativePosition',
103
107
  editContext: {
104
- position: event.mapCoords,
105
- },
108
+ position: event.mapCoords
109
+ }
106
110
  });
107
111
  }
108
112
  }
@@ -111,7 +115,7 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
111
115
  if (this._isMeasuringSessionFinished) return;
112
116
 
113
117
  event.stopPropagation();
114
- const { key } = event;
118
+ const {key} = event;
115
119
 
116
120
  const clickSequenceLength = this.getClickSequence().length;
117
121
 
@@ -135,7 +139,7 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
135
139
  }
136
140
 
137
141
  getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
138
- const { lastPointerMoveEvent } = props;
142
+ const {lastPointerMoveEvent} = props;
139
143
  const clickSequence = this.getClickSequence();
140
144
 
141
145
  const lastCoords =
@@ -145,19 +149,19 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
145
149
 
146
150
  const guides: GuideFeatureCollection = {
147
151
  type: 'FeatureCollection',
148
- features: [],
152
+ features: []
149
153
  };
150
154
 
151
155
  if (clickSequence.length > 0) {
152
156
  guides.features.push({
153
157
  type: 'Feature',
154
158
  properties: {
155
- guideType: 'tentative',
159
+ guideType: 'tentative'
156
160
  },
157
161
  geometry: {
158
162
  type: 'LineString',
159
- coordinates: [...clickSequence, ...lastCoords],
160
- },
163
+ coordinates: [...clickSequence, ...lastCoords]
164
+ }
161
165
  });
162
166
  }
163
167
 
@@ -167,12 +171,12 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
167
171
  guideType: 'editHandle',
168
172
  editHandleType: 'existing',
169
173
  featureIndex: -1,
170
- positionIndexes: [index],
174
+ positionIndexes: [index]
171
175
  },
172
176
  geometry: {
173
177
  type: 'Point',
174
- coordinates: clickedCoord,
175
- },
178
+ coordinates: clickedCoord
179
+ }
176
180
  }));
177
181
 
178
182
  guides.features.push(...editHandles);
@@ -185,28 +189,28 @@ export class MeasureDistanceMode extends GeoJsonEditMode {
185
189
  }
186
190
 
187
191
  getTooltips(props: ModeProps<FeatureCollection>): Tooltip[] {
188
- const { lastPointerMoveEvent, modeConfig } = props;
189
- const { centerTooltipsOnLine = false } = modeConfig || {};
192
+ const {lastPointerMoveEvent, modeConfig} = props;
193
+ const {centerTooltipsOnLine = false} = modeConfig || {};
190
194
  const positions = this.getClickSequence();
191
195
 
192
196
  if (positions.length > 0 && lastPointerMoveEvent && !this._isMeasuringSessionFinished) {
193
197
  const distance = this._calculateDistanceForTooltip({
194
198
  positionA: positions[positions.length - 1],
195
199
  positionB: lastPointerMoveEvent.mapCoords,
196
- modeConfig: props.modeConfig,
200
+ modeConfig: props.modeConfig
197
201
  });
198
202
 
199
203
  const tooltipPosition = centerTooltipsOnLine
200
204
  ? turfMidpoint(positions[positions.length - 1], lastPointerMoveEvent.mapCoords).geometry
201
- .coordinates as Position
205
+ .coordinates
202
206
  : lastPointerMoveEvent.mapCoords;
203
207
 
204
208
  return [
205
209
  ...this._currentTooltips,
206
210
  {
207
211
  position: tooltipPosition,
208
- text: this._formatTooltip(this._currentDistance + distance, modeConfig),
209
- },
212
+ text: this._formatTooltip(this._currentDistance + distance, modeConfig)
213
+ }
210
214
  ];
211
215
  }
212
216
 
@@ -1,4 +1,8 @@
1
- import { point, lineString as toLineString } from '@turf/helpers';
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {point, lineString as toLineString} from '@turf/helpers';
2
6
  import {
3
7
  recursivelyTraverseNestedArrays,
4
8
  nearestPointOnProjectedLine,
@@ -9,9 +13,9 @@ import {
9
13
  getPickedExistingEditHandle,
10
14
  getPickedIntermediateEditHandle,
11
15
  updateRectanglePosition,
12
- NearestPointType,
16
+ NearestPointType
13
17
  } from './utils';
14
- import { LineString, Point, Polygon, FeatureCollection, FeatureOf } from '../geojson-types';
18
+ import {LineString, Point, Polygon, FeatureCollection, FeatureOf} from '../utils/geojson-types';
15
19
  import {
16
20
  ModeProps,
17
21
  ClickEvent,
@@ -22,24 +26,24 @@ import {
22
26
  Viewport,
23
27
  GuideFeatureCollection,
24
28
  EditHandleFeature,
25
- GuideFeature,
29
+ GuideFeature
26
30
  } from './types';
27
- import { GeoJsonEditMode } from './geojson-edit-mode';
28
- import { ImmutableFeatureCollection } from './immutable-feature-collection';
31
+ import {GeoJsonEditMode} from './geojson-edit-mode';
32
+ import {ImmutableFeatureCollection} from './immutable-feature-collection';
29
33
 
30
34
  export class ModifyMode extends GeoJsonEditMode {
31
35
  // eslint-disable-next-line complexity
32
36
  getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
33
37
  const handles: GuideFeature[] = [];
34
38
 
35
- const { data, lastPointerMoveEvent } = props;
36
- const { features } = data;
39
+ const {data, lastPointerMoveEvent} = props;
40
+ const {features} = data;
37
41
  const picks = lastPointerMoveEvent && lastPointerMoveEvent.picks;
38
42
  const mapCoords = lastPointerMoveEvent && lastPointerMoveEvent.mapCoords;
39
43
 
40
44
  for (const index of props.selectedIndexes) {
41
45
  if (index < features.length) {
42
- const { geometry } = features[index];
46
+ const {geometry} = features[index];
43
47
  handles.push(...getEditHandlesForGeometry(geometry, index));
44
48
  } else {
45
49
  console.warn(`selectedFeatureIndexes out of range ${index}`); // eslint-disable-line no-console,no-undef
@@ -88,21 +92,21 @@ export class ModifyMode extends GeoJsonEditMode {
88
92
  // tack on the lone intermediate point to the set of handles
89
93
  if (intermediatePoint) {
90
94
  const {
91
- geometry: { coordinates: position },
92
- properties: { index },
93
- } = intermediatePoint as NearestPointType;
95
+ geometry: {coordinates: position},
96
+ properties: {index}
97
+ } = intermediatePoint;
94
98
  handles.push({
95
99
  type: 'Feature',
96
100
  properties: {
97
101
  guideType: 'editHandle',
98
102
  editHandleType: 'intermediate',
99
103
  featureIndex: featureAsPick.index,
100
- positionIndexes: [...positionIndexPrefix, index + 1],
104
+ positionIndexes: [...positionIndexPrefix, index + 1]
101
105
  },
102
106
  geometry: {
103
107
  type: 'Point',
104
- coordinates: position,
105
- },
108
+ coordinates: position
109
+ }
106
110
  });
107
111
  }
108
112
  }
@@ -110,7 +114,7 @@ export class ModifyMode extends GeoJsonEditMode {
110
114
 
111
115
  return {
112
116
  type: 'FeatureCollection',
113
- features: handles,
117
+ features: handles
114
118
  };
115
119
  }
116
120
 
@@ -120,7 +124,7 @@ export class ModifyMode extends GeoJsonEditMode {
120
124
  inPoint: FeatureOf<Point>,
121
125
  viewport: Viewport | null | undefined
122
126
  ): NearestPointType {
123
- const { coordinates } = line.geometry;
127
+ const {coordinates} = line.geometry;
124
128
  if (coordinates.some((coord) => coord.length > 2)) {
125
129
  if (viewport) {
126
130
  // This line has elevation, we need to use alternative algorithm
@@ -131,7 +135,7 @@ export class ModifyMode extends GeoJsonEditMode {
131
135
  'Editing 3D point but modeConfig.viewport not provided. Falling back to 2D logic.'
132
136
  );
133
137
  }
134
- return nearestPointOnLine(line, inPoint, viewport!);
138
+ return nearestPointOnLine(line, inPoint, viewport);
135
139
  }
136
140
 
137
141
  handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {
@@ -139,7 +143,7 @@ export class ModifyMode extends GeoJsonEditMode {
139
143
  const pickedIntermediateHandle = getPickedIntermediateEditHandle(event.picks);
140
144
 
141
145
  if (pickedExistingHandle) {
142
- const { featureIndex, positionIndexes } = pickedExistingHandle.properties;
146
+ const {featureIndex, positionIndexes} = pickedExistingHandle.properties;
143
147
 
144
148
  let updatedData;
145
149
  try {
@@ -157,16 +161,16 @@ export class ModifyMode extends GeoJsonEditMode {
157
161
  editContext: {
158
162
  featureIndexes: [featureIndex],
159
163
  positionIndexes,
160
- position: pickedExistingHandle.geometry.coordinates,
161
- },
164
+ position: pickedExistingHandle.geometry.coordinates
165
+ }
162
166
  });
163
167
  }
164
168
  } else if (pickedIntermediateHandle) {
165
- const { featureIndex, positionIndexes } = pickedIntermediateHandle.properties;
169
+ const {featureIndex, positionIndexes} = pickedIntermediateHandle.properties;
166
170
 
167
171
  const feature = props.data.features[featureIndex];
168
172
  const canAddPosition = !(
169
- props.modeConfig?.lockRectangles && feature?.properties!.shape === 'Rectangle'
173
+ props.modeConfig?.lockRectangles && feature?.properties.shape === 'Rectangle'
170
174
  );
171
175
 
172
176
  if (canAddPosition) {
@@ -181,8 +185,8 @@ export class ModifyMode extends GeoJsonEditMode {
181
185
  editContext: {
182
186
  featureIndexes: [featureIndex],
183
187
  positionIndexes,
184
- position: pickedIntermediateHandle.geometry.coordinates,
185
- },
188
+ position: pickedIntermediateHandle.geometry.coordinates
189
+ }
186
190
  });
187
191
  }
188
192
  }
@@ -210,15 +214,15 @@ export class ModifyMode extends GeoJsonEditMode {
210
214
  const editedFeature = props.data.features[editHandleProperties.featureIndex];
211
215
 
212
216
  let updatedData;
213
- if (props.modeConfig?.lockRectangles && editedFeature.properties!.shape === 'Rectangle') {
217
+ if (props.modeConfig?.lockRectangles && editedFeature.properties.shape === 'Rectangle') {
214
218
  const coordinates = updateRectanglePosition(
215
219
  editedFeature as FeatureOf<Polygon>,
216
- editHandleProperties.positionIndexes![1],
220
+ editHandleProperties.positionIndexes[1],
217
221
  event.mapCoords
218
222
  ) as any; // TODO
219
223
 
220
224
  updatedData = new ImmutableFeatureCollection(props.data)
221
- .replaceGeometry(editHandleProperties.featureIndex, { coordinates, type: 'Polygon' })
225
+ .replaceGeometry(editHandleProperties.featureIndex, {coordinates, type: 'Polygon'})
222
226
  .getObject();
223
227
  } else {
224
228
  updatedData = new ImmutableFeatureCollection(props.data)
@@ -236,8 +240,8 @@ export class ModifyMode extends GeoJsonEditMode {
236
240
  editContext: {
237
241
  featureIndexes: [editHandleProperties.featureIndex],
238
242
  positionIndexes: editHandleProperties.positionIndexes,
239
- position: event.mapCoords,
240
- },
243
+ position: event.mapCoords
244
+ }
241
245
  });
242
246
  }
243
247
 
@@ -267,8 +271,8 @@ export class ModifyMode extends GeoJsonEditMode {
267
271
  editContext: {
268
272
  featureIndexes: [editHandleProperties.featureIndex],
269
273
  positionIndexes: editHandleProperties.positionIndexes,
270
- position: event.mapCoords,
271
- },
274
+ position: event.mapCoords
275
+ }
272
276
  });
273
277
  }
274
278
  }
@@ -1,3 +1,7 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
1
5
  import nearestPointOnLine from '@turf/nearest-point-on-line';
2
6
  import {point, lineString as toLineString} from '@turf/helpers';
3
7
  import circle from '@turf/circle';
@@ -10,8 +14,8 @@ import {
10
14
  getPickedEditHandle,
11
15
  NearestPointType
12
16
  } from './utils';
13
- import {LineString, Point, FeatureCollection, FeatureOf} from '../geojson-types';
14
- import {Viewport} from '../types';
17
+ import {LineString, Point, FeatureCollection, FeatureOf} from '../utils/geojson-types';
18
+ import {Viewport} from '../utils/types';
15
19
  import {
16
20
  ModeProps,
17
21
  PointerMoveEvent,
@@ -84,7 +88,7 @@ export class ResizeCircleMode extends GeoJsonEditMode {
84
88
  const {
85
89
  geometry: {coordinates: position},
86
90
  properties: {index}
87
- } = intermediatePoint as NearestPointType;
91
+ } = intermediatePoint;
88
92
  handles.push({
89
93
  type: 'Feature',
90
94
  properties: {
@@ -138,7 +142,7 @@ export class ResizeCircleMode extends GeoJsonEditMode {
138
142
 
139
143
  const editHandleProperties = editHandle.properties;
140
144
 
141
- const feature = this.getSelectedFeature(props)!;
145
+ const feature = this.getSelectedFeature(props);
142
146
  // @ts-expect-error turf types diff
143
147
  const center = turfCenter(feature).geometry.coordinates;
144
148
  const numberOfSteps = Object.entries(feature.geometry.coordinates[0]).length - 1;
@@ -150,7 +154,6 @@ export class ResizeCircleMode extends GeoJsonEditMode {
150
154
  const geometry = updatedFeature.geometry;
151
155
 
152
156
  const updatedData = new ImmutableFeatureCollection(props.data)
153
- // @ts-expect-error turf types diff
154
157
  .replaceGeometry(editHandleProperties.featureIndex, geometry)
155
158
  .getObject();
156
159