@sakuzu/maplibre-gl-draw 1.0.0 → 2.1.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 (541) hide show
  1. package/CHANGELOG.md +1109 -2
  2. package/README.ja.md +83 -50
  3. package/README.md +89 -53
  4. package/THIRD_PARTY_NOTICES.md +29 -0
  5. package/dist/api/datasets.d.ts +263 -0
  6. package/dist/api/document.d.ts +66 -0
  7. package/dist/api/draw.d.ts +137 -0
  8. package/dist/api/draw.js +20 -0
  9. package/dist/api/drawing.d.ts +87 -0
  10. package/dist/api/errors.d.ts +35 -0
  11. package/dist/api/errors.js +35 -0
  12. package/dist/api/events.d.ts +316 -0
  13. package/dist/api/extension/context.d.ts +247 -0
  14. package/dist/api/extension/feature-type.d.ts +129 -0
  15. package/dist/api/extension/mode.d.ts +123 -0
  16. package/dist/api/extension/plugin.d.ts +51 -0
  17. package/dist/api/extension/plugin.js +3 -0
  18. package/dist/api/extension/provider.d.ts +119 -0
  19. package/dist/api/extension/provider.js +3 -0
  20. package/dist/api/extension/render.d.ts +176 -0
  21. package/dist/api/extension/render.js +3 -0
  22. package/dist/api/extension/store.d.ts +190 -0
  23. package/dist/api/extension/store.js +3 -0
  24. package/dist/api/extensions.d.ts +306 -0
  25. package/dist/api/extensions.js +3 -0
  26. package/dist/api/features.d.ts +188 -0
  27. package/dist/api/features.js +3 -0
  28. package/dist/api/groups.d.ts +111 -0
  29. package/dist/api/groups.js +3 -0
  30. package/dist/api/hidden.d.ts +45 -0
  31. package/dist/api/hidden.js +3 -0
  32. package/dist/api/impl/adapters.js +463 -0
  33. package/dist/api/impl/contexts.js +466 -0
  34. package/dist/api/impl/create-draw.js +124 -0
  35. package/dist/api/impl/datasets.js +405 -0
  36. package/dist/api/impl/destroy-guard.js +74 -0
  37. package/dist/api/impl/document.js +280 -0
  38. package/dist/api/impl/drawing.js +180 -0
  39. package/dist/api/impl/engine-context.d.ts +7 -0
  40. package/dist/api/{context.js → impl/engine-context.js} +49 -38
  41. package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
  42. package/dist/api/impl/events.js +423 -0
  43. package/dist/api/impl/extension-host.js +364 -0
  44. package/dist/api/impl/extensions.js +229 -0
  45. package/dist/api/impl/features.js +445 -0
  46. package/dist/api/impl/geometry/apply.d.ts +32 -0
  47. package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
  48. package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
  49. package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
  50. package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
  51. package/dist/api/{geometry → impl/geometry}/split.js +10 -21
  52. package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
  53. package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
  54. package/dist/api/impl/geometry/types.js +3 -0
  55. package/dist/api/impl/groups.d.ts +3 -0
  56. package/dist/api/impl/groups.js +268 -0
  57. package/dist/api/impl/hidden.js +60 -0
  58. package/dist/api/impl/import-export/constants.d.ts +22 -0
  59. package/dist/api/impl/import-export/constants.js +24 -0
  60. package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
  61. package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
  62. package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
  63. package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
  64. package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
  65. package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
  66. package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
  67. package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
  68. package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
  69. package/dist/api/impl/import-export/image-import.d.ts +16 -0
  70. package/dist/api/impl/import-export/image-import.js +73 -0
  71. package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
  72. package/dist/api/impl/import-export/legacy-image-style.js +49 -0
  73. package/dist/api/impl/import-export/native-format.d.ts +14 -0
  74. package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
  75. package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
  76. package/dist/api/impl/import-export/native-upgrade.js +139 -0
  77. package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
  78. package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
  79. package/dist/api/impl/import-export/style-validation.d.ts +24 -0
  80. package/dist/api/impl/import-export/style-validation.js +86 -0
  81. package/dist/api/impl/import-export/types.d.ts +52 -0
  82. package/dist/api/impl/import-export/types.js +3 -0
  83. package/dist/api/impl/input.js +180 -0
  84. package/dist/api/impl/layers.js +307 -0
  85. package/dist/api/impl/metadata.d.ts +1 -0
  86. package/dist/api/impl/metadata.js +22 -0
  87. package/dist/api/impl/options.d.ts +1 -0
  88. package/dist/api/impl/options.js +851 -0
  89. package/dist/api/impl/placement.d.ts +1 -0
  90. package/dist/api/impl/placement.js +138 -0
  91. package/dist/api/impl/render-context.d.ts +13 -0
  92. package/dist/api/impl/render-context.js +272 -0
  93. package/dist/api/impl/rows.d.ts +1 -0
  94. package/dist/api/impl/rows.js +46 -0
  95. package/dist/api/impl/selection.d.ts +1 -0
  96. package/dist/api/impl/selection.js +186 -0
  97. package/dist/api/impl/shared.d.ts +64 -0
  98. package/dist/api/impl/shared.js +178 -0
  99. package/dist/api/impl/validate-extension.d.ts +1 -0
  100. package/dist/api/impl/validate-extension.js +159 -0
  101. package/dist/api/layers.d.ts +130 -0
  102. package/dist/api/layers.js +3 -0
  103. package/dist/api/metadata.d.ts +18 -0
  104. package/dist/api/metadata.js +3 -0
  105. package/dist/api/model.d.ts +487 -0
  106. package/dist/api/model.js +47 -0
  107. package/dist/api/options.d.ts +466 -0
  108. package/dist/api/options.js +3 -0
  109. package/dist/api/selection.d.ts +94 -0
  110. package/dist/api/selection.js +3 -0
  111. package/dist/api/state.d.ts +155 -0
  112. package/dist/api/state.js +12 -0
  113. package/dist/{display → dataset}/chunk.d.ts +1 -1
  114. package/dist/{display → dataset}/chunk.js +4 -3
  115. package/dist/{display → dataset}/dataset.js +21 -21
  116. package/dist/dataset/interaction.d.ts +1 -0
  117. package/dist/{display → dataset}/interaction.js +18 -6
  118. package/dist/dataset/manager.d.ts +1 -0
  119. package/dist/dataset/provider.d.ts +1 -0
  120. package/dist/{display → dataset}/retained.d.ts +1 -1
  121. package/dist/{display → dataset}/retained.js +8 -7
  122. package/dist/dataset/source.d.ts +1 -0
  123. package/dist/{display → dataset}/source.js +17 -4
  124. package/dist/dataset/spatial.d.ts +1 -0
  125. package/dist/{display → dataset}/spatial.js +1 -1
  126. package/dist/dataset/style.d.ts +1 -0
  127. package/dist/{display → dataset}/style.js +1 -1
  128. package/dist/dataset/table-source.d.ts +1 -0
  129. package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
  130. package/dist/{display → dataset}/thinning.d.ts +0 -10
  131. package/dist/{display → dataset}/thinning.js +3 -2
  132. package/dist/dataset/triangulation.d.ts +1 -0
  133. package/dist/{display → dataset}/triangulation.js +0 -0
  134. package/dist/{display → dataset}/types.d.ts +84 -121
  135. package/dist/dataset/types.js +61 -0
  136. package/dist/dispatcher/hit-test/box-strategies.js +13 -13
  137. package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
  138. package/dist/dispatcher/hit-test/globe-shape.js +5 -4
  139. package/dist/dispatcher/hit-test/service.d.ts +17 -0
  140. package/dist/dispatcher/hit-test/service.js +80 -16
  141. package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
  142. package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
  143. package/dist/dispatcher/hit-test/strategies/image.js +6 -18
  144. package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
  145. package/dist/dispatcher/hit-test/strategies/line.js +9 -2
  146. package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
  147. package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
  148. package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
  149. package/dist/dispatcher/hit-test/strategies/point.js +8 -4
  150. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
  151. package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
  152. package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
  153. package/dist/dispatcher/input-router.js +154 -70
  154. package/dist/dispatcher/normalizer.js +25 -4
  155. package/dist/dispatcher/types.d.ts +6 -1
  156. package/dist/extension/feature-handler.d.ts +1 -182
  157. package/dist/extension/index.d.ts +4 -7
  158. package/dist/extension/renderers.d.ts +1 -208
  159. package/dist/geometry/angle.d.ts +0 -8
  160. package/dist/geometry/angle.js +0 -8
  161. package/dist/geometry/bbox.d.ts +4 -12
  162. package/dist/geometry/bbox.js +4 -12
  163. package/dist/geometry/boolean.d.ts +0 -51
  164. package/dist/geometry/boolean.js +0 -51
  165. package/dist/geometry/buffer.d.ts +0 -26
  166. package/dist/geometry/buffer.js +0 -26
  167. package/dist/geometry/circle.d.ts +0 -9
  168. package/dist/geometry/circle.js +0 -9
  169. package/dist/geometry/coords.d.ts +0 -16
  170. package/dist/geometry/coords.js +0 -16
  171. package/dist/geometry/distance.d.ts +0 -24
  172. package/dist/geometry/distance.js +0 -24
  173. package/dist/geometry/errors.d.ts +21 -36
  174. package/dist/geometry/errors.js +49 -29
  175. package/dist/geometry/geojson.d.ts +85 -0
  176. package/dist/geometry/geojson.js +173 -0
  177. package/dist/geometry/index.d.ts +38 -23
  178. package/dist/geometry/index.js +43 -31
  179. package/dist/geometry/measure.d.ts +0 -27
  180. package/dist/geometry/measure.js +0 -27
  181. package/dist/geometry/predicates.d.ts +0 -9
  182. package/dist/geometry/predicates.js +0 -9
  183. package/dist/geometry/public-bounds.d.ts +26 -0
  184. package/dist/geometry/public-bounds.js +30 -0
  185. package/dist/geometry/public-combine.d.ts +78 -0
  186. package/dist/geometry/public-combine.js +82 -0
  187. package/dist/geometry/public-create.d.ts +54 -0
  188. package/dist/geometry/public-create.js +70 -0
  189. package/dist/geometry/public-measure.d.ts +170 -0
  190. package/dist/geometry/public-measure.js +283 -0
  191. package/dist/geometry/public-predicates.d.ts +54 -0
  192. package/dist/geometry/public-predicates.js +144 -0
  193. package/dist/geometry/public-repair.d.ts +75 -0
  194. package/dist/geometry/public-repair.js +77 -0
  195. package/dist/geometry/simplify.d.ts +0 -7
  196. package/dist/geometry/simplify.js +0 -7
  197. package/dist/geometry/split.d.ts +0 -20
  198. package/dist/geometry/split.js +0 -20
  199. package/dist/geometry/units.d.ts +20 -12
  200. package/dist/geometry/units.js +20 -12
  201. package/dist/index.d.ts +66 -66
  202. package/dist/index.js +6 -18
  203. package/dist/messages.d.ts +7 -7
  204. package/dist/modes/draw/circle.js +83 -207
  205. package/dist/modes/draw/commit-layer.d.ts +5 -16
  206. package/dist/modes/draw/commit-layer.js +2 -13
  207. package/dist/modes/draw/freehand.js +108 -246
  208. package/dist/modes/draw/image.js +4 -2
  209. package/dist/modes/draw/index.d.ts +5 -5
  210. package/dist/modes/draw/index.js +5 -5
  211. package/dist/modes/draw/line.js +18 -354
  212. package/dist/modes/draw/point.js +29 -78
  213. package/dist/modes/draw/polygon.js +23 -368
  214. package/dist/modes/draw/trace-support.d.ts +43 -36
  215. package/dist/modes/draw/trace-support.js +95 -98
  216. package/dist/modes/draw/vertex-drawing.d.ts +1 -0
  217. package/dist/modes/draw/vertex-drawing.js +176 -0
  218. package/dist/modes/handler.d.ts +1 -285
  219. package/dist/modes/manager.d.ts +2 -2
  220. package/dist/modes/manager.js +3 -0
  221. package/dist/modes/select/box-selection.d.ts +3 -3
  222. package/dist/modes/select/box-selection.js +2 -1
  223. package/dist/modes/select/click-handler.d.ts +5 -5
  224. package/dist/modes/select/click-handler.js +22 -20
  225. package/dist/modes/select/cursor-handler.d.ts +2 -2
  226. package/dist/modes/select/drag/intermediate-writes.js +1 -1
  227. package/dist/modes/select/drag/move.js +3 -3
  228. package/dist/modes/select/drag/operation.d.ts +3 -3
  229. package/dist/modes/select/drag/radius.js +5 -4
  230. package/dist/modes/select/drag/transform.d.ts +2 -2
  231. package/dist/modes/select/drag/transform.js +11 -5
  232. package/dist/modes/select/drag/vertex.d.ts +2 -2
  233. package/dist/modes/select/drag/vertex.js +13 -8
  234. package/dist/modes/select/drag-handler.js +44 -25
  235. package/dist/modes/select/mode.js +17 -17
  236. package/dist/modes/select/shortcut-handler.d.ts +8 -8
  237. package/dist/modes/select/shortcut-handler.js +9 -7
  238. package/dist/operations/layer-operations.js +29 -168
  239. package/dist/operations/resize.d.ts +2 -2
  240. package/dist/operations/resize.js +5 -5
  241. package/dist/operations/rotate.js +5 -5
  242. package/dist/operations/selection-operations.d.ts +16 -1
  243. package/dist/operations/selection-operations.js +28 -13
  244. package/dist/operations/shared-vertex.js +4 -2
  245. package/dist/operations/trace-graph.d.ts +0 -18
  246. package/dist/operations/trace-graph.js +0 -18
  247. package/dist/operations/vertex.js +36 -35
  248. package/dist/shared/color.d.ts +1 -0
  249. package/dist/shared/color.js +245 -0
  250. package/dist/shared/config/constants.d.ts +1 -54
  251. package/dist/shared/config/constants.js +1 -58
  252. package/dist/shared/config/feature-style.d.ts +16 -13
  253. package/dist/shared/config/feature-style.js +9 -0
  254. package/dist/shared/config/rendering.d.ts +3 -3
  255. package/dist/shared/config/selection-highlight.d.ts +0 -15
  256. package/dist/shared/config/selection-highlight.js +4 -7
  257. package/dist/shared/config/selection.d.ts +2 -32
  258. package/dist/shared/config/selection.js +0 -18
  259. package/dist/shared/config/topology.d.ts +2 -2
  260. package/dist/shared/config/trace.d.ts +4 -4
  261. package/dist/shared/math/angle.d.ts +1 -1
  262. package/dist/shared/math/angle.js +1 -1
  263. package/dist/shared/math/circle.d.ts +1 -1
  264. package/dist/shared/math/circle.js +1 -1
  265. package/dist/shared/math/distance.d.ts +2 -1
  266. package/dist/shared/math/distance.js +3 -2
  267. package/dist/shared/math/index.d.ts +1 -1
  268. package/dist/shared/math/index.js +1 -1
  269. package/dist/shared/math/transform.d.ts +23 -0
  270. package/dist/shared/math/transform.js +47 -28
  271. package/dist/shared/properties.d.ts +18 -0
  272. package/dist/shared/properties.js +129 -0
  273. package/dist/shared/types/events.d.ts +15 -7
  274. package/dist/shared/types/model.d.ts +109 -159
  275. package/dist/shared/types/style.d.ts +1 -1
  276. package/dist/shared/utils/color.d.ts +2 -36
  277. package/dist/shared/utils/color.js +13 -70
  278. package/dist/shared/utils/coordinates.d.ts +30 -4
  279. package/dist/shared/utils/coordinates.js +56 -10
  280. package/dist/shared/utils/event-emitter.d.ts +1 -262
  281. package/dist/shared/utils/event-emitter.js +4 -3
  282. package/dist/shared/utils/feature-bbox.js +8 -7
  283. package/dist/shared/utils/feature-segments.js +5 -4
  284. package/dist/shared/utils/image.d.ts +0 -4
  285. package/dist/shared/utils/image.js +0 -6
  286. package/dist/shared/utils/name-generator.d.ts +14 -20
  287. package/dist/shared/utils/name-generator.js +20 -3
  288. package/dist/shared/utils/pixel-ratio.d.ts +9 -3
  289. package/dist/shared/utils/pixel-ratio.js +13 -4
  290. package/dist/shared/utils/property.d.ts +7 -50
  291. package/dist/shared/utils/property.js +22 -87
  292. package/dist/snapping/custom-targets.js +21 -4
  293. package/dist/snapping/indicator.js +20 -11
  294. package/dist/snapping/providers/display.d.ts +6 -1
  295. package/dist/snapping/providers/display.js +2 -1
  296. package/dist/snapping/providers/guide.d.ts +3 -43
  297. package/dist/snapping/providers/guide.js +1 -44
  298. package/dist/snapping/providers/intersection.js +1 -1
  299. package/dist/snapping/providers/store.js +3 -3
  300. package/dist/snapping/service.js +18 -7
  301. package/dist/snapping/types.d.ts +9 -35
  302. package/dist/store/draw-store.js +233 -142
  303. package/dist/store/local-visibility.d.ts +11 -6
  304. package/dist/store/local-visibility.js +38 -7
  305. package/dist/store/lock.d.ts +0 -6
  306. package/dist/store/lock.js +0 -6
  307. package/dist/store/memory/change-bus.d.ts +3 -3
  308. package/dist/store/memory/change-bus.js +12 -0
  309. package/dist/store/memory/file-store.d.ts +2 -2
  310. package/dist/store/memory/ui-state.d.ts +1 -51
  311. package/dist/store/memory/ui-state.js +122 -134
  312. package/dist/store/memory.d.ts +1 -8
  313. package/dist/store/memory.js +249 -45
  314. package/dist/store/ordering.d.ts +9 -0
  315. package/dist/store/ordering.js +17 -0
  316. package/dist/store/spatial/spatial-index.d.ts +1 -1
  317. package/dist/store/spatial/spatial-index.js +1 -1
  318. package/dist/store/spatial/store-spatial-index.d.ts +3 -1
  319. package/dist/store/spatial/store-spatial-index.js +9 -3
  320. package/dist/store/store.d.ts +66 -107
  321. package/dist/store/types.d.ts +1 -1
  322. package/dist/store/writable-layer.d.ts +1 -1
  323. package/dist/store/writable-layer.js +2 -2
  324. package/dist/table/builder.d.ts +83 -0
  325. package/dist/table/builder.js +381 -0
  326. package/dist/table/index.d.ts +37 -0
  327. package/dist/table/index.js +5 -0
  328. package/dist/table/packed-rtree.d.ts +1 -0
  329. package/dist/{display → table}/packed-rtree.js +1 -1
  330. package/dist/table/partition.d.ts +1 -0
  331. package/dist/{display → table}/partition.js +3 -3
  332. package/dist/table/prepare.d.ts +44 -0
  333. package/dist/table/prepare.js +136 -0
  334. package/dist/table/table.d.ts +1 -0
  335. package/dist/{display/columnar → table}/table.js +29 -25
  336. package/dist/{display/columnar → table}/types.d.ts +68 -72
  337. package/dist/table/types.js +3 -0
  338. package/dist/view/coordinator.js +4 -3
  339. package/dist/view/feature-companion.d.ts +13 -7
  340. package/dist/view/feature-companion.js +11 -3
  341. package/dist/view/globe-subdivision.js +3 -3
  342. package/dist/view/layer/attach.d.ts +12 -6
  343. package/dist/view/layer/attach.js +86 -10
  344. package/dist/view/layer/custom-layer.js +40 -11
  345. package/dist/view/layer/display-list.js +2 -1
  346. package/dist/view/layer/drape-planner.d.ts +2 -2
  347. package/dist/view/layer/frame-render.d.ts +3 -3
  348. package/dist/view/layer/frame-render.js +7 -2
  349. package/dist/view/layer/frame-state.d.ts +6 -6
  350. package/dist/view/layer/index.d.ts +2 -2
  351. package/dist/view/layer/index.js +1 -1
  352. package/dist/view/layer/render.d.ts +4 -4
  353. package/dist/view/layer/render.js +3 -8
  354. package/dist/view/layer/renderers.d.ts +2 -2
  355. package/dist/view/layer/renderers.js +1 -1
  356. package/dist/view/layer/slot-manager.d.ts +2 -2
  357. package/dist/view/layer/slot-manager.js +4 -4
  358. package/dist/view/layer/slots.d.ts +2 -2
  359. package/dist/view/layer/slots.js +1 -1
  360. package/dist/view/layer/store-retained-bbox.js +3 -2
  361. package/dist/view/layer/store-retained-classify.d.ts +5 -7
  362. package/dist/view/layer/store-retained-classify.js +19 -7
  363. package/dist/view/layer/store-retained-collect.js +8 -7
  364. package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
  365. package/dist/view/layer/store-retained-coord-patch.js +13 -4
  366. package/dist/view/layer/store-retained-immediate.d.ts +3 -3
  367. package/dist/view/layer/store-retained-immediate.js +3 -8
  368. package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
  369. package/dist/view/layer/store-retained.d.ts +2 -2
  370. package/dist/view/layer/store-retained.js +1 -1
  371. package/dist/view/renderers/batch-manager.js +8 -7
  372. package/dist/view/renderers/drawer.js +21 -15
  373. package/dist/view/renderers/image.js +13 -39
  374. package/dist/view/renderers/line/line-types.d.ts +3 -3
  375. package/dist/view/renderers/line/sdf-line.js +3 -1
  376. package/dist/view/renderers/point/billboard-depth.js +1 -1
  377. package/dist/view/renderers/point/point-instance.js +1 -1
  378. package/dist/view/renderers/point/point-shape.js +2 -2
  379. package/dist/view/renderers/point/point-style.js +48 -4
  380. package/dist/view/renderers/polygon/batch.js +1 -2
  381. package/dist/view/renderers/polygon/fill.js +3 -1
  382. package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
  383. package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
  384. package/dist/view/renderers/stroke.js +3 -1
  385. package/dist/view/shaders/helpers.d.ts +2 -42
  386. package/dist/view/shaders/helpers.js +0 -6
  387. package/dist/view/shaders/projection.d.ts +15 -7
  388. package/dist/view/shaders/projection.js +23 -6
  389. package/dist/view/shaders/quad.d.ts +16 -12
  390. package/dist/view/shaders/quad.js +34 -13
  391. package/dist/view/style-rule.d.ts +5 -42
  392. package/dist/view/style-rule.js +20 -44
  393. package/dist/view/terrain/binding.d.ts +1 -0
  394. package/dist/view/terrain/binding.js +29 -0
  395. package/dist/view/terrain/context.d.ts +3 -4
  396. package/dist/view/terrain/context.js +4 -5
  397. package/dist/view/terrain/drape/geometry.js +1 -1
  398. package/dist/view/terrain/drape/pass.d.ts +1 -1
  399. package/dist/view/terrain/drape/pass.js +8 -7
  400. package/dist/view/terrain/polygon.d.ts +9 -5
  401. package/dist/view/terrain/polygon.js +16 -2
  402. package/dist/view/terrain/state.d.ts +1 -1
  403. package/dist/view/terrain/state.js +1 -1
  404. package/dist/view/terrain/tessellation.d.ts +2 -2
  405. package/dist/view/terrain/tessellation.js +1 -1
  406. package/dist/view/ui/auxiliary-handles.d.ts +6 -29
  407. package/dist/view/ui/bounds.js +8 -12
  408. package/dist/view/ui/handle-test.js +2 -2
  409. package/dist/view/ui/handle-thinning.js +17 -17
  410. package/dist/view/ui/handles.js +21 -13
  411. package/dist/view/ui/helper.d.ts +1 -1
  412. package/dist/view/ui/helper.js +1 -1
  413. package/dist/view/ui/index.d.ts +1 -1
  414. package/dist/view/ui/selection-scope.js +4 -2
  415. package/dist/view/ui/selection-ui/bounding-box.js +6 -6
  416. package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
  417. package/dist/view/ui/selection-ui/extension-registry.js +70 -7
  418. package/dist/view/ui/selection-ui/index.d.ts +2 -2
  419. package/dist/view/ui/selection-ui/index.js +1 -1
  420. package/dist/view/ui/selection-ui/renderer.js +15 -38
  421. package/dist/view/ui/selection-ui/types.d.ts +17 -2
  422. package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
  423. package/dist/view/ui/selection-ui-drawer.js +63 -2
  424. package/dist/view/ui/tentative.js +1 -1
  425. package/dist/webgl/index.d.ts +65 -0
  426. package/dist/webgl/index.js +62 -0
  427. package/package.json +38 -15
  428. package/dist/api/api.d.ts +0 -1259
  429. package/dist/api/api.js +0 -86
  430. package/dist/api/context.d.ts +0 -173
  431. package/dist/api/display-api.js +0 -23
  432. package/dist/api/event-api.d.ts +0 -13
  433. package/dist/api/event-api.js +0 -17
  434. package/dist/api/extension-api.d.ts +0 -46
  435. package/dist/api/extension-api.js +0 -85
  436. package/dist/api/feature-api.d.ts +0 -11
  437. package/dist/api/feature-api.js +0 -101
  438. package/dist/api/geometry/apply.d.ts +0 -51
  439. package/dist/api/geometry/boolean.d.ts +0 -28
  440. package/dist/api/geometry/boolean.js +0 -65
  441. package/dist/api/geometry/types.d.ts +0 -31
  442. package/dist/api/geometry-operations.d.ts +0 -162
  443. package/dist/api/geometry-operations.js +0 -94
  444. package/dist/api/group-api.d.ts +0 -10
  445. package/dist/api/group-api.js +0 -78
  446. package/dist/api/import-export/constants.d.ts +0 -29
  447. package/dist/api/import-export/constants.js +0 -40
  448. package/dist/api/import-export/file-name.d.ts +0 -10
  449. package/dist/api/import-export/file-name.js +0 -20
  450. package/dist/api/import-export/geojson-export.d.ts +0 -19
  451. package/dist/api/import-export/image-import.d.ts +0 -12
  452. package/dist/api/import-export/image-import.js +0 -53
  453. package/dist/api/import-export/index.d.ts +0 -9
  454. package/dist/api/import-export/index.js +0 -107
  455. package/dist/api/import-export/native-format.d.ts +0 -15
  456. package/dist/api/import-export/style-validation.d.ts +0 -27
  457. package/dist/api/import-export/style-validation.js +0 -49
  458. package/dist/api/import-export/types.d.ts +0 -26
  459. package/dist/api/index.d.ts +0 -15
  460. package/dist/api/index.js +0 -3
  461. package/dist/api/input-api.d.ts +0 -158
  462. package/dist/api/input-api.js +0 -144
  463. package/dist/api/instance-api.d.ts +0 -38
  464. package/dist/api/instance-api.js +0 -136
  465. package/dist/api/layer-api.d.ts +0 -12
  466. package/dist/api/layer-api.js +0 -62
  467. package/dist/api/selection-api.d.ts +0 -7
  468. package/dist/api/selection-api.js +0 -78
  469. package/dist/api/snapping-api.d.ts +0 -125
  470. package/dist/api/snapping-api.js +0 -50
  471. package/dist/api/topology-api.d.ts +0 -30
  472. package/dist/api/topology-api.js +0 -16
  473. package/dist/api/tracing-api.d.ts +0 -31
  474. package/dist/api/tracing-api.js +0 -16
  475. package/dist/dispatcher/hit-test/index.d.ts +0 -14
  476. package/dist/dispatcher/hit-test/index.js +0 -9
  477. package/dist/dispatcher/index.d.ts +0 -15
  478. package/dist/dispatcher/index.js +0 -3
  479. package/dist/display/columnar/index.d.ts +0 -12
  480. package/dist/display/columnar/index.js +0 -13
  481. package/dist/display/columnar/prepare.d.ts +0 -42
  482. package/dist/display/columnar/prepare.js +0 -116
  483. package/dist/display/index.d.ts +0 -13
  484. package/dist/display/types.js +0 -43
  485. package/dist/maplibre-gl-draw.d.ts +0 -47
  486. package/dist/modes/cursor.js +0 -72
  487. package/dist/modes/index.d.ts +0 -7
  488. package/dist/operations/index.d.ts +0 -9
  489. package/dist/operations/index.js +0 -3
  490. package/dist/plugins/index.d.ts +0 -10
  491. package/dist/plugins/mutation-hooks.d.ts +0 -28
  492. package/dist/plugins/mutation-hooks.js +0 -84
  493. package/dist/plugins/plugin-context.js +0 -367
  494. package/dist/plugins/plugin-manager.d.ts +0 -103
  495. package/dist/plugins/plugin-manager.js +0 -316
  496. package/dist/plugins/plugin.d.ts +0 -529
  497. package/dist/shared/config/index.d.ts +0 -17
  498. package/dist/shared/config/index.js +0 -8
  499. package/dist/shared/utils/index.d.ts +0 -15
  500. package/dist/shared/utils/index.js +0 -24
  501. package/dist/snapping/index.d.ts +0 -14
  502. package/dist/snapping/index.js +0 -4
  503. package/dist/store/change-merger.js +0 -102
  504. package/dist/store/event-bridge.js +0 -161
  505. package/dist/store/index.d.ts +0 -12
  506. package/dist/store/index.js +0 -4
  507. package/dist/view/index.d.ts +0 -47
  508. package/dist/view/index.js +0 -20
  509. /package/dist/api/{geometry/types.js → datasets.js} +0 -0
  510. /package/dist/api/{import-export/types.js → document.js} +0 -0
  511. /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
  512. /package/dist/{display/index.js → api/events.js} +0 -0
  513. /package/dist/{modes/index.js → api/extension/context.js} +0 -0
  514. /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
  515. /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
  516. /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
  517. /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
  518. /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
  519. /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
  520. /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
  521. /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
  522. /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
  523. /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
  524. /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
  525. /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
  526. /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
  527. /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
  528. /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
  529. /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
  530. /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
  531. /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
  532. /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
  533. /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
  534. /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
  535. /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
  536. /package/dist/{display → dataset}/chunk-set.js +0 -0
  537. /package/dist/{display → dataset}/dataset.d.ts +0 -0
  538. /package/dist/{display → dataset}/manager.js +0 -0
  539. /package/dist/{display → dataset}/provider.js +0 -0
  540. /package/dist/{display → dataset}/selection.d.ts +0 -0
  541. /package/dist/{display → dataset}/selection.js +0 -0
