@sakuzu/maplibre-gl-draw 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/CHANGELOG.md +1016 -2
  2. package/README.ja.md +39 -19
  3. package/README.md +41 -21
  4. package/dist/api/datasets.d.ts +258 -0
  5. package/dist/api/document.d.ts +66 -0
  6. package/dist/api/draw.d.ts +135 -0
  7. package/dist/api/draw.js +18 -0
  8. package/dist/api/drawing.d.ts +87 -0
  9. package/dist/api/errors.d.ts +35 -0
  10. package/dist/api/errors.js +35 -0
  11. package/dist/api/events.d.ts +306 -0
  12. package/dist/api/extension/context.d.ts +247 -0
  13. package/dist/api/extension/feature-type.d.ts +129 -0
  14. package/dist/api/extension/mode.d.ts +123 -0
  15. package/dist/api/extension/plugin.d.ts +51 -0
  16. package/dist/api/extension/plugin.js +3 -0
  17. package/dist/api/extension/provider.d.ts +119 -0
  18. package/dist/api/extension/provider.js +3 -0
  19. package/dist/api/extension/render.d.ts +176 -0
  20. package/dist/api/extension/render.js +3 -0
  21. package/dist/api/extension/store.d.ts +190 -0
  22. package/dist/api/extension/store.js +3 -0
  23. package/dist/api/extensions.d.ts +306 -0
  24. package/dist/api/extensions.js +3 -0
  25. package/dist/api/features.d.ts +188 -0
  26. package/dist/api/features.js +3 -0
  27. package/dist/api/groups.d.ts +111 -0
  28. package/dist/api/groups.js +3 -0
  29. package/dist/api/hidden.d.ts +45 -0
  30. package/dist/api/hidden.js +3 -0
  31. package/dist/api/impl/adapters.js +463 -0
  32. package/dist/api/impl/contexts.js +466 -0
  33. package/dist/api/impl/create-draw.js +124 -0
  34. package/dist/api/impl/datasets.js +404 -0
  35. package/dist/api/impl/destroy-guard.js +74 -0
  36. package/dist/api/impl/document.js +280 -0
  37. package/dist/api/impl/drawing.js +180 -0
  38. package/dist/api/impl/engine-context.d.ts +7 -0
  39. package/dist/api/{context.js → impl/engine-context.js} +49 -38
  40. package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
  41. package/dist/api/impl/events.js +422 -0
  42. package/dist/api/impl/extension-host.js +361 -0
  43. package/dist/api/impl/extensions.js +229 -0
  44. package/dist/api/impl/features.js +445 -0
  45. package/dist/api/impl/geometry/apply.d.ts +32 -0
  46. package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
  47. package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
  48. package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
  49. package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
  50. package/dist/api/{geometry → impl/geometry}/split.js +10 -21
  51. package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
  52. package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
  53. package/dist/api/impl/geometry/types.js +3 -0
  54. package/dist/api/impl/groups.d.ts +3 -0
  55. package/dist/api/impl/groups.js +268 -0
  56. package/dist/api/impl/hidden.js +60 -0
  57. package/dist/api/impl/import-export/constants.d.ts +22 -0
  58. package/dist/api/impl/import-export/constants.js +24 -0
  59. package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
  60. package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
  61. package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
  62. package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
  63. package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
  64. package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
  65. package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
  66. package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
  67. package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
  68. package/dist/api/impl/import-export/image-import.d.ts +16 -0
  69. package/dist/api/impl/import-export/image-import.js +73 -0
  70. package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
  71. package/dist/api/impl/import-export/legacy-image-style.js +49 -0
  72. package/dist/api/impl/import-export/native-format.d.ts +14 -0
  73. package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
  74. package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
  75. package/dist/api/impl/import-export/native-upgrade.js +139 -0
  76. package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
  77. package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
  78. package/dist/api/impl/import-export/style-validation.d.ts +24 -0
  79. package/dist/api/impl/import-export/style-validation.js +86 -0
  80. package/dist/api/impl/import-export/types.d.ts +52 -0
  81. package/dist/api/impl/import-export/types.js +3 -0
  82. package/dist/api/impl/input.js +180 -0
  83. package/dist/api/impl/layers.js +307 -0
  84. package/dist/api/impl/metadata.d.ts +1 -0
  85. package/dist/api/impl/metadata.js +22 -0
  86. package/dist/api/impl/options.d.ts +1 -0
  87. package/dist/api/impl/options.js +822 -0
  88. package/dist/api/impl/placement.d.ts +1 -0
  89. package/dist/api/impl/placement.js +138 -0
  90. package/dist/api/impl/render-context.d.ts +13 -0
  91. package/dist/api/impl/render-context.js +272 -0
  92. package/dist/api/impl/rows.d.ts +1 -0
  93. package/dist/api/impl/rows.js +46 -0
  94. package/dist/api/impl/selection.d.ts +1 -0
  95. package/dist/api/impl/selection.js +186 -0
  96. package/dist/api/impl/shared.d.ts +64 -0
  97. package/dist/api/impl/shared.js +178 -0
  98. package/dist/api/impl/validate-extension.d.ts +1 -0
  99. package/dist/api/impl/validate-extension.js +159 -0
  100. package/dist/api/layers.d.ts +130 -0
  101. package/dist/api/layers.js +3 -0
  102. package/dist/api/metadata.d.ts +18 -0
  103. package/dist/api/metadata.js +3 -0
  104. package/dist/api/model.d.ts +487 -0
  105. package/dist/api/model.js +47 -0
  106. package/dist/api/options.d.ts +466 -0
  107. package/dist/api/options.js +3 -0
  108. package/dist/api/selection.d.ts +94 -0
  109. package/dist/api/selection.js +3 -0
  110. package/dist/api/state.d.ts +155 -0
  111. package/dist/api/state.js +12 -0
  112. package/dist/{display → dataset}/chunk.d.ts +1 -1
  113. package/dist/{display → dataset}/chunk.js +4 -3
  114. package/dist/{display → dataset}/dataset.js +18 -21
  115. package/dist/dataset/interaction.d.ts +1 -0
  116. package/dist/{display → dataset}/interaction.js +18 -6
  117. package/dist/dataset/manager.d.ts +1 -0
  118. package/dist/dataset/provider.d.ts +1 -0
  119. package/dist/{display → dataset}/retained.d.ts +1 -1
  120. package/dist/{display → dataset}/retained.js +8 -7
  121. package/dist/dataset/source.d.ts +1 -0
  122. package/dist/{display → dataset}/source.js +17 -4
  123. package/dist/dataset/spatial.d.ts +1 -0
  124. package/dist/{display → dataset}/spatial.js +1 -1
  125. package/dist/dataset/style.d.ts +1 -0
  126. package/dist/{display → dataset}/style.js +1 -1
  127. package/dist/dataset/table-source.d.ts +1 -0
  128. package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
  129. package/dist/{display → dataset}/thinning.d.ts +0 -10
  130. package/dist/{display → dataset}/thinning.js +3 -2
  131. package/dist/dataset/triangulation.d.ts +1 -0
  132. package/dist/{display → dataset}/triangulation.js +0 -0
  133. package/dist/{display → dataset}/types.d.ts +82 -121
  134. package/dist/dataset/types.js +61 -0
  135. package/dist/dispatcher/hit-test/box-strategies.js +13 -13
  136. package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
  137. package/dist/dispatcher/hit-test/globe-shape.js +5 -4
  138. package/dist/dispatcher/hit-test/service.d.ts +17 -0
  139. package/dist/dispatcher/hit-test/service.js +80 -16
  140. package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
  141. package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
  142. package/dist/dispatcher/hit-test/strategies/image.js +6 -18
  143. package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
  144. package/dist/dispatcher/hit-test/strategies/line.js +9 -2
  145. package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
  146. package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
  147. package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
  148. package/dist/dispatcher/hit-test/strategies/point.js +8 -4
  149. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
  150. package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
  151. package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
  152. package/dist/dispatcher/input-router.js +152 -69
  153. package/dist/dispatcher/normalizer.js +6 -2
  154. package/dist/dispatcher/types.d.ts +6 -1
  155. package/dist/extension/feature-handler.d.ts +1 -182
  156. package/dist/extension/index.d.ts +4 -7
  157. package/dist/extension/renderers.d.ts +1 -208
  158. package/dist/geometry/angle.d.ts +0 -8
  159. package/dist/geometry/angle.js +0 -8
  160. package/dist/geometry/bbox.d.ts +4 -12
  161. package/dist/geometry/bbox.js +4 -12
  162. package/dist/geometry/boolean.d.ts +0 -51
  163. package/dist/geometry/boolean.js +0 -51
  164. package/dist/geometry/buffer.d.ts +0 -26
  165. package/dist/geometry/buffer.js +0 -26
  166. package/dist/geometry/circle.d.ts +0 -9
  167. package/dist/geometry/circle.js +0 -9
  168. package/dist/geometry/coords.d.ts +0 -16
  169. package/dist/geometry/coords.js +0 -16
  170. package/dist/geometry/distance.d.ts +0 -24
  171. package/dist/geometry/distance.js +0 -24
  172. package/dist/geometry/errors.d.ts +21 -36
  173. package/dist/geometry/errors.js +49 -29
  174. package/dist/geometry/geojson.d.ts +81 -0
  175. package/dist/geometry/geojson.js +164 -0
  176. package/dist/geometry/index.d.ts +38 -23
  177. package/dist/geometry/index.js +43 -31
  178. package/dist/geometry/measure.d.ts +0 -27
  179. package/dist/geometry/measure.js +0 -27
  180. package/dist/geometry/predicates.d.ts +0 -9
  181. package/dist/geometry/predicates.js +0 -9
  182. package/dist/geometry/public-bounds.d.ts +26 -0
  183. package/dist/geometry/public-bounds.js +30 -0
  184. package/dist/geometry/public-combine.d.ts +78 -0
  185. package/dist/geometry/public-combine.js +82 -0
  186. package/dist/geometry/public-create.d.ts +54 -0
  187. package/dist/geometry/public-create.js +70 -0
  188. package/dist/geometry/public-measure.d.ts +170 -0
  189. package/dist/geometry/public-measure.js +283 -0
  190. package/dist/geometry/public-predicates.d.ts +54 -0
  191. package/dist/geometry/public-predicates.js +144 -0
  192. package/dist/geometry/public-repair.d.ts +75 -0
  193. package/dist/geometry/public-repair.js +77 -0
  194. package/dist/geometry/simplify.d.ts +0 -7
  195. package/dist/geometry/simplify.js +0 -7
  196. package/dist/geometry/split.d.ts +0 -20
  197. package/dist/geometry/split.js +0 -20
  198. package/dist/geometry/units.d.ts +20 -12
  199. package/dist/geometry/units.js +20 -12
  200. package/dist/index.d.ts +52 -66
  201. package/dist/index.js +6 -18
  202. package/dist/messages.d.ts +7 -7
  203. package/dist/modes/draw/circle.js +83 -207
  204. package/dist/modes/draw/commit-layer.d.ts +5 -16
  205. package/dist/modes/draw/commit-layer.js +2 -13
  206. package/dist/modes/draw/freehand.js +108 -246
  207. package/dist/modes/draw/image.js +4 -2
  208. package/dist/modes/draw/index.d.ts +5 -5
  209. package/dist/modes/draw/index.js +5 -5
  210. package/dist/modes/draw/line.js +18 -354
  211. package/dist/modes/draw/point.js +29 -78
  212. package/dist/modes/draw/polygon.js +23 -368
  213. package/dist/modes/draw/trace-support.d.ts +43 -36
  214. package/dist/modes/draw/trace-support.js +95 -98
  215. package/dist/modes/draw/vertex-drawing.d.ts +1 -0
  216. package/dist/modes/draw/vertex-drawing.js +176 -0
  217. package/dist/modes/handler.d.ts +1 -285
  218. package/dist/modes/manager.d.ts +2 -2
  219. package/dist/modes/manager.js +3 -0
  220. package/dist/modes/select/box-selection.d.ts +3 -3
  221. package/dist/modes/select/box-selection.js +2 -1
  222. package/dist/modes/select/click-handler.d.ts +5 -5
  223. package/dist/modes/select/click-handler.js +22 -20
  224. package/dist/modes/select/cursor-handler.d.ts +2 -2
  225. package/dist/modes/select/drag/intermediate-writes.js +1 -1
  226. package/dist/modes/select/drag/move.js +3 -3
  227. package/dist/modes/select/drag/operation.d.ts +3 -3
  228. package/dist/modes/select/drag/radius.js +5 -4
  229. package/dist/modes/select/drag/transform.d.ts +2 -2
  230. package/dist/modes/select/drag/transform.js +11 -5
  231. package/dist/modes/select/drag/vertex.d.ts +2 -2
  232. package/dist/modes/select/drag/vertex.js +13 -8
  233. package/dist/modes/select/drag-handler.js +44 -25
  234. package/dist/modes/select/mode.js +17 -17
  235. package/dist/modes/select/shortcut-handler.d.ts +8 -8
  236. package/dist/modes/select/shortcut-handler.js +9 -7
  237. package/dist/operations/layer-operations.js +29 -168
  238. package/dist/operations/resize.d.ts +2 -2
  239. package/dist/operations/resize.js +5 -5
  240. package/dist/operations/rotate.js +5 -5
  241. package/dist/operations/selection-operations.d.ts +16 -1
  242. package/dist/operations/selection-operations.js +28 -13
  243. package/dist/operations/shared-vertex.js +4 -2
  244. package/dist/operations/trace-graph.d.ts +0 -18
  245. package/dist/operations/trace-graph.js +0 -18
  246. package/dist/operations/vertex.js +36 -35
  247. package/dist/shared/color.d.ts +1 -0
  248. package/dist/shared/color.js +245 -0
  249. package/dist/shared/config/constants.d.ts +1 -54
  250. package/dist/shared/config/constants.js +1 -58
  251. package/dist/shared/config/feature-style.d.ts +16 -13
  252. package/dist/shared/config/feature-style.js +9 -0
  253. package/dist/shared/config/rendering.d.ts +3 -3
  254. package/dist/shared/config/selection-highlight.d.ts +0 -15
  255. package/dist/shared/config/selection-highlight.js +4 -7
  256. package/dist/shared/config/selection.d.ts +2 -32
  257. package/dist/shared/config/selection.js +0 -18
  258. package/dist/shared/config/topology.d.ts +2 -2
  259. package/dist/shared/config/trace.d.ts +4 -4
  260. package/dist/shared/math/angle.d.ts +1 -1
  261. package/dist/shared/math/angle.js +1 -1
  262. package/dist/shared/math/circle.d.ts +1 -1
  263. package/dist/shared/math/circle.js +1 -1
  264. package/dist/shared/math/distance.d.ts +2 -1
  265. package/dist/shared/math/distance.js +3 -2
  266. package/dist/shared/math/index.d.ts +1 -1
  267. package/dist/shared/math/index.js +1 -1
  268. package/dist/shared/math/transform.d.ts +23 -0
  269. package/dist/shared/math/transform.js +47 -28
  270. package/dist/shared/properties.d.ts +18 -0
  271. package/dist/shared/properties.js +129 -0
  272. package/dist/shared/types/events.d.ts +15 -7
  273. package/dist/shared/types/model.d.ts +109 -159
  274. package/dist/shared/types/style.d.ts +1 -1
  275. package/dist/shared/utils/color.d.ts +2 -36
  276. package/dist/shared/utils/color.js +13 -70
  277. package/dist/shared/utils/coordinates.d.ts +30 -4
  278. package/dist/shared/utils/coordinates.js +56 -10
  279. package/dist/shared/utils/event-emitter.d.ts +1 -262
  280. package/dist/shared/utils/event-emitter.js +4 -3
  281. package/dist/shared/utils/feature-bbox.js +8 -7
  282. package/dist/shared/utils/feature-segments.js +5 -4
  283. package/dist/shared/utils/image.d.ts +0 -4
  284. package/dist/shared/utils/image.js +0 -6
  285. package/dist/shared/utils/name-generator.d.ts +14 -20
  286. package/dist/shared/utils/name-generator.js +20 -3
  287. package/dist/shared/utils/pixel-ratio.d.ts +9 -3
  288. package/dist/shared/utils/pixel-ratio.js +13 -4
  289. package/dist/shared/utils/property.d.ts +7 -50
  290. package/dist/shared/utils/property.js +22 -87
  291. package/dist/snapping/custom-targets.js +21 -4
  292. package/dist/snapping/indicator.js +20 -11
  293. package/dist/snapping/providers/display.d.ts +6 -1
  294. package/dist/snapping/providers/display.js +2 -1
  295. package/dist/snapping/providers/guide.d.ts +3 -43
  296. package/dist/snapping/providers/guide.js +1 -44
  297. package/dist/snapping/providers/intersection.js +1 -1
  298. package/dist/snapping/providers/store.js +3 -3
  299. package/dist/snapping/service.js +18 -7
  300. package/dist/snapping/types.d.ts +9 -35
  301. package/dist/store/draw-store.js +233 -142
  302. package/dist/store/local-visibility.d.ts +11 -6
  303. package/dist/store/local-visibility.js +38 -7
  304. package/dist/store/lock.d.ts +0 -6
  305. package/dist/store/lock.js +0 -6
  306. package/dist/store/memory/change-bus.d.ts +3 -3
  307. package/dist/store/memory/change-bus.js +12 -0
  308. package/dist/store/memory/file-store.d.ts +2 -2
  309. package/dist/store/memory/ui-state.d.ts +1 -51
  310. package/dist/store/memory/ui-state.js +122 -134
  311. package/dist/store/memory.d.ts +1 -8
  312. package/dist/store/memory.js +249 -45
  313. package/dist/store/ordering.d.ts +9 -0
  314. package/dist/store/ordering.js +17 -0
  315. package/dist/store/spatial/spatial-index.d.ts +1 -1
  316. package/dist/store/spatial/spatial-index.js +1 -1
  317. package/dist/store/spatial/store-spatial-index.d.ts +3 -1
  318. package/dist/store/spatial/store-spatial-index.js +9 -3
  319. package/dist/store/store.d.ts +66 -107
  320. package/dist/store/types.d.ts +1 -1
  321. package/dist/store/writable-layer.d.ts +1 -1
  322. package/dist/store/writable-layer.js +2 -2
  323. package/dist/table/builder.d.ts +83 -0
  324. package/dist/table/builder.js +381 -0
  325. package/dist/table/index.d.ts +37 -0
  326. package/dist/table/index.js +5 -0
  327. package/dist/table/packed-rtree.d.ts +1 -0
  328. package/dist/{display → table}/packed-rtree.js +1 -1
  329. package/dist/table/partition.d.ts +1 -0
  330. package/dist/{display → table}/partition.js +3 -3
  331. package/dist/table/prepare.d.ts +44 -0
  332. package/dist/table/prepare.js +136 -0
  333. package/dist/table/table.d.ts +1 -0
  334. package/dist/{display/columnar → table}/table.js +29 -25
  335. package/dist/{display/columnar → table}/types.d.ts +68 -72
  336. package/dist/table/types.js +3 -0
  337. package/dist/view/coordinator.js +4 -3
  338. package/dist/view/feature-companion.d.ts +13 -7
  339. package/dist/view/feature-companion.js +11 -3
  340. package/dist/view/globe-subdivision.js +3 -3
  341. package/dist/view/layer/attach.d.ts +1 -1
  342. package/dist/view/layer/attach.js +1 -1
  343. package/dist/view/layer/custom-layer.js +40 -11
  344. package/dist/view/layer/display-list.js +2 -1
  345. package/dist/view/layer/drape-planner.d.ts +2 -2
  346. package/dist/view/layer/frame-render.d.ts +3 -3
  347. package/dist/view/layer/frame-render.js +7 -2
  348. package/dist/view/layer/frame-state.d.ts +6 -6
  349. package/dist/view/layer/index.d.ts +2 -2
  350. package/dist/view/layer/index.js +1 -1
  351. package/dist/view/layer/render.d.ts +4 -4
  352. package/dist/view/layer/render.js +3 -8
  353. package/dist/view/layer/renderers.d.ts +2 -2
  354. package/dist/view/layer/renderers.js +1 -1
  355. package/dist/view/layer/slot-manager.d.ts +2 -2
  356. package/dist/view/layer/slot-manager.js +4 -4
  357. package/dist/view/layer/slots.d.ts +2 -2
  358. package/dist/view/layer/slots.js +1 -1
  359. package/dist/view/layer/store-retained-bbox.js +3 -2
  360. package/dist/view/layer/store-retained-classify.d.ts +5 -7
  361. package/dist/view/layer/store-retained-classify.js +19 -7
  362. package/dist/view/layer/store-retained-collect.js +8 -7
  363. package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
  364. package/dist/view/layer/store-retained-coord-patch.js +13 -4
  365. package/dist/view/layer/store-retained-immediate.d.ts +3 -3
  366. package/dist/view/layer/store-retained-immediate.js +3 -8
  367. package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
  368. package/dist/view/layer/store-retained.d.ts +2 -2
  369. package/dist/view/layer/store-retained.js +1 -1
  370. package/dist/view/renderers/batch-manager.js +8 -7
  371. package/dist/view/renderers/drawer.js +21 -15
  372. package/dist/view/renderers/image.js +13 -39
  373. package/dist/view/renderers/line/line-types.d.ts +3 -3
  374. package/dist/view/renderers/line/sdf-line.js +3 -1
  375. package/dist/view/renderers/point/billboard-depth.js +1 -1
  376. package/dist/view/renderers/point/point-instance.js +1 -1
  377. package/dist/view/renderers/point/point-shape.js +2 -2
  378. package/dist/view/renderers/point/point-style.js +48 -4
  379. package/dist/view/renderers/polygon/batch.js +1 -2
  380. package/dist/view/renderers/polygon/fill.js +3 -1
  381. package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
  382. package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
  383. package/dist/view/renderers/stroke.js +3 -1
  384. package/dist/view/shaders/helpers.d.ts +2 -42
  385. package/dist/view/shaders/helpers.js +0 -6
  386. package/dist/view/shaders/projection.d.ts +15 -7
  387. package/dist/view/shaders/projection.js +23 -6
  388. package/dist/view/shaders/quad.d.ts +16 -12
  389. package/dist/view/shaders/quad.js +34 -13
  390. package/dist/view/style-rule.d.ts +5 -42
  391. package/dist/view/style-rule.js +20 -44
  392. package/dist/view/terrain/binding.d.ts +1 -0
  393. package/dist/view/terrain/binding.js +29 -0
  394. package/dist/view/terrain/context.d.ts +3 -4
  395. package/dist/view/terrain/context.js +4 -5
  396. package/dist/view/terrain/drape/geometry.js +1 -1
  397. package/dist/view/terrain/drape/pass.d.ts +1 -1
  398. package/dist/view/terrain/drape/pass.js +8 -7
  399. package/dist/view/terrain/polygon.d.ts +9 -5
  400. package/dist/view/terrain/polygon.js +16 -2
  401. package/dist/view/terrain/state.d.ts +1 -1
  402. package/dist/view/terrain/state.js +1 -1
  403. package/dist/view/terrain/tessellation.d.ts +2 -2
  404. package/dist/view/terrain/tessellation.js +1 -1
  405. package/dist/view/ui/auxiliary-handles.d.ts +6 -29
  406. package/dist/view/ui/bounds.js +8 -12
  407. package/dist/view/ui/handle-test.js +2 -2
  408. package/dist/view/ui/handle-thinning.js +17 -17
  409. package/dist/view/ui/handles.js +21 -13
  410. package/dist/view/ui/helper.d.ts +1 -1
  411. package/dist/view/ui/helper.js +1 -1
  412. package/dist/view/ui/index.d.ts +1 -1
  413. package/dist/view/ui/selection-scope.js +4 -2
  414. package/dist/view/ui/selection-ui/bounding-box.js +6 -6
  415. package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
  416. package/dist/view/ui/selection-ui/extension-registry.js +70 -7
  417. package/dist/view/ui/selection-ui/index.d.ts +2 -2
  418. package/dist/view/ui/selection-ui/index.js +1 -1
  419. package/dist/view/ui/selection-ui/renderer.js +15 -38
  420. package/dist/view/ui/selection-ui/types.d.ts +17 -2
  421. package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
  422. package/dist/view/ui/selection-ui-drawer.js +63 -2
  423. package/dist/view/ui/tentative.js +1 -1
  424. package/dist/webgl/index.d.ts +65 -0
  425. package/dist/webgl/index.js +62 -0
  426. package/package.json +20 -9
  427. package/dist/api/api.d.ts +0 -1259
  428. package/dist/api/api.js +0 -86
  429. package/dist/api/context.d.ts +0 -173
  430. package/dist/api/display-api.js +0 -23
  431. package/dist/api/event-api.d.ts +0 -13
  432. package/dist/api/event-api.js +0 -17
  433. package/dist/api/extension-api.d.ts +0 -46
  434. package/dist/api/extension-api.js +0 -85
  435. package/dist/api/feature-api.d.ts +0 -11
  436. package/dist/api/feature-api.js +0 -101
  437. package/dist/api/geometry/apply.d.ts +0 -51
  438. package/dist/api/geometry/boolean.d.ts +0 -28
  439. package/dist/api/geometry/boolean.js +0 -65
  440. package/dist/api/geometry/types.d.ts +0 -31
  441. package/dist/api/geometry-operations.d.ts +0 -162
  442. package/dist/api/geometry-operations.js +0 -94
  443. package/dist/api/group-api.d.ts +0 -10
  444. package/dist/api/group-api.js +0 -78
  445. package/dist/api/import-export/constants.d.ts +0 -29
  446. package/dist/api/import-export/constants.js +0 -40
  447. package/dist/api/import-export/file-name.d.ts +0 -10
  448. package/dist/api/import-export/file-name.js +0 -20
  449. package/dist/api/import-export/geojson-export.d.ts +0 -19
  450. package/dist/api/import-export/image-import.d.ts +0 -12
  451. package/dist/api/import-export/image-import.js +0 -53
  452. package/dist/api/import-export/index.d.ts +0 -9
  453. package/dist/api/import-export/index.js +0 -107
  454. package/dist/api/import-export/native-format.d.ts +0 -15
  455. package/dist/api/import-export/style-validation.d.ts +0 -27
  456. package/dist/api/import-export/style-validation.js +0 -49
  457. package/dist/api/import-export/types.d.ts +0 -26
  458. package/dist/api/index.d.ts +0 -15
  459. package/dist/api/index.js +0 -3
  460. package/dist/api/input-api.d.ts +0 -158
  461. package/dist/api/input-api.js +0 -144
  462. package/dist/api/instance-api.d.ts +0 -38
  463. package/dist/api/instance-api.js +0 -136
  464. package/dist/api/layer-api.d.ts +0 -12
  465. package/dist/api/layer-api.js +0 -62
  466. package/dist/api/selection-api.d.ts +0 -7
  467. package/dist/api/selection-api.js +0 -78
  468. package/dist/api/snapping-api.d.ts +0 -125
  469. package/dist/api/snapping-api.js +0 -50
  470. package/dist/api/topology-api.d.ts +0 -30
  471. package/dist/api/topology-api.js +0 -16
  472. package/dist/api/tracing-api.d.ts +0 -31
  473. package/dist/api/tracing-api.js +0 -16
  474. package/dist/dispatcher/hit-test/index.d.ts +0 -14
  475. package/dist/dispatcher/hit-test/index.js +0 -9
  476. package/dist/dispatcher/index.d.ts +0 -15
  477. package/dist/dispatcher/index.js +0 -3
  478. package/dist/display/columnar/index.d.ts +0 -12
  479. package/dist/display/columnar/index.js +0 -13
  480. package/dist/display/columnar/prepare.d.ts +0 -42
  481. package/dist/display/columnar/prepare.js +0 -116
  482. package/dist/display/index.d.ts +0 -13
  483. package/dist/display/types.js +0 -43
  484. package/dist/maplibre-gl-draw.d.ts +0 -47
  485. package/dist/modes/cursor.js +0 -72
  486. package/dist/modes/index.d.ts +0 -7
  487. package/dist/operations/index.d.ts +0 -9
  488. package/dist/operations/index.js +0 -3
  489. package/dist/plugins/index.d.ts +0 -10
  490. package/dist/plugins/mutation-hooks.d.ts +0 -28
  491. package/dist/plugins/mutation-hooks.js +0 -84
  492. package/dist/plugins/plugin-context.js +0 -367
  493. package/dist/plugins/plugin-manager.d.ts +0 -103
  494. package/dist/plugins/plugin-manager.js +0 -316
  495. package/dist/plugins/plugin.d.ts +0 -529
  496. package/dist/shared/config/index.d.ts +0 -17
  497. package/dist/shared/config/index.js +0 -8
  498. package/dist/shared/utils/index.d.ts +0 -15
  499. package/dist/shared/utils/index.js +0 -24
  500. package/dist/snapping/index.d.ts +0 -14
  501. package/dist/snapping/index.js +0 -4
  502. package/dist/store/change-merger.js +0 -102
  503. package/dist/store/event-bridge.js +0 -161
  504. package/dist/store/index.d.ts +0 -12
  505. package/dist/store/index.js +0 -4
  506. package/dist/view/index.d.ts +0 -47
  507. package/dist/view/index.js +0 -20
  508. /package/dist/api/{geometry/types.js → datasets.js} +0 -0
  509. /package/dist/api/{import-export/types.js → document.js} +0 -0
  510. /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
  511. /package/dist/{display/index.js → api/events.js} +0 -0
  512. /package/dist/{modes/index.js → api/extension/context.js} +0 -0
  513. /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
  514. /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
  515. /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
  516. /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
  517. /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
  518. /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
  519. /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
  520. /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
  521. /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
  522. /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
  523. /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
  524. /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
  525. /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
  526. /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
  527. /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
  528. /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
  529. /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
  530. /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
  531. /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
  532. /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
  533. /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
  534. /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
  535. /package/dist/{display → dataset}/chunk-set.js +0 -0
  536. /package/dist/{display → dataset}/dataset.d.ts +0 -0
  537. /package/dist/{display → dataset}/manager.js +0 -0
  538. /package/dist/{display → dataset}/provider.js +0 -0
  539. /package/dist/{display → dataset}/selection.d.ts +0 -0
  540. /package/dist/{display → dataset}/selection.js +0 -0
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Repair: the public functions that tidy polygons and reduce vertices
3
+ */
4
+ import type { Geometry, LineString, MultiPolygon, Polygon } from 'geojson';
5
+ /**
6
+ * Returns a polygon with its self-intersections resolved, its rings oriented and its rings
7
+ * without an area removed.
8
+ *
9
+ * @param polygon The Polygon or MultiPolygon, or a feature whose geometry is one; coordinates
10
+ * in degrees. A ring with fewer than 3 positions or a position that is not finite is dropped
11
+ * @returns A Polygon, or a MultiPolygon when the result falls apart (a figure eight becomes two
12
+ * parts), with outer rings counter-clockwise and holes clockwise. null when nothing with an
13
+ * area remains
14
+ * @throws {@link GeometryError} (`invalid-input`) when the input is not a Polygon or a
15
+ * MultiPolygon, and (`engine-failure`) when the boolean operation fails
16
+ */
17
+ export declare function makeValid(polygon: Polygon | MultiPolygon | {
18
+ readonly geometry: Geometry;
19
+ }): Polygon | MultiPolygon | null;
20
+ /**
21
+ * Returns a polygon with its rings oriented as RFC 7946 recommends: outer rings
22
+ * counter-clockwise and holes clockwise.
23
+ *
24
+ * @param polygon The Polygon or MultiPolygon, or a feature whose geometry is one; coordinates
25
+ * in degrees. Only the orientation changes; self-intersections are left as they are (see
26
+ * {@link makeValid})
27
+ * @returns A geometry of the same type as the input
28
+ * @throws {@link GeometryError} (`invalid-input`) when the input is not a Polygon or a
29
+ * MultiPolygon
30
+ */
31
+ export declare function rewind(polygon: Polygon | {
32
+ readonly geometry: Polygon;
33
+ }): Polygon;
34
+ export declare function rewind(polygon: MultiPolygon | {
35
+ readonly geometry: MultiPolygon;
36
+ }): MultiPolygon;
37
+ export declare function rewind(polygon: Polygon | MultiPolygon | {
38
+ readonly geometry: Geometry;
39
+ }): Polygon | MultiPolygon;
40
+ /**
41
+ * Reduces the vertices of a line or a polygon with the Douglas-Peucker algorithm and a
42
+ * tolerance in meters.
43
+ *
44
+ * @param geometry The LineString, Polygon or MultiPolygon, or a feature whose geometry is one;
45
+ * coordinates in degrees
46
+ * @param toleranceMeters The largest distance in meters a removed vertex may lie from the
47
+ * simplified line, measured on a plane at the latitude of the center of the bounding box. 0
48
+ * or less removes nothing
49
+ * @returns A geometry of the same type. The ends of a line always remain, and a ring that
50
+ * would keep fewer than 4 positions is kept as it is. The result may intersect itself (see
51
+ * {@link makeValid})
52
+ * @throws {@link GeometryError} (`invalid-input`) when the input is not a LineString, a
53
+ * Polygon or a MultiPolygon, and when the tolerance is not a finite number
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * import { simplify } from '@sakuzu/maplibre-gl-draw/geometry';
58
+ *
59
+ * // The middle vertex lies about 1 m off the line, within the 5 m tolerance
60
+ * simplify({ type: 'LineString', coordinates: [[0, 0], [0.001, 0.00001], [0.002, 0]] }, 5);
61
+ * // { type: 'LineString', coordinates: [[0, 0], [0.002, 0]] }
62
+ * ```
63
+ */
64
+ export declare function simplify(geometry: LineString | {
65
+ readonly geometry: LineString;
66
+ }, toleranceMeters: number): LineString;
67
+ export declare function simplify(geometry: Polygon | {
68
+ readonly geometry: Polygon;
69
+ }, toleranceMeters: number): Polygon;
70
+ export declare function simplify(geometry: MultiPolygon | {
71
+ readonly geometry: MultiPolygon;
72
+ }, toleranceMeters: number): MultiPolygon;
73
+ export declare function simplify(geometry: LineString | Polygon | MultiPolygon | {
74
+ readonly geometry: Geometry;
75
+ }, toleranceMeters: number): LineString | Polygon | MultiPolygon;
@@ -0,0 +1,77 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { coordinatesBBox } from './bbox.js';
4
+ import { normalizeArea } from './boolean.js';
5
+ import { invalidInput, withOperation } from './errors.js';
6
+ import { areaGeometryOf, areaOf, geometryOf, positionsOf, toAreaGeometry } from './geojson.js';
7
+ import { normalizeMultiPolygonOrientation, normalizePolygonOrientation, simplify as simplifyPath, } from './simplify.js';
8
+ import { metersToDegrees, toRadians } from './units.js';
9
+ /**
10
+ * Returns a polygon with its self-intersections resolved, its rings oriented and its rings
11
+ * without an area removed.
12
+ *
13
+ * @param polygon The Polygon or MultiPolygon, or a feature whose geometry is one; coordinates
14
+ * in degrees. A ring with fewer than 3 positions or a position that is not finite is dropped
15
+ * @returns A Polygon, or a MultiPolygon when the result falls apart (a figure eight becomes two
16
+ * parts), with outer rings counter-clockwise and holes clockwise. null when nothing with an
17
+ * area remains
18
+ * @throws {@link GeometryError} (`invalid-input`) when the input is not a Polygon or a
19
+ * MultiPolygon, and (`engine-failure`) when the boolean operation fails
20
+ */
21
+ export function makeValid(polygon) {
22
+ const coordinates = areaOf(polygon, 'makeValid');
23
+ return withOperation('makeValid', () => toAreaGeometry(normalizeArea(coordinates)));
24
+ }
25
+ export function rewind(polygon) {
26
+ const geometry = areaGeometryOf(polygon, 'rewind');
27
+ if (geometry.type === 'Polygon') {
28
+ return {
29
+ type: 'Polygon',
30
+ coordinates: normalizePolygonOrientation(geometry.coordinates),
31
+ };
32
+ }
33
+ return {
34
+ type: 'MultiPolygon',
35
+ coordinates: normalizeMultiPolygonOrientation(geometry.coordinates),
36
+ };
37
+ }
38
+ /**
39
+ * Simplifies a path with a tolerance in meters: the path is scaled to a local plane in which
40
+ * a degree of longitude is `cos(latitude)` degrees of latitude, and the tolerance is taken in
41
+ * degrees of latitude
42
+ */
43
+ function simplifyInMeters(path, toleranceDegrees, lngScale) {
44
+ const scaled = path.map((position) => [position[0] * lngScale, position[1]]);
45
+ const indexOf = new Map();
46
+ scaled.forEach((position, index) => {
47
+ indexOf.set(position, index);
48
+ });
49
+ return simplifyPath(scaled, toleranceDegrees).map((position) => [
50
+ ...path[indexOf.get(position) ?? 0],
51
+ ]);
52
+ }
53
+ export function simplify(geometry, toleranceMeters) {
54
+ const input = geometryOf(geometry, 'simplify');
55
+ if (input.type !== 'LineString' && input.type !== 'Polygon' && input.type !== 'MultiPolygon') {
56
+ throw invalidInput('simplify', 'the input is not a LineString, a Polygon or a MultiPolygon');
57
+ }
58
+ if (!Number.isFinite(toleranceMeters)) {
59
+ throw invalidInput('simplify', 'the tolerance is not a finite number');
60
+ }
61
+ const box = coordinatesBBox(positionsOf(input));
62
+ const latitude = box === null ? 0 : (box[1] + box[3]) / 2;
63
+ const toleranceDegrees = metersToDegrees(toleranceMeters, latitude).lat;
64
+ const lngScale = Math.cos(toRadians(latitude));
65
+ const path = (positions) => simplifyInMeters(positions, toleranceDegrees, lngScale);
66
+ switch (input.type) {
67
+ case 'LineString':
68
+ return { type: 'LineString', coordinates: path(input.coordinates) };
69
+ case 'Polygon':
70
+ return { type: 'Polygon', coordinates: input.coordinates.map(path) };
71
+ case 'MultiPolygon':
72
+ return {
73
+ type: 'MultiPolygon',
74
+ coordinates: input.coordinates.map((polygon) => polygon.map(path)),
75
+ };
76
+ }
77
+ }
@@ -14,13 +14,6 @@ import type { Coordinate, MultiPolygonCoordinates, PolygonCoordinates, Ring } fr
14
14
  * simplified line
