@sakuzu/maplibre-gl-draw 1.0.0 → 2.1.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 (541) hide show
  1. package/CHANGELOG.md +1109 -2
  2. package/README.ja.md +83 -50
  3. package/README.md +89 -53
  4. package/THIRD_PARTY_NOTICES.md +29 -0
  5. package/dist/api/datasets.d.ts +263 -0
  6. package/dist/api/document.d.ts +66 -0
  7. package/dist/api/draw.d.ts +137 -0
  8. package/dist/api/draw.js +20 -0
  9. package/dist/api/drawing.d.ts +87 -0
  10. package/dist/api/errors.d.ts +35 -0
  11. package/dist/api/errors.js +35 -0
  12. package/dist/api/events.d.ts +316 -0
  13. package/dist/api/extension/context.d.ts +247 -0
  14. package/dist/api/extension/feature-type.d.ts +129 -0
  15. package/dist/api/extension/mode.d.ts +123 -0
  16. package/dist/api/extension/plugin.d.ts +51 -0
  17. package/dist/api/extension/plugin.js +3 -0
  18. package/dist/api/extension/provider.d.ts +119 -0
  19. package/dist/api/extension/provider.js +3 -0
  20. package/dist/api/extension/render.d.ts +176 -0
  21. package/dist/api/extension/render.js +3 -0
  22. package/dist/api/extension/store.d.ts +190 -0
  23. package/dist/api/extension/store.js +3 -0
  24. package/dist/api/extensions.d.ts +306 -0
  25. package/dist/api/extensions.js +3 -0
  26. package/dist/api/features.d.ts +188 -0
  27. package/dist/api/features.js +3 -0
  28. package/dist/api/groups.d.ts +111 -0
  29. package/dist/api/groups.js +3 -0
  30. package/dist/api/hidden.d.ts +45 -0
  31. package/dist/api/hidden.js +3 -0
  32. package/dist/api/impl/adapters.js +463 -0
  33. package/dist/api/impl/contexts.js +466 -0
  34. package/dist/api/impl/create-draw.js +124 -0
  35. package/dist/api/impl/datasets.js +405 -0
  36. package/dist/api/impl/destroy-guard.js +74 -0
  37. package/dist/api/impl/document.js +280 -0
  38. package/dist/api/impl/drawing.js +180 -0
  39. package/dist/api/impl/engine-context.d.ts +7 -0
  40. package/dist/api/{context.js → impl/engine-context.js} +49 -38
  41. package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
  42. package/dist/api/impl/events.js +423 -0
  43. package/dist/api/impl/extension-host.js +364 -0
  44. package/dist/api/impl/extensions.js +229 -0
  45. package/dist/api/impl/features.js +445 -0
  46. package/dist/api/impl/geometry/apply.d.ts +32 -0
  47. package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
  48. package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
  49. package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
  50. package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
  51. package/dist/api/{geometry → impl/geometry}/split.js +10 -21
  52. package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
  53. package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
  54. package/dist/api/impl/geometry/types.js +3 -0
  55. package/dist/api/impl/groups.d.ts +3 -0
  56. package/dist/api/impl/groups.js +268 -0
  57. package/dist/api/impl/hidden.js +60 -0
  58. package/dist/api/impl/import-export/constants.d.ts +22 -0
  59. package/dist/api/impl/import-export/constants.js +24 -0
  60. package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
  61. package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
  62. package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
  63. package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
  64. package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
  65. package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
  66. package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
  67. package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
  68. package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
  69. package/dist/api/impl/import-export/image-import.d.ts +16 -0
  70. package/dist/api/impl/import-export/image-import.js +73 -0
  71. package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
  72. package/dist/api/impl/import-export/legacy-image-style.js +49 -0
  73. package/dist/api/impl/import-export/native-format.d.ts +14 -0
  74. package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
  75. package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
  76. package/dist/api/impl/import-export/native-upgrade.js +139 -0
  77. package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
  78. package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
  79. package/dist/api/impl/import-export/style-validation.d.ts +24 -0
  80. package/dist/api/impl/import-export/style-validation.js +86 -0
  81. package/dist/api/impl/import-export/types.d.ts +52 -0
  82. package/dist/api/impl/import-export/types.js +3 -0
  83. package/dist/api/impl/input.js +180 -0
  84. package/dist/api/impl/layers.js +307 -0
  85. package/dist/api/impl/metadata.d.ts +1 -0
  86. package/dist/api/impl/metadata.js +22 -0
  87. package/dist/api/impl/options.d.ts +1 -0
  88. package/dist/api/impl/options.js +851 -0
  89. package/dist/api/impl/placement.d.ts +1 -0
  90. package/dist/api/impl/placement.js +138 -0
  91. package/dist/api/impl/render-context.d.ts +13 -0
  92. package/dist/api/impl/render-context.js +272 -0
  93. package/dist/api/impl/rows.d.ts +1 -0
  94. package/dist/api/impl/rows.js +46 -0
  95. package/dist/api/impl/selection.d.ts +1 -0
  96. package/dist/api/impl/selection.js +186 -0
  97. package/dist/api/impl/shared.d.ts +64 -0
  98. package/dist/api/impl/shared.js +178 -0
  99. package/dist/api/impl/validate-extension.d.ts +1 -0
  100. package/dist/api/impl/validate-extension.js +159 -0
  101. package/dist/api/layers.d.ts +130 -0
  102. package/dist/api/layers.js +3 -0
  103. package/dist/api/metadata.d.ts +18 -0
  104. package/dist/api/metadata.js +3 -0
  105. package/dist/api/model.d.ts +487 -0
  106. package/dist/api/model.js +47 -0
  107. package/dist/api/options.d.ts +466 -0
  108. package/dist/api/options.js +3 -0
  109. package/dist/api/selection.d.ts +94 -0
  110. package/dist/api/selection.js +3 -0
  111. package/dist/api/state.d.ts +155 -0
  112. package/dist/api/state.js +12 -0
  113. package/dist/{display → dataset}/chunk.d.ts +1 -1
  114. package/dist/{display → dataset}/chunk.js +4 -3
  115. package/dist/{display → dataset}/dataset.js +21 -21
  116. package/dist/dataset/interaction.d.ts +1 -0
  117. package/dist/{display → dataset}/interaction.js +18 -6
  118. package/dist/dataset/manager.d.ts +1 -0
  119. package/dist/dataset/provider.d.ts +1 -0
  120. package/dist/{display → dataset}/retained.d.ts +1 -1
  121. package/dist/{display → dataset}/retained.js +8 -7
  122. package/dist/dataset/source.d.ts +1 -0
  123. package/dist/{display → dataset}/source.js +17 -4
  124. package/dist/dataset/spatial.d.ts +1 -0
  125. package/dist/{display → dataset}/spatial.js +1 -1
  126. package/dist/dataset/style.d.ts +1 -0
  127. package/dist/{display → dataset}/style.js +1 -1
  128. package/dist/dataset/table-source.d.ts +1 -0
  129. package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
  130. package/dist/{display → dataset}/thinning.d.ts +0 -10
  131. package/dist/{display → dataset}/thinning.js +3 -2
  132. package/dist/dataset/triangulation.d.ts +1 -0
  133. package/dist/{display → dataset}/triangulation.js +0 -0
  134. package/dist/{display → dataset}/types.d.ts +84 -121
  135. package/dist/dataset/types.js +61 -0
  136. package/dist/dispatcher/hit-test/box-strategies.js +13 -13
  137. package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
  138. package/dist/dispatcher/hit-test/globe-shape.js +5 -4
  139. package/dist/dispatcher/hit-test/service.d.ts +17 -0
  140. package/dist/dispatcher/hit-test/service.js +80 -16
  141. package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
  142. package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
  143. package/dist/dispatcher/hit-test/strategies/image.js +6 -18
  144. package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
  145. package/dist/dispatcher/hit-test/strategies/line.js +9 -2
  146. package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
  147. package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
  148. package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
  149. package/dist/dispatcher/hit-test/strategies/point.js +8 -4
  150. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
  151. package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
  152. package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
  153. package/dist/dispatcher/input-router.js +154 -70
  154. package/dist/dispatcher/normalizer.js +25 -4
  155. package/dist/dispatcher/types.d.ts +6 -1
  156. package/dist/extension/feature-handler.d.ts +1 -182
  157. package/dist/extension/index.d.ts +4 -7
  158. package/dist/extension/renderers.d.ts +1 -208
  159. package/dist/geometry/angle.d.ts +0 -8
  160. package/dist/geometry/angle.js +0 -8
  161. package/dist/geometry/bbox.d.ts +4 -12
  162. package/dist/geometry/bbox.js +4 -12
  163. package/dist/geometry/boolean.d.ts +0 -51
  164. package/dist/geometry/boolean.js +0 -51
  165. package/dist/geometry/buffer.d.ts +0 -26
  166. package/dist/geometry/buffer.js +0 -26
  167. package/dist/geometry/circle.d.ts +0 -9
  168. package/dist/geometry/circle.js +0 -9
  169. package/dist/geometry/coords.d.ts +0 -16
  170. package/dist/geometry/coords.js +0 -16
  171. package/dist/geometry/distance.d.ts +0 -24
  172. package/dist/geometry/distance.js +0 -24
  173. package/dist/geometry/errors.d.ts +21 -36
  174. package/dist/geometry/errors.js +49 -29
  175. package/dist/geometry/geojson.d.ts +85 -0
  176. package/dist/geometry/geojson.js +173 -0
  177. package/dist/geometry/index.d.ts +38 -23
  178. package/dist/geometry/index.js +43 -31
  179. package/dist/geometry/measure.d.ts +0 -27
  180. package/dist/geometry/measure.js +0 -27
  181. package/dist/geometry/predicates.d.ts +0 -9
  182. package/dist/geometry/predicates.js +0 -9
  183. package/dist/geometry/public-bounds.d.ts +26 -0
  184. package/dist/geometry/public-bounds.js +30 -0
  185. package/dist/geometry/public-combine.d.ts +78 -0
  186. package/dist/geometry/public-combine.js +82 -0
  187. package/dist/geometry/public-create.d.ts +54 -0
  188. package/dist/geometry/public-create.js +70 -0
  189. package/dist/geometry/public-measure.d.ts +170 -0
  190. package/dist/geometry/public-measure.js +283 -0
  191. package/dist/geometry/public-predicates.d.ts +54 -0
  192. package/dist/geometry/public-predicates.js +144 -0
  193. package/dist/geometry/public-repair.d.ts +75 -0
  194. package/dist/geometry/public-repair.js +77 -0
  195. package/dist/geometry/simplify.d.ts +0 -7
  196. package/dist/geometry/simplify.js +0 -7
  197. package/dist/geometry/split.d.ts +0 -20
  198. package/dist/geometry/split.js +0 -20
  199. package/dist/geometry/units.d.ts +20 -12
  200. package/dist/geometry/units.js +20 -12
  201. package/dist/index.d.ts +66 -66
  202. package/dist/index.js +6 -18
  203. package/dist/messages.d.ts +7 -7
  204. package/dist/modes/draw/circle.js +83 -207
  205. package/dist/modes/draw/commit-layer.d.ts +5 -16
  206. package/dist/modes/draw/commit-layer.js +2 -13
  207. package/dist/modes/draw/freehand.js +108 -246
  208. package/dist/modes/draw/image.js +4 -2
  209. package/dist/modes/draw/index.d.ts +5 -5
  210. package/dist/modes/draw/index.js +5 -5
  211. package/dist/modes/draw/line.js +18 -354
  212. package/dist/modes/draw/point.js +29 -78
  213. package/dist/modes/draw/polygon.js +23 -368
  214. package/dist/modes/draw/trace-support.d.ts +43 -36
  215. package/dist/modes/draw/trace-support.js +95 -98
  216. package/dist/modes/draw/vertex-drawing.d.ts +1 -0
  217. package/dist/modes/draw/vertex-drawing.js +176 -0
  218. package/dist/modes/handler.d.ts +1 -285
  219. package/dist/modes/manager.d.ts +2 -2
  220. package/dist/modes/manager.js +3 -0
  221. package/dist/modes/select/box-selection.d.ts +3 -3
  222. package/dist/modes/select/box-selection.js +2 -1
  223. package/dist/modes/select/click-handler.d.ts +5 -5
  224. package/dist/modes/select/click-handler.js +22 -20
  225. package/dist/modes/select/cursor-handler.d.ts +2 -2
  226. package/dist/modes/select/drag/intermediate-writes.js +1 -1
  227. package/dist/modes/select/drag/move.js +3 -3
  228. package/dist/modes/select/drag/operation.d.ts +3 -3
  229. package/dist/modes/select/drag/radius.js +5 -4
  230. package/dist/modes/select/drag/transform.d.ts +2 -2
  231. package/dist/modes/select/drag/transform.js +11 -5
  232. package/dist/modes/select/drag/vertex.d.ts +2 -2
  233. package/dist/modes/select/drag/vertex.js +13 -8
  234. package/dist/modes/select/drag-handler.js +44 -25
  235. package/dist/modes/select/mode.js +17 -17
  236. package/dist/modes/select/shortcut-handler.d.ts +8 -8
  237. package/dist/modes/select/shortcut-handler.js +9 -7
  238. package/dist/operations/layer-operations.js +29 -168
  239. package/dist/operations/resize.d.ts +2 -2
  240. package/dist/operations/resize.js +5 -5
  241. package/dist/operations/rotate.js +5 -5
  242. package/dist/operations/selection-operations.d.ts +16 -1
  243. package/dist/operations/selection-operations.js +28 -13
  244. package/dist/operations/shared-vertex.js +4 -2
  245. package/dist/operations/trace-graph.d.ts +0 -18
  246. package/dist/operations/trace-graph.js +0 -18
  247. package/dist/operations/vertex.js +36 -35
  248. package/dist/shared/color.d.ts +1 -0
  249. package/dist/shared/color.js +245 -0
  250. package/dist/shared/config/constants.d.ts +1 -54
  251. package/dist/shared/config/constants.js +1 -58
  252. package/dist/shared/config/feature-style.d.ts +16 -13
  253. package/dist/shared/config/feature-style.js +9 -0
  254. package/dist/shared/config/rendering.d.ts +3 -3
  255. package/dist/shared/config/selection-highlight.d.ts +0 -15
  256. package/dist/shared/config/selection-highlight.js +4 -7
  257. package/dist/shared/config/selection.d.ts +2 -32
  258. package/dist/shared/config/selection.js +0 -18
  259. package/dist/shared/config/topology.d.ts +2 -2
  260. package/dist/shared/config/trace.d.ts +4 -4
  261. package/dist/shared/math/angle.d.ts +1 -1
  262. package/dist/shared/math/angle.js +1 -1
  263. package/dist/shared/math/circle.d.ts +1 -1
  264. package/dist/shared/math/circle.js +1 -1
  265. package/dist/shared/math/distance.d.ts +2 -1
  266. package/dist/shared/math/distance.js +3 -2
  267. package/dist/shared/math/index.d.ts +1 -1
  268. package/dist/shared/math/index.js +1 -1
  269. package/dist/shared/math/transform.d.ts +23 -0
  270. package/dist/shared/math/transform.js +47 -28
  271. package/dist/shared/properties.d.ts +18 -0
  272. package/dist/shared/properties.js +129 -0
  273. package/dist/shared/types/events.d.ts +15 -7
  274. package/dist/shared/types/model.d.ts +109 -159
  275. package/dist/shared/types/style.d.ts +1 -1
  276. package/dist/shared/utils/color.d.ts +2 -36
  277. package/dist/shared/utils/color.js +13 -70
  278. package/dist/shared/utils/coordinates.d.ts +30 -4
  279. package/dist/shared/utils/coordinates.js +56 -10
  280. package/dist/shared/utils/event-emitter.d.ts +1 -262
  281. package/dist/shared/utils/event-emitter.js +4 -3
  282. package/dist/shared/utils/feature-bbox.js +8 -7
  283. package/dist/shared/utils/feature-segments.js +5 -4
  284. package/dist/shared/utils/image.d.ts +0 -4
  285. package/dist/shared/utils/image.js +0 -6
  286. package/dist/shared/utils/name-generator.d.ts +14 -20
  287. package/dist/shared/utils/name-generator.js +20 -3
  288. package/dist/shared/utils/pixel-ratio.d.ts +9 -3
  289. package/dist/shared/utils/pixel-ratio.js +13 -4
  290. package/dist/shared/utils/property.d.ts +7 -50
  291. package/dist/shared/utils/property.js +22 -87
  292. package/dist/snapping/custom-targets.js +21 -4
  293. package/dist/snapping/indicator.js +20 -11
  294. package/dist/snapping/providers/display.d.ts +6 -1
  295. package/dist/snapping/providers/display.js +2 -1
  296. package/dist/snapping/providers/guide.d.ts +3 -43
  297. package/dist/snapping/providers/guide.js +1 -44
  298. package/dist/snapping/providers/intersection.js +1 -1
  299. package/dist/snapping/providers/store.js +3 -3
  300. package/dist/snapping/service.js +18 -7
  301. package/dist/snapping/types.d.ts +9 -35
  302. package/dist/store/draw-store.js +233 -142
  303. package/dist/store/local-visibility.d.ts +11 -6
  304. package/dist/store/local-visibility.js +38 -7
  305. package/dist/store/lock.d.ts +0 -6
  306. package/dist/store/lock.js +0 -6
  307. package/dist/store/memory/change-bus.d.ts +3 -3
  308. package/dist/store/memory/change-bus.js +12 -0
  309. package/dist/store/memory/file-store.d.ts +2 -2
  310. package/dist/store/memory/ui-state.d.ts +1 -51
  311. package/dist/store/memory/ui-state.js +122 -134
  312. package/dist/store/memory.d.ts +1 -8
  313. package/dist/store/memory.js +249 -45
  314. package/dist/store/ordering.d.ts +9 -0
  315. package/dist/store/ordering.js +17 -0
  316. package/dist/store/spatial/spatial-index.d.ts +1 -1
  317. package/dist/store/spatial/spatial-index.js +1 -1
  318. package/dist/store/spatial/store-spatial-index.d.ts +3 -1
  319. package/dist/store/spatial/store-spatial-index.js +9 -3
  320. package/dist/store/store.d.ts +66 -107
  321. package/dist/store/types.d.ts +1 -1
  322. package/dist/store/writable-layer.d.ts +1 -1
  323. package/dist/store/writable-layer.js +2 -2
  324. package/dist/table/builder.d.ts +83 -0
  325. package/dist/table/builder.js +381 -0
  326. package/dist/table/index.d.ts +37 -0
  327. package/dist/table/index.js +5 -0
  328. package/dist/table/packed-rtree.d.ts +1 -0
  329. package/dist/{display → table}/packed-rtree.js +1 -1
  330. package/dist/table/partition.d.ts +1 -0
  331. package/dist/{display → table}/partition.js +3 -3
  332. package/dist/table/prepare.d.ts +44 -0
  333. package/dist/table/prepare.js +136 -0
  334. package/dist/table/table.d.ts +1 -0
  335. package/dist/{display/columnar → table}/table.js +29 -25
  336. package/dist/{display/columnar → table}/types.d.ts +68 -72
  337. package/dist/table/types.js +3 -0
  338. package/dist/view/coordinator.js +4 -3
  339. package/dist/view/feature-companion.d.ts +13 -7
  340. package/dist/view/feature-companion.js +11 -3
  341. package/dist/view/globe-subdivision.js +3 -3
  342. package/dist/view/layer/attach.d.ts +12 -6
  343. package/dist/view/layer/attach.js +86 -10
  344. package/dist/view/layer/custom-layer.js +40 -11
  345. package/dist/view/layer/display-list.js +2 -1
  346. package/dist/view/layer/drape-planner.d.ts +2 -2
  347. package/dist/view/layer/frame-render.d.ts +3 -3
  348. package/dist/view/layer/frame-render.js +7 -2
  349. package/dist/view/layer/frame-state.d.ts +6 -6
  350. package/dist/view/layer/index.d.ts +2 -2
  351. package/dist/view/layer/index.js +1 -1
  352. package/dist/view/layer/render.d.ts +4 -4
  353. package/dist/view/layer/render.js +3 -8
  354. package/dist/view/layer/renderers.d.ts +2 -2
  355. package/dist/view/layer/renderers.js +1 -1
  356. package/dist/view/layer/slot-manager.d.ts +2 -2
  357. package/dist/view/layer/slot-manager.js +4 -4
  358. package/dist/view/layer/slots.d.ts +2 -2
  359. package/dist/view/layer/slots.js +1 -1
  360. package/dist/view/layer/store-retained-bbox.js +3 -2
  361. package/dist/view/layer/store-retained-classify.d.ts +5 -7
  362. package/dist/view/layer/store-retained-classify.js +19 -7
  363. package/dist/view/layer/store-retained-collect.js +8 -7
  364. package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
  365. package/dist/view/layer/store-retained-coord-patch.js +13 -4
  366. package/dist/view/layer/store-retained-immediate.d.ts +3 -3
  367. package/dist/view/layer/store-retained-immediate.js +3 -8
  368. package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
  369. package/dist/view/layer/store-retained.d.ts +2 -2
  370. package/dist/view/layer/store-retained.js +1 -1
  371. package/dist/view/renderers/batch-manager.js +8 -7
  372. package/dist/view/renderers/drawer.js +21 -15
  373. package/dist/view/renderers/image.js +13 -39
  374. package/dist/view/renderers/line/line-types.d.ts +3 -3
  375. package/dist/view/renderers/line/sdf-line.js +3 -1
  376. package/dist/view/renderers/point/billboard-depth.js +1 -1
  377. package/dist/view/renderers/point/point-instance.js +1 -1
  378. package/dist/view/renderers/point/point-shape.js +2 -2
  379. package/dist/view/renderers/point/point-style.js +48 -4
  380. package/dist/view/renderers/polygon/batch.js +1 -2
  381. package/dist/view/renderers/polygon/fill.js +3 -1
  382. package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
  383. package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
  384. package/dist/view/renderers/stroke.js +3 -1
  385. package/dist/view/shaders/helpers.d.ts +2 -42
  386. package/dist/view/shaders/helpers.js +0 -6
  387. package/dist/view/shaders/projection.d.ts +15 -7
  388. package/dist/view/shaders/projection.js +23 -6
  389. package/dist/view/shaders/quad.d.ts +16 -12
  390. package/dist/view/shaders/quad.js +34 -13
  391. package/dist/view/style-rule.d.ts +5 -42
  392. package/dist/view/style-rule.js +20 -44
  393. package/dist/view/terrain/binding.d.ts +1 -0
  394. package/dist/view/terrain/binding.js +29 -0
  395. package/dist/view/terrain/context.d.ts +3 -4
  396. package/dist/view/terrain/context.js +4 -5
  397. package/dist/view/terrain/drape/geometry.js +1 -1
  398. package/dist/view/terrain/drape/pass.d.ts +1 -1
  399. package/dist/view/terrain/drape/pass.js +8 -7
  400. package/dist/view/terrain/polygon.d.ts +9 -5
  401. package/dist/view/terrain/polygon.js +16 -2
  402. package/dist/view/terrain/state.d.ts +1 -1
  403. package/dist/view/terrain/state.js +1 -1
  404. package/dist/view/terrain/tessellation.d.ts +2 -2
  405. package/dist/view/terrain/tessellation.js +1 -1
  406. package/dist/view/ui/auxiliary-handles.d.ts +6 -29
  407. package/dist/view/ui/bounds.js +8 -12
  408. package/dist/view/ui/handle-test.js +2 -2
  409. package/dist/view/ui/handle-thinning.js +17 -17
  410. package/dist/view/ui/handles.js +21 -13
  411. package/dist/view/ui/helper.d.ts +1 -1
  412. package/dist/view/ui/helper.js +1 -1
  413. package/dist/view/ui/index.d.ts +1 -1
  414. package/dist/view/ui/selection-scope.js +4 -2
  415. package/dist/view/ui/selection-ui/bounding-box.js +6 -6
  416. package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
  417. package/dist/view/ui/selection-ui/extension-registry.js +70 -7
  418. package/dist/view/ui/selection-ui/index.d.ts +2 -2
  419. package/dist/view/ui/selection-ui/index.js +1 -1
  420. package/dist/view/ui/selection-ui/renderer.js +15 -38
  421. package/dist/view/ui/selection-ui/types.d.ts +17 -2
  422. package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
  423. package/dist/view/ui/selection-ui-drawer.js +63 -2
  424. package/dist/view/ui/tentative.js +1 -1
  425. package/dist/webgl/index.d.ts +65 -0
  426. package/dist/webgl/index.js +62 -0
  427. package/package.json +38 -15
  428. package/dist/api/api.d.ts +0 -1259
  429. package/dist/api/api.js +0 -86
  430. package/dist/api/context.d.ts +0 -173
  431. package/dist/api/display-api.js +0 -23
  432. package/dist/api/event-api.d.ts +0 -13
  433. package/dist/api/event-api.js +0 -17
  434. package/dist/api/extension-api.d.ts +0 -46
  435. package/dist/api/extension-api.js +0 -85
  436. package/dist/api/feature-api.d.ts +0 -11
  437. package/dist/api/feature-api.js +0 -101
  438. package/dist/api/geometry/apply.d.ts +0 -51
  439. package/dist/api/geometry/boolean.d.ts +0 -28
  440. package/dist/api/geometry/boolean.js +0 -65
  441. package/dist/api/geometry/types.d.ts +0 -31
  442. package/dist/api/geometry-operations.d.ts +0 -162
  443. package/dist/api/geometry-operations.js +0 -94
  444. package/dist/api/group-api.d.ts +0 -10
  445. package/dist/api/group-api.js +0 -78
  446. package/dist/api/import-export/constants.d.ts +0 -29
  447. package/dist/api/import-export/constants.js +0 -40
  448. package/dist/api/import-export/file-name.d.ts +0 -10
  449. package/dist/api/import-export/file-name.js +0 -20
  450. package/dist/api/import-export/geojson-export.d.ts +0 -19
  451. package/dist/api/import-export/image-import.d.ts +0 -12
  452. package/dist/api/import-export/image-import.js +0 -53
  453. package/dist/api/import-export/index.d.ts +0 -9
  454. package/dist/api/import-export/index.js +0 -107
  455. package/dist/api/import-export/native-format.d.ts +0 -15
  456. package/dist/api/import-export/style-validation.d.ts +0 -27
  457. package/dist/api/import-export/style-validation.js +0 -49
  458. package/dist/api/import-export/types.d.ts +0 -26
  459. package/dist/api/index.d.ts +0 -15
  460. package/dist/api/index.js +0 -3
  461. package/dist/api/input-api.d.ts +0 -158
  462. package/dist/api/input-api.js +0 -144
  463. package/dist/api/instance-api.d.ts +0 -38
  464. package/dist/api/instance-api.js +0 -136
  465. package/dist/api/layer-api.d.ts +0 -12
  466. package/dist/api/layer-api.js +0 -62
  467. package/dist/api/selection-api.d.ts +0 -7
  468. package/dist/api/selection-api.js +0 -78
  469. package/dist/api/snapping-api.d.ts +0 -125
  470. package/dist/api/snapping-api.js +0 -50
  471. package/dist/api/topology-api.d.ts +0 -30
  472. package/dist/api/topology-api.js +0 -16
  473. package/dist/api/tracing-api.d.ts +0 -31
  474. package/dist/api/tracing-api.js +0 -16
  475. package/dist/dispatcher/hit-test/index.d.ts +0 -14
  476. package/dist/dispatcher/hit-test/index.js +0 -9
  477. package/dist/dispatcher/index.d.ts +0 -15
  478. package/dist/dispatcher/index.js +0 -3
  479. package/dist/display/columnar/index.d.ts +0 -12
  480. package/dist/display/columnar/index.js +0 -13
  481. package/dist/display/columnar/prepare.d.ts +0 -42
  482. package/dist/display/columnar/prepare.js +0 -116
  483. package/dist/display/index.d.ts +0 -13
  484. package/dist/display/types.js +0 -43
  485. package/dist/maplibre-gl-draw.d.ts +0 -47
  486. package/dist/modes/cursor.js +0 -72
  487. package/dist/modes/index.d.ts +0 -7
  488. package/dist/operations/index.d.ts +0 -9
  489. package/dist/operations/index.js +0 -3
  490. package/dist/plugins/index.d.ts +0 -10
  491. package/dist/plugins/mutation-hooks.d.ts +0 -28
  492. package/dist/plugins/mutation-hooks.js +0 -84
  493. package/dist/plugins/plugin-context.js +0 -367
  494. package/dist/plugins/plugin-manager.d.ts +0 -103
  495. package/dist/plugins/plugin-manager.js +0 -316
  496. package/dist/plugins/plugin.d.ts +0 -529
  497. package/dist/shared/config/index.d.ts +0 -17
  498. package/dist/shared/config/index.js +0 -8
  499. package/dist/shared/utils/index.d.ts +0 -15
  500. package/dist/shared/utils/index.js +0 -24
  501. package/dist/snapping/index.d.ts +0 -14
  502. package/dist/snapping/index.js +0 -4
  503. package/dist/store/change-merger.js +0 -102
  504. package/dist/store/event-bridge.js +0 -161
  505. package/dist/store/index.d.ts +0 -12
  506. package/dist/store/index.js +0 -4
  507. package/dist/view/index.d.ts +0 -47
  508. package/dist/view/index.js +0 -20
  509. /package/dist/api/{geometry/types.js → datasets.js} +0 -0
  510. /package/dist/api/{import-export/types.js → document.js} +0 -0
  511. /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
  512. /package/dist/{display/index.js → api/events.js} +0 -0
  513. /package/dist/{modes/index.js → api/extension/context.js} +0 -0
  514. /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
  515. /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
  516. /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
  517. /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
  518. /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
  519. /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
  520. /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
  521. /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
  522. /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
  523. /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
  524. /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
  525. /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
  526. /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
  527. /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
  528. /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
  529. /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
  530. /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
  531. /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
  532. /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
  533. /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
  534. /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
  535. /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
  536. /package/dist/{display → dataset}/chunk-set.js +0 -0
  537. /package/dist/{display → dataset}/dataset.d.ts +0 -0
  538. /package/dist/{display → dataset}/manager.js +0 -0
  539. /package/dist/{display → dataset}/provider.js +0 -0
  540. /package/dist/{display → dataset}/selection.d.ts +0 -0
  541. /package/dist/{display → dataset}/selection.js +0 -0