@@ -0,0 +1,173 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { invalidInput } from './errors.js';
4
+ /** The geometry types that carry `coordinates` */
5
+ const COORDINATE_TYPES = new Set([
6
+ 'Point',
7
+ 'MultiPoint',
8
+ 'LineString',
9
+ 'MultiLineString',
10
+ 'Polygon',
11
+ 'MultiPolygon',
12
+ ]);
13
+ function isObject(value) {
14
+ return typeof value === 'object' && value !== null;
15
+ }
16
+ /** Whether a value is an array whose first two elements are numbers */
17
+ function isPosition(value) {
18
+ return (Array.isArray(value) &&
19
+ value.length >= 2 &&
20
+ typeof value[0] === 'number' &&
21
+ typeof value[1] === 'number');
22
+ }
23
+ /**
24
+ * Returns the geometry of a geometry, or of anything that carries one in a `geometry` field
25
+ * (a GeoJSON feature, a feature of the drawing)
26
+ *
27
+ * A value whose `geometry` member is a geometry is read as a feature first, whatever its own
28
+ * `type` says: a feature of the drawing names its feature type there (`'Polygon'`,
29
+ * `'Circle'`, `'Freehand'` and so on), which is not the type of a geometry it is.
30
+ *
31
+ * @throws GeometryError (`invalid-input`) for a value that is neither, and for a feature
32
+ * without a geometry
33
+ */
34
+ export function geometryOf(input, operation) {
35
+ const value = input;
36
+ if (!isObject(value)) {
37
+ throw invalidInput(operation, 'the input is not a geometry or a feature');
38
+ }
39
+ if ('geometry' in value || value.type === 'Feature') {
40
+ const geometry = value.geometry;
41
+ if (isObject(geometry) && isGeometryType(geometry.type)) {
42
+ return geometryOf(geometry, operation);
43
+ }
44
+ if (!isGeometry(value)) {
45
+ throw invalidInput(operation, 'the feature has no geometry');
46
+ }
47
+ }
48
+ if (value.type === 'GeometryCollection' && !Array.isArray(value.geometries)) {
49
+ throw invalidInput(operation, 'the geometry collection has no geometries');
50
+ }
51
+ if (!isGeometry(value)) {
52
+ throw invalidInput(operation, 'the input is not a geometry or a feature');
53
+ }
54
+ return value;
55
+ }
56
+ /** Whether an object has the type of a geometry and the member that type carries */
57
+ function isGeometry(value) {
58
+ if (!isGeometryType(value.type))
59
+ return false;
60
+ if (value.type === 'GeometryCollection')
61
+ return Array.isArray(value.geometries);
62
+ return Array.isArray(value.coordinates);
63
+ }
64
+ /** Whether a value names a GeoJSON geometry type */
65
+ function isGeometryType(type) {
66
+ return typeof type === 'string' && (COORDINATE_TYPES.has(type) || type === 'GeometryCollection');
67
+ }
68
+ /**
69
+ * Returns the coordinates of a point given as a position or a Point
70
+ *
71
+ * @throws GeometryError (`invalid-input`) for anything else
72
+ */
73
+ export function positionOf(input, operation) {
74
+ if (isPosition(input))
75
+ return input;
76
+ if (isObject(input) && input.type === 'Point' && isPosition(input.coordinates)) {
77
+ return input.coordinates;
78
+ }
79
+ throw invalidInput(operation, 'the input is not a position or a Point');
80
+ }
81
+ /**
82
+ * Returns the geometry of a Polygon or a MultiPolygon, given as it is or in a feature
83
+ *
84
+ * @throws GeometryError (`invalid-input`) for any other geometry
85
+ */
86
+ export function areaGeometryOf(input, operation) {
87
+ const geometry = geometryOf(input, operation);
88
+ if (geometry.type !== 'Polygon' && geometry.type !== 'MultiPolygon') {
89
+ throw invalidInput(operation, 'the input is not a Polygon or a MultiPolygon');
90
+ }
91
+ return geometry;
92
+ }
93
+ /**
94
+ * Returns the coordinates of a Polygon or a MultiPolygon, given as it is or in a feature
95
+ *
96
+ * @throws GeometryError (`invalid-input`) for any other geometry
97
+ */
98
+ export function areaOf(input, operation) {
99
+ return areaGeometryOf(input, operation).coordinates;
100
+ }
101
+ /**
102
+ * Returns the coordinates of each polygon in an array
103
+ *
104
+ * @throws GeometryError (`invalid-input`) for a value that is not an array, and for an
105
+ * element that is not a Polygon or a MultiPolygon
106
+ */
107
+ export function areasOf(inputs, operation) {
108
+ if (!Array.isArray(inputs)) {
109
+ throw invalidInput(operation, 'the input is not an array of polygons');
110
+ }
111
+ return inputs.map((input) => areaOf(input, operation));
112
+ }
113
+ /**
114
+ * Returns the coordinates of a LineString, given as it is or in a feature
115
+ *
116
+ * @throws GeometryError (`invalid-input`) for any other geometry
117
+ */
118
+ export function lineOf(input, operation) {
119
+ const geometry = geometryOf(input, operation);
120
+ if (geometry.type !== 'LineString') {
121
+ throw invalidInput(operation, 'the input is not a LineString');
122
+ }
123
+ return geometry.coordinates;
124
+ }
125
+ /**
126
+ * Returns the lines of a LineString or a MultiLineString, given as it is or in a feature
127
+ *
128
+ * @throws GeometryError (`invalid-input`) for any other geometry
129
+ */
130
+ export function linesOf(input, operation) {
131
+ const geometry = geometryOf(input, operation);
132
+ if (geometry.type === 'LineString')
133
+ return [geometry.coordinates];
134
+ if (geometry.type === 'MultiLineString')
135
+ return geometry.coordinates;
136
+ throw invalidInput(operation, 'the input is not a LineString or a MultiLineString');
137
+ }
138
+ /** Every position of a geometry, the members of a collection included */
139
+ export function positionsOf(geometry) {
140
+ switch (geometry.type) {
141
+ case 'Point':
142
+ return [geometry.coordinates];
143
+ case 'MultiPoint':
144
+ case 'LineString':
145
+ return geometry.coordinates;
146
+ case 'MultiLineString':
147
+ case 'Polygon':
148
+ return geometry.coordinates.flat();
149
+ case 'MultiPolygon':
150
+ return geometry.coordinates.flat(2);
151
+ case 'GeometryCollection':
152
+ return geometry.geometries.flatMap(positionsOf);
153
+ }
154
+ }
155
+ /** A copy of a position, as returned by the public functions */
156
+ export function toPosition(coordinate) {
157
+ return [coordinate[0], coordinate[1]];
158
+ }
159
+ /** A Point geometry at a position */
160
+ export function toPoint(coordinate) {
161
+ return { type: 'Point', coordinates: toPosition(coordinate) };
162
+ }
163
+ /**
164
+ * Wraps MultiPolygon coordinates into a geometry: a Polygon for one part, a MultiPolygon for
165
+ * several, and null for none
166
+ */
167
+ export function toAreaGeometry(coordinates) {
168
+ if (coordinates.length === 0)
169
+ return null;
170
+ if (coordinates.length === 1)
171
+ return { type: 'Polygon', coordinates: coordinates[0] };
172
+ return { type: 'MultiPolygon', coordinates };
173
+ }
@@ -1,28 +1,43 @@
1
1
  /**
2
- * Geometry module
2
+ * Geometry calculations that need no map.
3
3
  *
4
- * A collection of pure functions independent of the rendering and editing machinery.
5
- * It does not depend on maplibre, the DOM, wasm, the Store or events, and its only
6
- * runtime dependency is polygon-clipping. The same input produces the same output
7
- * regardless of the environment, and determinism is guaranteed by the version of the
8
- * package.
4
+ * Measure lengths and areas, build circles and buffers, combine polygons, test whether a
5
+ * point lies in a polygon, and tidy shapes. They also work in code that does not use the
6
+ * drawing engine (workers, servers, tests).
9
7
  *
10
- * As a limitation, crossing the ±180 degree meridian and the vicinity of the poles are
11
- * out of scope.
8
+ * ```ts
9
+ * import { area, buffer, union } from '@sakuzu/maplibre-gl-draw/geometry';
10
+ *
11
+ * const a = draw.features.get('park');
12
+ * const b = draw.features.get('lake');
13
+ * const merged = union([a, b]); // Polygon | MultiPolygon | null
14
+ * const zone = buffer(merged, 300); // the area within 300 m
15
+ * console.log(area(zone) / 1e6, 'km²');
16
+ * ```
17
+ *
18
+ * The functions take GeoJSON geometries, or anything with a `geometry` field whose geometry
19
+ * they use (GeoJSON features and the features of the drawing), and return GeoJSON geometries. Lengths, distances, radii and tolerances are in meters, areas in
20
+ * square meters, and bearings and coordinates in degrees. An input whose shape a function
21
+ * cannot take throws a {@link GeometryError}; a computation whose result is empty returns null.
22
+ * Crossing the ±180 degree meridian and the vicinity of the poles are out of scope.
23
+ *
24
+ * Read next: the guide
25
+ * [snapping and geometry](https://sakuzu.github.io/maplibre-gl-draw/guides/snapping-geometry),
26
+ * which also shows the operations that change the drawing (`draw.features.union` and the
27
+ * rest). The functions used most are {@link area}, {@link length}, {@link buffer} and
28
+ * {@link union}.
29
+ *
30
+ * @module geometry
12
31
  */
