@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,471 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /** The number of offset arrays of each geometry type */
4
+ const OFFSET_LEVELS = {
5
+ Point: 0,
6
+ LineString: 1,
7
+ MultiPoint: 1,
8
+ Polygon: 2,
9
+ MultiLineString: 2,
10
+ MultiPolygon: 3,
11
+ };
12
+ /**
13
+ * Whether a column is a dictionary
14
+ *
15
+ * @internal
16
+ */
17
+ export function isDictionaryColumn(column) {
18
+ return (typeof column === 'object' &&
19
+ column !== null &&
20
+ !Array.isArray(column) &&
21
+ !ArrayBuffer.isView(column) &&
22
+ 'codes' in column);
23
+ }
24
+ /** The number of rows a column holds */
25
+ function columnLength(column) {
26
+ return isDictionaryColumn(column) ? column.codes.length : column.length;
27
+ }
28
+ /**
29
+ * The value of a column at a row
30
+ *
31
+ * A number of a typed array (null for NaN in a floating point column: the way a missing number
32
+ * is usually held), the value of a dictionary (null for a code outside it) or the element of a
33
+ * plain array.
34
+ *
35
+ * @internal
36
+ */
37
+ export function columnValue(column, row) {
38
+ if (isDictionaryColumn(column)) {
39
+ const code = column.codes[row];
40
+ return code >= 0 && code < column.dictionary.length ? column.dictionary[code] : null;
41
+ }
42
+ const value = column[row];
43
+ if ((column instanceof Float64Array || column instanceof Float32Array) && Number.isNaN(value)) {
44
+ return null;
45
+ }
46
+ return value;
47
+ }
48
+ /**
49
+ * A validated geometry column of a single type: the geometry of a table of one type, or one child
50
+ * of a mixed geometry column
51
+ *
52
+ * @internal
53
+ */
54
+ export class ColumnarGeometryColumn {
55
+ /**
56
+ * @param rows The number of rows (the length of the table), or undefined for a child of a mixed
57
+ * column, whose number of rows is read from its arrays
58
+ * @param path Where the column is in the input (`geometry` or `geometry.children[k]`), for the
59
+ * error messages
60
+ * @throws when the shape of the column does not add up
61
+ */
62
+ constructor(geometry, rows, path) {
63
+ Object.defineProperty(this, "type", {
64
+ enumerable: true,
65
+ configurable: true,
66
+ writable: true,
67
+ value: void 0
68
+ });
69
+ Object.defineProperty(this, "coords", {
70
+ enumerable: true,
71
+ configurable: true,
72
+ writable: true,
73
+ value: void 0
74
+ });
75
+ /** The number of values per coordinate (2 or 3) */
76
+ Object.defineProperty(this, "dimensions", {
77
+ enumerable: true,
78
+ configurable: true,
79
+ writable: true,
80
+ value: void 0
81
+ });
82
+ Object.defineProperty(this, "offsets", {
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true,
86
+ value: void 0
87
+ });
88
+ /** The number of rows the column holds */
89
+ Object.defineProperty(this, "length", {
90
+ enumerable: true,
91
+ configurable: true,
92
+ writable: true,
93
+ value: void 0
94
+ });
95
+ // The messages about the geometry of a table of one type keep their short form
96
+ const at = rows === undefined ? `${path}: ` : '';
97
+ if (!geometry || !(geometry.type in OFFSET_LEVELS)) {
98
+ throw new Error(`Columnar input: ${at}unknown geometry type "${geometry?.type}"`);
99
+ }
100
+ if (!(geometry.coords instanceof Float64Array)) {
101
+ throw new Error(`Columnar input: ${path}.coords must be a Float64Array`);
102
+ }
103
+ const dimensions = geometry.dimensions ?? 2;
104
+ if (dimensions !== 2 && dimensions !== 3) {
105
+ throw new Error(`Columnar input: ${at}dimensions must be 2 or 3 (got ${dimensions})`);
106
+ }
107
+ const offsets = geometry.offsets ?? [];
108
+ const levels = OFFSET_LEVELS[geometry.type];
109
+ if (offsets.length !== levels) {
110
+ throw new Error(`Columnar input: ${at}a ${geometry.type} ${rows === undefined ? 'column' : 'table'} has ${levels} offset arrays (got ${offsets.length})`);
111
+ }
112
+ const vertexCount = Math.floor(geometry.coords.length / dimensions);
113
+ let length = rows;
114
+ if (length === undefined) {
115
+ const first = offsets[0];
116
+ length = levels === 0 ? vertexCount : first instanceof Int32Array ? first.length - 1 : 0;
117
+ length = Math.max(0, length);
118
+ }
119
+ // Each level splits the elements of the level above it
120
+ let elements = length;
121
+ for (let level = 0; level < levels; level++) {
122
+ const array = offsets[level];
123
+ if (!(array instanceof Int32Array)) {
124
+ throw new Error(`Columnar input: ${at}offsets[${level}] must be an Int32Array`);
125
+ }
126
+ if (array.length < elements + 1) {
127
+ throw new Error(`Columnar input: ${at}offsets[${level}] has ${array.length} entries for ${elements} elements`);
128
+ }
129
+ elements = array[elements];
130
+ }
131
+ if (elements > vertexCount) {
132
+ throw new Error(`Columnar input: ${at}the offsets reach coordinate ${elements} of ${vertexCount} coordinates`);
133
+ }
134
+ this.type = geometry.type;
135
+ this.coords = geometry.coords;
136
+ this.dimensions = dimensions;
137
+ this.offsets = offsets;
138
+ this.length = length;
139
+ }
140
+ /** The first coordinate of the run of a row */
141
+ vertexStart(row) {
142
+ let at = row;
143
+ for (let level = 0; level < this.offsets.length; level++)
144
+ at = this.offsets[level][at];
145
+ return at;
146
+ }
147
+ /** Coordinate `v` as `[lng, lat]` */
148
+ position(v) {
149
+ const at = v * this.dimensions;
150
+ return [this.coords[at], this.coords[at + 1]];
151
+ }
152
+ /** The coordinates `[from, to)` as an array of positions */
153
+ positions(from, to) {
154
+ const out = new Array(to - from);
155
+ for (let v = from; v < to; v++)
156
+ out[v - from] = this.position(v);
157
+ return out;
158
+ }
159
+ /** The coordinates of a row, shaped as for its geometry type */
160
+ coordinatesOf(row) {
161
+ const o = this.offsets;
162
+ switch (this.type) {
163
+ case 'Point':
164
+ return this.position(row);
165
+ case 'LineString':
166
+ case 'MultiPoint':
167
+ return this.positions(o[0][row], o[0][row + 1]);
168
+ case 'Polygon':
169
+ case 'MultiLineString': {
170
+ const rings = [];
171
+ for (let r = o[0][row]; r < o[0][row + 1]; r++) {
172
+ rings.push(this.positions(o[1][r], o[1][r + 1]));
173
+ }
174
+ return rings;
175
+ }
176
+ case 'MultiPolygon': {
177
+ const polygons = [];
178
+ for (let p = o[0][row]; p < o[0][row + 1]; p++) {
179
+ const rings = [];
180
+ for (let r = o[1][p]; r < o[1][p + 1]; r++) {
181
+ rings.push(this.positions(o[2][r], o[2][r + 1]));
182
+ }
183
+ polygons.push(rings);
184
+ }
185
+ return polygons;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ /** Whether a geometry column is the mixed form */
191
+ function isMixedGeometry(geometry) {
192
+ return geometry?.type === 'Mixed';
193
+ }
194
+ /**
195
+ * A validated columnar table
196
+ *
197
+ * @internal
198
+ */
199
+ export class ColumnarTable {
200
+ /**
201
+ * @throws when the shape of the input does not add up (a wrong type, an offset array of the
202
+ * wrong length, a column shorter than the table, a row of a mixed column pointing outside its
203
+ * child)
204
+ */
205
+ constructor(input) {
206
+ Object.defineProperty(this, "input", {
207
+ enumerable: true,
208
+ configurable: true,
209
+ writable: true,
210
+ value: input
211
+ });
212
+ Object.defineProperty(this, "length", {
213
+ enumerable: true,
214
+ configurable: true,
215
+ writable: true,
216
+ value: void 0
217
+ });
218
+ /**
219
+ * The geometry columns of a single type: the one column of a table of one type, or the children
220
+ * of a mixed geometry column
221
+ */
222
+ Object.defineProperty(this, "children", {
223
+ enumerable: true,
224
+ configurable: true,
225
+ writable: true,
226
+ value: void 0
227
+ });
228
+ /** The child of every row (null for a table of one type: every row is in child 0) */
229
+ Object.defineProperty(this, "childTypes", {
230
+ enumerable: true,
231
+ configurable: true,
232
+ writable: true,
233
+ value: void 0
234
+ });
235
+ /** The row within its child of every row (null for a table of one type: the same row) */
236
+ Object.defineProperty(this, "childRows", {
237
+ enumerable: true,
238
+ configurable: true,
239
+ writable: true,
240
+ value: void 0
241
+ });
242
+ /** Whether every geometry of the table is a Point or a MultiPoint */
243
+ Object.defineProperty(this, "onlyPoints", {
244
+ enumerable: true,
245
+ configurable: true,
246
+ writable: true,
247
+ value: void 0
248
+ });
249
+ Object.defineProperty(this, "validity", {
250
+ enumerable: true,
251
+ configurable: true,
252
+ writable: true,
253
+ value: void 0
254
+ });
255
+ Object.defineProperty(this, "ids", {
256
+ enumerable: true,
257
+ configurable: true,
258
+ writable: true,
259
+ value: void 0
260
+ });
261
+ Object.defineProperty(this, "columns", {
262
+ enumerable: true,
263
+ configurable: true,
264
+ writable: true,
265
+ value: void 0
266
+ });
267
+ /** The names of the columns (the key order of `columns`) */
268
+ Object.defineProperty(this, "columnNames", {
269
+ enumerable: true,
270
+ configurable: true,
271
+ writable: true,
272
+ value: void 0
273
+ });
274
+ const { length, geometry } = input;
275
+ if (!Number.isInteger(length) || length < 0) {
276
+ throw new Error(`Columnar input: length must be a non-negative integer (got ${length})`);
277
+ }
278
+ if (isMixedGeometry(geometry)) {
279
+ this.children = readMixedChildren(geometry, length);
280
+ this.childTypes = geometry.types;
281
+ this.childRows = geometry.offsets;
282
+ }
283
+ else {
284
+ this.children = [new ColumnarGeometryColumn(geometry, length, 'geometry')];
285
+ this.childTypes = null;
286
+ this.childRows = null;
287
+ }
288
+ this.onlyPoints = this.children.every((child) => child.type === 'Point' || child.type === 'MultiPoint');
289
+ if (input.validity && input.validity.length < Math.ceil(length / 8)) {
290
+ throw new Error('Columnar input: validity is shorter than the table');
291
+ }
292
+ if (input.ids && columnLength(input.ids) < length) {
293
+ throw new Error('Columnar input: ids is shorter than the table');
294
+ }
295
+ const columns = input.columns ?? {};
296
+ for (const [name, column] of Object.entries(columns)) {
297
+ if (columnLength(column) < length) {
298
+ throw new Error(`Columnar input: column "${name}" is shorter than the table`);
299
+ }
300
+ }
301
+ this.length = length;
302
+ this.validity = input.validity;
303
+ this.ids = input.ids;
304
+ this.columns = columns;
305
+ this.columnNames = Object.keys(columns);
306
+ }
307
+ /** Whether the validity bitmap marks the row as having a geometry */
308
+ isValid(row) {
309
+ const validity = this.validity;
310
+ return validity === undefined || (validity[row >> 3] & (1 << (row & 7))) !== 0;
311
+ }
312
+ /** The index of the child that holds the geometry of a row (-1 for a row without one) */
313
+ childOf(row) {
314
+ const types = this.childTypes;
315
+ if (types === null)
316
+ return 0;
317
+ const child = types[row];
318
+ return child < 0 ? -1 : child;
319
+ }
320
+ /** The row within its child of a row */
321
+ childRowOf(row) {
322
+ return this.childRows === null ? row : this.childRows[row];
323
+ }
324
+ /** The geometry column of a row (undefined for a row without a geometry) */
325
+ columnOf(row) {
326
+ const child = this.childOf(row);
327
+ return child < 0 ? undefined : this.children[child];
328
+ }
329
+ /** The value of a column at a row (undefined when the table has no such column) */
330
+ value(name, row) {
331
+ const column = this.columns[name];
332
+ return column === undefined ? undefined : columnValue(column, row);
333
+ }
334
+ /** The id of a row */
335
+ idOf(row) {
336
+ if (!this.ids)
337
+ return String(row);
338
+ return String(columnValue(this.ids, row));
339
+ }
340
+ /**
341
+ * Computes the bbox of every row, `[minX, minY, maxX, maxY]` per row (NaN for a row without a
342
+ * geometry)
343
+ */
344
+ computeBounds() {
345
+ const n = this.length;
346
+ const bounds = new Float64Array(n * 4);
347
+ for (let row = 0; row < n; row++) {
348
+ const at = row * 4;
349
+ let minX = Number.POSITIVE_INFINITY;
350
+ let minY = Number.POSITIVE_INFINITY;
351
+ let maxX = Number.NEGATIVE_INFINITY;
352
+ let maxY = Number.NEGATIVE_INFINITY;
353
+ const column = this.columnOf(row);
354
+ if (column !== undefined && this.isValid(row)) {
355
+ const r = this.childRowOf(row);
356
+ const end = column.vertexStart(r + 1);
357
+ const coords = column.coords;
358
+ const stride = column.dimensions;
359
+ for (let v = column.vertexStart(r); v < end; v++) {
360
+ const x = coords[v * stride];
361
+ const y = coords[v * stride + 1];
362
+ if (x < minX)
363
+ minX = x;
364
+ if (x > maxX)
365
+ maxX = x;
366
+ if (y < minY)
367
+ minY = y;
368
+ if (y > maxY)
369
+ maxY = y;
370
+ }
371
+ }
372
+ if (minX === Number.POSITIVE_INFINITY || Number.isNaN(minX) || Number.isNaN(minY)) {
373
+ bounds[at] = Number.NaN;
374
+ bounds[at + 1] = Number.NaN;
375
+ bounds[at + 2] = Number.NaN;
376
+ bounds[at + 3] = Number.NaN;
377
+ }
378
+ else {
379
+ bounds[at] = minX;
380
+ bounds[at + 1] = minY;
381
+ bounds[at + 2] = maxX;
382
+ bounds[at + 3] = maxY;
383
+ }
384
+ }
385
+ return bounds;
386
+ }
387
+ /** The number of coordinates of every row (the estimate of the work of the splitting) */
388
+ computeVertexCounts() {
389
+ const n = this.length;
390
+ const counts = new Int32Array(n);
391
+ for (let row = 0; row < n; row++) {
392
+ const column = this.columnOf(row);
393
+ if (column === undefined)
394
+ continue;
395
+ const r = this.childRowOf(row);
396
+ counts[row] = column.vertexStart(r + 1) - column.vertexStart(r);
397
+ }
398
+ return counts;
399
+ }
400
+ /** The coordinates of a row, shaped as for its geometry type (a NaN point without a geometry) */
401
+ coordinatesOf(row) {
402
+ const column = this.columnOf(row);
403
+ return column === undefined
404
+ ? [Number.NaN, Number.NaN]
405
+ : column.coordinatesOf(this.childRowOf(row));
406
+ }
407
+ /** The value of every column at a row */
408
+ propertiesOf(row) {
409
+ const properties = {};
410
+ for (const name of this.columnNames) {
411
+ properties[name] = columnValue(this.columns[name], row);
412
+ }
413
+ return properties;
414
+ }
415
+ /**
416
+ * Materializes one row as a feature
417
+ *
418
+ * A row of a mixed column that names no child is a Point with NaN coordinates.
419
+ *
420
+ * @param hasGeometry Whether the row has a geometry (a row without one is not visible)
421
+ */
422
+ featureAt(row, hasGeometry) {
423
+ return {
424
+ id: this.idOf(row),
425
+ type: this.columnOf(row)?.type ?? 'Point',
426
+ coordinates: this.coordinatesOf(row),
427
+ layerId: '',
428
+ properties: this.propertiesOf(row),
429
+ locked: false,
430
+ visible: hasGeometry,
431
+ };
432
+ }
433
+ }
434
+ /**
435
+ * Validates the children of a mixed geometry column and the child and child row of every row
436
+ *
437
+ * @throws when an array has the wrong type or is shorter than the table, or when a row names a
438
+ * child that does not exist or a row past the end of its child
439
+ */
440
+ function readMixedChildren(geometry, length) {
441
+ const { types, offsets, children } = geometry;
442
+ if (!(types instanceof Int8Array)) {
443
+ throw new Error('Columnar input: geometry.types must be an Int8Array');
444
+ }
445
+ if (!(offsets instanceof Int32Array)) {
446
+ throw new Error('Columnar input: geometry.offsets must be an Int32Array');
447
+ }
448
+ if (!Array.isArray(children)) {
449
+ throw new Error('Columnar input: geometry.children must be an array');
450
+ }
451
+ if (types.length < length) {
452
+ throw new Error('Columnar input: geometry.types is shorter than the table');
453
+ }
454
+ if (offsets.length < length) {
455
+ throw new Error('Columnar input: geometry.offsets is shorter than the table');
456
+ }
457
+ const columns = children.map((child, k) => new ColumnarGeometryColumn(child, undefined, `geometry.children[${k}]`));
458
+ for (let row = 0; row < length; row++) {
459
+ const child = types[row];
460
+ if (child < 0)
461
+ continue;
462
+ if (child >= columns.length) {
463
+ throw new Error(`Columnar input: geometry.types[${row}] is ${child}, but there are ${columns.length} children`);
464
+ }
465
+ const at = offsets[row];
466
+ if (at < 0 || at >= columns[child].length) {
467
+ throw new Error(`Columnar input: geometry.offsets[${row}] is ${at}, but geometry.children[${child}] has ${columns[child].length} rows`);
468
+ }
469
+ }
470
+ return columns;
471
+ }
@@ -0,0 +1,223 @@
1
+ /**
2
+ * The columnar input of a dataset
3
+ *
4
+ * The rows are given as columns of typed arrays in the layout of GeoArrow (the native encoding
5
+ * with separated offsets), so a reader of GeoParquet, Arrow or FlatGeobuf can hand what it reads
6
+ * over without building an object per row, and a Worker can send it to the main thread without a
7
+ * copy.
8
+ */
9
+ /**
10
+ * The geometry type of a geometry column of a single type. A table whose rows have different
11
+ * types gives a {@link DatasetColumnarMixedGeometry}, made of columns of these types.
12
+ */
13
+ export type DatasetColumnarGeometryType = 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon';
14
+ /**
15
+ * The geometry column of a columnar table, in the layout of GeoArrow: interleaved coordinates
16
+ * and the offset arrays, outermost first.
17
+ *
18
+ * Every row owns a contiguous run of the coordinates, so the offsets only say where each row,
19
+ * part and ring starts:
20
+ *
21
+ * | Type | `offsets` |
22
+ * | --- | --- |
23
+ * | Point | none: row `i` is coordinate `i` |
24
+ * | LineString, MultiPoint | `[row → coordinate]` |
25
+ * | Polygon | `[row → ring, ring → coordinate]` |
26
+ * | MultiLineString | `[row → part, part → coordinate]` |
27
+ * | MultiPolygon | `[row → polygon, polygon → ring, ring → coordinate]` |
28
+ *
29
+ * An offset array has one more entry than the level it splits (the first entry is the start of
30
+ * the first element, the last is the end of the last), and its values never decrease.
31
+ *
32
+ * A row without a geometry has an empty run (two equal offsets), or NaN coordinates for a Point,
33
+ * or a 0 bit in {@link DatasetColumnarInput.validity}. It is neither drawn nor hit.
34
+ *
35
+ * @example A table of two lines
36
+ * ```ts
37
+ * const geometry: DatasetColumnarGeometry = {
38
+ * type: 'LineString',
39
+ * coords: new Float64Array([139.70, 35.68, 139.71, 35.69, 139.72, 35.66, 139.73, 35.67]),
40
+ * offsets: [new Int32Array([0, 2, 4])],
41
+ * };
42
+ * ```
43
+ */
44
+ export interface DatasetColumnarGeometry {
45
+ /** The geometry type of every row */
46
+ type: DatasetColumnarGeometryType;
47
+ /**
48
+ * The coordinates in degrees, interleaved: `[lng0, lat0, lng1, lat1, ...]`, or
49
+ * `[lng0, lat0, z0, ...]` with `dimensions: 3`
50
+ */
51
+ coords: Float64Array;
52
+ /**
53
+ * The number of values per coordinate: 2 (`xy`, the default) or 3 (`xyz`; the third value is
54
+ * skipped)
55
+ */
56
+ dimensions?: 2 | 3;
57
+ /** The offset arrays, outermost first (see the table above). Omitted or empty for Point */
58
+ offsets?: Int32Array[];
59
+ }
60
+ /**
61
+ * The geometry column of a table whose rows have different geometry types, in the layout of the
62
+ * mixed geometry of GeoArrow (a dense union of Arrow): a geometry column of a single type per
63
+ * child, and for every row of the table the child and the row within it.
64
+ *
65
+ * The geometry of row `i` is row `offsets[i]` of `children[types[i]]`, and row `i` behaves exactly
66
+ * as the feature of that child's type with those coordinates. The rows of a child can be in any
67
+ * order; the draw order is the order of the table rows. A row with a negative `types[i]` has no
68
+ * geometry (as a 0 bit in {@link DatasetColumnarInput.validity}, which still applies on top). The
69
+ * number of rows of a child is read from its arrays: the coordinates for a Point column,
70
+ * `offsets[0].length - 1` for the others.
71
+ *
72
+ * @example A point, a line and a polygon, the polygon first in the table
73
+ * ```ts
74
+ * const geometry: DatasetColumnarMixedGeometry = {
75
+ * type: 'Mixed',
76
+ * types: new Int8Array([2, 0, 1]),
77
+ * offsets: new Int32Array([0, 0, 0]),
78
+ * children: [
79
+ * { type: 'Point', coords: new Float64Array([139.70, 35.68]) },
80
+ * {
81
+ * type: 'LineString',
82
+ * coords: new Float64Array([139.71, 35.69, 139.72, 35.70]),
83
+ * offsets: [new Int32Array([0, 2])],
84
+ * },
85
+ * {
86
+ * type: 'Polygon',
87
+ * coords: new Float64Array([139.73, 35.66, 139.75, 35.66, 139.75, 35.68, 139.73, 35.66]),
88
+ * offsets: [new Int32Array([0, 1]), new Int32Array([0, 4])],
89
+ * },
90
+ * ],
91
+ * };
92
+ * ```
93
+ */
94
+ export interface DatasetColumnarMixedGeometry {
95
+ /** Marks the mixed form */
96
+ type: 'Mixed';
97
+ /**
98
+ * For every row, the child column that holds its geometry (an index into `children`; negative
99
+ * for a row without a geometry)
100
+ */
101
+ types: Int8Array;
102
+ /** For every row, the row within its child column */
103
+ offsets: Int32Array;
104
+ /** The geometry columns of a single type */
105
+ children: DatasetColumnarGeometry[];
106
+ }
107
+ /**
108
+ * The integer arrays that can hold the codes of a {@link DatasetDictionaryColumn}.
109
+ */
110
+ export type DatasetDictionaryCodes = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array;
111
+ /**
112
+ * An attribute column encoded as a dictionary (the dictionary type of Arrow): the value of row
113
+ * `i` is `dictionary[codes[i]]`. A negative code, or one past the end of the dictionary, means
114
+ * no value (`null`).
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * const category: DatasetDictionaryColumn = {
119
+ * codes: new Int32Array([0, 1, 0, -1]),
120
+ * dictionary: ['cafe', 'school'],
121
+ * }; // 'cafe', 'school', 'cafe', null
122
+ * ```
123
+ */
124
+ export interface DatasetDictionaryColumn {
125
+ /** The code of each row */
126
+ codes: DatasetDictionaryCodes;
127
+ /** The distinct values */
128
+ dictionary: readonly (string | number | boolean | null)[];
129
+ }
130
+ /**
131
+ * An attribute column of a columnar table: a typed array of numbers, a dictionary, or a plain
132
+ * array of values. Row `i` of the table is element `i` of the column. In a `Float64Array` or a
133
+ * `Float32Array`, NaN means no value (`null`).
134
+ */
135
+ export type DatasetColumn = Float64Array | Float32Array | Int32Array | Uint32Array | Int16Array | Uint16Array | Int8Array | Uint8Array | DatasetDictionaryColumn | readonly unknown[];
136
+ /**
137
+ * The rows of a dataset given as columns, the counterpart of an array of
138
+ * {@link DatasetFeatureInput}. Pass it as `columnar` to
139
+ * {@link MapLibreGLDraw.addDataset} or to {@link Dataset.setColumnar}.
140
+ *
141
+ * Nothing is copied: the dataset keeps and reads the arrays, so do not change them while the
142
+ * dataset holds them (replace the table with `setColumnar` instead). Every array can be sent
143
+ * from a Worker without a copy; `columnarTransferables` from
144
+ * `@sakuzu/maplibre-gl-draw/columnar` lists their buffers.
145
+ *
146
+ * Row `i` behaves as the feature `{ id, type: geometry.type, coordinates, properties }` where
147
+ * `coordinates` are read from the geometry column, `properties` holds the value of every column at
148
+ * row `i`, and `id` is `String(ids[i])` (or `String(i)` without `ids`). With a
149
+ * {@link DatasetColumnarMixedGeometry}, `type` and `coordinates` are those of the row's child
150
+ * column. The rows have no individual style; the style rule and the base style of the dataset
151
+ * color them.
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * const places: DatasetColumnarInput = {
156
+ * length: 3,
157
+ * geometry: {
158
+ * type: 'Point',
159
+ * coords: new Float64Array([139.70, 35.68, 139.71, 35.69, 139.72, 35.66]),
160
+ * },
161
+ * columns: {
162
+ * name: ['Shinjuku', 'Yoyogi', 'Shibuya'],
163
+ * visitors: new Float64Array([3.5, 0.7, 3.0]),
164
+ * },
165
+ * };
166
+ * draw.addDataset({ id: 'places', columnar: places });
167
+ * ```
168
+ */
169
+ export interface DatasetColumnarInput {
170
+ /** The number of rows */
171
+ length: number;
172
+ /**
173
+ * The geometry column: of one type, or {@link DatasetColumnarMixedGeometry} for rows of
174
+ * different types
175
+ */
176
+ geometry: DatasetColumnarGeometry | DatasetColumnarMixedGeometry;
177
+ /**
178
+ * Which rows have a geometry, as the validity bitmap of Arrow: bit `i % 8` of byte `i >> 3` (the
179
+ * lowest bit first) is 1 for a row with a geometry. Every row has one when omitted
180
+ */
181
+ validity?: Uint8Array;
182
+ /**
183
+ * The id of each row, turned into a string with `String()` (the row number as a string when
184
+ * omitted). The ids must be unique within the table
185
+ */
186
+ ids?: DatasetColumn;
187
+ /**
188
+ * The attribute columns by name. They become the `properties` of the rows, which the style
189
+ * rule reads. Passing only the columns that the rule and the host read is enough
190
+ */
191
+ columns?: Record<string, DatasetColumn>;
192
+ }
193
+ /**
194
+ * What `prepareDatasetColumnar` (from `@sakuzu/maplibre-gl-draw/columnar`) computes from a
195
+ * columnar table so that the main thread does not have to: the bbox of each row, the spatial
196
+ * chunks and the spatial index of the hit testing.
197
+ *
198
+ * Every field is a typed array, so it can be sent from a Worker without a copy. Treat it as
199
+ * opaque: pass it with the same table to {@link Dataset.setColumnar} or as `prepared` to
200
+ * {@link MapLibreGLDraw.addDataset}.
201
+ */
202
+ export interface DatasetColumnarPrepared {
203
+ /** The number of rows it was computed for (it must equal the `length` of the table) */
204
+ readonly length: number;
205
+ /** The bbox of each row, `[minX, minY, maxX, maxY]` (NaN for a row without a geometry) */
206
+ readonly bounds: Float64Array;
207
+ /** The rows of every chunk, chunk after chunk */
208
+ readonly chunkRows: Int32Array;
209
+ /** Where each chunk starts in `chunkRows` (the chunk count + 1 entries) */
210
+ readonly chunkOffsets: Int32Array;
211
+ /** The bbox of each chunk, `[minX, minY, maxX, maxY]` */
212
+ readonly chunkBounds: Float64Array;
213
+ /** The number of entries of one node of the spatial index */
214
+ readonly indexNodeSize: number;
215
+ /** The number of leaves of the spatial index (the rows with a geometry) */
216
+ readonly indexItemCount: number;
217
+ /** The boxes of the spatial index */
218
+ readonly indexBoxes: Float64Array;
219
+ /** The rows and child positions of the spatial index */
220
+ readonly indexEntries: Int32Array;
221
+ /** The end of each level of the spatial index */
222
+ readonly indexLevels: Int32Array;
223
+ }
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};