@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,140 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Property helpers
5
+ *
6
+ * Utilities for handling the properties of a feature (feature.properties) in a type-safe way.
7
+ *
8
+ * This library's own data such as createdZoom/rotation/scale has to round-trip through
9
+ * GeoJSON with the maplibre-gl-draw: prefix, so it is held inside feature.properties under
10
+ * keys without the prefix.
11
+ */
12
+ import { INTERNAL_PROPERTIES } from '../config/constants.js';
13
+ /**
14
+ * Gets the zoom at which the feature was created (`properties.createdZoom`)
15
+ *
16
+ * The drawing modes record it. Line widths follow the map from that zoom, and an Image is
17
+ * drawn at its size in pixels at that zoom (see {@link FeatureStyle.strokeWidth}).
18
+ *
19
+ * @returns The zoom, or undefined when the feature has none (it then keeps the same width on
20
+ * the screen)
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const feature = draw.getFeature(id);
25
+ * const zoom = feature ? getCreatedZoom(feature) : undefined;
26
+ * ```
27
+ */
28
+ export function getCreatedZoom(feature) {
29
+ const value = feature.properties[INTERNAL_PROPERTIES.CREATED_ZOOM];
30
+ return typeof value === 'number' ? value : undefined;
31
+ }
32
+ /**
33
+ * Sets the zoom at which a feature was created, in a `properties` object
34
+ *
35
+ * Use it on the properties of a {@link FeatureInput} before `addFeature`, so that the new
36
+ * feature scales with the map from the current zoom like a drawn one.
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const properties: Record<string, unknown> = {};
41
+ * setCreatedZoom(properties, map.getZoom());
42
+ * draw.addFeature({
43
+ * type: 'LineString',
44
+ * coordinates: [
45
+ * [139.76, 35.68],
46
+ * [139.78, 35.69],
47
+ * ],
48
+ * properties,
49
+ * });
50
+ * ```
51
+ */
52
+ export function setCreatedZoom(properties, zoom) {
53
+ properties[INTERNAL_PROPERTIES.CREATED_ZOOM] = zoom;
54
+ }
55
+ /**
56
+ * Gets the rotation of the feature in degrees (`properties.rotation`, 0 when unset)
57
+ */
58
+ export function getRotation(feature) {
59
+ const value = feature.properties[INTERNAL_PROPERTIES.ROTATION];
60
+ return typeof value === 'number' ? value : 0;
61
+ }
62
+ /**
63
+ * Sets the rotation in degrees, in a `properties` object (the properties of a
64
+ * {@link FeatureInput} before `addFeature`, say)
65
+ */
66
+ export function setRotation(properties, rotation) {
67
+ properties[INTERNAL_PROPERTIES.ROTATION] = rotation;
68
+ }
69
+ /**
70
+ * Gets the scale of the feature (`properties.scale`, 1 when unset), which resizing an Image
71
+ * changes
72
+ */
73
+ export function getScale(feature) {
74
+ const value = feature.properties[INTERNAL_PROPERTIES.SCALE];
75
+ return typeof value === 'number' ? value : 1;
76
+ }
77
+ /**
78
+ * Sets the scale of the feature
79
+ */
80
+ export function setScale(properties, scale) {
81
+ properties[INTERNAL_PROPERTIES.SCALE] = scale;
82
+ }
83
+ /**
84
+ * Gets the name of the feature
85
+ */
86
+ export function getFeatureName(feature) {
87
+ const value = feature.properties.name;
88
+ return typeof value === 'string' ? value : undefined;
89
+ }
90
+ /**
91
+ * Sets the name of the feature
92
+ */
93
+ export function setFeatureName(properties, name) {
94
+ properties.name = name;
95
+ }
96
+ /**
97
+ * Gets the description of the feature
98
+ */
99
+ export function getFeatureDescription(feature) {
100
+ const value = feature.properties.description;
101
+ return typeof value === 'string' ? value : undefined;
102
+ }
103
+ /**
104
+ * Sets the description of the feature
105
+ */
106
+ export function setFeatureDescription(properties, description) {
107
+ properties.description = description;
108
+ }
109
+ /**
110
+ * Gets the properties of an Image feature in a type-safe way.
111
+ *
112
+ * It validates and extracts each field from feature.properties (Record<string, unknown>).
113
+ * Use it instead of a dangerous cast such as `as unknown as ImageProperties`.
114
+ */
115
+ export function getImageProperties(feature) {
116
+ const p = feature.properties;
117
+ return {
118
+ imageFileId: typeof p.imageFileId === 'string' ? p.imageFileId : '',
119
+ imageWidth: typeof p.imageWidth === 'number' ? p.imageWidth : 0,
120
+ imageHeight: typeof p.imageHeight === 'number' ? p.imageHeight : 0,
121
+ createdZoom: typeof p.createdZoom === 'number' ? p.createdZoom : 0,
122
+ rotation: typeof p.rotation === 'number' ? p.rotation : undefined,
123
+ scale: typeof p.scale === 'number' ? p.scale : undefined,
124
+ };
125
+ }
126
+ /**
127
+ * Gets the radius (meters) of a Circle feature. undefined when it is unset or invalid.
128
+ */
129
+ export function getCircleRadius(feature) {
130
+ const value = feature.properties.radiusMeters;
131
+ return typeof value === 'number' ? value : undefined;
132
+ }
133
+ /**
134
+ * Gets the angle (degrees) of the radius handle of a Circle feature. The default is 135
135
+ * (toward the southwest).
136
+ */
137
+ export function getRadiusHandleAngle(feature) {
138
+ const value = feature.properties.radiusHandleAngle;
139
+ return typeof value === 'number' ? value : 135;
140
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Vertex reference utilities
3
+ *
4
+ * A vertex is pointed at by the triple of part number + ring number + vertex index
5
+ * (VertexRef), so comparison and lookup use the functions here rather than numeric === or
6
+ * Array#includes.
7
+ *
8
+ * part is optional, and when omitted it means 0 (the first part). The vertex reference of a
9
+ * single geometry has no part, so comparison treats undefined and 0 as the same.
10
+ */
11
+ import type { VertexRef } from '../types/model.js';
12
+ /**
13
+ * Gets the part number of a vertex reference (0 when omitted)
14
+ */
15
+ export declare function getVertexPart(ref: VertexRef): number;
16
+ /**
17
+ * Whether two vertex references point at the same vertex
18
+ */
19
+ export declare function isSameVertexRef(a: VertexRef, b: VertexRef): boolean;
20
+ /**
21
+ * Whether an array of vertex references contains the given vertex
22
+ */
23
+ export declare function hasVertexRef(refs: readonly VertexRef[], ref: VertexRef): boolean;
@@ -0,0 +1,20 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Gets the part number of a vertex reference (0 when omitted)
5
+ */
6
+ export function getVertexPart(ref) {
7
+ return ref.part ?? 0;
8
+ }
9
+ /**
10
+ * Whether two vertex references point at the same vertex
11
+ */
12
+ export function isSameVertexRef(a, b) {
13
+ return getVertexPart(a) === getVertexPart(b) && a.ring === b.ring && a.index === b.index;
14
+ }
15
+ /**
16
+ * Whether an array of vertex references contains the given vertex
17
+ */
18
+ export function hasVertexRef(refs, ref) {
19
+ return refs.some((r) => isSameVertexRef(r, ref));
20
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Creates the snapping candidate registry of one draw instance
5
+ *
6
+ * @internal
7
+ */
8
+ export function createSnapTargetsRegistry() {
9
+ const providers = new Map();
10
+ return {
11
+ register(type, provider) {
12
+ providers.set(type, provider);
13
+ return () => {
14
+ if (providers.get(type) === provider)
15
+ providers.delete(type);
16
+ };
17
+ },
18
+ get: (type) => providers.get(type),
19
+ clear: () => providers.clear(),
20
+ };
21
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,61 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Distance computation for snapping
5
+ *
6
+ * The tolerance is held in pixels. The conversion between pixels and degrees depends
7
+ * on the latitude and the zoom (in Mercator, 1 pixel in the longitude direction is
8
+ * constant regardless of the latitude, but in the latitude direction it shrinks by
9
+ * cos(lat)). Distances are therefore also converted into pixels before being
10
+ * compared.
11
+ */
12
+ import { DEFAULT_TILE_SIZE, pixelsToDegreesLat, pixelsToDegreesLng } from '../shared/math/index.js';
13
+ /**
14
+ * Computes the degrees per pixel from the latitude of the cursor position and the
15
+ * zoom
16
+ *
17
+ * @internal
18
+ */
19
+ export function degreesPerPixel(latitude, zoom, tileSize = DEFAULT_TILE_SIZE) {
20
+ return {
21
+ lng: pixelsToDegreesLng(1, latitude, zoom, tileSize),
22
+ lat: pixelsToDegreesLat(1, latitude, zoom, tileSize),
23
+ };
24
+ }
25
+ /**
26
+ * Computes the distance between 2 points in pixels
27
+ *
28
+ * @internal
29
+ */
30
+ export function distanceInPixels(a, b, perPixel) {
31
+ const dx = (a[0] - b[0]) / perPixel.lng;
32
+ const dy = (a[1] - b[1]) / perPixel.lat;
33
+ return Math.sqrt(dx * dx + dy * dy);
34
+ }
35
+ /**
36
+ * Computes the point on a segment closest to the cursor
37
+ *
38
+ * The projection is done in pixel space (staying in degree space would distort the
39
+ * longitude direction at high latitudes). The returned value never goes beyond the
40
+ * end points of the segment.
41
+ *
42
+ * @internal
43
+ */
44
+ export function nearestPointOnSegment(point, start, end, perPixel) {
45
+ const px = point[0] / perPixel.lng;
46
+ const py = point[1] / perPixel.lat;
47
+ const ax = start[0] / perPixel.lng;
48
+ const ay = start[1] / perPixel.lat;
49
+ const bx = end[0] / perPixel.lng;
50
+ const by = end[1] / perPixel.lat;
51
+ const dx = bx - ax;
52
+ const dy = by - ay;
53
+ const lengthSquared = dx * dx + dy * dy;
54
+ // A segment of length 0 is its start point itself
55
+ if (lengthSquared === 0) {
56
+ return [start[0], start[1]];
57
+ }
58
+ let t = ((px - ax) * dx + (py - ay) * dy) / lengthSquared;
59
+ t = Math.max(0, Math.min(1, t));
60
+ return [start[0] + t * (end[0] - start[0]), start[1] + t * (end[1] - start[1])];
61
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Snapping module
3
+ *
4
+ * It provides snapping (SnapService) and its extension point (SnapProvider).
5
+ * The replacement of the coordinates is done by InputRouter.
6
+ *
7
+ * Only the symbols that src/index.ts publishes are listed here (see "The public
8
+ * surface" in CONTRIBUTING.md). Internal code imports from the defining file.
9
+ */
10
+ export type { SnapIndicatorStyles } from './indicator.js';
11
+ export { DEFAULT_SNAP_GUIDE_LINE_STYLE, DEFAULT_SNAP_INDICATOR_STYLES } from './indicator.js';
12
+ export type { GuideSnapProviderDeps, GuideSnapProviderOptions } from './providers/guide.js';
13
+ export { createGuideSnapProvider } from './providers/guide.js';
14
+ export type { ResolvedSnapOptions, SnapCandidate, SnapContext, SnapDisableKey, SnapExcludeVertex, SnapLngLat, SnapOptions, SnapPointCandidate, SnapProvider, SnapProviderContext, SnapResult, SnapSegmentCandidate, SnapTarget, SnapTargetKind, SnapTargetSegment, } from './types.js';
@@ -0,0 +1,4 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ export { DEFAULT_SNAP_GUIDE_LINE_STYLE, DEFAULT_SNAP_INDICATOR_STYLES } from './indicator.js';
4
+ export { createGuideSnapProvider } from './providers/guide.js';
@@ -0,0 +1,19 @@
1
+ import type { PointStyle } from '../shared/types/style.js';
2
+ import type { SDFStrokeStyle } from '../view/renderers/line/sdf-line.js';
3
+ import type { SnapTargetKind } from './types.js';
4
+ /**
5
+ * The symbol drawn at the snapped point, per kind of snap target.
6
+ */
7
+ export type SnapIndicatorStyles = Record<SnapTargetKind, PointStyle>;
8
+ /**
9
+ * The style of the guide line drawn under the symbol while a guide is snapped to: 1 px, the
10
+ * snap color `#00C7BE`, dashed `[4, 4]` (distinct from the `[8, 6]` of the drawing in
11
+ * progress).
12
+ */
13
+ export declare const DEFAULT_SNAP_GUIDE_LINE_STYLE: SDFStrokeStyle;
14
+ /**
15
+ * The symbols drawn at the snapped point, all in the snap color `#00C7BE`: `vertex` an
16
+ * outlined circle of 14 px, `edge` an outlined square of 12 px, `intersection` a filled
17
+ * circle of 8 px and `guide` an outlined circle of 10 px.
18
+ */
19
+ export declare const DEFAULT_SNAP_INDICATOR_STYLES: SnapIndicatorStyles;
@@ -0,0 +1,145 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /** The snapping color (#00C7BE) */
4
+ const SNAP_COLOR = [0.0, 0.78, 0.745, 1.0];
5
+ const VERTEX_STYLE = {
6
+ shape: 'circle',
7
+ size: 14,
8
+ fillColor: SNAP_COLOR,
9
+ fillOpacity: 0,
10
+ strokeColor: SNAP_COLOR,
11
+ strokeWidth: 2,
12
+ strokeOpacity: 1.0,
13
+ };
14
+ const EDGE_STYLE = {
15
+ shape: 'square',
16
+ size: 12,
17
+ fillColor: SNAP_COLOR,
18
+ fillOpacity: 0,
19
+ strokeColor: SNAP_COLOR,
20
+ strokeWidth: 2,
21
+ strokeOpacity: 1.0,
22
+ };
23
+ /**
24
+ * The symbol of an intersection
25
+ *
26
+ * To tell it apart from a vertex (a circle with an outline only), it is a slightly
27
+ * smaller filled circle. The shapes PointShapeRenderer can actually draw are the
28
+ * circle and the square, so a diamond cannot be used.
29
+ */
30
+ const INTERSECTION_STYLE = {
31
+ shape: 'circle',
32
+ size: 8,
33
+ fillColor: SNAP_COLOR,
34
+ fillOpacity: 1.0,
35
+ strokeColor: SNAP_COLOR,
36
+ strokeWidth: 0,
37
+ strokeOpacity: 0,
38
+ };
39
+ /**
40
+ * The symbol of a guide
41
+ *
42
+ * It appears together with the guide line (dashed), so the point is a smallish circle
43
+ * with an outline.
44
+ */
45
+ const GUIDE_STYLE = {
46
+ shape: 'circle',
47
+ size: 10,
48
+ fillColor: SNAP_COLOR,
49
+ fillOpacity: 0,
50
+ strokeColor: SNAP_COLOR,
51
+ strokeWidth: 2,
52
+ strokeOpacity: 1.0,
53
+ };
54
+ /**
55
+ * The dash pattern of a guide line (told apart from the [8, 6] of Tentative)
56
+ */
57
+ const GUIDE_DASH_ARRAY = [4, 4];
58
+ /**
59
+ * The style of the guide line drawn under the symbol while a guide is snapped to: 1 px, the
60
+ * snap color `#00C7BE`, dashed `[4, 4]` (distinct from the `[8, 6]` of the drawing in
61
+ * progress).
62
+ */
63
+ export const DEFAULT_SNAP_GUIDE_LINE_STYLE = {
64
+ width: 1,
65
+ color: SNAP_COLOR,
66
+ opacity: 1.0,
67
+ lineStyle: 'dashed',
68
+ dashArray: GUIDE_DASH_ARRAY,
69
+ };
70
+ /**
71
+ * The symbols drawn at the snapped point, all in the snap color `#00C7BE`: `vertex` an
72
+ * outlined circle of 14 px, `edge` an outlined square of 12 px, `intersection` a filled
73
+ * circle of 8 px and `guide` an outlined circle of 10 px.
74
+ */
75
+ export const DEFAULT_SNAP_INDICATOR_STYLES = {
76
+ vertex: VERTEX_STYLE,
77
+ edge: EDGE_STYLE,
78
+ intersection: INTERSECTION_STYLE,
79
+ guide: GUIDE_STYLE,
80
+ };
81
+ /**
82
+ * The renderer of the snapping indicator
83
+ *
84
+ * @internal
85
+ */
86
+ export class SnapIndicatorRenderer {
87
+ constructor(deps) {
88
+ Object.defineProperty(this, "name", {
89
+ enumerable: true,
90
+ configurable: true,
91
+ writable: true,
92
+ value: 'snap-indicator'
93
+ });
94
+ Object.defineProperty(this, "order", {
95
+ enumerable: true,
96
+ configurable: true,
97
+ writable: true,
98
+ value: 'overlay'
99
+ });
100
+ Object.defineProperty(this, "snapService", {
101
+ enumerable: true,
102
+ configurable: true,
103
+ writable: true,
104
+ value: void 0
105
+ });
106
+ Object.defineProperty(this, "styles", {
107
+ enumerable: true,
108
+ configurable: true,
109
+ writable: true,
110
+ value: void 0
111
+ });
112
+ Object.defineProperty(this, "guideLineStyle", {
113
+ enumerable: true,
114
+ configurable: true,
115
+ writable: true,
116
+ value: void 0
117
+ });
118
+ this.snapService = deps.snapService;
119
+ this.styles = { ...DEFAULT_SNAP_INDICATOR_STYLES, ...deps.styles };
120
+ this.guideLineStyle = deps.guideLineStyle ?? DEFAULT_SNAP_GUIDE_LINE_STYLE;
121
+ }
122
+ onAdd(_gl, _map) {
123
+ // It uses the existing drawing primitives, so it holds no GPU resources of its own
124
+ }
125
+ draw(projectionData, zoom, context) {
126
+ const result = this.snapService.getResult();
127
+ if (!result?.target)
128
+ return;
129
+ const target = result.target;
130
+ // For a guide, the guide line of the snapping target itself is shown dashed (laid
131
+ // under the symbol)
132
+ if (target.kind === 'guide' && target.segment) {
133
+ const line = [
134
+ [target.segment.start[0], target.segment.start[1]],
135
+ [target.segment.end[0], target.segment.end[1]],
136
+ ];
137
+ context.sdfLineRenderer.draw(line, this.guideLineStyle, { widthUnit: 'pixels', closed: false }, zoom, projectionData);
138
+ }
139
+ const style = this.styles[target.kind];
140
+ context.pointShapeRenderer.draw([result.lngLat.lng, result.lngLat.lat], style, zoom);
141
+ }
142
+ onRemove() {
143
+ // There are no resources to release
144
+ }
145
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Snapping providers for datasets (vertex, edge, intersection)
3
+ *
4
+ * They add the reference data imported from the library (datasets)
5
+ * as passive snapping targets. They never touch the data itself; they only read the
6
+ * features the dataset holds.
7
+ *
8
+ * The targets are only the displayed features of a displayed (visible) dataset.
9
+ * Whether it is interactive is not looked at (snapping works on what is visible).
10
+ *
11
+ * The candidates are listed in the same manner as the Store version
12
+ * (providers/store.ts): vertices are gathered with computeVertexHandles and edges
13
+ * with collectFeatureSegments. Both featureId and datasetId are attached to a
14
+ * candidate, and the vertex references of both ends are attached to an edge (tracing
15
+ * reads them).
16
+ *
17
+ * For intersections, the pairs of segments of "display x display" and
18
+ * "display x Store" are computed (Store x Store is the responsibility of
19
+ * providers/intersection.ts).
20
+ */
21
+ import type { DatasetManager } from '../../display/manager.js';
22
+ import { type Messages } from '../../messages.js';
23
+ import type { SpatialIndex } from '../../store/spatial/spatial-index.js';
24
+ import type { Store } from '../../store/store.js';
25
+ import type { BoundingBox, Feature } from '../../store/types.js';
26
+ import type { SnapTargetsRegistry } from '../custom-targets.js';
27
+ import type { SnapProvider } from '../types.js';
28
+ /**
29
+ * The dependencies of the providers for datasets
30
+ */
31
+ export interface DisplaySnapProviderDeps {
32
+ /** The manager of the datasets */
33
+ datasets: DatasetManager;
34
+ /** The Store (used as the counterpart of an intersection) */
35
+ store: Store;
36
+ /** The SpatialIndex (used as the counterpart of an intersection) */
37
+ spatialIndex: SpatialIndex;
38
+ /** Whether snapping to the data is enabled (options.datasets of SnapService) */
39
+ isEnabled: () => boolean;
40
+ /** The snapping candidates of the custom feature types of this draw instance */
41
+ snapTargets?: SnapTargetsRegistry;
42
+ /**
43
+ * The messages table the description of an intersection comes from (the same entry as
44
+ * an intersection originating from the Store; default: English)
45
+ */
46
+ messages?: Pick<Messages, 'snapIntersection'>;
47
+ }
48
+ /**
49
+ * The full set of providers that were built
50
+ */
51
+ export interface DisplaySnapProviders {
52
+ /** The vertex, edge and intersection providers */
53
+ providers: SnapProvider[];
54
+ /**
55
+ * Looks up a feature of a dataset
56
+ *
57
+ * This is the entry point through which tracing resolves the feature of a snapping
58
+ * target (it is wired to ModeContext.getDatasetFeature).
59
+ */
60
+ getFeature(datasetId: string, featureId: string): Feature | null;
61
+ /**
62
+ * Looks up the features of a displayed dataset that fall within an extent
63
+ *
64
+ * This is the entry point through which tracing gathers the material for the graph
65
+ * of edges (it is wired to ModeContext.getDatasetTraceFeatures).
66
+ */
67
+ queryFeatures(bbox: BoundingBox): Feature[];
68
+ }
69
+ /**
70
+ * Builds the snapping providers for datasets
71
+ */
72
+ export declare function createDisplaySnapProviders(deps: DisplaySnapProviderDeps): DisplaySnapProviders;