@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
@@ -1,363 +1,27 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
- import { createdZoomProperty, resolveCommitLayer } from './commit-layer.js';
4
- import { computeTracePath, isTraceEnabled, readTraceAnchor } from './trace-support.js';
5
- /** Tolerance for deciding a vertex click (in pixels) */
6
- const VERTEX_CLICK_TOLERANCE = 10;
3
+ import { createVertexDrawing } from './vertex-drawing.js';
7
4
  /**
8
- * DrawLineMode implementation
5
+ * The factory of the line drawing mode
9
6
  *
10
7
  * @internal
11
8
  */
12
- export class DrawLineMode {
13
- constructor() {
14
- Object.defineProperty(this, "modeName", {
15
- enumerable: true,
16
- configurable: true,
17
- writable: true,
18
- value: 'draw_line'
19
- });
20
- Object.defineProperty(this, "writesFeatures", {
21
- enumerable: true,
22
- configurable: true,
23
- writable: true,
24
- value: true
25
- });
26
- Object.defineProperty(this, "context", {
27
- enumerable: true,
28
- configurable: true,
29
- writable: true,
30
- value: void 0
31
- });
32
- Object.defineProperty(this, "coordinates", {
33
- enumerable: true,
34
- configurable: true,
35
- writable: true,
36
- value: []
37
- });
38
- Object.defineProperty(this, "isNearLastVertex", {
39
- enumerable: true,
40
- configurable: true,
41
- writable: true,
42
- value: false
43
- });
44
- /** The redo stack (holds the undone vertices) */
45
- Object.defineProperty(this, "redoStack", {
46
- enumerable: true,
47
- configurable: true,
48
- writable: true,
49
- value: []
50
- });
51
- /** The last mouse coordinate (for displaying the dashed line on undo/redo) */
52
- Object.defineProperty(this, "lastMouseCoord", {
53
- enumerable: true,
54
- configurable: true,
55
- writable: true,
56
- value: null
57
- });
58
- /** The Feature ID that is going to be created */
59
- Object.defineProperty(this, "pendingFeatureId", {
60
- enumerable: true,
61
- configurable: true,
62
- writable: true,
63
- value: null
64
- });
65
- /**
66
- * The snap target of the previously confirmed click (the start point of the trace)
67
- *
68
- * It is reset to null for a click that did not snap and for a snap that cannot be traced.
69
- */
70
- Object.defineProperty(this, "traceAnchor", {
71
- enumerable: true,
72
- configurable: true,
73
- writable: true,
74
- value: null
75
- });
76
- /**
77
- * The trace path up to the cursor position (the unconfirmed vertices for the preview)
78
- *
79
- * They are inserted between the confirmed coordinates and the cursor point and drawn as
80
- * tentative.
81
- */
82
- Object.defineProperty(this, "tracePreview", {
83
- enumerable: true,
84
- configurable: true,
85
- writable: true,
86
- value: null
87
- });
88
- }
89
- onStart(context) {
90
- this.context = context;
91
- // Change the cursor to a crosshair
92
- this.context.map.getCanvas().style.cursor = 'crosshair';
93
- // Clear the selection (not notified as a change)
94
- this.context.store.transact(() => {
95
- this.context.store.setSelection(null, []);
96
- }, 'silent');
97
- // Reset the state
98
- this.coordinates = [];
99
- this.isNearLastVertex = false;
100
- this.redoStack = [];
101
- this.lastMouseCoord = null;
102
- this.traceAnchor = null;
103
- this.tracePreview = null;
104
- // Generate the Feature ID in advance
105
- this.pendingFeatureId = this.context.generateFeatureId();
106
- }
107
- onStop() {
108
- // Restore the cursor
109
- this.context.map.getCanvas().style.cursor = '';
110
- // Clear the tentative state
111
- this.context.store.setTentative(null);
112
- this.coordinates = [];
113
- }
114
- /**
115
- * Called after an external state change
116
- *
117
- * Resets the state of the drawing in progress so that the next drawing operation can start
118
- * normally.
119
- */
120
- onExternalStateChange() {
121
- // Reset the state
122
- this.coordinates = [];
123
- this.redoStack = [];
124
- this.lastMouseCoord = null;
125
- this.pendingFeatureId = null;
126
- this.isNearLastVertex = false;
127
- this.traceAnchor = null;
128
- this.tracePreview = null;
129
- // Clear the tentative state
130
- this.context.store.setTentative(null);
131
- }
132
- /**
133
- * A double click while drawing is two clicks of the drawing; it never zooms the map
134
- * (consumed by preventing its default action)
135
- */
136
- onDoubleClick(event) {
137
- event.originalEvent.preventDefault();
138
- }
139
- onClick(event) {
140
- // Complete when there are at least two points and the click is near the last vertex
141
- if (this.coordinates.length >= 2 && this.isNearLastVertex) {
142
- this.finishLine();
143
- return;
144
- }
145
- // Read the snap target of this click and first take in the sequence of boundary vertices
146
- // between it and the previously confirmed click (tracing)
147
- const anchor = readTraceAnchor(this.context, event);
148
- const path = computeTracePath(this.context, this.traceAnchor, anchor);
149
- if (path) {
150
- this.coordinates.push(...path);
151
- }
152
- this.traceAnchor = anchor;
153
- this.tracePreview = null;
154
- // Add the vertex
155
- const coord = [event.lngLat.lng, event.lngLat.lat];
156
- this.coordinates.push(coord);
157
- // Clear the redo stack when a new vertex is added
158
- this.redoStack = [];
159
- // Update the tentative state
160
- // Note: the redraw is triggered automatically by RenderCoordinator subscribing to Store changes
161
- this.updateTentative();
162
- }
163
- onMouseMove(event) {
164
- // Save the last mouse coordinate (for displaying the dashed line on undo/redo)
165
- this.lastMouseCoord = [event.lngLat.lng, event.lngLat.lat];
166
- // Check whether it is near the last vertex
167
- this.isNearLastVertex = this.checkNearLastVertex(event.point);
168
- // When the snap target of the cursor is the same feature as the previously confirmed
169
- // click, hold the path that is going to be inserted as a preview
170
- this.tracePreview = computeTracePath(this.context, this.traceAnchor, readTraceAnchor(this.context, event));
171
- // Update the cursor
172
- if (this.coordinates.length >= 2 && this.isNearLastVertex) {
173
- this.context.map.getCanvas().style.cursor = 'pointer';
174
- }
175
- else {
176
- this.context.map.getCanvas().style.cursor = 'crosshair';
177
- }
178
- // When there is at least one vertex, display the line up to the mouse position
179
- if (this.coordinates.length > 0) {
180
- this.updateTentative(this.lastMouseCoord);
181
- }
182
- }
183
- onKeyDown(event) {
184
- if (event.key === 'Escape') {
185
- // Cancel
186
- this.cancelLine();
187
- }
188
- else if (event.key === 'Enter') {
189
- // Confirm
190
- this.finishLine();
191
- }
192
- else if (event.key === 'Backspace' || event.key === 'Delete') {
193
- // Remove the last vertex
194
- this.removeLastVertex();
195
- }
196
- }
197
- /**
198
- * The feature to prefer when snapping candidates are tied (the boundary that tracing started
199
- * along)
200
- */
201
- getSnapPreference() {
202
- if (!this.traceAnchor || !isTraceEnabled(this.context))
203
- return null;
9
+ export const drawLineMode = (ctx) => createVertexDrawing(ctx, {
10
+ minVertices: 2,
11
+ // The last vertex finishes the line
12
+ closingVertex: (vertices) => vertices.length - 1,
13
+ preview(vertices, pointer, closable) {
14
+ const coordinates = pointer ? [...vertices, ...pointer] : [...vertices];
204
15
  return {
205
- featureId: this.traceAnchor.featureId,
206
- datasetId: this.traceAnchor.datasetId,
207
- };
208
- }
209
- /**
210
- * Checks whether it is near the last vertex
211
- */
212
- checkNearLastVertex(screenPoint) {
213
- if (this.coordinates.length === 0)
214
- return false;
215
- const lastCoord = this.coordinates[this.coordinates.length - 1];
216
- const lastScreenPoint = this.context.map.project(lastCoord);
217
- const dx = screenPoint.x - lastScreenPoint.x;
218
- const dy = screenPoint.y - lastScreenPoint.y;
219
- const distance = Math.sqrt(dx * dx + dy * dy);
220
- return distance <= VERTEX_CLICK_TOLERANCE;
221
- }
222
- /**
223
- * Confirms the line
224
- */
225
- finishLine() {
226
- // At least two points are required
227
- if (this.coordinates.length < 2) {
228
- return;
229
- }
230
- const { store, autoNameGenerator } = this.context;
231
- // Discard the drawing when no layer can be written any more
232
- const layerId = resolveCommitLayer(this.context);
233
- if (layerId === null)
234
- return;
235
- // Generate the automatic name
236
- const autoName = autoNameGenerator.generateName('LineString');
237
- // Use the ID generated in advance (generate a new one if there is none)
238
- const featureId = this.pendingFeatureId ?? this.context.generateFeatureId();
239
- // Create a new line feature
240
- const feature = {
241
- id: featureId,
242
- type: 'LineString',
243
- coordinates: [...this.coordinates],
244
- layerId,
245
- properties: {
246
- ...createdZoomProperty(this.context),
247
- ...(autoName !== undefined && { name: autoName }),
16
+ feature: { type: 'LineString', geometry: { type: 'LineString', coordinates } },
17
+ options: {
18
+ confirmedVertices: vertices.length,
19
+ ...(closable && { highlightVertex: vertices.length - 1 }),
248
20
  },
249
- locked: false,
250
- visible: true,
251
21
  };
252
- // Bundle the feature creation and the selection into a single transaction
253
- // (so that both are undone at once on undo)
254
- store.transact(() => {
255
- store.createFeature(feature);
256
- // Clear the tentative state
257
- store.setTentative(null);
258
- // Select the created feature
259
- store.setSelection('feature', [feature.id]);
260
- });
261
- // Reset the state
262
- this.coordinates = [];
263
- this.isNearLastVertex = false;
264
- this.pendingFeatureId = null;
265
- this.traceAnchor = null;
266
- this.tracePreview = null;
267
- // Return to the select mode
268
- this.context.setMode('select');
269
- }
270
- /**
271
- * Cancels the creation of the line
272
- */
273
- cancelLine() {
274
- if (this.coordinates.length > 0) {
275
- this.coordinates = [];
276
- this.pendingFeatureId = null;
277
- this.traceAnchor = null;
278
- this.tracePreview = null;
279
- this.context.store.setTentative(null);
280
- }
281
- else {
282
- // Return to the select mode if drawing is not in progress
283
- this.context.setMode('select');
284
- }
285
- }
286
- /**
287
- * Removes the last vertex
288
- */
289
- removeLastVertex() {
290
- if (this.coordinates.length > 0) {
291
- this.coordinates.pop();
292
- // A vertex removed with Backspace/Delete cannot be redone
293
- this.redoStack = [];
294
- // The previously confirmed click changes, so the start point of the trace is discarded too
295
- this.clearTrace();
296
- this.updateTentative();
297
- }
298
- }
299
- /**
300
- * Undoes a vertex while drawing
301
- */
302
- undoVertex() {
303
- if (this.coordinates.length === 0) {
304
- return false;
305
- }
306
- const removed = this.coordinates.pop();
307
- this.redoStack.push(removed);
308
- this.clearTrace();
309
- // Pass the mouse coordinate to keep the dashed line
310
- this.updateTentative(this.lastMouseCoord ?? undefined);
311
- return true;
312
- }
313
- /**
314
- * Redoes a vertex that was undone
315
- */
316
- redoVertex() {
317
- if (this.redoStack.length === 0) {
318
- return false;
319
- }
320
- const restored = this.redoStack.pop();
321
- this.coordinates.push(restored);
322
- this.clearTrace();
323
- // Pass the mouse coordinate to keep the dashed line
324
- this.updateTentative(this.lastMouseCoord ?? undefined);
325
- return true;
326
- }
327
- /**
328
- * Discards the state of the trace
329
- *
330
- * On an undo / redo of a vertex the "previously confirmed click" changes, so the snap target
331
- * that was held as the start point is not kept in use as it is.
332
- */
333
- clearTrace() {
334
- this.traceAnchor = null;
335
- this.tracePreview = null;
336
- }
337
- /**
338
- * Updates the tentative state
339
- */
340
- updateTentative(mouseCoord) {
341
- if (this.coordinates.length === 0) {
342
- this.context.store.setTentative(null);
343
- return;
344
- }
345
- // The coordinate array including the mouse position and the trace path up to it
346
- // (the confirmed ones remain the leading coordinates.length entries)
347
- const coords = mouseCoord
348
- ? [...this.coordinates, ...(this.tracePreview ?? []), mouseCoord]
349
- : [...this.coordinates];
350
- // Highlight it when the cursor is near the last vertex
351
- const highlightedVertexIndex = this.coordinates.length >= 2 && this.isNearLastVertex
352
- ? this.coordinates.length - 1
353
- : undefined;
354
- this.context.store.setTentative({
355
- type: 'LineString',
356
- coordinates: coords,
357
- layerId: this.context.getCurrentLayerId(),
358
- confirmedCount: this.coordinates.length, // The number of confirmed coordinates
359
- highlightedVertexIndex,
360
- pendingFeatureId: this.pendingFeatureId ?? undefined,
361
- });
362
- }
363
- }
22
+ },
23
+ feature: (vertices) => ({
24
+ type: 'LineString',
25
+ geometry: { type: 'LineString', coordinates: [...vertices] },
26
+ }),
27
+ });
@@ -1,87 +1,38 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
- import { createdZoomProperty, resolveCommitLayer } from './commit-layer.js';
4
3
  /**
5
- * DrawPointMode implementation
4
+ * The factory of the point drawing mode
6
5
  *
7
6
  * @internal
8
7
  */
9
- export class DrawPointMode {
10
- constructor() {
11
- Object.defineProperty(this, "modeName", {
12
- enumerable: true,
13
- configurable: true,
14
- writable: true,
15
- value: 'draw_point'
16
- });
17
- Object.defineProperty(this, "writesFeatures", {
18
- enumerable: true,
19
- configurable: true,
20
- writable: true,
21
- value: true
22
- });
23
- Object.defineProperty(this, "context", {
24
- enumerable: true,
25
- configurable: true,
26
- writable: true,
27
- value: void 0
28
- });
29
- }
30
- onStart(context) {
31
- this.context = context;
32
- // Change the cursor to a crosshair
33
- this.context.map.getCanvas().style.cursor = 'crosshair';
34
- // Clear the selection (not notified as a change)
35
- this.context.store.transact(() => {
36
- this.context.store.setSelection(null, []);
37
- }, 'silent');
38
- }
39
- onStop() {
40
- // Restore the cursor
41
- this.context.map.getCanvas().style.cursor = '';
42
- }
43
- /**
44
- * A double click while drawing is two clicks of the drawing; it never zooms the map
45
- * (consumed by preventing its default action)
46
- */
47
- onDoubleClick(event) {
48
- event.originalEvent.preventDefault();
49
- }
8
+ export const drawPointMode = (ctx) => ({
9
+ writes: true,
10
+ onEnter() {
11
+ ctx.cursor.set('crosshair');
12
+ // Entering a drawing mode clears the selection, as a change nobody records
13
+ ctx.draw.transact(() => ctx.draw.selection.clear(), { source: 'silent' });
14
+ },
15
+ onExit() {
16
+ ctx.cursor.reset();
17
+ },
18
+ // A double click while drawing is two clicks of the drawing; it never zooms the map
19
+ onDoubleClick: () => true,
50
20
  onClick(event) {
51
- const { store, generateFeatureId, autoNameGenerator } = this.context;
52
- // Discard the drawing when no layer can be written any more
53
- const layerId = resolveCommitLayer(this.context);
54
- if (layerId === null)
55
- return;
56
- // Generate the automatic name
57
- const autoName = autoNameGenerator.generateName('Point');
58
- // Create a new point feature
59
- const feature = {
60
- id: generateFeatureId(),
61
- type: 'Point',
62
- coordinates: [event.lngLat.lng, event.lngLat.lat],
63
- layerId,
64
- properties: {
65
- ...createdZoomProperty(this.context),
66
- ...(autoName !== undefined && { name: autoName }),
67
- },
68
- locked: false,
69
- visible: true,
70
- };
71
- // Create the feature (notified as a change)
72
- store.transact(() => {
73
- store.createFeature(feature);
74
- // Select the created feature
75
- store.setSelection('feature', [feature.id]);
21
+ ctx.draw.transact(() => {
22
+ const feature = ctx.commitFeature({
23
+ type: 'Point',
24
+ geometry: { type: 'Point', coordinates: event.snapped.lngLat },
25
+ });
26
+ if (feature)
27
+ ctx.draw.selection.set('feature', [feature.id]);
76
28
  });
77
- // Transition to the select mode
78
- // Note: the redraw is triggered automatically by RenderCoordinator subscribing to Store changes
79
- this.context.setMode('select');
80
- }
29
+ ctx.setMode('select');
30
+ return true;
31
+ },
81
32
  onKeyDown(event) {
82
- // Escape returns to the select mode
83
- if (event.key === 'Escape') {
84
- this.context.setMode('select');
85
- }
86
- }
87
- }
33
+ if (event.key !== 'Escape')
34
+ return false;
35
+ ctx.setMode('select');
36
+ return true;
37
+ },
38
+ });