@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,86 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { subscribeMutationHooks } from '../plugins/mutation-hooks.js';
4
+ import { createDisplayApi } from './display-api.js';
5
+ import { createEventApi } from './event-api.js';
6
+ import { createExtensionApi } from './extension-api.js';
7
+ import { createFeatureApi } from './feature-api.js';
8
+ import { createGeometryApi } from './geometry-operations.js';
9
+ import { createGroupApi } from './group-api.js';
10
+ import { createInputApi } from './input-api.js';
11
+ import { createInstanceApi } from './instance-api.js';
12
+ import { createLayerApi } from './layer-api.js';
13
+ import { createSelectionApi } from './selection-api.js';
14
+ import { createSnappingApi } from './snapping-api.js';
15
+ import { createTopologyApi } from './topology-api.js';
16
+ import { createTracingApi } from './tracing-api.js';
17
+ /**
18
+ * The orchestrator that creates the public API. It composes the sub-apis of each functional
19
+ * domain by spreading.
20
+ *
21
+ * @internal
22
+ */
23
+ export function createDrawAPI(context, input, eventBridge, customLayer, importExportAPI, lifecycle, extension) {
24
+ const { map, store, eventEmitter, generateFeatureId, autoNameGenerator, hitTestService, boxSelectionRegistry, getActiveLayerId, setActiveLayerId, snapService, topology, trace, pixelRatioSource, } = context;
25
+ const { spatialIndex, pluginManager, datasets, featureCompanions } = extension;
26
+ const { inputNormalizer, inputRouter } = input;
27
+ const { modeManager, renderCoordinator } = lifecycle;
28
+ // The after-mutation hooks of the plugins are fired from the Store notification, so they
29
+ // see every write whatever made it
30
+ const stopMutationHooks = subscribeMutationHooks(store, pluginManager);
31
+ const instanceApi = createInstanceApi({
32
+ map,
33
+ store,
34
+ modeManager,
35
+ eventBridge,
36
+ renderCoordinator,
37
+ inputRouter,
38
+ inputNormalizer,
39
+ customLayer,
40
+ autoNameGenerator,
41
+ pixelRatioSource,
42
+ pluginManager,
43
+ });
44
+ return {
45
+ ...instanceApi,
46
+ destroy() {
47
+ instanceApi.destroy();
48
+ // After the plugins are uninstalled (their onUninstall can still read the index)
49
+ stopMutationHooks();
50
+ spatialIndex.destroy();
51
+ },
52
+ ...createFeatureApi({ store, generateFeatureId, getActiveLayerId }),
53
+ ...createLayerApi({
54
+ store,
55
+ generateFeatureId,
56
+ autoNameGenerator,
57
+ getActiveLayerId,
58
+ setActiveLayerId,
59
+ }),
60
+ ...createGroupApi({ store, generateFeatureId, autoNameGenerator }),
61
+ ...createSelectionApi({ store }),
62
+ ...createGeometryApi({ store, eventEmitter, generateFeatureId }),
63
+ ...createDisplayApi({ datasets }),
64
+ ...createSnappingApi({ snapService, map }),
65
+ ...createTracingApi({ trace }),
66
+ ...createTopologyApi({ topology }),
67
+ ...createInputApi({ map, inputRouter }),
68
+ ...createEventApi({ eventEmitter }),
69
+ ...createExtensionApi({
70
+ pluginManager,
71
+ modeManager,
72
+ spatialIndex,
73
+ hitTestService,
74
+ boxSelectionRegistry,
75
+ customLayer: customLayer,
76
+ featureCompanions,
77
+ selectionScope: context.selectionScope,
78
+ snapTargets: context.snapTargets,
79
+ }),
80
+ // The Import/Export API spreads importExportAPI directly
81
+ // (load / export / getSuggestedFileName)
82
+ load: (source, options) => importExportAPI.load(source, options),
83
+ export: (format, options) => importExportAPI.export(format, options),
84
+ getSuggestedFileName: () => importExportAPI.getSuggestedFileName(),
85
+ };
86
+ }
@@ -0,0 +1,173 @@
1
+ import { type Messages } from '../messages.js';
2
+ import type { FeatureStyleConfig } from '../shared/config/feature-style.js';
3
+ import type { RenderingConfig } from '../shared/config/rendering.js';
4
+ import type { SelectionUIConfig } from '../shared/config/selection.js';
5
+ import type { TopologyConfig } from '../shared/config/topology.js';
6
+ import type { TraceOptions } from '../shared/config/trace.js';
7
+ import type { AutoNameConfig } from '../shared/utils/name-generator.js';
8
+ import type { SnapOptions } from '../snapping/types.js';
9
+ import type { DocumentStore, Store } from '../store/store.js';
10
+ import type { Mode } from '../store/types.js';
11
+ /**
12
+ * The options of {@link createMapLibreGLDraw}. Every option can be omitted.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const draw = createMapLibreGLDraw(map, {
17
+ * defaultMode: 'select',
18
+ * clickTolerance: 8,
19
+ * snap: { tolerancePx: 12, kinds: { guide: false } },
20
+ * trace: { enabled: false },
21
+ * topology: { sharedVertexDrag: true },
22
+ * autoName: false,
23
+ * });
24
+ * ```
25
+ */
26
+ export interface Options {
27
+ /** The mode the instance starts in (default `'select'`) */
28
+ defaultMode?: Mode;
29
+ /**
30
+ * How far from a feature a click still hits it, in CSS pixels (default 6)
31
+ */
32
+ clickTolerance?: number;
33
+ /**
34
+ * How far the mouse moves with the button down before a press becomes a drag, in CSS
35
+ * pixels (default 3)
36
+ */
37
+ dragThreshold?: number;
38
+ /**
39
+ * The default drawing style of the features, per geometry (points, lines, polygons and so
40
+ * on); the given parts replace the built-in defaults, and a feature's own `style` wins over
41
+ * both
42
+ */
43
+ style?: Partial<FeatureStyleConfig>;
44
+ /**
45
+ * The look of the selection UI: the bounding box, the resize, rotate, vertex and midpoint
46
+ * handles, and the radius handle, center marker and radius line of a circle (see
47
+ * {@link SelectionUIConfig} for the defaults)
48
+ */
49
+ selectionStyle?: Partial<SelectionUIConfig>;
50
+ /**
51
+ * The look of the box selection rectangle and the switches of the rendering paths (see
52
+ * {@link RenderingConfig} for the defaults)
53
+ */
54
+ renderingStyle?: Partial<RenderingConfig>;
55
+ /**
56
+ * The automatic names of new features, layers and groups, such as `Polygon 1` and
57
+ * `Layer 2` (default: enabled)
58
+ *
59
+ * `false` turns it off, and an {@link AutoNameConfig} changes the words or the format. A
60
+ * number used once is not reused. The words are English by default; a host that shows
61
+ * another language translates them here (`typeNames`), not through {@link Options.messages}.
62
+ */
63
+ autoName?: AutoNameConfig | boolean;
64
+ /**
65
+ * Whether the line widths of the features drawn in a drawing mode follow the zoom (default
66
+ * true)
67
+ *
68
+ * By default a drawing mode records the zoom a feature is drawn at in
69
+ * `properties.createdZoom`, and the widths of its lines and outlines are those of that zoom:
70
+ * they double with each zoom level in and halve with each level out, like lines drawn on
71
+ * paper. An application that wants the widths to stay the same on the screen at every zoom
72
+ * sets `false`; a drawn feature then gets no created zoom, like a feature added through the
73
+ * API. It does not change features already drawn: the widths follow
74
+ * `properties.createdZoom` wherever it is set, so a feature added through the API can set it
75
+ * too. An Image always scales with the map.
76
+ */
77
+ scaleWithZoom?: boolean;
78
+ /**
79
+ * The snapping configuration
80
+ *
81
+ * When omitted, it is enabled with a tolerance of 10 CSS pixels, it is released while Alt
82
+ * is held, every kind of target (vertex, edge, intersection, guide) is on, and the
83
+ * datasets are targets. The candidates come from the vertices and edges of
84
+ * the Store; more are added with `draw.snapping.register()`. Change it at runtime with
85
+ * {@link MapLibreGLDraw.snapping}.
86
+ */
87
+ snap?: SnapOptions;
88
+ /**
89
+ * The topology configuration (when omitted, everything is disabled)
90
+ *
91
+ * The settings that keep editing from breaking boundaries shared by adjacent features.
92
+ * With `sharedVertexDrag: true`, dragging a vertex in select mode also moves, by the same
93
+ * amount, every vertex of other visible, unlocked features at exactly the same coordinates,
94
+ * and the drag commits as one change. The modifier of `snap.disableKey` held at the start of
95
+ * a drag releases it for that drag. Change it at runtime with
96
+ * {@link MapLibreGLDraw.topology}.
97
+ */
98
+ topology?: Partial<TopologyConfig>;
99
+ /**
100
+ * The trace configuration (when omitted, it is enabled)
101
+ *
102
+ * While drawing (draw_line / draw_polygon), when the previous click and this click both
103
+ * snapped to the boundary of the same feature, the vertex sequence between them is taken in
104
+ * automatically. With `enabled: false` a click adds only the point clicked. Change it at
105
+ * runtime with {@link MapLibreGLDraw.tracing}.
106
+ */
107
+ trace?: TraceOptions;
108
+ /**
109
+ * The document store (when omitted, a new {@link MemoryStore} is used)
110
+ *
111
+ * Give a {@link DocumentStore} of your own to keep the document elsewhere; the library
112
+ * keeps the local state (selection, mode, read-only and so on) around
113
+ * it. A {@link Store} such as a MemoryStore is used as it is.
114
+ */
115
+ store?: DocumentStore | Store;
116
+ /**
117
+ * Whether to create a default layer on initialization (default: true)
118
+ *
119
+ * When it is false, creating the layers becomes the responsibility of the application.
120
+ * Use it when restoring the layer structure from an external data source, or
121
+ * when managing the layers on your own. Until a layer exists, the drawing modes cannot be
122
+ * entered.
123
+ */
124
+ initDefaultLayer?: boolean;
125
+ /**
126
+ * The predicate that identifies the "external entries" of the stacking order (when omitted,
127
+ * it is always false)
128
+ *
129
+ * The entries of the layer order for which it returns true are separators, and this library
130
+ * does not draw them. Each interval between separators is drawn by its own MapLibre custom
131
+ * layer (a frame), so the host can place its native layers (vector tiles, raster) between
132
+ * the frames. {@link MapLibreGLDraw.getRenderSlots} lists the frames, and the
133
+ * `draw.renderslots.change` event announces their changes.
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * const draw = createMapLibreGLDraw(map, {
138
+ * isExternalEntry: (id) => id.startsWith('native:'),
139
+ * });
140
+ * draw.on('draw.renderslots.change', ({ slots }) => placeNativeLayers(slots));
141
+ * ```
142
+ */
143
+ isExternalEntry?: (entryId: string) => boolean;
144
+ /**
145
+ * The render scale (when omitted, the map's `getPixelRatio()` is read each time)
146
+ *
147
+ * Line widths, point sizes and outlines are drawn by converting CSS pixels into physical
148
+ * pixels, so the scale of the backing store being drawn into is needed. By default it is
149
+ * the ratio of the map, which follows the `pixelRatio` the maplibre Map was created with
150
+ * and the device. Pass a value only to draw at another scale than the map's.
151
+ */
152
+ pixelRatio?: number;
153
+ /**
154
+ * The strings the library returns as values (when omitted, {@link MESSAGES_EN})
155
+ *
156
+ * The given entries replace the English defaults for this instance only; the entries
157
+ * left out keep the default. Legend labels and the descriptions of the snapping guides
158
+ * come from this table. The library ships English only and does no locale detection.
159
+ * The words of generated names ("Layer 1") are not here: they come from
160
+ * {@link Options.autoName}.
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * const draw = createMapLibreGLDraw(map, {
165
+ * messages: {
166
+ * legendOther: 'Autres',
167
+ * legendBelow: (upper) => `Moins de ${upper}`,
168
+ * },
169
+ * });
170
+ * ```
171
+ */
172
+ messages?: Partial<Messages>;
173
+ }
@@ -0,0 +1,193 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { createCoreBoxSelectionStrategies } from '../dispatcher/hit-test/box-strategies.js';
4
+ import { BoxSelectionStrategyRegistry } from '../dispatcher/hit-test/box-strategy.js';
5
+ import { createGlobeShapeResolver } from '../dispatcher/hit-test/globe-shape.js';
6
+ import { HitTestServiceImpl } from '../dispatcher/hit-test/service.js';
7
+ import { DEFAULT_HIT_TEST_OPTIONS } from '../dispatcher/hit-test/strategies/base.js';
8
+ import { resolveMessages } from '../messages.js';
9
+ import { ModeManagerImpl } from '../modes/manager.js';
10
+ import { DEFAULT_FEATURE_STYLE_CONFIG, mergeFeatureStyleConfig, } from '../shared/config/feature-style.js';
11
+ import { DEFAULT_RENDERING_CONFIG, mergeRenderingConfig } from '../shared/config/rendering.js';
12
+ import { DEFAULT_SELECTION_CONFIG, mergeSelectionUIConfig } from '../shared/config/selection.js';
13
+ import { DEFAULT_TOPOLOGY_CONFIG, mergeTopologyConfig } from '../shared/config/topology.js';
14
+ import { DEFAULT_TRACE_CONFIG, mergeTraceConfig } from '../shared/config/trace.js';
15
+ import { getAnchorProjector } from '../shared/math/index.js';
16
+ import { EventEmitterImpl } from '../shared/utils/event-emitter.js';
17
+ import { createId } from '../shared/utils/id.js';
18
+ import { AutoNameGenerator } from '../shared/utils/name-generator.js';
19
+ import { createPixelRatioSource } from '../shared/utils/pixel-ratio.js';
20
+ import { createSnapTargetsRegistry } from '../snapping/custom-targets.js';
21
+ import { createSnapService } from '../snapping/service.js';
22
+ import { DEFAULT_SNAP_OPTIONS, resolveGuideStepDegrees, resolveSnapKinds, } from '../snapping/types.js';
23
+ import { toStore } from '../store/draw-store.js';
24
+ import { MemoryStore } from '../store/memory.js';
25
+ import { StoreSpatialIndex } from '../store/spatial/store-spatial-index.js';
26
+ import { resolveWritableLayerId } from '../store/writable-layer.js';
27
+ import { createSelectionScope } from '../view/ui/selection-scope.js';
28
+ /**
29
+ * The default options
30
+ *
31
+ * @internal
32
+ */
33
+ export const DEFAULT_OPTIONS = {
34
+ defaultMode: 'select',
35
+ // One default for the hit test and the topmost hit (see DEFAULT_HIT_TEST_OPTIONS)
36
+ clickTolerance: DEFAULT_HIT_TEST_OPTIONS.clickTolerance,
37
+ dragThreshold: 3,
38
+ scaleWithZoom: true,
39
+ };
40
+ /**
41
+ * Creates a Context
42
+ *
43
+ * @internal
44
+ */
45
+ export function createContext(map, options = {}) {
46
+ const opts = {
47
+ ...DEFAULT_OPTIONS,
48
+ ...options,
49
+ defaultMode: options.defaultMode ?? DEFAULT_OPTIONS.defaultMode,
50
+ clickTolerance: options.clickTolerance ?? DEFAULT_OPTIONS.clickTolerance,
51
+ dragThreshold: options.dragThreshold ?? DEFAULT_OPTIONS.dragThreshold,
52
+ scaleWithZoom: options.scaleWithZoom ?? DEFAULT_OPTIONS.scaleWithZoom,
53
+ };
54
+ // Merge the style configuration
55
+ const featureStyle = options.style
56
+ ? mergeFeatureStyleConfig(DEFAULT_FEATURE_STYLE_CONFIG, options.style)
57
+ : DEFAULT_FEATURE_STYLE_CONFIG;
58
+ // Merge the selection UI style configuration
59
+ const selectionStyle = options.selectionStyle
60
+ ? mergeSelectionUIConfig(DEFAULT_SELECTION_CONFIG, options.selectionStyle)
61
+ : DEFAULT_SELECTION_CONFIG;
62
+ // Merge the rendering configuration
63
+ const renderingConfig = options.renderingStyle
64
+ ? mergeRenderingConfig(DEFAULT_RENDERING_CONFIG, options.renderingStyle)
65
+ : DEFAULT_RENDERING_CONFIG;
66
+ // Merge the topology configuration (everything is disabled by default). It is the actual
67
+ // object draw.topology rewrites, so always copy it so that the default object is not shared
68
+ const topology = mergeTopologyConfig(DEFAULT_TOPOLOGY_CONFIG, options.topology ?? {});
69
+ // Merge the trace configuration (it is enabled by default). It is the actual object
70
+ // draw.tracing rewrites, so always copy it so that the default object is not shared
71
+ const trace = mergeTraceConfig(DEFAULT_TRACE_CONFIG, options.trace ?? {});
72
+ // The internal components
73
+ const store = options.store ? toStore(options.store) : new MemoryStore();
74
+ // Derived from the Store: it subscribes before any other component, so a listener that
75
+ // queries it during a notification already sees the change
76
+ const spatialIndex = new StoreSpatialIndex(store);
77
+ // Hit testing for symbols (points) is done in screen space while terrain is enabled.
78
+ // What is injected is the anchor projection of this map, identical to the one the rendering
79
+ // uses. When terrain is disabled, project returns null and the conventional longitude and
80
+ // latitude path keeps working as before.
81
+ const hitTestService = new HitTestServiceImpl(store, spatialIndex, {
82
+ clickTolerance: opts.clickTolerance,
83
+ anchorScreen: {
84
+ project: (coord) => getAnchorProjector(map)?.project(coord[0], coord[1]) ?? null,
85
+ },
86
+ // On the globe the edges are tested along the path they are drawn along
87
+ drawnShape: createGlobeShapeResolver(map),
88
+ });
89
+ // Create the BoxSelectionStrategyRegistry and register the core strategies
90
+ const boxSelectionRegistry = new BoxSelectionStrategyRegistry();
91
+ for (const strategy of createCoreBoxSelectionStrategies()) {
92
+ boxSelectionRegistry.register(strategy);
93
+ }
94
+ const eventEmitter = new EventEmitterImpl();
95
+ // A mode that writes features is entered only while a layer can be written.
96
+ // getWritableLayerId is defined below; the closure reads it only when a mode is set
97
+ const modeManager = new ModeManagerImpl(store, {
98
+ canEnter: (handler) => !handler.writesFeatures || getWritableLayerId() !== '',
99
+ });
100
+ // Create the snapping service (enabled by default, tolerance 10px, temporarily disabled
101
+ // with Alt). The candidates come only from the built-in providers (the vertices and edges of
102
+ // the Store); external providers are added with draw.snapping.register().
103
+ const snapOptions = {
104
+ ...DEFAULT_SNAP_OPTIONS,
105
+ ...options.snap,
106
+ // kinds is nested, so copy it (so that the default object is not shared)
107
+ kinds: resolveSnapKinds(options.snap?.kinds),
108
+ guideStepDegrees: resolveGuideStepDegrees(options.snap?.guideStepDegrees),
109
+ };
110
+ // The registries of the extension points belong to this instance (nothing is module-level)
111
+ const selectionScope = createSelectionScope();
112
+ const snapTargets = createSnapTargetsRegistry();
113
+ // The messages table belongs to this instance as well
114
+ const messages = resolveMessages(options.messages);
115
+ const snapService = createSnapService({
116
+ store,
117
+ spatialIndex,
118
+ snapTargets,
119
+ eventEmitter,
120
+ options: snapOptions,
121
+ guide: { messages },
122
+ });
123
+ // Create the AutoNameGenerator
124
+ const autoNameGenerator = new AutoNameGenerator(store, options.autoName);
125
+ // Create the default layer (only when initDefaultLayer !== false)
126
+ let activeLayerId;
127
+ if (options.initDefaultLayer !== false) {
128
+ const defaultLayerName = autoNameGenerator.generateLayerName();
129
+ const defaultLayer = {
130
+ id: 'default-layer',
131
+ name: defaultLayerName,
132
+ visible: true,
133
+ locked: false,
134
+ opacity: 1.0,
135
+ order: [],
136
+ };
137
+ store.createLayer(defaultLayer);
138
+ activeLayerId = 'default-layer';
139
+ }
140
+ else {
141
+ // Creating the layers is the responsibility of the application
142
+ // The initial value is an empty string (it is set later)
143
+ activeLayerId = '';
144
+ }
145
+ // Feature ID generation (a ULID is used to guarantee uniqueness)
146
+ const generateFeatureId = () => createId();
147
+ const setActiveLayerId = (id) => {
148
+ if (store.getLayer(id)) {
149
+ activeLayerId = id;
150
+ }
151
+ };
152
+ const getActiveLayerId = () => {
153
+ // If the active layer was deleted, make the first layer active
154
+ if (!store.getLayer(activeLayerId)) {
155
+ const layers = store.getAllLayers();
156
+ if (layers.length > 0) {
157
+ activeLayerId = layers[0].id;
158
+ }
159
+ }
160
+ return activeLayerId;
161
+ };
162
+ const getWritableLayerId = () => resolveWritableLayerId(store, getActiveLayerId());
163
+ return {
164
+ map,
165
+ store,
166
+ spatialIndex,
167
+ hitTestService,
168
+ eventEmitter,
169
+ modeManager,
170
+ featureStyle,
171
+ selectionStyle,
172
+ renderingConfig,
173
+ topology,
174
+ trace,
175
+ options: opts,
176
+ messages,
177
+ pixelRatio: options.pixelRatio,
178
+ isExternalEntry: options.isExternalEntry,
179
+ // The ratio of the map is the default: it follows a pixelRatio the map was created with
180
+ pixelRatioSource: createPixelRatioSource(options.pixelRatio, () => map.getPixelRatio()),
181
+ snapOptions,
182
+ snapService,
183
+ autoNameGenerator,
184
+ boxSelectionRegistry,
185
+ selectionScope,
186
+ snapTargets,
187
+ generateFeatureId,
188
+ getCurrentLayerId: getActiveLayerId,
189
+ setActiveLayerId,
190
+ getActiveLayerId,
191
+ getWritableLayerId,
192
+ };
193
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /** @internal */
4
+ export function createDisplayApi(deps) {
5
+ const { datasets } = deps;
6
+ return {
7
+ addDataset(options) {
8
+ return datasets.add(options);
9
+ },
10
+ getDataset(id) {
11
+ return datasets.get(id);
12
+ },
13
+ getDatasets() {
14
+ return datasets.list();
15
+ },
16
+ moveDataset(id, placement) {
17
+ return datasets.move(id, placement);
18
+ },
19
+ removeDataset(id) {
20
+ return datasets.remove(id);
21
+ },
22
+ };
23
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Event API
3
+ *
4
+ * Provides on / off for MapLibreGLDraw. Maps the `draw.*` prefix to the internal
5
+ * EventEmitter event names.
6
+ */
7
+ import type { EventEmitter } from '../shared/utils/event-emitter.js';
8
+ import type { MapLibreGLDraw } from './api.js';
9
+ export type EventApi = Pick<MapLibreGLDraw, 'on' | 'off'>;
10
+ export interface EventApiDeps {
11
+ eventEmitter: EventEmitter;
12
+ }
13
+ export declare function createEventApi(deps: EventApiDeps): EventApi;
@@ -0,0 +1,17 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export function createEventApi(deps) {
4
+ const { eventEmitter } = deps;
5
+ return {
6
+ on(event, handler) {
7
+ const internalEvent = event.replace('draw.', '');
8
+ const listener = handler;
9
+ eventEmitter.on(internalEvent, listener);
10
+ return () => eventEmitter.off(internalEvent, listener);
11
+ },
12
+ off(event, handler) {
13
+ const internalEvent = event.replace('draw.', '');
14
+ eventEmitter.off(internalEvent, handler);
15
+ },
16
+ };
17
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Extension API
3
+ *
4
+ * Provides the extension point API of MapLibreGLDraw.
5
+ * - addPlugin / getPluginApi: plugin registration / lookup
6
+ * - registerMode: registers a custom mode
7
+ * - registerFeatureHandler: registers a custom feature handler (registers the renderer /
8
+ * hitTest / boxSelection / boundingBox / resize calculator / snapping candidates at once)
9
+ * - registerAuxiliaryHandleProvider: registers a provider of auxiliary handles (handles of
10
+ * a plugin's own that are neither vertices nor resize handles)
11
+ * - registerFeatureCompanionProvider: registers a provider of companion rendering and
12
+ * companion hits (things drawn at the z just below the feature and grabbable in the same
13
+ * z order)
14
+ * - addOverlayRenderer: adds a custom overlay renderer
15
+ *
16
+ * Every registration returns the function that cancels it.
17
+ */
18
+ import type { BoxSelectionStrategyRegistry } from '../dispatcher/hit-test/box-strategy.js';
19
+ import type { HitTestService } from '../dispatcher/hit-test/service.js';
20
+ import type { ModeManager } from '../modes/manager.js';
21
+ import type { PluginManager } from '../plugins/plugin-manager.js';
22
+ import type { SnapTargetsRegistry } from '../snapping/custom-targets.js';
23
+ import type { SpatialIndex } from '../store/spatial/spatial-index.js';
24
+ import type { FeatureCompanionRegistry } from '../view/feature-companion.js';
25
+ import type { CustomLayerInterface } from '../view/layer/index.js';
26
+ import type { SelectionScope } from '../view/ui/selection-scope.js';
27
+ import type { MapLibreGLDraw } from './api.js';
28
+ export type ExtensionApi = Pick<MapLibreGLDraw, 'addPlugin' | 'getPluginApi' | 'registerMode' | 'registerFeatureHandler' | 'registerAuxiliaryHandleProvider' | 'registerFeatureCompanionProvider' | 'addOverlayRenderer'>;
29
+ export interface ExtensionApiDeps {
30
+ pluginManager: PluginManager;
31
+ modeManager: ModeManager;
32
+ spatialIndex: SpatialIndex;
33
+ hitTestService: HitTestService;
34
+ boxSelectionRegistry: BoxSelectionStrategyRegistry;
35
+ customLayer: CustomLayerInterface;
36
+ /** The providers of companion rendering and companion hits (those of this draw instance) */
37
+ featureCompanions: FeatureCompanionRegistry;
38
+ /**
39
+ * The selection scope of this draw instance (selection UI extension points and auxiliary
40
+ * handles). Registrations go here, never into a module-level registry
41
+ */
42
+ selectionScope: SelectionScope;
43
+ /** The snapping candidates of the custom feature types of this draw instance */
44
+ snapTargets: SnapTargetsRegistry;
45
+ }
46
+ export declare function createExtensionApi(deps: ExtensionApiDeps): ExtensionApi;
@@ -0,0 +1,85 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export function createExtensionApi(deps) {
4
+ const { pluginManager, modeManager, spatialIndex, hitTestService, boxSelectionRegistry, customLayer, featureCompanions, selectionScope, snapTargets, } = deps;
5
+ const selectionExtensions = selectionScope.extensions;
6
+ return {
7
+ addPlugin(plugin) {
8
+ return pluginManager.register(plugin);
9
+ },
10
+ getPluginApi(name) {
11
+ return pluginManager.getPluginApi(name);
12
+ },
13
+ registerMode(mode, factory) {
14
+ return modeManager.registerMode(mode, factory);
15
+ },
16
+ registerFeatureHandler(handler) {
17
+ const { type } = handler;
18
+ const cancels = [];
19
+ const add = (cancel) => {
20
+ if (cancel)
21
+ cancels.push(cancel);
22
+ };
23
+ // 1. The bounding box computation of the spatial index (it re-measures the features of
24
+ // the type the Store already holds)
25
+ if (handler.getBoundingBox) {
26
+ add(spatialIndex.setCustomBoundingBoxCalculator?.(type, handler.getBoundingBox));
27
+ }
28
+ // 2. The hit testing strategy
29
+ if (handler.hitTest)
30
+ add(hitTestService.registerStrategy?.(handler.hitTest));
31
+ // 3. The box selection strategy
32
+ if (handler.boxSelection)
33
+ add(boxSelectionRegistry.register(handler.boxSelection));
34
+ // 4. The renderer
35
+ if (handler.renderer)
36
+ add(customLayer.registerFeatureRenderer(type, handler.renderer));
37
+ // 5. The bounding box of the selection UI
38
+ if (handler.getSelectionBoundingBox) {
39
+ add(selectionExtensions.registerBoundingBox(type, handler.getSelectionBoundingBox));
40
+ }
41
+ // 6. The additional resize handles
42
+ if (handler.getAdditionalResizeHandles) {
43
+ add(selectionExtensions.registerAdditionalResizeHandles(type, handler.getAdditionalResizeHandles));
44
+ }
45
+ // 7. The custom resize computation
46
+ if (handler.computeCustomResize) {
47
+ add(selectionExtensions.registerCustomResize(type, handler.computeCustomResize));
48
+ }
49
+ // 8. The resize strategy. A type with the scale strategy also rotates through its
50
+ // rotation property (the rotate operation reads the same strategy)
51
+ if (handler.resizeStrategy) {
52
+ add(selectionExtensions.registerResizeStrategy(type, handler.resizeStrategy));
53
+ }
54
+ // 9. The snapping candidates
55
+ if (handler.getSnapTargets)
56
+ add(snapTargets.register(type, handler.getSnapTargets));
57
+ // 10. The additional reach for candidate narrowing of the hit test
58
+ if (handler.candidateReachPx !== undefined) {
59
+ add(hitTestService.registerCandidateReach?.(type, handler.candidateReachPx));
60
+ }
61
+ // 11. The extent of a point's selection box
62
+ if (handler.getPointFrameExtent) {
63
+ add(selectionExtensions.registerPointFrameExtent(type, handler.getPointFrameExtent));
64
+ }
65
+ // The cancellation undoes every registration above, in the reverse order
66
+ let cancelled = false;
67
+ return () => {
68
+ if (cancelled)
69
+ return;
70
+ cancelled = true;
71
+ for (let i = cancels.length - 1; i >= 0; i--)
72
+ cancels[i]();
73
+ };
74
+ },
75
+ registerAuxiliaryHandleProvider(provider) {
76
+ return selectionScope.auxiliaryHandles.register(provider);
77
+ },
78
+ registerFeatureCompanionProvider(provider) {
79
+ return featureCompanions.register(provider);
80
+ },
81
+ addOverlayRenderer(renderer) {
82
+ return customLayer.addOverlayRenderer(renderer);
83
+ },
84
+ };
85
+ }
@@ -0,0 +1,11 @@
1
+ import type { Store } from '../store/store.js';
2
+ import type { MapLibreGLDraw } from './api.js';
3
+ export type FeatureApi = Pick<MapLibreGLDraw, 'addFeature' | 'getFeature' | 'getAllFeatures' | 'getVisibleFeatures' | 'updateFeature' | 'deleteFeature' | 'deleteAllFeatures'>;
4
+ export interface FeatureApiDeps {
5
+ store: Store;
6
+ generateFeatureId: () => string;
7
+ getActiveLayerId: () => string;
8
+ }
9
+ export declare function createFeatureApi(deps: FeatureApiDeps): FeatureApi;
10
+ /** Whether an update changes nothing but `locked` / `visible` (what a lock still allows) */
11
+ export declare function onlyLockOrVisibility(updates: object): boolean;