@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
package/README.ja.md ADDED
@@ -0,0 +1,248 @@
1
+ # @sakuzu/maplibre-gl-draw
2
+
3
+ [MapLibre GL JS][maplibre] の地図の上に図形を描き、編集するための
4
+ ライブラリーです。独自の WebGL2 レンダラーで描くので、20 万の地物を
5
+ 載せても編集できます。3D 地形や地球儀の上にも、平らな地図と同じように
6
+ 描けます。
7
+
8
+ [デモ][demo] | [ドキュメント](docs/README.ja.md) | [API リファレンス][api] |
9
+ [English](README.md)
10
+
11
+ このページの正は英語版 ([README.md](README.md)) です。
12
+
13
+ ![東京駅周辺の playground。半透明で重なる円、細い線から太い線、破線と点線、枠と頂点ハンドルが付いた選択中の穴あき多角形、マルチポリゴン、円と四角と三角と星のマーカー、画像を囲むフリーハンドの線、不透明度を下げたレイヤー、カテゴリーのスタイル規則で塗り分けた区画、段階区分の規則で塗り分けた細かい六角形と凡例、レイヤーとグループの階層を示すレイヤーパネル](docs/images/overview.jpg)
14
+
15
+ ## 機能
16
+
17
+ ### 描画
18
+
19
+ 点、線、面、円、フリーハンドの線を、マウス、タッチ、ペン、キーボードで
20
+ 描けます。用意した画像を地図の上に置くこともできます
21
+ ([描画](docs/guides/drawing.ja.md))。
22
+
23
+ ### 選択と変形
24
+
25
+ 地物をクリックで 1 つずつ、または矩形で囲んでまとめて選べます。選んだ
26
+ 地物は移動、拡大縮小、回転ができます。
27
+
28
+ ### 頂点の編集
29
+
30
+ 頂点を足したり、消したり、動かしたりできます。MultiPolygon のように
31
+ 複数の部分からなる地物や、面の穴の頂点も同じように編集できます。
32
+
33
+ ### 吸着
34
+
35
+ 描いている途中の点は、近くにある既存の頂点、辺、辺どうしの交点、水平や
36
+ 垂直などの角度のガイドに吸着します。隣り合う区画を描くときは、既存の
37
+ 境界の上の 2 点をクリックするだけで、その間の境界に沿った頂点が入ります
38
+ ([吸着と幾何演算](docs/guides/snapping-geometry.ja.md))。
39
+
40
+ ### 幾何演算
41
+
42
+ 選んだ面どうしの結合、切り抜き、交差、線による分割、一定の距離だけ
43
+ 広げるバッファができます。距離、長さ、面積も計算できます。これらの計算は
44
+ 地図に依存しない関数として `@sakuzu/maplibre-gl-draw/geometry` に
45
+ まとめてあり、ブラウザーの外 (Node や Bun) でも同じ結果が得られます。
46
+
47
+ ### スタイル
48
+
49
+ 色、不透明度、線の太さ、破線と点線、点の形を決められます。スタイル規則を
50
+ 使うと、地物が持つ属性の値 (土地の用途や人口など) に応じて色を自動で
51
+ 分けられます ([スタイル](docs/guides/styles.ja.md))。
52
+
53
+ ### レイヤーとグループ
54
+
55
+ レイヤーとグループで地物をまとめられます。レイヤーは並べ替え、非表示、
56
+ ロック、半透明化ができます。基図の道路や建物など MapLibre 自身の
57
+ レイヤーを、このライブラリーのレイヤーの間に挟んで描くこともできます
58
+ ([レイヤー](docs/guides/layers.ja.md))。
59
+
60
+ ### 傾けた地図、地球儀、3D 地形
61
+
62
+ 地図を傾けても、回しても、地球儀の表示にしても、3D 地形を有効にしても、
63
+ 平らな地図と同じように描けます。日付変更線をまたぐ地物も描けます
64
+ ([地形](docs/guides/terrain.ja.md))。
65
+
66
+ 最初の画像と同じ図形を、地図を傾けて回して見たところです。
67
+
68
+ ![最初の画像と同じ図形を、地図を傾けて回し、北が上でない向きで見たもの](docs/images/tilted.jpg)
69
+
70
+ 地球儀の上では、大圏航路も日付変更線をまたぐ領域も描けます。
71
+
72
+ ![球に見える地球。大陸をまたぐ大圏航路、2 本の経線と 2 本の緯線で囲んだ領域、東京を中心とする円、画像、都市のマーカー](docs/images/globe.jpg)
73
+
74
+ 3D 地形の上では、地物は斜面に沿い、尾根の向こうは尾根に隠れます。
75
+
76
+ ![谷から見たインスブルック北の山並みの 3D 地形。斜面を覆う半透明の領域と格子の画像、山頂の星までジグザグに登る登山道、谷を横切って尾根の向こうへ消えるまっすぐな破線](docs/images/terrain.jpg)
77
+
78
+ ### 大量の地物
79
+
80
+ 20 万の地物を載せても編集できます。次の画像の 20 万 8,073 件の地物は、
81
+ すべて編集できます ([性能](docs/guides/performance.ja.md))。
82
+
83
+ ![傾けたカメラから見た架空の街。小さな家、道、公園、場所のマーカーが、すべて編集できる地物として遠くまで続き、手前の公園が選ばれている](docs/images/large-data.jpg)
84
+
85
+ ### データセット
86
+
87
+ 数万件の区画や 100 万件の点のような大きなデータを、編集の対象に
88
+ しない代わりに速く表示します。全部を一度に渡すほか、地図を動かす
89
+ たびに見えている範囲の分だけサーバーから取り寄せることもできます。
90
+ GeoParquet や Arrow の表は、点、線、多角形が行ごとに混ざっていても
91
+ 列の形のまま渡せるので、行ごとに変換する時間がかかりません。読み込み
92
+ は Worker で行えるので、大きなファイルを開いても画面は止まりません。見た目は描いた地物と同じスタイル規則で
93
+ 決められ、クリックすると属性を読めます
94
+ ([大量のデータ](docs/guides/large-data.ja.md))。
95
+
96
+ ### 書き出しと読み込み
97
+
98
+ 独自形式で書き出すと、レイヤー、グループ、スタイル、画像まで含めて
99
+ 保存でき、読み込めば同じ状態に戻ります。GeoJSON で書き出せば、ほかの
100
+ ツールと地物をやり取りできます。地物を保存するストアは差し替えられ、
101
+ 変更はすべてイベントで通知されます
102
+ ([保存と読み込み](docs/guides/save-load.ja.md))。
103
+
104
+ ### 閲覧専用
105
+
106
+ 閲覧専用モードと操作のロックがあり、描いたものを見せるだけの画面を
107
+ 作れます ([読み取り専用](docs/guides/read-only.ja.md))。
108
+
109
+ ### 拡張
110
+
111
+ プラグイン、独自のモード、独自の地物型を足して拡張できます
112
+ ([プラグイン](docs/guides/plugins.ja.md)、
113
+ [独自の型](docs/guides/custom-types.ja.md))。
114
+
115
+ ## デモ
116
+
117
+ ブラウザーですぐに試せます。インストールは要りません。
118
+
119
+ - [プレイグラウンド][demo]
120
+ - すべての機能を 1 つの画面で。レイヤーとプロパティのパネル付き
121
+ - [基本][ex-basic]
122
+ - 面の描画、変更のイベント、保存と復元
123
+ - [書き出しと読み込み][ex-save-load]
124
+ - GeoJSON と独自形式の書き出し、地図に落としたファイルの読み込み
125
+ - [スタイル規則][ex-style-rules]
126
+ - 属性の値で色を分ける 4 種類の規則と凡例
127
+ - [吸着と幾何演算][ex-snapping-and-geometry]
128
+ - 吸着、境界のなぞり、共有する頂点の同時移動、結合、切り抜き、
129
+ バッファ、分割
130
+ - [3D 地形][ex-terrain]
131
+ - 3D 地形の上での描画と選択
132
+ - [閲覧専用][ex-read-only]
133
+ - 閲覧専用モード、操作のロック、ロックしたレイヤー
134
+ - [プラグイン][ex-plugin]
135
+ - フックと独自のモードを持つプラグイン
136
+ - [独自の地物型][ex-custom-feature-type]
137
+ - 独自のレンダラーと当たり判定を持つ地物型
138
+ - [データセット][ex-large-data]
139
+ - 5 万のマス目の色分けと、見えている範囲の点の取り寄せ
140
+ - [100 万の点][ex-columnar-worker]
141
+ - Worker で読み込む 100 万の点
142
+
143
+ ## インストール
144
+
145
+ ```sh
146
+ npm install @sakuzu/maplibre-gl-draw
147
+ ```
148
+
149
+ maplibre-gl は peer dependency です。アプリにすでに入っている
150
+ maplibre-gl (`~6.11.1`) を使います。まだ入っていなければ、npm 7 以降は
151
+ 一緒にインストールされます。
152
+
153
+ ## 使い方
154
+
155
+ ```ts
156
+ import * as maplibregl from 'maplibre-gl';
157
+ import 'maplibre-gl/dist/maplibre-gl.css';
158
+ import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url';
159
+ import { createMapLibreGLDraw } from '@sakuzu/maplibre-gl-draw';
160
+
161
+ // maplibre-gl v6 はページごとに 1 回 worker の URL を要する (これは Vite の例)
162
+ maplibregl.setWorkerUrl(workerUrl);
163
+
164
+ const map = new maplibregl.Map({
165
+ container: 'map',
166
+ style: 'https://tiles.openfreemap.org/styles/liberty',
167
+ center: [139.767, 35.681],
168
+ zoom: 12,
169
+ });
170
+
171
+ const draw = createMapLibreGLDraw(map);
172
+
173
+ // 自分のボタンで描き始める。クリックで頂点を足し、最初の頂点のクリックか
174
+ // Enter で確定する
175
+ document.querySelector('#polygon')?.addEventListener('click', () => {
176
+ draw.setMode('draw_polygon');
177
+ });
178
+
179
+ draw.on('draw.feature.create', ({ feature }) => {
180
+ console.log(feature.id, feature.type, feature.coordinates);
181
+ });
182
+
183
+ // すべての地物を GeoJSON の FeatureCollection (文字列) で得る
184
+ document.querySelector('#save')?.addEventListener('click', () => {
185
+ const { data } = draw.export('geojson');
186
+ console.log(data);
187
+ });
188
+ ```
189
+
190
+ ページ全体は [examples/basic/](examples/basic/) にあります。
191
+ [はじめかた](docs/getting-started.ja.md) で順を追って説明しています。
192
+
193
+ ## 動作環境
194
+
195
+ - maplibre-gl `~6.11.1` で動き、WebGL2 が必要です。
196
+ - ESM のみで、TypeScript の型が付いています。フレームワークには依存
197
+ しません ([フレームワーク](docs/guides/frameworks.ja.md))。
198
+
199
+ ## 制約
200
+
201
+ - 地物は、MapLibre GL JS の[カスタムレイヤー][custom-layer]の中に、この
202
+ ライブラリーのレンダラーで描いています。MapLibre のスタイルのレイヤー
203
+ ではないので、MapLibre の `queryRenderedFeatures` やスタイル式からは
204
+ 見えません。地物を調べたり色を変えたりするときは、このライブラリーの
205
+ API とイベントを使います。
206
+ - 経度は [-180, 180] の範囲で扱います。
207
+ - 幾何演算は、日付変更線と極の付近では使えません。
208
+
209
+ ## ドキュメント
210
+
211
+ [docs/README.ja.md](docs/README.ja.md) に、はじめかた、手引き、
212
+ リファレンス、内部の文書を読む順に並べています。mapbox-gl-draw や
213
+ terra-draw から移る場合は [移行](docs/guides/migrating.ja.md) を参照して
214
+ ください。
215
+
216
+ ## 開発に参加する
217
+
218
+ 開発の手順は [CONTRIBUTING.ja.md](CONTRIBUTING.ja.md) にあります。
219
+ プルリクエストは [CLA.md](CLA.md) の貢献者ライセンス契約のもとで歓迎
220
+ します。貢献した部分の著作権はあなたに残ります。
221
+
222
+ ## ライセンス
223
+
224
+ Copyright (C) 2026 SAKAIDA Atsushi.
225
+
226
+ GNU Affero General Public License version 3 (`AGPL-3.0-only`) で提供して
227
+ います。全文は [LICENSE](LICENSE) にあります。
228
+
229
+ AGPL が製品に合わない場合は、Kasika, Inc. (可視化技研株式会社) から商用
230
+ ライセンスを受けられます。連絡先は <https://www.kasika.xyz/> です。
231
+
232
+ このパッケージに含まれる第三者のコードの表示は
233
+ [THIRD_PARTY_NOTICES.ja.md](THIRD_PARTY_NOTICES.ja.md) にあります。
234
+
235
+ [maplibre]: https://maplibre.org/maplibre-gl-js/docs/
236
+ [custom-layer]: https://maplibre.org/maplibre-gl-js/docs/API/interfaces/CustomLayerInterface/
237
+ [demo]: https://sakuzu.github.io/maplibre-gl-draw/
238
+ [api]: https://sakuzu.github.io/maplibre-gl-draw/api/
239
+ [ex-basic]: https://sakuzu.github.io/maplibre-gl-draw/examples/basic/
240
+ [ex-save-load]: https://sakuzu.github.io/maplibre-gl-draw/examples/save-load/
241
+ [ex-style-rules]: https://sakuzu.github.io/maplibre-gl-draw/examples/style-rules/
242
+ [ex-snapping-and-geometry]: https://sakuzu.github.io/maplibre-gl-draw/examples/snapping-and-geometry/
243
+ [ex-terrain]: https://sakuzu.github.io/maplibre-gl-draw/examples/terrain/
244
+ [ex-read-only]: https://sakuzu.github.io/maplibre-gl-draw/examples/read-only/
245
+ [ex-plugin]: https://sakuzu.github.io/maplibre-gl-draw/examples/plugin/
246
+ [ex-custom-feature-type]: https://sakuzu.github.io/maplibre-gl-draw/examples/custom-feature-type/
247
+ [ex-large-data]: https://sakuzu.github.io/maplibre-gl-draw/examples/large-data/
248
+ [ex-columnar-worker]: https://sakuzu.github.io/maplibre-gl-draw/examples/columnar-worker/
package/README.md ADDED
@@ -0,0 +1,255 @@
1
+ # @sakuzu/maplibre-gl-draw
2
+
3
+ A library for drawing and editing shapes on a [MapLibre GL JS][maplibre]
4
+ map. It draws with its own WebGL2 renderer, so a drawing of 200,000
5
+ features stays editable, and it draws on 3D terrain and on the globe as
6
+ it does on a flat map.
7
+
8
+ [Demos][demo] | [Documentation](docs/README.md) | [API reference][api] |
9
+ [日本語](README.ja.md)
10
+
11
+ ![The playground over central Tokyo: overlapping translucent circles, lines from thin to thick, dashed and dotted lines, a polygon with a hole selected with its frame and vertex handles, a multipolygon, circle, square, triangle and star markers, a freehand loop around an image, a faded layer, parcels colored by a categorical rule, a fine hexagon grid colored by a graduated rule, a legend, and the Layers panel showing layers and groups](docs/images/overview.jpg)
12
+
13
+ ## Features
14
+
15
+ ### Drawing
16
+
17
+ Draw points, lines, polygons, circles and freehand lines with the mouse,
18
+ touch, a pen or the keyboard. An image you provide can be placed on the
19
+ map ([drawing](docs/guides/drawing.md)).
20
+
21
+ ### Selecting and transforming
22
+
23
+ Select features one by one with a click, or several at once with a box,
24
+ then move, resize and rotate them.
25
+
26
+ ### Editing vertices
27
+
28
+ Add, delete and move vertices. Features made of several parts, such as a
29
+ MultiPolygon, and the holes of a polygon are edited the same way.
30
+
31
+ ### Snapping
32
+
33
+ While drawing, the point under the pointer snaps to nearby vertices,
34
+ edges, the intersections of edges, and angle guides such as horizontal
35
+ and vertical. To draw a neighboring parcel, click two points on an
36
+ existing boundary and the vertices along that boundary are inserted
37
+ between them ([snapping and geometry](docs/guides/snapping-geometry.md)).
38
+
39
+ ### Geometry operations
40
+
41
+ Combine selected polygons with union, subtract and intersect, split them
42
+ with a line, and buffer them by a distance. Distance, length and area can
43
+ be computed too. These computations are plain functions that do not need
44
+ the map, collected in `@sakuzu/maplibre-gl-draw/geometry`, and give the
45
+ same results outside the browser (Node, Bun).
46
+
47
+ ### Styles
48
+
49
+ Set colors, opacity, line widths, dashed and dotted lines, and point
50
+ shapes. A style rule colors features by the value of a property they
51
+ carry, such as land use or population ([styles](docs/guides/styles.md)).
52
+
53
+ ### Layers and groups
54
+
55
+ Group features in layers and groups. Layers can be reordered, hidden,
56
+ locked and faded. MapLibre's own layers, such as the roads and buildings
57
+ of the basemap, can be placed between the layers of the drawing
58
+ ([layers](docs/guides/layers.md)).
59
+
60
+ ### Tilted maps, the globe and 3D terrain
61
+
62
+ Drawing works as on a flat map when the map is tilted or rotated, shown
63
+ as a globe, or has 3D terrain enabled. Features can cross the
64
+ antimeridian ([terrain](docs/guides/terrain.md)).
65
+
66
+ The drawing of the first picture, seen with the map tilted and turned.
67
+
68
+ ![The drawing of the first picture seen with the map tilted and rotated so that north is not at the top](docs/images/tilted.jpg)
69
+
70
+ On the globe, great-circle routes and areas crossing the antimeridian
71
+ can be drawn.
72
+
73
+ ![The earth as a sphere: great-circle routes between continents, a box between two meridians and two parallels, a circle around Tokyo, an image and city markers](docs/images/globe.jpg)
74
+
75
+ On 3D terrain, features follow the slopes and a ridge hides what is
76
+ behind it.
77
+
78
+ ![Mountains above Innsbruck in 3D: a translucent area and a gridded image draped over the slopes, a trail zigzagging up to a star on the summit, and a straight dashed line crossing the valley and disappearing over a ridge](docs/images/terrain.jpg)
79
+
80
+ ### Many features
81
+
82
+ A drawing of 200,000 features stays editable. Every one of the 208,073
83
+ features in the next picture can be edited
84
+ ([performance](docs/guides/performance.md)).
85
+
86
+ ![A made-up city seen from a tilted camera: small houses, streets, parks and place markers, all editable features, reaching far into the distance, with a park in the foreground selected](docs/images/large-data.jpg)
87
+
88
+ ### Datasets
89
+
90
+ Large data such as tens of thousands of parcels or a million points is
91
+ shown fast, in exchange for not being editable. Pass it all at once, or
92
+ fetch from a server only what is in view each time the map moves. A
93
+ table from GeoParquet or Arrow is passed as columns, even when its rows
94
+ mix points, lines and polygons, so no time goes into converting every
95
+ row. It can be read in a Worker, so the page does not stop while a
96
+ large file opens. It is styled by the same style rules as drawn
97
+ features, and a click reads its properties
98
+ ([large data](docs/guides/large-data.md)).
99
+
100
+ ### Export and load
101
+
102
+ Export in the native format to keep layers, groups, styles and images,
103
+ and load it to get the same state back. Export as GeoJSON to exchange
104
+ features with other tools. The store that holds the features can be
105
+ replaced, and every change is reported as an event
106
+ ([save and load](docs/guides/save-load.md)).
107
+
108
+ ### Read-only
109
+
110
+ A read-only mode and an interaction lock make pages that only show a
111
+ drawing ([read-only](docs/guides/read-only.md)).
112
+
113
+ ### Extending
114
+
115
+ Extend it with plugins, custom modes and custom feature types
116
+ ([plugins](docs/guides/plugins.md),
117
+ [custom types](docs/guides/custom-types.md)).
118
+
119
+ ## Demos
120
+
121
+ Try them in the browser, with nothing to install.
122
+
123
+ - [Playground][demo]
124
+ - Every feature in one editor, with layer and property panels
125
+ - [Basic][ex-basic]
126
+ - Drawing polygons, the change events, saving and restoring
127
+ - [Export and load][ex-save-load]
128
+ - Export as GeoJSON and in the native format, loading files dropped on
129
+ the map
130
+ - [Style rules][ex-style-rules]
131
+ - The four kinds of style rule that color features by a property, with
132
+ a legend
133
+ - [Snapping and geometry][ex-snapping-and-geometry]
134
+ - Snapping, tracing a boundary, moving shared vertices, union,
135
+ subtract, buffer and split
136
+ - [3D terrain][ex-terrain]
137
+ - Drawing and selecting on 3D terrain
138
+ - [Read-only][ex-read-only]
139
+ - The read-only mode, the interaction lock and locked layers
140
+ - [Plugin][ex-plugin]
141
+ - A plugin with a hook and a mode of its own
142
+ - [Custom feature type][ex-custom-feature-type]
143
+ - A kind of feature with its own renderer and hit test
144
+ - [Datasets][ex-large-data]
145
+ - 50,000 cells colored by a property, and points fetched for the part
146
+ of the map in view
147
+ - [A million points][ex-columnar-worker]
148
+ - A million points read in a Worker
149
+
150
+ ## Installation
151
+
152
+ ```sh
153
+ npm install @sakuzu/maplibre-gl-draw
154
+ ```
155
+
156
+ maplibre-gl is a peer dependency: the library uses the maplibre-gl
157
+ (`~6.11.1`) your application already has. If it is not installed yet,
158
+ npm 7 and later install it along.
159
+
160
+ ## Usage
161
+
162
+ ```ts
163
+ import * as maplibregl from 'maplibre-gl';
164
+ import 'maplibre-gl/dist/maplibre-gl.css';
165
+ import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url';
166
+ import { createMapLibreGLDraw } from '@sakuzu/maplibre-gl-draw';
167
+
168
+ // maplibre-gl v6 needs its worker URL once per page (Vite shown here)
169
+ maplibregl.setWorkerUrl(workerUrl);
170
+
171
+ const map = new maplibregl.Map({
172
+ container: 'map',
173
+ style: 'https://tiles.openfreemap.org/styles/liberty',
174
+ center: [139.767, 35.681],
175
+ zoom: 12,
176
+ });
177
+
178
+ const draw = createMapLibreGLDraw(map);
179
+
180
+ // Your own button starts drawing. Click to add vertices; click the first
181
+ // vertex or press Enter to finish
182
+ document.querySelector('#polygon')?.addEventListener('click', () => {
183
+ draw.setMode('draw_polygon');
184
+ });
185
+
186
+ draw.on('draw.feature.create', ({ feature }) => {
187
+ console.log(feature.id, feature.type, feature.coordinates);
188
+ });
189
+
190
+ // Every feature as a GeoJSON FeatureCollection (a string)
191
+ document.querySelector('#save')?.addEventListener('click', () => {
192
+ const { data } = draw.export('geojson');
193
+ console.log(data);
194
+ });
195
+ ```
196
+
197
+ The complete page is [examples/basic/](examples/basic/), and
198
+ [getting started](docs/getting-started.md) walks through it step by step.
199
+
200
+ ## Compatibility
201
+
202
+ - maplibre-gl `~6.11.1` and WebGL2 are required.
203
+ - ES modules only, with TypeScript types. No framework is required
204
+ ([frameworks](docs/guides/frameworks.md)).
205
+
206
+ ## Limitations
207
+
208
+ - Features are drawn by this library's renderer inside a MapLibre GL JS
209
+ [custom layer][custom-layer]. They are not layers of the MapLibre style,
210
+ so MapLibre's `queryRenderedFeatures` and style expressions do not see
211
+ them. To look up features or change their colors, use this library's API
212
+ and events.
213
+ - Longitudes are handled in [-180, 180].
214
+ - Geometry operations are not available near the antimeridian or the
215
+ poles.
216
+
217
+ ## Documentation
218
+
219
+ [docs/README.md](docs/README.md) lists every document in reading order:
220
+ getting started, the guides, the reference and the internals. Coming from
221
+ mapbox-gl-draw or terra-draw? See [migrating](docs/guides/migrating.md).
222
+
223
+ ## Contributing
224
+
225
+ Development is described in [CONTRIBUTING.md](CONTRIBUTING.md). Pull
226
+ requests are welcome under the contributor license agreement in
227
+ [CLA.md](CLA.md); you keep the copyright in your contribution.
228
+
229
+ ## License
230
+
231
+ Copyright (C) 2026 SAKAIDA Atsushi.
232
+
233
+ Licensed under the GNU Affero General Public License version 3
234
+ (`AGPL-3.0-only`). See [LICENSE](LICENSE) for the full text.
235
+
236
+ If the AGPL does not fit your product, a commercial license is available
237
+ from Kasika, Inc. (可視化技研株式会社): <https://www.kasika.xyz/>.
238
+
239
+ The notices of the third-party code this package contains are in
240
+ [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
241
+
242
+ [maplibre]: https://maplibre.org/maplibre-gl-js/docs/
243
+ [custom-layer]: https://maplibre.org/maplibre-gl-js/docs/API/interfaces/CustomLayerInterface/
244
+ [demo]: https://sakuzu.github.io/maplibre-gl-draw/
245
+ [api]: https://sakuzu.github.io/maplibre-gl-draw/api/
246
+ [ex-basic]: https://sakuzu.github.io/maplibre-gl-draw/examples/basic/
247
+ [ex-save-load]: https://sakuzu.github.io/maplibre-gl-draw/examples/save-load/
248
+ [ex-style-rules]: https://sakuzu.github.io/maplibre-gl-draw/examples/style-rules/
249
+ [ex-snapping-and-geometry]: https://sakuzu.github.io/maplibre-gl-draw/examples/snapping-and-geometry/
250
+ [ex-terrain]: https://sakuzu.github.io/maplibre-gl-draw/examples/terrain/
251
+ [ex-read-only]: https://sakuzu.github.io/maplibre-gl-draw/examples/read-only/
252
+ [ex-plugin]: https://sakuzu.github.io/maplibre-gl-draw/examples/plugin/
253
+ [ex-custom-feature-type]: https://sakuzu.github.io/maplibre-gl-draw/examples/custom-feature-type/
254
+ [ex-large-data]: https://sakuzu.github.io/maplibre-gl-draw/examples/large-data/
255
+ [ex-columnar-worker]: https://sakuzu.github.io/maplibre-gl-draw/examples/columnar-worker/