@sakuzu/maplibre-gl-draw 1.0.0 → 2.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 (540) hide show
  1. package/CHANGELOG.md +1016 -2
  2. package/README.ja.md +39 -19
  3. package/README.md +41 -21
  4. package/dist/api/datasets.d.ts +258 -0
  5. package/dist/api/document.d.ts +66 -0
  6. package/dist/api/draw.d.ts +135 -0
  7. package/dist/api/draw.js +18 -0
  8. package/dist/api/drawing.d.ts +87 -0
  9. package/dist/api/errors.d.ts +35 -0
  10. package/dist/api/errors.js +35 -0
  11. package/dist/api/events.d.ts +306 -0
  12. package/dist/api/extension/context.d.ts +247 -0
  13. package/dist/api/extension/feature-type.d.ts +129 -0
  14. package/dist/api/extension/mode.d.ts +123 -0
  15. package/dist/api/extension/plugin.d.ts +51 -0
  16. package/dist/api/extension/plugin.js +3 -0
  17. package/dist/api/extension/provider.d.ts +119 -0
  18. package/dist/api/extension/provider.js +3 -0
  19. package/dist/api/extension/render.d.ts +176 -0
  20. package/dist/api/extension/render.js +3 -0
  21. package/dist/api/extension/store.d.ts +190 -0
  22. package/dist/api/extension/store.js +3 -0
  23. package/dist/api/extensions.d.ts +306 -0
  24. package/dist/api/extensions.js +3 -0
  25. package/dist/api/features.d.ts +188 -0
  26. package/dist/api/features.js +3 -0
  27. package/dist/api/groups.d.ts +111 -0
  28. package/dist/api/groups.js +3 -0
  29. package/dist/api/hidden.d.ts +45 -0
  30. package/dist/api/hidden.js +3 -0
  31. package/dist/api/impl/adapters.js +463 -0
  32. package/dist/api/impl/contexts.js +466 -0
  33. package/dist/api/impl/create-draw.js +124 -0
  34. package/dist/api/impl/datasets.js +404 -0
  35. package/dist/api/impl/destroy-guard.js +74 -0
  36. package/dist/api/impl/document.js +280 -0
  37. package/dist/api/impl/drawing.js +180 -0
  38. package/dist/api/impl/engine-context.d.ts +7 -0
  39. package/dist/api/{context.js → impl/engine-context.js} +49 -38
  40. package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
  41. package/dist/api/impl/events.js +422 -0
  42. package/dist/api/impl/extension-host.js +361 -0
  43. package/dist/api/impl/extensions.js +229 -0
  44. package/dist/api/impl/features.js +445 -0
  45. package/dist/api/impl/geometry/apply.d.ts +32 -0
  46. package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
  47. package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
  48. package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
  49. package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
  50. package/dist/api/{geometry → impl/geometry}/split.js +10 -21
  51. package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
  52. package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
  53. package/dist/api/impl/geometry/types.js +3 -0
  54. package/dist/api/impl/groups.d.ts +3 -0
  55. package/dist/api/impl/groups.js +268 -0
  56. package/dist/api/impl/hidden.js +60 -0
  57. package/dist/api/impl/import-export/constants.d.ts +22 -0
  58. package/dist/api/impl/import-export/constants.js +24 -0
  59. package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
  60. package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
  61. package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
  62. package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
  63. package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
  64. package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
  65. package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
  66. package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
  67. package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
  68. package/dist/api/impl/import-export/image-import.d.ts +16 -0
  69. package/dist/api/impl/import-export/image-import.js +73 -0
  70. package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
  71. package/dist/api/impl/import-export/legacy-image-style.js +49 -0
  72. package/dist/api/impl/import-export/native-format.d.ts +14 -0
  73. package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
  74. package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
  75. package/dist/api/impl/import-export/native-upgrade.js +139 -0
  76. package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
  77. package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
  78. package/dist/api/impl/import-export/style-validation.d.ts +24 -0
  79. package/dist/api/impl/import-export/style-validation.js +86 -0
  80. package/dist/api/impl/import-export/types.d.ts +52 -0
  81. package/dist/api/impl/import-export/types.js +3 -0
  82. package/dist/api/impl/input.js +180 -0
  83. package/dist/api/impl/layers.js +307 -0
  84. package/dist/api/impl/metadata.d.ts +1 -0
  85. package/dist/api/impl/metadata.js +22 -0
  86. package/dist/api/impl/options.d.ts +1 -0
  87. package/dist/api/impl/options.js +822 -0
  88. package/dist/api/impl/placement.d.ts +1 -0
  89. package/dist/api/impl/placement.js +138 -0
  90. package/dist/api/impl/render-context.d.ts +13 -0
  91. package/dist/api/impl/render-context.js +272 -0
  92. package/dist/api/impl/rows.d.ts +1 -0
  93. package/dist/api/impl/rows.js +46 -0
  94. package/dist/api/impl/selection.d.ts +1 -0
  95. package/dist/api/impl/selection.js +186 -0
  96. package/dist/api/impl/shared.d.ts +64 -0
  97. package/dist/api/impl/shared.js +178 -0
  98. package/dist/api/impl/validate-extension.d.ts +1 -0
  99. package/dist/api/impl/validate-extension.js +159 -0
  100. package/dist/api/layers.d.ts +130 -0
  101. package/dist/api/layers.js +3 -0
  102. package/dist/api/metadata.d.ts +18 -0
  103. package/dist/api/metadata.js +3 -0
  104. package/dist/api/model.d.ts +487 -0
  105. package/dist/api/model.js +47 -0
  106. package/dist/api/options.d.ts +466 -0
  107. package/dist/api/options.js +3 -0
  108. package/dist/api/selection.d.ts +94 -0
  109. package/dist/api/selection.js +3 -0
  110. package/dist/api/state.d.ts +155 -0
  111. package/dist/api/state.js +12 -0
  112. package/dist/{display → dataset}/chunk.d.ts +1 -1
  113. package/dist/{display → dataset}/chunk.js +4 -3
  114. package/dist/{display → dataset}/dataset.js +18 -21
  115. package/dist/dataset/interaction.d.ts +1 -0
  116. package/dist/{display → dataset}/interaction.js +18 -6
  117. package/dist/dataset/manager.d.ts +1 -0
  118. package/dist/dataset/provider.d.ts +1 -0
  119. package/dist/{display → dataset}/retained.d.ts +1 -1
  120. package/dist/{display → dataset}/retained.js +8 -7
  121. package/dist/dataset/source.d.ts +1 -0
  122. package/dist/{display → dataset}/source.js +17 -4
  123. package/dist/dataset/spatial.d.ts +1 -0
  124. package/dist/{display → dataset}/spatial.js +1 -1
  125. package/dist/dataset/style.d.ts +1 -0
  126. package/dist/{display → dataset}/style.js +1 -1
  127. package/dist/dataset/table-source.d.ts +1 -0
  128. package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
  129. package/dist/{display → dataset}/thinning.d.ts +0 -10
  130. package/dist/{display → dataset}/thinning.js +3 -2
  131. package/dist/dataset/triangulation.d.ts +1 -0
  132. package/dist/{display → dataset}/triangulation.js +0 -0
  133. package/dist/{display → dataset}/types.d.ts +82 -121
  134. package/dist/dataset/types.js +61 -0
  135. package/dist/dispatcher/hit-test/box-strategies.js +13 -13
  136. package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
  137. package/dist/dispatcher/hit-test/globe-shape.js +5 -4
  138. package/dist/dispatcher/hit-test/service.d.ts +17 -0
  139. package/dist/dispatcher/hit-test/service.js +80 -16
  140. package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
  141. package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
  142. package/dist/dispatcher/hit-test/strategies/image.js +6 -18
  143. package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
  144. package/dist/dispatcher/hit-test/strategies/line.js +9 -2
  145. package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
  146. package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
  147. package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
  148. package/dist/dispatcher/hit-test/strategies/point.js +8 -4
  149. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
  150. package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
  151. package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
  152. package/dist/dispatcher/input-router.js +152 -69
  153. package/dist/dispatcher/normalizer.js +6 -2
  154. package/dist/dispatcher/types.d.ts +6 -1
  155. package/dist/extension/feature-handler.d.ts +1 -182
  156. package/dist/extension/index.d.ts +4 -7
  157. package/dist/extension/renderers.d.ts +1 -208
  158. package/dist/geometry/angle.d.ts +0 -8
  159. package/dist/geometry/angle.js +0 -8
  160. package/dist/geometry/bbox.d.ts +4 -12
  161. package/dist/geometry/bbox.js +4 -12
  162. package/dist/geometry/boolean.d.ts +0 -51
  163. package/dist/geometry/boolean.js +0 -51
  164. package/dist/geometry/buffer.d.ts +0 -26
  165. package/dist/geometry/buffer.js +0 -26
  166. package/dist/geometry/circle.d.ts +0 -9
  167. package/dist/geometry/circle.js +0 -9
  168. package/dist/geometry/coords.d.ts +0 -16
  169. package/dist/geometry/coords.js +0 -16
  170. package/dist/geometry/distance.d.ts +0 -24
  171. package/dist/geometry/distance.js +0 -24
  172. package/dist/geometry/errors.d.ts +21 -36
  173. package/dist/geometry/errors.js +49 -29
  174. package/dist/geometry/geojson.d.ts +81 -0
  175. package/dist/geometry/geojson.js +164 -0
  176. package/dist/geometry/index.d.ts +38 -23
  177. package/dist/geometry/index.js +43 -31
  178. package/dist/geometry/measure.d.ts +0 -27
  179. package/dist/geometry/measure.js +0 -27
  180. package/dist/geometry/predicates.d.ts +0 -9
  181. package/dist/geometry/predicates.js +0 -9
  182. package/dist/geometry/public-bounds.d.ts +26 -0
  183. package/dist/geometry/public-bounds.js +30 -0
  184. package/dist/geometry/public-combine.d.ts +78 -0
  185. package/dist/geometry/public-combine.js +82 -0
  186. package/dist/geometry/public-create.d.ts +54 -0
  187. package/dist/geometry/public-create.js +70 -0
  188. package/dist/geometry/public-measure.d.ts +170 -0
  189. package/dist/geometry/public-measure.js +283 -0
  190. package/dist/geometry/public-predicates.d.ts +54 -0
  191. package/dist/geometry/public-predicates.js +144 -0
  192. package/dist/geometry/public-repair.d.ts +75 -0
  193. package/dist/geometry/public-repair.js +77 -0
  194. package/dist/geometry/simplify.d.ts +0 -7
  195. package/dist/geometry/simplify.js +0 -7
  196. package/dist/geometry/split.d.ts +0 -20
  197. package/dist/geometry/split.js +0 -20
  198. package/dist/geometry/units.d.ts +20 -12
  199. package/dist/geometry/units.js +20 -12
  200. package/dist/index.d.ts +52 -66
  201. package/dist/index.js +6 -18
  202. package/dist/messages.d.ts +7 -7
  203. package/dist/modes/draw/circle.js +83 -207
  204. package/dist/modes/draw/commit-layer.d.ts +5 -16
  205. package/dist/modes/draw/commit-layer.js +2 -13
  206. package/dist/modes/draw/freehand.js +108 -246
  207. package/dist/modes/draw/image.js +4 -2
  208. package/dist/modes/draw/index.d.ts +5 -5
  209. package/dist/modes/draw/index.js +5 -5
  210. package/dist/modes/draw/line.js +18 -354
  211. package/dist/modes/draw/point.js +29 -78
  212. package/dist/modes/draw/polygon.js +23 -368
  213. package/dist/modes/draw/trace-support.d.ts +43 -36
  214. package/dist/modes/draw/trace-support.js +95 -98
  215. package/dist/modes/draw/vertex-drawing.d.ts +1 -0
  216. package/dist/modes/draw/vertex-drawing.js +176 -0
  217. package/dist/modes/handler.d.ts +1 -285
  218. package/dist/modes/manager.d.ts +2 -2
  219. package/dist/modes/manager.js +3 -0
  220. package/dist/modes/select/box-selection.d.ts +3 -3
  221. package/dist/modes/select/box-selection.js +2 -1
  222. package/dist/modes/select/click-handler.d.ts +5 -5
  223. package/dist/modes/select/click-handler.js +22 -20
  224. package/dist/modes/select/cursor-handler.d.ts +2 -2
  225. package/dist/modes/select/drag/intermediate-writes.js +1 -1
  226. package/dist/modes/select/drag/move.js +3 -3
  227. package/dist/modes/select/drag/operation.d.ts +3 -3
  228. package/dist/modes/select/drag/radius.js +5 -4
  229. package/dist/modes/select/drag/transform.d.ts +2 -2
  230. package/dist/modes/select/drag/transform.js +11 -5
  231. package/dist/modes/select/drag/vertex.d.ts +2 -2
  232. package/dist/modes/select/drag/vertex.js +13 -8
  233. package/dist/modes/select/drag-handler.js +44 -25
  234. package/dist/modes/select/mode.js +17 -17
  235. package/dist/modes/select/shortcut-handler.d.ts +8 -8
  236. package/dist/modes/select/shortcut-handler.js +9 -7
  237. package/dist/operations/layer-operations.js +29 -168
  238. package/dist/operations/resize.d.ts +2 -2
  239. package/dist/operations/resize.js +5 -5
  240. package/dist/operations/rotate.js +5 -5
  241. package/dist/operations/selection-operations.d.ts +16 -1
  242. package/dist/operations/selection-operations.js +28 -13
  243. package/dist/operations/shared-vertex.js +4 -2
  244. package/dist/operations/trace-graph.d.ts +0 -18
  245. package/dist/operations/trace-graph.js +0 -18
  246. package/dist/operations/vertex.js +36 -35
  247. package/dist/shared/color.d.ts +1 -0
  248. package/dist/shared/color.js +245 -0
  249. package/dist/shared/config/constants.d.ts +1 -54
  250. package/dist/shared/config/constants.js +1 -58
  251. package/dist/shared/config/feature-style.d.ts +16 -13
  252. package/dist/shared/config/feature-style.js +9 -0
  253. package/dist/shared/config/rendering.d.ts +3 -3
  254. package/dist/shared/config/selection-highlight.d.ts +0 -15
  255. package/dist/shared/config/selection-highlight.js +4 -7
  256. package/dist/shared/config/selection.d.ts +2 -32
  257. package/dist/shared/config/selection.js +0 -18
  258. package/dist/shared/config/topology.d.ts +2 -2
  259. package/dist/shared/config/trace.d.ts +4 -4
  260. package/dist/shared/math/angle.d.ts +1 -1
  261. package/dist/shared/math/angle.js +1 -1
  262. package/dist/shared/math/circle.d.ts +1 -1
  263. package/dist/shared/math/circle.js +1 -1
  264. package/dist/shared/math/distance.d.ts +2 -1
  265. package/dist/shared/math/distance.js +3 -2
  266. package/dist/shared/math/index.d.ts +1 -1
  267. package/dist/shared/math/index.js +1 -1
  268. package/dist/shared/math/transform.d.ts +23 -0
  269. package/dist/shared/math/transform.js +47 -28
  270. package/dist/shared/properties.d.ts +18 -0
  271. package/dist/shared/properties.js +129 -0
  272. package/dist/shared/types/events.d.ts +15 -7
  273. package/dist/shared/types/model.d.ts +109 -159
  274. package/dist/shared/types/style.d.ts +1 -1
  275. package/dist/shared/utils/color.d.ts +2 -36
  276. package/dist/shared/utils/color.js +13 -70
  277. package/dist/shared/utils/coordinates.d.ts +30 -4
  278. package/dist/shared/utils/coordinates.js +56 -10
  279. package/dist/shared/utils/event-emitter.d.ts +1 -262
  280. package/dist/shared/utils/event-emitter.js +4 -3
  281. package/dist/shared/utils/feature-bbox.js +8 -7
  282. package/dist/shared/utils/feature-segments.js +5 -4
  283. package/dist/shared/utils/image.d.ts +0 -4
  284. package/dist/shared/utils/image.js +0 -6
  285. package/dist/shared/utils/name-generator.d.ts +14 -20
  286. package/dist/shared/utils/name-generator.js +20 -3
  287. package/dist/shared/utils/pixel-ratio.d.ts +9 -3
  288. package/dist/shared/utils/pixel-ratio.js +13 -4
  289. package/dist/shared/utils/property.d.ts +7 -50
  290. package/dist/shared/utils/property.js +22 -87
  291. package/dist/snapping/custom-targets.js +21 -4
  292. package/dist/snapping/indicator.js +20 -11
  293. package/dist/snapping/providers/display.d.ts +6 -1
  294. package/dist/snapping/providers/display.js +2 -1
  295. package/dist/snapping/providers/guide.d.ts +3 -43
  296. package/dist/snapping/providers/guide.js +1 -44
  297. package/dist/snapping/providers/intersection.js +1 -1
  298. package/dist/snapping/providers/store.js +3 -3
  299. package/dist/snapping/service.js +18 -7
  300. package/dist/snapping/types.d.ts +9 -35
  301. package/dist/store/draw-store.js +233 -142
  302. package/dist/store/local-visibility.d.ts +11 -6
  303. package/dist/store/local-visibility.js +38 -7
  304. package/dist/store/lock.d.ts +0 -6
  305. package/dist/store/lock.js +0 -6
  306. package/dist/store/memory/change-bus.d.ts +3 -3
  307. package/dist/store/memory/change-bus.js +12 -0
  308. package/dist/store/memory/file-store.d.ts +2 -2
  309. package/dist/store/memory/ui-state.d.ts +1 -51
  310. package/dist/store/memory/ui-state.js +122 -134
  311. package/dist/store/memory.d.ts +1 -8
  312. package/dist/store/memory.js +249 -45
  313. package/dist/store/ordering.d.ts +9 -0
  314. package/dist/store/ordering.js +17 -0
  315. package/dist/store/spatial/spatial-index.d.ts +1 -1
  316. package/dist/store/spatial/spatial-index.js +1 -1
  317. package/dist/store/spatial/store-spatial-index.d.ts +3 -1
  318. package/dist/store/spatial/store-spatial-index.js +9 -3
  319. package/dist/store/store.d.ts +66 -107
  320. package/dist/store/types.d.ts +1 -1
  321. package/dist/store/writable-layer.d.ts +1 -1
  322. package/dist/store/writable-layer.js +2 -2
  323. package/dist/table/builder.d.ts +83 -0
  324. package/dist/table/builder.js +381 -0
  325. package/dist/table/index.d.ts +37 -0
  326. package/dist/table/index.js +5 -0
  327. package/dist/table/packed-rtree.d.ts +1 -0
  328. package/dist/{display → table}/packed-rtree.js +1 -1
  329. package/dist/table/partition.d.ts +1 -0
  330. package/dist/{display → table}/partition.js +3 -3
  331. package/dist/table/prepare.d.ts +44 -0
  332. package/dist/table/prepare.js +136 -0
  333. package/dist/table/table.d.ts +1 -0
  334. package/dist/{display/columnar → table}/table.js +29 -25
  335. package/dist/{display/columnar → table}/types.d.ts +68 -72
  336. package/dist/table/types.js +3 -0
  337. package/dist/view/coordinator.js +4 -3
  338. package/dist/view/feature-companion.d.ts +13 -7
  339. package/dist/view/feature-companion.js +11 -3
  340. package/dist/view/globe-subdivision.js +3 -3
  341. package/dist/view/layer/attach.d.ts +1 -1
  342. package/dist/view/layer/attach.js +1 -1
  343. package/dist/view/layer/custom-layer.js +40 -11
  344. package/dist/view/layer/display-list.js +2 -1
  345. package/dist/view/layer/drape-planner.d.ts +2 -2
  346. package/dist/view/layer/frame-render.d.ts +3 -3
  347. package/dist/view/layer/frame-render.js +7 -2
  348. package/dist/view/layer/frame-state.d.ts +6 -6
  349. package/dist/view/layer/index.d.ts +2 -2
  350. package/dist/view/layer/index.js +1 -1
  351. package/dist/view/layer/render.d.ts +4 -4
  352. package/dist/view/layer/render.js +3 -8
  353. package/dist/view/layer/renderers.d.ts +2 -2
  354. package/dist/view/layer/renderers.js +1 -1
  355. package/dist/view/layer/slot-manager.d.ts +2 -2
  356. package/dist/view/layer/slot-manager.js +4 -4
  357. package/dist/view/layer/slots.d.ts +2 -2
  358. package/dist/view/layer/slots.js +1 -1
  359. package/dist/view/layer/store-retained-bbox.js +3 -2
  360. package/dist/view/layer/store-retained-classify.d.ts +5 -7
  361. package/dist/view/layer/store-retained-classify.js +19 -7
  362. package/dist/view/layer/store-retained-collect.js +8 -7
  363. package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
  364. package/dist/view/layer/store-retained-coord-patch.js +13 -4
  365. package/dist/view/layer/store-retained-immediate.d.ts +3 -3
  366. package/dist/view/layer/store-retained-immediate.js +3 -8
  367. package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
  368. package/dist/view/layer/store-retained.d.ts +2 -2
  369. package/dist/view/layer/store-retained.js +1 -1
  370. package/dist/view/renderers/batch-manager.js +8 -7
  371. package/dist/view/renderers/drawer.js +21 -15
  372. package/dist/view/renderers/image.js +13 -39
  373. package/dist/view/renderers/line/line-types.d.ts +3 -3
  374. package/dist/view/renderers/line/sdf-line.js +3 -1
  375. package/dist/view/renderers/point/billboard-depth.js +1 -1
  376. package/dist/view/renderers/point/point-instance.js +1 -1
  377. package/dist/view/renderers/point/point-shape.js +2 -2
  378. package/dist/view/renderers/point/point-style.js +48 -4
  379. package/dist/view/renderers/polygon/batch.js +1 -2
  380. package/dist/view/renderers/polygon/fill.js +3 -1
  381. package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
  382. package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
  383. package/dist/view/renderers/stroke.js +3 -1
  384. package/dist/view/shaders/helpers.d.ts +2 -42
  385. package/dist/view/shaders/helpers.js +0 -6
  386. package/dist/view/shaders/projection.d.ts +15 -7
  387. package/dist/view/shaders/projection.js +23 -6
  388. package/dist/view/shaders/quad.d.ts +16 -12
  389. package/dist/view/shaders/quad.js +34 -13
  390. package/dist/view/style-rule.d.ts +5 -42
  391. package/dist/view/style-rule.js +20 -44
  392. package/dist/view/terrain/binding.d.ts +1 -0
  393. package/dist/view/terrain/binding.js +29 -0
  394. package/dist/view/terrain/context.d.ts +3 -4
  395. package/dist/view/terrain/context.js +4 -5
  396. package/dist/view/terrain/drape/geometry.js +1 -1
  397. package/dist/view/terrain/drape/pass.d.ts +1 -1
  398. package/dist/view/terrain/drape/pass.js +8 -7
  399. package/dist/view/terrain/polygon.d.ts +9 -5
  400. package/dist/view/terrain/polygon.js +16 -2
  401. package/dist/view/terrain/state.d.ts +1 -1
  402. package/dist/view/terrain/state.js +1 -1
  403. package/dist/view/terrain/tessellation.d.ts +2 -2
  404. package/dist/view/terrain/tessellation.js +1 -1
  405. package/dist/view/ui/auxiliary-handles.d.ts +6 -29
  406. package/dist/view/ui/bounds.js +8 -12
  407. package/dist/view/ui/handle-test.js +2 -2
  408. package/dist/view/ui/handle-thinning.js +17 -17
  409. package/dist/view/ui/handles.js +21 -13
  410. package/dist/view/ui/helper.d.ts +1 -1
  411. package/dist/view/ui/helper.js +1 -1
  412. package/dist/view/ui/index.d.ts +1 -1
  413. package/dist/view/ui/selection-scope.js +4 -2
  414. package/dist/view/ui/selection-ui/bounding-box.js +6 -6
  415. package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
  416. package/dist/view/ui/selection-ui/extension-registry.js +70 -7
  417. package/dist/view/ui/selection-ui/index.d.ts +2 -2
  418. package/dist/view/ui/selection-ui/index.js +1 -1
  419. package/dist/view/ui/selection-ui/renderer.js +15 -38
  420. package/dist/view/ui/selection-ui/types.d.ts +17 -2
  421. package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
  422. package/dist/view/ui/selection-ui-drawer.js +63 -2
  423. package/dist/view/ui/tentative.js +1 -1
  424. package/dist/webgl/index.d.ts +65 -0
  425. package/dist/webgl/index.js +62 -0
  426. package/package.json +20 -9
  427. package/dist/api/api.d.ts +0 -1259
  428. package/dist/api/api.js +0 -86
  429. package/dist/api/context.d.ts +0 -173
  430. package/dist/api/display-api.js +0 -23
  431. package/dist/api/event-api.d.ts +0 -13
  432. package/dist/api/event-api.js +0 -17
  433. package/dist/api/extension-api.d.ts +0 -46
  434. package/dist/api/extension-api.js +0 -85
  435. package/dist/api/feature-api.d.ts +0 -11
  436. package/dist/api/feature-api.js +0 -101
  437. package/dist/api/geometry/apply.d.ts +0 -51
  438. package/dist/api/geometry/boolean.d.ts +0 -28
  439. package/dist/api/geometry/boolean.js +0 -65
  440. package/dist/api/geometry/types.d.ts +0 -31
  441. package/dist/api/geometry-operations.d.ts +0 -162
  442. package/dist/api/geometry-operations.js +0 -94
  443. package/dist/api/group-api.d.ts +0 -10
  444. package/dist/api/group-api.js +0 -78
  445. package/dist/api/import-export/constants.d.ts +0 -29
  446. package/dist/api/import-export/constants.js +0 -40
  447. package/dist/api/import-export/file-name.d.ts +0 -10
  448. package/dist/api/import-export/file-name.js +0 -20
  449. package/dist/api/import-export/geojson-export.d.ts +0 -19
  450. package/dist/api/import-export/image-import.d.ts +0 -12
  451. package/dist/api/import-export/image-import.js +0 -53
  452. package/dist/api/import-export/index.d.ts +0 -9
  453. package/dist/api/import-export/index.js +0 -107
  454. package/dist/api/import-export/native-format.d.ts +0 -15
  455. package/dist/api/import-export/style-validation.d.ts +0 -27
  456. package/dist/api/import-export/style-validation.js +0 -49
  457. package/dist/api/import-export/types.d.ts +0 -26
  458. package/dist/api/index.d.ts +0 -15
  459. package/dist/api/index.js +0 -3
  460. package/dist/api/input-api.d.ts +0 -158
  461. package/dist/api/input-api.js +0 -144
  462. package/dist/api/instance-api.d.ts +0 -38
  463. package/dist/api/instance-api.js +0 -136
  464. package/dist/api/layer-api.d.ts +0 -12
  465. package/dist/api/layer-api.js +0 -62
  466. package/dist/api/selection-api.d.ts +0 -7
  467. package/dist/api/selection-api.js +0 -78
  468. package/dist/api/snapping-api.d.ts +0 -125
  469. package/dist/api/snapping-api.js +0 -50
  470. package/dist/api/topology-api.d.ts +0 -30
  471. package/dist/api/topology-api.js +0 -16
  472. package/dist/api/tracing-api.d.ts +0 -31
  473. package/dist/api/tracing-api.js +0 -16
  474. package/dist/dispatcher/hit-test/index.d.ts +0 -14
  475. package/dist/dispatcher/hit-test/index.js +0 -9
  476. package/dist/dispatcher/index.d.ts +0 -15
  477. package/dist/dispatcher/index.js +0 -3
  478. package/dist/display/columnar/index.d.ts +0 -12
  479. package/dist/display/columnar/index.js +0 -13
  480. package/dist/display/columnar/prepare.d.ts +0 -42
  481. package/dist/display/columnar/prepare.js +0 -116
  482. package/dist/display/index.d.ts +0 -13
  483. package/dist/display/types.js +0 -43
  484. package/dist/maplibre-gl-draw.d.ts +0 -47
  485. package/dist/modes/cursor.js +0 -72
  486. package/dist/modes/index.d.ts +0 -7
  487. package/dist/operations/index.d.ts +0 -9
  488. package/dist/operations/index.js +0 -3
  489. package/dist/plugins/index.d.ts +0 -10
  490. package/dist/plugins/mutation-hooks.d.ts +0 -28
  491. package/dist/plugins/mutation-hooks.js +0 -84
  492. package/dist/plugins/plugin-context.js +0 -367
  493. package/dist/plugins/plugin-manager.d.ts +0 -103
  494. package/dist/plugins/plugin-manager.js +0 -316
  495. package/dist/plugins/plugin.d.ts +0 -529
  496. package/dist/shared/config/index.d.ts +0 -17
  497. package/dist/shared/config/index.js +0 -8
  498. package/dist/shared/utils/index.d.ts +0 -15
  499. package/dist/shared/utils/index.js +0 -24
  500. package/dist/snapping/index.d.ts +0 -14
  501. package/dist/snapping/index.js +0 -4
  502. package/dist/store/change-merger.js +0 -102
  503. package/dist/store/event-bridge.js +0 -161
  504. package/dist/store/index.d.ts +0 -12
  505. package/dist/store/index.js +0 -4
  506. package/dist/view/index.d.ts +0 -47
  507. package/dist/view/index.js +0 -20
  508. /package/dist/api/{geometry/types.js → datasets.js} +0 -0
  509. /package/dist/api/{import-export/types.js → document.js} +0 -0
  510. /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
  511. /package/dist/{display/index.js → api/events.js} +0 -0
  512. /package/dist/{modes/index.js → api/extension/context.js} +0 -0
  513. /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
  514. /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
  515. /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
  516. /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
  517. /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
  518. /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
  519. /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
  520. /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
  521. /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
  522. /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
  523. /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
  524. /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
  525. /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
  526. /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
  527. /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
  528. /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
  529. /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
  530. /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
  531. /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
  532. /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
  533. /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
  534. /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
  535. /package/dist/{display → dataset}/chunk-set.js +0 -0
  536. /package/dist/{display → dataset}/dataset.d.ts +0 -0
  537. /package/dist/{display → dataset}/manager.js +0 -0
  538. /package/dist/{display → dataset}/provider.js +0 -0
  539. /package/dist/{display → dataset}/selection.d.ts +0 -0
  540. /package/dist/{display → dataset}/selection.js +0 -0