13
- export { getPointAtAngle } from './angle.js';
14
- export { bboxContains, bboxIntersects, boundingBox, coordinatesBBox } from './bbox.js';
15
- export { clip, difference, differenceAll, intersection, intersectionAll, normalizeArea, union, unionAll, } from './boolean.js';
16
- export type { BufferOptions } from './buffer.js';
17
- export { buffer, DEFAULT_BUFFER_SEGMENTS } from './buffer.js';
18
- export { generateCirclePolygon } from './circle.js';
19
- export { closeRing, flattenAreaCoordinates, isMultiPolygonCoordinates, isRingClosed, toMultiPolygonCoordinates, } from './coords.js';
20
- export { destinationPoint, haversineDistanceMeters, initialBearingDegrees } from './distance.js';
21
- export type { GeometryErrorCode, GeometryOperation } from './errors.js';
32
+ export { along, area, bearing, centroid, destination, distance, length, midpoint, nearestPointOnLine, perimeter, pointOnSurface, } from './public-measure.js';
33
+ export { buffer, circle } from './public-create.js';
34
+ export { difference, intersection, split, union } from './public-combine.js';
35
+ export { bboxContains, bboxIntersects } from './bbox.js';
36
+ export { contains, overlaps, pointInPolygon } from './public-predicates.js';
37
+ export { makeValid, rewind, simplify } from './public-repair.js';
38
+ export { bbox } from './public-bounds.js';
39
+ export { metersToDegrees } from './units.js';
40
+ export type { GeometryErrorCode } from './errors.js';
22
41
  export { GeometryError } from './errors.js';
