@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,72 @@
1
+ /**
2
+ * MapLibre GL Draw - public entry point
3
+ *
4
+ * The caller accesses the whole public API through the single entry
5
+ * `import { ... } from '@sakuzu/maplibre-gl-draw'` (plus the pure geometry functions of
6
+ * `@sakuzu/maplibre-gl-draw/geometry`). Tree-shaking is applied by the ESM bundler, which
7
+ * looks at `"sideEffects": false` in package.json.
8
+ *
9
+ * Every public symbol is listed here by name, in one of two layers (see "The public
10
+ * surface" in CONTRIBUTING.md and "The two layers of the public API" in
11
+ * docs/reference/README.md):
12
+ *
13
+ * - Layer 1, the public API: the factory, the instance and its options, the data model,
14
+ * the events, the extension points and the pure functions. It follows semver.
15
+ * - Layer 2, building blocks for extension authors: the rendering parts, the math and the
16
+ * core services that a plugin, a custom feature type or a custom mode may reuse. Its
17
+ * guarantee is weaker: it may change in a minor release.
18
+ *
19
+ * Anything not listed here is internal. Where it would otherwise appear in the emitted
20
+ * declarations, its JSDoc carries the internal tag and `stripInternal` drops it from them.
21
+ * The list is pinned by src/index.test.ts, so every addition or removal is deliberate.
22
+ */
23
+ export type { EventPayloads, MapLibreGLDraw, Options } from './api/index.js';
24
+ export { createMapLibreGLDraw } from './maplibre-gl-draw.js';
25
+ export type { BoundingBoxStyle, BoxSelectionStyleConfig, CenterMarkerStyle, FeatureStyleConfig, FillStyle, LineStringFeatureStyle, MidpointHandleStyle, PointFeatureStyle, PolygonFeatureStyle, RadiusHandleStyle, RadiusLineStyle, RenderingConfig, ResizeHandleStyle, RotateHandleStyle, SelectionUIConfig, TentativeStyle, TopologyConfig, TraceOptions, VertexHandleStyle, } from './shared/config/index.js';
26
+ export type { AutoNameConfig, AutoNameType, PixelRatioInput, PixelRatioProvider, } from './shared/utils/index.js';
27
+ export type { SnapDisableKey, SnapOptions, SnapTargetKind } from './snapping/index.js';
28
+ export type { Color, LineStyle, PointShape, PointStyle, StrokeStyle } from './view/index.js';
29
+ export { MESSAGES_EN, type Messages } from './messages.js';
30
+ export type { BoundingBox, BoundingBoxCoordsSimple, BoxSelection, Coordinate, Data, DragOperationType, DragState, ExportFormat, ExportOptions, ExportResult, Feature, FeatureCoordinates, FeatureInput, FeatureStyle, FeatureType, FileData, Group, ImageProperties, ImageStyle, Layer, LoadOptions, LoadResult, Metadata, Mode, RotateInfo, Selection, SelectionType, SkippedFeature, StateChanges, StyleRule, TentativeState, UpdateFeatureOptions, UpdateSource, VertexRef, VertexSelection, } from './store/index.js';
31
+ export type { LegendEntry } from './view/index.js';
32
+ export type { DocumentStore, FeatureLockStore, InteractionGateStore, Store, StoreView, UiState, } from './store/index.js';
33
+ export { isFeatureLocked, isGroupLocked, isInteractionBlocked, MemoryStore, } from './store/index.js';
34
+ export type { MapClickEventPayload } from './dispatcher/index.js';
35
+ export type { DatasetClickEventPayload } from './display/index.js';
36
+ export type { EventListener, EventMap, FeaturesChangePayload, GeometryAppliedPayload, GeometryOperationName, LoadErrorPayload, } from './shared/utils/index.js';
37
+ export type { GeometryBufferOptions, GeometryOperations, InputOperations, SnappingOperations, SyntheticInputOptions, SyntheticKeyOptions, SyntheticLngLat, SyntheticModifiers, TopologyOperations, TracingOperations, } from './api/index.js';
38
+ export type { DatasetBaseStyle, DatasetChangePayload, DatasetClickPayload, Dataset, DatasetEventMap, DatasetOptions, DatasetOrder, DatasetPlacement, DatasetCollisionThinning, DatasetColumn, DatasetColumnarGeometry, DatasetColumnarGeometryType, DatasetColumnarInput, DatasetColumnarMixedGeometry, DatasetColumnarPrepared, DatasetDictionaryCodes, DatasetDictionaryColumn, DatasetFeatureInput, DatasetFeatureProvider, DatasetHoverPayload, DatasetThinningStats, DatasetZoomScale, ResolvedCollisionThinning, } from './display/index.js';
39
+ export type { GuideSnapProviderDeps, GuideSnapProviderOptions, ResolvedSnapOptions, SnapCandidate, SnapContext, SnapExcludeVertex, SnapIndicatorStyles, SnapLngLat, SnapPointCandidate, SnapProvider, SnapProviderContext, SnapResult, SnapSegmentCandidate, SnapTarget, SnapTargetSegment, } from './snapping/index.js';
40
+ export { createGuideSnapProvider, DEFAULT_SNAP_GUIDE_LINE_STYLE, DEFAULT_SNAP_INDICATOR_STYLES, } from './snapping/index.js';
41
+ export type { TraceGraph, TraceGraphEdge, TraceGraphEndpoint, TraceGraphNode, } from './operations/index.js';
42
+ export { buildTraceGraph, findTracePath } from './operations/index.js';
43
+ export type { StyleRuleChannel } from './view/index.js';
44
+ export { applyRuleColor, deriveLegend, evaluateStyleRule, getStyleRuleChannel, resolveFeatureStyle, resolveRuleColor, } from './view/index.js';
45
+ export { getCreatedZoom, getRotation, getScale, setCreatedZoom, setRotation, } from './shared/utils/index.js';
46
+ export type { CustomFeatureHandler, CustomFeatureRenderer, CustomOverlayRenderer, CustomRendererDrawContext, CustomResizeResult, LayerAwareOverlayRenderer, } from './extension/index.js';
47
+ export type { BoxSelectionStrategy, DragNormalizedEvent, HitTestOptions, HitTestResult, HitTestStrategy, KeyNormalizedEvent, ModifierKeys, MouseNormalizedEvent, NormalizedEvent, PointerOriginalEvent, PointerType, VertexHit, } from './dispatcher/index.js';
48
+ export type { ModeContext, ModeFactory, ModeHandler, SnapInputType } from './modes/index.js';
49
+ export type { ResizeState } from './operations/index.js';
50
+ export type { DragEndData, DragStartData, Hooks, HoverEvent, MouseLeaveEvent, MutationContext, Plugin, PluginContext, } from './plugins/index.js';
51
+ export type { HandleType } from './shared/config/index.js';
52
+ export type { LngLat, ScreenPoint } from './shared/math/index.js';
53
+ export type { AdditionalHandleInfo, AdditionalResizeHandlesCalculator, AuxiliaryHandle, AuxiliaryHandleContext, AuxiliaryHandleHit, AuxiliaryHandleProvider, BoundingBoxCoords, CompanionHit, CompanionHitContext, CustomBoundingBoxCalculator, CustomResizeCalculator, FeatureCompanionProvider, HandleInfo, PointFrameExtent, PointFrameExtentProvider, RenderSlot, ResizeStrategy, } from './view/index.js';
54
+ export type { BoxSelectionStrategyRegistry, HitTestService, HitTestTopmost, TopHit, TopmostHitTestOptions, UnprojectFunction, } from './dispatcher/index.js';
55
+ export type { HookName, PluginManager } from './plugins/index.js';
56
+ export type { TraceConfig } from './shared/config/index.js';
57
+ export type { AutoNameGenerator, EventEmitter } from './shared/utils/index.js';
58
+ export type { SpatialQuery } from './store/index.js';
59
+ export type { AuxiliaryHandleRegistry, FeatureCompanionHitResult, FeatureCompanionRegistry, FillShaderManager, PointShapeRenderer, SDFLineRenderer, SDFStrokeOptions, SDFStrokeStyle, SelectionExtensionRegistry, SelectionScope, TerrainContext, TerrainRenderState, WidthUnit, } from './view/index.js';
60
+ export type { TerrainDiagnostics, TerrainRenderDiagnostics } from './api/index.js';
61
+ export type { TerrainDrapeDebug } from './view/index.js';
62
+ export { resolvePixelRatio } from './shared/utils/index.js';
63
+ export type { BlendCapableGL, DashSegment, DrapeQuadCorners, OffsetUniforms, ProjectionUniformLocations, QuadDrapeColor, QuadDrapeFill, QuadDrapeSurface, QuadDrapeGlyphs, QuadVertices, ShaderData, } from './view/index.js';
64
+ export { applyDrawBlendState, calculateLngLatOffset, calculateOffsetUniforms, computeQuadVertices, createProgram, drawBillboardsWithoutDepth, drawQuadSurfaceOnTerrain, getProjectionTransitionUniform, getStrokeDashPattern, OFFSET_MODE_GLSL, ProjectionUniformManager, QUAD_GLYPH_STRIDE, QuadShader, splitIntoDashes, } from './view/index.js';
65
+ export type { MercatorRect, TessellationStep, TessellationTiling } from './view/index.js';
66
+ export { anchorElevationMeters, anchorGhostOpacity, densifyPath, getAnchorElevationGeneration, getTerrainTessellationStep, metersToMercatorScale, } from './view/index.js';
67
+ export type { MercatorCoord, OBB, OBBCorners } from './shared/math/index.js';
68
+ export { createOBB, DEFAULT_TILE_SIZE, distanceToOBB, generateCirclePolygon, getOBBAABB, lngLatToMercator, metersToDegreesLat, metersToDegreesLng, pixelsToDegreesLat, pixelsToDegreesLng, rectangleIntersectsOBB, } from './shared/math/index.js';
69
+ export { getContrastColor } from './shared/utils/index.js';
70
+ export { PointHitTestStrategy } from './dispatcher/index.js';
71
+ export { createGeometryApi, type GeometryApi, type GeometryApiDeps } from './api/index.js';
72
+ export { computeBoundingBox, createFeatureCompanionRegistry, createSelectionExtensionRegistry, DEFAULT_POINT_FRAME_SIZE, DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds, getSelectedFeatureIds, hasZeroArea, } from './view/index.js';
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export { createMapLibreGLDraw } from './maplibre-gl-draw.js';
4
+ export { MESSAGES_EN } from './messages.js';
5
+ export { isFeatureLocked, isGroupLocked, isInteractionBlocked, MemoryStore, } from './store/index.js';
6
+ export { createGuideSnapProvider, DEFAULT_SNAP_GUIDE_LINE_STYLE, DEFAULT_SNAP_INDICATOR_STYLES, } from './snapping/index.js';
7
+ export { buildTraceGraph, findTracePath } from './operations/index.js';
8
+ export { applyRuleColor, deriveLegend, evaluateStyleRule, getStyleRuleChannel, resolveFeatureStyle, resolveRuleColor, } from './view/index.js';
9
+ // Property accessors
10
+ export { getCreatedZoom, getRotation, getScale, setCreatedZoom, setRotation, } from './shared/utils/index.js';
11
+ // WebGL building blocks
12
+ export { resolvePixelRatio } from './shared/utils/index.js';
13
+ export { applyDrawBlendState, calculateLngLatOffset, calculateOffsetUniforms, computeQuadVertices, createProgram, drawBillboardsWithoutDepth, drawQuadSurfaceOnTerrain, getProjectionTransitionUniform, getStrokeDashPattern, OFFSET_MODE_GLSL, ProjectionUniformManager, QUAD_GLYPH_STRIDE, QuadShader, splitIntoDashes, } from './view/index.js';
14
+ export { anchorElevationMeters, anchorGhostOpacity, densifyPath, getAnchorElevationGeneration, getTerrainTessellationStep, metersToMercatorScale, } from './view/index.js';
15
+ export { createOBB, DEFAULT_TILE_SIZE, distanceToOBB, generateCirclePolygon, getOBBAABB, lngLatToMercator, metersToDegreesLat, metersToDegreesLng, pixelsToDegreesLat, pixelsToDegreesLng, rectangleIntersectsOBB, } from './shared/math/index.js';
16
+ export { getContrastColor } from './shared/utils/index.js';
17
+ // Selection UI, hit testing and viewport helpers
18
+ export { PointHitTestStrategy } from './dispatcher/index.js';
19
+ export { createGeometryApi } from './api/index.js';
20
+ export { computeBoundingBox, createFeatureCompanionRegistry, createSelectionExtensionRegistry, DEFAULT_POINT_FRAME_SIZE, DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds, getSelectedFeatureIds, hasZeroArea, } from './view/index.js';
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The factory of a draw instance: it builds the context, the event bridge, the rendering,
3
+ * the input handling, the modes and the plugin manager, and registers the release of each
4
+ * one for destroy.
5
+ *
6
+ * The Store is the single source of truth: input goes through the dispatcher into the Store,
7
+ * and the view and the events follow the Store's notifications.
8
+ */
9
+ import type { Map as MapLibreMap } from 'maplibre-gl';
10
+ import type { MapLibreGLDraw } from './api/api.js';
11
+ import type { Options } from './api/context.js';
12
+ export type { EventPayloads, MapLibreGLDraw } from './api/api.js';
13
+ export type { Options } from './api/context.js';
14
+ export type { ImportExportAPI } from './api/import-export/index.js';
15
+ export type { Data, LoadResult, Metadata } from './store/types.js';
16
+ /**
17
+ * Creates a draw instance on a MapLibre map: the drawing and editing tools, their rendering and
18
+ * their input handling.
19
+ *
20
+ * It can be called before, while or after the map loads. The render layers are added as soon
21
+ * as the style accepts layers, and added again after `setStyle`. Unless
22
+ * `initDefaultLayer: false` is given, the document starts with one empty layer. The instance
23
+ * turns off the map's box zoom (Shift + drag selects features instead) and gives it back on
24
+ * {@link MapLibreGLDraw.destroy}. Several instances can share a page, each on its own map.
25
+ *
26
+ * @param map the MapLibre map to draw on
27
+ * @param options the options; every one can be omitted (see {@link Options})
28
+ * @returns the draw instance
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { createMapLibreGLDraw } from '@sakuzu/maplibre-gl-draw';
33
+ * import * as maplibregl from 'maplibre-gl';
34
+ *
35
+ * const map = new maplibregl.Map({
36
+ * container: 'map',
37
+ * style: 'https://demotiles.maplibre.org/style.json',
38
+ * center: [139.767, 35.681],
39
+ * zoom: 12,
40
+ * });
41
+ * const draw = createMapLibreGLDraw(map, { defaultMode: 'select' });
42
+ *
43
+ * draw.setMode('draw_polygon');
44
+ * draw.on('draw.feature.create', ({ feature }) => console.log('Created', feature.id));
45
+ * ```
46
+ */
47
+ export declare function createMapLibreGLDraw(map: MapLibreMap, options?: Options): MapLibreGLDraw;
@@ -0,0 +1,407 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { createDrawAPI } from './api/api.js';
4
+ import { createContext } from './api/context.js';
5
+ import { createImportExportAPI } from './api/import-export/index.js';
6
+ import { toleranceDegrees } from './dispatcher/hit-test/local-frame.js';
7
+ import { createTopmostHitTester } from './dispatcher/hit-test/topmost.js';
8
+ import { createInputRouter } from './dispatcher/input-router.js';
9
+ import { createInputNormalizer } from './dispatcher/normalizer.js';
10
+ import { createDisplayInteractions } from './display/interaction.js';
11
+ import { createDatasetManager } from './display/manager.js';
12
+ import { effectiveZoomForCamera } from './display/thinning.js';
13
+ import { TriangulationScheduler } from './display/triangulation.js';
14
+ import { DrawCircleMode, DrawFreehandMode, DrawImageMode, DrawLineMode, DrawPointMode, DrawPolygonMode, } from './modes/draw/index.js';
15
+ import { SelectMode } from './modes/select/mode.js';
16
+ import { createPluginContext } from './plugins/plugin-context.js';
17
+ import { createPluginManager } from './plugins/plugin-manager.js';
18
+ import { SnapIndicatorRenderer } from './snapping/indicator.js';
19
+ import { createDisplaySnapProviders } from './snapping/providers/display.js';
20
+ import { EventBridgeImpl } from './store/event-bridge.js';
21
+ import { createRenderCoordinator } from './view/coordinator.js';
22
+ import { createFeatureCompanionRegistry } from './view/feature-companion.js';
23
+ import { attachSlotLayers } from './view/layer/attach.js';
24
+ import { createCustomLayer } from './view/layer/index.js';
25
+ import { DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds } from './view/viewport.js';
26
+ /**
27
+ * The releases of one draw instance, run in the reverse order of the acquisitions
28
+ *
29
+ * Each resource is registered right where it is acquired, so nothing acquired can be missed
30
+ * by destroy. Running is done once: a second run is ignored. A release that throws does not
31
+ * stop the others; the first error is rethrown after all of them have run.
32
+ */
33
+ function createTeardown() {
34
+ const releases = [];
35
+ let done = false;
36
+ return {
37
+ get done() {
38
+ return done;
39
+ },
40
+ add(release) {
41
+ releases.push(release);
42
+ },
43
+ run() {
44
+ if (done)
45
+ return;
46
+ done = true;
47
+ let firstError = null;
48
+ while (releases.length > 0) {
49
+ const release = releases.pop();
50
+ try {
51
+ release();
52
+ }
53
+ catch (error) {
54
+ firstError ?? (firstError = error);
55
+ }
56
+ }
57
+ if (firstError !== null)
58
+ throw firstError;
59
+ },
60
+ };
61
+ }
62
+ /**
63
+ * Creates a draw instance on a MapLibre map: the drawing and editing tools, their rendering and
64
+ * their input handling.
65
+ *
66
+ * It can be called before, while or after the map loads. The render layers are added as soon
67
+ * as the style accepts layers, and added again after `setStyle`. Unless
68
+ * `initDefaultLayer: false` is given, the document starts with one empty layer. The instance
69
+ * turns off the map's box zoom (Shift + drag selects features instead) and gives it back on
70
+ * {@link MapLibreGLDraw.destroy}. Several instances can share a page, each on its own map.
71
+ *
72
+ * @param map the MapLibre map to draw on
73
+ * @param options the options; every one can be omitted (see {@link Options})
74
+ * @returns the draw instance
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * import { createMapLibreGLDraw } from '@sakuzu/maplibre-gl-draw';
79
+ * import * as maplibregl from 'maplibre-gl';
80
+ *
81
+ * const map = new maplibregl.Map({
82
+ * container: 'map',
83
+ * style: 'https://demotiles.maplibre.org/style.json',
84
+ * center: [139.767, 35.681],
85
+ * zoom: 12,
86
+ * });
87
+ * const draw = createMapLibreGLDraw(map, { defaultMode: 'select' });
88
+ *
89
+ * draw.setMode('draw_polygon');
90
+ * draw.on('draw.feature.create', ({ feature }) => console.log('Created', feature.id));
91
+ * ```
92
+ */
93
+ export function createMapLibreGLDraw(map, options = {}) {
94
+ // 1. Create the context
95
+ const context = createContext(map, options);
96
+ const { store, modeManager, eventEmitter, spatialIndex, hitTestService, featureStyle, selectionStyle, renderingConfig, topology, trace, snapService, pixelRatioSource, } = context;
97
+ // Everything acquired below is released by destroy, in the reverse order
98
+ const teardown = createTeardown();
99
+ // The registrations of the extension points belong to this instance and end with it
100
+ teardown.add(() => {
101
+ context.selectionScope.clear();
102
+ context.snapTargets.clear();
103
+ });
104
+ // 2. Create the EventBridge
105
+ const eventBridge = new EventBridgeImpl(store, eventEmitter);
106
+ // 2.5 Create the manager of the datasets.
107
+ // Culls with the same expanded viewport as the rendering loop, and calls the
108
+ // provider on a change of the displayed range (moveend). It never touches the
109
+ // Store.
110
+ const datasets = createDatasetManager({
111
+ getViewportBounds: () => getExpandedViewportBounds(map, DEFAULT_VIEWPORT_EXPANSION_FACTOR),
112
+ getZoom: () => map.getZoom(),
113
+ // The band of the collision thinning is decided by "the shallowest
114
+ // effective zoom on screen" (pitch correction)
115
+ getEffectiveZoom: () => effectiveZoomForCamera(map),
116
+ // The providers are called when the displayed range changed
117
+ onViewportChange: (handler) => {
118
+ // A destroyed instance attaches nothing to the map again
119
+ if (teardown.done)
120
+ return () => { };
121
+ map.on('moveend', handler);
122
+ return () => {
123
+ map.off('moveend', handler);
124
+ };
125
+ },
126
+ requestRepaint: () => map.triggerRepaint(),
127
+ pixelRatio: pixelRatioSource,
128
+ // Read so that the collision thinning knows "the size of the point that is
129
+ // actually drawn"
130
+ featureStyle,
131
+ // The time slicing of the triangulation belongs to this instance (its queue
132
+ // and its finished triangles are never shared with another instance).
133
+ // Rendering that draws complete frames (printing, thumbnails) turns off time
134
+ // slicing and triangulates on the spot: setting the threshold to infinity
135
+ // puts every polygon on the synchronous path
136
+ triangulationScheduler: renderingConfig.timeSlicing === false
137
+ ? new TriangulationScheduler({ vertexThreshold: Number.POSITIVE_INFINITY })
138
+ : new TriangulationScheduler(),
139
+ timeSlicing: renderingConfig.timeSlicing,
140
+ // Announce the datasets that come and go and their reordering (draw.dataset.add,
141
+ // draw.dataset.remove and draw.dataset.reorder)
142
+ onDatasetAdd: (datasetId) => eventEmitter.emit('dataset.add', { datasetId }),
143
+ onDatasetRemove: (datasetId) => eventEmitter.emit('dataset.remove', { datasetId }),
144
+ onDatasetsReorder: (order) => eventEmitter.emit('dataset.reorder', { order }),
145
+ });
146
+ // Also disposes of the timers and the subscriptions of the datasets
147
+ teardown.add(() => datasets.destroy());
148
+ // 2.6 Hit testing with a unified z traversal.
149
+ // Walks the features of the Store and the datasets in a
150
+ // single stacking order (above-store -> the stacking order from the front ->
151
+ // below-store) and returns the frontmost one.
152
+ // The select mode and the interception of the datasets see
153
+ // the same result.
154
+ // The providers of companion rendering and companion hits are held one per
155
+ // draw instance (the same scope as the renderers of custom feature types).
156
+ // If they were shared, the provider of the hidden renderer used for printing,
157
+ // thumbnails and previews would intercept with the geometry of its
158
+ // own Store.
159
+ const featureCompanions = createFeatureCompanionRegistry();
160
+ const unproject = (p) => map.unproject([p.x, p.y]);
161
+ const hitTestTopmost = createTopmostHitTester({
162
+ store,
163
+ hitTestService,
164
+ unproject,
165
+ // The same bearing-independent tolerance as the HitTestService
166
+ toleranceLngLat: (point) => toleranceDegrees(unproject, point, context.options.clickTolerance),
167
+ datasets,
168
+ // Context of the companion hits (feature companion). A companion decides
169
+ // its hit by its appearance in screen px, so the projection, the zoom and
170
+ // the tolerance are passed.
171
+ project: (lngLat) => {
172
+ const projected = map.project(lngLat);
173
+ return { x: projected.x, y: projected.y };
174
+ },
175
+ getZoom: () => map.getZoom(),
176
+ clickTolerancePx: context.options.clickTolerance,
177
+ companions: featureCompanions,
178
+ });
179
+ // 2.7 Snapping to data (datasets).
180
+ // Adds the vertices, edges and intersections of the displayed datasets as
181
+ // snapping candidates. The data itself is only read, and whether it is
182
+ // enabled is held by options.datasets of the SnapService.
183
+ const displaySnap = createDisplaySnapProviders({
184
+ datasets,
185
+ store,
186
+ spatialIndex,
187
+ snapTargets: context.snapTargets,
188
+ isEnabled: () => snapService.isDatasetsEnabled(),
189
+ // The resolved messages table of this instance (the description of an intersection)
190
+ messages: context.messages,
191
+ });
192
+ for (const provider of displaySnap.providers) {
193
+ teardown.add(snapService.register(provider));
194
+ }
195
+ // 3. Create the CustomLayer
196
+ const customLayer = createCustomLayer({
197
+ map,
198
+ store,
199
+ spatialIndex,
200
+ featureStyle,
201
+ selectionConfig: selectionStyle,
202
+ renderingConfig,
203
+ datasets,
204
+ pixelRatio: pixelRatioSource,
205
+ featureCompanions,
206
+ // The selection UI extension points, the auxiliary handles and the thinned handle sets of
207
+ // this instance (the modes hit test against the same scope)
208
+ selectionScope: context.selectionScope,
209
+ // The separators of the stacking order (external entries) and the frames.
210
+ // Additions and removals of separators are announced by an event
211
+ // (draw.renderslots.change)
212
+ isExternalEntry: context.isExternalEntry,
213
+ onSlotsChange: (slots) => eventEmitter.emit('renderslots.change', { slots }),
214
+ // The failure to load the image of an Image feature (draw.load.error)
215
+ onImageError: (featureId, error) => eventEmitter.emit('load.error', { source: 'image', featureId, error }),
216
+ });
217
+ // 3.5 Add the snapping indicator as a built-in overlay
218
+ // (it comes in front of the selection UI because order: 'overlay')
219
+ customLayer.addOverlayRenderer(new SnapIndicatorRenderer({ snapService }));
220
+ // Repaint when the snapping result changes (the Store does not change, so
221
+ // the RenderCoordinator does not run)
222
+ const repaintOnSnapChange = () => map.triggerRepaint();
223
+ eventEmitter.on('snap.change', repaintOnSnapChange);
224
+ teardown.add(() => eventEmitter.off('snap.change', repaintOnSnapChange));
225
+ // 4. Create the RenderCoordinator (triggers a repaint automatically when the
226
+ // Store changes)
227
+ const renderCoordinator = createRenderCoordinator({ map, store });
228
+ // 5. Set up the ModeManager
229
+ modeManager.registerMode('select', () => new SelectMode());
230
+ modeManager.registerMode('draw_point', () => new DrawPointMode());
231
+ modeManager.registerMode('draw_line', () => new DrawLineMode());
232
+ modeManager.registerMode('draw_polygon', () => new DrawPolygonMode());
233
+ modeManager.registerMode('draw_image', () => new DrawImageMode());
234
+ modeManager.registerMode('draw_circle', () => new DrawCircleMode());
235
+ modeManager.registerMode('draw_freehand', () => new DrawFreehandMode());
236
+ // 6. Create the PluginManager.
237
+ // The PluginContext is initialized lazily after the PluginManager is created
238
+ let pluginContext = null;
239
+ const pluginManager = createPluginManager(() => {
240
+ if (!pluginContext) {
241
+ throw new Error('PluginContext not initialized');
242
+ }
243
+ return pluginContext;
244
+ }, modeManager);
245
+ // 7. Create the import/export API
246
+ const importExportAPI = createImportExportAPI(context);
247
+ const modeContext = {
248
+ map,
249
+ store,
250
+ spatialIndex,
251
+ hitTestService,
252
+ hitTestTopmost,
253
+ featureCompanions,
254
+ selectionScope: context.selectionScope,
255
+ eventEmitter,
256
+ selectionStyle,
257
+ topology,
258
+ trace,
259
+ autoNameGenerator: context.autoNameGenerator,
260
+ boxSelectionRegistry: context.boxSelectionRegistry,
261
+ pluginManager,
262
+ generateFeatureId: context.generateFeatureId,
263
+ getCurrentLayerId: context.getWritableLayerId,
264
+ scaleWithZoom: context.options.scaleWithZoom,
265
+ setMode: (mode) => modeManager.setMode(mode),
266
+ // The key that temporarily disables shared vertices is shared with the
267
+ // disableKey of the snapping
268
+ snapOptions: context.snapOptions,
269
+ // The only opening through which a mode learns about snapping (the
270
+ // SnapService itself is not passed)
271
+ getSnapResult: () => snapService?.getResult() ?? null,
272
+ // The opening that resolves a snap target on data into a feature (read by
273
+ // the tracing)
274
+ getDatasetFeature: (datasetId, featureId) => displaySnap.getFeature(datasetId, featureId),
275
+ // The features of the data put on the edge graph of the tracing (empty
276
+ // when snapping to data is disabled)
277
+ getDatasetTraceFeatures: (bbox) => snapService.isDatasetsEnabled() ? displaySnap.queryFeatures(bbox) : [],
278
+ };
279
+ modeManager.setContext(modeContext);
280
+ // 7. Initialize the PluginContext.
281
+ // Helper function that looks up which layer an item belongs to
282
+ const findLayerForItem = (itemId) => {
283
+ for (const layer of store.getAllLayers()) {
284
+ if (layer.order.includes(itemId)) {
285
+ return layer.id;
286
+ }
287
+ }
288
+ return undefined;
289
+ };
290
+ // Helper function that looks up which group a feature belongs to
291
+ const findGroupForFeature = (featureId) => {
292
+ for (const group of store.getAllGroups()) {
293
+ if (group.featureIds.includes(featureId)) {
294
+ return group.id;
295
+ }
296
+ }
297
+ return undefined;
298
+ };
299
+ // Initialize the PluginContext.
300
+ // The implementations of all PluginContext methods are gathered in
301
+ // createPluginContext.
302
+ // The draw instance is referenced lazily (through the closure, to cope
303
+ // with the circular initialization).
304
+ let drawApi = null;
305
+ pluginContext = createPluginContext({
306
+ store,
307
+ eventEmitter,
308
+ autoNameGenerator: context.autoNameGenerator,
309
+ spatialIndex,
310
+ getActiveLayerId: context.getActiveLayerId,
311
+ findLayerForItem,
312
+ findGroupForFeature,
313
+ getModeManager: () => modeManager,
314
+ // The anchors and the selection extents of this instance (never another instance's)
315
+ terrain: customLayer.getTerrainContext(),
316
+ selectionExtensions: context.selectionScope.extensions,
317
+ getDraw: () => {
318
+ if (!drawApi) {
319
+ throw new Error('MapLibreGLDraw not initialized');
320
+ }
321
+ return drawApi;
322
+ },
323
+ });
324
+ // 7. Create the InputNormalizer and the InputRouter.
325
+ // The hit testing of the datasets comes in as an
326
+ // interception of the InputRouter.
327
+ // The delivery target is decided by the result of the unified z traversal
328
+ // (only the dataset in front receives it).
329
+ const displayInteractions = createDisplayInteractions({
330
+ manager: datasets,
331
+ hitTestTopmost: (event) => hitTestTopmost(event.point),
332
+ // Emit the resolved result of a click as a public event
333
+ // (draw.dataset.click)
334
+ notifyClick: (payload) => eventEmitter.emit('dataset.click', payload),
335
+ });
336
+ // The drag threshold of the options is the one of the mouse (a finger and a pen take a
337
+ // larger one of their own)
338
+ const inputNormalizer = createInputNormalizer(map, {
339
+ dragThreshold: context.options.dragThreshold,
340
+ });
341
+ const inputRouter = createInputRouter({
342
+ normalizer: inputNormalizer,
343
+ modeManager,
344
+ context: modeContext,
345
+ map,
346
+ pluginManager,
347
+ displayInteractions,
348
+ // Emit a click in select mode as a public event (draw.map.click)
349
+ notifyMapClick: (payload) => eventEmitter.emit('map.click', payload),
350
+ snapService,
351
+ });
352
+ // 7. Set up
353
+ eventBridge.start();
354
+ renderCoordinator.start();
355
+ // Keep the render slots on the map. The slots are added as soon as the style
356
+ // accepts layers, whenever the draw instance is created (before, during or
357
+ // after the map loads), and they are restored after a style change. The
358
+ // native layers of the separators are placed between the slots by the host,
359
+ // which receives 'draw.renderslots.change'
360
+ teardown.add(attachSlotLayers(map, () => customLayer.getSlotLayers()));
361
+ inputNormalizer.attach();
362
+ inputRouter.start();
363
+ modeManager.start();
364
+ // Disable the boxZoom of MapLibre (because Shift + drag is used for box
365
+ // selection), and give it back in the state it was found in: the host or another draw
366
+ // instance may have turned it off already.
367
+ // It must be called after inputNormalizer.attach()
368
+ const boxZoomWasEnabled = map.boxZoom.isEnabled();
369
+ map.boxZoom.disable();
370
+ teardown.add(() => {
371
+ if (boxZoomWasEnabled)
372
+ map.boxZoom.enable();
373
+ else
374
+ map.boxZoom.disable();
375
+ });
376
+ // Set the default mode
377
+ modeManager.setMode(context.options.defaultMode);
378
+ // 9. Create the public API
379
+ drawApi = createDrawAPI(context, { inputNormalizer, inputRouter }, eventBridge, customLayer, importExportAPI, { modeManager, renderCoordinator }, { pluginManager, spatialIndex, datasets, featureCompanions });
380
+ // The public API releases what it created itself (the input, the modes, the rendering, the
381
+ // plugins and the layers on the map) first, then the rest goes in the reverse order
382
+ teardown.add(drawApi.destroy);
383
+ drawApi.destroy = () => teardown.run();
384
+ ignoreRegistrationsAfterDestroy(drawApi, () => teardown.done);
385
+ return drawApi;
386
+ }
387
+ /**
388
+ * Makes the registrations of a destroyed instance do nothing
389
+ *
390
+ * Every other call on a destroyed instance works on its inert Store and reaches neither the
391
+ * map nor a timer, but a registration would install something (a plugin, a mode, a renderer,
392
+ * a provider) that nothing is left to release. They are ignored instead and return a cancel
393
+ * function that does nothing.
394
+ */
395
+ function ignoreRegistrationsAfterDestroy(draw, isDestroyed) {
396
+ const noop = () => { };
397
+ const guard = (fn, whenDestroyed) => {
398
+ return (...args) => (isDestroyed() ? whenDestroyed : fn(...args));
399
+ };
400
+ draw.addPlugin = guard(draw.addPlugin, noop);
401
+ draw.registerMode = guard(draw.registerMode, noop);
402
+ draw.registerFeatureHandler = guard(draw.registerFeatureHandler, noop);
403
+ draw.addOverlayRenderer = guard(draw.addOverlayRenderer, noop);
404
+ draw.registerAuxiliaryHandleProvider = guard(draw.registerAuxiliaryHandleProvider, noop);
405
+ draw.registerFeatureCompanionProvider = guard(draw.registerFeatureCompanionProvider, noop);
406
+ draw.snapping.register = guard(draw.snapping.register, noop);
407
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Messages
3
+ *
4
+ * The table of every string the library returns as a value (legend labels, the
5
+ * descriptions of the snapping guides). The library never builds such a string inline;
6
+ * it reads it from the table of the instance, so the host application can show them in
7
+ * its own language.
8
+ *
9
+ * - The keys are typed. A value is either a string or a function that formats one (it
10
+ * receives numbers already turned into strings)
11
+ * - `MESSAGES_EN` is the default, in English. The library ships no other language
12
+ * - `Options.messages` overrides part of the table for one instance. The table belongs to
13
+ * the instance and is never module-level state
14
+ * - There is no locale detection and no automatic switching: the host passes the table
15
+ * it wants
16
+ * - The words of the names generated for features, layers and groups are not in this table:
17
+ * they come from the naming configuration (`AutoNameConfig`, the `autoName` option)
18
+ */
19
+ /**
20
+ * The table of the strings the library returns as values: legend labels and the descriptions
21
+ * of the snapping guides
22
+ *
23
+ * The library builds no such string inline; it reads it from the table of the instance, so
24
+ * the host can show them in its own language. Pass the entries to replace as the `messages`
25
+ * option of `createMapLibreGLDraw`; the entries left out keep {@link MESSAGES_EN}. A value is
26
+ * a string, or a function that formats one from numbers already turned into strings. There is
27
+ * no locale detection and no other built-in language. The words of generated names ("Layer 1")
28
+ * are translated through the `autoName` option (`AutoNameConfig`), not here.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const draw = createMapLibreGLDraw(map, {
33
+ * messages: {
34
+ * legendOther: 'Sonstige',
35
+ * legendRange: (lower, upper) => `${lower} bis unter ${upper}`,
36
+ * },
37
+ * });
38
+ * ```
39
+ */
40
+ export interface Messages {
41
+ /** The label of the single legend entry of a `single` style rule */
42
+ legendAll: string;
43
+ /** The label of the legend entry for values the rule could not resolve (`other`) */
44
+ legendOther: string;
45
+ /** The label of the first class of a `graduated` rule (values below `upper`) */
46
+ legendBelow: (upper: string) => string;
47
+ /** The label of the last class of a `graduated` rule (values of `lower` or more) */
48
+ legendAtLeast: (lower: string) => string;
49
+ /** The label of a middle class of a `graduated` rule (`lower` or more, below `upper`) */
50
+ legendRange: (lower: string, upper: string) => string;
51
+ /** The description of the north-based snapping guide */
52
+ snapNorth: string;
53
+ /** The description of the snapping guide that extends the previous segment */
54
+ snapExtension: string;
55
+ /** The description of the snapping guide perpendicular to the previous segment */
56
+ snapPerpendicular: string;
57
+ /** The description of a snapping candidate at the intersection of two edges */
58
+ snapIntersection: string;
59
+ }
60
+ /**
61
+ * The default table of {@link Messages}, in English (`'All'`, `'Other'`, `` `Below ${upper}` ``
62
+ * and so on)
63
+ */
64
+ export declare const MESSAGES_EN: Readonly<Messages>;
@@ -0,0 +1,36 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * The default table of {@link Messages}, in English (`'All'`, `'Other'`, `` `Below ${upper}` ``
5
+ * and so on)
6
+ */
7
+ export const MESSAGES_EN = Object.freeze({
8
+ legendAll: 'All',
9
+ legendOther: 'Other',
10
+ legendBelow: (upper) => `Below ${upper}`,
11
+ legendAtLeast: (lower) => `${lower} or more`,
12
+ legendRange: (lower, upper) => `${lower} to below ${upper}`,
13
+ snapNorth: 'North',
14
+ snapExtension: 'Extension',
15
+ snapPerpendicular: 'Perpendicular',
16
+ snapIntersection: 'Intersection',
17
+ });
18
+ /**
19
+ * Resolves a table: the given entries over the English default
20
+ *
21
+ * Entries that are `undefined` keep the default, and keys the table does not know are
22
+ * ignored.
23
+ *
24
+ * @internal
25
+ */
26
+ export function resolveMessages(overrides) {
27
+ const resolved = { ...MESSAGES_EN };
28
+ if (!overrides)
29
+ return resolved;
30
+ for (const key of Object.keys(MESSAGES_EN)) {
31
+ const value = overrides[key];
32
+ if (value !== undefined)
33
+ resolved[key] = value;
34
+ }
35
+ return resolved;
36
+ }
@@ -0,0 +1 @@
1
+ export {};