@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,57 @@
1
+ /**
2
+ * The drawing stages of a frame
3
+ *
4
+ * Every slot draws its segment (`renderSegment`: the analytic drape of the segment, then the
5
+ * per-layer rendering once per copy of the world), and the last slot draws the foreground pass
6
+ * (`renderForeground`: the selection UI, the tentative geometry being drawn and the overlays).
7
+ * The state of the frame is built beforehand by frame-state.ts, and the GL state of the slot is
8
+ * set and restored through gl-state.ts.
9
+ */
10
+ import type { Map as MapLibreMap } from 'maplibre-gl';
11
+ import type { CustomFeatureHandler } from '../../extension/index.js';
12
+ import type { Store } from '../../store/store.js';
13
+ import type { FeatureCompanionRegistry } from '../feature-companion.js';
14
+ import type { TerrainContext } from '../terrain/context.js';
15
+ import type { SelectionScope } from '../ui/selection-scope.js';
16
+ import type { DrapePlanner } from './drape-planner.js';
17
+ import type { FrameState } from './frame-state.js';
18
+ import { renderLayers } from './render.js';
19
+ import type { Renderers } from './renderers.js';
20
+ import type { StoreRetainedCache } from './store-retained.js';
21
+ /**
22
+ * The datasets as the per-layer rendering takes them (the type is owned by
23
+ * render.ts, so this file does not read a type from display/)
24
+ */
25
+ type RenderedDatasets = Parameters<typeof renderLayers>[10];
26
+ /** What the drawing of a frame reads (the engine of the layer, while its GPU side exists) */
27
+ export interface FrameRenderDeps {
28
+ gl: WebGL2RenderingContext;
29
+ renderers: Renderers;
30
+ map: MapLibreMap;
31
+ store: Store;
32
+ terrainContext: TerrainContext;
33
+ drape: DrapePlanner;
34
+ customRenderers: Map<string, CustomFeatureHandler['renderer']>;
35
+ featureCompanions: FeatureCompanionRegistry;
36
+ datasets?: RenderedDatasets;
37
+ storeRetainedCache: StoreRetainedCache | null;
38
+ selectionScope: SelectionScope;
39
+ }
40
+ /**
41
+ * The range [from, to) of the drape elements that corresponds to the segment of a slot
42
+ *
43
+ * The index of the pack being drawn (entryStarts) refers to the stacking order at the moment it
44
+ * was collected. Right after the order changes, the old pack keeps being drawn until the index
45
+ * of the new pack is built, so an entry of the current order may be missing from the index. In
46
+ * that case null is returned and the first slot draws every element (for a few frames they all
47
+ * come out below the external layers).
48
+ */
49
+ export declare function drapeRangeOf(f: Pick<FrameState, 'segments' | 'layerOrder' | 'drapeEntryStarts' | 'drapeAboveStoreStart' | 'drapeElementsTotal'>, index: number): {
50
+ from: number;
51
+ to: number;
52
+ } | null;
53
+ /** One slot (the drape of its segment and the layer rendering) */
54
+ export declare function renderSegment(deps: FrameRenderDeps, f: FrameState, index: number): void;
55
+ /** The foreground pass (drawn by the last slot) */
56
+ export declare function renderForeground(deps: FrameRenderDeps, f: FrameState): void;
57
+ export {};
@@ -0,0 +1,209 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { isInteractionBlocked } from '../../store/lock.js';
4
+ import { setDrapePaintedDatasets, setQuadDrapeFrame, setTerrainRenderState, setTerrainShadeLight, setTerrainSurfacesFlattened, } from '../terrain/state.js';
5
+ import { renderFollowedVertices, renderSelectionUI } from '../ui/selection-ui-drawer.js';
6
+ import { applyDrapeGlState, applySegmentDepthState, applySegmentGlState, enterSymbolGlState, restoreSegmentGlState, resumeDrapeGlState, } from './gl-state.js';
7
+ import { renderLayers } from './render.js';
8
+ /** Makes the renderers draw on one copy of the world */
9
+ function applyCopy(deps, copy) {
10
+ const r = deps.renderers;
11
+ r.shaderInitializer.setProjectionData(copy.projectionData);
12
+ r.shaderInitializer.applyOffsetUniforms(copy.offsetUniforms);
13
+ if (deps.terrainContext.renderState !== copy.terrainState) {
14
+ setTerrainRenderState(deps.terrainContext, copy.terrainState);
15
+ }
16
+ }
17
+ /**
18
+ * The range [from, to) of the drape elements that corresponds to the segment of a slot
19
+ *
20
+ * The index of the pack being drawn (entryStarts) refers to the stacking order at the moment it
21
+ * was collected. Right after the order changes, the old pack keeps being drawn until the index
22
+ * of the new pack is built, so an entry of the current order may be missing from the index. In
23
+ * that case null is returned and the first slot draws every element (for a few frames they all
24
+ * come out below the external layers).
25
+ */
26
+ export function drapeRangeOf(f, index) {
27
+ const segment = f.segments[index];
28
+ const first = index === 0;
29
+ const last = index === f.segments.length - 1;
30
+ const order = f.layerOrder;
31
+ const startOf = (position) => position < order.length ? f.drapeEntryStarts.get(order[position]) : f.drapeAboveStoreStart;
32
+ let from = first ? 0 : startOf(segment.from);
33
+ let to = last ? f.drapeElementsTotal : startOf(segment.to);
34
+ if (from === undefined || to === undefined)
35
+ return null;
36
+ if (segment.from >= segment.to) {
37
+ // An empty segment (an order with nothing drawn by us). If it is both first and last, every
38
+ // element is drawn
39
+ from = first ? 0 : from;
40
+ to = last ? f.drapeElementsTotal : from;
41
+ }
42
+ return { from, to: Math.max(from, to) };
43
+ }
44
+ /**
45
+ * Sectioned drawing of the analytic drape (the element range of this slot, and the images
46
+ * interleaved into that range)
47
+ */
48
+ function drawDrapeSegment(deps, f, index) {
49
+ const { gl, renderers: r, store, drape } = deps;
50
+ const drapeRenderer = drape.renderer;
51
+ if (!drapeRenderer || !f.drapeUsable)
52
+ return;
53
+ const first = index === 0;
54
+ const last = index === f.segments.length - 1;
55
+ if (!f.drapeReady) {
56
+ // The images that were to be interleaved between the sections are drawn here (the first
57
+ // slot only)
58
+ if (first) {
59
+ f.restoreBlendState();
60
+ for (const quadFeature of f.drapeFallbackQuads) {
61
+ r.featureDrawer.drawFeature(quadFeature, f.defaultProjectionData, f.zoom, store.getLayer(quadFeature.layerId) ?? undefined);
62
+ }
63
+ }
64
+ return;
65
+ }
66
+ let range = drapeRangeOf(f, index);
67
+ if (range === null) {
68
+ // A transient state where the index does not fit the current order. The first slot draws
69
+ // every element
70
+ if (!first)
71
+ return;
72
+ range = { from: 0, to: f.drapeElementsTotal };
73
+ }
74
+ const { from, to } = range;
75
+ applyDrapeGlState(gl);
76
+ const drawSegment = (paintFrom, paintTo, emitSelection) => {
77
+ for (const tileDraw of f.drapeTileDraws) {
78
+ drapeRenderer.drawTile(tileDraw.draw, tileDraw.projection, f.drapeLight, f.zoom, drape.sourceFactors, f.dpr, 1, { paintFrom, paintTo, emitSelection });
79
+ }
80
+ };
81
+ // Pick only the images that fall into the range of this slot (an image whose position equals
82
+ // the start of the range belongs to this slot; one that equals the end is picked only by the
83
+ // last slot)
84
+ let paintCursor = from;
85
+ for (const pendingQuad of f.pendingQuads) {
86
+ const inRange = pendingQuad.at >= from && (last ? pendingQuad.at <= to : pendingQuad.at < to);
87
+ if (!inRange)
88
+ continue;
89
+ if (pendingQuad.at > paintCursor) {
90
+ drawSegment(paintCursor, pendingQuad.at, false);
91
+ paintCursor = pendingQuad.at;
92
+ }
93
+ // Interleave the image. The quad drape draws with normal compositing (not premultiplied),
94
+ // so the blending is restored, and the depth test is left raised for the next section
95
+ // (keepDepthTest is true until the foreground). Afterwards the assumptions of the drape are
96
+ // established again.
97
+ f.restoreBlendState();
98
+ r.featureDrawer.drawFeature(pendingQuad.feature, f.defaultProjectionData, f.zoom, store.getLayer(pendingQuad.feature.layerId) ?? undefined);
99
+ resumeDrapeGlState(gl);
100
+ }
101
+ // The final section. The remaining elements, and on the last slot the selection highlight of
102
+ // every element, are drawn on top (the coverage of the selection accumulates regardless of
103
+ // the range, so raising it once is enough). Nothing is drawn when no element is left and
104
+ // there is no selection either (this skips a pointless evaluation of every pixel)
105
+ const hasDrapeSelection = last && drape.hasSelection;
106
+ if (to > paintCursor || hasDrapeSelection) {
107
+ drawSegment(paintCursor, to, last);
108
+ }
109
+ f.restoreBlendState();
110
+ // Back to the depth state of the layer rendering. What the drape could not paint (dashed
111
+ // lines, polygons with a dashed outline, the geometry being drawn, the features of
112
+ // extensions) is drawn next, by the vertex displacement path, and the terrain must hide it
113
+ // as it does in a frame without the drape. Symbols switch the depth test off themselves.
114
+ applySegmentDepthState(gl, deps.terrainContext, f);
115
+ }
116
+ /** One slot (the drape of its segment and the layer rendering) */
117
+ export function renderSegment(deps, f, index) {
118
+ const { gl, renderers: r, store } = deps;
119
+ const segment = f.segments[index];
120
+ const first = index === 0;
121
+ const last = index === f.segments.length - 1;
122
+ applySegmentGlState(gl, deps.terrainContext, f);
123
+ applyCopy(deps, f.baseCopy);
124
+ drawDrapeSegment(deps, f, index);
125
+ // Per-layer rendering (only the segment of this slot), once per copy of the world in view
126
+ for (const copy of f.copies) {
127
+ applyCopy(deps, copy);
128
+ renderLayers(r, store, copy.features, f.selectedIdSet, copy.projectionData, f.zoom, deps.customRenderers, copy.customRendererContext, deps.featureCompanions, f.layerAwareRenderers, deps.datasets, f.useRetained ? (deps.storeRetainedCache ?? undefined) : undefined, f.restoreBlendState, { from: segment.from, to: segment.to, first, last }, copy.view);
129
+ }
130
+ applyCopy(deps, f.baseCopy);
131
+ if (!last)
132
+ restoreSegmentGlState(gl, f);
133
+ }
134
+ /** The foreground pass (drawn by the last slot) */
135
+ export function renderForeground(deps, f) {
136
+ const { gl, renderers: r, store, map, terrainContext } = deps;
137
+ // From the selection UI onwards it is always drawn without depth (the symbols and the UI are
138
+ // not buried in the terrain)
139
+ enterSymbolGlState(gl);
140
+ // The depth is not restored even if a quad is drawn from here on
141
+ if (f.quadDrapeFrame)
142
+ f.quadDrapeFrame.keepDepthTest = false;
143
+ // Selection UI
144
+ // When the editing interaction is blocked (an effective lock, an interaction lock or
145
+ // read-only), only the selection box is drawn and no handles appear (the same look as
146
+ // locked). The box is shown even in read-only or under an interaction lock (so that a viewer
147
+ // also gets the on-map feedback of "what is selected", in the same grammar as the read-only
148
+ // mode of someone with edit permission).
149
+ const selectionLocked = f.selectedFeatures.some((feature) => isInteractionBlocked(feature, store));
150
+ const selectionUIDeps = {
151
+ selectionUIRenderer: r.selectionUIRenderer,
152
+ selectionHandlesRenderer: r.selectionHandlesRenderer,
153
+ pointInstanceRenderer: r.pointInstanceRenderer,
154
+ map,
155
+ scope: deps.selectionScope,
156
+ };
157
+ const tentative = store.getTentative();
158
+ const boxSelection = store.getBoxSelection();
159
+ // Once per copy of the world in view (the selection UI of a feature on the other side of the
160
+ // antimeridian is drawn on the copy the feature is drawn on)
161
+ for (const copy of f.copies) {
162
+ applyCopy(deps, copy);
163
+ renderSelectionUI(copy.selectedFeatures, f.zoom, copy.projectionData, selectionUIDeps, store.getDragState(), store.getSelectedVertices(), selectionLocked);
164
+ // The vertices that follow along when a shared vertex is moved (raised only during a
165
+ // drag). The features that follow are not selected, so they are drawn separately from the
166
+ // selection UI.
167
+ renderFollowedVertices(store.getFollowedVertices?.() ?? null, store, f.zoom, copy.projectionData, selectionUIDeps);
168
+ // Draw the vertices of the tentative in the foreground
169
+ if (tentative) {
170
+ r.tentativeRenderer.drawVertices(tentative, f.zoom);
171
+ }
172
+ // Draw the vertices of the layer-aware renderers in the foreground
173
+ for (const renderer of f.layerAwareRenderers) {
174
+ if (renderer.drawVertices) {
175
+ renderer.drawVertices(copy.projectionData, f.zoom, copy.customRendererContext);
176
+ f.restoreBlendState();
177
+ }
178
+ }
179
+ // Box selection UI (on the stored copy: its corners come from unproject around the
180
+ // camera)
181
+ //
182
+ // This is a rubber band on the screen, so pinning it to the ground would stop it from
183
+ // being a rectangle. Its renderers are built without the terrain (box-selection.ts), so it
184
+ // is drawn flat.
185
+ if (boxSelection && copy.lngShift === 0) {
186
+ r.boxSelectionRenderer.draw(boxSelection, f.defaultProjectionData, f.zoom);
187
+ }
188
+ // Drawing of the overlays that are not layer-aware
189
+ for (const renderer of f.otherRenderers) {
190
+ if (renderer.order === 'overlay' || renderer.order === 'foreground') {
191
+ renderer.draw(copy.projectionData, f.zoom, copy.customRendererContext);
192
+ f.restoreBlendState();
193
+ }
194
+ }
195
+ }
196
+ applyCopy(deps, f.baseCopy);
197
+ restoreSegmentGlState(gl, f);
198
+ // The report of the datasets being painted also lasts only for this frame
199
+ setDrapePaintedDatasets(terrainContext, null);
200
+ // The contract to draw flat lasts only for this frame (it is always restored so that it is
201
+ // not read from outside the rendering)
202
+ setTerrainSurfacesFlattened(terrainContext, false);
203
+ // The light lasts only for this frame as well
204
+ setTerrainShadeLight(terrainContext, null);
205
+ // The entry point of the quads lasts only for this frame (it is always removed so that it is
206
+ // not read from outside the rendering)
207
+ if (f.quadDrapeFrame)
208
+ setQuadDrapeFrame(terrainContext, null);
209
+ }
@@ -0,0 +1,147 @@
1
+ /**
2
+ * The state of one frame
3
+ *
4
+ * The first slot of a frame builds a `FrameState` (`buildFrameState`) and every slot of the
5
+ * frame reads it. It holds only results that do not depend on GL (maplibre resets the GL state
6
+ * for every slot): the zoom, the terrain state, the drape plan of the frame, the features of the
7
+ * immediate path, the selection, the overlay renderers and the copies of the world in view. The
8
+ * drawing of the slots is in frame-render.ts.
9
+ */
10
+ import type { CustomRenderMethodInput, Map as MapLibreMap } from 'maplibre-gl';
11
+ import type { CustomOverlayRenderer, CustomRendererDrawContext, LayerAwareOverlayRenderer } from '../../extension/index.js';
12
+ import type { Store } from '../../store/store.js';
13
+ import type { Feature } from '../../store/types.js';
14
+ import { type OffsetUniforms } from '../shaders/helpers.js';
15
+ import type { TerrainContext, TerrainRenderState } from '../terrain/context.js';
16
+ import type { QuadDrapeFrame } from '../terrain/drape/quad.js';
17
+ import { type DrapeLight } from '../terrain/drape/renderer.js';
18
+ import type { DisplayListCache } from './display-list.js';
19
+ import { type DrapePlanner, type DrapeTileDrawEntry, type MapTerrain, type PendingQuad } from './drape-planner.js';
20
+ import type { RenderLayersView } from './render.js';
21
+ import type { Renderers } from './renderers.js';
22
+ import type { RenderSegment } from './slots.js';
23
+ /**
24
+ * One copy of the world drawn in this frame
25
+ *
26
+ * Away from the antimeridian a frame draws one copy, the stored one (lngShift 0). A view
27
+ * across the antimeridian draws a second copy: the features stored on the other side of the
28
+ * line, moved by 360 degrees, through a virtual camera (the center moved by -lngShift and the
29
+ * matrix by +lngShift; `translateMatrixByLongitude` in shaders/helpers.ts). Everything that
30
+ * is not pinned per terrain tile goes through it: the layers, the datasets, the
31
+ * selection UI and the overlays. The analytic drape is drawn per terrain tile with the matrix
32
+ * maplibre gives each tile (the tiles carry their wrap), so it is drawn once.
33
+ */
34
+ export interface CopyPass {
35
+ readonly lngShift: number;
36
+ /** The part of the view on this copy (undefined = the expanded viewport, one copy) */
37
+ readonly view: RenderLayersView | undefined;
38
+ readonly projectionData: CustomRenderMethodInput['defaultProjectionData'];
39
+ readonly offsetUniforms: OffsetUniforms;
40
+ readonly customRendererContext: CustomRendererDrawContext;
41
+ /** The features drawn in immediate mode on this copy */
42
+ readonly features: Feature[];
43
+ /** The selected features whose selection UI is drawn on this copy */
44
+ readonly selectedFeatures: Feature[];
45
+ /** The terrain state with the DEM atlas placed in the frame of the virtual camera */
46
+ readonly terrainState: TerrainRenderState;
47
+ }
48
+ /**
49
+ * Shared state of one frame
50
+ *
51
+ * The first slot builds it in the preparation and the following slots read it. maplibre resets
52
+ * the GL state for every slot, so only results that do not depend on GL are put here.
53
+ */
54
+ export interface FrameState {
55
+ readonly segments: readonly RenderSegment[];
56
+ readonly layerOrder: readonly string[];
57
+ /** Number of the slot drawn most recently (a new frame when the next slot is at most this) */
58
+ lastIndex: number;
59
+ readonly shaderData: CustomRenderMethodInput['shaderData'];
60
+ readonly defaultProjectionData: CustomRenderMethodInput['defaultProjectionData'];
61
+ readonly getProjectionData: CustomRenderMethodInput['getProjectionData'];
62
+ readonly zoom: number;
63
+ readonly rawZoom: number;
64
+ readonly dpr: number;
65
+ readonly terrainState: TerrainRenderState;
66
+ readonly mapTerrain: MapTerrain;
67
+ readonly centerLngLat: [number, number];
68
+ readonly mainMatrixArray: number[];
69
+ readonly drapeUsable: boolean;
70
+ readonly wideFallback: boolean;
71
+ readonly useRetained: boolean;
72
+ readonly features: Feature[];
73
+ readonly selectedIdSet: Set<string>;
74
+ readonly selectedFeatures: Feature[];
75
+ readonly customRendererContext: CustomRendererDrawContext;
76
+ readonly layerAwareRenderers: LayerAwareOverlayRenderer[];
77
+ readonly otherRenderers: CustomOverlayRenderer[];
78
+ readonly quadDrapeFrame: QuadDrapeFrame | null;
79
+ readonly restoreBlendState: () => void;
80
+ /** Whether the drape can be drawn (the shaders and the plan are ready) */
81
+ readonly drapeReady: boolean;
82
+ readonly drapeLight: DrapeLight;
83
+ readonly drapeTileDraws: DrapeTileDrawEntry[];
84
+ readonly drapeElementsTotal: number;
85
+ readonly drapeAboveStoreStart: number;
86
+ readonly drapeEntryStarts: ReadonlyMap<string, number>;
87
+ readonly pendingQuads: PendingQuad[];
88
+ /**
89
+ * When the drape could not be built, a slot is needed to draw the images that were to be
90
+ * interleaved between the sections
91
+ */
92
+ readonly drapeFallbackQuads: Feature[];
93
+ /** The stored copy (lngShift 0); what everything outside the copies is drawn with */
94
+ readonly baseCopy: CopyPass;
95
+ /** The copies of the world in view (one, or two across the antimeridian) */
96
+ readonly copies: readonly CopyPass[];
97
+ }
98
+ /** The position of the camera: mercator x and y (0..1) and the altitude in meters */
99
+ export type CameraPosition = readonly [number, number, number];
100
+ /** What building a frame reads */
101
+ export interface FrameBuildInput {
102
+ gl: WebGL2RenderingContext;
103
+ renderers: Renderers;
104
+ map: MapLibreMap;
105
+ store: Store;
106
+ terrainContext: TerrainContext;
107
+ displayList: DisplayListCache;
108
+ drape: DrapePlanner;
109
+ renderOptions: CustomRenderMethodInput;
110
+ /** The style zoom of the frame */
111
+ zoom: number;
112
+ /** The real zoom of the camera */
113
+ rawZoom: number;
114
+ dpr: number;
115
+ /** The terrain state of the frame (already set on the terrain context) */
116
+ terrainState: TerrainRenderState;
117
+ /** Whether the retained batches of the Store rendering exist */
118
+ retainedAvailable: boolean;
119
+ overlayRenderers: readonly CustomOverlayRenderer[];
120
+ segments: readonly RenderSegment[];
121
+ }
122
+ /**
123
+ * Builds the state of a frame (done once by the first slot)
124
+ *
125
+ * It sets up the shaders and the anchor projection of the frame, plans the analytic drape,
126
+ * picks the features of the immediate path and the selection, and plans the copies of the world.
127
+ */
128
+ export declare function buildFrameState(input: FrameBuildInput): FrameState;
129
+ /**
130
+ * Plans the copies of the world drawn in this frame
131
+ *
132
+ * One copy (the base one, unchanged) unless the view crosses the antimeridian. Across it,
133
+ * each copy gets its range of the view, the features of that range, the virtual camera
134
+ * (center and matrix moved by the copy's shift, computed in 64 bits) and the DEM atlas in the
135
+ * frame of that camera. The globe draws with maplibre's projectTile, which has no seam, so it
136
+ * keeps one copy.
137
+ */
138
+ export declare function planCopies(baseCopy: CopyPass, options: {
139
+ renderers: Renderers | null;
140
+ displayList: DisplayListCache;
141
+ center: [number, number];
142
+ mainMatrixArray: number[];
143
+ useRetained: boolean;
144
+ excluded: Set<string> | null;
145
+ interleavedQuadIds: Set<string>;
146
+ transition: number;
147
+ }): CopyPass[];