23
- export { centroid, geodesicLength, pointOnSurface, sphericalArea } from './measure.js';
24
- export { contains, intersects, pointInPolygon, within } from './predicates.js';
25
- export { isRingClockwise, normalizeMultiPolygonOrientation, normalizePolygonOrientation, normalizeRingOrientation, signedRingArea, simplify, } from './simplify.js';
26
- export { segmentIntersection, splitArea } from './split.js';
27
- export type { AreaCoordinates, BBox, Coordinate, GeometryInput, LineStringGeometry, MultiLineStringGeometry, MultiPointGeometry, MultiPolygonCoordinates, MultiPolygonGeometry, PointGeometry, PolygonCoordinates, PolygonGeometry, Ring, } from './types.js';
28
- export { EARTH_RADIUS_METERS, toDegrees, toRadians } from './units.js';
42
+ export type { BBox } from './types.js';
43
+ export { EARTH_RADIUS_METERS } from './units.js';
@@ -1,38 +1,50 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
3
  /**
4
- * Geometry module
4
+ * Geometry calculations that need no map.
5
5
  *
6
- * A collection of pure functions independent of the rendering and editing machinery.
7
- * It does not depend on maplibre, the DOM, wasm, the Store or events, and its only
8
- * runtime dependency is polygon-clipping. The same input produces the same output
9
- * regardless of the environment, and determinism is guaranteed by the version of the
10
- * package.
6
+ * Measure lengths and areas, build circles and buffers, combine polygons, test whether a
7
+ * point lies in a polygon, and tidy shapes. They also work in code that does not use the
8
+ * drawing engine (workers, servers, tests).
11
9
  *
12
- * As a limitation, crossing the ±180 degree meridian and the vicinity of the poles are
13
- * out of scope.
10
+ * ```ts
11
+ * import { area, buffer, union } from '@sakuzu/maplibre-gl-draw/geometry';
12
+ *
13
+ * const a = draw.features.get('park');
14
+ * const b = draw.features.get('lake');
15
+ * const merged = union([a, b]); // Polygon | MultiPolygon | null
16
+ * const zone = buffer(merged, 300); // the area within 300 m
17
+ * console.log(area(zone) / 1e6, 'km²');
18
+ * ```
19
+ *
20
+ * The functions take GeoJSON geometries, or anything with a `geometry` field whose geometry
21
+ * they use (GeoJSON features and the features of the drawing), and return GeoJSON geometries. Lengths, distances, radii and tolerances are in meters, areas in
22
+ * square meters, and bearings and coordinates in degrees. An input whose shape a function
23
+ * cannot take throws a {@link GeometryError}; a computation whose result is empty returns null.
24
+ * Crossing the ±180 degree meridian and the vicinity of the poles are out of scope.
25
+ *
26
+ * Read next: the guide
27
+ * [snapping and geometry](https://sakuzu.github.io/maplibre-gl-draw/guides/snapping-geometry),
28
+ * which also shows the operations that change the drawing (`draw.features.union` and the
29
+ * rest). The functions used most are {@link area}, {@link length}, {@link buffer} and
30
+ * {@link union}.
31
+ *
32
+ * @module geometry
14
33
  */
