@npm9912/v-map 0.1.0 → 0.2.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 (127) hide show
  1. package/README.md +192 -96
  2. package/dist/cjs/{cesium-provider-BiFFyAl9.js → cesium-provider-CTtu9eTD.js} +6 -5
  3. package/dist/cjs/{deck-provider-Ctq3Q8a1.js → deck-provider-fNa818HH.js} +9 -9
  4. package/dist/cjs/events-BMG7RKne.js +11 -0
  5. package/dist/cjs/{geotiff-source-RaNzzWkC.js → geotiff-source-B9ARUE9z.js} +1 -1
  6. package/dist/cjs/{index-ISOEpMC3.js → index-9APmzoa2.js} +6 -6
  7. package/dist/cjs/{index-CbVT-Con.js → index-BJg0ncfC.js} +4 -4
  8. package/dist/cjs/{index-CJvvX4yx.js → index-C1ubapwF.js} +4 -4
  9. package/dist/cjs/{index-B8LHqjyg.js → index-ChrKyU6i.js} +4 -4
  10. package/dist/cjs/{index-JSwBbvGA.js → index-DmGHwivM.js} +1 -0
  11. package/dist/cjs/{layer-extension-B_olS0rc.js → layer-extension-D3a-1DFI.js} +1 -1
  12. package/dist/cjs/{leaflet-provider-DOqfs7g5.js → leaflet-provider-7Nw-AdV_.js} +6 -5
  13. package/dist/cjs/loader.cjs.js +2 -2
  14. package/dist/cjs/{messages-D7h4m8Tx.js → messages-CFCxeG8p.js} +0 -9
  15. package/dist/cjs/{openlayers-provider-Dfeg6L4n.js → openlayers-provider-DMxYtFkS.js} +5 -4
  16. package/dist/cjs/{polygon-layer-B9PrN7vr.js → polygon-layer-Dx1ZWZP0.js} +1 -1
  17. package/dist/cjs/{scenegraph-layer-DwNoxQdi.js → scenegraph-layer-ctLehP0q.js} +1 -1
  18. package/dist/cjs/v-map-builder.cjs.entry.js +4 -3
  19. package/dist/cjs/v-map-error.cjs.entry.js +121 -0
  20. package/dist/cjs/v-map-layer-geojson_12.cjs.entry.js +11 -10
  21. package/dist/cjs/{v-map-layer-helper-iAzxAg9I.js → v-map-layer-helper-DnWpjZ_Q.js} +7 -6
  22. package/dist/cjs/v-map-layer-terrain-geotiff.cjs.entry.js +5 -4
  23. package/dist/cjs/v-map-layercontrol.cjs.entry.js +1 -1
  24. package/dist/cjs/v-map.cjs.js +2 -2
  25. package/dist/cjs/{v-map.v-map-layer-osm.v-map-layergroup-BsXp3BoL.js → v-map.v-map-layer-osm.v-map-layergroup-BJ3_NqAj.js} +16 -15
  26. package/dist/cjs/v-map_3.cjs.entry.js +5 -4
  27. package/dist/collection/collection-manifest.json +1 -0
  28. package/dist/collection/components/v-map/v-map.css +3 -0
  29. package/dist/collection/components/v-map-error/v-map-error.css +136 -0
  30. package/dist/collection/components/v-map-error/v-map-error.js +277 -0
  31. package/dist/collection/components/v-map-layer-geojson/v-map-layer-geojson.js +1 -1
  32. package/dist/collection/components/v-map-layer-terrain/v-map-layer-terrain.js +1 -1
  33. package/dist/collection/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.js +1 -1
  34. package/dist/collection/components/v-map-layer-tile3d/v-map-layer-tile3d.js +1 -1
  35. package/dist/collection/components/v-map-layer-wcs/v-map-layer-wcs.js +1 -1
  36. package/dist/collection/components/v-map-layer-wfs/v-map-layer-wfs.js +1 -1
  37. package/dist/collection/components/v-map-layergroup/v-map-layergroup.js +1 -1
  38. package/dist/collection/components/v-map-style/v-map-style.js +1 -1
  39. package/dist/components/cesium-provider.js +1 -1
  40. package/dist/components/deck-provider.js +1 -1
  41. package/dist/components/events.js +1 -1
  42. package/dist/components/geotiff-source.js +1 -1
  43. package/dist/components/leaflet-provider.js +1 -1
  44. package/dist/components/logger.js +1 -0
  45. package/dist/components/openlayers-provider.js +1 -1
  46. package/dist/components/v-map-builder.js +2 -2
  47. package/dist/components/v-map-error.d.ts +11 -0
  48. package/dist/components/v-map-error.js +1 -0
  49. package/dist/components/v-map-layer-geojson2.js +1 -1
  50. package/dist/components/v-map-layer-geotiff2.js +1 -1
  51. package/dist/components/v-map-layer-google2.js +1 -1
  52. package/dist/components/v-map-layer-helper.js +1 -1
  53. package/dist/components/v-map-layer-osm2.js +1 -1
  54. package/dist/components/v-map-layer-scatterplot2.js +1 -1
  55. package/dist/components/v-map-layer-terrain-geotiff.js +1 -1
  56. package/dist/components/v-map-layer-terrain2.js +1 -1
  57. package/dist/components/v-map-layer-tile3d2.js +1 -1
  58. package/dist/components/v-map-layer-wcs2.js +1 -1
  59. package/dist/components/v-map-layer-wfs2.js +1 -1
  60. package/dist/components/v-map-layer-wkt2.js +1 -1
  61. package/dist/components/v-map-layer-wms2.js +1 -1
  62. package/dist/components/v-map-layer-xyz2.js +1 -1
  63. package/dist/components/v-map-layergroup2.js +1 -1
  64. package/dist/components/v-map-style2.js +2 -2
  65. package/dist/components/v-map2.js +1 -1
  66. package/dist/esm/{cesium-provider-BJfAup3w.js → cesium-provider-Bh__cBGf.js} +6 -5
  67. package/dist/esm/{deck-provider-C7U9VDEq.js → deck-provider-DxIpS4lY.js} +9 -9
  68. package/dist/esm/events-CrV_misM.js +9 -0
  69. package/dist/esm/{geotiff-source-esnDnC-u.js → geotiff-source-BRjO-Dvr.js} +1 -1
  70. package/dist/esm/{index-BIEmlzCf.js → index-Bh2gBu9u.js} +5 -5
  71. package/dist/esm/{index-jzneDarq.js → index-BoNyIrdq.js} +1 -1
  72. package/dist/esm/{index-jN06TXUp.js → index-C3mnOs0I.js} +4 -4
  73. package/dist/esm/{index-B1zwA4IC.js → index-C63kfbil.js} +6 -6
  74. package/dist/esm/{index-DbSdn93t.js → index-DxbztwCv.js} +7 -7
  75. package/dist/esm/{layer-extension-CZXK5goK.js → layer-extension-C5Y2UES3.js} +1 -1
  76. package/dist/esm/{leaflet-provider-Q41TB6ku.js → leaflet-provider-k6JSYiYX.js} +6 -5
  77. package/dist/esm/loader.js +3 -3
  78. package/dist/esm/{messages-CMKJzsgL.js → messages-QJHuuz0g.js} +1 -9
  79. package/dist/esm/{openlayers-provider-CMsDsQTQ.js → openlayers-provider-DIquf3Tx.js} +5 -4
  80. package/dist/esm/{polygon-layer-ByhxGhWC.js → polygon-layer-ZIT5mJy5.js} +1 -1
  81. package/dist/esm/{scenegraph-layer-09K_B6DT.js → scenegraph-layer-CNIRd2uu.js} +1 -1
  82. package/dist/esm/v-map-builder.entry.js +3 -2
  83. package/dist/esm/v-map-error.entry.js +119 -0
  84. package/dist/esm/v-map-layer-geojson_12.entry.js +10 -9
  85. package/dist/esm/{v-map-layer-helper-Dys44Cgo.js → v-map-layer-helper-CuHYsU9f.js} +2 -1
  86. package/dist/esm/v-map-layer-terrain-geotiff.entry.js +5 -4
  87. package/dist/esm/v-map-layercontrol.entry.js +1 -1
  88. package/dist/esm/v-map.js +3 -3
  89. package/dist/esm/{v-map.v-map-layer-osm.v-map-layergroup-B4pFHuSf.js → v-map.v-map-layer-osm.v-map-layergroup-Zwdvm9PG.js} +10 -9
  90. package/dist/esm/v-map_3.entry.js +5 -4
  91. package/dist/types/components/v-map-error/v-map-error.d.ts +79 -0
  92. package/dist/types/components.d.ts +128 -0
  93. package/dist/v-map/p-05ee633f.entry.js +1 -0
  94. package/dist/v-map/p-08ad1392.entry.js +1 -0
  95. package/dist/v-map/p-2-mR3oVa.js +1 -0
  96. package/dist/v-map/{p-c21c93fe.entry.js → p-3a57b64a.entry.js} +1 -1
  97. package/dist/v-map/p-58dda864.entry.js +1 -0
  98. package/dist/v-map/p-915314c0.entry.js +10 -0
  99. package/dist/v-map/{p-MyTSFnEk.js → p-9Rt23jlQ.js} +1 -1
  100. package/dist/v-map/p-BSsFEMZP.js +1 -0
  101. package/dist/v-map/{p-jzneDarq.js → p-BoNyIrdq.js} +2 -2
  102. package/dist/v-map/p-BpE6L1g0.js +1 -0
  103. package/dist/v-map/{p-DvHXtWUg.js → p-C0M0-Kvt.js} +1 -1
  104. package/dist/v-map/p-CbiLpFhO.js +1 -0
  105. package/dist/v-map/p-Ci70E1EM.js +1 -0
  106. package/dist/v-map/p-CrV_misM.js +1 -0
  107. package/dist/v-map/{p-DrOQ9V4h.js → p-DAf4itFZ.js} +1 -1
  108. package/dist/v-map/p-DVBtCUtQ.js +1 -0
  109. package/dist/v-map/{p-CZqY0yW4.js → p-DuJ_mTaq.js} +1 -1
  110. package/dist/v-map/p-G6iftXUC.js +1 -0
  111. package/dist/v-map/{p-CMKJzsgL.js → p-QJHuuz0g.js} +1 -1
  112. package/dist/v-map/{p-aa410e64.entry.js → p-e21ea0ce.entry.js} +2 -2
  113. package/dist/v-map/{p-DmICdG34.js → p-rCyRSFJb.js} +2 -2
  114. package/dist/v-map/{p-CafTHT9i.js → p-vhbi5XXi.js} +1 -1
  115. package/dist/v-map/{p-Dckgonw8.js → p-yXLNXXx-.js} +1 -1
  116. package/dist/v-map/v-map.esm.js +1 -1
  117. package/package.json +29 -5
  118. package/dist/v-map/p--vVleK-M.js +0 -1
  119. package/dist/v-map/p-09d10db0.entry.js +0 -1
  120. package/dist/v-map/p-5eba6058.entry.js +0 -10
  121. package/dist/v-map/p-6b102336.entry.js +0 -1
  122. package/dist/v-map/p-BdijL4Av.js +0 -1
  123. package/dist/v-map/p-BeFu0ap4.js +0 -1
  124. package/dist/v-map/p-BxFJezdK.js +0 -1
  125. package/dist/v-map/p-DCTHyf58.js +0 -1
  126. package/dist/v-map/p-WaMDUuAz.js +0 -1
  127. package/dist/v-map/p-uiIP-taz.js +0 -1
