├── .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 | 
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 |
--------------------------------------------------------------------------------