15
- // Coordinate generation from a bearing
16
- export { getPointAtAngle } from './angle.js';
17
- // Bounding box
18
- export { bboxContains, bboxIntersects, boundingBox, coordinatesBBox } from './bbox.js';
19
- // Boolean operations
20
- export { clip, difference, differenceAll, intersection, intersectionAll, normalizeArea, union, unionAll, } from './boolean.js';
21
- export { buffer, DEFAULT_BUFFER_SEGMENTS } from './buffer.js';
22
- // Geodesic circle
23
- export { generateCirclePolygon } from './circle.js';
24
- // Discrimination and normalization of coordinate shapes
25
- export { closeRing, flattenAreaCoordinates, isMultiPolygonCoordinates, isRingClosed, toMultiPolygonCoordinates, } from './coords.js';
26
- // Geodesic distance and bearing
27
- export { destinationPoint, haversineDistanceMeters, initialBearingDegrees } from './distance.js';
34
+ // biome-ignore-all assist/source/organizeImports: the exports are grouped by section
35
+ // Measure
36
+ export { along, area, bearing, centroid, destination, distance, length, midpoint, nearestPointOnLine, perimeter, pointOnSurface, } from './public-measure.js';
37
+ // Create
38
+ export { buffer, circle } from './public-create.js';
39
+ // Combine
40
+ export { difference, intersection, split, union } from './public-combine.js';
41
+ // Test
42
+ export { bboxContains, bboxIntersects } from './bbox.js';
43
+ export { contains, overlaps, pointInPolygon } from './public-predicates.js';
44
+ // Repair
45
+ export { makeValid, rewind, simplify } from './public-repair.js';
46
+ // Bounds and units
47
+ export { bbox } from './public-bounds.js';
48
+ export { metersToDegrees } from './units.js';
28
49
  export { GeometryError } from './errors.js';
