@sakuzu/maplibre-gl-draw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/LICENSE +661 -0
  3. package/README.ja.md +248 -0
  4. package/README.md +255 -0
  5. package/THIRD_PARTY_NOTICES.md +275 -0
  6. package/dist/api/api.d.ts +1259 -0
  7. package/dist/api/api.js +86 -0
  8. package/dist/api/context.d.ts +173 -0
  9. package/dist/api/context.js +193 -0
  10. package/dist/api/display-api.d.ts +1 -0
  11. package/dist/api/display-api.js +23 -0
  12. package/dist/api/event-api.d.ts +13 -0
  13. package/dist/api/event-api.js +17 -0
  14. package/dist/api/extension-api.d.ts +46 -0
  15. package/dist/api/extension-api.js +85 -0
  16. package/dist/api/feature-api.d.ts +11 -0
  17. package/dist/api/feature-api.js +101 -0
  18. package/dist/api/geometry/apply.d.ts +51 -0
  19. package/dist/api/geometry/apply.js +114 -0
  20. package/dist/api/geometry/boolean.d.ts +28 -0
  21. package/dist/api/geometry/boolean.js +65 -0
  22. package/dist/api/geometry/buffer.d.ts +11 -0
  23. package/dist/api/geometry/buffer.js +105 -0
  24. package/dist/api/geometry/split.d.ts +16 -0
  25. package/dist/api/geometry/split.js +75 -0
  26. package/dist/api/geometry/targets.d.ts +76 -0
  27. package/dist/api/geometry/targets.js +158 -0
  28. package/dist/api/geometry/types.d.ts +31 -0
  29. package/dist/api/geometry/types.js +3 -0
  30. package/dist/api/geometry-operations.d.ts +162 -0
  31. package/dist/api/geometry-operations.js +94 -0
  32. package/dist/api/group-api.d.ts +10 -0
  33. package/dist/api/group-api.js +78 -0
  34. package/dist/api/import-export/constants.d.ts +29 -0
  35. package/dist/api/import-export/constants.js +40 -0
  36. package/dist/api/import-export/embedded-file.d.ts +13 -0
  37. package/dist/api/import-export/embedded-file.js +31 -0
  38. package/dist/api/import-export/file-name.d.ts +10 -0
  39. package/dist/api/import-export/file-name.js +20 -0
  40. package/dist/api/import-export/format-detection.d.ts +12 -0
  41. package/dist/api/import-export/format-detection.js +29 -0
  42. package/dist/api/import-export/geojson-export.d.ts +19 -0
  43. package/dist/api/import-export/geojson-export.js +262 -0
  44. package/dist/api/import-export/geojson-import.d.ts +34 -0
  45. package/dist/api/import-export/geojson-import.js +538 -0
  46. package/dist/api/import-export/geometry-validation.d.ts +20 -0
  47. package/dist/api/import-export/geometry-validation.js +107 -0
  48. package/dist/api/import-export/image-import.d.ts +12 -0
  49. package/dist/api/import-export/image-import.js +53 -0
  50. package/dist/api/import-export/index.d.ts +9 -0
  51. package/dist/api/import-export/index.js +107 -0
  52. package/dist/api/import-export/native-format.d.ts +15 -0
  53. package/dist/api/import-export/native-format.js +126 -0
  54. package/dist/api/import-export/native-validation.d.ts +28 -0
  55. package/dist/api/import-export/native-validation.js +212 -0
  56. package/dist/api/import-export/own-property.d.ts +10 -0
  57. package/dist/api/import-export/own-property.js +19 -0
  58. package/dist/api/import-export/style-validation.d.ts +27 -0
  59. package/dist/api/import-export/style-validation.js +49 -0
  60. package/dist/api/import-export/types.d.ts +26 -0
  61. package/dist/api/import-export/types.js +3 -0
  62. package/dist/api/index.d.ts +15 -0
  63. package/dist/api/index.js +3 -0
  64. package/dist/api/input-api.d.ts +158 -0
  65. package/dist/api/input-api.js +144 -0
  66. package/dist/api/instance-api.d.ts +38 -0
  67. package/dist/api/instance-api.js +136 -0
  68. package/dist/api/layer-api.d.ts +12 -0
  69. package/dist/api/layer-api.js +62 -0
  70. package/dist/api/selection-api.d.ts +7 -0
  71. package/dist/api/selection-api.js +78 -0
  72. package/dist/api/snapping-api.d.ts +125 -0
  73. package/dist/api/snapping-api.js +50 -0
  74. package/dist/api/topology-api.d.ts +30 -0
  75. package/dist/api/topology-api.js +16 -0
  76. package/dist/api/tracing-api.d.ts +31 -0
  77. package/dist/api/tracing-api.js +16 -0
  78. package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
  79. package/dist/dispatcher/hit-test/box-strategies.js +275 -0
  80. package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
  81. package/dist/dispatcher/hit-test/box-strategy.js +37 -0
  82. package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
  83. package/dist/dispatcher/hit-test/globe-shape.js +70 -0
  84. package/dist/dispatcher/hit-test/index.d.ts +14 -0
  85. package/dist/dispatcher/hit-test/index.js +9 -0
  86. package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
  87. package/dist/dispatcher/hit-test/local-frame.js +112 -0
  88. package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
  89. package/dist/dispatcher/hit-test/segment-grid.js +79 -0
  90. package/dist/dispatcher/hit-test/service.d.ts +120 -0
  91. package/dist/dispatcher/hit-test/service.js +333 -0
  92. package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
  93. package/dist/dispatcher/hit-test/strategies/base.js +66 -0
  94. package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
  95. package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
  96. package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
  97. package/dist/dispatcher/hit-test/strategies/image.js +115 -0
  98. package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
  99. package/dist/dispatcher/hit-test/strategies/index.js +10 -0
  100. package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
  101. package/dist/dispatcher/hit-test/strategies/line.js +30 -0
  102. package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
  103. package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
  104. package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
  105. package/dist/dispatcher/hit-test/strategies/point.js +29 -0
  106. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
  107. package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
  108. package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
  109. package/dist/dispatcher/hit-test/topmost.js +157 -0
  110. package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
  111. package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
  112. package/dist/dispatcher/index.d.ts +15 -0
  113. package/dist/dispatcher/index.js +3 -0
  114. package/dist/dispatcher/input-router.d.ts +1 -0
  115. package/dist/dispatcher/input-router.js +288 -0
  116. package/dist/dispatcher/normalizer.d.ts +1 -0
  117. package/dist/dispatcher/normalizer.js +513 -0
  118. package/dist/dispatcher/types.d.ts +144 -0
  119. package/dist/dispatcher/types.js +15 -0
  120. package/dist/display/chunk-set.d.ts +24 -0
  121. package/dist/display/chunk-set.js +533 -0
  122. package/dist/display/chunk.d.ts +1 -0
  123. package/dist/display/chunk.js +104 -0
  124. package/dist/display/columnar/index.d.ts +12 -0
  125. package/dist/display/columnar/index.js +13 -0
  126. package/dist/display/columnar/prepare.d.ts +42 -0
  127. package/dist/display/columnar/prepare.js +116 -0
  128. package/dist/display/columnar/source.d.ts +1 -0
  129. package/dist/display/columnar/source.js +531 -0
  130. package/dist/display/columnar/table.d.ts +1 -0
  131. package/dist/display/columnar/table.js +471 -0
  132. package/dist/display/columnar/types.d.ts +223 -0
  133. package/dist/display/columnar/types.js +3 -0
  134. package/dist/display/dataset.d.ts +2 -0
  135. package/dist/display/dataset.js +891 -0
  136. package/dist/display/index.d.ts +13 -0
  137. package/dist/display/index.js +3 -0
  138. package/dist/display/interaction.d.ts +1 -0
  139. package/dist/display/interaction.js +90 -0
  140. package/dist/display/manager.d.ts +1 -0
  141. package/dist/display/manager.js +440 -0
  142. package/dist/display/packed-rtree.d.ts +1 -0
  143. package/dist/display/packed-rtree.js +244 -0
  144. package/dist/display/partition.d.ts +1 -0
  145. package/dist/display/partition.js +226 -0
  146. package/dist/display/provider.d.ts +1 -0
  147. package/dist/display/provider.js +342 -0
  148. package/dist/display/retained.d.ts +40 -0
  149. package/dist/display/retained.js +898 -0
  150. package/dist/display/selection.d.ts +13 -0
  151. package/dist/display/selection.js +226 -0
  152. package/dist/display/source.d.ts +1 -0
  153. package/dist/display/source.js +119 -0
  154. package/dist/display/spatial.d.ts +1 -0
  155. package/dist/display/spatial.js +71 -0
  156. package/dist/display/style.d.ts +1 -0
  157. package/dist/display/style.js +126 -0
  158. package/dist/display/thinning.d.ts +65 -0
  159. package/dist/display/thinning.js +910 -0
  160. package/dist/display/triangulation.d.ts +1 -0
  161. package/dist/display/triangulation.js +0 -0
  162. package/dist/display/types.d.ts +561 -0
  163. package/dist/display/types.js +43 -0
  164. package/dist/extension/feature-handler.d.ts +182 -0
  165. package/dist/extension/feature-handler.js +3 -0
  166. package/dist/extension/index.d.ts +9 -0
  167. package/dist/extension/index.js +3 -0
  168. package/dist/extension/renderers.d.ts +208 -0
  169. package/dist/extension/renderers.js +3 -0
  170. package/dist/geometry/angle.d.ts +47 -0
  171. package/dist/geometry/angle.js +44 -0
  172. package/dist/geometry/bbox.d.ts +48 -0
  173. package/dist/geometry/bbox.js +83 -0
  174. package/dist/geometry/boolean.d.ts +162 -0
  175. package/dist/geometry/boolean.js +331 -0
  176. package/dist/geometry/buffer.d.ts +72 -0
  177. package/dist/geometry/buffer.js +218 -0
  178. package/dist/geometry/circle.d.ts +55 -0
  179. package/dist/geometry/circle.js +107 -0
  180. package/dist/geometry/coords.d.ts +97 -0
  181. package/dist/geometry/coords.js +149 -0
  182. package/dist/geometry/distance.d.ts +79 -0
  183. package/dist/geometry/distance.js +111 -0
  184. package/dist/geometry/errors.d.ts +74 -0
  185. package/dist/geometry/errors.js +104 -0
  186. package/dist/geometry/index.d.ts +28 -0
  187. package/dist/geometry/index.js +38 -0
  188. package/dist/geometry/measure.d.ts +81 -0
  189. package/dist/geometry/measure.js +236 -0
  190. package/dist/geometry/predicates.d.ts +62 -0
  191. package/dist/geometry/predicates.js +132 -0
  192. package/dist/geometry/simplify.d.ts +74 -0
  193. package/dist/geometry/simplify.js +159 -0
  194. package/dist/geometry/split.d.ts +68 -0
  195. package/dist/geometry/split.js +430 -0
  196. package/dist/geometry/types.d.ts +95 -0
  197. package/dist/geometry/types.js +3 -0
  198. package/dist/geometry/units.d.ts +35 -0
  199. package/dist/geometry/units.js +41 -0
  200. package/dist/index.d.ts +72 -0
  201. package/dist/index.js +20 -0
  202. package/dist/maplibre-gl-draw.d.ts +47 -0
  203. package/dist/maplibre-gl-draw.js +407 -0
  204. package/dist/messages.d.ts +64 -0
  205. package/dist/messages.js +36 -0
  206. package/dist/modes/cursor.d.ts +1 -0
  207. package/dist/modes/cursor.js +72 -0
  208. package/dist/modes/draw/circle.d.ts +1 -0
  209. package/dist/modes/draw/circle.js +222 -0
  210. package/dist/modes/draw/commit-layer.d.ts +26 -0
  211. package/dist/modes/draw/commit-layer.js +31 -0
  212. package/dist/modes/draw/freehand.d.ts +1 -0
  213. package/dist/modes/draw/freehand.js +264 -0
  214. package/dist/modes/draw/image.d.ts +1 -0
  215. package/dist/modes/draw/image.js +60 -0
  216. package/dist/modes/draw/index.d.ts +9 -0
  217. package/dist/modes/draw/index.js +11 -0
  218. package/dist/modes/draw/line.d.ts +1 -0
  219. package/dist/modes/draw/line.js +363 -0
  220. package/dist/modes/draw/point.d.ts +1 -0
  221. package/dist/modes/draw/point.js +87 -0
  222. package/dist/modes/draw/polygon.d.ts +1 -0
  223. package/dist/modes/draw/polygon.js +378 -0
  224. package/dist/modes/draw/trace-support.d.ts +79 -0
  225. package/dist/modes/draw/trace-support.js +161 -0
  226. package/dist/modes/handler.d.ts +285 -0
  227. package/dist/modes/handler.js +3 -0
  228. package/dist/modes/index.d.ts +7 -0
  229. package/dist/modes/index.js +3 -0
  230. package/dist/modes/manager.d.ts +15 -0
  231. package/dist/modes/manager.js +196 -0
  232. package/dist/modes/select/box-selection.d.ts +52 -0
  233. package/dist/modes/select/box-selection.js +140 -0
  234. package/dist/modes/select/click-handler.d.ts +32 -0
  235. package/dist/modes/select/click-handler.js +166 -0
  236. package/dist/modes/select/cursor-handler.d.ts +15 -0
  237. package/dist/modes/select/cursor-handler.js +59 -0
  238. package/dist/modes/select/drag/auxiliary.d.ts +26 -0
  239. package/dist/modes/select/drag/auxiliary.js +56 -0
  240. package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
  241. package/dist/modes/select/drag/intermediate-writes.js +171 -0
  242. package/dist/modes/select/drag/move.d.ts +24 -0
  243. package/dist/modes/select/drag/move.js +59 -0
  244. package/dist/modes/select/drag/operation.d.ts +30 -0
  245. package/dist/modes/select/drag/operation.js +18 -0
  246. package/dist/modes/select/drag/radius.d.ts +15 -0
  247. package/dist/modes/select/drag/radius.js +49 -0
  248. package/dist/modes/select/drag/transform.d.ts +17 -0
  249. package/dist/modes/select/drag/transform.js +155 -0
  250. package/dist/modes/select/drag/vertex.d.ts +17 -0
  251. package/dist/modes/select/drag/vertex.js +163 -0
  252. package/dist/modes/select/drag-handler.d.ts +1 -0
  253. package/dist/modes/select/drag-handler.js +254 -0
  254. package/dist/modes/select/hit-helpers.d.ts +40 -0
  255. package/dist/modes/select/hit-helpers.js +51 -0
  256. package/dist/modes/select/mode.d.ts +1 -0
  257. package/dist/modes/select/mode.js +397 -0
  258. package/dist/modes/select/shortcut-handler.d.ts +40 -0
  259. package/dist/modes/select/shortcut-handler.js +128 -0
  260. package/dist/operations/index.d.ts +9 -0
  261. package/dist/operations/index.js +3 -0
  262. package/dist/operations/layer-operations.d.ts +1 -0
  263. package/dist/operations/layer-operations.js +350 -0
  264. package/dist/operations/resize.d.ts +71 -0
  265. package/dist/operations/resize.js +252 -0
  266. package/dist/operations/rotate.d.ts +17 -0
  267. package/dist/operations/rotate.js +166 -0
  268. package/dist/operations/selection-operations.d.ts +20 -0
  269. package/dist/operations/selection-operations.js +159 -0
  270. package/dist/operations/shared-vertex.d.ts +1 -0
  271. package/dist/operations/shared-vertex.js +210 -0
  272. package/dist/operations/trace-graph.d.ts +96 -0
  273. package/dist/operations/trace-graph.js +283 -0
  274. package/dist/operations/vertex.d.ts +1 -0
  275. package/dist/operations/vertex.js +538 -0
  276. package/dist/plugins/index.d.ts +10 -0
  277. package/dist/plugins/index.js +3 -0
  278. package/dist/plugins/mutation-hooks.d.ts +28 -0
  279. package/dist/plugins/mutation-hooks.js +84 -0
  280. package/dist/plugins/plugin-context.d.ts +1 -0
  281. package/dist/plugins/plugin-context.js +367 -0
  282. package/dist/plugins/plugin-manager.d.ts +103 -0
  283. package/dist/plugins/plugin-manager.js +316 -0
  284. package/dist/plugins/plugin.d.ts +529 -0
  285. package/dist/plugins/plugin.js +3 -0
  286. package/dist/shared/config/constants.d.ts +66 -0
  287. package/dist/shared/config/constants.js +60 -0
  288. package/dist/shared/config/feature-style.d.ts +155 -0
  289. package/dist/shared/config/feature-style.js +154 -0
  290. package/dist/shared/config/index.d.ts +17 -0
  291. package/dist/shared/config/index.js +8 -0
  292. package/dist/shared/config/rendering.d.ts +107 -0
  293. package/dist/shared/config/rendering.js +33 -0
  294. package/dist/shared/config/selection-highlight.d.ts +29 -0
  295. package/dist/shared/config/selection-highlight.js +35 -0
  296. package/dist/shared/config/selection.d.ts +273 -0
  297. package/dist/shared/config/selection.js +266 -0
  298. package/dist/shared/config/topology.d.ts +33 -0
  299. package/dist/shared/config/topology.js +17 -0
  300. package/dist/shared/config/trace.d.ts +40 -0
  301. package/dist/shared/config/trace.js +17 -0
  302. package/dist/shared/math/angle.d.ts +21 -0
  303. package/dist/shared/math/angle.js +34 -0
  304. package/dist/shared/math/circle.d.ts +6 -0
  305. package/dist/shared/math/circle.js +10 -0
  306. package/dist/shared/math/constants.d.ts +48 -0
  307. package/dist/shared/math/constants.js +59 -0
  308. package/dist/shared/math/distance.d.ts +78 -0
  309. package/dist/shared/math/distance.js +147 -0
  310. package/dist/shared/math/globe-subdivision.d.ts +62 -0
  311. package/dist/shared/math/globe-subdivision.js +99 -0
  312. package/dist/shared/math/index.d.ts +17 -0
  313. package/dist/shared/math/index.js +21 -0
  314. package/dist/shared/math/intersection.d.ts +63 -0
  315. package/dist/shared/math/intersection.js +236 -0
  316. package/dist/shared/math/longitude.d.ts +20 -0
  317. package/dist/shared/math/longitude.js +31 -0
  318. package/dist/shared/math/mercator-plane.d.ts +27 -0
  319. package/dist/shared/math/mercator-plane.js +26 -0
  320. package/dist/shared/math/obb.d.ts +65 -0
  321. package/dist/shared/math/obb.js +107 -0
  322. package/dist/shared/math/rotation.d.ts +93 -0
  323. package/dist/shared/math/rotation.js +186 -0
  324. package/dist/shared/math/segment-grid.d.ts +69 -0
  325. package/dist/shared/math/segment-grid.js +159 -0
  326. package/dist/shared/math/transform.d.ts +140 -0
  327. package/dist/shared/math/transform.js +189 -0
  328. package/dist/shared/types/events.d.ts +128 -0
  329. package/dist/shared/types/events.js +3 -0
  330. package/dist/shared/types/model.d.ts +950 -0
  331. package/dist/shared/types/model.js +3 -0
  332. package/dist/shared/types/selection-box.d.ts +23 -0
  333. package/dist/shared/types/selection-box.js +3 -0
  334. package/dist/shared/types/style.d.ts +68 -0
  335. package/dist/shared/types/style.js +3 -0
  336. package/dist/shared/utils/color.d.ts +49 -0
  337. package/dist/shared/utils/color.js +180 -0
  338. package/dist/shared/utils/coordinates.d.ts +52 -0
  339. package/dist/shared/utils/coordinates.js +75 -0
  340. package/dist/shared/utils/embedded-image.d.ts +34 -0
  341. package/dist/shared/utils/embedded-image.js +161 -0
  342. package/dist/shared/utils/event-emitter.d.ts +262 -0
  343. package/dist/shared/utils/event-emitter.js +44 -0
  344. package/dist/shared/utils/feature-bbox.d.ts +8 -0
  345. package/dist/shared/utils/feature-bbox.js +207 -0
  346. package/dist/shared/utils/feature-segments.d.ts +23 -0
  347. package/dist/shared/utils/feature-segments.js +179 -0
  348. package/dist/shared/utils/id.d.ts +1 -0
  349. package/dist/shared/utils/id.js +35 -0
  350. package/dist/shared/utils/image.d.ts +34 -0
  351. package/dist/shared/utils/image.js +106 -0
  352. package/dist/shared/utils/index.d.ts +15 -0
  353. package/dist/shared/utils/index.js +24 -0
  354. package/dist/shared/utils/map.d.ts +26 -0
  355. package/dist/shared/utils/map.js +35 -0
  356. package/dist/shared/utils/name-generator.d.ts +197 -0
  357. package/dist/shared/utils/name-generator.js +337 -0
  358. package/dist/shared/utils/pixel-ratio.d.ts +111 -0
  359. package/dist/shared/utils/pixel-ratio.js +85 -0
  360. package/dist/shared/utils/property.d.ts +88 -0
  361. package/dist/shared/utils/property.js +140 -0
  362. package/dist/shared/utils/vertex-ref.d.ts +23 -0
  363. package/dist/shared/utils/vertex-ref.js +20 -0
  364. package/dist/snapping/custom-targets.d.ts +1 -0
  365. package/dist/snapping/custom-targets.js +21 -0
  366. package/dist/snapping/geometry.d.ts +1 -0
  367. package/dist/snapping/geometry.js +61 -0
  368. package/dist/snapping/index.d.ts +14 -0
  369. package/dist/snapping/index.js +4 -0
  370. package/dist/snapping/indicator.d.ts +19 -0
  371. package/dist/snapping/indicator.js +145 -0
  372. package/dist/snapping/providers/display.d.ts +72 -0
  373. package/dist/snapping/providers/display.js +268 -0
  374. package/dist/snapping/providers/guide.d.ts +69 -0
  375. package/dist/snapping/providers/guide.js +187 -0
  376. package/dist/snapping/providers/intersection.d.ts +1 -0
  377. package/dist/snapping/providers/intersection.js +92 -0
  378. package/dist/snapping/providers/shared.d.ts +39 -0
  379. package/dist/snapping/providers/shared.js +146 -0
  380. package/dist/snapping/providers/store.d.ts +1 -0
  381. package/dist/snapping/providers/store.js +132 -0
  382. package/dist/snapping/service.d.ts +1 -0
  383. package/dist/snapping/service.js +272 -0
  384. package/dist/snapping/types.d.ts +267 -0
  385. package/dist/snapping/types.js +66 -0
  386. package/dist/store/change-merger.d.ts +1 -0
  387. package/dist/store/change-merger.js +102 -0
  388. package/dist/store/draw-store.d.ts +1 -0
  389. package/dist/store/draw-store.js +396 -0
  390. package/dist/store/event-bridge.d.ts +1 -0
  391. package/dist/store/event-bridge.js +161 -0
  392. package/dist/store/index.d.ts +12 -0
  393. package/dist/store/index.js +4 -0
  394. package/dist/store/local-visibility.d.ts +21 -0
  395. package/dist/store/local-visibility.js +27 -0
  396. package/dist/store/lock.d.ts +67 -0
  397. package/dist/store/lock.js +54 -0
  398. package/dist/store/memory/change-bus.d.ts +60 -0
  399. package/dist/store/memory/change-bus.js +232 -0
  400. package/dist/store/memory/file-store.d.ts +15 -0
  401. package/dist/store/memory/file-store.js +33 -0
  402. package/dist/store/memory/frozen.d.ts +21 -0
  403. package/dist/store/memory/frozen.js +51 -0
  404. package/dist/store/memory/ui-state.d.ts +51 -0
  405. package/dist/store/memory/ui-state.js +223 -0
  406. package/dist/store/memory.d.ts +26 -0
  407. package/dist/store/memory.js +708 -0
  408. package/dist/store/spatial/index.d.ts +6 -0
  409. package/dist/store/spatial/index.js +4 -0
  410. package/dist/store/spatial/spatial-index.d.ts +90 -0
  411. package/dist/store/spatial/spatial-index.js +148 -0
  412. package/dist/store/spatial/store-spatial-index.d.ts +60 -0
  413. package/dist/store/spatial/store-spatial-index.js +125 -0
  414. package/dist/store/store.d.ts +417 -0
  415. package/dist/store/store.js +3 -0
  416. package/dist/store/types.d.ts +8 -0
  417. package/dist/store/types.js +3 -0
  418. package/dist/store/writable-layer.d.ts +35 -0
  419. package/dist/store/writable-layer.js +20 -0
  420. package/dist/view/cache/buffer.d.ts +28 -0
  421. package/dist/view/cache/buffer.js +176 -0
  422. package/dist/view/cache/earcut.d.ts +1 -0
  423. package/dist/view/cache/earcut.js +122 -0
  424. package/dist/view/cache/style-rule.d.ts +1 -0
  425. package/dist/view/cache/style-rule.js +97 -0
  426. package/dist/view/cache/terrain-fill.d.ts +30 -0
  427. package/dist/view/cache/terrain-fill.js +60 -0
  428. package/dist/view/cache/texture.d.ts +14 -0
  429. package/dist/view/cache/texture.js +292 -0
  430. package/dist/view/coordinator.d.ts +27 -0
  431. package/dist/view/coordinator.js +72 -0
  432. package/dist/view/feature-companion.d.ts +173 -0
  433. package/dist/view/feature-companion.js +108 -0
  434. package/dist/view/globe-subdivision.d.ts +78 -0
  435. package/dist/view/globe-subdivision.js +128 -0
  436. package/dist/view/index.d.ts +47 -0
  437. package/dist/view/index.js +20 -0
  438. package/dist/view/layer/attach.d.ts +20 -0
  439. package/dist/view/layer/attach.js +47 -0
  440. package/dist/view/layer/blend.d.ts +57 -0
  441. package/dist/view/layer/blend.js +14 -0
  442. package/dist/view/layer/custom-layer.d.ts +1 -0
  443. package/dist/view/layer/custom-layer.js +509 -0
  444. package/dist/view/layer/depth-state.d.ts +14 -0
  445. package/dist/view/layer/depth-state.js +44 -0
  446. package/dist/view/layer/display-list.d.ts +1 -0
  447. package/dist/view/layer/display-list.js +111 -0
  448. package/dist/view/layer/drape-planner.d.ts +139 -0
  449. package/dist/view/layer/drape-planner.js +726 -0
  450. package/dist/view/layer/frame-render.d.ts +57 -0
  451. package/dist/view/layer/frame-render.js +209 -0
  452. package/dist/view/layer/frame-state.d.ts +147 -0
  453. package/dist/view/layer/frame-state.js +484 -0
  454. package/dist/view/layer/gl-state.d.ts +77 -0
  455. package/dist/view/layer/gl-state.js +132 -0
  456. package/dist/view/layer/index.d.ts +6 -0
  457. package/dist/view/layer/index.js +5 -0
  458. package/dist/view/layer/render-scope.d.ts +30 -0
  459. package/dist/view/layer/render-scope.js +28 -0
  460. package/dist/view/layer/render.d.ts +87 -0
  461. package/dist/view/layer/render.js +187 -0
  462. package/dist/view/layer/renderers.d.ts +81 -0
  463. package/dist/view/layer/renderers.js +142 -0
  464. package/dist/view/layer/slot-manager.d.ts +26 -0
  465. package/dist/view/layer/slot-manager.js +133 -0
  466. package/dist/view/layer/slots.d.ts +33 -0
  467. package/dist/view/layer/slots.js +50 -0
  468. package/dist/view/layer/store-retained-bbox.d.ts +36 -0
  469. package/dist/view/layer/store-retained-bbox.js +188 -0
  470. package/dist/view/layer/store-retained-chunk.d.ts +97 -0
  471. package/dist/view/layer/store-retained-chunk.js +94 -0
  472. package/dist/view/layer/store-retained-classify.d.ts +34 -0
  473. package/dist/view/layer/store-retained-classify.js +88 -0
  474. package/dist/view/layer/store-retained-collect.d.ts +24 -0
  475. package/dist/view/layer/store-retained-collect.js +121 -0
  476. package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
  477. package/dist/view/layer/store-retained-coord-patch.js +168 -0
  478. package/dist/view/layer/store-retained-immediate.d.ts +63 -0
  479. package/dist/view/layer/store-retained-immediate.js +49 -0
  480. package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
  481. package/dist/view/layer/store-retained-invalidation.js +192 -0
  482. package/dist/view/layer/store-retained.d.ts +198 -0
  483. package/dist/view/layer/store-retained.js +430 -0
  484. package/dist/view/layer/terrain-resolver.d.ts +1 -0
  485. package/dist/view/layer/terrain-resolver.js +174 -0
  486. package/dist/view/renderers/batch-manager.d.ts +61 -0
  487. package/dist/view/renderers/batch-manager.js +718 -0
  488. package/dist/view/renderers/draw-factors.d.ts +60 -0
  489. package/dist/view/renderers/draw-factors.js +35 -0
  490. package/dist/view/renderers/drawer.d.ts +1 -0
  491. package/dist/view/renderers/drawer.js +346 -0
  492. package/dist/view/renderers/image.d.ts +1 -0
  493. package/dist/view/renderers/image.js +255 -0
  494. package/dist/view/renderers/line/dash.d.ts +31 -0
  495. package/dist/view/renderers/line/dash.js +152 -0
  496. package/dist/view/renderers/line/line-geometry.d.ts +39 -0
  497. package/dist/view/renderers/line/line-geometry.js +460 -0
  498. package/dist/view/renderers/line/line-gl.d.ts +1 -0
  499. package/dist/view/renderers/line/line-gl.js +236 -0
  500. package/dist/view/renderers/line/line-shader.d.ts +1 -0
  501. package/dist/view/renderers/line/line-shader.js +364 -0
  502. package/dist/view/renderers/line/line-types.d.ts +43 -0
  503. package/dist/view/renderers/line/line-types.js +3 -0
  504. package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
  505. package/dist/view/renderers/line/line-uniforms.js +390 -0
  506. package/dist/view/renderers/line/sdf-line.d.ts +92 -0
  507. package/dist/view/renderers/line/sdf-line.js +567 -0
  508. package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
  509. package/dist/view/renderers/point/billboard-depth.js +56 -0
  510. package/dist/view/renderers/point/point-instance.d.ts +124 -0
  511. package/dist/view/renderers/point/point-instance.js +738 -0
  512. package/dist/view/renderers/point/point-sdf.d.ts +58 -0
  513. package/dist/view/renderers/point/point-sdf.js +170 -0
  514. package/dist/view/renderers/point/point-shape.d.ts +99 -0
  515. package/dist/view/renderers/point/point-shape.js +504 -0
  516. package/dist/view/renderers/point/point-style.d.ts +1 -0
  517. package/dist/view/renderers/point/point-style.js +46 -0
  518. package/dist/view/renderers/polygon/batch.d.ts +26 -0
  519. package/dist/view/renderers/polygon/batch.js +336 -0
  520. package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
  521. package/dist/view/renderers/polygon/earcut-input.js +55 -0
  522. package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
  523. package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
  524. package/dist/view/renderers/polygon/fill.d.ts +74 -0
  525. package/dist/view/renderers/polygon/fill.js +251 -0
  526. package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
  527. package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
  528. package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
  529. package/dist/view/renderers/polygon/terrain-cull.js +14 -0
  530. package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
  531. package/dist/view/renderers/polygon/triangulator.js +3 -0
  532. package/dist/view/renderers/retained.d.ts +43 -0
  533. package/dist/view/renderers/retained.js +3 -0
  534. package/dist/view/renderers/stroke.d.ts +121 -0
  535. package/dist/view/renderers/stroke.js +621 -0
  536. package/dist/view/shaders/frame.d.ts +8 -0
  537. package/dist/view/shaders/frame.js +37 -0
  538. package/dist/view/shaders/helpers.d.ts +238 -0
  539. package/dist/view/shaders/helpers.js +611 -0
  540. package/dist/view/shaders/initializer.d.ts +27 -0
  541. package/dist/view/shaders/initializer.js +125 -0
  542. package/dist/view/shaders/projection.d.ts +123 -0
  543. package/dist/view/shaders/projection.js +299 -0
  544. package/dist/view/shaders/quad-grid.d.ts +77 -0
  545. package/dist/view/shaders/quad-grid.js +128 -0
  546. package/dist/view/shaders/quad.d.ts +189 -0
  547. package/dist/view/shaders/quad.js +582 -0
  548. package/dist/view/shaders/retained-origin.d.ts +50 -0
  549. package/dist/view/shaders/retained-origin.js +67 -0
  550. package/dist/view/shaders/terrain-shade.d.ts +23 -0
  551. package/dist/view/shaders/terrain-shade.js +93 -0
  552. package/dist/view/style-rule.d.ts +166 -0
  553. package/dist/view/style-rule.js +300 -0
  554. package/dist/view/terrain/anchor.d.ts +135 -0
  555. package/dist/view/terrain/anchor.js +226 -0
  556. package/dist/view/terrain/context.d.ts +132 -0
  557. package/dist/view/terrain/context.js +437 -0
  558. package/dist/view/terrain/dem-atlas.d.ts +97 -0
  559. package/dist/view/terrain/dem-atlas.js +534 -0
  560. package/dist/view/terrain/detect.d.ts +126 -0
  561. package/dist/view/terrain/detect.js +198 -0
  562. package/dist/view/terrain/drape/bin-store.d.ts +179 -0
  563. package/dist/view/terrain/drape/bin-store.js +529 -0
  564. package/dist/view/terrain/drape/binning.d.ts +259 -0
  565. package/dist/view/terrain/drape/binning.js +604 -0
  566. package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
  567. package/dist/view/terrain/drape/edge-constrain.js +175 -0
  568. package/dist/view/terrain/drape/geometry.d.ts +95 -0
  569. package/dist/view/terrain/drape/geometry.js +260 -0
  570. package/dist/view/terrain/drape/mesh.d.ts +50 -0
  571. package/dist/view/terrain/drape/mesh.js +86 -0
  572. package/dist/view/terrain/drape/pass.d.ts +122 -0
  573. package/dist/view/terrain/drape/pass.js +379 -0
  574. package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
  575. package/dist/view/terrain/drape/quad-glyphs.js +117 -0
  576. package/dist/view/terrain/drape/quad.d.ts +249 -0
  577. package/dist/view/terrain/drape/quad.js +835 -0
  578. package/dist/view/terrain/drape/renderer.d.ts +184 -0
  579. package/dist/view/terrain/drape/renderer.js +706 -0
  580. package/dist/view/terrain/drape/shared.d.ts +80 -0
  581. package/dist/view/terrain/drape/shared.js +173 -0
  582. package/dist/view/terrain/drape/stitch.d.ts +155 -0
  583. package/dist/view/terrain/drape/stitch.js +228 -0
  584. package/dist/view/terrain/ground.d.ts +72 -0
  585. package/dist/view/terrain/ground.js +151 -0
  586. package/dist/view/terrain/metrics.d.ts +180 -0
  587. package/dist/view/terrain/metrics.js +231 -0
  588. package/dist/view/terrain/occlusion.d.ts +11 -0
  589. package/dist/view/terrain/occlusion.js +129 -0
  590. package/dist/view/terrain/polygon.d.ts +86 -0
  591. package/dist/view/terrain/polygon.js +301 -0
  592. package/dist/view/terrain/shade.d.ts +48 -0
  593. package/dist/view/terrain/shade.js +45 -0
  594. package/dist/view/terrain/state.d.ts +99 -0
  595. package/dist/view/terrain/state.js +186 -0
  596. package/dist/view/terrain/tessellation.d.ts +265 -0
  597. package/dist/view/terrain/tessellation.js +924 -0
  598. package/dist/view/terrain/tiling.d.ts +56 -0
  599. package/dist/view/terrain/tiling.js +155 -0
  600. package/dist/view/terrain/upstream-terrain.d.ts +82 -0
  601. package/dist/view/terrain/upstream-terrain.js +116 -0
  602. package/dist/view/ui/auxiliary-handles.d.ts +151 -0
  603. package/dist/view/ui/auxiliary-handles.js +22 -0
  604. package/dist/view/ui/bounds.d.ts +53 -0
  605. package/dist/view/ui/bounds.js +149 -0
  606. package/dist/view/ui/box-selection.d.ts +1 -0
  607. package/dist/view/ui/box-selection.js +83 -0
  608. package/dist/view/ui/handle-test.d.ts +1 -0
  609. package/dist/view/ui/handle-test.js +437 -0
  610. package/dist/view/ui/handle-thinning.d.ts +122 -0
  611. package/dist/view/ui/handle-thinning.js +430 -0
  612. package/dist/view/ui/handles.d.ts +25 -0
  613. package/dist/view/ui/handles.js +673 -0
  614. package/dist/view/ui/helper.d.ts +19 -0
  615. package/dist/view/ui/helper.js +76 -0
  616. package/dist/view/ui/index.d.ts +15 -0
  617. package/dist/view/ui/index.js +15 -0
  618. package/dist/view/ui/selection-scope.d.ts +25 -0
  619. package/dist/view/ui/selection-scope.js +34 -0
  620. package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
  621. package/dist/view/ui/selection-ui/bounding-box.js +240 -0
  622. package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
  623. package/dist/view/ui/selection-ui/extension-registry.js +78 -0
  624. package/dist/view/ui/selection-ui/index.d.ts +12 -0
  625. package/dist/view/ui/selection-ui/index.js +12 -0
  626. package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
  627. package/dist/view/ui/selection-ui/renderer.js +227 -0
  628. package/dist/view/ui/selection-ui/types.d.ts +55 -0
  629. package/dist/view/ui/selection-ui/types.js +3 -0
  630. package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
  631. package/dist/view/ui/selection-ui-drawer.js +329 -0
  632. package/dist/view/ui/tentative.d.ts +1 -0
  633. package/dist/view/ui/tentative.js +320 -0
  634. package/dist/view/viewport.d.ts +119 -0
  635. package/dist/view/viewport.js +254 -0
  636. package/package.json +113 -0
