@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,97 @@
1
+ /**
2
+ * The chunk of the retained cache and the building and releasing of its batch
3
+ *
4
+ * A chunk is a run of at most STORE_CHUNK_TARGET features of one kind. It owns at most one
5
+ * retained batch (a GPU resource); an immediate chunk owns none and is drawn one feature at a time.
6
+ */
7
+ import type { Feature, Layer } from '../../store/types.js';
8
+ import type { RetainedLineBatch } from '../renderers/line/line-types.js';
9
+ import { type RetainedPointBatch } from '../renderers/point/point-instance.js';
10
+ import type { RetainedPolygonBatch } from '../renderers/polygon/sdf-polygon.js';
11
+ import type { RetainedRendererSet } from '../renderers/retained.js';
12
+ import type { ChunkBBox } from './store-retained-bbox.js';
13
+ import type { RunKind } from './store-retained-classify.js';
14
+ import { type CoordPatch, type LineCoordSlot } from './store-retained-coord-patch.js';
15
+ /** Upper limit of the number of features per chunk */
16
+ export declare const STORE_CHUNK_TARGET = 512;
17
+ /**
18
+ * One chunk (= one retained batch, or a list of features drawn immediately)
19
+ */
20
+ export interface ChunkEntry {
21
+ readonly kind: RunKind;
22
+ readonly featureIds: string[];
23
+ /** The retained batch (null for immediate, or when the contents are empty) */
24
+ line: RetainedLineBatch | null;
25
+ polygon: RetainedPolygonBatch | null;
26
+ point: RetainedPointBatch | null;
27
+ /** Whether a rebuild is needed (the retained batch is not used while this is true) */
28
+ dirty: boolean;
29
+ /**
30
+ * "feature → position in the coordinate texture" of a line chunk
31
+ *
32
+ * Used for the incremental update of vertices. Only the types whose coordinate list goes in as
33
+ * one contiguous run (LineString / Freehand) are recorded. It is null for anything but a line
34
+ * chunk and for a chunk without a batch.
35
+ */
36
+ lineOffsets: Map<string, LineCoordSlot> | null;
37
+ /**
38
+ * Vertices to write into the coordinate texture on the next draw (the diff during a drag)
39
+ *
40
+ * The chunk does not become dirty while they are queued (it is not rebuilt).
41
+ */
42
+ pendingCoordPatches: CoordPatch[] | null;
43
+ /**
44
+ * Longitude/latitude bbox of every feature in the chunk
45
+ *
46
+ * Used for the thinning by the viewport. It is null for a chunk without a single coordinate,
47
+ * and such a chunk is always drawn without thinning (the safe side).
48
+ */
49
+ bbox: ChunkBBox | null;
50
+ /**
51
+ * The origin the retained batch was built with (null before the first build)
52
+ *
53
+ * The vertices are baked relative to it, so the precision on screen depends on how far it is
54
+ * from what is on screen (see `view/shaders/retained-origin.ts`).
55
+ */
56
+ origin: [number, number] | null;
57
+ /**
58
+ * The origin chosen for the view by the last rebase (null = the center of the bbox)
59
+ *
60
+ * Kept across rebuilds, so a change of the data does not move the origin away from the view.
61
+ */
62
+ viewOrigin: [number, number] | null;
63
+ /** The frame of the last rebase (a chunk is rebased at most once per frame) */
64
+ rebasedFrame: number;
65
+ }
66
+ /**
67
+ * Cache for a single layer
68
+ */
69
+ export interface LayerCache {
70
+ readonly chunks: ChunkEntry[];
71
+ /** featureId → chunk index (for partial invalidation) */
72
+ readonly featureToChunk: Map<string, number>;
73
+ }
74
+ /** Result of building a chunk */
75
+ export type ChunkBuildResult =
76
+ /** A retained batch was built */
77
+ 'built'
78
+ /** There was nothing to draw (no retained batch is needed) */
79
+ | 'empty'
80
+ /** The GPU resource could not be created (shaders not initialized). Retry on the next frame */
81
+ | 'retry'
82
+ /** The classification disagreed with the kind of the chunk. Rebuild the whole layer */
83
+ | 'mismatch';
84
+ /**
85
+ * A new chunk of the given kind, waiting for its first build
86
+ */
87
+ export declare function createChunkEntry(kind: RunKind): ChunkEntry;
88
+ /**
89
+ * Builds the retained batch that matches the kind of the chunk
90
+ */
91
+ export declare function buildChunkBatch(chunk: ChunkEntry, features: Feature[], layer: Layer | undefined, origin: [number, number], renderers: RetainedRendererSet): ChunkBuildResult;
92
+ /**
93
+ * Releases the retained batch of a chunk
94
+ *
95
+ * @param renderers Where to release the GPU resources (null = only the references are dropped)
96
+ */
97
+ export declare function disposeChunkBatches(chunk: ChunkEntry, renderers: RetainedRendererSet | null): void;
@@ -0,0 +1,94 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { toInstancedPointShape, } from '../renderers/point/point-instance.js';
4
+ import { collectLineItems, collectPoints, collectPolygons } from './store-retained-collect.js';
5
+ import { computeLineCoordSlots, } from './store-retained-coord-patch.js';
6
+ /** Upper limit of the number of features per chunk */
7
+ export const STORE_CHUNK_TARGET = 512;
8
+ /**
9
+ * A new chunk of the given kind, waiting for its first build
10
+ */
11
+ export function createChunkEntry(kind) {
12
+ return {
13
+ kind,
14
+ featureIds: [],
15
+ line: null,
16
+ polygon: null,
17
+ point: null,
18
+ dirty: true,
19
+ lineOffsets: null,
20
+ pendingCoordPatches: null,
21
+ bbox: null,
22
+ origin: null,
23
+ viewOrigin: null,
24
+ rebasedFrame: -1,
25
+ };
26
+ }
27
+ /**
28
+ * Builds the retained batch that matches the kind of the chunk
29
+ */
30
+ export function buildChunkBatch(chunk, features, layer, origin, renderers) {
31
+ const styles = renderers.styles;
32
+ if (chunk.kind === 'line') {
33
+ const items = collectLineItems(features, styles, layer);
34
+ if (items.length === 0)
35
+ return 'empty';
36
+ const batch = renderers.line.buildRetainedBatch(items, { lineStyle: 'solid' }, { origin });
37
+ if (!batch)
38
+ return 'retry';
39
+ chunk.line = batch;
40
+ // Index table used for the incremental update of a vertex drag (kept in step with the order
41
+ // of items)
42
+ chunk.lineOffsets = computeLineCoordSlots(features);
43
+ return 'built';
44
+ }
45
+ if (chunk.kind === 'polygon') {
46
+ const polygons = collectPolygons(features, styles, layer);
47
+ if (polygons.length === 0)
48
+ return 'empty';
49
+ const batch = renderers.polygon.buildRetained(polygons, { origin });
50
+ if (!batch)
51
+ return 'retry';
52
+ chunk.polygon = batch;
53
+ return 'built';
54
+ }
55
+ const shape = pointShapeOfRun(chunk.kind);
56
+ if (shape) {
57
+ const points = collectPoints(features, styles, layer);
58
+ if (points.length === 0)
59
+ return 'empty';
60
+ const batch = renderers.point.buildRetained(points, shape, { origin });
61
+ if (!batch)
62
+ return 'retry';
63
+ chunk.point = batch;
64
+ return 'built';
65
+ }
66
+ return 'empty';
67
+ }
68
+ /**
69
+ * The point shape of a point run (null for any other kind)
70
+ */
71
+ function pointShapeOfRun(kind) {
72
+ return kind.startsWith('point-') ? toInstancedPointShape(kind.slice('point-'.length)) : null;
73
+ }
74
+ /**
75
+ * Releases the retained batch of a chunk
76
+ *
77
+ * @param renderers Where to release the GPU resources (null = only the references are dropped)
78
+ */
79
+ export function disposeChunkBatches(chunk, renderers) {
80
+ if (renderers) {
81
+ if (chunk.polygon)
82
+ renderers.polygon.disposeRetained(chunk.polygon);
83
+ if (chunk.line)
84
+ renderers.line.disposeRetainedBatch(chunk.line);
85
+ if (chunk.point)
86
+ renderers.point.disposeRetained(chunk.point);
87
+ }
88
+ chunk.polygon = null;
89
+ chunk.line = null;
90
+ chunk.point = null;
91
+ // Once the batch is gone, both the index table and the queued patches lose their meaning
92
+ chunk.lineOffsets = null;
93
+ chunk.pendingCoordPatches = null;
94
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Classification of the Store features into runs
3
+ *
4
+ * A run is a sequence of features that the BatchManager of immediate mode would draw in one
5
+ * batch. Cutting the feature list where the kind changes keeps the z-order of retained mode
6
+ * identical to immediate mode.
7
+ */
8
+ import type { Feature, Layer } from '../../store/types.js';
9
+ import type { FeatureCompanionRegistry } from '../feature-companion.js';
10
+ import { type PointShape } from '../renderers/point/point-instance.js';
11
+ import type { RetainedStyleResolver } from '../renderers/retained.js';
12
+ /**
13
+ * Kind of a run
14
+ *
15
+ * It is matched with the unit at which the BatchManager of immediate mode flushes a batch (the
16
+ * batch kind and the point shape). A position where the kind changes becomes a run boundary.
17
+ */
18
+ export type RunKind = 'polygon' | 'line' | `point-${PointShape}` | 'immediate';
19
+ /**
20
+ * Classifies a feature into the kind of its run
21
+ *
22
+ * It copies the batch kinds, the flush rules and the fallback rules of immediate mode
23
+ * (BatchManager.processFeature) as they are. If this drifts from immediate mode the z-order
24
+ * breaks, so keep the conditions here in one-to-one correspondence with the immediate-mode side.
25
+ *
26
+ * @param customTypes Renderers of the custom feature types (a registered type is drawn at once)
27
+ * @param layer The layer it belongs to (used to evaluate the style rules)
28
+ */
29
+ export declare function classifyFeature(feature: Feature, styles: RetainedStyleResolver, customTypes: ReadonlyMap<string, unknown>, companions: FeatureCompanionRegistry, layer?: Layer): RunKind;
30
+ /**
31
+ * Origin of the relative coordinates of a chunk (the representative coordinate of the first
32
+ * feature)
33
+ */
34
+ export declare function featureOrigin(feature: Feature | undefined): [number, number];
@@ -0,0 +1,88 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { toInstancedPointShape } from '../renderers/point/point-instance.js';
4
+ /**
5
+ * Classifies a feature into the kind of its run
6
+ *
7
+ * It copies the batch kinds, the flush rules and the fallback rules of immediate mode
8
+ * (BatchManager.processFeature) as they are. If this drifts from immediate mode the z-order
9
+ * breaks, so keep the conditions here in one-to-one correspondence with the immediate-mode side.
10
+ *
11
+ * @param customTypes Renderers of the custom feature types (a registered type is drawn at once)
12
+ * @param layer The layer it belongs to (used to evaluate the style rules)
13
+ */
14
+ export function classifyFeature(feature, styles, customTypes, companions, layer) {
15
+ // A custom type is drawn immediately (it cannot go on a core batch)
16
+ if (customTypes.has(feature.type))
17
+ return 'immediate';
18
+ // A feature that has a companion (feature companion) needs a hook right before it, so it cannot
19
+ // go on a retained batch. It is split out into an immediate chunk and drawn one at a time (on
20
+ // the assumption that features with a companion are few; if no provider at all is registered
21
+ // this test is false in O(1)).
22
+ if (companions.has(feature))
23
+ return 'immediate';
24
+ switch (feature.type) {
25
+ case 'Point':
26
+ case 'MultiPoint': {
27
+ const shape = toInstancedPointShape(styles.getPointStyle(feature, layer).shape);
28
+ // A shape without instancing support is drawn immediately, one point at a time
29
+ return shape ? `point-${shape}` : 'immediate';
30
+ }
31
+ case 'LineString':
32
+ case 'Freehand':
33
+ case 'MultiLineString': {
34
+ const strokeStyle = styles.getLineStringStrokeStyle(feature, layer);
35
+ // Dashed and dotted lines cannot be retained because their CPU-side splitting depends on
36
+ // the zoom
37
+ return strokeStyle.lineStyle === 'solid' ? 'line' : 'immediate';
38
+ }
39
+ case 'Polygon':
40
+ case 'MultiPolygon':
41
+ case 'Circle': {
42
+ const { strokeStyle } = styles.getPolygonStyles(feature, layer);
43
+ // Only a dashed outline cannot be retained (fill only and a solid outline can be)
44
+ if (strokeStyle.opacity > 0 && strokeStyle.lineStyle !== 'solid')
45
+ return 'immediate';
46
+ return 'polygon';
47
+ }
48
+ default:
49
+ // Kinds that retained mode does not handle, such as Image
50
+ return 'immediate';
51
+ }
52
+ }
53
+ /**
54
+ * Origin of the relative coordinates of a chunk (the representative coordinate of the first
55
+ * feature)
56
+ */
57
+ export function featureOrigin(feature) {
58
+ if (!feature)
59
+ return [0, 0];
60
+ switch (feature.type) {
61
+ case 'MultiPoint': {
62
+ const coord = feature.coordinates[0];
63
+ return coord ? [coord[0], coord[1]] : [0, 0];
64
+ }
65
+ case 'LineString':
66
+ case 'Freehand': {
67
+ const coord = feature.coordinates[0];
68
+ return coord ? [coord[0], coord[1]] : [0, 0];
69
+ }
70
+ case 'MultiLineString': {
71
+ const coord = feature.coordinates[0]?.[0];
72
+ return coord ? [coord[0], coord[1]] : [0, 0];
73
+ }
74
+ case 'Polygon': {
75
+ const coord = feature.coordinates[0]?.[0];
76
+ return coord ? [coord[0], coord[1]] : [0, 0];
77
+ }
78
+ case 'MultiPolygon': {
79
+ const coord = feature.coordinates[0]?.[0]?.[0];
80
+ return coord ? [coord[0], coord[1]] : [0, 0];
81
+ }
82
+ default: {
83
+ // A single coordinate, such as Point / Circle
84
+ const coord = feature.coordinates;
85
+ return Array.isArray(coord) && typeof coord[0] === 'number' ? [coord[0], coord[1]] : [0, 0];
86
+ }
87
+ }
88
+ }
@@ -0,0 +1,24 @@
1
+ import type { Feature, Layer } from '../../store/types.js';
2
+ import type { LineBatchItem } from '../renderers/line/line-types.js';
3
+ import type { PointInstanceDataFull } from '../renderers/point/point-instance.js';
4
+ import type { SDFPolygonBatchData } from '../renderers/polygon/sdf-polygon.js';
5
+ import type { RetainedStyleResolver } from '../renderers/retained.js';
6
+ /**
7
+ * Collects the items of a line batch
8
+ *
9
+ * A feature without createdZoom has to be drawn with a constant width on screen. u_zoom is per
10
+ * batch, so a fixed width is expressed with a negative width (a convention of the shader). This
11
+ * way fixed widths and variable widths can be mixed in the same batch and the z-order is kept.
12
+ */
13
+ export declare function collectLineItems(features: Feature[], styles: RetainedStyleResolver, layer: Layer | undefined): LineBatchItem[];
14
+ /**
15
+ * Collects the data of a polygon batch
16
+ *
17
+ * A fill-only polygon is also pushed as an SDFPolygon without an outline (strokeOpacity = 0).
18
+ * Immediate mode draws it with PolygonBatchRenderer, but the appearance of the fill is the same.
19
+ */
20
+ export declare function collectPolygons(features: Feature[], styles: RetainedStyleResolver, layer: Layer | undefined): SDFPolygonBatchData[];
21
+ /**
22
+ * Collects the data of the point instances
23
+ */
24
+ export declare function collectPoints(features: Feature[], styles: RetainedStyleResolver, layer: Layer | undefined): PointInstanceDataFull[];
@@ -0,0 +1,121 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Conversions from features to the data of a retained batch
5
+ *
6
+ * The same math as the collect functions of display: the style is resolved once at build time
7
+ * and the result is baked into the vertex or instance data of the batch.
8
+ */
9
+ import { generateCirclePolygon } from '../../shared/math/index.js';
10
+ import { getCircleRadius, getCreatedZoom } from '../../shared/utils/property.js';
11
+ import { toLineBatchItem, toPointInstanceData } from '../renderers/batch-manager.js';
12
+ /**
13
+ * createdZoom of a fixed-width feature
14
+ *
15
+ * When the line width is expressed as a negative value the shader ignores createdZoom, so the
16
+ * value itself has no meaning. It is a constant only to decide what goes into the array.
17
+ */
18
+ const FIXED_WIDTH_CREATED_ZOOM = 0;
19
+ /**
20
+ * Collects the items of a line batch
21
+ *
22
+ * A feature without createdZoom has to be drawn with a constant width on screen. u_zoom is per
23
+ * batch, so a fixed width is expressed with a negative width (a convention of the shader). This
24
+ * way fixed widths and variable widths can be mixed in the same batch and the z-order is kept.
25
+ */
26
+ export function collectLineItems(features, styles, layer) {
27
+ const items = [];
28
+ for (const feature of features) {
29
+ const strokeStyle = styles.getLineStringStrokeStyle(feature, layer);
30
+ const createdZoom = getCreatedZoom(feature);
31
+ const push = (coords) => {
32
+ if (!coords || coords.length < 2)
33
+ return;
34
+ const item = toLineBatchItem(coords, feature.id, strokeStyle, createdZoom ?? FIXED_WIDTH_CREATED_ZOOM);
35
+ if (createdZoom === undefined)
36
+ item.strokeWidth = -strokeStyle.width;
37
+ items.push(item);
38
+ };
39
+ if (feature.type === 'MultiLineString') {
40
+ for (const part of feature.coordinates)
41
+ push(part);
42
+ }
43
+ else {
44
+ push(feature.coordinates);
45
+ }
46
+ }
47
+ return items;
48
+ }
49
+ /**
50
+ * Collects the data of a polygon batch
51
+ *
52
+ * A fill-only polygon is also pushed as an SDFPolygon without an outline (strokeOpacity = 0).
53
+ * Immediate mode draws it with PolygonBatchRenderer, but the appearance of the fill is the same.
54
+ */
55
+ export function collectPolygons(features, styles, layer) {
56
+ const polygons = [];
57
+ for (const feature of features) {
58
+ const { fillColor, strokeStyle } = styles.getPolygonStyles(feature, layer);
59
+ const hasStroke = strokeStyle.opacity > 0 && strokeStyle.width > 0;
60
+ const createdZoom = getCreatedZoom(feature);
61
+ // The outline of a feature without createdZoom has a fixed width (the negative convention)
62
+ const strokeWidth = hasStroke
63
+ ? createdZoom === undefined
64
+ ? -strokeStyle.width
65
+ : strokeStyle.width
66
+ : 0;
67
+ const push = (rings, partIndex) => {
68
+ const outerRing = rings?.[0];
69
+ if (!rings || !outerRing || outerRing.length < 3)
70
+ return;
71
+ if (!hasStroke && fillColor[3] <= 0)
72
+ return;
73
+ polygons.push({
74
+ coordinates: rings,
75
+ style: {
76
+ fillColor,
77
+ fillOpacity: 1,
78
+ strokeColor: strokeStyle.color,
79
+ strokeWidth,
80
+ strokeOpacity: hasStroke ? 1 : 0,
81
+ },
82
+ createdZoom: createdZoom ?? FIXED_WIDTH_CREATED_ZOOM,
83
+ featureId: feature.id,
84
+ partIndex,
85
+ });
86
+ };
87
+ if (feature.type === 'MultiPolygon') {
88
+ const parts = feature.coordinates;
89
+ for (let i = 0; i < parts.length; i++)
90
+ push(parts[i], i);
91
+ }
92
+ else if (feature.type === 'Circle') {
93
+ const radiusMeters = getCircleRadius(feature);
94
+ if (!radiusMeters || radiusMeters <= 0)
95
+ continue;
96
+ push([generateCirclePolygon(feature.coordinates, radiusMeters)], 0);
97
+ }
98
+ else {
99
+ push(feature.coordinates, 0);
100
+ }
101
+ }
102
+ return polygons;
103
+ }
104
+ /**
105
+ * Collects the data of the point instances
106
+ */
107
+ export function collectPoints(features, styles, layer) {
108
+ const points = [];
109
+ for (const feature of features) {
110
+ const style = styles.getPointStyle(feature, layer);
111
+ if (feature.type === 'MultiPoint') {
112
+ for (const coord of feature.coordinates) {
113
+ points.push(toPointInstanceData(coord, style));
114
+ }
115
+ }
116
+ else {
117
+ points.push(toPointInstanceData(feature.coordinates, style));
118
+ }
119
+ }
120
+ return points;
121
+ }
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Incremental update of the coordinate texture of a retained line chunk
3
+ *
4
+ * A vertex drag moves only a few vertices. Rebuilding a line chunk with many vertices every frame
5
+ * would overflow the frame, so the diff of the vertices that moved is queued on the chunk and,
6
+ * right before drawing, only the corresponding texels of the coordinate texture are rewritten
7
+ * (see SDFLineRenderer.patchRetainedBatchCoords).
8
+ */
9
+ import type { Coordinate, Feature } from '../../store/types.js';
10
+ import type { RetainedLineBatch } from '../renderers/line/line-types.js';
11
+ import type { SDFLineRenderer } from '../renderers/line/sdf-line.js';
12
+ import type { RetainedLineRenderer } from '../renderers/retained.js';
13
+ import { type ChunkBBox } from './store-retained-bbox.js';
14
+ /**
15
+ * Upper limit of the number of vertices that one update may put into the incremental update of
16
+ * the coordinate texture
17
+ *
18
+ * A change beyond this (moving vertices in bulk, cut and paste) rebuilds the whole chunk.
19
+ * The incremental update targets the case where "one vertex drag moves only a few points".
20
+ */
21
+ export declare const MAX_PATCHED_VERTICES = 8;
22
+ /**
23
+ * Position of a feature within the coordinate texture of a line chunk
24
+ */
25
+ export interface LineCoordSlot {
26
+ /** Serial index of the first texel in the coordinate texture */
27
+ offset: number;
28
+ /** Number of vertices (this many are stored consecutively) */
29
+ count: number;
30
+ }
31
+ /**
32
+ * Diff of one vertex to write back into the coordinate texture
33
+ */
34
+ export interface CoordPatch {
35
+ coordIndex: number;
36
+ lngLat: [number, number];
37
+ }
38
+ /**
39
+ * A line renderer that supports partial updates of the coordinate texture
40
+ *
41
+ * It is not included in `RetainedLineRenderer` (renderers/retained.ts), so whether the
42
+ * implementation is present is checked at runtime before it is used.
43
+ */
44
+ export type LineCoordPatcher = Pick<SDFLineRenderer, 'patchRetainedBatchCoords'>;
45
+ /**
46
+ * Extracts the line renderer if it supports partial updates of the coordinate texture
47
+ */
48
+ export declare function asCoordPatcher(line: RetainedLineRenderer): LineCoordPatcher | null;
49
+ /**
50
+ * Computes the diff of a coordinate list (the indices of the vertices that moved)
51
+ *
52
+ * A vertex drag is an update where "the number of vertices is the same and only a few values
53
+ * differ". Anything else (vertices added or removed, many of them moved) cannot be applied as a
54
+ * diff, so null is returned.
55
+ *
56
+ * The comparison is done in a single pass. If the element references are the same, that vertex
57
+ * has not moved (the Store reuses the arrays of the vertices it does not change). The values are
58
+ * looked at only when the references differ.
59
+ *
60
+ * @param maxChanged Upper limit of the number of changed vertices allowed as a diff
61
+ * @returns The indices of the vertices that moved (an empty array when none moved). null when
62
+ * the number of vertices differs or the upper limit is exceeded
63
+ */
64
+ export declare function computeCoordinateDiff(prev: readonly Coordinate[], next: readonly Coordinate[], maxChanged: number): number[] | null;
65
+ /**
66
+ * Computes the "feature → position in the coordinate texture" of a line chunk
67
+ *
68
+ * The coordinate texture is packed with the coordinates in the order of the items returned by
69
+ * collectLineItems. Therefore this must count in the same order and with the same exclusion rule
70
+ * as collectLineItems (fewer than 2 vertices are not pushed).
71
+ *
72
+ * Only the types where one feature becomes one item and the coordinate list goes in as it is
73
+ * (LineString / Freehand) are recorded. A MultiLineString splits into several items and its
74
+ * indices interleave, so it is not a target of the diff (only the coordinate count is advanced).
75
+ */
76
+ export declare function computeLineCoordSlots(features: readonly Feature[]): Map<string, LineCoordSlot>;
77
+ /**
78
+ * The part of a chunk that the incremental update reads and writes
79
+ *
80
+ * The chunk of the cache satisfies it structurally.
81
+ */
82
+ export interface PatchableLineChunk {
83
+ readonly kind: string;
84
+ line: RetainedLineBatch | null;
85
+ /** Whether a rebuild is needed (a dirty chunk takes no patches) */
86
+ dirty: boolean;
87
+ lineOffsets: Map<string, LineCoordSlot> | null;
88
+ pendingCoordPatches: CoordPatch[] | null;
89
+ bbox: ChunkBBox | null;
90
+ }
91
+ /**
92
+ * Queues a vertex movement as a diff patch against the retained batch
93
+ *
94
+ * It can be queued only when all of the following hold. If even one of them fails, false is
95
+ * returned and the caller rebuilds the whole chunk (rebuilding too much still renders
96
+ * correctly).
97
+ *
98
+ * - A type whose coordinate list goes into the coordinate texture as one contiguous run
99
+ * (LineString / Freehand)
100
+ * - No other item that affects the appearance (properties = the input of the style rules) has
101
+ * changed
102
+ * - The number of vertices is unchanged and between 1 and MAX_PATCHED_VERTICES vertices moved
103
+ * - The chunk it belongs to has a retained line batch and is not waiting for a rebuild
104
+ * - The renderer used for drawing supports partial updates of the coordinate texture
105
+ *
106
+ * The drag being committed (up) does not trigger another rebuild. The patch queued by the last
107
+ * movement becomes the committed value as it is.
108
+ *
109
+ * @param chunk The chunk that carries the feature (undefined when there is none)
110
+ * @param line The line renderer used most recently (null before the first draw)
111
+ */
112
+ export declare function queueCoordPatch(chunk: PatchableLineChunk | undefined, feature: Feature, previous: Feature, line: RetainedLineRenderer | null): boolean;
113
+ /**
114
+ * Applies the queued vertex diff to the coordinate texture
115
+ *
116
+ * It is not called for a chunk thinned away off-screen, but the patches stay queued, so they
117
+ * are all applied on the first frame where the chunk comes into view.
118
+ */
119
+ export declare function flushCoordPatches(chunk: PatchableLineChunk, line: RetainedLineRenderer): void;