29
- // Measurement
30
- export { centroid, geodesicLength, pointOnSurface, sphericalArea } from './measure.js';
31
- // Predicates
32
- export { contains, intersects, pointInPolygon, within } from './predicates.js';
33
- // Shaping
34
- export { isRingClockwise, normalizeMultiPolygonOrientation, normalizePolygonOrientation, normalizeRingOrientation, signedRingArea, simplify, } from './simplify.js';
35
- // Splitting by a line
36
- export { segmentIntersection, splitArea } from './split.js';
37
- // Unit conversion and geodetic constants
38
- export { EARTH_RADIUS_METERS, toDegrees, toRadians } from './units.js';
50
+ export { EARTH_RADIUS_METERS } from './units.js';
@@ -8,13 +8,6 @@ import type { AreaCoordinates, Coordinate } from './types.js';
8
8
  * @param path The vertices `[lng, lat]` in degrees
9
9
  * @returns The length in meters. 0 for fewer than 2 positions. NaN when a position is not
10
10
  * finite
11
- *
12
- * @example
13
- * ```ts
14
- * import { geodesicLength } from '@sakuzu/maplibre-gl-draw/geometry';
15
- *
16
- * geodesicLength([[0, 0], [1, 0], [1, 1]]); // about 222,390 m
17
- * ```
18
11
  */
