@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,13 @@
1
+ /**
2
+ * Display module
3
+ *
4
+ * Read-only layers that show large amounts of data (datasets). They are a
5
+ * path independent of the Store and do not go through the mechanisms of editing,
6
+ * undo or events.
7
+ *
8
+ * Only the symbols that src/index.ts publishes are listed here (see "The public
9
+ * surface" in CONTRIBUTING.md). Internal code imports from the defining file.
10
+ */
11
+ export type { DatasetColumn, DatasetColumnarGeometry, DatasetColumnarGeometryType, DatasetColumnarInput, DatasetColumnarMixedGeometry, DatasetColumnarPrepared, DatasetDictionaryCodes, DatasetDictionaryColumn, } from './columnar/types.js';
12
+ export type { DatasetCollisionThinning, DatasetThinningStats, ResolvedCollisionThinning, } from './thinning.js';
13
+ export type { Dataset, DatasetBaseStyle, DatasetChangePayload, DatasetClickEventPayload, DatasetClickPayload, DatasetEventMap, DatasetFeatureInput, DatasetFeatureProvider, DatasetHoverPayload, DatasetOptions, DatasetOrder, DatasetPlacement, DatasetZoomScale, } from './types.js';
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,90 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Creates the interception
5
+ *
6
+ * @internal
7
+ */
8
+ export function createDisplayInteractions(deps) {
9
+ const { manager, hitTestTopmost, notifyClick } = deps;
10
+ /** The dataset id and feature id being hovered */
11
+ let hoveredDatasetId = null;
12
+ let hoveredFeatureId = null;
13
+ function toCoordinate(event) {
14
+ return [event.lngLat.lng, event.lngLat.lat];
15
+ }
16
+ function clearHover(lngLat) {
17
+ if (hoveredDatasetId === null)
18
+ return;
19
+ const previous = manager.getInternal(hoveredDatasetId);
20
+ const datasetId = hoveredDatasetId;
21
+ hoveredDatasetId = null;
22
+ hoveredFeatureId = null;
23
+ // Report with feature: null that it left the target
24
+ previous?.emit('hover', { datasetId, feature: null, row: null, lngLat });
25
+ }
26
+ return {
27
+ handleClick(event) {
28
+ if (!manager.hasAny())
29
+ return;
30
+ const top = hitTestTopmost(event);
31
+ // Nothing happens when a feature of the Store is in front (that is the domain of the
32
+ // Store selection; neither the click of a dataset nor a no-hit notification is
33
+ // emitted). A companion of a feature (feature companion) is likewise the domain of the
34
+ // Store side, and the click is handed to the provider by the select mode.
35
+ if (top?.kind === 'store' || top?.kind === 'companion')
36
+ return;
37
+ const coordinate = toCoordinate(event);
38
+ if (top?.kind === 'dataset' && top.feature) {
39
+ // A feature of an interactive dataset was hit. Both the click of the dataset and
40
+ // the notification of the resolved result are emitted
41
+ const row = top.row ?? -1;
42
+ manager.getInternal(top.dataset.id)?.emit('click', {
43
+ datasetId: top.dataset.id,
44
+ feature: top.feature,
45
+ row,
46
+ lngLat: coordinate,
47
+ });
48
+ notifyClick?.({
49
+ datasetId: top.dataset.id,
50
+ feature: top.feature,
51
+ row,
52
+ lngLat: coordinate,
53
+ });
54
+ return;
55
+ }
56
+ // Nothing was there, or a non-interactive dataset merely blocked it: it is reported as
57
+ // a no-hit (the source of "click on empty space to deselect" on the host side)
58
+ notifyClick?.({ datasetId: null, feature: null, row: null, lngLat: coordinate });
59
+ },
60
+ handleMouseMove(event) {
61
+ const coordinate = toCoordinate(event);
62
+ if (!manager.hasAny()) {
63
+ clearHover(coordinate);
64
+ return;
65
+ }
66
+ const top = hitTestTopmost(event);
67
+ if (top?.kind !== 'dataset' || !top.feature) {
68
+ clearHover(coordinate);
69
+ return;
70
+ }
71
+ if (top.dataset.id === hoveredDatasetId && top.feature.id === hoveredFeatureId) {
72
+ // Nothing fires while the pointer only moves over the same feature
73
+ return;
74
+ }
75
+ clearHover(coordinate);
76
+ hoveredDatasetId = top.dataset.id;
77
+ hoveredFeatureId = top.feature.id;
78
+ manager.getInternal(top.dataset.id)?.emit('hover', {
79
+ datasetId: top.dataset.id,
80
+ feature: top.feature,
81
+ row: top.row ?? null,
82
+ lngLat: coordinate,
83
+ });
84
+ },
85
+ reset() {
86
+ hoveredDatasetId = null;
87
+ hoveredFeatureId = null;
88
+ },
89
+ };
90
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,440 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { DatasetImpl } from './dataset.js';
4
+ /**
5
+ * Default debounce time of the provider (ms)
6
+ *
7
+ * @internal
8
+ */
9
+ export const DEFAULT_PROVIDER_DEBOUNCE_MS = 200;
10
+ /**
11
+ * Manager of the datasets
12
+ *
13
+ * @internal
14
+ */
15
+ export class DatasetManager {
16
+ constructor(deps) {
17
+ /** Index by id. The order is held by ordered */
18
+ Object.defineProperty(this, "datasets", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: new Map()
23
+ });
24
+ /**
25
+ * The datasets in display order (from the back to the front)
26
+ *
27
+ * They are ordered as the below-store group, the layer-order group and the above-store group.
28
+ * Within each side, the later in the array, the more in front. The rendering, the hit testing
29
+ * and the listing all look only at this single sequence.
30
+ *
31
+ * Only the layer-order group is an exception: the order of this array does not decide their
32
+ * stacking order (the truth of the order is the stacking order of the Store,
33
+ * `getLayerOrder()`, alone).
34
+ */
35
+ Object.defineProperty(this, "ordered", {
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ value: []
40
+ });
41
+ Object.defineProperty(this, "deps", {
42
+ enumerable: true,
43
+ configurable: true,
44
+ writable: true,
45
+ value: void 0
46
+ });
47
+ Object.defineProperty(this, "unsubscribeViewport", {
48
+ enumerable: true,
49
+ configurable: true,
50
+ writable: true,
51
+ value: null
52
+ });
53
+ Object.defineProperty(this, "providerDebounceMs", {
54
+ enumerable: true,
55
+ configurable: true,
56
+ writable: true,
57
+ value: void 0
58
+ });
59
+ /** Set by destroy: nothing can be added afterwards (it would never be disposed) */
60
+ Object.defineProperty(this, "destroyed", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: false
65
+ });
66
+ this.deps = deps;
67
+ this.providerDebounceMs = deps.providerDebounceMs ?? DEFAULT_PROVIDER_DEBOUNCE_MS;
68
+ }
69
+ /**
70
+ * Adds a dataset
71
+ *
72
+ * @throws after destroy (the dataset, its provider and its timers would never be
73
+ * released)
74
+ */
75
+ add(options) {
76
+ if (this.destroyed) {
77
+ throw new Error('Cannot add a dataset to a destroyed draw instance');
78
+ }
79
+ if (this.datasets.has(options.id)) {
80
+ throw new Error(`Dataset "${options.id}" already exists`);
81
+ }
82
+ const dataset = new DatasetImpl(options, {
83
+ requestRepaint: () => this.deps.requestRepaint(),
84
+ providerDebounceMs: this.providerDebounceMs,
85
+ pixelRatio: this.deps.pixelRatio,
86
+ triangulationScheduler: this.deps.triangulationScheduler,
87
+ pointStyle: this.deps.featureStyle?.point.point,
88
+ timeSlicing: this.deps.timeSlicing,
89
+ getZoom: () => this.deps.getZoom(),
90
+ getViewportState: () => ({
91
+ bounds: this.deps.getViewportBounds(),
92
+ zoom: this.deps.getZoom(),
93
+ }),
94
+ getPitchZoomDrop: () => {
95
+ const effective = this.deps.getEffectiveZoom?.();
96
+ if (effective === undefined || !Number.isFinite(effective))
97
+ return 0;
98
+ const drop = this.deps.getZoom() - effective;
99
+ return drop > 0 ? drop : 0;
100
+ },
101
+ onRemove: (id) => {
102
+ this.datasets.delete(id);
103
+ const at = this.ordered.findIndex((c) => c.id === id);
104
+ if (at >= 0)
105
+ this.ordered.splice(at, 1);
106
+ this.syncViewportSubscription();
107
+ this.deps.onDatasetRemove?.(id);
108
+ },
109
+ });
110
+ this.datasets.set(options.id, dataset);
111
+ // What is added goes to the front of its own side
112
+ this.ordered.splice(this.sideEnd(dataset.order), 0, dataset);
113
+ this.syncViewportSubscription();
114
+ if (dataset.hasProvider) {
115
+ // The first time is fetched through the same path as a change of the displayed range (the
116
+ // debounce)
117
+ dataset.scheduleProviderUpdate(this.deps.getViewportBounds(), this.deps.getZoom());
118
+ }
119
+ this.deps.requestRepaint();
120
+ this.deps.onDatasetAdd?.(options.id);
121
+ return dataset;
122
+ }
123
+ /**
124
+ * Gets a dataset
125
+ */
126
+ get(id) {
127
+ return this.datasets.get(id);
128
+ }
129
+ /**
130
+ * Gets the internal implementation of a dataset
131
+ *
132
+ * It is used by the internal paths (the interception of the hit testing) that perform
133
+ * operations not exposed on the public interface, such as firing an event.
134
+ */
135
+ getInternal(id) {
136
+ return this.datasets.get(id);
137
+ }
138
+ /**
139
+ * Removes a dataset
140
+ *
141
+ * Even with order 'layer-order', the stacking order of the Store is not touched (the manager
142
+ * does not know the Store). Taking the id off the order is the responsibility of the caller.
143
+ * Even if it stays on the order, an id without a dataset is skipped by both the rendering
144
+ * and the hit testing.
145
+ *
146
+ * @returns true when it was removed (false when it does not exist)
147
+ */
148
+ remove(id) {
149
+ const dataset = this.datasets.get(id);
150
+ if (!dataset)
151
+ return false;
152
+ dataset.remove();
153
+ return true;
154
+ }
155
+ /**
156
+ * Reorders a dataset
157
+ *
158
+ * The side (in front of or behind the Store, or taking part in the stacking order) and the
159
+ * position within that side can be changed. Only the order is moved; the visibility, the
160
+ * retained batches held and the state of the provider are not touched at all (no GPU resource
161
+ * is rebuilt).
162
+ *
163
+ * When it is moved to 'layer-order', the stacking order is decided by the stacking order of
164
+ * the Store alone (index takes no part in it). Putting the id on the order is the
165
+ * responsibility of the caller.
166
+ *
167
+ * @returns true when it was moved (false for an id that does not exist)
168
+ */
169
+ move(id, placement) {
170
+ const dataset = this.datasets.get(id);
171
+ if (!dataset)
172
+ return false;
173
+ const from = dataset.order;
174
+ const to = placement.order ?? from;
175
+ // Take it out of its current position first, then decide its position within the destination
176
+ const at = this.ordered.indexOf(dataset);
177
+ if (at >= 0)
178
+ this.ordered.splice(at, 1);
179
+ const start = this.sideStart(to);
180
+ const length = this.sideEnd(to) - start;
181
+ const index = placement.index === undefined ? (to === from ? at - start : length) : placement.index;
182
+ const moved = start + clamp(index, 0, length);
183
+ dataset.setOrder(to);
184
+ this.ordered.splice(moved, 0, dataset);
185
+ if (to === from && moved === at)
186
+ return true;
187
+ this.deps.requestRepaint();
188
+ this.deps.onDatasetsReorder?.(this.ordered.map((c) => c.id));
189
+ return true;
190
+ }
191
+ /**
192
+ * The list of datasets in display order (from the back to the front)
193
+ *
194
+ * They are returned as the below-store group, the layer-order group and the above-store group.
195
+ * The actual stacking order of a layer-order dataset is decided by the stacking order of the
196
+ * Store, so it does not match the order of this list.
197
+ */
198
+ list() {
199
+ return [...this.ordered];
200
+ }
201
+ /**
202
+ * The internal implementations of the datasets in display order (from the back to the front)
203
+ *
204
+ * The element supply of the analytic drape uses it. The truth of the stacking order is the
205
+ * stacking order of the Store, so this list exists to pass on "the classification into sides"
206
+ * and "the order within the same side".
207
+ */
208
+ listInternal() {
209
+ return [...this.ordered];
210
+ }
211
+ /**
212
+ * Reports the datasets that hand their polygons and lines to the analytic drape
213
+ *
214
+ * A dataset that handed them over does not push solid polygons and lines onto its retained
215
+ * batch (so that the same thing is not drawn twice). Passing null makes every dataset draw
216
+ * them itself as before.
217
+ */
218
+ setDrapedDatasets(ids) {
219
+ for (const dataset of this.datasets.values()) {
220
+ dataset.setDrapedFills(ids?.has(dataset.id) === true);
221
+ }
222
+ }
223
+ /**
224
+ * Whether there is at least one dataset (the hidden ones are not counted)
225
+ *
226
+ * The interception of the hit testing and the unified z scan only work while this is true. It
227
+ * is the short circuit that keeps a map without datasets from paying a cost on every
228
+ * mousemove.
229
+ */
230
+ hasAny() {
231
+ for (const dataset of this.datasets.values()) {
232
+ if (dataset.visible)
233
+ return true;
234
+ }
235
+ return false;
236
+ }
237
+ /**
238
+ * Starts a frame, before anything of it is drawn
239
+ *
240
+ * Each dataset decides the zoom band of its collision thinning from the zoom the frame draws
241
+ * with, so every layer of the frame reads the rows the frame draws.
242
+ *
243
+ * @param zoom The zoom the frame draws with
244
+ */
245
+ beginFrame(zoom) {
246
+ for (const dataset of this.ordered)
247
+ dataset.beginFrame(zoom);
248
+ }
249
+ /**
250
+ * Whether work remains that will change what the datasets draw without the host doing anything:
251
+ * a chunk the most recent frame left unbuilt, a huge polygon still being triangulated, or a
252
+ * call of a provider waiting for its debounce or its response
253
+ */
254
+ hasPendingWork() {
255
+ if ((this.deps.triangulationScheduler?.pendingCount ?? 0) > 0)
256
+ return true;
257
+ for (const dataset of this.ordered) {
258
+ if (dataset.hasPendingWork)
259
+ return true;
260
+ }
261
+ return false;
262
+ }
263
+ /**
264
+ * Draws the datasets of the given side in display order (from the back to the front)
265
+ *
266
+ * The 'layer-order' side is not drawn on this path (it is drawn from `drawOne` at its position
267
+ * within the stacking order).
268
+ *
269
+ * @param bounds The bbox of the expanded viewport that the rendering loop computed once.
270
+ * When omitted it is looked up from deps at the point it becomes necessary
271
+ */
272
+ draw(order, target, projectionData, zoom, bounds) {
273
+ if (this.ordered.length === 0)
274
+ return;
275
+ let resolved = bounds;
276
+ for (let i = this.sideStart(order); i < this.sideEnd(order); i++) {
277
+ if (resolved === undefined)
278
+ resolved = this.deps.getViewportBounds();
279
+ this.ordered[i].draw(target, projectionData, zoom, resolved);
280
+ }
281
+ }
282
+ /**
283
+ * Draws a dataset as one entry of the stacking order
284
+ *
285
+ * Only a dataset whose order is 'layer-order' is drawn. Nothing happens for an id that does
286
+ * not exist or for a dataset on another side (the rendering loop skips that entry).
287
+ *
288
+ * @returns true when it was a drawing target
289
+ */
290
+ drawOne(id, target, projectionData, zoom, bounds) {
291
+ const dataset = this.datasets.get(id);
292
+ if (dataset?.order !== 'layer-order')
293
+ return false;
294
+ dataset.draw(target, projectionData, zoom, bounds ?? this.deps.getViewportBounds());
295
+ return true;
296
+ }
297
+ /**
298
+ * Returns the frontmost hit of the given side
299
+ *
300
+ * It looks through the side from the back (the front) onwards. A hidden dataset is skipped,
301
+ * but a dataset that is not interactive is not skipped (everything visible blocks). A
302
+ * dataset that cannot fire an event is returned with feature set to null.
303
+ */
304
+ hitTestSide(order, coordinate, toleranceLngLat, test) {
305
+ for (let i = this.sideEnd(order) - 1; i >= this.sideStart(order); i--) {
306
+ const hit = this.hitTestDataset(this.ordered[i], coordinate, toleranceLngLat, test);
307
+ if (hit)
308
+ return hit;
309
+ }
310
+ return null;
311
+ }
312
+ /**
313
+ * Returns the hit as one entry of the stacking order
314
+ *
315
+ * Only a dataset whose order is 'layer-order' is a target (an id that does not exist and a
316
+ * dataset on another side give null).
317
+ */
318
+ hitTestEntry(id, coordinate, toleranceLngLat, test) {
319
+ const dataset = this.datasets.get(id);
320
+ if (dataset?.order !== 'layer-order')
321
+ return null;
322
+ return this.hitTestDataset(dataset, coordinate, toleranceLngLat, test);
323
+ }
324
+ /**
325
+ * Decides the hit of a single dataset
326
+ */
327
+ hitTestDataset(dataset, coordinate, toleranceLngLat, test) {
328
+ if (!dataset.visible)
329
+ return null;
330
+ const hit = dataset.hitTestRow(coordinate, toleranceLngLat, test);
331
+ if (!hit)
332
+ return null;
333
+ // It blocks even when it is not interactive, but it cannot fire an event, so this is null
334
+ return dataset.interactive
335
+ ? { dataset, feature: hit.feature, row: hit.row }
336
+ : { dataset, feature: null, row: null };
337
+ }
338
+ /**
339
+ * The index of the start of a side (the range within the display order)
340
+ */
341
+ sideStart(order) {
342
+ if (order === 'below-store')
343
+ return 0;
344
+ const counts = this.sideCounts();
345
+ return order === 'layer-order' ? counts.below : counts.below + counts.layerOrder;
346
+ }
347
+ /**
348
+ * The index just past the end of a side
349
+ */
350
+ sideEnd(order) {
351
+ if (order === 'above-store')
352
+ return this.ordered.length;
353
+ const counts = this.sideCounts();
354
+ return order === 'below-store' ? counts.below : counts.below + counts.layerOrder;
355
+ }
356
+ /**
357
+ * The number of datasets of the first 2 sides (used to compute the boundaries of the sides)
358
+ */
359
+ sideCounts() {
360
+ let below = 0;
361
+ let layerOrder = 0;
362
+ for (const dataset of this.ordered) {
363
+ if (dataset.order === 'below-store')
364
+ below++;
365
+ else if (dataset.order === 'layer-order')
366
+ layerOrder++;
367
+ }
368
+ return { below, layerOrder };
369
+ }
370
+ /**
371
+ * Releases the retained-mode GPU resources of every dataset
372
+ *
373
+ * It is called when the rendering layer is disposed (the onRemove of CustomLayer). The
374
+ * datasets themselves remain, so they are built again on the next draw once the layer is
375
+ * recreated.
376
+ */
377
+ disposeRetained() {
378
+ for (const dataset of this.datasets.values()) {
379
+ dataset.disposeRetained();
380
+ }
381
+ }
382
+ /**
383
+ * Disposes every dataset
384
+ */
385
+ destroy() {
386
+ this.destroyed = true;
387
+ for (const dataset of [...this.datasets.values()]) {
388
+ dataset.dispose();
389
+ }
390
+ this.datasets.clear();
391
+ this.ordered = [];
392
+ this.syncViewportSubscription();
393
+ }
394
+ /**
395
+ * Rewires the subscription to the changes of the displayed range to whether any dataset
396
+ * needs them (the datasets that have a provider)
397
+ */
398
+ syncViewportSubscription() {
399
+ let needed = false;
400
+ for (const dataset of this.datasets.values()) {
401
+ if (dataset.needsViewportUpdates) {
402
+ needed = true;
403
+ break;
404
+ }
405
+ }
406
+ if (needed && !this.unsubscribeViewport) {
407
+ this.unsubscribeViewport = this.deps.onViewportChange(() => this.handleViewportChange());
408
+ }
409
+ else if (!needed && this.unsubscribeViewport) {
410
+ this.unsubscribeViewport();
411
+ this.unsubscribeViewport = null;
412
+ }
413
+ }
414
+ /** Schedules the call of the providers when the displayed range changed */
415
+ handleViewportChange() {
416
+ const bounds = this.deps.getViewportBounds();
417
+ const zoom = this.deps.getZoom();
418
+ for (const dataset of this.datasets.values()) {
419
+ if (dataset.hasProvider) {
420
+ dataset.scheduleProviderUpdate(bounds, zoom);
421
+ }
422
+ }
423
+ }
424
+ }
425
+ /**
426
+ * Clamps a value into a range
427
+ */
428
+ function clamp(value, min, max) {
429
+ if (!Number.isFinite(value))
430
+ return min;
431
+ return Math.min(Math.max(Math.trunc(value), min), max);
432
+ }
433
+ /**
434
+ * Creates a manager
435
+ *
436
+ * @internal
437
+ */
438
+ export function createDatasetManager(deps) {
439
+ return new DatasetManager(deps);
440
+ }
@@ -0,0 +1 @@
1
+ export {};