@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
@@ -1,40 +1,20 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
3
  /**
4
- * Extracts the RGB values from a HEX color string
4
+ * Color utilities: the interpolation of the continuous color ramps and the contrast color
5
5
  *
6
- * @param hex - A color string in #RRGGBB or #RGB form
7
- * @returns { r, g, b }, each value in 0-255
6
+ * The colors are read with the CSS color parser (`../color.ts`), so any CSS color works.
8
7
  */
9
- function parseHexToRgb(hex) {
10
- const cleanHex = hex.replace('#', '');
11
- let r;
12
- let g;
13
- let b;
14
- if (cleanHex.length === 3) {
15
- // #RGB form
16
- r = Number.parseInt(cleanHex[0] + cleanHex[0], 16);
17
- g = Number.parseInt(cleanHex[1] + cleanHex[1], 16);
18
- b = Number.parseInt(cleanHex[2] + cleanHex[2], 16);
19
- }
20
- else {
21
- // #RRGGBB form
22
- r = Number.parseInt(cleanHex.substring(0, 2), 16);
23
- g = Number.parseInt(cleanHex.substring(2, 4), 16);
24
- b = Number.parseInt(cleanHex.substring(4, 6), 16);
25
- }
26
- return { r, g, b };
27
- }
8
+ import { parseColor } from '../color.js';
28
9
  /**
29
- * Converts a HEX color string into an RGBA array
10
+ * Reads the RGB values of a CSS color (black when it is not a color)
30
11
  *
31
- * @param hex - A color string in #RRGGBB or #RGB form
32
- * @param opacity - Opacity (0-1)
33
- * @returns An array in the form [r, g, b, a] (each value in 0-1)
12
+ * @param color - A CSS color
13
+ * @returns { r, g, b }, each value in 0-255
34
14
  */