19
12
  export declare function geodesicLength(path: Coordinate[]): number;
20
13
  /**
@@ -32,14 +25,6 @@ export declare function geodesicLength(path: Coordinate[]): number;
32
25
  * @returns The area in square meters. 0 when nothing with an area remains
33
26
  * @throws {@link GeometryError} when the boolean operation engine fails even after the
34
27
  * retry on the 1e-9 degree grid
35
- *
36
- * @example
37
- * ```ts
38
- * import { sphericalArea } from '@sakuzu/maplibre-gl-draw/geometry';
39
- *
40
- * // A 1 x 1 degree square on the equator
41
- * sphericalArea([[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]]); // about 1.236e10 m²
42
- * ```
43
28
  */
44
29
  export declare function sphericalArea(polygon: AreaCoordinates): number;
45
30
  /**
@@ -65,17 +50,5 @@ export declare function centroid(polygon: AreaCoordinates): Coordinate | null;
65
50
  *
66
51
  * @param polygon Polygon or MultiPolygon coordinates in degrees
67
52
  * @returns The point `[lng, lat]` in degrees. `null` when there is not a single position
68
- *
69
- * @example
70
- * ```ts
71
- * import { centroid, pointOnSurface } from '@sakuzu/maplibre-gl-draw/geometry';
72
- *
73
- * // A U shape: the centroid falls in the gap between the arms
74
- * const u: [number, number][][] = [
75
- * [[0, 0], [3, 0], [3, 3], [2, 3], [2, 1], [1, 1], [1, 3], [0, 3], [0, 0]],
76
- * ];
77
- * centroid(u); // [1.5, 1.357...] (outside)
78
- * pointOnSurface(u); // [0.5, 1.357...] (inside the left arm)
79
- * ```
80
53
  */
81
54
  export declare function pointOnSurface(polygon: AreaCoordinates): Coordinate | null;
@@ -22,13 +22,6 @@ import { EARTH_RADIUS_METERS, toRadians } from './units.js';
22
22
  * @param path The vertices `[lng, lat]` in degrees
23
23
  * @returns The length in meters. 0 for fewer than 2 positions. NaN when a position is not
24
24
  * finite
25
- *
26
- * @example
27
- * ```ts
28
- * import { geodesicLength } from '@sakuzu/maplibre-gl-draw/geometry';
29
- *
30
- * geodesicLength([[0, 0], [1, 0], [1, 1]]); // about 222,390 m
31
- * ```
32
25
  */
