@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,529 @@
1
+ /**
2
+ * Plugin Types
3
+ *
4
+ * Type definitions for the plugin system.
5
+ * core provides only simple types, and is extensible so that extension
6
+ * implementations can use their own source values.
7
+ */
8
+ import type { Feature as GeoJSONFeature } from 'geojson';
9
+ import type { MapLibreGLDraw } from '../api/api.js';
10
+ import type { DragNormalizedEvent, KeyNormalizedEvent, MouseNormalizedEvent } from '../dispatcher/types.js';
11
+ import type { ModeFactory } from '../modes/handler.js';
12
+ import type { ScreenPoint } from '../shared/math/index.js';
13
+ import type { EventEmitter, EventMap } from '../shared/utils/event-emitter.js';
14
+ import type { AutoNameGenerator } from '../shared/utils/name-generator.js';
15
+ import type { Store } from '../store/store.js';
16
+ import type { Feature, Group, Layer, Mode, Selection, SelectionType, UpdateSource } from '../store/types.js';
17
+ import type { BoundingBoxCoords } from '../view/ui/selection-ui/index.js';
18
+ /**
19
+ * What a mutation hook learns about the change that fired it: its source and its batch
20
+ */
21
+ export interface MutationContext {
22
+ /** Source of the mutation (the source of the Store notification) */
23
+ source: UpdateSource;
24
+ /**
25
+ * Batch ID shared by the hooks fired for one Store notification (one transaction), so
26
+ * that a compound mutation can be grouped
27
+ */
28
+ batchId?: string | undefined;
29
+ }
30
+ /**
31
+ * What a plugin gets in `onInstall`: the draw instance, the Store, and methods to read and
32
+ * change the document
33
+ *
34
+ * It is the only way a plugin reaches core. The host API of the instance is `draw`; the
35
+ * Store itself, for a plugin that works on the document directly, is `getStore()`.
36
+ *
37
+ * Each mutation method is one Store transaction, and its optional `source` becomes the source
38
+ * of the notification (`'local'` when omitted); inside `batch(fn)` the writes form one
39
+ * transaction with the source of the batch. The mutation methods ignore an id that no longer
40
+ * names anything (a plugin often reacts after a change, when a peer may already have deleted
41
+ * what it points at). While the Store is read-only they change nothing, like every other
42
+ * write.
43
+ *
44
+ * The spatial index that hit testing and box selection read is derived from the Store, so
45
+ * there is nothing to call after a mutation.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * const plugin: Plugin = {
50
+ * name: 'tagger',
51
+ * onInstall(ctx) {
52
+ * ctx.on('feature.create', ({ feature }) => {
53
+ * ctx.updateFeature(feature.id, { properties: { tag: 'new' } }, 'tagger');
54
+ * });
55
+ * },
56
+ * };
57
+ * ```
58
+ */
59
+ export interface PluginContext {
60
+ /**
61
+ * Reference to the MapLibreGLDraw instance itself.
62
+ *
63
+ * Used when calling extension point APIs such as registerFeatureHandler /
64
+ * registerMode / addOverlayRenderer, or public APIs that are not exposed on
65
+ * PluginContext. draw.getPluginApi<T>(name) can also be used to look up
66
+ * another plugin.
67
+ *
68
+ * Design guideline: dependencies between plugins should be passed through the
69
+ * constructor (explicit wiring). Lookup via draw.getPluginApi is a fallback.
70
+ */
71
+ draw: MapLibreGLDraw;
72
+ /**
73
+ * The Store of this draw instance, with its write methods
74
+ *
75
+ * For a plugin that works on the document directly. The writes go through the same read-only gate
76
+ * as every other write (they return false while read-only) and are notified to every
77
+ * subscriber. Anything else goes through the methods below or the public API of `draw`.
78
+ */
79
+ getStore(): Store;
80
+ /**
81
+ * The automatic naming of this draw instance (the `autoName` option)
82
+ *
83
+ * A plugin that creates a feature, a layer or a group without a name the user typed names it
84
+ * here, so every generated name takes its words from the host's one naming configuration.
85
+ */
86
+ readonly autoNameGenerator: AutoNameGenerator;
87
+ /** Returns the feature with this ID, or undefined */
88
+ getFeature(id: string): Feature | undefined;
89
+ /** Every feature, in no particular order */
90
+ getAllFeatures(): Feature[];
91
+ /** Returns the group with this ID, or undefined */
92
+ getGroup(id: string): Group | undefined;
93
+ /** Every group, in no particular order */
94
+ getAllGroups(): Group[];
95
+ /** Returns the layer with this ID, or undefined */
96
+ getLayer(id: string): Layer | undefined;
97
+ /** Every layer, in no particular order */
98
+ getAllLayers(): Layer[];
99
+ /** Returns the current selection */
100
+ getSelection(): Selection;
101
+ /** The IDs of the selected features (empty when groups or layers are selected) */
102
+ getSelectedIds(): string[];
103
+ /** Order of the items (features / groups) inside the active layer */
104
+ getLayerOrder(): readonly string[];
105
+ /**
106
+ * Stacking order (back to front)
107
+ *
108
+ * Returns the stacking order of the Store as is. This is a different thing
109
+ * from `getLayerOrder` (the order inside the active layer). The order may
110
+ * also contain IDs of datasets, so a caller that needs only
111
+ * layers should narrow it down to the ones `getLayer` can resolve.
112
+ */
113
+ getLayerIds(): readonly string[];
114
+ /** The current mode */
115
+ getMode(): Mode;
116
+ /**
117
+ * Adds GeoJSON features to the active layer
118
+ *
119
+ * A feature keeps its `id` when it has one, and gets a new ID otherwise. The geometry
120
+ * becomes the type and the coordinates, and the properties are kept as they are.
121
+ *
122
+ * @returns The IDs of the added features, in the order given; an empty list when the
123
+ * Store is read-only and nothing was added
124
+ */
125
+ addFeatures(features: GeoJSONFeature[], source?: UpdateSource): string[];
126
+ /**
127
+ * Updates a feature: the fields given replace the old ones, and `properties` is merged key
128
+ * by key into the old properties
129
+ */
130
+ updateFeature(id: string, feature: Partial<Feature>, source?: UpdateSource): void;
131
+ /** Deletes features, taking them out of the selection and of their group and layer */
132
+ deleteFeatures(ids: string[], source?: UpdateSource): void;
133
+ /**
134
+ * Creates a group (`visible` and `locked` default to true and false, and `featureIds` to
135
+ * an empty list)
136
+ */
137
+ createGroup(group: Group, source?: UpdateSource): void;
138
+ /** Updates a group */
139
+ updateGroup(id: string, group: Partial<Group>, source?: UpdateSource): void;
140
+ /** Deletes a group; its members stay, in the group's place in the layer */
141
+ deleteGroup(id: string, source?: UpdateSource): void;
142
+ /**
143
+ * Adds a feature to a group, at `index` of its members or at the end
144
+ *
145
+ * The feature leaves the group or the layer order it was in, and moves to the layer of the
146
+ * group.
147
+ */
148
+ addFeatureToGroup(groupId: string, featureId: string, index?: number, source?: UpdateSource): void;
149
+ /**
150
+ * Takes a feature out of a group; it is placed in the layer right in front of the group
151
+ */
152
+ removeFeatureFromGroup(groupId: string, featureId: string, source?: UpdateSource): void;
153
+ /** The ID of the group the feature belongs to, or undefined */
154
+ findGroupForFeature(featureId: string): string | undefined;
155
+ /**
156
+ * Creates a layer (`visible`, `locked` and `opacity` default to true, false and 1, and
157
+ * `order` to an empty list)
158
+ */
159
+ createLayer(layer: Layer, source?: UpdateSource): void;
160
+ /** Updates a layer */
161
+ updateLayer(id: string, updates: Partial<Layer>, source?: UpdateSource): void;
162
+ /** Deletes a layer together with its features and groups */
163
+ deleteLayer(id: string, source?: UpdateSource): void;
164
+ /** Appends an item to the order of a layer, when the layer does not list it yet */
165
+ addToLayer(layerId: string, featureId: string, source?: UpdateSource): void;
166
+ /** Removes an item from the order of a layer */
167
+ removeFromLayer(layerId: string, featureId: string, source?: UpdateSource): void;
168
+ /** The ID of the layer whose order lists this feature or group, or undefined */
169
+ findLayerForFeature(featureId: string): string | undefined;
170
+ /**
171
+ * Moves a feature or a group to another layer, at `targetIndex` of its order or at the
172
+ * front
173
+ *
174
+ * A feature leaves its group. The members of a moved group move with it.
175
+ */
176
+ moveItemToLayer(itemId: string, targetLayerId: string, targetIndex?: number, source?: UpdateSource): void;
177
+ /**
178
+ * Replaces the order of the items (features and groups) inside a layer, from the back
179
+ *
180
+ * Not the stacking order of the layers, which `draw.setLayerOrder` changes. A layer ID that
181
+ * names no layer does nothing.
182
+ *
183
+ * @param layerId the ID of the layer whose items are reordered
184
+ * @param order the IDs of the items of the layer, from the back
185
+ */
186
+ setLayerItemOrder(layerId: string, order: string[], source?: UpdateSource): void;
187
+ /** Replaces the selection and tells the current mode about it */
188
+ setSelection(type: SelectionType | null, ids: string[], source?: UpdateSource): void;
189
+ /**
190
+ * Emits an event of the draw instance to every subscriber, the host included (for a plugin
191
+ * that performs an operation core would announce)
192
+ */
193
+ emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
194
+ /**
195
+ * Subscribes to an event of the draw instance ({@link EventMap} names them)
196
+ *
197
+ * @returns the function that unsubscribes the handler (the same as calling `off`)
198
+ */
199
+ on<K extends keyof EventMap>(event: K, handler: (data: EventMap[K]) => void): () => void;
200
+ /** Unsubscribes a handler */
201
+ off<K extends keyof EventMap>(event: K, handler: (data: EventMap[K]) => void): void;
202
+ /**
203
+ * Group several mutations into a single transaction
204
+ */
205
+ batch<T>(fn: () => T): T;
206
+ /**
207
+ * Changes the mode
208
+ *
209
+ * @returns whether the mode is `mode` after the call; false when it was refused (a name
210
+ * with no registered mode, a mode other than select while the interaction lock is on, or
211
+ * a mode that writes features while no layer can be written), and nothing changed
212
+ */
213
+ setMode(mode: Mode): boolean;
214
+ /**
215
+ * Tells the current mode that the document changed under it (a change applied from outside),
216
+ * so that it can drop state that no longer holds
217
+ */
218
+ notifyStateReset(): void;
219
+ /**
220
+ * Undo the last vertex placed while drawing
221
+ * @returns true when it succeeded
222
+ */
223
+ undoVertex(): boolean;
224
+ /**
225
+ * Restore the undone vertex
226
+ * @returns true when it succeeded
227
+ */
228
+ redoVertex(): boolean;
229
+ /**
230
+ * Tell core that the extent of every feature of this type changed for a reason the
231
+ * Store does not see
232
+ *
233
+ * The spatial index follows the Store by itself: every create, update and delete, from
234
+ * whatever path, re-derives the entry of that feature. A custom feature type whose
235
+ * bounding box calculator (registerFeatureHandler) depends on something outside the
236
+ * Store, such as a font that arrives after the feature was drawn, calls this when that
237
+ * thing changes. The features of the type are then re-measured with the same calculator.
238
+ *
239
+ * @param type the feature type
240
+ */
241
+ invalidateFeatures(type: string): void;
242
+ /**
243
+ * Maps an anchor (longitude / latitude on the ground) to screen coordinates with the same
244
+ * elevation and matrix as the vertex shader
245
+ *
246
+ * @returns null when the terrain is disabled or no frame has been drawn yet (fall back to
247
+ * `map.project`)
248
+ */
249
+ projectAnchor(lng: number, lat: number): ScreenPoint | null;
250
+ /**
251
+ * The ground elevation of an anchor in meters (0 when the terrain is disabled)
252
+ *
253
+ * Inside the rendered terrain tiles it is the same value as `map.queryTerrainElevation`, so
254
+ * a symbol placed with it sits on the ground the map draws.
255
+ */
256
+ anchorElevationMeters(lng: number, lat: number): number;
257
+ /**
258
+ * The generation of the anchor elevations (it advances when the DEM coverage changes; a
259
+ * plugin that baked elevations rebuilds when it moves)
260
+ */
261
+ getAnchorElevationGeneration(): number;
262
+ /**
263
+ * The selection bounding box of a feature, including the custom feature types registered in
264
+ * this draw instance (null when it cannot be computed)
265
+ */
266
+ computeBoundingBox(feature: Feature): BoundingBoxCoords | null;
267
+ }
268
+ /**
269
+ * What the `drag:start` hook receives
270
+ */
271
+ export interface DragStartData {
272
+ /** The IDs of the features being dragged */
273
+ featureIds: string[];
274
+ }
275
+ /**
276
+ * What the `drag:end` hook receives
277
+ */
278
+ export interface DragEndData {
279
+ /** The IDs of the features that were dragged */
280
+ featureIds: string[];
281
+ }
282
+ /**
283
+ * The hooks a plugin gives in {@link Plugin.hooks}, to react to changes after they happen
284
+ *
285
+ * The mutation hooks (feature / group / layer / selection) are fired from the change
286
+ * notification of the Store, after the change, for every write whatever made it (the public
287
+ * API, a drawing mode, a drag, the Delete key, import, a plugin, a change applied from outside
288
+ * to a replaced Store). The hooks of one notification (one transaction) share the source and the
289
+ * batchId of their MutationContext. The intermediate updates of an edit in progress are not
290
+ * reported; the committing update that follows them is. A write the Store refuses (read-only)
291
+ * fires nothing.
292
+ *
293
+ * The drag hooks are fired by the drag of the select mode, around a move, resize, rotation,
294
+ * vertex or radius drag (not around the drag of an auxiliary handle).
295
+ *
296
+ * There are no before hooks: a hook cannot veto or rewrite a change.
297
+ *
298
+ * @example
299
+ * ```ts
300
+ * const hooks: Partial<Hooks> = {
301
+ * 'feature:afterUpdate': (updated, original, ctx) => {
302
+ * if (ctx.source === 'remote') return;
303
+ * console.log(`${updated.length} features changed in batch ${ctx.batchId}`);
304
+ * },
305
+ * };
306
+ * ```
307
+ */
308
+ export interface Hooks {
309
+ /** Features were created */
310
+ 'feature:afterCreate'?: (features: Feature[], ctx: MutationContext) => void;
311
+ /**
312
+ * Features were updated (`original[i]` is `updated[i]` before the change)
313
+ */
314
+ 'feature:afterUpdate'?: (updated: Feature[], original: Feature[], ctx: MutationContext) => void;
315
+ /** Features were deleted (as they were when they were deleted) */
316
+ 'feature:afterDelete'?: (features: Feature[], ctx: MutationContext) => void;
317
+ /** A group was created (fired once per group) */
318
+ 'group:afterCreate'?: (group: Group, ctx: MutationContext) => void;
319
+ /** A group was updated (a reorder with `reorderInGroup` does not fire it) */
320
+ 'group:afterUpdate'?: (updated: Group, original: Group, ctx: MutationContext) => void;
321
+ /** A group was deleted, explicitly or because its last member left */
322
+ 'group:afterDelete'?: (group: Group, ctx: MutationContext) => void;
323
+ /** A layer was created (fired once per layer) */
324
+ 'layer:afterCreate'?: (layer: Layer, ctx: MutationContext) => void;
325
+ /** A layer was updated (a reorder with `reorderInLayer` does not fire it) */
326
+ 'layer:afterUpdate'?: (updated: Layer, original: Layer, ctx: MutationContext) => void;
327
+ /** A layer was deleted */
328
+ 'layer:afterDelete'?: (layer: Layer, ctx: MutationContext) => void;
329
+ /** The selection changed (the IDs now selected and those selected before) */
330
+ 'selection:afterChange'?: (newIds: string[], previousIds: string[], ctx: MutationContext) => void;
331
+ /** A drag of the select mode started */
332
+ 'drag:start'?: (data: DragStartData, ctx: MutationContext) => void;
333
+ /** A drag of the select mode ended, committed or cancelled */
334
+ 'drag:end'?: (data: DragEndData, ctx: MutationContext) => void;
335
+ }
336
+ /**
337
+ * Mouse move event (hover)
338
+ */
339
+ export interface HoverEvent {
340
+ /** Geographic coordinates */
341
+ lngLat: {
342
+ lng: number;
343
+ lat: number;
344
+ };
345
+ }
346
+ /**
347
+ * Mouse leave event
348
+ *
349
+ * Indicates that the mouse has left the map (no additional data).
350
+ */
351
+ export type MouseLeaveEvent = Record<string, never>;
352
+ /**
353
+ * A plugin: an object that extends a draw instance, registered with `draw.addPlugin`
354
+ *
355
+ * Only `name` is required. `onInstall` receives the {@link PluginContext}, through which the
356
+ * plugin reads and changes the document and reaches the extension points of the instance
357
+ * (`registerFeatureHandler`, `registerMode`, `addOverlayRenderer`). `hooks` reacts to changes
358
+ * after they happen, `modes` adds custom modes, and `api` is what other code gets from
359
+ * `draw.getPluginApi(name)`. The other members let a plugin take part in the input handling
360
+ * of the select mode.
361
+ *
362
+ * `addPlugin` returns the function that unregisters the plugin: its modes are removed (the
363
+ * select mode is entered first when one of them is the current mode) and `onUninstall` runs.
364
+ * `destroy()` of the draw instance unregisters every plugin. A plugin whose name is already
365
+ * registered is skipped with a warning.
366
+ *
367
+ * @example
368
+ * ```ts
369
+ * import type { Plugin, PluginContext } from '@sakuzu/maplibre-gl-draw';
370
+ *
371
+ * function createCounterPlugin(): Plugin {
372
+ * let count = 0;
373
+ * return {
374
+ * name: 'counter',
375
+ * hooks: {
376
+ * 'feature:afterCreate': (features) => {
377
+ * count += features.length;
378
+ * },
379
+ * },
380
+ * api: { getCount: () => count },
381
+ * onInstall(ctx: PluginContext) {
382
+ * count = ctx.getAllFeatures().length;
383
+ * },
384
+ * };
385
+ * }
386
+ *
387
+ * const remove = draw.addPlugin(createCounterPlugin());
388
+ * draw.getPluginApi<{ getCount(): number }>('counter')?.getCount();
389
+ * remove();
390
+ * ```
391
+ */
392
+ export interface Plugin {
393
+ /** The name of the plugin, unique within the draw instance */
394
+ readonly name: string;
395
+ /**
396
+ * Called when the plugin is registered, with the context it works through
397
+ */
398
+ onInstall?(context: PluginContext): void;
399
+ /**
400
+ * Called when the plugin is unregistered, or when the draw instance is destroyed; release
401
+ * what `onInstall` acquired here
402
+ */
403
+ onUninstall?(): void;
404
+ /**
405
+ * The hooks that react to changes after they happen
406
+ */
407
+ hooks?: Partial<Hooks>;
408
+ /**
409
+ * Definitions of custom modes (registered with the plugin and removed when it is
410
+ * unregistered)
411
+ */
412
+ modes?: Record<string, ModeFactory>;
413
+ /**
414
+ * What the plugin offers to other code, returned by `draw.getPluginApi(name)`
415
+ */
416
+ api?: Record<string, unknown>;
417
+ /**
418
+ * Global keyboard handler
419
+ *
420
+ * Called before the mode handler.
421
+ * Returning true "consumes" the event and it is not passed to the mode handler.
422
+ * Returning false passes the event on to the mode handler.
423
+ *
424
+ * @param event Normalized keyboard event
425
+ * @returns true when the event was consumed
426
+ */
427
+ onKeyDown?(event: KeyNormalizedEvent): boolean;
428
+ /**
429
+ * Global mouse move handler
430
+ *
431
+ * Called when the mouse moves over the map (not called while dragging; moves
432
+ * during a drag are received by onDragMove). It is also passed to the mode
433
+ * handler, so there is no notion of consuming the event.
434
+ *
435
+ * @param event Normalized mouse move event
436
+ */
437
+ onMouseMove?(event: MouseNormalizedEvent): void;
438
+ /**
439
+ * Global drag move handler
440
+ *
441
+ * Called when the pointer moves during a drag (the counterpart of
442
+ * onMouseMove; while dragging, dragmove flows instead of mousemove, so a
443
+ * plugin that wants to see both implements both). It is also passed to the
444
+ * mode handler, so there is no notion of consuming the event.
445
+ *
446
+ * @param event Normalized drag event
447
+ */
448
+ onDragMove?(event: DragNormalizedEvent): void;
449
+ /**
450
+ * Global mouse leave handler
451
+ *
452
+ * Called when the mouse leaves the map.
453
+ */
454
+ onMouseLeave?(): void;
455
+ /**
456
+ * Filtering of selection candidates
457
+ *
458
+ * Called when features are selected, to decide the final selection targets.
459
+ * Receives an array of candidate IDs and returns the filtered array.
460
+ *
461
+ * @param candidateIds Array of candidate feature IDs
462
+ * @returns Filtered array of feature IDs
463
+ */
464
+ filterSelection?(candidateIds: string[]): string[];
465
+ /**
466
+ * Called when an already selected feature is clicked
467
+ *
468
+ * Called in SelectMode when a feature that is already selected is clicked
469
+ * again.
470
+ * Returning true indicates that the plugin has handled the event.
471
+ *
472
+ * @param featureId ID of the clicked feature
473
+ * @returns true when the plugin handled it
474
+ */
475
+ onFeatureClick?(featureId: string): boolean;
476
+ /**
477
+ * Called when a feature is double-clicked
478
+ *
479
+ * Called in SelectMode when a feature is double-clicked.
480
+ * Returning true indicates that the plugin has handled the event.
481
+ *
482
+ * @param featureId ID of the double-clicked feature
483
+ * @returns true when the plugin handled it
484
+ */
485
+ onFeatureDoubleClick?(featureId: string): boolean;
486
+ /**
487
+ * Whether the plugin is in the middle of an interaction
488
+ *
489
+ * Returns true when the plugin is performing an exclusive operation such as
490
+ * text input or inline editing.
491
+ * The mode handler looks at this state and skips keyboard shortcuts and mouse
492
+ * operations.
493
+ */
494
+ isInteracting?(): boolean;
495
+ /**
496
+ * Complete the interaction
497
+ *
498
+ * Called when the plugin's operation should be completed normally, such as on
499
+ * a mode switch or when a feature is deleted.
500
+ */
501
+ finishInteraction?(): void;
502
+ /**
503
+ * Cancel the interaction
504
+ */
505
+ cancelInteraction?(): void;
506
+ /**
507
+ * Get the DOM element used for the interaction
508
+ *
509
+ * Returns the DOM element that the plugin displays as an overlay on the map.
510
+ * The mode handler skips clicks inside this element.
511
+ */
512
+ getInteractionContainer?(): HTMLElement | null;
513
+ /**
514
+ * Called after a feature is created
515
+ *
516
+ * Called right after a feature has been created in a drawing mode and the
517
+ * transition to SelectMode has happened.
518
+ * The plugin can automatically start an interaction (for example, editing
519
+ * its name).
520
+ *
521
+ * @param featureId ID of the created feature
522
+ * @param featureType Type of the feature
523
+ */
524
+ onFeatureCreated?(featureId: string, featureType: string): void;
525
+ }
526
+ /**
527
+ * Re-export of the EventEmitter types
528
+ */
529
+ export type { EventEmitter, EventMap };
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Constant definitions
3
+ *
4
+ * Property prefixes and UI configuration constants.
5
+ */
6
+ /**
7
+ * Keys of the internal meta properties
8
+ *
9
+ * createdZoom/rotation/scale are stored in feature.properties and round-trip through GeoJSON
10
+ * with the maplibre-gl-draw: prefix (this library's own data, required to reproduce the
11
+ * rendering).
12
+ */
13
+ export declare const INTERNAL_PROPERTIES: {
14
+ /** Zoom level at creation time */
15
+ readonly CREATED_ZOOM: "createdZoom";
16
+ /** Rotation angle (degrees) */
17
+ readonly ROTATION: "rotation";
18
+ /** Scale */
19
+ readonly SCALE: "scale";
20
+ };
21
+ /**
22
+ * The handle of the selection UI being dragged
23
+ *
24
+ * `resize-*` are the resize handles by compass direction (the corners, and the edge midpoints
25
+ * that a custom feature type can add), `rotate` the rotate handle, `vertex` and `midpoint`
26
+ * the handles of a line or a polygon, and `radius` and `center` those of a Circle.
27
+ */
28
+ export type HandleType = 'resize-nw' | 'resize-n' | 'resize-ne' | 'resize-e' | 'resize-se' | 'resize-s' | 'resize-sw' | 'resize-w' | 'rotate' | 'vertex' | 'midpoint' | 'radius' | 'center';
29
+ /**
30
+ * Handle positions
31
+ */
32
+ export declare const HANDLE_POSITIONS: {
33
+ readonly RESIZE: readonly ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
34
+ readonly ROTATE: "rotate";
35
+ readonly VERTEX: "vertex";
36
+ readonly MIDPOINT: "midpoint";
37
+ };
38
+ /**
39
+ * Cursor styles
40
+ */
41
+ export declare const CURSOR_STYLES: {
42
+ readonly DEFAULT: "default";
43
+ readonly POINTER: "pointer";
44
+ readonly MOVE: "move";
45
+ readonly GRAB: "grab";
46
+ readonly GRABBING: "grabbing";
47
+ readonly CROSSHAIR: "crosshair";
48
+ readonly TEXT: "text";
49
+ readonly RESIZE_NW: "nw-resize";
50
+ readonly RESIZE_N: "n-resize";
51
+ readonly RESIZE_NE: "ne-resize";
52
+ readonly RESIZE_E: "e-resize";
53
+ readonly RESIZE_SE: "se-resize";
54
+ readonly RESIZE_S: "s-resize";
55
+ readonly RESIZE_SW: "sw-resize";
56
+ readonly RESIZE_W: "w-resize";
57
+ readonly ROTATE: "grab";
58
+ };
59
+ /**
60
+ * Mouse event states
61
+ */
62
+ export declare const MOUSE_STATE: {
63
+ readonly IDLE: "idle";
64
+ readonly HOVER: "hover";
65
+ readonly DRAGGING: "dragging";
66
+ };
@@ -0,0 +1,60 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Constant definitions
5
+ *
6
+ * Property prefixes and UI configuration constants.
7
+ */
8
+ /**
9
+ * Keys of the internal meta properties
10
+ *
11
+ * createdZoom/rotation/scale are stored in feature.properties and round-trip through GeoJSON
12
+ * with the maplibre-gl-draw: prefix (this library's own data, required to reproduce the
13
+ * rendering).
14
+ */
15
+ export const INTERNAL_PROPERTIES = {
16
+ /** Zoom level at creation time */
17
+ CREATED_ZOOM: 'createdZoom',
18
+ /** Rotation angle (degrees) */
19
+ ROTATION: 'rotation',
20
+ /** Scale */
21
+ SCALE: 'scale',
22
+ };
23
+ /**
24
+ * Handle positions
25
+ */
26
+ export const HANDLE_POSITIONS = {
27
+ RESIZE: ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'],
28
+ ROTATE: 'rotate',
29
+ VERTEX: 'vertex',
30
+ MIDPOINT: 'midpoint',
31
+ };
32
+ /**
33
+ * Cursor styles
34
+ */
35
+ export const CURSOR_STYLES = {
36
+ DEFAULT: 'default',
37
+ POINTER: 'pointer',
38
+ MOVE: 'move',
39
+ GRAB: 'grab',
40
+ GRABBING: 'grabbing',
41
+ CROSSHAIR: 'crosshair',
42
+ TEXT: 'text',
43
+ RESIZE_NW: 'nw-resize',
44
+ RESIZE_N: 'n-resize',
45
+ RESIZE_NE: 'ne-resize',
46
+ RESIZE_E: 'e-resize',
47
+ RESIZE_SE: 'se-resize',
48
+ RESIZE_S: 's-resize',
49
+ RESIZE_SW: 'sw-resize',
50
+ RESIZE_W: 'w-resize',
51
+ ROTATE: 'grab',
52
+ };
53
+ /**
54
+ * Mouse event states
55
+ */
56
+ export const MOUSE_STATE = {
57
+ IDLE: 'idle',
58
+ HOVER: 'hover',
59
+ DRAGGING: 'dragging',
60
+ };