@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,390 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * The renderer-specific uniforms of the SDF line program, with a record of the values written
5
+ * last
6
+ *
7
+ * The projection uniforms are handled by ProjectionUniformManager; this covers the line width,
8
+ * the zoom, the viewport, the miter limit, the coordinate texture, the subdivision count, the
9
+ * dash pattern, and the draw-time factors. Writes of the same value are skipped within a frame
10
+ * (see shaders/frame.ts).
11
+ */
12
+ import { getDashPattern, RENDERING_DEFAULTS } from '../../../shared/math/index.js';
13
+ import { getRenderFrame } from '../../shaders/frame.js';
14
+ /**
15
+ * The uniform locations of one SDF line program and the values written to them last
16
+ *
17
+ * @internal
18
+ */
19
+ export class LineUniforms {
20
+ constructor(gl) {
21
+ Object.defineProperty(this, "gl", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: gl
26
+ });
27
+ // Uniform locations (renderer-specific)
28
+ // Color and opacity are instance attributes, so they have no uniforms
29
+ Object.defineProperty(this, "widthLoc", {
30
+ enumerable: true,
31
+ configurable: true,
32
+ writable: true,
33
+ value: null
34
+ });
35
+ Object.defineProperty(this, "viewportLoc", {
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ value: null
40
+ });
41
+ Object.defineProperty(this, "miterLimitLoc", {
42
+ enumerable: true,
43
+ configurable: true,
44
+ writable: true,
45
+ value: null
46
+ });
47
+ Object.defineProperty(this, "coordTexLoc", {
48
+ enumerable: true,
49
+ configurable: true,
50
+ writable: true,
51
+ value: null
52
+ });
53
+ Object.defineProperty(this, "texSizeLoc", {
54
+ enumerable: true,
55
+ configurable: true,
56
+ writable: true,
57
+ value: null
58
+ });
59
+ Object.defineProperty(this, "dashArrayLoc", {
60
+ enumerable: true,
61
+ configurable: true,
62
+ writable: true,
63
+ value: null
64
+ });
65
+ Object.defineProperty(this, "dashEnabledLoc", {
66
+ enumerable: true,
67
+ configurable: true,
68
+ writable: true,
69
+ value: null
70
+ });
71
+ Object.defineProperty(this, "zoomLoc", {
72
+ enumerable: true,
73
+ configurable: true,
74
+ writable: true,
75
+ value: null
76
+ });
77
+ Object.defineProperty(this, "sizeScaleLoc", {
78
+ enumerable: true,
79
+ configurable: true,
80
+ writable: true,
81
+ value: null
82
+ });
83
+ Object.defineProperty(this, "opacityLoc", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: null
88
+ });
89
+ Object.defineProperty(this, "stationsLoc", {
90
+ enumerable: true,
91
+ configurable: true,
92
+ writable: true,
93
+ value: null
94
+ });
95
+ Object.defineProperty(this, "stationMercatorLoc", {
96
+ enumerable: true,
97
+ configurable: true,
98
+ writable: true,
99
+ value: null
100
+ });
101
+ // A record of the renderer-specific uniforms written last (for memoization within a frame)
102
+ //
103
+ // Retained mode passes through here once per chunk, but the viewport, the miter limit, and
104
+ // the sampler unit are invariant within a frame. Writes of the same value are skipped, and
105
+ // they are rewritten once the frame changes (see shaders/frame.ts).
106
+ Object.defineProperty(this, "memoViewportFrame", {
107
+ enumerable: true,
108
+ configurable: true,
109
+ writable: true,
110
+ value: -1
111
+ });
112
+ Object.defineProperty(this, "memoViewportWidth", {
113
+ enumerable: true,
114
+ configurable: true,
115
+ writable: true,
116
+ value: Number.NaN
117
+ });
118
+ Object.defineProperty(this, "memoViewportHeight", {
119
+ enumerable: true,
120
+ configurable: true,
121
+ writable: true,
122
+ value: Number.NaN
123
+ });
124
+ Object.defineProperty(this, "memoFrame", {
125
+ enumerable: true,
126
+ configurable: true,
127
+ writable: true,
128
+ value: -1
129
+ });
130
+ Object.defineProperty(this, "memoWidth", {
131
+ enumerable: true,
132
+ configurable: true,
133
+ writable: true,
134
+ value: Number.NaN
135
+ });
136
+ Object.defineProperty(this, "memoZoom", {
137
+ enumerable: true,
138
+ configurable: true,
139
+ writable: true,
140
+ value: Number.NaN
141
+ });
142
+ Object.defineProperty(this, "memoMiterLimit", {
143
+ enumerable: true,
144
+ configurable: true,
145
+ writable: true,
146
+ value: Number.NaN
147
+ });
148
+ Object.defineProperty(this, "memoTexSize", {
149
+ enumerable: true,
150
+ configurable: true,
151
+ writable: true,
152
+ value: Number.NaN
153
+ });
154
+ Object.defineProperty(this, "memoStations", {
155
+ enumerable: true,
156
+ configurable: true,
157
+ writable: true,
158
+ value: Number.NaN
159
+ });
160
+ Object.defineProperty(this, "memoStationMercator", {
161
+ enumerable: true,
162
+ configurable: true,
163
+ writable: true,
164
+ value: Number.NaN
165
+ });
166
+ Object.defineProperty(this, "memoCoordTexUnit", {
167
+ enumerable: true,
168
+ configurable: true,
169
+ writable: true,
170
+ value: Number.NaN
171
+ });
172
+ Object.defineProperty(this, "memoDashFrame", {
173
+ enumerable: true,
174
+ configurable: true,
175
+ writable: true,
176
+ value: -1
177
+ });
178
+ Object.defineProperty(this, "memoDashEnabled", {
179
+ enumerable: true,
180
+ configurable: true,
181
+ writable: true,
182
+ value: Number.NaN
183
+ });
184
+ Object.defineProperty(this, "memoDashLength", {
185
+ enumerable: true,
186
+ configurable: true,
187
+ writable: true,
188
+ value: Number.NaN
189
+ });
190
+ Object.defineProperty(this, "memoDashGap", {
191
+ enumerable: true,
192
+ configurable: true,
193
+ writable: true,
194
+ value: Number.NaN
195
+ });
196
+ Object.defineProperty(this, "memoFactorsFrame", {
197
+ enumerable: true,
198
+ configurable: true,
199
+ writable: true,
200
+ value: -1
201
+ });
202
+ Object.defineProperty(this, "memoSizeScale", {
203
+ enumerable: true,
204
+ configurable: true,
205
+ writable: true,
206
+ value: Number.NaN
207
+ });
208
+ Object.defineProperty(this, "memoOpacity", {
209
+ enumerable: true,
210
+ configurable: true,
211
+ writable: true,
212
+ value: Number.NaN
213
+ });
214
+ }
215
+ /**
216
+ * Reads the uniform locations of a (re)created program and discards the record
217
+ *
218
+ * A recreated program also resets its uniforms to their initial values.
219
+ */
220
+ bind(program) {
221
+ this.widthLoc = this.gl.getUniformLocation(program, 'u_width');
222
+ this.viewportLoc = this.gl.getUniformLocation(program, 'u_viewport');
223
+ this.miterLimitLoc = this.gl.getUniformLocation(program, 'u_miter_limit');
224
+ this.coordTexLoc = this.gl.getUniformLocation(program, 'u_coord_tex');
225
+ this.texSizeLoc = this.gl.getUniformLocation(program, 'u_tex_size');
226
+ this.dashArrayLoc = this.gl.getUniformLocation(program, 'u_dashArray');
227
+ this.dashEnabledLoc = this.gl.getUniformLocation(program, 'u_dashEnabled');
228
+ this.zoomLoc = this.gl.getUniformLocation(program, 'u_zoom');
229
+ this.sizeScaleLoc = this.gl.getUniformLocation(program, 'u_size_scale');
230
+ this.opacityLoc = this.gl.getUniformLocation(program, 'u_opacity');
231
+ this.stationsLoc = this.gl.getUniformLocation(program, 'u_stations');
232
+ this.stationMercatorLoc = this.gl.getUniformLocation(program, 'u_station_mercator');
233
+ this.reset();
234
+ }
235
+ /**
236
+ * Discards the record of the values written last
237
+ */
238
+ reset() {
239
+ this.memoViewportFrame = -1;
240
+ this.memoViewportWidth = Number.NaN;
241
+ this.memoViewportHeight = Number.NaN;
242
+ this.memoFrame = -1;
243
+ this.memoWidth = Number.NaN;
244
+ this.memoZoom = Number.NaN;
245
+ this.memoMiterLimit = Number.NaN;
246
+ this.memoTexSize = Number.NaN;
247
+ this.memoStations = Number.NaN;
248
+ this.memoStationMercator = Number.NaN;
249
+ this.memoCoordTexUnit = Number.NaN;
250
+ this.memoDashFrame = -1;
251
+ this.memoDashEnabled = Number.NaN;
252
+ this.memoDashLength = Number.NaN;
253
+ this.memoDashGap = Number.NaN;
254
+ this.memoFactorsFrame = -1;
255
+ this.memoSizeScale = Number.NaN;
256
+ this.memoOpacity = Number.NaN;
257
+ }
258
+ /**
259
+ * Writes the viewport (not rewritten when the value is the same)
260
+ */
261
+ setViewport(width, height) {
262
+ if (!this.viewportLoc)
263
+ return;
264
+ const frame = getRenderFrame();
265
+ if (this.memoViewportFrame === frame &&
266
+ this.memoViewportWidth === width &&
267
+ this.memoViewportHeight === height) {
268
+ return;
269
+ }
270
+ this.gl.uniform2f(this.viewportLoc, width, height);
271
+ this.memoViewportWidth = width;
272
+ this.memoViewportHeight = height;
273
+ this.memoViewportFrame = frame;
274
+ }
275
+ /**
276
+ * Writes the uniforms for the line width, the zoom, the miter limit, and the coordinate
277
+ * texture (shared between immediate mode and retained mode; not rewritten when the value is
278
+ * the same)
279
+ *
280
+ * @param stations The number of parts a segment is split into (1 = not split)
281
+ * @param mercatorStations Whether the split points move along the Mercator plane (the
282
+ * globe) rather than along the degrees (the terrain)
283
+ */
284
+ setLineDraw(width, zoomValue, texSize, stations, mercatorStations = false) {
285
+ const gl = this.gl;
286
+ const frame = getRenderFrame();
287
+ const staleFrame = this.memoFrame !== frame;
288
+ if (this.widthLoc && (staleFrame || this.memoWidth !== width)) {
289
+ gl.uniform1f(this.widthLoc, width);
290
+ this.memoWidth = width;
291
+ }
292
+ if (this.zoomLoc && (staleFrame || this.memoZoom !== zoomValue)) {
293
+ gl.uniform1f(this.zoomLoc, zoomValue);
294
+ this.memoZoom = zoomValue;
295
+ }
296
+ if (this.miterLimitLoc &&
297
+ (staleFrame || this.memoMiterLimit !== RENDERING_DEFAULTS.MITER_LIMIT)) {
298
+ gl.uniform1f(this.miterLimitLoc, RENDERING_DEFAULTS.MITER_LIMIT);
299
+ this.memoMiterLimit = RENDERING_DEFAULTS.MITER_LIMIT;
300
+ }
301
+ if (this.texSizeLoc && (staleFrame || this.memoTexSize !== texSize)) {
302
+ gl.uniform1f(this.texSizeLoc, texSize);
303
+ this.memoTexSize = texSize;
304
+ }
305
+ if (this.stationsLoc && (staleFrame || this.memoStations !== stations)) {
306
+ gl.uniform1f(this.stationsLoc, stations);
307
+ this.memoStations = stations;
308
+ }
309
+ const stationMercator = mercatorStations ? 1 : 0;
310
+ if (this.stationMercatorLoc && (staleFrame || this.memoStationMercator !== stationMercator)) {
311
+ gl.uniform1f(this.stationMercatorLoc, stationMercator);
312
+ this.memoStationMercator = stationMercator;
313
+ }
314
+ // The sampler unit (binding the texture is done by the caller every time)
315
+ if (this.coordTexLoc && (staleFrame || this.memoCoordTexUnit !== 0)) {
316
+ gl.uniform1i(this.coordTexLoc, 0);
317
+ this.memoCoordTexUnit = 0;
318
+ }
319
+ this.memoFrame = frame;
320
+ }
321
+ /**
322
+ * Writes the factors used at draw time
323
+ *
324
+ * Uniforms are per-program residual state, so paths that do not use the factors (immediate
325
+ * mode, the Store's retained rendering) always reset them to 1. If the value already written
326
+ * is the same, it is not rewritten.
327
+ */
328
+ setDrawFactors(factors) {
329
+ const gl = this.gl;
330
+ const frame = getRenderFrame();
331
+ const staleFrame = this.memoFactorsFrame !== frame;
332
+ if (this.sizeScaleLoc && (staleFrame || this.memoSizeScale !== factors.scale)) {
333
+ gl.uniform1f(this.sizeScaleLoc, factors.scale);
334
+ this.memoSizeScale = factors.scale;
335
+ }
336
+ if (this.opacityLoc && (staleFrame || this.memoOpacity !== factors.opacity)) {
337
+ gl.uniform1f(this.opacityLoc, factors.opacity);
338
+ this.memoOpacity = factors.opacity;
339
+ }
340
+ this.memoFactorsFrame = frame;
341
+ }
342
+ /**
343
+ * Sets the dash-related uniforms (shared between immediate mode and retained mode)
344
+ *
345
+ * They are not rewritten when the value is the same (lines in retained mode are always
346
+ * solid, so no matter how many chunks are drawn there is no need to rewrite "not dashed").
347
+ *
348
+ * @param pixelRatio Drawing-buffer px per CSS px (the ratio the cumulative distance of the
349
+ * instances was written with)
350
+ */
351
+ setDash(shape, pixelRatio) {
352
+ const gl = this.gl;
353
+ const frame = getRenderFrame();
354
+ const staleFrame = this.memoDashFrame !== frame;
355
+ const dash = resolveDashUniform(shape, pixelRatio);
356
+ const dashEnabled = dash ? 1.0 : 0.0;
357
+ if (this.dashEnabledLoc && (staleFrame || this.memoDashEnabled !== dashEnabled)) {
358
+ gl.uniform1f(this.dashEnabledLoc, dashEnabled);
359
+ this.memoDashEnabled = dashEnabled;
360
+ }
361
+ if (dash && this.dashArrayLoc) {
362
+ const [dashLength, gapLength] = dash;
363
+ if (staleFrame || this.memoDashLength !== dashLength || this.memoDashGap !== gapLength) {
364
+ gl.uniform4fv(this.dashArrayLoc, dash);
365
+ this.memoDashLength = dashLength;
366
+ this.memoDashGap = gapLength;
367
+ }
368
+ }
369
+ this.memoDashFrame = frame;
370
+ }
371
+ }
372
+ /**
373
+ * The value of `u_dashArray` for a batch, or null when the line is solid
374
+ *
375
+ * The dash and the gap are given in CSS px and returned in drawing-buffer px
376
+ * (`[dash, gap, dash + gap, 0]`), the unit of the cumulative distance the vertex shader
377
+ * passes on (`v_linesofar`), so a dash keeps its length in CSS px at any zoom and latitude.
378
+ *
379
+ * @param pixelRatio Drawing-buffer px per CSS px
380
+ *
381
+ * @internal
382
+ */
383
+ export function resolveDashUniform(shape, pixelRatio) {
384
+ const dashPattern = shape.dashArray ?? getDashPattern(shape.lineStyle);
385
+ if (shape.lineStyle === 'solid' || dashPattern.length < 2)
386
+ return null;
387
+ const dash = dashPattern[0] * pixelRatio;
388
+ const gap = dashPattern[1] * pixelRatio;
389
+ return [dash, gap, dash + gap, 0];
390
+ }
@@ -0,0 +1,92 @@
1
+ /**
2
+ * SDFLineRenderer
3
+ *
4
+ * High-quality line rendering using the HHAA (Half-plane Anti-Aliasing) approach
5
+ *
6
+ * Characteristics:
7
+ * - The CPU only passes geographic coordinates
8
+ * - The Mercator transform, projection, normal computation, and miter/bevel joins all run
9
+ * on the GPU
10
+ * - A coordinate texture plus instancing draws multiple lines in one draw call
11
+ * - Offsets are computed in screen space, so the line width is always uniform
12
+ *
13
+ * The renderer class binds the parts together: the types (line-types.ts), the vertex data
14
+ * (line-geometry.ts), the GLSL sources (line-shader.ts), the uniforms (line-uniforms.ts), and
15
+ * the GL resources (line-gl.ts).
16
+ */
17
+ import type { Map as MapLibreMap, ProjectionData } from 'maplibre-gl';
18
+ import type { PixelRatioInput } from '../../../shared/utils/pixel-ratio.js';
19
+ import type { OffsetUniforms, ShaderData } from '../../shaders/helpers.js';
20
+ import { TerrainContext } from '../../terrain/context.js';
21
+ import type { SDFStrokeOptions, SDFStrokeStyle } from './line-types.js';
22
+ export type { Color, LineStyle, SDFStrokeOptions, SDFStrokeStyle, WidthUnit, } from './line-types.js';
23
+ /**
24
+ * SDFLineRenderer
25
+ *
26
+ * Line rendering with the HHAA approach
27
+ */
28
+ export declare class SDFLineRenderer {
29
+ private gl;
30
+ private program;
31
+ private variantName;
32
+ private quadVAO;
33
+ private quadVBO;
34
+ private immCoordTexture;
35
+ /** MAX_TEXTURE_SIZE of the context (read once, 0 = not read yet) */
36
+ private maxTextureSize;
37
+ /**
38
+ * Scratch arrays of the immediate draw of one line (grown, never shrunk)
39
+ *
40
+ * A frame of the immediate path draws every line in view one by one, and allocating two
41
+ * arrays per line puts the garbage collector under pressure on large data.
42
+ */
43
+ private scratchCoords;
44
+ private scratchInstances;
45
+ private immInstanceBuffer;
46
+ private isDrawing;
47
+ private frameCount;
48
+ private uniforms;
49
+ private projectionUniformManager;
50
+ private offsetUniforms;
51
+ /** The injected rendering ratio (read from window each time when not injected) */
52
+ private pixelRatio;
53
+ /** The terrain state of the draw instance this renderer belongs to */
54
+ private readonly terrain;
55
+ constructor(_map: MapLibreMap, gl: WebGL2RenderingContext, pixelRatio?: PixelRatioInput, terrain?: TerrainContext);
56
+ /**
57
+ * Initializes the fixed quad vertex buffer
58
+ */
59
+ private initBuffers;
60
+ /**
61
+ * Ensures the shader
62
+ */
63
+ ensureShader(shaderData: ShaderData): void;
64
+ /**
65
+ * Sets the uniforms for offset mode
66
+ */
67
+ setOffsetUniforms(uniforms: OffsetUniforms): void;
68
+ /**
69
+ * Sets the projection uniforms (supporting offset mode and globe mode)
70
+ * @param projectionData MapLibre's ProjectionData
71
+ * @param zoom The current zoom level (used to switch offset mode)
72
+ */
73
+ private setProjectionUniforms;
74
+ /** The largest side of a coordinate texture this GPU allows (MAX_TEXTURE_SIZE, read once) */
75
+ private textureSizeLimit;
76
+ /**
77
+ * Executes the draw call (processing shared by draw/drawBatch)
78
+ *
79
+ * The coordinate texture and the instance buffer use the persistent immediate-mode
80
+ * resources. Finish the upload into `immCoordTexture` and the `bufferData` into instanceBuffer
81
+ * before calling it.
82
+ */
83
+ private executeDrawCall;
84
+ /**
85
+ * Draws a line
86
+ */
87
+ draw(coords: Array<[number, number]>, style: SDFStrokeStyle, options: SDFStrokeOptions, zoom: number, projectionData?: ProjectionData): void;
88
+ /**
89
+ * Draws a closed path
90
+ */
91
+ drawClosed(coords: Array<[number, number]>, style: SDFStrokeStyle, options: Omit<SDFStrokeOptions, 'closed'>, zoom: number, projectionData?: ProjectionData): void;
92
+ }