15
15
  * @returns The simplified vertices as a new array. A copy of the input for 2 positions or
16
16
  * fewer, for a tolerance that is not positive, and for a ring that would collapse
17
- *
18
- * @example
19
- * ```ts
20
- * import { simplify } from '@sakuzu/maplibre-gl-draw/geometry';
21
- *
22
- * simplify([[0, 0], [1, 0.00001], [2, 0], [3, 1]], 0.001); // [[0, 0], [2, 0], [3, 1]]
23
- * ```
24
17
  */
25
18
  export declare function simplify(path: Coordinate[], toleranceDegrees: number): Coordinate[];
26
19
  /**
@@ -69,13 +69,6 @@ function markKeep(path, first, last, squaredTolerance, keep) {
69
69
  * simplified line
70
70
  * @returns The simplified vertices as a new array. A copy of the input for 2 positions or
71
71
  * fewer, for a tolerance that is not positive, and for a ring that would collapse
72
- *
73
- * @example
74
- * ```ts
75
- * import { simplify } from '@sakuzu/maplibre-gl-draw/geometry';
76
- *
77
- * simplify([[0, 0], [1, 0.00001], [2, 0], [3, 1]], 0.001); // [[0, 0], [2, 0], [3, 1]]
78
- * ```
79
72
  */
