@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
@@ -1,107 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Orchestrator of the Import/Export API
5
- *
6
- * createImportExportAPI is a thin orchestrator that detects the format and then delegates
7
- * to each import/export function. The implementation is spread across format-detection /
8
- * geojson-import / geojson-export / native-format / image-import / file-name.
9
- */
10
- import { isImageFile } from '../../shared/utils/image.js';
11
- import { buildExportFileName } from './file-name.js';
12
- import { isGeoJSONFeatureCollection, isNativeFormat } from './format-detection.js';
13
- import { exportGeoJSON } from './geojson-export.js';
14
- import { loadGeoJSON } from './geojson-import.js';
15
- import { loadImage } from './image-import.js';
16
- import { exportNative, loadNative } from './native-format.js';
17
- /**
18
- * Creates the Import/Export API
19
- *
20
- * @internal
21
- */
22
- export function createImportExportAPI(context) {
23
- const { store, generateFeatureId, getCurrentLayerId, autoNameGenerator } = context;
24
- const importDeps = {
25
- store,
26
- autoNameGenerator,
27
- generateFeatureId,
28
- getCurrentLayerId,
29
- };
30
- const api = {
31
- /**
32
- * Loads data or a file.
33
- *
34
- * Detects the kind of source automatically and handles it accordingly:
35
- * - File: detects the file kind automatically (image / .json / .geojson)
36
- * - object: detects the data format automatically (native format /
37
- * GeoJSON FeatureCollection)
38
- */
39
- async load(source, options) {
40
- if (source instanceof File) {
41
- if (isImageFile(source)) {
42
- return loadImage(source, options || {}, importDeps);
43
- }
44
- const fileName = source.name.toLowerCase();
45
- const mimeType = source.type;
46
- const isJsonFile = fileName.endsWith('.json') ||
47
- fileName.endsWith('.geojson') ||
48
- mimeType === 'application/json' ||
49
- mimeType === 'application/geo+json';
50
- if (isJsonFile) {
51
- const text = await source.text();
52
- let data;
53
- try {
54
- data = JSON.parse(text);
55
- }
56
- catch (error) {
57
- const detail = error instanceof Error ? error.message : String(error);
58
- throw new Error(`Invalid JSON file "${source.name}": ${detail}`);
59
- }
60
- return api.load(data, options);
61
- }
62
- throw new Error(`Unsupported file type: ${source.type || source.name}`);
63
- }
64
- if (isNativeFormat(source)) {
65
- return loadNative(source, { store });
66
- }
67
- if (isGeoJSONFeatureCollection(source)) {
68
- return loadGeoJSON(source, importDeps, { flattenMulti: options?.flattenMulti });
69
- }
70
- throw new Error('Unsupported data format. Expected native format or GeoJSON FeatureCollection.');
71
- },
72
- /**
73
- * Exports the data
74
- */
75
- export(format, options) {
76
- const metadata = store.getMetadata();
77
- if (format === 'native') {
78
- const data = exportNative(store, options);
79
- const fileName = options?.fileName || buildExportFileName(metadata, '.maplibre-gl-draw.json');
80
- return {
81
- format: 'native',
82
- data: JSON.stringify(data, null, 2),
83
- mimeType: 'application/json',
84
- fileName,
85
- };
86
- }
87
- if (format === 'geojson') {
88
- const data = exportGeoJSON(store, options);
89
- const fileName = options?.fileName || buildExportFileName(metadata, '.geojson');
90
- return {
91
- format: 'geojson',
92
- data: JSON.stringify(data, null, 2),
93
- mimeType: 'application/geo+json',
94
- fileName,
95
- };
96
- }
97
- throw new Error(`Unsupported export format: ${format}`);
98
- },
99
- /**
100
- * Generates a suggested export file name
101
- */
102
- getSuggestedFileName() {
103
- return buildExportFileName(store.getMetadata(), '.maplibre-gl-draw.json');
104
- },
105
- };
106
- return api;
107
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Import / export of the native format
3
- */
4
- import type { Store } from '../../store/store.js';
5
- import type { Data, ExportOptions, LoadResult } from '../../store/types.js';
6
- /**
7
- * Exports the current data in the native format
8
- */
9
- export declare function exportNative(store: Store, options?: ExportOptions): Data;
10
- /**
11
- * Imports the native format (replaces the existing data)
12
- */
13
- export declare function loadNative(data: Data, deps: {
14
- store: Store;
15
- }): Promise<LoadResult>;
@@ -1,27 +0,0 @@
1
- /**
2
- * Validation of an imported feature style
3
- *
4
- * A style arrives from a file (the maplibre-gl-draw:style property of GeoJSON, the style of a
5
- * native feature, the simplestyle-spec keys) and reaches the renderer, which parses the
6
- * colors as #rgb / #rrggbb and uses the numbers as they are. A value of the wrong type or
7
- * form (a number or null for a color, `red`, an opacity of 5) would make the parsing throw or
8
- * produce NaN, so each known key is checked here and a key that fails is dropped. Keys this
9
- * library does not define are kept unchanged, whatever their value: they belong to the host or
10
- * to an extension, which gives features keys of its own and checks their values where it reads
11
- * them (values reach the Store through updateFeature and a replaced store as well, without
12
- * passing here).
13
- */
14
- import type { FeatureStyle } from '../../store/types.js';
15
- type Check = (value: unknown) => boolean;
16
- /** A #rgb or #rrggbb color */
17
- export declare const isHexColor: Check;
18
- /**
19
- * Returns the usable part of an imported style
20
- *
21
- * A key of FeatureStyle whose value fails its check is dropped; every other key is kept.
22
- *
23
- * @param value The style as read from the file
24
- * @returns The style, or undefined when the value is not an object or nothing is left
25
- */
26
- export declare function sanitizeFeatureStyle(value: unknown): FeatureStyle | undefined;
27
- export {};
@@ -1,49 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- import { setOwnProperty } from './own-property.js';
4
- const HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
5
- /** A #rgb or #rrggbb color */
6
- export const isHexColor = (value) => typeof value === 'string' && HEX_COLOR.test(value);
7
- const isFiniteNumber = (value) => typeof value === 'number' && Number.isFinite(value);
8
- const isOpacity = (value) => isFiniteNumber(value) && value >= 0 && value <= 1;
9
- const isNonNegative = (value) => isFiniteNumber(value) && value >= 0;
10
- const oneOf = (...values) => (value) => typeof value === 'string' && values.includes(value);
11
- /** The check of every key of FeatureStyle */
12
- const STYLE_CHECK_TABLE = {
13
- fillColor: isHexColor,
14
- fillOpacity: isOpacity,
15
- strokeColor: isHexColor,
16
- strokeWidth: isNonNegative,
17
- strokeOpacity: isOpacity,
18
- lineStyle: oneOf('solid', 'dashed', 'dotted'),
19
- pointRadius: isNonNegative,
20
- pointColor: isHexColor,
21
- pointShape: oneOf('circle', 'square', 'triangle', 'star'),
22
- imageOpacity: isOpacity,
23
- };
24
- const STYLE_CHECKS = new Map(Object.entries(STYLE_CHECK_TABLE));
25
- function isRecord(value) {
26
- return typeof value === 'object' && value !== null && !Array.isArray(value);
27
- }
28
- /**
29
- * Returns the usable part of an imported style
30
- *
31
- * A key of FeatureStyle whose value fails its check is dropped; every other key is kept.
32
- *
33
- * @param value The style as read from the file
34
- * @returns The style, or undefined when the value is not an object or nothing is left
35
- */
36
- export function sanitizeFeatureStyle(value) {
37
- if (!isRecord(value))
38
- return undefined;
39
- const style = {};
40
- let kept = 0;
41
- for (const [key, entry] of Object.entries(value)) {
42
- const check = STYLE_CHECKS.get(key);
43
- if (check && !check(entry))
44
- continue;
45
- setOwnProperty(style, key, entry);
46
- kept++;
47
- }
48
- return kept > 0 ? style : undefined;
49
- }
@@ -1,26 +0,0 @@
1
- /**
2
- * Types internal to the Import/Export module
3
- */
4
- import type { Feature, FileData } from '../../store/types.js';
5
- /**
6
- * GeoJSON import result (internal use).
7
- *
8
- * For a feature that contains image data, fileData is returned alongside it.
9
- */
10
- export interface ConvertedFeatureResult {
11
- feature: Feature;
12
- fileData?: FileData;
13
- }
14
- /**
15
- * Options for GeoJSON import
16
- */
17
- export interface GeoJSONImportOptions {
18
- /**
19
- * Whether to expand Multi* geometries into features with a single geometry
20
- *
21
- * The default is false, which keeps MultiPoint / MultiLineString / MultiPolygon
22
- * as Multi features as they are (so properties are not duplicated).
23
- * Setting it to true expands them as before, assigning a new ID to each part.
24
- */
25
- flattenMulti?: boolean;
26
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * API module
3
- *
4
- * Only the symbols that src/index.ts publishes are listed here (see "The public
5
- * surface" in CONTRIBUTING.md). Internal code imports from the defining file.
6
- */
7
- export type { CustomFeatureHandler, CustomFeatureRenderer, CustomOverlayRenderer, CustomRendererDrawContext, CustomResizeResult, LayerAwareOverlayRenderer, } from '../extension/index.js';
8
- export type { EventPayloads, MapLibreGLDraw, TerrainDiagnostics, TerrainRenderDiagnostics, } from './api.js';
9
- export type { Options } from './context.js';
10
- export type { GeometryApi, GeometryApiDeps, GeometryBufferOptions, GeometryOperations, } from './geometry-operations.js';
11
- export { createGeometryApi } from './geometry-operations.js';
12
- export type { InputOperations, SyntheticInputOptions, SyntheticKeyOptions, SyntheticLngLat, SyntheticModifiers, } from './input-api.js';
13
- export type { SnappingOperations } from './snapping-api.js';
14
- export type { TopologyOperations } from './topology-api.js';
15
- export type { TracingOperations } from './tracing-api.js';
package/dist/api/index.js DELETED
@@ -1,3 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- export { createGeometryApi } from './geometry-operations.js';
@@ -1,158 +0,0 @@
1
- import type { Coordinate } from '../store/types.js';
2
- /**
3
- * The coordinate of a synthetic input
4
- *
5
- * Either `{ lng, lat }` or `[lng, lat]` (Coordinate) can be passed. The screen position is
6
- * computed with `map.project`, so the caller does not prepare it.
7
- */
8
- export type SyntheticLngLat = {
9
- lng: number;
10
- lat: number;
11
- } | Coordinate;
12
- /**
13
- * The modifier keys of a synthetic input (an omitted key is false)
14
- */
15
- export interface SyntheticModifiers {
16
- /** Whether Shift is held */
17
- shift?: boolean;
18
- /** Whether Alt (Option) is held; by default it releases snapping */
19
- alt?: boolean;
20
- /** Whether Ctrl is held */
21
- ctrl?: boolean;
22
- /** Whether Meta (Cmd) is held */
23
- meta?: boolean;
24
- }
25
- /**
26
- * The options of a synthetic input (click / move)
27
- *
28
- * @example
29
- * ```typescript
30
- * // Place the point exactly where the numbers say, without snapping
31
- * draw.input.click([139.7, 35.68], { snap: false });
32
- * ```
33
- */
34
- export interface SyntheticInputOptions {
35
- /** The modifier keys. When omitted, they are all false */
36
- modifiers?: SyntheticModifiers;
37
- /**
38
- * Whether to pass through snapping (default true)
39
- *
40
- * Setting it to false raises `snap: false` on the normalized event, and the InputRouter
41
- * distributes the raw coordinate to the modes without going through the SnapService. Use it
42
- * when an exact coordinate is to be given numerically.
43
- */
44
- snap?: boolean;
45
- }
46
- /**
47
- * The options of a synthetic key input
48
- *
49
- * @example
50
- * ```typescript
51
- * draw.input.key('g', { modifiers: { ctrl: true } }); // groups the selection in select mode
52
- * ```
53
- */
54
- export interface SyntheticKeyOptions {
55
- /** The modifier keys. When omitted, they are all false */
56
- modifiers?: SyntheticModifiers;
57
- /**
58
- * The value equivalent to KeyboardEvent.code
59
- *
60
- * When omitted, it is inferred from key (alphanumerics become KeyA / Digit1, anything else
61
- * is the same as key).
62
- */
63
- code?: string;
64
- }
65
- /**
66
- * The synthetic input of a draw instance, reached as `draw.input`: clicks, moves and keys
67
- * given to the modes from code.
68
- *
69
- * It is the path for giving points to a drawing mode from numeric input (a distance and a
70
- * bearing, absolute coordinates), from tests and from automation. The events enter where
71
- * real input is dispatched, so snapping and the plugins see them as usual and a mode needs
72
- * no special branch. The thresholds of real input (the click / drag distinction) are not
73
- * involved. A synthetic event counts as mouse input, and its `originalEvent` is a stand-in
74
- * marked with `synthetic: true`. The input fields of a numeric input UI are not part of the
75
- * library.
76
- *
77
- * @example
78
- * ```typescript
79
- * draw.setMode('draw_line');
80
- * draw.input.click([139.7, 35.68]);
81
- * draw.input.click([139.71, 35.68]);
82
- * draw.input.click([139.71, 35.69]);
83
- * draw.input.key('Enter');
84
- * // Finishing returns to select mode with the new feature selected
85
- * const [line] = draw.getSelectedFeatures();
86
- * ```
87
- */
88
- export interface InputOperations {
89
- /**
90
- * Synthesizes a click.
91
- *
92
- * So that the order matches that of a real cursor, it distributes a `mousemove` at the same
93
- * coordinate and then distributes a `click`. The drawing modes interpret a click by looking
94
- * at the state built up by the movement (the radius of a circle, the proximity test of the
95
- * start and end points of a line or polygon), so these two are the minimal sequence that
96
- * advances the drawing. Clicking the first point of a polygon again closes it; a circle takes
97
- * a click on its center and one on its edge.
98
- *
99
- * @param lngLat where to click
100
- * @param options the modifier keys and whether to snap
101
- *
102
- * @example
103
- * ```typescript
104
- * draw.setMode('draw_circle');
105
- * draw.input.click([139.7, 35.68]); // the center
106
- * draw.input.click([139.71, 35.68]); // sets the radius and finishes
107
- * ```
108
- */
109
- click(lngLat: SyntheticLngLat, options?: SyntheticInputOptions): void;
110
- /**
111
- * Synthesizes a mouse move.
112
- *
113
- * It moves the preview while drawing (the tentative geometry) without adding a point.
114
- *
115
- * @param lngLat where the pointer moves to
116
- * @param options the modifier keys and whether to snap
117
- */
118
- move(lngLat: SyntheticLngLat, options?: SyntheticInputOptions): void;
119
- /**
120
- * Synthesizes a key input (keydown).
121
- *
122
- * Enter finishes the drawing, Escape cancels it, and Backspace / Delete removes the last
123
- * vertex. There is no path in the library that reads keyup, so only keydown is
124
- * distributed.
125
- *
126
- * @param key the value of `KeyboardEvent.key` (`Enter`, `Escape`, `a` and so on)
127
- * @param options the modifier keys and the `KeyboardEvent.code`
128
- *
129
- * @example
130
- * ```typescript
131
- * draw.input.key('Backspace'); // remove the last vertex
132
- * draw.input.key('Escape'); // cancel the drawing
133
- * ```
134
- */
135
- key(key: string, options?: SyntheticKeyOptions): void;
136
- /**
137
- * Switches the holding of pointer-originated input.
138
- *
139
- * It is the entry point for stopping pointer interruptions while the keyboard is deciding
140
- * the coordinate, such as in a numeric input panel. While it is held, the click / dblclick /
141
- * mousemove of the real pointer no longer reach the modes, and only synthetic input (click /
142
- * move / key) moves the coordinate. Panning and zooming the map (mousedown / drag events)
143
- * keep working while it is held.
144
- *
145
- * Be sure to set it back to false once the panel is closed.
146
- *
147
- * @param held true to hold the pointer input, false to release it
148
- *
149
- * @example
150
- * ```typescript
151
- * numericPanel.onopen = () => draw.input.setPointerHold(true);
152
- * numericPanel.onclose = () => draw.input.setPointerHold(false);
153
- * ```
154
- */
155
- setPointerHold(held: boolean): void;
156
- /** Whether pointer-originated input is being held */
157
- isPointerHeld(): boolean;
158
- }
@@ -1,144 +0,0 @@
1
- // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /** The state in which no modifier key is pressed */
4
- const NO_MODIFIERS = { shift: false, ctrl: false, alt: false, meta: false };
5
- /**
6
- * The marker that indicates a synthetic event
7
- *
8
- * Attaching it to originalEvent makes it distinguishable from a real event in plugins and
9
- * while debugging.
10
- *
11
- * @internal
12
- */
13
- export const SYNTHETIC_EVENT_MARKER = 'synthetic';
14
- function toLngLat(lngLat) {
15
- return Array.isArray(lngLat) ? { lng: lngLat[0], lat: lngLat[1] } : lngLat;
16
- }
17
- function toModifiers(modifiers) {
18
- if (!modifiers)
19
- return { ...NO_MODIFIERS };
20
- return {
21
- shift: modifiers.shift ?? false,
22
- ctrl: modifiers.ctrl ?? false,
23
- alt: modifiers.alt ?? false,
24
- meta: modifiers.meta ?? false,
25
- };
26
- }
27
- /**
28
- * Infers the equivalent of KeyboardEvent.code from key
29
- */
30
- function inferCode(key) {
31
- if (/^[a-zA-Z]$/.test(key))
32
- return `Key${key.toUpperCase()}`;
33
- if (/^[0-9]$/.test(key))
34
- return `Digit${key}`;
35
- if (key === ' ')
36
- return 'Space';
37
- return key;
38
- }
39
- /**
40
- * A synthetic originalEvent (the equivalent of a MouseEvent)
41
- *
42
- * It is a minimal dummy that has only the members the InputRouter and the modes touch.
43
- * What the implementation touches is only preventDefault / stopPropagation (when the
44
- * InputRouter consumes onMouseDown, and the shortcuts of the select mode) and target (the
45
- * container test of the plugin interactions), so it is given those plus the fields for
46
- * reading the modifier keys and the coordinate.
47
- */
48
- function createSyntheticMouseEvent(type, point, modifiers) {
49
- return {
50
- type,
51
- [SYNTHETIC_EVENT_MARKER]: true,
52
- button: 0,
53
- buttons: 0,
54
- // A synthetic input has no offset on the page, so put in the canvas-relative coordinate as is
55
- clientX: point.x,
56
- clientY: point.y,
57
- target: null,
58
- currentTarget: null,
59
- shiftKey: modifiers.shift,
60
- ctrlKey: modifiers.ctrl,
61
- altKey: modifiers.alt,
62
- metaKey: modifiers.meta,
63
- defaultPrevented: false,
64
- preventDefault() { },
65
- stopPropagation() { },
66
- stopImmediatePropagation() { },
67
- };
68
- }
69
- /**
70
- * A synthetic originalEvent (the equivalent of a KeyboardEvent)
71
- */
72
- function createSyntheticKeyboardEvent(key, code, modifiers) {
73
- return {
74
- type: 'keydown',
75
- [SYNTHETIC_EVENT_MARKER]: true,
76
- key,
77
- code,
78
- repeat: false,
79
- target: null,
80
- currentTarget: null,
81
- shiftKey: modifiers.shift,
82
- ctrlKey: modifiers.ctrl,
83
- altKey: modifiers.alt,
84
- metaKey: modifiers.meta,
85
- defaultPrevented: false,
86
- preventDefault() { },
87
- stopPropagation() { },
88
- stopImmediatePropagation() { },
89
- };
90
- }
91
- /** @internal */
92
- export function createInputApi(deps) {
93
- const { map, inputRouter } = deps;
94
- /**
95
- * Builds a normalized mouse event
96
- *
97
- * The screen point is computed with map.project (a value with the same meaning as the point
98
- * the InputNormalizer receives from MapLibre).
99
- */
100
- function buildMouseEvent(type, lngLat, options) {
101
- const resolved = toLngLat(lngLat);
102
- const projected = map.project([resolved.lng, resolved.lat]);
103
- const point = { x: projected.x, y: projected.y };
104
- const modifiers = toModifiers(options?.modifiers);
105
- return {
106
- type,
107
- point,
108
- lngLat: { lng: resolved.lng, lat: resolved.lat },
109
- originalEvent: createSyntheticMouseEvent(type, point, modifiers),
110
- modifiers,
111
- snap: options?.snap ?? true,
112
- };
113
- }
114
- return {
115
- input: {
116
- click(lngLat, options) {
117
- // Use the same order as a real cursor (move, then click).
118
- inputRouter.dispatch(buildMouseEvent('mousemove', lngLat, options));
119
- inputRouter.dispatch(buildMouseEvent('click', lngLat, options));
120
- },
121
- move(lngLat, options) {
122
- inputRouter.dispatch(buildMouseEvent('mousemove', lngLat, options));
123
- },
124
- setPointerHold(held) {
125
- inputRouter.setPointerHold(held);
126
- },
127
- isPointerHeld() {
128
- return inputRouter.isPointerHeld();
129
- },
130
- key(key, options) {
131
- const modifiers = toModifiers(options?.modifiers);
132
- const code = options?.code ?? inferCode(key);
133
- const event = {
134
- type: 'keydown',
135
- key,
136
- code,
137
- modifiers,
138
- originalEvent: createSyntheticKeyboardEvent(key, code, modifiers),
139
- };
140
- inputRouter.dispatch(event);
141
- },
142
- },
143
- };
144
- }
@@ -1,38 +0,0 @@
1
- /**
2
- * Instance API
3
- *
4
- * Provides the basic operations of a MapLibreGLDraw instance (getting the Map / Store,
5
- * switching the Mode, Metadata, destroy). It gathers the related methods that are small and
6
- * not large enough to deserve a file of their own.
7
- */
8
- import type { CustomLayerInterface as MapLibreCustomLayerInterface, Map as MapLibreMap } from 'maplibre-gl';
9
- import type { InputRouter } from '../dispatcher/input-router.js';
10
- import type { InputNormalizer } from '../dispatcher/normalizer.js';
11
- import type { ModeManager } from '../modes/manager.js';
12
- import type { PluginManager } from '../plugins/plugin-manager.js';
13
- import type { AutoNameGenerator } from '../shared/utils/name-generator.js';
14
- import type { PixelRatioSource } from '../shared/utils/pixel-ratio.js';
15
- import type { EventBridge } from '../store/event-bridge.js';
16
- import type { Store } from '../store/store.js';
17
- import type { RenderCoordinator } from '../view/coordinator.js';
18
- import type { CustomLayerInterface } from '../view/layer/index.js';
19
- import type { MapLibreGLDraw } from './api.js';
20
- export type InstanceApi = Pick<MapLibreGLDraw, 'getMap' | 'getStore' | 'getMode' | 'setMode' | 'getMetadata' | 'setMetadata' | 'isReadOnly' | 'setReadOnly' | 'isInteractionLocked' | 'setInteractionLock' | 'getRenderSlots' | 'getRenderScale' | 'setRenderScale' | 'getPixelRatio' | 'getTerrainDiagnostics' | 'hasPendingWork' | 'isLocallyHidden' | 'getLocallyHidden' | 'setLocallyHidden' | 'destroy'>;
21
- export interface InstanceApiDeps {
22
- map: MapLibreMap;
23
- store: Store;
24
- modeManager: ModeManager;
25
- eventBridge: EventBridge;
26
- renderCoordinator: RenderCoordinator;
27
- inputRouter: InputRouter;
28
- inputNormalizer: InputNormalizer;
29
- customLayer: MapLibreCustomLayerInterface | CustomLayerInterface;
30
- autoNameGenerator: AutoNameGenerator;
31
- /** Needed in order to unregister the plugins on destroy (releasing the extension point
32
- * registries) */
33
- pluginManager: PluginManager;
34
- /** The source of the render scale (the actual object held by the Context; setRenderScale
35
- * rewrites it) */
36
- pixelRatioSource: PixelRatioSource;
37
- }
38
- export declare function createInstanceApi(deps: InstanceApiDeps): InstanceApi;