@sakuzu/maplibre-gl-draw 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/CHANGELOG.md +1016 -2
  2. package/README.ja.md +39 -19
  3. package/README.md +41 -21
  4. package/dist/api/datasets.d.ts +258 -0
  5. package/dist/api/document.d.ts +66 -0
  6. package/dist/api/draw.d.ts +135 -0
  7. package/dist/api/draw.js +18 -0
  8. package/dist/api/drawing.d.ts +87 -0
  9. package/dist/api/errors.d.ts +35 -0
  10. package/dist/api/errors.js +35 -0
  11. package/dist/api/events.d.ts +306 -0
  12. package/dist/api/extension/context.d.ts +247 -0
  13. package/dist/api/extension/feature-type.d.ts +129 -0
  14. package/dist/api/extension/mode.d.ts +123 -0
  15. package/dist/api/extension/plugin.d.ts +51 -0
  16. package/dist/api/extension/plugin.js +3 -0
  17. package/dist/api/extension/provider.d.ts +119 -0
  18. package/dist/api/extension/provider.js +3 -0
  19. package/dist/api/extension/render.d.ts +176 -0
  20. package/dist/api/extension/render.js +3 -0
  21. package/dist/api/extension/store.d.ts +190 -0
  22. package/dist/api/extension/store.js +3 -0
  23. package/dist/api/extensions.d.ts +306 -0
  24. package/dist/api/extensions.js +3 -0
  25. package/dist/api/features.d.ts +188 -0
  26. package/dist/api/features.js +3 -0
  27. package/dist/api/groups.d.ts +111 -0
  28. package/dist/api/groups.js +3 -0
  29. package/dist/api/hidden.d.ts +45 -0
  30. package/dist/api/hidden.js +3 -0
  31. package/dist/api/impl/adapters.js +463 -0
  32. package/dist/api/impl/contexts.js +466 -0
  33. package/dist/api/impl/create-draw.js +124 -0
  34. package/dist/api/impl/datasets.js +404 -0
  35. package/dist/api/impl/destroy-guard.js +74 -0
  36. package/dist/api/impl/document.js +280 -0
  37. package/dist/api/impl/drawing.js +180 -0
  38. package/dist/api/impl/engine-context.d.ts +7 -0
  39. package/dist/api/{context.js → impl/engine-context.js} +49 -38
  40. package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
  41. package/dist/api/impl/events.js +422 -0
  42. package/dist/api/impl/extension-host.js +361 -0
  43. package/dist/api/impl/extensions.js +229 -0
  44. package/dist/api/impl/features.js +445 -0
  45. package/dist/api/impl/geometry/apply.d.ts +32 -0
  46. package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
  47. package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
  48. package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
  49. package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
  50. package/dist/api/{geometry → impl/geometry}/split.js +10 -21
  51. package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
  52. package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
  53. package/dist/api/impl/geometry/types.js +3 -0
  54. package/dist/api/impl/groups.d.ts +3 -0
  55. package/dist/api/impl/groups.js +268 -0
  56. package/dist/api/impl/hidden.js +60 -0
  57. package/dist/api/impl/import-export/constants.d.ts +22 -0
  58. package/dist/api/impl/import-export/constants.js +24 -0
  59. package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
  60. package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
  61. package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
  62. package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
  63. package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
  64. package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
  65. package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
  66. package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
  67. package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
  68. package/dist/api/impl/import-export/image-import.d.ts +16 -0
  69. package/dist/api/impl/import-export/image-import.js +73 -0
  70. package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
  71. package/dist/api/impl/import-export/legacy-image-style.js +49 -0
  72. package/dist/api/impl/import-export/native-format.d.ts +14 -0
  73. package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
  74. package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
  75. package/dist/api/impl/import-export/native-upgrade.js +139 -0
  76. package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
  77. package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
  78. package/dist/api/impl/import-export/style-validation.d.ts +24 -0
  79. package/dist/api/impl/import-export/style-validation.js +86 -0
  80. package/dist/api/impl/import-export/types.d.ts +52 -0
  81. package/dist/api/impl/import-export/types.js +3 -0
  82. package/dist/api/impl/input.js +180 -0
  83. package/dist/api/impl/layers.js +307 -0
  84. package/dist/api/impl/metadata.d.ts +1 -0
  85. package/dist/api/impl/metadata.js +22 -0
  86. package/dist/api/impl/options.d.ts +1 -0
  87. package/dist/api/impl/options.js +822 -0
  88. package/dist/api/impl/placement.d.ts +1 -0
  89. package/dist/api/impl/placement.js +138 -0
  90. package/dist/api/impl/render-context.d.ts +13 -0
  91. package/dist/api/impl/render-context.js +272 -0
  92. package/dist/api/impl/rows.d.ts +1 -0
  93. package/dist/api/impl/rows.js +46 -0
  94. package/dist/api/impl/selection.d.ts +1 -0
  95. package/dist/api/impl/selection.js +186 -0
  96. package/dist/api/impl/shared.d.ts +64 -0
  97. package/dist/api/impl/shared.js +178 -0
  98. package/dist/api/impl/validate-extension.d.ts +1 -0
  99. package/dist/api/impl/validate-extension.js +159 -0
  100. package/dist/api/layers.d.ts +130 -0
  101. package/dist/api/layers.js +3 -0
  102. package/dist/api/metadata.d.ts +18 -0
  103. package/dist/api/metadata.js +3 -0
  104. package/dist/api/model.d.ts +487 -0
  105. package/dist/api/model.js +47 -0
  106. package/dist/api/options.d.ts +466 -0
  107. package/dist/api/options.js +3 -0
  108. package/dist/api/selection.d.ts +94 -0
  109. package/dist/api/selection.js +3 -0
  110. package/dist/api/state.d.ts +155 -0
  111. package/dist/api/state.js +12 -0
  112. package/dist/{display → dataset}/chunk.d.ts +1 -1
  113. package/dist/{display → dataset}/chunk.js +4 -3
  114. package/dist/{display → dataset}/dataset.js +18 -21
  115. package/dist/dataset/interaction.d.ts +1 -0
  116. package/dist/{display → dataset}/interaction.js +18 -6
  117. package/dist/dataset/manager.d.ts +1 -0
  118. package/dist/dataset/provider.d.ts +1 -0
  119. package/dist/{display → dataset}/retained.d.ts +1 -1
  120. package/dist/{display → dataset}/retained.js +8 -7
  121. package/dist/dataset/source.d.ts +1 -0
  122. package/dist/{display → dataset}/source.js +17 -4
  123. package/dist/dataset/spatial.d.ts +1 -0
  124. package/dist/{display → dataset}/spatial.js +1 -1
  125. package/dist/dataset/style.d.ts +1 -0
  126. package/dist/{display → dataset}/style.js +1 -1
  127. package/dist/dataset/table-source.d.ts +1 -0
  128. package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
  129. package/dist/{display → dataset}/thinning.d.ts +0 -10
  130. package/dist/{display → dataset}/thinning.js +3 -2
  131. package/dist/dataset/triangulation.d.ts +1 -0
  132. package/dist/{display → dataset}/triangulation.js +0 -0
  133. package/dist/{display → dataset}/types.d.ts +82 -121
  134. package/dist/dataset/types.js +61 -0
  135. package/dist/dispatcher/hit-test/box-strategies.js +13 -13
  136. package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
  137. package/dist/dispatcher/hit-test/globe-shape.js +5 -4
  138. package/dist/dispatcher/hit-test/service.d.ts +17 -0
  139. package/dist/dispatcher/hit-test/service.js +80 -16
  140. package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
  141. package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
  142. package/dist/dispatcher/hit-test/strategies/image.js +6 -18
  143. package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
  144. package/dist/dispatcher/hit-test/strategies/line.js +9 -2
  145. package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
  146. package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
  147. package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
  148. package/dist/dispatcher/hit-test/strategies/point.js +8 -4
  149. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
  150. package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
  151. package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
  152. package/dist/dispatcher/input-router.js +152 -69
  153. package/dist/dispatcher/normalizer.js +6 -2
  154. package/dist/dispatcher/types.d.ts +6 -1
  155. package/dist/extension/feature-handler.d.ts +1 -182
  156. package/dist/extension/index.d.ts +4 -7
  157. package/dist/extension/renderers.d.ts +1 -208
  158. package/dist/geometry/angle.d.ts +0 -8
  159. package/dist/geometry/angle.js +0 -8
  160. package/dist/geometry/bbox.d.ts +4 -12
  161. package/dist/geometry/bbox.js +4 -12
  162. package/dist/geometry/boolean.d.ts +0 -51
  163. package/dist/geometry/boolean.js +0 -51
  164. package/dist/geometry/buffer.d.ts +0 -26
  165. package/dist/geometry/buffer.js +0 -26
  166. package/dist/geometry/circle.d.ts +0 -9
  167. package/dist/geometry/circle.js +0 -9
  168. package/dist/geometry/coords.d.ts +0 -16
  169. package/dist/geometry/coords.js +0 -16
  170. package/dist/geometry/distance.d.ts +0 -24
  171. package/dist/geometry/distance.js +0 -24
  172. package/dist/geometry/errors.d.ts +21 -36
  173. package/dist/geometry/errors.js +49 -29
  174. package/dist/geometry/geojson.d.ts +81 -0
  175. package/dist/geometry/geojson.js +164 -0
  176. package/dist/geometry/index.d.ts +38 -23
  177. package/dist/geometry/index.js +43 -31
  178. package/dist/geometry/measure.d.ts +0 -27
  179. package/dist/geometry/measure.js +0 -27
  180. package/dist/geometry/predicates.d.ts +0 -9
  181. package/dist/geometry/predicates.js +0 -9
  182. package/dist/geometry/public-bounds.d.ts +26 -0
  183. package/dist/geometry/public-bounds.js +30 -0
  184. package/dist/geometry/public-combine.d.ts +78 -0
  185. package/dist/geometry/public-combine.js +82 -0
  186. package/dist/geometry/public-create.d.ts +54 -0
  187. package/dist/geometry/public-create.js +70 -0
  188. package/dist/geometry/public-measure.d.ts +170 -0
  189. package/dist/geometry/public-measure.js +283 -0
  190. package/dist/geometry/public-predicates.d.ts +54 -0
  191. package/dist/geometry/public-predicates.js +144 -0
  192. package/dist/geometry/public-repair.d.ts +75 -0
  193. package/dist/geometry/public-repair.js +77 -0
  194. package/dist/geometry/simplify.d.ts +0 -7
  195. package/dist/geometry/simplify.js +0 -7
  196. package/dist/geometry/split.d.ts +0 -20
  197. package/dist/geometry/split.js +0 -20
  198. package/dist/geometry/units.d.ts +20 -12
  199. package/dist/geometry/units.js +20 -12
  200. package/dist/index.d.ts +52 -66
  201. package/dist/index.js +6 -18
  202. package/dist/messages.d.ts +7 -7
  203. package/dist/modes/draw/circle.js +83 -207
  204. package/dist/modes/draw/commit-layer.d.ts +5 -16
  205. package/dist/modes/draw/commit-layer.js +2 -13
  206. package/dist/modes/draw/freehand.js +108 -246
  207. package/dist/modes/draw/image.js +4 -2
  208. package/dist/modes/draw/index.d.ts +5 -5
  209. package/dist/modes/draw/index.js +5 -5
  210. package/dist/modes/draw/line.js +18 -354
  211. package/dist/modes/draw/point.js +29 -78
  212. package/dist/modes/draw/polygon.js +23 -368
  213. package/dist/modes/draw/trace-support.d.ts +43 -36
  214. package/dist/modes/draw/trace-support.js +95 -98
  215. package/dist/modes/draw/vertex-drawing.d.ts +1 -0
  216. package/dist/modes/draw/vertex-drawing.js +176 -0
  217. package/dist/modes/handler.d.ts +1 -285
  218. package/dist/modes/manager.d.ts +2 -2
  219. package/dist/modes/manager.js +3 -0
  220. package/dist/modes/select/box-selection.d.ts +3 -3
  221. package/dist/modes/select/box-selection.js +2 -1
  222. package/dist/modes/select/click-handler.d.ts +5 -5
  223. package/dist/modes/select/click-handler.js +22 -20
  224. package/dist/modes/select/cursor-handler.d.ts +2 -2
  225. package/dist/modes/select/drag/intermediate-writes.js +1 -1
  226. package/dist/modes/select/drag/move.js +3 -3
  227. package/dist/modes/select/drag/operation.d.ts +3 -3
  228. package/dist/modes/select/drag/radius.js +5 -4
  229. package/dist/modes/select/drag/transform.d.ts +2 -2
  230. package/dist/modes/select/drag/transform.js +11 -5
  231. package/dist/modes/select/drag/vertex.d.ts +2 -2
  232. package/dist/modes/select/drag/vertex.js +13 -8
  233. package/dist/modes/select/drag-handler.js +44 -25
  234. package/dist/modes/select/mode.js +17 -17
  235. package/dist/modes/select/shortcut-handler.d.ts +8 -8
  236. package/dist/modes/select/shortcut-handler.js +9 -7
  237. package/dist/operations/layer-operations.js +29 -168
  238. package/dist/operations/resize.d.ts +2 -2
  239. package/dist/operations/resize.js +5 -5
  240. package/dist/operations/rotate.js +5 -5
  241. package/dist/operations/selection-operations.d.ts +16 -1
  242. package/dist/operations/selection-operations.js +28 -13
  243. package/dist/operations/shared-vertex.js +4 -2
  244. package/dist/operations/trace-graph.d.ts +0 -18
  245. package/dist/operations/trace-graph.js +0 -18
  246. package/dist/operations/vertex.js +36 -35
  247. package/dist/shared/color.d.ts +1 -0
  248. package/dist/shared/color.js +245 -0
  249. package/dist/shared/config/constants.d.ts +1 -54
  250. package/dist/shared/config/constants.js +1 -58
  251. package/dist/shared/config/feature-style.d.ts +16 -13
  252. package/dist/shared/config/feature-style.js +9 -0
  253. package/dist/shared/config/rendering.d.ts +3 -3
  254. package/dist/shared/config/selection-highlight.d.ts +0 -15
  255. package/dist/shared/config/selection-highlight.js +4 -7
  256. package/dist/shared/config/selection.d.ts +2 -32
  257. package/dist/shared/config/selection.js +0 -18
  258. package/dist/shared/config/topology.d.ts +2 -2
  259. package/dist/shared/config/trace.d.ts +4 -4
  260. package/dist/shared/math/angle.d.ts +1 -1
  261. package/dist/shared/math/angle.js +1 -1
  262. package/dist/shared/math/circle.d.ts +1 -1
  263. package/dist/shared/math/circle.js +1 -1
  264. package/dist/shared/math/distance.d.ts +2 -1
  265. package/dist/shared/math/distance.js +3 -2
  266. package/dist/shared/math/index.d.ts +1 -1
  267. package/dist/shared/math/index.js +1 -1
  268. package/dist/shared/math/transform.d.ts +23 -0
  269. package/dist/shared/math/transform.js +47 -28
  270. package/dist/shared/properties.d.ts +18 -0
  271. package/dist/shared/properties.js +129 -0
  272. package/dist/shared/types/events.d.ts +15 -7
  273. package/dist/shared/types/model.d.ts +109 -159
  274. package/dist/shared/types/style.d.ts +1 -1
  275. package/dist/shared/utils/color.d.ts +2 -36
  276. package/dist/shared/utils/color.js +13 -70
  277. package/dist/shared/utils/coordinates.d.ts +30 -4
  278. package/dist/shared/utils/coordinates.js +56 -10
  279. package/dist/shared/utils/event-emitter.d.ts +1 -262
  280. package/dist/shared/utils/event-emitter.js +4 -3
  281. package/dist/shared/utils/feature-bbox.js +8 -7
  282. package/dist/shared/utils/feature-segments.js +5 -4
  283. package/dist/shared/utils/image.d.ts +0 -4
  284. package/dist/shared/utils/image.js +0 -6
  285. package/dist/shared/utils/name-generator.d.ts +14 -20
  286. package/dist/shared/utils/name-generator.js +20 -3
  287. package/dist/shared/utils/pixel-ratio.d.ts +9 -3
  288. package/dist/shared/utils/pixel-ratio.js +13 -4
  289. package/dist/shared/utils/property.d.ts +7 -50
  290. package/dist/shared/utils/property.js +22 -87
  291. package/dist/snapping/custom-targets.js +21 -4
  292. package/dist/snapping/indicator.js +20 -11
  293. package/dist/snapping/providers/display.d.ts +6 -1
  294. package/dist/snapping/providers/display.js +2 -1
  295. package/dist/snapping/providers/guide.d.ts +3 -43
  296. package/dist/snapping/providers/guide.js +1 -44
  297. package/dist/snapping/providers/intersection.js +1 -1
  298. package/dist/snapping/providers/store.js +3 -3
  299. package/dist/snapping/service.js +18 -7
  300. package/dist/snapping/types.d.ts +9 -35
  301. package/dist/store/draw-store.js +233 -142
  302. package/dist/store/local-visibility.d.ts +11 -6
  303. package/dist/store/local-visibility.js +38 -7
  304. package/dist/store/lock.d.ts +0 -6
  305. package/dist/store/lock.js +0 -6
  306. package/dist/store/memory/change-bus.d.ts +3 -3
  307. package/dist/store/memory/change-bus.js +12 -0
  308. package/dist/store/memory/file-store.d.ts +2 -2
  309. package/dist/store/memory/ui-state.d.ts +1 -51
  310. package/dist/store/memory/ui-state.js +122 -134
  311. package/dist/store/memory.d.ts +1 -8
  312. package/dist/store/memory.js +249 -45
  313. package/dist/store/ordering.d.ts +9 -0
  314. package/dist/store/ordering.js +17 -0
  315. package/dist/store/spatial/spatial-index.d.ts +1 -1
  316. package/dist/store/spatial/spatial-index.js +1 -1
  317. package/dist/store/spatial/store-spatial-index.d.ts +3 -1
  318. package/dist/store/spatial/store-spatial-index.js +9 -3
  319. package/dist/store/store.d.ts +66 -107
  320. package/dist/store/types.d.ts +1 -1
  321. package/dist/store/writable-layer.d.ts +1 -1
  322. package/dist/store/writable-layer.js +2 -2
  323. package/dist/table/builder.d.ts +83 -0
  324. package/dist/table/builder.js +381 -0
  325. package/dist/table/index.d.ts +37 -0
  326. package/dist/table/index.js +5 -0
  327. package/dist/table/packed-rtree.d.ts +1 -0
  328. package/dist/{display → table}/packed-rtree.js +1 -1
  329. package/dist/table/partition.d.ts +1 -0
  330. package/dist/{display → table}/partition.js +3 -3
  331. package/dist/table/prepare.d.ts +44 -0
  332. package/dist/table/prepare.js +136 -0
  333. package/dist/table/table.d.ts +1 -0
  334. package/dist/{display/columnar → table}/table.js +29 -25
  335. package/dist/{display/columnar → table}/types.d.ts +68 -72
  336. package/dist/table/types.js +3 -0
  337. package/dist/view/coordinator.js +4 -3
  338. package/dist/view/feature-companion.d.ts +13 -7
  339. package/dist/view/feature-companion.js +11 -3
  340. package/dist/view/globe-subdivision.js +3 -3
  341. package/dist/view/layer/attach.d.ts +1 -1
  342. package/dist/view/layer/attach.js +1 -1
  343. package/dist/view/layer/custom-layer.js +40 -11
  344. package/dist/view/layer/display-list.js +2 -1
  345. package/dist/view/layer/drape-planner.d.ts +2 -2
  346. package/dist/view/layer/frame-render.d.ts +3 -3
  347. package/dist/view/layer/frame-render.js +7 -2
  348. package/dist/view/layer/frame-state.d.ts +6 -6
  349. package/dist/view/layer/index.d.ts +2 -2
  350. package/dist/view/layer/index.js +1 -1
  351. package/dist/view/layer/render.d.ts +4 -4
  352. package/dist/view/layer/render.js +3 -8
  353. package/dist/view/layer/renderers.d.ts +2 -2
  354. package/dist/view/layer/renderers.js +1 -1
  355. package/dist/view/layer/slot-manager.d.ts +2 -2
  356. package/dist/view/layer/slot-manager.js +4 -4
  357. package/dist/view/layer/slots.d.ts +2 -2
  358. package/dist/view/layer/slots.js +1 -1
  359. package/dist/view/layer/store-retained-bbox.js +3 -2
  360. package/dist/view/layer/store-retained-classify.d.ts +5 -7
  361. package/dist/view/layer/store-retained-classify.js +19 -7
  362. package/dist/view/layer/store-retained-collect.js +8 -7
  363. package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
  364. package/dist/view/layer/store-retained-coord-patch.js +13 -4
  365. package/dist/view/layer/store-retained-immediate.d.ts +3 -3
  366. package/dist/view/layer/store-retained-immediate.js +3 -8
  367. package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
  368. package/dist/view/layer/store-retained.d.ts +2 -2
  369. package/dist/view/layer/store-retained.js +1 -1
  370. package/dist/view/renderers/batch-manager.js +8 -7
  371. package/dist/view/renderers/drawer.js +21 -15
  372. package/dist/view/renderers/image.js +13 -39
  373. package/dist/view/renderers/line/line-types.d.ts +3 -3
  374. package/dist/view/renderers/line/sdf-line.js +3 -1
  375. package/dist/view/renderers/point/billboard-depth.js +1 -1
  376. package/dist/view/renderers/point/point-instance.js +1 -1
  377. package/dist/view/renderers/point/point-shape.js +2 -2
  378. package/dist/view/renderers/point/point-style.js +48 -4
  379. package/dist/view/renderers/polygon/batch.js +1 -2
  380. package/dist/view/renderers/polygon/fill.js +3 -1
  381. package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
  382. package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
  383. package/dist/view/renderers/stroke.js +3 -1
  384. package/dist/view/shaders/helpers.d.ts +2 -42
  385. package/dist/view/shaders/helpers.js +0 -6
  386. package/dist/view/shaders/projection.d.ts +15 -7
  387. package/dist/view/shaders/projection.js +23 -6
  388. package/dist/view/shaders/quad.d.ts +16 -12
  389. package/dist/view/shaders/quad.js +34 -13
  390. package/dist/view/style-rule.d.ts +5 -42
  391. package/dist/view/style-rule.js +20 -44
  392. package/dist/view/terrain/binding.d.ts +1 -0
  393. package/dist/view/terrain/binding.js +29 -0
  394. package/dist/view/terrain/context.d.ts +3 -4
  395. package/dist/view/terrain/context.js +4 -5
  396. package/dist/view/terrain/drape/geometry.js +1 -1
  397. package/dist/view/terrain/drape/pass.d.ts +1 -1
  398. package/dist/view/terrain/drape/pass.js +8 -7
  399. package/dist/view/terrain/polygon.d.ts +9 -5
  400. package/dist/view/terrain/polygon.js +16 -2
  401. package/dist/view/terrain/state.d.ts +1 -1
  402. package/dist/view/terrain/state.js +1 -1
  403. package/dist/view/terrain/tessellation.d.ts +2 -2
  404. package/dist/view/terrain/tessellation.js +1 -1
  405. package/dist/view/ui/auxiliary-handles.d.ts +6 -29
  406. package/dist/view/ui/bounds.js +8 -12
  407. package/dist/view/ui/handle-test.js +2 -2
  408. package/dist/view/ui/handle-thinning.js +17 -17
  409. package/dist/view/ui/handles.js +21 -13
  410. package/dist/view/ui/helper.d.ts +1 -1
  411. package/dist/view/ui/helper.js +1 -1
  412. package/dist/view/ui/index.d.ts +1 -1
  413. package/dist/view/ui/selection-scope.js +4 -2
  414. package/dist/view/ui/selection-ui/bounding-box.js +6 -6
  415. package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
  416. package/dist/view/ui/selection-ui/extension-registry.js +70 -7
  417. package/dist/view/ui/selection-ui/index.d.ts +2 -2
  418. package/dist/view/ui/selection-ui/index.js +1 -1
  419. package/dist/view/ui/selection-ui/renderer.js +15 -38
  420. package/dist/view/ui/selection-ui/types.d.ts +17 -2
  421. package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
  422. package/dist/view/ui/selection-ui-drawer.js +63 -2
  423. package/dist/view/ui/tentative.js +1 -1
  424. package/dist/webgl/index.d.ts +65 -0
  425. package/dist/webgl/index.js +62 -0
  426. package/package.json +20 -9
  427. package/dist/api/api.d.ts +0 -1259
  428. package/dist/api/api.js +0 -86
  429. package/dist/api/context.d.ts +0 -173
  430. package/dist/api/display-api.js +0 -23
  431. package/dist/api/event-api.d.ts +0 -13
  432. package/dist/api/event-api.js +0 -17
  433. package/dist/api/extension-api.d.ts +0 -46
  434. package/dist/api/extension-api.js +0 -85
  435. package/dist/api/feature-api.d.ts +0 -11
  436. package/dist/api/feature-api.js +0 -101
  437. package/dist/api/geometry/apply.d.ts +0 -51
  438. package/dist/api/geometry/boolean.d.ts +0 -28
  439. package/dist/api/geometry/boolean.js +0 -65
  440. package/dist/api/geometry/types.d.ts +0 -31
  441. package/dist/api/geometry-operations.d.ts +0 -162
  442. package/dist/api/geometry-operations.js +0 -94
  443. package/dist/api/group-api.d.ts +0 -10
  444. package/dist/api/group-api.js +0 -78
  445. package/dist/api/import-export/constants.d.ts +0 -29
  446. package/dist/api/import-export/constants.js +0 -40
  447. package/dist/api/import-export/file-name.d.ts +0 -10
  448. package/dist/api/import-export/file-name.js +0 -20
  449. package/dist/api/import-export/geojson-export.d.ts +0 -19
  450. package/dist/api/import-export/image-import.d.ts +0 -12
  451. package/dist/api/import-export/image-import.js +0 -53
  452. package/dist/api/import-export/index.d.ts +0 -9
  453. package/dist/api/import-export/index.js +0 -107
  454. package/dist/api/import-export/native-format.d.ts +0 -15
  455. package/dist/api/import-export/style-validation.d.ts +0 -27
  456. package/dist/api/import-export/style-validation.js +0 -49
  457. package/dist/api/import-export/types.d.ts +0 -26
  458. package/dist/api/index.d.ts +0 -15
  459. package/dist/api/index.js +0 -3
  460. package/dist/api/input-api.d.ts +0 -158
  461. package/dist/api/input-api.js +0 -144
  462. package/dist/api/instance-api.d.ts +0 -38
  463. package/dist/api/instance-api.js +0 -136
  464. package/dist/api/layer-api.d.ts +0 -12
  465. package/dist/api/layer-api.js +0 -62
  466. package/dist/api/selection-api.d.ts +0 -7
  467. package/dist/api/selection-api.js +0 -78
  468. package/dist/api/snapping-api.d.ts +0 -125
  469. package/dist/api/snapping-api.js +0 -50
  470. package/dist/api/topology-api.d.ts +0 -30
  471. package/dist/api/topology-api.js +0 -16
  472. package/dist/api/tracing-api.d.ts +0 -31
  473. package/dist/api/tracing-api.js +0 -16
  474. package/dist/dispatcher/hit-test/index.d.ts +0 -14
  475. package/dist/dispatcher/hit-test/index.js +0 -9
  476. package/dist/dispatcher/index.d.ts +0 -15
  477. package/dist/dispatcher/index.js +0 -3
  478. package/dist/display/columnar/index.d.ts +0 -12
  479. package/dist/display/columnar/index.js +0 -13
  480. package/dist/display/columnar/prepare.d.ts +0 -42
  481. package/dist/display/columnar/prepare.js +0 -116
  482. package/dist/display/index.d.ts +0 -13
  483. package/dist/display/types.js +0 -43
  484. package/dist/maplibre-gl-draw.d.ts +0 -47
  485. package/dist/modes/cursor.js +0 -72
  486. package/dist/modes/index.d.ts +0 -7
  487. package/dist/operations/index.d.ts +0 -9
  488. package/dist/operations/index.js +0 -3
  489. package/dist/plugins/index.d.ts +0 -10
  490. package/dist/plugins/mutation-hooks.d.ts +0 -28
  491. package/dist/plugins/mutation-hooks.js +0 -84
  492. package/dist/plugins/plugin-context.js +0 -367
  493. package/dist/plugins/plugin-manager.d.ts +0 -103
  494. package/dist/plugins/plugin-manager.js +0 -316
  495. package/dist/plugins/plugin.d.ts +0 -529
  496. package/dist/shared/config/index.d.ts +0 -17
  497. package/dist/shared/config/index.js +0 -8
  498. package/dist/shared/utils/index.d.ts +0 -15
  499. package/dist/shared/utils/index.js +0 -24
  500. package/dist/snapping/index.d.ts +0 -14
  501. package/dist/snapping/index.js +0 -4
  502. package/dist/store/change-merger.js +0 -102
  503. package/dist/store/event-bridge.js +0 -161
  504. package/dist/store/index.d.ts +0 -12
  505. package/dist/store/index.js +0 -4
  506. package/dist/view/index.d.ts +0 -47
  507. package/dist/view/index.js +0 -20
  508. /package/dist/api/{geometry/types.js → datasets.js} +0 -0
  509. /package/dist/api/{import-export/types.js → document.js} +0 -0
  510. /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
  511. /package/dist/{display/index.js → api/events.js} +0 -0
  512. /package/dist/{modes/index.js → api/extension/context.js} +0 -0
  513. /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
  514. /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
  515. /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
  516. /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
  517. /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
  518. /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
  519. /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
  520. /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
  521. /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
  522. /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
  523. /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
  524. /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
  525. /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
  526. /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
  527. /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
  528. /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
  529. /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
  530. /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
  531. /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
  532. /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
  533. /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
  534. /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
  535. /package/dist/{display → dataset}/chunk-set.js +0 -0
  536. /package/dist/{display → dataset}/dataset.d.ts +0 -0
  537. /package/dist/{display → dataset}/manager.js +0 -0
  538. /package/dist/{display → dataset}/provider.js +0 -0
  539. /package/dist/{display → dataset}/selection.d.ts +0 -0
  540. /package/dist/{display → dataset}/selection.js +0 -0