33
26
  export function geodesicLength(path) {
34
27
  let total = 0;
@@ -69,14 +62,6 @@ function sphericalRingArea(ring) {
69
62
  * @returns The area in square meters. 0 when nothing with an area remains
70
63
  * @throws {@link GeometryError} when the boolean operation engine fails even after the
71
64
  * retry on the 1e-9 degree grid
72
- *
73
- * @example
74
- * ```ts
75
- * import { sphericalArea } from '@sakuzu/maplibre-gl-draw/geometry';
76
- *
77
- * // A 1 x 1 degree square on the equator
78
- * sphericalArea([[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]]); // about 1.236e10 m²
79
- * ```
80
65
  */
81
66
  export function sphericalArea(polygon) {
82
67
  let total = 0;
@@ -192,18 +177,6 @@ function scanlineCrossings(polygon, lat) {
192
177
  *
193
178
  * @param polygon Polygon or MultiPolygon coordinates in degrees
194
179
  * @returns The point `[lng, lat]` in degrees. `null` when there is not a single position
195
- *
196
- * @example
197
- * ```ts
198
- * import { centroid, pointOnSurface } from '@sakuzu/maplibre-gl-draw/geometry';
199
- *
200
- * // A U shape: the centroid falls in the gap between the arms
201
- * const u: [number, number][][] = [
202
- * [[0, 0], [3, 0], [3, 3], [2, 3], [2, 1], [1, 1], [1, 3], [0, 3], [0, 0]],
203
- * ];
204
- * centroid(u); // [1.5, 1.357...] (outside)
205
- * pointOnSurface(u); // [0.5, 1.357...] (inside the left arm)
206
- * ```
207
180
  */
208
181
  export function pointOnSurface(polygon) {
209
182
  const center = centroid(polygon);
@@ -10,15 +10,6 @@ import type { AreaCoordinates, Coordinate } from './types.js';
10
10
  * @param polygon Polygon or MultiPolygon coordinates in degrees
11
11
  * @returns `true` when the point is inside an outer ring and inside none of its holes (in
12
12
  * any part of a MultiPolygon). `false` for empty coordinates
13
- *
14
- * @example
15
- * ```ts
16
- * import { pointInPolygon } from '@sakuzu/maplibre-gl-draw/geometry';
17
- *
18
- * const square: [number, number][][] = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
19
- * pointInPolygon([0.5, 0.5], square); // true
20
- * pointInPolygon([2, 0.5], square); // false
21
- * ```
22
13
  */
23
14
  export declare function pointInPolygon(point: Coordinate, polygon: AreaCoordinates): boolean;
24
15
  /**
@@ -43,15 +43,6 @@ function pointInRing(point, ring) {
43
43
  * @param polygon Polygon or MultiPolygon coordinates in degrees
44
44
  * @returns `true` when the point is inside an outer ring and inside none of its holes (in
45
45
  * any part of a MultiPolygon). `false` for empty coordinates
46
- *
47
- * @example
48
- * ```ts
49
- * import { pointInPolygon } from '@sakuzu/maplibre-gl-draw/geometry';
50
- *
51
- * const square: [number, number][][] = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
52
- * pointInPolygon([0.5, 0.5], square); // true
53
- * pointInPolygon([2, 0.5], square); // false
54
- * ```
55
46
  */
56
47
  export function pointInPolygon(point, polygon) {
57
48
  for (const part of toMultiPolygonCoordinates(polygon)) {
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Bounds: the public bounding box of a geometry
3
+ */
4
+ import type { Geometry } from 'geojson';
5
+ import type { BBox } from './types.js';
6
+ /**
7
+ * Returns the bounding box `[minLng, minLat, maxLng, maxLat]` in degrees of a geometry.
8
+ *
9
+ * @param geometry The geometry, or a feature whose geometry it is; coordinates in degrees.
10
+ * Every position counts, the holes and the members of a collection included; a position
11
+ * that is not finite is skipped. Crossing the ±180 degree meridian is not handled
12
+ * @returns The box in degrees
13
+ * @throws {@link GeometryError} (`invalid-input`) when the input is not a geometry or a feature
14
+ * with one, and when it has no finite position
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { bbox } from '@sakuzu/maplibre-gl-draw/geometry';
19
+ *
20
+ * bbox({ type: 'LineString', coordinates: [[139.7, 35.6], [139.8, 35.7]] });
21
+ * // [139.7, 35.6, 139.8, 35.7]
22
+ * ```
23
+ */
24
+ export declare function bbox(geometry: Geometry | {
25
+ readonly geometry: Geometry;
26
+ }): BBox;
@@ -0,0 +1,30 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { coordinatesBBox } from './bbox.js';
4
+ import { invalidInput } from './errors.js';
5
+ import { geometryOf, positionsOf } from './geojson.js';
6
+ /**
7
+ * Returns the bounding box `[minLng, minLat, maxLng, maxLat]` in degrees of a geometry.
8
+ *
9
+ * @param geometry The geometry, or a feature whose geometry it is; coordinates in degrees.
10
+ * Every position counts, the holes and the members of a collection included; a position
11
+ * that is not finite is skipped. Crossing the ±180 degree meridian is not handled
12
+ * @returns The box in degrees
13
+ * @throws {@link GeometryError} (`invalid-input`) when the input is not a geometry or a feature
14
+ * with one, and when it has no finite position
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { bbox } from '@sakuzu/maplibre-gl-draw/geometry';
19
+ *
20
+ * bbox({ type: 'LineString', coordinates: [[139.7, 35.6], [139.8, 35.7]] });
21
+ * // [139.7, 35.6, 139.8, 35.7]
22
+ * ```
23
+ */
24
+ export function bbox(geometry) {
25
+ const box = coordinatesBBox(positionsOf(geometryOf(geometry, 'bbox')));
26
+ if (box === null) {
27
+ throw invalidInput('bbox', 'the geometry has no finite position');
28
+ }
29
+ return box;
30
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Combine: the public boolean operations on polygons and the split by a line
3
+ */
4
+ import type { Geometry, LineString, MultiPolygon, Polygon } from 'geojson';
5
+ /**
6
+ * Returns the union of polygons.
7
+ *
8
+ * @param polygons The Polygons and MultiPolygons, or features whose geometry is one;
9
+ * coordinates in degrees. Rings with fewer than 3 positions or a position that is not finite
10
+ * are left out
11
+ * @returns A Polygon, or a MultiPolygon when the union falls apart, with self-intersections
12
+ * resolved and the rings oriented as RFC 7946 recommends. null when nothing has an area
13
+ * @throws {@link GeometryError} (`invalid-input`) when an element is not a Polygon or a
14
+ * MultiPolygon, and (`engine-failure`) when the boolean operation fails
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { union } from '@sakuzu/maplibre-gl-draw/geometry';
19
+ *
20
+ * union([
21
+ * { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] },
22
+ * { type: 'Polygon', coordinates: [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]] },
23
+ * ]);
24
+ * // { type: 'Polygon', coordinates: [[[0, 0], [1.5, 0], [1.5, 1], [0, 1], [0, 0]]] }
25
+ * ```
26
+ */
27
+ export declare function union(polygons: readonly (Polygon | MultiPolygon | {
28
+ readonly geometry: Geometry;
29
+ })[]): Polygon | MultiPolygon | null;
30
+ /**
31
+ * Returns the part that polygons have in common.
32
+ *
33
+ * @param polygons The Polygons and MultiPolygons, or features whose geometry is one;
34
+ * coordinates in degrees
35
+ * @returns A Polygon or a MultiPolygon in the form {@link union} returns. null when the
36
+ * polygons share no area (touching boundaries included), when one has no area, and for an
37
+ * empty array
38
+ * @throws {@link GeometryError} (`invalid-input`) when an element is not a Polygon or a
39
+ * MultiPolygon, and (`engine-failure`) when the boolean operation fails
40
+ */
41
+ export declare function intersection(polygons: readonly (Polygon | MultiPolygon | {
42
+ readonly geometry: Geometry;
43
+ })[]): Polygon | MultiPolygon | null;
44
+ /**
45
+ * Returns a polygon with other polygons removed from it.
46
+ *
47
+ * @param subject The Polygon or MultiPolygon to remove from, or a feature whose geometry is
48
+ * one; coordinates in degrees
49
+ * @param others The Polygons and MultiPolygons to remove, or features whose geometry is one;
50
+ * coordinates in degrees
51
+ * @returns A Polygon or a MultiPolygon in the form {@link union} returns; a removed area inside
52
+ * the subject becomes a hole. null when nothing remains
53
+ * @throws {@link GeometryError} (`invalid-input`) when an argument is not a Polygon or a
54
+ * MultiPolygon, and (`engine-failure`) when the boolean operation fails
55
+ */
56
+ export declare function difference(subject: Polygon | MultiPolygon | {
57
+ readonly geometry: Geometry;
58
+ }, others: readonly (Polygon | MultiPolygon | {
59
+ readonly geometry: Geometry;
60
+ })[]): Polygon | MultiPolygon | null;
61
+ /**
62
+ * Cuts a polygon with a line and returns the pieces.
63
+ *
64
+ * @param polygon The Polygon or MultiPolygon, or a feature whose geometry is one; coordinates
65
+ * in degrees
66
+ * @param line The cutting LineString, or a feature whose geometry is one; coordinates in
67
+ * degrees. A stretch that runs along the boundary does not cut, and positions closer than
68
+ * 1e-9 degrees count as one
69
+ * @returns One Polygon per piece, holes kept. When the line does not cut across, the polygon
70
+ * itself (one Polygon per part of a MultiPolygon). An empty array when it has no area
71
+ * @throws {@link GeometryError} (`invalid-input`) when an argument is not of the expected
72
+ * type, and (`engine-failure`) when the boolean operation fails
73
+ */
74
+ export declare function split(polygon: Polygon | MultiPolygon | {
75
+ readonly geometry: Geometry;
76
+ }, line: LineString | {
77
+ readonly geometry: Geometry;
78
+ }): Polygon[];