@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,417 @@
1
+ /**
2
+ * The Store contracts
3
+ *
4
+ * All of the state lives in one place (Single Source of Truth), split along one line:
5
+ *
6
+ * - DocumentStore: the document (features, layers, groups, the stacking order, files and
7
+ * metadata). It is the part a host may replace (`Options.store`) to keep the document
8
+ * elsewhere, and it knows nothing about the user interface.
9
+ * - UiState: the local state of this client (selection, editing, tentative geometry, box
10
+ * selection, drag, vertex selection, mode, read-only, interaction lock, local
11
+ * visibility). core owns it; it is never part of the document.
12
+ *
13
+ * Store joins the two for core: it reads and writes the document through the DocumentStore,
14
+ * holds the UiState, gates the writes while read-only, keeps the UiState in step with
15
+ * deletions, and delivers both kinds of change in one notification. StoreView is the part of
16
+ * it the host sees (`draw.getStore()`): reads, subscription and transactions, no writes.
17
+ */
18
+ import type { BoxSelection, DragState, Feature, FileData, Group, Layer, Metadata, Mode, Selection, SelectionType, StateChanges, TentativeState, UpdateFeatureOptions, UpdateSource, VertexSelection } from './types.js';
19
+ /**
20
+ * The document: the part of the state a host may replace to keep it elsewhere
21
+ *
22
+ * The state of a draw instance is split along one line:
23
+ *
24
+ * | Type | What it is |
25
+ * | --- | --- |
26
+ * | `DocumentStore` | The document: features, layers, groups, the stacking order, files and metadata |
27
+ * | {@link UiState} | The local state of this instance, never part of the document |
28
+ * | {@link Store} | Both behind the read-only gate, for core and plugins |
29
+ * | {@link StoreView} | Reads, `subscribe` and `transact`, from `draw.getStore()` |
30
+ * | {@link MemoryStore} | The in-memory `Store`, the default |
31
+ *
32
+ * A host that keeps the document elsewhere (a database, for example) implements this
33
+ * interface and passes it as the `store` option. Core keeps the
34
+ * local state (the selection, the features being edited, the geometry being drawn, the box
35
+ * selection, the drag, the vertex selection, the mode, read-only, the interaction lock and
36
+ * local visibility) around it. An implementation keeps the following contract.
37
+ *
38
+ * Containment: every feature is listed in exactly one container, in `group.featureIds` of its
39
+ * group when it has `groupId`, otherwise in `layer.order` of its layer. An implementation
40
+ * keeps it on every mutation, so that no stored feature is left out of drawing, hit testing
41
+ * and ordered export.
42
+ *
43
+ * The stacking order: `getLayerOrder()` is part of the document, saved and held with
44
+ * the rest, and it holds more than layers. An application can place entries of its own in
45
+ * it (the id of a dataset with `order: 'layer-order'`, a separator for
46
+ * the `isExternalEntry` option); what such an entry means is the application's, and the
47
+ * document only keeps its position. The entries are distinct non-empty strings: an
48
+ * implementation drops any other value and keeps a repeated entry at its first position.
49
+ * `createLayer` appends the new layer at the front unless the order already holds its id,
50
+ * and `deleteLayer` takes that layer's id out. No other operation adds or removes entries;
51
+ * an entry that is not a layer stays until the application sets an order without it, even
52
+ * when what it names is gone. A layer that is not on the order is not drawn.
53
+ *
54
+ * Returned objects: callers treat every object and array a getter returns as read-only.
55
+ * An implementation must not change an object after it has returned or notified it; a
56
+ * change stores a new object instead (MemoryStore freezes what it returns, so a write
57
+ * into it throws).
58
+ *
59
+ * Errors: a write with an argument that cannot apply (an id that does not exist, a
60
+ * `layerId` or `groupId` that names nothing, a duplicate id) throws and stores nothing.
61
+ * Read-only is not the document's concern: core gates the writes before they get here, and
62
+ * changes applied from elsewhere never pass that gate. An implementation
63
+ * that receives changes from elsewhere may ignore, instead of throwing, an update to an
64
+ * id that such a change has already removed (the caller cannot know about the removal
65
+ * yet); the notification then carries nothing for that id.
66
+ *
67
+ * Notifications: `subscribe` delivers the document categories of StateChanges (features,
68
+ * layers, groups, layerReorder, groupReorder, metadata) with their source, and `transact`
69
+ * groups the changes of a function into one notification. Any other category a notification
70
+ * carries is ignored by core. A change applied from elsewhere is notified like a local one,
71
+ * with the source `'remote'`, and core follows it: a deleted item leaves the selection, the
72
+ * vertex selection ends when its feature changed, and the hooks of the plugins fire.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * // A document kept elsewhere: wrap it in a DocumentStore and hand it to the draw instance
77
+ * const document: DocumentStore = createSyncedDocument(roomId);
78
+ * const draw = createMapLibreGLDraw(map, { store: document });
79
+ * ```
80
+ */
81
+ export interface DocumentStore {
82
+ /** Returns the feature with this ID, or undefined */
83
+ getFeature(id: string): Feature | undefined;
84
+ /** Every feature, in no particular order */
85
+ getAllFeatures(): Feature[];
86
+ /**
87
+ * Creates a feature and lists it in its container
88
+ *
89
+ * Throws, storing nothing, when `layerId` names a layer that does not exist or `groupId`
90
+ * names a group that does not exist.
91
+ */
92
+ createFeature(feature: Feature): void;
93
+ /**
94
+ * Updates a feature
95
+ *
96
+ * A change of `layerId` or `groupId` moves the feature from its old container to the new
97
+ * one (appended at the end, unless the caller lists it itself within the same
98
+ * transaction). A `layerId` that names a layer that does not exist throws.
99
+ *
100
+ * @param options An optional argument that conveys the nature of the update. Setting
101
+ * isIntermediate declares that this is "an intermediate state in the middle of an
102
+ * edit operation" (it is always overwritten by the committing update that follows).
103
+ * The application itself does not change depending on whether options is given.
104
+ */
105
+ updateFeature(id: string, updates: Partial<Feature>, options?: UpdateFeatureOptions): void;
106
+ /**
107
+ * Discards uncommitted intermediate states (optional to implement)
108
+ *
109
+ * Called from the mode side when an edit operation is interrupted before a sequence of
110
+ * updates with isIntermediate reaches its commit (an updateFeature without options). A
111
+ * store implementation that holds intermediate states separately instead of applying
112
+ * them to the real data discards the intermediate state of the relevant feature here
113
+ * and returns to the committed state. An implementation that applies them to the real
114
+ * data as they are (MemoryStore) does not have to implement it: before calling it, the
115
+ * mode writes the values the features had when the operation started back as a last
116
+ * intermediate update, so the real data is already back at the start.
117
+ */
118
+ abortIntermediateUpdates?(ids: string[]): void;
119
+ /**
120
+ * Deletes a feature and removes it from its container
121
+ *
122
+ * A group whose last member leaves is deleted with it (an empty group is not kept).
123
+ */
124
+ deleteFeature(id: string): void;
125
+ /**
126
+ * Gets the array of features in display order
127
+ *
128
+ * Iterates in layer order -> order within the layer -> featureIds order within the
129
+ * group, skipping what the shared visible flag hides at any of the three levels.
130
+ * The head of the array is the backmost and the end is the foreground.
131
+ */
132
+ getOrderedFeatures(): Feature[];
133
+ /** Returns the layer with this ID, or undefined */
134
+ getLayer(id: string): Layer | undefined;
135
+ /** Every layer, in no particular order */
136
+ getAllLayers(): Layer[];
137
+ /**
138
+ * Creates a layer and appends it to the stacking order (as the frontmost entry), unless the
139
+ * order already holds its id, which then keeps its position
140
+ */
141
+ createLayer(layer: Layer): void;
142
+ /** Updates a layer (an `order` given here replaces the order of its items) */
143
+ updateLayer(id: string, updates: Partial<Layer>): void;
144
+ /**
145
+ * Deletes a layer together with the features and groups it lists, and takes its id out of
146
+ * the stacking order (the other entries stay)
147
+ */
148
+ deleteLayer(id: string): void;
149
+ /** Gets the stacking order, layers and entries of the application (the end is the front) */
150
+ getLayerOrder(): readonly string[];
151
+ /**
152
+ * Replaces the stacking order (the end is the front)
153
+ *
154
+ * The order is part of the document and may hold entries that are not layers (see the
155
+ * stacking order in the description of this interface), so an implementation keeps every
156
+ * non-empty string it is given, in the given order, and folds a repeated one to its first
157
+ * position.
158
+ */
159
+ setLayerOrder(order: string[]): void;
160
+ /** Changes the order of an item (a feature or a group) within a layer */
161
+ reorderInLayer(itemId: string, layerId: string, newIndex: number): void;
162
+ /** Changes the order of a feature within a group */
163
+ reorderInGroup(featureId: string, groupId: string, newIndex: number): void;
164
+ /** Returns the group with this ID, or undefined */
165
+ getGroup(id: string): Group | undefined;
166
+ /** Every group, in no particular order */
167
+ getAllGroups(): Group[];
168
+ /**
169
+ * Creates a group and sets `groupId` on its existing members, which leave the order of
170
+ * their layer. A group that no layer lists by the end of the operation takes the place of
171
+ * its first member.
172
+ */
173
+ createGroup(group: Group): void;
174
+ /** Updates a group (a `featureIds` given here replaces its members and their order) */
175
+ updateGroup(id: string, updates: Partial<Group>): void;
176
+ /**
177
+ * Deletes a group and clears `groupId` on its members, which take the group's place in
178
+ * the order of its layer.
179
+ */
180
+ deleteGroup(id: string): void;
181
+ /** Stores a file (a duplicate ID throws) */
182
+ createFile(file: FileData): void;
183
+ /** Returns the file with this ID, or undefined */
184
+ getFile(id: string): FileData | undefined;
185
+ /** Every file */
186
+ getAllFiles(): FileData[];
187
+ /** Deletes a file (the features that refer to it are not changed) */
188
+ deleteFile(id: string): void;
189
+ /** Returns the metadata of the document */
190
+ getMetadata(): Metadata;
191
+ /** Sets the metadata (merging; a key set to undefined is removed) */
192
+ setMetadata(metadata: Partial<Metadata>): void;
193
+ /**
194
+ * Subscribes to changes
195
+ *
196
+ * @returns The unsubscribe function
197
+ */
198
+ subscribe(listener: (changes: StateChanges) => void): () => void;
199
+ /**
200
+ * Runs fn and notifies its changes together as a single StateChanges
201
+ *
202
+ * Not atomic: when fn throws, the writes made before the throw stay applied, they are
203
+ * notified, and the exception is rethrown.
204
+ *
205
+ * @param source The source of the operation (for history management in a plugin and for
206
+ * synchronization in an external store)
207
+ */
208
+ transact<T>(fn: () => T, source?: UpdateSource): T;
209
+ }
210
+ /**
211
+ * The local state of this instance: never part of the document, owned by core
212
+ *
213
+ * Core keeps it for every draw instance, whatever {@link DocumentStore} holds the document.
214
+ * The host reads it through {@link StoreView} and changes it through the methods of the draw
215
+ * instance (`setMode`, `setSelection`, `setReadOnly` and so on).
216
+ */
217
+ export interface UiState {
218
+ /** Returns the current selection */
219
+ getSelection(): Selection;
220
+ /** Replaces the selection (`null` and an empty array clear it) */
221
+ setSelection(type: SelectionType | null, ids: string[]): void;
222
+ /** The IDs of the features being edited (their vertex handles are shown) */
223
+ getEditingIds(): readonly string[];
224
+ /** Marks features as being edited */
225
+ startEditing(ids: string[]): void;
226
+ /** Ends the editing of features */
227
+ endEditing(ids: string[]): void;
228
+ /** The geometry being drawn, or null when nothing is being drawn */
229
+ getTentative(): TentativeState | null;
230
+ /** Sets or clears the geometry being drawn */
231
+ setTentative(state: TentativeState | null): void;
232
+ /** The box selection in progress, or null */
233
+ getBoxSelection(): BoxSelection | null;
234
+ /** Sets or clears the box selection in progress */
235
+ setBoxSelection(box: BoxSelection | null): void;
236
+ /** The drag in progress, or null */
237
+ getDragState(): DragState | null;
238
+ /** Sets or clears the drag in progress */
239
+ setDragState(state: DragState | null): void;
240
+ /** The selected vertices, or null when no vertex is selected */
241
+ getSelectedVertices(): VertexSelection | null;
242
+ /** Sets or clears the selected vertices */
243
+ setSelectedVertices(selection: VertexSelection | null): void;
244
+ /**
245
+ * Gets the vertices that follow along when shared vertices move together (null except
246
+ * during a drag). Unlike the selected vertices they span several features.
247
+ */
248
+ getFollowedVertices(): VertexSelection[] | null;
249
+ /** Sets the vertices that follow along (back to null when the drag ends) */
250
+ setFollowedVertices(selections: VertexSelection[] | null): void;
251
+ /** The current mode */
252
+ getMode(): Mode;
253
+ /** Records the current mode (the mode manager calls it; the host calls `draw.setMode`) */
254
+ setMode(mode: Mode): void;
255
+ /**
256
+ * Read-only. While it is on, every write to the document through the Store is refused
257
+ * (the write methods return false). It does not stop the other local state.
258
+ */
259
+ isReadOnly(): boolean;
260
+ /** Turns read-only on or off */
261
+ setReadOnly(value: boolean): void;
262
+ /**
263
+ * The interaction lock, orthogonal to read-only. It does not gate any write; it only stops
264
+ * the start of the editing interactions that begin from user input (drag move / resize /
265
+ * rotate / vertex editing / the delete shortcut / starting a drawing mode).
266
+ */
267
+ isInteractionLocked(): boolean;
268
+ /** Turns the interaction lock on or off */
269
+ setInteractionLock(value: boolean): void;
270
+ /** Local visibility: the ids (feature / group / layer) hidden on this client only */
271
+ isLocallyHidden(id: string): boolean;
272
+ /** Every ID hidden on this client only */
273
+ getLocallyHidden(): ReadonlySet<string>;
274
+ /** Hides or shows a feature, a group or a layer on this client only */
275
+ setLocallyHidden(id: string, hidden: boolean): void;
276
+ }
277
+ /**
278
+ * The view of the Store a host gets from `draw.getStore()`: reads, subscription and
279
+ * transactions
280
+ *
281
+ * Writes go through the methods of the draw instance (or, in a plugin, the PluginContext),
282
+ * so a host cannot reach past the checks those methods make. `transact` groups the writes
283
+ * made through them into one notification.
284
+ *
285
+ * @example
286
+ * ```ts
287
+ * const store = draw.getStore();
288
+ * const unsubscribe = store.subscribe((changes) => {
289
+ * if (changes.features) saveLater(store.getAllFeatures());
290
+ * });
291
+ * // Two writes, one notification
292
+ * store.transact(() => {
293
+ * draw.updateFeature(a, { visible: false });
294
+ * draw.updateFeature(b, { visible: false });
295
+ * });
296
+ * ```
297
+ */
298
+ export interface StoreView {
299
+ /** Returns the feature with this ID, or undefined */
300
+ getFeature(id: string): Feature | undefined;
301
+ /** Every feature, in no particular order */
302
+ getAllFeatures(): Feature[];
303
+ /** The visible features in drawing order, back to front */
304
+ getOrderedFeatures(): Feature[];
305
+ /** Returns the layer with this ID, or undefined */
306
+ getLayer(id: string): Layer | undefined;
307
+ /** Every layer, in no particular order */
308
+ getAllLayers(): Layer[];
309
+ /** The stacking order of the layers, back to front */
310
+ getLayerOrder(): readonly string[];
311
+ /** Returns the group with this ID, or undefined */
312
+ getGroup(id: string): Group | undefined;
313
+ /** Every group, in no particular order */
314
+ getAllGroups(): Group[];
315
+ /** Returns the file with this ID, or undefined */
316
+ getFile(id: string): FileData | undefined;
317
+ /** Every file */
318
+ getAllFiles(): FileData[];
319
+ /** Returns the metadata of the document */
320
+ getMetadata(): Metadata;
321
+ /** Returns the current selection */
322
+ getSelection(): Selection;
323
+ /** The IDs of the features being edited (their vertex handles are shown) */
324
+ getEditingIds(): readonly string[];
325
+ /** The geometry being drawn, or null when nothing is being drawn */
326
+ getTentative(): TentativeState | null;
327
+ /** The box selection in progress, or null */
328
+ getBoxSelection(): BoxSelection | null;
329
+ /** The drag in progress, or null */
330
+ getDragState(): DragState | null;
331
+ /** The selected vertices, or null when no vertex is selected */
332
+ getSelectedVertices(): VertexSelection | null;
333
+ /**
334
+ * The vertices that follow along when shared vertices move together (null except during a
335
+ * drag)
336
+ */
337
+ getFollowedVertices(): VertexSelection[] | null;
338
+ /** The current mode */
339
+ getMode(): Mode;
340
+ /** Whether the Store is read-only */
341
+ isReadOnly(): boolean;
342
+ /** Whether the interaction lock is on */
343
+ isInteractionLocked(): boolean;
344
+ /** Whether this feature, group or layer is hidden on this client only */
345
+ isLocallyHidden(id: string): boolean;
346
+ /** Every ID hidden on this client only */
347
+ getLocallyHidden(): ReadonlySet<string>;
348
+ /**
349
+ * Subscribes to the changes of the document and of the local state
350
+ *
351
+ * One notification per outermost transaction (or per write outside one). A listener
352
+ * that throws is reported with console.error and does not stop the listeners after it.
353
+ *
354
+ * @returns The unsubscribe function
355
+ */
356
+ subscribe(listener: (changes: StateChanges) => void): () => void;
357
+ /**
358
+ * Runs fn and notifies every change it makes as a single StateChanges
359
+ *
360
+ * Not atomic: when fn throws, the writes made before the throw stay applied, they are
361
+ * notified, and the exception is rethrown.
362
+ *
363
+ * @param source The source carried by the notification ('local' when omitted; the source
364
+ * of the outermost transaction applies)
365
+ */
366
+ transact<T>(fn: () => T, source?: UpdateSource): T;
367
+ }
368
+ /**
369
+ * The Store core works with: the document and the local state behind one gate
370
+ *
371
+ * Every document write returns true when it was applied and false when it was refused
372
+ * because the Store is read-only (it never throws for that). An argument that cannot apply
373
+ * throws, as in DocumentStore. When a feature, group or layer is deleted (by a write here or
374
+ * by a change applied to the document from elsewhere), its id leaves the selection, the
375
+ * features being edited and the locally hidden set in the same notification. A change that
376
+ * hides a selected item (its visible flag, the one of its group or layer, or local hiding)
377
+ * takes it out of the selection, and the vertex selection ends when its feature is deleted
378
+ * or its coordinates change other than by a drag. One notification carries the changes of the
379
+ * document and of the local state of one transaction.
380
+ *
381
+ * A plugin reaches it with `getStore()` of {@link PluginContext}; the host gets the read-only
382
+ * {@link StoreView}. The write methods behave as those of {@link DocumentStore}.
383
+ */
384
+ export interface Store extends StoreView, UiState {
385
+ /** Creates a feature (see {@link DocumentStore.createFeature}) */
386
+ createFeature(feature: Feature): boolean;
387
+ /** Updates a feature (see {@link DocumentStore.updateFeature}) */
388
+ updateFeature(id: string, updates: Partial<Feature>, options?: UpdateFeatureOptions): boolean;
389
+ /** Discards uncommitted intermediate states (see DocumentStore) */
390
+ abortIntermediateUpdates?(ids: string[]): void;
391
+ /** Deletes a feature (see {@link DocumentStore.deleteFeature}) */
392
+ deleteFeature(id: string): boolean;
393
+ /** Creates a layer (see {@link DocumentStore.createLayer}) */
394
+ createLayer(layer: Layer): boolean;
395
+ /** Updates a layer (see {@link DocumentStore.updateLayer}) */
396
+ updateLayer(id: string, updates: Partial<Layer>): boolean;
397
+ /** Deletes a layer with its content (see {@link DocumentStore.deleteLayer}) */
398
+ deleteLayer(id: string): boolean;
399
+ /** Sets the stacking order of the layers (see {@link DocumentStore.setLayerOrder}) */
400
+ setLayerOrder(order: string[]): boolean;
401
+ /** Moves an item within a layer (see {@link DocumentStore.reorderInLayer}) */
402
+ reorderInLayer(itemId: string, layerId: string, newIndex: number): boolean;
403
+ /** Moves a feature within a group (see {@link DocumentStore.reorderInGroup}) */
404
+ reorderInGroup(featureId: string, groupId: string, newIndex: number): boolean;
405
+ /** Creates a group (see {@link DocumentStore.createGroup}) */
406
+ createGroup(group: Group): boolean;
407
+ /** Updates a group (see {@link DocumentStore.updateGroup}) */
408
+ updateGroup(id: string, updates: Partial<Group>): boolean;
409
+ /** Deletes a group, keeping its members (see {@link DocumentStore.deleteGroup}) */
410
+ deleteGroup(id: string): boolean;
411
+ /** Stores a file (see {@link DocumentStore.createFile}) */
412
+ createFile(file: FileData): boolean;
413
+ /** Deletes a file (see {@link DocumentStore.deleteFile}) */
414
+ deleteFile(id: string): boolean;
415
+ /** Sets the metadata, merging (see {@link DocumentStore.setMetadata}) */
416
+ setMetadata(metadata: Partial<Metadata>): boolean;
417
+ }
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The data model of the Store
3
+ *
4
+ * The types are defined in shared/types/model.ts, below every layer, so that shared/ and
5
+ * display/ can use them without depending on store/. This file re-exports them for the code
6
+ * that already imports them from here.
7
+ */
8
+ export type * from '../shared/types/model.js';
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Derivation of the writable layer
3
+ *
4
+ * Determines the layer that user drawing may write new features into. A pure function with
5
+ * the same standing as lock.ts (isFeatureLocked) and local-visibility.ts (isLocallyHidden):
6
+ * it only reads the Store and changes nothing.
7
+ *
8
+ * A layer can be written when it exists, is not locked, is visible (shared visible) and is
9
+ * not locally hidden on this client. Drawing into a locked layer would bypass the lock, and
10
+ * drawing into a hidden layer (shared or local) would create a feature the user cannot see.
11
+ *
12
+ * This is a rule for user drawing only. It is not a write gate: the Store's write methods and
13
+ * the public API still accept any existing layer (read-only is the only write gate).
14
+ */
15
+ import type { LocalHiddenStore } from './local-visibility.js';
16
+ import type { Layer } from './types.js';
17
+ /** The minimal interface that isWritableLayer requires. */
18
+ export type WritableLayerCheckStore = LocalHiddenStore;
19
+ /** The minimal interface that resolveWritableLayerId requires. */
20
+ export interface WritableLayerStore extends WritableLayerCheckStore {
21
+ getLayer(id: string): Layer | undefined;
22
+ getAllLayers(): Layer[];
23
+ }
24
+ /**
25
+ * Whether user drawing may write new features into the layer
26
+ */
27
+ export declare function isWritableLayer(layer: Layer | undefined, store: WritableLayerCheckStore): layer is Layer;
28
+ /**
29
+ * Resolves the layer that user drawing writes new features into
30
+ *
31
+ * The preferred layer (the active layer) when it can be written, otherwise the first layer
32
+ * that can be written, otherwise an empty string. It never changes the active layer, so the
33
+ * active layer comes back once it is unlocked or shown again.
34
+ */
35
+ export declare function resolveWritableLayerId(store: WritableLayerStore, preferredId: string): string;
@@ -0,0 +1,20 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Whether user drawing may write new features into the layer
5
+ */
6
+ export function isWritableLayer(layer, store) {
7
+ return layer !== undefined && !layer.locked && layer.visible && !store.isLocallyHidden(layer.id);
8
+ }
9
+ /**
10
+ * Resolves the layer that user drawing writes new features into
11
+ *
12
+ * The preferred layer (the active layer) when it can be written, otherwise the first layer
13
+ * that can be written, otherwise an empty string. It never changes the active layer, so the
14
+ * active layer comes back once it is unlocked or shown again.
15
+ */
16
+ export function resolveWritableLayerId(store, preferredId) {
17
+ if (isWritableLayer(store.getLayer(preferredId), store))
18
+ return preferredId;
19
+ return store.getAllLayers().find((layer) => isWritableLayer(layer, store))?.id ?? '';
20
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * BufferCache
3
+ *
4
+ * A class for caching and reusing WebGL VAOs and buffers.
5
+ * It improves performance by eliminating per-frame VAO/buffer creation and deletion.
6
+ */
7
+ /**
8
+ * Cached geometry
9
+ */
10
+ export interface CachedGeometry {
11
+ vao: WebGLVertexArrayObject;
12
+ buffer: WebGLBuffer;
13
+ vertexCount: number;
14
+ drawMode: number;
15
+ /** Hash of the geometry (for detecting coordinate changes) */
16
+ geometryHash: string;
17
+ /** Time of last use (for LRU) */
18
+ lastUsed: number;
19
+ }
20
+ /**
21
+ * Generates a hash from an array of coordinates
22
+ * Uses a fast hash function
23
+ */
24
+ export declare function hashCoordinates(coords: Array<[number, number]>): string;
25
+ /**
26
+ * Generates a hash from a two-dimensional array of coordinates (the rings of a Polygon)
27
+ */
28
+ export declare function hashRings(rings: Array<Array<[number, number]>>): string;