@@ -3,86 +3,54 @@
3
3
  *
4
4
  * All of the state lives in one place (Single Source of Truth), split along one line:
5
5
  *
6
- * - DocumentStore: the document (features, layers, groups, the stacking order, files and
7
- * metadata). It is the part a host may replace (`Options.store`) to keep the document
8
- * elsewhere, and it knows nothing about the user interface.
9
- * - UiState: the local state of this client (selection, editing, tentative geometry, box
10
- * selection, drag, vertex selection, mode, read-only, interaction lock, local
11
- * visibility). core owns it; it is never part of the document.
6
+ * - StoreContract: the document (features, layers, groups, the stacking order, files and
7
+ * metadata) and the state of this client that the public `Store` holds (selection,
8
+ * editing, vertex selection, mode, read-only, interaction lock, local visibility). It is
9
+ * what a host may replace (`Options.store`), and core reads and writes it only through the
10
+ * methods of the public `Store`.
11
+ * - The state only the drawing reads (the geometry being drawn, the box selection, the drag,
12
+ * the vertices that follow along). core owns it around whatever holds the rest.
12
13
  *
13
- * Store joins the two for core: it reads and writes the document through the DocumentStore,
14
- * holds the UiState, gates the writes while read-only, keeps the UiState in step with
15
- * deletions, and delivers both kinds of change in one notification. StoreView is the part of
14
+ * Store joins the two for core: it reads and writes the contract, holds the drawing state,
15
+ * gates the writes while read-only, keeps the state of this client in step with deletions,
16
+ * and delivers every change of a transaction in one notification. StoreView is the part of
16
17
  * it the host sees (`draw.getStore()`): reads, subscription and transactions, no writes.
