@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
@@ -150,5 +150,14 @@ export function mergeFeatureStyleConfig(base, override) {
150
150
  ...override.tentative?.circleRadiusHandle,
151
151
  },
152
152
  },
153
+ ...mergeOptionalPart('circle', base, override),
154
+ ...mergeOptionalPart('image', base, override),
153
155
  };
154
156
  }
157
+ /** An optional part of the configuration: the override over the base, when either has it */
158
+ function mergeOptionalPart(key, base, override) {
159
+ const value = override[key] ?? base[key];
160
+ return value === undefined
161
+ ? {}
162
+ : { [key]: structuredClone(value) };
163
+ }
@@ -43,8 +43,8 @@ export interface BoxSelectionStyleConfig {
43
43
  /**
44
44
  * Rendering settings: the look of the box selection and two switches of the renderer
45
45
  *
46
- * Give the settings to change through the `renderingStyle` option of `createMapLibreGLDraw`;
47
- * the ones left out keep their defaults.
46
+ * The engine reads them from the `rendering` and `selectionStyle` options of `createDraw`,
47
+ * translated to this shape; the ones left out keep their defaults.
48
48
  */
49
49
  export interface RenderingConfig {
50
50
  /**
@@ -85,7 +85,7 @@ export interface RenderingConfig {
85
85
  *
86
86
  * A complete frame is not yet a complete picture: the map's tiles and the DEM arrive
87
87
  * asynchronously. Wait for the map's `idle`, then for
88
- * {@link MapLibreGLDraw.hasPendingWork} to return false, which also covers the work that no
88
+ * `draw.hasPendingWork()` to return false, which also covers the work that no
89
89
  * setting can make synchronous (the responses of a provider, an overlay renderer that
90
90
  * prepares resources over several frames).
91
91
  *
@@ -1,18 +1,3 @@
1
- /**
2
- * How the selection highlight of datasets looks
3
- *
4
- * Two rendering paths read the same values.
5
- *
6
- * - Immediate mode (`highlightFeature` in `display/selection.ts`). Draws points, and the
7
- * polygons and lines that do not go through the analysis drape (dashed outlines and so on)
8
- * - Analysis drape (`view/terrain/drape/renderer.ts`). Draws the selection highlight for the
9
- * band (z > 11) that draws polygons and lines as pixels of the ground surface
10
- *
11
- * Putting separate constants in the two places would make the color or the width change when
12
- * crossing a band. This single file owns the values.
13
- *
14
- * This file imports nothing, so that it depends on neither path.
15
- */
16
1
  /** Base color of the selection highlight (#FF2D55, the same as the selection UI) */
17
2
  export declare const SELECTION_HIGHLIGHT_COLOR = "#FF2D55";
18
3
  /** Opacity of the polygon fill of the selection highlight */
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Two rendering paths read the same values.
7
7
  *
8
- * - Immediate mode (`highlightFeature` in `display/selection.ts`). Draws points, and the
8
+ * - Immediate mode (`highlightFeature` in `dataset/selection.ts`). Draws points, and the
9
9
  * polygons and lines that do not go through the analysis drape (dashed outlines and so on)
10
10
  * - Analysis drape (`view/terrain/drape/renderer.ts`). Draws the selection highlight for the
11
11
  * band (z > 11) that draws polygons and lines as pixels of the ground surface
@@ -13,8 +13,9 @@
13
13
  * Putting separate constants in the two places would make the color or the width change when
14
14
  * crossing a band. This single file owns the values.
15
15
  *
16
- * This file imports nothing, so that it depends on neither path.
16
+ * This file imports only the color parser, so that it depends on neither path.
17
17
  */
18
+ import { toColor } from '../color.js';
18
19
  /** Base color of the selection highlight (#FF2D55, the same as the selection UI) */
19
20
  export const SELECTION_HIGHLIGHT_COLOR = '#FF2D55';
20
21
  /** Opacity of the polygon fill of the selection highlight */
@@ -28,8 +29,4 @@ export const SELECTION_HIGHLIGHT_RING_EXTRA = 3;
28
29
  *
29
30
  * Used to pass it to a shader uniform (the color is a constant, so it is parsed only once).
30
31
  */
31
- export const SELECTION_HIGHLIGHT_RGB = [
32
- Number.parseInt(SELECTION_HIGHLIGHT_COLOR.slice(1, 3), 16) / 255,
33
- Number.parseInt(SELECTION_HIGHLIGHT_COLOR.slice(3, 5), 16) / 255,
34
- Number.parseInt(SELECTION_HIGHLIGHT_COLOR.slice(5, 7), 16) / 255,
35
- ];
32
+ export const SELECTION_HIGHLIGHT_RGB = toColor(SELECTION_HIGHLIGHT_COLOR).slice(0, 3);
@@ -137,8 +137,8 @@ export interface RadiusLineStyle {
137
137
  /**
138
138
  * How the selection UI looks: the box around the selection and its handles
139
139
  *
140
- * Give the parts to change through the `selectionStyle` option of `createMapLibreGLDraw`;
141
- * the parts left out keep their defaults. Sizes and widths are in CSS pixels and stay the
140
+ * The engine reads it from the `selectionStyle` option of `createDraw`, translated to this
141
+ * shape; the parts left out keep their defaults. Sizes and widths are in CSS pixels and stay the
142
142
  * same at every zoom.
143
143
  *
144
144
  * A single selection shows the box with the resize handles at its corners and the rotate
@@ -146,18 +146,6 @@ export interface RadiusLineStyle {
146
146
  * its center marker, radius line and radius handle. A multiple selection shows one box around
147
147
  * every selected feature, with the resize and rotate handles, and a box without handles around
148
148
  * each feature. A locked feature shows the box without handles.
149
- *
150
- * @example
151
- * ```ts
152
- * const draw = createMapLibreGLDraw(map, {
153
- * selectionStyle: {
154
- * boundingBox: {
155
- * stroke: { width: 1, color: [0, 0.4, 1, 1], opacity: 1, lineStyle: 'solid' },
156
- * margin: 6,
157
- * },
158
- * },
159
- * });
160
- * ```
161
149
  */
162
150
  export interface SelectionUIConfig {
163
151
  /**
@@ -213,24 +201,6 @@ export interface SelectionUIConfig {
213
201
  * Default selection UI configuration
214
202
  */
215
203
  export declare const DEFAULT_SELECTION_CONFIG: SelectionUIConfig;
216
- /**
217
- * Style changes on hover
218
- */
219
- export declare const HOVER_STYLE_MODIFIERS: {
220
- /** Enlargement factor for the size */
221
- sizeMultiplier: number;
222
- /** Increase in opacity */
223
- opacityIncrease: number;
224
- };
225
- /**
226
- * Style changes while dragging
227
- */
228
- export declare const DRAGGING_STYLE_MODIFIERS: {
229
- /** Reduction factor for the size */
230
- sizeMultiplier: number;
231
- /** Opacity */
232
- opacity: number;
233
- };
234
204
  /**
235
205
  * Threshold at which handle thinning kicks in
236
206
  *
@@ -127,24 +127,6 @@ export const DEFAULT_SELECTION_CONFIG = {
127
127
  },
128
128
  },
129
129
  };
130
- /**
131
- * Style changes on hover
132
- */
133
- export const HOVER_STYLE_MODIFIERS = {
134
- /** Enlargement factor for the size */
135
- sizeMultiplier: 1.2,
136
- /** Increase in opacity */
137
- opacityIncrease: 0.2,
138
- };
139
- /**
140
- * Style changes while dragging
141
- */
142
- export const DRAGGING_STYLE_MODIFIERS = {
143
- /** Reduction factor for the size */
144
- sizeMultiplier: 0.9,
145
- /** Opacity */
146
- opacity: 0.8,
147
- };
148
130
  /**
149
131
  * Threshold at which handle thinning kicks in
150
132
  *
@@ -8,8 +8,8 @@
8
8
  /**
9
9
  * Settings that keep a boundary shared by adjacent features intact while it is edited
10
10
  *
11
- * Give them through the `topology` option of `createMapLibreGLDraw`, or change them later
12
- * through `draw.topology`. Everything is off by default.
11
+ * The engine reads them from the `topology` option of `createDraw`, which
12
+ * `draw.options.update` changes later. Everything is off by default.
13
13
  */
14
14
  export interface TopologyConfig {
15
15
  /**
@@ -5,15 +5,15 @@
5
5
  * and takes in its vertex sequence (edge tracing). It is enabled by default; when disabled,
6
6
  * drawing behaves exactly as it did before tracing was introduced.
7
7
  *
8
- * The configuration object is shared as the same instance between Context and ModeContext.
9
- * When `draw.tracing.setEnabled()` rewrites this object, the drawing modes run with the new
8
+ * The configuration object is shared as the same instance between the context of the engine
9
+ * and the modes. When `draw.options.update` rewrites this object, the drawing modes run with the new
10
10
  * value from the next click or move onward.
11
11
  */
12
12
  /**
13
13
  * The setting of edge tracing: following the boundary of an existing feature while drawing
14
14
  *
15
- * Give it through the `trace` option of `createMapLibreGLDraw`, or change it later with
16
- * `draw.tracing.setEnabled()`.
15
+ * The engine reads it from the `tracing` option of `createDraw`, which
16
+ * `draw.options.update` changes later.
17
17
  */
18
18
  export interface TraceOptions {
19
19
  /**
@@ -5,7 +5,7 @@
5
5
  * radius handle.
6
6
  */
7
7
  import type { Coordinate } from '../types/model.js';
8
- export { getPointAtAngle } from '../../geometry/index.js';
8
+ export { getPointAtAngle } from '../../geometry/angle.js';
9
9
  /**
10
10
  * Computes the angle between two points (the bearing as seen from the center)
11
11
  *
@@ -3,7 +3,7 @@
3
3
  import { toRadians } from './distance.js';
4
4
  // The actual generation of a coordinate from a bearing lives in the geometry module (single
5
5
  // implementation)
6
- export { getPointAtAngle } from '../../geometry/index.js';
6
+ export { getPointAtAngle } from '../../geometry/angle.js';
7
7
  /**
8
8
  * Computes the angle between two points (the bearing as seen from the center)
9
9
  *
@@ -3,4 +3,4 @@
3
3
  *
4
4
  * Functions for rendering a circle by approximating it with a polygon (64 vertices).
5
5
  */
6
- export { generateCirclePolygon } from '../../geometry/index.js';
6
+ export { generateCirclePolygon } from '../../geometry/circle.js';
@@ -7,4 +7,4 @@
7
7
  */
8
8
  // The actual generation of a geodesic circle lives in the geometry module (single
9
9
  // implementation)
10
- export { generateCirclePolygon } from '../../geometry/index.js';
10
+ export { generateCirclePolygon } from '../../geometry/circle.js';
@@ -1,5 +1,6 @@
1
1
  import type { Coordinate } from '../types/model.js';
2
- export { haversineDistanceMeters, toDegrees, toRadians } from '../../geometry/index.js';
2
+ export { haversineDistanceMeters } from '../../geometry/distance.js';
3
+ export { toDegrees, toRadians } from '../../geometry/units.js';
3
4
  /**
4
5
  * Distance between two points (a simple version that returns a distance in degrees from
5
6
  * coordinates in degrees)
@@ -3,11 +3,12 @@
3
3
  /**
4
4
  * Distance computation utilities
5
5
  */
6
- import { toRadians } from '../../geometry/index.js';
6
+ import { toRadians } from '../../geometry/units.js';
7
7
  import { DEFAULT_TILE_SIZE, EARTH } from './constants.js';
8
8
  // The actual angle conversion and geodesic distance live in the geometry module (single
9
9
  // implementation)
10
- export { haversineDistanceMeters, toDegrees, toRadians } from '../../geometry/index.js';
10
+ export { haversineDistanceMeters } from '../../geometry/distance.js';
11
+ export { toDegrees, toRadians } from '../../geometry/units.js';
11
12
  /**
12
13
  * Distance between two points (a simple version that returns a distance in degrees from
13
14
  * coordinates in degrees)
@@ -14,4 +14,4 @@ export type { OBB } from './obb.js';
14
14
  export { createOBB, distanceToOBB, getOBBAABB, getOBBCorners, pointInOBB } from './obb.js';
15
15
  export { computeRotatedQuadCorners, ecefToWGS84, kmToDegrees, pixelsToDegrees, rotateCoordinateOnSphere, rotateCoordinatesOnSphere, wgs84ToECEF, } from './rotation.js';
16
16
  export type { AnchorProjector, CoordinateTransform, LngLat, MercatorCoord, ScreenPoint, } from './transform.js';
17
- export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
17
+ export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, expandQuad, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
@@ -18,4 +18,4 @@ export { pointInRectangle, rectangleIntersectsCircle, rectangleIntersectsLineStr
18
18
  export { createOBB, distanceToOBB, getOBBAABB, getOBBCorners, pointInOBB } from './obb.js';
19
19
  // Rotation computation
20
20
  export { computeRotatedQuadCorners, ecefToWGS84, kmToDegrees, pixelsToDegrees, rotateCoordinateOnSphere, rotateCoordinatesOnSphere, wgs84ToECEF, } from './rotation.js';
21
- export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
21
+ export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, expandQuad, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
@@ -109,9 +109,32 @@ export declare function getAnchorProjector(map: MapLibreMap): AnchorProjector |
109
109
  * @returns A CoordinateTransform instance
110
110
  */
111
111
  export declare function createCoordinateTransform(map: MapLibreMap): CoordinateTransform;
112
+ /**
113
+ * Moves every edge of a four-cornered outline outward by a margin
114
+ *
115
+ * The corners are in the order top left, top right, bottom right, bottom left of the shape as
116
+ * it stands unturned, in a space whose y axis points down (the screen). Each corner moves by
117
+ * the margin along both edges that meet at it, so the frame keeps the margin on every side and
118
+ * its corners stay on the diagonals of the outline turned as it is. An edge of no length (the
119
+ * outline of a straight horizontal or vertical line) takes the direction square to the other
120
+ * one, and an outline of no size is widened as an unturned square.
121
+ *
122
+ * @param corners The four corners
123
+ * @param margin The margin, in the unit of the corners
124
+ * @returns The four corners moved outward, in the same order
125
+ */
126
+ export declare function expandQuad(corners: readonly {
127
+ x: number;
128
+ y: number;
129
+ }[], margin: number): {
130
+ x: number;
131
+ y: number;
132
+ }[];
112
133
  /**
113
134
  * Applies a margin in pixels to a bounding box
114
135
  *
136
+ * Every edge moves outward by the margin ({@link expandQuad}).
137
+ *
115
138
  * When zoom is passed, the expansion is done on the map plane. When it is not passed, the
116
139
  * expansion round-trips through screen coordinates. It must not round-trip when there is
117
140
  * terrain: with terrain enabled, project projects a point at the height of the ground surface
@@ -90,9 +90,48 @@ export function createCoordinateTransform(map) {
90
90
  },
91
91
  };
92
92
  }
93
+ /**
94
+ * Moves every edge of a four-cornered outline outward by a margin
95
+ *
96
+ * The corners are in the order top left, top right, bottom right, bottom left of the shape as
97
+ * it stands unturned, in a space whose y axis points down (the screen). Each corner moves by
98
+ * the margin along both edges that meet at it, so the frame keeps the margin on every side and
99
+ * its corners stay on the diagonals of the outline turned as it is. An edge of no length (the
100
+ * outline of a straight horizontal or vertical line) takes the direction square to the other
101
+ * one, and an outline of no size is widened as an unturned square.
102
+ *
103
+ * @param corners The four corners
104
+ * @param margin The margin, in the unit of the corners
105
+ * @returns The four corners moved outward, in the same order
106
+ */
107
+ export function expandQuad(corners, margin) {
108
+ const [tl, tr, br, bl] = corners;
109
+ const unit = (from, to) => {
110
+ const dx = to.x - from.x;
111
+ const dy = to.y - from.y;
112
+ const length = Math.hypot(dx, dy);
113
+ return length > 0 ? { x: dx / length, y: dy / length } : null;
114
+ };
115
+ let u = unit(tl, tr) ?? unit(bl, br);
116
+ let v = unit(tl, bl) ?? unit(tr, br);
117
+ // With y pointing down, the bottom direction is the right direction turned clockwise
118
+ if (!u && v)
119
+ u = { x: v.y, y: -v.x };
120
+ if (u && !v)
121
+ v = { x: -u.y, y: u.x };
122
+ const right = u ?? { x: 1, y: 0 };
123
+ const down = v ?? { x: 0, y: 1 };
124
+ const at = (corner, alongRight, alongDown) => ({
125
+ x: corner.x + (right.x * alongRight + down.x * alongDown) * margin,
126
+ y: corner.y + (right.y * alongRight + down.y * alongDown) * margin,
127
+ });
128
+ return [at(tl, -1, -1), at(tr, 1, -1), at(br, 1, 1), at(bl, -1, 1)];
129
+ }
93
130
  /**
94
131
  * Applies a margin in pixels to a bounding box
95
132
  *
133
+ * Every edge moves outward by the margin ({@link expandQuad}).
134
+ *
96
135
  * When zoom is passed, the expansion is done on the map plane. When it is not passed, the
97
136
  * expansion round-trips through screen coordinates. It must not round-trip when there is
98
137
  * terrain: with terrain enabled, project projects a point at the height of the ground surface
@@ -119,23 +158,8 @@ export function applyMarginToBoundingBox(coords, margin, transform, zoom) {
119
158
  transform.project(clampCoordinate(coords.bottomRight)),
120
159
  transform.project(clampCoordinate(coords.bottomLeft)),
121
160
  ];
122
- // Compute the center of the OBB
123
- const centerX = (corners[0].x + corners[1].x + corners[2].x + corners[3].x) / 4;
124
- const centerY = (corners[0].y + corners[1].y + corners[2].y + corners[3].y) / 4;
125
- // Expand each vertex outward from the center
126
- const expandedCorners = corners.map((corner) => {
127
- const dx = corner.x - centerX;
128
- const dy = corner.y - centerY;
129
- const dist = Math.sqrt(dx * dx + dy * dy);
130
- if (dist === 0)
131
- return corner;
132
- // Extend by the margin while keeping the direction of the vector
133
- const scale = (dist + margin) / dist;
134
- return {
135
- x: centerX + dx * scale,
136
- y: centerY + dy * scale,
137
- };
138
- });
161
+ // Move every edge outward by the margin
162
+ const expandedCorners = expandQuad(corners, margin);
139
163
  // Convert into geographic coordinates
140
164
  const topLeftResult = transform.unproject(expandedCorners[0]);
141
165
  const topRightResult = transform.unproject(expandedCorners[1]);
@@ -169,17 +193,12 @@ function marginOnMapPlane(coords, margin, zoom) {
169
193
  bottomLeft: coords.bottomLeft,
170
194
  };
171
195
  }
172
- // The vertical and horizontal scales differ, so convert into pixel-equivalent amounts
173
- // first and then widen
174
- const expanded = corners.map(([lng, lat]) => {
175
- const dx = (lng - centerLng) / degPerPxLng;
176
- const dy = (lat - centerLat) / degPerPxLat;
177
- const dist = Math.sqrt(dx * dx + dy * dy);
178
- if (dist === 0)
179
- return [lng, lat];
180
- const scale = (dist + margin) / dist;
181
- return [centerLng + dx * scale * degPerPxLng, centerLat + dy * scale * degPerPxLat];
182
- });
196
+ // The vertical and horizontal scales differ, so convert into pixels (y down, as on the
197
+ // screen) first and then widen
198
+ const expanded = expandQuad(corners.map(([lng, lat]) => ({
199
+ x: (lng - centerLng) / degPerPxLng,
200
+ y: -(lat - centerLat) / degPerPxLat,
201
+ })), margin).map(({ x, y }) => [centerLng + x * degPerPxLng, centerLat - y * degPerPxLat]);
183
202
  return {
184
203
  topLeft: expanded[0],
185
204
  topRight: expanded[1],
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The values the library keeps in the `properties` of a feature
3
+ *
4
+ * Every value the library owns is stored under a key that starts with
5
+ * {@link DRAW_PROPERTY_PREFIX}; every other key is an attribute of the user. The code reads and
6
+ * writes these values only through the accessors of this module, never through string
7
+ * literals, so that the keys are spelled in one place.
8
+ */
9
+ /** The prefix of the keys of `properties` that hold the values of the library. */
10
+ export declare const DRAW_PROPERTY_PREFIX: "maplibre-gl-draw:";
11
+ /**
12
+ * Whether a key of `properties` holds a value of the library, so that an attribute panel can
13
+ * leave it out.
14
+ *
15
+ * @param key - A key of `properties`
16
+ * @returns True when the key starts with {@link DRAW_PROPERTY_PREFIX}
17
+ */
18
+ export declare function isDrawProperty(key: string): boolean;
@@ -0,0 +1,129 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * The values the library keeps in the `properties` of a feature
5
+ *
6
+ * Every value the library owns is stored under a key that starts with
7
+ * {@link DRAW_PROPERTY_PREFIX}; every other key is an attribute of the user. The code reads and
8
+ * writes these values only through the accessors of this module, never through string
9
+ * literals, so that the keys are spelled in one place.
10
+ */
11
+ /** The prefix of the keys of `properties` that hold the values of the library. */
12
+ export const DRAW_PROPERTY_PREFIX = 'maplibre-gl-draw:';
13
+ /**
14
+ * The key of `properties` that holds each value of the library
15
+ *
16
+ * @internal
17
+ */
18
+ export const DRAW_PROPERTY_KEYS = {
19
+ createdZoom: `${DRAW_PROPERTY_PREFIX}createdZoom`,
20
+ rotation: `${DRAW_PROPERTY_PREFIX}rotation`,
21
+ scale: `${DRAW_PROPERTY_PREFIX}scale`,
22
+ radiusMeters: `${DRAW_PROPERTY_PREFIX}radiusMeters`,
23
+ radiusHandleAngle: `${DRAW_PROPERTY_PREFIX}radiusHandleAngle`,
24
+ imageFileId: `${DRAW_PROPERTY_PREFIX}imageFileId`,
25
+ imageWidth: `${DRAW_PROPERTY_PREFIX}imageWidth`,
26
+ imageHeight: `${DRAW_PROPERTY_PREFIX}imageHeight`,
27
+ };
28
+ /**
29
+ * The names of the values of the library, in a stable order
30
+ *
31
+ * @internal
32
+ */
33
+ export const DRAW_PROPERTY_NAMES = Object.keys(DRAW_PROPERTY_KEYS);
34
+ /** The type each value must have to be read */
35
+ const VALUE_TYPES = {
36
+ createdZoom: 'number',
37
+ rotation: 'number',
38
+ scale: 'number',
39
+ radiusMeters: 'number',
40
+ radiusHandleAngle: 'number',
41
+ imageFileId: 'string',
42
+ imageWidth: 'number',
43
+ imageHeight: 'number',
44
+ };
45
+ /**
46
+ * Whether a key of `properties` holds a value of the library, so that an attribute panel can
47
+ * leave it out.
48
+ *
49
+ * @param key - A key of `properties`
50
+ * @returns True when the key starts with {@link DRAW_PROPERTY_PREFIX}
51
+ */
52
+ export function isDrawProperty(key) {
53
+ return key.startsWith(DRAW_PROPERTY_PREFIX);
54
+ }
55
+ /**
56
+ * The key of `properties` that holds a value of the library
57
+ *
58
+ * @internal
59
+ */
60
+ export function drawPropertyKey(name) {
61
+ return DRAW_PROPERTY_KEYS[name];
62
+ }
63
+ /**
64
+ * Reads a value of the library from `properties`
65
+ *
66
+ * @param properties - The `properties` of a feature
67
+ * @param name - The name of the value
68
+ * @returns The value, or undefined when it is absent or not of its type
69
+ * @internal
70
+ */
71
+ export function readDrawProperty(properties, name) {
72
+ const value = properties?.[DRAW_PROPERTY_KEYS[name]];
73
+ return typeof value === VALUE_TYPES[name] ? value : undefined;
74
+ }
75
+ /**
76
+ * Reads a value of the library from the `properties` of a feature
77
+ *
78
+ * @param feature - The feature
79
+ * @param name - The name of the value
80
+ * @returns The value, or undefined when it is absent or not of its type
81
+ * @internal
82
+ */
83
+ export function getDrawProperty(feature, name) {
84
+ return readDrawProperty(feature.properties, name);
85
+ }
86
+ /**
87
+ * Whether `properties` has a key for a value of the library (whatever its value)
88
+ *
89
+ * @internal
90
+ */
91
+ export function hasDrawProperty(properties, name) {
92
+ return properties != null && DRAW_PROPERTY_KEYS[name] in properties;
93
+ }
94
+ /**
95
+ * Writes a value of the library into a `properties` object; `undefined` removes the key
96
+ *
97
+ * @param properties - The `properties` object to write into (changed in place)
98
+ * @param name - The name of the value
99
+ * @param value - The value
100
+ * @internal
101
+ */
102
+ export function setDrawProperty(properties, name, value) {
103
+ const key = DRAW_PROPERTY_KEYS[name];
104
+ if (value === undefined) {
105
+ delete properties[key];
106
+ }
107
+ else {
108
+ properties[key] = value;
109
+ }
110
+ }
111
+ /**
112
+ * The entries of `properties` for some values of the library, to spread into a new
113
+ * `properties` object (a value given as `undefined` is left out)
114
+ *
115
+ * @example
116
+ * ```ts
117
+ * const properties = { ...feature.properties, ...drawProperties({ scale: 2 }) };
118
+ * ```
119
+ * @internal
120
+ */
121
+ export function drawProperties(values) {
122
+ const result = {};
123
+ for (const name of Object.keys(values)) {
124
+ const value = values[name];
125
+ if (value !== undefined)
126
+ result[DRAW_PROPERTY_KEYS[name]] = value;
127
+ }
128
+ return result;
129
+ }
@@ -38,12 +38,17 @@ export interface DatasetClickEventPayload {
38
38
  /** The feature that was hit. null when there was no hit */
39
39
  feature: Feature | null;
40
40
  /**
41
- * The row of the feature in its dataset (its index in the features given to the
42
- * dataset, or its row in a columnar table). null when there was no hit
41
+ * The row of the feature in its dataset (its index in the rows given to the
42
+ * dataset, or its row in a table). null when there was no hit
43
43
  */
44
44
  row: number | null;
45
45
  /** Map coordinate [lng, lat] */
46
46
  lngLat: Coordinate;
47
+ /** The point on the screen, in CSS pixels */
48
+ point?: {
49
+ x: number;
50
+ y: number;
51
+ };
47
52
  }
48
53
  /**
49
54
  * A geographic coordinate (the same shape as the lngLat of a normalized event)
@@ -81,8 +86,11 @@ export interface SnapTargetSegment {
81
86
  * by the rendering of the guide line.
82
87
  */
83
88
  export interface SnapTarget {
84
- /** The kind of the target */
85
- kind: SnapTargetKind;
89
+ /**
90
+ * The kind of the target: one of the engine, or the kind of its own a provider of the
91
+ * extension contract gave its candidate (ranked as a vertex)
92
+ */
93
+ kind: SnapTargetKind | (string & Record<never, never>);
86
94
  /** The feature ID of the target (only for candidates originating from the Store) */
87
95
  featureId?: string;
88
96
  /**
@@ -115,10 +123,10 @@ export interface SnapResult {
115
123
  *
116
124
  * When the `isExternalEntry` option marks entries of the layer order as external, the draw
117
125
  * instance draws each run between them in a maplibre custom layer of its own, so the host can
118
- * place its own maplibre layers between the frames. `getRenderSlots()` lists the frames, and
119
- * the `draw.renderslots.change` event announces a change of them.
126
+ * place its own maplibre layers between the frames. `draw.getLayerStack()` lists the frames,
127
+ * and the `layerStack.changed` event announces a change of them.
120
128
  */
121
- export interface RenderSlot {
129
+ export interface StackSlot {
122
130
  /** The maplibre layer ID of the custom layer that draws this run */
123
131
  readonly layerId: string;
124
132
  /** The index in the layer order where the run starts (inclusive) */