@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
@@ -17,6 +17,7 @@
17
17
  * rings, ring is always treated as 0, and any ring other than 0 is regarded as an
18
18
  * invalid reference.
19
19
  */
20
+ import { coordinatesOf } from '../shared/utils/coordinates.js';
20
21
  import { getVertexPart } from '../shared/utils/vertex-ref.js';
21
22
  /**
22
23
  * Whether the ring is closed (first = last)
@@ -171,7 +172,7 @@ function movePolygonVertices(rings, initialRings, refs, dx, dy) {
171
172
  * @internal
172
173
  */
173
174
  export function computeVertexMove(state, currentLngLat, feature) {
174
- const { vertexIndices, startLngLat, initialCoordinates } = state;
175
+ const { vertices, startLngLat, initialCoordinates } = state;
175
176
  // Compute the amount of movement
176
177
  const dx = currentLngLat.lng - startLngLat.lng;
177
178
  const dy = currentLngLat.lat - startLngLat.lat;
@@ -184,12 +185,12 @@ export function computeVertexMove(state, currentLngLat, feature) {
184
185
  // invalid reference)
185
186
  if (feature.type === 'LineString') {
186
187
  const coords = initialCoordinates.slice();
187
- moveLineVertices(coords, refsOfPart(vertexIndices, 0), dx, dy);
188
+ moveLineVertices(coords, refsOfPart(vertices, 0), dx, dy);
188
189
  return coords;
189
190
  }
190
191
  if (feature.type === 'Polygon') {
191
192
  const initialRings = initialCoordinates;
192
- const refs = refsOfPart(vertexIndices, 0);
193
+ const refs = refsOfPart(vertices, 0);
193
194
  const rings = copyRingsForRefs(initialRings, refs);
194
195
  movePolygonVertices(rings, initialRings, refs, dx, dy);
195
196
  return rings;
@@ -198,7 +199,7 @@ export function computeVertexMove(state, currentLngLat, feature) {
198
199
  // Each coordinate is one part. In a reference, part = the part number, and
199
200
  // ring / index are 0
200
201
  const points = initialCoordinates.slice();
201
- for (const ref of vertexIndices) {
202
+ for (const ref of vertices) {
202
203
  if (ref.ring !== 0 || ref.index !== 0)
203
204
  continue;
204
205
  const part = getVertexPart(ref);
@@ -213,7 +214,7 @@ export function computeVertexMove(state, currentLngLat, feature) {
213
214
  // original array
214
215
  const initialParts = initialCoordinates;
215
216
  const parts = initialParts.slice();
216
- for (const [part, refs] of groupRefsByPart(vertexIndices)) {
217
+ for (const [part, refs] of groupRefsByPart(vertices)) {
217
218
  if (part < 0 || part >= parts.length)
218
219
  continue;
219
220
  const coords = initialParts[part].slice();
@@ -225,7 +226,7 @@ export function computeVertexMove(state, currentLngLat, feature) {
225
226
  if (feature.type === 'MultiPolygon') {
226
227
  const initialParts = initialCoordinates;
227
228
  const parts = initialParts.slice();
228
- for (const [part, refs] of groupRefsByPart(vertexIndices)) {
229
+ for (const [part, refs] of groupRefsByPart(vertices)) {
229
230
  if (part < 0 || part >= parts.length)
230
231
  continue;
231
232
  const initialRings = initialParts[part];
@@ -260,7 +261,7 @@ function copyTopLevelCoordinates(coordinates) {
260
261
  * computeVertexMove). The top-level array is always made new, only the container
261
262
  * that splice changes (the target ring / part) is copied, and the other parts /
262
263
  * rings / coordinate pairs keep sharing references with the input. The input
263
- * feature.coordinates is never rewritten. For a feature on the order of 100,000
264
+ * geometry is never rewritten. For a feature on the order of 100,000
264
265
  * vertices a full copy took more than ten milliseconds each time, which produced a
265
266
  * hitch on a single click that added a vertex.
266
267
  *
@@ -272,7 +273,7 @@ function copyTopLevelCoordinates(coordinates) {
272
273
  export function addVertex(feature, after, newCoord) {
273
274
  const part = getVertexPart(after);
274
275
  if (feature.type === 'LineString') {
275
- const lineCoords = feature.coordinates.slice();
276
+ const lineCoords = coordinatesOf(feature).slice();
276
277
  // It has neither rings nor parts, so nothing is added other than ring 0 / part 0
277
278
  if (after.ring !== 0 || part !== 0)
278
279
  return lineCoords;
@@ -280,7 +281,7 @@ export function addVertex(feature, after, newCoord) {
280
281
  return lineCoords;
281
282
  }
282
283
  if (feature.type === 'Polygon') {
283
- const initialRings = feature.coordinates;
284
+ const initialRings = coordinatesOf(feature);
284
285
  const rings = initialRings.slice();
285
286
  if (part !== 0)
286
287
  return rings;
@@ -292,7 +293,7 @@ export function addVertex(feature, after, newCoord) {
292
293
  return rings;
293
294
  }
294
295
  if (feature.type === 'MultiLineString') {
295
- const initialParts = feature.coordinates;
296
+ const initialParts = coordinatesOf(feature);
296
297
  const parts = initialParts.slice();
297
298
  if (after.ring !== 0)
298
299
  return parts;
@@ -304,7 +305,7 @@ export function addVertex(feature, after, newCoord) {
304
305
  return parts;
305
306
  }
306
307
  if (feature.type === 'MultiPolygon') {
307
- const initialParts = feature.coordinates;
308
+ const initialParts = coordinatesOf(feature);
308
309
  const parts = initialParts.slice();
309
310
  if (part < 0 || part >= parts.length)
310
311
  return parts;
@@ -318,7 +319,7 @@ export function addVertex(feature, after, newCoord) {
318
319
  parts[part] = rings;
319
320
  return parts;
320
321
  }
321
- return copyTopLevelCoordinates(feature.coordinates);
322
+ return copyTopLevelCoordinates(coordinatesOf(feature));
322
323
  }
323
324
  /**
324
325
  * Returns an array of rings with one vertex deleted from a ring of the polygon
@@ -376,7 +377,7 @@ function deleteVertexFromRings(initialRings, ref) {
376
377
  * computeVertexMove). The top-level array is always made new, only the container
377
378
  * that splice changes (the target ring / part) is copied, and the other parts /
378
379
  * rings / coordinate pairs keep sharing references with the input. The input
379
- * feature.coordinates is never rewritten.
380
+ * geometry is never rewritten.
380
381
  *
381
382
  * @internal
382
383
  */
@@ -391,7 +392,7 @@ export function deleteVertex(feature, ref) {
391
392
  // invalid reference
392
393
  if (ref.ring !== 0 || part !== 0)
393
394
  return null;
394
- const initialCoords = feature.coordinates;
395
+ const initialCoords = coordinatesOf(feature);
395
396
  // At least 2 points are needed
396
397
  if (initialCoords.length <= 2)
397
398
  return null;
@@ -402,12 +403,12 @@ export function deleteVertex(feature, ref) {
402
403
  if (feature.type === 'Polygon') {
403
404
  if (part !== 0)
404
405
  return null;
405
- return deleteVertexFromRings(feature.coordinates, ref);
406
+ return deleteVertexFromRings(coordinatesOf(feature), ref);
406
407
  }
407
408
  if (feature.type === 'MultiPoint') {
408
409
  // Deleting a vertex removes the part itself. The last remaining part cannot be
409
410
  // removed
410
- const initialPoints = feature.coordinates;
411
+ const initialPoints = coordinatesOf(feature);
411
412
  if (ref.ring !== 0 || ref.index !== 0)
412
413
  return null;
413
414
  if (part < 0 || part >= initialPoints.length)
@@ -419,7 +420,7 @@ export function deleteVertex(feature, ref) {
419
420
  return points;
420
421
  }
421
422
  if (feature.type === 'MultiLineString') {
422
- const initialParts = feature.coordinates;
423
+ const initialParts = coordinatesOf(feature);
423
424
  if (ref.ring !== 0)
424
425
  return null;
425
426
  if (part < 0 || part >= initialParts.length)
@@ -435,7 +436,7 @@ export function deleteVertex(feature, ref) {
435
436
  return parts;
436
437
  }
437
438
  if (feature.type === 'MultiPolygon') {
438
- const initialParts = feature.coordinates;
439
+ const initialParts = coordinatesOf(feature);
439
440
  if (part < 0 || part >= initialParts.length)
440
441
  return null;
441
442
  const rings = deleteVertexFromRings(initialParts[part], ref);
@@ -445,35 +446,35 @@ export function deleteVertex(feature, ref) {
445
446
  parts[part] = rings;
446
447
  return parts;
447
448
  }
448
- return copyTopLevelCoordinates(feature.coordinates);
449
+ return copyTopLevelCoordinates(coordinatesOf(feature));
449
450
  }
450
451
  /**
451
452
  * Starts the vertex movement operation
452
453
  *
453
454
  * @internal
454
455
  */
455
- export function startVertexMove(feature, vertexIndices, startLngLat) {
456
- if (vertexIndices.length === 0)
456
+ export function startVertexMove(feature, vertices, startLngLat) {
457
+ if (vertices.length === 0)
457
458
  return null;
458
459
  // Check the validity of the vertex references
459
460
  if (feature.type === 'Point') {
460
- if (vertexIndices.length !== 1)
461
+ if (vertices.length !== 1)
461
462
  return null;
462
- const ref = vertexIndices[0];
463
+ const ref = vertices[0];
463
464
  if (getVertexPart(ref) !== 0 || ref.ring !== 0 || ref.index !== 0)
464
465
  return null;
465
466
  }
466
467
  else if (feature.type === 'LineString') {
467
- const coords = feature.coordinates;
468
- const isValid = vertexIndices.every((r) => getVertexPart(r) === 0 && r.ring === 0 && r.index >= 0 && r.index < coords.length);
468
+ const coords = coordinatesOf(feature);
469
+ const isValid = vertices.every((r) => getVertexPart(r) === 0 && r.ring === 0 && r.index >= 0 && r.index < coords.length);
469
470
  if (!isValid)
470
471
  return null;
471
472
  }
472
473
  else if (feature.type === 'Polygon') {
473
- const rings = feature.coordinates;
474
+ const rings = coordinatesOf(feature);
474
475
  if (rings.length === 0)
475
476
  return null;
476
- const isValid = vertexIndices.every((r) => getVertexPart(r) === 0 &&
477
+ const isValid = vertices.every((r) => getVertexPart(r) === 0 &&
477
478
  r.ring >= 0 &&
478
479
  r.ring < rings.length &&
479
480
  r.index >= 0 &&
@@ -482,10 +483,10 @@ export function startVertexMove(feature, vertexIndices, startLngLat) {
482
483
  return null;
483
484
  }
484
485
  else if (feature.type === 'MultiPoint') {
485
- const points = feature.coordinates;
486
+ const points = coordinatesOf(feature);
486
487
  if (points.length === 0)
487
488
  return null;
488
- const isValid = vertexIndices.every((r) => {
489
+ const isValid = vertices.every((r) => {
489
490
  const part = getVertexPart(r);
490
491
  return part >= 0 && part < points.length && r.ring === 0 && r.index === 0;
491
492
  });
@@ -493,10 +494,10 @@ export function startVertexMove(feature, vertexIndices, startLngLat) {
493
494
  return null;
494
495
  }
495
496
  else if (feature.type === 'MultiLineString') {
496
- const parts = feature.coordinates;
497
+ const parts = coordinatesOf(feature);
497
498
  if (parts.length === 0)
498
499
  return null;
499
- const isValid = vertexIndices.every((r) => {
500
+ const isValid = vertices.every((r) => {
500
501
  const part = getVertexPart(r);
501
502
  if (part < 0 || part >= parts.length)
502
503
  return false;
@@ -506,10 +507,10 @@ export function startVertexMove(feature, vertexIndices, startLngLat) {
506
507
  return null;
507
508
  }
508
509
  else if (feature.type === 'MultiPolygon') {
509
- const parts = feature.coordinates;
510
+ const parts = coordinatesOf(feature);
510
511
  if (parts.length === 0)
511
512
  return null;
512
- const isValid = vertexIndices.every((r) => {
513
+ const isValid = vertices.every((r) => {
513
514
  const part = getVertexPart(r);
514
515
  if (part < 0 || part >= parts.length)
515
516
  return false;
@@ -526,13 +527,13 @@ export function startVertexMove(feature, vertexIndices, startLngLat) {
526
527
  }
527
528
  return {
528
529
  featureId: feature.id,
529
- vertexIndices: vertexIndices.map((r) => ({ ...r })),
530
+ vertices: vertices.map((r) => ({ ...r })),
530
531
  startLngLat,
531
532
  // Coordinates follow the convention of immutable updates (an update is always a
532
533
  // replacement with a new array), and during a drag computeVertexMove also builds a
533
534
  // new array every time and swaps it in.
534
535
  // So holding a reference from the start is enough: the contents do not change
535
536
  // afterwards and no copy is needed
536
- initialCoordinates: feature.coordinates,
537
+ initialCoordinates: coordinatesOf(feature),
537
538
  };
538
539
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,245 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /** The named colors of CSS, as `name` and `rrggbb` in turn */
4
+ const NAMED = 'aliceblue f0f8ff antiquewhite faebd7 aqua 00ffff aquamarine 7fffd4 azure f0ffff beige f5f5dc ' +
5
+ 'bisque ffe4c4 black 000000 blanchedalmond ffebcd blue 0000ff blueviolet 8a2be2 brown a52a2a ' +
6
+ 'burlywood deb887 cadetblue 5f9ea0 chartreuse 7fff00 chocolate d2691e coral ff7f50 ' +
7
+ 'cornflowerblue 6495ed cornsilk fff8dc crimson dc143c cyan 00ffff darkblue 00008b ' +
8
+ 'darkcyan 008b8b darkgoldenrod b8860b darkgray a9a9a9 darkgreen 006400 darkgrey a9a9a9 ' +
9
+ 'darkkhaki bdb76b darkmagenta 8b008b darkolivegreen 556b2f darkorange ff8c00 ' +
10
+ 'darkorchid 9932cc darkred 8b0000 darksalmon e9967a darkseagreen 8fbc8f darkslateblue 483d8b ' +
11
+ 'darkslategray 2f4f4f darkslategrey 2f4f4f darkturquoise 00ced1 darkviolet 9400d3 ' +
12
+ 'deeppink ff1493 deepskyblue 00bfff dimgray 696969 dimgrey 696969 dodgerblue 1e90ff ' +
13
+ 'firebrick b22222 floralwhite fffaf0 forestgreen 228b22 fuchsia ff00ff gainsboro dcdcdc ' +
14
+ 'ghostwhite f8f8ff gold ffd700 goldenrod daa520 gray 808080 green 008000 greenyellow adff2f ' +
15
+ 'grey 808080 honeydew f0fff0 hotpink ff69b4 indianred cd5c5c indigo 4b0082 ivory fffff0 ' +
16
+ 'khaki f0e68c lavender e6e6fa lavenderblush fff0f5 lawngreen 7cfc00 lemonchiffon fffacd ' +
17
+ 'lightblue add8e6 lightcoral f08080 lightcyan e0ffff lightgoldenrodyellow fafad2 ' +
18
+ 'lightgray d3d3d3 lightgreen 90ee90 lightgrey d3d3d3 lightpink ffb6c1 lightsalmon ffa07a ' +
19
+ 'lightseagreen 20b2aa lightskyblue 87cefa lightslategray 778899 lightslategrey 778899 ' +
20
+ 'lightsteelblue b0c4de lightyellow ffffe0 lime 00ff00 limegreen 32cd32 linen faf0e6 ' +
21
+ 'magenta ff00ff maroon 800000 mediumaquamarine 66cdaa mediumblue 0000cd mediumorchid ba55d3 ' +
22
+ 'mediumpurple 9370db mediumseagreen 3cb371 mediumslateblue 7b68ee mediumspringgreen 00fa9a ' +
23
+ 'mediumturquoise 48d1cc mediumvioletred c71585 midnightblue 191970 mintcream f5fffa ' +
24
+ 'mistyrose ffe4e1 moccasin ffe4b5 navajowhite ffdead navy 000080 oldlace fdf5e6 ' +
25
+ 'olive 808000 olivedrab 6b8e23 orange ffa500 orangered ff4500 orchid da70d6 ' +
26
+ 'palegoldenrod eee8aa palegreen 98fb98 paleturquoise afeeee palevioletred db7093 ' +
27
+ 'papayawhip ffefd5 peachpuff ffdab9 peru cd853f pink ffc0cb plum dda0dd powderblue b0e0e6 ' +
28
+ 'purple 800080 rebeccapurple 663399 red ff0000 rosybrown bc8f8f royalblue 4169e1 ' +
29
+ 'saddlebrown 8b4513 salmon fa8072 sandybrown f4a460 seagreen 2e8b57 seashell fff5ee ' +
30
+ 'sienna a0522d silver c0c0c0 skyblue 87ceeb slateblue 6a5acd slategray 708090 ' +
31
+ 'slategrey 708090 snow fffafa springgreen 00ff7f steelblue 4682b4 tan d2b48c teal 008080 ' +
32
+ 'thistle d8bfd8 tomato ff6347 turquoise 40e0d0 violet ee82ee wheat f5deb3 white ffffff ' +
33
+ 'whitesmoke f5f5f5 yellow ffff00 yellowgreen 9acd32';
34
+ let namedColors = null;
35
+ /** The table of the named colors, built on the first use */
36
+ function named() {
37
+ if (namedColors)
38
+ return namedColors;
39
+ const words = NAMED.split(' ');
40
+ namedColors = new Map();
41
+ for (let i = 0; i < words.length; i += 2)
42
+ namedColors.set(words[i], words[i + 1]);
43
+ return namedColors;
44
+ }
45
+ /** The colors parsed so far; the renderers read the same few colors on every frame */
46
+ const cache = new Map();
47
+ const CACHE_LIMIT = 1024;
48
+ /**
49
+ * Parses a CSS color.
50
+ *
51
+ * @param value - The color: `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`, `rgb()`, `rgba()`,
52
+ * `hsl()`, `hsla()`, a named color or `transparent`
53
+ * @returns The color as `[r, g, b, a]`, each from 0 to 1, or `null` when the value is not a
54
+ * color
55
+ * @internal
56
+ */
57
+ export function parseColor(value) {
58
+ if (typeof value !== 'string')
59
+ return null;
60
+ let parsed = cache.get(value);
61
+ if (parsed === undefined) {
62
+ parsed = parse(value.trim().toLowerCase());
63
+ if (cache.size >= CACHE_LIMIT)
64
+ cache.clear();
65
+ cache.set(value, parsed);
66
+ }
67
+ return parsed ? [parsed[0], parsed[1], parsed[2], parsed[3]] : null;
68
+ }
69
+ /**
70
+ * Whether the value is a CSS color the library can read.
71
+ *
72
+ * @internal
73
+ */
74
+ export function isColor(value) {
75
+ return typeof value === 'string' && parseColor(value) !== null;
76
+ }
77
+ /**
78
+ * A CSS color as `[r, g, b, a]` with its alpha multiplied by an opacity; a value that is not
79
+ * a color gives transparent black.
80
+ *
81
+ * @param value - The CSS color
82
+ * @param opacity - The opacity the alpha of the color is multiplied by, from 0 to 1
83
+ * @internal
84
+ */
85
+ export function toColor(value, opacity = 1) {
86
+ const color = parseColor(value);
87
+ if (!color)
88
+ return [0, 0, 0, 0];
89
+ color[3] *= opacity;
90
+ return color;
91
+ }
92
+ /**
93
+ * A color `[r, g, b, a]`, each from 0 to 1, as a CSS color: `#rrggbb`, or `rgba()` when it is
94
+ * not opaque.
95
+ *
96
+ * @internal
97
+ */
98
+ export function formatColor(color) {
99
+ const channel = (value) => Math.round(clamp(value, 0, 1) * 255);
100
+ const [r, g, b] = [channel(color[0]), channel(color[1]), channel(color[2])];
101
+ const alpha = clamp(color[3], 0, 1);
102
+ if (alpha === 1) {
103
+ return `#${[r, g, b].map((c) => c.toString(16).padStart(2, '0')).join('')}`;
104
+ }
105
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
106
+ }
107
+ /** The colors normalized so far; a style rule gives the same few colors to many features */
108
+ const hexCache = new Map();
109
+ /**
110
+ * A CSS color as `#rrggbb`, its alpha left out; a value that is not a color is returned as
111
+ * it is.
112
+ *
113
+ * @internal
114
+ */
115
+ export function toHexColor(value) {
116
+ let hex = hexCache.get(value);
117
+ if (hex === undefined) {
118
+ const color = parseColor(value);
119
+ hex = color ? formatColor([color[0], color[1], color[2], 1]) : value;
120
+ if (hexCache.size >= CACHE_LIMIT)
121
+ hexCache.clear();
122
+ hexCache.set(value, hex);
123
+ }
124
+ return hex;
125
+ }
126
+ function parse(text) {
127
+ if (text.startsWith('#'))
128
+ return parseHex(text.slice(1));
129
+ if (text === 'transparent')
130
+ return [0, 0, 0, 0];
131
+ const open = text.indexOf('(');
132
+ if (open > 0 && text.endsWith(')')) {
133
+ const name = text.slice(0, open).trim();
134
+ const args = splitArguments(text.slice(open + 1, -1));
135
+ if (!args)
136
+ return null;
137
+ if (name === 'rgb' || name === 'rgba')
138
+ return parseRgb(args);
139
+ if (name === 'hsl' || name === 'hsla')
140
+ return parseHsl(args);
141
+ return null;
142
+ }
143
+ const hex = named().get(text);
144
+ return hex ? parseHex(hex) : null;
145
+ }
146
+ /** `rgb`, `rgba`, `rrggbb` or `rrggbbaa` */
147
+ function parseHex(hex) {
148
+ if (!/^[0-9a-f]+$/.test(hex))
149
+ return null;
150
+ const channel = (i, width) => {
151
+ const digits = hex.slice(i * width, i * width + width);
152
+ return Number.parseInt(width === 1 ? digits + digits : digits, 16) / 255;
153
+ };
154
+ if (hex.length === 3 || hex.length === 4) {
155
+ return [channel(0, 1), channel(1, 1), channel(2, 1), hex.length === 4 ? channel(3, 1) : 1];
156
+ }
157
+ if (hex.length === 6 || hex.length === 8) {
158
+ return [channel(0, 2), channel(1, 2), channel(2, 2), hex.length === 8 ? channel(3, 2) : 1];
159
+ }
160
+ return null;
161
+ }
162
+ /**
163
+ * The arguments of a color function: three values and an optional alpha, separated by commas
164
+ * (`1, 2, 3, 0.5`) or by spaces with a slash before the alpha (`1 2 3 / 0.5`)
165
+ */
166
+ function splitArguments(body) {
167
+ const text = body.trim();
168
+ if (text.includes(',')) {
169
+ const args = text.split(',').map((arg) => arg.trim());
170
+ return args.length === 3 || args.length === 4 ? args : null;
171
+ }
172
+ const [channels, alpha, ...rest] = text.split('/');
173
+ if (rest.length > 0)
174
+ return null;
175
+ const args = channels.trim().split(/\s+/);
176
+ if (args.length !== 3)
177
+ return null;
178
+ if (alpha === undefined)
179
+ return args;
180
+ const alphaText = alpha.trim();
181
+ return alphaText === '' ? null : [...args, alphaText];
182
+ }
183
+ /** A number, or null when the text is not one */
184
+ function toNumber(text) {
185
+ if (!/^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/.test(text))
186
+ return null;
187
+ return Number(text);
188
+ }
189
+ /** A number or a percentage, as a fraction of `scale` for a percentage */
190
+ function numberOrPercent(text, scale) {
191
+ if (text.endsWith('%')) {
192
+ const value = toNumber(text.slice(0, -1));
193
+ return value === null ? null : (value / 100) * scale;
194
+ }
195
+ return toNumber(text);
196
+ }
197
+ /** The alpha, from 0 to 1 (a number or a percentage); 1 when it is absent */
198
+ function parseAlpha(text) {
199
+ if (text === undefined)
200
+ return 1;
201
+ const value = numberOrPercent(text, 1);
202
+ return value === null ? null : clamp(value, 0, 1);
203
+ }
204
+ function parseRgb(args) {
205
+ const channels = args.slice(0, 3).map((arg) => numberOrPercent(arg, 255));
206
+ const alpha = parseAlpha(args[3]);
207
+ if (alpha === null || channels.some((channel) => channel === null))
208
+ return null;
209
+ const [r, g, b] = channels;
210
+ return [clamp(r, 0, 255) / 255, clamp(g, 0, 255) / 255, clamp(b, 0, 255) / 255, alpha];
211
+ }
212
+ function parseHsl(args) {
213
+ const hue = parseHue(args[0]);
214
+ const saturation = args[1].endsWith('%') ? toNumber(args[1].slice(0, -1)) : null;
215
+ const lightness = args[2].endsWith('%') ? toNumber(args[2].slice(0, -1)) : null;
216
+ const alpha = parseAlpha(args[3]);
217
+ if (hue === null || saturation === null || lightness === null || alpha === null)
218
+ return null;
219
+ const [r, g, b] = hslToRgb(hue, clamp(saturation, 0, 100) / 100, clamp(lightness, 0, 100) / 100);
220
+ return [r, g, b, alpha];
221
+ }
222
+ /** The hue in degrees, from a number or an angle in `deg`, `rad`, `grad` or `turn` */
223
+ function parseHue(text) {
224
+ const units = { deg: 1, grad: 0.9, rad: 180 / Math.PI, turn: 360 };
225
+ for (const [unit, factor] of Object.entries(units)) {
226
+ if (text.endsWith(unit)) {
227
+ const value = toNumber(text.slice(0, -unit.length));
228
+ return value === null ? null : value * factor;
229
+ }
230
+ }
231
+ return toNumber(text);
232
+ }
233
+ /** HSL (hue in degrees, saturation and lightness from 0 to 1) to RGB from 0 to 1 */
234
+ function hslToRgb(hue, saturation, lightness) {
235
+ const h = (((hue % 360) + 360) % 360) / 30;
236
+ const a = saturation * Math.min(lightness, 1 - lightness);
237
+ const channel = (n) => {
238
+ const k = (n + h) % 12;
239
+ return lightness - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));
240
+ };
241
+ return [channel(0), channel(8), channel(4)];
242
+ }
243
+ function clamp(value, min, max) {
244
+ return Math.min(max, Math.max(min, value));
245
+ }
@@ -1,23 +1,8 @@
1
1
  /**
2
2
  * Constant definitions
3
3
  *
4
- * Property prefixes and UI configuration constants.
4
+ * UI configuration constants.
5
5
  */
6
- /**
7
- * Keys of the internal meta properties
8
- *
9
- * createdZoom/rotation/scale are stored in feature.properties and round-trip through GeoJSON
10
- * with the maplibre-gl-draw: prefix (this library's own data, required to reproduce the
11
- * rendering).
12
- */
13
- export declare const INTERNAL_PROPERTIES: {
14
- /** Zoom level at creation time */
15
- readonly CREATED_ZOOM: "createdZoom";
16
- /** Rotation angle (degrees) */
17
- readonly ROTATION: "rotation";
18
- /** Scale */
19
- readonly SCALE: "scale";
20
- };
21
6
  /**
22
7
  * The handle of the selection UI being dragged
23
8
  *
@@ -26,41 +11,3 @@ export declare const INTERNAL_PROPERTIES: {
26
11
  * the handles of a line or a polygon, and `radius` and `center` those of a Circle.
27
12
  */
28
13
  export type HandleType = 'resize-nw' | 'resize-n' | 'resize-ne' | 'resize-e' | 'resize-se' | 'resize-s' | 'resize-sw' | 'resize-w' | 'rotate' | 'vertex' | 'midpoint' | 'radius' | 'center';
29
- /**
30
- * Handle positions
31
- */
32
- export declare const HANDLE_POSITIONS: {
33
- readonly RESIZE: readonly ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
34
- readonly ROTATE: "rotate";
35
- readonly VERTEX: "vertex";
36
- readonly MIDPOINT: "midpoint";
37
- };
38
- /**
39
- * Cursor styles
40
- */
41
- export declare const CURSOR_STYLES: {
42
- readonly DEFAULT: "default";
43
- readonly POINTER: "pointer";
44
- readonly MOVE: "move";
45
- readonly GRAB: "grab";
46
- readonly GRABBING: "grabbing";
47
- readonly CROSSHAIR: "crosshair";
48
- readonly TEXT: "text";
49
- readonly RESIZE_NW: "nw-resize";
50
- readonly RESIZE_N: "n-resize";
51
- readonly RESIZE_NE: "ne-resize";
52
- readonly RESIZE_E: "e-resize";
53
- readonly RESIZE_SE: "se-resize";
54
- readonly RESIZE_S: "s-resize";
55
- readonly RESIZE_SW: "sw-resize";
56
- readonly RESIZE_W: "w-resize";
57
- readonly ROTATE: "grab";
58
- };
59
- /**
60
- * Mouse event states
61
- */
62
- export declare const MOUSE_STATE: {
63
- readonly IDLE: "idle";
64
- readonly HOVER: "hover";
65
- readonly DRAGGING: "dragging";
66
- };
@@ -1,60 +1,3 @@
1
1
  // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Constant definitions
5
- *
6
- * Property prefixes and UI configuration constants.
7
- */
8
- /**
9
- * Keys of the internal meta properties
10
- *
11
- * createdZoom/rotation/scale are stored in feature.properties and round-trip through GeoJSON
12
- * with the maplibre-gl-draw: prefix (this library's own data, required to reproduce the
13
- * rendering).
14
- */
15
- export const INTERNAL_PROPERTIES = {
16
- /** Zoom level at creation time */
17
- CREATED_ZOOM: 'createdZoom',
18
- /** Rotation angle (degrees) */
19
- ROTATION: 'rotation',
20
- /** Scale */
21
- SCALE: 'scale',
22
- };
23
- /**
24
- * Handle positions
25
- */
26
- export const HANDLE_POSITIONS = {
27
- RESIZE: ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'],
28
- ROTATE: 'rotate',
29
- VERTEX: 'vertex',
30
- MIDPOINT: 'midpoint',
31
- };
32
- /**
33
- * Cursor styles
34
- */
35
- export const CURSOR_STYLES = {
36
- DEFAULT: 'default',
37
- POINTER: 'pointer',
38
- MOVE: 'move',
39
- GRAB: 'grab',
40
- GRABBING: 'grabbing',
41
- CROSSHAIR: 'crosshair',
42
- TEXT: 'text',
43
- RESIZE_NW: 'nw-resize',
44
- RESIZE_N: 'n-resize',
45
- RESIZE_NE: 'ne-resize',
46
- RESIZE_E: 'e-resize',
47
- RESIZE_SE: 'se-resize',
48
- RESIZE_S: 's-resize',
49
- RESIZE_SW: 'sw-resize',
50
- RESIZE_W: 'w-resize',
51
- ROTATE: 'grab',
52
- };
53
- /**
54
- * Mouse event states
55
- */
56
- export const MOUSE_STATE = {
57
- IDLE: 'idle',
58
- HOVER: 'hover',
59
- DRAGGING: 'dragging',
60
- };
3
+ export {};
@@ -102,22 +102,11 @@ export interface TentativeStyle {
102
102
  * The default look of the features, and of the geometry being drawn
103
103
  *
104
104
  * A key the style of a feature ({@link FeatureStyle}) leaves unset takes its value from here,
105
- * unless the style rule of the layer gives the color. Give the parts to change through the
106
- * `style` option of `createMapLibreGLDraw`; the parts left out keep their defaults.
105
+ * unless the style rule of the layer gives the color. The engine reads it from the `style`
106
+ * option of `createDraw`, translated to this shape; the parts left out keep their defaults.
107
107
  *
108
108
  * The selection does not change how a feature is drawn; it is shown by the box and the
109
109
  * handles of {@link SelectionUIConfig}.
110
- *
111
- * @example
112
- * ```ts
113
- * const draw = createMapLibreGLDraw(map, {
114
- * style: {
115
- * lineString: {
116
- * stroke: { width: 3, color: [0, 0.33, 1, 1], opacity: 1, lineStyle: 'solid' },
117
- * },
118
- * },
119
- * });
120
- * ```
121
110
  */
122
111
  export interface FeatureStyleConfig {
123
112
  /**
@@ -138,6 +127,20 @@ export interface FeatureStyleConfig {
138
127
  * @defaultValue a `#FF0077` 2 px outline and a `#FF0077` fill at an alpha of 0.25
139
128
  */
140
129
  polygon: PolygonFeatureStyle;
130
+ /**
131
+ * Circle, when it looks different from the polygons
132
+ *
133
+ * @defaultValue the look of the polygons
134
+ */
135
+ circle?: PolygonFeatureStyle;
136
+ /**
137
+ * The opacity of an Image that has none of its own
138
+ *
139
+ * @defaultValue 1
140
+ */
141
+ image?: {
142
+ opacity: number;
143
+ };
141
144
  /**
142
145
  * The geometry being drawn
143
146
  *