@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
@@ -11,31 +11,38 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
11
11
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
12
12
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
13
13
  };
14
- var _DrawStore_instances, _DrawStore_document, _DrawStore_bus, _DrawStore_ui, _DrawStore_write, _DrawStore_receive, _DrawStore_forget, _DrawStore_pruneInvisible, _DrawStore_pruneVertices;
14
+ var _DrawStore_instances, _DrawStore_contract, _DrawStore_bus, _DrawStore_drawing, _DrawStore_normalized, _DrawStore_write, _DrawStore_local, _DrawStore_receive, _DrawStore_feature, _DrawStore_features, _DrawStore_layer, _DrawStore_normalizeChanges, _DrawStore_forget, _DrawStore_pruneInvisible, _DrawStore_pruneVertices, _DrawStore_endVertexSelection;
15
15
  /**
16
16
  * DrawStore
17
17
  *
18
- * The Store core works with: a DocumentStore (the in-memory one, or one the host gave) and
19
- * the local UiState of this client behind one gate.
18
+ * The Store core works with: a {@link StoreContract} (the in-memory one, or one the host gave)
19
+ * and the state only the drawing reads, behind one gate. It reaches the contract only through
20
+ * the members of the public `Store`.
20
21
  *
21
- * - Read-only is enforced here, at the write methods, and nowhere else. A refused write
22
- * returns false and touches nothing. The DocumentStore never sees the gate, so changes
23
- * applied to the document from elsewhere are not stopped by it.
24
- * - The notifications of the document are forwarded into the ChangeBus of the local state,
25
- * so a listener gets one StateChanges per transaction with both kinds of change.
26
- * - Deletions reach the local state: the id of a deleted feature, group or layer leaves the
27
- * selection, the features being edited and the locally hidden set, whatever deleted it.
22
+ * - Read-only is enforced here, at the write methods of the document. A refused write
23
+ * returns false and touches nothing. Changes applied to the contract from elsewhere are not
24
+ * stopped by it.
25
+ * - The notifications of the contract are forwarded into the ChangeBus of this Store, so a
26
+ * listener gets one StoreChange per transaction with every kind of change.
27
+ * - What the contract returns and notifies is read in the shape of the public types: an
28
+ * optional field it gives as `null` (`Feature.groupId`, `Layer.metadata`,
29
+ * `Layer.styleRule`) is read as `undefined`. The normalized object is kept per object of
30
+ * the contract, so the same object of the contract always reads as the same object here.
31
+ * - Deletions reach the state of this client: the id of a deleted feature, group or layer
32
+ * leaves the selection, the features being edited and the locally hidden set, whatever
33
+ * deleted it, through the writes of the contract.
28
34
  * - The selection holds only what can be seen: a change that hides a selected item (its own
29
35
  * visible flag, the one of its group or layer, or local hiding) takes it out of the
30
36
  * selection, and the vertex selection ends when its feature is deleted or its coordinates
31
37
  * change other than by a drag. This is the only place that keeps these invariants; the
32
38
  * modes and the public API rely on it.
33
39
  */
40
+ import { coordinatesOf } from '../shared/utils/coordinates.js';
34
41
  import { ChangeBus } from './memory/change-bus.js';
35
- import { MemoryUiState } from './memory/ui-state.js';
42
+ import { MemoryDrawingState } from './memory/ui-state.js';
36
43
  /**
37
- * Returns the Store for a store option: a Store is used as it is, a DocumentStore gets the
38
- * local state and the read-only gate of core around it
44
+ * Returns the Store for a store option: a Store of core is used as it is, a Store of the host
45
+ * gets the drawing state and the read-only gate of core around it
39
46
  *
40
47
  * @internal
41
48
  */
@@ -43,188 +50,204 @@ export function toStore(store) {
43
50
  return store instanceof DrawStore ? store : new DrawStore(store);
44
51
  }
