@sakuzu/maplibre-gl-draw 1.0.0 → 2.0.0

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 (540) hide show
  1. package/CHANGELOG.md +1016 -2
  2. package/README.ja.md +39 -19
  3. package/README.md +41 -21
  4. package/dist/api/datasets.d.ts +258 -0
  5. package/dist/api/document.d.ts +66 -0
  6. package/dist/api/draw.d.ts +135 -0
  7. package/dist/api/draw.js +18 -0
  8. package/dist/api/drawing.d.ts +87 -0
  9. package/dist/api/errors.d.ts +35 -0
  10. package/dist/api/errors.js +35 -0
  11. package/dist/api/events.d.ts +306 -0
  12. package/dist/api/extension/context.d.ts +247 -0
  13. package/dist/api/extension/feature-type.d.ts +129 -0
  14. package/dist/api/extension/mode.d.ts +123 -0
  15. package/dist/api/extension/plugin.d.ts +51 -0
  16. package/dist/api/extension/plugin.js +3 -0
  17. package/dist/api/extension/provider.d.ts +119 -0
  18. package/dist/api/extension/provider.js +3 -0
  19. package/dist/api/extension/render.d.ts +176 -0
  20. package/dist/api/extension/render.js +3 -0
  21. package/dist/api/extension/store.d.ts +190 -0
  22. package/dist/api/extension/store.js +3 -0
  23. package/dist/api/extensions.d.ts +306 -0
  24. package/dist/api/extensions.js +3 -0
  25. package/dist/api/features.d.ts +188 -0
  26. package/dist/api/features.js +3 -0
  27. package/dist/api/groups.d.ts +111 -0
  28. package/dist/api/groups.js +3 -0
  29. package/dist/api/hidden.d.ts +45 -0
  30. package/dist/api/hidden.js +3 -0
  31. package/dist/api/impl/adapters.js +463 -0
  32. package/dist/api/impl/contexts.js +466 -0
  33. package/dist/api/impl/create-draw.js +124 -0
  34. package/dist/api/impl/datasets.js +404 -0
  35. package/dist/api/impl/destroy-guard.js +74 -0
  36. package/dist/api/impl/document.js +280 -0
  37. package/dist/api/impl/drawing.js +180 -0
  38. package/dist/api/impl/engine-context.d.ts +7 -0
  39. package/dist/api/{context.js → impl/engine-context.js} +49 -38
  40. package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
  41. package/dist/api/impl/events.js +422 -0
  42. package/dist/api/impl/extension-host.js +361 -0
  43. package/dist/api/impl/extensions.js +229 -0
  44. package/dist/api/impl/features.js +445 -0
  45. package/dist/api/impl/geometry/apply.d.ts +32 -0
  46. package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
  47. package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
  48. package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
  49. package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
  50. package/dist/api/{geometry → impl/geometry}/split.js +10 -21
  51. package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
  52. package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
  53. package/dist/api/impl/geometry/types.js +3 -0
  54. package/dist/api/impl/groups.d.ts +3 -0
  55. package/dist/api/impl/groups.js +268 -0
  56. package/dist/api/impl/hidden.js +60 -0
  57. package/dist/api/impl/import-export/constants.d.ts +22 -0
  58. package/dist/api/impl/import-export/constants.js +24 -0
  59. package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
  60. package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
  61. package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
  62. package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
  63. package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
  64. package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
  65. package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
  66. package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
  67. package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
  68. package/dist/api/impl/import-export/image-import.d.ts +16 -0
  69. package/dist/api/impl/import-export/image-import.js +73 -0
  70. package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
  71. package/dist/api/impl/import-export/legacy-image-style.js +49 -0
  72. package/dist/api/impl/import-export/native-format.d.ts +14 -0
  73. package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
  74. package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
  75. package/dist/api/impl/import-export/native-upgrade.js +139 -0
  76. package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
  77. package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
  78. package/dist/api/impl/import-export/style-validation.d.ts +24 -0
  79. package/dist/api/impl/import-export/style-validation.js +86 -0
  80. package/dist/api/impl/import-export/types.d.ts +52 -0
  81. package/dist/api/impl/import-export/types.js +3 -0
  82. package/dist/api/impl/input.js +180 -0
  83. package/dist/api/impl/layers.js +307 -0
  84. package/dist/api/impl/metadata.d.ts +1 -0
  85. package/dist/api/impl/metadata.js +22 -0
  86. package/dist/api/impl/options.d.ts +1 -0
  87. package/dist/api/impl/options.js +822 -0
  88. package/dist/api/impl/placement.d.ts +1 -0
  89. package/dist/api/impl/placement.js +138 -0
  90. package/dist/api/impl/render-context.d.ts +13 -0
  91. package/dist/api/impl/render-context.js +272 -0
  92. package/dist/api/impl/rows.d.ts +1 -0
  93. package/dist/api/impl/rows.js +46 -0
  94. package/dist/api/impl/selection.d.ts +1 -0
  95. package/dist/api/impl/selection.js +186 -0
  96. package/dist/api/impl/shared.d.ts +64 -0
  97. package/dist/api/impl/shared.js +178 -0
  98. package/dist/api/impl/validate-extension.d.ts +1 -0
  99. package/dist/api/impl/validate-extension.js +159 -0
  100. package/dist/api/layers.d.ts +130 -0
  101. package/dist/api/layers.js +3 -0
  102. package/dist/api/metadata.d.ts +18 -0
  103. package/dist/api/metadata.js +3 -0
  104. package/dist/api/model.d.ts +487 -0
  105. package/dist/api/model.js +47 -0
  106. package/dist/api/options.d.ts +466 -0
  107. package/dist/api/options.js +3 -0
  108. package/dist/api/selection.d.ts +94 -0
  109. package/dist/api/selection.js +3 -0
  110. package/dist/api/state.d.ts +155 -0
  111. package/dist/api/state.js +12 -0
  112. package/dist/{display → dataset}/chunk.d.ts +1 -1
  113. package/dist/{display → dataset}/chunk.js +4 -3
  114. package/dist/{display → dataset}/dataset.js +18 -21
  115. package/dist/dataset/interaction.d.ts +1 -0
  116. package/dist/{display → dataset}/interaction.js +18 -6
  117. package/dist/dataset/manager.d.ts +1 -0
  118. package/dist/dataset/provider.d.ts +1 -0
  119. package/dist/{display → dataset}/retained.d.ts +1 -1
  120. package/dist/{display → dataset}/retained.js +8 -7
  121. package/dist/dataset/source.d.ts +1 -0
  122. package/dist/{display → dataset}/source.js +17 -4
  123. package/dist/dataset/spatial.d.ts +1 -0
  124. package/dist/{display → dataset}/spatial.js +1 -1
  125. package/dist/dataset/style.d.ts +1 -0
  126. package/dist/{display → dataset}/style.js +1 -1
  127. package/dist/dataset/table-source.d.ts +1 -0
  128. package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
  129. package/dist/{display → dataset}/thinning.d.ts +0 -10
  130. package/dist/{display → dataset}/thinning.js +3 -2
  131. package/dist/dataset/triangulation.d.ts +1 -0
  132. package/dist/{display → dataset}/triangulation.js +0 -0
  133. package/dist/{display → dataset}/types.d.ts +82 -121
  134. package/dist/dataset/types.js +61 -0
  135. package/dist/dispatcher/hit-test/box-strategies.js +13 -13
  136. package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
  137. package/dist/dispatcher/hit-test/globe-shape.js +5 -4
  138. package/dist/dispatcher/hit-test/service.d.ts +17 -0
  139. package/dist/dispatcher/hit-test/service.js +80 -16
  140. package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
  141. package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
  142. package/dist/dispatcher/hit-test/strategies/image.js +6 -18
  143. package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
  144. package/dist/dispatcher/hit-test/strategies/line.js +9 -2
  145. package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
  146. package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
  147. package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
  148. package/dist/dispatcher/hit-test/strategies/point.js +8 -4
  149. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
  150. package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
  151. package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
  152. package/dist/dispatcher/input-router.js +152 -69
  153. package/dist/dispatcher/normalizer.js +6 -2
  154. package/dist/dispatcher/types.d.ts +6 -1
  155. package/dist/extension/feature-handler.d.ts +1 -182
  156. package/dist/extension/index.d.ts +4 -7
  157. package/dist/extension/renderers.d.ts +1 -208
  158. package/dist/geometry/angle.d.ts +0 -8
  159. package/dist/geometry/angle.js +0 -8
  160. package/dist/geometry/bbox.d.ts +4 -12
  161. package/dist/geometry/bbox.js +4 -12
  162. package/dist/geometry/boolean.d.ts +0 -51
  163. package/dist/geometry/boolean.js +0 -51
  164. package/dist/geometry/buffer.d.ts +0 -26
  165. package/dist/geometry/buffer.js +0 -26
  166. package/dist/geometry/circle.d.ts +0 -9
  167. package/dist/geometry/circle.js +0 -9
  168. package/dist/geometry/coords.d.ts +0 -16
  169. package/dist/geometry/coords.js +0 -16
  170. package/dist/geometry/distance.d.ts +0 -24
  171. package/dist/geometry/distance.js +0 -24
  172. package/dist/geometry/errors.d.ts +21 -36
  173. package/dist/geometry/errors.js +49 -29
  174. package/dist/geometry/geojson.d.ts +81 -0
  175. package/dist/geometry/geojson.js +164 -0
  176. package/dist/geometry/index.d.ts +38 -23
  177. package/dist/geometry/index.js +43 -31
  178. package/dist/geometry/measure.d.ts +0 -27
  179. package/dist/geometry/measure.js +0 -27
  180. package/dist/geometry/predicates.d.ts +0 -9
  181. package/dist/geometry/predicates.js +0 -9
  182. package/dist/geometry/public-bounds.d.ts +26 -0
  183. package/dist/geometry/public-bounds.js +30 -0
  184. package/dist/geometry/public-combine.d.ts +78 -0
  185. package/dist/geometry/public-combine.js +82 -0
  186. package/dist/geometry/public-create.d.ts +54 -0
  187. package/dist/geometry/public-create.js +70 -0
  188. package/dist/geometry/public-measure.d.ts +170 -0
  189. package/dist/geometry/public-measure.js +283 -0
  190. package/dist/geometry/public-predicates.d.ts +54 -0
  191. package/dist/geometry/public-predicates.js +144 -0
  192. package/dist/geometry/public-repair.d.ts +75 -0
  193. package/dist/geometry/public-repair.js +77 -0
  194. package/dist/geometry/simplify.d.ts +0 -7
  195. package/dist/geometry/simplify.js +0 -7
  196. package/dist/geometry/split.d.ts +0 -20
  197. package/dist/geometry/split.js +0 -20
  198. package/dist/geometry/units.d.ts +20 -12
  199. package/dist/geometry/units.js +20 -12
  200. package/dist/index.d.ts +52 -66
  201. package/dist/index.js +6 -18
  202. package/dist/messages.d.ts +7 -7
  203. package/dist/modes/draw/circle.js +83 -207
  204. package/dist/modes/draw/commit-layer.d.ts +5 -16
  205. package/dist/modes/draw/commit-layer.js +2 -13
  206. package/dist/modes/draw/freehand.js +108 -246
  207. package/dist/modes/draw/image.js +4 -2
  208. package/dist/modes/draw/index.d.ts +5 -5
  209. package/dist/modes/draw/index.js +5 -5
  210. package/dist/modes/draw/line.js +18 -354
  211. package/dist/modes/draw/point.js +29 -78
  212. package/dist/modes/draw/polygon.js +23 -368
  213. package/dist/modes/draw/trace-support.d.ts +43 -36
  214. package/dist/modes/draw/trace-support.js +95 -98
  215. package/dist/modes/draw/vertex-drawing.d.ts +1 -0
  216. package/dist/modes/draw/vertex-drawing.js +176 -0
  217. package/dist/modes/handler.d.ts +1 -285
  218. package/dist/modes/manager.d.ts +2 -2
  219. package/dist/modes/manager.js +3 -0
  220. package/dist/modes/select/box-selection.d.ts +3 -3
  221. package/dist/modes/select/box-selection.js +2 -1
  222. package/dist/modes/select/click-handler.d.ts +5 -5
  223. package/dist/modes/select/click-handler.js +22 -20
  224. package/dist/modes/select/cursor-handler.d.ts +2 -2
  225. package/dist/modes/select/drag/intermediate-writes.js +1 -1
  226. package/dist/modes/select/drag/move.js +3 -3
  227. package/dist/modes/select/drag/operation.d.ts +3 -3
  228. package/dist/modes/select/drag/radius.js +5 -4
  229. package/dist/modes/select/drag/transform.d.ts +2 -2
  230. package/dist/modes/select/drag/transform.js +11 -5
  231. package/dist/modes/select/drag/vertex.d.ts +2 -2
  232. package/dist/modes/select/drag/vertex.js +13 -8
  233. package/dist/modes/select/drag-handler.js +44 -25
  234. package/dist/modes/select/mode.js +17 -17
  235. package/dist/modes/select/shortcut-handler.d.ts +8 -8
  236. package/dist/modes/select/shortcut-handler.js +9 -7
  237. package/dist/operations/layer-operations.js +29 -168
  238. package/dist/operations/resize.d.ts +2 -2
  239. package/dist/operations/resize.js +5 -5
  240. package/dist/operations/rotate.js +5 -5
  241. package/dist/operations/selection-operations.d.ts +16 -1
  242. package/dist/operations/selection-operations.js +28 -13
  243. package/dist/operations/shared-vertex.js +4 -2
  244. package/dist/operations/trace-graph.d.ts +0 -18
  245. package/dist/operations/trace-graph.js +0 -18
  246. package/dist/operations/vertex.js +36 -35
  247. package/dist/shared/color.d.ts +1 -0
  248. package/dist/shared/color.js +245 -0
  249. package/dist/shared/config/constants.d.ts +1 -54
  250. package/dist/shared/config/constants.js +1 -58
  251. package/dist/shared/config/feature-style.d.ts +16 -13
  252. package/dist/shared/config/feature-style.js +9 -0
  253. package/dist/shared/config/rendering.d.ts +3 -3
  254. package/dist/shared/config/selection-highlight.d.ts +0 -15
  255. package/dist/shared/config/selection-highlight.js +4 -7
  256. package/dist/shared/config/selection.d.ts +2 -32
  257. package/dist/shared/config/selection.js +0 -18
  258. package/dist/shared/config/topology.d.ts +2 -2
  259. package/dist/shared/config/trace.d.ts +4 -4
  260. package/dist/shared/math/angle.d.ts +1 -1
  261. package/dist/shared/math/angle.js +1 -1
  262. package/dist/shared/math/circle.d.ts +1 -1
  263. package/dist/shared/math/circle.js +1 -1
  264. package/dist/shared/math/distance.d.ts +2 -1
  265. package/dist/shared/math/distance.js +3 -2
  266. package/dist/shared/math/index.d.ts +1 -1
  267. package/dist/shared/math/index.js +1 -1
  268. package/dist/shared/math/transform.d.ts +23 -0
  269. package/dist/shared/math/transform.js +47 -28
  270. package/dist/shared/properties.d.ts +18 -0
  271. package/dist/shared/properties.js +129 -0
  272. package/dist/shared/types/events.d.ts +15 -7
  273. package/dist/shared/types/model.d.ts +109 -159
  274. package/dist/shared/types/style.d.ts +1 -1
  275. package/dist/shared/utils/color.d.ts +2 -36
  276. package/dist/shared/utils/color.js +13 -70
  277. package/dist/shared/utils/coordinates.d.ts +30 -4
  278. package/dist/shared/utils/coordinates.js +56 -10
  279. package/dist/shared/utils/event-emitter.d.ts +1 -262
  280. package/dist/shared/utils/event-emitter.js +4 -3
  281. package/dist/shared/utils/feature-bbox.js +8 -7
  282. package/dist/shared/utils/feature-segments.js +5 -4
  283. package/dist/shared/utils/image.d.ts +0 -4
  284. package/dist/shared/utils/image.js +0 -6
  285. package/dist/shared/utils/name-generator.d.ts +14 -20
  286. package/dist/shared/utils/name-generator.js +20 -3
  287. package/dist/shared/utils/pixel-ratio.d.ts +9 -3
  288. package/dist/shared/utils/pixel-ratio.js +13 -4
  289. package/dist/shared/utils/property.d.ts +7 -50
  290. package/dist/shared/utils/property.js +22 -87
  291. package/dist/snapping/custom-targets.js +21 -4
  292. package/dist/snapping/indicator.js +20 -11
  293. package/dist/snapping/providers/display.d.ts +6 -1
  294. package/dist/snapping/providers/display.js +2 -1
  295. package/dist/snapping/providers/guide.d.ts +3 -43
  296. package/dist/snapping/providers/guide.js +1 -44
  297. package/dist/snapping/providers/intersection.js +1 -1
  298. package/dist/snapping/providers/store.js +3 -3
  299. package/dist/snapping/service.js +18 -7
  300. package/dist/snapping/types.d.ts +9 -35
  301. package/dist/store/draw-store.js +233 -142
  302. package/dist/store/local-visibility.d.ts +11 -6
  303. package/dist/store/local-visibility.js +38 -7
  304. package/dist/store/lock.d.ts +0 -6
  305. package/dist/store/lock.js +0 -6
  306. package/dist/store/memory/change-bus.d.ts +3 -3
  307. package/dist/store/memory/change-bus.js +12 -0
  308. package/dist/store/memory/file-store.d.ts +2 -2
  309. package/dist/store/memory/ui-state.d.ts +1 -51
  310. package/dist/store/memory/ui-state.js +122 -134
  311. package/dist/store/memory.d.ts +1 -8
  312. package/dist/store/memory.js +249 -45
  313. package/dist/store/ordering.d.ts +9 -0
  314. package/dist/store/ordering.js +17 -0
  315. package/dist/store/spatial/spatial-index.d.ts +1 -1
  316. package/dist/store/spatial/spatial-index.js +1 -1
  317. package/dist/store/spatial/store-spatial-index.d.ts +3 -1
  318. package/dist/store/spatial/store-spatial-index.js +9 -3
  319. package/dist/store/store.d.ts +66 -107
  320. package/dist/store/types.d.ts +1 -1
  321. package/dist/store/writable-layer.d.ts +1 -1
  322. package/dist/store/writable-layer.js +2 -2
  323. package/dist/table/builder.d.ts +83 -0
  324. package/dist/table/builder.js +381 -0
  325. package/dist/table/index.d.ts +37 -0
  326. package/dist/table/index.js +5 -0
  327. package/dist/table/packed-rtree.d.ts +1 -0
  328. package/dist/{display → table}/packed-rtree.js +1 -1
  329. package/dist/table/partition.d.ts +1 -0
  330. package/dist/{display → table}/partition.js +3 -3
  331. package/dist/table/prepare.d.ts +44 -0
  332. package/dist/table/prepare.js +136 -0
  333. package/dist/table/table.d.ts +1 -0
  334. package/dist/{display/columnar → table}/table.js +29 -25
  335. package/dist/{display/columnar → table}/types.d.ts +68 -72
  336. package/dist/table/types.js +3 -0
  337. package/dist/view/coordinator.js +4 -3
  338. package/dist/view/feature-companion.d.ts +13 -7
  339. package/dist/view/feature-companion.js +11 -3
  340. package/dist/view/globe-subdivision.js +3 -3
  341. package/dist/view/layer/attach.d.ts +1 -1
  342. package/dist/view/layer/attach.js +1 -1
  343. package/dist/view/layer/custom-layer.js +40 -11
  344. package/dist/view/layer/display-list.js +2 -1
  345. package/dist/view/layer/drape-planner.d.ts +2 -2
  346. package/dist/view/layer/frame-render.d.ts +3 -3
  347. package/dist/view/layer/frame-render.js +7 -2
  348. package/dist/view/layer/frame-state.d.ts +6 -6
  349. package/dist/view/layer/index.d.ts +2 -2
  350. package/dist/view/layer/index.js +1 -1
  351. package/dist/view/layer/render.d.ts +4 -4
  352. package/dist/view/layer/render.js +3 -8
  353. package/dist/view/layer/renderers.d.ts +2 -2
  354. package/dist/view/layer/renderers.js +1 -1
  355. package/dist/view/layer/slot-manager.d.ts +2 -2
  356. package/dist/view/layer/slot-manager.js +4 -4
  357. package/dist/view/layer/slots.d.ts +2 -2
  358. package/dist/view/layer/slots.js +1 -1
  359. package/dist/view/layer/store-retained-bbox.js +3 -2
  360. package/dist/view/layer/store-retained-classify.d.ts +5 -7
  361. package/dist/view/layer/store-retained-classify.js +19 -7
  362. package/dist/view/layer/store-retained-collect.js +8 -7
  363. package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
  364. package/dist/view/layer/store-retained-coord-patch.js +13 -4
  365. package/dist/view/layer/store-retained-immediate.d.ts +3 -3
  366. package/dist/view/layer/store-retained-immediate.js +3 -8
  367. package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
  368. package/dist/view/layer/store-retained.d.ts +2 -2
  369. package/dist/view/layer/store-retained.js +1 -1
  370. package/dist/view/renderers/batch-manager.js +8 -7
  371. package/dist/view/renderers/drawer.js +21 -15
  372. package/dist/view/renderers/image.js +13 -39
  373. package/dist/view/renderers/line/line-types.d.ts +3 -3
  374. package/dist/view/renderers/line/sdf-line.js +3 -1
  375. package/dist/view/renderers/point/billboard-depth.js +1 -1
  376. package/dist/view/renderers/point/point-instance.js +1 -1
  377. package/dist/view/renderers/point/point-shape.js +2 -2
  378. package/dist/view/renderers/point/point-style.js +48 -4
  379. package/dist/view/renderers/polygon/batch.js +1 -2
  380. package/dist/view/renderers/polygon/fill.js +3 -1
  381. package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
  382. package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
  383. package/dist/view/renderers/stroke.js +3 -1
  384. package/dist/view/shaders/helpers.d.ts +2 -42
  385. package/dist/view/shaders/helpers.js +0 -6
  386. package/dist/view/shaders/projection.d.ts +15 -7
  387. package/dist/view/shaders/projection.js +23 -6
  388. package/dist/view/shaders/quad.d.ts +16 -12
  389. package/dist/view/shaders/quad.js +34 -13
  390. package/dist/view/style-rule.d.ts +5 -42
  391. package/dist/view/style-rule.js +20 -44
  392. package/dist/view/terrain/binding.d.ts +1 -0
  393. package/dist/view/terrain/binding.js +29 -0
  394. package/dist/view/terrain/context.d.ts +3 -4
  395. package/dist/view/terrain/context.js +4 -5
  396. package/dist/view/terrain/drape/geometry.js +1 -1
  397. package/dist/view/terrain/drape/pass.d.ts +1 -1
  398. package/dist/view/terrain/drape/pass.js +8 -7
  399. package/dist/view/terrain/polygon.d.ts +9 -5
  400. package/dist/view/terrain/polygon.js +16 -2
  401. package/dist/view/terrain/state.d.ts +1 -1
  402. package/dist/view/terrain/state.js +1 -1
  403. package/dist/view/terrain/tessellation.d.ts +2 -2
  404. package/dist/view/terrain/tessellation.js +1 -1
  405. package/dist/view/ui/auxiliary-handles.d.ts +6 -29
  406. package/dist/view/ui/bounds.js +8 -12
  407. package/dist/view/ui/handle-test.js +2 -2
  408. package/dist/view/ui/handle-thinning.js +17 -17
  409. package/dist/view/ui/handles.js +21 -13
  410. package/dist/view/ui/helper.d.ts +1 -1
  411. package/dist/view/ui/helper.js +1 -1
  412. package/dist/view/ui/index.d.ts +1 -1
  413. package/dist/view/ui/selection-scope.js +4 -2
  414. package/dist/view/ui/selection-ui/bounding-box.js +6 -6
  415. package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
  416. package/dist/view/ui/selection-ui/extension-registry.js +70 -7
  417. package/dist/view/ui/selection-ui/index.d.ts +2 -2
  418. package/dist/view/ui/selection-ui/index.js +1 -1
  419. package/dist/view/ui/selection-ui/renderer.js +15 -38
  420. package/dist/view/ui/selection-ui/types.d.ts +17 -2
  421. package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
  422. package/dist/view/ui/selection-ui-drawer.js +63 -2
  423. package/dist/view/ui/tentative.js +1 -1
  424. package/dist/webgl/index.d.ts +65 -0
  425. package/dist/webgl/index.js +62 -0
  426. package/package.json +20 -9
  427. package/dist/api/api.d.ts +0 -1259
  428. package/dist/api/api.js +0 -86
  429. package/dist/api/context.d.ts +0 -173
  430. package/dist/api/display-api.js +0 -23
  431. package/dist/api/event-api.d.ts +0 -13
  432. package/dist/api/event-api.js +0 -17
  433. package/dist/api/extension-api.d.ts +0 -46
  434. package/dist/api/extension-api.js +0 -85
  435. package/dist/api/feature-api.d.ts +0 -11
  436. package/dist/api/feature-api.js +0 -101
  437. package/dist/api/geometry/apply.d.ts +0 -51
  438. package/dist/api/geometry/boolean.d.ts +0 -28
  439. package/dist/api/geometry/boolean.js +0 -65
  440. package/dist/api/geometry/types.d.ts +0 -31
  441. package/dist/api/geometry-operations.d.ts +0 -162
  442. package/dist/api/geometry-operations.js +0 -94
  443. package/dist/api/group-api.d.ts +0 -10
  444. package/dist/api/group-api.js +0 -78
  445. package/dist/api/import-export/constants.d.ts +0 -29
  446. package/dist/api/import-export/constants.js +0 -40
  447. package/dist/api/import-export/file-name.d.ts +0 -10
  448. package/dist/api/import-export/file-name.js +0 -20
  449. package/dist/api/import-export/geojson-export.d.ts +0 -19
  450. package/dist/api/import-export/image-import.d.ts +0 -12
  451. package/dist/api/import-export/image-import.js +0 -53
  452. package/dist/api/import-export/index.d.ts +0 -9
  453. package/dist/api/import-export/index.js +0 -107
  454. package/dist/api/import-export/native-format.d.ts +0 -15
  455. package/dist/api/import-export/style-validation.d.ts +0 -27
  456. package/dist/api/import-export/style-validation.js +0 -49
  457. package/dist/api/import-export/types.d.ts +0 -26
  458. package/dist/api/index.d.ts +0 -15
  459. package/dist/api/index.js +0 -3
  460. package/dist/api/input-api.d.ts +0 -158
  461. package/dist/api/input-api.js +0 -144
  462. package/dist/api/instance-api.d.ts +0 -38
  463. package/dist/api/instance-api.js +0 -136
  464. package/dist/api/layer-api.d.ts +0 -12
  465. package/dist/api/layer-api.js +0 -62
  466. package/dist/api/selection-api.d.ts +0 -7
  467. package/dist/api/selection-api.js +0 -78
  468. package/dist/api/snapping-api.d.ts +0 -125
  469. package/dist/api/snapping-api.js +0 -50
  470. package/dist/api/topology-api.d.ts +0 -30
  471. package/dist/api/topology-api.js +0 -16
  472. package/dist/api/tracing-api.d.ts +0 -31
  473. package/dist/api/tracing-api.js +0 -16
  474. package/dist/dispatcher/hit-test/index.d.ts +0 -14
  475. package/dist/dispatcher/hit-test/index.js +0 -9
  476. package/dist/dispatcher/index.d.ts +0 -15
  477. package/dist/dispatcher/index.js +0 -3
  478. package/dist/display/columnar/index.d.ts +0 -12
  479. package/dist/display/columnar/index.js +0 -13
  480. package/dist/display/columnar/prepare.d.ts +0 -42
  481. package/dist/display/columnar/prepare.js +0 -116
  482. package/dist/display/index.d.ts +0 -13
  483. package/dist/display/types.js +0 -43
  484. package/dist/maplibre-gl-draw.d.ts +0 -47
  485. package/dist/modes/cursor.js +0 -72
  486. package/dist/modes/index.d.ts +0 -7
  487. package/dist/operations/index.d.ts +0 -9
  488. package/dist/operations/index.js +0 -3
  489. package/dist/plugins/index.d.ts +0 -10
  490. package/dist/plugins/mutation-hooks.d.ts +0 -28
  491. package/dist/plugins/mutation-hooks.js +0 -84
  492. package/dist/plugins/plugin-context.js +0 -367
  493. package/dist/plugins/plugin-manager.d.ts +0 -103
  494. package/dist/plugins/plugin-manager.js +0 -316
  495. package/dist/plugins/plugin.d.ts +0 -529
  496. package/dist/shared/config/index.d.ts +0 -17
  497. package/dist/shared/config/index.js +0 -8
  498. package/dist/shared/utils/index.d.ts +0 -15
  499. package/dist/shared/utils/index.js +0 -24
  500. package/dist/snapping/index.d.ts +0 -14
  501. package/dist/snapping/index.js +0 -4
  502. package/dist/store/change-merger.js +0 -102
  503. package/dist/store/event-bridge.js +0 -161
  504. package/dist/store/index.d.ts +0 -12
  505. package/dist/store/index.js +0 -4
  506. package/dist/view/index.d.ts +0 -47
  507. package/dist/view/index.js +0 -20
  508. /package/dist/api/{geometry/types.js → datasets.js} +0 -0
  509. /package/dist/api/{import-export/types.js → document.js} +0 -0
  510. /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
  511. /package/dist/{display/index.js → api/events.js} +0 -0
  512. /package/dist/{modes/index.js → api/extension/context.js} +0 -0
  513. /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
  514. /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
  515. /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
  516. /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
  517. /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
  518. /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
  519. /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
  520. /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
  521. /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
  522. /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
  523. /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
  524. /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
  525. /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
  526. /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
  527. /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
  528. /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
  529. /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
  530. /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
  531. /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
  532. /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
  533. /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
  534. /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
  535. /package/dist/{display → dataset}/chunk-set.js +0 -0
  536. /package/dist/{display → dataset}/dataset.d.ts +0 -0
  537. /package/dist/{display → dataset}/manager.js +0 -0
  538. /package/dist/{display → dataset}/provider.js +0 -0
  539. /package/dist/{display → dataset}/selection.d.ts +0 -0
  540. /package/dist/{display → dataset}/selection.js +0 -0