18
+ *
19
+ * DocumentStore is the document half the in-memory contract store is built on.
17
20
  */
18
- import type { BoxSelection, DragState, Feature, FileData, Group, Layer, Metadata, Mode, Selection, SelectionType, StateChanges, TentativeState, UpdateFeatureOptions, UpdateSource, VertexSelection } from './types.js';
21
+ import type { Store as PublicStore } from '../api/extension/store.js';
22
+ import type { BoxSelection, DragState, Feature, FileData, Group, Layer, Metadata, Mode, Selection, SelectionType, StoreChange, TentativeState, UpdateFeatureOptions, UpdateSource, VertexSelection } from './types.js';
19
23
  /**
20
- * The document: the part of the state a host may replace to keep it elsewhere
21
- *
22
- * The state of a draw instance is split along one line:
23
- *
24
- * | Type | What it is |
25
- * | --- | --- |
26
- * | `DocumentStore` | The document: features, layers, groups, the stacking order, files and metadata |
27
- * | {@link UiState} | The local state of this instance, never part of the document |
28
- * | {@link Store} | Both behind the read-only gate, for core and plugins |
29
- * | {@link StoreView} | Reads, `subscribe` and `transact`, from `draw.getStore()` |
30
- * | {@link MemoryStore} | The in-memory `Store`, the default |
31
- *
32
- * A host that keeps the document elsewhere (a database, for example) implements this
33
- * interface and passes it as the `store` option. Core keeps the
34
- * local state (the selection, the features being edited, the geometry being drawn, the box
35
- * selection, the drag, the vertex selection, the mode, read-only, the interaction lock and
36
- * local visibility) around it. An implementation keeps the following contract.
37
- *
38
- * Containment: every feature is listed in exactly one container, in `group.featureIds` of its
39
- * group when it has `groupId`, otherwise in `layer.order` of its layer. An implementation
40
- * keeps it on every mutation, so that no stored feature is left out of drawing, hit testing
41
- * and ordered export.
24
+ * The Store a host gives with the `store` option: the public `Store`, with the rules core
25
+ * relies on
42
26
  *
43
- * The stacking order: `getLayerOrder()` is part of the document, saved and held with
44
- * the rest, and it holds more than layers. An application can place entries of its own in
45
- * it (the id of a dataset with `order: 'layer-order'`, a separator for
46
- * the `isExternalEntry` option); what such an entry means is the application's, and the
47
- * document only keeps its position. The entries are distinct non-empty strings: an
48
- * implementation drops any other value and keeps a repeated entry at its first position.
49
- * `createLayer` appends the new layer at the front unless the order already holds its id,
50
- * and `deleteLayer` takes that layer's id out. No other operation adds or removes entries;
51
- * an entry that is not a layer stays until the application sets an order without it, even
52
- * when what it names is gone. A layer that is not on the order is not drawn.
27
+ * Core programs against the members of the public `Store` only: every read and every write it
28
+ * makes, the writes of the state of this client included, goes through them. It adds nothing
29
+ * to them; the state only the drawing reads (the geometry being drawn, the box selection, the
30
+ * drag, the vertices that follow along) stays with core. The rules an implementation keeps are
31
+ * written on the public `Store` and `StoreView` (`src/api/extension/store.ts`).
32
+ */
33
+ export interface StoreContract extends PublicStore {
34
+ }
35
+ /**
36
+ * The document, in memory: the half the in-memory {@link StoreContract} is built on
53
37
  *
54
- * Returned objects: callers treat every object and array a getter returns as read-only.
55
- * An implementation must not change an object after it has returned or notified it; a
56
- * change stores a new object instead (MemoryStore freezes what it returns, so a write
57
- * into it throws).
38
+ * An implementation keeps the containment, the stacking order and the returned objects as
39
+ * {@link StoreContract} describes them.
58
40
  *
59
41
  * Errors: a write with an argument that cannot apply (an id that does not exist, a
60
42
  * `layerId` or `groupId` that names nothing, a duplicate id) throws and stores nothing.
61
- * Read-only is not the document's concern: core gates the writes before they get here, and
62
- * changes applied from elsewhere never pass that gate. An implementation
63
- * that receives changes from elsewhere may ignore, instead of throwing, an update to an
64
- * id that such a change has already removed (the caller cannot know about the removal
65
- * yet); the notification then carries nothing for that id.
43
+ * Read-only is not the document's concern: core gates the writes before they get here.
66
44
  *
67
- * Notifications: `subscribe` delivers the document categories of StateChanges (features,
68
- * layers, groups, layerReorder, groupReorder, metadata) with their source, and `transact`
69
- * groups the changes of a function into one notification. Any other category a notification
70
- * carries is ignored by core. A change applied from elsewhere is notified like a local one,
71
- * with the source `'remote'`, and core follows it: a deleted item leaves the selection, the
72
- * vertex selection ends when its feature changed, and the hooks of the plugins fire.
73
- *
74
- * @example
75
- * ```ts
76
- * // A document kept elsewhere: wrap it in a DocumentStore and hand it to the draw instance
77
- * const document: DocumentStore = createSyncedDocument(roomId);
78
- * const draw = createMapLibreGLDraw(map, { store: document });
79
- * ```
45
+ * Notifications: `subscribe` delivers the document categories of StoreChange (features,
46
+ * layers, groups, layerReorder, groupReorder, metadata, files) with their source, and
47
+ * `transact` groups the changes of a function into one notification.
80
48
  */
