@sakuzu/maplibre-gl-draw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/LICENSE +661 -0
  3. package/README.ja.md +248 -0
  4. package/README.md +255 -0
  5. package/THIRD_PARTY_NOTICES.md +275 -0
  6. package/dist/api/api.d.ts +1259 -0
  7. package/dist/api/api.js +86 -0
  8. package/dist/api/context.d.ts +173 -0
  9. package/dist/api/context.js +193 -0
  10. package/dist/api/display-api.d.ts +1 -0
  11. package/dist/api/display-api.js +23 -0
  12. package/dist/api/event-api.d.ts +13 -0
  13. package/dist/api/event-api.js +17 -0
  14. package/dist/api/extension-api.d.ts +46 -0
  15. package/dist/api/extension-api.js +85 -0
  16. package/dist/api/feature-api.d.ts +11 -0
  17. package/dist/api/feature-api.js +101 -0
  18. package/dist/api/geometry/apply.d.ts +51 -0
  19. package/dist/api/geometry/apply.js +114 -0
  20. package/dist/api/geometry/boolean.d.ts +28 -0
  21. package/dist/api/geometry/boolean.js +65 -0
  22. package/dist/api/geometry/buffer.d.ts +11 -0
  23. package/dist/api/geometry/buffer.js +105 -0
  24. package/dist/api/geometry/split.d.ts +16 -0
  25. package/dist/api/geometry/split.js +75 -0
  26. package/dist/api/geometry/targets.d.ts +76 -0
  27. package/dist/api/geometry/targets.js +158 -0
  28. package/dist/api/geometry/types.d.ts +31 -0
  29. package/dist/api/geometry/types.js +3 -0
  30. package/dist/api/geometry-operations.d.ts +162 -0
  31. package/dist/api/geometry-operations.js +94 -0
  32. package/dist/api/group-api.d.ts +10 -0
  33. package/dist/api/group-api.js +78 -0
  34. package/dist/api/import-export/constants.d.ts +29 -0
  35. package/dist/api/import-export/constants.js +40 -0
  36. package/dist/api/import-export/embedded-file.d.ts +13 -0
  37. package/dist/api/import-export/embedded-file.js +31 -0
  38. package/dist/api/import-export/file-name.d.ts +10 -0
  39. package/dist/api/import-export/file-name.js +20 -0
  40. package/dist/api/import-export/format-detection.d.ts +12 -0
  41. package/dist/api/import-export/format-detection.js +29 -0
  42. package/dist/api/import-export/geojson-export.d.ts +19 -0
  43. package/dist/api/import-export/geojson-export.js +262 -0
  44. package/dist/api/import-export/geojson-import.d.ts +34 -0
  45. package/dist/api/import-export/geojson-import.js +538 -0
  46. package/dist/api/import-export/geometry-validation.d.ts +20 -0
  47. package/dist/api/import-export/geometry-validation.js +107 -0
  48. package/dist/api/import-export/image-import.d.ts +12 -0
  49. package/dist/api/import-export/image-import.js +53 -0
  50. package/dist/api/import-export/index.d.ts +9 -0
  51. package/dist/api/import-export/index.js +107 -0
  52. package/dist/api/import-export/native-format.d.ts +15 -0
  53. package/dist/api/import-export/native-format.js +126 -0
  54. package/dist/api/import-export/native-validation.d.ts +28 -0
  55. package/dist/api/import-export/native-validation.js +212 -0
  56. package/dist/api/import-export/own-property.d.ts +10 -0
  57. package/dist/api/import-export/own-property.js +19 -0
  58. package/dist/api/import-export/style-validation.d.ts +27 -0
  59. package/dist/api/import-export/style-validation.js +49 -0
  60. package/dist/api/import-export/types.d.ts +26 -0
  61. package/dist/api/import-export/types.js +3 -0
  62. package/dist/api/index.d.ts +15 -0
  63. package/dist/api/index.js +3 -0
  64. package/dist/api/input-api.d.ts +158 -0
  65. package/dist/api/input-api.js +144 -0
  66. package/dist/api/instance-api.d.ts +38 -0
  67. package/dist/api/instance-api.js +136 -0
  68. package/dist/api/layer-api.d.ts +12 -0
  69. package/dist/api/layer-api.js +62 -0
  70. package/dist/api/selection-api.d.ts +7 -0
  71. package/dist/api/selection-api.js +78 -0
  72. package/dist/api/snapping-api.d.ts +125 -0
  73. package/dist/api/snapping-api.js +50 -0
  74. package/dist/api/topology-api.d.ts +30 -0
  75. package/dist/api/topology-api.js +16 -0
  76. package/dist/api/tracing-api.d.ts +31 -0
  77. package/dist/api/tracing-api.js +16 -0
  78. package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
  79. package/dist/dispatcher/hit-test/box-strategies.js +275 -0
  80. package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
  81. package/dist/dispatcher/hit-test/box-strategy.js +37 -0
  82. package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
  83. package/dist/dispatcher/hit-test/globe-shape.js +70 -0
  84. package/dist/dispatcher/hit-test/index.d.ts +14 -0
  85. package/dist/dispatcher/hit-test/index.js +9 -0
  86. package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
  87. package/dist/dispatcher/hit-test/local-frame.js +112 -0
  88. package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
  89. package/dist/dispatcher/hit-test/segment-grid.js +79 -0
  90. package/dist/dispatcher/hit-test/service.d.ts +120 -0
  91. package/dist/dispatcher/hit-test/service.js +333 -0
  92. package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
  93. package/dist/dispatcher/hit-test/strategies/base.js +66 -0
  94. package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
  95. package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
  96. package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
  97. package/dist/dispatcher/hit-test/strategies/image.js +115 -0
  98. package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
  99. package/dist/dispatcher/hit-test/strategies/index.js +10 -0
  100. package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
  101. package/dist/dispatcher/hit-test/strategies/line.js +30 -0
  102. package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
  103. package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
  104. package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
  105. package/dist/dispatcher/hit-test/strategies/point.js +29 -0
  106. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
  107. package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
  108. package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
  109. package/dist/dispatcher/hit-test/topmost.js +157 -0
  110. package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
  111. package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
  112. package/dist/dispatcher/index.d.ts +15 -0
  113. package/dist/dispatcher/index.js +3 -0
  114. package/dist/dispatcher/input-router.d.ts +1 -0
  115. package/dist/dispatcher/input-router.js +288 -0
  116. package/dist/dispatcher/normalizer.d.ts +1 -0
  117. package/dist/dispatcher/normalizer.js +513 -0
  118. package/dist/dispatcher/types.d.ts +144 -0
  119. package/dist/dispatcher/types.js +15 -0
  120. package/dist/display/chunk-set.d.ts +24 -0
  121. package/dist/display/chunk-set.js +533 -0
  122. package/dist/display/chunk.d.ts +1 -0
  123. package/dist/display/chunk.js +104 -0
  124. package/dist/display/columnar/index.d.ts +12 -0
  125. package/dist/display/columnar/index.js +13 -0
  126. package/dist/display/columnar/prepare.d.ts +42 -0
  127. package/dist/display/columnar/prepare.js +116 -0
  128. package/dist/display/columnar/source.d.ts +1 -0
  129. package/dist/display/columnar/source.js +531 -0
  130. package/dist/display/columnar/table.d.ts +1 -0
  131. package/dist/display/columnar/table.js +471 -0
  132. package/dist/display/columnar/types.d.ts +223 -0
  133. package/dist/display/columnar/types.js +3 -0
  134. package/dist/display/dataset.d.ts +2 -0
  135. package/dist/display/dataset.js +891 -0
  136. package/dist/display/index.d.ts +13 -0
  137. package/dist/display/index.js +3 -0
  138. package/dist/display/interaction.d.ts +1 -0
  139. package/dist/display/interaction.js +90 -0
  140. package/dist/display/manager.d.ts +1 -0
  141. package/dist/display/manager.js +440 -0
  142. package/dist/display/packed-rtree.d.ts +1 -0
  143. package/dist/display/packed-rtree.js +244 -0
  144. package/dist/display/partition.d.ts +1 -0
  145. package/dist/display/partition.js +226 -0
  146. package/dist/display/provider.d.ts +1 -0
  147. package/dist/display/provider.js +342 -0
  148. package/dist/display/retained.d.ts +40 -0
  149. package/dist/display/retained.js +898 -0
  150. package/dist/display/selection.d.ts +13 -0
  151. package/dist/display/selection.js +226 -0
  152. package/dist/display/source.d.ts +1 -0
  153. package/dist/display/source.js +119 -0
  154. package/dist/display/spatial.d.ts +1 -0
  155. package/dist/display/spatial.js +71 -0
  156. package/dist/display/style.d.ts +1 -0
  157. package/dist/display/style.js +126 -0
  158. package/dist/display/thinning.d.ts +65 -0
  159. package/dist/display/thinning.js +910 -0
  160. package/dist/display/triangulation.d.ts +1 -0
  161. package/dist/display/triangulation.js +0 -0
  162. package/dist/display/types.d.ts +561 -0
  163. package/dist/display/types.js +43 -0
  164. package/dist/extension/feature-handler.d.ts +182 -0
  165. package/dist/extension/feature-handler.js +3 -0
  166. package/dist/extension/index.d.ts +9 -0
  167. package/dist/extension/index.js +3 -0
  168. package/dist/extension/renderers.d.ts +208 -0
  169. package/dist/extension/renderers.js +3 -0
  170. package/dist/geometry/angle.d.ts +47 -0
  171. package/dist/geometry/angle.js +44 -0
  172. package/dist/geometry/bbox.d.ts +48 -0
  173. package/dist/geometry/bbox.js +83 -0
  174. package/dist/geometry/boolean.d.ts +162 -0
  175. package/dist/geometry/boolean.js +331 -0
  176. package/dist/geometry/buffer.d.ts +72 -0
  177. package/dist/geometry/buffer.js +218 -0
  178. package/dist/geometry/circle.d.ts +55 -0
  179. package/dist/geometry/circle.js +107 -0
  180. package/dist/geometry/coords.d.ts +97 -0
  181. package/dist/geometry/coords.js +149 -0
  182. package/dist/geometry/distance.d.ts +79 -0
  183. package/dist/geometry/distance.js +111 -0
  184. package/dist/geometry/errors.d.ts +74 -0
  185. package/dist/geometry/errors.js +104 -0
  186. package/dist/geometry/index.d.ts +28 -0
  187. package/dist/geometry/index.js +38 -0
  188. package/dist/geometry/measure.d.ts +81 -0
  189. package/dist/geometry/measure.js +236 -0
  190. package/dist/geometry/predicates.d.ts +62 -0
  191. package/dist/geometry/predicates.js +132 -0
  192. package/dist/geometry/simplify.d.ts +74 -0
  193. package/dist/geometry/simplify.js +159 -0
  194. package/dist/geometry/split.d.ts +68 -0
  195. package/dist/geometry/split.js +430 -0
  196. package/dist/geometry/types.d.ts +95 -0
  197. package/dist/geometry/types.js +3 -0
  198. package/dist/geometry/units.d.ts +35 -0
  199. package/dist/geometry/units.js +41 -0
  200. package/dist/index.d.ts +72 -0
  201. package/dist/index.js +20 -0
  202. package/dist/maplibre-gl-draw.d.ts +47 -0
  203. package/dist/maplibre-gl-draw.js +407 -0
  204. package/dist/messages.d.ts +64 -0
  205. package/dist/messages.js +36 -0
  206. package/dist/modes/cursor.d.ts +1 -0
  207. package/dist/modes/cursor.js +72 -0
  208. package/dist/modes/draw/circle.d.ts +1 -0
  209. package/dist/modes/draw/circle.js +222 -0
  210. package/dist/modes/draw/commit-layer.d.ts +26 -0
  211. package/dist/modes/draw/commit-layer.js +31 -0
  212. package/dist/modes/draw/freehand.d.ts +1 -0
  213. package/dist/modes/draw/freehand.js +264 -0
  214. package/dist/modes/draw/image.d.ts +1 -0
  215. package/dist/modes/draw/image.js +60 -0
  216. package/dist/modes/draw/index.d.ts +9 -0
  217. package/dist/modes/draw/index.js +11 -0
  218. package/dist/modes/draw/line.d.ts +1 -0
  219. package/dist/modes/draw/line.js +363 -0
  220. package/dist/modes/draw/point.d.ts +1 -0
  221. package/dist/modes/draw/point.js +87 -0
  222. package/dist/modes/draw/polygon.d.ts +1 -0
  223. package/dist/modes/draw/polygon.js +378 -0
  224. package/dist/modes/draw/trace-support.d.ts +79 -0
  225. package/dist/modes/draw/trace-support.js +161 -0
  226. package/dist/modes/handler.d.ts +285 -0
  227. package/dist/modes/handler.js +3 -0
  228. package/dist/modes/index.d.ts +7 -0
  229. package/dist/modes/index.js +3 -0
  230. package/dist/modes/manager.d.ts +15 -0
  231. package/dist/modes/manager.js +196 -0
  232. package/dist/modes/select/box-selection.d.ts +52 -0
  233. package/dist/modes/select/box-selection.js +140 -0
  234. package/dist/modes/select/click-handler.d.ts +32 -0
  235. package/dist/modes/select/click-handler.js +166 -0
  236. package/dist/modes/select/cursor-handler.d.ts +15 -0
  237. package/dist/modes/select/cursor-handler.js +59 -0
  238. package/dist/modes/select/drag/auxiliary.d.ts +26 -0
  239. package/dist/modes/select/drag/auxiliary.js +56 -0
  240. package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
  241. package/dist/modes/select/drag/intermediate-writes.js +171 -0
  242. package/dist/modes/select/drag/move.d.ts +24 -0
  243. package/dist/modes/select/drag/move.js +59 -0
  244. package/dist/modes/select/drag/operation.d.ts +30 -0
  245. package/dist/modes/select/drag/operation.js +18 -0
  246. package/dist/modes/select/drag/radius.d.ts +15 -0
  247. package/dist/modes/select/drag/radius.js +49 -0
  248. package/dist/modes/select/drag/transform.d.ts +17 -0
  249. package/dist/modes/select/drag/transform.js +155 -0
  250. package/dist/modes/select/drag/vertex.d.ts +17 -0
  251. package/dist/modes/select/drag/vertex.js +163 -0
  252. package/dist/modes/select/drag-handler.d.ts +1 -0
  253. package/dist/modes/select/drag-handler.js +254 -0
  254. package/dist/modes/select/hit-helpers.d.ts +40 -0
  255. package/dist/modes/select/hit-helpers.js +51 -0
  256. package/dist/modes/select/mode.d.ts +1 -0
  257. package/dist/modes/select/mode.js +397 -0
  258. package/dist/modes/select/shortcut-handler.d.ts +40 -0
  259. package/dist/modes/select/shortcut-handler.js +128 -0
  260. package/dist/operations/index.d.ts +9 -0
  261. package/dist/operations/index.js +3 -0
  262. package/dist/operations/layer-operations.d.ts +1 -0
  263. package/dist/operations/layer-operations.js +350 -0
  264. package/dist/operations/resize.d.ts +71 -0
  265. package/dist/operations/resize.js +252 -0
  266. package/dist/operations/rotate.d.ts +17 -0
  267. package/dist/operations/rotate.js +166 -0
  268. package/dist/operations/selection-operations.d.ts +20 -0
  269. package/dist/operations/selection-operations.js +159 -0
  270. package/dist/operations/shared-vertex.d.ts +1 -0
  271. package/dist/operations/shared-vertex.js +210 -0
  272. package/dist/operations/trace-graph.d.ts +96 -0
  273. package/dist/operations/trace-graph.js +283 -0
  274. package/dist/operations/vertex.d.ts +1 -0
  275. package/dist/operations/vertex.js +538 -0
  276. package/dist/plugins/index.d.ts +10 -0
  277. package/dist/plugins/index.js +3 -0
  278. package/dist/plugins/mutation-hooks.d.ts +28 -0
  279. package/dist/plugins/mutation-hooks.js +84 -0
  280. package/dist/plugins/plugin-context.d.ts +1 -0
  281. package/dist/plugins/plugin-context.js +367 -0
  282. package/dist/plugins/plugin-manager.d.ts +103 -0
  283. package/dist/plugins/plugin-manager.js +316 -0
  284. package/dist/plugins/plugin.d.ts +529 -0
  285. package/dist/plugins/plugin.js +3 -0
  286. package/dist/shared/config/constants.d.ts +66 -0
  287. package/dist/shared/config/constants.js +60 -0
  288. package/dist/shared/config/feature-style.d.ts +155 -0
  289. package/dist/shared/config/feature-style.js +154 -0
  290. package/dist/shared/config/index.d.ts +17 -0
  291. package/dist/shared/config/index.js +8 -0
  292. package/dist/shared/config/rendering.d.ts +107 -0
  293. package/dist/shared/config/rendering.js +33 -0
  294. package/dist/shared/config/selection-highlight.d.ts +29 -0
  295. package/dist/shared/config/selection-highlight.js +35 -0
  296. package/dist/shared/config/selection.d.ts +273 -0
  297. package/dist/shared/config/selection.js +266 -0
  298. package/dist/shared/config/topology.d.ts +33 -0
  299. package/dist/shared/config/topology.js +17 -0
  300. package/dist/shared/config/trace.d.ts +40 -0
  301. package/dist/shared/config/trace.js +17 -0
  302. package/dist/shared/math/angle.d.ts +21 -0
  303. package/dist/shared/math/angle.js +34 -0
  304. package/dist/shared/math/circle.d.ts +6 -0
  305. package/dist/shared/math/circle.js +10 -0
  306. package/dist/shared/math/constants.d.ts +48 -0
  307. package/dist/shared/math/constants.js +59 -0
  308. package/dist/shared/math/distance.d.ts +78 -0
  309. package/dist/shared/math/distance.js +147 -0
  310. package/dist/shared/math/globe-subdivision.d.ts +62 -0
  311. package/dist/shared/math/globe-subdivision.js +99 -0
  312. package/dist/shared/math/index.d.ts +17 -0
  313. package/dist/shared/math/index.js +21 -0
  314. package/dist/shared/math/intersection.d.ts +63 -0
  315. package/dist/shared/math/intersection.js +236 -0
  316. package/dist/shared/math/longitude.d.ts +20 -0
  317. package/dist/shared/math/longitude.js +31 -0
  318. package/dist/shared/math/mercator-plane.d.ts +27 -0
  319. package/dist/shared/math/mercator-plane.js +26 -0
  320. package/dist/shared/math/obb.d.ts +65 -0
  321. package/dist/shared/math/obb.js +107 -0
  322. package/dist/shared/math/rotation.d.ts +93 -0
  323. package/dist/shared/math/rotation.js +186 -0
  324. package/dist/shared/math/segment-grid.d.ts +69 -0
  325. package/dist/shared/math/segment-grid.js +159 -0
  326. package/dist/shared/math/transform.d.ts +140 -0
  327. package/dist/shared/math/transform.js +189 -0
  328. package/dist/shared/types/events.d.ts +128 -0
  329. package/dist/shared/types/events.js +3 -0
  330. package/dist/shared/types/model.d.ts +950 -0
  331. package/dist/shared/types/model.js +3 -0
  332. package/dist/shared/types/selection-box.d.ts +23 -0
  333. package/dist/shared/types/selection-box.js +3 -0
  334. package/dist/shared/types/style.d.ts +68 -0
  335. package/dist/shared/types/style.js +3 -0
  336. package/dist/shared/utils/color.d.ts +49 -0
  337. package/dist/shared/utils/color.js +180 -0
  338. package/dist/shared/utils/coordinates.d.ts +52 -0
  339. package/dist/shared/utils/coordinates.js +75 -0
  340. package/dist/shared/utils/embedded-image.d.ts +34 -0
  341. package/dist/shared/utils/embedded-image.js +161 -0
  342. package/dist/shared/utils/event-emitter.d.ts +262 -0
  343. package/dist/shared/utils/event-emitter.js +44 -0
  344. package/dist/shared/utils/feature-bbox.d.ts +8 -0
  345. package/dist/shared/utils/feature-bbox.js +207 -0
  346. package/dist/shared/utils/feature-segments.d.ts +23 -0
  347. package/dist/shared/utils/feature-segments.js +179 -0
  348. package/dist/shared/utils/id.d.ts +1 -0
  349. package/dist/shared/utils/id.js +35 -0
  350. package/dist/shared/utils/image.d.ts +34 -0
  351. package/dist/shared/utils/image.js +106 -0
  352. package/dist/shared/utils/index.d.ts +15 -0
  353. package/dist/shared/utils/index.js +24 -0
  354. package/dist/shared/utils/map.d.ts +26 -0
  355. package/dist/shared/utils/map.js +35 -0
  356. package/dist/shared/utils/name-generator.d.ts +197 -0
  357. package/dist/shared/utils/name-generator.js +337 -0
  358. package/dist/shared/utils/pixel-ratio.d.ts +111 -0
  359. package/dist/shared/utils/pixel-ratio.js +85 -0
  360. package/dist/shared/utils/property.d.ts +88 -0
  361. package/dist/shared/utils/property.js +140 -0
  362. package/dist/shared/utils/vertex-ref.d.ts +23 -0
  363. package/dist/shared/utils/vertex-ref.js +20 -0
  364. package/dist/snapping/custom-targets.d.ts +1 -0
  365. package/dist/snapping/custom-targets.js +21 -0
  366. package/dist/snapping/geometry.d.ts +1 -0
  367. package/dist/snapping/geometry.js +61 -0
  368. package/dist/snapping/index.d.ts +14 -0
  369. package/dist/snapping/index.js +4 -0
  370. package/dist/snapping/indicator.d.ts +19 -0
  371. package/dist/snapping/indicator.js +145 -0
  372. package/dist/snapping/providers/display.d.ts +72 -0
  373. package/dist/snapping/providers/display.js +268 -0
  374. package/dist/snapping/providers/guide.d.ts +69 -0
  375. package/dist/snapping/providers/guide.js +187 -0
  376. package/dist/snapping/providers/intersection.d.ts +1 -0
  377. package/dist/snapping/providers/intersection.js +92 -0
  378. package/dist/snapping/providers/shared.d.ts +39 -0
  379. package/dist/snapping/providers/shared.js +146 -0
  380. package/dist/snapping/providers/store.d.ts +1 -0
  381. package/dist/snapping/providers/store.js +132 -0
  382. package/dist/snapping/service.d.ts +1 -0
  383. package/dist/snapping/service.js +272 -0
  384. package/dist/snapping/types.d.ts +267 -0
  385. package/dist/snapping/types.js +66 -0
  386. package/dist/store/change-merger.d.ts +1 -0
  387. package/dist/store/change-merger.js +102 -0
  388. package/dist/store/draw-store.d.ts +1 -0
  389. package/dist/store/draw-store.js +396 -0
  390. package/dist/store/event-bridge.d.ts +1 -0
  391. package/dist/store/event-bridge.js +161 -0
  392. package/dist/store/index.d.ts +12 -0
  393. package/dist/store/index.js +4 -0
  394. package/dist/store/local-visibility.d.ts +21 -0
  395. package/dist/store/local-visibility.js +27 -0
  396. package/dist/store/lock.d.ts +67 -0
  397. package/dist/store/lock.js +54 -0
  398. package/dist/store/memory/change-bus.d.ts +60 -0
  399. package/dist/store/memory/change-bus.js +232 -0
  400. package/dist/store/memory/file-store.d.ts +15 -0
  401. package/dist/store/memory/file-store.js +33 -0
  402. package/dist/store/memory/frozen.d.ts +21 -0
  403. package/dist/store/memory/frozen.js +51 -0
  404. package/dist/store/memory/ui-state.d.ts +51 -0
  405. package/dist/store/memory/ui-state.js +223 -0
  406. package/dist/store/memory.d.ts +26 -0
  407. package/dist/store/memory.js +708 -0
  408. package/dist/store/spatial/index.d.ts +6 -0
  409. package/dist/store/spatial/index.js +4 -0
  410. package/dist/store/spatial/spatial-index.d.ts +90 -0
  411. package/dist/store/spatial/spatial-index.js +148 -0
  412. package/dist/store/spatial/store-spatial-index.d.ts +60 -0
  413. package/dist/store/spatial/store-spatial-index.js +125 -0
  414. package/dist/store/store.d.ts +417 -0
  415. package/dist/store/store.js +3 -0
  416. package/dist/store/types.d.ts +8 -0
  417. package/dist/store/types.js +3 -0
  418. package/dist/store/writable-layer.d.ts +35 -0
  419. package/dist/store/writable-layer.js +20 -0
  420. package/dist/view/cache/buffer.d.ts +28 -0
  421. package/dist/view/cache/buffer.js +176 -0
  422. package/dist/view/cache/earcut.d.ts +1 -0
  423. package/dist/view/cache/earcut.js +122 -0
  424. package/dist/view/cache/style-rule.d.ts +1 -0
  425. package/dist/view/cache/style-rule.js +97 -0
  426. package/dist/view/cache/terrain-fill.d.ts +30 -0
  427. package/dist/view/cache/terrain-fill.js +60 -0
  428. package/dist/view/cache/texture.d.ts +14 -0
  429. package/dist/view/cache/texture.js +292 -0
  430. package/dist/view/coordinator.d.ts +27 -0
  431. package/dist/view/coordinator.js +72 -0
  432. package/dist/view/feature-companion.d.ts +173 -0
  433. package/dist/view/feature-companion.js +108 -0
  434. package/dist/view/globe-subdivision.d.ts +78 -0
  435. package/dist/view/globe-subdivision.js +128 -0
  436. package/dist/view/index.d.ts +47 -0
  437. package/dist/view/index.js +20 -0
  438. package/dist/view/layer/attach.d.ts +20 -0
  439. package/dist/view/layer/attach.js +47 -0
  440. package/dist/view/layer/blend.d.ts +57 -0
  441. package/dist/view/layer/blend.js +14 -0
  442. package/dist/view/layer/custom-layer.d.ts +1 -0
  443. package/dist/view/layer/custom-layer.js +509 -0
  444. package/dist/view/layer/depth-state.d.ts +14 -0
  445. package/dist/view/layer/depth-state.js +44 -0
  446. package/dist/view/layer/display-list.d.ts +1 -0
  447. package/dist/view/layer/display-list.js +111 -0
  448. package/dist/view/layer/drape-planner.d.ts +139 -0
  449. package/dist/view/layer/drape-planner.js +726 -0
  450. package/dist/view/layer/frame-render.d.ts +57 -0
  451. package/dist/view/layer/frame-render.js +209 -0
  452. package/dist/view/layer/frame-state.d.ts +147 -0
  453. package/dist/view/layer/frame-state.js +484 -0
  454. package/dist/view/layer/gl-state.d.ts +77 -0
  455. package/dist/view/layer/gl-state.js +132 -0
  456. package/dist/view/layer/index.d.ts +6 -0
  457. package/dist/view/layer/index.js +5 -0
  458. package/dist/view/layer/render-scope.d.ts +30 -0
  459. package/dist/view/layer/render-scope.js +28 -0
  460. package/dist/view/layer/render.d.ts +87 -0
  461. package/dist/view/layer/render.js +187 -0
  462. package/dist/view/layer/renderers.d.ts +81 -0
  463. package/dist/view/layer/renderers.js +142 -0
  464. package/dist/view/layer/slot-manager.d.ts +26 -0
  465. package/dist/view/layer/slot-manager.js +133 -0
  466. package/dist/view/layer/slots.d.ts +33 -0
  467. package/dist/view/layer/slots.js +50 -0
  468. package/dist/view/layer/store-retained-bbox.d.ts +36 -0
  469. package/dist/view/layer/store-retained-bbox.js +188 -0
  470. package/dist/view/layer/store-retained-chunk.d.ts +97 -0
  471. package/dist/view/layer/store-retained-chunk.js +94 -0
  472. package/dist/view/layer/store-retained-classify.d.ts +34 -0
  473. package/dist/view/layer/store-retained-classify.js +88 -0
  474. package/dist/view/layer/store-retained-collect.d.ts +24 -0
  475. package/dist/view/layer/store-retained-collect.js +121 -0
  476. package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
  477. package/dist/view/layer/store-retained-coord-patch.js +168 -0
  478. package/dist/view/layer/store-retained-immediate.d.ts +63 -0
  479. package/dist/view/layer/store-retained-immediate.js +49 -0
  480. package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
  481. package/dist/view/layer/store-retained-invalidation.js +192 -0
  482. package/dist/view/layer/store-retained.d.ts +198 -0
  483. package/dist/view/layer/store-retained.js +430 -0
  484. package/dist/view/layer/terrain-resolver.d.ts +1 -0
  485. package/dist/view/layer/terrain-resolver.js +174 -0
  486. package/dist/view/renderers/batch-manager.d.ts +61 -0
  487. package/dist/view/renderers/batch-manager.js +718 -0
  488. package/dist/view/renderers/draw-factors.d.ts +60 -0
  489. package/dist/view/renderers/draw-factors.js +35 -0
  490. package/dist/view/renderers/drawer.d.ts +1 -0
  491. package/dist/view/renderers/drawer.js +346 -0
  492. package/dist/view/renderers/image.d.ts +1 -0
  493. package/dist/view/renderers/image.js +255 -0
  494. package/dist/view/renderers/line/dash.d.ts +31 -0
  495. package/dist/view/renderers/line/dash.js +152 -0
  496. package/dist/view/renderers/line/line-geometry.d.ts +39 -0
  497. package/dist/view/renderers/line/line-geometry.js +460 -0
  498. package/dist/view/renderers/line/line-gl.d.ts +1 -0
  499. package/dist/view/renderers/line/line-gl.js +236 -0
  500. package/dist/view/renderers/line/line-shader.d.ts +1 -0
  501. package/dist/view/renderers/line/line-shader.js +364 -0
  502. package/dist/view/renderers/line/line-types.d.ts +43 -0
  503. package/dist/view/renderers/line/line-types.js +3 -0
  504. package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
  505. package/dist/view/renderers/line/line-uniforms.js +390 -0
  506. package/dist/view/renderers/line/sdf-line.d.ts +92 -0
  507. package/dist/view/renderers/line/sdf-line.js +567 -0
  508. package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
  509. package/dist/view/renderers/point/billboard-depth.js +56 -0
  510. package/dist/view/renderers/point/point-instance.d.ts +124 -0
  511. package/dist/view/renderers/point/point-instance.js +738 -0
  512. package/dist/view/renderers/point/point-sdf.d.ts +58 -0
  513. package/dist/view/renderers/point/point-sdf.js +170 -0
  514. package/dist/view/renderers/point/point-shape.d.ts +99 -0
  515. package/dist/view/renderers/point/point-shape.js +504 -0
  516. package/dist/view/renderers/point/point-style.d.ts +1 -0
  517. package/dist/view/renderers/point/point-style.js +46 -0
  518. package/dist/view/renderers/polygon/batch.d.ts +26 -0
  519. package/dist/view/renderers/polygon/batch.js +336 -0
  520. package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
  521. package/dist/view/renderers/polygon/earcut-input.js +55 -0
  522. package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
  523. package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
  524. package/dist/view/renderers/polygon/fill.d.ts +74 -0
  525. package/dist/view/renderers/polygon/fill.js +251 -0
  526. package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
  527. package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
  528. package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
  529. package/dist/view/renderers/polygon/terrain-cull.js +14 -0
  530. package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
  531. package/dist/view/renderers/polygon/triangulator.js +3 -0
  532. package/dist/view/renderers/retained.d.ts +43 -0
  533. package/dist/view/renderers/retained.js +3 -0
  534. package/dist/view/renderers/stroke.d.ts +121 -0
  535. package/dist/view/renderers/stroke.js +621 -0
  536. package/dist/view/shaders/frame.d.ts +8 -0
  537. package/dist/view/shaders/frame.js +37 -0
  538. package/dist/view/shaders/helpers.d.ts +238 -0
  539. package/dist/view/shaders/helpers.js +611 -0
  540. package/dist/view/shaders/initializer.d.ts +27 -0
  541. package/dist/view/shaders/initializer.js +125 -0
  542. package/dist/view/shaders/projection.d.ts +123 -0
  543. package/dist/view/shaders/projection.js +299 -0
  544. package/dist/view/shaders/quad-grid.d.ts +77 -0
  545. package/dist/view/shaders/quad-grid.js +128 -0
  546. package/dist/view/shaders/quad.d.ts +189 -0
  547. package/dist/view/shaders/quad.js +582 -0
  548. package/dist/view/shaders/retained-origin.d.ts +50 -0
  549. package/dist/view/shaders/retained-origin.js +67 -0
  550. package/dist/view/shaders/terrain-shade.d.ts +23 -0
  551. package/dist/view/shaders/terrain-shade.js +93 -0
  552. package/dist/view/style-rule.d.ts +166 -0
  553. package/dist/view/style-rule.js +300 -0
  554. package/dist/view/terrain/anchor.d.ts +135 -0
  555. package/dist/view/terrain/anchor.js +226 -0
  556. package/dist/view/terrain/context.d.ts +132 -0
  557. package/dist/view/terrain/context.js +437 -0
  558. package/dist/view/terrain/dem-atlas.d.ts +97 -0
  559. package/dist/view/terrain/dem-atlas.js +534 -0
  560. package/dist/view/terrain/detect.d.ts +126 -0
  561. package/dist/view/terrain/detect.js +198 -0
  562. package/dist/view/terrain/drape/bin-store.d.ts +179 -0
  563. package/dist/view/terrain/drape/bin-store.js +529 -0
  564. package/dist/view/terrain/drape/binning.d.ts +259 -0
  565. package/dist/view/terrain/drape/binning.js +604 -0
  566. package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
  567. package/dist/view/terrain/drape/edge-constrain.js +175 -0
  568. package/dist/view/terrain/drape/geometry.d.ts +95 -0
  569. package/dist/view/terrain/drape/geometry.js +260 -0
  570. package/dist/view/terrain/drape/mesh.d.ts +50 -0
  571. package/dist/view/terrain/drape/mesh.js +86 -0
  572. package/dist/view/terrain/drape/pass.d.ts +122 -0
  573. package/dist/view/terrain/drape/pass.js +379 -0
  574. package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
  575. package/dist/view/terrain/drape/quad-glyphs.js +117 -0
  576. package/dist/view/terrain/drape/quad.d.ts +249 -0
  577. package/dist/view/terrain/drape/quad.js +835 -0
  578. package/dist/view/terrain/drape/renderer.d.ts +184 -0
  579. package/dist/view/terrain/drape/renderer.js +706 -0
  580. package/dist/view/terrain/drape/shared.d.ts +80 -0
  581. package/dist/view/terrain/drape/shared.js +173 -0
  582. package/dist/view/terrain/drape/stitch.d.ts +155 -0
  583. package/dist/view/terrain/drape/stitch.js +228 -0
  584. package/dist/view/terrain/ground.d.ts +72 -0
  585. package/dist/view/terrain/ground.js +151 -0
  586. package/dist/view/terrain/metrics.d.ts +180 -0
  587. package/dist/view/terrain/metrics.js +231 -0
  588. package/dist/view/terrain/occlusion.d.ts +11 -0
  589. package/dist/view/terrain/occlusion.js +129 -0
  590. package/dist/view/terrain/polygon.d.ts +86 -0
  591. package/dist/view/terrain/polygon.js +301 -0
  592. package/dist/view/terrain/shade.d.ts +48 -0
  593. package/dist/view/terrain/shade.js +45 -0
  594. package/dist/view/terrain/state.d.ts +99 -0
  595. package/dist/view/terrain/state.js +186 -0
  596. package/dist/view/terrain/tessellation.d.ts +265 -0
  597. package/dist/view/terrain/tessellation.js +924 -0
  598. package/dist/view/terrain/tiling.d.ts +56 -0
  599. package/dist/view/terrain/tiling.js +155 -0
  600. package/dist/view/terrain/upstream-terrain.d.ts +82 -0
  601. package/dist/view/terrain/upstream-terrain.js +116 -0
  602. package/dist/view/ui/auxiliary-handles.d.ts +151 -0
  603. package/dist/view/ui/auxiliary-handles.js +22 -0
  604. package/dist/view/ui/bounds.d.ts +53 -0
  605. package/dist/view/ui/bounds.js +149 -0
  606. package/dist/view/ui/box-selection.d.ts +1 -0
  607. package/dist/view/ui/box-selection.js +83 -0
  608. package/dist/view/ui/handle-test.d.ts +1 -0
  609. package/dist/view/ui/handle-test.js +437 -0
  610. package/dist/view/ui/handle-thinning.d.ts +122 -0
  611. package/dist/view/ui/handle-thinning.js +430 -0
  612. package/dist/view/ui/handles.d.ts +25 -0
  613. package/dist/view/ui/handles.js +673 -0
  614. package/dist/view/ui/helper.d.ts +19 -0
  615. package/dist/view/ui/helper.js +76 -0
  616. package/dist/view/ui/index.d.ts +15 -0
  617. package/dist/view/ui/index.js +15 -0
  618. package/dist/view/ui/selection-scope.d.ts +25 -0
  619. package/dist/view/ui/selection-scope.js +34 -0
  620. package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
  621. package/dist/view/ui/selection-ui/bounding-box.js +240 -0
  622. package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
  623. package/dist/view/ui/selection-ui/extension-registry.js +78 -0
  624. package/dist/view/ui/selection-ui/index.d.ts +12 -0
  625. package/dist/view/ui/selection-ui/index.js +12 -0
  626. package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
  627. package/dist/view/ui/selection-ui/renderer.js +227 -0
  628. package/dist/view/ui/selection-ui/types.d.ts +55 -0
  629. package/dist/view/ui/selection-ui/types.js +3 -0
  630. package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
  631. package/dist/view/ui/selection-ui-drawer.js +329 -0
  632. package/dist/view/ui/tentative.d.ts +1 -0
  633. package/dist/view/ui/tentative.js +320 -0
  634. package/dist/view/viewport.d.ts +119 -0
  635. package/dist/view/viewport.js +254 -0
  636. package/package.json +113 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Move drag: translates the selected features by the pointer offset
