@npm9912/v-map 0.1.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 (438) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/cjs/_commonjsHelpers-B83fTs8d.js +36 -0
  4. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  5. package/dist/cjs/cesium-provider-BiFFyAl9.js +2598 -0
  6. package/dist/cjs/deck-provider-Ctq3Q8a1.js +47824 -0
  7. package/dist/cjs/geotiff-CEwvF9cG.js +47 -0
  8. package/dist/cjs/geotiff-source-RaNzzWkC.js +1522 -0
  9. package/dist/cjs/index-B1oGO1g-.js +10658 -0
  10. package/dist/cjs/index-B8LHqjyg.js +1765 -0
  11. package/dist/cjs/index-BIL4VsgP.js +310 -0
  12. package/dist/cjs/index-Blku2QY8.js +167 -0
  13. package/dist/cjs/index-CJvvX4yx.js +21 -0
  14. package/dist/cjs/index-CbVT-Con.js +699 -0
  15. package/dist/cjs/index-ISOEpMC3.js +20478 -0
  16. package/dist/cjs/index-JSwBbvGA.js +1621 -0
  17. package/dist/cjs/index.browser-DQhD8Jwl.js +6873 -0
  18. package/dist/cjs/index.cjs.js +2 -0
  19. package/dist/cjs/layer-extension-B_olS0rc.js +65 -0
  20. package/dist/cjs/leaflet-provider-DOqfs7g5.js +1815 -0
  21. package/dist/cjs/loader.cjs.js +13 -0
  22. package/dist/cjs/main-dist-7TykwFci.js +2655 -0
  23. package/dist/cjs/messages-D7h4m8Tx.js +186 -0
  24. package/dist/cjs/openlayers-provider-Dfeg6L4n.js +1604 -0
  25. package/dist/cjs/polygon-layer-B9PrN7vr.js +1300 -0
  26. package/dist/cjs/scenegraph-layer-DwNoxQdi.js +2530 -0
  27. package/dist/cjs/styleconfig-CVRqArk-.js +23 -0
  28. package/dist/cjs/v-map-builder.cjs.entry.js +3786 -0
  29. package/dist/cjs/v-map-layer-geojson_12.cjs.entry.js +40894 -0
  30. package/dist/cjs/v-map-layer-helper-iAzxAg9I.js +285 -0
  31. package/dist/cjs/v-map-layer-terrain-geotiff.cjs.entry.js +258 -0
  32. package/dist/cjs/v-map-layercontrol.cjs.entry.js +247 -0
  33. package/dist/cjs/v-map.cjs.js +25 -0
  34. package/dist/cjs/v-map.v-map-layer-osm.v-map-layergroup-BsXp3BoL.js +582 -0
  35. package/dist/cjs/v-map_3.cjs.entry.js +12 -0
  36. package/dist/collection/collection-manifest.json +30 -0
  37. package/dist/collection/components/v-map/v-map.css +3 -0
  38. package/dist/collection/components/v-map/v-map.js +467 -0
  39. package/dist/collection/components/v-map/v-map.test.js +33 -0
  40. package/dist/collection/components/v-map-builder/v-map-builder.css +1 -0
  41. package/dist/collection/components/v-map-builder/v-map-builder.js +913 -0
  42. package/dist/collection/components/v-map-builder/v-map-builder.test.js +56 -0
  43. package/dist/collection/components/v-map-layer-geojson/v-map-layer-geojson.js +862 -0
  44. package/dist/collection/components/v-map-layer-geojson/v-map-layer-geojson.test.js +42 -0
  45. package/dist/collection/components/v-map-layer-geotiff/v-map-layer-geotiff.css +4 -0
  46. package/dist/collection/components/v-map-layer-geotiff/v-map-layer-geotiff.js +500 -0
  47. package/dist/collection/components/v-map-layer-geotiff/v-map-layer-geotiff.test.js +38 -0
  48. package/dist/collection/components/v-map-layer-google/v-map-layer-google.css +1 -0
  49. package/dist/collection/components/v-map-layer-google/v-map-layer-google.js +442 -0
  50. package/dist/collection/components/v-map-layer-osm/error-api.test.js +108 -0
  51. package/dist/collection/components/v-map-layer-osm/v-map-layer-osm.css +4 -0
  52. package/dist/collection/components/v-map-layer-osm/v-map-layer-osm.js +311 -0
  53. package/dist/collection/components/v-map-layer-osm/v-map-layer-osm.test.js +36 -0
  54. package/dist/collection/components/v-map-layer-scatterplot/v-map-layer-scatterplot.css +1 -0
  55. package/dist/collection/components/v-map-layer-scatterplot/v-map-layer-scatterplot.js +305 -0
  56. package/dist/collection/components/v-map-layer-terrain/v-map-layer-terrain.css +3 -0
  57. package/dist/collection/components/v-map-layer-terrain/v-map-layer-terrain.js +548 -0
  58. package/dist/collection/components/v-map-layer-terrain/v-map-layer-terrain.test.js +36 -0
  59. package/dist/collection/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.css +3 -0
  60. package/dist/collection/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.js +735 -0
  61. package/dist/collection/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.test.js +42 -0
  62. package/dist/collection/components/v-map-layer-tile3d/v-map-layer-tile3d.css +3 -0
  63. package/dist/collection/components/v-map-layer-tile3d/v-map-layer-tile3d.js +449 -0
  64. package/dist/collection/components/v-map-layer-tile3d/v-map-layer-tile3d.test.js +50 -0
  65. package/dist/collection/components/v-map-layer-wcs/v-map-layer-wcs.css +1 -0
  66. package/dist/collection/components/v-map-layer-wcs/v-map-layer-wcs.js +448 -0
  67. package/dist/collection/components/v-map-layer-wcs/v-map-layer-wcs.test.js +39 -0
  68. package/dist/collection/components/v-map-layer-wfs/v-map-layer-wfs.css +1 -0
  69. package/dist/collection/components/v-map-layer-wfs/v-map-layer-wfs.js +489 -0
  70. package/dist/collection/components/v-map-layer-wfs/v-map-layer-wfs.test.js +43 -0
  71. package/dist/collection/components/v-map-layer-wkt/v-map-layer-wkt.css +1 -0
  72. package/dist/collection/components/v-map-layer-wkt/v-map-layer-wkt.js +811 -0
  73. package/dist/collection/components/v-map-layer-wkt/v-map-layer-wkt.test.js +34 -0
  74. package/dist/collection/components/v-map-layer-wms/v-map-layer-wms.css +1 -0
  75. package/dist/collection/components/v-map-layer-wms/v-map-layer-wms.js +453 -0
  76. package/dist/collection/components/v-map-layer-wms/v-map-layer-wms.test.js +36 -0
  77. package/dist/collection/components/v-map-layer-xyz/v-map-layer-xyz.css +1 -0
  78. package/dist/collection/components/v-map-layer-xyz/v-map-layer-xyz.js +331 -0
  79. package/dist/collection/components/v-map-layer-xyz/v-map-layer-xyz.test.js +28 -0
  80. package/dist/collection/components/v-map-layercontrol/v-map-layercontrol.css +74 -0
  81. package/dist/collection/components/v-map-layercontrol/v-map-layercontrol.js +277 -0
  82. package/dist/collection/components/v-map-layercontrol/v-map-layercontrol.test.js +134 -0
  83. package/dist/collection/components/v-map-layergroup/v-map-layergroup.css +4 -0
  84. package/dist/collection/components/v-map-layergroup/v-map-layergroup.js +212 -0
  85. package/dist/collection/components/v-map-layergroup/v-map-layergroup.test.js +39 -0
  86. package/dist/collection/components/v-map-style/v-map-style.css +38 -0
  87. package/dist/collection/components/v-map-style/v-map-style.js +492 -0
  88. package/dist/collection/components/v-map-style/v-map-style.unit.js +62 -0
  89. package/dist/collection/index.js +1 -0
  90. package/dist/collection/layer/v-map-layer-helper.js +281 -0
  91. package/dist/collection/layer/v-map-layer-helper.unit.js +234 -0
  92. package/dist/collection/lib/cesium-loader.js +58 -0
  93. package/dist/collection/lib/ensure-importmap.js +12 -0
  94. package/dist/collection/lib/ensure-importmap.unit.js +57 -0
  95. package/dist/collection/lib/versions.gen.js +6 -0
  96. package/dist/collection/lib/vstyle.js +8 -0
  97. package/dist/collection/map-provider/cesium/CesiumGeoTIFFTerrainProvider.js +285 -0
  98. package/dist/collection/map-provider/cesium/CesiumLayerGroups.js +159 -0
  99. package/dist/collection/map-provider/cesium/GeoTIFFImageryProvider.js +192 -0
  100. package/dist/collection/map-provider/cesium/GeoTIFFImageryProvider.test.js +57 -0
  101. package/dist/collection/map-provider/cesium/cesium-provider.js +1408 -0
  102. package/dist/collection/map-provider/cesium/i-layer.js +1 -0
  103. package/dist/collection/map-provider/cesium/layer-manager.js +467 -0
  104. package/dist/collection/map-provider/deck/DeckGLGeoTIFFLayer.js +483 -0
  105. package/dist/collection/map-provider/deck/DeckGLGeoTIFFTerrainLayer.js +410 -0
  106. package/dist/collection/map-provider/deck/LayerGroupWithModel.js +169 -0
  107. package/dist/collection/map-provider/deck/LayerGroups.js +192 -0
  108. package/dist/collection/map-provider/deck/LayerModel.js +1 -0
  109. package/dist/collection/map-provider/deck/RenderableGroup.js +1 -0
  110. package/dist/collection/map-provider/deck/deck-provider.js +1563 -0
  111. package/dist/collection/map-provider/geotiff/geotiff-source.js +172 -0
  112. package/dist/collection/map-provider/geotiff/utils/AABB2D.js +24 -0
  113. package/dist/collection/map-provider/geotiff/utils/BVHNode2D.js +166 -0
  114. package/dist/collection/map-provider/geotiff/utils/GeoTIFFTileProcessor.js +484 -0
  115. package/dist/collection/map-provider/geotiff/utils/Triangle.js +1 -0
  116. package/dist/collection/map-provider/geotiff/utils/Triangulation.js +321 -0
  117. package/dist/collection/map-provider/geotiff/utils/colormap-utils.js +190 -0
  118. package/dist/collection/map-provider/geotiff/utils/normalization-utils.js +122 -0
  119. package/dist/collection/map-provider/geotiff/utils/sampling-utils.js +108 -0
  120. package/dist/collection/map-provider/leaflet/GeoTIFFGridLayer.js +147 -0
  121. package/dist/collection/map-provider/leaflet/WCSGridLayer.js +124 -0
  122. package/dist/collection/map-provider/leaflet/google-map-tiles-layer.js +352 -0
  123. package/dist/collection/map-provider/leaflet/leaflet-helpers.js +94 -0
  124. package/dist/collection/map-provider/leaflet/leaflet-provider.js +1095 -0
  125. package/dist/collection/map-provider/ol/CustomGeoTiff.js +145 -0
  126. package/dist/collection/map-provider/ol/openlayers-helper.js +26 -0
  127. package/dist/collection/map-provider/ol/openlayers-provider.js +1427 -0
  128. package/dist/collection/map-provider/provider-factory.js +44 -0
  129. package/dist/collection/map-provider/provider-factory.unit.js +66 -0
  130. package/dist/collection/testing/browser-test-utils.js +49 -0
  131. package/dist/collection/testing/e2e-testing.js +122 -0
  132. package/dist/collection/testing/e2e-utils.js +70 -0
  133. package/dist/collection/testing/geotiff-test-server.js +100 -0
  134. package/dist/collection/testing/mocks/geostyler-lyrx-parser.js +12 -0
  135. package/dist/collection/testing/mocks/geostyler-mapbox-parser.js +12 -0
  136. package/dist/collection/testing/mocks/geostyler-qgis-parser.js +12 -0
  137. package/dist/collection/testing/mocks/geostyler-sld-parser.js +13 -0
  138. package/dist/collection/testing/mocks/geostyler-style.js +5 -0
  139. package/dist/collection/testing/setupTests.browser.js +1 -0
  140. package/dist/collection/testing/setupTests.stencil.js +20 -0
  141. package/dist/collection/testing/setupTests.vitest.js +59 -0
  142. package/dist/collection/testing/stencil-testing-wrapper.js +43 -0
  143. package/dist/collection/testing/styleMock.js +1 -0
  144. package/dist/collection/types/color.js +1 -0
  145. package/dist/collection/types/cssmode.js +1 -0
  146. package/dist/collection/types/flavour.js +1 -0
  147. package/dist/collection/types/layerconfig.js +1 -0
  148. package/dist/collection/types/lonlat.js +1 -0
  149. package/dist/collection/types/mapinitoptions.js +1 -0
  150. package/dist/collection/types/mapprovider.js +1 -0
  151. package/dist/collection/types/provideroptions.js +1 -0
  152. package/dist/collection/types/styleconfig.js +19 -0
  153. package/dist/collection/types/styling.js +13 -0
  154. package/dist/collection/types/styling.unit.js +37 -0
  155. package/dist/collection/types/vmaplayer.js +1 -0
  156. package/dist/collection/utils/async-mutex.js +28 -0
  157. package/dist/collection/utils/diff.js +142 -0
  158. package/dist/collection/utils/diff.unit.js +59 -0
  159. package/dist/collection/utils/dom-env.js +43 -0
  160. package/dist/collection/utils/dom-env.unit.js +92 -0
  161. package/dist/collection/utils/events.js +8 -0
  162. package/dist/collection/utils/logger.js +183 -0
  163. package/dist/collection/utils/logger.unit.js +98 -0
  164. package/dist/collection/utils/messages.js +12 -0
  165. package/dist/collection/utils/spatial-utils.js +27 -0
  166. package/dist/collection/utils/spatial-utils.unit.js +24 -0
  167. package/dist/components/_commonjsHelpers.js +1 -0
  168. package/dist/components/cesium-provider.js +1 -0
  169. package/dist/components/deck-provider.js +1 -0
  170. package/dist/components/events.js +1 -0
  171. package/dist/components/geotiff-source.js +1 -0
  172. package/dist/components/geotiff.js +4 -0
  173. package/dist/components/index.browser.js +15 -0
  174. package/dist/components/index.d.ts +35 -0
  175. package/dist/components/index.js +1 -0
  176. package/dist/components/index2.js +1 -0
  177. package/dist/components/index3.js +1 -0
  178. package/dist/components/index4.js +1 -0
  179. package/dist/components/index5.js +1 -0
  180. package/dist/components/index6.js +1 -0
  181. package/dist/components/index7.js +1 -0
  182. package/dist/components/index8.js +7 -0
  183. package/dist/components/layer-extension.js +1 -0
  184. package/dist/components/leaflet-provider.js +1 -0
  185. package/dist/components/main-dist.js +1 -0
  186. package/dist/components/messages.js +1 -0
  187. package/dist/components/openlayers-provider.js +1 -0
  188. package/dist/components/polygon-layer.js +1 -0
  189. package/dist/components/scenegraph-layer.js +1 -0
  190. package/dist/components/styleconfig.js +1 -0
  191. package/dist/components/styling.js +1 -0
  192. package/dist/components/v-map-builder.d.ts +11 -0
  193. package/dist/components/v-map-builder.js +2 -0
  194. package/dist/components/v-map-layer-geojson.d.ts +11 -0
  195. package/dist/components/v-map-layer-geojson.js +1 -0
  196. package/dist/components/v-map-layer-geojson2.js +1 -0
  197. package/dist/components/v-map-layer-geotiff.d.ts +11 -0
  198. package/dist/components/v-map-layer-geotiff.js +1 -0
  199. package/dist/components/v-map-layer-geotiff2.js +1 -0
  200. package/dist/components/v-map-layer-google.d.ts +11 -0
  201. package/dist/components/v-map-layer-google.js +1 -0
  202. package/dist/components/v-map-layer-google2.js +1 -0
  203. package/dist/components/v-map-layer-helper.js +1 -0
  204. package/dist/components/v-map-layer-osm.d.ts +11 -0
  205. package/dist/components/v-map-layer-osm.js +1 -0
  206. package/dist/components/v-map-layer-osm2.js +1 -0
  207. package/dist/components/v-map-layer-scatterplot.d.ts +11 -0
  208. package/dist/components/v-map-layer-scatterplot.js +1 -0
  209. package/dist/components/v-map-layer-scatterplot2.js +1 -0
  210. package/dist/components/v-map-layer-terrain-geotiff.d.ts +11 -0
  211. package/dist/components/v-map-layer-terrain-geotiff.js +1 -0
  212. package/dist/components/v-map-layer-terrain.d.ts +11 -0
  213. package/dist/components/v-map-layer-terrain.js +1 -0
  214. package/dist/components/v-map-layer-terrain2.js +1 -0
  215. package/dist/components/v-map-layer-tile3d.d.ts +11 -0
  216. package/dist/components/v-map-layer-tile3d.js +1 -0
  217. package/dist/components/v-map-layer-tile3d2.js +1 -0
  218. package/dist/components/v-map-layer-wcs.d.ts +11 -0
  219. package/dist/components/v-map-layer-wcs.js +1 -0
  220. package/dist/components/v-map-layer-wcs2.js +1 -0
  221. package/dist/components/v-map-layer-wfs.d.ts +11 -0
  222. package/dist/components/v-map-layer-wfs.js +1 -0
  223. package/dist/components/v-map-layer-wfs2.js +1 -0
  224. package/dist/components/v-map-layer-wkt.d.ts +11 -0
  225. package/dist/components/v-map-layer-wkt.js +1 -0
  226. package/dist/components/v-map-layer-wkt2.js +1 -0
  227. package/dist/components/v-map-layer-wms.d.ts +11 -0
  228. package/dist/components/v-map-layer-wms.js +1 -0
  229. package/dist/components/v-map-layer-wms2.js +1 -0
  230. package/dist/components/v-map-layer-xyz.d.ts +11 -0
  231. package/dist/components/v-map-layer-xyz.js +1 -0
  232. package/dist/components/v-map-layer-xyz2.js +1 -0
  233. package/dist/components/v-map-layercontrol.d.ts +11 -0
  234. package/dist/components/v-map-layercontrol.js +1 -0
  235. package/dist/components/v-map-layergroup.d.ts +11 -0
  236. package/dist/components/v-map-layergroup.js +1 -0
  237. package/dist/components/v-map-layergroup2.js +1 -0
  238. package/dist/components/v-map-style.d.ts +11 -0
  239. package/dist/components/v-map-style.js +1 -0
  240. package/dist/components/v-map-style2.js +10 -0
  241. package/dist/components/v-map.d.ts +11 -0
  242. package/dist/components/v-map.js +1 -0
  243. package/dist/components/v-map2.js +1 -0
  244. package/dist/esm/_commonjsHelpers-E-ZsRS8r.js +32 -0
  245. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  246. package/dist/esm/cesium-provider-BJfAup3w.js +2596 -0
  247. package/dist/esm/deck-provider-C7U9VDEq.js +47709 -0
  248. package/dist/esm/geotiff-BEWxTIfH.js +45 -0
  249. package/dist/esm/geotiff-source-esnDnC-u.js +1516 -0
  250. package/dist/esm/index-B1zwA4IC.js +685 -0
  251. package/dist/esm/index-BBpiaTpT.js +165 -0
  252. package/dist/esm/index-BIEmlzCf.js +1697 -0
  253. package/dist/esm/index-BUHa4Jj0.js +307 -0
  254. package/dist/esm/index-DbSdn93t.js +20461 -0
  255. package/dist/esm/index-RpJarvr_.js +10656 -0
  256. package/dist/esm/index-jN06TXUp.js +14 -0
  257. package/dist/esm/index-jzneDarq.js +1613 -0
  258. package/dist/esm/index.browser-DhQAXuA7.js +6860 -0
  259. package/dist/esm/index.js +1 -0
  260. package/dist/esm/layer-extension-CZXK5goK.js +63 -0
  261. package/dist/esm/leaflet-provider-Q41TB6ku.js +1794 -0
  262. package/dist/esm/loader.js +11 -0
  263. package/dist/esm/main-dist-CwnA7_Xn.js +2652 -0
  264. package/dist/esm/messages-CMKJzsgL.js +180 -0
  265. package/dist/esm/openlayers-provider-CMsDsQTQ.js +1602 -0
  266. package/dist/esm/polygon-layer-ByhxGhWC.js +1295 -0
  267. package/dist/esm/scenegraph-layer-09K_B6DT.js +2526 -0
  268. package/dist/esm/styleconfig-B-bAcABs.js +21 -0
  269. package/dist/esm/v-map-builder.entry.js +3784 -0
  270. package/dist/esm/v-map-layer-geojson_12.entry.js +40881 -0
  271. package/dist/esm/v-map-layer-helper-Dys44Cgo.js +283 -0
  272. package/dist/esm/v-map-layer-terrain-geotiff.entry.js +256 -0
  273. package/dist/esm/v-map-layercontrol.entry.js +245 -0
  274. package/dist/esm/v-map.js +21 -0
  275. package/dist/esm/v-map.v-map-layer-osm.v-map-layergroup-B4pFHuSf.js +572 -0
  276. package/dist/esm/v-map_3.entry.js +4 -0
  277. package/dist/index.cjs.js +1 -0
  278. package/dist/index.js +1 -0
  279. package/dist/types/cesium-augment.d.ts +5 -0
  280. package/dist/types/components/v-map/v-map.d.ts +70 -0
  281. package/dist/types/components/v-map/v-map.test.d.ts +1 -0
  282. package/dist/types/components/v-map-builder/v-map-builder.d.ts +48 -0
  283. package/dist/types/components/v-map-builder/v-map-builder.test.d.ts +1 -0
  284. package/dist/types/components/v-map-layer-geojson/v-map-layer-geojson.d.ts +129 -0
  285. package/dist/types/components/v-map-layer-geojson/v-map-layer-geojson.test.d.ts +1 -0
  286. package/dist/types/components/v-map-layer-geotiff/v-map-layer-geotiff.d.ts +74 -0
  287. package/dist/types/components/v-map-layer-geotiff/v-map-layer-geotiff.test.d.ts +1 -0
  288. package/dist/types/components/v-map-layer-google/v-map-layer-google.d.ts +78 -0
  289. package/dist/types/components/v-map-layer-osm/error-api.test.d.ts +1 -0
  290. package/dist/types/components/v-map-layer-osm/v-map-layer-osm.d.ts +50 -0
  291. package/dist/types/components/v-map-layer-osm/v-map-layer-osm.test.d.ts +1 -0
  292. package/dist/types/components/v-map-layer-scatterplot/v-map-layer-scatterplot.d.ts +54 -0
  293. package/dist/types/components/v-map-layer-terrain/v-map-layer-terrain.d.ts +74 -0
  294. package/dist/types/components/v-map-layer-terrain/v-map-layer-terrain.test.d.ts +1 -0
  295. package/dist/types/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.d.ts +117 -0
  296. package/dist/types/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.test.d.ts +1 -0
  297. package/dist/types/components/v-map-layer-tile3d/v-map-layer-tile3d.d.ts +69 -0
  298. package/dist/types/components/v-map-layer-tile3d/v-map-layer-tile3d.test.d.ts +1 -0
  299. package/dist/types/components/v-map-layer-wcs/v-map-layer-wcs.d.ts +47 -0
  300. package/dist/types/components/v-map-layer-wcs/v-map-layer-wcs.test.d.ts +1 -0
  301. package/dist/types/components/v-map-layer-wfs/v-map-layer-wfs.d.ts +59 -0
  302. package/dist/types/components/v-map-layer-wfs/v-map-layer-wfs.test.d.ts +1 -0
  303. package/dist/types/components/v-map-layer-wkt/v-map-layer-wkt.d.ts +132 -0
  304. package/dist/types/components/v-map-layer-wkt/v-map-layer-wkt.test.d.ts +1 -0
  305. package/dist/types/components/v-map-layer-wms/v-map-layer-wms.d.ts +76 -0
  306. package/dist/types/components/v-map-layer-wms/v-map-layer-wms.test.d.ts +1 -0
  307. package/dist/types/components/v-map-layer-xyz/v-map-layer-xyz.d.ts +59 -0
  308. package/dist/types/components/v-map-layer-xyz/v-map-layer-xyz.test.d.ts +1 -0
  309. package/dist/types/components/v-map-layercontrol/v-map-layercontrol.d.ts +44 -0
  310. package/dist/types/components/v-map-layercontrol/v-map-layercontrol.test.d.ts +1 -0
  311. package/dist/types/components/v-map-layergroup/v-map-layergroup.d.ts +31 -0
  312. package/dist/types/components/v-map-layergroup/v-map-layergroup.test.d.ts +1 -0
  313. package/dist/types/components/v-map-style/v-map-style.d.ts +75 -0
  314. package/dist/types/components/v-map-style/v-map-style.unit.d.ts +1 -0
  315. package/dist/types/components.d.ts +2391 -0
  316. package/dist/types/globals.d.ts +16 -0
  317. package/dist/types/index.d.ts +10 -0
  318. package/dist/types/layer/v-map-layer-helper.d.ts +45 -0
  319. package/dist/types/layer/v-map-layer-helper.unit.d.ts +1 -0
  320. package/dist/types/leaflet-augment.d.ts +15 -0
  321. package/dist/types/lib/cesium-loader.d.ts +3 -0
  322. package/dist/types/lib/ensure-importmap.d.ts +3 -0
  323. package/dist/types/lib/ensure-importmap.unit.d.ts +1 -0
  324. package/dist/types/lib/versions.gen.d.ts +5 -0
  325. package/dist/types/lib/vstyle.d.ts +44 -0
  326. package/dist/types/map-provider/cesium/CesiumGeoTIFFTerrainProvider.d.ts +92 -0
  327. package/dist/types/map-provider/cesium/CesiumLayerGroups.d.ts +64 -0
  328. package/dist/types/map-provider/cesium/GeoTIFFImageryProvider.d.ts +75 -0
  329. package/dist/types/map-provider/cesium/GeoTIFFImageryProvider.test.d.ts +1 -0
  330. package/dist/types/map-provider/cesium/cesium-provider.d.ts +87 -0
  331. package/dist/types/map-provider/cesium/i-layer.d.ts +11 -0
  332. package/dist/types/map-provider/cesium/layer-manager.d.ts +31 -0
  333. package/dist/types/map-provider/deck/DeckGLGeoTIFFLayer.d.ts +91 -0
  334. package/dist/types/map-provider/deck/DeckGLGeoTIFFTerrainLayer.d.ts +82 -0
  335. package/dist/types/map-provider/deck/LayerGroupWithModel.d.ts +55 -0
  336. package/dist/types/map-provider/deck/LayerGroups.d.ts +63 -0
  337. package/dist/types/map-provider/deck/LayerModel.d.ts +8 -0
  338. package/dist/types/map-provider/deck/RenderableGroup.d.ts +20 -0
  339. package/dist/types/map-provider/deck/deck-provider.d.ts +92 -0
  340. package/dist/types/map-provider/geotiff/geotiff-source.d.ts +30 -0
  341. package/dist/types/map-provider/geotiff/utils/AABB2D.d.ts +28 -0
  342. package/dist/types/map-provider/geotiff/utils/BVHNode2D.d.ts +36 -0
  343. package/dist/types/map-provider/geotiff/utils/GeoTIFFTileProcessor.d.ts +116 -0
  344. package/dist/types/map-provider/geotiff/utils/Triangle.d.ts +5 -0
  345. package/dist/types/map-provider/geotiff/utils/Triangulation.d.ts +94 -0
  346. package/dist/types/map-provider/geotiff/utils/colormap-utils.d.ts +47 -0
  347. package/dist/types/map-provider/geotiff/utils/normalization-utils.d.ts +39 -0
  348. package/dist/types/map-provider/geotiff/utils/sampling-utils.d.ts +13 -0
  349. package/dist/types/map-provider/leaflet/GeoTIFFGridLayer.d.ts +34 -0
  350. package/dist/types/map-provider/leaflet/WCSGridLayer.d.ts +38 -0
  351. package/dist/types/map-provider/leaflet/google-map-tiles-layer.d.ts +73 -0
  352. package/dist/types/map-provider/leaflet/leaflet-helpers.d.ts +6 -0
  353. package/dist/types/map-provider/leaflet/leaflet-provider.d.ts +73 -0
  354. package/dist/types/map-provider/ol/CustomGeoTiff.d.ts +14 -0
  355. package/dist/types/map-provider/ol/openlayers-helper.d.ts +2 -0
  356. package/dist/types/map-provider/ol/openlayers-provider.d.ts +80 -0
  357. package/dist/types/map-provider/provider-factory.d.ts +12 -0
  358. package/dist/types/map-provider/provider-factory.unit.d.ts +1 -0
  359. package/dist/types/namespaces.d.ts +3 -0
  360. package/dist/types/ol-augment.d.ts +3 -0
  361. package/dist/types/ol-override.d.ts +7 -0
  362. package/dist/types/ol.d.ts +10 -0
  363. package/dist/types/stencil-public-runtime.d.ts +1860 -0
  364. package/dist/types/testing/browser-test-utils.d.ts +6 -0
  365. package/dist/types/testing/e2e-testing.d.ts +5 -0
  366. package/dist/types/testing/e2e-utils.d.ts +4 -0
  367. package/dist/types/testing/geotiff-test-server.d.ts +5 -0
  368. package/dist/types/testing/mocks/geostyler-lyrx-parser.d.ts +11 -0
  369. package/dist/types/testing/mocks/geostyler-mapbox-parser.d.ts +11 -0
  370. package/dist/types/testing/mocks/geostyler-qgis-parser.d.ts +11 -0
  371. package/dist/types/testing/mocks/geostyler-sld-parser.d.ts +11 -0
  372. package/dist/types/testing/mocks/geostyler-style.d.ts +5 -0
  373. package/dist/types/testing/setupTests.browser.d.ts +1 -0
  374. package/dist/types/testing/setupTests.stencil.d.ts +1 -0
  375. package/dist/types/testing/setupTests.vitest.d.ts +1 -0
  376. package/dist/types/testing/stencil-testing-wrapper.d.ts +3 -0
  377. package/dist/types/types/color.d.ts +1 -0
  378. package/dist/types/types/cssmode.d.ts +1 -0
  379. package/dist/types/types/flavour.d.ts +1 -0
  380. package/dist/types/types/layerconfig.d.ts +207 -0
  381. package/dist/types/types/lonlat.d.ts +1 -0
  382. package/dist/types/types/mapinitoptions.d.ts +4 -0
  383. package/dist/types/types/mapprovider.d.ts +46 -0
  384. package/dist/types/types/provideroptions.d.ts +8 -0
  385. package/dist/types/types/styleconfig.d.ts +27 -0
  386. package/dist/types/types/styling.d.ts +24 -0
  387. package/dist/types/types/styling.unit.d.ts +1 -0
  388. package/dist/types/types/vmaplayer.d.ts +10 -0
  389. package/dist/types/utils/async-mutex.d.ts +7 -0
  390. package/dist/types/utils/diff.d.ts +64 -0
  391. package/dist/types/utils/diff.unit.d.ts +1 -0
  392. package/dist/types/utils/dom-env.d.ts +5 -0
  393. package/dist/types/utils/dom-env.unit.d.ts +1 -0
  394. package/dist/types/utils/events.d.ts +29 -0
  395. package/dist/types/utils/logger.d.ts +47 -0
  396. package/dist/types/utils/logger.unit.d.ts +1 -0
  397. package/dist/types/utils/messages.d.ts +12 -0
  398. package/dist/types/utils/spatial-utils.d.ts +6 -0
  399. package/dist/types/utils/spatial-utils.unit.d.ts +1 -0
  400. package/dist/types/versions.d.ts +7 -0
  401. package/dist/v-map/index.esm.js +0 -0
  402. package/dist/v-map/p--vVleK-M.js +1 -0
  403. package/dist/v-map/p-09d10db0.entry.js +1 -0
  404. package/dist/v-map/p-5eba6058.entry.js +10 -0
  405. package/dist/v-map/p-6b102336.entry.js +1 -0
  406. package/dist/v-map/p-B-bAcABs.js +1 -0
  407. package/dist/v-map/p-BBpiaTpT.js +1 -0
  408. package/dist/v-map/p-BdijL4Av.js +1 -0
  409. package/dist/v-map/p-Be3r33VF.js +4 -0
  410. package/dist/v-map/p-BeFu0ap4.js +1 -0
  411. package/dist/v-map/p-BxFJezdK.js +1 -0
  412. package/dist/v-map/p-CMKJzsgL.js +1 -0
  413. package/dist/v-map/p-CXfA_q8m.js +1 -0
  414. package/dist/v-map/p-CZqY0yW4.js +1 -0
  415. package/dist/v-map/p-CafTHT9i.js +1 -0
  416. package/dist/v-map/p-DCTHyf58.js +1 -0
  417. package/dist/v-map/p-DQuL1Twl.js +1 -0
  418. package/dist/v-map/p-DR9McdNX.js +1 -0
  419. package/dist/v-map/p-Dckgonw8.js +1 -0
  420. package/dist/v-map/p-DhQAXuA7.js +15 -0
  421. package/dist/v-map/p-DmICdG34.js +7 -0
  422. package/dist/v-map/p-DrOQ9V4h.js +1 -0
  423. package/dist/v-map/p-DvHXtWUg.js +1 -0
  424. package/dist/v-map/p-E-ZsRS8r.js +1 -0
  425. package/dist/v-map/p-MyTSFnEk.js +1 -0
  426. package/dist/v-map/p-RpJarvr_.js +1 -0
  427. package/dist/v-map/p-WaMDUuAz.js +1 -0
  428. package/dist/v-map/p-aa410e64.entry.js +2 -0
  429. package/dist/v-map/p-c21c93fe.entry.js +1 -0
  430. package/dist/v-map/p-jzneDarq.js +2 -0
  431. package/dist/v-map/p-uiIP-taz.js +1 -0
  432. package/dist/v-map/v-map.esm.js +1 -0
  433. package/loader/cdn.js +1 -0
  434. package/loader/index.cjs.js +1 -0
  435. package/loader/index.d.ts +24 -0
  436. package/loader/index.es2017.js +1 -0
  437. package/loader/index.js +2 -0
  438. package/package.json +193 -0
