@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 @@
1
+ export {};
Binary file
@@ -0,0 +1,561 @@
1
+ import type { BoundingBox, Coordinate, Feature, StyleRule } from '../shared/types/model.js';
2
+ import type { StyleRuleChannel } from '../view/style-rule.js';
3
+ import type { DatasetColumnarInput, DatasetColumnarPrepared } from './columnar/types.js';
4
+ import type { DatasetCollisionThinning, DatasetThinningStats, ResolvedCollisionThinning } from './thinning.js';
5
+ /**
6
+ * The default style of a dataset, per geometry channel.
7
+ *
8
+ * It holds a subset of FeatureStyle per channel (the same vocabulary as the rule colors). The
9
+ * features of a dataset often have no individual style, so this is the mechanism
10
+ * for giving a default such as "the lines of this dataset are 1px light blue" per dataset.
11
+ *
12
+ * The precedence is "the individual style of a feature > the rule color (color only) >
13
+ * baseStyle > the core default".
14
+ */
15
+ export type DatasetBaseStyle = Partial<Record<StyleRuleChannel, Feature['style']>>;
16
+ /**
17
+ * A feature passed to a dataset.
18
+ *
19
+ * It accepts the same coordinate shapes as a feature of the Store (including Multi and holes).
20
+ * It is not put into the Store, so the layer it belongs to, the lock and the visibility can be
21
+ * omitted (when omitted they are treated as an empty string, false and true respectively).
22
+ * `Feature` satisfies this type, so a feature taken out of the Store can be passed as it is.
23
+ * Positions with a third element (an elevation from GeoJSON) are truncated to `[lng, lat]`.
24
+ */
25
+ export interface DatasetFeatureInput {
26
+ /** The feature id, unique within the dataset */
27
+ id: string;
28
+ /** The geometry type, the same values as a feature of the Store */
29
+ type: Feature['type'];
30
+ /** The coordinates in `[lng, lat]` degrees, shaped as for `type` (holes and Multi included) */
31
+ coordinates: Feature['coordinates'];
32
+ /** The attributes the style rule reads (`{}` when omitted) */
33
+ properties?: Record<string, unknown>;
34
+ /** The individual style; it wins over the rule color and the base style */
35
+ style?: Feature['style'];
36
+ /** The layer id (`''` when omitted). Kept on the feature; the dataset does not use it */
37
+ layerId?: string;
38
+ /** The group id. Kept on the feature; the dataset does not use it */
39
+ groupId?: string;
40
+ /** The lock flag (`false` when omitted). Kept on the feature; nothing is edited here */
41
+ locked?: boolean;
42
+ /** `false` hides this feature (`true` when omitted) */
43
+ visible?: boolean;
44
+ }
45
+ /**
46
+ * Where a dataset is drawn relative to the layers of the Store.
47
+ *
48
+ * below-store / above-store refer to the position relative to all of the layers of the Store.
49
+ * layer-order means "taking part in the same stacking order as the layers of the Store".
50
+ *
51
+ * - below-store: behind all of the layers of the Store (the default)
52
+ * - above-store: in front of all of the layers of the Store (behind the selection UI)
53
+ * - layer-order: drawn at the position where its own dataset id is placed within the
54
+ * stacking order of the Store (`store.getLayerOrder()`). While it is not on the order it is
55
+ * not drawn
56
+ */
57
+ export type DatasetOrder = 'below-store' | 'above-store' | 'layer-order';
58
+ /**
59
+ * The destination of {@link MapLibreGLDraw.moveDataset}: a side and a position
60
+ * within it.
61
+ *
62
+ * order is the side (in front of or behind the Store) and index is the position within that
63
+ * side. index 0 is the backmost and out-of-range values are clamped. Both can be omitted.
64
+ *
65
+ * When it is moved to order: 'layer-order', the stacking order is decided by the layer order of
66
+ * the Store alone and index takes no part in it.
67
+ */
68
+ export interface DatasetPlacement {
69
+ /** The side to move to. When omitted, the current side is kept */
70
+ order?: DatasetOrder;
71
+ /**
72
+ * The position within the side (0 = the backmost)
73
+ *
74
+ * When omitted, it goes to the front of the destination if the side changes, and keeps its
75
+ * position if it does not.
76
+ */
77
+ index?: number;
78
+ }
79
+ /**
80
+ * Fetches the features of a dataset for the displayed range.
81
+ *
82
+ * It is called, debounced by 200 ms, when the displayed range changes. `bbox` is the range in
83
+ * degrees rounded out to the boundaries of the tiles at the integer zoom, and `zoom` is the
84
+ * zoom at the time of the call. A result is cached per rounded range, so a small pan or zoom
85
+ * causes no call; {@link Dataset.invalidateProviderCache} discards the cache. Only
86
+ * the result of the last request is applied, and a rejected promise is logged with
87
+ * `console.error` and leaves the features shown as they are.
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * const provider: DatasetFeatureProvider = async (bbox, zoom) => {
92
+ * const url = `/api/parcels?bbox=${bbox.minX},${bbox.minY},${bbox.maxX},${bbox.maxY}&z=${zoom}`;
93
+ * const response = await fetch(url);
94
+ * return response.json(); // DatasetFeatureInput[]
95
+ * };
96
+ * draw.addDataset({ id: 'parcels', provider });
97
+ * ```
98
+ */
99
+ export type DatasetFeatureProvider = (bbox: BoundingBox, zoom: number) => Promise<DatasetFeatureInput[]>;
100
+ /**
101
+ * Returns the size and opacity factors of a dataset for a zoom.
102
+ *
103
+ * They are evaluated exactly once per frame, right before drawing. scale is the size factor (it
104
+ * applies to the diameter of a point, the line width and the outline width of a polygon) and
105
+ * opacity is the opacity factor (0..1).
106
+ *
107
+ * They are uniforms multiplied into the baked sizes at draw time, so changing a value never
108
+ * rebuilds a retained batch. They are factors per dataset and do not affect the rendering of
109
+ * the Store (the drawn features). A return value of NaN or a negative number does not break the
110
+ * rendering (it is clamped into a safe range).
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * // Shrink and fade the markers below zoom 12
115
+ * const zoomScale: DatasetZoomScale = (zoom) =>
116
+ * zoom >= 12 ? { scale: 1, opacity: 1 } : { scale: 0.5, opacity: 0.6 };
117
+ * ```
118
+ */
119
+ export type DatasetZoomScale = (zoom: number) => {
120
+ scale: number;
121
+ opacity: number;
122
+ };
123
+ /**
124
+ * The options of {@link MapLibreGLDraw.addDataset}.
125
+ *
126
+ * Only `id` is required. Give at most one of `features` (static), `columnar` (static, as
127
+ * columns of typed arrays) and `provider` (fetched for the displayed range).
128
+ */
129
+ export interface DatasetOptions {
130
+ /**
131
+ * The dataset id. It must be unique among the datasets of the draw
132
+ * instance; a duplicate makes `addDataset` throw. With `order: 'layer-order'` it is
133
+ * also the id placed in the layer order of the Store
134
+ */
135
+ id: string;
136
+ /**
137
+ * The static features, drawn in array order (the last in front). Cannot be given together
138
+ * with `columnar` or `provider` (it throws). Replace them later with
139
+ * {@link Dataset.setFeatures}
140
+ */
141
+ features?: DatasetFeatureInput[];
142
+ /**
143
+ * The static rows as columns of typed arrays, drawn in row order (the last in front); the
144
+ * fast way in for a large table, read in a Worker if need be. Cannot be given together with
145
+ * `features` or `provider` (it throws). Replace them later with
146
+ * {@link Dataset.setColumnar}
147
+ */
148
+ columnar?: DatasetColumnarInput;
149
+ /**
150
+ * What `prepareDatasetColumnar` computed for `columnar` (in a Worker, say). The dataset then
151
+ * computes none of it on the main thread. Only with `columnar` (it throws otherwise)
152
+ */
153
+ prepared?: DatasetColumnarPrepared;
154
+ /**
155
+ * Fetches the features for the displayed range. Cannot be given together with `features` or
156
+ * `columnar` (it throws)
157
+ */
158
+ provider?: DatasetFeatureProvider;
159
+ /**
160
+ * The attribute-driven color, the same type as the `styleRule` of a layer. None when omitted
161
+ */
162
+ styleRule?: StyleRule;
163
+ /** The default style per geometry channel. None when omitted */
164
+ baseStyle?: DatasetBaseStyle;
165
+ /**
166
+ * Whether the hit test events are fired (false by default)
167
+ *
168
+ * Even with false it blocks hits while it is visible (the features below cannot be grabbed).
169
+ * The only difference is whether click / hover are fired.
170
+ */
171
+ interactive?: boolean;
172
+ /** Where it is drawn relative to the Store (`'below-store'` by default) */
173
+ order?: DatasetOrder;
174
+ /** The size and opacity factors per zoom (no factors when omitted) */
175
+ zoomScale?: DatasetZoomScale;
176
+ /**
177
+ * Collision thinning of the point markers (disabled when omitted = everything drawn as before)
178
+ *
179
+ * When it is enabled, point markers that overlap on screen are not drawn (they are removed
180
+ * from both the rendering and the hit testing). The test uses the size actually drawn, so
181
+ * making the markers bigger makes the thinning coarser as well.
182
+ */
183
+ collisionThinning?: DatasetCollisionThinning;
184
+ /**
185
+ * Predicate that picks out the points drawn by an external renderer (core draws every point
186
+ * when omitted)
187
+ *
188
+ * core does not draw a `Point` feature for which it returns true (the contract is that an
189
+ * external renderer draws it). It is only not drawn; it stays a target of the collision
190
+ * thinning, the hit testing and the selection. The test applies only to the Point channel;
191
+ * `MultiPoint` is out of scope.
192
+ *
193
+ * What the predicate does inside (what it looks at to return true) is none of core's business;
194
+ * core only reads whether the result is true.
195
+ */
196
+ externalPointRender?: (feature: Feature) => boolean;
197
+ }
198
+ export type { DatasetClickEventPayload } from '../shared/types/events.js';
199
+ /**
200
+ * The payload of the `click` event of a {@link Dataset}.
201
+ */
202
+ export interface DatasetClickPayload {
203
+ /** Dataset id */
204
+ datasetId: string;
205
+ /** The feature that was hit, as normalized by the dataset */
206
+ feature: Feature;
207
+ /**
208
+ * The row of the feature: its index in the features given to the dataset (or in the result
209
+ * of the provider), or its row in the columnar table. A host that keeps its own columns reads
210
+ * the values of the row from them
211
+ */
212
+ row: number;
213
+ /** The clicked position `[lng, lat]` in degrees */
214
+ lngLat: Coordinate;
215
+ }
216
+ /**
217
+ * The payload of the `hover` event of a {@link Dataset}.
218
+ *
219
+ * It fires only when the hovered target changes. When the pointer leaves the target, feature
220
+ * becomes null (so that the host can detect that it left the dataset).
221
+ */
222
+ export interface DatasetHoverPayload {
223
+ /** Dataset id */
224
+ datasetId: string;
225
+ /** The feature being hovered. null when the pointer left the target */
226
+ feature: Feature | null;
227
+ /** The row of the feature (see {@link DatasetClickPayload.row}). null when it left the target */
228
+ row: number | null;
229
+ /** The pointer position `[lng, lat]` in degrees */
230
+ lngLat: Coordinate;
231
+ }
232
+ /**
233
+ * The payload of the `change` event of a {@link Dataset}.
234
+ *
235
+ * It reports to the outside that the contents, the style or the visibility of a dataset
236
+ * changed. It exists so that a host that builds another representation from the contents of a
237
+ * dataset, such as label rendering, gets a trigger to rebuild it.
238
+ *
239
+ * - features: the features were replaced (setFeatures, setColumnar, or a provider result
240
+ * applied). The rows are new, and so are the drawn rows
241
+ * - style: the style rule or the base style changed (the drawn rows may have changed with it)
242
+ * - visibility: it was actually switched between shown and hidden
243
+ * - selection: the selected features actually changed
244
+ * - thinning: the rows the collision thinning draws changed, and nothing else did. When a
245
+ * frame changed them (the zoom entered another band), it is sent right after that frame,
246
+ * which drew them; when the host did (`setCollisionThinning`, `setZoomScale`), it is sent at
247
+ * once and the next frame draws them
248
+ *
249
+ * Every change of the drawn rows also advances {@link Dataset.getDrawnRowsRevision}.
250
+ */
251
+ export interface DatasetChangePayload {
252
+ /** What changed (see the list above) */
253
+ reason: 'features' | 'style' | 'visibility' | 'selection' | 'thinning';
254
+ }
255
+ /**
256
+ * The events of a {@link Dataset} and their payloads.
257
+ */
258
+ export interface DatasetEventMap {
259
+ /** A feature was clicked. Fires only with `interactive: true` */
260
+ click: DatasetClickPayload;
261
+ /** The hovered feature changed. Fires only with `interactive: true` */
262
+ hover: DatasetHoverPayload;
263
+ /** The features, the style, the visibility, the selection or the thinning changed */
264
+ change: DatasetChangePayload;
265
+ }
266
+ /**
267
+ * A set of features drawn fast with attribute-driven styles, outside the Store.
268
+ *
269
+ * It is meant for overlaying tens of thousands of read-only records, such as parcels or a
270
+ * table of places. The features never enter the Store, so none of the following applies to
271
+ * them: editing, undo / redo, the `draw.feature.*` events, the selection UI, and
272
+ * `getAllFeatures()` / `export()`. A caller who wants to edit one copies it into the Store with
273
+ * `addFeature`; the library does not relate the two. Create one with
274
+ * {@link MapLibreGLDraw.addDataset}.
275
+ *
276
+ * @example
277
+ * ```ts
278
+ * const parcels = draw.addDataset({
279
+ * id: 'parcels',
280
+ * features: [
281
+ * {
282
+ * id: 'p1',
283
+ * type: 'Polygon',
284
+ * coordinates: [[[139.76, 35.68], [139.77, 35.68], [139.77, 35.69], [139.76, 35.68]]],
285
+ * properties: { population: 4200 },
286
+ * },
287
+ * ],
288
+ * styleRule: {
289
+ * kind: 'graduated',
290
+ * property: 'population',
291
+ * breaks: [1000, 5000],
292
+ * colors: ['#eff3ff', '#6baed6', '#2171b5'],
293
+ * other: '#cccccc',
294
+ * },
295
+ * interactive: true,
296
+ * });
297
+ *
298
+ * const unsubscribe = parcels.on('click', ({ feature }) => {
299
+ * console.log(feature.id, feature.properties);
300
+ * });
301
+ *
302
+ * parcels.setVisible(false); // hide without discarding the features
303
+ * parcels.remove(); // the same as draw.removeDataset('parcels')
304
+ * ```
305
+ */
306
+ export interface Dataset {
307
+ /** The dataset id given at creation */
308
+ readonly id: string;
309
+ /**
310
+ * Where it is drawn relative to the Store (the current side)
311
+ *
312
+ * When the side is changed with `moveDataset`, this value becomes the new side.
313
+ */
314
+ readonly order: DatasetOrder;
315
+ /** Whether click / hover are fired (hits are blocked even with false) */
316
+ readonly interactive: boolean;
317
+ /** Whether it is shown (true by default) */
318
+ readonly visible: boolean;
319
+ /**
320
+ * Switches between shown and hidden
321
+ *
322
+ * While it is hidden, neither the rendering nor the hit testing happens, but the features held
323
+ * and the GPU resources stay as they are (showing it again takes effect immediately).
324
+ */
325
+ setVisible(visible: boolean): void;
326
+ /**
327
+ * Replaces all the features that are shown (there is no partial update). The selection
328
+ * drops the ids that disappear
329
+ */
330
+ setFeatures(features: DatasetFeatureInput[]): void;
331
+ /**
332
+ * Replaces all the rows that are shown with a columnar table (there is no partial update).
333
+ * The selection drops the ids that disappear
334
+ *
335
+ * The arrays are kept and read as they are, not copied. The rows are packed straight into the
336
+ * GPU arrays, and a row becomes a feature only when it is asked for (a hit, the selection,
337
+ * `getFeatures`, `collectVisible`). The bboxes, the spatial chunks and the spatial index of the
338
+ * hit testing are computed here unless `prepared` brings them.
339
+ *
340
+ * @param input The table
341
+ * @param prepared What `prepareDatasetColumnar` (from `@sakuzu/maplibre-gl-draw/columnar`)
342
+ * computed for this table, typically in the Worker that read it
343
+ * @throws when the shape of the table does not add up, or when `prepared` was made for a table
344
+ * of another length
345
+ */
346
+ setColumnar(input: DatasetColumnarInput, prepared?: DatasetColumnarPrepared): void;
347
+ /** Replaces the style rule (undefined clears it) */
348
+ setStyleRule(rule: StyleRule | undefined): void;
349
+ /**
350
+ * Replaces the zoom-dependent drawing factors (null clears them)
351
+ *
352
+ * The factors are only multiplied in at draw time, so the retained batches are not rebuilt
353
+ * (they take effect from the next frame). With the collision thinning on, the footprints of
354
+ * the points change with the scale: the winners are picked again at once and, when they
355
+ * changed, the next frame rebuilds the points alone.
356
+ */
357
+ setZoomScale(zoomScale: DatasetZoomScale | null): void;
358
+ /** The zoom-dependent drawing factors in effect (null when not set) */
359
+ getZoomScale(): DatasetZoomScale | null;
360
+ /** Replaces the base style (undefined clears it) */
361
+ setBaseStyle(style: DatasetBaseStyle | undefined): void;
362
+ /**
363
+ * Replaces the predicate that picks out the points drawn by an external renderer (undefined
364
+ * clears it)
365
+ *
366
+ * It has the same meaning as the `externalPointRender` option at creation. The test is baked
367
+ * into the retained batches, so replacing it rebuilds them (without a rebuild, a circle that
368
+ * should have stopped being drawn would remain, and one that should be drawn again would not
369
+ * appear).
370
+ */
371
+ setExternalPointRender(predicate: ((feature: Feature) => boolean) | undefined): void;
372
+ /**
373
+ * The base style in effect (undefined when not set)
374
+ *
375
+ * `getFeatures` returns the features before the base style is merged in, so a caller who needs
376
+ * the effective appearance (the radius of a point, for example) reads this as well.
377
+ */
378
+ getBaseStyle(): DatasetBaseStyle | undefined;
379
+ /**
380
+ * The features currently held, in draw order, as normalized by the dataset. The rule
381
+ * colors and the base style are not merged in (use `collectVisible` for that)
382
+ *
383
+ * For a columnar table every row with a geometry is built into a feature on the first call
384
+ * (and kept), which costs as much as giving the rows as features in the first place.
385
+ */
386
+ getFeatures(): Feature[];
387
+ /**
388
+ * Returns the features that intersect the displayed range, in draw order (with the rule colors
389
+ * and the base style applied)
390
+ *
391
+ * The narrowing uses the spatial index (rbush), so however many tens of thousands are held,
392
+ * the cost is proportional to the number that intersect. It is the entry point for a caller
393
+ * who wants to "walk only what is visible" (collecting label candidates, for example).
394
+ *
395
+ * @param bounds The range in degrees (`minX` / `maxX` are longitudes, `minY` / `maxY`
396
+ * latitudes)
397
+ * @returns New array of features. Empty when nothing intersects
398
+ */
399
+ collectVisible(bounds: BoundingBox): Feature[];
400
+ /**
401
+ * Returns the rows that intersect the range and are drawn now, in draw order
402
+ *
403
+ * It is the counterpart of `collectVisible` narrowed to the drawn rows, by row number: a row
404
+ * is kept when its bbox intersects the range, it has a geometry, it is not hidden
405
+ * (`visible: false`) and it survived the collision thinning (every row survives while the
406
+ * thinning is off). A point handed to `externalPointRender` counts as drawn. The visibility
407
+ * of the dataset itself is not looked at (as in `collectVisible`).
408
+ *
409
+ * "Drawn now" means the rows of the zoom band of the most recent frame: a frame decides the
410
+ * band before anything of it is drawn, and draws exactly these rows (see
411
+ * {@link Dataset.getDrawnRowsRevision} for when they change). A layer that draws in the same
412
+ * frame reads the rows of that frame.
413
+ *
414
+ * The narrowing uses the spatial index and builds no feature, so the cost is proportional to
415
+ * the number of rows in the range. It is the entry point for code that walks only what is
416
+ * drawn, such as placing text next to points: choose rows with the `getRow*` reads and build
417
+ * the features of the chosen ones alone with `getRowFeature`.
418
+ *
419
+ * A row is the one reported as `row` by `click` and `hover`: the index in the features given
420
+ * (or in the result of the provider), or the row of the columnar table. The numbers hold until
421
+ * the contents are replaced (a `change` with the reason `features`).
422
+ *
423
+ * @param bounds The range in degrees (`minX` / `maxX` are longitudes, `minY` / `maxY`
424
+ * latitudes)
425
+ * @returns New array of rows, in ascending order. Empty when nothing is drawn in the range
426
+ */
427
+ collectDrawnRows(bounds: BoundingBox): Int32Array;
428
+ /**
429
+ * The feature of a row, with the rule colors and the base style applied (the same feature
430
+ * `collectVisible` returns for that row)
431
+ *
432
+ * A row of a columnar table is built into a feature on each call.
433
+ *
434
+ * @returns null when the row is out of range
435
+ */
436
+ getRowFeature(row: number): Feature | null;
437
+ /**
438
+ * The id of a row, without building its feature
439
+ *
440
+ * @returns null when the row is out of range
441
+ */
442
+ getRowId(row: number): string | null;
443
+ /**
444
+ * The geometry type of a row, without building its feature
445
+ *
446
+ * @returns null for a row without a geometry, or out of range
447
+ */
448
+ getRowType(row: number): Feature['type'] | null;
449
+ /**
450
+ * The bounding box of a row in degrees, without building its feature (the box the spatial
451
+ * index holds for it)
452
+ *
453
+ * @returns null for a row without a geometry, or out of range
454
+ */
455
+ getRowBounds(row: number): BoundingBox | null;
456
+ /**
457
+ * The `[lng, lat]` of a row whose geometry is a `Point`, without building its feature
458
+ *
459
+ * @returns null for any other row (another type, no geometry, out of range)
460
+ */
461
+ getRowPoint(row: number): Coordinate | null;
462
+ /**
463
+ * The row of a feature id: the reverse of `getRowId`
464
+ *
465
+ * The first call builds an index of the ids (one pass over the rows), and the calls after it
466
+ * are a lookup, until the contents are replaced. The ids of a dataset are expected to be
467
+ * unique; when several rows share one, the last (frontmost) row is returned. A row without a
468
+ * geometry is found too (it is never drawn).
469
+ *
470
+ * @returns null when no row has the id
471
+ */
472
+ findRow(id: string): number | null;
473
+ /**
474
+ * Replaces the selected features
475
+ *
476
+ * The selection is a state of the dataset and is independent of the selection of the Store. A
477
+ * selected feature is drawn with a highlight (the same key color as the selection UI) on top
478
+ * of the retained rendering. The retained batches are not touched, so switching the selection
479
+ * never rebuilds a GPU resource.
480
+ *
481
+ * An id that is not held is ignored. An id that disappears through setFeatures or through a
482
+ * provider result is dropped from the selection automatically.
483
+ */
484
+ setSelectedIds(ids: string[]): void;
485
+ /** The ids of the selected features (in draw order) */
486
+ getSelectedIds(): string[];
487
+ /**
488
+ * Sets the collision thinning of the point markers (null disables it)
489
+ *
490
+ * While it is enabled, point markers that overlap on screen are not drawn. The test uses the
491
+ * size actually drawn (the radius + the outline + the margin) and the winners are decided from
492
+ * all of the features of the dataset for each integer zoom band (this does not depend on
493
+ * the view, so panning does not swap them). At zooms at or above `fullDisplayZoom` the thinning
494
+ * stops and every feature is drawn. When there is a pitch, the band and `fullDisplayZoom` are
495
+ * decided with "the shallowest effective zoom on screen" (so that only the distance does not
496
+ * get squashed).
497
+ *
498
+ * The band follows the zoom being drawn by itself: every frame decides it from the zoom it
499
+ * draws with, during a zoom or pitch gesture as well, so there is nothing to call when the
500
+ * camera moves or before drawing once at a given camera (a snapshot, a print). Changing the
501
+ * settings picks the winners at once, for the band of the most recent frame, and the next
502
+ * frame draws them (only the points are rebuilt).
503
+ */
504
+ setCollisionThinning(options: DatasetCollisionThinning | null): void;
505
+ /** The collision thinning in effect (null when not set) */
506
+ getCollisionThinning(): ResolvedCollisionThinning | null;
507
+ /**
508
+ * The set of feature ids that are drawn (null when no thinning is in effect)
509
+ *
510
+ * null means "every feature is drawn" (the set of all of them is not built). The rows are
511
+ * those of {@link Dataset.collectDrawnRows}. The set is built on the first request after each
512
+ * change of the drawn rows, one pass over every row, so code that walks the drawn points of
513
+ * a range reads `collectDrawnRows` instead, and code that caches something per set of drawn
514
+ * rows keys it on {@link Dataset.getDrawnRowsRevision}.
515
+ */
516
+ getVisibleFeatureIds(): ReadonlySet<string> | null;
517
+ /**
518
+ * The state of the thinning: how many of the features are drawn, in which band (the rows of
519
+ * {@link Dataset.collectDrawnRows})
520
+ */
521
+ getThinningStats(): DatasetThinningStats;
522
+ /**
523
+ * A number that advances whenever the drawn rows change: the contents replaced, or the rows
524
+ * the collision thinning draws (a band entered by a frame, the settings, the style, the zoom
525
+ * factors)
526
+ *
527
+ * Reading it costs nothing, so it is the key for a cache of what is derived from the drawn
528
+ * rows (the text placed next to the drawn points, say): the same number means the same rows
529
+ * for `collectDrawnRows`, `getVisibleFeatureIds`, `getThinningStats` and the hit testing. A
530
+ * layer that draws in the same frame as the dataset can compare it when it draws, and see a
531
+ * new band in the very frame that draws it, before the `change` event of that frame arrives.
532
+ */
533
+ getDrawnRowsRevision(): number;
534
+ /**
535
+ * Discards the cache of the fetch results of the provider
536
+ *
537
+ * It is called when what the provider returns has itself changed (a filter being applied
538
+ * again, for example). It empties the cache, fetches again even for the same displayed range,
539
+ * and throws away any response in flight together with its result. After discarding it, it
540
+ * fetches again for the current displayed range.
541
+ *
542
+ * It does nothing for a dataset without a provider.
543
+ */
544
+ invalidateProviderCache(): void;
545
+ /**
546
+ * Subscribes to an event
547
+ *
548
+ * click / hover fire only with interactive: true. change fires regardless of interactive.
549
+ *
550
+ * @returns A function that cancels the subscription
551
+ */
552
+ on<K extends keyof DatasetEventMap>(event: K, handler: (payload: DatasetEventMap[K]) => void): () => void;
553
+ /** Cancels a subscription made with `on`. A handler that is not subscribed is ignored */
554
+ off<K extends keyof DatasetEventMap>(event: K, handler: (payload: DatasetEventMap[K]) => void): void;
555
+ /**
556
+ * Removes the dataset and releases its GPU resources; the same as
557
+ * {@link MapLibreGLDraw.removeDataset}, including the `draw.dataset.remove` event.
558
+ * Calling it again does nothing
559
+ */
560
+ remove(): void;
561
+ }
@@ -0,0 +1,43 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /** Recursively checks whether it contains a position with 3 or more elements */
4
+ function hasExtraPositionElements(value) {
5
+ if (typeof value[0] === 'number') {
6
+ return value.length !== 2;
7
+ }
8
+ return value.some(hasExtraPositionElements);
9
+ }
10
+ /** Returns a copy with every position truncated to the 2 elements [longitude, latitude] */
11
+ function truncatePositions(value) {
12
+ if (typeof value[0] === 'number') {
13
+ return [value[0], value[1]];
14
+ }
15
+ return value.map(truncatePositions);
16
+ }
17
+ /**
18
+ * Normalizes the input into a feature of the same shape as in the Store
19
+ *
20
+ * It fills in the optional fields and, since it is not put into the Store, layerId defaults to an
21
+ * empty string. The coordinates may contain 3-element positions coming from GeoJSON (with an
22
+ * elevation), so a copy truncated to 2 elements is made only when they do (ordinary input with
23
+ * only 2 elements is not copied).
24
+ *
25
+ * @internal
26
+ */
27
+ export function normalizeDisplayFeature(input) {
28
+ const coords = input.coordinates;
29
+ const coordinates = hasExtraPositionElements(coords)
30
+ ? truncatePositions(coords)
31
+ : input.coordinates;
32
+ return {
33
+ id: input.id,
34
+ type: input.type,
35
+ coordinates,
36
+ layerId: input.layerId ?? '',
37
+ groupId: input.groupId,
38
+ properties: input.properties ?? {},
39
+ style: input.style,
40
+ locked: input.locked ?? false,
41
+ visible: input.visible !== false,
42
+ };
43
+ }