80
73
  export function simplify(path, toleranceDegrees) {
81
74
  if (path.length <= 2 || !(toleranceDegrees > 0)) {
@@ -18,14 +18,6 @@ import type { AreaCoordinates, Coordinate, MultiPolygonCoordinates } from './typ
18
18
  * @param b2 The end of segment B, `[lng, lat]` in degrees
19
19
  * @returns The intersection `[lng, lat]`, taken on segment A. `null` when they do not
20
20
  * cross, are parallel or collinear, or either has length 0
21
- *
22
- * @example
23
- * ```ts
24
- * import { segmentIntersection } from '@sakuzu/maplibre-gl-draw/geometry';
25
- *
26
- * segmentIntersection([0, 0], [2, 2], [0, 2], [2, 0]); // [1, 1]
27
- * segmentIntersection([0, 0], [1, 0], [0, 1], [1, 1]); // null (parallel)
28
- * ```
29
21
  */
30
22
  export declare function segmentIntersection(a1: Coordinate, a2: Coordinate, b1: Coordinate, b2: Coordinate): Coordinate | null;
31
23
  /**
@@ -52,17 +44,5 @@ export declare function segmentIntersection(a1: Coordinate, a2: Coordinate, b1:
52
44
  * input normalized) when it is not split. An empty array when the input has no area
53
45
  * @throws {@link GeometryError} when the boolean operation engine fails even after the
54
46
  * retry on the 1e-9 degree grid
55
- *
56
- * @example
57
- * ```ts
58
- * import { splitArea } from '@sakuzu/maplibre-gl-draw/geometry';
59
- *
60
- * const square: [number, number][][] = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
61
- * const parts = splitArea(square, [[0.5, -1], [0.5, 2]]);
62
- * parts.length; // 2: the halves west and east of longitude 0.5
63
- * if (parts.length === 1) {
64
- * // Not split: the line does not cross the polygon
65
- * }
66
- * ```
67
47
  */
68
48
  export declare function splitArea(area: AreaCoordinates, line: Coordinate[]): MultiPolygonCoordinates[];
@@ -64,14 +64,6 @@ const NODE_QUANTUM = 1e-9;
64
64
  * @param b2 The end of segment B, `[lng, lat]` in degrees
65
65
  * @returns The intersection `[lng, lat]`, taken on segment A. `null` when they do not
66
66
  * cross, are parallel or collinear, or either has length 0
67
- *
68
- * @example
69
- * ```ts
70
- * import { segmentIntersection } from '@sakuzu/maplibre-gl-draw/geometry';
71
- *
72
- * segmentIntersection([0, 0], [2, 2], [0, 2], [2, 0]); // [1, 1]
73
- * segmentIntersection([0, 0], [1, 0], [0, 1], [1, 1]); // null (parallel)
74
- * ```
75
67
  */
76
68
  export function segmentIntersection(a1, a2, b1, b2) {
77
69
  const ax = a2[0] - a1[0];
@@ -119,18 +111,6 @@ export function segmentIntersection(a1, a2, b1, b2) {
119
111
  * input normalized) when it is not split. An empty array when the input has no area
120
112
  * @throws {@link GeometryError} when the boolean operation engine fails even after the
121
113
  * retry on the 1e-9 degree grid
122
- *
123
- * @example
124
- * ```ts
125
- * import { splitArea } from '@sakuzu/maplibre-gl-draw/geometry';
126
- *
127
- * const square: [number, number][][] = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
128
- * const parts = splitArea(square, [[0.5, -1], [0.5, 2]]);
129
- * parts.length; // 2: the halves west and east of longitude 0.5
130
- * if (parts.length === 1) {
131
- * // Not split: the line does not cross the polygon
132
- * }
133
- * ```
134
114
  */
135
115
  export function splitArea(area, line) {
136
116
  const normalized = normalizeArea(area);
@@ -5,25 +5,18 @@
5
5
  * whole geometry module.
6
6
  */
7
7
  /**
8
- * The radius of the sphere every geodesic function of this module uses, in meters.
8
+ * The radius in meters of the sphere on which every function of this entry measures.
9
9
  *
10
- * The value is the mean Earth radius, 6,371,000 m. Distances, bearings, areas, circles and
11
- * buffers all assume this sphere rather than an ellipsoid, so a result differs from an
12
- * ellipsoidal computation by up to about 0.5%.
10
+ * The value is the mean Earth radius of the IUGG, 6,371,008.8 m. Distances, bearings, areas,
11
+ * circles and buffers all assume this sphere rather than an ellipsoid, so a result differs from
12
+ * an ellipsoidal computation by up to about 0.5%.
13
13
  */
14
- export declare const EARTH_RADIUS_METERS = 6371000;
14
+ export declare const EARTH_RADIUS_METERS = 6371008.8;
15
15
  /**
16
16
  * Converts an angle in degrees to radians.
17
17
  *
18
18
  * @param degrees The angle in degrees
19
19
  * @returns The angle in radians. NaN and infinities pass through unchanged
20
- *
21
- * @example
22
- * ```ts
23
- * import { toRadians } from '@sakuzu/maplibre-gl-draw/geometry';
24
- *
25
- * toRadians(180); // Math.PI
26
- * ```
27
20
  */
28
21
  export declare function toRadians(degrees: number): number;
29
22
  /**
@@ -33,3 +26,18 @@ export declare function toRadians(degrees: number): number;
33
26
  * @returns The angle in degrees. NaN and infinities pass through unchanged
34
27
  */
35
28
  export declare function toDegrees(radians: number): number;
29
+ /**
30
+ * Converts a distance at a latitude into degrees of longitude and latitude.
31
+ *
32
+ * On the sphere of {@link EARTH_RADIUS_METERS}: a degree of latitude is always the same
33
+ * length, and a degree of longitude shrinks with the cosine of the latitude. Use it to turn a
34
+ * tolerance in meters into one in degrees. Near the poles the longitude grows without bound.
35
+ *
36
+ * @param meters The distance in meters
37
+ * @param latitude The latitude in degrees at which the distance is taken
38
+ * @returns The distance in degrees of longitude (`lng`) and of latitude (`lat`)
39
+ */
40
+ export declare function metersToDegrees(meters: number, latitude: number): {
41
+ lng: number;
42
+ lat: number;
43
+ };
@@ -7,25 +7,18 @@
7
7
  * whole geometry module.
8
8
  */
9
9
  /**
10
- * The radius of the sphere every geodesic function of this module uses, in meters.
10
+ * The radius in meters of the sphere on which every function of this entry measures.
11
11
  *
12
- * The value is the mean Earth radius, 6,371,000 m. Distances, bearings, areas, circles and
13
- * buffers all assume this sphere rather than an ellipsoid, so a result differs from an
14
- * ellipsoidal computation by up to about 0.5%.
12
+ * The value is the mean Earth radius of the IUGG, 6,371,008.8 m. Distances, bearings, areas,
13
+ * circles and buffers all assume this sphere rather than an ellipsoid, so a result differs from
14
+ * an ellipsoidal computation by up to about 0.5%.
15
15
  */
16
- export const EARTH_RADIUS_METERS = 6371000;
16
+ export const EARTH_RADIUS_METERS = 6371008.8;
17
17
  /**
18
18
  * Converts an angle in degrees to radians.
19
19
  *
20
20
  * @param degrees The angle in degrees
21
21
  * @returns The angle in radians. NaN and infinities pass through unchanged
22
- *
23
- * @example
24
- * ```ts
25
- * import { toRadians } from '@sakuzu/maplibre-gl-draw/geometry';
26
- *
27
- * toRadians(180); // Math.PI
28
- * ```
29
22
  */
30
23
  export function toRadians(degrees) {
31
24
  return (degrees * Math.PI) / 180;
@@ -39,3 +32,18 @@ export function toRadians(degrees) {
39
32
  export function toDegrees(radians) {
40
33
  return (radians * 180) / Math.PI;
41
34
  }
35
+ /**
36
+ * Converts a distance at a latitude into degrees of longitude and latitude.
37
+ *
38
+ * On the sphere of {@link EARTH_RADIUS_METERS}: a degree of latitude is always the same
39
+ * length, and a degree of longitude shrinks with the cosine of the latitude. Use it to turn a
40
+ * tolerance in meters into one in degrees. Near the poles the longitude grows without bound.
41
+ *
42
+ * @param meters The distance in meters
43
+ * @param latitude The latitude in degrees at which the distance is taken
44
+ * @returns The distance in degrees of longitude (`lng`) and of latitude (`lat`)
45
+ */
46
+ export function metersToDegrees(meters, latitude) {
47
+ const lat = toDegrees(meters / EARTH_RADIUS_METERS);
48
+ return { lng: lat / Math.cos(toRadians(latitude)), lat };
49
+ }
package/dist/index.d.ts CHANGED
@@ -1,72 +1,58 @@
1
1
  /**
2
- * MapLibre GL Draw - public entry point
2
+ * Draw and edit points, lines and areas on a MapLibre map, and show large data beside them.
3
3
  *
4
- * The caller accesses the whole public API through the single entry
5
- * `import { ... } from '@sakuzu/maplibre-gl-draw'` (plus the pure geometry functions of
6
- * `@sakuzu/maplibre-gl-draw/geometry`). Tree-shaking is applied by the ESM bundler, which
7
- * looks at `"sideEffects": false` in package.json.
4
+ * Import from here for everything an application does with a drawing: create the instance,
5
+ * read and change its features, layers and groups, listen to what changes, save and load the
6
+ * document, and add plugins, modes and feature types. Three subpaths cover the rest: geometry
7
+ * that needs no map (`/geometry`), large tables read in a Worker (`/table`) and custom shaders
8
+ * (`/webgl`).
8
9
  *
9
- * Every public symbol is listed here by name, in one of two layers (see "The public
10
- * surface" in CONTRIBUTING.md and "The two layers of the public API" in
11
- * docs/reference/README.md):
10
+ * ```ts
11
+ * import { createDraw } from '@sakuzu/maplibre-gl-draw';
12
12
  *
13
- * - Layer 1, the public API: the factory, the instance and its options, the data model,
14
- * the events, the extension points and the pure functions. It follows semver.
15
- * - Layer 2, building blocks for extension authors: the rendering parts, the math and the
16
- * core services that a plugin, a custom feature type or a custom mode may reuse. Its
17
- * guarantee is weaker: it may change in a minor release.
13
+ * const draw = createDraw(map);
14
+ * draw.setMode('draw_polygon');
15
+ * draw.on('feature.created', ({ feature }) => {
16
+ * console.log(feature.id, feature.geometry);
17
+ * });
18
+ * ```
18
19
  *
19
- * Anything not listed here is internal. Where it would otherwise appear in the emitted
20
- * declarations, its JSDoc carries the internal tag and `stripInternal` drops it from them.
21
- * The list is pinned by src/index.test.ts, so every addition or removal is deliberate.
20
+ * Read next: [getting started](https://sakuzu.github.io/maplibre-gl-draw/getting-started),
21
+ * then the guides for [drawing](https://sakuzu.github.io/maplibre-gl-draw/guides/drawing) and
22
+ * [saving and loading](https://sakuzu.github.io/maplibre-gl-draw/guides/save-load). The
23
+ * symbols used most are {@link createDraw}, {@link Draw}, {@link Feature} and
24
+ * {@link DrawEvents}.
25
+ *
26
+ * @module maplibre-gl-draw
22
27
  */
23
- export type { EventPayloads, MapLibreGLDraw, Options } from './api/index.js';
24
- export { createMapLibreGLDraw } from './maplibre-gl-draw.js';
25
- export type { BoundingBoxStyle, BoxSelectionStyleConfig, CenterMarkerStyle, FeatureStyleConfig, FillStyle, LineStringFeatureStyle, MidpointHandleStyle, PointFeatureStyle, PolygonFeatureStyle, RadiusHandleStyle, RadiusLineStyle, RenderingConfig, ResizeHandleStyle, RotateHandleStyle, SelectionUIConfig, TentativeStyle, TopologyConfig, TraceOptions, VertexHandleStyle, } from './shared/config/index.js';
26
- export type { AutoNameConfig, AutoNameType, PixelRatioInput, PixelRatioProvider, } from './shared/utils/index.js';
27
- export type { SnapDisableKey, SnapOptions, SnapTargetKind } from './snapping/index.js';
28
- export type { Color, LineStyle, PointShape, PointStyle, StrokeStyle } from './view/index.js';
29
- export { MESSAGES_EN, type Messages } from './messages.js';
30
- export type { BoundingBox, BoundingBoxCoordsSimple, BoxSelection, Coordinate, Data, DragOperationType, DragState, ExportFormat, ExportOptions, ExportResult, Feature, FeatureCoordinates, FeatureInput, FeatureStyle, FeatureType, FileData, Group, ImageProperties, ImageStyle, Layer, LoadOptions, LoadResult, Metadata, Mode, RotateInfo, Selection, SelectionType, SkippedFeature, StateChanges, StyleRule, TentativeState, UpdateFeatureOptions, UpdateSource, VertexRef, VertexSelection, } from './store/index.js';
31
- export type { LegendEntry } from './view/index.js';
32
- export type { DocumentStore, FeatureLockStore, InteractionGateStore, Store, StoreView, UiState, } from './store/index.js';
33
- export { isFeatureLocked, isGroupLocked, isInteractionBlocked, MemoryStore, } from './store/index.js';
34
- export type { MapClickEventPayload } from './dispatcher/index.js';
35
- export type { DatasetClickEventPayload } from './display/index.js';
36
- export type { EventListener, EventMap, FeaturesChangePayload, GeometryAppliedPayload, GeometryOperationName, LoadErrorPayload, } from './shared/utils/index.js';
37
- export type { GeometryBufferOptions, GeometryOperations, InputOperations, SnappingOperations, SyntheticInputOptions, SyntheticKeyOptions, SyntheticLngLat, SyntheticModifiers, TopologyOperations, TracingOperations, } from './api/index.js';
38
- export type { DatasetBaseStyle, DatasetChangePayload, DatasetClickPayload, Dataset, DatasetEventMap, DatasetOptions, DatasetOrder, DatasetPlacement, DatasetCollisionThinning, DatasetColumn, DatasetColumnarGeometry, DatasetColumnarGeometryType, DatasetColumnarInput, DatasetColumnarMixedGeometry, DatasetColumnarPrepared, DatasetDictionaryCodes, DatasetDictionaryColumn, DatasetFeatureInput, DatasetFeatureProvider, DatasetHoverPayload, DatasetThinningStats, DatasetZoomScale, ResolvedCollisionThinning, } from './display/index.js';
39
- export type { GuideSnapProviderDeps, GuideSnapProviderOptions, ResolvedSnapOptions, SnapCandidate, SnapContext, SnapExcludeVertex, SnapIndicatorStyles, SnapLngLat, SnapPointCandidate, SnapProvider, SnapProviderContext, SnapResult, SnapSegmentCandidate, SnapTarget, SnapTargetSegment, } from './snapping/index.js';
40
- export { createGuideSnapProvider, DEFAULT_SNAP_GUIDE_LINE_STYLE, DEFAULT_SNAP_INDICATOR_STYLES, } from './snapping/index.js';
41
- export type { TraceGraph, TraceGraphEdge, TraceGraphEndpoint, TraceGraphNode, } from './operations/index.js';
42
- export { buildTraceGraph, findTracePath } from './operations/index.js';
43
- export type { StyleRuleChannel } from './view/index.js';
44
- export { applyRuleColor, deriveLegend, evaluateStyleRule, getStyleRuleChannel, resolveFeatureStyle, resolveRuleColor, } from './view/index.js';
45
- export { getCreatedZoom, getRotation, getScale, setCreatedZoom, setRotation, } from './shared/utils/index.js';
46
- export type { CustomFeatureHandler, CustomFeatureRenderer, CustomOverlayRenderer, CustomRendererDrawContext, CustomResizeResult, LayerAwareOverlayRenderer, } from './extension/index.js';
47
- export type { BoxSelectionStrategy, DragNormalizedEvent, HitTestOptions, HitTestResult, HitTestStrategy, KeyNormalizedEvent, ModifierKeys, MouseNormalizedEvent, NormalizedEvent, PointerOriginalEvent, PointerType, VertexHit, } from './dispatcher/index.js';
48
- export type { ModeContext, ModeFactory, ModeHandler, SnapInputType } from './modes/index.js';
49
- export type { ResizeState } from './operations/index.js';
50
- export type { DragEndData, DragStartData, Hooks, HoverEvent, MouseLeaveEvent, MutationContext, Plugin, PluginContext, } from './plugins/index.js';
51
- export type { HandleType } from './shared/config/index.js';
52
- export type { LngLat, ScreenPoint } from './shared/math/index.js';
53
- export type { AdditionalHandleInfo, AdditionalResizeHandlesCalculator, AuxiliaryHandle, AuxiliaryHandleContext, AuxiliaryHandleHit, AuxiliaryHandleProvider, BoundingBoxCoords, CompanionHit, CompanionHitContext, CustomBoundingBoxCalculator, CustomResizeCalculator, FeatureCompanionProvider, HandleInfo, PointFrameExtent, PointFrameExtentProvider, RenderSlot, ResizeStrategy, } from './view/index.js';
54
- export type { BoxSelectionStrategyRegistry, HitTestService, HitTestTopmost, TopHit, TopmostHitTestOptions, UnprojectFunction, } from './dispatcher/index.js';
55
- export type { HookName, PluginManager } from './plugins/index.js';
56
- export type { TraceConfig } from './shared/config/index.js';
57
- export type { AutoNameGenerator, EventEmitter } from './shared/utils/index.js';
58
- export type { SpatialQuery } from './store/index.js';
59
- export type { AuxiliaryHandleRegistry, FeatureCompanionHitResult, FeatureCompanionRegistry, FillShaderManager, PointShapeRenderer, SDFLineRenderer, SDFStrokeOptions, SDFStrokeStyle, SelectionExtensionRegistry, SelectionScope, TerrainContext, TerrainRenderState, WidthUnit, } from './view/index.js';
60
- export type { TerrainDiagnostics, TerrainRenderDiagnostics } from './api/index.js';
61
- export type { TerrainDrapeDebug } from './view/index.js';
62
- export { resolvePixelRatio } from './shared/utils/index.js';
63
- export type { BlendCapableGL, DashSegment, DrapeQuadCorners, OffsetUniforms, ProjectionUniformLocations, QuadDrapeColor, QuadDrapeFill, QuadDrapeSurface, QuadDrapeGlyphs, QuadVertices, ShaderData, } from './view/index.js';
64
- export { applyDrawBlendState, calculateLngLatOffset, calculateOffsetUniforms, computeQuadVertices, createProgram, drawBillboardsWithoutDepth, drawQuadSurfaceOnTerrain, getProjectionTransitionUniform, getStrokeDashPattern, OFFSET_MODE_GLSL, ProjectionUniformManager, QUAD_GLYPH_STRIDE, QuadShader, splitIntoDashes, } from './view/index.js';
65
- export type { MercatorRect, TessellationStep, TessellationTiling } from './view/index.js';
66
- export { anchorElevationMeters, anchorGhostOpacity, densifyPath, getAnchorElevationGeneration, getTerrainTessellationStep, metersToMercatorScale, } from './view/index.js';
67
- export type { MercatorCoord, OBB, OBBCorners } from './shared/math/index.js';
68
- export { createOBB, DEFAULT_TILE_SIZE, distanceToOBB, generateCirclePolygon, getOBBAABB, lngLatToMercator, metersToDegreesLat, metersToDegreesLng, pixelsToDegreesLat, pixelsToDegreesLng, rectangleIntersectsOBB, } from './shared/math/index.js';
69
- export { getContrastColor } from './shared/utils/index.js';
70
- export { PointHitTestStrategy } from './dispatcher/index.js';
71
- export { createGeometryApi, type GeometryApi, type GeometryApiDeps } from './api/index.js';
72
- export { computeBoundingBox, createFeatureCompanionRegistry, createSelectionExtensionRegistry, DEFAULT_POINT_FRAME_SIZE, DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds, getSelectedFeatureIds, hasZeroArea, } from './view/index.js';
28
+ export type { Draw, TransactOptions } from './api/draw.js';
29
+ export { createDraw } from './api/draw.js';
30
+ export type { AutoNameOptions, DrawOptions, OptionsResource, RenderingOptions, RuntimeOptions, SelectionStyleOptions, SnappingOptions, TopologyOptions, TracingOptions, } from './api/options.js';
31
+ export type { Messages } from './messages.js';
32
+ export type { FeaturesCollection } from './api/features.js';
33
+ export type { LayersCollection } from './api/layers.js';
34
+ export type { GroupsCollection } from './api/groups.js';
35
+ export type { HiddenCollection } from './api/hidden.js';
36
+ export type { SelectionResource, VertexSelectionResource } from './api/selection.js';
37
+ export type { MetadataResource } from './api/metadata.js';
38
+ export type { DrawingResource } from './api/drawing.js';
39
+ export type { DocumentResource } from './api/document.js';
40
+ export type { DrawDocument, DrawProperties, Feature, FeatureStyle, FeatureStyleResolved, FeatureType, FileData, Group, Layer, LegendEntry, LineStyle, Metadata, PointShape, StyleRule, } from './api/model.js';
41
+ export { DRAW_PROPERTY_PREFIX, isDrawProperty } from './api/model.js';
42
+ export type { FeatureFilter, FeatureInput, FeaturePatch, GroupFilter, GroupInput, GroupPatch, LayerFilter, LayerInput, LayerPatch, LoadOptions, LoadResult, LoadSource, MoveTarget, SkippedFeature, } from './api/model.js';
43
+ export type { LayerStackEntry, Mode, Selection, SelectionType, SnapPreference, SnapResult, TerrainDiagnostics, VertexRef, VertexSelection, } from './api/state.js';
44
+ export { MODES } from './api/state.js';
45
+ export type { DocumentChange, DrawEventListener, DrawEvents, ScreenPoint } from './api/events.js';
46
+ export type { Position } from 'geojson';
47
+ export type { DrawErrorCode } from './api/errors.js';
48
+ export { DrawError } from './api/errors.js';
49
+ export type { Dataset, DatasetBaseStyle, DatasetCollisionThinning, DatasetEvents, DatasetOptions, DatasetOrder, DatasetPlacement, DatasetProvider, DatasetRow, DatasetsCollection, DatasetThinningStats, DatasetZoomScale, } from './api/datasets.js';
50
+ export type { Store, StoreView, UpdateSource } from './api/extension/store.js';
51
+ export type { ExtensionContext, HitTestContext, ModeContext, NameGenerator, PluginContext, ScreenContext, SnapContext, TerrainAnchors, } from './api/extension/context.js';
52
+ export type { FeatureTypeDefinition, Handle } from './api/extension/feature-type.js';
53
+ export type { DrawKeyEvent, DrawPointerEvent, InputHandlers, ModeFactory, ModeHandler, Modifiers, } from './api/extension/mode.js';
54
+ export type { Plugin } from './api/extension/plugin.js';
55
+ export type { CompanionProvider, HandleProvider, Hit, SnapCandidate, SnapProvider, } from './api/extension/provider.js';
56
+ export type { FeatureRenderer, FillRenderer, LineRenderer, OffsetUniforms, OverlayRenderer, PointRenderer, RenderContext, ShaderData, } from './api/extension/render.js';
57
+ export type { ExtensionsCollections, FeatureTypesCollection, ModesCollection, OverlaysCollection, PluginsCollection, ProvidersCollection, } from './api/extensions.js';
58
+ export { deriveLegend, evaluateStyleRule, getStyleRuleChannel } from './api/model.js';
package/dist/index.js CHANGED
@@ -1,20 +1,8 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
- export { createMapLibreGLDraw } from './maplibre-gl-draw.js';
4
- export { MESSAGES_EN } from './messages.js';
5
- export { isFeatureLocked, isGroupLocked, isInteractionBlocked, MemoryStore, } from './store/index.js';
6
- export { createGuideSnapProvider, DEFAULT_SNAP_GUIDE_LINE_STYLE, DEFAULT_SNAP_INDICATOR_STYLES, } from './snapping/index.js';
7
- export { buildTraceGraph, findTracePath } from './operations/index.js';
8
- export { applyRuleColor, deriveLegend, evaluateStyleRule, getStyleRuleChannel, resolveFeatureStyle, resolveRuleColor, } from './view/index.js';
9
- // Property accessors
10
- export { getCreatedZoom, getRotation, getScale, setCreatedZoom, setRotation, } from './shared/utils/index.js';
11
- // WebGL building blocks
12
- export { resolvePixelRatio } from './shared/utils/index.js';
13
- export { applyDrawBlendState, calculateLngLatOffset, calculateOffsetUniforms, computeQuadVertices, createProgram, drawBillboardsWithoutDepth, drawQuadSurfaceOnTerrain, getProjectionTransitionUniform, getStrokeDashPattern, OFFSET_MODE_GLSL, ProjectionUniformManager, QUAD_GLYPH_STRIDE, QuadShader, splitIntoDashes, } from './view/index.js';
14
- export { anchorElevationMeters, anchorGhostOpacity, densifyPath, getAnchorElevationGeneration, getTerrainTessellationStep, metersToMercatorScale, } from './view/index.js';
15
- export { createOBB, DEFAULT_TILE_SIZE, distanceToOBB, generateCirclePolygon, getOBBAABB, lngLatToMercator, metersToDegreesLat, metersToDegreesLng, pixelsToDegreesLat, pixelsToDegreesLng, rectangleIntersectsOBB, } from './shared/math/index.js';
16
- export { getContrastColor } from './shared/utils/index.js';
17
- // Selection UI, hit testing and viewport helpers
18
- export { PointHitTestStrategy } from './dispatcher/index.js';
19
- export { createGeometryApi } from './api/index.js';
20
- export { computeBoundingBox, createFeatureCompanionRegistry, createSelectionExtensionRegistry, DEFAULT_POINT_FRAME_SIZE, DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds, getSelectedFeatureIds, hasZeroArea, } from './view/index.js';
3
+ export { createDraw } from './api/draw.js';
4
+ export { DRAW_PROPERTY_PREFIX, isDrawProperty } from './api/model.js';
5
+ export { MODES } from './api/state.js';
6
+ export { DrawError } from './api/errors.js';
7
+ // Style rule functions
8
+ export { deriveLegend, evaluateStyleRule, getStyleRuleChannel } from './api/model.js';
@@ -9,12 +9,12 @@
9
9
  * - The keys are typed. A value is either a string or a function that formats one (it
10
10
  * receives numbers already turned into strings)
11
11
  * - `MESSAGES_EN` is the default, in English. The library ships no other language
12
- * - `Options.messages` overrides part of the table for one instance. The table belongs to
12
+ * - `DrawOptions.messages` overrides part of the table for one instance. The table belongs to
13
13
  * the instance and is never module-level state
14
14
  * - There is no locale detection and no automatic switching: the host passes the table
15
15
  * it wants
16
16
  * - The words of the names generated for features, layers and groups are not in this table:
17
- * they come from the naming configuration (`AutoNameConfig`, the `autoName` option)
17
+ * they come from the `autoName` option
18
18
  */
19
19
  /**
20
20
  * The table of the strings the library returns as values: legend labels and the descriptions
@@ -22,14 +22,14 @@
22
22
  *
23
23
  * The library builds no such string inline; it reads it from the table of the instance, so
24
24
  * the host can show them in its own language. Pass the entries to replace as the `messages`
25
- * option of `createMapLibreGLDraw`; the entries left out keep {@link MESSAGES_EN}. A value is
26
- * a string, or a function that formats one from numbers already turned into strings. There is
27
- * no locale detection and no other built-in language. The words of generated names ("Layer 1")
28
- * are translated through the `autoName` option (`AutoNameConfig`), not here.
25
+ * option of `createDraw`; the entries left out keep the English defaults. A value is a string,
26
+ * or a function that formats one from numbers already turned into strings. There is no locale
27
+ * detection and no other built-in language. The words of generated names ("Layer 1") are
28
+ * translated through the `autoName` option, not here.
29
29
  *
30
30
  * @example
31
31
  * ```ts
32
- * const draw = createMapLibreGLDraw(map, {
32
+ * const draw = createDraw(map, {
33
33
  * messages: {
34
34
  * legendOther: 'Sonstige',
35
35
  * legendRange: (lower, upper) => `${lower} bis unter ${upper}`,