@@ -0,0 +1,708 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
5
+ 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");
6
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
7
+ };
8
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
9
+ if (kind === "m") throw new TypeError("Private method is not writable");
10
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
11
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
12
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
13
+ };
14
+ var _MemoryDocumentStore_instances, _MemoryDocumentStore_features, _MemoryDocumentStore_layers, _MemoryDocumentStore_groups, _MemoryDocumentStore_layerOrder, _MemoryDocumentStore_metadata, _MemoryDocumentStore_layerOrderIndex, _MemoryDocumentStore_groupFeatureIndex, _MemoryDocumentStore_pendingFeaturePlacement, _MemoryDocumentStore_pendingGroupPlacement, _MemoryDocumentStore_operationDepth, _MemoryDocumentStore_freshLayers, _MemoryDocumentStore_freshGroups, _MemoryDocumentStore_bus, _MemoryDocumentStore_fileStore, _MemoryDocumentStore_createGroup, _MemoryDocumentStore_mutateLayerOrder, _MemoryDocumentStore_mutateGroupFeatureIds, _MemoryDocumentStore_writableLayer, _MemoryDocumentStore_writableGroup, _MemoryDocumentStore_freezeFresh, _MemoryDocumentStore_layerOrderSet, _MemoryDocumentStore_groupFeatureSet, _MemoryDocumentStore_withinOperation, _MemoryDocumentStore_scheduleGroupPlacement, _MemoryDocumentStore_settlePlacements, _MemoryDocumentStore_isListedInAnyLayer, _MemoryDocumentStore_assertLayerExists, _MemoryDocumentStore_addToContainer, _MemoryDocumentStore_removeFromContainer, _MemoryDocumentStore_addItemToLayerOrder, _MemoryDocumentStore_removeItemFromLayerOrder, _MemoryDocumentStore_addFeatureToGroupOrder, _MemoryDocumentStore_removeFeatureFromGroupOrder;
15
+ /**
16
+ * MemoryStore
17
+ *
18
+ * The in-memory Store: a DrawStore over a MemoryDocumentStore.
19
+ *
20
+ * MemoryDocumentStore is the in-memory implementation of the DocumentStore contract.
21
+ * Keeping Feature / Layer / Group consistent (cascading updates on deletion, cascading
22
+ * updates when groupId changes, etc.) is the responsibility of this file. Transactions and
23
+ * listeners are delegated to memory/change-bus.ts and File CRUD to memory/file-store.ts.
24
+ *
25
+ * What it returns is frozen and never changed afterwards: a feature is stored as a frozen
26
+ * copy of what it was given, and a layer or a group whose order changes is replaced by a
27
+ * copy (copied once per notification, so that a bulk import stays linear) and frozen when
28
+ * the notification goes out.
29
+ */
30
+ import { DrawStore } from './draw-store.js';
31
+ import { ChangeBus } from './memory/change-bus.js';
32
+ import { FileStore } from './memory/file-store.js';
33
+ import { frozenCopy, frozenFeature } from './memory/frozen.js';
34
+ /** Creates an empty in-memory Store */
35
+ export const MemoryStore = class extends DrawStore {
36
+ constructor() {
37
+ super(new MemoryDocumentStore());
38
+ }
39
+ };
40
+ /**
41
+ * The in-memory DocumentStore
42
+ *
43
+ * @internal
44
+ */
45
+ export class MemoryDocumentStore {
46
+ constructor() {
47
+ _MemoryDocumentStore_instances.add(this);
48
+ _MemoryDocumentStore_features.set(this, new Map());
49
+ _MemoryDocumentStore_layers.set(this, new Map());
50
+ _MemoryDocumentStore_groups.set(this, new Map());
51
+ _MemoryDocumentStore_layerOrder.set(this, []);
52
+ _MemoryDocumentStore_metadata.set(this, {});
53
+ /**
54
+ * The content set of layer.order (layer ID -> the set of IDs listed in order).
55
+ *
56
+ * It is an index whose only purpose is to make membership tests O(1), and it always keeps
57
+ * the same content as `#layers.get(id).order` (an invariant). Because membership used to be
58
+ * tested with `layer.order.includes()`, inserting N entries at once into a layer whose order
59
+ * was already populated cost O(N^2) in total (the main cause of draw.load going quadratic).
60
+ *
61
+ * The order arrays the store returns are frozen, so the outside cannot rewrite them behind
62
+ * this index.
63
+ */
64
+ _MemoryDocumentStore_layerOrderIndex.set(this, new Map());
65
+ /** The content set of group.featureIds. The group version of #layerOrderIndex (same invariant) */
66
+ _MemoryDocumentStore_groupFeatureIndex.set(this, new Map());
67
+ /**
68
+ * Placements settled at the end of the outermost store operation (see #withinOperation).
69
+ *
70
+ * When a change of layerId / groupId makes a feature standalone, or a group is created that
71
+ * no layer lists, the store must list it somewhere so that it stays reachable. Callers
72
+ * inside a transaction often place the item themselves right after (at a chosen index), so
73
+ * listing it at once would duplicate it. The store therefore only records the item here
74
+ * and lists it at the end of the operation when nobody has listed it by then.
75
+ */
76
+ _MemoryDocumentStore_pendingFeaturePlacement.set(this, new Set());
77
+ _MemoryDocumentStore_pendingGroupPlacement.set(this, new Map());
78
+ _MemoryDocumentStore_operationDepth.set(this, 0);
79
+ /**
80
+ * Layers and groups whose stored object was copied during the current notification. Their
81
+ * order / featureIds may still be changed in place until the notification goes out, when
82
+ * they are frozen (#freezeFresh).
83
+ */
84
+ _MemoryDocumentStore_freshLayers.set(this, new Set());
85
+ _MemoryDocumentStore_freshGroups.set(this, new Set());
86
+ _MemoryDocumentStore_bus.set(this, new ChangeBus(() => __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_freezeFresh).call(this)));
87
+ _MemoryDocumentStore_fileStore.set(this, new FileStore());
88
+ }
89
+ // ============================================================================
90
+ // Feature
91
+ // ============================================================================
92
+ getFeature(id) {
93
+ return __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").get(id);
94
+ }
95
+ getAllFeatures() {
96
+ return Array.from(__classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").values());
97
+ }
98
+ createFeature(feature) {
99
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").has(feature.id)) {
100
+ throw new Error(`Feature with id "${feature.id}" already exists`);
101
+ }
102
+ // A feature must be reachable from exactly one container (its group, or else its layer).
103
+ // A reference to a container that does not exist would leave it stored but never drawn,
104
+ // hit or exported in order, so it is rejected before anything is written.
105
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_assertLayerExists).call(this, feature.layerId);
106
+ if (feature.groupId && !__classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").has(feature.groupId)) {
107
+ throw new Error(`Group with id "${feature.groupId}" not found`);
108
+ }
109
+ const stored = frozenFeature(undefined, feature);
110
+ __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").set(stored.id, stored);
111
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_addToContainer).call(this, stored);
112
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({ features: { created: [stored] } });
113
+ }
114
+ /**
115
+ * Updates a feature
116
+ *
117
+ * options.isIntermediate has no effect on the application of the update (an intermediate
118
+ * state is applied as usual). Only when it is set is it passed through to
119
+ * StateChanges.features.updated, so that the receiver can tell an intermediate update from
120
+ * a final one.
121
+ *
122
+ * When layerId or groupId changes the container of the feature (its group, or else its
123
+ * layer), the feature leaves the order of the old container at once. It joins the group at
124
+ * the tail at once; it joins the order of its layer at the tail at the end of the
125
+ * operation, unless the caller has listed it by then. A layerId that does not exist is
126
+ * rejected. A groupId whose group does not exist yet
127
+ * is accepted, because replaying recorded changes can set groupId before the group is
128
+ * created again (createGroup then lists the feature from its featureIds).
129
+ */
130
+ updateFeature(id, updates, options) {
131
+ const previous = __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").get(id);
132
+ if (!previous) {
133
+ throw new Error(`Feature with id "${id}" not found`);
134
+ }
135
+ if ('layerId' in updates && updates.layerId !== previous.layerId) {
136
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_assertLayerExists).call(this, updates.layerId);
137
+ }
138
+ const updated = frozenFeature(previous, { ...updates, id });
139
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_withinOperation).call(this, () => {
140
+ __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").set(id, updated);
141
+ if (containerKey(previous) !== containerKey(updated)) {
142
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_removeFromContainer).call(this, previous);
143
+ if (updated.groupId) {
144
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_addFeatureToGroupOrder).call(this, id, updated.groupId);
145
+ }
146
+ else {
147
+ __classPrivateFieldGet(this, _MemoryDocumentStore_pendingFeaturePlacement, "f").add(id);
148
+ }
149
+ }
150
+ });
151
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({
152
+ features: {
153
+ updated: [
154
+ {
155
+ id,
156
+ feature: updated,
157
+ previous,
158
+ // Add the key only for an intermediate state (a final update has no such key)
159
+ ...(options?.isIntermediate ? { isIntermediate: true } : {}),
160
+ },
161
+ ],
162
+ },
163
+ });
164
+ }
165
+ deleteFeature(id) {
166
+ const feature = __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").get(id);
167
+ if (!feature) {
168
+ throw new Error(`Feature with id "${id}" not found`);
169
+ }
170
+ __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").delete(id);
171
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_removeItemFromLayerOrder).call(this, id, feature.layerId);
172
+ if (feature.groupId) {
173
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_removeFeatureFromGroupOrder).call(this, id, feature.groupId);
174
+ }
175
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({ features: { deleted: [feature] } });
176
+ }
177
+ getOrderedFeatures() {
178
+ const result = [];
179
+ for (const layerId of __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrder, "f")) {
180
+ const layer = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(layerId);
181
+ if (!layer?.visible)
182
+ continue;
183
+ for (const itemId of layer.order) {
184
+ const group = __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(itemId);
185
+ if (group) {
186
+ if (!group.visible)
187
+ continue;
188
+ for (const featureId of group.featureIds) {
189
+ const feature = __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").get(featureId);
190
+ if (feature?.visible)
191
+ result.push(feature);
192
+ }
193
+ }
194
+ else {
195
+ const feature = __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").get(itemId);
196
+ if (feature?.visible)
197
+ result.push(feature);
198
+ }
199
+ }
200
+ }
201
+ return result;
202
+ }
203
+ // ============================================================================
204
+ // Layer
205
+ // ============================================================================
206
+ getLayer(id) {
207
+ return __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(id);
208
+ }
209
+ getAllLayers() {
210
+ return Array.from(__classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").values());
211
+ }
212
+ createLayer(layer) {
213
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").has(layer.id)) {
214
+ throw new Error(`Layer with id "${layer.id}" already exists`);
215
+ }
216
+ // The order stays open for the members created in the same notification
217
+ const stored = { ...frozenFields(layer), order: [...layer.order] };
218
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").set(layer.id, stored);
219
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f").add(layer.id);
220
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrderIndex, "f").set(layer.id, new Set(layer.order));
221
+ // An id the application already placed on the stacking order keeps its position
222
+ if (!__classPrivateFieldGet(this, _MemoryDocumentStore_layerOrder, "f").includes(layer.id))
223
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrder, "f").push(layer.id);
224
+ // The created entry is the layer as it was created (the stored one may still gain members
225
+ // in the same notification)
226
+ const created = Object.freeze({ ...stored, order: Object.freeze([...stored.order]) });
227
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({ layers: { created: [created] } });
228
+ }
229
+ updateLayer(id, updates) {
230
+ const previous = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(id);
231
+ if (!previous) {
232
+ throw new Error(`Layer with id "${id}" not found`);
233
+ }
234
+ const updated = {
235
+ ...previous,
236
+ ...frozenFields(updates),
237
+ id,
238
+ order: [...(updates.order ?? previous.order)],
239
+ };
240
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f").has(id))
241
+ Object.freeze(Object.freeze(previous).order);
242
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").set(id, updated);
243
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f").add(id);
244
+ // Rebuild the index only when order has been replaced (if it is left as is, it is the same
245
+ // array as previous.order, so the index also stays valid).
246
+ if (updates.order)
247
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrderIndex, "f").set(id, new Set(updated.order));
248
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({ layers: { updated: [{ id, layer: updated, previous }] } });
249
+ }
250
+ deleteLayer(id) {
251
+ const layer = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(id);
252
+ if (!layer) {
253
+ throw new Error(`Layer with id "${id}" not found`);
254
+ }
255
+ // Delete the features and groups in the layer
256
+ for (const itemId of [...layer.order]) {
257
+ const group = __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(itemId);
258
+ if (group) {
259
+ for (const featureId of [...group.featureIds]) {
260
+ this.deleteFeature(featureId);
261
+ }
262
+ // An empty group is deleted automatically the moment the last feature in the group is
263
+ // removed, so delete it explicitly only when it still remains.
264
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").has(itemId)) {
265
+ this.deleteGroup(itemId);
266
+ }
267
+ }
268
+ else if (__classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").has(itemId)) {
269
+ this.deleteFeature(itemId);
270
+ }
271
+ }
272
+ // The last state of the layer (its order has emptied as its members left)
273
+ const deleted = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(id) ?? layer;
274
+ Object.freeze(Object.freeze(deleted).order);
275
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f").delete(id);
276
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").delete(id);
277
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrderIndex, "f").delete(id);
278
+ const idx = __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrder, "f").indexOf(id);
279
+ if (idx !== -1)
280
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrder, "f").splice(idx, 1);
281
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({ layers: { deleted: [deleted] } });
282
+ }
283
+ getLayerOrder() {
284
+ // Returning the internal array as is would let the outside rewrite it and break the SSoT,
285
+ // so a defensive copy is returned (consistent with getSelection / getMetadata).
286
+ return [...__classPrivateFieldGet(this, _MemoryDocumentStore_layerOrder, "f")];
287
+ }
288
+ /**
289
+ * Replaces the stacking order (see {@link DocumentStore.setLayerOrder})
290
+ *
291
+ * The entries are not only layer IDs: the entries of the application
292
+ * (datasets, separators) are kept as they are. Only what cannot be an entry is dropped:
293
+ * a value that is not a non-empty string, and a repeated entry after its first position.
294
+ *
295
+ * The membership index within a layer (#layerOrderIndex) is an index over the layer.order of
296
+ * each layer, which is a different thing from this sequence, so it is not touched.
297
+ */
298
+ setLayerOrder(order) {
299
+ const previous = [...__classPrivateFieldGet(this, _MemoryDocumentStore_layerOrder, "f")];
300
+ __classPrivateFieldSet(this, _MemoryDocumentStore_layerOrder, [...new Set(order.filter((id) => typeof id === 'string' && id !== ''))], "f");
301
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({
302
+ layers: { orderChanged: { order: [...__classPrivateFieldGet(this, _MemoryDocumentStore_layerOrder, "f")], previous } },
303
+ });
304
+ }
305
+ reorderInLayer(itemId, layerId, newIndex) {
306
+ const current = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(layerId);
307
+ if (!current) {
308
+ throw new Error(`Layer with id "${layerId}" not found`);
309
+ }
310
+ const currentIndex = current.order.indexOf(itemId);
311
+ if (currentIndex === -1) {
312
+ throw new Error(`Item "${itemId}" not found in layer "${layerId}"`);
313
+ }
314
+ const previousOrder = [...current.order];
315
+ const layer = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_writableLayer).call(this, current);
316
+ layer.order.splice(currentIndex, 1);
317
+ layer.order.splice(newIndex, 0, itemId);
318
+ // An update of this layer already stacked in the notification carries the new object
319
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").hasPendingLayerUpdate(layerId))
320
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").mergeLayerUpdate(layer, undefined);
321
+ // Emit the dedicated layerReorder (not layers.updated)
322
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({
323
+ layerReorder: { layerId, order: [...layer.order], previous: previousOrder },
324
+ });
325
+ }
326
+ reorderInGroup(featureId, groupId, newIndex) {
327
+ const current = __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(groupId);
328
+ if (!current) {
329
+ throw new Error(`Group with id "${groupId}" not found`);
330
+ }
331
+ const currentIndex = current.featureIds.indexOf(featureId);
332
+ if (currentIndex === -1) {
333
+ throw new Error(`Feature "${featureId}" not found in group "${groupId}"`);
334
+ }
335
+ const previousFeatureIds = [...current.featureIds];
336
+ const group = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_writableGroup).call(this, current);
337
+ group.featureIds.splice(currentIndex, 1);
338
+ group.featureIds.splice(newIndex, 0, featureId);
339
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").hasPendingGroupUpdate(groupId))
340
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").mergeGroupUpdate(group, undefined);
341
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({
342
+ groupReorder: { groupId, featureIds: [...group.featureIds], previous: previousFeatureIds },
343
+ });
344
+ }
345
+ // ============================================================================
346
+ // Group
347
+ // ============================================================================
348
+ getGroup(id) {
349
+ return __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(id);
350
+ }
351
+ getAllGroups() {
352
+ return Array.from(__classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").values());
353
+ }
354
+ createGroup(group) {
355
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").has(group.id)) {
356
+ throw new Error(`Group with id "${group.id}" already exists`);
357
+ }
358
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_withinOperation).call(this, () => __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_createGroup).call(this, group));
359
+ }
360
+ updateGroup(id, updates) {
361
+ const previous = __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(id);
362
+ if (!previous) {
363
+ throw new Error(`Group with id "${id}" not found`);
364
+ }
365
+ const updated = {
366
+ ...previous,
367
+ ...frozenFields(updates),
368
+ id,
369
+ featureIds: [...(updates.featureIds ?? previous.featureIds)],
370
+ };
371
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f").has(id))
372
+ Object.freeze(Object.freeze(previous).featureIds);
373
+ __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").set(id, updated);
374
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f").add(id);
375
+ // Rebuild the index only when featureIds has been replaced (same reason as updateLayer).
376
+ if (updates.featureIds)
377
+ __classPrivateFieldGet(this, _MemoryDocumentStore_groupFeatureIndex, "f").set(id, new Set(updated.featureIds));
378
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({ groups: { updated: [{ id, group: updated, previous }] } });
379
+ }
380
+ deleteGroup(id) {
381
+ const group = __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(id);
382
+ if (!group) {
383
+ throw new Error(`Group with id "${id}" not found`);
384
+ }
385
+ // Delete the group itself first. This prevents #removeFeatureFromGroupOrder from
386
+ // recursively invoking the automatic deletion of an empty group while the groupId of the
387
+ // members is cleared (it returns early because the group is already gone).
388
+ Object.freeze(Object.freeze(group).featureIds);
389
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f").delete(id);
390
+ __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").delete(id);
391
+ __classPrivateFieldGet(this, _MemoryDocumentStore_groupFeatureIndex, "f").delete(id);
392
+ // Put the members where the group was in the order of its layer, so that they stay
393
+ // reachable after the group is gone. A member whose layerId names another layer is left
394
+ // to the cascade of updateFeature below, which appends it to its own layer.
395
+ for (const layer of [...__classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").values()]) {
396
+ const index = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_layerOrderSet).call(this, layer);
397
+ if (!index.has(id))
398
+ continue;
399
+ const idx = layer.order.indexOf(id);
400
+ if (idx === -1)
401
+ continue;
402
+ const members = group.featureIds.filter((fid) => __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").get(fid)?.layerId === layer.id && !index.has(fid));
403
+ if (members.length === 0)
404
+ continue;
405
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_mutateLayerOrder).call(this, layer, (order) => {
406
+ order.splice(idx, 0, ...members);
407
+ });
408
+ for (const fid of members)
409
+ index.add(fid);
410
+ }
411
+ // Remove groupId from the features in the group
412
+ // updateFeature modifies group.featureIds, so iterate over a copy of the array
413
+ for (const featureId of [...group.featureIds]) {
414
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").has(featureId)) {
415
+ this.updateFeature(featureId, { groupId: undefined });
416
+ }
417
+ }
418
+ // Remove the group ID from the order of every layer (the index skips layers that do not
419
+ // hold it in O(1))
420
+ for (const layer of [...__classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").values()]) {
421
+ const index = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_layerOrderSet).call(this, layer);
422
+ if (!index.has(id))
423
+ continue;
424
+ const idx = layer.order.indexOf(id);
425
+ if (idx === -1)
426
+ continue;
427
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_mutateLayerOrder).call(this, layer, (order) => {
428
+ order.splice(idx, 1);
429
+ });
430
+ index.delete(id);
431
+ }
432
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({ groups: { deleted: [group] } });
433
+ }
434
+ // ============================================================================
435
+ // File (delegated to FileStore)
436
+ // ============================================================================
437
+ createFile(file) {
438
+ __classPrivateFieldGet(this, _MemoryDocumentStore_fileStore, "f").create(file);
439
+ }
440
+ getFile(id) {
441
+ return __classPrivateFieldGet(this, _MemoryDocumentStore_fileStore, "f").get(id);
442
+ }
443
+ getAllFiles() {
444
+ return __classPrivateFieldGet(this, _MemoryDocumentStore_fileStore, "f").getAll();
445
+ }
446
+ deleteFile(id) {
447
+ __classPrivateFieldGet(this, _MemoryDocumentStore_fileStore, "f").delete(id);
448
+ }
449
+ // ============================================================================
450
+ // Metadata
451
+ // ============================================================================
452
+ getMetadata() {
453
+ return { ...__classPrivateFieldGet(this, _MemoryDocumentStore_metadata, "f") };
454
+ }
455
+ setMetadata(metadata) {
456
+ const previous = { ...__classPrivateFieldGet(this, _MemoryDocumentStore_metadata, "f") };
457
+ __classPrivateFieldSet(this, _MemoryDocumentStore_metadata, { ...__classPrivateFieldGet(this, _MemoryDocumentStore_metadata, "f"), ...frozenFields(metadata) }, "f");
458
+ // Delete the keys whose value is undefined
459
+ for (const key of Object.keys(__classPrivateFieldGet(this, _MemoryDocumentStore_metadata, "f"))) {
460
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_metadata, "f")[key] === undefined) {
461
+ delete __classPrivateFieldGet(this, _MemoryDocumentStore_metadata, "f")[key];
462
+ }
463
+ }
464
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({ metadata: { metadata: { ...__classPrivateFieldGet(this, _MemoryDocumentStore_metadata, "f") }, previous } });
465
+ }
466
+ // ============================================================================
467
+ // Subscribe / Transaction (delegated to ChangeBus)
468
+ // ============================================================================
469
+ subscribe(listener) {
470
+ return __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").subscribe(listener);
471
+ }
472
+ transact(fn, source = 'local') {
473
+ return __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").transact(() => __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_withinOperation).call(this, fn), source);
474
+ }
475
+ }
476
+ _MemoryDocumentStore_features = new WeakMap(), _MemoryDocumentStore_layers = new WeakMap(), _MemoryDocumentStore_groups = new WeakMap(), _MemoryDocumentStore_layerOrder = new WeakMap(), _MemoryDocumentStore_metadata = new WeakMap(), _MemoryDocumentStore_layerOrderIndex = new WeakMap(), _MemoryDocumentStore_groupFeatureIndex = new WeakMap(), _MemoryDocumentStore_pendingFeaturePlacement = new WeakMap(), _MemoryDocumentStore_pendingGroupPlacement = new WeakMap(), _MemoryDocumentStore_operationDepth = new WeakMap(), _MemoryDocumentStore_freshLayers = new WeakMap(), _MemoryDocumentStore_freshGroups = new WeakMap(), _MemoryDocumentStore_bus = new WeakMap(), _MemoryDocumentStore_fileStore = new WeakMap(), _MemoryDocumentStore_instances = new WeakSet(), _MemoryDocumentStore_createGroup = function _MemoryDocumentStore_createGroup(group) {
477
+ const featureIdsCopy = [...group.featureIds];
478
+ const stored = { ...frozenFields(group), featureIds: [...featureIdsCopy] };
479
+ __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").set(group.id, stored);
480
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f").add(group.id);
481
+ __classPrivateFieldGet(this, _MemoryDocumentStore_groupFeatureIndex, "f").set(group.id, new Set(featureIdsCopy));
482
+ // The members leave the order of their layer below (their container becomes the group),
483
+ // so a group that no layer lists takes the place of its first member at the end of the
484
+ // operation. A caller that lists the group itself (at the position it chose) wins.
485
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_scheduleGroupPlacement).call(this, group.id, featureIdsCopy);
486
+ // Set groupId on the features in the group
487
+ for (const featureId of featureIdsCopy) {
488
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").has(featureId)) {
489
+ this.updateFeature(featureId, { groupId: group.id });
490
+ }
491
+ }
492
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").merge({
493
+ groups: {
494
+ created: [Object.freeze({ ...stored, featureIds: Object.freeze(featureIdsCopy) })],
495
+ },
496
+ });
497
+ }, _MemoryDocumentStore_mutateLayerOrder = function _MemoryDocumentStore_mutateLayerOrder(current, mutate) {
498
+ const hadUpdate = __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").hasPendingLayerUpdate(current.id);
499
+ const fresh = __classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f").has(current.id);
500
+ const previous = hadUpdate
501
+ ? undefined
502
+ : fresh
503
+ ? { ...current, order: [...current.order] }
504
+ : current;
505
+ const layer = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_writableLayer).call(this, current);
506
+ mutate(layer.order);
507
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").mergeLayerUpdate(layer, previous);
508
+ }, _MemoryDocumentStore_mutateGroupFeatureIds = function _MemoryDocumentStore_mutateGroupFeatureIds(current, mutate) {
509
+ const hadUpdate = __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").hasPendingGroupUpdate(current.id);
510
+ const fresh = __classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f").has(current.id);
511
+ const previous = hadUpdate
512
+ ? undefined
513
+ : fresh
514
+ ? { ...current, featureIds: [...current.featureIds] }
515
+ : current;
516
+ const group = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_writableGroup).call(this, current);
517
+ mutate(group.featureIds);
518
+ __classPrivateFieldGet(this, _MemoryDocumentStore_bus, "f").mergeGroupUpdate(group, previous);
519
+ }, _MemoryDocumentStore_writableLayer = function _MemoryDocumentStore_writableLayer(current) {
520
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f").has(current.id))
521
+ return current;
522
+ const layer = { ...current, order: [...current.order] };
523
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").set(layer.id, layer);
524
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f").add(layer.id);
525
+ return layer;
526
+ }, _MemoryDocumentStore_writableGroup = function _MemoryDocumentStore_writableGroup(current) {
527
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f").has(current.id))
528
+ return current;
529
+ const group = { ...current, featureIds: [...current.featureIds] };
530
+ __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").set(group.id, group);
531
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f").add(group.id);
532
+ return group;
533
+ }, _MemoryDocumentStore_freezeFresh = function _MemoryDocumentStore_freezeFresh() {
534
+ for (const id of __classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f")) {
535
+ const layer = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(id);
536
+ if (layer)
537
+ Object.freeze(Object.freeze(layer).order);
538
+ }
539
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshLayers, "f").clear();
540
+ for (const id of __classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f")) {
541
+ const group = __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(id);
542
+ if (group)
543
+ Object.freeze(Object.freeze(group).featureIds);
544
+ }
545
+ __classPrivateFieldGet(this, _MemoryDocumentStore_freshGroups, "f").clear();
546
+ }, _MemoryDocumentStore_layerOrderSet = function _MemoryDocumentStore_layerOrderSet(layer) {
547
+ let index = __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrderIndex, "f").get(layer.id);
548
+ if (!index) {
549
+ index = new Set(layer.order);
550
+ __classPrivateFieldGet(this, _MemoryDocumentStore_layerOrderIndex, "f").set(layer.id, index);
551
+ }
552
+ return index;
553
+ }, _MemoryDocumentStore_groupFeatureSet = function _MemoryDocumentStore_groupFeatureSet(group) {
554
+ let index = __classPrivateFieldGet(this, _MemoryDocumentStore_groupFeatureIndex, "f").get(group.id);
555
+ if (!index) {
556
+ index = new Set(group.featureIds);
557
+ __classPrivateFieldGet(this, _MemoryDocumentStore_groupFeatureIndex, "f").set(group.id, index);
558
+ }
559
+ return index;
560
+ }, _MemoryDocumentStore_withinOperation = function _MemoryDocumentStore_withinOperation(fn) {
561
+ var _a, _b;
562
+ __classPrivateFieldSet(this, _MemoryDocumentStore_operationDepth, (_a = __classPrivateFieldGet(this, _MemoryDocumentStore_operationDepth, "f"), _a++, _a), "f");
563
+ try {
564
+ return fn();
565
+ }
566
+ finally {
567
+ __classPrivateFieldSet(this, _MemoryDocumentStore_operationDepth, (_b = __classPrivateFieldGet(this, _MemoryDocumentStore_operationDepth, "f"), _b--, _b), "f");
568
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_operationDepth, "f") === 0)
569
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_settlePlacements).call(this);
570
+ }
571
+ }, _MemoryDocumentStore_scheduleGroupPlacement = function _MemoryDocumentStore_scheduleGroupPlacement(groupId, featureIds) {
572
+ const first = featureIds
573
+ .map((fid) => __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").get(fid))
574
+ .find((f) => f !== undefined);
575
+ const layer = first && __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(first.layerId);
576
+ if (!first || !layer)
577
+ return;
578
+ const idx = layer.order.indexOf(first.id);
579
+ __classPrivateFieldGet(this, _MemoryDocumentStore_pendingGroupPlacement, "f").set(groupId, {
580
+ layerId: layer.id,
581
+ index: idx === -1 ? layer.order.length : idx,
582
+ });
583
+ }, _MemoryDocumentStore_settlePlacements = function _MemoryDocumentStore_settlePlacements() {
584
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_pendingGroupPlacement, "f").size === 0 && __classPrivateFieldGet(this, _MemoryDocumentStore_pendingFeaturePlacement, "f").size === 0) {
585
+ return;
586
+ }
587
+ const groups = [...__classPrivateFieldGet(this, _MemoryDocumentStore_pendingGroupPlacement, "f")];
588
+ const features = [...__classPrivateFieldGet(this, _MemoryDocumentStore_pendingFeaturePlacement, "f")];
589
+ __classPrivateFieldGet(this, _MemoryDocumentStore_pendingGroupPlacement, "f").clear();
590
+ __classPrivateFieldGet(this, _MemoryDocumentStore_pendingFeaturePlacement, "f").clear();
591
+ for (const [groupId, { layerId, index }] of groups) {
592
+ if (!__classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").has(groupId) || __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_isListedInAnyLayer).call(this, groupId))
593
+ continue;
594
+ const layer = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(layerId);
595
+ if (!layer)
596
+ continue;
597
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_mutateLayerOrder).call(this, layer, (order) => {
598
+ order.splice(Math.min(index, order.length), 0, groupId);
599
+ });
600
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_layerOrderSet).call(this, layer).add(groupId);
601
+ }
602
+ for (const id of features) {
603
+ const feature = __classPrivateFieldGet(this, _MemoryDocumentStore_features, "f").get(id);
604
+ if (!feature || feature.groupId)
605
+ continue;
606
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_addItemToLayerOrder).call(this, id, feature.layerId);
607
+ }
608
+ }, _MemoryDocumentStore_isListedInAnyLayer = function _MemoryDocumentStore_isListedInAnyLayer(itemId) {
609
+ for (const layer of __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").values()) {
610
+ if (__classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_layerOrderSet).call(this, layer).has(itemId))
611
+ return true;
612
+ }
613
+ return false;
614
+ }, _MemoryDocumentStore_assertLayerExists = function _MemoryDocumentStore_assertLayerExists(layerId) {
615
+ if (layerId === undefined || !__classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").has(layerId)) {
616
+ throw new Error(`Layer with id "${layerId}" not found`);
617
+ }
618
+ }, _MemoryDocumentStore_addToContainer = function _MemoryDocumentStore_addToContainer(feature) {
619
+ if (feature.groupId) {
620
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_addFeatureToGroupOrder).call(this, feature.id, feature.groupId);
621
+ }
622
+ else {
623
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_addItemToLayerOrder).call(this, feature.id, feature.layerId);
624
+ }
625
+ }, _MemoryDocumentStore_removeFromContainer = function _MemoryDocumentStore_removeFromContainer(feature) {
626
+ if (feature.groupId) {
627
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_removeFeatureFromGroupOrder).call(this, feature.id, feature.groupId);
628
+ }
629
+ else {
630
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_removeItemFromLayerOrder).call(this, feature.id, feature.layerId);
631
+ }
632
+ }, _MemoryDocumentStore_addItemToLayerOrder = function _MemoryDocumentStore_addItemToLayerOrder(itemId, layerId) {
633
+ const layer = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(layerId);
634
+ if (!layer)
635
+ return;
636
+ const index = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_layerOrderSet).call(this, layer);
637
+ if (index.has(itemId))
638
+ return;
639
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_mutateLayerOrder).call(this, layer, (order) => {
640
+ order.push(itemId);
641
+ });
642
+ index.add(itemId);
643
+ }, _MemoryDocumentStore_removeItemFromLayerOrder = function _MemoryDocumentStore_removeItemFromLayerOrder(itemId, layerId) {
644
+ const layer = __classPrivateFieldGet(this, _MemoryDocumentStore_layers, "f").get(layerId);
645
+ if (!layer)
646
+ return;
647
+ // Most IDs, such as features belonging to a group, are not listed in order, so they are
648
+ // rejected by the index before the traversal (indexOf itself is needed to locate the
649
+ // splice position).
650
+ const index = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_layerOrderSet).call(this, layer);
651
+ if (!index.has(itemId))
652
+ return;
653
+ const idx = layer.order.indexOf(itemId);
654
+ if (idx === -1)
655
+ return;
656
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_mutateLayerOrder).call(this, layer, (order) => {
657
+ order.splice(idx, 1);
658
+ });
659
+ index.delete(itemId);
660
+ }, _MemoryDocumentStore_addFeatureToGroupOrder = function _MemoryDocumentStore_addFeatureToGroupOrder(featureId, groupId) {
661
+ const group = __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(groupId);
662
+ if (!group)
663
+ return;
664
+ const index = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_groupFeatureSet).call(this, group);
665
+ if (index.has(featureId))
666
+ return;
667
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_mutateGroupFeatureIds).call(this, group, (featureIds) => {
668
+ featureIds.push(featureId);
669
+ });
670
+ index.add(featureId);
671
+ }, _MemoryDocumentStore_removeFeatureFromGroupOrder = function _MemoryDocumentStore_removeFeatureFromGroupOrder(featureId, groupId) {
672
+ const group = __classPrivateFieldGet(this, _MemoryDocumentStore_groups, "f").get(groupId);
673
+ if (!group)
674
+ return;
675
+ const index = __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_groupFeatureSet).call(this, group);
676
+ if (!index.has(featureId))
677
+ return;
678
+ const idx = group.featureIds.indexOf(featureId);
679
+ if (idx === -1)
680
+ return;
681
+ __classPrivateFieldGet(this, _MemoryDocumentStore_instances, "m", _MemoryDocumentStore_mutateGroupFeatureIds).call(this, group, (featureIds) => {
682
+ featureIds.splice(idx, 1);
683
+ });
684
+ index.delete(featureId);
685
+ // A group that has become empty is deleted automatically (the standard behavior of
686
+ // canvas-style tools). A group is a container of elements, and an empty group only
687
+ // clutters the layer tree.
688
+ if (index.size === 0) {
689
+ this.deleteGroup(groupId);
690
+ }
691
+ };
692
+ /**
693
+ * Identifies the container that lists a feature: its group when it has one, otherwise its
694
+ * layer. A feature is listed in exactly this container.
695
+ */
696
+ function containerKey(feature) {
697
+ return feature.groupId ? `group:${feature.groupId}` : `layer:${feature.layerId}`;
698
+ }
699
+ /**
700
+ * A shallow copy whose object and array fields are frozen copies (the fields of a layer,
701
+ * a group or the metadata other than the order they keep)
702
+ */
703
+ function frozenFields(value) {
704
+ const copy = { ...value };
705
+ for (const key of Object.keys(copy))
706
+ copy[key] = frozenCopy(copy[key]);
707
+ return copy;
708
+ }