@@ -51,7 +51,7 @@ export function columnValue(column, row) {
51
51
  *
52
52
  * @internal
53
53
  */
54
- export class ColumnarGeometryColumn {
54
+ export class GeometryColumnReader {
55
55
  /**
56
56
  * @param rows The number of rows (the length of the table), or undefined for a child of a mixed
57
57
  * column, whose number of rows is read from its arrays
@@ -95,19 +95,19 @@ export class ColumnarGeometryColumn {
95
95
  // The messages about the geometry of a table of one type keep their short form
96
96
  const at = rows === undefined ? `${path}: ` : '';
97
97
  if (!geometry || !(geometry.type in OFFSET_LEVELS)) {
98
- throw new Error(`Columnar input: ${at}unknown geometry type "${geometry?.type}"`);
98
+ throw new Error(`Table: ${at}unknown geometry type "${geometry?.type}"`);
99
99
  }
100
100
  if (!(geometry.coords instanceof Float64Array)) {
101
- throw new Error(`Columnar input: ${path}.coords must be a Float64Array`);
101
+ throw new Error(`Table: ${path}.coords must be a Float64Array`);
102
102
  }
103
103
  const dimensions = geometry.dimensions ?? 2;
104
104
  if (dimensions !== 2 && dimensions !== 3) {
105
- throw new Error(`Columnar input: ${at}dimensions must be 2 or 3 (got ${dimensions})`);
105
+ throw new Error(`Table: ${at}dimensions must be 2 or 3 (got ${dimensions})`);
106
106
  }
107
107
  const offsets = geometry.offsets ?? [];
108
108
  const levels = OFFSET_LEVELS[geometry.type];
109
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})`);
110
+ throw new Error(`Table: ${at}a ${geometry.type} ${rows === undefined ? 'column' : 'table'} has ${levels} offset arrays (got ${offsets.length})`);
111
111
  }
112
112
  const vertexCount = Math.floor(geometry.coords.length / dimensions);
113
113
  let length = rows;
@@ -121,15 +121,15 @@ export class ColumnarGeometryColumn {
121
121
  for (let level = 0; level < levels; level++) {
122
122
  const array = offsets[level];
123
123
  if (!(array instanceof Int32Array)) {
124
- throw new Error(`Columnar input: ${at}offsets[${level}] must be an Int32Array`);
124
+ throw new Error(`Table: ${at}offsets[${level}] must be an Int32Array`);
125
125
  }
126
126
  if (array.length < elements + 1) {
127
- throw new Error(`Columnar input: ${at}offsets[${level}] has ${array.length} entries for ${elements} elements`);
127
+ throw new Error(`Table: ${at}offsets[${level}] has ${array.length} entries for ${elements} elements`);
128
128
  }
129
129
  elements = array[elements];
130
130
  }
131
131
  if (elements > vertexCount) {
132
- throw new Error(`Columnar input: ${at}the offsets reach coordinate ${elements} of ${vertexCount} coordinates`);
132
+ throw new Error(`Table: ${at}the offsets reach coordinate ${elements} of ${vertexCount} coordinates`);
133
133
  }
134
134
  this.type = geometry.type;
135
135
  this.coords = geometry.coords;
@@ -192,11 +192,11 @@ function isMixedGeometry(geometry) {
192
192
  return geometry?.type === 'Mixed';
193
193
  }
194
194
  /**
195
- * A validated columnar table
195
+ * A validated table
196
196
  *
197
197
  * @internal
198
198
  */
199
- export class ColumnarTable {
199
+ export class TableReader {
200
200
  /**
201
201
  * @throws when the shape of the input does not add up (a wrong type, an offset array of the
202
202
  * wrong length, a column shorter than the table, a row of a mixed column pointing outside its
@@ -273,7 +273,7 @@ export class ColumnarTable {
273
273
  });
274
274
  const { length, geometry } = input;
275
275
  if (!Number.isInteger(length) || length < 0) {
276
- throw new Error(`Columnar input: length must be a non-negative integer (got ${length})`);
276
+ throw new Error(`Table: length must be a non-negative integer (got ${length})`);
277
277
  }
278
278
  if (isMixedGeometry(geometry)) {
279
279
  this.children = readMixedChildren(geometry, length);
@@ -281,21 +281,21 @@ export class ColumnarTable {
281
281
  this.childRows = geometry.offsets;
282
282
  }
283
283
  else {
284
- this.children = [new ColumnarGeometryColumn(geometry, length, 'geometry')];
284
+ this.children = [new GeometryColumnReader(geometry, length, 'geometry')];
285
285
  this.childTypes = null;
286
286
  this.childRows = null;
287
287
  }
288
288
  this.onlyPoints = this.children.every((child) => child.type === 'Point' || child.type === 'MultiPoint');
289
289
  if (input.validity && input.validity.length < Math.ceil(length / 8)) {
290
- throw new Error('Columnar input: validity is shorter than the table');
290
+ throw new Error('Table: validity is shorter than the table');
291
291
  }
292
292
  if (input.ids && columnLength(input.ids) < length) {
293
- throw new Error('Columnar input: ids is shorter than the table');
293
+ throw new Error('Table: ids is shorter than the table');
294
294
  }
295
295
  const columns = input.columns ?? {};
296
296
  for (const [name, column] of Object.entries(columns)) {
297
297
  if (columnLength(column) < length) {
298
- throw new Error(`Columnar input: column "${name}" is shorter than the table`);
298
+ throw new Error(`Table: column "${name}" is shorter than the table`);
299
299
  }
300
300
  }
301
301
  this.length = length;
@@ -420,14 +420,18 @@ export class ColumnarTable {
420
420
  * @param hasGeometry Whether the row has a geometry (a row without one is not visible)
421
421
  */
422
422
  featureAt(row, hasGeometry) {
423
+ const type = this.columnOf(row)?.type ?? 'Point';
423
424
  return {
424
425
  id: this.idOf(row),
425
- type: this.columnOf(row)?.type ?? 'Point',
426
- coordinates: this.coordinatesOf(row),
426
+ type,
427
+ // The type of a column is a GeoJSON geometry type, so it is the kind of the geometry
428
+ geometry: { type, coordinates: this.coordinatesOf(row) },
427
429
  layerId: '',
430
+ groupId: undefined,
428
431
  properties: this.propertiesOf(row),
429
432
  locked: false,
430
433
  visible: hasGeometry,
434
+ style: {},
431
435
  };
432
436
  }
433
437
  }
@@ -440,31 +444,31 @@ export class ColumnarTable {
440
444
  function readMixedChildren(geometry, length) {
441
445
  const { types, offsets, children } = geometry;
442
446
  if (!(types instanceof Int8Array)) {
443
- throw new Error('Columnar input: geometry.types must be an Int8Array');
447
+ throw new Error('Table: geometry.types must be an Int8Array');
444
448
  }
445
449
  if (!(offsets instanceof Int32Array)) {
446
- throw new Error('Columnar input: geometry.offsets must be an Int32Array');
450
+ throw new Error('Table: geometry.offsets must be an Int32Array');
447
451
  }
448
452
  if (!Array.isArray(children)) {
449
- throw new Error('Columnar input: geometry.children must be an array');
453
+ throw new Error('Table: geometry.children must be an array');
450
454
  }
451
455
  if (types.length < length) {
452
- throw new Error('Columnar input: geometry.types is shorter than the table');
456
+ throw new Error('Table: geometry.types is shorter than the table');
453
457
  }
454
458
  if (offsets.length < length) {
455
- throw new Error('Columnar input: geometry.offsets is shorter than the table');
459
+ throw new Error('Table: geometry.offsets is shorter than the table');
456
460
  }
457
- const columns = children.map((child, k) => new ColumnarGeometryColumn(child, undefined, `geometry.children[${k}]`));
461
+ const columns = children.map((child, k) => new GeometryColumnReader(child, undefined, `geometry.children[${k}]`));
458
462
  for (let row = 0; row < length; row++) {
459
463
  const child = types[row];
460
464
  if (child < 0)
461
465
  continue;
462
466
  if (child >= columns.length) {
463
- throw new Error(`Columnar input: geometry.types[${row}] is ${child}, but there are ${columns.length} children`);
467
+ throw new Error(`Table: geometry.types[${row}] is ${child}, but there are ${columns.length} children`);
464
468
  }
465
469
  const at = offsets[row];
466
470
  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`);
471
+ throw new Error(`Table: geometry.offsets[${row}] is ${at}, but geometry.children[${child}] has ${columns[child].length} rows`);
468
472
  }
469
473
  }
470
474
  return columns;
@@ -1,19 +1,24 @@
1
1
  /**
2
- * The columnar input of a dataset
2
+ * The types of a table
3
3
  *
4
- * The rows are given as columns of typed arrays in the layout of GeoArrow (the native encoding
4
+ * The rows are held as columns of typed arrays in the layout of GeoArrow (the native encoding
5
5
  * with separated offsets), so a reader of GeoParquet, Arrow or FlatGeobuf can hand what it reads
6
6
  * over without building an object per row, and a Worker can send it to the main thread without a
7
7
  * copy.
8
8
  */
9
+ import type { BBox } from '../geometry/types.js';
9
10
  /**
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.
11
+ * The geometry type of a geometry column of a single type.
12
+ *
13
+ * A table whose rows have different types gives a {@link TableMixedGeometry}, made of columns of
14
+ * these types.
12
15
  */
13
- export type DatasetColumnarGeometryType = 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon';
16
+ export type GeometryType = 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon';
14
17
  /**
15
- * The geometry column of a columnar table, in the layout of GeoArrow: interleaved coordinates
16
- * and the offset arrays, outermost first.
18
+ * The geometry column of a table whose rows share one geometry type.
19
+ *
20
+ * It follows the layout of GeoArrow: interleaved coordinates and the offset arrays, outermost
21
+ * first.
17
22
  *
18
23
  * Every row owns a contiguous run of the coordinates, so the offsets only say where each row,
19
24
  * part and ring starts:
@@ -30,20 +35,20 @@ export type DatasetColumnarGeometryType = 'Point' | 'LineString' | 'Polygon' | '
30
35
  * the first element, the last is the end of the last), and its values never decrease.
31
36
  *
32
37
  * 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.
38
+ * or a 0 bit in {@link Table.validity}. It is neither drawn nor hit.
34
39
  *
35
40
  * @example A table of two lines
36
41
  * ```ts
37
- * const geometry: DatasetColumnarGeometry = {
42
+ * const geometry: TableGeometry = {
38
43
  * type: 'LineString',
39
44
  * coords: new Float64Array([139.70, 35.68, 139.71, 35.69, 139.72, 35.66, 139.73, 35.67]),
40
45
  * offsets: [new Int32Array([0, 2, 4])],
41
46
  * };
42
47
  * ```
43
48
  */
44
- export interface DatasetColumnarGeometry {
49
+ export interface TableGeometry {
45
50
  /** The geometry type of every row */
46
- type: DatasetColumnarGeometryType;
51
+ type: GeometryType;
47
52
  /**
48
53
  * The coordinates in degrees, interleaved: `[lng0, lat0, lng1, lat1, ...]`, or
49
54
  * `[lng0, lat0, z0, ...]` with `dimensions: 3`
@@ -58,20 +63,22 @@ export interface DatasetColumnarGeometry {
58
63
  offsets?: Int32Array[];
59
64
  }
60
65
  /**
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.
66
+ * The geometry column of a table whose rows have different geometry types.
67
+ *
68
+ * It follows the layout of the mixed geometry of GeoArrow (a dense union of Arrow): a geometry
69
+ * column of a single type per child, and for every row of the table the child and the row within
70
+ * it.
64
71
  *
65
72
  * The geometry of row `i` is row `offsets[i]` of `children[types[i]]`, and row `i` behaves exactly
66
73
  * as the feature of that child's type with those coordinates. The rows of a child can be in any
67
74
  * 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
75
+ * geometry (as a 0 bit in {@link Table.validity}, which still applies on top). The
69
76
  * number of rows of a child is read from its arrays: the coordinates for a Point column,
70
77
  * `offsets[0].length - 1` for the others.
71
78
  *
72
79
  * @example A point, a line and a polygon, the polygon first in the table
73
80
  * ```ts
74
- * const geometry: DatasetColumnarMixedGeometry = {
81
+ * const geometry: TableMixedGeometry = {
75
82
  * type: 'Mixed',
76
83
  * types: new Int8Array([2, 0, 1]),
77
84
  * offsets: new Int32Array([0, 0, 0]),
@@ -91,7 +98,7 @@ export interface DatasetColumnarGeometry {
91
98
  * };
92
99
  * ```
93
100
  */
94
- export interface DatasetColumnarMixedGeometry {
101
+ export interface TableMixedGeometry {
95
102
  /** Marks the mixed form */
96
103
  type: 'Mixed';
97
104
  /**
@@ -102,57 +109,57 @@ export interface DatasetColumnarMixedGeometry {
102
109
  /** For every row, the row within its child column */
103
110
  offsets: Int32Array;
104
111
  /** The geometry columns of a single type */
105
- children: DatasetColumnarGeometry[];
112
+ children: TableGeometry[];
106
113
  }
107
114
  /**
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
+ * An attribute column encoded as a dictionary (the dictionary type of Arrow).
116
+ *
117
+ * The value of row `i` is `dictionary[codes[i]]`. A negative code, or one past the end of the
118
+ * dictionary, means no value (`null`).
115
119
  *
116
120
  * @example
117
121
  * ```ts
118
- * const category: DatasetDictionaryColumn = {
122
+ * const category: DictionaryColumn = {
119
123
  * codes: new Int32Array([0, 1, 0, -1]),
120
124
  * dictionary: ['cafe', 'school'],
121
125
  * }; // 'cafe', 'school', 'cafe', null
122
126
  * ```
123
127
  */
124
- export interface DatasetDictionaryColumn {
128
+ export interface DictionaryColumn {
125
129
  /** The code of each row */
126
- codes: DatasetDictionaryCodes;
130
+ codes: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array;
127
131
  /** The distinct values */
128
132
  dictionary: readonly (string | number | boolean | null)[];
129
133
  }
130
134
  /**
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`).
135
+ * An attribute column of a table: a typed array of numbers, a dictionary, or a plain array.
136
+ *
137
+ * Row `i` of the table is element `i` of the column. In a `Float64Array` or a `Float32Array`,
138
+ * NaN means no value (`null`).
134
139
  */
135
- export type DatasetColumn = Float64Array | Float32Array | Int32Array | Uint32Array | Int16Array | Uint16Array | Int8Array | Uint8Array | DatasetDictionaryColumn | readonly unknown[];
140
+ export type Column = Float64Array | Float32Array | Int32Array | Uint32Array | Int16Array | Uint16Array | Int8Array | Uint8Array | DictionaryColumn | readonly unknown[];
136
141
  /**
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}.
142
+ * A table of rows held as columns, the fast way to put many rows on the map.
143
+ *
144
+ * Build one with {@link tableFromFeatures} or {@link createTableBuilder}, or take the output of
145
+ * a GeoArrow reader as it is: the layout is the same. Pass it as `table` to
146
+ * {@link maplibre-gl-draw!DatasetsCollection.add | draw.datasets.add} or to
147
+ * {@link maplibre-gl-draw!Dataset.setTable | Dataset.setTable}.
140
148
  *
141
149
  * 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.
150
+ * dataset holds them (replace the table with `setTable` instead). Every array can be sent from a
151
+ * Worker without a copy; {@link transferList} lists their buffers.
145
152
  *
146
153
  * Row `i` behaves as the feature `{ id, type: geometry.type, coordinates, properties }` where
147
154
  * `coordinates` are read from the geometry column, `properties` holds the value of every column at
148
155
  * 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
156
+ * {@link TableMixedGeometry}, `type` and `coordinates` are those of the row's child
150
157
  * column. The rows have no individual style; the style rule and the base style of the dataset
151
158
  * color them.
152
159
  *
153
160
  * @example
154
161
  * ```ts
155
- * const places: DatasetColumnarInput = {
162
+ * const places: Table = {
156
163
  * length: 3,
157
164
  * geometry: {
158
165
  * type: 'Point',
@@ -163,17 +170,17 @@ export type DatasetColumn = Float64Array | Float32Array | Int32Array | Uint32Arr
163
170
  * visitors: new Float64Array([3.5, 0.7, 3.0]),
164
171
  * },
165
172
  * };
166
- * draw.addDataset({ id: 'places', columnar: places });
173
+ * draw.datasets.add({ id: 'places', table: places });
167
174
  * ```
168
175
  */
169
- export interface DatasetColumnarInput {
176
+ export interface Table {
170
177
  /** The number of rows */
171
178
  length: number;
172
179
  /**
173
- * The geometry column: of one type, or {@link DatasetColumnarMixedGeometry} for rows of
180
+ * The geometry column: of one type, or {@link TableMixedGeometry} for rows of
174
181
  * different types
175
182
  */
176
- geometry: DatasetColumnarGeometry | DatasetColumnarMixedGeometry;
183
+ geometry: TableGeometry | TableMixedGeometry;
177
184
  /**
178
185
  * Which rows have a geometry, as the validity bitmap of Arrow: bit `i % 8` of byte `i >> 3` (the
179
186
  * lowest bit first) is 1 for a row with a geometry. Every row has one when omitted
@@ -183,41 +190,30 @@ export interface DatasetColumnarInput {
183
190
  * The id of each row, turned into a string with `String()` (the row number as a string when
184
191
  * omitted). The ids must be unique within the table
185
192
  */
186
- ids?: DatasetColumn;
193
+ ids?: Column;
187
194
  /**
188
195
  * The attribute columns by name. They become the `properties` of the rows, which the style
189
196
  * rule reads. Passing only the columns that the rule and the host read is enough
190
197
  */
191
- columns?: Record<string, DatasetColumn>;
198
+ columns?: Record<string, Column>;
192
199
  }
193
200
  /**
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.
201
+ * A table together with what {@link prepareTable} computed for it, ready for the main thread.
197
202
  *
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}.
203
+ * Besides the table it carries the bbox of each row, the spatial chunks and the spatial index
204
+ * of the hit testing, all in typed arrays, so it can be sent from a Worker without a copy
205
+ * ({@link transferList}). It also tells the number of rows and the extent of the table. Treat
206
+ * everything else as opaque: pass the whole object as `table` to {@link maplibre-gl-draw!DatasetsCollection.add | draw.datasets.add} or to
207
+ * {@link maplibre-gl-draw!Dataset.setTable | Dataset.setTable}.
201
208
  */
202
- export interface DatasetColumnarPrepared {
203
- /** The number of rows it was computed for (it must equal the `length` of the table) */
209
+ export interface PreparedTable {
210
+ /** The table the rest was computed for */
211
+ readonly table: Table;
212
+ /** The number of rows, the `length` of the table it was computed for */
204
213
  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;
214
+ /**
215
+ * The extent of the rows with a geometry, as `[west, south, east, north]` in degrees, or
216
+ * `null` when no row has a geometry
217
+ */
218
+ readonly bounds: BBox | null;
223
219
  }
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
@@ -5,15 +5,16 @@
5
5
  */
6
6
  function shouldRepaint(changes) {
7
7
  // A repaint is required if any of the following changed
8
- return !!((changes.features || // creation, update or deletion of features
8
+ return !!(changes.features || // creation, update or deletion of features
9
9
  changes.layers || // layer changes
10
10
  changes.groups || // group changes (reordering, show/hide)
11
11
  changes.layerReorder || // reordering of items within a layer
12
12
  changes.groupReorder || // reordering of features within a group
13
13
  changes.selection || // selection state changes
14
14
  changes.tentative || // changes to the transient state while drawing
15
- changes.uiStateChanged) // changes to the UI state (dragState, boxSelection)
16
- );
15
+ changes.uiStateChanged || // changes to the UI state (dragState, boxSelection)
16
+ // the whole document replaced
17
+ changes.reset);
17
18
  }
18
19
  /**
19
20
  * RenderCoordinator implementation
@@ -26,11 +26,12 @@
26
26
  * registry per draw instance (createFeatureCompanionRegistry). When several instances
27
27
  * (the hidden renderers of printing and thumbnails) hold different Stores that have the
28
28
  * same feature ids, the provider has no way to tell "is this a feature of my own Store?"
29
- * (a replaced DocumentStore may return a new object from getFeature every time, so identity
29
+ * (a replaced Store may return a new object from getFeature every time, so identity
30
30
  * cannot be used), so ownership is expressed by separating the registries.
31
31
  */
32
32
  import type { ProjectionData } from 'maplibre-gl';
33
- import type { CustomRendererDrawContext } from '../extension/index.js';
33
+ import type { MouseNormalizedEvent } from '../dispatcher/types.js';
34
+ import type { FrameDrawContext } from '../extension/index.js';
34
35
  import type { LngLat, ScreenPoint } from '../shared/math/index.js';
35
36
  import type { Coordinate, Feature } from '../store/types.js';
36
37
  /**
@@ -67,7 +68,8 @@ export interface CompanionHitContext {
67
68
  * Draws something that accompanies a feature (a label, a callout) right below it in the
68
69
  * draw order, and makes it clickable in the same order.
69
70
  *
70
- * Register one with `draw.registerFeatureCompanionProvider(provider)`. What is drawn and what
71
+ * A `CompanionProvider` of `draw.extensions.companionProviders` is installed as one. What is
72
+ * drawn and what
71
73
  * is hit are resolved at the same position of the z order, so what is visible is what can be
72
74
  * grabbed. A click on a companion does not change the selection; it is handed to
73
75
  * `onCompanionClick`.
@@ -88,10 +90,11 @@ export interface FeatureCompanionProvider {
88
90
  * core flushes the batch in progress before and after the call, so what is drawn always
89
91
  * comes below this feature and above the feature one step further back.
90
92
  */
91
- draw(feature: Feature, projectionData: ProjectionData, zoom: number, context: CustomRendererDrawContext): void;
93
+ draw(feature: Feature, projectionData: ProjectionData, zoom: number, context: FrameDrawContext): void;
92
94
  /**
93
95
  * Called in the z scan of click resolution, after the feature itself misses and before
94
- * the next feature.
96
+ * the next feature. The feature itself is hit on what it draws (the marker of a point
97
+ * included) with the click tolerance, so it always wins over its own companion.
95
98
  *
96
99
  * If it returns a hit, core consumes that click (it does not change the selection state,
97
100
  * nor does it clear the selection as an empty click would) and calls
@@ -99,12 +102,15 @@ export interface FeatureCompanionProvider {
99
102
  */
100
103
  hitTest(feature: Feature, point: ScreenPoint, context: CompanionHitContext): CompanionHit | null;
101
104
  /**
102
- * The notification of a consumed click.
105
+ * The notification of a click on the companion.
103
106
  *
104
107
  * @param featureId The ID of the feature that owns the companion
105
108
  * @param hit The hit returned by hitTest
109
+ * @param event The click, when the engine has one to give
110
+ * @returns False to leave the click to the select mode, as a click on the feature that owns
111
+ * the companion; anything else consumes it
106
112
  */
107
- onCompanionClick(featureId: string, hit: CompanionHit): void;
113
+ onCompanionClick(featureId: string, hit: CompanionHit, event?: MouseNormalizedEvent): boolean | undefined;
108
114
  }
109
115
  /**
110
116
  * A companion hit resolved in the z scan, with the provider and the feature it belongs to.
@@ -96,13 +96,21 @@ export function hitTestFeatureCompanions(registry, feature, context) {
96
96
  return null;
97
97
  }
98
98
  /**
99
- * Hands a consumed click back to the provider
99
+ * Hands a click on a companion to its provider
100
100
  *
101
101
  * If the provider has already been unregistered, nothing happens (the click stays
102
102
  * consumed and the selection state does not change).
103
103
  *
104
+ * @returns Whether the click was consumed; false when the provider leaves it to the select
105
+ * mode
104
106
  * @internal
105
107
  */
106
- export function notifyFeatureCompanionClick(registry, result) {
107
- registry.get(result.providerId)?.onCompanionClick(result.featureId, result.hit);
108
+ export function notifyFeatureCompanionClick(registry, result, event) {
109
+ const provider = registry.get(result.providerId);
110
+ if (!provider)
111
+ return true;
112
+ const consumed = event === undefined
113
+ ? provider.onCompanionClick(result.featureId, result.hit)
114
+ : provider.onCompanionClick(result.featureId, result.hit, event);
115
+ return consumed !== false;
108
116
  }
@@ -20,7 +20,7 @@
20
20
  * On a flat map nothing here is used and the geometry is exactly what it was.
21
21
  */
22
22
  import { densifyOnMercatorPlane, globeSubdivisionGrid, } from '../shared/math/globe-subdivision.js';
23
- import { getTerrainTessellationStep, tessellatePolygonFill } from './terrain/polygon.js';
23
+ import { terrainStepOf, tessellatePolygonFill } from './terrain/polygon.js';
24
24
  import { mercatorX, mercatorY } from './terrain/tessellation.js';
25
25
  /**
26
26
  * The most points the globe adds to one fill or one path
@@ -75,7 +75,7 @@ export function getGlobeTessellationStep(context, kind) {
75
75
  * @param kind Which cell of the globe applies (the terrain has one step for everything)
76
76
  */
77
77
  export function getSurfaceTessellationStep(context, kind) {
78
- return getTerrainTessellationStep(context) ?? getGlobeTessellationStep(context, kind);
78
+ return terrainStepOf(context) ?? getGlobeTessellationStep(context, kind);
79
79
  }
80
80
  /**
81
81
  * Subdivides the fill of one feature with the step of the surface
@@ -85,7 +85,7 @@ export function getSurfaceTessellationStep(context, kind) {
85
85
  * large dataset are that small at the zooms the globe is seen at.
86
86
  */
87
87
  export function tessellateSurfaceFill(context, featureId, partIndex, flatCoords, indices, step) {
88
- if (!getTerrainTessellationStep(context) && withinOneCell(flatCoords, step.grid)) {
88
+ if (!terrainStepOf(context) && withinOneCell(flatCoords, step.grid)) {
89
89
  return { flatCoords, indices, step };
90
90
  }
91
91
  return tessellatePolygonFill(context, featureId, partIndex, flatCoords, indices, step);
@@ -1,6 +1,6 @@
1
1
  import type { CustomLayerInterface, Map as MapLibreMap } from 'maplibre-gl';
2
2
  /**
3
- * Keeps the render slots of Draw on the map for as long as the returned detach function has not
3
+ * Keeps the frames of the stacking order on the map for as long as the returned detach function has not
4
4
  * been called
5
5
  *
6
6
  * One rule covers every timing: the slots are added whenever the style accepts layers and a slot
@@ -12,7 +12,7 @@ function styleAcceptsLayers(map) {
12
12
  return map.style?._loaded === true;
13
13
  }
14
14
  /**
15
- * Keeps the render slots of Draw on the map for as long as the returned detach function has not
15
+ * Keeps the frames of the stacking order on the map for as long as the returned detach function has not
16
16
  * been called
17
17
  *
18
18
  * One rule covers every timing: the slots are added whenever the style accepts layers and a slot