@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,337 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Default mapping of type names
5
+ */
6
+ const DEFAULT_TYPE_NAMES = {
7
+ Point: 'Point',
8
+ LineString: 'LineString',
9
+ Polygon: 'Polygon',
10
+ Circle: 'Circle',
11
+ Freehand: 'Freehand',
12
+ Image: 'Image',
13
+ };
14
+ /**
15
+ * Default Layer/Group names
16
+ */
17
+ const DEFAULT_LAYER_NAME = 'Layer';
18
+ const DEFAULT_GROUP_NAME = 'Group';
19
+ /**
20
+ * Counter keys of Layer/Group
21
+ *
22
+ * They share the same Map / Set as the counter keys of Feature (FeatureType).
23
+ */
24
+ const LAYER_COUNTER_KEY = 'Layer';
25
+ const GROUP_COUNTER_KEY = 'Group';
26
+ /**
27
+ * Default formatter
28
+ */
29
+ function defaultFormatter(typeName, number) {
30
+ return `${typeName} ${number}`;
31
+ }
32
+ /**
33
+ * Extracts the number from a name
34
+ */
35
+ function extractNumberFromName(name, typeName) {
36
+ // Escape the special characters
37
+ const escapedTypeName = typeName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
38
+ const regex = new RegExp(`^${escapedTypeName}\\s*(\\d+)$`);
39
+ const match = name.match(regex);
40
+ return match ? parseInt(match[1], 10) : null;
41
+ }
42
+ /**
43
+ * Normalizes an AutoNameConfig
44
+ */
45
+ export function normalizeAutoNameConfig(config) {
46
+ if (config === undefined || config === true) {
47
+ return { enabled: true };
48
+ }
49
+ if (config === false) {
50
+ return { enabled: false };
51
+ }
52
+ return config;
53
+ }
54
+ /**
55
+ * AutoNameGenerator
56
+ *
57
+ * A class that generates sequential numbers per Feature type.
58
+ * It accounts for the numbers of existing Features and starts from the next number.
59
+ * A number that has been used once is not reused even after deletion (it leaves gaps).
60
+ *
61
+ * The existing numbers are taken in with a single full scan per type, and after that only the
62
+ * increments are taken in by subscribing to the Store. Scanning everything on every call would
63
+ * make the case of generating one at a time, as in a bulk import, O(n^2).
64
+ *
65
+ * With this incremental approach, the number of a name that was added and then deleted before
66
+ * any generation happened is also recorded (with the old approach it could be reused after the
67
+ * deletion). This is an extension of the "a number used once is not reused" policy, and it can
68
+ * only work in the direction of increasing the gaps.
69
+ */
70
+ export class AutoNameGenerator {
71
+ constructor(store, config = true) {
72
+ Object.defineProperty(this, "store", {
73
+ enumerable: true,
74
+ configurable: true,
75
+ writable: true,
76
+ value: void 0
77
+ });
78
+ Object.defineProperty(this, "config", {
79
+ enumerable: true,
80
+ configurable: true,
81
+ writable: true,
82
+ value: void 0
83
+ });
84
+ /** Counter that remembers the largest number already generated per type */
85
+ Object.defineProperty(this, "counters", {
86
+ enumerable: true,
87
+ configurable: true,
88
+ writable: true,
89
+ value: new Map()
90
+ });
91
+ /** Counter keys whose full scan is done (Layer/Group go into the same Set) */
92
+ Object.defineProperty(this, "scannedTypes", {
93
+ enumerable: true,
94
+ configurable: true,
95
+ writable: true,
96
+ value: new Set()
97
+ });
98
+ /** Unsubscribe function of the Store subscription (null when not subscribed) */
99
+ Object.defineProperty(this, "unsubscribe", {
100
+ enumerable: true,
101
+ configurable: true,
102
+ writable: true,
103
+ value: null
104
+ });
105
+ this.store = store;
106
+ this.config = normalizeAutoNameConfig(config);
107
+ // When disabled, no name is generated, so there is no need to maintain the counters
108
+ if (this.config.enabled) {
109
+ this.unsubscribe = store.subscribe((changes) => {
110
+ this.observeChanges(changes);
111
+ });
112
+ }
113
+ }
114
+ /**
115
+ * Returns whether it is enabled
116
+ */
117
+ isEnabled() {
118
+ return this.config.enabled;
119
+ }
120
+ /**
121
+ * Unsubscribes from the Store
122
+ */
123
+ dispose() {
124
+ this.unsubscribe?.();
125
+ this.unsubscribe = null;
126
+ }
127
+ /**
128
+ * Generates an automatic name for the given type
129
+ *
130
+ * @returns The generated name, or undefined when it is disabled
131
+ */
132
+ generateName(featureType) {
133
+ if (!this.config.enabled) {
134
+ return undefined;
135
+ }
136
+ const typeName = this.getTypeName(featureType);
137
+ const nextNumber = this.findNextNumber(featureType, typeName);
138
+ const formatter = this.config.formatter ?? defaultFormatter;
139
+ return formatter(typeName, nextNumber);
140
+ }
141
+ /**
142
+ * Gets the type name
143
+ */
144
+ getTypeName(featureType) {
145
+ // Use a custom type name if there is one
146
+ if (this.config.typeNames && featureType in this.config.typeNames) {
147
+ return (this.config.typeNames[featureType] ?? featureType);
148
+ }
149
+ // Default type name
150
+ return DEFAULT_TYPE_NAMES[featureType] ?? featureType;
151
+ }
152
+ /**
153
+ * Gets the next number
154
+ *
155
+ * Increments the counter by 1 and returns it. The counter holds the largest existing number
156
+ * (the first full scan plus the increments after it), so the number of a deleted Feature is
157
+ * not reused and a gap appears.
158
+ */
159
+ findNextNumber(featureType, typeName) {
160
+ this.scanOnce(featureType, () => this.getMaxNumberFromFeatures(featureType, typeName));
161
+ const nextNumber = (this.counters.get(featureType) ?? 0) + 1;
162
+ this.counters.set(featureType, nextNumber);
163
+ return nextNumber;
164
+ }
165
+ /**
166
+ * Takes in the largest existing number only the first time a generation happens for that
167
+ * counter key
168
+ *
169
+ * From the second time onward the counter is maintained incrementally, so it does not scan.
170
+ */
171
+ scanOnce(counterKey, scan) {
172
+ if (this.scannedTypes.has(counterKey))
173
+ return;
174
+ this.scannedTypes.add(counterKey);
175
+ this.recordNumber(counterKey, scan());
176
+ }
177
+ /**
178
+ * Raises the counter up to number (a smaller value does not lower it)
179
+ */
180
+ recordNumber(counterKey, number) {
181
+ if (number > (this.counters.get(counterKey) ?? 0)) {
182
+ this.counters.set(counterKey, number);
183
+ }
184
+ }
185
+ /**
186
+ * Takes in the numbers of names from the changes of the Store
187
+ *
188
+ * The path that keeps the cost proportional to the number of changes and avoids scanning
189
+ * everything on every generation.
190
+ * Deletions are ignored (because a number used once is not reused).
191
+ */
192
+ observeChanges(changes) {
193
+ for (const feature of changes.features?.created ?? []) {
194
+ this.observeFeatureName(feature);
195
+ }
196
+ for (const { feature } of changes.features?.updated ?? []) {
197
+ this.observeFeatureName(feature);
198
+ }
199
+ const layerTypeName = this.getLayerTypeName();
200
+ for (const layer of changes.layers?.created ?? []) {
201
+ this.observeName(LAYER_COUNTER_KEY, layerTypeName, layer.name);
202
+ }
203
+ for (const { layer } of changes.layers?.updated ?? []) {
204
+ this.observeName(LAYER_COUNTER_KEY, layerTypeName, layer.name);
205
+ }
206
+ const groupTypeName = this.getGroupTypeName();
207
+ for (const group of changes.groups?.created ?? []) {
208
+ this.observeName(GROUP_COUNTER_KEY, groupTypeName, group.name);
209
+ }
210
+ for (const { group } of changes.groups?.updated ?? []) {
211
+ this.observeName(GROUP_COUNTER_KEY, groupTypeName, group.name);
212
+ }
213
+ }
214
+ /**
215
+ * Takes in the number from the name of a Feature
216
+ */
217
+ observeFeatureName(feature) {
218
+ const name = feature.properties?.name;
219
+ if (typeof name !== 'string')
220
+ return;
221
+ this.observeName(feature.type, this.getTypeName(feature.type), name);
222
+ }
223
+ /**
224
+ * Extracts the number from a name and takes it into the counter
225
+ */
226
+ observeName(counterKey, typeName, name) {
227
+ const number = extractNumberFromName(name, typeName);
228
+ if (number !== null)
229
+ this.recordNumber(counterKey, number);
230
+ }
231
+ /**
232
+ * Gets the type name of Layer
233
+ */
234
+ getLayerTypeName() {
235
+ return this.config.typeNames?.Layer ?? DEFAULT_LAYER_NAME;
236
+ }
237
+ /**
238
+ * Gets the type name of Group
239
+ */
240
+ getGroupTypeName() {
241
+ return this.config.typeNames?.Group ?? DEFAULT_GROUP_NAME;
242
+ }
243
+ /**
244
+ * Gets the largest number from the existing Features
245
+ */
246
+ getMaxNumberFromFeatures(featureType, typeName) {
247
+ const features = this.store.getAllFeatures();
248
+ let maxNumber = 0;
249
+ for (const feature of features) {
250
+ // Only features of the same type are considered
251
+ if (feature.type !== featureType) {
252
+ continue;
253
+ }
254
+ // Get the name property
255
+ const name = feature.properties?.name;
256
+ if (typeof name !== 'string') {
257
+ continue;
258
+ }
259
+ // Extract the number
260
+ const number = extractNumberFromName(name, typeName);
261
+ if (number !== null && number > maxNumber) {
262
+ maxNumber = number;
263
+ }
264
+ }
265
+ return maxNumber;
266
+ }
267
+ /**
268
+ * Generates the name of a new Layer
269
+ *
270
+ * A layer always has a name, so this never gives up: when naming is disabled it returns the
271
+ * word of Layer alone, without a number.
272
+ *
273
+ * @returns The generated name ("Layer 2"), or the word of Layer when it is disabled
274
+ */
275
+ generateLayerName() {
276
+ const typeName = this.getLayerTypeName();
277
+ if (!this.config.enabled) {
278
+ return typeName;
279
+ }
280
+ const nextNumber = this.findNextLayerNumber(typeName);
281
+ const formatter = this.config.formatter ?? defaultFormatter;
282
+ return formatter(typeName, nextNumber);
283
+ }
284
+ /**
285
+ * Gets the next Layer number
286
+ */
287
+ findNextLayerNumber(typeName) {
288
+ this.scanOnce(LAYER_COUNTER_KEY, () => {
289
+ let maxNumber = 0;
290
+ for (const layer of this.store.getAllLayers()) {
291
+ const number = extractNumberFromName(layer.name, typeName);
292
+ if (number !== null && number > maxNumber) {
293
+ maxNumber = number;
294
+ }
295
+ }
296
+ return maxNumber;
297
+ });
298
+ const nextNumber = (this.counters.get(LAYER_COUNTER_KEY) ?? 0) + 1;
299
+ this.counters.set(LAYER_COUNTER_KEY, nextNumber);
300
+ return nextNumber;
301
+ }
302
+ /**
303
+ * Generates the name of a new Group
304
+ *
305
+ * A group always has a name, so this never gives up: when naming is disabled it returns the
306
+ * word of Group alone, without a number.
307
+ *
308
+ * @returns The generated name ("Group 2"), or the word of Group when it is disabled
309
+ */
310
+ generateGroupName() {
311
+ const typeName = this.getGroupTypeName();
312
+ if (!this.config.enabled) {
313
+ return typeName;
314
+ }
315
+ const nextNumber = this.findNextGroupNumber(typeName);
316
+ const formatter = this.config.formatter ?? defaultFormatter;
317
+ return formatter(typeName, nextNumber);
318
+ }
319
+ /**
320
+ * Gets the next Group number
321
+ */
322
+ findNextGroupNumber(typeName) {
323
+ this.scanOnce(GROUP_COUNTER_KEY, () => {
324
+ let maxNumber = 0;
325
+ for (const group of this.store.getAllGroups()) {
326
+ const number = extractNumberFromName(group.name, typeName);
327
+ if (number !== null && number > maxNumber) {
328
+ maxNumber = number;
329
+ }
330
+ }
331
+ return maxNumber;
332
+ });
333
+ const nextNumber = (this.counters.get(GROUP_COUNTER_KEY) ?? 0) + 1;
334
+ this.counters.set(GROUP_COUNTER_KEY, nextNumber);
335
+ return nextNumber;
336
+ }
337
+ }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Resolution of the rendering pixel ratio (pixelRatio)
3
+ *
4
+ * Line widths, point sizes and glyphs are baked in by converting CSS pixels into physical
5
+ * pixels, so the ratio of the backing store being drawn into is required. It normally matches
6
+ * `window.devicePixelRatio`, but it does not match when a maplibre Map is brought up with an
7
+ * arbitrary `pixelRatio` (such as a temporary instance mounted off-screen for a high-
8
+ * resolution export). It can therefore be injected through Options, and all references are
9
+ * collected into this helper.
10
+ *
11
+ * There are situations where the ratio itself needs to move at run time (as in the paper
12
+ * preview, where, while it is shown scaled down on the screen, the dimensions fixed in screen
13
+ * pixels should shrink by the same ratio), so the injected value accepts three forms: a
14
+ * number, a function that returns a value each time it is called, and a provider object.
15
+ * `createPixelRatioSource` is the actual provider, and it multiplies the resolved result by
16
+ * the rendering scale that can be changed at run time (renderScale).
17
+ *
18
+ * ## The two ratios
19
+ *
20
+ * renderScale applies only to "dimensions fixed in screen pixels".
21
+ *
22
+ * - Dimensions fixed in screen pixels (`resolvePixelRatio`) ... those whose thickness on the
23
+ * screen does not change when the zoom changes. Point sizes, the line width of features
24
+ * that have no createdZoom, line widths that go through `u_width`, and so on. They do not
25
+ * shrink when the camera pulls back, so they have to be shrunk with renderScale in the
26
+ * paper preview
27
+ * - Dimensions that scale with the zoom (`resolveContentPixelRatio`) ... those that the
28
+ * shader multiplies by `2^(zoom - createdZoom)`, line widths given in meters, and so on.
29
+ * They already shrink by the same ratio when the camera pulls back, so multiplying by
30
+ * renderScale shrinks them twice (the 2026-08-10 defect where only the outlines of notes
31
+ * thinned down to 1/k² in the paper preview)
32
+ *
33
+ * The side that bakes the value in chooses between the two by whether the shader scales that
34
+ * value with the zoom.
35
+ */
36
+ /**
37
+ * Provider of the rendering pixel ratio (read only)
38
+ *
39
+ * It makes "the injected value (window when there is none)" and "the factor that can be
40
+ * changed at run time (renderScale)" readable separately. Handing this out as is to each
41
+ * renderer as the `PixelRatioInput` makes a change of the factor propagate from the next frame
42
+ * to every place that reads it directly, and also lets "the ratio without the factor" be taken
43
+ * from the same single socket.
44
+ */
45
+ export interface PixelRatioProvider {
46
+ /** The current rendering pixel ratio (the injected value or window x renderScale) */
47
+ resolve: () => number;
48
+ /** The factor of the current rendering pixel ratio (default 1) */
49
+ getRenderScale: () => number;
50
+ }
51
+ /**
52
+ * The rendering pixel ratio that can be injected
53
+ *
54
+ * Besides a number, a function that returns the current ratio each time it is called and a
55
+ * provider object can be passed (so that a ratio that changes at run time is followed).
56
+ */
57
+ export type PixelRatioInput = number | (() => number) | PixelRatioProvider;
58
+ /**
59
+ * Resolves the rendering pixel ratio (for dimensions fixed in screen pixels; renderScale
60
+ * included)
61
+ *
62
+ * It returns the injected value if there is one, and otherwise reads
63
+ * `window.devicePixelRatio` on every call. The value at startup is not fixed because the ratio
64
+ * changes when the window is moved to a display with a different ratio (the behavior when
65
+ * there is no injection is exactly the same as before).
66
+ *
67
+ * @param pixelRatio The injected rendering pixel ratio (when unspecified, at most 0, or not a
68
+ * number, it is read from window)
69
+ */
70
+ export declare function resolvePixelRatio(pixelRatio?: PixelRatioInput): number;
71
+ /**
72
+ * The rendering pixel ratio for dimensions that scale with the zoom (renderScale is not
73
+ * applied)
74
+ *
75
+ * Used for "dimensions that already scale with the zoom of the camera", such as line widths
76
+ * that the shader multiplies by `2^(zoom - createdZoom)` and line widths given in meters. When
77
+ * it is used as in the paper preview, where "the camera pulls back by δ and 2^-δ is passed to
78
+ * renderScale", applying the factor here would apply the same reduction twice.
79
+ *
80
+ * When no provider is passed (a number, a function, or unspecified) there is no notion of a
81
+ * factor, so it returns the same value as `resolvePixelRatio`.
82
+ *
83
+ * @param pixelRatio The injected rendering pixel ratio
84
+ */
85
+ export declare function resolveContentPixelRatio(pixelRatio?: PixelRatioInput): number;
86
+ /**
87
+ * Source of the rendering pixel ratio
88
+ *
89
+ * The read side (`PixelRatioProvider`) plus a socket for rewriting the factor.
90
+ * Handing the source itself out to each renderer as the `PixelRatioInput` makes a change from
91
+ * `setRenderScale` propagate from the next frame to every place that reads it directly.
92
+ */
93
+ export interface PixelRatioSource extends PixelRatioProvider {
94
+ /**
95
+ * Sets the factor of the rendering pixel ratio
96
+ *
97
+ * It accepts only finite positive values (anything else is ignored). It returns true only
98
+ * when the value changed, so the caller can trigger a redraw or a rebuild of the batches
99
+ * only at that point.
100
+ */
101
+ setRenderScale: (scale: number) => boolean;
102
+ }
103
+ /**
104
+ * Creates a source of the rendering pixel ratio
105
+ *
106
+ * @param pixelRatio The injected rendering pixel ratio
107
+ * @param fallback Read each time when nothing usable was injected: the ratio of the map the
108
+ * drawing goes into (`map.getPixelRatio()`), which follows a `pixelRatio` the map was
109
+ * created with. When it is omitted or returns nothing usable, window is read
110
+ */
111
+ export declare function createPixelRatioSource(pixelRatio?: number, fallback?: () => number): PixelRatioSource;
@@ -0,0 +1,85 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /** Whether it is a provider object */
4
+ function isProvider(value) {
5
+ return (typeof value === 'object' &&
6
+ value !== null &&
7
+ typeof value.resolve === 'function');
8
+ }
9
+ /** The ratio of window (1 in environments where it cannot be read) */
10
+ function windowPixelRatio() {
11
+ return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;
12
+ }
13
+ /** Lets only finite positive numbers through */
14
+ function usable(value) {
15
+ return value !== undefined && Number.isFinite(value) && value > 0;
16
+ }
17
+ /**
18
+ * Resolves the rendering pixel ratio (for dimensions fixed in screen pixels; renderScale
19
+ * included)
20
+ *
21
+ * It returns the injected value if there is one, and otherwise reads
22
+ * `window.devicePixelRatio` on every call. The value at startup is not fixed because the ratio
23
+ * changes when the window is moved to a display with a different ratio (the behavior when
24
+ * there is no injection is exactly the same as before).
25
+ *
26
+ * @param pixelRatio The injected rendering pixel ratio (when unspecified, at most 0, or not a
27
+ * number, it is read from window)
28
+ */
29
+ export function resolvePixelRatio(pixelRatio) {
30
+ if (isProvider(pixelRatio)) {
31
+ const resolved = pixelRatio.resolve();
32
+ return usable(resolved) ? resolved : windowPixelRatio();
33
+ }
34
+ const value = typeof pixelRatio === 'function' ? pixelRatio() : pixelRatio;
35
+ if (usable(value))
36
+ return value;
37
+ return windowPixelRatio();
38
+ }
39
+ /**
40
+ * The rendering pixel ratio for dimensions that scale with the zoom (renderScale is not
41
+ * applied)
42
+ *
43
+ * Used for "dimensions that already scale with the zoom of the camera", such as line widths
44
+ * that the shader multiplies by `2^(zoom - createdZoom)` and line widths given in meters. When
45
+ * it is used as in the paper preview, where "the camera pulls back by δ and 2^-δ is passed to
46
+ * renderScale", applying the factor here would apply the same reduction twice.
47
+ *
48
+ * When no provider is passed (a number, a function, or unspecified) there is no notion of a
49
+ * factor, so it returns the same value as `resolvePixelRatio`.
50
+ *
51
+ * @param pixelRatio The injected rendering pixel ratio
52
+ */
53
+ export function resolveContentPixelRatio(pixelRatio) {
54
+ if (!isProvider(pixelRatio))
55
+ return resolvePixelRatio(pixelRatio);
56
+ const scale = pixelRatio.getRenderScale();
57
+ const resolved = resolvePixelRatio(pixelRatio);
58
+ if (!usable(scale))
59
+ return resolved;
60
+ return resolved / scale;
61
+ }
62
+ /**
63
+ * Creates a source of the rendering pixel ratio
64
+ *
65
+ * @param pixelRatio The injected rendering pixel ratio
66
+ * @param fallback Read each time when nothing usable was injected: the ratio of the map the
67
+ * drawing goes into (`map.getPixelRatio()`), which follows a `pixelRatio` the map was
68
+ * created with. When it is omitted or returns nothing usable, window is read
69
+ */
70
+ export function createPixelRatioSource(pixelRatio, fallback) {
71
+ let renderScale = 1;
72
+ const input = usable(pixelRatio) ? pixelRatio : fallback;
73
+ return {
74
+ resolve: () => resolvePixelRatio(input) * renderScale,
75
+ getRenderScale: () => renderScale,
76
+ setRenderScale: (scale) => {
77
+ if (!Number.isFinite(scale) || scale <= 0)
78
+ return false;
79
+ if (scale === renderScale)
80
+ return false;
81
+ renderScale = scale;
82
+ return true;
83
+ },
84
+ };
85
+ }
@@ -0,0 +1,88 @@
1
+ import type { Feature, ImageProperties } from '../types/model.js';
2
+ /**
3
+ * Gets the zoom at which the feature was created (`properties.createdZoom`)
4
+ *
5
+ * The drawing modes record it. Line widths follow the map from that zoom, and an Image is
6
+ * drawn at its size in pixels at that zoom (see {@link FeatureStyle.strokeWidth}).
7
+ *
8
+ * @returns The zoom, or undefined when the feature has none (it then keeps the same width on
9
+ * the screen)
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const feature = draw.getFeature(id);
14
+ * const zoom = feature ? getCreatedZoom(feature) : undefined;
15
+ * ```
16
+ */
17
+ export declare function getCreatedZoom(feature: Feature): number | undefined;
18
+ /**
19
+ * Sets the zoom at which a feature was created, in a `properties` object
20
+ *
21
+ * Use it on the properties of a {@link FeatureInput} before `addFeature`, so that the new
22
+ * feature scales with the map from the current zoom like a drawn one.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * const properties: Record<string, unknown> = {};
27
+ * setCreatedZoom(properties, map.getZoom());
28
+ * draw.addFeature({
29
+ * type: 'LineString',
30
+ * coordinates: [
31
+ * [139.76, 35.68],
32
+ * [139.78, 35.69],
33
+ * ],
34
+ * properties,
35
+ * });
36
+ * ```
37
+ */
38
+ export declare function setCreatedZoom(properties: Record<string, unknown>, zoom: number): void;
39
+ /**
40
+ * Gets the rotation of the feature in degrees (`properties.rotation`, 0 when unset)
41
+ */
42
+ export declare function getRotation(feature: Feature): number;
43
+ /**
44
+ * Sets the rotation in degrees, in a `properties` object (the properties of a
45
+ * {@link FeatureInput} before `addFeature`, say)
46
+ */
47
+ export declare function setRotation(properties: Record<string, unknown>, rotation: number): void;
48
+ /**
49
+ * Gets the scale of the feature (`properties.scale`, 1 when unset), which resizing an Image
50
+ * changes
51
+ */
52
+ export declare function getScale(feature: Feature): number;
53
+ /**
54
+ * Sets the scale of the feature
55
+ */
56
+ export declare function setScale(properties: Record<string, unknown>, scale: number): void;
57
+ /**
58
+ * Gets the name of the feature
59
+ */
60
+ export declare function getFeatureName(feature: Feature): string | undefined;
61
+ /**
62
+ * Sets the name of the feature
63
+ */
64
+ export declare function setFeatureName(properties: Record<string, unknown>, name: string): void;
65
+ /**
66
+ * Gets the description of the feature
67
+ */
68
+ export declare function getFeatureDescription(feature: Feature): string | undefined;
69
+ /**
70
+ * Sets the description of the feature
71
+ */
72
+ export declare function setFeatureDescription(properties: Record<string, unknown>, description: string): void;
73
+ /**
74
+ * Gets the properties of an Image feature in a type-safe way.
75
+ *
76
+ * It validates and extracts each field from feature.properties (Record<string, unknown>).
77
+ * Use it instead of a dangerous cast such as `as unknown as ImageProperties`.
78
+ */
79
+ export declare function getImageProperties(feature: Feature): ImageProperties;
80
+ /**
81
+ * Gets the radius (meters) of a Circle feature. undefined when it is unset or invalid.
82
+ */
83
+ export declare function getCircleRadius(feature: Feature): number | undefined;
84
+ /**
85
+ * Gets the angle (degrees) of the radius handle of a Circle feature. The default is 135
86
+ * (toward the southwest).
87
+ */
88
+ export declare function getRadiusHandleAngle(feature: Feature): number;