@sakuzu/maplibre-gl-draw 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/CHANGELOG.md +1016 -2
  2. package/README.ja.md +39 -19
  3. package/README.md +41 -21
  4. package/dist/api/datasets.d.ts +258 -0
  5. package/dist/api/document.d.ts +66 -0
  6. package/dist/api/draw.d.ts +135 -0
  7. package/dist/api/draw.js +18 -0
  8. package/dist/api/drawing.d.ts +87 -0
  9. package/dist/api/errors.d.ts +35 -0
  10. package/dist/api/errors.js +35 -0
  11. package/dist/api/events.d.ts +306 -0
  12. package/dist/api/extension/context.d.ts +247 -0
  13. package/dist/api/extension/feature-type.d.ts +129 -0
  14. package/dist/api/extension/mode.d.ts +123 -0
  15. package/dist/api/extension/plugin.d.ts +51 -0
  16. package/dist/api/extension/plugin.js +3 -0
  17. package/dist/api/extension/provider.d.ts +119 -0
  18. package/dist/api/extension/provider.js +3 -0
  19. package/dist/api/extension/render.d.ts +176 -0
  20. package/dist/api/extension/render.js +3 -0
  21. package/dist/api/extension/store.d.ts +190 -0
  22. package/dist/api/extension/store.js +3 -0
  23. package/dist/api/extensions.d.ts +306 -0
  24. package/dist/api/extensions.js +3 -0
  25. package/dist/api/features.d.ts +188 -0
  26. package/dist/api/features.js +3 -0
  27. package/dist/api/groups.d.ts +111 -0
  28. package/dist/api/groups.js +3 -0
  29. package/dist/api/hidden.d.ts +45 -0
  30. package/dist/api/hidden.js +3 -0
  31. package/dist/api/impl/adapters.js +463 -0
  32. package/dist/api/impl/contexts.js +466 -0
  33. package/dist/api/impl/create-draw.js +124 -0
  34. package/dist/api/impl/datasets.js +404 -0
  35. package/dist/api/impl/destroy-guard.js +74 -0
  36. package/dist/api/impl/document.js +280 -0
  37. package/dist/api/impl/drawing.js +180 -0
  38. package/dist/api/impl/engine-context.d.ts +7 -0
  39. package/dist/api/{context.js → impl/engine-context.js} +49 -38
  40. package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
  41. package/dist/api/impl/events.js +422 -0
  42. package/dist/api/impl/extension-host.js +361 -0
  43. package/dist/api/impl/extensions.js +229 -0
  44. package/dist/api/impl/features.js +445 -0
  45. package/dist/api/impl/geometry/apply.d.ts +32 -0
  46. package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
  47. package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
  48. package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
  49. package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
  50. package/dist/api/{geometry → impl/geometry}/split.js +10 -21
  51. package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
  52. package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
  53. package/dist/api/impl/geometry/types.js +3 -0
  54. package/dist/api/impl/groups.d.ts +3 -0
  55. package/dist/api/impl/groups.js +268 -0
  56. package/dist/api/impl/hidden.js +60 -0
  57. package/dist/api/impl/import-export/constants.d.ts +22 -0
  58. package/dist/api/impl/import-export/constants.js +24 -0
  59. package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
  60. package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
  61. package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
  62. package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
  63. package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
  64. package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
  65. package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
  66. package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
  67. package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
  68. package/dist/api/impl/import-export/image-import.d.ts +16 -0
  69. package/dist/api/impl/import-export/image-import.js +73 -0
  70. package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
  71. package/dist/api/impl/import-export/legacy-image-style.js +49 -0
  72. package/dist/api/impl/import-export/native-format.d.ts +14 -0
  73. package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
  74. package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
  75. package/dist/api/impl/import-export/native-upgrade.js +139 -0
  76. package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
  77. package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
  78. package/dist/api/impl/import-export/style-validation.d.ts +24 -0
  79. package/dist/api/impl/import-export/style-validation.js +86 -0
  80. package/dist/api/impl/import-export/types.d.ts +52 -0
  81. package/dist/api/impl/import-export/types.js +3 -0
  82. package/dist/api/impl/input.js +180 -0
  83. package/dist/api/impl/layers.js +307 -0
  84. package/dist/api/impl/metadata.d.ts +1 -0
  85. package/dist/api/impl/metadata.js +22 -0
  86. package/dist/api/impl/options.d.ts +1 -0
  87. package/dist/api/impl/options.js +822 -0
  88. package/dist/api/impl/placement.d.ts +1 -0
  89. package/dist/api/impl/placement.js +138 -0
  90. package/dist/api/impl/render-context.d.ts +13 -0
  91. package/dist/api/impl/render-context.js +272 -0
  92. package/dist/api/impl/rows.d.ts +1 -0
  93. package/dist/api/impl/rows.js +46 -0
  94. package/dist/api/impl/selection.d.ts +1 -0
  95. package/dist/api/impl/selection.js +186 -0
  96. package/dist/api/impl/shared.d.ts +64 -0
  97. package/dist/api/impl/shared.js +178 -0
  98. package/dist/api/impl/validate-extension.d.ts +1 -0
  99. package/dist/api/impl/validate-extension.js +159 -0
  100. package/dist/api/layers.d.ts +130 -0
  101. package/dist/api/layers.js +3 -0
  102. package/dist/api/metadata.d.ts +18 -0
  103. package/dist/api/metadata.js +3 -0
  104. package/dist/api/model.d.ts +487 -0
  105. package/dist/api/model.js +47 -0
  106. package/dist/api/options.d.ts +466 -0
  107. package/dist/api/options.js +3 -0
  108. package/dist/api/selection.d.ts +94 -0
  109. package/dist/api/selection.js +3 -0
  110. package/dist/api/state.d.ts +155 -0
  111. package/dist/api/state.js +12 -0
  112. package/dist/{display → dataset}/chunk.d.ts +1 -1
  113. package/dist/{display → dataset}/chunk.js +4 -3
  114. package/dist/{display → dataset}/dataset.js +18 -21
  115. package/dist/dataset/interaction.d.ts +1 -0
  116. package/dist/{display → dataset}/interaction.js +18 -6
  117. package/dist/dataset/manager.d.ts +1 -0
  118. package/dist/dataset/provider.d.ts +1 -0
  119. package/dist/{display → dataset}/retained.d.ts +1 -1
  120. package/dist/{display → dataset}/retained.js +8 -7
  121. package/dist/dataset/source.d.ts +1 -0
  122. package/dist/{display → dataset}/source.js +17 -4
  123. package/dist/dataset/spatial.d.ts +1 -0
  124. package/dist/{display → dataset}/spatial.js +1 -1
  125. package/dist/dataset/style.d.ts +1 -0
  126. package/dist/{display → dataset}/style.js +1 -1
  127. package/dist/dataset/table-source.d.ts +1 -0
  128. package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
  129. package/dist/{display → dataset}/thinning.d.ts +0 -10
  130. package/dist/{display → dataset}/thinning.js +3 -2
  131. package/dist/dataset/triangulation.d.ts +1 -0
  132. package/dist/{display → dataset}/triangulation.js +0 -0
  133. package/dist/{display → dataset}/types.d.ts +82 -121
  134. package/dist/dataset/types.js +61 -0
  135. package/dist/dispatcher/hit-test/box-strategies.js +13 -13
  136. package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
  137. package/dist/dispatcher/hit-test/globe-shape.js +5 -4
  138. package/dist/dispatcher/hit-test/service.d.ts +17 -0
  139. package/dist/dispatcher/hit-test/service.js +80 -16
  140. package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
  141. package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
  142. package/dist/dispatcher/hit-test/strategies/image.js +6 -18
  143. package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
  144. package/dist/dispatcher/hit-test/strategies/line.js +9 -2
  145. package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
  146. package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
  147. package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
  148. package/dist/dispatcher/hit-test/strategies/point.js +8 -4
  149. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
  150. package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
  151. package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
  152. package/dist/dispatcher/input-router.js +152 -69
  153. package/dist/dispatcher/normalizer.js +6 -2
  154. package/dist/dispatcher/types.d.ts +6 -1
  155. package/dist/extension/feature-handler.d.ts +1 -182
  156. package/dist/extension/index.d.ts +4 -7
  157. package/dist/extension/renderers.d.ts +1 -208
  158. package/dist/geometry/angle.d.ts +0 -8
  159. package/dist/geometry/angle.js +0 -8
  160. package/dist/geometry/bbox.d.ts +4 -12
  161. package/dist/geometry/bbox.js +4 -12
  162. package/dist/geometry/boolean.d.ts +0 -51
  163. package/dist/geometry/boolean.js +0 -51
  164. package/dist/geometry/buffer.d.ts +0 -26
  165. package/dist/geometry/buffer.js +0 -26
  166. package/dist/geometry/circle.d.ts +0 -9
  167. package/dist/geometry/circle.js +0 -9
  168. package/dist/geometry/coords.d.ts +0 -16
  169. package/dist/geometry/coords.js +0 -16
  170. package/dist/geometry/distance.d.ts +0 -24
  171. package/dist/geometry/distance.js +0 -24
  172. package/dist/geometry/errors.d.ts +21 -36
  173. package/dist/geometry/errors.js +49 -29
  174. package/dist/geometry/geojson.d.ts +81 -0
  175. package/dist/geometry/geojson.js +164 -0
  176. package/dist/geometry/index.d.ts +38 -23
  177. package/dist/geometry/index.js +43 -31
  178. package/dist/geometry/measure.d.ts +0 -27
  179. package/dist/geometry/measure.js +0 -27
  180. package/dist/geometry/predicates.d.ts +0 -9
  181. package/dist/geometry/predicates.js +0 -9
  182. package/dist/geometry/public-bounds.d.ts +26 -0
  183. package/dist/geometry/public-bounds.js +30 -0
  184. package/dist/geometry/public-combine.d.ts +78 -0
  185. package/dist/geometry/public-combine.js +82 -0
  186. package/dist/geometry/public-create.d.ts +54 -0
  187. package/dist/geometry/public-create.js +70 -0
  188. package/dist/geometry/public-measure.d.ts +170 -0
  189. package/dist/geometry/public-measure.js +283 -0
  190. package/dist/geometry/public-predicates.d.ts +54 -0
  191. package/dist/geometry/public-predicates.js +144 -0
  192. package/dist/geometry/public-repair.d.ts +75 -0
  193. package/dist/geometry/public-repair.js +77 -0
  194. package/dist/geometry/simplify.d.ts +0 -7
  195. package/dist/geometry/simplify.js +0 -7
  196. package/dist/geometry/split.d.ts +0 -20
  197. package/dist/geometry/split.js +0 -20
  198. package/dist/geometry/units.d.ts +20 -12
  199. package/dist/geometry/units.js +20 -12
  200. package/dist/index.d.ts +52 -66
  201. package/dist/index.js +6 -18
  202. package/dist/messages.d.ts +7 -7
  203. package/dist/modes/draw/circle.js +83 -207
  204. package/dist/modes/draw/commit-layer.d.ts +5 -16
  205. package/dist/modes/draw/commit-layer.js +2 -13
  206. package/dist/modes/draw/freehand.js +108 -246
  207. package/dist/modes/draw/image.js +4 -2
  208. package/dist/modes/draw/index.d.ts +5 -5
  209. package/dist/modes/draw/index.js +5 -5
  210. package/dist/modes/draw/line.js +18 -354
  211. package/dist/modes/draw/point.js +29 -78
  212. package/dist/modes/draw/polygon.js +23 -368
  213. package/dist/modes/draw/trace-support.d.ts +43 -36
  214. package/dist/modes/draw/trace-support.js +95 -98
  215. package/dist/modes/draw/vertex-drawing.d.ts +1 -0
  216. package/dist/modes/draw/vertex-drawing.js +176 -0
  217. package/dist/modes/handler.d.ts +1 -285
  218. package/dist/modes/manager.d.ts +2 -2
  219. package/dist/modes/manager.js +3 -0
  220. package/dist/modes/select/box-selection.d.ts +3 -3
  221. package/dist/modes/select/box-selection.js +2 -1
  222. package/dist/modes/select/click-handler.d.ts +5 -5
  223. package/dist/modes/select/click-handler.js +22 -20
  224. package/dist/modes/select/cursor-handler.d.ts +2 -2
  225. package/dist/modes/select/drag/intermediate-writes.js +1 -1
  226. package/dist/modes/select/drag/move.js +3 -3
  227. package/dist/modes/select/drag/operation.d.ts +3 -3
  228. package/dist/modes/select/drag/radius.js +5 -4
  229. package/dist/modes/select/drag/transform.d.ts +2 -2
  230. package/dist/modes/select/drag/transform.js +11 -5
  231. package/dist/modes/select/drag/vertex.d.ts +2 -2
  232. package/dist/modes/select/drag/vertex.js +13 -8
  233. package/dist/modes/select/drag-handler.js +44 -25
  234. package/dist/modes/select/mode.js +17 -17
  235. package/dist/modes/select/shortcut-handler.d.ts +8 -8
  236. package/dist/modes/select/shortcut-handler.js +9 -7
  237. package/dist/operations/layer-operations.js +29 -168
  238. package/dist/operations/resize.d.ts +2 -2
  239. package/dist/operations/resize.js +5 -5
  240. package/dist/operations/rotate.js +5 -5
  241. package/dist/operations/selection-operations.d.ts +16 -1
  242. package/dist/operations/selection-operations.js +28 -13
  243. package/dist/operations/shared-vertex.js +4 -2
  244. package/dist/operations/trace-graph.d.ts +0 -18
  245. package/dist/operations/trace-graph.js +0 -18
  246. package/dist/operations/vertex.js +36 -35
  247. package/dist/shared/color.d.ts +1 -0
  248. package/dist/shared/color.js +245 -0
  249. package/dist/shared/config/constants.d.ts +1 -54
  250. package/dist/shared/config/constants.js +1 -58
  251. package/dist/shared/config/feature-style.d.ts +16 -13
  252. package/dist/shared/config/feature-style.js +9 -0
  253. package/dist/shared/config/rendering.d.ts +3 -3
  254. package/dist/shared/config/selection-highlight.d.ts +0 -15
  255. package/dist/shared/config/selection-highlight.js +4 -7
  256. package/dist/shared/config/selection.d.ts +2 -32
  257. package/dist/shared/config/selection.js +0 -18
  258. package/dist/shared/config/topology.d.ts +2 -2
  259. package/dist/shared/config/trace.d.ts +4 -4
  260. package/dist/shared/math/angle.d.ts +1 -1
  261. package/dist/shared/math/angle.js +1 -1
  262. package/dist/shared/math/circle.d.ts +1 -1
  263. package/dist/shared/math/circle.js +1 -1
  264. package/dist/shared/math/distance.d.ts +2 -1
  265. package/dist/shared/math/distance.js +3 -2
  266. package/dist/shared/math/index.d.ts +1 -1
  267. package/dist/shared/math/index.js +1 -1
  268. package/dist/shared/math/transform.d.ts +23 -0
  269. package/dist/shared/math/transform.js +47 -28
  270. package/dist/shared/properties.d.ts +18 -0
  271. package/dist/shared/properties.js +129 -0
  272. package/dist/shared/types/events.d.ts +15 -7
  273. package/dist/shared/types/model.d.ts +109 -159
  274. package/dist/shared/types/style.d.ts +1 -1
  275. package/dist/shared/utils/color.d.ts +2 -36
  276. package/dist/shared/utils/color.js +13 -70
  277. package/dist/shared/utils/coordinates.d.ts +30 -4
  278. package/dist/shared/utils/coordinates.js +56 -10
  279. package/dist/shared/utils/event-emitter.d.ts +1 -262
  280. package/dist/shared/utils/event-emitter.js +4 -3
  281. package/dist/shared/utils/feature-bbox.js +8 -7
  282. package/dist/shared/utils/feature-segments.js +5 -4
  283. package/dist/shared/utils/image.d.ts +0 -4
  284. package/dist/shared/utils/image.js +0 -6
  285. package/dist/shared/utils/name-generator.d.ts +14 -20
  286. package/dist/shared/utils/name-generator.js +20 -3
  287. package/dist/shared/utils/pixel-ratio.d.ts +9 -3
  288. package/dist/shared/utils/pixel-ratio.js +13 -4
  289. package/dist/shared/utils/property.d.ts +7 -50
  290. package/dist/shared/utils/property.js +22 -87
  291. package/dist/snapping/custom-targets.js +21 -4
  292. package/dist/snapping/indicator.js +20 -11
  293. package/dist/snapping/providers/display.d.ts +6 -1
  294. package/dist/snapping/providers/display.js +2 -1
  295. package/dist/snapping/providers/guide.d.ts +3 -43
  296. package/dist/snapping/providers/guide.js +1 -44
  297. package/dist/snapping/providers/intersection.js +1 -1
  298. package/dist/snapping/providers/store.js +3 -3
  299. package/dist/snapping/service.js +18 -7
  300. package/dist/snapping/types.d.ts +9 -35
  301. package/dist/store/draw-store.js +233 -142
  302. package/dist/store/local-visibility.d.ts +11 -6
  303. package/dist/store/local-visibility.js +38 -7
  304. package/dist/store/lock.d.ts +0 -6
  305. package/dist/store/lock.js +0 -6
  306. package/dist/store/memory/change-bus.d.ts +3 -3
  307. package/dist/store/memory/change-bus.js +12 -0
  308. package/dist/store/memory/file-store.d.ts +2 -2
  309. package/dist/store/memory/ui-state.d.ts +1 -51
  310. package/dist/store/memory/ui-state.js +122 -134
  311. package/dist/store/memory.d.ts +1 -8
  312. package/dist/store/memory.js +249 -45
  313. package/dist/store/ordering.d.ts +9 -0
  314. package/dist/store/ordering.js +17 -0
  315. package/dist/store/spatial/spatial-index.d.ts +1 -1
  316. package/dist/store/spatial/spatial-index.js +1 -1
  317. package/dist/store/spatial/store-spatial-index.d.ts +3 -1
  318. package/dist/store/spatial/store-spatial-index.js +9 -3
  319. package/dist/store/store.d.ts +66 -107
  320. package/dist/store/types.d.ts +1 -1
  321. package/dist/store/writable-layer.d.ts +1 -1
  322. package/dist/store/writable-layer.js +2 -2
  323. package/dist/table/builder.d.ts +83 -0
  324. package/dist/table/builder.js +381 -0
  325. package/dist/table/index.d.ts +37 -0
  326. package/dist/table/index.js +5 -0
  327. package/dist/table/packed-rtree.d.ts +1 -0
  328. package/dist/{display → table}/packed-rtree.js +1 -1
  329. package/dist/table/partition.d.ts +1 -0
  330. package/dist/{display → table}/partition.js +3 -3
  331. package/dist/table/prepare.d.ts +44 -0
  332. package/dist/table/prepare.js +136 -0
  333. package/dist/table/table.d.ts +1 -0
  334. package/dist/{display/columnar → table}/table.js +29 -25
  335. package/dist/{display/columnar → table}/types.d.ts +68 -72
  336. package/dist/table/types.js +3 -0
  337. package/dist/view/coordinator.js +4 -3
  338. package/dist/view/feature-companion.d.ts +13 -7
  339. package/dist/view/feature-companion.js +11 -3
  340. package/dist/view/globe-subdivision.js +3 -3
  341. package/dist/view/layer/attach.d.ts +1 -1
  342. package/dist/view/layer/attach.js +1 -1
  343. package/dist/view/layer/custom-layer.js +40 -11
  344. package/dist/view/layer/display-list.js +2 -1
  345. package/dist/view/layer/drape-planner.d.ts +2 -2
  346. package/dist/view/layer/frame-render.d.ts +3 -3
  347. package/dist/view/layer/frame-render.js +7 -2
  348. package/dist/view/layer/frame-state.d.ts +6 -6
  349. package/dist/view/layer/index.d.ts +2 -2
  350. package/dist/view/layer/index.js +1 -1
  351. package/dist/view/layer/render.d.ts +4 -4
  352. package/dist/view/layer/render.js +3 -8
  353. package/dist/view/layer/renderers.d.ts +2 -2
  354. package/dist/view/layer/renderers.js +1 -1
  355. package/dist/view/layer/slot-manager.d.ts +2 -2
  356. package/dist/view/layer/slot-manager.js +4 -4
  357. package/dist/view/layer/slots.d.ts +2 -2
  358. package/dist/view/layer/slots.js +1 -1
  359. package/dist/view/layer/store-retained-bbox.js +3 -2
  360. package/dist/view/layer/store-retained-classify.d.ts +5 -7
  361. package/dist/view/layer/store-retained-classify.js +19 -7
  362. package/dist/view/layer/store-retained-collect.js +8 -7
  363. package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
  364. package/dist/view/layer/store-retained-coord-patch.js +13 -4
  365. package/dist/view/layer/store-retained-immediate.d.ts +3 -3
  366. package/dist/view/layer/store-retained-immediate.js +3 -8
  367. package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
  368. package/dist/view/layer/store-retained.d.ts +2 -2
  369. package/dist/view/layer/store-retained.js +1 -1
  370. package/dist/view/renderers/batch-manager.js +8 -7
  371. package/dist/view/renderers/drawer.js +21 -15
  372. package/dist/view/renderers/image.js +13 -39
  373. package/dist/view/renderers/line/line-types.d.ts +3 -3
  374. package/dist/view/renderers/line/sdf-line.js +3 -1
  375. package/dist/view/renderers/point/billboard-depth.js +1 -1
  376. package/dist/view/renderers/point/point-instance.js +1 -1
  377. package/dist/view/renderers/point/point-shape.js +2 -2
  378. package/dist/view/renderers/point/point-style.js +48 -4
  379. package/dist/view/renderers/polygon/batch.js +1 -2
  380. package/dist/view/renderers/polygon/fill.js +3 -1
  381. package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
  382. package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
  383. package/dist/view/renderers/stroke.js +3 -1
  384. package/dist/view/shaders/helpers.d.ts +2 -42
  385. package/dist/view/shaders/helpers.js +0 -6
  386. package/dist/view/shaders/projection.d.ts +15 -7
  387. package/dist/view/shaders/projection.js +23 -6
  388. package/dist/view/shaders/quad.d.ts +16 -12
  389. package/dist/view/shaders/quad.js +34 -13
  390. package/dist/view/style-rule.d.ts +5 -42
  391. package/dist/view/style-rule.js +20 -44
  392. package/dist/view/terrain/binding.d.ts +1 -0
  393. package/dist/view/terrain/binding.js +29 -0
  394. package/dist/view/terrain/context.d.ts +3 -4
  395. package/dist/view/terrain/context.js +4 -5
  396. package/dist/view/terrain/drape/geometry.js +1 -1
  397. package/dist/view/terrain/drape/pass.d.ts +1 -1
  398. package/dist/view/terrain/drape/pass.js +8 -7
  399. package/dist/view/terrain/polygon.d.ts +9 -5
  400. package/dist/view/terrain/polygon.js +16 -2
  401. package/dist/view/terrain/state.d.ts +1 -1
  402. package/dist/view/terrain/state.js +1 -1
  403. package/dist/view/terrain/tessellation.d.ts +2 -2
  404. package/dist/view/terrain/tessellation.js +1 -1
  405. package/dist/view/ui/auxiliary-handles.d.ts +6 -29
  406. package/dist/view/ui/bounds.js +8 -12
  407. package/dist/view/ui/handle-test.js +2 -2
  408. package/dist/view/ui/handle-thinning.js +17 -17
  409. package/dist/view/ui/handles.js +21 -13
  410. package/dist/view/ui/helper.d.ts +1 -1
  411. package/dist/view/ui/helper.js +1 -1
  412. package/dist/view/ui/index.d.ts +1 -1
  413. package/dist/view/ui/selection-scope.js +4 -2
  414. package/dist/view/ui/selection-ui/bounding-box.js +6 -6
  415. package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
  416. package/dist/view/ui/selection-ui/extension-registry.js +70 -7
  417. package/dist/view/ui/selection-ui/index.d.ts +2 -2
  418. package/dist/view/ui/selection-ui/index.js +1 -1
  419. package/dist/view/ui/selection-ui/renderer.js +15 -38
  420. package/dist/view/ui/selection-ui/types.d.ts +17 -2
  421. package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
  422. package/dist/view/ui/selection-ui-drawer.js +63 -2
  423. package/dist/view/ui/tentative.js +1 -1
  424. package/dist/webgl/index.d.ts +65 -0
  425. package/dist/webgl/index.js +62 -0
  426. package/package.json +20 -9
  427. package/dist/api/api.d.ts +0 -1259
  428. package/dist/api/api.js +0 -86
  429. package/dist/api/context.d.ts +0 -173
  430. package/dist/api/display-api.js +0 -23
  431. package/dist/api/event-api.d.ts +0 -13
  432. package/dist/api/event-api.js +0 -17
  433. package/dist/api/extension-api.d.ts +0 -46
  434. package/dist/api/extension-api.js +0 -85
  435. package/dist/api/feature-api.d.ts +0 -11
  436. package/dist/api/feature-api.js +0 -101
  437. package/dist/api/geometry/apply.d.ts +0 -51
  438. package/dist/api/geometry/boolean.d.ts +0 -28
  439. package/dist/api/geometry/boolean.js +0 -65
  440. package/dist/api/geometry/types.d.ts +0 -31
  441. package/dist/api/geometry-operations.d.ts +0 -162
  442. package/dist/api/geometry-operations.js +0 -94
  443. package/dist/api/group-api.d.ts +0 -10
  444. package/dist/api/group-api.js +0 -78
  445. package/dist/api/import-export/constants.d.ts +0 -29
  446. package/dist/api/import-export/constants.js +0 -40
  447. package/dist/api/import-export/file-name.d.ts +0 -10
  448. package/dist/api/import-export/file-name.js +0 -20
  449. package/dist/api/import-export/geojson-export.d.ts +0 -19
  450. package/dist/api/import-export/image-import.d.ts +0 -12
  451. package/dist/api/import-export/image-import.js +0 -53
  452. package/dist/api/import-export/index.d.ts +0 -9
  453. package/dist/api/import-export/index.js +0 -107
  454. package/dist/api/import-export/native-format.d.ts +0 -15
  455. package/dist/api/import-export/style-validation.d.ts +0 -27
  456. package/dist/api/import-export/style-validation.js +0 -49
  457. package/dist/api/import-export/types.d.ts +0 -26
  458. package/dist/api/index.d.ts +0 -15
  459. package/dist/api/index.js +0 -3
  460. package/dist/api/input-api.d.ts +0 -158
  461. package/dist/api/input-api.js +0 -144
  462. package/dist/api/instance-api.d.ts +0 -38
  463. package/dist/api/instance-api.js +0 -136
  464. package/dist/api/layer-api.d.ts +0 -12
  465. package/dist/api/layer-api.js +0 -62
  466. package/dist/api/selection-api.d.ts +0 -7
  467. package/dist/api/selection-api.js +0 -78
  468. package/dist/api/snapping-api.d.ts +0 -125
  469. package/dist/api/snapping-api.js +0 -50
  470. package/dist/api/topology-api.d.ts +0 -30
  471. package/dist/api/topology-api.js +0 -16
  472. package/dist/api/tracing-api.d.ts +0 -31
  473. package/dist/api/tracing-api.js +0 -16
  474. package/dist/dispatcher/hit-test/index.d.ts +0 -14
  475. package/dist/dispatcher/hit-test/index.js +0 -9
  476. package/dist/dispatcher/index.d.ts +0 -15
  477. package/dist/dispatcher/index.js +0 -3
  478. package/dist/display/columnar/index.d.ts +0 -12
  479. package/dist/display/columnar/index.js +0 -13
  480. package/dist/display/columnar/prepare.d.ts +0 -42
  481. package/dist/display/columnar/prepare.js +0 -116
  482. package/dist/display/index.d.ts +0 -13
  483. package/dist/display/types.js +0 -43
  484. package/dist/maplibre-gl-draw.d.ts +0 -47
  485. package/dist/modes/cursor.js +0 -72
  486. package/dist/modes/index.d.ts +0 -7
  487. package/dist/operations/index.d.ts +0 -9
  488. package/dist/operations/index.js +0 -3
  489. package/dist/plugins/index.d.ts +0 -10
  490. package/dist/plugins/mutation-hooks.d.ts +0 -28
  491. package/dist/plugins/mutation-hooks.js +0 -84
  492. package/dist/plugins/plugin-context.js +0 -367
  493. package/dist/plugins/plugin-manager.d.ts +0 -103
  494. package/dist/plugins/plugin-manager.js +0 -316
  495. package/dist/plugins/plugin.d.ts +0 -529
  496. package/dist/shared/config/index.d.ts +0 -17
  497. package/dist/shared/config/index.js +0 -8
  498. package/dist/shared/utils/index.d.ts +0 -15
  499. package/dist/shared/utils/index.js +0 -24
  500. package/dist/snapping/index.d.ts +0 -14
  501. package/dist/snapping/index.js +0 -4
  502. package/dist/store/change-merger.js +0 -102
  503. package/dist/store/event-bridge.js +0 -161
  504. package/dist/store/index.d.ts +0 -12
  505. package/dist/store/index.js +0 -4
  506. package/dist/view/index.d.ts +0 -47
  507. package/dist/view/index.js +0 -20
  508. /package/dist/api/{geometry/types.js → datasets.js} +0 -0
  509. /package/dist/api/{import-export/types.js → document.js} +0 -0
  510. /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
  511. /package/dist/{display/index.js → api/events.js} +0 -0
  512. /package/dist/{modes/index.js → api/extension/context.js} +0 -0
  513. /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
  514. /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
  515. /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
  516. /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
  517. /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
  518. /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
  519. /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
  520. /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
  521. /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
  522. /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
  523. /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
  524. /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
  525. /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
  526. /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
  527. /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
  528. /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
  529. /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
  530. /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
  531. /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
  532. /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
  533. /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
  534. /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
  535. /package/dist/{display → dataset}/chunk-set.js +0 -0
  536. /package/dist/{display → dataset}/dataset.d.ts +0 -0
  537. /package/dist/{display → dataset}/manager.js +0 -0
  538. /package/dist/{display → dataset}/provider.js +0 -0
  539. /package/dist/{display → dataset}/selection.d.ts +0 -0
  540. /package/dist/{display → dataset}/selection.js +0 -0
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Drawing: the renderers of custom feature types and overlays, the values they draw with,
3
+ * and the shared renderers they can draw through
4
+ */
5
+ import type { Position } from 'geojson';
6
+ import type { Map as MaplibreMap, ProjectionData } from 'maplibre-gl';
7
+ import type { Feature, LineStyle, PointShape } from '../model.js';
8
+ import type { TerrainAnchors } from './context.js';
9
+ /**
10
+ * The shader prelude the map passes to a custom layer, for compiling programs for the current
11
+ * projection.
12
+ */
13
+ export interface ShaderData {
14
+ /** The GLSL the map prepends to a vertex shader (its projection functions) */
15
+ vertexShaderPrelude: string;
16
+ /** The `#define` lines of the current projection */
17
+ define: string;
18
+ /** The name of the projection variant; a program is compiled again when it changes */
19
+ variantName: string;
20
+ }
21
+ /**
22
+ * The values for drawing positions relative to the center of the view, which keeps the
23
+ * precision of 32-bit floats near the camera.
24
+ */
25
+ export interface OffsetUniforms {
26
+ /** The center, rounded to 32-bit floats for the shader */
27
+ centerLngLat: [number, number];
28
+ /** The center at 64-bit precision, for the offsets computed on the CPU */
29
+ centerLngLat64: [number, number];
30
+ /** The Mercator coordinates of the center, at 64-bit precision */
31
+ centerMercator: [number, number];
32
+ /** The center of the view in clip space, at 64-bit precision */
33
+ projectionCenter: [number, number, number, number];
34
+ /** The Mercator units per degree of longitude and latitude at the center */
35
+ unitsPerDegree: [number, number, number];
36
+ /** The second-order correction of `unitsPerDegree` for the change with latitude */
37
+ unitsPerDegree2: [number, number, number];
38
+ }
39
+ /**
40
+ * The shared renderer of lines. It only draws; the zoom, the projection and the terrain come
41
+ * from the {@link RenderContext} it was taken from.
42
+ */
43
+ export interface LineRenderer {
44
+ /**
45
+ * Draws a line.
46
+ *
47
+ * @param coordinates - The positions of the line
48
+ * @param style - The width in pixels, the CSS color, the opacity from 0 to 1, the dash
49
+ * pattern, and a custom `[dash, gap]` in pixels
50
+ * @param options - `closed` joins the last position to the first; `widthUnit` says whether
51
+ * the width is in pixels or meters; `createdZoom` is the zoom at which the width applies,
52
+ * so that the line grows and shrinks with the zoom
53
+ */
54
+ draw(coordinates: readonly Position[], style: {
55
+ width: number;
56
+ color: string;
57
+ opacity: number;
58
+ lineStyle: LineStyle;
59
+ dashArray?: number[];
60
+ }, options?: {
61
+ closed?: boolean;
62
+ widthUnit?: 'pixels' | 'meters';
63
+ createdZoom?: number;
64
+ }): void;
65
+ }
66
+ /**
67
+ * The shared renderer of areas. It only draws; the zoom, the projection and the terrain come
68
+ * from the {@link RenderContext} it was taken from.
69
+ */
70
+ export interface FillRenderer {
71
+ /**
72
+ * Fills an area.
73
+ *
74
+ * @param rings - The outer ring first, then the holes
75
+ * @param style - The CSS color and the opacity from 0 to 1
76
+ */
77
+ draw(rings: readonly (readonly Position[])[], style: {
78
+ color: string;
79
+ opacity: number;
80
+ }): void;
81
+ }
82
+ /**
83
+ * The shared renderer of point markers. It only draws; the zoom, the projection and the
84
+ * terrain come from the {@link RenderContext} it was taken from.
85
+ */
86
+ export interface PointRenderer {
87
+ /**
88
+ * Draws a point marker.
89
+ *
90
+ * @param position - The position
91
+ * @param style - The shape, the size in pixels, the fill and the outline (CSS colors,
92
+ * opacities from 0 to 1, the outline width in pixels)
93
+ * @param options - `elevationMeters` places the marker at this height instead of on the
94
+ * ground
95
+ */
96
+ draw(position: Position, style: {
97
+ shape: PointShape;
98
+ size: number;
99
+ fillColor: string;
100
+ fillOpacity: number;
101
+ strokeColor: string;
102
+ strokeWidth: number;
103
+ strokeOpacity: number;
104
+ }, options?: {
105
+ elevationMeters?: number;
106
+ }): void;
107
+ }
108
+ /**
109
+ * Everything a renderer needs to draw a frame. The offsets are already computed.
110
+ */
111
+ export interface RenderContext {
112
+ /** The WebGL context of the map */
113
+ readonly gl: WebGL2RenderingContext;
114
+ /** The shader prelude of the current projection */
115
+ readonly shader: ShaderData;
116
+ /** The values for drawing relative to the center of the view */
117
+ readonly offset: OffsetUniforms;
118
+ /** The projection of the frame, as the map passes it to a custom layer */
119
+ readonly projection: ProjectionData;
120
+ /** The zoom of the frame */
121
+ readonly zoom: number;
122
+ /** The pixel ratio of the drawing */
123
+ readonly pixelRatio: number;
124
+ /** The opacity of the layer being drawn, from 0 to 1 */
125
+ readonly opacity: number;
126
+ /**
127
+ * The positions and the heights on the terrain. The building blocks of the `/webgl` entry
128
+ * that draw on the terrain take it, or the whole render context.
129
+ */
130
+ readonly terrain: TerrainAnchors;
131
+ /** The shared renderer of lines */
132
+ readonly line: LineRenderer;
133
+ /** The shared renderer of areas */
134
+ readonly fill: FillRenderer;
135
+ /** The shared renderer of point markers */
136
+ readonly point: PointRenderer;
137
+ }
138
+ /**
139
+ * How the features of a custom type are drawn. The methods take their arguments in the order
140
+ * of a custom layer of the map.
141
+ */
142
+ export interface FeatureRenderer {
143
+ /** Called when the renderer is added to the map; create the programs and buffers here. */
144
+ onAdd(map: MaplibreMap, gl: WebGL2RenderingContext): void;
145
+ /** Draws one feature. */
146
+ draw(feature: Feature, ctx: RenderContext): void;
147
+ /** Called when the renderer is removed; release what `onAdd` created. */
148
+ onRemove(map: MaplibreMap, gl: WebGL2RenderingContext): void;
149
+ }
150
+ /**
151
+ * A renderer that draws above the features, or between the layers.
152
+ */
153
+ export interface OverlayRenderer {
154
+ /** The name it is registered under */
155
+ readonly name: string;
156
+ /**
157
+ * The order among the overlays: a lower one is drawn first, below a higher one. Overlays of
158
+ * the same order are drawn in the order they were added; 0 when it is left out.
159
+ */
160
+ readonly order?: number;
161
+ /** Called when the renderer is added to the map; create the programs and buffers here. */
162
+ onAdd(map: MaplibreMap, gl: WebGL2RenderingContext): void;
163
+ /** Draws above every layer. */
164
+ draw(ctx: RenderContext): void;
165
+ /** Draws just above one layer, for an overlay drawn between the layers. */
166
+ drawForLayer?(layerId: string, ctx: RenderContext): void;
167
+ /**
168
+ * Draws the vertices of what the overlay shows, above the features of every layer and the
169
+ * selection, so that they stay visible over a layer further back.
170
+ */
171
+ drawVertices?(ctx: RenderContext): void;
172
+ /** Whether some of its drawing has not finished yet. */
173
+ hasPendingWork?(): boolean;
174
+ /** Called when the renderer is removed; release what `onAdd` created. */
175
+ onRemove(map: MaplibreMap, gl: WebGL2RenderingContext): void;
176
+ }
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
@@ -0,0 +1,190 @@
1
+ /**
2
+ * The Store: where the document and the state of this client are kept
3
+ *
4
+ * The built-in Store keeps them in memory. An application replaces it through the `store`
5
+ * option of `createDraw`, for example to keep the document somewhere shared.
6
+ */
7
+ import type { DocumentChange } from '../events.js';
8
+ import type { Feature, FileData, Group, Layer, Metadata } from '../model.js';
9
+ import type { Mode, Selection, SelectionType, VertexSelection } from '../state.js';
10
+ /**
11
+ * Where a write came from, as it arrives in {@link DocumentChange.source} and in the `source` of
12
+ * the events.
13
+ *
14
+ * - `local`: an operation of the user or a call of the API (the default)
15
+ * - `silent`: a change that a subscriber recording changes leaves out, such as the selection a
16
+ * drawing mode clears as it is entered
17
+ * - `load`: a load of any format (`document.load`, `document.loadMany`), with the replacement
18
+ * of `mode: 'replace'`, in one transaction
19
+ * - `batch`: a bulk change of an application or an extension recorded as one step; the
20
+ * library does not write it
21
+ * - `remote`: a change a replaced Store applies from outside the instance
22
+ * - `import`: data an application or an extension loads by its own means
23
+ *
24
+ * Any other string can be used by an extension or a Store for the changes it applies itself.
25
+ */
26
+ export type UpdateSource = 'local' | 'silent' | 'load' | 'batch' | 'remote' | 'import' | (string & Record<never, never>);
27
+ /**
28
+ * The read side of the Store: the document, the state of this client, and the subscription
29
+ * to their changes.
30
+ *
31
+ * What it returns and notifies keeps these rules:
32
+ *
33
+ * - Returned objects are never changed afterwards. Callers treat what a getter returns or a
34
+ * notification carries as read-only, and the Store never changes such an object: a change
35
+ * stores a new object.
36
+ * - The stacking order (`getLayerOrder()`) is part of the document. It may hold entries that
37
+ * are not layers (a dataset with `order: 'layer-order'`, a separator of the application),
38
+ * and its entries are distinct non-empty strings.
39
+ * - One notification per outermost transaction: `subscribe` delivers one `DocumentChange`
40
+ * per outermost `transact` (or per write outside one), with its `source`. The transactions
41
+ * inside another fold into the outermost one.
42
+ * - A replacement of the whole document is one `DocumentChange`. A load that replaces the
43
+ * document in one `transact` arrives as one change; a document the Store takes from
44
+ * elsewhere in one step arrives as one change with `reset: true`, which lists what was
45
+ * replaced.
46
+ * - A write of the selection, the editing or the mode is notified with its category; a write
47
+ * of the vertex selection, read-only, the interaction lock or the hidden items may be
48
+ * notified with no category.
49
+ * - A change applied from outside the instance is notified like a local one, with the source
50
+ * `'remote'`. The instance follows it: a deleted item leaves the selection, the editing and
51
+ * the hidden items through the writes of {@link Store}.
52
+ * - An optional field (`Feature.groupId`, `Layer.metadata`, `Layer.styleRule`) may be given as
53
+ * `null`: null is accepted and read as `undefined`, so the instance and its API always hand
54
+ * out `undefined` for it.
55
+ * - The state of this client (the selection, the editing, the selected vertices, the mode,
56
+ * read-only, the interaction lock and the hidden items) is not part of the document: it is
57
+ * not saved, and a change from outside the instance does not carry it.
58
+ */
59
+ export interface StoreView {
60
+ /** A feature by ID, or `undefined` */
61
+ getFeature(id: string): Feature | undefined;
62
+ /** Every feature, in no particular order */
63
+ listFeatures(): Feature[];
64
+ /** Every feature in stacking order, from the back */
65
+ listFeaturesInOrder(): Feature[];
66
+ /** A layer by ID, or `undefined` */
67
+ getLayer(id: string): Layer | undefined;
68
+ /** Every layer, in no particular order */
69
+ listLayers(): Layer[];
70
+ /** The stacking order, from the back: the layers and the entries from outside the document */
71
+ getLayerOrder(): readonly string[];
72
+ /** A group by ID, or `undefined` */
73
+ getGroup(id: string): Group | undefined;
74
+ /** Every group */
75
+ listGroups(): Group[];
76
+ /** An embedded file by ID, or `undefined` */
77
+ getFile(id: string): FileData | undefined;
78
+ /** Every embedded file */
79
+ listFiles(): FileData[];
80
+ /** The title and the description */
81
+ getMetadata(): Metadata;
82
+ /** The selection of this client */
83
+ getSelection(): Selection;
84
+ /** The IDs of the features being edited */
85
+ getEditingIds(): readonly string[];
86
+ /** The selected vertices, or `null` */
87
+ getVertexSelection(): VertexSelection | null;
88
+ /** The current mode */
89
+ getMode(): Mode;
90
+ /** Whether the document is read-only */
91
+ isReadOnly(): boolean;
92
+ /** Whether the interaction lock is on */
93
+ isInteractionLocked(): boolean;
94
+ /** Whether this client hides the item */
95
+ isHidden(id: string): boolean;
96
+ /** The IDs this client hides */
97
+ listHidden(): ReadonlySet<string>;
98
+ /**
99
+ * Subscribes to the changes; one notification arrives per outermost transaction.
100
+ *
101
+ * @returns The function that unsubscribes
102
+ */
103
+ subscribe(listener: (changes: DocumentChange) => void): () => void;
104
+ /**
105
+ * Runs `fn` as one transaction, so that its writes arrive as one notification.
106
+ *
107
+ * @returns What `fn` returns
108
+ */
109
+ transact<T>(fn: () => T, source?: UpdateSource): T;
110
+ }
111
+ /**
112
+ * The Store with its writes: what the `store` option of `createDraw` takes.
113
+ *
114
+ * The instance reads and writes the document and the state of this client only through these
115
+ * methods, subscribes to it and groups its writes with `transact`. The shape being drawn, the
116
+ * box selection and the drag stay in the instance. A Store keeps the rules of
117
+ * {@link StoreView} and these:
118
+ *
119
+ * - Unique IDs: the IDs of features and groups are unique together (both are listed in
120
+ * `Layer.items`), the IDs of layers are unique, and so are the IDs of files. A write that
121
+ * would take an ID in use does not apply.
122
+ * - `Layer.items` is consistent: every feature is listed in exactly one container, in
123
+ * `Group.featureIds` of its group when it has `groupId`, otherwise in `Layer.items` of its
124
+ * layer, and every group is listed in `Layer.items` of one layer. The writes keep it so: a
125
+ * new feature or group is listed, a deleted one is taken out, a change of `layerId` or
126
+ * `groupId` moves the feature, and a group whose last member leaves is deleted.
127
+ * - `Group.layerId` is maintained by the Store: it is always the layer whose `items` list the
128
+ * group.
129
+ * - The stacking order: `createLayer` adds the new layer at the front unless the order
130
+ * already holds it, `deleteLayer` takes it out, and no other write adds or removes entries.
131
+ * - Writes return whether they were applied: a write of the document returns true when it
132
+ * changed the Store, and false when it was refused, changing nothing. A write whose
133
+ * argument cannot apply (an ID that names nothing) may throw instead, storing nothing.
134
+ * - Read-only refusals: the instance does not call the writes of the document while
135
+ * `isReadOnly()` is true, and a Store may refuse them then (and for reasons of its own) by
136
+ * returning false. The interaction lock does not stop any write. The writes of the state of
137
+ * this client return nothing: the instance takes them as applied.
138
+ */
139
+ export interface Store extends StoreView {
140
+ /** Creates a feature. */
141
+ createFeature(feature: Feature): boolean;
142
+ /** Changes the fields given of a feature; `isIntermediate` marks an edit in progress. */
143
+ updateFeature(id: string, updates: Partial<Feature>, options?: {
144
+ isIntermediate?: boolean;
145
+ }): boolean;
146
+ /** Drops the intermediate updates of these features that were not followed by a final one. */
147
+ abortIntermediateUpdates?(ids: string[]): void;
148
+ /** Deletes a feature. */
149
+ deleteFeature(id: string): boolean;
150
+ /** Creates a layer. */
151
+ createLayer(layer: Layer): boolean;
152
+ /** Changes the fields given of a layer. */
153
+ updateLayer(id: string, updates: Partial<Layer>): boolean;
154
+ /** Deletes a layer. */
155
+ deleteLayer(id: string): boolean;
156
+ /** Replaces the stacking order. */
157
+ setLayerOrder(order: string[]): boolean;
158
+ /** Moves an item to a position within a layer. */
159
+ reorderInLayer(itemId: string, layerId: string, newIndex: number): boolean;
160
+ /** Moves a feature to a position within a group. */
161
+ reorderInGroup(featureId: string, groupId: string, newIndex: number): boolean;
162
+ /** Creates a group. */
163
+ createGroup(group: Group): boolean;
164
+ /** Changes the fields given of a group. */
165
+ updateGroup(id: string, updates: Partial<Group>): boolean;
166
+ /** Deletes a group. */
167
+ deleteGroup(id: string): boolean;
168
+ /** Adds an embedded file. */
169
+ createFile(file: FileData): boolean;
170
+ /** Deletes an embedded file. */
171
+ deleteFile(id: string): boolean;
172
+ /** Changes the fields given of the metadata. */
173
+ setMetadata(metadata: Partial<Metadata>): boolean;
174
+ /** Replaces the selection of this client. */
175
+ setSelection(type: SelectionType | null, ids: string[]): void;
176
+ /** Marks features as being edited. */
177
+ startEditing(ids: string[]): void;
178
+ /** Marks features as no longer being edited. */
179
+ endEditing(ids: string[]): void;
180
+ /** Replaces the selected vertices. */
181
+ setSelectedVertices(selection: VertexSelection | null): void;
182
+ /** Replaces the mode. */
183
+ setMode(mode: Mode): void;
184
+ /** Turns read-only on or off. */
185
+ setReadOnly(value: boolean): void;
186
+ /** Turns the interaction lock on or off. */
187
+ setInteractionLock(value: boolean): void;
188
+ /** Hides or shows an item in this client. */
189
+ setLocallyHidden(id: string, hidden: boolean): void;
190
+ }
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};
@@ -0,0 +1,306 @@
1
+ /**
2
+ * `draw.extensions`: the collections of plugins, modes, feature types, overlays and providers
3
+ *
4
+ * Every kind of extension is added the same way: `add` registers it and returns the function
5
+ * that removes it, and `remove(name)` removes it by name.
6
+ */
7
+ import type { FeatureTypeDefinition } from './extension/feature-type.js';
8
+ import type { ModeFactory } from './extension/mode.js';
9
+ import type { Plugin } from './extension/plugin.js';
10
+ import type { CompanionProvider, HandleProvider, SnapProvider } from './extension/provider.js';
11
+ import type { OverlayRenderer } from './extension/render.js';
12
+ /** The plugins, in the order they were added. */
13
+ export interface PluginsCollection {
14
+ /**
15
+ * Gets a plugin by name.
16
+ *
17
+ * @returns The plugin, or `undefined` when there is none with this name
18
+ */
19
+ get(name: string): Plugin | undefined;
20
+ /** Lists the plugins in the order they were added. */
21
+ list(): Plugin[];
22
+ /** Counts the plugins. */
23
+ count(): number;
24
+ /** Whether a plugin with this name was added. */
25
+ has(name: string): boolean;
26
+ /**
27
+ * Adds a plugin.
28
+ *
29
+ * @returns The function that removes it again
30
+ * @throws `DrawError` with the code `already-exists` when a plugin with the same name was
31
+ * added
32
+ * or with `invalid-input` when the value does not have the shape of the contract
33
+ */
34
+ add(plugin: Plugin): () => void;
35
+ /**
36
+ * Adds several plugins in one transaction: all of them or none.
37
+ *
38
+ * @returns The function that removes them again
39
+ * @throws `DrawError` with the code `already-exists` when one of the names is taken, or
40
+ * `invalid-input` when a value does not have the shape of the contract; nothing is added
41
+ * then
42
+ */
43
+ addMany(plugins: readonly Plugin[]): () => void;
44
+ /**
45
+ * Removes a plugin, with everything it added.
46
+ *
47
+ * @returns True when it was removed
48
+ * @throws `DrawError` with the code `not-found` when there is no plugin with this name
49
+ */
50
+ remove(name: string): boolean;
51
+ /**
52
+ * Removes several plugins, with everything they added: all of them or none.
53
+ *
54
+ * @returns True when they were removed
55
+ * @throws `DrawError` with the code `not-found` when one of the names does not exist;
56
+ * nothing is removed then
57
+ */
58
+ removeMany(names: readonly string[]): boolean;
59
+ /**
60
+ * The API a plugin offers to others.
61
+ *
62
+ * @returns The API, or `undefined` when there is no plugin with this name or it offers none
63
+ */
64
+ getApi<T>(name: string): T | undefined;
65
+ }
66
+ /** The modes that were added, by name. */
67
+ export interface ModesCollection {
68
+ /**
69
+ * Gets the factory of a mode by name.
70
+ *
71
+ * @returns The factory, or `undefined` when there is no mode with this name
72
+ */
73
+ get(name: string): ModeFactory | undefined;
74
+ /** Lists the names of the modes. */
75
+ list(): string[];
76
+ /** Counts the modes. */
77
+ count(): number;
78
+ /** Whether a mode with this name was added. */
79
+ has(name: string): boolean;
80
+ /**
81
+ * Adds a mode under a name.
82
+ *
83
+ * @returns The function that removes it again
84
+ * @throws `DrawError` with the code `already-exists` when the name is taken
85
+ * or with `invalid-input` when the value does not have the shape of the contract
86
+ */
87
+ add(name: string, factory: ModeFactory): () => void;
88
+ /**
89
+ * Adds several modes in one transaction: all of them or none.
90
+ *
91
+ * @returns The function that removes them again
92
+ * @throws `DrawError` with the code `already-exists` when one of the names is taken, or
93
+ * `invalid-input` when a value does not have the shape of the contract; nothing is added
94
+ * then
95
+ */
96
+ addMany(entries: readonly {
97
+ name: string;
98
+ factory: ModeFactory;
99
+ }[]): () => void;
100
+ /**
101
+ * Removes a mode.
102
+ *
103
+ * @returns True when it was removed
104
+ * @throws `DrawError` with the code `not-found` when there is no mode with this name
105
+ */
106
+ remove(name: string): boolean;
107
+ /**
108
+ * Removes several modes: all of them or none.
109
+ *
110
+ * @returns True when they were removed
111
+ * @throws `DrawError` with the code `not-found` when one of the names does not exist;
112
+ * nothing is removed then
113
+ */
114
+ removeMany(names: readonly string[]): boolean;
115
+ }
116
+ /**
117
+ * The custom feature types, by type name, and the definitions that override a built-in type.
118
+ */
119
+ export interface FeatureTypesCollection {
120
+ /**
121
+ * Gets the definition of a feature type by name: a type that was added, or the definition
122
+ * that overrides a built-in type.
123
+ *
124
+ * @returns The definition, or `undefined` when there is none with this name
125
+ */
126
+ get(name: string): FeatureTypeDefinition | undefined;
127
+ /** Lists the names of the feature types that were added or overridden. */
128
+ list(): string[];
129
+ /** Counts the feature types that were added or overridden. */
130
+ count(): number;
131
+ /** Whether a feature type with this name was added or overridden. */
132
+ has(name: string): boolean;
133
+ /**
134
+ * Adds a custom feature type. The type takes every feature of its type: its `appliesTo`, if
135
+ * it has one, is ignored.
136
+ *
137
+ * @returns The function that removes it again
138
+ * @throws `DrawError` with the code `already-exists` when the type name is taken
139
+ * or with `invalid-input` when the value does not have the shape of the contract
140
+ */
141
+ add(definition: FeatureTypeDefinition): () => void;
142
+ /**
143
+ * Adds several custom feature types in one transaction: all of them or none.
144
+ *
145
+ * @returns The function that removes them again
146
+ * @throws `DrawError` with the code `already-exists` when one of the names is taken, or
147
+ * `invalid-input` when a value does not have the shape of the contract; nothing is added
148
+ * then
149
+ */
150
+ addMany(definitions: readonly FeatureTypeDefinition[]): () => void;
151
+ /**
152
+ * Overrides a built-in feature type (`Point`, `LineString`, `Polygon`, `Circle`,
153
+ * `Freehand` or `Image`) with a definition of the same `type` and the same kind of
154
+ * `geometry` as the built-in one (`Point` for a circle and an image, `LineString` for a
155
+ * freehand line). The features of the type are drawn by its renderer from then on. Its
156
+ * `hitTest`, `boxSelect`, `bounds`, `outline`, `bbox` and `snapCandidates` replace those of
157
+ * the built-in type when it has them, and the built-in ones stay for the members it leaves
158
+ * out. Its `handles` are shown with those of the built-in type. With `appliesTo`, it takes
159
+ * only the features for which that returns true, and the others keep the built-in type
160
+ * entirely.
161
+ *
162
+ * The built-in type comes back with the function it returns, with `remove(type)`, and, for
163
+ * a plugin that overrode it through its context, when the plugin is removed. `add` keeps
164
+ * refusing the names of the built-in types.
165
+ *
166
+ * @returns The function that puts the built-in type back
167
+ * @throws `DrawError` with the code `invalid-input` when the type is not one of the
168
+ * built-in types above, its `geometry` is not the one of the built-in type, or the value
169
+ * does not have the shape of the contract, and `already-exists` when the type is already
170
+ * overridden
171
+ */
172
+ override(definition: FeatureTypeDefinition): () => void;
173
+ /**
174
+ * Removes a custom feature type, or the definition that overrides a built-in type (the
175
+ * built-in type comes back).
176
+ *
177
+ * @returns True when it was removed
178
+ * @throws `DrawError` with the code `not-found` when there is no type with this name
179
+ */
180
+ remove(name: string): boolean;
181
+ /**
182
+ * Removes several custom feature types: all of them or none.
183
+ *
184
+ * @returns True when they were removed
185
+ * @throws `DrawError` with the code `not-found` when one of the names does not exist;
186
+ * nothing is removed then
187
+ */
188
+ removeMany(names: readonly string[]): boolean;
189
+ }
190
+ /** The renderers that draw above the features or between the layers, by name. */
191
+ export interface OverlaysCollection {
192
+ /**
193
+ * Gets an overlay renderer by name.
194
+ *
195
+ * @returns The renderer, or `undefined` when there is none with this name
196
+ */
197
+ get(name: string): OverlayRenderer | undefined;
198
+ /** Lists the names of the overlay renderers. */
199
+ list(): string[];
200
+ /** Counts the overlay renderers. */
201
+ count(): number;
202
+ /** Whether an overlay renderer with this name was added. */
203
+ has(name: string): boolean;
204
+ /**
205
+ * Adds an overlay renderer.
206
+ *
207
+ * @returns The function that removes it again
208
+ * @throws `DrawError` with the code `already-exists` when the name is taken
209
+ * or with `invalid-input` when the value does not have the shape of the contract
210
+ */
211
+ add(renderer: OverlayRenderer): () => void;
212
+ /**
213
+ * Adds several overlay renderers in one transaction: all of them or none.
214
+ *
215
+ * @returns The function that removes them again
216
+ * @throws `DrawError` with the code `already-exists` when one of the names is taken, or
217
+ * `invalid-input` when a value does not have the shape of the contract; nothing is added
218
+ * then
219
+ */
220
+ addMany(renderers: readonly OverlayRenderer[]): () => void;
221
+ /**
222
+ * Removes an overlay renderer.
223
+ *
224
+ * @returns True when it was removed
225
+ * @throws `DrawError` with the code `not-found` when there is none with this name
226
+ */
227
+ remove(name: string): boolean;
228
+ /**
229
+ * Removes several overlay renderers: all of them or none.
230
+ *
231
+ * @returns True when they were removed
232
+ * @throws `DrawError` with the code `not-found` when one of the names does not exist;
233
+ * nothing is removed then
234
+ */
235
+ removeMany(names: readonly string[]): boolean;
236
+ }
237
+ /**
238
+ * The providers of one kind, by name: snapping candidates, handles or companions.
239
+ *
240
+ * @typeParam T - The kind of provider
241
+ */
242
+ export interface ProvidersCollection<T> {
243
+ /**
244
+ * Gets a provider by name.
245
+ *
246
+ * @returns The provider, or `undefined` when there is none with this name
247
+ */
248
+ get(name: string): T | undefined;
249
+ /** Lists the names of the providers. */
250
+ list(): string[];
251
+ /** Counts the providers. */
252
+ count(): number;
253
+ /** Whether a provider with this name was added. */
254
+ has(name: string): boolean;
255
+ /**
256
+ * Adds a provider.
257
+ *
258
+ * @returns The function that removes it again
259
+ * @throws `DrawError` with the code `already-exists` when the name is taken
260
+ * or with `invalid-input` when the value does not have the shape of the contract
261
+ */
262
+ add(provider: T): () => void;
263
+ /**
264
+ * Adds several providers in one transaction: all of them or none.
265
+ *
266
+ * @returns The function that removes them again
267
+ * @throws `DrawError` with the code `already-exists` when one of the names is taken, or
268
+ * `invalid-input` when a value does not have the shape of the contract; nothing is added
269
+ * then
270
+ */
271
+ addMany(providers: readonly T[]): () => void;
272
+ /**
273
+ * Removes a provider.
274
+ *
275
+ * @returns True when it was removed
276
+ * @throws `DrawError` with the code `not-found` when there is no provider with this name
277
+ */
278
+ remove(name: string): boolean;
279
+ /**
280
+ * Removes several providers: all of them or none.
281
+ *
282
+ * @returns True when they were removed
283
+ * @throws `DrawError` with the code `not-found` when one of the names does not exist;
284
+ * nothing is removed then
285
+ */
286
+ removeMany(names: readonly string[]): boolean;
287
+ }
288
+ /**
289
+ * Every collection of extensions of a draw instance.
290
+ */
291
+ export interface ExtensionsCollections {
292
+ /** The plugins: bundles of other extensions and state */
293
+ readonly plugins: PluginsCollection;
294
+ /** The modes: ways of receiving input */
295
+ readonly modes: ModesCollection;
296
+ /** The custom feature types */
297
+ readonly featureTypes: FeatureTypesCollection;
298
+ /** The renderers that draw above the features or between the layers */
299
+ readonly overlays: OverlaysCollection;
300
+ /** The providers of snapping candidates */
301
+ readonly snapProviders: ProvidersCollection<SnapProvider>;
302
+ /** The providers of handles on the selected features */
303
+ readonly handleProviders: ProvidersCollection<HandleProvider>;
304
+ /** The providers of companions drawn one step below a feature */
305
+ readonly companionProviders: ProvidersCollection<CompanionProvider>;
306
+ }
@@ -0,0 +1,3 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export {};