3
+ */
4
+ import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
5
+ import type { FeatureCoordinates } from '../../../store/types.js';
6
+ import type { DragStore } from './operation.js';
7
+ /**
8
+ * State of a move operation
9
+ */
10
+ export interface MoveState {
11
+ /** Coordinate at the start of the drag */
12
+ startLngLat: {
13
+ lng: number;
14
+ lat: number;
15
+ };
16
+ /** IDs of the features being dragged */
17
+ featureIds: string[];
18
+ /** Feature coordinates at the start */
19
+ initialCoordinates: Map<string, FeatureCoordinates>;
20
+ }
21
+ /**
22
+ * Start a move drag of the given features
23
+ */
24
+ export declare function startMoveDrag(event: DragNormalizedEvent, featureIds: string[], store: DragStore): MoveDrag;
@@ -0,0 +1,59 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { mapCoordinatesDeep } from '../../../shared/utils/coordinates.js';
4
+ import { dragStartLngLat } from './operation.js';
5
+ /**
6
+ * Translate coordinates
7
+ *
8
+ * Because it uses a shared traversal that does not depend on nesting depth, Multi geometries
9
+ * (MultiPolygon nests 4 levels deep) can be moved as-is.
10
+ */
11
+ function translateCoordinates(coords, dx, dy) {
12
+ return mapCoordinatesDeep(coords, (coord) => [coord[0] + dx, coord[1] + dy]);
13
+ }
14
+ /** @internal */
15
+ export class MoveDrag {
16
+ constructor(state) {
17
+ Object.defineProperty(this, "state", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: state
22
+ });
23
+ Object.defineProperty(this, "type", {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: 'move'
28
+ });
29
+ }
30
+ update(event, store, writes) {
31
+ const dx = event.lngLat.lng - this.state.startLngLat.lng;
32
+ const dy = event.lngLat.lat - this.state.startLngLat.lat;
33
+ for (const id of this.state.featureIds) {
34
+ const feature = store.getFeature(id);
35
+ const initialCoords = this.state.initialCoordinates.get(id);
36
+ if (feature && initialCoords) {
37
+ const newCoords = translateCoordinates(initialCoords, dx, dy);
38
+ writes.write(store, id, { coordinates: newCoords });
39
+ }
40
+ }
41
+ }
42
+ }
43
+ /**
44
+ * Start a move drag of the given features
45
+ */
46
+ export function startMoveDrag(event, featureIds, store) {
47
+ const initialCoordinates = new Map();
48
+ for (const id of featureIds) {
49
+ const feature = store.getFeature(id);
50
+ if (feature) {
51
+ initialCoordinates.set(id, JSON.parse(JSON.stringify(feature.coordinates)));
52
+ }
53
+ }
54
+ return new MoveDrag({
55
+ startLngLat: dragStartLngLat(event),
56
+ featureIds: [...featureIds],
57
+ initialCoordinates,
58
+ });
59
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The shape shared by the drag operations of select mode
3
+ *
4
+ * Each kind of drag (move, resize, rotate, vertex, midpoint, radius, auxiliary handle) is one
5
+ * DragOperation. SelectModeDragHandler decides which kind a drag is, starts it, and forwards
6
+ * every frame to it. The operation computes the new values and writes them through
7
+ * IntermediateWrites, which keeps what a commit or an abort needs.
8
+ */
9
+ import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
10
+ import type { Feature } from '../../../store/types.js';
11
+ import type { ModeContext } from '../../handler.js';
12
+ /** The Store a drag writes to */
13
+ export type DragStore = ModeContext['store'];
14
+ /**
15
+ * The selection scope of the draw instance the drag belongs to (the resize and rotate
16
+ * strategies of custom types, and the auxiliary handle providers). Null before a drag starts
17
+ */
18
+ export type DragScope = ModeContext['selectionScope'] | null;
19
+ /**
20
+ * The drag start position (the exact position before the 3-pixel movement)
21
+ */
22
+ export declare function dragStartLngLat(event: DragNormalizedEvent): {
23
+ lng: number;
24
+ lat: number;
25
+ };
26
+ /**
27
+ * The selected features, with group / layer selections resolved to their member features
28
+ * (so that a group is moved / resized / rotated as one)
29
+ */
30
+ export declare function selectedFeaturesOf(store: DragStore): Feature[];
@@ -0,0 +1,18 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { getSelectedFeatureIds } from '../../../view/ui/helper.js';
4
+ /**
5
+ * The drag start position (the exact position before the 3-pixel movement)
6
+ */
7
+ export function dragStartLngLat(event) {
8
+ return event.dragStartLngLat ?? event.lngLat;
9
+ }
10
+ /**
11
+ * The selected features, with group / layer selections resolved to their member features
12
+ * (so that a group is moved / resized / rotated as one)
13
+ */
14
+ export function selectedFeaturesOf(store) {
15
+ return getSelectedFeatureIds(store)
16
+ .map((id) => store.getFeature(id))
17
+ .filter((f) => f !== undefined);
18
+ }
@@ -0,0 +1,15 @@
1
+ import type { Coordinate } from '../../../store/types.js';
2
+ import type { DragStore } from './operation.js';
3
+ /**
4
+ * State of a Circle radius change operation
5
+ */
6
+ export interface RadiusState {
7
+ /** ID of the feature being operated on */
8
+ featureId: string;
9
+ /** Center coordinate of the circle */
10
+ center: Coordinate;
11
+ }
12
+ /**
13
+ * Start a radius drag. Returns null when the feature is not a Circle
14
+ */
15
+ export declare function startRadiusDrag(featureId: string, store: DragStore): RadiusDrag | null;
@@ -0,0 +1,49 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { haversineDistanceMeters, initialBearingDegrees } from '../../../geometry/index.js';
4
+ /** @internal */
5
+ export class RadiusDrag {
6
+ constructor(state) {
7
+ Object.defineProperty(this, "state", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: state
12
+ });
13
+ Object.defineProperty(this, "type", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: 'radius'
18
+ });
19
+ }
20
+ update(event, store, writes) {
21
+ const feature = store.getFeature(this.state.featureId);
22
+ if (feature?.type !== 'Circle')
23
+ return;
24
+ const { center } = this.state;
25
+ const mousePoint = [event.lngLat.lng, event.lngLat.lat];
26
+ // Take the distance between the mouse position and the center as the new radius
27
+ const newRadiusMeters = haversineDistanceMeters(center, mousePoint);
28
+ // The great-circle bearing of the radius change handle. The handle is placed with
29
+ // destinationPoint, the inverse of this bearing, so it stays under the pointer
30
+ const newAngle = initialBearingDegrees(center, mousePoint);
31
+ const updates = {
32
+ properties: {
33
+ ...feature.properties,
34
+ radiusMeters: newRadiusMeters,
35
+ radiusHandleAngle: newAngle,
36
+ },
37
+ };
38
+ writes.write(store, this.state.featureId, updates);
39
+ }
40
+ }
41
+ /**
42
+ * Start a radius drag. Returns null when the feature is not a Circle
43
+ */
44
+ export function startRadiusDrag(featureId, store) {
45
+ const feature = store.getFeature(featureId);
46
+ if (feature?.type !== 'Circle')
47
+ return null;
48
+ return new RadiusDrag({ featureId, center: feature.coordinates });
49
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Transform drags: resize and rotate the selection with its bounding box handles
3
+ */
4
+ import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
5
+ import type { HandleType } from '../../../shared/config/constants.js';
6
+ import type { Feature } from '../../../store/types.js';
7
+ import type { BoundingBoxCoords } from '../../../view/ui/selection-ui/index.js';
8
+ import type { ModeContext } from '../../handler.js';
9
+ import type { DragScope, DragStore } from './operation.js';
10
+ /**
11
+ * Start a resize drag from a bounding box handle
12
+ */
13
+ export declare function startResizeDrag(event: DragNormalizedEvent, handle: HandleType, bbox: BoundingBoxCoords, features: Feature[], map: ModeContext['map'], scope: DragScope): ResizeDrag;
14
+ /**
15
+ * Start a rotate drag from the rotation handle, and set the DragState it draws from
16
+ */
17
+ export declare function startRotateDrag(event: DragNormalizedEvent, bbox: BoundingBoxCoords, features: Feature[], store: DragStore, scope: DragScope): RotateDrag;
@@ -0,0 +1,155 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { computeResize, startResize } from '../../../operations/resize.js';
4
+ import { computeRotation, getRotationDelta, startRotation } from '../../../operations/rotate.js';
5
+ import { computeBoundingBox } from '../../../view/ui/selection-ui/index.js';
6
+ import { dragStartLngLat, selectedFeaturesOf } from './operation.js';
7
+ // === Resize operation ===
8
+ /** @internal */
9
+ export class ResizeDrag {
10
+ constructor(state, scope) {
11
+ Object.defineProperty(this, "state", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: state
16
+ });
17
+ Object.defineProperty(this, "scope", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: scope
22
+ });
23
+ Object.defineProperty(this, "type", {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: 'resize'
28
+ });
29
+ }
30
+ update(event, store, writes) {
31
+ // Compute the resize for each feature
32
+ for (const feature of selectedFeaturesOf(store)) {
33
+ const resizeResults = computeResize(this.state, event.lngLat, [feature], this.scope?.extensions);
34
+ const result = resizeResults.get(feature.id);
35
+ if (result) {
36
+ const updates = { coordinates: result.coordinates };
37
+ // Update the scale property when there is one (Text, Image, etc.)
38
+ if (result.scale !== undefined) {
39
+ updates.properties = {
40
+ ...feature.properties,
41
+ scale: result.scale,
42
+ };
43
+ }
44
+ // For a Circle, also update the radiusMeters property
45
+ if (result.radiusMeters !== undefined && feature.type === 'Circle') {
46
+ updates.properties = {
47
+ ...feature.properties,
48
+ radiusMeters: result.radiusMeters,
49
+ };
50
+ }
51
+ // For a custom resize, also update the width / height properties (Note, etc.)
52
+ if (result.width !== undefined || result.height !== undefined) {
53
+ updates.properties = {
54
+ ...feature.properties,
55
+ ...(result.width !== undefined && { width: result.width }),
56
+ ...(result.height !== undefined && { height: result.height }),
57
+ };
58
+ }
59
+ writes.write(store, feature.id, updates);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ /**
65
+ * Start a resize drag from a bounding box handle
66
+ */
67
+ export function startResizeDrag(event, handle, bbox, features, map, scope) {
68
+ // A box thinner than 1 pixel on screen is not stretched along that axis (converted into
69
+ // Web Mercator world units at the current zoom)
70
+ const zoom = map.getZoom?.();
71
+ const tileSize = scope?.extensions.getTileSize() ?? 512;
72
+ const minAxisExtent = Number.isFinite(zoom) ? 1 / (tileSize * 2 ** zoom) : 0;
73
+ const state = startResize(handle, dragStartLngLat(event), bbox, features, scope?.extensions, minAxisExtent);
74
+ return new ResizeDrag(state, scope);
75
+ }
76
+ // === Rotate operation ===
77
+ /** @internal */
78
+ export class RotateDrag {
79
+ constructor(state) {
80
+ Object.defineProperty(this, "state", {
81
+ enumerable: true,
82
+ configurable: true,
83
+ writable: true,
84
+ value: state
85
+ });
86
+ Object.defineProperty(this, "type", {
87
+ enumerable: true,
88
+ configurable: true,
89
+ writable: true,
90
+ value: 'rotate'
91
+ });
92
+ }
93
+ update(event, store, writes) {
94
+ const rotateResults = computeRotation(this.state, event.lngLat, selectedFeaturesOf(store));
95
+ for (const [id, result] of rotateResults) {
96
+ const feature = store.getFeature(id);
97
+ if (feature) {
98
+ const updates = { coordinates: result.coordinates };
99
+ // Update the rotation property when there is one (Text, Image, Note, etc.)
100
+ if (result.rotation !== undefined) {
101
+ updates.properties = {
102
+ ...feature.properties,
103
+ rotation: result.rotation,
104
+ };
105
+ }
106
+ writes.write(store, id, updates);
107
+ }
108
+ }
109
+ // Update the rotation angle (for drawing the bbox during the rotation)
110
+ const currentAngle = getRotationDelta(this.state, event.lngLat);
111
+ const currentDragState = store.getDragState();
112
+ if (currentDragState?.rotateInfo) {
113
+ store.setDragState({
114
+ ...currentDragState,
115
+ rotateInfo: {
116
+ ...currentDragState.rotateInfo,
117
+ currentAngle,
118
+ },
119
+ });
120
+ }
121
+ }
122
+ }
123
+ /**
124
+ * Start a rotate drag from the rotation handle, and set the DragState it draws from
125
+ */
126
+ export function startRotateDrag(event, bbox, features, store, scope) {
127
+ const drag = new RotateDrag(startRotation(dragStartLngLat(event), bbox, features, scope?.extensions));
128
+ // On a multiple selection, also save the initialBbox of each feature
129
+ let initialFeatureBboxes;
130
+ if (features.length > 1) {
131
+ initialFeatureBboxes = new Map();
132
+ for (const feature of features) {
133
+ const featureBbox = computeBoundingBox(feature, scope?.extensions);
134
+ if (featureBbox) {
135
+ initialFeatureBboxes.set(feature.id, featureBbox);
136
+ }
137
+ }
138
+ }
139
+ // Save the bbox at the start of the rotation (for drawing the bbox during the rotation)
140
+ store.setDragState({
141
+ operation: 'rotate',
142
+ rotateInfo: {
143
+ initialBbox: {
144
+ topLeft: bbox.topLeft,
145
+ topRight: bbox.topRight,
146
+ bottomRight: bbox.bottomRight,
147
+ bottomLeft: bbox.bottomLeft,
148
+ center: bbox.center,
149
+ },
150
+ initialFeatureBboxes,
151
+ currentAngle: 0,
152
+ },
153
+ });
154
+ return drag;
155
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Vertex drags: move vertices, and insert a vertex by dragging a midpoint
3
+ */
4
+ import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
5
+ import type { VertexRef } from '../../../store/types.js';
6
+ import type { ModeContext } from '../../handler.js';
7
+ import type { DragStore } from './operation.js';
8
+ /**
9
+ * Start a vertex drag, and set the DragState and the followed vertices it draws from. Returns
10
+ * null when the feature or the vertex is gone
11
+ */
12
+ export declare function startVertexDrag(event: DragNormalizedEvent, featureId: string, vertexRef: VertexRef, context: ModeContext): VertexDrag | null;
13
+ /**
14
+ * Start a midpoint drag: insert a vertex at the midpoint and continue as a move of that
15
+ * vertex. Returns null when the feature is gone
16
+ */
17
+ export declare function startMidpointDrag(event: DragNormalizedEvent, featureId: string, after: VertexRef, store: DragStore): VertexDrag | null;
@@ -0,0 +1,163 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { collectSharedVertexMoves } from '../../../operations/shared-vertex.js';
4
+ import { addVertex, computeVertexMove, startVertexMove } from '../../../operations/vertex.js';
5
+ import { hasVertexRef } from '../../../shared/utils/vertex-ref.js';
6
+ import { dragStartLngLat } from './operation.js';
7
+ /**
8
+ * Whether the modifier key that temporarily disables shared-vertex following is held down
9
+ *
10
+ * The temporary-disable key is shared with snapping (options.snap.disableKey, 'alt' by default).
11
+ * Holding it down when starting a drag escapes to a solitary move for that one drag only.
12
+ *
13
+ * The decision looks only at the normalized modifier keys of the drag start event (core does not
14
+ * deal with raw DOM events). Pressing or releasing the key mid-drag does not change the set.
15
+ * When disableKey is 'none', no modifier-key-based temporary disabling is performed.
16
+ */
17
+ function isSharedVertexDragSuppressed(event, context) {
18
+ const disableKey = context.snapOptions?.disableKey ?? 'alt';
19
+ if (disableKey === 'none')
20
+ return false;
21
+ return event.modifiers?.[disableKey] === true;
22
+ }
23
+ /**
24
+ * Reflect a vertex move state into the Store (an intermediate update during the drag; the
25
+ * spatial index follows the Store)
26
+ */
27
+ function applyVertexMove(state, lngLat, store, writes) {
28
+ const feature = store.getFeature(state.featureId);
29
+ if (!feature)
30
+ return;
31
+ const newCoords = computeVertexMove(state, lngLat, feature);
32
+ writes.write(store, state.featureId, { coordinates: newCoords });
33
+ }
34
+ /**
35
+ * A vertex move. A midpoint drag continues as a vertex move of the vertex it added, and is
36
+ * handled the same way
37
+ *
38
+ * @internal
39
+ */
40
+ export class VertexDrag {
41
+ constructor(type, state,
42
+ /**
43
+ * Vertex move states of the other features that follow along during a shared-vertex move
44
+ *
45
+ * Determined at the start of a vertex drag, only when options.topology.sharedVertexDrag is
46
+ * enabled. It is not re-searched during the drag (to avoid interfering with other features
47
+ * such as snapping).
48
+ */
49
+ followers = []) {
50
+ Object.defineProperty(this, "type", {
51
+ enumerable: true,
52
+ configurable: true,
53
+ writable: true,
54
+ value: type
55
+ });
56
+ Object.defineProperty(this, "state", {
57
+ enumerable: true,
58
+ configurable: true,
59
+ writable: true,
60
+ value: state
61
+ });
62
+ Object.defineProperty(this, "followers", {
63
+ enumerable: true,
64
+ configurable: true,
65
+ writable: true,
66
+ value: followers
67
+ });
68
+ }
69
+ update(event, store, writes) {
70
+ const feature = store.getFeature(this.state.featureId);
71
+ if (!feature)
72
+ return;
73
+ const newCoords = computeVertexMove(this.state, event.lngLat, feature);
74
+ writes.write(store, this.state.featureId, { coordinates: newCoords });
75
+ // Preview update for the features following along through a shared vertex. They are written
76
+ // one at a time in the same manner as the main one (an intermediate updateFeature).
77
+ // The commit is the single transaction at the end of the drag.
78
+ for (const state of this.followers) {
79
+ applyVertexMove(state, event.lngLat, store, writes);
80
+ }
81
+ }
82
+ }
83
+ /**
84
+ * Start a vertex drag, and set the DragState and the followed vertices it draws from. Returns
85
+ * null when the feature or the vertex is gone
86
+ */
87
+ export function startVertexDrag(event, featureId, vertexRef, context) {
88
+ const { store, spatialIndex } = context;
89
+ const feature = store.getFeature(featureId);
90
+ if (!feature)
91
+ return null;
92
+ const startLngLat = dragStartLngLat(event);
93
+ // Check the currently selected vertices
94
+ const selectedVertices = store.getSelectedVertices();
95
+ let vertexRefsToMove;
96
+ if (selectedVertices &&
97
+ selectedVertices.featureId === featureId &&
98
+ hasVertexRef(selectedVertices.vertexIndices, vertexRef)) {
99
+ // If the vertex being dragged is one of the selected vertices, move every selected vertex
100
+ // (a multiple selection spanning rings and parts can be moved as-is too)
101
+ vertexRefsToMove = selectedVertices.vertexIndices;
102
+ }
103
+ else {
104
+ // Otherwise move only the vertex being dragged
105
+ vertexRefsToMove = [vertexRef];
106
+ }
107
+ // Simultaneous movement of shared vertices (options.topology.sharedVertexDrag).
108
+ // The following set is determined at the start and is not re-searched afterwards.
109
+ // If the temporary-disable modifier key (the same key as for snapping) is held down, no set
110
+ // is built.
111
+ let sharedVertexStates = [];
112
+ if (context.topology?.sharedVertexDrag && !isSharedVertexDragSuppressed(event, context)) {
113
+ const shared = collectSharedVertexMoves({
114
+ store,
115
+ spatialIndex,
116
+ feature,
117
+ vertexRefs: vertexRefsToMove,
118
+ startLngLat,
119
+ });
120
+ vertexRefsToMove = shared.mainRefs;
121
+ sharedVertexStates = shared.followers;
122
+ }
123
+ const state = startVertexMove(feature, vertexRefsToMove, startLngLat);
124
+ if (!state)
125
+ return null;
126
+ // Write the following vertices into the UI state so they are drawn in a style distinct from
127
+ // the selected vertices. They are set back to null when the drag ends (endDrag / reset).
128
+ store.setFollowedVertices?.(sharedVertexStates.map((followerState) => ({
129
+ featureId: followerState.featureId,
130
+ vertexIndices: followerState.vertexIndices,
131
+ })));
132
+ // Set the DragState (activeVertex is the vertex the drag started from)
133
+ store.setDragState({
134
+ operation: 'vertex',
135
+ activeVertex: vertexRef,
136
+ activeFeatureId: featureId,
137
+ });
138
+ return new VertexDrag('vertex', state, sharedVertexStates);
139
+ }
140
+ /**
141
+ * Start a midpoint drag: insert a vertex at the midpoint and continue as a move of that
142
+ * vertex. Returns null when the feature is gone
143
+ */
144
+ export function startMidpointDrag(event, featureId, after, store) {
145
+ const feature = store.getFeature(featureId);
146
+ if (!feature)
147
+ return null;
148
+ const startLngLat = dragStartLngLat(event);
149
+ // Add the position of the midpoint as a new vertex
150
+ const newCoord = [startLngLat.lng, startLngLat.lat];
151
+ const newCoords = addVertex(feature, after, newCoord);
152
+ store.updateFeature(featureId, { coordinates: newCoords });
153
+ // The added vertex is afterIndex + 1 in the same part and same ring
154
+ const newVertexRef = { ...after, index: after.index + 1 };
155
+ // Continue as a move operation on the added vertex
156
+ const updatedFeature = store.getFeature(featureId);
157
+ if (!updatedFeature)
158
+ return null;
159
+ const state = startVertexMove(updatedFeature, [newVertexRef], startLngLat);
160
+ if (!state)
161
+ return null;
162
+ return new VertexDrag('midpoint', state);
163
+ }
@@ -0,0 +1 @@
1
+ export {};