@@ -3,13 +3,13 @@
3
3
  */
4
4
  import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
5
5
  import type { VertexRef } from '../../../store/types.js';
6
- import type { ModeContext } from '../../handler.js';
6
+ import type { EngineModeContext } from '../../handler.js';
7
7
  import type { DragStore } from './operation.js';
8
8
  /**
9
9
  * Start a vertex drag, and set the DragState and the followed vertices it draws from. Returns
10
10
  * null when the feature or the vertex is gone
11
11
  */
12
- export declare function startVertexDrag(event: DragNormalizedEvent, featureId: string, vertexRef: VertexRef, context: ModeContext): VertexDrag | null;
12
+ export declare function startVertexDrag(event: DragNormalizedEvent, featureId: string, vertexRef: VertexRef, context: EngineModeContext): VertexDrag | null;
13
13
  /**
14
14
  * Start a midpoint drag: insert a vertex at the midpoint and continue as a move of that
15
15
  * vertex. Returns null when the feature is gone
@@ -2,12 +2,13 @@
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
3
  import { collectSharedVertexMoves } from '../../../operations/shared-vertex.js';
4
4
  import { addVertex, computeVertexMove, startVertexMove } from '../../../operations/vertex.js';
5
+ import { geometryFromCoordinates } from '../../../shared/utils/coordinates.js';
5
6
  import { hasVertexRef } from '../../../shared/utils/vertex-ref.js';
6
7
  import { dragStartLngLat } from './operation.js';
7
8
  /**
8
9
  * Whether the modifier key that temporarily disables shared-vertex following is held down
9
10
  *
10
- * The temporary-disable key is shared with snapping (options.snap.disableKey, 'alt' by default).
11
+ * The temporary-disable key is shared with snapping (`snapping.disableKey` of the options, 'alt' by default).
11
12
  * Holding it down when starting a drag escapes to a solitary move for that one drag only.
12
13
  *
13
14
  * The decision looks only at the normalized modifier keys of the drag start event (core does not
@@ -29,7 +30,9 @@ function applyVertexMove(state, lngLat, store, writes) {
29
30
  if (!feature)
30
31
  return;
31
32
  const newCoords = computeVertexMove(state, lngLat, feature);
32
- writes.write(store, state.featureId, { coordinates: newCoords });
33
+ writes.write(store, state.featureId, {
34
+ geometry: geometryFromCoordinates(feature.type, newCoords),
35
+ });
33
36
  }
34
37
  /**
35
38
  * A vertex move. A midpoint drag continues as a vertex move of the vertex it added, and is
@@ -71,7 +74,9 @@ export class VertexDrag {
71
74
  if (!feature)
72
75
  return;
73
76
  const newCoords = computeVertexMove(this.state, event.lngLat, feature);
74
- writes.write(store, this.state.featureId, { coordinates: newCoords });
77
+ writes.write(store, this.state.featureId, {
78
+ geometry: geometryFromCoordinates(feature.type, newCoords),
79
+ });
75
80
  // Preview update for the features following along through a shared vertex. They are written
76
81
  // one at a time in the same manner as the main one (an intermediate updateFeature).
77
82
  // The commit is the single transaction at the end of the drag.
@@ -91,14 +96,14 @@ export function startVertexDrag(event, featureId, vertexRef, context) {
91
96
  return null;
92
97
  const startLngLat = dragStartLngLat(event);
93
98
  // Check the currently selected vertices
94
- const selectedVertices = store.getSelectedVertices();
99
+ const selectedVertices = store.getVertexSelection();
95
100
  let vertexRefsToMove;
96
101
  if (selectedVertices &&
97
102
  selectedVertices.featureId === featureId &&
98
- hasVertexRef(selectedVertices.vertexIndices, vertexRef)) {
103
+ hasVertexRef(selectedVertices.vertices, vertexRef)) {
99
104
  // If the vertex being dragged is one of the selected vertices, move every selected vertex
100
105
  // (a multiple selection spanning rings and parts can be moved as-is too)
101
- vertexRefsToMove = selectedVertices.vertexIndices;
106
+ vertexRefsToMove = selectedVertices.vertices;
102
107
  }
103
108
  else {
104
109
  // Otherwise move only the vertex being dragged
@@ -127,7 +132,7 @@ export function startVertexDrag(event, featureId, vertexRef, context) {
127
132
  // the selected vertices. They are set back to null when the drag ends (endDrag / reset).
128
133
  store.setFollowedVertices?.(sharedVertexStates.map((followerState) => ({
129
134
  featureId: followerState.featureId,
130
- vertexIndices: followerState.vertexIndices,
135
+ vertices: followerState.vertices,
131
136
  })));
132
137
  // Set the DragState (activeVertex is the vertex the drag started from)
133
138
  store.setDragState({
@@ -149,7 +154,7 @@ export function startMidpointDrag(event, featureId, after, store) {
149
154
  // Add the position of the midpoint as a new vertex
150
155
  const newCoord = [startLngLat.lng, startLngLat.lat];
151
156
  const newCoords = addVertex(feature, after, newCoord);
152
- store.updateFeature(featureId, { coordinates: newCoords });
157
+ store.updateFeature(featureId, { geometry: geometryFromCoordinates(feature.type, newCoords) });
153
158
  // The added vertex is afterIndex + 1 in the same part and same ring
154
159
  const newVertexRef = { ...after, index: after.index + 1 };
155
160
  // Continue as a move operation on the added vertex
@@ -32,18 +32,25 @@ export class SelectModeDragHandler {
32
32
  value: new IntermediateWrites()
33
33
  });
34
34
  /**
35
- * The features announced by drag:start, while drag:end has not been sent for them
35
+ * The features announced by drag.started, while drag.ended has not been sent for them
36
36
  *
37
- * drag:end always follows, with the same IDs, whether the drag is committed or aborted, so a
38
- * plugin that opens a scope on drag:start always closes it.
37
+ * drag.ended always follows, with the same IDs, whether the drag is committed or aborted, so
38
+ * a listener that opens a scope on drag.started always closes it.
39
39
  */
