@sakuzu/maplibre-gl-draw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/LICENSE +661 -0
  3. package/README.ja.md +248 -0
  4. package/README.md +255 -0
  5. package/THIRD_PARTY_NOTICES.md +275 -0
  6. package/dist/api/api.d.ts +1259 -0
  7. package/dist/api/api.js +86 -0
  8. package/dist/api/context.d.ts +173 -0
  9. package/dist/api/context.js +193 -0
  10. package/dist/api/display-api.d.ts +1 -0
  11. package/dist/api/display-api.js +23 -0
  12. package/dist/api/event-api.d.ts +13 -0
  13. package/dist/api/event-api.js +17 -0
  14. package/dist/api/extension-api.d.ts +46 -0
  15. package/dist/api/extension-api.js +85 -0
  16. package/dist/api/feature-api.d.ts +11 -0
  17. package/dist/api/feature-api.js +101 -0
  18. package/dist/api/geometry/apply.d.ts +51 -0
  19. package/dist/api/geometry/apply.js +114 -0
  20. package/dist/api/geometry/boolean.d.ts +28 -0
  21. package/dist/api/geometry/boolean.js +65 -0
  22. package/dist/api/geometry/buffer.d.ts +11 -0
  23. package/dist/api/geometry/buffer.js +105 -0
  24. package/dist/api/geometry/split.d.ts +16 -0
  25. package/dist/api/geometry/split.js +75 -0
  26. package/dist/api/geometry/targets.d.ts +76 -0
  27. package/dist/api/geometry/targets.js +158 -0
  28. package/dist/api/geometry/types.d.ts +31 -0
  29. package/dist/api/geometry/types.js +3 -0
  30. package/dist/api/geometry-operations.d.ts +162 -0
  31. package/dist/api/geometry-operations.js +94 -0
  32. package/dist/api/group-api.d.ts +10 -0
  33. package/dist/api/group-api.js +78 -0
  34. package/dist/api/import-export/constants.d.ts +29 -0
  35. package/dist/api/import-export/constants.js +40 -0
  36. package/dist/api/import-export/embedded-file.d.ts +13 -0
  37. package/dist/api/import-export/embedded-file.js +31 -0
  38. package/dist/api/import-export/file-name.d.ts +10 -0
  39. package/dist/api/import-export/file-name.js +20 -0
  40. package/dist/api/import-export/format-detection.d.ts +12 -0
  41. package/dist/api/import-export/format-detection.js +29 -0
  42. package/dist/api/import-export/geojson-export.d.ts +19 -0
  43. package/dist/api/import-export/geojson-export.js +262 -0
  44. package/dist/api/import-export/geojson-import.d.ts +34 -0
  45. package/dist/api/import-export/geojson-import.js +538 -0
  46. package/dist/api/import-export/geometry-validation.d.ts +20 -0
  47. package/dist/api/import-export/geometry-validation.js +107 -0
  48. package/dist/api/import-export/image-import.d.ts +12 -0
  49. package/dist/api/import-export/image-import.js +53 -0
  50. package/dist/api/import-export/index.d.ts +9 -0
  51. package/dist/api/import-export/index.js +107 -0
  52. package/dist/api/import-export/native-format.d.ts +15 -0
  53. package/dist/api/import-export/native-format.js +126 -0
  54. package/dist/api/import-export/native-validation.d.ts +28 -0
  55. package/dist/api/import-export/native-validation.js +212 -0
  56. package/dist/api/import-export/own-property.d.ts +10 -0
  57. package/dist/api/import-export/own-property.js +19 -0
  58. package/dist/api/import-export/style-validation.d.ts +27 -0
  59. package/dist/api/import-export/style-validation.js +49 -0
  60. package/dist/api/import-export/types.d.ts +26 -0
  61. package/dist/api/import-export/types.js +3 -0
  62. package/dist/api/index.d.ts +15 -0
  63. package/dist/api/index.js +3 -0
  64. package/dist/api/input-api.d.ts +158 -0
  65. package/dist/api/input-api.js +144 -0
  66. package/dist/api/instance-api.d.ts +38 -0
  67. package/dist/api/instance-api.js +136 -0
  68. package/dist/api/layer-api.d.ts +12 -0
  69. package/dist/api/layer-api.js +62 -0
  70. package/dist/api/selection-api.d.ts +7 -0
  71. package/dist/api/selection-api.js +78 -0
  72. package/dist/api/snapping-api.d.ts +125 -0
  73. package/dist/api/snapping-api.js +50 -0
  74. package/dist/api/topology-api.d.ts +30 -0
  75. package/dist/api/topology-api.js +16 -0
  76. package/dist/api/tracing-api.d.ts +31 -0
  77. package/dist/api/tracing-api.js +16 -0
  78. package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
  79. package/dist/dispatcher/hit-test/box-strategies.js +275 -0
  80. package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
  81. package/dist/dispatcher/hit-test/box-strategy.js +37 -0
  82. package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
  83. package/dist/dispatcher/hit-test/globe-shape.js +70 -0
  84. package/dist/dispatcher/hit-test/index.d.ts +14 -0
  85. package/dist/dispatcher/hit-test/index.js +9 -0
  86. package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
  87. package/dist/dispatcher/hit-test/local-frame.js +112 -0
  88. package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
  89. package/dist/dispatcher/hit-test/segment-grid.js +79 -0
  90. package/dist/dispatcher/hit-test/service.d.ts +120 -0
  91. package/dist/dispatcher/hit-test/service.js +333 -0
  92. package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
  93. package/dist/dispatcher/hit-test/strategies/base.js +66 -0
  94. package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
  95. package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
  96. package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
  97. package/dist/dispatcher/hit-test/strategies/image.js +115 -0
  98. package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
  99. package/dist/dispatcher/hit-test/strategies/index.js +10 -0
  100. package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
  101. package/dist/dispatcher/hit-test/strategies/line.js +30 -0
  102. package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
  103. package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
  104. package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
  105. package/dist/dispatcher/hit-test/strategies/point.js +29 -0
  106. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
  107. package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
  108. package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
  109. package/dist/dispatcher/hit-test/topmost.js +157 -0
  110. package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
  111. package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
  112. package/dist/dispatcher/index.d.ts +15 -0
  113. package/dist/dispatcher/index.js +3 -0
  114. package/dist/dispatcher/input-router.d.ts +1 -0
  115. package/dist/dispatcher/input-router.js +288 -0
  116. package/dist/dispatcher/normalizer.d.ts +1 -0
  117. package/dist/dispatcher/normalizer.js +513 -0
  118. package/dist/dispatcher/types.d.ts +144 -0
  119. package/dist/dispatcher/types.js +15 -0
  120. package/dist/display/chunk-set.d.ts +24 -0
  121. package/dist/display/chunk-set.js +533 -0
  122. package/dist/display/chunk.d.ts +1 -0
  123. package/dist/display/chunk.js +104 -0
  124. package/dist/display/columnar/index.d.ts +12 -0
  125. package/dist/display/columnar/index.js +13 -0
  126. package/dist/display/columnar/prepare.d.ts +42 -0
  127. package/dist/display/columnar/prepare.js +116 -0
  128. package/dist/display/columnar/source.d.ts +1 -0
  129. package/dist/display/columnar/source.js +531 -0
  130. package/dist/display/columnar/table.d.ts +1 -0
  131. package/dist/display/columnar/table.js +471 -0
  132. package/dist/display/columnar/types.d.ts +223 -0
  133. package/dist/display/columnar/types.js +3 -0
  134. package/dist/display/dataset.d.ts +2 -0
  135. package/dist/display/dataset.js +891 -0
  136. package/dist/display/index.d.ts +13 -0
  137. package/dist/display/index.js +3 -0
  138. package/dist/display/interaction.d.ts +1 -0
  139. package/dist/display/interaction.js +90 -0
  140. package/dist/display/manager.d.ts +1 -0
  141. package/dist/display/manager.js +440 -0
  142. package/dist/display/packed-rtree.d.ts +1 -0
  143. package/dist/display/packed-rtree.js +244 -0
  144. package/dist/display/partition.d.ts +1 -0
  145. package/dist/display/partition.js +226 -0
  146. package/dist/display/provider.d.ts +1 -0
  147. package/dist/display/provider.js +342 -0
  148. package/dist/display/retained.d.ts +40 -0
  149. package/dist/display/retained.js +898 -0
  150. package/dist/display/selection.d.ts +13 -0
  151. package/dist/display/selection.js +226 -0
  152. package/dist/display/source.d.ts +1 -0
  153. package/dist/display/source.js +119 -0
  154. package/dist/display/spatial.d.ts +1 -0
  155. package/dist/display/spatial.js +71 -0
  156. package/dist/display/style.d.ts +1 -0
  157. package/dist/display/style.js +126 -0
  158. package/dist/display/thinning.d.ts +65 -0
  159. package/dist/display/thinning.js +910 -0
  160. package/dist/display/triangulation.d.ts +1 -0
  161. package/dist/display/triangulation.js +0 -0
  162. package/dist/display/types.d.ts +561 -0
  163. package/dist/display/types.js +43 -0
  164. package/dist/extension/feature-handler.d.ts +182 -0
  165. package/dist/extension/feature-handler.js +3 -0
  166. package/dist/extension/index.d.ts +9 -0
  167. package/dist/extension/index.js +3 -0
  168. package/dist/extension/renderers.d.ts +208 -0
  169. package/dist/extension/renderers.js +3 -0
  170. package/dist/geometry/angle.d.ts +47 -0
  171. package/dist/geometry/angle.js +44 -0
  172. package/dist/geometry/bbox.d.ts +48 -0
  173. package/dist/geometry/bbox.js +83 -0
  174. package/dist/geometry/boolean.d.ts +162 -0
  175. package/dist/geometry/boolean.js +331 -0
  176. package/dist/geometry/buffer.d.ts +72 -0
  177. package/dist/geometry/buffer.js +218 -0
  178. package/dist/geometry/circle.d.ts +55 -0
  179. package/dist/geometry/circle.js +107 -0
  180. package/dist/geometry/coords.d.ts +97 -0
  181. package/dist/geometry/coords.js +149 -0
  182. package/dist/geometry/distance.d.ts +79 -0
  183. package/dist/geometry/distance.js +111 -0
  184. package/dist/geometry/errors.d.ts +74 -0
  185. package/dist/geometry/errors.js +104 -0
  186. package/dist/geometry/index.d.ts +28 -0
  187. package/dist/geometry/index.js +38 -0
  188. package/dist/geometry/measure.d.ts +81 -0
  189. package/dist/geometry/measure.js +236 -0
  190. package/dist/geometry/predicates.d.ts +62 -0
  191. package/dist/geometry/predicates.js +132 -0
  192. package/dist/geometry/simplify.d.ts +74 -0
  193. package/dist/geometry/simplify.js +159 -0
  194. package/dist/geometry/split.d.ts +68 -0
  195. package/dist/geometry/split.js +430 -0
  196. package/dist/geometry/types.d.ts +95 -0
  197. package/dist/geometry/types.js +3 -0
  198. package/dist/geometry/units.d.ts +35 -0
  199. package/dist/geometry/units.js +41 -0
  200. package/dist/index.d.ts +72 -0
  201. package/dist/index.js +20 -0
  202. package/dist/maplibre-gl-draw.d.ts +47 -0
  203. package/dist/maplibre-gl-draw.js +407 -0
  204. package/dist/messages.d.ts +64 -0
  205. package/dist/messages.js +36 -0
  206. package/dist/modes/cursor.d.ts +1 -0
  207. package/dist/modes/cursor.js +72 -0
  208. package/dist/modes/draw/circle.d.ts +1 -0
  209. package/dist/modes/draw/circle.js +222 -0
  210. package/dist/modes/draw/commit-layer.d.ts +26 -0
  211. package/dist/modes/draw/commit-layer.js +31 -0
  212. package/dist/modes/draw/freehand.d.ts +1 -0
  213. package/dist/modes/draw/freehand.js +264 -0
  214. package/dist/modes/draw/image.d.ts +1 -0
  215. package/dist/modes/draw/image.js +60 -0
  216. package/dist/modes/draw/index.d.ts +9 -0
  217. package/dist/modes/draw/index.js +11 -0
  218. package/dist/modes/draw/line.d.ts +1 -0
  219. package/dist/modes/draw/line.js +363 -0
  220. package/dist/modes/draw/point.d.ts +1 -0
  221. package/dist/modes/draw/point.js +87 -0
  222. package/dist/modes/draw/polygon.d.ts +1 -0
  223. package/dist/modes/draw/polygon.js +378 -0
  224. package/dist/modes/draw/trace-support.d.ts +79 -0
  225. package/dist/modes/draw/trace-support.js +161 -0
  226. package/dist/modes/handler.d.ts +285 -0
  227. package/dist/modes/handler.js +3 -0
  228. package/dist/modes/index.d.ts +7 -0
  229. package/dist/modes/index.js +3 -0
  230. package/dist/modes/manager.d.ts +15 -0
  231. package/dist/modes/manager.js +196 -0
  232. package/dist/modes/select/box-selection.d.ts +52 -0
  233. package/dist/modes/select/box-selection.js +140 -0
  234. package/dist/modes/select/click-handler.d.ts +32 -0
  235. package/dist/modes/select/click-handler.js +166 -0
  236. package/dist/modes/select/cursor-handler.d.ts +15 -0
  237. package/dist/modes/select/cursor-handler.js +59 -0
  238. package/dist/modes/select/drag/auxiliary.d.ts +26 -0
  239. package/dist/modes/select/drag/auxiliary.js +56 -0
  240. package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
  241. package/dist/modes/select/drag/intermediate-writes.js +171 -0
  242. package/dist/modes/select/drag/move.d.ts +24 -0
  243. package/dist/modes/select/drag/move.js +59 -0
  244. package/dist/modes/select/drag/operation.d.ts +30 -0
  245. package/dist/modes/select/drag/operation.js +18 -0
  246. package/dist/modes/select/drag/radius.d.ts +15 -0
  247. package/dist/modes/select/drag/radius.js +49 -0
  248. package/dist/modes/select/drag/transform.d.ts +17 -0
  249. package/dist/modes/select/drag/transform.js +155 -0
  250. package/dist/modes/select/drag/vertex.d.ts +17 -0
  251. package/dist/modes/select/drag/vertex.js +163 -0
  252. package/dist/modes/select/drag-handler.d.ts +1 -0
  253. package/dist/modes/select/drag-handler.js +254 -0
  254. package/dist/modes/select/hit-helpers.d.ts +40 -0
  255. package/dist/modes/select/hit-helpers.js +51 -0
  256. package/dist/modes/select/mode.d.ts +1 -0
  257. package/dist/modes/select/mode.js +397 -0
  258. package/dist/modes/select/shortcut-handler.d.ts +40 -0
  259. package/dist/modes/select/shortcut-handler.js +128 -0
  260. package/dist/operations/index.d.ts +9 -0
  261. package/dist/operations/index.js +3 -0
  262. package/dist/operations/layer-operations.d.ts +1 -0
  263. package/dist/operations/layer-operations.js +350 -0
  264. package/dist/operations/resize.d.ts +71 -0
  265. package/dist/operations/resize.js +252 -0
  266. package/dist/operations/rotate.d.ts +17 -0
  267. package/dist/operations/rotate.js +166 -0
  268. package/dist/operations/selection-operations.d.ts +20 -0
  269. package/dist/operations/selection-operations.js +159 -0
  270. package/dist/operations/shared-vertex.d.ts +1 -0
  271. package/dist/operations/shared-vertex.js +210 -0
  272. package/dist/operations/trace-graph.d.ts +96 -0
  273. package/dist/operations/trace-graph.js +283 -0
  274. package/dist/operations/vertex.d.ts +1 -0
  275. package/dist/operations/vertex.js +538 -0
  276. package/dist/plugins/index.d.ts +10 -0
  277. package/dist/plugins/index.js +3 -0
  278. package/dist/plugins/mutation-hooks.d.ts +28 -0
  279. package/dist/plugins/mutation-hooks.js +84 -0
  280. package/dist/plugins/plugin-context.d.ts +1 -0
  281. package/dist/plugins/plugin-context.js +367 -0
  282. package/dist/plugins/plugin-manager.d.ts +103 -0
  283. package/dist/plugins/plugin-manager.js +316 -0
  284. package/dist/plugins/plugin.d.ts +529 -0
  285. package/dist/plugins/plugin.js +3 -0
  286. package/dist/shared/config/constants.d.ts +66 -0
  287. package/dist/shared/config/constants.js +60 -0
  288. package/dist/shared/config/feature-style.d.ts +155 -0
  289. package/dist/shared/config/feature-style.js +154 -0
  290. package/dist/shared/config/index.d.ts +17 -0
  291. package/dist/shared/config/index.js +8 -0
  292. package/dist/shared/config/rendering.d.ts +107 -0
  293. package/dist/shared/config/rendering.js +33 -0
  294. package/dist/shared/config/selection-highlight.d.ts +29 -0
  295. package/dist/shared/config/selection-highlight.js +35 -0
  296. package/dist/shared/config/selection.d.ts +273 -0
  297. package/dist/shared/config/selection.js +266 -0
  298. package/dist/shared/config/topology.d.ts +33 -0
  299. package/dist/shared/config/topology.js +17 -0
  300. package/dist/shared/config/trace.d.ts +40 -0
  301. package/dist/shared/config/trace.js +17 -0
  302. package/dist/shared/math/angle.d.ts +21 -0
  303. package/dist/shared/math/angle.js +34 -0
  304. package/dist/shared/math/circle.d.ts +6 -0
  305. package/dist/shared/math/circle.js +10 -0
  306. package/dist/shared/math/constants.d.ts +48 -0
  307. package/dist/shared/math/constants.js +59 -0
  308. package/dist/shared/math/distance.d.ts +78 -0
  309. package/dist/shared/math/distance.js +147 -0
  310. package/dist/shared/math/globe-subdivision.d.ts +62 -0
  311. package/dist/shared/math/globe-subdivision.js +99 -0
  312. package/dist/shared/math/index.d.ts +17 -0
  313. package/dist/shared/math/index.js +21 -0
  314. package/dist/shared/math/intersection.d.ts +63 -0
  315. package/dist/shared/math/intersection.js +236 -0
  316. package/dist/shared/math/longitude.d.ts +20 -0
  317. package/dist/shared/math/longitude.js +31 -0
  318. package/dist/shared/math/mercator-plane.d.ts +27 -0
  319. package/dist/shared/math/mercator-plane.js +26 -0
  320. package/dist/shared/math/obb.d.ts +65 -0
  321. package/dist/shared/math/obb.js +107 -0
  322. package/dist/shared/math/rotation.d.ts +93 -0
  323. package/dist/shared/math/rotation.js +186 -0
  324. package/dist/shared/math/segment-grid.d.ts +69 -0
  325. package/dist/shared/math/segment-grid.js +159 -0
  326. package/dist/shared/math/transform.d.ts +140 -0
  327. package/dist/shared/math/transform.js +189 -0
  328. package/dist/shared/types/events.d.ts +128 -0
  329. package/dist/shared/types/events.js +3 -0
  330. package/dist/shared/types/model.d.ts +950 -0
  331. package/dist/shared/types/model.js +3 -0
  332. package/dist/shared/types/selection-box.d.ts +23 -0
  333. package/dist/shared/types/selection-box.js +3 -0
  334. package/dist/shared/types/style.d.ts +68 -0
  335. package/dist/shared/types/style.js +3 -0
  336. package/dist/shared/utils/color.d.ts +49 -0
  337. package/dist/shared/utils/color.js +180 -0
  338. package/dist/shared/utils/coordinates.d.ts +52 -0
  339. package/dist/shared/utils/coordinates.js +75 -0
  340. package/dist/shared/utils/embedded-image.d.ts +34 -0
  341. package/dist/shared/utils/embedded-image.js +161 -0
  342. package/dist/shared/utils/event-emitter.d.ts +262 -0
  343. package/dist/shared/utils/event-emitter.js +44 -0
  344. package/dist/shared/utils/feature-bbox.d.ts +8 -0
  345. package/dist/shared/utils/feature-bbox.js +207 -0
  346. package/dist/shared/utils/feature-segments.d.ts +23 -0
  347. package/dist/shared/utils/feature-segments.js +179 -0
  348. package/dist/shared/utils/id.d.ts +1 -0
  349. package/dist/shared/utils/id.js +35 -0
  350. package/dist/shared/utils/image.d.ts +34 -0
  351. package/dist/shared/utils/image.js +106 -0
  352. package/dist/shared/utils/index.d.ts +15 -0
  353. package/dist/shared/utils/index.js +24 -0
  354. package/dist/shared/utils/map.d.ts +26 -0
  355. package/dist/shared/utils/map.js +35 -0
  356. package/dist/shared/utils/name-generator.d.ts +197 -0
  357. package/dist/shared/utils/name-generator.js +337 -0
  358. package/dist/shared/utils/pixel-ratio.d.ts +111 -0
  359. package/dist/shared/utils/pixel-ratio.js +85 -0
  360. package/dist/shared/utils/property.d.ts +88 -0
  361. package/dist/shared/utils/property.js +140 -0
  362. package/dist/shared/utils/vertex-ref.d.ts +23 -0
  363. package/dist/shared/utils/vertex-ref.js +20 -0
  364. package/dist/snapping/custom-targets.d.ts +1 -0
  365. package/dist/snapping/custom-targets.js +21 -0
  366. package/dist/snapping/geometry.d.ts +1 -0
  367. package/dist/snapping/geometry.js +61 -0
  368. package/dist/snapping/index.d.ts +14 -0
  369. package/dist/snapping/index.js +4 -0
  370. package/dist/snapping/indicator.d.ts +19 -0
  371. package/dist/snapping/indicator.js +145 -0
  372. package/dist/snapping/providers/display.d.ts +72 -0
  373. package/dist/snapping/providers/display.js +268 -0
  374. package/dist/snapping/providers/guide.d.ts +69 -0
  375. package/dist/snapping/providers/guide.js +187 -0
  376. package/dist/snapping/providers/intersection.d.ts +1 -0
  377. package/dist/snapping/providers/intersection.js +92 -0
  378. package/dist/snapping/providers/shared.d.ts +39 -0
  379. package/dist/snapping/providers/shared.js +146 -0
  380. package/dist/snapping/providers/store.d.ts +1 -0
  381. package/dist/snapping/providers/store.js +132 -0
  382. package/dist/snapping/service.d.ts +1 -0
  383. package/dist/snapping/service.js +272 -0
  384. package/dist/snapping/types.d.ts +267 -0
  385. package/dist/snapping/types.js +66 -0
  386. package/dist/store/change-merger.d.ts +1 -0
  387. package/dist/store/change-merger.js +102 -0
  388. package/dist/store/draw-store.d.ts +1 -0
  389. package/dist/store/draw-store.js +396 -0
  390. package/dist/store/event-bridge.d.ts +1 -0
  391. package/dist/store/event-bridge.js +161 -0
  392. package/dist/store/index.d.ts +12 -0
  393. package/dist/store/index.js +4 -0
  394. package/dist/store/local-visibility.d.ts +21 -0
  395. package/dist/store/local-visibility.js +27 -0
  396. package/dist/store/lock.d.ts +67 -0
  397. package/dist/store/lock.js +54 -0
  398. package/dist/store/memory/change-bus.d.ts +60 -0
  399. package/dist/store/memory/change-bus.js +232 -0
  400. package/dist/store/memory/file-store.d.ts +15 -0
  401. package/dist/store/memory/file-store.js +33 -0
  402. package/dist/store/memory/frozen.d.ts +21 -0
  403. package/dist/store/memory/frozen.js +51 -0
  404. package/dist/store/memory/ui-state.d.ts +51 -0
  405. package/dist/store/memory/ui-state.js +223 -0
  406. package/dist/store/memory.d.ts +26 -0
  407. package/dist/store/memory.js +708 -0
  408. package/dist/store/spatial/index.d.ts +6 -0
  409. package/dist/store/spatial/index.js +4 -0
  410. package/dist/store/spatial/spatial-index.d.ts +90 -0
  411. package/dist/store/spatial/spatial-index.js +148 -0
  412. package/dist/store/spatial/store-spatial-index.d.ts +60 -0
  413. package/dist/store/spatial/store-spatial-index.js +125 -0
  414. package/dist/store/store.d.ts +417 -0
  415. package/dist/store/store.js +3 -0
  416. package/dist/store/types.d.ts +8 -0
  417. package/dist/store/types.js +3 -0
  418. package/dist/store/writable-layer.d.ts +35 -0
  419. package/dist/store/writable-layer.js +20 -0
  420. package/dist/view/cache/buffer.d.ts +28 -0
  421. package/dist/view/cache/buffer.js +176 -0
  422. package/dist/view/cache/earcut.d.ts +1 -0
  423. package/dist/view/cache/earcut.js +122 -0
  424. package/dist/view/cache/style-rule.d.ts +1 -0
  425. package/dist/view/cache/style-rule.js +97 -0
  426. package/dist/view/cache/terrain-fill.d.ts +30 -0
  427. package/dist/view/cache/terrain-fill.js +60 -0
  428. package/dist/view/cache/texture.d.ts +14 -0
  429. package/dist/view/cache/texture.js +292 -0
  430. package/dist/view/coordinator.d.ts +27 -0
  431. package/dist/view/coordinator.js +72 -0
  432. package/dist/view/feature-companion.d.ts +173 -0
  433. package/dist/view/feature-companion.js +108 -0
  434. package/dist/view/globe-subdivision.d.ts +78 -0
  435. package/dist/view/globe-subdivision.js +128 -0
  436. package/dist/view/index.d.ts +47 -0
  437. package/dist/view/index.js +20 -0
  438. package/dist/view/layer/attach.d.ts +20 -0
  439. package/dist/view/layer/attach.js +47 -0
  440. package/dist/view/layer/blend.d.ts +57 -0
  441. package/dist/view/layer/blend.js +14 -0
  442. package/dist/view/layer/custom-layer.d.ts +1 -0
  443. package/dist/view/layer/custom-layer.js +509 -0
  444. package/dist/view/layer/depth-state.d.ts +14 -0
  445. package/dist/view/layer/depth-state.js +44 -0
  446. package/dist/view/layer/display-list.d.ts +1 -0
  447. package/dist/view/layer/display-list.js +111 -0
  448. package/dist/view/layer/drape-planner.d.ts +139 -0
  449. package/dist/view/layer/drape-planner.js +726 -0
  450. package/dist/view/layer/frame-render.d.ts +57 -0
  451. package/dist/view/layer/frame-render.js +209 -0
  452. package/dist/view/layer/frame-state.d.ts +147 -0
  453. package/dist/view/layer/frame-state.js +484 -0
  454. package/dist/view/layer/gl-state.d.ts +77 -0
  455. package/dist/view/layer/gl-state.js +132 -0
  456. package/dist/view/layer/index.d.ts +6 -0
  457. package/dist/view/layer/index.js +5 -0
  458. package/dist/view/layer/render-scope.d.ts +30 -0
  459. package/dist/view/layer/render-scope.js +28 -0
  460. package/dist/view/layer/render.d.ts +87 -0
  461. package/dist/view/layer/render.js +187 -0
  462. package/dist/view/layer/renderers.d.ts +81 -0
  463. package/dist/view/layer/renderers.js +142 -0
  464. package/dist/view/layer/slot-manager.d.ts +26 -0
  465. package/dist/view/layer/slot-manager.js +133 -0
  466. package/dist/view/layer/slots.d.ts +33 -0
  467. package/dist/view/layer/slots.js +50 -0
  468. package/dist/view/layer/store-retained-bbox.d.ts +36 -0
  469. package/dist/view/layer/store-retained-bbox.js +188 -0
  470. package/dist/view/layer/store-retained-chunk.d.ts +97 -0
  471. package/dist/view/layer/store-retained-chunk.js +94 -0
  472. package/dist/view/layer/store-retained-classify.d.ts +34 -0
  473. package/dist/view/layer/store-retained-classify.js +88 -0
  474. package/dist/view/layer/store-retained-collect.d.ts +24 -0
  475. package/dist/view/layer/store-retained-collect.js +121 -0
  476. package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
  477. package/dist/view/layer/store-retained-coord-patch.js +168 -0
  478. package/dist/view/layer/store-retained-immediate.d.ts +63 -0
  479. package/dist/view/layer/store-retained-immediate.js +49 -0
  480. package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
  481. package/dist/view/layer/store-retained-invalidation.js +192 -0
  482. package/dist/view/layer/store-retained.d.ts +198 -0
  483. package/dist/view/layer/store-retained.js +430 -0
  484. package/dist/view/layer/terrain-resolver.d.ts +1 -0
  485. package/dist/view/layer/terrain-resolver.js +174 -0
  486. package/dist/view/renderers/batch-manager.d.ts +61 -0
  487. package/dist/view/renderers/batch-manager.js +718 -0
  488. package/dist/view/renderers/draw-factors.d.ts +60 -0
  489. package/dist/view/renderers/draw-factors.js +35 -0
  490. package/dist/view/renderers/drawer.d.ts +1 -0
  491. package/dist/view/renderers/drawer.js +346 -0
  492. package/dist/view/renderers/image.d.ts +1 -0
  493. package/dist/view/renderers/image.js +255 -0
  494. package/dist/view/renderers/line/dash.d.ts +31 -0
  495. package/dist/view/renderers/line/dash.js +152 -0
  496. package/dist/view/renderers/line/line-geometry.d.ts +39 -0
  497. package/dist/view/renderers/line/line-geometry.js +460 -0
  498. package/dist/view/renderers/line/line-gl.d.ts +1 -0
  499. package/dist/view/renderers/line/line-gl.js +236 -0
  500. package/dist/view/renderers/line/line-shader.d.ts +1 -0
  501. package/dist/view/renderers/line/line-shader.js +364 -0
  502. package/dist/view/renderers/line/line-types.d.ts +43 -0
  503. package/dist/view/renderers/line/line-types.js +3 -0
  504. package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
  505. package/dist/view/renderers/line/line-uniforms.js +390 -0
  506. package/dist/view/renderers/line/sdf-line.d.ts +92 -0
  507. package/dist/view/renderers/line/sdf-line.js +567 -0
  508. package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
  509. package/dist/view/renderers/point/billboard-depth.js +56 -0
  510. package/dist/view/renderers/point/point-instance.d.ts +124 -0
  511. package/dist/view/renderers/point/point-instance.js +738 -0
  512. package/dist/view/renderers/point/point-sdf.d.ts +58 -0
  513. package/dist/view/renderers/point/point-sdf.js +170 -0
  514. package/dist/view/renderers/point/point-shape.d.ts +99 -0
  515. package/dist/view/renderers/point/point-shape.js +504 -0
  516. package/dist/view/renderers/point/point-style.d.ts +1 -0
  517. package/dist/view/renderers/point/point-style.js +46 -0
  518. package/dist/view/renderers/polygon/batch.d.ts +26 -0
  519. package/dist/view/renderers/polygon/batch.js +336 -0
  520. package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
  521. package/dist/view/renderers/polygon/earcut-input.js +55 -0
  522. package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
  523. package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
  524. package/dist/view/renderers/polygon/fill.d.ts +74 -0
  525. package/dist/view/renderers/polygon/fill.js +251 -0
  526. package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
  527. package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
  528. package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
  529. package/dist/view/renderers/polygon/terrain-cull.js +14 -0
  530. package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
  531. package/dist/view/renderers/polygon/triangulator.js +3 -0
  532. package/dist/view/renderers/retained.d.ts +43 -0
  533. package/dist/view/renderers/retained.js +3 -0
  534. package/dist/view/renderers/stroke.d.ts +121 -0
  535. package/dist/view/renderers/stroke.js +621 -0
  536. package/dist/view/shaders/frame.d.ts +8 -0
  537. package/dist/view/shaders/frame.js +37 -0
  538. package/dist/view/shaders/helpers.d.ts +238 -0
  539. package/dist/view/shaders/helpers.js +611 -0
  540. package/dist/view/shaders/initializer.d.ts +27 -0
  541. package/dist/view/shaders/initializer.js +125 -0
  542. package/dist/view/shaders/projection.d.ts +123 -0
  543. package/dist/view/shaders/projection.js +299 -0
  544. package/dist/view/shaders/quad-grid.d.ts +77 -0
  545. package/dist/view/shaders/quad-grid.js +128 -0
  546. package/dist/view/shaders/quad.d.ts +189 -0
  547. package/dist/view/shaders/quad.js +582 -0
  548. package/dist/view/shaders/retained-origin.d.ts +50 -0
  549. package/dist/view/shaders/retained-origin.js +67 -0
  550. package/dist/view/shaders/terrain-shade.d.ts +23 -0
  551. package/dist/view/shaders/terrain-shade.js +93 -0
  552. package/dist/view/style-rule.d.ts +166 -0
  553. package/dist/view/style-rule.js +300 -0
  554. package/dist/view/terrain/anchor.d.ts +135 -0
  555. package/dist/view/terrain/anchor.js +226 -0
  556. package/dist/view/terrain/context.d.ts +132 -0
  557. package/dist/view/terrain/context.js +437 -0
  558. package/dist/view/terrain/dem-atlas.d.ts +97 -0
  559. package/dist/view/terrain/dem-atlas.js +534 -0
  560. package/dist/view/terrain/detect.d.ts +126 -0
  561. package/dist/view/terrain/detect.js +198 -0
  562. package/dist/view/terrain/drape/bin-store.d.ts +179 -0
  563. package/dist/view/terrain/drape/bin-store.js +529 -0
  564. package/dist/view/terrain/drape/binning.d.ts +259 -0
  565. package/dist/view/terrain/drape/binning.js +604 -0
  566. package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
  567. package/dist/view/terrain/drape/edge-constrain.js +175 -0
  568. package/dist/view/terrain/drape/geometry.d.ts +95 -0
  569. package/dist/view/terrain/drape/geometry.js +260 -0
  570. package/dist/view/terrain/drape/mesh.d.ts +50 -0
  571. package/dist/view/terrain/drape/mesh.js +86 -0
  572. package/dist/view/terrain/drape/pass.d.ts +122 -0
  573. package/dist/view/terrain/drape/pass.js +379 -0
  574. package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
  575. package/dist/view/terrain/drape/quad-glyphs.js +117 -0
  576. package/dist/view/terrain/drape/quad.d.ts +249 -0
  577. package/dist/view/terrain/drape/quad.js +835 -0
  578. package/dist/view/terrain/drape/renderer.d.ts +184 -0
  579. package/dist/view/terrain/drape/renderer.js +706 -0
  580. package/dist/view/terrain/drape/shared.d.ts +80 -0
  581. package/dist/view/terrain/drape/shared.js +173 -0
  582. package/dist/view/terrain/drape/stitch.d.ts +155 -0
  583. package/dist/view/terrain/drape/stitch.js +228 -0
  584. package/dist/view/terrain/ground.d.ts +72 -0
  585. package/dist/view/terrain/ground.js +151 -0
  586. package/dist/view/terrain/metrics.d.ts +180 -0
  587. package/dist/view/terrain/metrics.js +231 -0
  588. package/dist/view/terrain/occlusion.d.ts +11 -0
  589. package/dist/view/terrain/occlusion.js +129 -0
  590. package/dist/view/terrain/polygon.d.ts +86 -0
  591. package/dist/view/terrain/polygon.js +301 -0
  592. package/dist/view/terrain/shade.d.ts +48 -0
  593. package/dist/view/terrain/shade.js +45 -0
  594. package/dist/view/terrain/state.d.ts +99 -0
  595. package/dist/view/terrain/state.js +186 -0
  596. package/dist/view/terrain/tessellation.d.ts +265 -0
  597. package/dist/view/terrain/tessellation.js +924 -0
  598. package/dist/view/terrain/tiling.d.ts +56 -0
  599. package/dist/view/terrain/tiling.js +155 -0
  600. package/dist/view/terrain/upstream-terrain.d.ts +82 -0
  601. package/dist/view/terrain/upstream-terrain.js +116 -0
  602. package/dist/view/ui/auxiliary-handles.d.ts +151 -0
  603. package/dist/view/ui/auxiliary-handles.js +22 -0
  604. package/dist/view/ui/bounds.d.ts +53 -0
  605. package/dist/view/ui/bounds.js +149 -0
  606. package/dist/view/ui/box-selection.d.ts +1 -0
  607. package/dist/view/ui/box-selection.js +83 -0
  608. package/dist/view/ui/handle-test.d.ts +1 -0
  609. package/dist/view/ui/handle-test.js +437 -0
  610. package/dist/view/ui/handle-thinning.d.ts +122 -0
  611. package/dist/view/ui/handle-thinning.js +430 -0
  612. package/dist/view/ui/handles.d.ts +25 -0
  613. package/dist/view/ui/handles.js +673 -0
  614. package/dist/view/ui/helper.d.ts +19 -0
  615. package/dist/view/ui/helper.js +76 -0
  616. package/dist/view/ui/index.d.ts +15 -0
  617. package/dist/view/ui/index.js +15 -0
  618. package/dist/view/ui/selection-scope.d.ts +25 -0
  619. package/dist/view/ui/selection-scope.js +34 -0
  620. package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
  621. package/dist/view/ui/selection-ui/bounding-box.js +240 -0
  622. package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
  623. package/dist/view/ui/selection-ui/extension-registry.js +78 -0
  624. package/dist/view/ui/selection-ui/index.d.ts +12 -0
  625. package/dist/view/ui/selection-ui/index.js +12 -0
  626. package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
  627. package/dist/view/ui/selection-ui/renderer.js +227 -0
  628. package/dist/view/ui/selection-ui/types.d.ts +55 -0
  629. package/dist/view/ui/selection-ui/types.js +3 -0
  630. package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
  631. package/dist/view/ui/selection-ui-drawer.js +329 -0
  632. package/dist/view/ui/tentative.d.ts +1 -0
  633. package/dist/view/ui/tentative.js +320 -0
  634. package/dist/view/viewport.d.ts +119 -0
  635. package/dist/view/viewport.js +254 -0
  636. package/package.json +113 -0