45
52
  /**
46
- * The Store of core over a DocumentStore
53
+ * The Store of core over a {@link StoreContract}
47
54
  *
48
55
  * @internal
49
56
  */
50
57
  export class DrawStore {
51
- constructor(document) {
58
+ constructor(contract) {
52
59
  _DrawStore_instances.add(this);
53
- _DrawStore_document.set(this, void 0);
60
+ _DrawStore_contract.set(this, void 0);
54
61
  _DrawStore_bus.set(this, new ChangeBus());
55
- _DrawStore_ui.set(this, new MemoryUiState(__classPrivateFieldGet(this, _DrawStore_bus, "f")));
56
- __classPrivateFieldSet(this, _DrawStore_document, document, "f");
57
- document.subscribe((changes) => __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_receive).call(this, changes));
62
+ _DrawStore_drawing.set(this, new MemoryDrawingState(__classPrivateFieldGet(this, _DrawStore_bus, "f")));
63
+ /** The normalized copy of each object of the contract that gave `null` for an optional field */
64
+ _DrawStore_normalized.set(this, new WeakMap());
65
+ __classPrivateFieldSet(this, _DrawStore_contract, contract, "f");
66
+ contract.subscribe((changes) => __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_receive).call(this, changes));
58
67
  }
59
68
  // ============================================================================
60
69
  // The document: reads
61
70
  // ============================================================================
62
71
  getFeature(id) {
63
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getFeature(id);
72
+ const feature = __classPrivateFieldGet(this, _DrawStore_contract, "f").getFeature(id);
73
+ return feature && __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_feature).call(this, feature);
64
74
  }
65
- getAllFeatures() {
66
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getAllFeatures();
75
+ listFeatures() {
76
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_features).call(this, __classPrivateFieldGet(this, _DrawStore_contract, "f").listFeatures());
67
77
  }
68
- getOrderedFeatures() {
69
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getOrderedFeatures();
78
+ listFeaturesInOrder() {
79
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_features).call(this, __classPrivateFieldGet(this, _DrawStore_contract, "f").listFeaturesInOrder());
70
80
  }
71
81
  getLayer(id) {
72
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getLayer(id);
82
+ const layer = __classPrivateFieldGet(this, _DrawStore_contract, "f").getLayer(id);
83
+ return layer && __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_layer).call(this, layer);
73
84
  }
74
- getAllLayers() {
75
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getAllLayers();
85
+ listLayers() {
86
+ const layers = __classPrivateFieldGet(this, _DrawStore_contract, "f").listLayers();
87
+ return layers.some(hasNullLayerField) ? layers.map((layer) => __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_layer).call(this, layer)) : layers;
76
88
  }
77
89
  getLayerOrder() {
78
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getLayerOrder();
90
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").getLayerOrder();
79
91
  }
80
92
  getGroup(id) {
81
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getGroup(id);
93
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").getGroup(id);
82
94
  }
83
- getAllGroups() {
84
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getAllGroups();
95
+ listGroups() {
96
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").listGroups();
85
97
  }
86
98
  getFile(id) {
87
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getFile(id);
99
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").getFile(id);
88
100
  }
89
- getAllFiles() {
90
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getAllFiles();
101
+ listFiles() {
102
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").listFiles();
91
103
  }
92
104
  getMetadata() {
93
- return __classPrivateFieldGet(this, _DrawStore_document, "f").getMetadata();
105
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").getMetadata();
94
106
  }
95
107
  // ============================================================================
96
108
  // The document: writes (gated by read-only)
97
109
  // ============================================================================
98
110
  createFeature(feature) {
99
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").createFeature(feature));
111
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").createFeature(feature));
100
112
  }
101
113
  updateFeature(id, updates, options) {
102
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").updateFeature(id, updates, options));
114
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").updateFeature(id, updates, options));
103
115
  }
104
116
  abortIntermediateUpdates(ids) {
105
- __classPrivateFieldGet(this, _DrawStore_document, "f").abortIntermediateUpdates?.(ids);
117
+ __classPrivateFieldGet(this, _DrawStore_contract, "f").abortIntermediateUpdates?.(ids);
106
118
  }
107
119
  deleteFeature(id) {
108
120
  return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => {
109
- __classPrivateFieldGet(this, _DrawStore_document, "f").deleteFeature(id);
121
+ const deleted = __classPrivateFieldGet(this, _DrawStore_contract, "f").deleteFeature(id);
110
122
  // At once, so that the rest of a transaction already sees the selection without it
111
- __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_forget).call(this, id);
123
+ if (deleted)
124
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_forget).call(this, id);
125
+ return deleted;
112
126
  });