@@ -0,0 +1,277 @@
1
+ import { h } from "@stencil/core";
2
+ export class VMapLayerControl {
3
+ /** ID der zu steuernden Karte (DOM-Element mit dieser id) */
4
+ for;
5
+ host;
6
+ layerGroups = [];
7
+ observer;
8
+ mapElement = null;
9
+ // ---- Lifecycle -----------------------------------------------------------
10
+ async connectedCallback() {
11
+ //this.findMapElement();
12
+ }
13
+ async componentWillLoad() {
14
+ this.findMapElement();
15
+ }
16
+ async disconnectedCallback() {
17
+ this.observer?.disconnect();
18
+ }
19
+ // ---- DOM-Discovery/Observation ------------------------------------------
20
+ findMapElement() {
21
+ this.mapElement = document.getElementById(this.for);
22
+ if (this.mapElement) {
23
+ this.initObserver();
24
+ this.updateLayerGroupsFromDom();
25
+ // this.updateLayersFromDom();
26
+ }
27
+ else {
28
+ // Karte noch nicht da – später erneut versuchen
29
+ setTimeout(() => this.findMapElement(), 100);
30
+ }
31
+ }
32
+ initObserver() {
33
+ if (!this.mapElement)
34
+ return;
35
+ this.observer = new MutationObserver(async () => {
36
+ this.updateLayerGroupsFromDom();
37
+ //this.updateLayersFromDom();
38
+ });
39
+ this.observer.observe(this.mapElement, {
40
+ childList: true,
41
+ subtree: true,
42
+ // WICHTIG: Attribute lauschen, sonst werden UI-Änderungen nicht gespiegelt
43
+ attributes: true,
44
+ attributeFilter: ['basemapid', 'visible', 'opacity', 'zindex'],
45
+ });
46
+ }
47
+ // ---- Layer-Extraktion ----------------------------------------------------
48
+ readBool(el, prop, ...attrs) {
49
+ const elRecord = el;
50
+ if (typeof elRecord[prop] === 'boolean')
51
+ return !!elRecord[prop];
52
+ for (const a of attrs)
53
+ if (el.hasAttribute(a))
54
+ return true;
55
+ return false;
56
+ }
57
+ readNumber(el, prop, def, ...attrs) {
58
+ const elRecord = el;
59
+ const v = elRecord[prop];
60
+ if (typeof v === 'number' && Number.isFinite(v))
61
+ return v;
62
+ for (const a of attrs) {
63
+ const s = el.getAttribute(a);
64
+ if (s != null && s !== '') {
65
+ const n = Number(s);
66
+ if (!Number.isNaN(n))
67
+ return n;
68
+ }
69
+ }
70
+ return def;
71
+ }
72
+ readString(el, prop, def, ...attrs) {
73
+ const elRecord = el;
74
+ const v = elRecord[prop];
75
+ if (typeof v === 'string' && v.length)
76
+ return v;
77
+ for (const a of attrs) {
78
+ const s = el.getAttribute(a);
79
+ if (s)
80
+ return s;
81
+ }
82
+ return def;
83
+ }
84
+ updateLayerGroupsFromDom() {
85
+ if (!this.mapElement)
86
+ return;
87
+ const sel = 'v-map-layergroup';
88
+ const layerGroupElements = Array.from(this.mapElement.querySelectorAll(sel));
89
+ //await customElements.whenDefined('v-map-layercontrol');
90
+ this.layerGroups = layerGroupElements.map((groupElement, _idx) => {
91
+ // groupId: existiert als Attr/Prop? Sonst generieren, aber direkt setzen, damit stabil bleibt
92
+ let id = groupElement.id;
93
+ if (!id) {
94
+ id = `auto-${Math.random().toString(36).slice(2, 9)}`;
95
+ groupElement.id = id;
96
+ }
97
+ const label = this.readString(groupElement, 'label', id, 'label');
98
+ // const type =
99
+ // (this.readString(
100
+ // groupElement,
101
+ // 'type',
102
+ // 'overlay',
103
+ // 'type',
104
+ // ) as LayerType) ?? 'overlay';
105
+ const groupTitle = groupElement?.getAttribute('group-title') || undefined;
106
+ //const groupId = groupElement?.getAttribute('groupid') || undefined;
107
+ const visible = this.readBool(groupElement, 'visible', 'visible');
108
+ // const zIndex = this.readNumber(element, 'zIndex', 0, 'zindex');
109
+ const basemapid = groupElement.getAttribute('basemapid');
110
+ const layers = this.getLayersFromDom(groupElement);
111
+ return {
112
+ info: {
113
+ element: groupElement,
114
+ id,
115
+ visible,
116
+ opacity: undefined,
117
+ zIndex: undefined,
118
+ },
119
+ label,
120
+ //type,
121
+ groupTitle,
122
+ //groupId,
123
+ basemapid,
124
+ layers,
125
+ };
126
+ });
127
+ this.layerGroups = this.cloneLayerGroups();
128
+ //forceUpdate(this.host);
129
+ }
130
+ cloneLayerGroups() {
131
+ return this.layerGroups.map(group => ({
132
+ ...group,
133
+ info: { ...group.info }, // Neue Referenz für info
134
+ layers: group.layers.map(layer => ({
135
+ ...layer,
136
+ info: { ...layer.info }, // Neue Referenz für layer.info
137
+ })),
138
+ }));
139
+ }
140
+ getLayersFromDom(groupElement) {
141
+ if (!groupElement)
142
+ return;
143
+ const sel = 'v-map-layer-wms, v-map-layer-osm, v-map-layer-geotiff, v-map-layer-geojson';
144
+ const layerElements = Array.from(groupElement.querySelectorAll(sel));
145
+ const layers = layerElements.map((element, _idx) => {
146
+ // id: existiert als Attr/Prop? Sonst generieren, aber direkt setzen, damit stabil bleibt
147
+ let id = element.id;
148
+ if (!id) {
149
+ id = `auto-${Math.random().toString(36).slice(2, 9)}`;
150
+ element.id = id;
151
+ }
152
+ const label = this.readString(element, 'label', id, 'label');
153
+ // const type =
154
+ // (this.readString(element, 'type', 'overlay', 'type') as LayerType) ??
155
+ // 'overlay';
156
+ //const groupElement = element.closest('v-map-layergroup');
157
+ //const group = groupElement?.getAttribute('group-title') || undefined;
158
+ //const groupId = groupElement?.getAttribute('groupid') || undefined;
159
+ const visible = this.readBool(element, 'visible', 'visible');
160
+ const opacity = this.readNumber(element, 'opacity', 1, 'opacity');
161
+ //const zIndex = this.readNumber(element, 'zIndex', 0, 'z-index', 'zindex');
162
+ const zIndex = this.readNumber(element, 'zIndex', 0, 'zindex');
163
+ //const groupId = groupElement.id;
164
+ return {
165
+ info: {
166
+ element,
167
+ id,
168
+ visible,
169
+ opacity,
170
+ zIndex,
171
+ },
172
+ label,
173
+ //type,
174
+ };
175
+ });
176
+ return layers;
177
+ }
178
+ setBool(el, prop, val, ...attrs) {
179
+ el[prop] = val;
180
+ for (const a of attrs) {
181
+ if (val)
182
+ el.setAttribute(a, '');
183
+ else
184
+ el.removeAttribute(a);
185
+ }
186
+ }
187
+ setNumber(el, prop, val, ...attrs) {
188
+ el[prop] = val;
189
+ for (const a of attrs)
190
+ el.setAttribute(a, String(val));
191
+ }
192
+ // Sichtbarkeit eines Layers ändern
193
+ handleVisibilityChange(info, visible) {
194
+ if (!info.element)
195
+ return;
196
+ this.setBool(info.element, 'visible', visible, 'visible');
197
+ info.visible = visible;
198
+ // UI aktualisieren
199
+ this.layerGroups = [...this.layerGroups];
200
+ }
201
+ handleOpacityChange(info, opacity) {
202
+ if (!info.element)
203
+ return;
204
+ this.setNumber(info.element, 'opacity', opacity, 'opacity');
205
+ info.opacity = opacity;
206
+ // UI aktualisieren
207
+ this.layerGroups = [...this.layerGroups];
208
+ }
209
+ handleZIndexChange(info, zIndex) {
210
+ if (!info.element)
211
+ return;
212
+ this.setNumber(info.element, 'zIndex', zIndex, 'z-index', 'zindex');
213
+ info.zIndex = zIndex;
214
+ // UI aktualisieren
215
+ this.layerGroups = [...this.layerGroups];
216
+ }
217
+ handleBaseLayerChange(group, newBaseLayerId) {
218
+ // basemapid aktualisieren
219
+ group.basemapid = newBaseLayerId;
220
+ group.info.element.setAttribute('basemapid', newBaseLayerId);
221
+ // UI aktualisieren
222
+ this.layerGroups = [...this.layerGroups];
223
+ }
224
+ // ---- Render --------------------------------------------------------------
225
+ render() {
226
+ if (this.layerGroups.length === 0) {
227
+ return h("div", { class: "layer-control-empty" }, "Keine Layer verf\u00FCgbar");
228
+ }
229
+ return (h("div", { class: "layer-control" }, this.layerGroups.map(group => {
230
+ return (h("details", { key: group.info.id, class: "layer-group" }, h("summary", { class: "layer-group-header" }, h("input", { type: "checkbox", checked: group.info.visible, onChange: e => {
231
+ const visible = e.target.checked;
232
+ this.handleVisibilityChange(group.info, visible);
233
+ }, class: "layer-group-checkbox" }), h("span", { class: "layer-group-title" }, group.groupTitle), group.basemapid !== null ? (h("select", { class: "basemap-selector", onChange: e => this.handleBaseLayerChange(group, e.target.value) }, group.layers.map(layer => (h("option", { key: layer.info.id, value: layer.info.id, selected: group.basemapid === layer.info.id }, layer.label))))) : (h("div", null))), h("div", { class: "layer-group-content" }, group.layers.map(layer => (h("div", { key: layer.info.id, class: "layer-item" }, h("label", { class: "layer-item-label", title: layer.label }, h("input", { name: `group-${group.info.id}`, type: "checkbox", checked: layer.info.visible, onChange: e => this.handleVisibilityChange(layer.info, e.target.checked), class: "layer-item-checkbox" }), h("span", { class: "layer-item-title" }, layer.label)), h("div", { class: "layer-item-controls" }, h("input", { type: "range", min: "0", max: "1", step: "0.1", value: String(layer.info.opacity), onInput: e => this.handleOpacityChange(layer.info, parseFloat(e.target.value)), class: "layer-item-opacity", "aria-label": `Opacity ${layer.label}` }), h("input", { type: "number", min: "0", value: String(layer.info.zIndex), onChange: e => this.handleZIndexChange(layer.info, parseInt(e.target.value, 10) || 0), class: "layer-item-zindex", "aria-label": `Z-Index ${layer.label}` }))))))));
234
+ })));
235
+ }
236
+ static get is() { return "v-map-layercontrol"; }
237
+ static get encapsulation() { return "shadow"; }
238
+ static get originalStyleUrls() {
239
+ return {
240
+ "$": ["v-map-layercontrol.css"]
241
+ };
242
+ }
243
+ static get styleUrls() {
244
+ return {
245
+ "$": ["v-map-layercontrol.css"]
246
+ };
247
+ }
248
+ static get properties() {
249
+ return {
250
+ "for": {
251
+ "type": "string",
252
+ "mutable": false,
253
+ "complexType": {
254
+ "original": "string",
255
+ "resolved": "string",
256
+ "references": {}
257
+ },
258
+ "required": false,
259
+ "optional": false,
260
+ "docs": {
261
+ "tags": [],
262
+ "text": "ID der zu steuernden Karte (DOM-Element mit dieser id)"
263
+ },
264
+ "getter": false,
265
+ "setter": false,
266
+ "reflect": false,
267
+ "attribute": "for"
268
+ }
269
+ };
270
+ }
271
+ static get states() {
272
+ return {
273
+ "layerGroups": {}
274
+ };
275
+ }
276
+ static get elementRef() { return "host"; }
277
+ }
@@ -0,0 +1,134 @@
1
+ import { afterEach, beforeAll, describe, expect, it } from "vitest";
2
+ import { loadVMapBundle, waitFor, waitForHydration, } from "../../testing/browser-test-utils";
3
+ describe('v-map-layercontrol browser', () => {
4
+ beforeAll(async () => {
5
+ await loadVMapBundle();
6
+ await customElements.whenDefined('v-map-layercontrol');
7
+ });
8
+ afterEach(() => {
9
+ document.body.innerHTML = '';
10
+ });
11
+ it('renders discovered layer groups from live DOM', async () => {
12
+ document.body.innerHTML = `
13
+ <div id="map-browser-1">
14
+ <v-map-layergroup id="group-1" group-title="Base Maps" visible>
15
+ <v-map-layer-osm id="osm" label="OpenStreetMap" visible opacity="0.6" zindex="3"></v-map-layer-osm>
16
+ <v-map-layer-geotiff id="dem" label="DEM" opacity="0.9" zindex="4"></v-map-layer-geotiff>
17
+ </v-map-layergroup>
18
+ </div>
19
+ `;
20
+ const control = document.createElement('v-map-layercontrol');
21
+ control.setAttribute('for', 'map-browser-1');
22
+ document.body.appendChild(control);
23
+ await waitFor(() => control.classList.contains('hydrated'));
24
+ await waitFor(() => !!control.shadowRoot?.querySelector('.layer-control'));
25
+ const titles = Array.from(control.shadowRoot.querySelectorAll('.layer-item-title')).map(node => node.textContent?.trim());
26
+ expect(control.shadowRoot?.querySelector('.layer-group-title')?.textContent).toBe('Base Maps');
27
+ expect(titles).toEqual(['OpenStreetMap', 'DEM']);
28
+ });
29
+ it('reacts to live DOM mutations via MutationObserver', async () => {
30
+ document.body.innerHTML = `
31
+ <div id="map-browser-2">
32
+ <v-map-layergroup id="group-2" group-title="Overlays" visible></v-map-layergroup>
33
+ </div>
34
+ `;
35
+ const control = document.createElement('v-map-layercontrol');
36
+ control.setAttribute('for', 'map-browser-2');
37
+ document.body.appendChild(control);
38
+ await waitFor(() => control.classList.contains('hydrated'));
39
+ await waitFor(() => !!control.shadowRoot?.querySelector('.layer-control'));
40
+ const group = document.querySelector('#group-2');
41
+ const layer = document.createElement('v-map-layer-osm');
42
+ layer.id = 'late-layer';
43
+ layer.setAttribute('label', 'Late Layer');
44
+ layer.setAttribute('visible', '');
45
+ group.appendChild(layer);
46
+ await waitFor(() => control.shadowRoot?.textContent?.includes('Late Layer') ?? false);
47
+ expect(control.shadowRoot?.querySelector('.layer-item-title')?.textContent).toBe('Late Layer');
48
+ });
49
+ it('updates source layer attributes through browser UI interactions', async () => {
50
+ document.body.innerHTML = `
51
+ <div id="map-browser-3">
52
+ <v-map-layergroup id="group-3" group-title="Interactive" visible>
53
+ <v-map-layer-osm id="interactive-layer" label="Interactive Layer" visible opacity="1" zindex="2"></v-map-layer-osm>
54
+ </v-map-layergroup>
55
+ </div>
56
+ `;
57
+ const control = document.createElement('v-map-layercontrol');
58
+ control.setAttribute('for', 'map-browser-3');
59
+ document.body.appendChild(control);
60
+ await waitFor(() => control.classList.contains('hydrated'));
61
+ await waitFor(() => !!control.shadowRoot?.querySelector('.layer-item-checkbox'));
62
+ const sourceLayer = document.getElementById('interactive-layer');
63
+ const checkbox = control.shadowRoot.querySelector('.layer-item-checkbox');
64
+ const opacity = control.shadowRoot.querySelector('.layer-item-opacity');
65
+ const zIndex = control.shadowRoot.querySelector('.layer-item-zindex');
66
+ checkbox.checked = false;
67
+ checkbox.dispatchEvent(new Event('change', { bubbles: true }));
68
+ opacity.value = '0.4';
69
+ opacity.dispatchEvent(new Event('input', { bubbles: true }));
70
+ zIndex.value = '7';
71
+ zIndex.dispatchEvent(new Event('change', { bubbles: true }));
72
+ await waitFor(() => !sourceLayer.hasAttribute('visible') &&
73
+ sourceLayer.getAttribute('opacity') === '0.4' &&
74
+ sourceLayer.getAttribute('zindex') === '7');
75
+ expect(sourceLayer.hasAttribute('visible')).toBe(false);
76
+ expect(sourceLayer.getAttribute('opacity')).toBe('0.4');
77
+ expect(sourceLayer.getAttribute('zindex')).toBe('7');
78
+ });
79
+ it('updates group visibility through the rendered group checkbox', async () => {
80
+ document.body.innerHTML = `
81
+ <div id="map-browser-4">
82
+ <v-map-layergroup id="group-4" group-title="Grouped" visible>
83
+ <v-map-layer-osm id="grouped-layer" label="Grouped Layer" visible></v-map-layer-osm>
84
+ </v-map-layergroup>
85
+ </div>
86
+ `;
87
+ const control = document.createElement('v-map-layercontrol');
88
+ control.setAttribute('for', 'map-browser-4');
89
+ document.body.appendChild(control);
90
+ await waitFor(() => control.classList.contains('hydrated'));
91
+ await waitFor(() => !!control.shadowRoot?.querySelector('.layer-group-checkbox'));
92
+ const sourceGroup = document.getElementById('group-4');
93
+ const groupCheckbox = control.shadowRoot.querySelector('.layer-group-checkbox');
94
+ groupCheckbox.checked = false;
95
+ groupCheckbox.dispatchEvent(new Event('change', { bubbles: true }));
96
+ await waitFor(() => !sourceGroup.hasAttribute('visible'));
97
+ expect(sourceGroup.hasAttribute('visible')).toBe(false);
98
+ });
99
+ it('updates the basemap id through the rendered selector', async () => {
100
+ document.body.innerHTML = `
101
+ <div id="map-browser-5">
102
+ <v-map-layergroup id="group-5" group-title="Basemaps" basemapid="osm-1" visible>
103
+ <v-map-layer-osm id="osm-1" label="OSM" visible></v-map-layer-osm>
104
+ <v-map-layer-wms id="wms-1" label="WMS" visible></v-map-layer-wms>
105
+ </v-map-layergroup>
106
+ </div>
107
+ `;
108
+ const control = document.createElement('v-map-layercontrol');
109
+ control.setAttribute('for', 'map-browser-5');
110
+ document.body.appendChild(control);
111
+ await waitFor(() => control.classList.contains('hydrated'));
112
+ await waitFor(() => !!control.shadowRoot?.querySelector('.basemap-selector'));
113
+ const sourceGroup = document.getElementById('group-5');
114
+ const select = control.shadowRoot.querySelector('.basemap-selector');
115
+ select.value = 'wms-1';
116
+ select.dispatchEvent(new Event('change', { bubbles: true }));
117
+ await waitFor(() => sourceGroup.getAttribute('basemapid') === 'wms-1');
118
+ expect(sourceGroup.getAttribute('basemapid')).toBe('wms-1');
119
+ });
120
+ });
121
+ it('hydrates and keeps the target map reference via the for attribute', async () => {
122
+ document.body.innerHTML = `
123
+ <v-map id="my-map" flavour="ol" style="display:block;width:300px;height:200px">
124
+ <v-map-layergroup>
125
+ <v-map-layer-osm></v-map-layer-osm>
126
+ </v-map-layergroup>
127
+ </v-map>
128
+ `;
129
+ const control = document.createElement('v-map-layercontrol');
130
+ control.setAttribute('for', 'my-map');
131
+ document.body.appendChild(control);
132
+ await waitForHydration(control);
133
+ expect(control.getAttribute('for')).toBe('my-map');
134
+ });
@@ -0,0 +1,4 @@
1
+ /* src/components/v-map-layer-geojson/v-map-layer-geojson.css */
2
+ :host {
3
+ display: none; /* Komponente selbst nicht sichtbar (nur Logik) */
4
+ }
@@ -0,0 +1,212 @@
1
+ import { h } from "@stencil/core";
2
+ import { VMapEvents } from "../../utils/events";
3
+ import { log } from "../../utils/logger";
4
+ import MSG from "../../utils/messages";
5
+ const MSG_COMPONENT = 'v-map-layergroup - ';
6
+ export class VMapLayerGroup {
7
+ el;
8
+ /**
9
+ * Sichtbarkeit der gesamten Gruppe.
10
+ * @default true
11
+ */
12
+ visible = true;
13
+ /**
14
+ * Globale Opazität (0–1) für alle Kinder.
15
+ * @default 1
16
+ */
17
+ opacity = 1.0;
18
+ // /**
19
+ // * Kennzeichnet diese Gruppe als Basis-Kartenebene (exklusiv sichtbar).
20
+ // * @default false
21
+ // */
22
+ // @Prop({ reflect: true }) basemap = false;
23
+ /**
24
+ * Base map identifier for this layer group. When set, layers in this group will be treated as base map layers.
25
+ */
26
+ basemapid = null;
27
+ // /**
28
+ // * Eindeutige Gruppen-ID (z. B. für programmatisches Umschalten).
29
+ // */
30
+ // @Prop({ reflect: true }) groupId: string = Math.random()
31
+ // .toString(36)
32
+ // .slice(2, 11);
33
+ mapProvider = null;
34
+ groupId = crypto.randomUUID();
35
+ async onVisibleChanged() {
36
+ log(MSG_COMPONENT + 'onVisibleChanged');
37
+ if (this.mapProvider?.setGroupVisible) {
38
+ await this.mapProvider.setGroupVisible(this.groupId, this.visible);
39
+ }
40
+ }
41
+ async onBaseMapIdChanged() {
42
+ log(MSG_COMPONENT + 'onBaseMapIdChanged');
43
+ if (this.mapProvider?.setBaseLayer) {
44
+ await this.mapProvider.setBaseLayer(this.groupId, this.basemapid);
45
+ }
46
+ }
47
+ async init(mapProvider) {
48
+ if (this.mapProvider != null)
49
+ return;
50
+ this.mapProvider = mapProvider;
51
+ if (this.mapProvider === null)
52
+ return;
53
+ if (this.mapProvider?.ensureGroup) {
54
+ await this.mapProvider.ensureGroup(this.groupId, this.visible, {
55
+ basemapid: this.basemapid,
56
+ });
57
+ }
58
+ await this.mapProvider?.setGroupVisible(this.groupId, this.visible);
59
+ await this.mapProvider?.setBaseLayer(this.groupId, this.basemapid);
60
+ }
61
+ async connectedCallback() {
62
+ log(MSG_COMPONENT + MSG.COMPONENT_CONNECTED_CALLBACK);
63
+ const mapElement = this.el.closest('v-map');
64
+ await customElements.whenDefined('v-map');
65
+ const vmap = mapElement;
66
+ const mapProviderAvailable = (await mapElement?.isMapProviderReady?.()) === true;
67
+ if (mapProviderAvailable) {
68
+ const mapProvider = mapElement?.__vMapProvider ?? null;
69
+ await this.init(mapProvider);
70
+ }
71
+ vmap?.addEventListener(VMapEvents.MapProviderReady, (async (event) => {
72
+ log(`${MSG_COMPONENT}map provider ready`);
73
+ const mapEvent = event.detail;
74
+ await this.init(mapEvent.mapProvider);
75
+ }));
76
+ vmap?.addEventListener(VMapEvents.MapProviderWillShutdown, async (_event) => {
77
+ log(`${MSG_COMPONENT}map provider shutting down`);
78
+ this.mapProvider = null;
79
+ });
80
+ }
81
+ async componentWillLoad() {
82
+ log(MSG_COMPONENT + MSG.COMPONENT_WILL_LOAD);
83
+ }
84
+ async componentDidLoad() {
85
+ log(MSG_COMPONENT + MSG.COMPONENT_DID_LOAD);
86
+ }
87
+ async componentWillRender() {
88
+ log(MSG_COMPONENT + MSG.COMPONENT_WILL_RENDER);
89
+ }
90
+ /**
91
+ * Returns the internal group identifier used by the map provider.
92
+ */
93
+ async getGroupId() {
94
+ return this.groupId;
95
+ }
96
+ render() {
97
+ return h("slot", { key: '584a5816d8f73071bf257e3f70a4c2baea2d2f56' });
98
+ }
99
+ static get is() { return "v-map-layergroup"; }
100
+ static get encapsulation() { return "shadow"; }
101
+ static get originalStyleUrls() {
102
+ return {
103
+ "$": ["v-map-layergroup.css"]
104
+ };
105
+ }
106
+ static get styleUrls() {
107
+ return {
108
+ "$": ["v-map-layergroup.css"]
109
+ };
110
+ }
111
+ static get properties() {
112
+ return {
113
+ "visible": {
114
+ "type": "boolean",
115
+ "mutable": false,
116
+ "complexType": {
117
+ "original": "boolean",
118
+ "resolved": "boolean",
119
+ "references": {}
120
+ },
121
+ "required": false,
122
+ "optional": false,
123
+ "docs": {
124
+ "tags": [{
125
+ "name": "default",
126
+ "text": "true"
127
+ }],
128
+ "text": "Sichtbarkeit der gesamten Gruppe."
129
+ },
130
+ "getter": false,
131
+ "setter": false,
132
+ "reflect": true,
133
+ "attribute": "visible",
134
+ "defaultValue": "true"
135
+ },
136
+ "opacity": {
137
+ "type": "number",
138
+ "mutable": false,
139
+ "complexType": {
140
+ "original": "number",
141
+ "resolved": "number",
142
+ "references": {}
143
+ },
144
+ "required": false,
145
+ "optional": false,
146
+ "docs": {
147
+ "tags": [{
148
+ "name": "default",
149
+ "text": "1"
150
+ }],
151
+ "text": "Globale Opazit\u00E4t (0\u20131) f\u00FCr alle Kinder."
152
+ },
153
+ "getter": false,
154
+ "setter": false,
155
+ "reflect": true,
156
+ "attribute": "opacity",
157
+ "defaultValue": "1.0"
158
+ },
159
+ "basemapid": {
160
+ "type": "string",
161
+ "mutable": false,
162
+ "complexType": {
163
+ "original": "string | null",
164
+ "resolved": "string",
165
+ "references": {}
166
+ },
167
+ "required": false,
168
+ "optional": false,
169
+ "docs": {
170
+ "tags": [],
171
+ "text": "Base map identifier for this layer group. When set, layers in this group will be treated as base map layers."
172
+ },
173
+ "getter": false,
174
+ "setter": false,
175
+ "reflect": true,
176
+ "attribute": "basemapid",
177
+ "defaultValue": "null"
178
+ }
179
+ };
180
+ }
181
+ static get methods() {
182
+ return {
183
+ "getGroupId": {
184
+ "complexType": {
185
+ "signature": "() => Promise<string>",
186
+ "parameters": [],
187
+ "references": {
188
+ "Promise": {
189
+ "location": "global",
190
+ "id": "global::Promise"
191
+ }
192
+ },
193
+ "return": "Promise<string>"
194
+ },
195
+ "docs": {
196
+ "text": "Returns the internal group identifier used by the map provider.",
197
+ "tags": []
198
+ }
199
+ }
200
+ };
201
+ }
202
+ static get elementRef() { return "el"; }
203
+ static get watchers() {
204
+ return [{
205
+ "propName": "visible",
206
+ "methodName": "onVisibleChanged"
207
+ }, {
208
+ "propName": "basemapid",
209
+ "methodName": "onBaseMapIdChanged"
210
+ }];
211
+ }
212
+ }
@@ -0,0 +1,39 @@
1
+ import { afterEach, beforeAll, describe, expect, it } from "vitest";
2
+ import { createLiveMap, createTaggedElement, loadVMapBundle, onceEvent, waitFor, waitForHydration, } from "../../testing/browser-test-utils";
3
+ describe('v-map-layergroup browser', () => {
4
+ beforeAll(async () => {
5
+ await loadVMapBundle();
6
+ await customElements.whenDefined('v-map-layergroup');
7
+ });
8
+ afterEach(() => {
9
+ document.body.innerHTML = '';
10
+ });
11
+ it('hydrates with child base layers and keeps a live group id', async () => {
12
+ const map = createLiveMap();
13
+ const mapReady = onceEvent(map, 'map-provider-ready');
14
+ const group = createTaggedElement('v-map-layergroup');
15
+ const primaryLayer = createTaggedElement('v-map-layer-osm');
16
+ const secondaryLayer = createTaggedElement('v-map-layer-osm');
17
+ group.setAttribute('basemapid', 'osm-primary');
18
+ primaryLayer.id = 'osm-primary';
19
+ secondaryLayer.id = 'osm-secondary';
20
+ primaryLayer.visible = false;
21
+ secondaryLayer.visible = false;
22
+ group.append(primaryLayer, secondaryLayer);
23
+ map.appendChild(group);
24
+ document.body.appendChild(map);
25
+ await mapReady;
26
+ await waitForHydration(group);
27
+ await waitForHydration(primaryLayer);
28
+ await waitForHydration(secondaryLayer);
29
+ const groupId = await group.getGroupId();
30
+ expect(typeof groupId).toBe('string');
31
+ expect(groupId.length).toBeGreaterThan(0);
32
+ group.visible = false;
33
+ group.setAttribute('basemapid', 'osm-secondary');
34
+ await waitFor(() => !group.hasAttribute('visible') &&
35
+ group.getAttribute('basemapid') === 'osm-secondary');
36
+ expect(group.hasAttribute('visible')).toBe(false);
37
+ expect(group.getAttribute('basemapid')).toBe('osm-secondary');
38
+ });
39
+ });