@@ -1,65 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- import { commitResult, emitApplied } from './apply.js';
4
- import { currentSelectionIds, isAreaFeature, resolveTargetFeatures, toAreaCoordinates, toResultGeometry, } from './targets.js';
5
- /**
6
- * The common path that runs an operation on the area types and replaces the inputs with the
7
- * result.
8
- *
9
- * @param inputs The targets ordered in z order (the tail is the frontmost)
10
- * @param compute The geometric operation that receives the area coordinates in the same order
11
- * as inputs and returns the result
12
- */
13
- export function runAreaOperation(deps, operation, inputs, compute) {
14
- const inputIds = inputs.map((feature) => feature.id);
15
- const areas = [];
16
- for (const feature of inputs) {
17
- const area = toAreaCoordinates(feature);
18
- if (area === null)
19
- return null;
20
- areas.push(area);
21
- }
22
- const geometry = toResultGeometry(compute(areas));
23
- if (geometry === null) {
24
- // An empty result (an intersection that does not overlap, a punch-out where everything was
25
- // subtracted). The inputs are not changed at all; only the notification is emitted.
26
- emitApplied(deps.eventEmitter, {
27
- operation,
28
- inputIds,
29
- resultId: null,
30
- resultIds: [],
31
- status: 'empty',
32
- });
33
- return null;
34
- }
35
- // The style, the properties and the placement are inherited from the frontmost input.
36
- const anchor = inputs[inputs.length - 1];
37
- const resultId = commitResult(deps, { anchor, removedIds: inputIds, geometry });
38
- emitApplied(deps.eventEmitter, {
39
- operation,
40
- inputIds,
41
- resultId,
42
- resultIds: [resultId],
43
- status: 'applied',
44
- });
45
- return resultId;
46
- }
47
- /**
48
- * Resolves the targets of subtract.
49
- *
50
- * When targetId is omitted, it is "subtract the group of frontmost features from the backmost
51
- * one". When it is given explicitly, that feature is added to the targets even if it is not
52
- * included in the list of targets (ids / the selection).
53
- */
54
- export function resolveSubtractInputs(store, targetId, ids) {
55
- const baseIds = ids ?? currentSelectionIds(store);
56
- const wanted = targetId === undefined ? baseIds : [...new Set([targetId, ...baseIds])];
57
- const inputs = resolveTargetFeatures(store, wanted, isAreaFeature);
58
- if (inputs.length < 2)
59
- return null;
60
- // By default the backmost in z order is the side that is subtracted from.
61
- const targetIndex = targetId === undefined ? 0 : inputs.findIndex((feature) => feature.id === targetId);
62
- if (targetIndex < 0)
63
- return null;
64
- return { inputs, targetIndex };
65
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * The option and dependency types of the draw.geometry namespace
3
- */
4
- import type { EventEmitter } from '../../shared/utils/event-emitter.js';
5
- import type { Store } from '../../store/store.js';
6
- /**
7
- * The options of `draw.geometry.buffer` (see {@link GeometryOperations.buffer})
8
- *
9
- * @example
10
- * ```typescript
11
- * draw.geometry.buffer({ distanceMeters: 250, segments: 32 });
12
- * ```
13
- */
14
- export interface GeometryBufferOptions {
15
- /**
16
- * The buffer distance (in meters). A negative value shrinks (area types only); 0 or a value
17
- * that is not finite does nothing
18
- */
19
- distanceMeters: number;
20
- /**
21
- * The number of segments of a full circle for the rounded parts (64 by default). It is
22
- * rounded down and clamped to 3-1024
23
- */
24
- segments?: number;
25
- }
26
- /** The dependencies of the geometry operations (a bare Store is enough for tests) */
27
- export interface GeometryApiDeps {
28
- store: Store;
29
- eventEmitter: EventEmitter;
30
- generateFeatureId: () => string;
31
- }
@@ -1,162 +0,0 @@
1
- import type { MapLibreGLDraw } from './api.js';
2
- import type { GeometryApiDeps, GeometryBufferOptions } from './geometry/types.js';
3
- export type { GeometryApiDeps, GeometryBufferOptions } from './geometry/types.js';
4
- /**
5
- * The geometry operations of a draw instance, reached as `draw.geometry`.
6
- *
7
- * When the arguments are omitted, the current feature selection is the target (a group or
8
- * layer selection gives no target). Locked features (either the feature itself, the group it
9
- * belongs to, or the layer it belongs to) and hidden features (by the shared visible flag or
10
- * by local hiding) are excluded from the targets, and nothing happens while read-only.
11
- *
12
- * Each operation is one transaction, so one undo reverts it, and the result features become
13
- * selected. When it ran, `draw.geometry.applied` reports the inputs and the results, with
14
- * `status: 'empty'` when the result had no area and nothing changed. The computation is done
15
- * by the pure functions of `@sakuzu/maplibre-gl-draw/geometry`.
16
- *
17
- * The boolean editing operations (union / subtract / intersect) take the area types
18
- * (Polygon / MultiPolygon / Circle) and need at least two targets. They replace the inputs
19
- * with one feature, a Polygon or else a MultiPolygon (a Circle becomes a 64-segment polygon
20
- * first), which takes the style, the properties and the place of the frontmost input. The
21
- * buffer and the split instead return an array of IDs, since they can create several
22
- * features.
23
- *
24
- * @example
25
- * ```typescript
26
- * draw.on('draw.geometry.applied', ({ operation, status, resultIds }) => {
27
- * if (status === 'empty') console.log(operation, 'left nothing');
28
- * });
29
- * const merged = draw.geometry.union(); // the selected areas
30
- * ```
31
- */
32
- export interface GeometryOperations {
33
- /**
34
- * Merges the targets into a single feature.
35
- *
36
- * Areas that do not touch give a MultiPolygon.
37
- *
38
- * @param ids The IDs of the target features. When omitted, the current selection
39
- * @returns The ID of the result feature. null when there are fewer than 2 targets
40
- * @throws {@link geometry!GeometryError} when the computation fails on the input (a degenerate or
41
- * malformed ring, for example); nothing changes
42
- *
43
- * @example
44
- * ```typescript
45
- * const id = draw.geometry.union([parcelA, parcelB]);
46
- * ```
47
- */
48
- union(ids?: string[]): string | null;
49
- /**
50
- * Punches out: subtracts the other targets from the target.
51
- *
52
- * When `targetId` is given it is a target even when `ids` does not list it. The result
53
- * still takes the style and the properties of the frontmost input, not of the target.
54
- *
55
- * @param targetId The ID of the feature that is subtracted from. When omitted, the
56
- * backmost of the targets
57
- * @param ids The IDs of the target features. When omitted, the current selection
58
- * @returns The ID of the result feature. null when there are fewer than 2 targets or the
59
- * result is empty
60
- * @throws {@link geometry!GeometryError} when the computation fails on the input; nothing changes
61
- *
62
- * @example
63
- * ```typescript
64
- * // Subtract the selected features in front from the backmost one
65
- * draw.geometry.subtract();
66
- * // Name the feature to subtract from
67
- * draw.geometry.subtract(parcelId, [parcelId, roadId]);
68
- * ```
69
- */
70
- subtract(targetId?: string, ids?: string[]): string | null;
71
- /**
72
- * Keeps the part that is common to all the targets.
73
- *
74
- * @param ids The IDs of the target features. When omitted, the current selection
75
- * @returns The ID of the result feature. null when there are fewer than 2 targets or they
76
- * do not overlap
77
- * @throws {@link geometry!GeometryError} when the computation fails on the input; nothing changes
78
- *
79
- * @example
80
- * ```typescript
81
- * const id = draw.geometry.intersect();
82
- * if (id === null) {
83
- * // no overlap, or fewer than two targets
84
- * }
85
- * ```
86
- */
87
- intersect(ids?: string[]): string | null;
88
- /**
89
- * Creates the area within the given distance of the targets as new features.
90
- *
91
- * The inputs remain, and one result is created per input, just in front of it, with its
92
- * style and properties. The targets are all geometries
93
- * (Point / MultiPoint / LineString / MultiLineString / Polygon / MultiPolygon / Circle),
94
- * and every other type is excluded from the targets. It works from a single target.
95
- * A negative value (shrinking) applies to the area types only; an input that is a point or
96
- * a line given a negative value produces no result, and parts of an area narrower than twice
97
- * the distance disappear. A Circle stays a Circle whose radius grows or shrinks. The
98
- * distance is laid out along great circles, so it holds at any latitude. A distance of 0 or
99
- * one that is not finite does nothing.
100
- *
101
- * @param options The distance (in meters) and the number of segments
102
- * @returns The IDs of the result features that were created (in z order). An empty array
103
- * when nothing was created
104
- * @throws {@link geometry!GeometryError} when the computation fails on the input; nothing changes
105
- *
106
- * @example
107
- * ```typescript
108
- * // The area within 100 m of the selected features
109
- * const ids = draw.geometry.buffer({ distanceMeters: 100 });
110
- * // Shrink two areas by 50 m
111
- * draw.geometry.buffer([parcelA, parcelB], { distanceMeters: -50 });
112
- * ```
113
- */
114
- buffer(options: GeometryBufferOptions): string[];
115
- /**
116
- * Creates the area within the given distance of the named features as new features (see
117
- * the other overload for the details).
118
- *
119
- * @param ids The IDs of the target features. When undefined, the current selection
120
- * @param options The distance (in meters) and the number of segments
121
- * @returns The IDs of the result features that were created (in z order). An empty array
122
- * when nothing was created
123
- */
124
- buffer(ids: string[] | undefined, options: GeometryBufferOptions): string[];
125
- /**
126
- * Cuts a polygon with a line and replaces it with the several features that result from the
127
- * split.
128
- *
129
- * The targets are one polygon (Polygon / MultiPolygon / Circle) and one line (LineString /
130
- * MultiLineString / Freehand). The side that is omitted is picked from the current
131
- * selection by type; when it does not come down to exactly one of each, nothing happens and
132
- * no event is emitted. The cutting line is not deleted and remains, and the results inherit
133
- * the place, the style and the properties of the original polygon.
134
- *
135
- * When the line does not pass through the polygon (it does not intersect, it stops inside
136
- * the polygon, or it only touches), nothing is changed. When the line crosses several times
137
- * the polygon is split into three or more, and when only a part of a MultiPolygon is cut the
138
- * parts that were not cut also become a single feature. A hole stays on the side that holds
139
- * it.
140
- *
141
- * @param targetId The ID of the polygon feature to be cut. When omitted, the selected polygon
142
- * @param lineId The ID of the line feature that cuts. When omitted, the selected line
143
- * @returns The IDs of the result features that were created (in z order). An empty array
144
- * when nothing was split
145
- * @throws {@link geometry!GeometryError} when the computation fails on the input; nothing changes
146
- *
147
- * @example
148
- * ```typescript
149
- * // With one area and one line selected
150
- * const ids = draw.geometry.split();
151
- * // Or by name
152
- * draw.geometry.split(parcelId, cutLineId);
153
- * ```
154
- */
155
- split(targetId?: string, lineId?: string): string[];
156
- }
157
- /** The `geometry` namespace on its own (what `createGeometryApi` returns) */
158
- export type GeometryApi = Pick<MapLibreGLDraw, 'geometry'>;
159
- /**
160
- * Creates the draw.geometry namespace.
161
- */
162
- export declare function createGeometryApi(deps: GeometryApiDeps): GeometryApi;
@@ -1,94 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Geometry API (the draw.geometry namespace)
5
- *
6
- * Provides the boolean editing operations (union / subtract / intersect), the buffer (buffer)
7
- * and the split (split) on the selected features. The computation itself lives in the pure
8
- * functions of the geometry module (src/geometry); this file and api/geometry/ are the
9
- * integration layer that connects the selection, the transactions, the spatial index and the
10
- * events.
11
- *
12
- * This file holds the namespace and its entry checks. The steps live in api/geometry/.
13
- *
14
- * targets.ts which features each operation accepts, feature <-> geometry module input and
15
- * result, and resolveTargetFeatures (selection / z order / lock / hidden)
16
- * apply.ts the common part: applyResult places one result, commitResult wraps it in one
17
- * transaction and moves the selection, emitApplied emits draw.geometry.applied
18
- * boolean.ts union / subtract / intersect on the area types
19
- * buffer.ts the buffer (keeps the inputs, one result per input)
20
- * split.ts the split of a polygon by a line
21
- * types.ts the option and dependency types
22
- */
23
- import { differenceAll, intersectionAll, unionAll } from '../geometry/index.js';
24
- import { resolveSubtractInputs, runAreaOperation } from './geometry/boolean.js';
25
- import { runBuffer } from './geometry/buffer.js';
26
- import { runSplit } from './geometry/split.js';
27
- import { isAreaFeature, isBufferableFeature, isSplitLineFeature, resolveTargetFeatures, } from './geometry/targets.js';
28
- /**
29
- * Creates the draw.geometry namespace.
30
- */
31
- export function createGeometryApi(deps) {
32
- const { store } = deps;
33
- // While readOnly, writes to the Store become a no-op, so an operation would report results
34
- // that were never created. It is rejected at the entry point.
35
- const blocked = () => store.isReadOnly();
36
- return {
37
- geometry: {
38
- union(ids) {
39
- if (blocked())
40
- return null;
41
- const inputs = resolveTargetFeatures(store, ids, isAreaFeature);
42
- if (inputs.length < 2)
43
- return null;
44
- return runAreaOperation(deps, 'union', inputs, (areas) => unionAll(areas));
45
- },
46
- subtract(targetId, ids) {
47
- if (blocked())
48
- return null;
49
- const resolved = resolveSubtractInputs(store, targetId, ids);
50
- if (resolved === null)
51
- return null;
52
- const { inputs, targetIndex } = resolved;
53
- return runAreaOperation(deps, 'subtract', inputs, (areas) => differenceAll(areas[targetIndex], areas.filter((_, index) => index !== targetIndex)));
54
- },
55
- intersect(ids) {
56
- if (blocked())
57
- return null;
58
- const inputs = resolveTargetFeatures(store, ids, isAreaFeature);
59
- if (inputs.length < 2)
60
- return null;
61
- return runAreaOperation(deps, 'intersect', inputs, (areas) => intersectionAll(areas));
62
- },
63
- buffer(idsOrOptions, maybeOptions) {
64
- // It accepts the two forms buffer(options) and buffer(ids, options).
65
- const ids = Array.isArray(idsOrOptions) ? idsOrOptions : undefined;
66
- const options = Array.isArray(idsOrOptions) ? maybeOptions : idsOrOptions;
67
- if (blocked() || options === undefined)
68
- return [];
69
- // A distance of 0 is "a copy of the original shape", a non-finite value is meaningless.
70
- // The operation itself is not performed.
71
- const { distanceMeters } = options;
72
- if (!Number.isFinite(distanceMeters) || distanceMeters === 0)
73
- return [];
74
- const inputs = resolveTargetFeatures(store, ids, isBufferableFeature);
75
- // Unlike the boolean operations, it works from a single target.
76
- if (inputs.length === 0)
77
- return [];
78
- return runBuffer(deps, inputs, options);
79
- },
80
- split(targetId, lineId) {
81
- if (blocked())
82
- return [];
83
- // The polygon and the line are resolved separately. When omitted, both are picked from
84
- // the current selection by type.
85
- const areas = resolveTargetFeatures(store, targetId === undefined ? undefined : [targetId], isAreaFeature);
86
- const lines = resolveTargetFeatures(store, lineId === undefined ? undefined : [lineId], isSplitLineFeature);
87
- // When it does not come down to exactly one polygon and one line, nothing is done.
88
- if (areas.length !== 1 || lines.length !== 1)
89
- return [];
90
- return runSplit(deps, areas[0], lines[0]);
91
- },
92
- },
93
- };
94
- }
@@ -1,10 +0,0 @@
1
- import type { AutoNameGenerator } from '../shared/utils/name-generator.js';
2
- import type { Store } from '../store/store.js';
3
- import type { MapLibreGLDraw } from './api.js';
4
- export type GroupApi = Pick<MapLibreGLDraw, 'getAllGroups' | 'getGroup' | 'addGroup' | 'updateGroup' | 'deleteGroup' | 'reorderInGroup' | 'addFeatureToGroup' | 'removeFeatureFromGroup' | 'groupSelection' | 'ungroupSelection' | 'ungroupGroup'>;
5
- export interface GroupApiDeps {
6
- store: Store;
7
- generateFeatureId: () => string;
8
- autoNameGenerator: AutoNameGenerator;
9
- }
10
- export declare function createGroupApi(deps: GroupApiDeps): GroupApi;
@@ -1,78 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Group API
5
- *
6
- * Provides the Group CRUD and grouping operations of MapLibreGLDraw.
7
- */
8
- import { addFeatureToGroup as addFeatureToGroupImpl, groupSelection as groupSelectionImpl, removeFeatureFromGroup as removeFeatureFromGroupImpl, ungroupGroup as ungroupGroupImpl, ungroupSelection as ungroupSelectionImpl, } from '../operations/layer-operations.js';
9
- import { isGroupLocked } from '../store/lock.js';
10
- import { onlyLockOrVisibility } from './feature-api.js';
11
- export function createGroupApi(deps) {
12
- const { store, generateFeatureId, autoNameGenerator } = deps;
13
- return {
14
- getAllGroups() {
15
- return store.getAllGroups();
16
- },
17
- getGroup(id) {
18
- return store.getGroup(id);
19
- },
20
- addGroup(featureIds, layerId, name) {
21
- // While read-only every write below would be refused: report it as null up front
22
- if (store.isReadOnly())
23
- return null;
24
- const id = generateFeatureId();
25
- const groupName = name || autoNameGenerator.generateGroupName();
26
- const group = {
27
- id,
28
- name: groupName,
29
- featureIds: [...featureIds],
30
- locked: false,
31
- visible: true,
32
- };
33
- // Remove the features from the order of the layer
34
- const layer = store.getLayer(layerId);
35
- if (layer) {
36
- const newOrder = layer.order.filter((itemId) => !featureIds.includes(itemId));
37
- // Add the group to the order
38
- newOrder.push(id);
39
- store.updateLayer(layerId, { order: newOrder });
40
- }
41
- // Create the group (this sets groupId on the features)
42
- return store.createGroup(group) ? id : null;
43
- },
44
- updateGroup(id, updates) {
45
- const group = store.getGroup(id);
46
- if (group && !onlyLockOrVisibility(updates)) {
47
- // While locked (itself or its layer), reject any change other than locked/visible
48
- // (full protection)
49
- const findLayerOfGroup = (gid) => store.getAllLayers().find((l) => l.order.includes(gid));
50
- if (isGroupLocked(group, findLayerOfGroup))
51
- return false;
52
- }
53
- return store.updateGroup(id, updates);
54
- },
55
- deleteGroup(id) {
56
- // The Store puts the features of the group in its place in the order of its layer
57
- return store.deleteGroup(id);
58
- },
59
- reorderInGroup(featureId, groupId, newIndex) {
60
- return store.reorderInGroup(featureId, groupId, newIndex);
61
- },
62
- addFeatureToGroup(featureId, groupId, index) {
63
- addFeatureToGroupImpl(store, featureId, groupId, index);
64
- },
65
- removeFeatureFromGroup(featureId) {
66
- removeFeatureFromGroupImpl(store, featureId);
67
- },
68
- groupSelection() {
69
- return groupSelectionImpl(store, generateFeatureId, autoNameGenerator);
70
- },
71
- ungroupSelection() {
72
- ungroupSelectionImpl(store);
73
- },
74
- ungroupGroup(groupId) {
75
- ungroupGroupImpl(store, groupId);
76
- },
77
- };
78
- }
@@ -1,29 +0,0 @@
1
- /**
2
- * Constants related to Import/Export
3
- */
4
- /**
5
- * Version of the native format
6
- *
7
- * Semantic versioning. A minor version only adds fields; a major version can change the
8
- * meaning of any field, and data of another major version is rejected. 2.0.0 made the
9
- * stacking order (`layerOrder`) a required part of the data.
10
- */
11
- export declare const NATIVE_VERSION = "2.0.0";
12
- /** Prefix of the GeoJSON properties that hold this library's own data */
13
- export declare const GEOJSON_PREFIX = "maplibre-gl-draw:";
14
- /**
15
- * The properties this library itself keeps in `Feature.properties`
16
- *
17
- * They are stored without a prefix in the native format, and the
18
- * `maplibre-gl-draw:` prefix is added when exporting to GeoJSON. Every other property, those
19
- * of the host and of extensions included, is written as a plain key. `name` and `description`
20
- * are plain keys too: other GIS tools read them as the name and the description.
21
- */
22
- export declare const LIBRARY_PROPERTIES: ReadonlySet<string>;
23
- /**
24
- * The number of decimal places the GeoJSON export keeps in a coordinate
25
- *
26
- * 1e-7 degrees is about 1.1 cm at the equator, finer than any edit on the map, and it keeps
27
- * the file from carrying the noise digits of floating-point arithmetic (RFC 7946, 11.2).
28
- */
29
- export declare const GEOJSON_COORDINATE_DECIMALS = 7;
@@ -1,40 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Constants related to Import/Export
5
- */
6
- /**
7
- * Version of the native format
8
- *
9
- * Semantic versioning. A minor version only adds fields; a major version can change the
10
- * meaning of any field, and data of another major version is rejected. 2.0.0 made the
11
- * stacking order (`layerOrder`) a required part of the data.
12
- */
13
- export const NATIVE_VERSION = '2.0.0';
14
- /** Prefix of the GeoJSON properties that hold this library's own data */
15
- export const GEOJSON_PREFIX = 'maplibre-gl-draw:';
16
- /**
17
- * The properties this library itself keeps in `Feature.properties`
18
- *
19
- * They are stored without a prefix in the native format, and the
20
- * `maplibre-gl-draw:` prefix is added when exporting to GeoJSON. Every other property, those
21
- * of the host and of extensions included, is written as a plain key. `name` and `description`
22
- * are plain keys too: other GIS tools read them as the name and the description.
23
- */
24
- export const LIBRARY_PROPERTIES = new Set([
25
- // Common
26
- 'createdZoom',
27
- 'rotation',
28
- 'scale',
29
- // Image
30
- 'imageFileId',
31
- 'imageWidth',
32
- 'imageHeight',
33
- ]);
34
- /**
35
- * The number of decimal places the GeoJSON export keeps in a coordinate
36
- *
37
- * 1e-7 degrees is about 1.1 cm at the equator, finer than any edit on the map, and it keeps
38
- * the file from carrying the noise digits of floating-point arithmetic (RFC 7946, 11.2).
39
- */
40
- export const GEOJSON_COORDINATE_DECIMALS = 7;
@@ -1,10 +0,0 @@
1
- /**
2
- * Generation of the export file name
3
- */
4
- import type { Metadata } from '../../store/types.js';
5
- /**
6
- * Builds the export file name
7
- *
8
- * Format: `{title}_{YYYY-MM-DD}_{HHMMSS}{suffix}`
9
- */
10
- export declare function buildExportFileName(metadata: Metadata, suffix: string): string;
@@ -1,20 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Replaces characters that cannot be used in a file name with underscores
5
- */
6
- function sanitize(name) {
7
- return name.replace(/[<>:"/\\|?*]/g, '_');
8
- }
9
- /**
10
- * Builds the export file name
11
- *
12
- * Format: `{title}_{YYYY-MM-DD}_{HHMMSS}{suffix}`
13
- */
14
- export function buildExportFileName(metadata, suffix) {
15
- const title = sanitize(metadata.title || 'drawing');
16
- const date = new Date();
17
- const dateStr = date.toISOString().slice(0, 10);
18
- const timeStr = date.toTimeString().slice(0, 8).replace(/:/g, '');
19
- return `${title}_${dateStr}_${timeStr}${suffix}`;
20
- }
@@ -1,19 +0,0 @@
1
- import type { Store } from '../../store/store.js';
2
- import type { ExportOptions, Feature } from '../../store/types.js';
3
- /**
4
- * Converts an internal Feature into a GeoJSON Feature
5
- *
6
- * Conforms to docs/reference/data-format.md:
7
- * - includes the metadata in properties with the maplibre-gl-draw: prefix, and writes
8
- * name and description as plain keys
9
- * - rounds the positions and orients the rings (see the top of this file)
10
- * - a Point is written out as a Point geometry
11
- * - the Multi types (MultiPoint / MultiLineString / MultiPolygon) are written out as they are
12
- * - an Image is written out as a Point geometry and identified by featureType
13
- * - for an Image feature, the image data is embedded as Base64
14
- */
15
- export declare function convertFeatureToGeoJSON(feature: Feature, store: Store): GeoJSON.Feature<GeoJSON.Geometry> | null;
16
- /**
17
- * Exports the current data as a GeoJSON FeatureCollection
18
- */
19
- export declare function exportGeoJSON(store: Store, options?: ExportOptions): GeoJSON.FeatureCollection<GeoJSON.Geometry>;
@@ -1,12 +0,0 @@
1
- import type { AutoNameGenerator } from '../../shared/utils/name-generator.js';
2
- import type { Store } from '../../store/store.js';
3
- import type { LoadOptions, LoadResult } from '../../store/types.js';
4
- /**
5
- * Imports an image file and creates an Image feature
6
- */
7
- export declare function loadImage(file: File, options: LoadOptions, deps: {
8
- store: Store;
9
- autoNameGenerator: AutoNameGenerator;
10
- generateFeatureId: () => string;
11
- getCurrentLayerId: () => string;
12
- }): Promise<LoadResult>;
@@ -1,53 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Import of image files (creates an Image feature)
5
- */
6
- import { processImageFile } from '../../shared/utils/image.js';
7
- /**
8
- * Imports an image file and creates an Image feature
9
- */
10
- export async function loadImage(file, options, deps) {
11
- if (!options.coordinate) {
12
- throw new Error('Image files require coordinate option');
13
- }
14
- const { store, autoNameGenerator, generateFeatureId, getCurrentLayerId } = deps;
15
- const processed = await processImageFile(file);
16
- // Create the FileData
17
- const fileId = generateFeatureId();
18
- const fileData = {
19
- id: fileId,
20
- mimeType: processed.mimeType,
21
- dataURL: processed.dataUrl,
22
- };
23
- // Create the Image feature
24
- const featureId = generateFeatureId();
25
- const layerId = options.layerId || getCurrentLayerId();
26
- const autoName = autoNameGenerator.generateName('Image');
27
- const feature = {
28
- id: featureId,
29
- type: 'Image',
30
- coordinates: options.coordinate,
31
- layerId,
32
- properties: {
33
- imageFileId: fileId,
34
- imageWidth: processed.width,
35
- imageHeight: processed.height,
36
- createdZoom: options.zoom ?? 1,
37
- ...(autoName !== undefined && { name: autoName }),
38
- },
39
- locked: false,
40
- visible: true,
41
- };
42
- // Create the file and the feature in a transaction
43
- store.transact(() => {
44
- store.createFile(fileData);
45
- store.createFeature(feature);
46
- store.setSelection('feature', [featureId]);
47
- });
48
- return {
49
- format: 'image',
50
- featureIds: [featureId],
51
- replaced: false,
52
- };
53
- }
@@ -1,9 +0,0 @@
1
- import type { ExportFormat, ExportOptions, ExportResult, LoadOptions, LoadResult } from '../../store/types.js';
2
- /**
3
- * Import/Export API interface
4
- */
5
- export interface ImportExportAPI {
6
- load(source: File | unknown, options?: LoadOptions): Promise<LoadResult>;
7
- export(format: ExportFormat, options?: ExportOptions): ExportResult;
8
- getSuggestedFileName(): string;
9
- }