113
127
  }
114
128
  createLayer(layer) {
115
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").createLayer(layer));
129
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").createLayer(layer));
116
130
  }
117
131
  updateLayer(id, updates) {
118
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").updateLayer(id, updates));
132
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").updateLayer(id, updates));
119
133
  }
120
134
  deleteLayer(id) {
121
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").deleteLayer(id));
135
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").deleteLayer(id));
122
136
  }
123
137
  setLayerOrder(order) {
124
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").setLayerOrder(order));
138
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").setLayerOrder(order));
125
139
  }
126
140
  reorderInLayer(itemId, layerId, newIndex) {
127
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").reorderInLayer(itemId, layerId, newIndex));
141
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").reorderInLayer(itemId, layerId, newIndex));
128
142
  }
129
143
  reorderInGroup(featureId, groupId, newIndex) {
130
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").reorderInGroup(featureId, groupId, newIndex));
144
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").reorderInGroup(featureId, groupId, newIndex));
131
145
  }
132
146
  createGroup(group) {
133
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").createGroup(group));
147
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").createGroup(group));
134
148
  }
135
149
  updateGroup(id, updates) {
136
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").updateGroup(id, updates));
150
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").updateGroup(id, updates));
137
151
  }
138
152
  deleteGroup(id) {
139
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").deleteGroup(id));
153
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").deleteGroup(id));
140
154
  }
141
155
  createFile(file) {
142
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").createFile(file));
156
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").createFile(file));
143
157
  }
144
158
  deleteFile(id) {
145
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").deleteFile(id));
159
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").deleteFile(id));
146
160
  }
147
161
  setMetadata(metadata) {
148
- return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_document, "f").setMetadata(metadata));
162
+ return __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_write).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").setMetadata(metadata));
149
163
  }
150
164
  // ============================================================================
151
- // The local state
165
+ // The state of this client (kept by the contract)
152
166
  // ============================================================================
153
167
  getSelection() {
154
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getSelection();
168
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").getSelection();
155
169
  }
156
170
  setSelection(type, ids) {
157
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setSelection(type, ids);
171
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_local).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").setSelection(type, ids));
158
172
  }
159
173
  getEditingIds() {
160
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getEditingIds();
174
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").getEditingIds();
161
175
  }
162
176
  startEditing(ids) {
163
- __classPrivateFieldGet(this, _DrawStore_ui, "f").startEditing(ids);
177
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_local).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").startEditing(ids));
164
178
  }
165
179
  endEditing(ids) {
166
- __classPrivateFieldGet(this, _DrawStore_ui, "f").endEditing(ids);
180
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_local).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").endEditing(ids));
167
181
  }
168
- getTentative() {
169
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getTentative();
170
- }
171
- setTentative(state) {
172
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setTentative(state);
173
- }
174
- getBoxSelection() {
175
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getBoxSelection();
176
- }
177
- setBoxSelection(box) {
178
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setBoxSelection(box);
179
- }
180
- getDragState() {
181
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getDragState();
182
- }
183
- setDragState(state) {
184
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setDragState(state);
185
- }
186
- getSelectedVertices() {
187
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getSelectedVertices();
182
+ getVertexSelection() {
183
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").getVertexSelection();
188
184
  }
189
185
  setSelectedVertices(selection) {
190
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setSelectedVertices(selection);
191
- }
192
- getFollowedVertices() {
193
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getFollowedVertices();
194
- }
195
- setFollowedVertices(selections) {
196
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setFollowedVertices(selections);
186
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_local).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").setSelectedVertices(selection), true);
197
187
  }
