@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
@@ -0,0 +1,135 @@
1
+ /**
2
+ * `Draw`: the draw instance, its resources and the members that belong to no resource
3
+ */
4
+ import type { Map as MaplibreMap } from 'maplibre-gl';
5
+ import type { DatasetsCollection } from './datasets.js';
6
+ import type { DocumentResource } from './document.js';
7
+ import type { DrawingResource } from './drawing.js';
8
+ import type { DrawEvents } from './events.js';
9
+ import type { StoreView, UpdateSource } from './extension/store.js';
10
+ import type { ExtensionsCollections } from './extensions.js';
11
+ import type { FeaturesCollection } from './features.js';
12
+ import type { GroupsCollection } from './groups.js';
13
+ import type { HiddenCollection } from './hidden.js';
14
+ import type { LayersCollection } from './layers.js';
15
+ import type { MetadataResource } from './metadata.js';
16
+ import type { DrawOptions, OptionsResource } from './options.js';
17
+ import type { SelectionResource, VertexSelectionResource } from './selection.js';
18
+ import type { LayerStackEntry, Mode, TerrainDiagnostics } from './state.js';
19
+ /** The options of {@link Draw.transact} */
20
+ export interface TransactOptions {
21
+ /** Where the writes come from; `'local'` when left out */
22
+ source?: UpdateSource;
23
+ /**
24
+ * Whether the writes ignore the locks of the features, groups and layers; read-only still
25
+ * refuses them. False when left out.
26
+ */
27
+ ignoreLocks?: boolean;
28
+ }
29
+ /**
30
+ * A draw instance on a map: the collections and resources of the document and of this
31
+ * client, and the members that belong to no resource.
32
+ */
33
+ export interface Draw {
34
+ /** The features of the document */
35
+ readonly features: FeaturesCollection;
36
+ /** The layers of the document */
37
+ readonly layers: LayersCollection;
38
+ /** The groups of the document */
39
+ readonly groups: GroupsCollection;
40
+ /** The large data that is drawn but not edited, outside the document */
41
+ readonly datasets: DatasetsCollection;
42
+ /** What this client hides without changing the document */
43
+ readonly hidden: HiddenCollection;
44
+ /** What this client has selected */
45
+ readonly selection: SelectionResource;
46
+ /** The selected vertices of one feature in this client */
47
+ readonly vertexSelection: VertexSelectionResource;
48
+ /** The shape the current drawing mode is drawing, to drive it from code */
49
+ readonly drawing: DrawingResource;
50
+ /** The title and the description of the document */
51
+ readonly metadata: MetadataResource;
52
+ /** The options that can change while the instance runs */
53
+ readonly options: OptionsResource;
54
+ /** The whole document, to load and to write out */
55
+ readonly document: DocumentResource;
56
+ /** The plugins, modes, feature types, overlays and providers */
57
+ readonly extensions: ExtensionsCollections;
58
+ /** The map the instance draws on. */
59
+ getMap(): MaplibreMap;
60
+ /** The Store, to read the document and the state and to subscribe to their changes. */
61
+ getStore(): StoreView;
62
+ /** The current mode. */
63
+ getMode(): Mode;
64
+ /**
65
+ * Changes the mode.
66
+ *
67
+ * @returns False when the mode cannot be entered now
68
+ * @throws `DrawError` with the code `not-found` when there is no mode with this name
69
+ */
70
+ setMode(mode: Mode): boolean;
71
+ /** Whether the document is read-only. */
72
+ isReadOnly(): boolean;
73
+ /** Turns read-only on or off. */
74
+ setReadOnly(value: boolean): void;
75
+ /** Whether the interaction lock is on. */
76
+ isInteractionLocked(): boolean;
77
+ /** Turns the interaction lock on or off. */
78
+ setInteractionLocked(value: boolean): void;
79
+ /**
80
+ * Runs `fn` as one transaction: its writes arrive as one `document.changed`.
81
+ *
82
+ * In nested calls the source of the outermost call wins. With `ignoreLocks`, the writes of
83
+ * `fn` through the resources of this instance ignore the locks of the features, groups and
84
+ * layers, as a change applied again from a record needs; read-only still refuses them, and
85
+ * what the user does with the pointer and the keys still respects the locks. A nested call
86
+ * inside such a call ignores them as well.
87
+ *
88
+ * @param options - `source` names where the writes come from; `ignoreLocks` lets them
89
+ * change locked features, groups and layers
90
+ * @returns What `fn` returns
91
+ */
92
+ transact<T>(fn: () => T, options?: TransactOptions): T;
93
+ /**
94
+ * Subscribes to an event.
95
+ *
96
+ * @returns The function that unsubscribes
97
+ */
98
+ on<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): () => void;
99
+ /** Unsubscribes from an event. */
100
+ off<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): void;
101
+ /**
102
+ * Subscribes to the next occurrence of an event only.
103
+ *
104
+ * @returns The function that unsubscribes before it occurs
105
+ */
106
+ once<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): () => void;
107
+ /** Whether some drawing work has not finished yet. */
108
+ hasPendingWork(): boolean;
109
+ /** The divisions of the stacking order, one per run of layers. */
110
+ getLayerStack(): readonly LayerStackEntry[];
111
+ /** Diagnostics; their fields follow the drawing and carry a weaker promise. */
112
+ readonly debug: {
113
+ /** The state the terrain was drawn with. */
114
+ terrain(): TerrainDiagnostics;
115
+ };
116
+ /**
117
+ * Removes the instance from the map and releases everything it holds. A second call does
118
+ * nothing; every other method of the instance and of its collections then throws `DrawError`
119
+ * with the code `invalid-state` (`document.load` rejects with it).
120
+ */
121
+ destroy(): void;
122
+ }
123
+ /**
124
+ * Puts a draw instance on a map and returns it.
125
+ *
126
+ * It can be called before, while or after the map loads. The layers are added as soon as the
127
+ * style accepts them, and added again after `setStyle`. Unless `initDefaultLayer: false` is
128
+ * given, the document starts with one empty layer. Several instances can share a page, each on
129
+ * its own map.
130
+ *
131
+ * @param map - The map to draw on
132
+ * @param options - The options; every one can be omitted
133
+ * @returns The draw instance
134
+ */
135
+ export declare function createDraw(map: MaplibreMap, options?: DrawOptions): Draw;
@@ -0,0 +1,18 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { createDraw as createDrawInstance } from './impl/create-draw.js';
4
+ /**
5
+ * Puts a draw instance on a map and returns it.
6
+ *
7
+ * It can be called before, while or after the map loads. The layers are added as soon as the
8
+ * style accepts them, and added again after `setStyle`. Unless `initDefaultLayer: false` is
9
+ * given, the document starts with one empty layer. Several instances can share a page, each on
10
+ * its own map.
11
+ *
12
+ * @param map - The map to draw on
13
+ * @param options - The options; every one can be omitted
14
+ * @returns The draw instance
15
+ */
16
+ export function createDraw(map, options) {
17
+ return createDrawInstance(map, options);
18
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * `draw.drawing`: the shape the current drawing mode is drawing, driven from outside the
3
+ * pointer and the keys
4
+ */
5
+ import type { Position } from 'geojson';
6
+ /**
7
+ * The shape the current drawing mode is drawing, driven from code: to draw from typed
8
+ * coordinates, from another input device, or in an automated run.
9
+ *
10
+ * `addVertex`, `moveTo` and `finish` act as the input they stand for would: they are made into
11
+ * the same pointer and key events the map gives, at the point of the screen the position
12
+ * projects to, and go the same way as that input, through the `input` receivers of the plugins
13
+ * first and then to the mode. The position is used as it is: nothing snaps it, and the event
14
+ * carries it as its snapped position. A mode that ignores clicks, or a plugin that consumes
15
+ * them, ignores or consumes these as well.
16
+ *
17
+ * Extensions reach the same object as `ctx.drawing`.
18
+ */
19
+ export interface DrawingResource {
20
+ /**
21
+ * Whether a drawing mode is drawing: a shape is in progress, or the mode is ready to place its
22
+ * first vertex (the current mode writes features).
23
+ */
24
+ isActive(): boolean;
25
+ /**
26
+ * Whether a shape is in progress: the mode shows a shape that is not created yet. False
27
+ * while a drawing mode waits for its first vertex.
28
+ */
29
+ isDrawing(): boolean;
30
+ /**
31
+ * Places a vertex at a position, as a click there would: the pointer moves there, then
32
+ * clicks. It does not snap. What the click does is up to the mode: the point mode creates the
33
+ * point, and a click on the closing vertex of a line or an area finishes it. The position is
34
+ * exact, so the click tolerance of the pointer (10 px) does not apply: a vertex a few pixels
35
+ * from the last one is placed, and one near the closing vertex does not finish the shape.
36
+ * Only a position exactly equal to the closing vertex (the last vertex of a line, the first
37
+ * of an area) finishes it, and one exactly equal to the last vertex of an area is not placed
38
+ * again.
39
+ *
40
+ * @param position - The position, as `[longitude, latitude]` in degrees
41
+ * @returns True when the mode (or a plugin) took the click; false when no drawing mode is
42
+ * active or nothing took it
43
+ * @throws `DrawError` with the code `invalid-input` when the position is not two finite
44
+ * numbers
45
+ */
46
+ addVertex(position: Position): boolean;
47
+ /**
48
+ * Moves the pointer to a position, as a pointer move there would: the preview of the shape
49
+ * follows it. It does not snap, and, as with `addVertex`, the position is exact. It does
50
+ * nothing when no drawing mode is active.
51
+ *
52
+ * @param position - The position, as `[longitude, latitude]` in degrees
53
+ * @throws `DrawError` with the code `invalid-input` when the position is not two finite
54
+ * numbers
55
+ */
56
+ moveTo(position: Position): void;
57
+ /**
58
+ * Completes the shape in progress, as a double click on its last vertex or Enter would: the
59
+ * mode creates the feature from the vertices placed so far, as soon as there are enough of
60
+ * them (2 for a line, 3 for an area), wherever the last one is.
61
+ *
62
+ * @returns True when the shape was completed; false when no shape is in progress, or the mode
63
+ * did not complete it (too few vertices)
64
+ */
65
+ finish(): boolean;
66
+ /**
67
+ * Cancels the shape in progress, as an Escape does while drawing: the mode drops it
68
+ * (`ModeHandler.onCancel`), the preview is cleared and the mode stays the current one. When
69
+ * no shape is in progress it does nothing; unlike an Escape, it does not leave the mode.
70
+ *
71
+ * @returns True when a shape was in progress and was cancelled
72
+ */
73
+ cancel(): boolean;
74
+ /**
75
+ * Removes the last vertex of the shape in progress.
76
+ *
77
+ * @returns True when a vertex was removed; false when nothing is being drawn or the mode has
78
+ * no vertex to remove
79
+ */
80
+ undoVertex(): boolean;
81
+ /**
82
+ * Puts back the vertex the last `undoVertex` removed.
83
+ *
84
+ * @returns True when a vertex was put back
85
+ */
86
+ redoVertex(): boolean;
87
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * The error thrown for a wrong argument
3
+ *
4
+ * A method throws it when an argument is wrong (an ID that does not exist, an input of the
5
+ * wrong shape) and changes nothing. A refusal because of the state (read-only, a lock) is not
6
+ * an error: the method returns `null` or `false` instead.
7
+ */
8
+ /**
9
+ * Why a {@link DrawError} was thrown.
10
+ *
11
+ * - `not-found`: an ID that does not exist
12
+ * - `already-exists`: an ID that is already taken
13
+ * - `invalid-input`: an input of the wrong shape or value
14
+ * - `unsupported-format`: a source that cannot be read
15
+ * - `invalid-state`: a call that is not possible in the current situation, such as deleting
16
+ * a feature while it is being drawn, or any call on an instance that was destroyed
17
+ */
18
+ export type DrawErrorCode = 'not-found' | 'already-exists' | 'invalid-input' | 'unsupported-format' | 'invalid-state';
19
+ /**
20
+ * The error a method throws when an argument is wrong; the method has changed nothing.
21
+ */
22
+ export declare class DrawError extends Error {
23
+ /** Why it was thrown */
24
+ readonly code: DrawErrorCode;
25
+ /** More about the cause, such as the ID that was not found */
26
+ readonly details?: unknown;
27
+ /**
28
+ * Creates the error
29
+ *
30
+ * @param code - Why it is thrown
31
+ * @param message - A description in English, for logs
32
+ * @param details - More about the cause
33
+ */
34
+ constructor(code: DrawErrorCode, message: string, details?: unknown);
35
+ }
@@ -0,0 +1,35 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * The error a method throws when an argument is wrong; the method has changed nothing.
5
+ */
6
+ export class DrawError extends Error {
7
+ /**
8
+ * Creates the error
9
+ *
10
+ * @param code - Why it is thrown
11
+ * @param message - A description in English, for logs
12
+ * @param details - More about the cause
13
+ */
14
+ constructor(code, message, details) {
15
+ super(message);
16
+ /** Why it was thrown */
17
+ Object.defineProperty(this, "code", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: void 0
22
+ });
23
+ /** More about the cause, such as the ID that was not found */
24
+ Object.defineProperty(this, "details", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: void 0
29
+ });
30
+ this.name = 'DrawError';
31
+ this.code = code;
32
+ if (details !== undefined)
33
+ this.details = details;
34
+ }
35
+ }
@@ -0,0 +1,306 @@
1
+ /**
2
+ * The events: one list, `DrawEvents`, that applications and extensions subscribe to alike
3
+ *
4
+ * An event is named `resource.pastParticiple`. A change of the document carries its source,
5
+ * and `document.changed` arrives once per transaction with every change of it.
6
+ */
7
+ import type { Position } from 'geojson';
8
+ import type { Dataset, DatasetRow } from './datasets.js';
9
+ import type { DrawError } from './errors.js';
10
+ import type { Hit } from './extension/provider.js';
11
+ import type { UpdateSource } from './extension/store.js';
12
+ import type { Feature, FeatureInput, FileData, Group, Layer, LoadResult, Metadata, MoveTarget } from './model.js';
13
+ import type { LayerStackEntry, Mode, Selection, SelectionType, SnapResult, VertexSelection } from './state.js';
14
+ /** A point on the screen, as `[x, y]` in CSS pixels. */
15
+ export type ScreenPoint = [number, number];
16
+ /**
17
+ * Everything one transaction changed, as `document.changed` and the subscribers of the Store
18
+ * receive it. It arrives once per transaction, and each category is present only when the
19
+ * transaction changed it.
20
+ *
21
+ * `document.changed` fires only for a transaction that changed the document (features, layers,
22
+ * groups, metadata or files); the selection, the editing and the mode are carried along when
23
+ * the same transaction changed them. A change of the state of this client alone has its own
24
+ * event (`selection.changed`, `mode.changed` and so on).
25
+ */
26
+ export interface DocumentChange {
27
+ /** Where the writes came from */
28
+ source?: UpdateSource;
29
+ /**
30
+ * True when the notification replaces the whole document at once, as a Store given in the
31
+ * `store` option does when it takes a document from elsewhere. The current mode drops what
32
+ * it was drawing then (`ModeHandler.onCancel`), because the shape it holds may refer to
33
+ * what is gone. A Store sets it; the changes that come with it list what was replaced.
34
+ */
35
+ reset?: boolean;
36
+ /** The features created, updated and deleted */
37
+ features?: {
38
+ created?: Feature[];
39
+ updated?: Array<{
40
+ id: string;
41
+ feature: Feature;
42
+ previous: Feature;
43
+ /** True while a drag or a drawing is in progress; a final update always follows */
44
+ isIntermediate?: boolean;
45
+ }>;
46
+ deleted?: Feature[];
47
+ };
48
+ /** The layers created, updated and deleted, and the change of their stacking order */
49
+ layers?: {
50
+ created?: Layer[];
51
+ updated?: Array<{
52
+ id: string;
53
+ layer: Layer;
54
+ previous: Layer;
55
+ }>;
56
+ deleted?: Layer[];
57
+ orderChanged?: {
58
+ order: string[];
59
+ previous: string[];
60
+ };
61
+ };
62
+ /** The groups created, updated and deleted */
63
+ groups?: {
64
+ created?: Group[];
65
+ updated?: Array<{
66
+ id: string;
67
+ group: Group;
68
+ previous: Group;
69
+ }>;
70
+ deleted?: Group[];
71
+ };
72
+ /** The new order of the items of a layer */
73
+ layerReorder?: {
74
+ layerId: string;
75
+ order: string[];
76
+ previous: string[];
77
+ };
78
+ /** The new order of the features of a group */
79
+ groupReorder?: {
80
+ groupId: string;
81
+ featureIds: string[];
82
+ previous: string[];
83
+ };
84
+ /** The new selection and the one before it */
85
+ selection?: {
86
+ type: SelectionType | null;
87
+ ids: string[];
88
+ previousType: SelectionType | null;
89
+ previousIds: string[];
90
+ };
91
+ /** The IDs of the features whose editing started and ended */
92
+ editing?: {
93
+ started?: string[];
94
+ ended?: string[];
95
+ };
96
+ /** The new mode and the one before it */
97
+ mode?: {
98
+ mode: Mode;
99
+ previous: Mode;
100
+ };
101
+ /** The new metadata and the one before it */
102
+ metadata?: {
103
+ metadata: Metadata;
104
+ previous: Metadata;
105
+ };
106
+ /** The embedded files created and deleted */
107
+ files?: {
108
+ created?: FileData[];
109
+ deleted?: FileData[];
110
+ };
111
+ }
112
+ /**
113
+ * The events, by name, with their payloads.
114
+ */
115
+ export interface DrawEvents {
116
+ /** A feature was created */
117
+ 'feature.created': {
118
+ feature: Feature;
119
+ source: string;
120
+ };
121
+ /** A feature changed; `intermediate` is true while a drag is in progress */
122
+ 'feature.updated': {
123
+ feature: Feature;
124
+ previous: Feature;
125
+ source: string;
126
+ intermediate: boolean;
127
+ };
128
+ /** A feature was deleted */
129
+ 'feature.deleted': {
130
+ feature: Feature;
131
+ source: string;
132
+ };
133
+ /** A feature moved between layers or groups */
134
+ 'feature.moved': {
135
+ feature: Feature;
136
+ from: MoveTarget;
137
+ to: MoveTarget;
138
+ source: string;
139
+ };
140
+ /** A layer was created */
141
+ 'layer.created': {
142
+ layer: Layer;
143
+ source: string;
144
+ };
145
+ /** A layer changed */
146
+ 'layer.updated': {
147
+ layer: Layer;
148
+ previous: Layer;
149
+ source: string;
150
+ };
151
+ /** A layer was deleted */
152
+ 'layer.deleted': {
153
+ layer: Layer;
154
+ source: string;
155
+ };
156
+ /** The stacking order of the layers changed */
157
+ 'layer.reordered': {
158
+ order: readonly string[];
159
+ previous: readonly string[];
160
+ source: string;
161
+ };
162
+ /** A group was created */
163
+ 'group.created': {
164
+ group: Group;
165
+ source: string;
166
+ };
167
+ /** A group changed */
168
+ 'group.updated': {
169
+ group: Group;
170
+ previous: Group;
171
+ source: string;
172
+ };
173
+ /** A group was ungrouped */
174
+ 'group.deleted': {
175
+ group: Group;
176
+ source: string;
177
+ };
178
+ /** The title or the description changed */
179
+ 'metadata.updated': {
180
+ metadata: Metadata;
181
+ previous: Metadata;
182
+ source: string;
183
+ };
184
+ /**
185
+ * Every change of one transaction that changed the document (features, layers, groups,
186
+ * metadata or files); it arrives once per such transaction, after the events of the
187
+ * resources. A change of the selection, the mode or another state of this client alone does
188
+ * not fire it.
189
+ */
190
+ 'document.changed': DocumentChange;
191
+ /** A document was loaded */
192
+ 'document.loaded': {
193
+ result: LoadResult;
194
+ source: string;
195
+ };
196
+ /** The selection changed */
197
+ 'selection.changed': {
198
+ selection: Selection;
199
+ previous: Selection;
200
+ };
201
+ /** The vertex selection changed */
202
+ 'vertexSelection.changed': {
203
+ selection: VertexSelection | null;
204
+ previous: VertexSelection | null;
205
+ };
206
+ /** A drag started */
207
+ 'drag.started': {
208
+ kind: 'feature' | 'vertex' | 'handle';
209
+ featureIds: string[];
210
+ };
211
+ /** A drag ended; `cancelled` is true when it was cancelled */
212
+ 'drag.ended': {
213
+ kind: 'feature' | 'vertex' | 'handle';
214
+ featureIds: string[];
215
+ cancelled: boolean;
216
+ };
217
+ /** The mode changed */
218
+ 'mode.changed': {
219
+ mode: Mode;
220
+ previous: Mode;
221
+ };
222
+ /** The items this client hides changed; `ids` is the whole set after the change */
223
+ 'hidden.changed': {
224
+ ids: readonly string[];
225
+ };
226
+ /** Read-only was turned on or off */
227
+ 'readOnly.changed': {
228
+ readOnly: boolean;
229
+ };
230
+ /** The interaction lock was turned on or off */
231
+ 'interactionLock.changed': {
232
+ locked: boolean;
233
+ };
234
+ /** The snapping target changed */
235
+ 'snap.changed': {
236
+ result: SnapResult | null;
237
+ };
238
+ /**
239
+ * The shape being drawn changed, or was cleared (`feature` is `null`). It fires once per
240
+ * change, with no throttling: at each vertex, at each move of the pointer that moves the
241
+ * shape, and when the shape is created, cancelled or left. `feature` has the type, the
242
+ * geometry and the layer of the shape, the ID it will be created with, and the radius of a
243
+ * circle; it is a copy that the drawing does not change afterwards. `confirmedVertices` and
244
+ * `highlightVertex` are the options the shape was shown with (`ModeContext.preview.set`):
245
+ * each is left out when it was not given, and both when the shape is cleared.
246
+ */
247
+ 'preview.changed': {
248
+ feature: FeatureInput | null;
249
+ confirmedVertices?: number;
250
+ highlightVertex?: number;
251
+ };
252
+ /**
253
+ * A click on the map in the select mode, whether it hit something or not. `lngLat` is the
254
+ * position of the pointer before snapping, and `hit` the frontmost thing under it (a feature,
255
+ * a row of a dataset, a companion), or `null` when the click hit nothing
256
+ */
257
+ 'map.clicked': {
258
+ lngLat: Position;
259
+ point: ScreenPoint;
260
+ hit: Hit | null;
261
+ };
262
+ /** A row of a dataset was clicked */
263
+ 'dataset.clicked': {
264
+ datasetId: string;
265
+ rowIndex: number;
266
+ row: DatasetRow;
267
+ lngLat: Position;
268
+ point: ScreenPoint;
269
+ };
270
+ /** A dataset was added */
271
+ 'dataset.added': {
272
+ dataset: Dataset;
273
+ };
274
+ /** A dataset was removed */
275
+ 'dataset.removed': {
276
+ datasetId: string;
277
+ };
278
+ /** The stacking order of the datasets changed */
279
+ 'dataset.reordered': {
280
+ order: readonly string[];
281
+ previous: readonly string[];
282
+ };
283
+ /**
284
+ * The image mode asks for an image to place at a position: the application picks a file
285
+ * and loads it with `document.load(file, { coordinate: lngLat, zoom, layerId })`. `lngLat` is
286
+ * the clicked position when a click led to the mode (a listener of `map.clicked` entered it),
287
+ * and the center of the map when the mode was entered otherwise
288
+ */
289
+ 'image.requested': {
290
+ lngLat: Position;
291
+ zoom: number;
292
+ layerId: string;
293
+ };
294
+ /** The divisions of the stacking order changed */
295
+ 'layerStack.changed': {
296
+ entries: readonly LayerStackEntry[];
297
+ };
298
+ /** Loading or reading an image failed */
299
+ error: {
300
+ error: DrawError;
301
+ source: string;
302
+ featureId?: string;
303
+ };
304
+ }
305
+ /** A function that receives the payload of an event. */
306
+ export type DrawEventListener<K extends keyof DrawEvents = keyof DrawEvents> = (payload: DrawEvents[K]) => void;