├── .github └── workflows │ └── demo.yml ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── example ├── index.html └── index.ts ├── img └── maplibre-gl-opacity.gif ├── package.json ├── pnpm-lock.yaml ├── src ├── maplibre-gl-opacity.ts └── style.css ├── tsconfig.json ├── vite.config.example.ts └── vite.config.ts /.github/workflows/demo.yml: -------------------------------------------------------------------------------- 1 | name: github pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths: 8 | - 'src/**' 9 | - 'example/**' 10 | workflow_dispatch: 11 | 12 | permissions: 13 | id-token: write 14 | contents: write 15 | pull-requests: write 16 | 17 | jobs: 18 | build-deploy: 19 | runs-on: ubuntu-24.04 20 | steps: 21 | - uses: actions/checkout@v2 22 | 23 | - name: Set up Node.js 24 | uses: actions/setup-node@v4 25 | with: 26 | node-version: 22 27 | 28 | - name: install pnpm 29 | run: npm install -g pnpm 30 | 31 | - name: install 32 | run: pnpm install 33 | 34 | - name: build 35 | run: pnpm build:example 36 | 37 | - name: add nojekyll 38 | run: touch ./demo/.nojekyll 39 | 40 | - name: deploy 41 | uses: peaceiris/actions-gh-pages@v4 42 | with: 43 | github_token: ${{ secrets.GITHUB_TOKEN }} 44 | publish_dir: ./demo 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | .node-version 4 | build 5 | demo 6 | dist -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "trailingComma": "es5", 4 | "tabWidth": 4, 5 | "semi": true, 6 | "singleQuote": true, 7 | "endOfLine": "lf" 8 | } 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-2025 Yasunori Kirimoto, Kanahiro Iguchi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # maplibre-gl-opacity 2 | 3 | maplibre-gl-opacity is a MapLibre GL JS plugin that makes multiple tile layers transparent. 4 | 5 | [MapLibre GL JS Plugins](https://maplibre.org/maplibre-gl-js/docs/plugins) 6 | [npm](https://www.npmjs.com/package/maplibre-gl-opacity) 7 | 8 | ## Demo 9 | 10 | [demo](https://mug-jp.github.io/maplibre-gl-opacity) 11 | 12 | 13 | ## Usage 14 | 15 | ### Install 16 | 17 | #### npm module 18 | 19 | ```sh 20 | npm install maplibre-gl-opacity 21 | ``` 22 | 23 | ```typescript 24 | import OpacityControl from 'maplibre-gl-opacity'; 25 | ``` 26 | 27 | #### via CDN 28 | 29 | ```html 30 | 31 | 32 | ``` 33 | 34 | `OpacityControl` is globaly defined. 35 | 36 | ### Option 37 | 38 | ```javascript 39 | // addControl Option 40 | 41 | // The position of the control (one of the map corners). 42 | position: 'top-left' or 'top-right' or 'bottom-left' or 'bottom-right' 43 | 44 | 45 | // OpacityControl Option 46 | // Baselayers settings 47 | baseLayers: { 48 | m_mono: 'MIERUNE Mono', 49 | m_color: 'MIERUNE Color' 50 | } 51 | 52 | // Overlayers settings 53 | overLayers: { 54 | o_std: 'OpenStreetMap', 55 | t_pale: 'GSI Pale', 56 | t_ort: 'GSI Ort' 57 | } 58 | 59 | // Transparent slide bar settings (true or false) 60 | opacityControl: true 61 | ``` 62 | 63 | ### Example 64 | 65 | Start MapLibre GL JS easily. [MapLibre GL JS, Vite] 66 | [maplibregljs-starter](https://github.com/mug-jp/maplibregljs-starter) 67 | 68 | main.ts 69 | 70 | ```typescript 71 | import 'maplibre-gl/dist/maplibre-gl.css'; 72 | import maplibregl from 'maplibre-gl'; 73 | 74 | // module import 75 | import OpacityControl from 'maplibre-gl-opacity'; 76 | 77 | // MIERUNE MONO 78 | let map = new maplibregl.Map({ 79 | container: 'map', 80 | style: { 81 | version: 8, 82 | sources: { 83 | m_mono: { 84 | type: 'raster', 85 | tiles: ['https://tile.mierune.co.jp/mierune_mono/{z}/{x}/{y}.png'], 86 | tileSize: 256, 87 | attribution: 88 | "Maptiles by MIERUNE, under CC BY. Data by OpenStreetMap contributors, under ODbL.", 89 | }, 90 | }, 91 | layers: [ 92 | { 93 | id: 'm_mono', 94 | type: 'raster', 95 | source: 'm_mono', 96 | minzoom: 0, 97 | maxzoom: 18, 98 | }, 99 | ], 100 | }, 101 | center: [139.767, 35.681], 102 | zoom: 10, 103 | }); 104 | 105 | map.on('load', function () { 106 | // MIERUNE Color 107 | map.addSource('m_color', { 108 | type: 'raster', 109 | tiles: ['https://tile.mierune.co.jp/mierune/{z}/{x}/{y}.png'], 110 | tileSize: 256, 111 | }); 112 | map.addLayer({ 113 | id: 'm_color', 114 | type: 'raster', 115 | source: 'm_color', 116 | minzoom: 0, 117 | maxzoom: 18, 118 | }); 119 | 120 | // OpenStreetMap 121 | map.addSource('o_std', { 122 | type: 'raster', 123 | tiles: [ 124 | 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png', 125 | 'https://b.tile.openstreetmap.org/{z}/{x}/{y}.png', 126 | ], 127 | tileSize: 256, 128 | }); 129 | map.addLayer({ 130 | id: 'o_std', 131 | type: 'raster', 132 | source: 'o_std', 133 | minzoom: 0, 134 | maxzoom: 18, 135 | }); 136 | 137 | // GSI Pale 138 | map.addSource('t_pale', { 139 | type: 'raster', 140 | tiles: ['https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png'], 141 | tileSize: 256, 142 | }); 143 | map.addLayer({ 144 | id: 't_pale', 145 | type: 'raster', 146 | source: 't_pale', 147 | minzoom: 0, 148 | maxzoom: 18, 149 | }); 150 | 151 | // GSI Ort 152 | map.addSource('t_ort', { 153 | type: 'raster', 154 | tiles: ['https://cyberjapandata.gsi.go.jp/xyz/ort/{z}/{x}/{y}.jpg'], 155 | tileSize: 256, 156 | }); 157 | map.addLayer({ 158 | id: 't_ort', 159 | type: 'raster', 160 | source: 't_ort', 161 | minzoom: 0, 162 | maxzoom: 18, 163 | }); 164 | 165 | // BaseLayer 166 | const mapBaseLayer = { 167 | m_mono: 'MIERUNE Mono', 168 | m_color: 'MIERUNE Color', 169 | }; 170 | 171 | // OverLayer 172 | const mapOverLayer = { 173 | o_std: 'OpenStreetMap', 174 | t_pale: 'GSI Pale', 175 | t_ort: 'GSI Ort', 176 | }; 177 | 178 | // OpacityControl 179 | let Opacity = new OpacityControl({ 180 | baseLayers: mapBaseLayer, 181 | overLayers: mapOverLayer, 182 | opacityControl: true, 183 | }); 184 | map.addControl(Opacity, 'top-right'); 185 | 186 | // NavigationControl 187 | let nc = new maplibregl.NavigationControl(); 188 | map.addControl(nc, 'top-left'); 189 | }); 190 | ``` 191 | 192 | ## License 193 | 194 | MIT 195 | 196 | Copyright (c) 2021-2025 Yasunori Kirimoto, Kanahiro Iguchi 197 | 198 | --- 199 | 200 | ### Japanese 201 | 202 | # maplibre-gl-opacity 203 | 204 | maplibre-gl-opacityは、複数のタイルレイヤーを透過するMapLibre GL JSのプラグインです。 205 | 206 | [MapLibre GL JS Plugins](https://maplibre.org/maplibre-gl-js/docs/plugins) 207 | [npm](https://www.npmjs.com/package/maplibre-gl-opacity) 208 | 209 | ## デモ 210 | 211 | [デモ](https://mug-jp.github.io/maplibre-gl-opacity) 212 | 213 | 214 | ## 使用方法 215 | 216 | ![maplibre-gl-opacity](./img/maplibre-gl-opacity.gif) 217 | 218 | ### インストール 219 | 220 | #### npm module 221 | 222 | ```sh 223 | npm install maplibre-gl-opacity 224 | ``` 225 | 226 | ```typescript 227 | import OpacityControl from 'maplibre-gl-opacity'; 228 | ``` 229 | 230 | #### CDN経由 231 | 232 | ```html 233 | 234 | 235 | ``` 236 | 237 | `OpacityControl`がグローバル変数として定義されます。 238 | 239 | ### オプション 240 | 241 | ```javascript 242 | // addControlのオプション 243 | 244 | //コントロールの配置設定。(デフォルト:右上配置) 245 | position: 'top-left' or 'top-right' or 'bottom-left' or 'bottom-right' 246 | 247 | 248 | // OpacityControlのオプション 249 | 250 | // 背景レイヤ設定 251 | baseLayers: { 252 | m_mono: 'MIERUNE Mono', 253 | m_color: 'MIERUNE Color' 254 | } 255 | 256 | // オーバーレイヤ設定 257 | overLayers: { 258 | o_std: 'OpenStreetMap', 259 | t_pale: 'GSI Pale', 260 | t_ort: 'GSI Ort' 261 | } 262 | 263 | // 透過度スライドバー表示/非表示設定 (trueまたはfalse) 264 | opacityControl: true 265 | ``` 266 | 267 | ### 例 268 | 269 | MapLibre GL JSを手軽に始める [MapLibre GL JS, Vite] 270 | [maplibregljs-starter](https://github.com/mug-jp/maplibregljs-starter) 271 | 272 | main.ts 273 | 274 | ```typescript 275 | import 'maplibre-gl/dist/maplibre-gl.css'; 276 | import maplibregl from 'maplibre-gl'; 277 | 278 | // module import 279 | import OpacityControl from 'maplibre-gl-opacity'; 280 | 281 | // MIERUNE MONO 282 | let map = new maplibregl.Map({ 283 | container: 'map', 284 | style: { 285 | version: 8, 286 | sources: { 287 | m_mono: { 288 | type: 'raster', 289 | tiles: ['https://tile.mierune.co.jp/mierune_mono/{z}/{x}/{y}.png'], 290 | tileSize: 256, 291 | attribution: 292 | "Maptiles by MIERUNE, under CC BY. Data by OpenStreetMap contributors, under ODbL.", 293 | }, 294 | }, 295 | layers: [ 296 | { 297 | id: 'm_mono', 298 | type: 'raster', 299 | source: 'm_mono', 300 | minzoom: 0, 301 | maxzoom: 18, 302 | }, 303 | ], 304 | }, 305 | center: [139.767, 35.681], 306 | zoom: 10, 307 | }); 308 | 309 | map.on('load', function () { 310 | // MIERUNE Color 311 | map.addSource('m_color', { 312 | type: 'raster', 313 | tiles: ['https://tile.mierune.co.jp/mierune/{z}/{x}/{y}.png'], 314 | tileSize: 256, 315 | }); 316 | map.addLayer({ 317 | id: 'm_color', 318 | type: 'raster', 319 | source: 'm_color', 320 | minzoom: 0, 321 | maxzoom: 18, 322 | }); 323 | 324 | // OpenStreetMap 325 | map.addSource('o_std', { 326 | type: 'raster', 327 | tiles: [ 328 | 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png', 329 | 'https://b.tile.openstreetmap.org/{z}/{x}/{y}.png', 330 | ], 331 | tileSize: 256, 332 | }); 333 | map.addLayer({ 334 | id: 'o_std', 335 | type: 'raster', 336 | source: 'o_std', 337 | minzoom: 0, 338 | maxzoom: 18, 339 | }); 340 | 341 | // GSI Pale 342 | map.addSource('t_pale', { 343 | type: 'raster', 344 | tiles: ['https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png'], 345 | tileSize: 256, 346 | }); 347 | map.addLayer({ 348 | id: 't_pale', 349 | type: 'raster', 350 | source: 't_pale', 351 | minzoom: 0, 352 | maxzoom: 18, 353 | }); 354 | 355 | // GSI Ort 356 | map.addSource('t_ort', { 357 | type: 'raster', 358 | tiles: ['https://cyberjapandata.gsi.go.jp/xyz/ort/{z}/{x}/{y}.jpg'], 359 | tileSize: 256, 360 | }); 361 | map.addLayer({ 362 | id: 't_ort', 363 | type: 'raster', 364 | source: 't_ort', 365 | minzoom: 0, 366 | maxzoom: 18, 367 | }); 368 | 369 | // BaseLayer 370 | const mapBaseLayer = { 371 | m_mono: 'MIERUNE Mono', 372 | m_color: 'MIERUNE Color', 373 | }; 374 | 375 | // OverLayer 376 | const mapOverLayer = { 377 | o_std: 'OpenStreetMap', 378 | t_pale: 'GSI Pale', 379 | t_ort: 'GSI Ort', 380 | }; 381 | 382 | // OpacityControl 383 | let Opacity = new OpacityControl({ 384 | baseLayers: mapBaseLayer, 385 | overLayers: mapOverLayer, 386 | opacityControl: true, 387 | }); 388 | map.addControl(Opacity, 'top-right'); 389 | 390 | // NavigationControl 391 | let nc = new maplibregl.NavigationControl(); 392 | map.addControl(nc, 'top-left'); 393 | }); 394 | ``` 395 | 396 | ## ライセンス 397 | 398 | MIT 399 | 400 | Copyright (c) 2021-2025 Yasunori Kirimoto, Kanahiro Iguchi 401 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | MapLibre GL JS Starter 8 | 9 | 10 | 11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /example/index.ts: -------------------------------------------------------------------------------- 1 | import 'maplibre-gl/dist/maplibre-gl.css'; 2 | import { Map } from 'maplibre-gl'; 3 | 4 | // module import 5 | import OpacityControl from '../src/maplibre-gl-opacity'; 6 | import { NavigationControl } from 'maplibre-gl'; 7 | 8 | // MIERUNE MONO 9 | let map = new Map({ 10 | container: 'map', 11 | style: { 12 | version: 8, 13 | sources: { 14 | m_mono: { 15 | type: 'raster', 16 | tiles: ['https://tile.mierune.co.jp/mierune_mono/{z}/{x}/{y}.png'], 17 | tileSize: 256, 18 | attribution: 19 | "Maptiles by MIERUNE, under CC BY. Data by OpenStreetMap contributors, under ODbL.", 20 | }, 21 | }, 22 | layers: [ 23 | { 24 | id: 'm_mono', 25 | type: 'raster', 26 | source: 'm_mono', 27 | minzoom: 0, 28 | maxzoom: 18, 29 | }, 30 | ], 31 | }, 32 | center: [139.767, 35.681], 33 | zoom: 10, 34 | }); 35 | 36 | map.on('load', function () { 37 | // MIERUNE Color 38 | map.addSource('m_color', { 39 | type: 'raster', 40 | tiles: ['https://tile.mierune.co.jp/mierune/{z}/{x}/{y}.png'], 41 | tileSize: 256, 42 | }); 43 | map.addLayer({ 44 | id: 'm_color', 45 | type: 'raster', 46 | source: 'm_color', 47 | minzoom: 0, 48 | maxzoom: 18, 49 | }); 50 | 51 | // OpenStreetMap 52 | map.addSource('o_std', { 53 | type: 'raster', 54 | tiles: [ 55 | 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png', 56 | 'https://b.tile.openstreetmap.org/{z}/{x}/{y}.png', 57 | ], 58 | tileSize: 256, 59 | }); 60 | map.addLayer({ 61 | id: 'o_std', 62 | type: 'raster', 63 | source: 'o_std', 64 | minzoom: 0, 65 | maxzoom: 18, 66 | }); 67 | 68 | // GSI Pale 69 | map.addSource('t_pale', { 70 | type: 'raster', 71 | tiles: ['https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png'], 72 | tileSize: 256, 73 | }); 74 | map.addLayer({ 75 | id: 't_pale', 76 | type: 'raster', 77 | source: 't_pale', 78 | minzoom: 0, 79 | maxzoom: 18, 80 | }); 81 | 82 | // GSI Ort 83 | map.addSource('t_ort', { 84 | type: 'raster', 85 | tiles: ['https://cyberjapandata.gsi.go.jp/xyz/ort/{z}/{x}/{y}.jpg'], 86 | tileSize: 256, 87 | }); 88 | map.addLayer({ 89 | id: 't_ort', 90 | type: 'raster', 91 | source: 't_ort', 92 | minzoom: 0, 93 | maxzoom: 18, 94 | }); 95 | 96 | // BaseLayer 97 | const mapBaseLayer = { 98 | m_mono: 'MIERUNE Mono', 99 | m_color: 'MIERUNE Color', 100 | }; 101 | 102 | // OverLayer 103 | const mapOverLayer = { 104 | o_std: 'OpenStreetMap', 105 | t_pale: 'GSI Pale', 106 | t_ort: 'GSI Ort', 107 | }; 108 | 109 | // OpacityControl 110 | let opacityControl = new OpacityControl({ 111 | baseLayers: mapBaseLayer, 112 | overLayers: mapOverLayer, 113 | opacityControl: true, 114 | }); 115 | map.addControl(opacityControl, 'top-right'); 116 | 117 | // NavigationControl 118 | let nc = new NavigationControl(); 119 | map.addControl(nc, 'top-left'); 120 | }); 121 | -------------------------------------------------------------------------------- /img/maplibre-gl-opacity.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mug-jp/maplibre-gl-opacity/fe0b37f050cab057078d349fc148bcf2039e9cd8/img/maplibre-gl-opacity.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "maplibre-gl-opacity", 3 | "version": "1.8.0", 4 | "description": "maplibre-gl-opacity is a MapLibre GL JS plugin that makes multiple tile layers transparent.", 5 | "files": [ 6 | "build" 7 | ], 8 | "main": "build/maplibre-gl-opacity.umd.js", 9 | "module": "build/maplibre-gl-opacity.mjs", 10 | "exports": { 11 | ".": { 12 | "import": "./build/maplibre-gl-opacity.mjs", 13 | "require": "./build/maplibre-gl-opacity.umd.js" 14 | } 15 | }, 16 | "types": "build/maplibre-gl-opacity.d.ts", 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/dayjournal/maplibre-gl-opacity.git" 20 | }, 21 | "keywords": [ 22 | "MapLibre GL JS", 23 | "LayerControl", 24 | "Opacity", 25 | "tile", 26 | "plugin" 27 | ], 28 | "author": "Yasunori Kirimoto", 29 | "license": "MIT", 30 | "bugs": { 31 | "url": "https://github.com/dayjournal/maplibre-gl-opacity/issues" 32 | }, 33 | "homepage": "https://github.com/dayjournal/maplibre-gl-opacity#readme", 34 | "scripts": { 35 | "dev": "vite -c vite.config.example.ts", 36 | "build:example": "vite build -c vite.config.example.ts", 37 | "build": "vite build && tsc", 38 | "prepare": "npm run build", 39 | "test": "vitest src --coverage --coverage.provider=v8" 40 | }, 41 | "devDependencies": { 42 | "maplibre-gl": "^5.0.1", 43 | "typescript": "^5.7.3", 44 | "vite": "^6.0.7", 45 | "vitest": "^3.0.2" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | maplibre-gl: 12 | specifier: ^5.0.1 13 | version: 5.0.1 14 | typescript: 15 | specifier: ^5.7.3 16 | version: 5.7.3 17 | vite: 18 | specifier: ^6.0.7 19 | version: 6.0.7(terser@5.37.0) 20 | vitest: 21 | specifier: ^3.0.2 22 | version: 3.0.2(terser@5.37.0) 23 | 24 | packages: 25 | 26 | '@esbuild/aix-ppc64@0.24.2': 27 | resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} 28 | engines: {node: '>=18'} 29 | cpu: [ppc64] 30 | os: [aix] 31 | 32 | '@esbuild/android-arm64@0.24.2': 33 | resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} 34 | engines: {node: '>=18'} 35 | cpu: [arm64] 36 | os: [android] 37 | 38 | '@esbuild/android-arm@0.24.2': 39 | resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} 40 | engines: {node: '>=18'} 41 | cpu: [arm] 42 | os: [android] 43 | 44 | '@esbuild/android-x64@0.24.2': 45 | resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} 46 | engines: {node: '>=18'} 47 | cpu: [x64] 48 | os: [android] 49 | 50 | '@esbuild/darwin-arm64@0.24.2': 51 | resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} 52 | engines: {node: '>=18'} 53 | cpu: [arm64] 54 | os: [darwin] 55 | 56 | '@esbuild/darwin-x64@0.24.2': 57 | resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} 58 | engines: {node: '>=18'} 59 | cpu: [x64] 60 | os: [darwin] 61 | 62 | '@esbuild/freebsd-arm64@0.24.2': 63 | resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} 64 | engines: {node: '>=18'} 65 | cpu: [arm64] 66 | os: [freebsd] 67 | 68 | '@esbuild/freebsd-x64@0.24.2': 69 | resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} 70 | engines: {node: '>=18'} 71 | cpu: [x64] 72 | os: [freebsd] 73 | 74 | '@esbuild/linux-arm64@0.24.2': 75 | resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} 76 | engines: {node: '>=18'} 77 | cpu: [arm64] 78 | os: [linux] 79 | 80 | '@esbuild/linux-arm@0.24.2': 81 | resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} 82 | engines: {node: '>=18'} 83 | cpu: [arm] 84 | os: [linux] 85 | 86 | '@esbuild/linux-ia32@0.24.2': 87 | resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} 88 | engines: {node: '>=18'} 89 | cpu: [ia32] 90 | os: [linux] 91 | 92 | '@esbuild/linux-loong64@0.24.2': 93 | resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} 94 | engines: {node: '>=18'} 95 | cpu: [loong64] 96 | os: [linux] 97 | 98 | '@esbuild/linux-mips64el@0.24.2': 99 | resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} 100 | engines: {node: '>=18'} 101 | cpu: [mips64el] 102 | os: [linux] 103 | 104 | '@esbuild/linux-ppc64@0.24.2': 105 | resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} 106 | engines: {node: '>=18'} 107 | cpu: [ppc64] 108 | os: [linux] 109 | 110 | '@esbuild/linux-riscv64@0.24.2': 111 | resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} 112 | engines: {node: '>=18'} 113 | cpu: [riscv64] 114 | os: [linux] 115 | 116 | '@esbuild/linux-s390x@0.24.2': 117 | resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} 118 | engines: {node: '>=18'} 119 | cpu: [s390x] 120 | os: [linux] 121 | 122 | '@esbuild/linux-x64@0.24.2': 123 | resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} 124 | engines: {node: '>=18'} 125 | cpu: [x64] 126 | os: [linux] 127 | 128 | '@esbuild/netbsd-arm64@0.24.2': 129 | resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} 130 | engines: {node: '>=18'} 131 | cpu: [arm64] 132 | os: [netbsd] 133 | 134 | '@esbuild/netbsd-x64@0.24.2': 135 | resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} 136 | engines: {node: '>=18'} 137 | cpu: [x64] 138 | os: [netbsd] 139 | 140 | '@esbuild/openbsd-arm64@0.24.2': 141 | resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} 142 | engines: {node: '>=18'} 143 | cpu: [arm64] 144 | os: [openbsd] 145 | 146 | '@esbuild/openbsd-x64@0.24.2': 147 | resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} 148 | engines: {node: '>=18'} 149 | cpu: [x64] 150 | os: [openbsd] 151 | 152 | '@esbuild/sunos-x64@0.24.2': 153 | resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} 154 | engines: {node: '>=18'} 155 | cpu: [x64] 156 | os: [sunos] 157 | 158 | '@esbuild/win32-arm64@0.24.2': 159 | resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} 160 | engines: {node: '>=18'} 161 | cpu: [arm64] 162 | os: [win32] 163 | 164 | '@esbuild/win32-ia32@0.24.2': 165 | resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} 166 | engines: {node: '>=18'} 167 | cpu: [ia32] 168 | os: [win32] 169 | 170 | '@esbuild/win32-x64@0.24.2': 171 | resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} 172 | engines: {node: '>=18'} 173 | cpu: [x64] 174 | os: [win32] 175 | 176 | '@jridgewell/gen-mapping@0.3.8': 177 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 178 | engines: {node: '>=6.0.0'} 179 | 180 | '@jridgewell/resolve-uri@3.1.2': 181 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 182 | engines: {node: '>=6.0.0'} 183 | 184 | '@jridgewell/set-array@1.2.1': 185 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 186 | engines: {node: '>=6.0.0'} 187 | 188 | '@jridgewell/source-map@0.3.6': 189 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} 190 | 191 | '@jridgewell/sourcemap-codec@1.5.0': 192 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 193 | 194 | '@jridgewell/trace-mapping@0.3.25': 195 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 196 | 197 | '@mapbox/geojson-rewind@0.5.2': 198 | resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==} 199 | hasBin: true 200 | 201 | '@mapbox/jsonlint-lines-primitives@2.0.2': 202 | resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} 203 | engines: {node: '>= 0.6'} 204 | 205 | '@mapbox/point-geometry@0.1.0': 206 | resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} 207 | 208 | '@mapbox/tiny-sdf@2.0.6': 209 | resolution: {integrity: sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==} 210 | 211 | '@mapbox/unitbezier@0.0.1': 212 | resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} 213 | 214 | '@mapbox/vector-tile@1.3.1': 215 | resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} 216 | 217 | '@mapbox/whoots-js@3.1.0': 218 | resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} 219 | engines: {node: '>=6.0.0'} 220 | 221 | '@maplibre/maplibre-gl-style-spec@23.1.0': 222 | resolution: {integrity: sha512-R6/ihEuC5KRexmKIYkWqUv84Gm+/QwsOUgHyt1yy2XqCdGdLvlBWVWIIeTZWN4NGdwmY6xDzdSGU2R9oBLNg2w==} 223 | hasBin: true 224 | 225 | '@rollup/rollup-android-arm-eabi@4.30.1': 226 | resolution: {integrity: sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==} 227 | cpu: [arm] 228 | os: [android] 229 | 230 | '@rollup/rollup-android-arm64@4.30.1': 231 | resolution: {integrity: sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==} 232 | cpu: [arm64] 233 | os: [android] 234 | 235 | '@rollup/rollup-darwin-arm64@4.30.1': 236 | resolution: {integrity: sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==} 237 | cpu: [arm64] 238 | os: [darwin] 239 | 240 | '@rollup/rollup-darwin-x64@4.30.1': 241 | resolution: {integrity: sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==} 242 | cpu: [x64] 243 | os: [darwin] 244 | 245 | '@rollup/rollup-freebsd-arm64@4.30.1': 246 | resolution: {integrity: sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==} 247 | cpu: [arm64] 248 | os: [freebsd] 249 | 250 | '@rollup/rollup-freebsd-x64@4.30.1': 251 | resolution: {integrity: sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==} 252 | cpu: [x64] 253 | os: [freebsd] 254 | 255 | '@rollup/rollup-linux-arm-gnueabihf@4.30.1': 256 | resolution: {integrity: sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==} 257 | cpu: [arm] 258 | os: [linux] 259 | 260 | '@rollup/rollup-linux-arm-musleabihf@4.30.1': 261 | resolution: {integrity: sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==} 262 | cpu: [arm] 263 | os: [linux] 264 | 265 | '@rollup/rollup-linux-arm64-gnu@4.30.1': 266 | resolution: {integrity: sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==} 267 | cpu: [arm64] 268 | os: [linux] 269 | 270 | '@rollup/rollup-linux-arm64-musl@4.30.1': 271 | resolution: {integrity: sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==} 272 | cpu: [arm64] 273 | os: [linux] 274 | 275 | '@rollup/rollup-linux-loongarch64-gnu@4.30.1': 276 | resolution: {integrity: sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==} 277 | cpu: [loong64] 278 | os: [linux] 279 | 280 | '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': 281 | resolution: {integrity: sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==} 282 | cpu: [ppc64] 283 | os: [linux] 284 | 285 | '@rollup/rollup-linux-riscv64-gnu@4.30.1': 286 | resolution: {integrity: sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==} 287 | cpu: [riscv64] 288 | os: [linux] 289 | 290 | '@rollup/rollup-linux-s390x-gnu@4.30.1': 291 | resolution: {integrity: sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==} 292 | cpu: [s390x] 293 | os: [linux] 294 | 295 | '@rollup/rollup-linux-x64-gnu@4.30.1': 296 | resolution: {integrity: sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==} 297 | cpu: [x64] 298 | os: [linux] 299 | 300 | '@rollup/rollup-linux-x64-musl@4.30.1': 301 | resolution: {integrity: sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==} 302 | cpu: [x64] 303 | os: [linux] 304 | 305 | '@rollup/rollup-win32-arm64-msvc@4.30.1': 306 | resolution: {integrity: sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==} 307 | cpu: [arm64] 308 | os: [win32] 309 | 310 | '@rollup/rollup-win32-ia32-msvc@4.30.1': 311 | resolution: {integrity: sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==} 312 | cpu: [ia32] 313 | os: [win32] 314 | 315 | '@rollup/rollup-win32-x64-msvc@4.30.1': 316 | resolution: {integrity: sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==} 317 | cpu: [x64] 318 | os: [win32] 319 | 320 | '@types/estree@1.0.6': 321 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 322 | 323 | '@types/geojson-vt@3.2.5': 324 | resolution: {integrity: sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==} 325 | 326 | '@types/geojson@7946.0.15': 327 | resolution: {integrity: sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==} 328 | 329 | '@types/mapbox__point-geometry@0.1.4': 330 | resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} 331 | 332 | '@types/mapbox__vector-tile@1.3.4': 333 | resolution: {integrity: sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==} 334 | 335 | '@types/pbf@3.0.5': 336 | resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==} 337 | 338 | '@types/supercluster@7.1.3': 339 | resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} 340 | 341 | '@vitest/expect@3.0.2': 342 | resolution: {integrity: sha512-dKSHLBcoZI+3pmP5hiZ7I5grNru2HRtEW8Z5Zp4IXog8QYcxhlox7JUPyIIFWfN53+3HW3KPLIl6nSzUGgKSuQ==} 343 | 344 | '@vitest/mocker@3.0.2': 345 | resolution: {integrity: sha512-Hr09FoBf0jlwwSyzIF4Xw31OntpO3XtZjkccpcBf8FeVW3tpiyKlkeUzxS/txzHqpUCNIX157NaTySxedyZLvA==} 346 | peerDependencies: 347 | msw: ^2.4.9 348 | vite: ^5.0.0 || ^6.0.0 349 | peerDependenciesMeta: 350 | msw: 351 | optional: true 352 | vite: 353 | optional: true 354 | 355 | '@vitest/pretty-format@3.0.2': 356 | resolution: {integrity: sha512-yBohcBw/T/p0/JRgYD+IYcjCmuHzjC3WLAKsVE4/LwiubzZkE8N49/xIQ/KGQwDRA8PaviF8IRO8JMWMngdVVQ==} 357 | 358 | '@vitest/runner@3.0.2': 359 | resolution: {integrity: sha512-GHEsWoncrGxWuW8s405fVoDfSLk6RF2LCXp6XhevbtDjdDme1WV/eNmUueDfpY1IX3MJaCRelVCEXsT9cArfEg==} 360 | 361 | '@vitest/snapshot@3.0.2': 362 | resolution: {integrity: sha512-h9s67yD4+g+JoYG0zPCo/cLTabpDqzqNdzMawmNPzDStTiwxwkyYM1v5lWE8gmGv3SVJ2DcxA2NpQJZJv9ym3g==} 363 | 364 | '@vitest/spy@3.0.2': 365 | resolution: {integrity: sha512-8mI2iUn+PJFMT44e3ISA1R+K6ALVs47W6eriDTfXe6lFqlflID05MB4+rIFhmDSLBj8iBsZkzBYlgSkinxLzSQ==} 366 | 367 | '@vitest/utils@3.0.2': 368 | resolution: {integrity: sha512-Qu01ZYZlgHvDP02JnMBRpX43nRaZtNpIzw3C1clDXmn8eakgX6iQVGzTQ/NjkIr64WD8ioqOjkaYRVvHQI5qiw==} 369 | 370 | acorn@8.14.0: 371 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 372 | engines: {node: '>=0.4.0'} 373 | hasBin: true 374 | 375 | assertion-error@2.0.1: 376 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 377 | engines: {node: '>=12'} 378 | 379 | buffer-from@1.1.2: 380 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 381 | 382 | cac@6.7.14: 383 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 384 | engines: {node: '>=8'} 385 | 386 | chai@5.1.2: 387 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} 388 | engines: {node: '>=12'} 389 | 390 | check-error@2.1.1: 391 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 392 | engines: {node: '>= 16'} 393 | 394 | commander@2.20.3: 395 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 396 | 397 | debug@4.4.0: 398 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 399 | engines: {node: '>=6.0'} 400 | peerDependencies: 401 | supports-color: '*' 402 | peerDependenciesMeta: 403 | supports-color: 404 | optional: true 405 | 406 | deep-eql@5.0.2: 407 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 408 | engines: {node: '>=6'} 409 | 410 | earcut@3.0.1: 411 | resolution: {integrity: sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==} 412 | 413 | es-module-lexer@1.6.0: 414 | resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} 415 | 416 | esbuild@0.24.2: 417 | resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} 418 | engines: {node: '>=18'} 419 | hasBin: true 420 | 421 | estree-walker@3.0.3: 422 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 423 | 424 | expect-type@1.1.0: 425 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} 426 | engines: {node: '>=12.0.0'} 427 | 428 | fsevents@2.3.3: 429 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 430 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 431 | os: [darwin] 432 | 433 | geojson-vt@4.0.2: 434 | resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==} 435 | 436 | get-stream@6.0.1: 437 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 438 | engines: {node: '>=10'} 439 | 440 | gl-matrix@3.4.3: 441 | resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} 442 | 443 | global-prefix@4.0.0: 444 | resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==} 445 | engines: {node: '>=16'} 446 | 447 | ieee754@1.2.1: 448 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 449 | 450 | ini@4.1.3: 451 | resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} 452 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 453 | 454 | isexe@3.1.1: 455 | resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} 456 | engines: {node: '>=16'} 457 | 458 | json-stringify-pretty-compact@4.0.0: 459 | resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==} 460 | 461 | kdbush@4.0.2: 462 | resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} 463 | 464 | kind-of@6.0.3: 465 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 466 | engines: {node: '>=0.10.0'} 467 | 468 | loupe@3.1.2: 469 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} 470 | 471 | magic-string@0.30.17: 472 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 473 | 474 | maplibre-gl@5.0.1: 475 | resolution: {integrity: sha512-kNvod1Tq0BcZvn43UAciA3DrzaEGmowqMoI6nh3kUo9rf+7m89mFJI9dELxkWzJ/N9Pgnkp7xF1jzTP08PGpCw==} 476 | engines: {node: '>=16.14.0', npm: '>=8.1.0'} 477 | 478 | minimist@1.2.8: 479 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 480 | 481 | ms@2.1.3: 482 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 483 | 484 | murmurhash-js@1.0.0: 485 | resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} 486 | 487 | nanoid@3.3.8: 488 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 489 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 490 | hasBin: true 491 | 492 | pathe@2.0.2: 493 | resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} 494 | 495 | pathval@2.0.0: 496 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 497 | engines: {node: '>= 14.16'} 498 | 499 | pbf@3.3.0: 500 | resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} 501 | hasBin: true 502 | 503 | picocolors@1.1.1: 504 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 505 | 506 | postcss@8.5.1: 507 | resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} 508 | engines: {node: ^10 || ^12 || >=14} 509 | 510 | potpack@2.0.0: 511 | resolution: {integrity: sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==} 512 | 513 | protocol-buffers-schema@3.6.0: 514 | resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} 515 | 516 | quickselect@3.0.0: 517 | resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} 518 | 519 | resolve-protobuf-schema@2.1.0: 520 | resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} 521 | 522 | rollup@4.30.1: 523 | resolution: {integrity: sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==} 524 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 525 | hasBin: true 526 | 527 | rw@1.3.3: 528 | resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} 529 | 530 | siginfo@2.0.0: 531 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 532 | 533 | source-map-js@1.2.1: 534 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 535 | engines: {node: '>=0.10.0'} 536 | 537 | source-map-support@0.5.21: 538 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 539 | 540 | source-map@0.6.1: 541 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 542 | engines: {node: '>=0.10.0'} 543 | 544 | stackback@0.0.2: 545 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 546 | 547 | std-env@3.8.0: 548 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 549 | 550 | supercluster@8.0.1: 551 | resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} 552 | 553 | terser@5.37.0: 554 | resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} 555 | engines: {node: '>=10'} 556 | hasBin: true 557 | 558 | tinybench@2.9.0: 559 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 560 | 561 | tinyexec@0.3.2: 562 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 563 | 564 | tinypool@1.0.2: 565 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 566 | engines: {node: ^18.0.0 || >=20.0.0} 567 | 568 | tinyqueue@3.0.0: 569 | resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} 570 | 571 | tinyrainbow@2.0.0: 572 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 573 | engines: {node: '>=14.0.0'} 574 | 575 | tinyspy@3.0.2: 576 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 577 | engines: {node: '>=14.0.0'} 578 | 579 | typescript@5.7.3: 580 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 581 | engines: {node: '>=14.17'} 582 | hasBin: true 583 | 584 | vite-node@3.0.2: 585 | resolution: {integrity: sha512-hsEQerBAHvVAbv40m3TFQe/lTEbOp7yDpyqMJqr2Tnd+W58+DEYOt+fluQgekOePcsNBmR77lpVAnIU2Xu4SvQ==} 586 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 587 | hasBin: true 588 | 589 | vite@6.0.7: 590 | resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} 591 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 592 | hasBin: true 593 | peerDependencies: 594 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 595 | jiti: '>=1.21.0' 596 | less: '*' 597 | lightningcss: ^1.21.0 598 | sass: '*' 599 | sass-embedded: '*' 600 | stylus: '*' 601 | sugarss: '*' 602 | terser: ^5.16.0 603 | tsx: ^4.8.1 604 | yaml: ^2.4.2 605 | peerDependenciesMeta: 606 | '@types/node': 607 | optional: true 608 | jiti: 609 | optional: true 610 | less: 611 | optional: true 612 | lightningcss: 613 | optional: true 614 | sass: 615 | optional: true 616 | sass-embedded: 617 | optional: true 618 | stylus: 619 | optional: true 620 | sugarss: 621 | optional: true 622 | terser: 623 | optional: true 624 | tsx: 625 | optional: true 626 | yaml: 627 | optional: true 628 | 629 | vitest@3.0.2: 630 | resolution: {integrity: sha512-5bzaHakQ0hmVVKLhfh/jXf6oETDBtgPo8tQCHYB+wftNgFJ+Hah67IsWc8ivx4vFL025Ow8UiuTf4W57z4izvQ==} 631 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 632 | hasBin: true 633 | peerDependencies: 634 | '@edge-runtime/vm': '*' 635 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 636 | '@vitest/browser': 3.0.2 637 | '@vitest/ui': 3.0.2 638 | happy-dom: '*' 639 | jsdom: '*' 640 | peerDependenciesMeta: 641 | '@edge-runtime/vm': 642 | optional: true 643 | '@types/node': 644 | optional: true 645 | '@vitest/browser': 646 | optional: true 647 | '@vitest/ui': 648 | optional: true 649 | happy-dom: 650 | optional: true 651 | jsdom: 652 | optional: true 653 | 654 | vt-pbf@3.1.3: 655 | resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} 656 | 657 | which@4.0.0: 658 | resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} 659 | engines: {node: ^16.13.0 || >=18.0.0} 660 | hasBin: true 661 | 662 | why-is-node-running@2.3.0: 663 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 664 | engines: {node: '>=8'} 665 | hasBin: true 666 | 667 | snapshots: 668 | 669 | '@esbuild/aix-ppc64@0.24.2': 670 | optional: true 671 | 672 | '@esbuild/android-arm64@0.24.2': 673 | optional: true 674 | 675 | '@esbuild/android-arm@0.24.2': 676 | optional: true 677 | 678 | '@esbuild/android-x64@0.24.2': 679 | optional: true 680 | 681 | '@esbuild/darwin-arm64@0.24.2': 682 | optional: true 683 | 684 | '@esbuild/darwin-x64@0.24.2': 685 | optional: true 686 | 687 | '@esbuild/freebsd-arm64@0.24.2': 688 | optional: true 689 | 690 | '@esbuild/freebsd-x64@0.24.2': 691 | optional: true 692 | 693 | '@esbuild/linux-arm64@0.24.2': 694 | optional: true 695 | 696 | '@esbuild/linux-arm@0.24.2': 697 | optional: true 698 | 699 | '@esbuild/linux-ia32@0.24.2': 700 | optional: true 701 | 702 | '@esbuild/linux-loong64@0.24.2': 703 | optional: true 704 | 705 | '@esbuild/linux-mips64el@0.24.2': 706 | optional: true 707 | 708 | '@esbuild/linux-ppc64@0.24.2': 709 | optional: true 710 | 711 | '@esbuild/linux-riscv64@0.24.2': 712 | optional: true 713 | 714 | '@esbuild/linux-s390x@0.24.2': 715 | optional: true 716 | 717 | '@esbuild/linux-x64@0.24.2': 718 | optional: true 719 | 720 | '@esbuild/netbsd-arm64@0.24.2': 721 | optional: true 722 | 723 | '@esbuild/netbsd-x64@0.24.2': 724 | optional: true 725 | 726 | '@esbuild/openbsd-arm64@0.24.2': 727 | optional: true 728 | 729 | '@esbuild/openbsd-x64@0.24.2': 730 | optional: true 731 | 732 | '@esbuild/sunos-x64@0.24.2': 733 | optional: true 734 | 735 | '@esbuild/win32-arm64@0.24.2': 736 | optional: true 737 | 738 | '@esbuild/win32-ia32@0.24.2': 739 | optional: true 740 | 741 | '@esbuild/win32-x64@0.24.2': 742 | optional: true 743 | 744 | '@jridgewell/gen-mapping@0.3.8': 745 | dependencies: 746 | '@jridgewell/set-array': 1.2.1 747 | '@jridgewell/sourcemap-codec': 1.5.0 748 | '@jridgewell/trace-mapping': 0.3.25 749 | optional: true 750 | 751 | '@jridgewell/resolve-uri@3.1.2': 752 | optional: true 753 | 754 | '@jridgewell/set-array@1.2.1': 755 | optional: true 756 | 757 | '@jridgewell/source-map@0.3.6': 758 | dependencies: 759 | '@jridgewell/gen-mapping': 0.3.8 760 | '@jridgewell/trace-mapping': 0.3.25 761 | optional: true 762 | 763 | '@jridgewell/sourcemap-codec@1.5.0': {} 764 | 765 | '@jridgewell/trace-mapping@0.3.25': 766 | dependencies: 767 | '@jridgewell/resolve-uri': 3.1.2 768 | '@jridgewell/sourcemap-codec': 1.5.0 769 | optional: true 770 | 771 | '@mapbox/geojson-rewind@0.5.2': 772 | dependencies: 773 | get-stream: 6.0.1 774 | minimist: 1.2.8 775 | 776 | '@mapbox/jsonlint-lines-primitives@2.0.2': {} 777 | 778 | '@mapbox/point-geometry@0.1.0': {} 779 | 780 | '@mapbox/tiny-sdf@2.0.6': {} 781 | 782 | '@mapbox/unitbezier@0.0.1': {} 783 | 784 | '@mapbox/vector-tile@1.3.1': 785 | dependencies: 786 | '@mapbox/point-geometry': 0.1.0 787 | 788 | '@mapbox/whoots-js@3.1.0': {} 789 | 790 | '@maplibre/maplibre-gl-style-spec@23.1.0': 791 | dependencies: 792 | '@mapbox/jsonlint-lines-primitives': 2.0.2 793 | '@mapbox/unitbezier': 0.0.1 794 | json-stringify-pretty-compact: 4.0.0 795 | minimist: 1.2.8 796 | quickselect: 3.0.0 797 | rw: 1.3.3 798 | tinyqueue: 3.0.0 799 | 800 | '@rollup/rollup-android-arm-eabi@4.30.1': 801 | optional: true 802 | 803 | '@rollup/rollup-android-arm64@4.30.1': 804 | optional: true 805 | 806 | '@rollup/rollup-darwin-arm64@4.30.1': 807 | optional: true 808 | 809 | '@rollup/rollup-darwin-x64@4.30.1': 810 | optional: true 811 | 812 | '@rollup/rollup-freebsd-arm64@4.30.1': 813 | optional: true 814 | 815 | '@rollup/rollup-freebsd-x64@4.30.1': 816 | optional: true 817 | 818 | '@rollup/rollup-linux-arm-gnueabihf@4.30.1': 819 | optional: true 820 | 821 | '@rollup/rollup-linux-arm-musleabihf@4.30.1': 822 | optional: true 823 | 824 | '@rollup/rollup-linux-arm64-gnu@4.30.1': 825 | optional: true 826 | 827 | '@rollup/rollup-linux-arm64-musl@4.30.1': 828 | optional: true 829 | 830 | '@rollup/rollup-linux-loongarch64-gnu@4.30.1': 831 | optional: true 832 | 833 | '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': 834 | optional: true 835 | 836 | '@rollup/rollup-linux-riscv64-gnu@4.30.1': 837 | optional: true 838 | 839 | '@rollup/rollup-linux-s390x-gnu@4.30.1': 840 | optional: true 841 | 842 | '@rollup/rollup-linux-x64-gnu@4.30.1': 843 | optional: true 844 | 845 | '@rollup/rollup-linux-x64-musl@4.30.1': 846 | optional: true 847 | 848 | '@rollup/rollup-win32-arm64-msvc@4.30.1': 849 | optional: true 850 | 851 | '@rollup/rollup-win32-ia32-msvc@4.30.1': 852 | optional: true 853 | 854 | '@rollup/rollup-win32-x64-msvc@4.30.1': 855 | optional: true 856 | 857 | '@types/estree@1.0.6': {} 858 | 859 | '@types/geojson-vt@3.2.5': 860 | dependencies: 861 | '@types/geojson': 7946.0.15 862 | 863 | '@types/geojson@7946.0.15': {} 864 | 865 | '@types/mapbox__point-geometry@0.1.4': {} 866 | 867 | '@types/mapbox__vector-tile@1.3.4': 868 | dependencies: 869 | '@types/geojson': 7946.0.15 870 | '@types/mapbox__point-geometry': 0.1.4 871 | '@types/pbf': 3.0.5 872 | 873 | '@types/pbf@3.0.5': {} 874 | 875 | '@types/supercluster@7.1.3': 876 | dependencies: 877 | '@types/geojson': 7946.0.15 878 | 879 | '@vitest/expect@3.0.2': 880 | dependencies: 881 | '@vitest/spy': 3.0.2 882 | '@vitest/utils': 3.0.2 883 | chai: 5.1.2 884 | tinyrainbow: 2.0.0 885 | 886 | '@vitest/mocker@3.0.2(vite@6.0.7(terser@5.37.0))': 887 | dependencies: 888 | '@vitest/spy': 3.0.2 889 | estree-walker: 3.0.3 890 | magic-string: 0.30.17 891 | optionalDependencies: 892 | vite: 6.0.7(terser@5.37.0) 893 | 894 | '@vitest/pretty-format@3.0.2': 895 | dependencies: 896 | tinyrainbow: 2.0.0 897 | 898 | '@vitest/runner@3.0.2': 899 | dependencies: 900 | '@vitest/utils': 3.0.2 901 | pathe: 2.0.2 902 | 903 | '@vitest/snapshot@3.0.2': 904 | dependencies: 905 | '@vitest/pretty-format': 3.0.2 906 | magic-string: 0.30.17 907 | pathe: 2.0.2 908 | 909 | '@vitest/spy@3.0.2': 910 | dependencies: 911 | tinyspy: 3.0.2 912 | 913 | '@vitest/utils@3.0.2': 914 | dependencies: 915 | '@vitest/pretty-format': 3.0.2 916 | loupe: 3.1.2 917 | tinyrainbow: 2.0.0 918 | 919 | acorn@8.14.0: 920 | optional: true 921 | 922 | assertion-error@2.0.1: {} 923 | 924 | buffer-from@1.1.2: 925 | optional: true 926 | 927 | cac@6.7.14: {} 928 | 929 | chai@5.1.2: 930 | dependencies: 931 | assertion-error: 2.0.1 932 | check-error: 2.1.1 933 | deep-eql: 5.0.2 934 | loupe: 3.1.2 935 | pathval: 2.0.0 936 | 937 | check-error@2.1.1: {} 938 | 939 | commander@2.20.3: 940 | optional: true 941 | 942 | debug@4.4.0: 943 | dependencies: 944 | ms: 2.1.3 945 | 946 | deep-eql@5.0.2: {} 947 | 948 | earcut@3.0.1: {} 949 | 950 | es-module-lexer@1.6.0: {} 951 | 952 | esbuild@0.24.2: 953 | optionalDependencies: 954 | '@esbuild/aix-ppc64': 0.24.2 955 | '@esbuild/android-arm': 0.24.2 956 | '@esbuild/android-arm64': 0.24.2 957 | '@esbuild/android-x64': 0.24.2 958 | '@esbuild/darwin-arm64': 0.24.2 959 | '@esbuild/darwin-x64': 0.24.2 960 | '@esbuild/freebsd-arm64': 0.24.2 961 | '@esbuild/freebsd-x64': 0.24.2 962 | '@esbuild/linux-arm': 0.24.2 963 | '@esbuild/linux-arm64': 0.24.2 964 | '@esbuild/linux-ia32': 0.24.2 965 | '@esbuild/linux-loong64': 0.24.2 966 | '@esbuild/linux-mips64el': 0.24.2 967 | '@esbuild/linux-ppc64': 0.24.2 968 | '@esbuild/linux-riscv64': 0.24.2 969 | '@esbuild/linux-s390x': 0.24.2 970 | '@esbuild/linux-x64': 0.24.2 971 | '@esbuild/netbsd-arm64': 0.24.2 972 | '@esbuild/netbsd-x64': 0.24.2 973 | '@esbuild/openbsd-arm64': 0.24.2 974 | '@esbuild/openbsd-x64': 0.24.2 975 | '@esbuild/sunos-x64': 0.24.2 976 | '@esbuild/win32-arm64': 0.24.2 977 | '@esbuild/win32-ia32': 0.24.2 978 | '@esbuild/win32-x64': 0.24.2 979 | 980 | estree-walker@3.0.3: 981 | dependencies: 982 | '@types/estree': 1.0.6 983 | 984 | expect-type@1.1.0: {} 985 | 986 | fsevents@2.3.3: 987 | optional: true 988 | 989 | geojson-vt@4.0.2: {} 990 | 991 | get-stream@6.0.1: {} 992 | 993 | gl-matrix@3.4.3: {} 994 | 995 | global-prefix@4.0.0: 996 | dependencies: 997 | ini: 4.1.3 998 | kind-of: 6.0.3 999 | which: 4.0.0 1000 | 1001 | ieee754@1.2.1: {} 1002 | 1003 | ini@4.1.3: {} 1004 | 1005 | isexe@3.1.1: {} 1006 | 1007 | json-stringify-pretty-compact@4.0.0: {} 1008 | 1009 | kdbush@4.0.2: {} 1010 | 1011 | kind-of@6.0.3: {} 1012 | 1013 | loupe@3.1.2: {} 1014 | 1015 | magic-string@0.30.17: 1016 | dependencies: 1017 | '@jridgewell/sourcemap-codec': 1.5.0 1018 | 1019 | maplibre-gl@5.0.1: 1020 | dependencies: 1021 | '@mapbox/geojson-rewind': 0.5.2 1022 | '@mapbox/jsonlint-lines-primitives': 2.0.2 1023 | '@mapbox/point-geometry': 0.1.0 1024 | '@mapbox/tiny-sdf': 2.0.6 1025 | '@mapbox/unitbezier': 0.0.1 1026 | '@mapbox/vector-tile': 1.3.1 1027 | '@mapbox/whoots-js': 3.1.0 1028 | '@maplibre/maplibre-gl-style-spec': 23.1.0 1029 | '@types/geojson': 7946.0.15 1030 | '@types/geojson-vt': 3.2.5 1031 | '@types/mapbox__point-geometry': 0.1.4 1032 | '@types/mapbox__vector-tile': 1.3.4 1033 | '@types/pbf': 3.0.5 1034 | '@types/supercluster': 7.1.3 1035 | earcut: 3.0.1 1036 | geojson-vt: 4.0.2 1037 | gl-matrix: 3.4.3 1038 | global-prefix: 4.0.0 1039 | kdbush: 4.0.2 1040 | murmurhash-js: 1.0.0 1041 | pbf: 3.3.0 1042 | potpack: 2.0.0 1043 | quickselect: 3.0.0 1044 | supercluster: 8.0.1 1045 | tinyqueue: 3.0.0 1046 | vt-pbf: 3.1.3 1047 | 1048 | minimist@1.2.8: {} 1049 | 1050 | ms@2.1.3: {} 1051 | 1052 | murmurhash-js@1.0.0: {} 1053 | 1054 | nanoid@3.3.8: {} 1055 | 1056 | pathe@2.0.2: {} 1057 | 1058 | pathval@2.0.0: {} 1059 | 1060 | pbf@3.3.0: 1061 | dependencies: 1062 | ieee754: 1.2.1 1063 | resolve-protobuf-schema: 2.1.0 1064 | 1065 | picocolors@1.1.1: {} 1066 | 1067 | postcss@8.5.1: 1068 | dependencies: 1069 | nanoid: 3.3.8 1070 | picocolors: 1.1.1 1071 | source-map-js: 1.2.1 1072 | 1073 | potpack@2.0.0: {} 1074 | 1075 | protocol-buffers-schema@3.6.0: {} 1076 | 1077 | quickselect@3.0.0: {} 1078 | 1079 | resolve-protobuf-schema@2.1.0: 1080 | dependencies: 1081 | protocol-buffers-schema: 3.6.0 1082 | 1083 | rollup@4.30.1: 1084 | dependencies: 1085 | '@types/estree': 1.0.6 1086 | optionalDependencies: 1087 | '@rollup/rollup-android-arm-eabi': 4.30.1 1088 | '@rollup/rollup-android-arm64': 4.30.1 1089 | '@rollup/rollup-darwin-arm64': 4.30.1 1090 | '@rollup/rollup-darwin-x64': 4.30.1 1091 | '@rollup/rollup-freebsd-arm64': 4.30.1 1092 | '@rollup/rollup-freebsd-x64': 4.30.1 1093 | '@rollup/rollup-linux-arm-gnueabihf': 4.30.1 1094 | '@rollup/rollup-linux-arm-musleabihf': 4.30.1 1095 | '@rollup/rollup-linux-arm64-gnu': 4.30.1 1096 | '@rollup/rollup-linux-arm64-musl': 4.30.1 1097 | '@rollup/rollup-linux-loongarch64-gnu': 4.30.1 1098 | '@rollup/rollup-linux-powerpc64le-gnu': 4.30.1 1099 | '@rollup/rollup-linux-riscv64-gnu': 4.30.1 1100 | '@rollup/rollup-linux-s390x-gnu': 4.30.1 1101 | '@rollup/rollup-linux-x64-gnu': 4.30.1 1102 | '@rollup/rollup-linux-x64-musl': 4.30.1 1103 | '@rollup/rollup-win32-arm64-msvc': 4.30.1 1104 | '@rollup/rollup-win32-ia32-msvc': 4.30.1 1105 | '@rollup/rollup-win32-x64-msvc': 4.30.1 1106 | fsevents: 2.3.3 1107 | 1108 | rw@1.3.3: {} 1109 | 1110 | siginfo@2.0.0: {} 1111 | 1112 | source-map-js@1.2.1: {} 1113 | 1114 | source-map-support@0.5.21: 1115 | dependencies: 1116 | buffer-from: 1.1.2 1117 | source-map: 0.6.1 1118 | optional: true 1119 | 1120 | source-map@0.6.1: 1121 | optional: true 1122 | 1123 | stackback@0.0.2: {} 1124 | 1125 | std-env@3.8.0: {} 1126 | 1127 | supercluster@8.0.1: 1128 | dependencies: 1129 | kdbush: 4.0.2 1130 | 1131 | terser@5.37.0: 1132 | dependencies: 1133 | '@jridgewell/source-map': 0.3.6 1134 | acorn: 8.14.0 1135 | commander: 2.20.3 1136 | source-map-support: 0.5.21 1137 | optional: true 1138 | 1139 | tinybench@2.9.0: {} 1140 | 1141 | tinyexec@0.3.2: {} 1142 | 1143 | tinypool@1.0.2: {} 1144 | 1145 | tinyqueue@3.0.0: {} 1146 | 1147 | tinyrainbow@2.0.0: {} 1148 | 1149 | tinyspy@3.0.2: {} 1150 | 1151 | typescript@5.7.3: {} 1152 | 1153 | vite-node@3.0.2(terser@5.37.0): 1154 | dependencies: 1155 | cac: 6.7.14 1156 | debug: 4.4.0 1157 | es-module-lexer: 1.6.0 1158 | pathe: 2.0.2 1159 | vite: 6.0.7(terser@5.37.0) 1160 | transitivePeerDependencies: 1161 | - '@types/node' 1162 | - jiti 1163 | - less 1164 | - lightningcss 1165 | - sass 1166 | - sass-embedded 1167 | - stylus 1168 | - sugarss 1169 | - supports-color 1170 | - terser 1171 | - tsx 1172 | - yaml 1173 | 1174 | vite@6.0.7(terser@5.37.0): 1175 | dependencies: 1176 | esbuild: 0.24.2 1177 | postcss: 8.5.1 1178 | rollup: 4.30.1 1179 | optionalDependencies: 1180 | fsevents: 2.3.3 1181 | terser: 5.37.0 1182 | 1183 | vitest@3.0.2(terser@5.37.0): 1184 | dependencies: 1185 | '@vitest/expect': 3.0.2 1186 | '@vitest/mocker': 3.0.2(vite@6.0.7(terser@5.37.0)) 1187 | '@vitest/pretty-format': 3.0.2 1188 | '@vitest/runner': 3.0.2 1189 | '@vitest/snapshot': 3.0.2 1190 | '@vitest/spy': 3.0.2 1191 | '@vitest/utils': 3.0.2 1192 | chai: 5.1.2 1193 | debug: 4.4.0 1194 | expect-type: 1.1.0 1195 | magic-string: 0.30.17 1196 | pathe: 2.0.2 1197 | std-env: 3.8.0 1198 | tinybench: 2.9.0 1199 | tinyexec: 0.3.2 1200 | tinypool: 1.0.2 1201 | tinyrainbow: 2.0.0 1202 | vite: 6.0.7(terser@5.37.0) 1203 | vite-node: 3.0.2(terser@5.37.0) 1204 | why-is-node-running: 2.3.0 1205 | transitivePeerDependencies: 1206 | - jiti 1207 | - less 1208 | - lightningcss 1209 | - msw 1210 | - sass 1211 | - sass-embedded 1212 | - stylus 1213 | - sugarss 1214 | - supports-color 1215 | - terser 1216 | - tsx 1217 | - yaml 1218 | 1219 | vt-pbf@3.1.3: 1220 | dependencies: 1221 | '@mapbox/point-geometry': 0.1.0 1222 | '@mapbox/vector-tile': 1.3.1 1223 | pbf: 3.3.0 1224 | 1225 | which@4.0.0: 1226 | dependencies: 1227 | isexe: 3.1.1 1228 | 1229 | why-is-node-running@2.3.0: 1230 | dependencies: 1231 | siginfo: 2.0.0 1232 | stackback: 0.0.2 1233 | -------------------------------------------------------------------------------- /src/maplibre-gl-opacity.ts: -------------------------------------------------------------------------------- 1 | import './style.css'; 2 | 3 | import type { IControl, Map } from 'maplibre-gl'; 4 | 5 | type OpacityControlOptions = { 6 | baseLayers: Record; 7 | overLayers: Record; 8 | opacityControl: boolean; 9 | }; 10 | 11 | // デフォルトオプション設定 12 | const defaultOptions: OpacityControlOptions = { 13 | baseLayers: {}, 14 | overLayers: {}, 15 | opacityControl: false, 16 | }; 17 | 18 | class OpacityControl implements IControl { 19 | #map: Map | undefined; 20 | #container: HTMLDivElement | undefined; 21 | #baseLayersOption: Record; 22 | #overLayersOption: Record; 23 | #opacityControlOption: boolean; 24 | 25 | constructor(options: Partial) { 26 | // オプション設定 27 | this.#baseLayersOption = options.baseLayers ?? defaultOptions.baseLayers; 28 | this.#overLayersOption = options.overLayers ?? defaultOptions.overLayers; 29 | this.#opacityControlOption = options.opacityControl ?? defaultOptions.opacityControl; 30 | } 31 | 32 | // ラジオボタン作成 33 | #radioButtonControlAdd(layerId: string) { 34 | // 初期レイヤ定義 35 | const initLayer = Object.keys(this.#baseLayersOption)[0]; 36 | // ラジオボタン追加 37 | const radioButton = document.createElement('input'); 38 | radioButton.setAttribute('type', 'radio'); 39 | radioButton.id = layerId; 40 | // 初期レイヤのみ表示 41 | if (layerId === initLayer) { 42 | radioButton.checked = true; 43 | this.#map!.setLayoutProperty(layerId, 'visibility', 'visible'); 44 | } else { 45 | this.#map!.setLayoutProperty(layerId, 'visibility', 'none'); 46 | } 47 | this.#container!.appendChild(radioButton); 48 | // ラジオボタンイベント 49 | radioButton.addEventListener('change', (event) => { 50 | // 選択レイヤ表示 51 | // @ts-ignore 52 | event.target.checked = true; 53 | this.#map!.setLayoutProperty(layerId, 'visibility', 'visible'); 54 | // 選択レイヤ以外非表示 55 | Object.keys(this.#baseLayersOption).map((layer) => { 56 | // @ts-ignore 57 | if (layer !== event.target.id) { 58 | // @ts-ignore 59 | document.getElementById(layer).checked = false; 60 | this.#map!.setLayoutProperty(layer, 'visibility', 'none'); 61 | } 62 | }); 63 | }); 64 | // レイヤ名追加 65 | const layerName = document.createElement('label'); 66 | layerName.htmlFor = layerId; 67 | layerName.appendChild(document.createTextNode(this.#baseLayersOption[layerId])); 68 | this.#container!.appendChild(layerName); 69 | } 70 | 71 | // チェックボックス作成 72 | #checkBoxControlAdd(layerId: string) { 73 | // チェックボックス追加 74 | const checkBox = document.createElement('input'); 75 | checkBox.setAttribute('type', 'checkbox'); 76 | checkBox.id = layerId; 77 | // 全レイヤ非表示 78 | this.#map!.setLayoutProperty(layerId, 'visibility', 'none'); 79 | this.#container!.appendChild(checkBox); 80 | // チェックボックスイベント 81 | checkBox.addEventListener('change', (event) => { 82 | // レイヤの表示・非表示 83 | // @ts-ignore 84 | if (event.target.checked) { 85 | this.#map!.setLayoutProperty(layerId, 'visibility', 'visible'); 86 | } else { 87 | this.#map!.setLayoutProperty(layerId, 'visibility', 'none'); 88 | } 89 | }); 90 | // レイヤ名追加 91 | const layerName = document.createElement('label'); 92 | layerName.htmlFor = layerId; 93 | layerName.appendChild(document.createTextNode(this.#overLayersOption[layerId])); 94 | this.#container!.appendChild(layerName); 95 | } 96 | 97 | // スライドバー作成 98 | #rangeControlAdd(layerId: string) { 99 | // スライドバー追加 100 | const range = document.createElement('input'); 101 | range.type = 'range'; 102 | range.min = String(0); 103 | range.max = String(100); 104 | range.value = String(100); 105 | this.#container!.appendChild(range); 106 | // スライドバースイベント 107 | range.addEventListener('input', (event) => { 108 | // 透過度設定 109 | this.#map!.setPaintProperty( 110 | layerId, 111 | 'raster-opacity', 112 | // @ts-ignore 113 | Number(event.target.value / 100) 114 | ); 115 | }); 116 | } 117 | 118 | // コントロール作成 119 | #opacityControlAdd() { 120 | // コントロール設定 121 | this.#container = document.createElement('div'); 122 | this.#container.className = 'maplibregl-ctrl maplibregl-ctrl-group'; 123 | this.#container.id = 'opacity-control'; 124 | // 背景レイヤ設定 125 | if (this.#baseLayersOption) { 126 | Object.keys(this.#baseLayersOption).map((layer) => { 127 | const layerId = layer; 128 | const br = document.createElement('br'); 129 | // ラジオボタン作成 130 | this.#radioButtonControlAdd(layerId); 131 | this.#container!.appendChild(br); 132 | }); 133 | } 134 | // 区切り線 135 | if (this.#baseLayersOption && this.#overLayersOption) { 136 | const hr = document.createElement('hr'); 137 | this.#container.appendChild(hr); 138 | } 139 | // オーバーレイヤ設定 140 | if (this.#overLayersOption) { 141 | Object.keys(this.#overLayersOption).map((layer) => { 142 | const layerId = layer; 143 | const br = document.createElement('br'); 144 | // チェックボックス作成 145 | this.#checkBoxControlAdd(layerId); 146 | this.#container!.appendChild(br); 147 | // スライドバー作成 148 | if (this.#opacityControlOption) { 149 | this.#rangeControlAdd(layerId); 150 | this.#container!.appendChild(br); 151 | } 152 | }); 153 | } 154 | } 155 | 156 | onAdd(map: Map) { 157 | this.#map = map; 158 | // コントロール作成 159 | this.#opacityControlAdd(); 160 | return this.#container!; 161 | } 162 | 163 | onRemove() { 164 | this.#container!.parentNode!.removeChild(this.#container!); 165 | this.#map = undefined; 166 | } 167 | } 168 | 169 | export default OpacityControl; 170 | -------------------------------------------------------------------------------- /src/style.css: -------------------------------------------------------------------------------- 1 | /*コントロール全体設定*/ 2 | #opacity-control { 3 | width: 150px; 4 | padding: 10px 0px 10px 10px; 5 | } 6 | #opacity-control hr { 7 | margin: 5px 10px 5px 0px; 8 | } 9 | /*チェックボックス設定*/ 10 | #opacity-control input[type='checkbox'] { 11 | margin-right: 5px; 12 | } 13 | /*ラジオボタン設定*/ 14 | #opacity-control input[type='radio'] { 15 | margin-right: 5px; 16 | } 17 | /* スライドバー設定 */ 18 | #opacity-control input[type='range'] { 19 | -webkit-appearance: none; 20 | -webkit-tap-highlight-color: rgba(255, 255, 255, 0); 21 | width: 125px; 22 | height: 10px; 23 | margin: 0; 24 | border: none; 25 | padding: 1px 2px; 26 | border-radius: 30px; 27 | background: #f1f0ee; 28 | outline: none; 29 | } 30 | #opacity-control input[type='range']::-ms-track { 31 | border: inherit; 32 | color: transparent; 33 | background: transparent; 34 | } 35 | #opacity-control input[type='range']::-ms-fill-lower, 36 | #opacity-control input[type='range']::-ms-fill-upper { 37 | background: transparent; 38 | } 39 | #opacity-control input[type='range']::-ms-tooltip { 40 | display: none; 41 | } 42 | #opacity-control input[type='range']::-ms-thumb { 43 | width: 15px; 44 | height: 18px; 45 | border-radius: 12px; 46 | border: 0; 47 | background-image: linear-gradient(to bottom, #1253a4 0, #1253a4 100%); 48 | } 49 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "node", 11 | "isolatedModules": true, 12 | "moduleDetection": "force", 13 | "emitDeclarationOnly": true, 14 | "declaration": true, 15 | "declarationDir": "./build", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "include": ["src"], 24 | "exclude": ["src/**/*.test.ts"] 25 | } 26 | -------------------------------------------------------------------------------- /vite.config.example.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | 3 | export default defineConfig({ 4 | root: './example', 5 | base: './', 6 | build: { 7 | outDir: '../demo', 8 | chunkSizeWarningLimit: 1000, 9 | emptyOutDir: true, 10 | }, 11 | plugins: [], 12 | }); 13 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | build: { 5 | outDir: 'build', 6 | sourcemap: true, 7 | lib: { 8 | entry: 'src/maplibre-gl-opacity.ts', 9 | name: 'OpacityControl', 10 | fileName: 'maplibre-gl-opacity', 11 | }, 12 | rollupOptions: { 13 | external: ['maplibre-gl'], 14 | output: { 15 | globals: { 16 | 'maplibre-gl': 'maplibregl', 17 | }, 18 | }, 19 | }, 20 | }, 21 | test: { 22 | browser: { 23 | provider: 'playwright', // or 'webdriverio' 24 | enabled: true, 25 | name: 'chromium', // browser name is required 26 | headless: true, 27 | }, 28 | }, 29 | }); 30 | --------------------------------------------------------------------------------