198
188
  getMode() {
199
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getMode();
189
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").getMode();
200
190
  }
201
191
  setMode(mode) {
202
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setMode(mode);
192
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_local).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").setMode(mode));
203
193
  }
204
194
  isReadOnly() {
205
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").isReadOnly();
195
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").isReadOnly();
206
196
  }
207
197
  setReadOnly(value) {
208
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setReadOnly(value);
198
+ if (__classPrivateFieldGet(this, _DrawStore_contract, "f").isReadOnly() === value)
199
+ return;
200
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_local).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").setReadOnly(value), true);
209
201
  }
210
202
  isInteractionLocked() {
211
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").isInteractionLocked();
203
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").isInteractionLocked();
212
204
  }
213
205
  setInteractionLock(value) {
214
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setInteractionLock(value);
206
+ if (__classPrivateFieldGet(this, _DrawStore_contract, "f").isInteractionLocked() === value)
207
+ return;
208
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_local).call(this, () => __classPrivateFieldGet(this, _DrawStore_contract, "f").setInteractionLock(value), true);
215
209
  }
216
- isLocallyHidden(id) {
217
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").isLocallyHidden(id);
210
+ isHidden(id) {
211
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").isHidden(id);
218
212
  }
219
- getLocallyHidden() {
220
- return __classPrivateFieldGet(this, _DrawStore_ui, "f").getLocallyHidden();
213
+ listHidden() {
214
+ return __classPrivateFieldGet(this, _DrawStore_contract, "f").listHidden();
221
215
  }
222
216
  setLocallyHidden(id, hidden) {
223
- __classPrivateFieldGet(this, _DrawStore_bus, "f").transact(() => {
224
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setLocallyHidden(id, hidden);
217
+ if (__classPrivateFieldGet(this, _DrawStore_contract, "f").isHidden(id) === hidden)
218
+ return;
219
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_local).call(this, () => {
220
+ __classPrivateFieldGet(this, _DrawStore_contract, "f").setLocallyHidden(id, hidden);
225
221
  if (hidden)
226
222
  __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_pruneInvisible).call(this);
227
- }, 'local');
223
+ }, true);
224
+ }
225
+ // ============================================================================
226
+ // The state only the drawing reads (kept here)
227
+ // ============================================================================
228
+ getTentative() {
229
+ return __classPrivateFieldGet(this, _DrawStore_drawing, "f").getTentative();
230
+ }
231
+ setTentative(state) {
232
+ __classPrivateFieldGet(this, _DrawStore_drawing, "f").setTentative(state);
233
+ }
234
+ getBoxSelection() {
235
+ return __classPrivateFieldGet(this, _DrawStore_drawing, "f").getBoxSelection();
236
+ }
237
+ setBoxSelection(box) {
238
+ __classPrivateFieldGet(this, _DrawStore_drawing, "f").setBoxSelection(box);
239
+ }
240
+ getDragState() {
241
+ return __classPrivateFieldGet(this, _DrawStore_drawing, "f").getDragState();
242
+ }
243
+ setDragState(state) {
244
+ __classPrivateFieldGet(this, _DrawStore_drawing, "f").setDragState(state);
245
+ }
246
+ getFollowedVertices() {
247
+ return __classPrivateFieldGet(this, _DrawStore_drawing, "f").getFollowedVertices();
248
+ }
249
+ setFollowedVertices(selections) {
250
+ __classPrivateFieldGet(this, _DrawStore_drawing, "f").setFollowedVertices(selections);
228
251
  }