@@ -0,0 +1,26 @@
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
+ }
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
@@ -0,0 +1,15 @@
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';
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export { createGeometryApi } from './geometry-operations.js';
@@ -0,0 +1,158 @@
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
+ }
@@ -0,0 +1,144 @@
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
+ }
@@ -0,0 +1,38 @@
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;
@@ -0,0 +1,136 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { INITIAL_DRAPE_DEBUG } from '../view/terrain/context.js';
4
+ import { getTerrainDrapeDebug, getTerrainRenderState, INACTIVE_TERRAIN_STATE, } from '../view/terrain/state.js';
5
+ export function createInstanceApi(deps) {
6
+ const { map, store, modeManager, eventBridge, renderCoordinator, inputRouter, inputNormalizer, customLayer, autoNameGenerator, pixelRatioSource, pluginManager, } = deps;
7
+ return {
8
+ getMap() {
9
+ return map;
10
+ },
11
+ getStore() {
12
+ return store;
13
+ },
14
+ getMode() {
15
+ return modeManager.getMode();
16
+ },
17
+ setMode(mode) {
18
+ // Following the SSoT, call Store.setMode() through the ModeManager
19
+ // The event is emitted from the Store through the EventBridge
20
+ return modeManager.setMode(mode);
21
+ },
22
+ getMetadata() {
23
+ return store.getMetadata();
24
+ },
25
+ setMetadata(metadata) {
26
+ return store.setMetadata(metadata);
27
+ },
28
+ isReadOnly() {
29
+ return store.isReadOnly();
30
+ },
31
+ setReadOnly(value) {
32
+ store.setReadOnly(value);
33
+ },
34
+ isInteractionLocked() {
35
+ return store.isInteractionLocked();
36
+ },
37
+ setInteractionLock(value) {
38
+ store.setInteractionLock(value);
39
+ // If drawing is in progress at the moment the interaction lock is applied, discard the
40
+ // tentative geometry and go back to select. Switching to select through the modeManager
41
+ // makes the onStop of the drawing handler clean up the tentative geometry. The setMode
42
+ // gate lets a transition to select through, so this holds naturally.
43
+ if (value && store.getMode() !== 'select') {
44
+ modeManager.setMode('select');
45
+ }
46
+ },
47
+ getRenderSlots() {
48
+ // For a CustomLayer without frames (an external implementation), return the single
49
+ // conventional layer as one interval
50
+ if ('getRenderSlots' in customLayer && typeof customLayer.getRenderSlots === 'function') {
51
+ return customLayer.getRenderSlots();
52
+ }
53
+ return [{ layerId: customLayer.id, from: 0, to: store.getLayerOrder().length }];
54
+ },
55
+ getRenderScale() {
56
+ return pixelRatioSource.getRenderScale();
57
+ },
58
+ setRenderScale(scale) {
59
+ // The retained batches that have already been baked are rebuilt by looking at the
60
+ // scale, so prompt a redraw only when it has changed (on the next frame the CustomLayer
61
+ // and the datasets each start rebuilding).
62
+ if (!pixelRatioSource.setRenderScale(scale))
63
+ return;
64
+ map.triggerRepaint();
65
+ },
66
+ getPixelRatio() {
67
+ return pixelRatioSource.resolve();
68
+ },
69
+ getTerrainDiagnostics() {
70
+ // The terrain state is held by the CustomLayer of this instance (an external
71
+ // implementation without one reports the inactive state)
72
+ const terrain = 'getTerrainContext' in customLayer && typeof customLayer.getTerrainContext === 'function'
73
+ ? customLayer.getTerrainContext()
74
+ : null;
75
+ return Object.freeze({
76
+ render: toRenderDiagnostics(terrain ? getTerrainRenderState(terrain) : INACTIVE_TERRAIN_STATE),
77
+ drape: Object.freeze({
78
+ ...(terrain ? getTerrainDrapeDebug(terrain) : INITIAL_DRAPE_DEBUG),
79
+ }),
80
+ });
81
+ },
82
+ hasPendingWork() {
83
+ // The engine of this instance knows its deferred work (an external implementation of the
84
+ // layer reports none)
85
+ return ('hasPendingWork' in customLayer &&
86
+ typeof customLayer.hasPendingWork === 'function' &&
87
+ customLayer.hasPendingWork());
88
+ },
89
+ isLocallyHidden(id) {
90
+ return store.isLocallyHidden(id);
91
+ },
92
+ getLocallyHidden() {
93
+ return store.getLocallyHidden();
94
+ },
95
+ setLocallyHidden(id, hidden) {
96
+ store.setLocallyHidden(id, hidden);
97
+ },
98
+ destroy() {
99
+ inputRouter.stop();
100
+ inputNormalizer.detach();
101
+ eventBridge.stop();
102
+ modeManager.stop();
103
+ renderCoordinator.stop();
104
+ autoNameGenerator.dispose();
105
+ // Unregister the plugins so that each one runs its onUninstall (timers, subscriptions and
106
+ // anything else it holds outside the draw instance). The extension point registries
107
+ // themselves belong to this instance and are cleared with it, so no provider of the
108
+ // destroyed instance can reach a live one.
109
+ for (const name of pluginManager.getPluginNames()) {
110
+ pluginManager.unregister(name);
111
+ }
112
+ // There can be several frames, so remove all of them
113
+ const slotLayers = 'getSlotLayers' in customLayer && typeof customLayer.getSlotLayers === 'function'
114
+ ? customLayer.getSlotLayers()
115
+ : [customLayer];
116
+ for (const slotLayer of slotLayers) {
117
+ if (map.getLayer(slotLayer.id)) {
118
+ map.removeLayer(slotLayer.id);
119
+ }
120
+ }
121
+ },
122
+ };
123
+ }
124
+ /** The plain numbers of a terrain state, without the GL objects and the internal plans */
125
+ function toRenderDiagnostics(state) {
126
+ return Object.freeze({
127
+ active: state.active,
128
+ atlasRect: [...state.atlasRect],
129
+ atlasSize: [...state.atlasSize],
130
+ elevationScale: state.elevationScale,
131
+ liftMeters: state.liftMeters,
132
+ stepMeters: state.stepMeters,
133
+ stepGrid: state.stepGrid,
134
+ generation: state.generation,
135
+ });
136
+ }
@@ -0,0 +1,12 @@
1
+ import type { AutoNameGenerator } from '../shared/utils/name-generator.js';
2
+ import type { Store } from '../store/store.js';
3
+ import type { MapLibreGLDraw } from './api.js';
4
+ export type LayerApi = Pick<MapLibreGLDraw, 'getAllLayers' | 'getLayer' | 'addLayer' | 'updateLayer' | 'deleteLayer' | 'getLayerOrder' | 'setLayerOrder' | 'reorderInLayer' | 'moveToLayer' | 'getActiveLayer' | 'setActiveLayer'>;
5
+ export interface LayerApiDeps {
6
+ store: Store;
7
+ generateFeatureId: () => string;
8
+ autoNameGenerator: AutoNameGenerator;
9
+ getActiveLayerId: () => string;
10
+ setActiveLayerId: (id: string) => void;
11
+ }
12
+ export declare function createLayerApi(deps: LayerApiDeps): LayerApi;
@@ -0,0 +1,62 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Layer API
5
+ *
6
+ * Provides the Layer CRUD and Active Layer operations of MapLibreGLDraw.
7
+ */
8
+ import { moveToLayer as moveToLayerImpl } from '../operations/layer-operations.js';
9
+ import { onlyLockOrVisibility } from './feature-api.js';
10
+ export function createLayerApi(deps) {
11
+ const { store, generateFeatureId, autoNameGenerator, getActiveLayerId, setActiveLayerId } = deps;
12
+ return {
13
+ getAllLayers() {
14
+ return store.getAllLayers();
15
+ },
16
+ getLayer(id) {
17
+ return store.getLayer(id);
18
+ },
19
+ addLayer(name) {
20
+ const id = generateFeatureId();
21
+ const layerName = name || autoNameGenerator.generateLayerName();
22
+ const layer = {
23
+ id,
24
+ name: layerName,
25
+ visible: true,
26
+ locked: false,
27
+ opacity: 1,
28
+ order: [],
29
+ };
30
+ // A write refused because the Store is read-only returns null
31
+ return store.createLayer(layer) ? id : null;
32
+ },
33
+ updateLayer(id, updates) {
34
+ // While locked, reject any change other than locked/visible (full protection)
35
+ const layer = store.getLayer(id);
36
+ if (layer?.locked && !onlyLockOrVisibility(updates))
37
+ return false;
38
+ return store.updateLayer(id, updates);
39
+ },
40
+ deleteLayer(id) {
41
+ return store.deleteLayer(id);
42
+ },
43
+ getLayerOrder() {
44
+ return store.getLayerOrder();
45
+ },
46
+ setLayerOrder(order) {
47
+ return store.setLayerOrder(order);
48
+ },
49
+ reorderInLayer(itemId, layerId, newIndex) {
50
+ return store.reorderInLayer(itemId, layerId, newIndex);
51
+ },
52
+ moveToLayer(itemId, targetLayerId) {
53
+ moveToLayerImpl(store, itemId, targetLayerId);
54
+ },
55
+ getActiveLayer() {
56
+ return getActiveLayerId();
57
+ },
58
+ setActiveLayer(layerId) {
59
+ setActiveLayerId(layerId);
60
+ },
61
+ };
62
+ }
@@ -0,0 +1,7 @@
1
+ import type { Store } from '../store/store.js';
2
+ import type { MapLibreGLDraw } from './api.js';
3
+ export type SelectionApi = Pick<MapLibreGLDraw, 'getSelection' | 'select' | 'deselect' | 'getSelectedFeatures' | 'getSelectedIds' | 'deleteSelection' | 'selectVertices' | 'deselectVertices' | 'getSelectedVertices' | 'deleteVertices'>;
4
+ export interface SelectionApiDeps {
5
+ store: Store;
6
+ }
7
+ export declare function createSelectionApi(deps: SelectionApiDeps): SelectionApi;