@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
package/dist/index.d.ts CHANGED
@@ -1,72 +1,72 @@
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
+ * Where to find things: every resource of {@link Draw} is a field with its own methods.
21
+ *
22
+ * - `draw.features` (create, update, delete, move, union, split): {@link FeaturesCollection}
23
+ * - `draw.layers` (create, update, reorder, setActive): {@link LayersCollection}
24
+ * - `draw.groups` (create, update, move): {@link GroupsCollection}
25
+ * - `draw.datasets` (add, remove, move): {@link DatasetsCollection}
26
+ * - `draw.selection` (set, add, clear, delete, group): {@link SelectionResource}
27
+ * - `draw.vertexSelection` (set, clear, delete): {@link VertexSelectionResource}
28
+ * - `draw.metadata` and `draw.options` (get, update): {@link MetadataResource}, {@link OptionsResource}
29
+ * - `draw.document` (load, toJSON, toGeoJSON): {@link DocumentResource}
30
+ * - `draw.drawing` (addVertex, finish, cancel): {@link DrawingResource}
31
+ * - `draw.extensions` (plugins, modes, feature types): {@link ExtensionsCollections}
32
+ * - events with `draw.on`: {@link DrawEvents}; errors: {@link DrawError}
33
+ *
34
+ * Read next: [getting started](https://sakuzu.github.io/maplibre-gl-draw/getting-started),
35
+ * then the guides for [drawing](https://sakuzu.github.io/maplibre-gl-draw/guides/drawing) and
36
+ * [saving and loading](https://sakuzu.github.io/maplibre-gl-draw/guides/save-load). The
37
+ * symbols used most are {@link createDraw}, {@link Draw}, {@link Feature} and
38
+ * {@link DrawEvents}.
39
+ *
40
+ * @module maplibre-gl-draw
22
41
  */
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';
42
+ export type { Draw, TransactOptions } from './api/draw.js';
43
+ export { createDraw } from './api/draw.js';
44
+ export type { AutoNameOptions, DrawOptions, OptionsResource, RenderingOptions, RuntimeOptions, SelectionStyleOptions, SnappingOptions, TopologyOptions, TracingOptions, } from './api/options.js';
45
+ export type { Messages } from './messages.js';
46
+ export type { FeaturesCollection } from './api/features.js';
47
+ export type { LayersCollection } from './api/layers.js';
48
+ export type { GroupsCollection } from './api/groups.js';
49
+ export type { HiddenCollection } from './api/hidden.js';
50
+ export type { SelectionResource, VertexSelectionResource } from './api/selection.js';
51
+ export type { MetadataResource } from './api/metadata.js';
52
+ export type { DrawingResource } from './api/drawing.js';
53
+ export type { DocumentResource } from './api/document.js';
54
+ export type { DrawDocument, DrawProperties, Feature, FeatureStyle, FeatureStyleResolved, FeatureType, FileData, Group, Layer, LegendEntry, LineStyle, Metadata, PointShape, StyleRule, } from './api/model.js';
55
+ export { DRAW_PROPERTY_PREFIX, isDrawProperty } from './api/model.js';
56
+ export type { FeatureFilter, FeatureInput, FeaturePatch, GroupFilter, GroupInput, GroupPatch, LayerFilter, LayerInput, LayerPatch, LoadOptions, LoadResult, LoadSource, MoveTarget, SkippedFeature, } from './api/model.js';
57
+ export type { LayerStackEntry, Mode, Selection, SelectionType, SnapPreference, SnapResult, TerrainDiagnostics, VertexRef, VertexSelection, } from './api/state.js';
58
+ export { MODES } from './api/state.js';
59
+ export type { DocumentChange, DrawEventListener, DrawEvents, ScreenPoint } from './api/events.js';
60
+ export type { Position } from 'geojson';
61
+ export type { DrawErrorCode } from './api/errors.js';
62
+ export { DrawError } from './api/errors.js';
63
+ export type { Dataset, DatasetBaseStyle, DatasetCollisionThinning, DatasetEvents, DatasetOptions, DatasetOrder, DatasetPlacement, DatasetProvider, DatasetRow, DatasetsCollection, DatasetThinningStats, DatasetZoomScale, } from './api/datasets.js';
64
+ export type { Store, StoreView, UpdateSource } from './api/extension/store.js';
65
+ export type { ExtensionContext, HitTestContext, ModeContext, NameGenerator, PluginContext, ScreenContext, SnapContext, TerrainAnchors, } from './api/extension/context.js';
66
+ export type { FeatureTypeDefinition, Handle } from './api/extension/feature-type.js';
67
+ export type { DrawKeyEvent, DrawPointerEvent, InputHandlers, ModeFactory, ModeHandler, Modifiers, } from './api/extension/mode.js';
68
+ export type { Plugin } from './api/extension/plugin.js';
69
+ export type { CompanionProvider, HandleProvider, Hit, SnapCandidate, SnapProvider, } from './api/extension/provider.js';
70
+ export type { FeatureRenderer, FillRenderer, LineRenderer, OffsetUniforms, OverlayRenderer, PointRenderer, RenderContext, ShaderData, } from './api/extension/render.js';
71
+ export type { ExtensionsCollections, FeatureTypesCollection, ModesCollection, OverlaysCollection, PluginsCollection, ProvidersCollection, } from './api/extensions.js';
72
+ 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}`,
@@ -1,222 +1,98 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
- import { haversineDistanceMeters, initialBearingDegrees } from '../../geometry/index.js';
4
- import { createdZoomProperty, resolveCommitLayer } from './commit-layer.js';
3
+ import { haversineDistanceMeters, initialBearingDegrees } from '../../geometry/distance.js';
4
+ import { drawProperties } from '../../shared/properties.js';
5
5
  /** Default angle of the radius handle (toward the lower right) */
6
6
  const DEFAULT_RADIUS_HANDLE_ANGLE = 135;
7
7
  /** Minimum radius (in meters) */
8
8
  const MIN_RADIUS_METERS = 1;
9
9
  /**
10
- * DrawCircleMode implementation
10
+ * The factory of the circle drawing mode
11
11
  *
12
12
  * @internal
13
13
  */
14
- export class DrawCircleMode {
15
- constructor() {
16
- Object.defineProperty(this, "modeName", {
17
- enumerable: true,
18
- configurable: true,
19
- writable: true,
20
- value: 'draw_circle'
21
- });
22
- Object.defineProperty(this, "writesFeatures", {
23
- enumerable: true,
24
- configurable: true,
25
- writable: true,
26
- value: true
27
- });
28
- Object.defineProperty(this, "context", {
29
- enumerable: true,
30
- configurable: true,
31
- writable: true,
32
- value: void 0
33
- });
34
- /** Center coordinate of the circle */
35
- Object.defineProperty(this, "center", {
36
- enumerable: true,
37
- configurable: true,
38
- writable: true,
39
- value: null
40
- });
41
- /** Radius (in meters) */
42
- Object.defineProperty(this, "radiusMeters", {
43
- enumerable: true,
44
- configurable: true,
45
- writable: true,
46
- value: 0
47
- });
48
- /** Angle of the radius handle (in degrees) */
49
- Object.defineProperty(this, "radiusHandleAngle", {
50
- enumerable: true,
51
- configurable: true,
52
- writable: true,
53
- value: DEFAULT_RADIUS_HANDLE_ANGLE
54
- });
55
- /** Drawing phase: 'waiting' = the center is not set yet, 'adjusting' = adjusting the radius */
56
- Object.defineProperty(this, "phase", {
57
- enumerable: true,
58
- configurable: true,
59
- writable: true,
60
- value: 'waiting'
61
- });
62
- /** The Feature ID that is going to be created */
63
- Object.defineProperty(this, "pendingFeatureId", {
64
- enumerable: true,
65
- configurable: true,
66
- writable: true,
67
- value: null
68
- });
69
- }
70
- onStart(context) {
71
- this.context = context;
72
- // Change the cursor to a crosshair
73
- this.context.map.getCanvas().style.cursor = 'crosshair';
74
- // Clear the selection (not notified as a change)
75
- this.context.store.transact(() => {
76
- this.context.store.setSelection(null, []);
77
- }, 'silent');
78
- // Reset the state
79
- this.reset();
80
- // Generate the Feature ID in advance
81
- this.pendingFeatureId = this.context.generateFeatureId();
82
- }
83
- onStop() {
84
- // Restore the cursor
85
- this.context.map.getCanvas().style.cursor = '';
86
- // Clear the tentative state
87
- this.context.store.setTentative(null);
88
- this.reset();
89
- }
90
- /**
91
- * A double click while drawing is two clicks of the drawing; it never zooms the map
92
- * (consumed by preventing its default action)
93
- */
94
- onDoubleClick(event) {
95
- event.originalEvent.preventDefault();
96
- }
97
- onClick(event) {
98
- const coord = [event.lngLat.lng, event.lngLat.lat];
99
- if (this.phase === 'waiting') {
100
- // Set the center
101
- this.center = coord;
102
- this.phase = 'adjusting';
103
- this.radiusMeters = 0;
104
- // Update the tentative state
105
- this.updateTentative();
106
- }
107
- else if (this.phase === 'adjusting') {
108
- // Confirm if the radius is at least the minimum value
109
- if (this.radiusMeters >= MIN_RADIUS_METERS) {
110
- this.finishCircle();
111
- }
112
- }
113
- }
114
- onMouseMove(event) {
115
- if (this.phase === 'adjusting' && this.center) {
116
- // Compute the distance from the center to the mouse position
117
- const mouseCoord = [event.lngLat.lng, event.lngLat.lat];
118
- this.radiusMeters = haversineDistanceMeters(this.center, mouseCoord);
119
- // The great-circle bearing from the center to the mouse position. The handle is placed
120
- // with destinationPoint, the inverse of this bearing, so it lands on the pointer
121
- this.radiusHandleAngle = initialBearingDegrees(this.center, mouseCoord);
122
- // Update the tentative state
123
- this.updateTentative();
124
- }
125
- }
126
- onKeyDown(event) {
127
- if (event.key === 'Escape') {
128
- if (this.phase === 'adjusting') {
129
- // Cancel if drawing is in progress
130
- this.reset();
131
- this.context.store.setTentative(null);
132
- }
133
- else {
134
- // Return to the select mode if drawing is not in progress
135
- this.context.setMode('select');
136
- }
137
- }
138
- }
139
- /**
140
- * Called after an external state change
141
- *
142
- * Resets the state of the drawing in progress so that the next drawing operation can start
143
- * normally.
144
- */
145
- onExternalStateChange() {
146
- this.reset();
147
- this.context.store.setTentative(null);
148
- }
149
- /**
150
- * Confirms the circle
151
- */
152
- finishCircle() {
153
- if (!this.center || this.radiusMeters < MIN_RADIUS_METERS) {
154
- return;
155
- }
156
- const { store, autoNameGenerator } = this.context;
157
- // Discard the drawing when no layer can be written any more
158
- const layerId = resolveCommitLayer(this.context);
159
- if (layerId === null)
14
+ export const drawCircleMode = (ctx) => {
15
+ /** The center, once the first click set it */
16
+ let center = null;
17
+ let radiusMeters = 0;
18
+ let radiusHandleAngle = DEFAULT_RADIUS_HANDLE_ANGLE;
19
+ /** The values of the circle as it stands */
20
+ const circleProperties = () => drawProperties({ radiusMeters, radiusHandleAngle });
21
+ const reset = () => {
22
+ center = null;
23
+ radiusMeters = 0;
24
+ radiusHandleAngle = DEFAULT_RADIUS_HANDLE_ANGLE;
25
+ ctx.preview.clear();
26
+ };
27
+ const showPreview = () => {
28
+ if (!center)
160
29
  return;
161
- // Generate the automatic name
162
- const autoName = autoNameGenerator.generateName('Circle');
163
- // Use the ID generated in advance (generate a new one if there is none)
164
- const featureId = this.pendingFeatureId ?? this.context.generateFeatureId();
165
- // Create a new circle feature
166
- const feature = {
167
- id: featureId,
30
+ ctx.preview.set({
168
31
  type: 'Circle',
169
- coordinates: this.center,
170
- layerId,
171
- properties: {
172
- radiusMeters: this.radiusMeters,
173
- radiusHandleAngle: this.radiusHandleAngle,
174
- ...createdZoomProperty(this.context),
175
- // The polygon coordinates for rendering are computed at render time, so they are not saved
176
- ...(autoName !== undefined && { name: autoName }),
177
- },
178
- locked: false,
179
- visible: true,
180
- };
181
- // Bundle the feature creation and the selection into a single transaction
182
- // (so that both are undone at once on undo)
183
- store.transact(() => {
184
- store.createFeature(feature);
185
- // Clear the tentative state
186
- store.setTentative(null);
187
- // Select the created feature
188
- store.setSelection('feature', [feature.id]);
32
+ geometry: { type: 'Point', coordinates: center },
33
+ properties: circleProperties(),
189
34
  });
190
- // Reset the state
191
- this.reset();
192
- // Return to the select mode
193
- this.context.setMode('select');
194
- }
195
- /**
196
- * Updates the tentative state
197
- */
198
- updateTentative() {
199
- if (!this.center) {
200
- this.context.store.setTentative(null);
35
+ };
36
+ const finish = () => {
37
+ if (!center || radiusMeters < MIN_RADIUS_METERS)
201
38
  return;
202
- }
203
- this.context.store.setTentative({
204
- type: 'Circle',
205
- coordinates: this.center,
206
- layerId: this.context.getCurrentLayerId(),
207
- radiusMeters: this.radiusMeters,
208
- radiusHandleAngle: this.radiusHandleAngle,
209
- pendingFeatureId: this.pendingFeatureId ?? undefined,
39
+ const at = center;
40
+ ctx.draw.transact(() => {
41
+ const feature = ctx.commitFeature({
42
+ type: 'Circle',
43
+ geometry: { type: 'Point', coordinates: at },
44
+ properties: circleProperties(),
45
+ });
46
+ if (feature)
47
+ ctx.draw.selection.set('feature', [feature.id]);
210
48
  });
211
- }
212
- /**
213
- * Resets the state
214
- */
215
- reset() {
216
- this.center = null;
217
- this.radiusMeters = 0;
218
- this.radiusHandleAngle = DEFAULT_RADIUS_HANDLE_ANGLE;
219
- this.phase = 'waiting';
220
- this.pendingFeatureId = null;
221
- }
222
- }
49
+ reset();
50
+ ctx.setMode('select');
51
+ };
52
+ return {
53
+ writes: true,
54
+ onEnter() {
55
+ ctx.cursor.set('crosshair');
56
+ ctx.draw.transact(() => ctx.draw.selection.clear(), { source: 'silent' });
57
+ reset();
58
+ },
59
+ onExit() {
60
+ ctx.cursor.reset();
61
+ reset();
62
+ },
63
+ // What was being drawn is dropped when the state is reset from outside
64
+ onCancel: reset,
65
+ // A double click while drawing is two clicks of the drawing; it never zooms the map
66
+ onDoubleClick: () => true,
67
+ onClick(event) {
68
+ if (!center) {
69
+ center = event.snapped.lngLat;
70
+ radiusMeters = 0;
71
+ showPreview();
72
+ }
73
+ else if (radiusMeters >= MIN_RADIUS_METERS) {
74
+ finish();
75
+ }
76
+ return true;
77
+ },
78
+ onPointerMove(event) {
79
+ if (!center)
80
+ return false;
81
+ const from = [center[0], center[1]];
82
+ const to = [event.snapped.lngLat[0], event.snapped.lngLat[1]];
83
+ radiusMeters = haversineDistanceMeters(from, to);
84
+ radiusHandleAngle = initialBearingDegrees(from, to);
85
+ showPreview();
86
+ return false;
87
+ },
88
+ onKeyDown(event) {
89
+ if (event.key !== 'Escape')
90
+ return false;
91
+ if (center)
92
+ reset();
93
+ else
94
+ ctx.setMode('select');
95
+ return true;
96
+ },
97
+ };
98
+ };
@@ -1,26 +1,15 @@
1
1
  /**
2
- * What a drawing mode writes when it commits: the layer, and the created zoom
2
+ * The layer a drawing mode of the engine commits into
3
3
  */
4
- import type { ModeContext } from '../handler.js';
4
+ import type { EngineModeContext } from '../handler.js';
5
5
  /**
6
6
  * Resolves the layer a drawing mode commits a new feature into
7
7
  *
8
- * Applies the commit rule of `ModeContext.getCurrentLayerId`: it returns the writable layer,
8
+ * Applies the commit rule of `EngineModeContext.getCurrentLayerId`: it returns the writable layer,
9
9
  * and when no layer can be written any more (the layer was deleted, locked or hidden while
10
10
  * drawing), the drawing is discarded instead: the tentative state is cleared and the mode
11
11
  * returns to select, which stops the current handler. The caller then returns without
12
12
  * creating anything, so no exception reaches the input handling. A plugin mode follows the
13
- * same rule through the ModeContext.
13
+ * same rule through the EngineModeContext.
14
14
  */
15
- export declare function resolveCommitLayer(context: ModeContext): string | null;
16
- /**
17
- * The created zoom a drawing mode writes into the properties of a new feature
18
- *
19
- * When the instance lets line widths follow the zoom (`ModeContext.scaleWithZoom`), it is the
20
- * zoom at the time of the commit, from which the widths grow and shrink with the map. Otherwise
21
- * nothing is written, and the feature keeps its widths on the screen like one added through
22
- * the API.
23
- */
24
- export declare function createdZoomProperty(context: ModeContext): {
25
- createdZoom?: number;
26
- };
15
+ export declare function resolveCommitLayer(context: EngineModeContext): string | null;
@@ -3,12 +3,12 @@
3
3
  /**
4
4
  * Resolves the layer a drawing mode commits a new feature into
5
5
  *
6
- * Applies the commit rule of `ModeContext.getCurrentLayerId`: it returns the writable layer,
6
+ * Applies the commit rule of `EngineModeContext.getCurrentLayerId`: it returns the writable layer,
7
7
  * and when no layer can be written any more (the layer was deleted, locked or hidden while
8
8
  * drawing), the drawing is discarded instead: the tentative state is cleared and the mode
9
9
  * returns to select, which stops the current handler. The caller then returns without
10
10
  * creating anything, so no exception reaches the input handling. A plugin mode follows the
11
- * same rule through the ModeContext.
11
+ * same rule through the EngineModeContext.
12
12
  */
13
13
  export function resolveCommitLayer(context) {
14
14
  const layerId = context.getCurrentLayerId();
@@ -18,14 +18,3 @@ export function resolveCommitLayer(context) {
18
18
  context.setMode('select');
19
19
  return null;
20
20
  }
21
- /**
22
- * The created zoom a drawing mode writes into the properties of a new feature
23
- *
24
- * When the instance lets line widths follow the zoom (`ModeContext.scaleWithZoom`), it is the
25
- * zoom at the time of the commit, from which the widths grow and shrink with the map. Otherwise
26
- * nothing is written, and the feature keeps its widths on the screen like one added through
27
- * the API.
28
- */
29
- export function createdZoomProperty(context) {
30
- return context.scaleWithZoom ? { createdZoom: context.map.getZoom() } : {};
31
- }