@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,49 @@
1
+ import { CompositeLayer, CompositeLayerProps } from '@deck.gl/core';
2
+ import { DraggingEvent, ClickEvent, StartDraggingEvent, StopDraggingEvent, PointerMoveEvent } from '../edit-modes/types';
3
+ import { Position } from '../geojson-types';
4
+ export type EditableLayerProps<DataType = any> = CompositeLayerProps & {
5
+ pickingRadius?: number;
6
+ pickingDepth?: number;
7
+ };
8
+ export default abstract class EditableLayer<DataT = any, ExtraPropsT = Record<string, unknown>> extends CompositeLayer<ExtraPropsT & Required<EditableLayerProps<DataT>>> {
9
+ static layerName: string;
10
+ state: {
11
+ _editableLayerState: any;
12
+ };
13
+ onLayerClick(event: ClickEvent): void;
14
+ onStartDragging(event: StartDraggingEvent): void;
15
+ onStopDragging(event: StopDraggingEvent): void;
16
+ onDragging(event: DraggingEvent): void;
17
+ onPointerMove(event: PointerMoveEvent): void;
18
+ onLayerKeyUp(event: KeyboardEvent): void;
19
+ initializeState(): void;
20
+ finalizeState(): void;
21
+ _addEventHandlers(): void;
22
+ _removeEventHandlers(): void;
23
+ _forwardEventToCurrentLayer(event: any): void;
24
+ _onanyclick({ srcEvent }: any): void;
25
+ _onkeyup({ srcEvent }: {
26
+ srcEvent: KeyboardEvent;
27
+ }): void;
28
+ _onpanstart(event: any): void;
29
+ _onpanmove(event: any): void;
30
+ _onpanend({ srcEvent }: any): void;
31
+ _onpointermove(event: any): void;
32
+ getPicks(screenCoords: [number, number]): {
33
+ color: Uint8Array;
34
+ layer: import("@deck.gl/core").Layer<{}>;
35
+ sourceLayer?: import("@deck.gl/core").Layer<{}>;
36
+ viewport?: import("@deck.gl/core").Viewport;
37
+ index: number;
38
+ picked: boolean;
39
+ object?: any;
40
+ x: number;
41
+ y: number;
42
+ pixel?: [number, number];
43
+ coordinate?: number[];
44
+ devicePixel?: [number, number];
45
+ pixelRatio: number;
46
+ }[];
47
+ getScreenCoords(pointerEvent: any): Position;
48
+ getMapCoords(screenCoords: Position): Position;
49
+ }
@@ -0,0 +1,195 @@
1
+ /* eslint-env browser */
2
+ import { CompositeLayer } from '@deck.gl/core';
3
+ const EVENT_TYPES = ['anyclick', 'pointermove', 'panstart', 'panmove', 'panend', 'keyup'];
4
+ export default class EditableLayer extends CompositeLayer {
5
+ static layerName = 'EditableLayer';
6
+ state = undefined;
7
+ // Overridable interaction event handlers
8
+ onLayerClick(event) {
9
+ // default implementation - do nothing
10
+ }
11
+ onStartDragging(event) {
12
+ // default implementation - do nothing
13
+ }
14
+ onStopDragging(event) {
15
+ // default implementation - do nothing
16
+ }
17
+ onDragging(event) {
18
+ // default implementation - do nothing
19
+ }
20
+ onPointerMove(event) {
21
+ // default implementation - do nothing
22
+ }
23
+ onLayerKeyUp(event) {
24
+ // default implementation - do nothing;
25
+ }
26
+ // TODO: implement onCancelDragging (e.g. drag off screen)
27
+ initializeState() {
28
+ this.setState({
29
+ _editableLayerState: {
30
+ // Picked objects at the time the pointer went down
31
+ pointerDownPicks: null,
32
+ // Screen coordinates where the pointer went down
33
+ pointerDownScreenCoords: null,
34
+ // Ground coordinates where the pointer went down
35
+ pointerDownMapCoords: null,
36
+ // Keep track of the mjolnir.js event handler so it can be deregistered
37
+ eventHandler: this._forwardEventToCurrentLayer.bind(this),
38
+ },
39
+ });
40
+ this._addEventHandlers();
41
+ }
42
+ finalizeState() {
43
+ this._removeEventHandlers();
44
+ }
45
+ _addEventHandlers() {
46
+ // @ts-expect-error accessing protected props
47
+ const { eventManager } = this.context.deck;
48
+ const { eventHandler } = this.state._editableLayerState;
49
+ for (const eventType of EVENT_TYPES) {
50
+ eventManager.on(eventType, eventHandler, {
51
+ // give nebula a higher priority so that it can stop propagation to deck.gl's map panning handlers
52
+ priority: 100,
53
+ });
54
+ }
55
+ }
56
+ _removeEventHandlers() {
57
+ // @ts-expect-error accessing protected props
58
+ const { eventManager } = this.context.deck;
59
+ const { eventHandler } = this.state._editableLayerState;
60
+ for (const eventType of EVENT_TYPES) {
61
+ eventManager.off(eventType, eventHandler);
62
+ }
63
+ }
64
+ // A new layer instance is created on every render, so forward the event to the current layer
65
+ // This means that the first layer instance will stick around to be the event listener, but will forward the event
66
+ // to the latest layer instance.
67
+ _forwardEventToCurrentLayer(event) {
68
+ const currentLayer = this.getCurrentLayer();
69
+ // Use a naming convention to find the event handling function for this event type
70
+ const func = currentLayer[`_on${event.type}`].bind(currentLayer);
71
+ if (!func) {
72
+ console.warn(`no handler for mjolnir.js event ${event.type}`); // eslint-disable-line
73
+ return;
74
+ }
75
+ func(event);
76
+ }
77
+ _onanyclick({ srcEvent }) {
78
+ const screenCoords = this.getScreenCoords(srcEvent);
79
+ const mapCoords = this.getMapCoords(screenCoords);
80
+ const picks = this.getPicks(screenCoords);
81
+ this.onLayerClick({
82
+ mapCoords,
83
+ screenCoords,
84
+ picks,
85
+ sourceEvent: srcEvent,
86
+ });
87
+ }
88
+ _onkeyup({ srcEvent }) {
89
+ this.onLayerKeyUp(srcEvent);
90
+ }
91
+ _onpanstart(event) {
92
+ const screenCoords = this.getScreenCoords(event.srcEvent);
93
+ const mapCoords = this.getMapCoords(screenCoords);
94
+ const picks = this.getPicks(screenCoords);
95
+ this.setState({
96
+ _editableLayerState: {
97
+ ...this.state._editableLayerState,
98
+ pointerDownScreenCoords: screenCoords,
99
+ pointerDownMapCoords: mapCoords,
100
+ pointerDownPicks: picks,
101
+ },
102
+ });
103
+ this.onStartDragging({
104
+ picks,
105
+ screenCoords,
106
+ mapCoords,
107
+ pointerDownScreenCoords: screenCoords,
108
+ pointerDownMapCoords: mapCoords,
109
+ cancelPan: event.stopImmediatePropagation,
110
+ sourceEvent: event.srcEvent,
111
+ });
112
+ }
113
+ _onpanmove(event) {
114
+ const { srcEvent } = event;
115
+ const screenCoords = this.getScreenCoords(srcEvent);
116
+ const mapCoords = this.getMapCoords(screenCoords);
117
+ const { pointerDownPicks, pointerDownScreenCoords, pointerDownMapCoords } = this.state._editableLayerState;
118
+ const picks = this.getPicks(screenCoords);
119
+ this.onDragging({
120
+ screenCoords,
121
+ mapCoords,
122
+ picks,
123
+ pointerDownPicks,
124
+ pointerDownScreenCoords,
125
+ pointerDownMapCoords,
126
+ sourceEvent: srcEvent,
127
+ cancelPan: event.stopImmediatePropagation,
128
+ // another (hacky) approach for cancelling map panning
129
+ // const controller = this.context.deck.viewManager.controllers[
130
+ // Object.keys(this.context.deck.viewManager.controllers)[0]
131
+ // ];
132
+ // controller._state.isDragging = false;
133
+ });
134
+ }
135
+ _onpanend({ srcEvent }) {
136
+ const screenCoords = this.getScreenCoords(srcEvent);
137
+ const mapCoords = this.getMapCoords(screenCoords);
138
+ const { pointerDownPicks, pointerDownScreenCoords, pointerDownMapCoords } = this.state._editableLayerState;
139
+ const picks = this.getPicks(screenCoords);
140
+ this.onStopDragging({
141
+ picks,
142
+ screenCoords,
143
+ mapCoords,
144
+ pointerDownPicks,
145
+ pointerDownScreenCoords,
146
+ pointerDownMapCoords,
147
+ sourceEvent: srcEvent,
148
+ });
149
+ this.setState({
150
+ _editableLayerState: {
151
+ ...this.state._editableLayerState,
152
+ pointerDownScreenCoords: null,
153
+ pointerDownMapCoords: null,
154
+ pointerDownPicks: null,
155
+ },
156
+ });
157
+ }
158
+ _onpointermove(event) {
159
+ const { srcEvent } = event;
160
+ const screenCoords = this.getScreenCoords(srcEvent);
161
+ const mapCoords = this.getMapCoords(screenCoords);
162
+ const { pointerDownPicks, pointerDownScreenCoords, pointerDownMapCoords } = this.state._editableLayerState;
163
+ const picks = this.getPicks(screenCoords);
164
+ this.onPointerMove({
165
+ screenCoords,
166
+ mapCoords,
167
+ picks,
168
+ pointerDownPicks,
169
+ pointerDownScreenCoords,
170
+ pointerDownMapCoords,
171
+ sourceEvent: srcEvent,
172
+ cancelPan: event.stopImmediatePropagation,
173
+ });
174
+ }
175
+ getPicks(screenCoords) {
176
+ return this.context.deck.pickMultipleObjects({
177
+ x: screenCoords[0],
178
+ y: screenCoords[1],
179
+ layerIds: [this.props.id],
180
+ radius: this.props.pickingRadius,
181
+ depth: this.props.pickingDepth,
182
+ });
183
+ }
184
+ getScreenCoords(pointerEvent) {
185
+ return [
186
+ pointerEvent.clientX -
187
+ this.context.gl.canvas.getBoundingClientRect().left,
188
+ pointerEvent.clientY -
189
+ this.context.gl.canvas.getBoundingClientRect().top,
190
+ ];
191
+ }
192
+ getMapCoords(screenCoords) {
193
+ return this.context.viewport.unproject([screenCoords[0], screenCoords[1]]);
194
+ }
195
+ }
@@ -0,0 +1,9 @@
1
+ import { PathLayer, PathLayerProps } from '@deck.gl/layers';
2
+ interface EditablePathLayerProps extends PathLayerProps<any> {
3
+ pickingLineWidthExtraPixels?: number;
4
+ }
5
+ export default class EditablePathLayer extends PathLayer<any, EditablePathLayerProps> {
6
+ getShaders(): any;
7
+ draw(props: any): void;
8
+ }
9
+ export {};
@@ -0,0 +1,34 @@
1
+ import { PathLayer } from '@deck.gl/layers';
2
+ import { insertBefore } from '../utils';
3
+ const defaultProps = {
4
+ ...PathLayer.defaultProps,
5
+ pickingLineWidthExtraPixels: { type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER },
6
+ };
7
+ export default class EditablePathLayer extends PathLayer {
8
+ getShaders() {
9
+ const shaders = super.getShaders();
10
+ shaders.vs = insertBefore(shaders.vs, 'vec3 width;', `
11
+ if(bool(picking.isActive)){
12
+ widthPixels.xy += pickingLineWidthExtraPixels;
13
+ }
14
+ `);
15
+ return {
16
+ ...shaders,
17
+ inject: {
18
+ ...(shaders.inject || {}),
19
+ 'vs:#decl': (shaders.inject?.['vs:#decl'] || '').concat('uniform float pickingLineWidthExtraPixels;'),
20
+ },
21
+ };
22
+ }
23
+ draw(props) {
24
+ super.draw({
25
+ ...props,
26
+ uniforms: {
27
+ ...props.uniforms,
28
+ pickingLineWidthExtraPixels: this.props.pickingLineWidthExtraPixels,
29
+ },
30
+ });
31
+ }
32
+ }
33
+ EditablePathLayer.defaultProps = defaultProps;
34
+ EditablePathLayer.layerName = 'EditablePathLayer';
@@ -0,0 +1,7 @@
1
+ import { CompositeLayer } from '@deck.gl/core';
2
+ import { ScatterplotLayer, LineLayer } from '@deck.gl/layers';
3
+ export default class ElevatedEditHandleLayer extends CompositeLayer<any> {
4
+ static layerName: string;
5
+ static defaultProps: {};
6
+ renderLayers(): (ScatterplotLayer<any, {}> | LineLayer<any, {}>)[];
7
+ }
@@ -0,0 +1,24 @@
1
+ /* eslint-env browser */
2
+ import { CompositeLayer } from '@deck.gl/core';
3
+ import { ScatterplotLayer, LineLayer } from '@deck.gl/layers';
4
+ const defaultProps = {};
5
+ export default class ElevatedEditHandleLayer extends CompositeLayer {
6
+ static layerName = 'ElevatedEditHandleLayer';
7
+ static defaultProps = defaultProps;
8
+ renderLayers() {
9
+ const handles = new ScatterplotLayer(Object.assign({}, this.props, {
10
+ id: `${this.props.id}-ScatterplotLayer`,
11
+ data: this.props.data,
12
+ }));
13
+ const lines = new LineLayer(Object.assign({}, this.props, {
14
+ id: `${this.props.id}-LineLayer`,
15
+ data: this.props.data,
16
+ pickable: false,
17
+ getSourcePosition: ({ position }) => [position[0], position[1], 0],
18
+ getTargetPosition: ({ position }) => [position[0], position[1], position[2] || 0],
19
+ getColor: [150, 150, 150, 200],
20
+ getStrokeWidth: 3,
21
+ }));
22
+ return [handles, lines];
23
+ }
24
+ }
@@ -0,0 +1,14 @@
1
+ import { CompositeLayer, CompositeLayerProps, DefaultProps } from '@deck.gl/core';
2
+ import { ScatterplotLayer, ScatterplotLayerProps } from '@deck.gl/layers';
3
+ import { Color } from '../types';
4
+ type JunctionScatterplotLayerProps = CompositeLayerProps & Omit<ScatterplotLayerProps, 'getFillColor'> & {
5
+ getFillColor?: Color | ((d: any) => Color);
6
+ getStrokeColor?: Color | ((d: any) => Color);
7
+ getInnerRadius?: number | ((d: any) => number);
8
+ };
9
+ export default class JunctionScatterplotLayer extends CompositeLayer<JunctionScatterplotLayerProps> {
10
+ static layerName: string;
11
+ static defaultProps: DefaultProps<JunctionScatterplotLayerProps>;
12
+ renderLayers(): ScatterplotLayer<any, {}>[];
13
+ }
14
+ export {};
@@ -0,0 +1,41 @@
1
+ import { CompositeLayer } from '@deck.gl/core';
2
+ import { ScatterplotLayer } from '@deck.gl/layers';
3
+ export default class JunctionScatterplotLayer extends CompositeLayer {
4
+ static layerName = 'JunctionScatterplotLayer';
5
+ static defaultProps = {
6
+ ...ScatterplotLayer.defaultProps,
7
+ getFillColor: (d) => [0, 0, 0, 255],
8
+ getStrokeColor: (d) => [255, 255, 255, 255],
9
+ getInnerRadius: (d) => 1,
10
+ };
11
+ renderLayers() {
12
+ const { id, getFillColor, getStrokeColor, getInnerRadius, updateTriggers } = this.props;
13
+ // data needs to be passed explicitly after deck.gl 5.3
14
+ return [
15
+ // the full circles
16
+ new ScatterplotLayer({
17
+ ...this.props,
18
+ id: `${id}-full`,
19
+ data: this.props.data,
20
+ getLineColor: getStrokeColor,
21
+ updateTriggers: {
22
+ ...updateTriggers,
23
+ getStrokeColor: updateTriggers.getStrokeColor,
24
+ },
25
+ }), // the inner part
26
+ new ScatterplotLayer({
27
+ ...this.props,
28
+ id: `${id}-inner`,
29
+ data: this.props.data,
30
+ getFillColor,
31
+ getRadius: getInnerRadius,
32
+ pickable: false,
33
+ updateTriggers: {
34
+ ...updateTriggers,
35
+ getFillColor: updateTriggers.getFillColor,
36
+ getRadius: updateTriggers.getInnerRadius,
37
+ },
38
+ }),
39
+ ];
40
+ }
41
+ }
@@ -0,0 +1,4 @@
1
+ import { Geometry } from '@luma.gl/engine';
2
+ export default class Arrow2DGeometry extends Geometry {
3
+ constructor(opts?: {});
4
+ }
@@ -0,0 +1,55 @@
1
+ import { Geometry } from '@luma.gl/engine';
2
+ export default class Arrow2DGeometry extends Geometry {
3
+ constructor(opts = {}) {
4
+ super(Object.assign({}, opts, {
5
+ attributes: getArrowAttributes(opts),
6
+ topology: 'triangle-list'
7
+ }));
8
+ }
9
+ }
10
+ function getArrowAttributes({ length = 1, headSize = 0.2, tailWidth = 0.05, tailStart = 0.05 }) {
11
+ const texCoords = [
12
+ // HEAD
13
+ 0.5,
14
+ 1.0,
15
+ 0,
16
+ 0.5 - headSize / 2,
17
+ 1.0 - headSize,
18
+ 0,
19
+ 0.5 + headSize / 2,
20
+ 1.0 - headSize,
21
+ 0,
22
+ 0.5 - tailWidth / 2,
23
+ tailStart,
24
+ 0,
25
+ 0.5 + tailWidth / 2,
26
+ 1.0 - headSize,
27
+ 0,
28
+ 0.5 + tailWidth / 2,
29
+ tailStart,
30
+ 0,
31
+ 0.5 - tailWidth / 2,
32
+ tailStart,
33
+ 0,
34
+ 0.5 - tailWidth / 2,
35
+ 1.0 - headSize,
36
+ 0,
37
+ 0.5 + tailWidth / 2,
38
+ 1.0 - headSize,
39
+ 0,
40
+ ];
41
+ const normals = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1];
42
+ // Center and scale
43
+ const positions = new Array(texCoords.length);
44
+ for (let i = 0; i < texCoords.length / 3; i++) {
45
+ const i3 = i * 3;
46
+ positions[i3 + 0] = (texCoords[i3 + 0] - 0.5) * length;
47
+ positions[i3 + 1] = (texCoords[i3 + 1] - 0.5) * length;
48
+ positions[i3 + 2] = 0;
49
+ }
50
+ return {
51
+ positions: { size: 3, value: new Float32Array(positions) },
52
+ normals: { size: 3, value: new Float32Array(normals) },
53
+ texCoords: { size: 2, value: new Float32Array(texCoords) },
54
+ };
55
+ }
@@ -0,0 +1,16 @@
1
+ import { Position } from '../../geojson-types';
2
+ import { Color } from '../../types';
3
+ export interface PathMarker {
4
+ position: Position;
5
+ angle: number;
6
+ color: Color;
7
+ object: unknown;
8
+ }
9
+ export default function createPathMarkers({ data, getPath, getDirection, getColor, getMarkerPercentages, projectFlat, }: {
10
+ data: any;
11
+ getPath?: (x: any, context: any) => any;
12
+ getDirection?: (x: any) => any;
13
+ getColor?: (x: any) => number[];
14
+ getMarkerPercentages?: (x: any, info: any) => number[];
15
+ projectFlat: any;
16
+ }): PathMarker[];
@@ -0,0 +1,75 @@
1
+ import { Vector2 } from '@math.gl/core';
2
+ function getLineLength(vPoints) {
3
+ // calculate total length
4
+ let lineLength = 0;
5
+ for (let i = 0; i < vPoints.length - 1; i++) {
6
+ lineLength += vPoints[i].distance(vPoints[i + 1]);
7
+ }
8
+ return lineLength;
9
+ }
10
+ const DEFAULT_COLOR = [0, 0, 0, 255];
11
+ const DEFAULT_DIRECTION = { forward: true, backward: false };
12
+ export default function createPathMarkers({ data, getPath = (x, context) => x.path, getDirection = (x) => x.direction, getColor = (x) => DEFAULT_COLOR, getMarkerPercentages = (x, info) => [0.5], projectFlat, }) {
13
+ const markers = [];
14
+ for (const object of data) {
15
+ const path = getPath(object, null);
16
+ const direction = getDirection(object) || DEFAULT_DIRECTION;
17
+ const color = getColor(object);
18
+ const vPoints = path.map((p) => new Vector2(p));
19
+ const vPointsReverse = vPoints.slice(0).reverse();
20
+ // calculate total length
21
+ const lineLength = getLineLength(vPoints);
22
+ // Ask for where to put markers
23
+ const percentages = getMarkerPercentages(object, { lineLength });
24
+ // Create the markers
25
+ for (const percentage of percentages) {
26
+ if (direction.forward) {
27
+ const marker = createMarkerAlongPath({
28
+ path: vPoints,
29
+ percentage,
30
+ lineLength,
31
+ color,
32
+ object,
33
+ projectFlat,
34
+ });
35
+ markers.push(marker);
36
+ }
37
+ if (direction.backward) {
38
+ const marker = createMarkerAlongPath({
39
+ path: vPointsReverse,
40
+ percentage,
41
+ lineLength,
42
+ color,
43
+ object,
44
+ projectFlat,
45
+ });
46
+ markers.push(marker);
47
+ }
48
+ }
49
+ }
50
+ return markers;
51
+ }
52
+ function createMarkerAlongPath({ path, percentage, lineLength, color, object, projectFlat }) {
53
+ const distanceAlong = lineLength * percentage;
54
+ let currentDistance = 0;
55
+ let previousDistance = 0;
56
+ let i = 0;
57
+ for (i = 0; i < path.length - 1; i++) {
58
+ currentDistance += path[i].distance(path[i + 1]);
59
+ if (currentDistance > distanceAlong) {
60
+ break;
61
+ }
62
+ previousDistance = currentDistance;
63
+ }
64
+ // If reached the end of the loop without exiting early,
65
+ // undo the final increment to avoid a null-pointer exception
66
+ if (i === path.length - 1) {
67
+ i -= 1;
68
+ }
69
+ const vDirection = path[i + 1].clone().subtract(path[i]).normalize();
70
+ const along = distanceAlong - previousDistance;
71
+ const vCenter = vDirection.clone().multiply(new Vector2(along, along)).add(path[i]);
72
+ const vDirection2 = new Vector2(projectFlat(path[i + 1])).subtract(projectFlat(path[i]));
73
+ const angle = (vDirection2.verticalAngle() * 180) / Math.PI;
74
+ return { position: [vCenter.x, vCenter.y, 0], angle, color, object };
75
+ }
@@ -0,0 +1,40 @@
1
+ import { CompositeLayer, DefaultProps } from '@deck.gl/core';
2
+ import { PathOutlineLayerProps } from '../path-outline-layer/path-outline-layer';
3
+ import Arrow2DGeometry from './arrow-2d-geometry';
4
+ import { Vector3 } from '@math.gl/core';
5
+ export type PathMarkerLayerProps<DataT> = PathOutlineLayerProps<DataT> & {
6
+ getDirection?: (x: any) => any;
7
+ getMarkerColor?: (x: any) => number[];
8
+ getMarkerPercentages?: (x: any, info: any) => number[];
9
+ highlightPoint?: any;
10
+ highlightIndex?: number;
11
+ MarkerLayer?: any;
12
+ markerLayerProps?: any;
13
+ sizeScale?: number;
14
+ fp64?: boolean;
15
+ nebulaLayer?: any;
16
+ };
17
+ export default class PathMarkerLayer<DataT = any, ExtraPropsT = Record<string, unknown>> extends CompositeLayer<ExtraPropsT & Required<PathMarkerLayerProps<DataT>>> {
18
+ static layerName: string;
19
+ static defaultProps: DefaultProps<PathMarkerLayerProps<any>>;
20
+ state: {
21
+ closestPoint: Vector3 | null;
22
+ closestPoints?: {
23
+ position: Vector3;
24
+ }[];
25
+ markers: any[];
26
+ mesh: Arrow2DGeometry;
27
+ };
28
+ initializeState(): void;
29
+ projectFlat(xyz: any, viewport: any, coordinateSystem: any, coordinateOrigin: any): any;
30
+ updateState({ props, oldProps, changeFlags }: {
31
+ props: any;
32
+ oldProps: any;
33
+ changeFlags: any;
34
+ }): void;
35
+ _recalculateClosestPoint(): void;
36
+ getPickingInfo({ info }: {
37
+ info: any;
38
+ }): any;
39
+ renderLayers(): any[];
40
+ }