81
49
  export interface DocumentStore {
82
50
  /** Returns the feature with this ID, or undefined */
83
51
  getFeature(id: string): Feature | undefined;
84
52
  /** Every feature, in no particular order */
85
- getAllFeatures(): Feature[];
53
+ listFeatures(): Feature[];
86
54
  /**
87
55
  * Creates a feature and lists it in its container
88
56
  *
@@ -123,17 +91,18 @@ export interface DocumentStore {
123
91
  */
124
92
  deleteFeature(id: string): void;
125
93
  /**
126
- * Gets the array of features in display order
94
+ * Every feature in stacking order
127
95
  *
128
96
  * Iterates in layer order -> order within the layer -> featureIds order within the
129
- * group, skipping what the shared visible flag hides at any of the three levels.
130
- * The head of the array is the backmost and the end is the foreground.
97
+ * group, whatever the visible flags say. A layer that is not on the stacking order is not
98
+ * drawn, and its features are not listed. The head of the array is the backmost and the
99
+ * end is the foreground.
131
100
  */
132
- getOrderedFeatures(): Feature[];
101
+ listFeaturesInOrder(): Feature[];
133
102
  /** Returns the layer with this ID, or undefined */
134
103
  getLayer(id: string): Layer | undefined;
135
104
  /** Every layer, in no particular order */
136
- getAllLayers(): Layer[];
105
+ listLayers(): Layer[];
137
106
  /**
138
107
  * Creates a layer and appends it to the stacking order (as the frontmost entry), unless the
139
108
  * order already holds its id, which then keeps its position
@@ -164,7 +133,7 @@ export interface DocumentStore {
164
133
  /** Returns the group with this ID, or undefined */
165
134
  getGroup(id: string): Group | undefined;
166
135
  /** Every group, in no particular order */
167
- getAllGroups(): Group[];
136
+ listGroups(): Group[];
168
137
  /**
169
138
  * Creates a group and sets `groupId` on its existing members, which leave the order of
170
139
  * their layer. A group that no layer lists by the end of the operation takes the place of
@@ -183,7 +152,7 @@ export interface DocumentStore {
183
152
  /** Returns the file with this ID, or undefined */
184
153
  getFile(id: string): FileData | undefined;
185
154
  /** Every file */
186
- getAllFiles(): FileData[];
155
+ listFiles(): FileData[];
187
156
  /** Deletes a file (the features that refer to it are not changed) */
188
157
  deleteFile(id: string): void;
189
158
  /** Returns the metadata of the document */
@@ -195,9 +164,9 @@ export interface DocumentStore {
195
164
  *
196
165
  * @returns The unsubscribe function
197
166
  */
198
- subscribe(listener: (changes: StateChanges) => void): () => void;
167
+ subscribe(listener: (changes: StoreChange) => void): () => void;
199
168
  /**
200
- * Runs fn and notifies its changes together as a single StateChanges
169
+ * Runs fn and notifies its changes together as a single StoreChange
201
170
  *
202
171
  * Not atomic: when fn throws, the writes made before the throw stay applied, they are
203
172
  * notified, and the exception is rethrown.
@@ -208,11 +177,14 @@ export interface DocumentStore {
208
177
  transact<T>(fn: () => T, source?: UpdateSource): T;
209
178
  }
210
179
  /**
211
- * The local state of this instance: never part of the document, owned by core
180
+ * The local state of this instance as core reads and writes it: never part of the document
212
181
  *
213
- * Core keeps it for every draw instance, whatever {@link DocumentStore} holds the document.
214
- * The host reads it through {@link StoreView} and changes it through the methods of the draw
215
- * instance (`setMode`, `setSelection`, `setReadOnly` and so on).
182
+ * The state of this client the public contract names (selection, editing, vertex selection,
183
+ * mode, read-only, interaction lock, local visibility) is kept by the {@link StoreContract};
184
+ * the drawing state (the geometry being drawn, the box selection, the drag, the vertices that
185
+ * follow along) is kept by core. The host reads it through {@link StoreView} and changes it
186
+ * through the methods of the draw instance (`setMode`, `setSelection`, `setReadOnly` and so
187
+ * on).
216
188
  */
217
189
  export interface UiState {
218
190
  /** Returns the current selection */
@@ -238,7 +210,7 @@ export interface UiState {
238
210
  /** Sets or clears the drag in progress */
239
211
  setDragState(state: DragState | null): void;
240
212
  /** The selected vertices, or null when no vertex is selected */
241
- getSelectedVertices(): VertexSelection | null;
213
+ getVertexSelection(): VertexSelection | null;
242
214
  /** Sets or clears the selected vertices */
243
215
  setSelectedVertices(selection: VertexSelection | null): void;
244
216
  /**
@@ -268,9 +240,9 @@ export interface UiState {
268
240
  /** Turns the interaction lock on or off */
269
241
  setInteractionLock(value: boolean): void;
270
242
  /** Local visibility: the ids (feature / group / layer) hidden on this client only */
271
- isLocallyHidden(id: string): boolean;
243
+ isHidden(id: string): boolean;
272
244
  /** Every ID hidden on this client only */
273
- getLocallyHidden(): ReadonlySet<string>;
245
+ listHidden(): ReadonlySet<string>;
274
246
  /** Hides or shows a feature, a group or a layer on this client only */
275
247
  setLocallyHidden(id: string, hidden: boolean): void;
276
248
  }
@@ -281,41 +253,28 @@ export interface UiState {
281
253
  * Writes go through the methods of the draw instance (or, in a plugin, the PluginContext),
282
254
  * so a host cannot reach past the checks those methods make. `transact` groups the writes
283
255
  * made through them into one notification.
284
- *
285
- * @example
286
- * ```ts
287
- * const store = draw.getStore();
288
- * const unsubscribe = store.subscribe((changes) => {
289
- * if (changes.features) saveLater(store.getAllFeatures());
290
- * });
291
- * // Two writes, one notification
292
- * store.transact(() => {
293
- * draw.updateFeature(a, { visible: false });
294
- * draw.updateFeature(b, { visible: false });
295
- * });
296
- * ```
297
256
  */
298
257
  export interface StoreView {
299
258
  /** Returns the feature with this ID, or undefined */
300
259
  getFeature(id: string): Feature | undefined;
301
260
  /** Every feature, in no particular order */
302
- getAllFeatures(): Feature[];
303
- /** The visible features in drawing order, back to front */
304
- getOrderedFeatures(): Feature[];
261
+ listFeatures(): Feature[];
262
+ /** Every feature in stacking order, back to front, whatever the visible flags say */
263
+ listFeaturesInOrder(): Feature[];
305
264
  /** Returns the layer with this ID, or undefined */
306
265
  getLayer(id: string): Layer | undefined;
307
266
  /** Every layer, in no particular order */
308
- getAllLayers(): Layer[];
267
+ listLayers(): Layer[];
309
268
  /** The stacking order of the layers, back to front */
310
269
  getLayerOrder(): readonly string[];
311
270
  /** Returns the group with this ID, or undefined */
312
271
  getGroup(id: string): Group | undefined;
313
272
  /** Every group, in no particular order */
314
- getAllGroups(): Group[];
273
+ listGroups(): Group[];
315
274
  /** Returns the file with this ID, or undefined */
316
275
  getFile(id: string): FileData | undefined;
317
276
  /** Every file */
318
- getAllFiles(): FileData[];
277
+ listFiles(): FileData[];
319
278
  /** Returns the metadata of the document */
320
279
  getMetadata(): Metadata;
321
280
  /** Returns the current selection */
@@ -329,7 +288,7 @@ export interface StoreView {
329
288
  /** The drag in progress, or null */
330
289
  getDragState(): DragState | null;
331
290
  /** The selected vertices, or null when no vertex is selected */
332
- getSelectedVertices(): VertexSelection | null;
291
+ getVertexSelection(): VertexSelection | null;
333
292
  /**
334
293
  * The vertices that follow along when shared vertices move together (null except during a
335
294
  * drag)
@@ -342,9 +301,9 @@ export interface StoreView {
342
301
  /** Whether the interaction lock is on */
343
302
  isInteractionLocked(): boolean;
344
303
  /** Whether this feature, group or layer is hidden on this client only */
345
- isLocallyHidden(id: string): boolean;
304
+ isHidden(id: string): boolean;
346
305
  /** Every ID hidden on this client only */
347
- getLocallyHidden(): ReadonlySet<string>;
306
+ listHidden(): ReadonlySet<string>;
348
307
  /**
349
308
  * Subscribes to the changes of the document and of the local state
350
309
  *
@@ -353,9 +312,9 @@ export interface StoreView {
353
312
  *
354
313
  * @returns The unsubscribe function
355
314
  */
356
- subscribe(listener: (changes: StateChanges) => void): () => void;
315
+ subscribe(listener: (changes: StoreChange) => void): () => void;
357
316
  /**
358
- * Runs fn and notifies every change it makes as a single StateChanges
317
+ * Runs fn and notifies every change it makes as a single StoreChange
359
318
  *
360
319
  * Not atomic: when fn throws, the writes made before the throw stay applied, they are
361
320
  * notified, and the exception is rethrown.
@@ -370,7 +329,7 @@ export interface StoreView {
370
329
  *
371
330
  * Every document write returns true when it was applied and false when it was refused
372
331
  * because the Store is read-only (it never throws for that). An argument that cannot apply
373
- * throws, as in DocumentStore. When a feature, group or layer is deleted (by a write here or
332
+ * may throw, as in {@link StoreContract}. When a feature, group or layer is deleted (by a write here or
374
333
  * by a change applied to the document from elsewhere), its id leaves the selection, the
375
334
  * features being edited and the locally hidden set in the same notification. A change that
376
335
  * hides a selected item (its visible flag, the one of its group or layer, or local hiding)
@@ -379,7 +338,7 @@ export interface StoreView {
379
338
  * document and of the local state of one transaction.
380
339
  *
381
340
  * A plugin reaches it with `getStore()` of {@link PluginContext}; the host gets the read-only
382
- * {@link StoreView}. The write methods behave as those of {@link DocumentStore}.
341
+ * {@link StoreView}. The write methods behave as those of {@link StoreContract}.
383
342
  */
384
343
  export interface Store extends StoreView, UiState {
385
344
  /** Creates a feature (see {@link DocumentStore.createFeature}) */
@@ -2,7 +2,7 @@
2
2
  * The data model of the Store
3
3
  *
4
4
  * The types are defined in shared/types/model.ts, below every layer, so that shared/ and
5
- * display/ can use them without depending on store/. This file re-exports them for the code
5
+ * dataset/ can use them without depending on store/. This file re-exports them for the code
6
6
  * that already imports them from here.
7
7
  */
8
8
  export type * from '../shared/types/model.js';
@@ -19,7 +19,7 @@ export type WritableLayerCheckStore = LocalHiddenStore;
19
19
  /** The minimal interface that resolveWritableLayerId requires. */
20
20
  export interface WritableLayerStore extends WritableLayerCheckStore {
21
21
  getLayer(id: string): Layer | undefined;
22
- getAllLayers(): Layer[];
22
+ listLayers(): Layer[];
23
23
  }
24
24
  /**
25
25
  * Whether user drawing may write new features into the layer
@@ -4,7 +4,7 @@
4
4
  * Whether user drawing may write new features into the layer
5
5
  */
6
6
  export function isWritableLayer(layer, store) {
7
- return layer !== undefined && !layer.locked && layer.visible && !store.isLocallyHidden(layer.id);
7
+ return layer !== undefined && !layer.locked && layer.visible && !store.isHidden(layer.id);
8
8
  }
9
9
  /**
10
10
  * Resolves the layer that user drawing writes new features into
@@ -16,5 +16,5 @@ export function isWritableLayer(layer, store) {
16
16
  export function resolveWritableLayerId(store, preferredId) {
17
17
  if (isWritableLayer(store.getLayer(preferredId), store))
18
18
  return preferredId;
19
- return store.getAllLayers().find((layer) => isWritableLayer(layer, store))?.id ?? '';
19
+ return store.listLayers().find((layer) => isWritableLayer(layer, store))?.id ?? '';
20
20
  }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * The building of a table from GeoJSON, row by row
3
+ *
4
+ * The builder collects the coordinates into growing typed arrays and the offsets in the layout
5
+ * of GeoArrow, one geometry column per geometry type. At the end the columns become the geometry
6
+ * of the table: the one column when every row has the same type, or a mixed geometry column
7
+ * otherwise. The attributes are collected per property name and become typed columns where they
8
+ * can.
9
+ *
10
+ * A pure module (it imports only types), so it runs in a Worker as well.
11
+ */
12
+ import type { Feature, Geometry } from 'geojson';
13
+ import type { GeometryType, Table } from './types.js';
14
+ /**
15
+ * Builds a table one row at a time, for readers that stream their rows.
16
+ *
17
+ * Create one with {@link createTableBuilder}, call `add` once per row and `finish` once at the
18
+ * end.
19
+ */
20
+ export interface TableBuilder {
21
+ /**
22
+ * Adds one row.
23
+ *
24
+ * A null geometry, or a `GeometryCollection` (which a table cannot hold), gives a row without
25
+ * a geometry: it keeps its place and its attributes but is neither drawn nor hit.
26
+ *
27
+ * @param geometry The GeoJSON geometry of the row; only the first two values of each position
28
+ * are kept
29
+ * @param properties The attributes of the row
30
+ * @param id The id of the row. Once any row has an id, the rows without one get their row
31
+ * number
32
+ * @throws when the builder was created with a `geometryType` and the geometry has another
33
+ * type, or when `finish` was already called
34
+ */
35
+ add(geometry: Geometry | null, properties?: Record<string, unknown> | null, id?: string | number): void;
36
+ /**
37
+ * Turns the rows added so far into a table; the builder cannot be used afterwards.
38
+ *
39
+ * @throws when it was already called
40
+ */
41
+ finish(): Table;
42
+ }
43
+ /**
44
+ * Creates a builder that makes a table from rows added one at a time.
45
+ *
46
+ * The coordinates are collected into growing typed arrays in the layout of GeoArrow. When every
47
+ * row has the same geometry type the table has one geometry column of that type; otherwise it
48
+ * has a mixed geometry column. An attribute whose values are all numbers (or null) becomes a
49
+ * `Float64Array` with NaN for null; any other attribute becomes a plain array.
50
+ *
51
+ * @param options `geometryType` fixes the geometry type of every row (a geometry of another
52
+ * type throws), and gives the type of a table without any geometry. `capacity` is the
53
+ * expected number of rows, to size the arrays from the start. `columns` limits the attributes
54
+ * that become columns to these names (every one is created, even if no row has it)
55
+ * @returns A new builder
56
+ */
57
+ export declare function createTableBuilder(options?: {
58
+ geometryType?: GeometryType;
59
+ capacity?: number;
60
+ columns?: readonly string[];
61
+ }): TableBuilder;
62
+ /**
63
+ * Makes a table from an array of GeoJSON features.
64
+ *
65
+ * It is {@link createTableBuilder} with one `add` per feature: the geometry, the properties and
66
+ * the id of each feature become a row. Rows of different geometry types give a mixed geometry
67
+ * column.
68
+ *
69
+ * @param features The features, in row order
70
+ * @param options `columns` limits the properties that become columns to these names
71
+ * @returns The table
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * import { tableFromFeatures } from '@sakuzu/maplibre-gl-draw/table';
76
+ *
77
+ * const table = tableFromFeatures(collection.features, { columns: ['name', 'visitors'] });
78
+ * draw.datasets.add({ id: 'places', table });
79
+ * ```
80
+ */
81
+ export declare function tableFromFeatures(features: readonly Feature<Geometry | null>[], options?: {
82
+ columns?: readonly string[];
83
+ }): Table;