@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,504 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { RENDERING_DEFAULTS } from '../../../shared/math/index.js';
4
+ import { resolvePixelRatio } from '../../../shared/utils/pixel-ratio.js';
5
+ import { BufferCache } from '../../cache/buffer.js';
6
+ import { calculateLngLatOffset, createProgram, getProjectionTransitionUniform, OFFSET_MODE_GLSL, } from '../../shaders/helpers.js';
7
+ import { ProjectionUniformManager } from '../../shaders/projection.js';
8
+ import { anchorElevationMeters } from '../../terrain/anchor.js';
9
+ import { TerrainContext } from '../../terrain/context.js';
10
+ import { drawBillboardsWithoutDepth } from './billboard-depth.js';
11
+ import { samplePointShapeRings } from './point-sdf.js';
12
+ // Number of segments that approximate a circle
13
+ const CIRCLE_SEGMENTS = RENDERING_DEFAULTS.CIRCLE_SEGMENTS;
14
+ /**
15
+ * Generates the vertices of a normalized circle (for TRIANGLE_FAN)
16
+ * A shape centered at (0,0) with radius 1
17
+ */
18
+ function generateNormalizedCircleVertices(segments) {
19
+ const vertices = [];
20
+ // Center point
21
+ vertices.push({ x: 0, y: 0 });
22
+ // Points on the outer edge
23
+ for (let i = 0; i <= segments; i++) {
24
+ const angle = (i / segments) * Math.PI * 2;
25
+ vertices.push({
26
+ x: Math.cos(angle),
27
+ y: Math.sin(angle),
28
+ });
29
+ }
30
+ return vertices;
31
+ }
32
+ /**
33
+ * Generates the stroke vertices of a normalized circle (for TRIANGLE_STRIP)
34
+ * Uses an inner radius and an outer radius
35
+ */
36
+ function generateNormalizedCircleStrokeVertices(innerRadius, outerRadius, segments) {
37
+ const vertices = [];
38
+ for (let i = 0; i <= segments; i++) {
39
+ const angle = (i / segments) * Math.PI * 2;
40
+ const cos = Math.cos(angle);
41
+ const sin = Math.sin(angle);
42
+ // Outside
43
+ vertices.push({
44
+ x: cos * outerRadius,
45
+ y: sin * outerRadius,
46
+ });
47
+ // Inside
48
+ vertices.push({
49
+ x: cos * innerRadius,
50
+ y: sin * innerRadius,
51
+ });
52
+ }
53
+ return vertices;
54
+ }
55
+ /**
56
+ * Generates the vertices of a normalized square (for TRIANGLE_FAN)
57
+ */
58
+ function generateNormalizedSquareVertices() {
59
+ return [
60
+ { x: 0, y: 0 }, // center
61
+ { x: -1, y: -1 }, // top-left
62
+ { x: 1, y: -1 }, // top-right
63
+ { x: 1, y: 1 }, // bottom-right
64
+ { x: -1, y: 1 }, // bottom-left
65
+ { x: -1, y: -1 }, // top-left (closing)
66
+ ];
67
+ }
68
+ /**
69
+ * Generates the stroke vertices of a normalized square
70
+ */
71
+ function generateNormalizedSquareStrokeVertices(innerRadius, outerRadius) {
72
+ const vertices = [];
73
+ const corners = [
74
+ { x: -1, y: -1 }, // top-left
75
+ { x: 1, y: -1 }, // top-right
76
+ { x: 1, y: 1 }, // bottom-right
77
+ { x: -1, y: 1 }, // bottom-left
78
+ ];
79
+ for (let i = 0; i <= 4; i++) {
80
+ const corner = corners[i % 4];
81
+ vertices.push({ x: corner.x * outerRadius, y: corner.y * outerRadius });
82
+ vertices.push({ x: corner.x * innerRadius, y: corner.y * innerRadius });
83
+ }
84
+ return vertices;
85
+ }
86
+ /**
87
+ * Generates the fill vertices of a shape normalized to the radius 1 (for TRIANGLE_FAN)
88
+ *
89
+ * The circle and the square fill the radius. The triangle and the star are inscribed in the
90
+ * outer edge (`outerRatio`) and fill the inside of the stroke band, the same boundaries the
91
+ * instanced renderer draws with its distance function. `'icon'` is drawn as a circle.
92
+ */
93
+ function generateFillVertices(shape, outerRatio) {
94
+ switch (shape) {
95
+ case 'square':
96
+ return generateNormalizedSquareVertices();
97
+ case 'triangle':
98
+ case 'star': {
99
+ const { inner } = samplePointShapeRings(shape, outerRatio, outerRatio - 1);
100
+ const ring = inner.map(([x, y]) => ({ x, y }));
101
+ return [{ x: 0, y: 0 }, ...ring, ring[0]];
102
+ }
103
+ default:
104
+ return generateNormalizedCircleVertices(CIRCLE_SEGMENTS);
105
+ }
106
+ }
107
+ /**
108
+ * Generates the stroke vertices of a shape normalized to the radius 1 (for TRIANGLE_STRIP)
109
+ *
110
+ * The stroke is the band between the radius and the outer edge (`outerRatio`); for the triangle
111
+ * and the star, the band of the stroke width inside the outer edge.
112
+ */
113
+ function generateStrokeVertices(shape, outerRatio) {
114
+ switch (shape) {
115
+ case 'square':
116
+ return generateNormalizedSquareStrokeVertices(1, outerRatio);
117
+ case 'triangle':
118
+ case 'star': {
119
+ const rings = samplePointShapeRings(shape, outerRatio, outerRatio - 1);
120
+ const vertices = [];
121
+ for (let i = 0; i <= rings.outer.length; i++) {
122
+ const j = i % rings.outer.length;
123
+ vertices.push({ x: rings.outer[j][0], y: rings.outer[j][1] });
124
+ vertices.push({ x: rings.inner[j][0], y: rings.inner[j][1] });
125
+ }
126
+ return vertices;
127
+ }
128
+ default:
129
+ return generateNormalizedCircleStrokeVertices(1, outerRatio, CIRCLE_SEGMENTS);
130
+ }
131
+ }
132
+ /** Packs vertices into an interleaved Float32Array (x, y) */
133
+ function toVertexData(vertices) {
134
+ const data = new Float32Array(vertices.length * 2);
135
+ for (let i = 0; i < vertices.length; i++) {
136
+ data[i * 2] = vertices[i].x;
137
+ data[i * 2 + 1] = vertices[i].y;
138
+ }
139
+ return data;
140
+ }
141
+ /**
142
+ * The point renderer core uses for point markers (circles, squares, triangles and stars; the
143
+ * shape `'icon'` is drawn as a circle), shared with custom feature renderers.
144
+ *
145
+ * Draws a billboard of a size in CSS px at a `[lng, lat]` position in degrees, converting to
146
+ * clip space on the GPU. Call `ensureShader`, `setOffsetUniforms` and `setProjectionData`
147
+ * before drawing.
148
+ */
149
+ export class PointShapeRenderer {
150
+ constructor(_map, gl, pixelRatio, terrain = new TerrainContext()) {
151
+ Object.defineProperty(this, "gl", {
152
+ enumerable: true,
153
+ configurable: true,
154
+ writable: true,
155
+ value: void 0
156
+ });
157
+ Object.defineProperty(this, "program", {
158
+ enumerable: true,
159
+ configurable: true,
160
+ writable: true,
161
+ value: null
162
+ });
163
+ Object.defineProperty(this, "variantName", {
164
+ enumerable: true,
165
+ configurable: true,
166
+ writable: true,
167
+ value: ''
168
+ });
169
+ Object.defineProperty(this, "bufferCache", {
170
+ enumerable: true,
171
+ configurable: true,
172
+ writable: true,
173
+ value: void 0
174
+ });
175
+ // Projection uniform management
176
+ Object.defineProperty(this, "projectionUniformManager", {
177
+ enumerable: true,
178
+ configurable: true,
179
+ writable: true,
180
+ value: void 0
181
+ });
182
+ // Uniform locations (specific to this renderer)
183
+ Object.defineProperty(this, "colorLoc", {
184
+ enumerable: true,
185
+ configurable: true,
186
+ writable: true,
187
+ value: null
188
+ });
189
+ Object.defineProperty(this, "pointLngLatLoc", {
190
+ enumerable: true,
191
+ configurable: true,
192
+ writable: true,
193
+ value: null
194
+ });
195
+ /** Uniform for the ground elevation of the anchor (meters) */
196
+ Object.defineProperty(this, "anchorElevationLoc", {
197
+ enumerable: true,
198
+ configurable: true,
199
+ writable: true,
200
+ value: null
201
+ });
202
+ Object.defineProperty(this, "sizeClipLoc", {
203
+ enumerable: true,
204
+ configurable: true,
205
+ writable: true,
206
+ value: null
207
+ });
208
+ // ProjectionData
209
+ Object.defineProperty(this, "projectionData", {
210
+ enumerable: true,
211
+ configurable: true,
212
+ writable: true,
213
+ value: null
214
+ });
215
+ // Stores the uniforms for the offset mode
216
+ Object.defineProperty(this, "offsetUniforms", {
217
+ enumerable: true,
218
+ configurable: true,
219
+ writable: true,
220
+ value: null
221
+ });
222
+ /** Injected device pixel ratio (when not injected, it is read from window each time) */
223
+ Object.defineProperty(this, "pixelRatio", {
224
+ enumerable: true,
225
+ configurable: true,
226
+ writable: true,
227
+ value: void 0
228
+ });
229
+ /** The terrain state of the draw instance this renderer belongs to */
230
+ Object.defineProperty(this, "terrain", {
231
+ enumerable: true,
232
+ configurable: true,
233
+ writable: true,
234
+ value: void 0
235
+ });
236
+ this.gl = gl;
237
+ this.pixelRatio = pixelRatio;
238
+ this.terrain = terrain;
239
+ this.projectionUniformManager = new ProjectionUniformManager(gl, { terrain });
240
+ this.bufferCache = new BufferCache(gl);
241
+ }
242
+ /**
243
+ * Ensures the shader exists (recreating it when necessary)
244
+ */
245
+ ensureShader(shaderData) {
246
+ if (this.variantName === shaderData.variantName)
247
+ return;
248
+ if (this.program) {
249
+ this.gl.deleteProgram(this.program);
250
+ }
251
+ this.program = this.createShaderProgram(shaderData.vertexShaderPrelude, shaderData.define);
252
+ this.variantName = shaderData.variantName;
253
+ // Get the projection uniform locations
254
+ this.projectionUniformManager.getLocations(this.program);
255
+ // Get the uniform locations specific to this renderer
256
+ this.colorLoc = this.gl.getUniformLocation(this.program, 'u_color');
257
+ this.pointLngLatLoc = this.gl.getUniformLocation(this.program, 'u_point_offset');
258
+ this.anchorElevationLoc = this.gl.getUniformLocation(this.program, 'u_anchor_elevation_m');
259
+ this.sizeClipLoc = this.gl.getUniformLocation(this.program, 'u_size_clip');
260
+ }
261
+ /**
262
+ * Sets the uniforms for the offset mode
263
+ */
264
+ setOffsetUniforms(uniforms) {
265
+ this.offsetUniforms = uniforms;
266
+ }
267
+ /**
268
+ * Creates the shader program (offset mode)
269
+ */
270
+ createShaderProgram(prelude, define) {
271
+ const projTransitionUniform = getProjectionTransitionUniform(prelude);
272
+ // Vertex shader:
273
+ // - a_offset: the normalized offset (a vertex of the shape)
274
+ // - u_point_offset: the relative coordinates of the point (the offset from the center,
275
+ // computed with 64-bit precision on the CPU side)
276
+ // - u_size_clip: the size in clip space
277
+ const vertexSource = `#version 300 es
278
+ ${prelude}
279
+ ${define}
280
+ ${projTransitionUniform}${OFFSET_MODE_GLSL}
281
+ in vec2 a_offset;
282
+ uniform vec2 u_point_offset;
283
+ uniform vec2 u_size_clip;
284
+ // Ground elevation of the anchor (meters). It comes from the same source as hit testing (CPU)
285
+ uniform float u_anchor_elevation_m;
286
+ void main() {
287
+ // The elevation is not sampled from the DEM atlas; the value passed by the CPU is used as is
288
+ // (two sources make the drawn position and the hit area disagree)
289
+ g_anchor_elevation_m = u_anchor_elevation_m;
290
+ g_anchor_elevation_on = 1.0;
291
+
292
+ // Offset mode: uses the relative coordinates computed with 64-bit precision on the CPU side
293
+ vec4 centerClip = project_position_to_clipspace_from_offset(u_point_offset, u_projection_matrix);
294
+
295
+ // Convert to NDC coordinates and then apply the offset
296
+ vec3 centerNDC = centerClip.xyz / centerClip.w;
297
+
298
+ // Scale the offset by the size in clip space (applied in NDC space)
299
+ vec2 offsetNDC = a_offset * u_size_clip;
300
+
301
+ // Center + offset (in NDC space, w=1)
302
+ gl_Position = vec4(centerNDC.xy + offsetNDC, centerNDC.z, 1.0);
303
+ }`;
304
+ const fragmentSource = `#version 300 es
305
+ precision highp float;
306
+ uniform vec4 u_color;
307
+ out vec4 fragColor;
308
+ void main() {
309
+ fragColor = u_color;
310
+ }`;
311
+ return createProgram(this.gl, vertexSource, fragmentSource);
312
+ }
313
+ /**
314
+ * Sets the projection uniforms (supporting the offset mode and the globe mode)
315
+ * @param zoom The current zoom level (used to switch the offset mode)
316
+ */
317
+ setProjectionUniforms(zoom) {
318
+ if (!this.projectionData)
319
+ return;
320
+ this.projectionUniformManager.setUniforms(this.projectionData, zoom, this.offsetUniforms);
321
+ }
322
+ /**
323
+ * Converts a size in pixels to a size in clip space
324
+ *
325
+ * CSS pixels are converted to device pixels first, and then to clip space. The viewport covers
326
+ * the drawing buffer (in device pixels), so the pixel ratio has to be taken into account.
327
+ */
328
+ pixelsToClipSize(pixels) {
329
+ // Convert CSS pixels to device pixels
330
+ const dpr = resolvePixelRatio(this.pixelRatio);
331
+ const physicalPixels = pixels * dpr;
332
+ // Convert device pixels to clip space (the drawing buffer is what the viewport covers)
333
+ return {
334
+ x: (physicalPixels / this.gl.drawingBufferWidth) * 2,
335
+ y: (physicalPixels / this.gl.drawingBufferHeight) * 2,
336
+ };
337
+ }
338
+ /**
339
+ * Sets the ProjectionData
340
+ */
341
+ setProjectionData(projectionData) {
342
+ this.projectionData = projectionData;
343
+ }
344
+ /**
345
+ * Draws a point
346
+ * @param coord The coordinates [lng, lat]
347
+ * @param style The point style
348
+ * @param zoom The current zoom level
349
+ * @param featureId The feature ID (optional)
350
+ */
351
+ draw(coord, style, zoom, featureId,
352
+ /**
353
+ * The elevation to place it at (meters). When omitted, the ground elevation is used
354
+ *
355
+ * The four corners of the selection box and the rotation handle are placed at the same
356
+ * single height as the box. Picking up the ground height for each of them makes them look as
357
+ * if they float above or sink below the box (billboard).
358
+ */
359
+ elevationMeters) {
360
+ if (!this.program || !this.projectionData)
361
+ return;
362
+ const gl = this.gl;
363
+ const [lng, lat] = coord;
364
+ // Convert the size to clip space
365
+ const radiusClip = this.pixelsToClipSize(style.size / 2);
366
+ // Ratio of the outer edge (radius + stroke width) to the radius. The vertices are normalized
367
+ // to the radius, and the outer edge is the circumradius of the shape
368
+ const radiusPx = style.size / 2;
369
+ const outerRatio = radiusPx > 0 ? (radiusPx + Math.max(0, style.strokeWidth)) / radiusPx : 1;
370
+ gl.useProgram(this.program);
371
+ // Set the projection uniforms
372
+ this.setProjectionUniforms(zoom);
373
+ // Compute the relative coordinates on the CPU side (offset mode: 64-bit precision)
374
+ const centerLngLat = this.offsetUniforms?.centerLngLat ?? [0, 0];
375
+ const pointOffset = calculateLngLatOffset([lng, lat], centerLngLat);
376
+ // Set the relative coordinates
377
+ if (this.pointLngLatLoc) {
378
+ gl.uniform2f(this.pointLngLatLoc, pointOffset[0], pointOffset[1]);
379
+ }
380
+ // Ground elevation of the anchor. It is taken from the same function that hit testing
381
+ // (createCoordinateTransform) goes through, so the drawn position and the hit area match
382
+ // structurally. When terrain is disabled it returns 0, giving the same result as before
383
+ // terrain was introduced.
384
+ if (this.anchorElevationLoc) {
385
+ gl.uniform1f(this.anchorElevationLoc, elevationMeters ?? anchorElevationMeters(this.terrain, lng, lat));
386
+ }
387
+ // Billboards are drawn without the depth test (see the note in billboard-depth.ts). A
388
+ // hand-drawn Point can arrive here through a CustomFeatureRenderer, so wrapping only the
389
+ // instanced side would leave the points of this path as half circles.
390
+ drawBillboardsWithoutDepth(gl, () => {
391
+ // Draw the fill
392
+ if (style.fillOpacity > 0) {
393
+ this.drawFill(radiusClip.x, radiusClip.y, outerRatio, style, featureId);
394
+ }
395
+ // Draw the stroke
396
+ if (style.strokeOpacity > 0 && style.strokeWidth > 0) {
397
+ this.drawStroke(radiusClip.x, radiusClip.y, outerRatio, style, featureId);
398
+ }
399
+ });
400
+ }
401
+ /**
402
+ * Draws the fill
403
+ * The shape geometry is normalized, so it can be cached by shape type (and, for the triangle
404
+ * and the star, whose fill is the inside of the stroke band, by the outer ratio)
405
+ */
406
+ drawFill(radiusX, radiusY, outerRatio, style, featureId) {
407
+ const gl = this.gl;
408
+ // Set the size
409
+ if (this.sizeClipLoc) {
410
+ gl.uniform2f(this.sizeClipLoc, radiusX, radiusY);
411
+ }
412
+ // Set the color
413
+ const color = [
414
+ style.fillColor[0],
415
+ style.fillColor[1],
416
+ style.fillColor[2],
417
+ style.fillColor[3] * style.fillOpacity,
418
+ ];
419
+ if (this.colorLoc) {
420
+ gl.uniform4fv(this.colorLoc, color);
421
+ }
422
+ const insetShape = style.shape === 'triangle' || style.shape === 'star';
423
+ const outerRatioKey = Math.round(outerRatio * 100);
424
+ // Cache key: the shape type only (the shape is normalized, so it does not depend on the
425
+ // position or the size), plus the outer ratio for the shapes whose fill depends on it
426
+ const geometryHash = insetShape ? `${style.shape}:${outerRatioKey}` : style.shape;
427
+ const cacheKey = featureId ? `point:fill:${geometryHash}` : null;
428
+ this.drawShapeGeometry(cacheKey, geometryHash, gl.TRIANGLE_FAN, (ratio) => generateFillVertices(style.shape, ratio), featureId ? outerRatioKey / 100 : outerRatio);
429
+ }
430
+ /**
431
+ * Draws the stroke
432
+ * The stroke geometry depends on outerRatio, so it is cached by shape type + outerRatio
433
+ */
434
+ drawStroke(radiusX, radiusY, outerRatio, style, featureId) {
435
+ const gl = this.gl;
436
+ // Set the size (uses the same radius as the fill)
437
+ if (this.sizeClipLoc) {
438
+ gl.uniform2f(this.sizeClipLoc, radiusX, radiusY);
439
+ }
440
+ // Set the color
441
+ const color = [
442
+ style.strokeColor[0],
443
+ style.strokeColor[1],
444
+ style.strokeColor[2],
445
+ style.strokeColor[3] * style.strokeOpacity,
446
+ ];
447
+ if (this.colorLoc) {
448
+ gl.uniform4fv(this.colorLoc, color);
449
+ }
450
+ // Cache key: the shape type + outerRatio (rounded to two decimal places)
451
+ const outerRatioKey = Math.round(outerRatio * 100);
452
+ const geometryHash = `${style.shape}:${outerRatioKey}`;
453
+ const cacheKey = featureId ? `point:stroke:${geometryHash}` : null;
454
+ this.drawShapeGeometry(cacheKey, geometryHash, gl.TRIANGLE_STRIP, (ratio) => generateStrokeVertices(style.shape, ratio), featureId ? outerRatioKey / 100 : outerRatio);
455
+ }
456
+ /**
457
+ * Draws normalized shape vertices, through the buffer cache when a cache key is given and with
458
+ * a transient buffer otherwise
459
+ */
460
+ drawShapeGeometry(cacheKey, geometryHash, drawMode, build, outerRatio) {
461
+ const gl = this.gl;
462
+ if (cacheKey) {
463
+ const geometry = this.bufferCache.getOrCreate(cacheKey, geometryHash, () => {
464
+ const vertices = build(outerRatio);
465
+ return {
466
+ vertices: toVertexData(vertices),
467
+ vertexCount: vertices.length,
468
+ drawMode,
469
+ stride: 8,
470
+ attributes: [{ index: 0, size: 2, offset: 0 }],
471
+ };
472
+ });
473
+ gl.bindVertexArray(geometry.vao);
474
+ gl.drawArrays(geometry.drawMode, 0, geometry.vertexCount);
475
+ gl.bindVertexArray(null);
476
+ return;
477
+ }
478
+ // No cache (a transient draw)
479
+ const vertices = build(outerRatio);
480
+ const vao = gl.createVertexArray();
481
+ gl.bindVertexArray(vao);
482
+ const buffer = gl.createBuffer();
483
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
484
+ gl.bufferData(gl.ARRAY_BUFFER, toVertexData(vertices), gl.STATIC_DRAW);
485
+ gl.enableVertexAttribArray(0);
486
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
487
+ gl.drawArrays(drawMode, 0, vertices.length);
488
+ gl.bindVertexArray(null);
489
+ gl.deleteBuffer(buffer);
490
+ gl.deleteVertexArray(vao);
491
+ }
492
+ /**
493
+ * Disposes of the resources
494
+ *
495
+ * @internal
496
+ */
497
+ dispose() {
498
+ if (this.program) {
499
+ this.gl.deleteProgram(this.program);
500
+ this.program = null;
501
+ }
502
+ this.bufferCache.dispose();
503
+ }
504
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,46 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Resolution of the style of a point marker
5
+ *
6
+ * The only place that merges the style of a point feature into the default of the instance.
7
+ * Every built-in path reads a point through it (via `FeatureDrawer.getPointStyle`): the
8
+ * immediate batches, the classification of the retained runs, the retained chunks and the
9
+ * datasets. The shape in particular decides which run and which batch a point
10
+ * goes on, so resolving it anywhere else would split the z-order of the paths.
11
+ */
12
+ import { hexToColor } from '../../../shared/utils/color.js';
13
+ /** The shapes a feature may name (`'icon'` belongs to the defaults of an extension) */
14
+ const FEATURE_POINT_SHAPES = new Set(['circle', 'square', 'triangle', 'star']);
15
+ /**
16
+ * The shape a feature names, or undefined when it names none or a value it may not name
17
+ *
18
+ * A style that did not come through an import (set through the API or applied by a replaced
19
+ * store) is not validated, so a stray value falls back to the default here.
20
+ */
21
+ function featurePointShape(style) {
22
+ const shape = style.pointShape;
23
+ return shape !== undefined && FEATURE_POINT_SHAPES.has(shape) ? shape : undefined;
24
+ }
25
+ /**
26
+ * Merges the style of a point feature (already carrying the rule color) into the default
27
+ *
28
+ * The keys of the feature win key by key: `pointColor` becomes the fill, `pointRadius` the
29
+ * size (a diameter), `pointShape` the shape. A key left unset (or a shape that is not one of
30
+ * the four a feature may name) keeps the default.
31
+ *
32
+ * @param style The style of the feature (undefined when it has none)
33
+ * @param defaults The point style of the `style` option of the instance
34
+ *
35
+ * @internal
36
+ */
37
+ export function resolvePointStyle(style, defaults) {
38
+ if (!style)
39
+ return defaults;
40
+ return {
41
+ ...defaults,
42
+ shape: featurePointShape(style) ?? defaults.shape,
43
+ fillColor: style.pointColor ? hexToColor(style.pointColor, 1) : defaults.fillColor,
44
+ size: style.pointRadius ? style.pointRadius * 2 : defaults.size,
45
+ };
46
+ }
@@ -0,0 +1,26 @@
1
+ import type { Coordinate } from '../../../store/types.js';
2
+ import { EarcutCache } from '../../cache/earcut.js';
3
+ import { TerrainContext } from '../../terrain/context.js';
4
+ /** The color type */
5
+ export type Color = [number, number, number, number];
6
+ /** Polygon data for a batch */
7
+ export interface PolygonBatchData {
8
+ coordinates: Coordinate[][];
9
+ color: Color;
10
+ featureId?: string;
11
+ /** The part number used for caching (a part of a MultiPolygon; omitted = 0 for a
12
+ * single polygon) */
13
+ partIndex?: number;
14
+ }
15
+ /**
16
+ * PolygonBatchRenderer
17
+ */
18
+ /**
19
+ * The state of the draw instance a polygon renderer belongs to
20
+ */
21
+ export interface PolygonRendererScope {
22
+ /** The terrain state (an inactive one draws flat) */
23
+ terrain?: TerrainContext;
24
+ /** Triangulation results keyed by feature id (a private cache when omitted) */
25
+ earcut?: EarcutCache;
26
+ }