40
- Object.defineProperty(this, "hookedFeatureIds", {
40
+ Object.defineProperty(this, "announcedFeatureIds", {
41
41
  enumerable: true,
42
42
  configurable: true,
43
43
  writable: true,
44
44
  value: null
45
45
  });
46
- Object.defineProperty(this, "hookPluginManager", {
46
+ /** What the announced drag grabbed, and the emitter its end is announced on */
47
+ Object.defineProperty(this, "announcedKind", {
48
+ enumerable: true,
49
+ configurable: true,
50
+ writable: true,
51
+ value: null
52
+ });
53
+ Object.defineProperty(this, "announcer", {
47
54
  enumerable: true,
48
55
  configurable: true,
49
56
  writable: true,
@@ -64,7 +71,7 @@ export class SelectModeDragHandler {
64
71
  * Start a drag operation
65
72
  */
66
73
  startDrag(hitResult, event, context, bbox) {
67
- const { store, pluginManager } = context;
74
+ const { store } = context;
68
75
  this.scope = context.selectionScope;
69
76
  // Selection-independent auxiliary handles (getGlobalHandles) have no feature they sit on,
70
77
  // so they cannot pass the selection-bound gates (existence of a selection / bbox / feature
@@ -111,14 +118,12 @@ export class SelectModeDragHandler {
111
118
  if (!auxiliaryDrag)
112
119
  return;
113
120
  }
114
- // Notify plugins that the drag has started. Auxiliary handles are excluded: core writes no
121
+ // Announce that the drag has started. Auxiliary handles are excluded: core writes no
115
122
  // intermediate updates to the Store and the provider commits through its own transaction, so
116
- // putting them on the editing scope of drag:start / drag:end would
123
+ // putting them on the editing scope of drag.started / drag.ended would
117
124
  // have the record of the commit transaction swallowed by that scope.
118
125
  if (hitResult.type !== 'auxiliary') {
119
- pluginManager?.runHook('drag:start', { featureIds: [...selectedIds] }, { source: 'local' });
120
- this.hookedFeatureIds = [...selectedIds];
121
- this.hookPluginManager = pluginManager ?? null;
126
+ this.announce(hitResult.type, [...selectedIds], context.eventEmitter);
122
127
  }
123
128
  // Disable MapLibre's map dragging
124
129
  context.map.dragPan.disable();
@@ -192,7 +197,7 @@ export class SelectModeDragHandler {
192
197
  * the last move / start event that was forwarded is used)
193
198
  */
194
199
  endDrag(context, event) {
195
- const { store, pluginManager } = context;
200
+ const { store } = context;
196
201
  const wasAuxiliary = this.operation?.type === 'auxiliary';
197
202
  // The drag always ends: whatever the delegate, the commit or a plugin throws, map dragging
198
203
  // is re-enabled and the drag state is cleared, so that the UI never stays stuck in a drag.
@@ -201,13 +206,13 @@ export class SelectModeDragHandler {
201
206
  // nothing to the Store)
202
207
  this.operation?.finish?.(event);
203
208
  // Commit the intermediate updates made during the drag in a single transaction before
204
- // notifying drag:end (plugins see the state after the commit). If no feature was touched,
205
- // do nothing.
209
+ // announcing drag.ended (listeners see the state after the commit). If no feature was
210
+ // touched, do nothing.
206
211
  this.writes.commit(store);
207
- // Notify plugins that the drag has ended (paired with drag:start, with the same IDs even
212
+ // Announce that the drag has ended (paired with drag.started, with the same IDs even
208
213
  // when the selection changed during the drag; auxiliary handles are excluded)
209
214
  if (!wasAuxiliary)
210
- this.endDragHook(pluginManager);
215
+ this.announceEnd(false);
211
216
  }
212
217
  finally {
213
218
  // Re-enable MapLibre's map dragging
@@ -231,19 +236,33 @@ export class SelectModeDragHandler {
231
236
  this.operation = null;
232
237
  this.writes.discard(store);
233
238
  store?.setFollowedVertices?.(null);
234
- // An aborted drag still closes what drag:start opened (after the features are restored)
235
- this.endDragHook(this.hookPluginManager ?? undefined);
239
+ // An aborted drag still closes what drag.started opened (after the features are restored)
240
+ this.announceEnd(true);
236
241
  }
237
242
  /**
238
- * Sends the drag:end that pairs with the drag:start of the current drag, once
243
+ * Sends the drag.ended that pairs with the drag.started of the current drag, once
239
244
  */
240
- endDragHook(pluginManager) {
241
- const featureIds = this.hookedFeatureIds;
242
- this.hookedFeatureIds = null;
243
- this.hookPluginManager = null;
244
- if (!featureIds)
245
+ announceEnd(cancelled) {
246
+ const featureIds = this.announcedFeatureIds;
247
+ const kind = this.announcedKind;
248
+ const announcer = this.announcer;
249
+ this.announcedFeatureIds = null;
250
+ this.announcedKind = null;
251
+ this.announcer = null;
252
+ if (!featureIds || !kind)
245
253
  return;
246
- pluginManager?.runHook('drag:end', { featureIds }, { source: 'local' });
254
+ announcer?.emit('drag.ended', { kind, featureIds: [...featureIds], cancelled });
255
+ }
256
+ /**
257
+ * Announces the start of a drag on the emitter of the instance; its end is announced with
258
+ * the same IDs, committed or cancelled
259
+ */
260
+ announce(type, featureIds, emitter) {
261
+ const kind = type === 'move' ? 'feature' : type === 'vertex' || type === 'midpoint' ? 'vertex' : 'handle';
262
+ this.announcedFeatureIds = [...featureIds];
263
+ this.announcedKind = kind;
264
+ this.announcer = emitter ?? null;
265
+ emitter?.emit('drag.started', { kind, featureIds: [...featureIds] });
247
266
  }
248
267
  /**
249
268
  * Whether a drag operation is active
@@ -59,19 +59,19 @@ export class SelectMode {
59
59
  for (const id of editingIds) {
60
60
  const feature = context.store.getFeature(id);
61
61
  if (feature) {
62
- context.pluginManager?.notifyFeatureCreated(feature.id, feature.type);
62
+ context.plugins?.notifyFeatureCreated(feature.id);
63
63
  }
64
64
  }
65
65
  context.store.endEditing([...editingIds]);
66
66
  }
67
67
  }
68
68
  onStop() {
69
- const { store, map, pluginManager } = __classPrivateFieldGet(this, _SelectMode_context, "f");
70
- pluginManager?.finishPluginInteraction();
69
+ const { store, map, plugins } = __classPrivateFieldGet(this, _SelectMode_context, "f");
70
+ plugins?.finishPluginInteraction();
71
71
  __classPrivateFieldGet(this, _SelectMode_dragHandler, "f").reset(store);
72
72
  if (store.getBoxSelection())
73
73
  store.setBoxSelection(null);
74
- if (store.getSelectedVertices())
74
+ if (store.getVertexSelection())
75
75
  store.setSelectedVertices(null);
76
76
  if (!map.dragPan.isEnabled())
77
77
  map.dragPan.enable();
@@ -102,10 +102,10 @@ export class SelectMode {
102
102
  * @returns true when there was a hit (the event is consumed)
103
103
  */
104
104
  onMouseDown(event) {
105
- const { pluginManager, map, store } = __classPrivateFieldGet(this, _SelectMode_context, "f");
105
+ const { plugins, map, store } = __classPrivateFieldGet(this, _SelectMode_context, "f");
106
106
  // During a plugin interaction: consume clicks inside the container
107
- if (pluginManager?.isPluginInteracting()) {
108
- const container = pluginManager.getPluginInteractionContainer();
107
+ if (plugins?.isPluginInteracting()) {
108
+ const container = plugins.getPluginInteractionContainer();
109
109
  if (container) {
110
110
  const target = event.originalEvent.target;
111
111
  if (container.contains(target))
@@ -194,7 +194,7 @@ export class SelectMode {
194
194
  // Drag
195
195
  // ============================================================================
196
196
  onDragStart(event) {
197
- if (__classPrivateFieldGet(this, _SelectMode_context, "f").pluginManager?.isPluginInteracting())
197
+ if (__classPrivateFieldGet(this, _SelectMode_context, "f").plugins?.isPluginInteracting())
198
198
  return;
199
199
  const { store, map } = __classPrivateFieldGet(this, _SelectMode_context, "f");
200
200
  // Group / layer selections are also resolved to their members (so dragging the selection box
@@ -255,7 +255,7 @@ export class SelectMode {
255
255
  return;
256
256
  const hitFeatureId = top.feature.id;
257
257
  if (!selectedIds.includes(hitFeatureId)) {
258
- const filtered = __classPrivateFieldGet(this, _SelectMode_context, "f").pluginManager?.filterSelectionCandidates([hitFeatureId]) ?? [
258
+ const filtered = __classPrivateFieldGet(this, _SelectMode_context, "f").plugins?.filterSelectionCandidates([hitFeatureId]) ?? [
259
259
  hitFeatureId,
260
260
  ];
261
261
  if (filtered.length === 0)
@@ -268,7 +268,7 @@ export class SelectMode {
268
268
  __classPrivateFieldGet(this, _SelectMode_dragHandler, "f").startDrag(moveHit, event, __classPrivateFieldGet(this, _SelectMode_context, "f"), bbox);
269
269
  }
270
270
  onDragMove(event) {
271
- const { store, map, pluginManager } = __classPrivateFieldGet(this, _SelectMode_context, "f");
271
+ const { store, map, plugins } = __classPrivateFieldGet(this, _SelectMode_context, "f");
272
272
  const boxSelection = store.getBoxSelection();
273
273
  // Update the box selection
274
274
  if (boxSelection) {
@@ -278,7 +278,7 @@ export class SelectMode {
278
278
  store.setBoxSelection(updatedBoxSelection);
279
279
  // Live selection preview (a frame that selects the same features changes nothing)
280
280
  const hitIds = queryFeaturesInBox(updatedBoxSelection, __classPrivateFieldGet(this, _SelectMode_context, "f"));
281
- const filtered = hitIds.length > 0 ? (pluginManager?.filterSelectionCandidates(hitIds) ?? hitIds) : hitIds;
281
+ const filtered = hitIds.length > 0 ? (plugins?.filterSelectionCandidates(hitIds) ?? hitIds) : hitIds;
282
282
  if (!selectsExactly(store.getSelection(), filtered)) {
283
283
  if (filtered.length === 0) {
284
284
  store.setSelection(null, []);
@@ -294,12 +294,12 @@ export class SelectMode {
294
294
  }
295
295
  }
296
296
  onDragEnd(event) {
297
- const { store, map, pluginManager } = __classPrivateFieldGet(this, _SelectMode_context, "f");
297
+ const { store, map, plugins } = __classPrivateFieldGet(this, _SelectMode_context, "f");
298
298
  const boxSelection = store.getBoxSelection();
299
299
  // Commit the box selection
300
300
  if (boxSelection) {
301
301
  const hitIds = queryFeaturesInBox(boxSelection, __classPrivateFieldGet(this, _SelectMode_context, "f"));
302
- const filtered = hitIds.length > 0 ? (pluginManager?.filterSelectionCandidates(hitIds) ?? hitIds) : hitIds;
302
+ const filtered = hitIds.length > 0 ? (plugins?.filterSelectionCandidates(hitIds) ?? hitIds) : hitIds;
303
303
  if (filtered.length === 0) {
304
304
  store.setSelection(null, []);
305
305
  }
@@ -345,11 +345,11 @@ export class SelectMode {
345
345
  // Keyboard / MouseMove
346
346
  // ============================================================================
347
347
  onKeyDown(event) {
348
- const { pluginManager, store } = __classPrivateFieldGet(this, _SelectMode_context, "f");
348
+ const { plugins, store } = __classPrivateFieldGet(this, _SelectMode_context, "f");
349
349
  // Skip destructive key operations during a plugin interaction
350
- if (pluginManager?.isPluginInteracting()) {
350
+ if (plugins?.isPluginInteracting()) {
351
351
  if (event.key === 'Escape') {
352
- pluginManager.cancelPluginInteraction();
352
+ plugins.cancelPluginInteraction();
353
353
  }
354
354
  return;
355
355
  }
@@ -388,7 +388,7 @@ export class SelectMode {
388
388
  }
389
389
  }
390
390
  onMouseMove(event) {
391
- if (__classPrivateFieldGet(this, _SelectMode_dragHandler, "f").isActive() || __classPrivateFieldGet(this, _SelectMode_context, "f").pluginManager?.isPluginInteracting()) {
391
+ if (__classPrivateFieldGet(this, _SelectMode_dragHandler, "f").isActive() || __classPrivateFieldGet(this, _SelectMode_context, "f").plugins?.isPluginInteracting()) {
392
392
  return;
393
393
  }
394
394
  updateCursorForSelection(event, __classPrivateFieldGet(this, _SelectMode_context, "f"), __classPrivateFieldGet(this, _SelectMode_config, "f"));
@@ -1,11 +1,11 @@
1
- import type { ModeContext } from '../handler.js';
1
+ import type { EngineModeContext } from '../handler.js';
2
2
  /**
3
3
  * Handling of the group shortcut (Cmd+G / Ctrl+G).
4
4
  *
5
5
  * The behavior is identical to the API's groupSelection (the key, the menu and the API place the
6
6
  * new group at the same position).
7
7
  */
8
- export declare function handleGroupShortcut(context: ModeContext): void;
8
+ export declare function handleGroupShortcut(context: EngineModeContext): void;
9
9
  /**
10
10
  * Handling of the ungroup shortcut (Shift+Cmd+G / Shift+Ctrl+G).
11
11
  *
@@ -13,12 +13,12 @@ export declare function handleGroupShortcut(context: ModeContext): void;
13
13
  * consistent): a group selection is dissolved, and for a member feature selection only that
14
14
  * member leaves.
15
15
  */
16
- export declare function handleUngroupShortcut(context: ModeContext): void;
16
+ export declare function handleUngroupShortcut(context: EngineModeContext): void;
17
17
  /**
18
- * Handling of the Delete / Backspace key: deletes what is selected, exactly like
19
- * `draw.deleteSelection()` (vertices, features, groups or layers; locked items are kept).
18
+ * Handling of the Delete / Backspace key: deletes what is selected (vertices, features, groups
19
+ * or layers; locked items are kept) with `deleteSelection` of `operations/`.
20
20
  */
21
- export declare function handleDeleteShortcut(context: ModeContext): void;
21
+ export declare function handleDeleteShortcut(context: EngineModeContext): void;
22
22
  /**
23
23
  * Handling of the arrow keys: moves the selected features by a few pixels on the screen
24
24
  *
@@ -28,7 +28,7 @@ export declare function handleDeleteShortcut(context: ModeContext): void;
28
28
  * @returns whether the key was used (a selection was moved); otherwise the key is left to
29
29
  * the map (MapLibre pans with it)
30
30
  */
31
- export declare function handleNudgeShortcut(context: ModeContext, key: string, modifiers: {
31
+ export declare function handleNudgeShortcut(context: EngineModeContext, key: string, modifiers: {
32
32
  shift: boolean;
33
33
  ctrl: boolean;
34
34
  alt: boolean;
@@ -37,4 +37,4 @@ export declare function handleNudgeShortcut(context: ModeContext, key: string, m
37
37
  /**
38
38
  * Handling of the Escape key
39
39
  */
40
- export declare function handleEscapeShortcut(context: ModeContext): void;
40
+ export declare function handleEscapeShortcut(context: EngineModeContext): void;
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { groupSelection, ungroupSelection } from '../../operations/layer-operations.js';
9
9
  import { deleteSelection } from '../../operations/selection-operations.js';
10
- import { mapCoordinatesDeep } from '../../shared/utils/coordinates.js';
10
+ import { coordinatesOf, geometryFromCoordinates, mapCoordinatesDeep, } from '../../shared/utils/coordinates.js';
11
11
  import { isInteractionBlocked } from '../../store/lock.js';
12
12
  import { getSelectedFeatureIds } from '../../view/ui/helper.js';
13
13
  /** The distance an arrow key moves the selection (pixels; with Shift, NUDGE_LARGE) */
@@ -46,8 +46,8 @@ export function handleUngroupShortcut(context) {
46
46
  ungroupSelection(store);
47
47
  }
48
48
  /**
49
- * Handling of the Delete / Backspace key: deletes what is selected, exactly like
50
- * `draw.deleteSelection()` (vertices, features, groups or layers; locked items are kept).
49
+ * Handling of the Delete / Backspace key: deletes what is selected (vertices, features, groups
50
+ * or layers; locked items are kept) with `deleteSelection` of `operations/`.
51
51
  */
52
52
  export function handleDeleteShortcut(context) {
53
53
  deleteSelection(context.store);
@@ -75,7 +75,7 @@ export function handleNudgeShortcut(context, key, modifiers) {
75
75
  return false;
76
76
  // One offset in degrees for every feature, taken at a point of the selection, so the
77
77
  // features keep their relative placement (the same translation as a move drag)
78
- const reference = firstCoordinate(features[0].coordinates);
78
+ const reference = firstCoordinate(coordinatesOf(features[0]));
79
79
  if (!reference)
80
80
  return false;
81
81
  const step = modifiers.shift ? NUDGE_LARGE : NUDGE_SMALL;
@@ -85,8 +85,10 @@ export function handleNudgeShortcut(context, key, modifiers) {
85
85
  const dy = to.lat - reference[1];
86
86
  store.transact(() => {
87
87
  for (const feature of features) {
88
- const coordinates = mapCoordinatesDeep(feature.coordinates, (c) => [c[0] + dx, c[1] + dy]);
89
- store.updateFeature(feature.id, { coordinates });
88
+ const coordinates = mapCoordinatesDeep(coordinatesOf(feature), (c) => [c[0] + dx, c[1] + dy]);
89
+ store.updateFeature(feature.id, {
90
+ geometry: geometryFromCoordinates(feature.type, coordinates),
91
+ });
90
92
  }
91
93
  });
92
94
  return true;
@@ -118,7 +120,7 @@ export function handleEscapeShortcut(context) {
118
120
  return;
119
121
  }
120
122
  // Clear the vertex selection when vertices are selected
121
- const selectedVertices = store.getSelectedVertices();
123
+ const selectedVertices = store.getVertexSelection();
122
124
  if (selectedVertices) {
123
125
  store.setSelectedVertices(null);
124
126
  return;