35
- export function hexToColor(hex, opacity = 1) {
36
- const { r, g, b } = parseHexToRgb(hex);
37
- return [r / 255, g / 255, b / 255, opacity];
15
+ function parseRgb(color) {
16
+ const [r, g, b] = parseColor(color) ?? [0, 0, 0, 1];
17
+ return { r: r * 255, g: g * 255, b: b * 255 };
38
18
  }
39
19
  /**
40
20
  * Converts RGB values into a HEX color string
@@ -82,11 +62,11 @@ function linearToSrgb(c) {
82
62
  * (https://bottosson.github.io/posts/oklab/). It maps in the order sRGB -> linear sRGB -> LMS
83
63
  * -> cube root -> OKLab.
84
64
  *
85
- * @param hex - A color string in #RRGGBB or #RGB form
65
+ * @param hex - A CSS color
86
66
  * @returns { L, a, b } OKLab coordinates
87
67
  */
88
68
  function hexToOklab(hex) {
89
- const rgb = parseHexToRgb(hex);
69
+ const rgb = parseRgb(hex);
90
70
  const r = srgbToLinear(rgb.r);
91
71
  const g = srgbToLinear(rgb.g);
92
72
  const b = srgbToLinear(rgb.b);
@@ -130,8 +110,8 @@ function oklabToHex(L, a, b) {
130
110
  * component by component.
131
111
  * The interpolation position is clamped to 0-1.
132
112
  *
133
- * @param from - Color of the start point (#RRGGBB or #RGB)
134
- * @param to - Color of the end point (#RRGGBB or #RGB)
113
+ * @param from - Color of the start point (a CSS color)
114
+ * @param to - Color of the end point (a CSS color)
135
115
  * @param t - Interpolation position (0-1)
136
116
  * @returns A color string in #RRGGBB form
137
117
  */
@@ -141,40 +121,3 @@ export function interpolateHexColor(from, to, t) {
141
121
  const b = hexToOklab(to);
142
122
  return oklabToHex(a.L + (b.L - a.L) * ratio, a.a + (b.a - a.a) * ratio, a.b + (b.b - a.b) * ratio);
143
123
  }
144
- /**
145
- * Computes the relative luminance
146
- *
147
- * Based on the relative luminance formula of WCAG 2.0.
148
- * https://www.w3.org/TR/WCAG20/#relativeluminancedef
149
- *
150
- * @param hex - A color string in #RRGGBB or #RGB form
151
- * @returns Relative luminance (0-1)
152
- */
153
- export function getLuminance(hex) {
154
- const { r, g, b } = parseHexToRgb(hex);
155
- // Convert from sRGB into a linear value
156
- const toLinear = (c) => {
157
- const srgb = c / 255;
158
- return srgb <= 0.03928 ? srgb / 12.92 : ((srgb + 0.055) / 1.055) ** 2.4;
159
- };
160
- const rLinear = toLinear(r);
161
- const gLinear = toLinear(g);
162
- const bLinear = toLinear(b);
163
- // Computation of the relative luminance
164
- return 0.2126 * rLinear + 0.7152 * gLinear + 0.0722 * bLinear;
165
- }
166
- /**
167
- * Gets a contrasting color
168
- *
169
- * Returns a highly visible contrasting color based on the luminance of the given color.
170
- * Returns black for a light color and white for a dark color.
171
- *
172
- * @param hex - A color string in #RRGGBB or #RGB form
173
- * @returns The contrasting color (#000000 or #FFFFFF)
174
- */
175
- export function getContrastColor(hex) {
176
- const luminance = getLuminance(hex);
177
- // A luminance above 0.5 means a light color -> a black outline
178
- // A luminance at or below 0.5 means a dark color -> a white outline
179
- return luminance > 0.5 ? '#000000' : '#FFFFFF';
180
- }
@@ -7,7 +7,37 @@
7
7
  * same processing to every coordinate at any depth, so the depth-independent recursive
8
8
  * traversal is collected here.
9
9
  */
10
+ import type { Geometry } from 'geojson';
10
11
  import type { Coordinate, FeatureCoordinates, FeatureType } from '../types/model.js';
12
+ /** The kind of a GeoJSON geometry that has coordinates */
13
+ export type GeometryKind = Exclude<Geometry['type'], 'GeometryCollection'>;
14
+ /**
15
+ * The kind of geometry of a built-in feature type, or undefined for a custom type
16
+ */
17
+ export declare function builtInGeometryKind(type: FeatureType): GeometryKind | undefined;
18
+ /**
19
+ * The kind of geometry a feature type holds
20
+ *
21
+ * A built-in type has a fixed kind. A custom type is read from its coordinates as they come:
22
+ * a single position is a Point, a list of positions a LineString, a list of lists a Polygon
23
+ * and one level deeper a MultiPolygon.
24
+ */
25
+ export declare function geometryKindOf(type: FeatureType, coordinates: FeatureCoordinates): GeometryKind;
26
+ /**
27
+ * The GeoJSON geometry of a feature type with the given coordinates (the kind follows
28
+ * {@link geometryKindOf}; the coordinates are used as they are, not copied)
29
+ */
30
+ export declare function geometryFromCoordinates(type: FeatureType, coordinates: FeatureCoordinates): Geometry;
31
+ /**
32
+ * The coordinates of the geometry of a feature, nested as deep as its kind (an empty array
33
+ * for a GeometryCollection, which has none of its own)
34
+ */
35
+ export declare function coordinatesOf(feature: {
36
+ readonly geometry: Geometry;
37
+ }): FeatureCoordinates;
38
+ export declare function coordinatesOf(feature: {
39
+ readonly geometry: Geometry;
40
+ } | null | undefined): FeatureCoordinates | undefined;
11
41
  /**
12
42
  * The Multi family of feature types
13
43
  */
@@ -34,10 +64,6 @@ export declare function mapCoordinatesDeep<T extends FeatureCoordinates>(coords:
34
64
  * Used in the union computation of the bounding box and of hit testing.
35
65
  */
36
66
  export declare function forEachCoordinateDeep(coords: FeatureCoordinates, visit: (coord: Coordinate) => void): void;
37
- /**
38
- * Gets every coordinate as a flat array
39
- */
40
- export declare function flattenCoordinatesDeep(coords: FeatureCoordinates): Coordinate[];
41
67
  /**
42
68
  * Whether the feature type supports vertex editing (vertex handles / midpoint handles)
43
69
  *
@@ -1,5 +1,61 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * The kind of geometry of each built-in feature type
5
+ *
6
+ * A Circle and an Image are held as the Point of their center and their anchor.
7
+ */
8
+ const BUILT_IN_GEOMETRY_KINDS = new Map([
9
+ ['Point', 'Point'],
10
+ ['Circle', 'Point'],
11
+ ['Image', 'Point'],
12
+ ['LineString', 'LineString'],
13
+ ['Freehand', 'LineString'],
14
+ ['Polygon', 'Polygon'],
15
+ ['MultiPoint', 'MultiPoint'],
16
+ ['MultiLineString', 'MultiLineString'],
17
+ ['MultiPolygon', 'MultiPolygon'],
18
+ ]);
19
+ /**
20
+ * The kind of geometry of a built-in feature type, or undefined for a custom type
21
+ */
22
+ export function builtInGeometryKind(type) {
23
+ return BUILT_IN_GEOMETRY_KINDS.get(type);
24
+ }
25
+ /** The kind of geometry of coordinates of each nesting depth, for a custom type */
26
+ const KINDS_BY_DEPTH = ['Point', 'LineString', 'Polygon', 'MultiPolygon'];
27
+ /**
28
+ * The kind of geometry a feature type holds
29
+ *
30
+ * A built-in type has a fixed kind. A custom type is read from its coordinates as they come:
31
+ * a single position is a Point, a list of positions a LineString, a list of lists a Polygon
32
+ * and one level deeper a MultiPolygon.
33
+ */
34
+ export function geometryKindOf(type, coordinates) {
35
+ const builtIn = BUILT_IN_GEOMETRY_KINDS.get(type);
36
+ if (builtIn)
37
+ return builtIn;
38
+ let depth = 0;
39
+ let value = coordinates;
40
+ while (Array.isArray(value) && Array.isArray(value[0])) {
41
+ depth++;
42
+ value = value[0];
43
+ }
44
+ return KINDS_BY_DEPTH[Math.min(depth, KINDS_BY_DEPTH.length - 1)];
45
+ }
46
+ /**
47
+ * The GeoJSON geometry of a feature type with the given coordinates (the kind follows
48
+ * {@link geometryKindOf}; the coordinates are used as they are, not copied)
49
+ */
50
+ export function geometryFromCoordinates(type, coordinates) {
51
+ return { type: geometryKindOf(type, coordinates), coordinates };
52
+ }
53
+ export function coordinatesOf(feature) {
54
+ if (feature == null)
55
+ return undefined;
56
+ const { geometry } = feature;
57
+ return geometry.type === 'GeometryCollection' ? [] : geometry.coordinates;
58
+ }
3
59
  /**
4
60
  * The Multi family of feature types
5
61
  */
@@ -49,16 +105,6 @@ export function forEachCoordinateDeep(coords, visit) {
49
105
  }
50
106
  }
51
107
  }
52
- /**
53
- * Gets every coordinate as a flat array
54
- */
55
- export function flattenCoordinatesDeep(coords) {
56
- const result = [];
57
- forEachCoordinateDeep(coords, (coord) => {
58
- result.push(coord);
59
- });
60
- return result;
61
- }
62
108
  /**
63
109
  * Whether the feature type supports vertex editing (vertex handles / midpoint handles)
64
110
  *
@@ -1,262 +1 @@
1
- /**
2
- * EventEmitter
3
- *
4
- * The component that notifies the outside of state changes.
5
- * Events can be subscribed to in a form such as draw.on('feature.create', ...).
6
- */
7
- import type { DatasetClickEventPayload, MapClickEventPayload, RenderSlot, SnapResult } from '../types/events.js';
8
- import type { Feature, Group, Layer, Metadata, Mode, SelectionType, UpdateSource } from '../types/model.js';
9
- /**
10
- * Names of the editing operations of draw.geometry
11
- */
12
- export type GeometryOperationName = 'union' | 'subtract' | 'intersect' | 'buffer' | 'split';
13
- /**
14
- * Notification emitted when a geometric operation has been applied
15
- *
16
- * status expresses the outcome of the operation. 'applied' means that a result feature was
17
- * created; 'empty' means that the operation itself succeeded but the result had no area (an
18
- * intersection that does not overlap, a subtraction where everything was taken away, a buffer
19
- * where every input became empty, a split that did not divide the polygon). When it is
20
- * 'empty', the inputs are not modified at all and resultIds is empty.
21
- *
22
- * The result of the boolean editing operations (union / subtract / intersect) is always a
23
- * single one, so the length of resultIds is at most 1. A buffer creates a result per input, so
24
- * there can be several. A split produces two or more results. resultId is the first element of
25
- * resultIds (null when it is empty), a shorthand for subscribers that only deal with
26
- * operations producing a single result.
27
- *
28
- * The inputIds of a split are in the order [the polygon being cut, the line that cuts] (the
29
- * line is an input of the operation but remains without being removed).
30
- */
31
- export interface GeometryAppliedPayload {
32
- /** Name of the operation */
33
- operation: GeometryOperationName;
34
- /** IDs of the input features (in z order; the last one is in the foreground) */
35
- inputIds: string[];
36
- /** ID of the result feature. null when the result is empty */
37
- resultId: string | null;
38
- /** IDs of the result features (in z order). An empty array when the result is empty */
39
- resultIds: string[];
40
- /** Outcome of the operation */
41
- status: 'applied' | 'empty';
42
- }
43
- /**
44
- * Every feature change of one store flush (one transaction, or one mutation outside a
45
- * transaction)
46
- *
47
- * It is emitted once per flush that changes features, after the per-feature events of the
48
- * same flush, and carries all of them. A subscriber that rebuilds a view on any change
49
- * subscribes to this instead of the per-feature events, so a bulk load of N features costs
50
- * one rebuild rather than N.
51
- */
52
- export interface FeaturesChangePayload {
53
- /** The features created */
54
- created: Feature[];
55
- /** The features updated, each with the feature before the update */
56
- updated: {
57
- feature: Feature;
58
- previous: Feature;
59
- }[];
60
- /** The features deleted, as they were when they were deleted */
61
- deleted: Feature[];
62
- /**
63
- * Source of the flush ('local', 'silent' or 'batch' from core, 'remote' from a replaced
64
- * store, or a value of a plugin)
65
- */
66
- source: UpdateSource;
67
- }
68
- /**
69
- * The events of a draw instance by their internal names, with their payloads
70
- *
71
- * A plugin subscribes to them with `on` of {@link PluginContext}. They are the events the host
72
- * receives with `draw.on`, named without the `draw.` prefix: `feature.create` here is
73
- * `draw.feature.create` there ({@link EventPayloads} describes each one).
74
- */
75
- export interface EventMap {
76
- /** A feature was created */
77
- 'feature.create': {
78
- feature: Feature;
79
- };
80
- /** A feature was updated (with the feature before the update) */
81
- 'feature.update': {
82
- feature: Feature;
83
- previous: Feature;
84
- };
85
- /** A feature was deleted */
86
- 'feature.delete': {
87
- feature: Feature;
88
- };
89
- /** Every feature change of one Store notification, after the per-feature events */
90
- 'features.change': FeaturesChangePayload;
91
- /** The selection changed */
92
- 'selection.change': {
93
- type: SelectionType | null;
94
- ids: string[];
95
- previousType: SelectionType | null;
96
- previousIds: string[];
97
- };
98
- /** The mode changed */
99
- 'mode.change': {
100
- mode: Mode;
101
- previousMode: Mode;
102
- };
103
- /** A layer was created */
104
- 'layer.create': {
105
- layer: Layer;
106
- };
107
- /** A layer was updated (with the layer before the update) */
108
- 'layer.update': {
109
- layer: Layer;
110
- previous: Layer;
111
- };
112
- /** A layer was deleted */
113
- 'layer.delete': {
114
- layer: Layer;
115
- };
116
- /** The stacking order of the layers changed */
117
- 'layer.reorder': {
118
- order: string[];
119
- previous: string[];
120
- };
121
- /** A group was created */
122
- 'group.create': {
123
- group: Group;
124
- };
125
- /** A group was updated (with the group before the update) */
126
- 'group.update': {
127
- group: Group;
128
- previous: Group;
129
- };
130
- /** A group was deleted */
131
- 'group.delete': {
132
- group: Group;
133
- };
134
- /** The metadata of the document changed */
135
- 'metadata.change': {
136
- metadata: Metadata;
137
- previous: Metadata;
138
- };
139
- /** The image mode asks the host for an image file, to place at the carried position */
140
- 'image.request': {
141
- coordinate: [number, number];
142
- zoom: number;
143
- layerId: string;
144
- };
145
- /** An operation of `draw.geometry` finished */
146
- 'geometry.applied': GeometryAppliedPayload;
147
- /**
148
- * Change of the snapping result
149
- *
150
- * Emitted when the snapping target changes (and, when snapping to an edge whose coordinates
151
- * move, when the coordinates change). When snapping is lost, it is emitted once with no
152
- * target.
153
- */
154
- 'snap.change': SnapResult;
155
- /**
156
- * Resolution result of the click interception on datasets
157
- *
158
- * Emits on one channel whether a click in select mode hit a feature of a dataset
159
- * (datasetId / feature are carried) or hit nothing (both are null).
160
- * It is not emitted for a click that hit a feature of the Store.
161
- */
162
- 'dataset.click': DatasetClickEventPayload;
163
- /**
164
- * A dataset was added
165
- *
166
- * Emitted by `addDataset` once the dataset is listed, so a handler can get it
167
- * by its id. A plugin that follows every dataset (to subscribe to its `change`)
168
- * subscribes to this and to `dataset.remove`, and lists the datasets that already exist
169
- * once when it is installed.
170
- */
171
- 'dataset.add': {
172
- datasetId: string;
173
- };
174
- /**
175
- * A dataset was removed
176
- *
177
- * Emitted by `removeDataset` and by the `remove` of the dataset, once it is no
178
- * longer listed. It is not emitted when the draw instance is destroyed. A dataset added
179
- * again under the same id is a new object, announced by a new `dataset.add`.
180
- */
181
- 'dataset.remove': {
182
- datasetId: string;
183
- };
184
- /**
185
- * The order of the datasets changed
186
- *
187
- * Emitted by `moveDataset` when it moved a dataset within its side or to
188
- * another side. `order` is the ids in display order, from the back to the front (the same
189
- * as `getDatasets`). A move that leaves everything where it was emits nothing, and
190
- * adding or removing a dataset emits `dataset.add` or `dataset.remove` instead.
191
- */
192
- 'dataset.reorder': {
193
- order: string[];
194
- };
195
- /**
196
- * Map click in select mode
197
- *
198
- * Emits the normalized click as is on one channel, regardless of whether anything was hit
199
- * and of what was hit (the coordinates are before snapping). It is for read-only
200
- * subscription and does not affect the selection behavior of the modes. It is used by
201
- * callers that need "a click anywhere on the map".
202
- */
203
- 'map.click': MapClickEventPayload;
204
- /**
205
- * Addition or removal of frames (the CustomLayer per interval) and changes of the intervals
206
- *
207
- * On receiving this, the host re-places the native layers that correspond to the separators
208
- * between the frames (it carries the same content as getRenderSlots).
209
- */
210
- 'renderslots.change': {
211
- slots: RenderSlot[];
212
- };
213
- /**
214
- * Failure of an asynchronous load that no call returns
215
- *
216
- * `image`: the image of an Image feature could not be decoded (`featureId`). It is emitted
217
- * once per feature and image, the decode is not retried, and the feature is drawn without
218
- * its image. The error is the one that was thrown.
219
- */
220
- 'load.error': LoadErrorPayload;
221
- }
222
- /**
223
- * The payload of the load.error event
224
- */
225
- export interface LoadErrorPayload {
226
- /** Where the load was: the image of an Image feature */
227
- source: 'image';
228
- /** The Image feature whose image failed */
229
- featureId: string;
230
- /** What was thrown */
231
- error: unknown;
232
- }
233
- /**
234
- * Event listener type
235
- */
236
- export type EventListener<K extends keyof EventMap> = (data: EventMap[K]) => void;
237
- /**
238
- * EventEmitter interface
239
- */
240
- export interface EventEmitter {
241
- /**
242
- * Registers an event listener
243
- */
244
- on<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
245
- /**
246
- * Unregisters an event listener
247
- */
248
- off<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
249
- /**
250
- * Emits an event
251
- */
252
- emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
253
- }
254
- /**
255
- * EventEmitter implementation
256
- */
257
- export declare class EventEmitterImpl implements EventEmitter {
258
- private listeners;
259
- on<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
260
- off<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
261
- emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
262
- }
1
+ export {};
@@ -1,7 +1,9 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
3
  /**
4
- * EventEmitter implementation
4
+ * The emitter of the signals of one engine
5
+ *
6
+ * @internal
5
7
  */
6
8
  export class EventEmitterImpl {
7
9
  constructor() {
@@ -30,8 +32,7 @@ export class EventEmitterImpl {
30
32
  return;
31
33
  // Take a snapshot so that listeners being added or removed during emit has no effect,
32
34
  // and isolate each one individually so that an exception from a single listener does not
33
- // drag in the following listeners or the internal processing of the Core (EventBridge and
34
- // so on).
35
+ // drag in the following listeners or the internal processing of the engine.
35
36
  for (const listener of [...set]) {
36
37
  try {
37
38
  listener(data);
@@ -4,11 +4,11 @@
4
4
  * The bounding box of a feature
5
5
  *
6
6
  * A pure function of the feature (and the tile size for Image). The spatial index of the Store
7
- * (store/spatial) and the datasets (display/) both use it.
7
+ * (store/spatial) and the datasets (dataset/) both use it.
8
8
  */
9
9
  import { circleBoundingBox } from '../../geometry/circle.js';
10
10
  import { pixelsToDegreesLat, pixelsToDegreesLng, rotateCoordinateOnSphere } from '../math/index.js';
11
- import { forEachCoordinateDeep } from './coordinates.js';
11
+ import { coordinatesOf, forEachCoordinateDeep } from './coordinates.js';
12
12
  import { getCircleRadius, getCreatedZoom, getImageProperties } from './property.js';
13
13
  /**
14
14
  * Computes the bounding box of a feature
@@ -16,15 +16,15 @@ import { getCircleRadius, getCreatedZoom, getImageProperties } from './property.
16
16
  * For an Image, the size at createdZoom is converted into geographic coordinates
17
17
  */
18
18
  function computeBoundingBox(feature, tileSize) {
19
- const { type, coordinates } = feature;
19
+ const { type } = feature;
20
+ const coordinates = coordinatesOf(feature);
20
21
  // For an Image
21
22
  if (type === 'Image') {
22
23
  const coord = coordinates;
23
24
  const [lng, lat] = coord;
24
25
  const props = getImageProperties(feature);
25
- const style = feature.style;
26
- const imageWidth = style?.width || props.imageWidth || 100;
27
- const imageHeight = style?.height || props.imageHeight || 100;
26
+ const imageWidth = props.imageWidth || 100;
27
+ const imageHeight = props.imageHeight || 100;
28
28
  const scale = props.scale ?? 1;
29
29
  // createdZoom defaults to 14 when missing. getImageProperties().createdZoom returns 0 when
30
30
  // missing, so ?? does not work; therefore getCreatedZoom(number|undefined) is used.
@@ -84,7 +84,8 @@ const coordinateBoundingBoxCache = new WeakMap();
84
84
  * cache hit it does not traverse and only returns a copy of the value.
85
85
  */
86
86
  function computeCoordinateBoundingBox(feature) {
87
- const { type, coordinates } = feature;
87
+ const { type } = feature;
88
+ const coordinates = coordinatesOf(feature);
88
89
  if (type === 'Point') {
89
90
  const [lng, lat] = coordinates;
90
91
  return { minX: lng, minY: lat, maxX: lng, maxY: lat };
@@ -8,6 +8,7 @@
8
8
  * so the listing sits in shared/. It is pure: it reads only the coordinates of the feature.
9
9
  */
10
10
  import { getSegmentGrid, querySegmentIndicesInBBox, SEGMENT_INDEX_THRESHOLD, } from '../math/segment-grid.js';
11
+ import { coordinatesOf } from './coordinates.js';
11
12
  /**
12
13
  * Whether the feature type has edges (whether it is a target of edge snapping)
13
14
  *
@@ -56,24 +57,24 @@ export function isInBBox(position, bbox) {
56
57
  export function forEachPart(feature, visit) {
57
58
  switch (feature.type) {
58
59
  case 'LineString':
59
- visit(feature.coordinates, 0, undefined, false);
60
+ visit(coordinatesOf(feature), 0, undefined, false);
60
61
  break;
61
62
  case 'Polygon': {
62
- const rings = feature.coordinates;
63
+ const rings = coordinatesOf(feature);
63
64
  for (let ring = 0; ring < rings.length; ring++) {
64
65
  visit(rings[ring], ring, undefined, true);
65
66
  }
66
67
  break;
67
68
  }
68
69
  case 'MultiLineString': {
69
- const parts = feature.coordinates;
70
+ const parts = coordinatesOf(feature);
70
71
  for (let part = 0; part < parts.length; part++) {
71
72
  visit(parts[part], 0, part, false);
72
73
  }
73
74
  break;
74
75
  }
75
76
  case 'MultiPolygon': {
76
- const parts = feature.coordinates;
77
+ const parts = coordinatesOf(feature);
77
78
  for (let part = 0; part < parts.length; part++) {
78
79
  const rings = parts[part];
79
80
  for (let ring = 0; ring < rings.length; ring++) {
@@ -28,7 +28,3 @@ export declare function exceedsMaxImageSize(width: number, height: number): bool
28
28
  * A large image is resized automatically
29
29
  */
30
30
  export declare function processImageDataUrl(originalDataUrl: string): Promise<ProcessedImage>;
31
- /**
32
- * Tests whether it is an image file
33
- */
34
- export declare function isImageFile(file: File): boolean;
@@ -98,9 +98,3 @@ function loadImage(dataUrl) {
98
98
  img.src = dataUrl;
99
99
  });
100
100
  }
101
- /**
102
- * Tests whether it is an image file
103
- */
104
- export function isImageFile(file) {
105
- return file.type.startsWith('image/');
106
- }