@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
package/dist/api/api.js DELETED
@@ -1,86 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- import { subscribeMutationHooks } from '../plugins/mutation-hooks.js';
4
- import { createDisplayApi } from './display-api.js';
5
- import { createEventApi } from './event-api.js';
6
- import { createExtensionApi } from './extension-api.js';
7
- import { createFeatureApi } from './feature-api.js';
8
- import { createGeometryApi } from './geometry-operations.js';
9
- import { createGroupApi } from './group-api.js';
10
- import { createInputApi } from './input-api.js';
11
- import { createInstanceApi } from './instance-api.js';
12
- import { createLayerApi } from './layer-api.js';
13
- import { createSelectionApi } from './selection-api.js';
14
- import { createSnappingApi } from './snapping-api.js';
15
- import { createTopologyApi } from './topology-api.js';
16
- import { createTracingApi } from './tracing-api.js';
17
- /**
18
- * The orchestrator that creates the public API. It composes the sub-apis of each functional
19
- * domain by spreading.
20
- *
21
- * @internal
22
- */
23
- export function createDrawAPI(context, input, eventBridge, customLayer, importExportAPI, lifecycle, extension) {
24
- const { map, store, eventEmitter, generateFeatureId, autoNameGenerator, hitTestService, boxSelectionRegistry, getActiveLayerId, setActiveLayerId, snapService, topology, trace, pixelRatioSource, } = context;
25
- const { spatialIndex, pluginManager, datasets, featureCompanions } = extension;
26
- const { inputNormalizer, inputRouter } = input;
27
- const { modeManager, renderCoordinator } = lifecycle;
28
- // The after-mutation hooks of the plugins are fired from the Store notification, so they
29
- // see every write whatever made it
30
- const stopMutationHooks = subscribeMutationHooks(store, pluginManager);
31
- const instanceApi = createInstanceApi({
32
- map,
33
- store,
34
- modeManager,
35
- eventBridge,
36
- renderCoordinator,
37
- inputRouter,
38
- inputNormalizer,
39
- customLayer,
40
- autoNameGenerator,
41
- pixelRatioSource,
42
- pluginManager,
43
- });
44
- return {
45
- ...instanceApi,
46
- destroy() {
47
- instanceApi.destroy();
48
- // After the plugins are uninstalled (their onUninstall can still read the index)
49
- stopMutationHooks();
50
- spatialIndex.destroy();
51
- },
52
- ...createFeatureApi({ store, generateFeatureId, getActiveLayerId }),
53
- ...createLayerApi({
54
- store,
55
- generateFeatureId,
56
- autoNameGenerator,
57
- getActiveLayerId,
58
- setActiveLayerId,
59
- }),
60
- ...createGroupApi({ store, generateFeatureId, autoNameGenerator }),
61
- ...createSelectionApi({ store }),
62
- ...createGeometryApi({ store, eventEmitter, generateFeatureId }),
63
- ...createDisplayApi({ datasets }),
64
- ...createSnappingApi({ snapService, map }),
65
- ...createTracingApi({ trace }),
66
- ...createTopologyApi({ topology }),
67
- ...createInputApi({ map, inputRouter }),
68
- ...createEventApi({ eventEmitter }),
69
- ...createExtensionApi({
70
- pluginManager,
71
- modeManager,
72
- spatialIndex,
73
- hitTestService,
74
- boxSelectionRegistry,
75
- customLayer: customLayer,
76
- featureCompanions,
77
- selectionScope: context.selectionScope,
78
- snapTargets: context.snapTargets,
79
- }),
80
- // The Import/Export API spreads importExportAPI directly
81
- // (load / export / getSuggestedFileName)
82
- load: (source, options) => importExportAPI.load(source, options),
83
- export: (format, options) => importExportAPI.export(format, options),
84
- getSuggestedFileName: () => importExportAPI.getSuggestedFileName(),
85
- };
86
- }
@@ -1,173 +0,0 @@
1
- import { type Messages } from '../messages.js';
2
- import type { FeatureStyleConfig } from '../shared/config/feature-style.js';
3
- import type { RenderingConfig } from '../shared/config/rendering.js';
4
- import type { SelectionUIConfig } from '../shared/config/selection.js';
5
- import type { TopologyConfig } from '../shared/config/topology.js';
6
- import type { TraceOptions } from '../shared/config/trace.js';
7
- import type { AutoNameConfig } from '../shared/utils/name-generator.js';
8
- import type { SnapOptions } from '../snapping/types.js';
9
- import type { DocumentStore, Store } from '../store/store.js';
10
- import type { Mode } from '../store/types.js';
11
- /**
12
- * The options of {@link createMapLibreGLDraw}. Every option can be omitted.
13
- *
14
- * @example
15
- * ```typescript
16
- * const draw = createMapLibreGLDraw(map, {
17
- * defaultMode: 'select',
18
- * clickTolerance: 8,
19
- * snap: { tolerancePx: 12, kinds: { guide: false } },
20
- * trace: { enabled: false },
21
- * topology: { sharedVertexDrag: true },
22
- * autoName: false,
23
- * });
24
- * ```
25
- */
26
- export interface Options {
27
- /** The mode the instance starts in (default `'select'`) */
28
- defaultMode?: Mode;
29
- /**
30
- * How far from a feature a click still hits it, in CSS pixels (default 6)
31
- */
32
- clickTolerance?: number;
33
- /**
34
- * How far the mouse moves with the button down before a press becomes a drag, in CSS
35
- * pixels (default 3)
36
- */
37
- dragThreshold?: number;
38
- /**
39
- * The default drawing style of the features, per geometry (points, lines, polygons and so
40
- * on); the given parts replace the built-in defaults, and a feature's own `style` wins over
41
- * both
42
- */
43
- style?: Partial<FeatureStyleConfig>;
44
- /**
45
- * The look of the selection UI: the bounding box, the resize, rotate, vertex and midpoint
46
- * handles, and the radius handle, center marker and radius line of a circle (see
47
- * {@link SelectionUIConfig} for the defaults)
48
- */
49
- selectionStyle?: Partial<SelectionUIConfig>;
50
- /**
51
- * The look of the box selection rectangle and the switches of the rendering paths (see
52
- * {@link RenderingConfig} for the defaults)
53
- */
54
- renderingStyle?: Partial<RenderingConfig>;
55
- /**
56
- * The automatic names of new features, layers and groups, such as `Polygon 1` and
57
- * `Layer 2` (default: enabled)
58
- *
59
- * `false` turns it off, and an {@link AutoNameConfig} changes the words or the format. A
60
- * number used once is not reused. The words are English by default; a host that shows
61
- * another language translates them here (`typeNames`), not through {@link Options.messages}.
62
- */
63
- autoName?: AutoNameConfig | boolean;
64
- /**
65
- * Whether the line widths of the features drawn in a drawing mode follow the zoom (default
66
- * true)
67
- *
68
- * By default a drawing mode records the zoom a feature is drawn at in
69
- * `properties.createdZoom`, and the widths of its lines and outlines are those of that zoom:
70
- * they double with each zoom level in and halve with each level out, like lines drawn on
71
- * paper. An application that wants the widths to stay the same on the screen at every zoom
72
- * sets `false`; a drawn feature then gets no created zoom, like a feature added through the
73
- * API. It does not change features already drawn: the widths follow
74
- * `properties.createdZoom` wherever it is set, so a feature added through the API can set it
75
- * too. An Image always scales with the map.
76
- */
77
- scaleWithZoom?: boolean;
78
- /**
79
- * The snapping configuration
80
- *
81
- * When omitted, it is enabled with a tolerance of 10 CSS pixels, it is released while Alt
82
- * is held, every kind of target (vertex, edge, intersection, guide) is on, and the
83
- * datasets are targets. The candidates come from the vertices and edges of
84
- * the Store; more are added with `draw.snapping.register()`. Change it at runtime with
85
- * {@link MapLibreGLDraw.snapping}.
86
- */
87
- snap?: SnapOptions;
88
- /**
89
- * The topology configuration (when omitted, everything is disabled)
90
- *
91
- * The settings that keep editing from breaking boundaries shared by adjacent features.
92
- * With `sharedVertexDrag: true`, dragging a vertex in select mode also moves, by the same
93
- * amount, every vertex of other visible, unlocked features at exactly the same coordinates,
94
- * and the drag commits as one change. The modifier of `snap.disableKey` held at the start of
95
- * a drag releases it for that drag. Change it at runtime with
96
- * {@link MapLibreGLDraw.topology}.
97
- */
98
- topology?: Partial<TopologyConfig>;
99
- /**
100
- * The trace configuration (when omitted, it is enabled)
101
- *
102
- * While drawing (draw_line / draw_polygon), when the previous click and this click both
103
- * snapped to the boundary of the same feature, the vertex sequence between them is taken in
104
- * automatically. With `enabled: false` a click adds only the point clicked. Change it at
105
- * runtime with {@link MapLibreGLDraw.tracing}.
106
- */
107
- trace?: TraceOptions;
108
- /**
109
- * The document store (when omitted, a new {@link MemoryStore} is used)
110
- *
111
- * Give a {@link DocumentStore} of your own to keep the document elsewhere; the library
112
- * keeps the local state (selection, mode, read-only and so on) around
113
- * it. A {@link Store} such as a MemoryStore is used as it is.
114
- */
115
- store?: DocumentStore | Store;
116
- /**
117
- * Whether to create a default layer on initialization (default: true)
118
- *
119
- * When it is false, creating the layers becomes the responsibility of the application.
120
- * Use it when restoring the layer structure from an external data source, or
121
- * when managing the layers on your own. Until a layer exists, the drawing modes cannot be
122
- * entered.
123
- */
124
- initDefaultLayer?: boolean;
125
- /**
126
- * The predicate that identifies the "external entries" of the stacking order (when omitted,
127
- * it is always false)
128
- *
129
- * The entries of the layer order for which it returns true are separators, and this library
130
- * does not draw them. Each interval between separators is drawn by its own MapLibre custom
131
- * layer (a frame), so the host can place its native layers (vector tiles, raster) between
132
- * the frames. {@link MapLibreGLDraw.getRenderSlots} lists the frames, and the
133
- * `draw.renderslots.change` event announces their changes.
134
- *
135
- * @example
136
- * ```typescript
137
- * const draw = createMapLibreGLDraw(map, {
138
- * isExternalEntry: (id) => id.startsWith('native:'),
139
- * });
140
- * draw.on('draw.renderslots.change', ({ slots }) => placeNativeLayers(slots));
141
- * ```
142
- */
143
- isExternalEntry?: (entryId: string) => boolean;
144
- /**
145
- * The render scale (when omitted, the map's `getPixelRatio()` is read each time)
146
- *
147
- * Line widths, point sizes and outlines are drawn by converting CSS pixels into physical
148
- * pixels, so the scale of the backing store being drawn into is needed. By default it is
149
- * the ratio of the map, which follows the `pixelRatio` the maplibre Map was created with
150
- * and the device. Pass a value only to draw at another scale than the map's.
151
- */
152
- pixelRatio?: number;
153
- /**
154
- * The strings the library returns as values (when omitted, {@link MESSAGES_EN})
155
- *
156
- * The given entries replace the English defaults for this instance only; the entries
157
- * left out keep the default. Legend labels and the descriptions of the snapping guides
158
- * come from this table. The library ships English only and does no locale detection.
159
- * The words of generated names ("Layer 1") are not here: they come from
160
- * {@link Options.autoName}.
161
- *
162
- * @example
163
- * ```typescript
164
- * const draw = createMapLibreGLDraw(map, {
165
- * messages: {
166
- * legendOther: 'Autres',
167
- * legendBelow: (upper) => `Moins de ${upper}`,
168
- * },
169
- * });
170
- * ```
171
- */
172
- messages?: Partial<Messages>;
173
- }
@@ -1,23 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /** @internal */
4
- export function createDisplayApi(deps) {
5
- const { datasets } = deps;
6
- return {
7
- addDataset(options) {
8
- return datasets.add(options);
9
- },
10
- getDataset(id) {
11
- return datasets.get(id);
12
- },
13
- getDatasets() {
14
- return datasets.list();
15
- },
16
- moveDataset(id, placement) {
17
- return datasets.move(id, placement);
18
- },
19
- removeDataset(id) {
20
- return datasets.remove(id);
21
- },
22
- };
23
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * Event API
3
- *
4
- * Provides on / off for MapLibreGLDraw. Maps the `draw.*` prefix to the internal
5
- * EventEmitter event names.
6
- */
7
- import type { EventEmitter } from '../shared/utils/event-emitter.js';
8
- import type { MapLibreGLDraw } from './api.js';
9
- export type EventApi = Pick<MapLibreGLDraw, 'on' | 'off'>;
10
- export interface EventApiDeps {
11
- eventEmitter: EventEmitter;
12
- }
13
- export declare function createEventApi(deps: EventApiDeps): EventApi;
@@ -1,17 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- export function createEventApi(deps) {
4
- const { eventEmitter } = deps;
5
- return {
6
- on(event, handler) {
7
- const internalEvent = event.replace('draw.', '');
8
- const listener = handler;
9
- eventEmitter.on(internalEvent, listener);
10
- return () => eventEmitter.off(internalEvent, listener);
11
- },
12
- off(event, handler) {
13
- const internalEvent = event.replace('draw.', '');
14
- eventEmitter.off(internalEvent, handler);
15
- },
16
- };
17
- }
@@ -1,46 +0,0 @@
1
- /**
2
- * Extension API
3
- *
4
- * Provides the extension point API of MapLibreGLDraw.
5
- * - addPlugin / getPluginApi: plugin registration / lookup
6
- * - registerMode: registers a custom mode
7
- * - registerFeatureHandler: registers a custom feature handler (registers the renderer /
8
- * hitTest / boxSelection / boundingBox / resize calculator / snapping candidates at once)
9
- * - registerAuxiliaryHandleProvider: registers a provider of auxiliary handles (handles of
10
- * a plugin's own that are neither vertices nor resize handles)
11
- * - registerFeatureCompanionProvider: registers a provider of companion rendering and
12
- * companion hits (things drawn at the z just below the feature and grabbable in the same
13
- * z order)
14
- * - addOverlayRenderer: adds a custom overlay renderer
15
- *
16
- * Every registration returns the function that cancels it.
17
- */
18
- import type { BoxSelectionStrategyRegistry } from '../dispatcher/hit-test/box-strategy.js';
19
- import type { HitTestService } from '../dispatcher/hit-test/service.js';
20
- import type { ModeManager } from '../modes/manager.js';
21
- import type { PluginManager } from '../plugins/plugin-manager.js';
22
- import type { SnapTargetsRegistry } from '../snapping/custom-targets.js';
23
- import type { SpatialIndex } from '../store/spatial/spatial-index.js';
24
- import type { FeatureCompanionRegistry } from '../view/feature-companion.js';
25
- import type { CustomLayerInterface } from '../view/layer/index.js';
26
- import type { SelectionScope } from '../view/ui/selection-scope.js';
27
- import type { MapLibreGLDraw } from './api.js';
28
- export type ExtensionApi = Pick<MapLibreGLDraw, 'addPlugin' | 'getPluginApi' | 'registerMode' | 'registerFeatureHandler' | 'registerAuxiliaryHandleProvider' | 'registerFeatureCompanionProvider' | 'addOverlayRenderer'>;
29
- export interface ExtensionApiDeps {
30
- pluginManager: PluginManager;
31
- modeManager: ModeManager;
32
- spatialIndex: SpatialIndex;
33
- hitTestService: HitTestService;
34
- boxSelectionRegistry: BoxSelectionStrategyRegistry;
35
- customLayer: CustomLayerInterface;
36
- /** The providers of companion rendering and companion hits (those of this draw instance) */
37
- featureCompanions: FeatureCompanionRegistry;
38
- /**
39
- * The selection scope of this draw instance (selection UI extension points and auxiliary
40
- * handles). Registrations go here, never into a module-level registry
41
- */
42
- selectionScope: SelectionScope;
43
- /** The snapping candidates of the custom feature types of this draw instance */
44
- snapTargets: SnapTargetsRegistry;
45
- }
46
- export declare function createExtensionApi(deps: ExtensionApiDeps): ExtensionApi;
@@ -1,85 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- export function createExtensionApi(deps) {
4
- const { pluginManager, modeManager, spatialIndex, hitTestService, boxSelectionRegistry, customLayer, featureCompanions, selectionScope, snapTargets, } = deps;
5
- const selectionExtensions = selectionScope.extensions;
6
- return {
7
- addPlugin(plugin) {
8
- return pluginManager.register(plugin);
9
- },
10
- getPluginApi(name) {
11
- return pluginManager.getPluginApi(name);
12
- },
13
- registerMode(mode, factory) {
14
- return modeManager.registerMode(mode, factory);
15
- },
16
- registerFeatureHandler(handler) {
17
- const { type } = handler;
18
- const cancels = [];
19
- const add = (cancel) => {
20
- if (cancel)
21
- cancels.push(cancel);
22
- };
23
- // 1. The bounding box computation of the spatial index (it re-measures the features of
24
- // the type the Store already holds)
25
- if (handler.getBoundingBox) {
26
- add(spatialIndex.setCustomBoundingBoxCalculator?.(type, handler.getBoundingBox));
27
- }
28
- // 2. The hit testing strategy
29
- if (handler.hitTest)
30
- add(hitTestService.registerStrategy?.(handler.hitTest));
31
- // 3. The box selection strategy
32
- if (handler.boxSelection)
33
- add(boxSelectionRegistry.register(handler.boxSelection));
34
- // 4. The renderer
35
- if (handler.renderer)
36
- add(customLayer.registerFeatureRenderer(type, handler.renderer));
37
- // 5. The bounding box of the selection UI
38
- if (handler.getSelectionBoundingBox) {
39
- add(selectionExtensions.registerBoundingBox(type, handler.getSelectionBoundingBox));
40
- }
41
- // 6. The additional resize handles
42
- if (handler.getAdditionalResizeHandles) {
43
- add(selectionExtensions.registerAdditionalResizeHandles(type, handler.getAdditionalResizeHandles));
44
- }
45
- // 7. The custom resize computation
46
- if (handler.computeCustomResize) {
47
- add(selectionExtensions.registerCustomResize(type, handler.computeCustomResize));
48
- }
49
- // 8. The resize strategy. A type with the scale strategy also rotates through its
50
- // rotation property (the rotate operation reads the same strategy)
51
- if (handler.resizeStrategy) {
52
- add(selectionExtensions.registerResizeStrategy(type, handler.resizeStrategy));
53
- }
54
- // 9. The snapping candidates
55
- if (handler.getSnapTargets)
56
- add(snapTargets.register(type, handler.getSnapTargets));
57
- // 10. The additional reach for candidate narrowing of the hit test
58
- if (handler.candidateReachPx !== undefined) {
59
- add(hitTestService.registerCandidateReach?.(type, handler.candidateReachPx));
60
- }
61
- // 11. The extent of a point's selection box
62
- if (handler.getPointFrameExtent) {
63
- add(selectionExtensions.registerPointFrameExtent(type, handler.getPointFrameExtent));
64
- }
65
- // The cancellation undoes every registration above, in the reverse order
66
- let cancelled = false;
67
- return () => {
68
- if (cancelled)
69
- return;
70
- cancelled = true;
71
- for (let i = cancels.length - 1; i >= 0; i--)
72
- cancels[i]();
73
- };
74
- },
75
- registerAuxiliaryHandleProvider(provider) {
76
- return selectionScope.auxiliaryHandles.register(provider);
77
- },
78
- registerFeatureCompanionProvider(provider) {
79
- return featureCompanions.register(provider);
80
- },
81
- addOverlayRenderer(renderer) {
82
- return customLayer.addOverlayRenderer(renderer);
83
- },
84
- };
85
- }
@@ -1,11 +0,0 @@
1
- import type { Store } from '../store/store.js';
2
- import type { MapLibreGLDraw } from './api.js';
3
- export type FeatureApi = Pick<MapLibreGLDraw, 'addFeature' | 'getFeature' | 'getAllFeatures' | 'getVisibleFeatures' | 'updateFeature' | 'deleteFeature' | 'deleteAllFeatures'>;
4
- export interface FeatureApiDeps {
5
- store: Store;
6
- generateFeatureId: () => string;
7
- getActiveLayerId: () => string;
8
- }
9
- export declare function createFeatureApi(deps: FeatureApiDeps): FeatureApi;
10
- /** Whether an update changes nothing but `locked` / `visible` (what a lock still allows) */
11
- export declare function onlyLockOrVisibility(updates: object): boolean;
@@ -1,101 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Feature API
5
- *
6
- * Provides the Feature CRUD operations of MapLibreGLDraw.
7
- * It is composed into createDrawAPI by spreading.
8
- */
9
- import { isFeatureLocked } from '../store/lock.js';
10
- export function createFeatureApi(deps) {
11
- const { store, generateFeatureId, getActiveLayerId } = deps;
12
- return {
13
- addFeature(input) {
14
- const feature = {
15
- id: input.id ?? generateFeatureId(),
16
- type: input.type,
17
- coordinates: input.coordinates,
18
- layerId: input.layerId ?? getActiveLayerId(),
19
- properties: input.properties ?? {},
20
- style: input.style,
21
- locked: input.locked ?? false,
22
- visible: input.visible ?? true,
23
- };
24
- // A write refused because the Store is read-only returns null
25
- return store.createFeature(feature) ? feature.id : null;
26
- },
27
- getFeature(id) {
28
- return store.getFeature(id);
29
- },
30
- getAllFeatures() {
31
- return featuresInDisplayOrder(store);
32
- },
33
- getVisibleFeatures() {
34
- return store.getOrderedFeatures();
35
- },
36
- updateFeature(id, updates) {
37
- // While locked (either itself, its group or its layer), reject changes to any
38
- // attribute other than locked/visible (Miro-style full protection). locked/visible are
39
- // allowed so that it can be unlocked and its visibility toggled.
40
- const feature = store.getFeature(id);
41
- if (feature && isFeatureLocked(feature, store) && !onlyLockOrVisibility(updates)) {
42
- return false;
43
- }
44
- // An id that does not exist throws in the Store (unless it is read-only)
45
- return store.updateFeature(id, updates);
46
- },
47
- deleteFeature(id) {
48
- return store.deleteFeature(id);
49
- },
50
- deleteAllFeatures() {
51
- const features = store.getAllFeatures();
52
- return store.transact(() => {
53
- let applied = true;
54
- for (const feature of features) {
55
- if (!store.getFeature(feature.id))
56
- continue;
57
- applied = store.deleteFeature(feature.id) && applied;
58
- }
59
- return applied;
60
- });
61
- },
62
- };
63
- }
64
- /** Whether an update changes nothing but `locked` / `visible` (what a lock still allows) */
65
- export function onlyLockOrVisibility(updates) {
66
- return Object.keys(updates).every((key) => key === 'locked' || key === 'visible');
67
- }
68
- /**
69
- * Every feature in display order (layer order -> order within the layer -> order within the
70
- * group), whatever the visible flags say. A feature that no container lists (which the
71
- * Store's containment invariant rules out) is appended at the end.
72
- */
73
- function featuresInDisplayOrder(store) {
74
- const result = [];
75
- const seen = new Set();
76
- const push = (id) => {
77
- const feature = store.getFeature(id);
78
- if (feature && !seen.has(id)) {
79
- seen.add(id);
80
- result.push(feature);
81
- }
82
- };
83
- for (const layerId of store.getLayerOrder()) {
84
- const layer = store.getLayer(layerId);
85
- if (!layer)
86
- continue;
87
- for (const itemId of layer.order) {
88
- const group = store.getGroup(itemId);
89
- if (group) {
90
- for (const featureId of group.featureIds)
91
- push(featureId);
92
- }
93
- else {
94
- push(itemId);
95
- }
96
- }
97
- }
98
- for (const feature of store.getAllFeatures())
99
- push(feature.id);
100
- return result;
101
- }
@@ -1,51 +0,0 @@
1
- /**
2
- * The common part of the geometry operations: placing a result where its input was, and
3
- * announcing what an operation did
4
- *
5
- * applyResult creates one result, deletes the inputs and places it (outside a transaction)
6
- * commitResult wraps applyResult in one transaction and moves the selection
7
- * emitApplied emits draw.geometry.applied
8
- */
9
- import type { EventEmitter, GeometryAppliedPayload } from '../../shared/utils/event-emitter.js';
10
- import type { Feature, FeatureCoordinates, FeatureType } from '../../store/types.js';
11
- import type { GeometryApiDeps } from './types.js';
12
- export interface CommitParams {
13
- /**
14
- * The input whose style, properties and placement are inherited (in a boolean operation, the
15
- * frontmost in z order)
16
- */
17
- anchor: Feature;
18
- /**
19
- * The IDs of the inputs to delete. Left empty in an operation that keeps the inputs, such as
20
- * the buffer
21
- */
22
- removedIds: string[];
23
- geometry: {
24
- type: FeatureType;
25
- coordinates: FeatureCoordinates;
26
- };
27
- /**
28
- * The properties of the result. When omitted, they are inherited from the anchor with the
29
- * Circle-specific properties removed.
30
- * It is given explicitly only when the result stays a Circle (the Circle special case of the
31
- * buffer).
32
- */
33
- properties?: Record<string, unknown>;
34
- }
35
- /**
36
- * Creates one result feature, deletes the inputs and places it.
37
- *
38
- * It does not open a transaction. Because the caller wraps it in store.transact, even a case
39
- * with several results, such as the buffer, is gathered into one StateChanges.
40
- */
41
- export declare function applyResult(deps: GeometryApiDeps, params: CommitParams): string;
42
- /**
43
- * Creates the result feature and deletes the inputs in one transaction, and moves the
44
- * selection to the result.
45
- *
46
- * A subscriber receives it as one StateChanges, which is what makes it one step for anything
47
- * that records changes.
48
- */
49
- export declare function commitResult(deps: GeometryApiDeps, params: CommitParams): string;
50
- /** Emits draw.geometry.applied. */
51
- export declare function emitApplied(eventEmitter: EventEmitter, payload: GeometryAppliedPayload): void;
@@ -1,28 +0,0 @@
1
- /**
2
- * The boolean editing operations (union / subtract / intersect) on the area types
3
- */
4
- import type { AreaCoordinates, MultiPolygonCoordinates } from '../../geometry/index.js';
5
- import type { GeometryOperationName } from '../../shared/utils/event-emitter.js';
6
- import type { Store } from '../../store/store.js';
7
- import type { Feature } from '../../store/types.js';
8
- import type { GeometryApiDeps } from './types.js';
9
- /**
10
- * The common path that runs an operation on the area types and replaces the inputs with the
11
- * result.
12
- *
13
- * @param inputs The targets ordered in z order (the tail is the frontmost)
14
- * @param compute The geometric operation that receives the area coordinates in the same order
15
- * as inputs and returns the result
16
- */
17
- export declare function runAreaOperation(deps: GeometryApiDeps, operation: GeometryOperationName, inputs: Feature[], compute: (areas: AreaCoordinates[]) => MultiPolygonCoordinates): string | null;
18
- /**
19
- * Resolves the targets of subtract.
20
- *
21
- * When targetId is omitted, it is "subtract the group of frontmost features from the backmost
22
- * one". When it is given explicitly, that feature is added to the targets even if it is not
23
- * included in the list of targets (ids / the selection).
24
- */
25
- export declare function resolveSubtractInputs(store: Store, targetId: string | undefined, ids: string[] | undefined): {
26
- inputs: Feature[];
27
- targetIndex: number;
28
- } | null;