229
252
  // ============================================================================
230
253
  // Subscription and transactions
@@ -233,17 +256,22 @@ export class DrawStore {
233
256
  return __classPrivateFieldGet(this, _DrawStore_bus, "f").subscribe(listener);
234
257
  }
235
258
  transact(fn, source = 'local') {
236
- return __classPrivateFieldGet(this, _DrawStore_bus, "f").transact(() => __classPrivateFieldGet(this, _DrawStore_document, "f").transact(fn, source), source);
259
+ return __classPrivateFieldGet(this, _DrawStore_bus, "f").transact(() => __classPrivateFieldGet(this, _DrawStore_contract, "f").transact(fn, source), source);
237
260
  }
238
261
  }
239
- _DrawStore_document = new WeakMap(), _DrawStore_bus = new WeakMap(), _DrawStore_ui = new WeakMap(), _DrawStore_instances = new WeakSet(), _DrawStore_write = function _DrawStore_write(fn) {
240
- if (__classPrivateFieldGet(this, _DrawStore_ui, "f").isReadOnly())
262
+ _DrawStore_contract = new WeakMap(), _DrawStore_bus = new WeakMap(), _DrawStore_drawing = new WeakMap(), _DrawStore_normalized = new WeakMap(), _DrawStore_instances = new WeakSet(), _DrawStore_write = function _DrawStore_write(fn) {
263
+ if (__classPrivateFieldGet(this, _DrawStore_contract, "f").isReadOnly())
241
264
  return false;
242
- this.transact(fn);
243
- return true;
265
+ return this.transact(fn);
266
+ }, _DrawStore_local = function _DrawStore_local(fn, redraw = false) {
267
+ __classPrivateFieldGet(this, _DrawStore_bus, "f").transact(() => {
268
+ fn();
269
+ if (redraw)
270
+ __classPrivateFieldGet(this, _DrawStore_bus, "f").merge({ uiStateChanged: true });
271
+ }, 'local');
244
272
  }, _DrawStore_receive = function _DrawStore_receive(changes) {
245
273
  __classPrivateFieldGet(this, _DrawStore_bus, "f").transact(() => {
246
- __classPrivateFieldGet(this, _DrawStore_bus, "f").merge(documentPart(changes));
274
+ __classPrivateFieldGet(this, _DrawStore_bus, "f").merge(__classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_normalizeChanges).call(this, withoutSource(changes)));
247
275
  for (const feature of changes.features?.deleted ?? [])
248
276
  __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_forget).call(this, feature.id);
249
277
  for (const group of changes.groups?.deleted ?? [])
@@ -254,31 +282,96 @@ _DrawStore_document = new WeakMap(), _DrawStore_bus = new WeakMap(), _DrawStore_
254
282
  __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_pruneInvisible).call(this);
255
283
  __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_pruneVertices).call(this, changes);
256
284
  }, changes.source ?? 'local');