package/README.md CHANGED
@@ -1,121 +1,214 @@
1
- # V-Map 🗺️
1
+ # V-Map
2
2
 
3
- **Eine moderne, provider-unabhängige Kartenkomponente für Webanwendungen.**
4
- Gebaut mit [Stencil.js](https://stenciljs.com/), [OpenLayers](https://openlayers.org/), [Cesium](https://cesium.com/), [Leaflet](https://leafletjs.com/) und [Deck.gl](https://deck.gl/).
3
+ **Provider-agnostische Web-Mapping-Komponentenbibliothek für Webanwendungen.**
4
+ Gebaut mit [Stencil.js](https://stenciljs.com/) und [OpenLayers](https://openlayers.org/), [Cesium](https://cesium.com/), [Leaflet](https://leafletjs.com/) und [Deck.gl](https://deck.gl/) als austauschbare Render-Provider.
5
5
 
6
- [![npm version](https://badge.fury.io/js/@npm9912%2Fv-map.svg)](https://badge.fury.io/js/@npm9912%2Fv-map)
7
- [![CI Status](https://github.com/pt9912/v-map/actions/workflows/test.yml/badge.svg)](https://github.com/pt9912/v-map/actions)
8
- [![Storybook](https://img.shields.io/badge/Storybook-%23FF4785?logo=storybook&logoColor=white)](https://pt9912.github.io/v-map/)
6
+ [![npm version](https://badge.fury.io/js/@npm9912%2Fv-map.svg)](https://www.npmjs.com/package/@npm9912/v-map)
7
+ [![Test](https://github.com/pt9912/v-map/actions/workflows/test.yml/badge.svg)](https://github.com/pt9912/v-map/actions/workflows/test.yml)
8
+ [![Build](https://github.com/pt9912/v-map/actions/workflows/build.yml/badge.svg)](https://github.com/pt9912/v-map/actions/workflows/build.yml)
9
+ [![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://pt9912.github.io/v-map/)
9
10
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
11
 
11
12
  ---
12
13
 
13
- ## Features
14
+ ## Features
14
15
 
15
- - **Mehrere Provider**: OpenLayers, Leaflet, Cesium und Deck.gl
16
- - **Layer-Gruppen**: Basemap- und Overlay-Verwaltung mit Sichtbarkeitssteuerung
17
- - **GPU-beschleunigte Provider**: Integration von Deck.gl für große Datensätze
18
- - **Touch-Optimiert**: Funktioniert auf Desktop und mobilen Geräten
19
- - **TypeScript-Unterstützung**: Vollständige Typdefinitionen
20
- - **Storybook-Dokumentation**: Interaktive Beispiele und API-Docs
21
- - **Testing**: Vitest für Spec-, Unit- und Browser-Tests
22
- - **CI/CD**: Automatisiertes Testing und Releases via GitHub Actions
23
- - **Devcontainer-Support**: Voll ausgestattete Entwicklungsumgebung mit Docker
16
+ - **Provider-agnostisch:** OpenLayers, Leaflet, Cesium und Deck.gl hinter einem einheitlichen deklarativen Web-Component-API — ein Providerwechsel ist eine einzige Prop (`flavour`).
17
+ - **Reicher Layer-Katalog:** OSM, XYZ, WMS, WFS, WCS, GeoJSON, WKT, GeoTIFF, 3D-Tiles, Terrain, Deck.gl-Scatterplot, Google Tiles.
18
+ - **Layer-Gruppen & Layer-Control:** Basemap-/Overlay-Verwaltung mit Sichtbarkeitssteuerung (`v-map-layergroup`, `v-map-layercontrol`).
19
+ - **Styling:** `v-map-style` mit Unterstützung für [GeoStyler](https://geostyler.org/) JSON und SLD.
20
+ - **Deklaratives Building:** `v-map-builder` zum Konfigurieren komplexer Karten per Attribut.
21
+ - **Runtime-Error-API:** einheitliches `vmap-error` Event über alle Layer-Komponenten für konsistente Fehlerbehandlung.
22
+ - **Touch-optimiert:** Desktop und mobile Geräte.
23
+ - **Vollständige TypeScript-Typen** und JSX-Integration für Stencil/React/Vue/Svelte.
24
24
 
25
25
  ---
26
26
 
27
- ## 📦 Installation
27
+ ## Installation
28
28
 
29
29
  ```bash
30
- npm install @pt9912/v-map
31
- # oder mit pnpm
32
- pnpm add @pt9912/v-map
30
+ pnpm add @npm9912/v-map
31
+ # oder
32
+ npm install @npm9912/v-map
33
33
  ```
34
34
 
35
+ Je nach gewünschtem Provider installierst du zusätzlich die passende Peer-Dependency:
36
+
37
+ ```bash
38
+ pnpm add ol # für flavour="ol"
39
+ pnpm add leaflet # für flavour="leaflet"
40
+ pnpm add cesium # für flavour="cesium"
41
+ pnpm add @deck.gl/core # für flavour="deck"
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Verwendung
47
+
48
+ ### Plain HTML / ESM
49
+
50
+ ```html
51
+ <!DOCTYPE html>
52
+ <html>
53
+ <head>
54
+ <script type="module"
55
+ src="./node_modules/@npm9912/v-map/dist/v-map/v-map.esm.js"></script>
56
+ <style>v-map { display: block; width: 100%; height: 100vh; }</style>
57
+ </head>
58
+ <body>
59
+ <v-map flavour="ol">
60
+ <v-map-layergroup group-title="Basiskarten" basemapid="OSM-BASE">
61
+ <v-map-layer-osm id="OSM-BASE" label="OpenStreetMap"
62
+ z-index="0" opacity="1.0"></v-map-layer-osm>
63
+ </v-map-layergroup>
64
+ <v-map-layergroup group-title="Overlays">
65
+ <v-map-layer-geojson src="data/points.geojson"></v-map-layer-geojson>
66
+ </v-map-layergroup>
67
+ </v-map>
68
+ </body>
69
+ </html>
70
+ ```
71
+
72
+ ### Framework-Integration (React, Vue, Svelte, SvelteKit …)
73
+
74
+ ```ts
75
+ import { defineCustomElements } from '@npm9912/v-map/loader';
76
+
77
+ defineCustomElements();
78
+ ```
79
+
80
+ Danach stehen die Custom Elements (`<v-map>`, `<v-map-layer-osm>`, …) im gesamten Projekt zur Verfügung.
81
+
82
+ Eine vollständige SvelteKit-Integration findest du unter [`demo/sveltekit-demo/`](./demo/sveltekit-demo/).
83
+
84
+ ### Unterstützte `flavour`-Werte
85
+
86
+ | Wert | Render-Provider |
87
+ |------------|----------------------------------|
88
+ | `ol` | OpenLayers (Default) |
89
+ | `leaflet` | Leaflet |
90
+ | `cesium` | CesiumJS (2D + 3D Globus) |
91
+ | `deck` | Deck.gl (GPU-beschleunigt) |
92
+
93
+ ---
94
+
95
+ ## Komponenten-Übersicht
96
+
97
+ Insgesamt 19 Web Components in `src/components/`:
98
+
99
+ **Karten-Container & Infrastruktur**
100
+ - `v-map` — Haupt-Kartencontainer
101
+ - `v-map-builder` — deklaratives Building komplexer Karten
102
+ - `v-map-layergroup` — Gruppierung und Sichtbarkeitssteuerung
103
+ - `v-map-layercontrol` — interaktives Layer-Control
104
+ - `v-map-style` — Styling via GeoStyler JSON oder SLD
105
+ - `v-map-error` — deklarative Fehler-Toasts ohne JavaScript
106
+
107
+ **Raster-Layer**
108
+ - `v-map-layer-osm` — OpenStreetMap-Tiles
109
+ - `v-map-layer-xyz` — generische XYZ-Tile-Sources
110
+ - `v-map-layer-google` — Google Maps Tiles
111
+ - `v-map-layer-wms` — OGC WMS
112
+ - `v-map-layer-wcs` — OGC WCS
113
+ - `v-map-layer-geotiff` — GeoTIFF
114
+
115
+ **Vektor-Layer**
116
+ - `v-map-layer-geojson` — GeoJSON
117
+ - `v-map-layer-wkt` — Well-Known-Text
118
+ - `v-map-layer-wfs` — OGC WFS
119
+ - `v-map-layer-scatterplot` — Deck.gl-Scatterplot
120
+
121
+ **3D & Terrain**
122
+ - `v-map-layer-tile3d` — 3D Tiles (Cesium)
123
+ - `v-map-layer-terrain` — Terrain-Provider
124
+ - `v-map-layer-terrain-geotiff` — Terrain aus GeoTIFF
125
+
126
+ Vollständige API-Referenz: [GitHub Pages Dokumentation](https://pt9912.github.io/v-map/).
127
+
35
128
  ---
36
129
 
37
- ## 🚀 Verwendung
130
+ ## Error Handling
131
+
132
+ Alle Layer-Komponenten emittieren ein einheitliches `vmap-error` Event bei Lade- und Laufzeitfehlern.
133
+
134
+ **Deklarativ über `<v-map-error>` (kein JavaScript nötig):**
135
+
136
+ ```html
137
+ <v-map flavour="ol">
138
+ <v-map-error position="top-right" auto-dismiss="5000"></v-map-error>
139
+ <!-- ... layer ... -->
140
+ </v-map>
141
+ ```
38
142
 
39
- ```tsx
40
- import { VMap } from '@pt9912/v-map';
143
+ **Programmatisch:**
41
144
 
42
- <v-map flavour="ol" style={{ height: '400px' }}>
43
- <v-map-layergroup group-title="Basis-Layer" basemap="true">
44
- <v-map-layer-osm></v-map-layer-osm>
45
- </v-map-layergroup>
46
- <v-map-layergroup group-title="Vector-Layer">
47
- <v-map-layer-geojson src="data/points.geojson"></v-map-layer-geojson>
48
- </v-map-layergroup>
49
- </v-map>;
145
+ ```ts
146
+ document.querySelector('v-map')?.addEventListener('vmap-error', (e) => {
147
+ const { detail } = e as CustomEvent;
148
+ console.error(detail.type, detail.message);
149
+ });
50
150
  ```
51
151
 
52
- - `flavour` gibt es aktuell in: **`ol`**, **`cesium`**, **`leaflet`**, **`deck`**
53
- - Layer können kombiniert und gruppiert werden (`<v-map-layergroup>`).
152
+ Details: [Error-Handling Guide](https://pt9912.github.io/v-map/guides/error-handling).
54
153
 
55
154
  ---
56
155
 
57
- ## 🛠️ Entwicklung
156
+ ## Entwicklung
58
157
 
59
158
  ### Voraussetzungen
60
159
 
61
160
  - Node.js ≥ 22
62
161
  - pnpm ≥ 9
63
- - Docker (für Devcontainer-Umgebung)
162
+ - optional: Docker (für den Devcontainer)
64
163
 
65
164
  ### Setup
66
165
 
67
166
  ```bash
68
167
  pnpm install
168
+ pnpm start # Dev-Server auf http://localhost:3333
69
169
  ```
70
170
 
71
- ### Dev-Server starten
171
+ ### Tests
172
+
173
+ Das Projekt nutzt [Vitest](https://vitest.dev/) mit den Projekten `spec`, `unit` und `browser`.
72
174
 
73
175
  ```bash
74
- pnpm start
176
+ pnpm test # spec + browser
177
+ pnpm test:coverage # alle Vitest-Projekte mit Coverage
178
+ pnpm test:vitest:browser # nur Browser-/Runtime-Tests
179
+ pnpm test:vitest:browser:watch # Browser-Tests im Watch-Modus
75
180
  ```
76
181
 
77
- Läuft standardmäßig auf: [http://localhost:3333](http://localhost:3333)
78
-
79
- ---
80
-
81
- ## 🧪 Tests
182
+ Hintergrund und CI-Hinweise: `docs/dev/vitest.md`.
82
183
 
83
- Dieses Projekt nutzt **Vitest** für `spec`-, `unit`- und Browser-Tests.
184
+ ### Storybook
84
185
 
85
186
  ```bash
86
- pnpm test # spec + browser
87
- pnpm test:coverage # alle Vitest-Projekte mit Coverage
88
- pnpm test:vitest:browser # Browser-/Runtime-Tests
89
- pnpm test:vitest:browser:watch # Browser-Tests im Watch-Modus
187
+ pnpm storybook # http://localhost:6006
90
188
  ```
91
189
 
92
- ---
93
-
94
- ## 📖 Storybook
95
-
96
- Interaktive Dokumentation der Komponenten:
190
+ ### Dokumentation lokal bauen
97
191
 
98
192
  ```bash
99
- pnpm storybook
193
+ pnpm docs:dev # VitePress Dev-Server
194
+ pnpm docs:build # Statische Ausgabe in docs/.vitepress/dist
100
195
  ```
101
196
 
102
- Erreichbar unter: [http://localhost:6006](http://localhost:6006)
103
-
104
197
  ---
105
198
 
106
- ## 🐳 Devcontainer
199
+ ## Devcontainer
107
200
 
108
- Das Projekt enthält eine vorkonfigurierte **Devcontainer-Umgebung**:
201
+ Das Projekt enthält eine vorkonfigurierte Devcontainer-Umgebung (`.devcontainer/`):
109
202
 
110
- - Basierend auf `node:22`
111
- - Enthält pnpm, GitHub CLI, Linting/Prettier und Vitest
203
+ - Basis-Image `node:22`
204
+ - pnpm, GitHub CLI, ESLint, Prettier, Vitest vorinstalliert
112
205
  - Automatisches Setup via `post-create.sh`
113
206
 
114
- Öffne das Repo in [VS Code Dev Containers](https://code.visualstudio.com/docs/devcontainers/containers) oder [GitHub Codespaces].
207
+ Öffne das Repo in [VS Code Dev Containers](https://code.visualstudio.com/docs/devcontainers/containers) oder [GitHub Codespaces](https://github.com/features/codespaces).
115
208
 
116
209
  ---
117
210
 
118
- ## 🔄 Build & Release
211
+ ## Build & Release
119
212
 
120
213
  ### Build
121
214
 
@@ -123,63 +216,66 @@ Das Projekt enthält eine vorkonfigurierte **Devcontainer-Umgebung**:
123
216
  pnpm build
124
217
  ```
125
218
 
126
- Erzeugt distributierbare Bundles (`dist/`).
219
+ Erzeugt die distributierbaren Bundles in `dist/` sowie den `loader/` für Framework-Integration.
127
220
 
128
221
  ### Release
129
222
 
130
- Releases werden über [semantic-release](https://semantic-release.gitbook.io/) automatisiert:
223
+ Releases werden **vollautomatisch** durch [semantic-release](https://semantic-release.gitbook.io/) erstellt. Ausgelöst wird der Release-Workflow durch einen Merge von `develop` nach `main`.
131
224
 
132
- - Commit Messages nach [Conventional Commits](https://www.conventionalcommits.org/)
133
- - Automatisches Versioning, Changelog & npm-Publish
134
-
135
- ```bash
136
- pnpm release
137
- ```
225
+ - Versionierung und Changelog entstehen aus den [Conventional Commits](https://www.conventionalcommits.org/) seit dem letzten Tag.
226
+ - npm-Publish, GitHub-Release und Tag werden automatisch erzeugt.
227
+ - Vollständige Anleitung, Voraussetzungen und Fehlerbehebung: **[`docs/releasing.md`](./docs/releasing.md)**.
138
228
 
139
229
  ---
140
230
 
141
- ## 📂 Projektstruktur
231
+ ## Projektstruktur
142
232
 
143
233
  ```
144
234
  v-map/
145
235
  ├── src/
146
- │ ├── components/
147
- ├── v-map/ # Hauptkarte
148
- ├── v-map-layer-osm/ # OSM-Basemap
149
- │ ├── v-map-layer-geojson/ # GeoJSON-Daten
150
- │ │ └── v-map-layergroup/ # Layer-Gruppierung
151
- ├── map-provider/ # Provider-Implementierungen
152
- ├── testing/ # Test-Setups und Mocks
153
- └── index.ts # Entry Point
154
- ├── docs/dev/ # Interne Entwicklerdoku
155
- ├── .devcontainer/ # VS Code/Codespaces Setup
156
- ├── .github/workflows/ # CI/CD Pipelines
157
- ├── vite.config.ts # Vite-Konfiguration
158
- ├── vitest.config.mts # Vitest-Projekte
159
- └── stencil.config.ts # Stencil-Konfiguration
236
+ │ ├── components/ # 19 Web Components (v-map, v-map-layer-*, …)
237
+ │ ├── map-provider/ # Provider-Implementierungen (ol, leaflet, cesium, deck)
238
+ │ ├── testing/ # Test-Setups und Mocks
239
+ └── index.ts # Entry Point
240
+ ├── loader/ # Framework-Loader (defineCustomElements)
241
+ ├── dist/ # Build-Artefakte (generiert)
242
+ ├── docs/
243
+ ├── releasing.md # Release-Prozess
244
+ ├── dev/ # Interne Entwicklerdoku
245
+ │ └── .vitepress/ # VitePress-Konfiguration
246
+ ├── demo/ # HTML- und SvelteKit-Integrationsdemos
247
+ ├── .devcontainer/ # VS Code / Codespaces Setup
248
+ ├── .github/workflows/ # CI/CD Pipelines (test, test-browser, build, release, docs)
249
+ ├── .releaserc.json # semantic-release Konfiguration
250
+ ├── stencil.config.ts # Stencil-Konfiguration
251
+ ├── vite.config.ts # Vite-Konfiguration
252
+ └── vitest.config.mts # Vitest-Projekte
160
253
  ```
161
254
 
162
255
  ---
163
256
 
164
257
  ## Architektur
165
258
 
166
- - Saubere Trennung von deklarativem DOM-API (WebComponents) und imperativer Kartenlogik (Provider).
167
-
168
- - Engine-Agnostisch: Austausch/Koexistenz von Leaflet, Deck.gl, Cesium über ein klares Interface.
259
+ - **Saubere Trennung** von deklarativem DOM-API (Web Components) und imperativer Kartenlogik (Provider).
260
+ - **Engine-agnostisch:** Austausch bzw. Koexistenz von OpenLayers, Leaflet, Deck.gl und Cesium über ein klares Interface.
261
+ - **Typsicherheit** durch `LayerConfig`-Union mit exhaustiveness checks.
262
+ - **Shadow-DOM-kompatibel:** CSS-Injection, Adopted Stylesheets.
263
+ - **Erweiterbarkeit:** Neue Layer-Typen und Engines fügen sich je über einen Adapter ein.
264
+ - **Wiederverwendbarkeit:** `VMapLayerHelper` als einheitliche Registrierungs-/Update-Pipeline.
265
+ - **Konsistentes Error-API:** einheitliches `vmap-error` Event über alle Layer-Komponenten.
169
266
 
170
- - Typsicherheit durch LayerConfig-Union + exhaustiveness checks.
267
+ ---
171
268
 
172
- - Shadow-DOM-Kompatibilität (CSS-Injection, Adopted Stylesheets).
269
+ ## Contributing
173
270
 
174
- - Erweiterbarkeit: Neue Layer-Typen oder Engines fügen sich über je einen Adapter ein.
271
+ Pull Requests und Issues sind willkommen.
175
272
 
176
- - Wiederverwendbarkeit: VMapLayerHelper als einheitliche Registrierungs-/Update-Pipeline.
273
+ - Branch-Strategie: Feature-Branch `develop` → `main` (siehe `docs/releasing.md`)
274
+ - Commit-Format: [Conventional Commits](https://www.conventionalcommits.org/)
275
+ - Alle Tests und Lints müssen grün sein (`pnpm test`, `pnpm lint`, `pnpm typecheck`)
177
276
 
178
277
  ---
179
278
 
180
- ## 🤝 Contributing
279
+ ## Lizenz
181
280
 
182
- Pull Requests und Issues sind willkommen!
183
- Bitte halte dich an [Conventional Commits](https://www.conventionalcommits.org/).
184
-
185
- ---
281
+ [MIT](./LICENSE)
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var messages = require('./messages-D7h4m8Tx.js');
4
- var vMap_vMapLayerOsm_vMapLayergroup_entry = require('./v-map.v-map-layer-osm.v-map-layergroup-BsXp3BoL.js');
5
- var geotiffSource = require('./geotiff-source-RaNzzWkC.js');
6
- require('./index-JSwBbvGA.js');
7
- require('./v-map-layer-helper-iAzxAg9I.js');
3
+ var messages = require('./messages-CFCxeG8p.js');
4
+ var vMap_vMapLayerOsm_vMapLayergroup_entry = require('./v-map.v-map-layer-osm.v-map-layergroup-BJ3_NqAj.js');
5
+ var geotiffSource = require('./geotiff-source-B9ARUE9z.js');
6
+ require('./index-DmGHwivM.js');
7
+ require('./events-BMG7RKne.js');
8
+ require('./v-map-layer-helper-DnWpjZ_Q.js');
8
9
 
9
10
  /**
10
11
  * Eine Gruppe verwaltet Sichtbarkeit & Basemap-Filter ihrer Cesium-Layer.
@@ -3,8 +3,8 @@
3
3
  var styleconfig = require('./styleconfig-CVRqArk-.js');
4
4
  var index_browser = require('./index.browser-DQhD8Jwl.js');
5
5
  var index = require('./index-BIL4VsgP.js');
6
- var messages = require('./messages-D7h4m8Tx.js');
7
- var geotiffSource = require('./geotiff-source-RaNzzWkC.js');
6
+ var messages = require('./messages-CFCxeG8p.js');
7
+ var geotiffSource = require('./geotiff-source-B9ARUE9z.js');
8
8
  var core = require('@loaders.gl/core');
9
9
  var images = require('@loaders.gl/images');
10
10
  var loaderUtils = require('@loaders.gl/loader-utils');
@@ -41,9 +41,9 @@ async function createDeckGLGeoTIFFLayer(props) {
41
41
  const [
42
42
  //{ Layer: BaseLayer },
43
43
  { CompositeLayer }, { TileLayer }, { BitmapLayer }, { default: proj4 }, geotiffModule, geokeysModule,] = await Promise.all([
44
- Promise.resolve().then(function () { return require('./index-B8LHqjyg.js'); }),
45
- Promise.resolve().then(function () { return require('./index-ISOEpMC3.js'); }),
46
- Promise.resolve().then(function () { return require('./index-CbVT-Con.js'); }),
44
+ Promise.resolve().then(function () { return require('./index-ChrKyU6i.js'); }),
45
+ Promise.resolve().then(function () { return require('./index-9APmzoa2.js'); }),
46
+ Promise.resolve().then(function () { return require('./index-BJg0ncfC.js'); }),
47
47
  Promise.resolve().then(function () { return require('./index-B1oGO1g-.js'); }),
48
48
  Promise.resolve().then(function () { return require('./geotiff-CEwvF9cG.js'); }).then(function (n) { return n.geotiff; }),
49
49
  Promise.resolve().then(function () { return require('./main-dist-7TykwFci.js'); }).then(function (n) { return n.mainDist; }),
@@ -505,10 +505,10 @@ const TILE_LAYER_LOG_PREFIX = 'v-map - deck - terrain-geotiff - tilelayer - ';
505
505
  */
506
506
  async function createDeckGLGeoTIFFTerrainLayer(props) {
507
507
  const [{ CompositeLayer }, { TileLayer }, { BitmapLayer }, { SimpleMeshLayer }, MartiniModule, { default: proj4 }, geotiffModule, geokeysModule,] = await Promise.all([
508
- Promise.resolve().then(function () { return require('./index-B8LHqjyg.js'); }),
509
- Promise.resolve().then(function () { return require('./index-ISOEpMC3.js'); }),
510
- Promise.resolve().then(function () { return require('./index-CbVT-Con.js'); }),
511
- Promise.resolve().then(function () { return require('./index-CJvvX4yx.js'); }),
508
+ Promise.resolve().then(function () { return require('./index-ChrKyU6i.js'); }),
509
+ Promise.resolve().then(function () { return require('./index-9APmzoa2.js'); }),
510
+ Promise.resolve().then(function () { return require('./index-BJg0ncfC.js'); }),
511
+ Promise.resolve().then(function () { return require('./index-C1ubapwF.js'); }),
512
512
  Promise.resolve().then(function () { return require('./index-Blku2QY8.js'); }),
513
513
  Promise.resolve().then(function () { return require('./index-B1oGO1g-.js'); }),
514
514
  Promise.resolve().then(function () { return require('./geotiff-CEwvF9cG.js'); }).then(function (n) { return n.geotiff; }),
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ // events.ts
4
+ const VMapEvents = {
5
+ Error: 'vmap-error',
6
+ MapProviderReady: 'map-provider-ready',
7
+ MapProviderWillShutdown: 'map-provider-will-shutdown',
8
+ MapMouseMove: 'map-mousemove',
9
+ };
10
+
11
+ exports.VMapEvents = VMapEvents;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var messages = require('./messages-D7h4m8Tx.js');
3
+ var messages = require('./messages-CFCxeG8p.js');
4
4
 
5
5
  /**
6
6
  * ColorMap utilities for GeoTIFF visualization
@@ -1,21 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var deckProvider = require('./deck-provider-Ctq3Q8a1.js');
4
- var polygonLayer = require('./polygon-layer-B9PrN7vr.js');
3
+ var deckProvider = require('./deck-provider-fNa818HH.js');
4
+ var polygonLayer = require('./polygon-layer-Dx1ZWZP0.js');
5
5
  var wms = require('@loaders.gl/wms');
6
6
  var _commonjsHelpers = require('./_commonjsHelpers-B83fTs8d.js');
7
- var scenegraphLayer = require('./scenegraph-layer-DwNoxQdi.js');
7
+ var scenegraphLayer = require('./scenegraph-layer-ctLehP0q.js');
8
8
  var core = require('@loaders.gl/core');
9
9
  var tiles = require('@loaders.gl/tiles');
10
10
  var _3dTiles = require('@loaders.gl/3d-tiles');
11
11
  var mvt = require('@loaders.gl/mvt');
12
12
  var gis = require('@loaders.gl/gis');
13
- var layerExtension = require('./layer-extension-B_olS0rc.js');
13
+ var layerExtension = require('./layer-extension-D3a-1DFI.js');
14
14
  require('./styleconfig-CVRqArk-.js');
15
15
  require('./index.browser-DQhD8Jwl.js');
16
16
  require('./index-BIL4VsgP.js');
17
- require('./messages-D7h4m8Tx.js');
18
- require('./geotiff-source-RaNzzWkC.js');
17
+ require('./messages-CFCxeG8p.js');
18
+ require('./geotiff-source-B9ARUE9z.js');
19
19
  require('@loaders.gl/images');
20
20
  require('@loaders.gl/loader-utils');
21
21
  require('@loaders.gl/terrain');
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var polygonLayer = require('./polygon-layer-B9PrN7vr.js');
4
- var deckProvider = require('./deck-provider-Ctq3Q8a1.js');
3
+ var polygonLayer = require('./polygon-layer-Dx1ZWZP0.js');
4
+ var deckProvider = require('./deck-provider-fNa818HH.js');
5
5
  require('./styleconfig-CVRqArk-.js');
6
6
  require('./index.browser-DQhD8Jwl.js');
7
7
  require('./index-BIL4VsgP.js');
8
8
  require('./_commonjsHelpers-B83fTs8d.js');
9
- require('./messages-D7h4m8Tx.js');
10
- require('./geotiff-source-RaNzzWkC.js');
9
+ require('./messages-CFCxeG8p.js');
10
+ require('./geotiff-source-B9ARUE9z.js');
11
11
  require('@loaders.gl/core');
12
12
  require('@loaders.gl/images');
13
13
  require('@loaders.gl/loader-utils');
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var deckProvider = require('./deck-provider-Ctq3Q8a1.js');
4
- var scenegraphLayer = require('./scenegraph-layer-DwNoxQdi.js');
3
+ var deckProvider = require('./deck-provider-fNa818HH.js');
4
+ var scenegraphLayer = require('./scenegraph-layer-ctLehP0q.js');
5
5
  require('./styleconfig-CVRqArk-.js');
6
6
  require('./index.browser-DQhD8Jwl.js');
7
7
  require('./index-BIL4VsgP.js');
8
8
  require('./_commonjsHelpers-B83fTs8d.js');
9
- require('./messages-D7h4m8Tx.js');
10
- require('./geotiff-source-RaNzzWkC.js');
9
+ require('./messages-CFCxeG8p.js');
10
+ require('./geotiff-source-B9ARUE9z.js');
11
11
  require('@loaders.gl/core');
12
12
  require('@loaders.gl/images');
13
13
  require('@loaders.gl/loader-utils');
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var deckProvider = require('./deck-provider-Ctq3Q8a1.js');
4
- var layerExtension = require('./layer-extension-B_olS0rc.js');
3
+ var deckProvider = require('./deck-provider-fNa818HH.js');
4
+ var layerExtension = require('./layer-extension-D3a-1DFI.js');
5
5
  require('./styleconfig-CVRqArk-.js');
6
6
  require('./index.browser-DQhD8Jwl.js');
7
7
  require('./index-BIL4VsgP.js');
8
8
  require('./_commonjsHelpers-B83fTs8d.js');
9
- require('./messages-D7h4m8Tx.js');
10
- require('./geotiff-source-RaNzzWkC.js');
9
+ require('./messages-CFCxeG8p.js');
10
+ require('./geotiff-source-B9ARUE9z.js');
11
11
  require('@loaders.gl/core');
12
12
  require('@loaders.gl/images');
13
13
  require('@loaders.gl/loader-utils');
@@ -1612,6 +1612,7 @@ function transformTag(tag) {
1612
1612
  return tag;
1613
1613
  }
1614
1614
 
1615
+ exports.Host = Host;
1615
1616
  exports.bootstrapLazy = bootstrapLazy;
1616
1617
  exports.createEvent = createEvent;
1617
1618
  exports.getElement = getElement;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var deckProvider = require('./deck-provider-Ctq3Q8a1.js');
3
+ var deckProvider = require('./deck-provider-fNa818HH.js');
4
4
 
5
5
  // deck.gl
6
6
  // SPDX-License-Identifier: MIT
@@ -1,14 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var vMap_vMapLayerOsm_vMapLayergroup_entry = require('./v-map.v-map-layer-osm.v-map-layergroup-BsXp3BoL.js');
3
+ var vMap_vMapLayerOsm_vMapLayergroup_entry = require('./v-map.v-map-layer-osm.v-map-layergroup-BJ3_NqAj.js');
4
4
  var L = require('leaflet');
5
- var messages = require('./messages-D7h4m8Tx.js');
5
+ var messages = require('./messages-CFCxeG8p.js');
6
6
  var styleconfig = require('./styleconfig-CVRqArk-.js');
7
- var geotiffSource = require('./geotiff-source-RaNzzWkC.js');
7
+ var geotiffSource = require('./geotiff-source-B9ARUE9z.js');
8
8
  var index = require('./index-BIL4VsgP.js');
9
9
  var index_browser = require('./index.browser-DQhD8Jwl.js');
10
- require('./index-JSwBbvGA.js');
11
- require('./v-map-layer-helper-iAzxAg9I.js');
10
+ require('./index-DmGHwivM.js');
11
+ require('./events-BMG7RKne.js');
12
+ require('./v-map-layer-helper-DnWpjZ_Q.js');
12
13
  require('./_commonjsHelpers-B83fTs8d.js');
13
14
 
14
15
  function _interopNamespaceDefault(e) {