285
+ }, _DrawStore_feature = function _DrawStore_feature(feature) {
286
+ if (!hasNullFeatureField(feature))
287
+ return feature;
288
+ const known = __classPrivateFieldGet(this, _DrawStore_normalized, "f").get(feature);
289
+ if (known)
290
+ return known;
291
+ const normalized = { ...feature, groupId: undefined };
292
+ __classPrivateFieldGet(this, _DrawStore_normalized, "f").set(feature, normalized);
293
+ return normalized;
294
+ }, _DrawStore_features = function _DrawStore_features(features) {
295
+ return features.some(hasNullFeatureField)
296
+ ? features.map((feature) => __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_feature).call(this, feature))
297
+ : features;
298
+ }, _DrawStore_layer = function _DrawStore_layer(layer) {
299
+ if (!hasNullLayerField(layer))
300
+ return layer;
301
+ const known = __classPrivateFieldGet(this, _DrawStore_normalized, "f").get(layer);
302
+ if (known)
303
+ return known;
304
+ const normalized = {
305
+ ...layer,
306
+ metadata: layer.metadata ?? undefined,
307
+ styleRule: layer.styleRule ?? undefined,
308
+ };
309
+ __classPrivateFieldGet(this, _DrawStore_normalized, "f").set(layer, normalized);
310
+ return normalized;
311
+ }, _DrawStore_normalizeChanges = function _DrawStore_normalizeChanges(changes) {
312
+ const { features, layers } = changes;
313
+ const normalized = { ...changes };
314
+ if (features) {
315
+ normalized.features = {
316
+ ...features,
317
+ ...(features.created && { created: features.created.map((f) => __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_feature).call(this, f)) }),
318
+ ...(features.updated && {
319
+ updated: features.updated.map((entry) => ({
320
+ ...entry,
321
+ feature: __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_feature).call(this, entry.feature),
322
+ previous: __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_feature).call(this, entry.previous),
323
+ })),
324
+ }),
325
+ ...(features.deleted && { deleted: features.deleted.map((f) => __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_feature).call(this, f)) }),
326
+ };
327
+ }
328
+ if (layers) {
329
+ normalized.layers = {
330
+ ...layers,
331
+ ...(layers.created && { created: layers.created.map((l) => __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_layer).call(this, l)) }),
332
+ ...(layers.updated && {
333
+ updated: layers.updated.map((entry) => ({
334
+ ...entry,
335
+ layer: __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_layer).call(this, entry.layer),
336
+ previous: __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_layer).call(this, entry.previous),
337
+ })),
338
+ }),
339
+ ...(layers.deleted && { deleted: layers.deleted.map((l) => __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_layer).call(this, l)) }),
340
+ };
341
+ }
342
+ return normalized;
257
343
  }, _DrawStore_forget = function _DrawStore_forget(id) {
258
- if (__classPrivateFieldGet(this, _DrawStore_document, "f").getFeature(id) || __classPrivateFieldGet(this, _DrawStore_document, "f").getGroup(id))
344
+ const contract = __classPrivateFieldGet(this, _DrawStore_contract, "f");
345
+ if (contract.getFeature(id) || contract.getGroup(id) || contract.getLayer(id))
259
346
  return;
260
- if (__classPrivateFieldGet(this, _DrawStore_document, "f").getLayer(id))
261
- return;
262
- __classPrivateFieldGet(this, _DrawStore_ui, "f").removeFromSelection(id);
263
- __classPrivateFieldGet(this, _DrawStore_ui, "f").removeFromEditing(id);
264
- __classPrivateFieldGet(this, _DrawStore_ui, "f").removeFromLocallyHidden(id);
347
+ const selection = contract.getSelection();
348
+ if (selection.ids.includes(id)) {
349
+ const ids = selection.ids.filter((selected) => selected !== id);
350
+ contract.setSelection(ids.length === 0 ? null : selection.type, ids);
351
+ }
352
+ if (contract.getEditingIds().includes(id))
353
+ contract.endEditing([id]);
354
+ if (contract.isHidden(id)) {
355
+ contract.setLocallyHidden(id, false);
356
+ __classPrivateFieldGet(this, _DrawStore_bus, "f").merge({ uiStateChanged: true });
357
+ }
265
358
  }, _DrawStore_pruneInvisible = function _DrawStore_pruneInvisible() {
266
- const selection = __classPrivateFieldGet(this, _DrawStore_ui, "f").getSelection();
359
+ const selection = __classPrivateFieldGet(this, _DrawStore_contract, "f").getSelection();
267
360
  const type = selection.type;
268
361
  if (type === null || selection.ids.length === 0)
269
362
  return;
270
- const shown = createShownLookup(__classPrivateFieldGet(this, _DrawStore_document, "f"), __classPrivateFieldGet(this, _DrawStore_ui, "f"));
363
+ const shown = createShownLookup(__classPrivateFieldGet(this, _DrawStore_contract, "f"));
271
364
  const kept = selection.ids.filter((id) => shown(type, id));
272
365
  if (kept.length !== selection.ids.length) {
273
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setSelection(kept.length > 0 ? type : null, kept);
366
+ __classPrivateFieldGet(this, _DrawStore_contract, "f").setSelection(kept.length > 0 ? type : null, kept);
274
367
  }
275
368
  }, _DrawStore_pruneVertices = function _DrawStore_pruneVertices(changes) {
276
- const vertices = __classPrivateFieldGet(this, _DrawStore_ui, "f").getSelectedVertices();
369
+ const vertices = __classPrivateFieldGet(this, _DrawStore_contract, "f").getVertexSelection();
277
370
  if (!vertices)
278
371
  return;
279
372
  const featureId = vertices.featureId;
280
- if (!__classPrivateFieldGet(this, _DrawStore_document, "f").getFeature(featureId)) {
281
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setSelectedVertices(null);
373
+ if (!__classPrivateFieldGet(this, _DrawStore_contract, "f").getFeature(featureId)) {
374
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_endVertexSelection).call(this);
282
375
  return;
283
376
  }
284
377
  const local = changes.source !== 'remote';
@@ -286,13 +379,16 @@ _DrawStore_document = new WeakMap(), _DrawStore_bus = new WeakMap(), _DrawStore_
286
379
  if (entry.id !== featureId)
287
380
  continue;
288
381
  // The frames and the commit of a local drag keep the vertices being dragged selected
289
- if (local && (entry.isIntermediate || __classPrivateFieldGet(this, _DrawStore_ui, "f").getDragState() !== null))
382
+ if (local && (entry.isIntermediate || __classPrivateFieldGet(this, _DrawStore_drawing, "f").getDragState() !== null))
290
383
  continue;
291
- if (sameCoordinates(entry.feature.coordinates, entry.previous.coordinates))
384
+ if (sameCoordinates(coordinatesOf(entry.feature), coordinatesOf(entry.previous)))
292
385
  continue;
293
- __classPrivateFieldGet(this, _DrawStore_ui, "f").setSelectedVertices(null);
386
+ __classPrivateFieldGet(this, _DrawStore_instances, "m", _DrawStore_endVertexSelection).call(this);
294
387
  return;
295
388
  }
389
+ }, _DrawStore_endVertexSelection = function _DrawStore_endVertexSelection() {
390
+ __classPrivateFieldGet(this, _DrawStore_contract, "f").setSelectedVertices(null);
391
+ __classPrivateFieldGet(this, _DrawStore_bus, "f").merge({ uiStateChanged: true });
296
392
  };
297
393
  /**
298
394
  * Whether a notification can hide something that was visible: a change of the visible flag
@@ -316,14 +412,15 @@ function mayHide(changes) {
316
412
  * Each layer and group is looked up once per call site (a document can take time to read a
317
413
  * layer).
318
414
  */
319
- function createShownLookup(document, ui) {
415
+ function createShownLookup(document) {
416
+ const ui = document;
320
417
  const layers = new Map();
321
418
  const groups = new Map();
322
419
  const layerShown = (id) => {
323
420
  let shown = layers.get(id);
324
421
  if (shown === undefined) {
325
422
  const layer = document.getLayer(id);
326
- shown = layer?.visible === true && !ui.isLocallyHidden(id);
423
+ shown = layer?.visible === true && !ui.isHidden(id);
327
424
  layers.set(id, shown);
328
425
  }
329
426
  return shown;
@@ -335,7 +432,7 @@ function createShownLookup(document, ui) {
335
432
  const layerId = group ? groupLayerId(document, group) : undefined;
336
433
  shown =
337
434
  group?.visible === true &&
338
- !ui.isLocallyHidden(id) &&
435
+ !ui.isHidden(id) &&
339
436
  (layerId === undefined || layerShown(layerId));
340
437
  groups.set(id, shown);
341
438
  }
@@ -347,7 +444,7 @@ function createShownLookup(document, ui) {
347
444
  if (type === 'group')
348
445
  return groupShown(id);
349
446
  const feature = document.getFeature(id);
350
- if (!feature?.visible || ui.isLocallyHidden(id))
447
+ if (!feature?.visible || ui.isHidden(id))
351
448
  return false;
352
449
  if (feature.groupId && !groupShown(feature.groupId))
353
450
  return false;
@@ -361,7 +458,7 @@ function groupLayerId(document, group) {
361
458
  if (feature)
362
459
  return feature.layerId;
363
460
  }
364
- return document.getAllLayers().find((layer) => layer.order.includes(group.id))?.id;
461
+ return document.listLayers().find((layer) => layer.items.includes(group.id))?.id;
365
462
  }
366
463
  /** Whether two coordinate values are equal, position by position */
367
464
  function sameCoordinates(a, b) {
@@ -375,22 +472,16 @@ function sameCoordinates(a, b) {
375
472
  }
376
473
  return true;
377
474
  }
378
- /** The categories of a notification that belong to the document */
379
- function documentPart(changes) {
380
- const part = {};
381
- if (changes.features)
382
- part.features = changes.features;
383
- if (changes.layers)
384
- part.layers = changes.layers;
385
- if (changes.groups)
386
- part.groups = changes.groups;
387
- if (changes.layerReorder)
388
- part.layerReorder = changes.layerReorder;
389
- if (changes.groupReorder)
390
- part.groupReorder = changes.groupReorder;
391
- if (changes.metadata)
392
- part.metadata = changes.metadata;
393
- if (changes.uiStateChanged)
394
- part.uiStateChanged = true;
395
- return part;
475
+ /** Whether a feature of the contract gives `null` for an optional field */
476
+ function hasNullFeatureField(feature) {
477
+ return feature.groupId === null;
478
+ }
479
+ /** Whether a layer of the contract gives `null` for an optional field */
480
+ function hasNullLayerField(layer) {
481
+ return layer.metadata === null || layer.styleRule === null;
482
+ }
483
+ /** A notification of the contract without its source (the transaction here carries it) */
484
+ function withoutSource(changes) {
485
+ const { source: _source, ...rest } = changes;
486
+ return rest;
396
487
  }
@@ -7,15 +7,20 @@
7
7
  * visible, and rendering, hit testing and box selection respect it.
8
8
  *
9
9
  * A pure function with the same standing as lock.ts (isFeatureLocked). It does not change
10
- * the shared data (feature.visible and so on) at all. getOrderedFeatures is kept pure and
11
- * this is derived separately here.
10
+ * the shared data (feature.visible and so on) at all. listFeaturesInOrder lists every feature,
11
+ * and the visible flags and local hiding are applied here.
12
12
  */
13
- import type { Feature } from './types.js';
13
+ import type { Feature, Group, Layer } from './types.js';
14
14
  /** The minimal interface that isLocallyHidden requires. */
15
15
  export interface LocalHiddenStore {
16
- isLocallyHidden(id: string): boolean;
16
+ isHidden(id: string): boolean;
17
+ }
18
+ /** The minimal interface that listShownFeatures requires. */
19
+ export interface OrderedStore {
20
+ listFeaturesInOrder(): Feature[];
21
+ getLayer(id: string): Layer | undefined;
22
+ getGroup(id: string): Group | undefined;
17
23
  }
18
24
  /** The minimal interface that getDisplayFeatures requires. */
19
- export interface DisplayStore extends LocalHiddenStore {
20
- getOrderedFeatures(): Feature[];
25
+ export interface DisplayStore extends LocalHiddenStore, OrderedStore {
21
26
  }