From 2983d480322710b902c4ae84d3045452940c428a Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 12 May 2025 17:08:01 +0200 Subject: [PATCH 01/76] Scaffold components --- components/.storybook/preview.ts | 2 +- .../AttributionControl.stories.svelte | 11 +++++++++++ .../AttributionControl/AttributionControl.svelte | 7 +++++++ components/src/AttributionControl/index.js | 2 ++ .../GeoCoderControl/GeoCoderControl.stories.svelte | 11 +++++++++++ .../src/GeoCoderControl/GeoCoderControl.svelte | 7 +++++++ components/src/GeoCoderControl/index.js | 2 ++ .../LinkToLocationControl.stories.svelte | 11 +++++++++++ .../LinkToLocationControl.svelte | 7 +++++++ components/src/LinkToLocationControl/index.js | 2 ++ components/src/Map/Map.stories.svelte | 14 ++++++++++++++ components/src/Map/Map.svelte | 8 ++++++++ components/src/Map/index.js | 2 ++ .../src/MapControl/MapControl.stories.svelte | 11 +++++++++++ components/src/MapControl/MapControl.svelte | 7 +++++++ components/src/MapControl/index.js | 2 ++ components/src/MapSource/MapSource.stories.svelte | 11 +++++++++++ components/src/MapSource/MapSource.svelte | 8 ++++++++ components/src/MapSource/index.js | 2 ++ .../MapVectorLayer/MapVectorLayer.stories.svelte | 11 +++++++++++ .../src/MapVectorLayer/MapVectorLayer.svelte | 8 ++++++++ components/src/MapVectorLayer/index.js | 2 ++ .../NavigationControl.stories.svelte | 11 +++++++++++ .../src/NavigationControl/NavigationControl.svelte | 7 +++++++ components/src/NavigationControl/index.js | 2 ++ .../src/ScaleControl/ScaleControl.stories.svelte | 11 +++++++++++ components/src/ScaleControl/ScaleControl.svelte | 7 +++++++ components/src/ScaleControl/index.js | 2 ++ 28 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 components/src/AttributionControl/AttributionControl.stories.svelte create mode 100644 components/src/AttributionControl/AttributionControl.svelte create mode 100644 components/src/AttributionControl/index.js create mode 100644 components/src/GeoCoderControl/GeoCoderControl.stories.svelte create mode 100644 components/src/GeoCoderControl/GeoCoderControl.svelte create mode 100644 components/src/GeoCoderControl/index.js create mode 100644 components/src/LinkToLocationControl/LinkToLocationControl.stories.svelte create mode 100644 components/src/LinkToLocationControl/LinkToLocationControl.svelte create mode 100644 components/src/LinkToLocationControl/index.js create mode 100644 components/src/Map/Map.stories.svelte create mode 100644 components/src/Map/Map.svelte create mode 100644 components/src/Map/index.js create mode 100644 components/src/MapControl/MapControl.stories.svelte create mode 100644 components/src/MapControl/MapControl.svelte create mode 100644 components/src/MapControl/index.js create mode 100644 components/src/MapSource/MapSource.stories.svelte create mode 100644 components/src/MapSource/MapSource.svelte create mode 100644 components/src/MapSource/index.js create mode 100644 components/src/MapVectorLayer/MapVectorLayer.stories.svelte create mode 100644 components/src/MapVectorLayer/MapVectorLayer.svelte create mode 100644 components/src/MapVectorLayer/index.js create mode 100644 components/src/NavigationControl/NavigationControl.stories.svelte create mode 100644 components/src/NavigationControl/NavigationControl.svelte create mode 100644 components/src/NavigationControl/index.js create mode 100644 components/src/ScaleControl/ScaleControl.stories.svelte create mode 100644 components/src/ScaleControl/ScaleControl.svelte create mode 100644 components/src/ScaleControl/index.js diff --git a/components/.storybook/preview.ts b/components/.storybook/preview.ts index ed31b2d0..eacd6873 100644 --- a/components/.storybook/preview.ts +++ b/components/.storybook/preview.ts @@ -3,7 +3,7 @@ import type { Preview } from "@storybook/sveltekit"; const preview: Preview = { parameters: { options: { - storySort: { order: ['About', 'Design Tokens', "Typography", ["Headline", "Copy", "Caption"], "Display", "Chart", ["ChartHeader"], "Form", "Deprecated"] }, + storySort: { order: ['About', 'Design Tokens', "Typography", ["Headline", "Copy", "Caption"], "Display", "Chart", ["ChartHeader"], "Map", ["Map", "MapSource", "MapVectorLayer", "Control", ["MapControl", "ScaleControl", "NavigationControl"]], "Form", "Deprecated"] }, }, controls: { matchers: { diff --git a/components/src/AttributionControl/AttributionControl.stories.svelte b/components/src/AttributionControl/AttributionControl.stories.svelte new file mode 100644 index 00000000..4e0d2582 --- /dev/null +++ b/components/src/AttributionControl/AttributionControl.stories.svelte @@ -0,0 +1,11 @@ + + + diff --git a/components/src/AttributionControl/AttributionControl.svelte b/components/src/AttributionControl/AttributionControl.svelte new file mode 100644 index 00000000..fdc2d2e6 --- /dev/null +++ b/components/src/AttributionControl/AttributionControl.svelte @@ -0,0 +1,7 @@ + + + diff --git a/components/src/AttributionControl/index.js b/components/src/AttributionControl/index.js new file mode 100644 index 00000000..97e96dbd --- /dev/null +++ b/components/src/AttributionControl/index.js @@ -0,0 +1,2 @@ +import AttributionControl from './AttributionControl.svelte'; +export default AttributionControl; diff --git a/components/src/GeoCoderControl/GeoCoderControl.stories.svelte b/components/src/GeoCoderControl/GeoCoderControl.stories.svelte new file mode 100644 index 00000000..b170a12c --- /dev/null +++ b/components/src/GeoCoderControl/GeoCoderControl.stories.svelte @@ -0,0 +1,11 @@ + + + diff --git a/components/src/GeoCoderControl/GeoCoderControl.svelte b/components/src/GeoCoderControl/GeoCoderControl.svelte new file mode 100644 index 00000000..9d4542b6 --- /dev/null +++ b/components/src/GeoCoderControl/GeoCoderControl.svelte @@ -0,0 +1,7 @@ + + + diff --git a/components/src/GeoCoderControl/index.js b/components/src/GeoCoderControl/index.js new file mode 100644 index 00000000..b82df186 --- /dev/null +++ b/components/src/GeoCoderControl/index.js @@ -0,0 +1,2 @@ +import GeoCoderControl from './GeoCoderControl.svelte'; +export default GeoCoderControl; diff --git a/components/src/LinkToLocationControl/LinkToLocationControl.stories.svelte b/components/src/LinkToLocationControl/LinkToLocationControl.stories.svelte new file mode 100644 index 00000000..53e31551 --- /dev/null +++ b/components/src/LinkToLocationControl/LinkToLocationControl.stories.svelte @@ -0,0 +1,11 @@ + + + diff --git a/components/src/LinkToLocationControl/LinkToLocationControl.svelte b/components/src/LinkToLocationControl/LinkToLocationControl.svelte new file mode 100644 index 00000000..51e6d02f --- /dev/null +++ b/components/src/LinkToLocationControl/LinkToLocationControl.svelte @@ -0,0 +1,7 @@ + + + diff --git a/components/src/LinkToLocationControl/index.js b/components/src/LinkToLocationControl/index.js new file mode 100644 index 00000000..04a81eea --- /dev/null +++ b/components/src/LinkToLocationControl/index.js @@ -0,0 +1,2 @@ +import LinkToLocationControl from './LinkToLocationControl.svelte'; +export default LinkToLocationControl; diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte new file mode 100644 index 00000000..4e2c19c7 --- /dev/null +++ b/components/src/Map/Map.stories.svelte @@ -0,0 +1,14 @@ + + + + + diff --git a/components/src/Map/Map.svelte b/components/src/Map/Map.svelte new file mode 100644 index 00000000..01e43672 --- /dev/null +++ b/components/src/Map/Map.svelte @@ -0,0 +1,8 @@ + + + diff --git a/components/src/Map/index.js b/components/src/Map/index.js new file mode 100644 index 00000000..85494a9a --- /dev/null +++ b/components/src/Map/index.js @@ -0,0 +1,2 @@ +import Map from './Map.svelte'; +export default Map; diff --git a/components/src/MapControl/MapControl.stories.svelte b/components/src/MapControl/MapControl.stories.svelte new file mode 100644 index 00000000..cc09820d --- /dev/null +++ b/components/src/MapControl/MapControl.stories.svelte @@ -0,0 +1,11 @@ + + + diff --git a/components/src/MapControl/MapControl.svelte b/components/src/MapControl/MapControl.svelte new file mode 100644 index 00000000..36de021d --- /dev/null +++ b/components/src/MapControl/MapControl.svelte @@ -0,0 +1,7 @@ + + + diff --git a/components/src/MapControl/index.js b/components/src/MapControl/index.js new file mode 100644 index 00000000..97a869d2 --- /dev/null +++ b/components/src/MapControl/index.js @@ -0,0 +1,2 @@ +import MapControl from './MapControl.svelte'; +export default MapControl; diff --git a/components/src/MapSource/MapSource.stories.svelte b/components/src/MapSource/MapSource.stories.svelte new file mode 100644 index 00000000..33a45800 --- /dev/null +++ b/components/src/MapSource/MapSource.stories.svelte @@ -0,0 +1,11 @@ + + + diff --git a/components/src/MapSource/MapSource.svelte b/components/src/MapSource/MapSource.svelte new file mode 100644 index 00000000..15dc85ac --- /dev/null +++ b/components/src/MapSource/MapSource.svelte @@ -0,0 +1,8 @@ + + + diff --git a/components/src/MapSource/index.js b/components/src/MapSource/index.js new file mode 100644 index 00000000..2becb5af --- /dev/null +++ b/components/src/MapSource/index.js @@ -0,0 +1,2 @@ +import MapSource from './MapSource.svelte'; +export default MapSource; diff --git a/components/src/MapVectorLayer/MapVectorLayer.stories.svelte b/components/src/MapVectorLayer/MapVectorLayer.stories.svelte new file mode 100644 index 00000000..06544bc2 --- /dev/null +++ b/components/src/MapVectorLayer/MapVectorLayer.stories.svelte @@ -0,0 +1,11 @@ + + + diff --git a/components/src/MapVectorLayer/MapVectorLayer.svelte b/components/src/MapVectorLayer/MapVectorLayer.svelte new file mode 100644 index 00000000..7092707e --- /dev/null +++ b/components/src/MapVectorLayer/MapVectorLayer.svelte @@ -0,0 +1,8 @@ + + + diff --git a/components/src/MapVectorLayer/index.js b/components/src/MapVectorLayer/index.js new file mode 100644 index 00000000..1ea3f0e9 --- /dev/null +++ b/components/src/MapVectorLayer/index.js @@ -0,0 +1,2 @@ +import MapVectorLayer from './MapVectorLayer.svelte'; +export default MapVectorLayer; diff --git a/components/src/NavigationControl/NavigationControl.stories.svelte b/components/src/NavigationControl/NavigationControl.stories.svelte new file mode 100644 index 00000000..dbc4209d --- /dev/null +++ b/components/src/NavigationControl/NavigationControl.stories.svelte @@ -0,0 +1,11 @@ + + + diff --git a/components/src/NavigationControl/NavigationControl.svelte b/components/src/NavigationControl/NavigationControl.svelte new file mode 100644 index 00000000..f715147a --- /dev/null +++ b/components/src/NavigationControl/NavigationControl.svelte @@ -0,0 +1,7 @@ + + + diff --git a/components/src/NavigationControl/index.js b/components/src/NavigationControl/index.js new file mode 100644 index 00000000..f2462044 --- /dev/null +++ b/components/src/NavigationControl/index.js @@ -0,0 +1,2 @@ +import NavigationControl from './NavigationControl.svelte'; +export default NavigationControl; diff --git a/components/src/ScaleControl/ScaleControl.stories.svelte b/components/src/ScaleControl/ScaleControl.stories.svelte new file mode 100644 index 00000000..d5da69f1 --- /dev/null +++ b/components/src/ScaleControl/ScaleControl.stories.svelte @@ -0,0 +1,11 @@ + + + diff --git a/components/src/ScaleControl/ScaleControl.svelte b/components/src/ScaleControl/ScaleControl.svelte new file mode 100644 index 00000000..046b109c --- /dev/null +++ b/components/src/ScaleControl/ScaleControl.svelte @@ -0,0 +1,7 @@ + + + diff --git a/components/src/ScaleControl/index.js b/components/src/ScaleControl/index.js new file mode 100644 index 00000000..0fcbf674 --- /dev/null +++ b/components/src/ScaleControl/index.js @@ -0,0 +1,2 @@ +import ScaleControl from './ScaleControl.svelte'; +export default ScaleControl; From f1af01343cdb3c3b59edb152aadccf1678fcd400 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 12 May 2025 20:53:33 +0200 Subject: [PATCH 02/76] Fix windows build --- components/.storybook/main.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/components/.storybook/main.ts b/components/.storybook/main.ts index 1d02ffca..9f5ef4ec 100644 --- a/components/.storybook/main.ts +++ b/components/.storybook/main.ts @@ -2,7 +2,11 @@ import { dirname, join } from 'path'; import type { StorybookConfig } from '@storybook/sveltekit'; function getAbsolutePath(value: string): any { - return dirname(require.resolve(join(value, 'package.json'))); + if (process.platform.includes("win")) { + return value + } else { + return dirname(require.resolve(join(value, 'package.json'))); + } } const config: StorybookConfig = { From 5cce92e5837a4dad91dcae953c95ded7a571c483 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 12 May 2025 20:53:56 +0200 Subject: [PATCH 03/76] Block out documentation, add MapStyle --- components/package.json | 6 +- components/src/Map/Map.mdx | 14 + components/src/Map/Map.stories.svelte | 13 +- components/src/Map/Map.svelte | 160 +- components/src/MapStyle/MapStyle.ts | 5758 +++++++++++++++++++++++++ components/src/MapStyle/index.js | 2 + package-lock.json | 363 +- 7 files changed, 6309 insertions(+), 7 deletions(-) create mode 100644 components/src/Map/Map.mdx create mode 100644 components/src/MapStyle/MapStyle.ts create mode 100644 components/src/MapStyle/index.js diff --git a/components/package.json b/components/package.json index 107ecc91..6a17d668 100644 --- a/components/package.json +++ b/components/package.json @@ -19,7 +19,9 @@ "semantic-release": "semantic-release" }, "dependencies": { - "svelte-select": "^5.8.3" + "svelte-select": "^5.8.3", + "@maplibre/maplibre-gl-geocoder": "^1.8.0", + "maplibre-gl": "^5.5.0" }, "devDependencies": { "@chromatic-com/storybook": "^4.0.0-next.6", @@ -67,4 +69,4 @@ "overrides": { "storybook": "$storybook" } -} +} \ No newline at end of file diff --git a/components/src/Map/Map.mdx b/components/src/Map/Map.mdx new file mode 100644 index 00000000..dcad879b --- /dev/null +++ b/components/src/Map/Map.mdx @@ -0,0 +1,14 @@ +import { Story, Meta, Primary, Controls, Stories} from '@storybook/addon-docs/blocks'; +import * as MapStories from './Map.stories.svelte'; + + + +# Map + +Svelte components and modular basemaps for rendering custom slippy maps using the [versatiles](https://docs.versatiles.org/) stack. Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreise/blob/main/src/lib/components/Map/Map.svelte) from [Jakob Bauer](https://github.com/AgricolaJKB). + +## Sources +## Layers +### VectorLayer +## Tooltips +## Styles \ No newline at end of file diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 4e2c19c7..1585a3d4 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -10,5 +10,16 @@ - + +
+ +
+
+ + diff --git a/components/src/Map/Map.svelte b/components/src/Map/Map.svelte index 01e43672..19f47bbb 100644 --- a/components/src/Map/Map.svelte +++ b/components/src/Map/Map.svelte @@ -1,8 +1,164 @@ +
+ {#if children} + {@render children()} + {/if} + {#if dev} +
+ {JSON.stringify({ ...center, zoom })} +
+ {/if} +
+ diff --git a/components/src/MapStyle/MapStyle.ts b/components/src/MapStyle/MapStyle.ts new file mode 100644 index 00000000..0e3ecf44 --- /dev/null +++ b/components/src/MapStyle/MapStyle.ts @@ -0,0 +1,5758 @@ +import type { StyleSpecification } from "maplibre-gl"; + +const tokens = { + sans_regular: ['SWR Sans Regular'], + sans_medium: ['SWR Sans Medium'], + sans_bold: ['SWR Sans Bold'], + background: 'hsl(0, 0%, 98.25%)', + water: 'hsl(210, 41%, 85%)', + water_light: 'hsl(210, 41%, 85%)', + marsh: 'hsl(200, 14%, 97%)', + grass: 'hsl(111, 22%, 95%)', + grass_dark: 'hsl(105, 30%, 90%)', + street_primary: 'hsl(0, 0%, 95%)', + street_primary_outline: 'hsla(0, 0%, 0%, 20%)', + street_secondary: 'hsl(0, 0%, 95%)', + street_secondary_outline: 'hsl(0, 0%, 50%)', + street_tertiary: 'hsl(0, 0%, 85%)', + street_tertiary_outline: 'hsl(0, 0%, 70%)', + label_primary: 'rgb(10, 10, 11)', + label_secondary: 'rgb(32, 32, 33)' +}; + +const street_layout = { + 'line-join': 'round', + 'line-cap': 'butt' +}; + +const motorway = { + line_color: tokens.street_primary, + line_width: { + stops: [ + [6, 1], + [7, 1.5], + [11, 2], + [14, 12] + ] + }, + line_opacity: { + stops: [ + [6, 0], + [7, 1] + ] + } +}; + +const motorway_outline = { + line_color: tokens.street_primary_outline, + line_width: { + stops: [ + [10, 0], + [11, 2], + [14, 14] + ] + } +}; + +const motorway_link = { + line_width: { + stops: [ + [6, 0], + [7, 1], + [12, 2], + [14, 6] + ] + } +}; + +const motorway_link_outline = { + line_width: { + stops: [ + [6, 0], + [7, 2], + [12, 3], + [14, 8] + ] + } +}; + +const street_primary = { + line_color: tokens.street_primary, + line_width: { + stops: [ + [8, 0], + [10, 1], + [12, 2], + [14, 3], + [16, 10], + [18, 34], + [19, 70], + [20, 140] + ] + }, + line_opacity: { + stops: [ + [8, 0], + [9, 1] + ] + } +}; +const street_primary_outline = { + line_color: tokens.street_primary_outline, + line_width: { + stops: [ + [11, 0], + [14, 5], + [16, 12], + [18, 36], + [19, 74], + [20, 144] + ] + }, + line_opacity: { + stops: [ + [8, 0], + [9, 1] + ] + } +}; + +const street_secondary = { + line_width: { + stops: [ + [11, 1], + [14, 4], + [16, 6], + [18, 28], + [19, 64], + [20, 130] + ] + } +}; +const street_secondary_outline = { + line_width: { + stops: [ + [12, 2], + [14, 5], + [16, 7], + [18, 14], + [20, 40] + ] + } +}; + +const street_residential = { + line_color: tokens.street_tertiary, + line_width: { + stops: [ + [13, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; +const street_residential_outline = { + line_color: tokens.street_tertiary_outline, + line_width: { + stops: [ + [14, 0], + [15, 4] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; + +const rail = { + line_color: '#d3d3d3', + line_dasharray: [2, 2], + line_width: { + stops: [ + [8, 1], + [13, 1], + [20, 2] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; +const rail_outline = { + line_color: tokens.background, + line_width: { + stops: [ + [13, 2], + [20, 4] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; +const rail_overlay = { + line_width: { + stops: [ + [8, 1], + [13, 6], + [20, 12] + ] + }, + line_dasharray: [0.125, 6] +}; + +const style: StyleSpecification = { + version: 8, + name: 'swr-datalab-light', + metadata: { + license: 'https://creativecommons.org/publicdomain/zero/1.0/' + }, + glyphs: 'https://static.datenhub.net/maps/fonts/{fontstack}/{range}.pbf', + sources: { + 'versatiles-shortbread': { + attribution: + '© OpenStreetMap contributors', + tiles: ['https://tiles.versatiles.org/tiles/osm/{z}/{x}/{y}'], + type: 'vector', + scheme: 'xyz', + bounds: [-180, -85.0511287798066, 180, 85.0511287798066], + minzoom: 0, + maxzoom: 14 + } + }, + layers: [ + { + id: 'background', + type: 'background', + paint: { + 'background-color': tokens.background + } + }, + { + source: 'versatiles-shortbread', + id: 'water-ocean', + type: 'fill', + 'source-layer': 'ocean', + paint: { + 'fill-color': 'hsl(218, 58%, 87%)' + } + }, + { + source: 'versatiles-shortbread', + id: 'land-glacier', + type: 'fill', + 'source-layer': 'water_polygons', + filter: ['all', ['==', 'kind', 'glacier']], + paint: { + 'fill-color': 'hsl(0,0%,100%)' + } + }, + { + source: 'versatiles-shortbread', + id: 'land-industrial', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'industrial', 'quarry', 'railway']], + paint: { + 'fill-color': tokens.background, + 'fill-opacity': ["interpolate", ["linear"], ["zoom"], 10, 0, 11, 1] + } + }, + { + source: 'versatiles-shortbread', + id: 'land-agriculture', + type: 'fill', + 'source-layer': 'land', + filter: [ + 'all', + [ + 'in', + 'kind', + 'brownfield', + 'farmland', + 'farmyard', + 'greenfield', + 'greenhouse_horticulture', + 'orchard', + 'plant_nursery', + 'vineyard' + ] + ], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'land-waste', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'landfill']], + paint: { + 'fill-color': 'hsl(50,0%,80%)', + 'fill-opacity': { + stops: [ + [10, 0], + [11, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'land-park', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'park', 'village_green', 'recreation_ground']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'land-garden', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'allotments', 'garden']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'land-burial', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'cemetery', 'grave_yard']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'land-leisure', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'miniature_golf', 'playground', 'golf_course']], + paint: { + 'fill-color': tokens.grass_dark + } + }, + { + source: 'versatiles-shortbread', + id: 'land-rock', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'bare_rock', 'scree', 'shingle']], + paint: { + 'fill-color': 'hsl(192,0%,89%)' + } + }, + { + source: 'versatiles-shortbread', + id: 'land-forest', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'forest']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [12, 0], + [13, 0.25] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'land-grass', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'grass', 'grassland', 'meadow', 'wet_meadow']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'land-vegetation', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'heath', 'scrub']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'land-sand', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'beach', 'sand']], + paint: { + 'fill-color': 'hsl(60,0%,95%)' + } + }, + { + source: 'versatiles-shortbread', + id: 'land-wetland', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'bog', 'marsh', 'string_bog', 'swamp']], + paint: { + 'fill-color': tokens.marsh, + 'fill-opacity': { + stops: [ + [10, 0], + [11, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'water-river', + type: 'line', + 'source-layer': 'water_lines', + filter: ['all', ['in', 'kind', 'river'], ['!=', 'tunnel', true]], + paint: { + 'line-color': tokens.water, + 'line-width': { + stops: [ + [8, 0], + [10, 1], + [12, 2], + [15, 4], + [17, 9], + [18, 20], + [20, 60] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'water-canal', + type: 'line', + 'source-layer': 'water_lines', + filter: ['all', ['in', 'kind', 'canal'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], + paint: { + 'line-color': tokens.water, + 'line-width': { + stops: [ + [9, 0], + [10, 2], + [15, 3], + [17, 8], + [18, 17], + [20, 50] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'water-stream', + type: 'line', + 'source-layer': 'water_lines', + filter: ['all', ['in', 'kind', 'stream'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], + paint: { + 'line-color': tokens.water, + 'line-width': { + stops: [ + [13, 0], + [14, 1], + [15, 2], + [17, 6], + [18, 12], + [20, 30] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'water-ditch', + type: 'line', + 'source-layer': 'water_lines', + filter: ['all', ['in', 'kind', 'ditch'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], + paint: { + 'line-color': tokens.water_light, + 'line-width': { + stops: [ + [14, 0], + [15, 1], + [17, 4], + [18, 8], + [20, 20] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'water-area', + type: 'fill', + 'source-layer': 'water_polygons', + filter: ['==', 'kind', 'water'], + paint: { + 'fill-color': tokens.water_light, + 'fill-opacity': { + stops: [ + [4, 0], + [6, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'water-area-river', + type: 'fill', + 'source-layer': 'water_polygons', + filter: ['==', 'kind', 'river'], + paint: { + 'fill-color': tokens.water, + 'fill-opacity': { + stops: [ + [4, 0], + [6, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'water-area-small', + type: 'fill', + 'source-layer': 'water_polygons', + filter: ['in', 'kind', 'reservoir', 'basin', 'dock'], + paint: { + 'fill-color': tokens.water, + 'fill-opacity': { + stops: [ + [4, 0], + [6, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'water-dam-area', + type: 'fill', + 'source-layer': 'dam_polygons', + filter: ['==', 'kind', 'dam'], + paint: { + 'fill-color': 'hsl(33,0%,95%)', + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'water-dam', + type: 'line', + 'source-layer': 'dam_lines', + filter: ['==', 'kind', 'dam'], + paint: { + 'line-color': 'hsl(205,0%,85%)' + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'water-pier-area', + type: 'fill', + 'source-layer': 'pier_polygons', + filter: ['in', 'kind', 'pier', 'breakwater', 'groyne'], + paint: { + 'fill-color': tokens.street_tertiary, + 'fill-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'water-pier', + type: 'line', + 'source-layer': 'pier_lines', + filter: ['in', 'kind', 'pier', 'breakwater', 'groyne'], + paint: { + 'line-color': tokens.street_tertiary, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'site-dangerarea', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'danger_area'], + paint: { + 'fill-color': 'hsl(0,0%,50%)', + 'fill-outline-color': 'hsl(0,0%,50%)', + 'fill-opacity': 0.3 + } + }, + { + source: 'versatiles-shortbread', + id: 'site-university', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'university'], + paint: { + 'fill-color': 'hsl(60,0%,75%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-shortbread', + id: 'site-college', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'college'], + paint: { + 'fill-color': 'hsl(60,0%,75%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-shortbread', + id: 'site-school', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'school'], + paint: { + 'fill-color': 'hsl(60,0%,75%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-shortbread', + id: 'site-hospital', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'hospital'], + paint: { + 'fill-color': 'hsl(0,0%,70%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-shortbread', + id: 'site-prison', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'prison'], + paint: { + 'fill-color': 'hsl(305,0%,97%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-shortbread', + id: 'site-parking', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'parking'], + paint: { + 'fill-color': 'hsl(24,0%,95%)' + } + }, + { + source: 'versatiles-shortbread', + id: 'site-bicycleparking', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'bicycle_parking'], + paint: { + 'fill-color': 'hsl(24,0%,95%)' + } + }, + { + source: 'versatiles-shortbread', + id: 'site-construction', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'construction'], + paint: { + 'fill-color': 'hsl(0,0%,66%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-shortbread', + id: 'airport-area', + type: 'fill', + 'source-layer': 'street_polygons', + filter: ['in', 'kind', 'runway', 'taxiway'], + paint: { + 'fill-color': 'hsl(0,0%,100%)', + 'fill-opacity': 0.5 + } + }, + { + source: 'versatiles-shortbread', + id: 'airport-taxiway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['==', 'kind', 'taxiway'], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [13, 0], + [14, 2], + [15, 10], + [16, 14], + [18, 20], + [20, 40] + ] + } + }, + layout: { + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'airport-runway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['==', 'kind', 'runway'], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [11, 0], + [12, 6], + [13, 9], + [14, 16], + [15, 24], + [16, 40], + [17, 100], + [18, 160], + [20, 300] + ] + } + }, + layout: { + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'airport-taxiway', + type: 'line', + 'source-layer': 'streets', + filter: ['==', 'kind', 'taxiway'], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [13, 0], + [14, 1], + [15, 8], + [16, 12], + [18, 18], + [20, 36] + ] + }, + 'line-opacity': { + stops: [ + [13, 0], + [14, 1] + ] + } + }, + layout: { + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'airport-runway', + type: 'line', + 'source-layer': 'streets', + filter: ['==', 'kind', 'runway'], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [11, 0], + [12, 5], + [13, 8], + [14, 14], + [15, 22], + [16, 38], + [17, 98], + [18, 158], + [20, 298] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: { + 'line-join': 'round' + } + }, + + { + source: 'versatiles-shortbread', + id: 'building', + type: 'fill', + 'source-layer': 'buildings', + paint: { + 'fill-color': 'hsl(240, 4%, 90%)', + 'fill-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-pedestrian-zone', + type: 'fill', + 'source-layer': 'street_polygons', + filter: ['all', ['==', 'tunnel', true], ['==', 'kind', 'pedestrian']], + paint: { + 'fill-color': 'rgb(247,247,247)', + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-way-footway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'hsl(0,0%,86%)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-way-steps:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'hsl(0,0%,86%)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-way-path:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'hsl(0,0%,86%)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-way-cycleway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'hsl(0,0%,87%)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-track:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-pedestrian:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-service:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-livingstreet:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-residential:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'tunnel', true]], + paint: { + 'line-color': street_residential_outline.line_color, + 'line-width': street_residential_outline.line_width, + 'line-opacity': street_residential_outline.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-unclassified:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-tertiary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-secondary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + paint: { + 'line-color': 'rgb(180,180,180)', + 'line-dasharray': [1, 0.3], + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 7], + [18, 14], + [20, 40] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-primary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + paint: { + 'line-color': street_primary_outline.line_color, + 'line-dasharray': [1, 0.3], + 'line-width': street_primary_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-trunk-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-motorway-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_link_outline.line_width, + 'line-dasharray': [1, 0.3] + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 12 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-tertiary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-secondary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(180,180,180)', + 'line-dasharray': [1, 0.3], + 'line-width': { + stops: [ + [11, 2], + [14, 5], + [16, 8], + [18, 30], + [19, 68], + [20, 138] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-primary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary_outline, + 'line-dasharray': [1, 0.3], + 'line-width': { + stops: [ + [8, 0], + [9, 1], + [10, 4], + [14, 6], + [16, 12], + [18, 36], + [19, 74], + [20, 144] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-trunk:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-dasharray': [1, 0.3], + 'line-width': motorway_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-motorway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width, + 'line-dasharray': [1, 0.3] + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-way-footway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(0,0%,94%)', + 'line-dasharray': [1, 0.2] + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-way-steps', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(0,0%,94%)', + 'line-dasharray': [1, 0.2] + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-way-path', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(0,0%,94%)', + 'line-dasharray': [1, 0.2] + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-way-cycleway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(0,0%,95%)', + 'line-dasharray': [1, 0.2] + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-track', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-pedestrian', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-service', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-livingstreet', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-residential', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'tunnel', true]], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-unclassified', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-track-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'track'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': 'rgb(247,247,247)' + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-pedestrian-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'pedestrian'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-service-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'rgb(247,247,247)' + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-livingstreet-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-residential-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-unclassified-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-tertiary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-secondary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_secondary, + 'line-width': street_secondary.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-primary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-trunk-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-motorway-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout, + minzoom: 12 + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-tertiary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-secondary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [11, 1], + [14, 4], + [16, 6], + [18, 28], + [19, 64], + [20, 130] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-primary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width, + 'line-opacity': { + stops: [ + [8, 0], + [9, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-trunk', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': { + stops: [ + [7, 0], + [8, 0.75] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-street-motorway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-transport-monorail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'tunnel', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-transport-funicular', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'tunnel', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-transport-tram', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'tunnel', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-transport-narrowgauge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'tunnel', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-transport-lightrail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'tunnel', true]], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'tunnel-transport-rail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'tunnel', true]], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'street-pedestrian-zone', + type: 'fill', + 'source-layer': 'street_polygons', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['==', 'kind', 'pedestrian']], + paint: { + 'fill-color': 'rgba(245,245,245,0.25)', + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1], + [14, 0], + [15, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'way-footway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'way-steps:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'way-path:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'way-cycleway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(222,222,222)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'street-track:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-pedestrian:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-service:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-livingstreet:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-residential:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': street_residential_outline.line_color, + 'line-width': street_residential_outline.line_width, + 'line-opacity': street_residential_outline.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-unclassified:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-tertiary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'tertiary'], + ['==', 'link', true] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-secondary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'secondary'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_secondary_outline, + 'line-width': street_secondary_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'street-primary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'primary'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_primary_outline, + 'line-width': street_primary_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'street-trunk-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'trunk'], + ['==', 'link', true] + ], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_link_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'street-motorway-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'motorway'], + ['==', 'link', true] + ], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_link_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 12 + }, + { + source: 'versatiles-shortbread', + id: 'street-tertiary:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'tertiary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-secondary:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'secondary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': 'hsl(28,0%,69%)', + 'line-width': { + stops: [ + [11, 2], + [14, 5], + [16, 8], + [18, 30], + [19, 68], + [20, 138] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-primary:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'primary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': street_primary_outline.line_color, + 'line-width': street_primary_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-trunk:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'trunk'], + ['!=', 'link', true] + ], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-motorway:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'motorway'], + ['!=', 'link', true] + ], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + } + }, + { + source: 'versatiles-shortbread', + id: 'way-footway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'way-steps', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'way-path', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'way-cycleway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(203,0%,97%)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'street-track', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-pedestrian', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], + paint: { + 'line-color': tokens.street_tertiary, + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 0], + [14, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-service', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-livingstreet', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-residential', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-unclassified', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-track-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'track'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)' + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-pedestrian-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'pedestrian'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'street-service-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)' + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-livingstreet-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'street-residential-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'street-unclassified-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'street-tertiary-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'tertiary'], + ['==', 'link', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-secondary-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'secondary'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_secondary, + 'line-width': street_secondary.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'street-primary-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'primary'], + ['==', 'link', true] + ], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'street-trunk-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'trunk'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'street-motorway-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'motorway'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 12 + }, + { + source: 'versatiles-shortbread', + id: 'street-tertiary', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'tertiary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-secondary', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'secondary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': tokens.street_secondary, + 'line-width': street_secondary.line_width, + 'line-opacity': { + stops: [ + [9, 0], + [10, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-primary', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'primary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width, + 'line-opacity': { + stops: [ + [8, 0], + [9, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-trunk', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'trunk'], + ['!=', 'link', true] + ], + paint: { + 'line-color': motorway.line_color, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'street-motorway', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'motorway'], + ['!=', 'link', true] + ], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'transport-rail:dashes', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'rail'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': rail.line_color, + 'line-opacity': rail.line_opacity, + 'line-width': rail_overlay.line_width, + 'line-dasharray': rail_overlay.line_dasharray + } + }, + { + source: 'versatiles-shortbread', + id: 'transport-monorail', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'monorail'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + minzoom: 13, + paint: { + 'line-width': { + stops: [ + [13, 0], + [16, 1], + [17, 2], + [18, 3], + [20, 5] + ] + }, + 'line-color': 'hsl(208,0%,73%)' + } + }, + { + source: 'versatiles-shortbread', + id: 'transport-funicular', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'funicular'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + minzoom: 13, + paint: { + 'line-width': { + stops: [ + [13, 0], + [16, 1], + [17, 2], + [18, 3], + [20, 5] + ] + }, + 'line-color': 'hsl(208,0%,73%)' + } + }, + { + source: 'versatiles-shortbread', + id: 'transport-tram', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'tram'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'transport-narrowgauge', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'narrow_gauge'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'transport-lightrail', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'light_rail'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'transport-rail', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'rail'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'transport-ferry', + type: 'line', + 'source-layer': 'ferries', + minzoom: 10, + paint: { + 'line-color': 'rgb(184, 189, 207)', + 'line-width': { + stops: [ + [10, 1], + [13, 2], + [14, 3], + [16, 4], + [17, 6] + ] + }, + 'line-opacity': { + stops: [[10, 0]] + }, + 'line-dasharray': [1, 1] + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-footway:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [15, 0], + [16, 7], + [18, 10], + [19, 17], + [20, 31] + ] + } + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-steps:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [15, 0], + [16, 7], + [18, 10], + [19, 17], + [20, 31] + ] + } + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-path:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [15, 0], + [16, 7], + [18, 10], + [19, 17], + [20, 31] + ] + } + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-cycleway:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [15, 0], + [16, 7], + [18, 10], + [19, 17], + [20, 31] + ] + } + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-track:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + }, + 'line-width': { + stops: [ + [14, 3], + [16, 6], + [18, 25], + [19, 67], + [20, 134] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-pedestrian:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-service:bridge', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bridge', true], + ['!=', 'service', 'driveway'] + ], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + }, + 'line-width': { + stops: [ + [14, 3], + [16, 6], + [18, 25], + [19, 67], + [20, 134] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-livingstreet:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-residential:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': street_residential.line_color, + 'line-opacity': street_residential.line_opacity, + 'line-width': street_residential.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-unclassified:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-tertiary-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-secondary-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 10], + [18, 20], + [20, 56] + ] + } + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-primary-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-trunk-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': motorway.line_color, + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 10], + [18, 20], + [20, 56] + ] + } + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-motorway-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width, + 'line-opacity': motorway.line_opacity + }, + minzoom: 12 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-tertiary:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-secondary:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + }, + 'line-width': { + stops: [ + [11, 3], + [14, 7], + [16, 11], + [18, 42], + [19, 95], + [20, 193] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-primary:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-trunk:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': motorway.line_color, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-motorway:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-pedestrian-zone', + type: 'fill', + 'source-layer': 'street_polygons', + filter: ['all', ['==', 'bridge', true], ['==', 'kind', 'pedestrian']], + paint: { + 'fill-color': 'hsl(0,0%,100%)', + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-footway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-steps:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-path:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-cycleway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(222,222,222)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-track:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-pedestrian:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-service:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bridge', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-livingstreet:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-residential:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], + paint: { + 'line-color': street_residential_outline.line_color, + 'line-width': street_residential_outline.line_width, + 'line-opacity': street_residential_outline.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-unclassified:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-tertiary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-secondary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + paint: { + 'line-color': 'hsl(28,0%,69%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 7], + [18, 14], + [20, 40] + ] + } + }, + layout: street_layout, + minzoom: 13 + }, + { + 'source-layer': 'streets', + source: 'versatiles-shortbread', + id: 'bridge-street-primary-link:outline', + type: 'line', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-trunk-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-motorway-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_link_outline.line_width + }, + layout: street_layout, + minzoom: 12 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-tertiary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-secondary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + paint: { + 'line-color': 'hsl(28,0%,69%)', + 'line-width': { + stops: [ + [11, 2], + [14, 5], + [16, 8], + [18, 30], + [19, 68], + [20, 138] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-primary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + paint: { + 'line-color': street_primary_outline.line_color, + 'line-width': street_primary_outline.line_width + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-trunk:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-motorway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-footway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-steps', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-path', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-way-cycleway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(203,0%,97%)' + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-track', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-pedestrian', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-service', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bridge', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-livingstreet', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-residential', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-unclassified', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-track-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'track'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)' + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-pedestrian-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'pedestrian'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-service-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)' + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-livingstreet-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-residential-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-unclassified-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-tertiary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-secondary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + paint: { + 'line-color': 'hsl(48,0%,83%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 12], + [20, 38] + ] + } + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-primary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-trunk-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-motorway-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout, + minzoom: 12 + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-tertiary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-secondary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_secondary, + 'line-width': street_secondary.line_width, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-primary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width, + 'line-opacity': { + stops: [ + [8, 0], + [9, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-trunk', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-street-motorway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-monorail:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 15, + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-funicular:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 15, + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-tram:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 15, + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-narrowgauge:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 15, + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-lightrail:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'bridge', true]], + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width, + 'line-opacity': rail_outline.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-rail:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'bridge', true]], + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width, + 'line-opacity': rail_outline.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-monorail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-funicular', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-tram', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-narrowgauge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-lightrail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'bridge', true]], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'bridge-transport-rail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'bridge', true]], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + }, + { + source: 'versatiles-shortbread', + id: 'boundary-country:outline', + type: 'line', + 'source-layer': 'boundaries', + filter: [ + 'all', + ['==', 'admin_level', 2], + ['!=', 'maritime', true], + ['!=', 'disputed', true], + ['!=', 'coastline', true] + ], + paint: { + 'line-color': tokens.background, + 'line-blur': 1, + 'line-width': { + stops: [ + [2, 0], + [3, 2], + [10, 8] + ] + }, + 'line-opacity': 0.75 + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'boundary-country-disputed:outline', + type: 'line', + 'source-layer': 'boundaries', + filter: [ + 'all', + ['==', 'admin_level', 2], + ['==', 'disputed', true], + ['!=', 'maritime', true], + ['!=', 'coastline', true] + ], + paint: { + 'line-width': { + stops: [ + [2, 0], + [3, 2], + [10, 8] + ] + }, + 'line-opacity': 0.75, + 'line-color': tokens.background + } + }, + { + source: 'versatiles-shortbread', + id: 'boundary-state:outline', + type: 'line', + 'source-layer': 'boundaries', + filter: [ + 'all', + ['==', 'admin_level', 4], + ['!=', 'maritime', true], + ['!=', 'disputed', true], + ['!=', 'coastline', true] + ], + paint: { + 'line-color': tokens.background, + 'line-blur': 1, + 'line-width': { + stops: [ + [7, 0], + [8, 2], + [10, 4] + ] + }, + 'line-opacity': 0.75 + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'boundary-country', + type: 'line', + 'source-layer': 'boundaries', + filter: [ + 'all', + ['==', 'admin_level', 2], + ['!=', 'maritime', true], + ['!=', 'disputed', true], + ['!=', 'coastline', true] + ], + paint: { + 'line-color': { + stops: [ + [7, '#cecdcd'], + [10, 'black'] + ] + }, + + 'line-width': { + stops: [ + [2, 0], + [5, 1], + [8, 1], + [12, 3] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + source: 'versatiles-shortbread', + id: 'boundary-country-disputed', + type: 'line', + 'source-layer': 'boundaries', + filter: [ + 'all', + ['==', 'admin_level', 2], + ['==', 'disputed', true], + ['!=', 'maritime', true], + ['!=', 'coastline', true] + ], + paint: { + 'line-width': { + stops: [ + [2, 0], + [3, 1], + [10, 4] + ] + }, + 'line-color': 'hsl(246,0%,77%)', + 'line-dasharray': [2, 1] + }, + layout: { + 'line-cap': 'square' + } + }, + { + source: 'versatiles-shortbread', + id: 'boundary-state', + type: 'line', + 'source-layer': 'boundaries', + filter: [ + 'all', + ['==', 'admin_level', 4], + ['!=', 'maritime', true], + ['!=', 'disputed', true], + ['!=', 'coastline', true] + ], + paint: { + 'line-color': 'hsl(37, 34%, 79%)', + 'line-width': { + stops: [ + [7, 1], + [8, 1.5] + ] + }, + 'line-opacity': { + stops: [ + [7, 0], + [8, 1] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + + { + source: 'versatiles-shortbread', + id: 'label-street-pedestrian', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'pedestrian'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': 'hsl(240,0%,23%)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2, + 'text-halo-blur': 1 + }, + minzoom: 14 + }, + { + source: 'versatiles-shortbread', + id: 'label-street-livingstreet', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'living_street'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': 'hsl(240,0%,23%)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2, + 'text-halo-blur': 1 + }, + minzoom: 14 + }, + { + source: 'versatiles-shortbread', + id: 'label-street-residential', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'residential'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': 'hsl(240,0%,23%)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2, + 'text-halo-blur': 1 + }, + minzoom: 15 + }, + { + source: 'versatiles-shortbread', + id: 'label-street-unclassified', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'unclassified'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': tokens.label_secondary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + source: 'versatiles-shortbread', + id: 'label-street-tertiary', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'tertiary'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': 'hsl(240,0%,23%)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2, + 'text-halo-blur': 1 + }, + minzoom: 14 + }, + { + source: 'versatiles-shortbread', + id: 'label-street-secondary', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'secondary'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + source: 'versatiles-shortbread', + id: 'label-street-primary', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'primary'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + source: 'versatiles-shortbread', + id: 'label-street-trunk', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'trunk'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-neighbourhood', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'neighbourhood'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [[14, 14]] + } + }, + paint: { + 'text-color': tokens.label_secondary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-quarter', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'quarter'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [[10, 14]] + } + }, + paint: { + 'text-color': 'rgb(57,57,57)', + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-suburb', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'suburb'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [11, 13], + [13, 15] + ] + } + }, + paint: { + 'text-color': 'rgb(57,57,57)', + 'text-halo-color': tokens.background, + 'text-halo-width': 1.5 + }, + minzoom: 11 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-hamlet', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'hamlet'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [10, 11], + [12, 14] + ] + } + }, + paint: { + 'icon-color': 'rgb(57,57,57)', + 'text-color': 'rgb(57,57,57)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2 + }, + minzoom: 13 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-village', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'village'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [9, 11], + [12, 14] + ] + } + }, + paint: { + 'icon-color': 'rgb(57,57,57)', + 'text-color': 'rgb(57,57,57)', + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 11 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-town-large', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['all', ['==', 'kind', 'town'], ['>', 'population', 30000]], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [8, 13], + [12, 16] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 8 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-town', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['all', ['==', 'kind', 'town'], ['<', 'population', 30000]], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [8, 13], + [12, 16] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 9 + }, + + { + source: 'versatiles-shortbread', + id: 'label-place-city', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'city'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_medium, + 'text-size': { + stops: [ + [8, 11], + [10, 14] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 6, + maxzoom: 11 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-statecapital', + type: 'symbol', + 'source-layer': 'place_labels', + filter: [ + 'all', + ['==', 'kind', 'state_capital'], + ['in', 'name_de', 'Hannover', 'München', 'Stuttgart', 'Hamburg', 'Köln', 'Essen', 'Mainz'] + ], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [5, 12], + [14, 20] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 5, + maxzoom: 12 + }, + { + source: 'versatiles-shortbread', + id: 'label-place-capital', + type: 'symbol', + 'source-layer': 'place_labels', + filter: ['all', ['==', 'kind', 'capital'], ['==', 'name_de', 'Berlin']], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_medium, + 'text-size': { + stops: [ + [7, 14], + [10, 20] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 5, + maxzoom: 12 + } + ] +}; + +export default style; diff --git a/components/src/MapStyle/index.js b/components/src/MapStyle/index.js new file mode 100644 index 00000000..8d890b06 --- /dev/null +++ b/components/src/MapStyle/index.js @@ -0,0 +1,2 @@ +import SWRDataBaseLight from './MapStyle'; +export { SWRDataBaseLight }; diff --git a/package-lock.json b/package-lock.json index 0ac90c37..9fe6c5c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,8 @@ "name": "@swr-data-lab/components", "version": "1.0.6", "dependencies": { + "@maplibre/maplibre-gl-geocoder": "^1.8.0", + "maplibre-gl": "^5.5.0", "svelte-select": "^5.8.3" }, "devDependencies": { @@ -2688,6 +2690,94 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-geocoder": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-geocoder/-/maplibre-gl-geocoder-1.8.0.tgz", + "integrity": "sha512-vg1msVZovPJSX9MKI2YUrvczRnG36nbjVI+VF1M0zKk4XHcL2+TIRg2OGsT6lcC4Y2QTD9V9avr1TfV1cSG60A==", + "dependencies": { + "events": "^3.3.0", + "lodash.debounce": "^4.0.6", + "subtag": "^0.5.0", + "suggestions-list": "^0.0.2", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "maplibre-gl": ">=4.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "23.2.2", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-23.2.2.tgz", + "integrity": "sha512-kLcVlItPCULc20SM6pSVA7u8nST9xmQA8d7utc9j3KB0Tf/xhM4GgCn/QsZcmlbN/wW0ujyomDrvZ3/LbwvAmw==", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^3.0.0", + "rw": "^1.3.3", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, "node_modules/@mdx-js/react": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", @@ -4299,6 +4389,19 @@ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==" + }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -4342,6 +4445,21 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, "node_modules/@types/mdx": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", @@ -4369,6 +4487,11 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" + }, "node_modules/@types/react": { "version": "19.1.3", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.3.tgz", @@ -4387,6 +4510,14 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/wait-on": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/@types/wait-on/-/wait-on-5.3.4.tgz", @@ -6661,6 +6792,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/earcut": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.1.tgz", + "integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==" + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -7857,6 +7993,14 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -8458,6 +8602,14 @@ "dev": true, "peer": true }, + "node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -8468,6 +8620,11 @@ "node": ">=6.9.0" } }, + "node_modules/geojson-vt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==" + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -8526,7 +8683,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, "engines": { "node": ">=10" }, @@ -8548,6 +8704,11 @@ "traverse": "0.6.8" } }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -9023,6 +9184,25 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", @@ -10889,6 +11069,11 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -10938,6 +11123,11 @@ "node": ">=0.10.0" } }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -11121,6 +11311,11 @@ "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", "dev": true }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, "node_modules/lodash.deburr": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", @@ -11266,6 +11461,89 @@ "tmpl": "1.0.5" } }, + "node_modules/maplibre-gl": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.5.0.tgz", + "integrity": "sha512-p8AOPuzzqn1ZA9gcXxKw0IED715we/2Owa/YUr6PANmgMvNMe/JG+V/C1hRra43Wm62Biz+Aa8AgbOLJimA8tA==", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^23.2.2", + "@types/geojson": "^7946.0.16", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.1", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.3", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/maplibre-gl/node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/maplibre-gl/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/maplibre-gl/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/maplibre-gl/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/markdown-it": { "version": "13.0.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", @@ -11620,6 +11898,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + }, "node_modules/mustache": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", @@ -15146,6 +15429,18 @@ "node": ">= 14.16" } }, + "node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -15608,6 +15903,11 @@ "node": ">= 4" } }, + "node_modules/potpack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", + "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15771,6 +16071,11 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -15954,6 +16259,11 @@ } ] }, + "node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==" + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -16333,6 +16643,14 @@ "node": ">=8" } }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, "node_modules/resolve.exports": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", @@ -16429,6 +16747,11 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -17980,6 +18303,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/subtag": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/subtag/-/subtag-0.5.0.tgz", + "integrity": "sha512-CaIBcTSb/nyk4xiiSOtZYz1B+F12ZxW8NEp54CdT+84vmh/h4sUnHGC6+KQXUfED8u22PQjCYWfZny8d2ELXwg==" + }, + "node_modules/suggestions-list": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/suggestions-list/-/suggestions-list-0.0.2.tgz", + "integrity": "sha512-Yw0fdq14c6RQWQIfE1/8WEi9Dp8rjyCD6FhYA/Tit2/ADbE9Y4ADG4ezlvivsa8Civ5nz++pyVVBMjOMlgIUJw==", + "dependencies": { + "fuzzy": "^0.1.1", + "xtend": "^4.0.0" + } + }, "node_modules/super-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.0.0.tgz", @@ -17996,6 +18333,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "dependencies": { + "kdbush": "^4.0.2" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18415,6 +18760,11 @@ "node": "^18.0.0 || >=20.0.0" } }, + "node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==" + }, "node_modules/tinyspy": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", @@ -19033,6 +19383,16 @@ "node": ">=0.10.0" } }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, "node_modules/wait-on": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.3.tgz", @@ -19383,7 +19743,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, "engines": { "node": ">=0.4" } From 440ca27de47af59412a95abcdd32c2a1f44cb61e Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 13 May 2025 12:29:14 +0200 Subject: [PATCH 04/76] Block out ScaleControl --- components/src/Map/Map.stories.svelte | 28 ++++-- components/src/Map/Map.svelte | 89 ++++++++++++++----- components/src/MapControl/MapControl.svelte | 49 +++++++++- .../src/ScaleControl/ScaleControl.svelte | 23 ++++- 4 files changed, 154 insertions(+), 35 deletions(-) diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 1585a3d4..30f5138a 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -1,6 +1,8 @@ - - -
- -
-
+ { + const canvas = within(canvasElement); + const containerEl = canvas.getByTestId('map-container'); + + await step('Map canvas renders', async () => { + const mapEl = containerEl.querySelector('.maplibregl-canvas'); + expect(mapEl).toBeTruthy(); + }); + }} +> +
+ + + + + +
diff --git a/components/src/MapControl/MapControl.svelte b/components/src/MapControl/MapControl.svelte index 36de021d..f7d32a96 100644 --- a/components/src/MapControl/MapControl.svelte +++ b/components/src/MapControl/MapControl.svelte @@ -1,7 +1,48 @@ - +
+ {#if children} + {@render children()} + {/if} +
diff --git a/components/src/ScaleControl/ScaleControl.svelte b/components/src/ScaleControl/ScaleControl.svelte index 046b109c..f39ebdce 100644 --- a/components/src/ScaleControl/ScaleControl.svelte +++ b/components/src/ScaleControl/ScaleControl.svelte @@ -1,7 +1,26 @@ + + From 0abd34ce7ad985ba42577ed16edb8dc227bace74 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 13 May 2025 15:13:27 +0200 Subject: [PATCH 05/76] Don't panic if mapContext is undefined --- components/src/Map/Map.mdx | 2 + components/src/Map/Map.svelte | 41 ++++++++++----------- components/src/MapControl/MapControl.svelte | 17 +++++---- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/components/src/Map/Map.mdx b/components/src/Map/Map.mdx index dcad879b..4db736a8 100644 --- a/components/src/Map/Map.mdx +++ b/components/src/Map/Map.mdx @@ -10,5 +10,7 @@ Svelte components and modular basemaps for rendering custom slippy maps using th ## Sources ## Layers ### VectorLayer +## Controls +### ScaleControl ## Tooltips ## Styles \ No newline at end of file diff --git a/components/src/Map/Map.svelte b/components/src/Map/Map.svelte index 9ec26e97..4c9e1fba 100644 --- a/components/src/Map/Map.svelte +++ b/components/src/Map/Map.svelte @@ -42,14 +42,15 @@ let container: HTMLElement; - let ctx: any = $state({ - map: undefined + let mapContext: any = $state({ + map: undefined, + loaded: false }); - setContext('ctx', ctx); + setContext('mapContext', mapContext); onMount(() => { - ctx.map = new maplibre.Map({ + mapContext.map = new maplibre.Map({ container, style, minZoom, @@ -61,30 +62,31 @@ }); if (!allowRotation) { - ctx.map.touchZoomRotate.disableRotation(); + mapContext.map.touchZoomRotate.disableRotation(); } - ctx.map.on('load', () => { - zoom = ctx.map.getZoom(); - center = ctx.map.getCenter(); - pitch = ctx.map.getPitch(); - bearing = ctx.map.getBearing(); + mapContext.map.on('load', () => { + mapContext.loaded = true; + zoom = mapContext.map.getZoom(); + center = mapContext.map.getCenter(); + pitch = mapContext.map.getPitch(); + bearing = mapContext.map.getBearing(); }); - ctx.map.on('moveend', () => { - zoom = ctx.map.getZoom(); - center = ctx.map.getCenter(); - pitch = ctx.map.getPitch(); - bearing = ctx.map.getBearing(); + mapContext.map.on('moveend', () => { + zoom = mapContext.map.getZoom(); + center = mapContext.map.getCenter(); + pitch = mapContext.map.getPitch(); + bearing = mapContext.map.getBearing(); }); }); onDestroy(async () => { - if (ctx.map) ctx.map.remove(); + if (mapContext.map) mapContext.map.remove(); }); $effect(() => { - if (ctx.map) ctx.map.setStyle(style); + if (mapContext.map) mapContext.map.setStyle(style); }); @@ -104,10 +106,7 @@ width: 100%; height: 100%; } - button { - position: absolute; - z-index: 1000; - } + .debug { position: absolute; top: 0; diff --git a/components/src/MapControl/MapControl.svelte b/components/src/MapControl/MapControl.svelte index f7d32a96..8d29f2ea 100644 --- a/components/src/MapControl/MapControl.svelte +++ b/components/src/MapControl/MapControl.svelte @@ -6,13 +6,12 @@ position: ControlPosition; control: IControl; className?: string; - group?: boolean; children?: Snippet; } - let { position, control, className, group = true, children }: MapControlProps = $props(); + let { position, control, className, children }: MapControlProps = $props(); - const ctx = getContext('ctx'); + const mapContext: any = getContext('mapContext'); let el: HTMLDivElement | undefined = $state(); let ctrl = $derived.by(() => { @@ -31,17 +30,19 @@ }); $effect(() => { - if (el && ctx.map) { - ctx.map.addControl(ctrl, position); + if (mapContext && mapContext.map && ctrl) { + mapContext.map.addControl(ctrl, position); } }); + onDestroy(() => { - console.log('bye'); - ctx.map.removeControl(control); + if (mapContext.map) { + mapContext.map.removeControl(control); + } }); -
+
{#if children} {@render children()} {/if} From 17e41240af31c4266cea7c44082ed158253f5a6d Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 13 May 2025 21:26:29 +0200 Subject: [PATCH 06/76] Add NavigationControl --- components/src/Map/Map.stories.svelte | 18 ++++ components/src/Map/Map.svelte | 91 ++++++++++++++++--- components/src/Map/context.svelte.ts | 17 ++++ components/src/MapControl/MapControl.svelte | 38 +++----- .../NavigationControl.svelte | 30 +++++- 5 files changed, 156 insertions(+), 38 deletions(-) create mode 100644 components/src/Map/context.svelte.ts diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 30f5138a..38ffbf9a 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -3,6 +3,7 @@ import { within, expect } from 'storybook/test'; import Map from './Map.svelte'; import ScaleControl from '../ScaleControl/ScaleControl.svelte'; + import NavigationControl from '../NavigationControl/NavigationControl.svelte'; import DesignTokens from '../DesignTokens/DesignTokens.svelte'; const { Story } = defineMeta({ @@ -22,12 +23,29 @@ const mapEl = containerEl.querySelector('.maplibregl-canvas'); expect(mapEl).toBeTruthy(); }); + await step('Scale control renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-scale'); + expect(el).toBeTruthy(); + }); + await step('Scale renders expected value', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-scale'); + expect(el).toHaveTextContent('100 km'); + }); + await step('Navigation Control renders', async () => { + const zoomInEl = containerEl.querySelector('.maplibregl-ctrl-zoom-in'); + const zoomOutEl = containerEl.querySelector('.maplibregl-ctrl-zoom-out'); + expect(zoomInEl).toBeTruthy(); + expect(zoomInEl).toHaveRole('button'); + expect(zoomOutEl).toBeTruthy(); + expect(zoomOutEl).toHaveRole('button'); + }); }} >
+
diff --git a/components/src/Map/Map.svelte b/components/src/Map/Map.svelte index 4c9e1fba..d3f2e8cd 100644 --- a/components/src/Map/Map.svelte +++ b/components/src/Map/Map.svelte @@ -1,6 +1,7 @@
- {#if children} - {@render children()} + {#if mapContext.map} + {#if children} + {@render children()} + {/if} {/if} {#if dev}
@@ -169,7 +171,9 @@ position: absolute; z-index: 2; display: flex; - gap: 0.2em; + flex-flow: column; + gap: 0.5em; + align-items: flex-start; } .maplibregl-ctrl-top-left { @@ -202,5 +206,66 @@ border-radius: var(--br-small); border: 1px solid var(--gray-dark-2); } + + .maplibregl-ctrl-group button { + background-color: transparent; + border: 0; + box-sizing: border-box; + cursor: pointer; + display: block; + height: 29px; + outline: none; + padding: 0; + width: 29px; + } + + .maplibregl-ctrl-group button + button { + border-top: 1px solid lightgray; + } + + .maplibregl-ctrl button .maplibregl-ctrl-icon { + background-position: 50%; + background-repeat: no-repeat; + display: block; + height: 100%; + width: 100%; + } + + .maplibregl-ctrl-attrib-button:focus, + .maplibregl-ctrl-group button:focus { + box-shadow: 0 0 2px 2px #0096ff; + } + + .maplibregl-ctrl button:disabled { + cursor: not-allowed; + } + + .maplibregl-ctrl button:disabled .maplibregl-ctrl-icon { + opacity: 0.25; + } + + .maplibregl-ctrl button:not(:disabled):hover { + background-color: rgb(0 0 0/5%); + } + + .maplibregl-ctrl-group button:focus:focus-visible { + box-shadow: 0 0 2px 2px #0096ff; + } + + .maplibregl-ctrl-group button:focus:not(:focus-visible) { + box-shadow: none; + } + + .maplibregl-ctrl-group button:focus:first-child { + border-radius: 4px 4px 0 0; + } + + .maplibregl-ctrl-group button:focus:last-child { + border-radius: 0 0 4px 4px; + } + + .maplibregl-ctrl-group button:focus:only-child { + border-radius: inherit; + } } diff --git a/components/src/Map/context.svelte.ts b/components/src/Map/context.svelte.ts new file mode 100644 index 00000000..8da57a2e --- /dev/null +++ b/components/src/Map/context.svelte.ts @@ -0,0 +1,17 @@ +import type { Map as MapLibre } from 'maplibre-gl'; +import { getContext, setContext } from 'svelte'; + +const MAP_CONTEXT_KEY = Symbol.for('map-context'); + +export class MapContext { + map = $state() as MapLibre; + loaded = $state(false); +} + +export function getMapContext(): MapContext { + return getContext(MAP_CONTEXT_KEY); +} + +export function createMapContext(): MapContext { + return setContext(MAP_CONTEXT_KEY, new MapContext()); +} diff --git a/components/src/MapControl/MapControl.svelte b/components/src/MapControl/MapControl.svelte index 8d29f2ea..d50e63b2 100644 --- a/components/src/MapControl/MapControl.svelte +++ b/components/src/MapControl/MapControl.svelte @@ -1,6 +1,7 @@ diff --git a/components/src/NavigationControl/NavigationControl.svelte b/components/src/NavigationControl/NavigationControl.svelte index f715147a..d5ec3d0f 100644 --- a/components/src/NavigationControl/NavigationControl.svelte +++ b/components/src/NavigationControl/NavigationControl.svelte @@ -1,7 +1,33 @@ + + From 34eb43228911a90582b984371e48018b9d8b9d9b Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 13 May 2025 21:47:33 +0200 Subject: [PATCH 07/76] Allo .ts imports --- components/tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/components/tsconfig.json b/components/tsconfig.json index fc93cbd9..628c1d6f 100644 --- a/components/tsconfig.json +++ b/components/tsconfig.json @@ -9,6 +9,7 @@ "skipLibCheck": true, "sourceMap": true, "strict": true, + "allowImportingTsExtensions": true, "moduleResolution": "bundler" } // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias From 0db5b1dd69b6d2d87babe9634e5d981df8834487 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 13 May 2025 21:47:53 +0200 Subject: [PATCH 08/76] Don't render map components in stories for now --- components/src/Map/context.svelte.ts | 2 ++ components/src/MapControl/MapControl.stories.svelte | 2 -- .../src/NavigationControl/NavigationControl.stories.svelte | 2 -- components/src/ScaleControl/ScaleControl.stories.svelte | 2 -- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/components/src/Map/context.svelte.ts b/components/src/Map/context.svelte.ts index 8da57a2e..12f06de6 100644 --- a/components/src/Map/context.svelte.ts +++ b/components/src/Map/context.svelte.ts @@ -6,6 +6,8 @@ const MAP_CONTEXT_KEY = Symbol.for('map-context'); export class MapContext { map = $state() as MapLibre; loaded = $state(false); + minzoom = $state(0); + maxzoom = $state(24); } export function getMapContext(): MapContext { diff --git a/components/src/MapControl/MapControl.stories.svelte b/components/src/MapControl/MapControl.stories.svelte index cc09820d..615d482a 100644 --- a/components/src/MapControl/MapControl.stories.svelte +++ b/components/src/MapControl/MapControl.stories.svelte @@ -7,5 +7,3 @@ component: MapControl }); - - diff --git a/components/src/NavigationControl/NavigationControl.stories.svelte b/components/src/NavigationControl/NavigationControl.stories.svelte index dbc4209d..b58f3664 100644 --- a/components/src/NavigationControl/NavigationControl.stories.svelte +++ b/components/src/NavigationControl/NavigationControl.stories.svelte @@ -7,5 +7,3 @@ component: NavigationControl }); - - diff --git a/components/src/ScaleControl/ScaleControl.stories.svelte b/components/src/ScaleControl/ScaleControl.stories.svelte index d5da69f1..13d12a3f 100644 --- a/components/src/ScaleControl/ScaleControl.stories.svelte +++ b/components/src/ScaleControl/ScaleControl.stories.svelte @@ -7,5 +7,3 @@ component: ScaleControl }); - - From 22ed538b4dd7760436fb46b38fcab1513db5fd3c Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 13 May 2025 22:09:03 +0200 Subject: [PATCH 09/76] Add AttributionControl --- .../AttributionControl.stories.svelte | 2 - .../AttributionControl.svelte | 58 ++++++++++++++++++- components/src/Map/Map.stories.svelte | 9 ++- components/src/Map/Map.svelte | 5 +- components/src/MapControl/MapControl.svelte | 4 +- 5 files changed, 68 insertions(+), 10 deletions(-) diff --git a/components/src/AttributionControl/AttributionControl.stories.svelte b/components/src/AttributionControl/AttributionControl.stories.svelte index 4e0d2582..73329e5d 100644 --- a/components/src/AttributionControl/AttributionControl.stories.svelte +++ b/components/src/AttributionControl/AttributionControl.stories.svelte @@ -7,5 +7,3 @@ component: AttributionControl }); - - diff --git a/components/src/AttributionControl/AttributionControl.svelte b/components/src/AttributionControl/AttributionControl.svelte index fdc2d2e6..a4773fd0 100644 --- a/components/src/AttributionControl/AttributionControl.svelte +++ b/components/src/AttributionControl/AttributionControl.svelte @@ -1,7 +1,61 @@ + + diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 38ffbf9a..0bc9d1d6 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -5,6 +5,7 @@ import ScaleControl from '../ScaleControl/ScaleControl.svelte'; import NavigationControl from '../NavigationControl/NavigationControl.svelte'; import DesignTokens from '../DesignTokens/DesignTokens.svelte'; + import AttributionControl from '../AttributionControl/AttributionControl.svelte'; const { Story } = defineMeta({ title: 'Map/Map', @@ -13,8 +14,8 @@ { const canvas = within(canvasElement); const containerEl = canvas.getByTestId('map-container'); @@ -39,6 +40,11 @@ expect(zoomOutEl).toBeTruthy(); expect(zoomOutEl).toHaveRole('button'); }); + + await step('Attribution control renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-attrib'); + expect(el).toBeTruthy(); + }); }} >
@@ -46,6 +52,7 @@ +
diff --git a/components/src/Map/Map.svelte b/components/src/Map/Map.svelte index d3f2e8cd..9ad57a29 100644 --- a/components/src/Map/Map.svelte +++ b/components/src/Map/Map.svelte @@ -167,7 +167,6 @@ .maplibregl-ctrl-bottom-right, .maplibregl-ctrl-top-left, .maplibregl-ctrl-top-right { - pointer-events: none; position: absolute; z-index: 2; display: flex; @@ -192,8 +191,8 @@ } .maplibregl-ctrl-bottom-right { - bottom: 0; - right: 0; + bottom: 0.5em; + right: 0.5em; } .maplibregl-ctrl { diff --git a/components/src/MapControl/MapControl.svelte b/components/src/MapControl/MapControl.svelte index d50e63b2..9ea92fc8 100644 --- a/components/src/MapControl/MapControl.svelte +++ b/components/src/MapControl/MapControl.svelte @@ -1,7 +1,7 @@ -
+
{#if children} {@render children()} {/if} From 3fb2037fd3e13ebcac292c47d950e22a2dd558f7 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 13 May 2025 22:10:48 +0200 Subject: [PATCH 10/76] Fix typo --- components/src/Map/Map.stories.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 0bc9d1d6..5474eb10 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -32,7 +32,7 @@ const el = containerEl.querySelector('.maplibregl-ctrl-scale'); expect(el).toHaveTextContent('100 km'); }); - await step('Navigation Control renders', async () => { + await step('Navigation control renders', async () => { const zoomInEl = containerEl.querySelector('.maplibregl-ctrl-zoom-in'); const zoomOutEl = containerEl.querySelector('.maplibregl-ctrl-zoom-out'); expect(zoomInEl).toBeTruthy(); From 29b500284c8c7645c20014db21eadfc9f517ecc2 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 14 May 2025 12:59:55 +0200 Subject: [PATCH 11/76] Add GeocoderControl --- .../GeoCoderControl.stories.svelte | 2 - .../GeoCoderControl/GeoCoderControl.svelte | 184 +++++++++++++++++- .../src/GeoCoderControl/GeocoderAPIs.ts | 48 +++++ components/src/GeoCoderControl/types.ts | 9 + .../LinkToLocationControl.stories.svelte | 2 - components/src/Map/Map.mdx | 7 + components/src/Map/Map.stories.svelte | 7 + components/src/Map/Map.svelte | 4 +- 8 files changed, 255 insertions(+), 8 deletions(-) create mode 100644 components/src/GeoCoderControl/GeocoderAPIs.ts create mode 100644 components/src/GeoCoderControl/types.ts diff --git a/components/src/GeoCoderControl/GeoCoderControl.stories.svelte b/components/src/GeoCoderControl/GeoCoderControl.stories.svelte index b170a12c..fd468a22 100644 --- a/components/src/GeoCoderControl/GeoCoderControl.stories.svelte +++ b/components/src/GeoCoderControl/GeoCoderControl.stories.svelte @@ -7,5 +7,3 @@ component: GeoCoderControl }); - - diff --git a/components/src/GeoCoderControl/GeoCoderControl.svelte b/components/src/GeoCoderControl/GeoCoderControl.svelte index 9d4542b6..08c56347 100644 --- a/components/src/GeoCoderControl/GeoCoderControl.svelte +++ b/components/src/GeoCoderControl/GeoCoderControl.svelte @@ -1,7 +1,187 @@ + + diff --git a/components/src/GeoCoderControl/GeocoderAPIs.ts b/components/src/GeoCoderControl/GeocoderAPIs.ts new file mode 100644 index 00000000..b9be9ba0 --- /dev/null +++ b/components/src/GeoCoderControl/GeocoderAPIs.ts @@ -0,0 +1,48 @@ +import { + type CarmenGeojsonFeature, + type MaplibreGeocoderApi, + type MaplibreGeocoderApiConfig, + type MaplibreGeocoderFeatureResults +} from "@maplibre/maplibre-gl-geocoder" + +export class MaptilerGeocoderAPI implements MaplibreGeocoderApi { + key: string + + constructor(key: string) { + this.key = key + } + + async forwardGeocode(config: MaplibreGeocoderApiConfig): Promise { + const result: MaplibreGeocoderFeatureResults = { + type: 'FeatureCollection', + features: [] + }; + try { + const response = await fetch( + `https://api.maptiler.com/geocoding/${config.query}.json?country=${config.countries}&language=${config.language}&key=${this.key}` + ); + const geojson = await response.json(); + for (const feature of geojson.features) { + const res: CarmenGeojsonFeature = { + type: 'Feature', + id: feature.id, + place_type: ['place'], + place_name: feature.place_name, + language: feature.properties.display_name, + text: feature.text, + geometry: { + type: 'Point', + coordinates: feature.center + }, + properties: { + text: feature.text + } + }; + result.features.push(res); + } + } catch (e) { + console.error(`Failed to forwardGeocode with error: ${e}`); + } + return result; + } +} \ No newline at end of file diff --git a/components/src/GeoCoderControl/types.ts b/components/src/GeoCoderControl/types.ts new file mode 100644 index 00000000..5103799f --- /dev/null +++ b/components/src/GeoCoderControl/types.ts @@ -0,0 +1,9 @@ +export const enum ISO3166Alpha2Country { + de, + at +} + +export const enum MapTilerGeocoderLanguage { + de, + en +} \ No newline at end of file diff --git a/components/src/LinkToLocationControl/LinkToLocationControl.stories.svelte b/components/src/LinkToLocationControl/LinkToLocationControl.stories.svelte index 53e31551..d7b84f1f 100644 --- a/components/src/LinkToLocationControl/LinkToLocationControl.stories.svelte +++ b/components/src/LinkToLocationControl/LinkToLocationControl.stories.svelte @@ -7,5 +7,3 @@ component: LinkToLocationControl }); - - diff --git a/components/src/Map/Map.mdx b/components/src/Map/Map.mdx index 4db736a8..1c004153 100644 --- a/components/src/Map/Map.mdx +++ b/components/src/Map/Map.mdx @@ -12,5 +12,12 @@ Svelte components and modular basemaps for rendering custom slippy maps using th ### VectorLayer ## Controls ### ScaleControl +Renders a dynamic scalebar +### NavigationControl +Renders zoom buttons +### GeocoderControl +Renders a search input based on [maplibre-gl-geocoder](https://github.com/maplibre/maplibre-gl-geocoder) and any supported forward geocoding service. Currently only [maptiler](https://www.maptiler.com/) is supported. +### AttributionControl +Renders maplibre's default attribution control. ## Tooltips ## Styles \ No newline at end of file diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 5474eb10..bb2d9172 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -6,6 +6,7 @@ import NavigationControl from '../NavigationControl/NavigationControl.svelte'; import DesignTokens from '../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; + import GeoCoderControl from '../GeoCoderControl/GeoCoderControl.svelte'; const { Story } = defineMeta({ title: 'Map/Map', @@ -45,6 +46,11 @@ const el = containerEl.querySelector('.maplibregl-ctrl-attrib'); expect(el).toBeTruthy(); }); + + await step('Geocoder control renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-geocoder'); + expect(el).toBeTruthy(); + }); }} >
@@ -53,6 +59,7 @@ +
diff --git a/components/src/Map/Map.svelte b/components/src/Map/Map.svelte index 9ad57a29..2486303c 100644 --- a/components/src/Map/Map.svelte +++ b/components/src/Map/Map.svelte @@ -176,8 +176,8 @@ } .maplibregl-ctrl-top-left { - left: 0; - top: 0; + left: 0.5em; + top: 0.5em; } .maplibregl-ctrl-top-right { From f06c33288139acd786fc194036f8bd5eecdeb77b Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 14 May 2025 13:07:44 +0200 Subject: [PATCH 12/76] Simplify types --- components/src/GeoCoderControl/GeoCoderControl.svelte | 6 +++--- components/src/GeoCoderControl/types.ts | 9 --------- 2 files changed, 3 insertions(+), 12 deletions(-) delete mode 100644 components/src/GeoCoderControl/types.ts diff --git a/components/src/GeoCoderControl/GeoCoderControl.svelte b/components/src/GeoCoderControl/GeoCoderControl.svelte index 08c56347..24952161 100644 --- a/components/src/GeoCoderControl/GeoCoderControl.svelte +++ b/components/src/GeoCoderControl/GeoCoderControl.svelte @@ -1,12 +1,12 @@ + import { onMount } from 'svelte'; + import { MaptilerGeocoderAPI } from '../GeocoderControl/GeocoderAPIs'; + import { getMapContext } from '../Map/context.svelte.ts'; + import type { + MaplibreGeocoderApi, + MaplibreGeocoderApiConfig + } from '@maplibre/maplibre-gl-geocoder'; + + type Language = 'de' | 'en'; + type Country = 'de' | 'at'; + + interface LinkToLocationControlProps { + key: string; + service?: 'maptiler'; + countries?: Country[] | Country; + languages?: Language[] | Language; + } + + const { + key, + service = 'maptiler', + countries = 'de', + languages = 'de' + }: LinkToLocationControlProps = $props(); - + const { map } = $derived(getMapContext()); + const countriesArr = Array.isArray(countries) ? countries : [countries]; + const languagesArr = Array.isArray(languages) ? languages : [languages]; + + let geocoder: MaplibreGeocoderApi; + if (service === 'maptiler') { + geocoder = new MaptilerGeocoderAPI(key); + } + + function bboxToArea(bbox: [number, number, number, number]) { + return (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]); + } + + onMount(async () => { + const params = new URLSearchParams(window.location.search); + if (params.has('location')) { + console.log(params.get('location')); + const config: MaplibreGeocoderApiConfig = { + countries: countriesArr.join(','), + language: languagesArr.join(','), + query: params.get('location')?.toString(), + limit: 1 + }; + const res = await geocoder.forwardGeocode(config); + console.log(res.features[0]); + if (res.features[0].bbox && res.features[0].geometry.type === 'Point') { + map.jumpTo({ + center: [ + res.features[0].geometry.coordinates[0], + res.features[0].geometry.coordinates[1] + ], + zoom: 11 - bboxToArea(res.features[0].bbox) * 5.5 + }); + } + } + }); + diff --git a/components/src/Map/Map.mdx b/components/src/Map/Map.mdx index 1c004153..38891023 100644 --- a/components/src/Map/Map.mdx +++ b/components/src/Map/Map.mdx @@ -12,12 +12,14 @@ Svelte components and modular basemaps for rendering custom slippy maps using th ### VectorLayer ## Controls ### ScaleControl -Renders a dynamic scalebar +Renders a dynamic scalebar. ### NavigationControl Renders zoom buttons ### GeocoderControl Renders a search input based on [maplibre-gl-geocoder](https://github.com/maplibre/maplibre-gl-geocoder) and any supported forward geocoding service. Currently only [maptiler](https://www.maptiler.com/) is supported. ### AttributionControl Renders maplibre's default attribution control. +### LinkToLocationControl +Allows you to forward-geocode and move the map to a location specified by the `location` URL parameter ## Tooltips ## Styles \ No newline at end of file diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index bb2d9172..4f5d5cb5 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -6,7 +6,8 @@ import NavigationControl from '../NavigationControl/NavigationControl.svelte'; import DesignTokens from '../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; - import GeoCoderControl from '../GeoCoderControl/GeoCoderControl.svelte'; + import GeocoderControl from '../GeocoderControl/GeocoderControl.svelte'; + import LinkToLocationControl from '../LinkToLocationControl/LinkToLocationControl.svelte'; const { Story } = defineMeta({ title: 'Map/Map', @@ -59,7 +60,7 @@ - +
From 2ab4d020b1387c7d6e76277e3411563e72656936 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 14 May 2025 21:34:54 +0200 Subject: [PATCH 14/76] Remove unused import --- components/src/Map/Map.stories.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 4f5d5cb5..56098ac4 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -7,7 +7,6 @@ import DesignTokens from '../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; import GeocoderControl from '../GeocoderControl/GeocoderControl.svelte'; - import LinkToLocationControl from '../LinkToLocationControl/LinkToLocationControl.svelte'; const { Story } = defineMeta({ title: 'Map/Map', From 33c01ecabc8f772a5715d1959a161e77b55c5c35 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 14 May 2025 21:38:49 +0200 Subject: [PATCH 15/76] Fix casing --- components/src/GeoCoderControl/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/src/GeoCoderControl/index.js b/components/src/GeoCoderControl/index.js index b82df186..fe365908 100644 --- a/components/src/GeoCoderControl/index.js +++ b/components/src/GeoCoderControl/index.js @@ -1,2 +1,2 @@ -import GeoCoderControl from './GeoCoderControl.svelte'; -export default GeoCoderControl; +import GeocoderControl from './GeocoderControl.svelte'; +export default GeocoderControl; From a3493fff8454dbd02d2c556cbd2161d6cc4a12fc Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 14 May 2025 21:43:36 +0200 Subject: [PATCH 16/76] Tweak import --- components/src/Map/Map.stories.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 56098ac4..693c4dad 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -6,7 +6,7 @@ import NavigationControl from '../NavigationControl/NavigationControl.svelte'; import DesignTokens from '../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; - import GeocoderControl from '../GeocoderControl/GeocoderControl.svelte'; + import GeocoderControl from '../GeocoderControl'; const { Story } = defineMeta({ title: 'Map/Map', From 1585f9381764e86eb0c2166a0b4fb54afb794550 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 14 May 2025 21:49:53 +0200 Subject: [PATCH 17/76] Drop broken import --- components/src/Map/Map.stories.svelte | 2 -- 1 file changed, 2 deletions(-) diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 693c4dad..5ed682a2 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -6,7 +6,6 @@ import NavigationControl from '../NavigationControl/NavigationControl.svelte'; import DesignTokens from '../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; - import GeocoderControl from '../GeocoderControl'; const { Story } = defineMeta({ title: 'Map/Map', @@ -59,7 +58,6 @@ -
From 50149d15ca0d3dd2b79a436770d7b00acb1e07b4 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 14 May 2025 22:26:22 +0200 Subject: [PATCH 18/76] Fix directory casing --- .../src/GeocoderControl/GeocoderAPIs.ts | 49 ++++++++++ .../GeocoderControl.stories.svelte} | 4 +- .../GeocoderControl.svelte} | 0 components/src/GeocoderControl/index.js | 2 + components/src/Map/Map.stories.svelte | 2 + components/src/Map/context.svelte.ts | 53 ++++++++++- components/src/MapSource/MapSource.svelte | 34 ++++++- components/src/MapSource/source.ts | 89 +++++++++++++++++++ 8 files changed, 226 insertions(+), 7 deletions(-) create mode 100644 components/src/GeocoderControl/GeocoderAPIs.ts rename components/src/{GeoCoderControl/GeoCoderControl.stories.svelte => GeocoderControl/GeocoderControl.stories.svelte} (68%) rename components/src/{GeoCoderControl/GeoCoderControl.svelte => GeocoderControl/GeocoderControl.svelte} (100%) create mode 100644 components/src/GeocoderControl/index.js create mode 100644 components/src/MapSource/source.ts diff --git a/components/src/GeocoderControl/GeocoderAPIs.ts b/components/src/GeocoderControl/GeocoderAPIs.ts new file mode 100644 index 00000000..75e84686 --- /dev/null +++ b/components/src/GeocoderControl/GeocoderAPIs.ts @@ -0,0 +1,49 @@ +import { + type CarmenGeojsonFeature, + type MaplibreGeocoderApi, + type MaplibreGeocoderApiConfig, + type MaplibreGeocoderFeatureResults +} from "@maplibre/maplibre-gl-geocoder" + +export class MaptilerGeocoderAPI implements MaplibreGeocoderApi { + key: string + + constructor(key: string) { + this.key = key + } + + async forwardGeocode(config: MaplibreGeocoderApiConfig): Promise { + const result: MaplibreGeocoderFeatureResults = { + type: 'FeatureCollection', + features: [] + }; + try { + const response = await fetch( + `https://api.maptiler.com/geocoding/${config.query}.json?country=${config.countries}&language=${config.language}&key=${this.key}` + ); + const geojson = await response.json(); + for (const feature of geojson.features) { + const res: CarmenGeojsonFeature = { + type: 'Feature', + id: feature.id, + place_type: ['place'], + place_name: feature.place_name, + language: feature.properties.display_name, + text: feature.text, + bbox: feature.bbox, + geometry: { + type: 'Point', + coordinates: feature.center + }, + properties: { + text: feature.text + } + }; + result.features.push(res); + } + } catch (e) { + console.error(`Failed to forwardGeocode with error: ${e}`); + } + return result; + } +} \ No newline at end of file diff --git a/components/src/GeoCoderControl/GeoCoderControl.stories.svelte b/components/src/GeocoderControl/GeocoderControl.stories.svelte similarity index 68% rename from components/src/GeoCoderControl/GeoCoderControl.stories.svelte rename to components/src/GeocoderControl/GeocoderControl.stories.svelte index fd468a22..1f21b35d 100644 --- a/components/src/GeoCoderControl/GeoCoderControl.stories.svelte +++ b/components/src/GeocoderControl/GeocoderControl.stories.svelte @@ -1,9 +1,9 @@ diff --git a/components/src/GeoCoderControl/GeoCoderControl.svelte b/components/src/GeocoderControl/GeocoderControl.svelte similarity index 100% rename from components/src/GeoCoderControl/GeoCoderControl.svelte rename to components/src/GeocoderControl/GeocoderControl.svelte diff --git a/components/src/GeocoderControl/index.js b/components/src/GeocoderControl/index.js new file mode 100644 index 00000000..fe365908 --- /dev/null +++ b/components/src/GeocoderControl/index.js @@ -0,0 +1,2 @@ +import GeocoderControl from './GeocoderControl.svelte'; +export default GeocoderControl; diff --git a/components/src/Map/Map.stories.svelte b/components/src/Map/Map.stories.svelte index 5ed682a2..56098ac4 100644 --- a/components/src/Map/Map.stories.svelte +++ b/components/src/Map/Map.stories.svelte @@ -6,6 +6,7 @@ import NavigationControl from '../NavigationControl/NavigationControl.svelte'; import DesignTokens from '../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; + import GeocoderControl from '../GeocoderControl/GeocoderControl.svelte'; const { Story } = defineMeta({ title: 'Map/Map', @@ -58,6 +59,7 @@ +
diff --git a/components/src/Map/context.svelte.ts b/components/src/Map/context.svelte.ts index 12f06de6..e23b9c51 100644 --- a/components/src/Map/context.svelte.ts +++ b/components/src/Map/context.svelte.ts @@ -1,7 +1,21 @@ -import type { Map as MapLibre } from 'maplibre-gl'; +import type { Map as MapLibre, Marker } from 'maplibre-gl'; import { getContext, setContext } from 'svelte'; const MAP_CONTEXT_KEY = Symbol.for('map-context'); +const SOURCE_KEY = Symbol.for('source'); +const LAYER_KEY = Symbol.for('layer'); +const POPUP_TARGET_KEY = Symbol.for("popup-target") + + + +export class Box { + value = $state() as T; + + constructor(initialValue: T) { + this.value = initialValue; + } +} + export class MapContext { map = $state() as MapLibre; @@ -10,6 +24,43 @@ export class MapContext { maxzoom = $state(24); } +export function setSource(value: Box) { + setContext(SOURCE_KEY, value); +} +export function setLayer(value: Box) { + setContext(LAYER_KEY, value); +} + +export function setPopupTarget(value: Box) { + setContext(POPUP_TARGET_KEY, value); +} + +export function getPopupTarget(): Box | undefined { + return getContext(POPUP_TARGET_KEY); +} + +export function updatedSourceContext() { + const source = new Box(undefined); + setSource(source); + + return { + source, + }; +} + +export function updatedLayerContext(interactive = true) { + const layer = new Box(undefined); + setLayer(layer); + + if (interactive) { + setPopupTarget(layer); + } + + return { + layer, + }; +} + export function getMapContext(): MapContext { return getContext(MAP_CONTEXT_KEY); } diff --git a/components/src/MapSource/MapSource.svelte b/components/src/MapSource/MapSource.svelte index 15dc85ac..f74ef597 100644 --- a/components/src/MapSource/MapSource.svelte +++ b/components/src/MapSource/MapSource.svelte @@ -1,8 +1,34 @@ - +{#if loaded} + {@render children?.()} +{/if} diff --git a/components/src/MapSource/source.ts b/components/src/MapSource/source.ts new file mode 100644 index 00000000..8e9a74cc --- /dev/null +++ b/components/src/MapSource/source.ts @@ -0,0 +1,89 @@ +import type { Map, SourceSpecification } from 'maplibre-gl'; +import { tick } from 'svelte'; + +/** + * Add a source to the map. + * + * @param map - The map instance + * @param sourceId - The ID of the source to add + * @param source - The source specification object + * @param okToAdd - Callback to check if the source should still be added + * @param cb - Callback when the source has been added + * + * This properly handles the case where an old source with the same ID is still being removed. + */ +export function addSource( + map: Map, + sourceId: string, + source: SourceSpecification, + okToAdd: (sourceId: string) => boolean, + cb: () => void +) { + // If there was an old source with the same ID, then remove it. This can happen when removing a source and adding a new source in quick succession. + let removed = false; + if (map.getSource(sourceId)) { + removed = true; + map.removeSource(sourceId); + } + + const doAddSource = () => { + if (!okToAdd(sourceId)) { + // in case the component was destroyed or the id changed while waiting to call this + return; + } + + map.addSource(sourceId, source); + cb(); + }; + + if (removed) { + // Source removal happens quickly but asynchronously, and we have no way to really interlock on when it happens, so just loop until it does. + const waitForRemoval = () => { + if (!sourceId) { + return; + } + + if (map.getSource(sourceId)) { + // The source hasn't been removed yet, so keep waiting. + setTimeout(waitForRemoval, 1); + } else { + doAddSource(); + } + }; + + waitForRemoval(); + } else { + // If we don't have an existing source to remove (i.e. the normal case) then + // just add the source right away. + doAddSource(); + } +} + +/** + * A helper function that removes a source from the map after all of the layers inside it have + * had a chance to remove themselves. + * + * @param {Readable} mapStore - The store containing the Map instance + * @param {string} sourceId - The ID of the source to remove + * @param {unknown} sourceObj - The source object that was originally added + * + * Waits one tick to ensure layers have a chance to be removed, then checks if the + * source with the given ID is still the same object as was originally added. + * + * If so, it removes the source from the map. This avoids removing a source that was + * already replaced by another source reusing the same ID. + */ +export function removeSource(map: Map, sourceId: string, sourceObj: unknown) { + tick().then(() => { + // Wait a tick so that the layers inside this source can all be removed. + // But make sure that the source wasn't already replaced with another source with the same ID. + if (!map.loaded()) { + return; + } + + let remainingSource = map.getSource(sourceId); + if (remainingSource === sourceObj) { + map.removeSource(sourceId); + } + }); +} \ No newline at end of file From 9899eaf78af7f73f3f74bb875582feb043079f8f Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Thu, 15 May 2025 13:12:18 +0200 Subject: [PATCH 19/76] Start on VectorLayer, VectorSource --- components/src/Map/Map.mdx | 2 + components/src/Map/context.svelte.ts | 37 ++++++++++------ .../src/MapSource/MapSource.stories.svelte | 2 - components/src/MapSource/MapSource.svelte | 40 ++++++++++++----- .../src/MapVectorLayer/MapVectorLayer.svelte | 43 ++++++++++++++++++- .../src/VectorTileSource/VectorTileSource.mdx | 23 ++++++++++ .../VectorTileSource.stories.svelte | 41 ++++++++++++++++++ .../VectorTileSource/VectorTileSource.svelte | 24 +++++++++++ components/src/VectorTileSource/index.js | 2 + 9 files changed, 188 insertions(+), 26 deletions(-) create mode 100644 components/src/VectorTileSource/VectorTileSource.mdx create mode 100644 components/src/VectorTileSource/VectorTileSource.stories.svelte create mode 100644 components/src/VectorTileSource/VectorTileSource.svelte create mode 100644 components/src/VectorTileSource/index.js diff --git a/components/src/Map/Map.mdx b/components/src/Map/Map.mdx index 38891023..44c5c2b1 100644 --- a/components/src/Map/Map.mdx +++ b/components/src/Map/Map.mdx @@ -8,6 +8,7 @@ import * as MapStories from './Map.stories.svelte'; Svelte components and modular basemaps for rendering custom slippy maps using the [versatiles](https://docs.versatiles.org/) stack. Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreise/blob/main/src/lib/components/Map/Map.svelte) from [Jakob Bauer](https://github.com/AgricolaJKB). ## Sources +### VectorTileSource ## Layers ### VectorLayer ## Controls @@ -21,5 +22,6 @@ Renders a search input based on [maplibre-gl-geocoder](https://github.com/maplib Renders maplibre's default attribution control. ### LinkToLocationControl Allows you to forward-geocode and move the map to a location specified by the `location` URL parameter +### Custom controls ## Tooltips ## Styles \ No newline at end of file diff --git a/components/src/Map/context.svelte.ts b/components/src/Map/context.svelte.ts index e23b9c51..04548886 100644 --- a/components/src/Map/context.svelte.ts +++ b/components/src/Map/context.svelte.ts @@ -1,13 +1,11 @@ -import type { Map as MapLibre, Marker } from 'maplibre-gl'; +import type { Map as MapLibre, Marker, Source, LayerSpecification } from 'maplibre-gl'; import { getContext, setContext } from 'svelte'; const MAP_CONTEXT_KEY = Symbol.for('map-context'); -const SOURCE_KEY = Symbol.for('source'); -const LAYER_KEY = Symbol.for('layer'); +const SOURCE_CONTEXT_KEY = Symbol.for('source-context'); +const LAYER_CONTEXT_KEY = Symbol.for('layer-context'); const POPUP_TARGET_KEY = Symbol.for("popup-target") - - export class Box { value = $state() as T; @@ -16,7 +14,6 @@ export class Box { } } - export class MapContext { map = $state() as MapLibre; loaded = $state(false); @@ -24,11 +21,21 @@ export class MapContext { maxzoom = $state(24); } -export function setSource(value: Box) { - setContext(SOURCE_KEY, value); +export class SourceContext { + source = $state() as Source; + loaded = $state(false); + minzoom = $state(0); + maxzoom = $state(24); } -export function setLayer(value: Box) { - setContext(LAYER_KEY, value); +export class LayerContext { + layer = $state() as LayerSpecification; +} + +export function setSourceContext(value: Box) { + setContext(SOURCE_CONTEXT_KEY, value); +} +export function setLayerContext(value: string) { + setContext(LAYER_CONTEXT_KEY, value); } export function setPopupTarget(value: Box) { @@ -41,7 +48,7 @@ export function getPopupTarget(): Box | undefined { export function updatedSourceContext() { const source = new Box(undefined); - setSource(source); + setSourceContext(source); return { source, @@ -50,7 +57,7 @@ export function updatedSourceContext() { export function updatedLayerContext(interactive = true) { const layer = new Box(undefined); - setLayer(layer); + setLayerContext(layer); if (interactive) { setPopupTarget(layer); @@ -64,6 +71,12 @@ export function updatedLayerContext(interactive = true) { export function getMapContext(): MapContext { return getContext(MAP_CONTEXT_KEY); } +export function getSourceContext(): SourceContext { + return getContext(SOURCE_CONTEXT_KEY); +} +export function getLayerContext(): LayerContext { + return getContext(LAYER_CONTEXT_KEY); +} export function createMapContext(): MapContext { return setContext(MAP_CONTEXT_KEY, new MapContext()); diff --git a/components/src/MapSource/MapSource.stories.svelte b/components/src/MapSource/MapSource.stories.svelte index 33a45800..800542ed 100644 --- a/components/src/MapSource/MapSource.stories.svelte +++ b/components/src/MapSource/MapSource.stories.svelte @@ -7,5 +7,3 @@ component: MapSource }); - - diff --git a/components/src/MapSource/MapSource.svelte b/components/src/MapSource/MapSource.svelte index f74ef597..87e42a5e 100644 --- a/components/src/MapSource/MapSource.svelte +++ b/components/src/MapSource/MapSource.svelte @@ -1,30 +1,50 @@ diff --git a/components/src/MapVectorLayer/MapVectorLayer.svelte b/components/src/MapVectorLayer/MapVectorLayer.svelte index 7092707e..99970ad0 100644 --- a/components/src/MapVectorLayer/MapVectorLayer.svelte +++ b/components/src/MapVectorLayer/MapVectorLayer.svelte @@ -1,7 +1,46 @@ diff --git a/components/src/VectorTileSource/VectorTileSource.svelte b/components/src/VectorTileSource/VectorTileSource.svelte new file mode 100644 index 00000000..a7e6e0e5 --- /dev/null +++ b/components/src/VectorTileSource/VectorTileSource.svelte @@ -0,0 +1,24 @@ + + + diff --git a/components/src/VectorTileSource/index.js b/components/src/VectorTileSource/index.js new file mode 100644 index 00000000..d35ea08c --- /dev/null +++ b/components/src/VectorTileSource/index.js @@ -0,0 +1,2 @@ +import VectorTileSource from './VectorTileSource.svelte'; +export default VectorTileSource; From d607810620107c63ed3d530523af023425b9c6d0 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Fri, 16 May 2025 13:08:53 +0200 Subject: [PATCH 20/76] Block out vector tile rendering --- components/src/Map/Map.svelte | 1 - components/src/Map/context.svelte.ts | 78 ++++++++++--------- components/src/MapSource/MapSource.svelte | 66 ++++++++-------- .../MapVectorLayer.stories.svelte | 32 +++++++- .../src/MapVectorLayer/MapVectorLayer.svelte | 44 +++++++---- .../src/VectorTileSource/VectorTileSource.mdx | 7 -- .../VectorTileSource.stories.svelte | 32 -------- .../VectorTileSource/VectorTileSource.svelte | 2 +- 8 files changed, 137 insertions(+), 125 deletions(-) diff --git a/components/src/Map/Map.svelte b/components/src/Map/Map.svelte index 2486303c..e81fced2 100644 --- a/components/src/Map/Map.svelte +++ b/components/src/Map/Map.svelte @@ -58,7 +58,6 @@ }); mapContext.map.on('load', () => { - mapContext.loaded = true; zoom = mapContext.map.getZoom(); center = mapContext.map.getCenter(); pitch = mapContext.map.getPitch(); diff --git a/components/src/Map/context.svelte.ts b/components/src/Map/context.svelte.ts index 04548886..ffa6da64 100644 --- a/components/src/Map/context.svelte.ts +++ b/components/src/Map/context.svelte.ts @@ -1,4 +1,4 @@ -import type { Map as MapLibre, Marker, Source, LayerSpecification } from 'maplibre-gl'; +import type { Map as MapLibre, Marker, LayerSpecification, VectorSourceSpecification } from 'maplibre-gl'; import { getContext, setContext } from 'svelte'; const MAP_CONTEXT_KEY = Symbol.for('map-context'); @@ -15,29 +15,50 @@ export class Box { } export class MapContext { - map = $state() as MapLibre; - loaded = $state(false); + _map = $state(null) as MapLibre | null; minzoom = $state(0); maxzoom = $state(24); + styleLoaded = $state(false); + private _listener?: maplibregl.Listener = undefined; + + get map() { + return this._map; + } + + set map(value: maplibregl.Map | null) { + // Unbind any old event listeners + if (this._listener) { + this._map?.off('styledata', this._listener); + this._listener = undefined; + } + // Set new map instance and bind new event listeners + this._map = value; + if (this._map) { + this._listener = this._onstyledata.bind(this); + this._map.on('styledata', this._listener); + } + } + + private _onstyledata(e: maplibregl.MapStyleDataEvent) { + this.styleLoaded = true + } } export class SourceContext { - source = $state() as Source; + _source = $state(); loaded = $state(false); minzoom = $state(0); maxzoom = $state(24); + + get source() { + console.log("gettign source") + return this._source; + } } export class LayerContext { layer = $state() as LayerSpecification; } -export function setSourceContext(value: Box) { - setContext(SOURCE_CONTEXT_KEY, value); -} -export function setLayerContext(value: string) { - setContext(LAYER_CONTEXT_KEY, value); -} - export function setPopupTarget(value: Box) { setContext(POPUP_TARGET_KEY, value); } @@ -46,38 +67,25 @@ export function getPopupTarget(): Box | undefined { return getContext(POPUP_TARGET_KEY); } -export function updatedSourceContext() { - const source = new Box(undefined); - setSourceContext(source); - - return { - source, - }; -} - -export function updatedLayerContext(interactive = true) { - const layer = new Box(undefined); - setLayerContext(layer); - - if (interactive) { - setPopupTarget(layer); - } - - return { - layer, - }; +export function createMapContext(): MapContext { + console.log("Setting map context"); + return setContext(MAP_CONTEXT_KEY, new MapContext()); } - export function getMapContext(): MapContext { return getContext(MAP_CONTEXT_KEY); } + +export function createSourceContext(): SourceContext { + return setContext(SOURCE_CONTEXT_KEY, new SourceContext()); +} export function getSourceContext(): SourceContext { return getContext(SOURCE_CONTEXT_KEY); } + export function getLayerContext(): LayerContext { return getContext(LAYER_CONTEXT_KEY); } -export function createMapContext(): MapContext { - return setContext(MAP_CONTEXT_KEY, new MapContext()); -} +export function setLayerContext(value: string) { + setContext(LAYER_CONTEXT_KEY, value); +} \ No newline at end of file diff --git a/components/src/MapSource/MapSource.svelte b/components/src/MapSource/MapSource.svelte index 87e42a5e..a91bfeef 100644 --- a/components/src/MapSource/MapSource.svelte +++ b/components/src/MapSource/MapSource.svelte @@ -1,54 +1,54 @@ -{#if loaded} - {@render children?.()} -{/if} +{@render children?.()} diff --git a/components/src/MapVectorLayer/MapVectorLayer.stories.svelte b/components/src/MapVectorLayer/MapVectorLayer.stories.svelte index 06544bc2..05fa51cd 100644 --- a/components/src/MapVectorLayer/MapVectorLayer.stories.svelte +++ b/components/src/MapVectorLayer/MapVectorLayer.stories.svelte @@ -1,11 +1,41 @@ - + +
+ + + + + + +
+
+ + diff --git a/components/src/MapVectorLayer/MapVectorLayer.svelte b/components/src/MapVectorLayer/MapVectorLayer.svelte index 99970ad0..54cb7c74 100644 --- a/components/src/MapVectorLayer/MapVectorLayer.svelte +++ b/components/src/MapVectorLayer/MapVectorLayer.svelte @@ -1,16 +1,14 @@ - - diff --git a/components/src/VectorTileSource/VectorTileSource.mdx b/components/src/VectorTileSource/VectorTileSource.mdx index 6cf7b0d2..b49c76aa 100644 --- a/components/src/VectorTileSource/VectorTileSource.mdx +++ b/components/src/VectorTileSource/VectorTileSource.mdx @@ -1,7 +1,4 @@ import { Story, Meta, Primary, Controls, Stories} from '@storybook/addon-docs/blocks'; -import * as VectorTileSourceStories from './VectorTileSource.stories.svelte'; - - # VectorTileSource @@ -17,7 +14,3 @@ Loads tiled vector data from a tileserver. Any mablibre-supported tileserver wil ``` - - - - diff --git a/components/src/VectorTileSource/VectorTileSource.stories.svelte b/components/src/VectorTileSource/VectorTileSource.stories.svelte index 6ef5c7b4..49d99a33 100644 --- a/components/src/VectorTileSource/VectorTileSource.stories.svelte +++ b/components/src/VectorTileSource/VectorTileSource.stories.svelte @@ -1,41 +1,9 @@ - - -
- - - - - - -
-
- - diff --git a/components/src/VectorTileSource/VectorTileSource.svelte b/components/src/VectorTileSource/VectorTileSource.svelte index a7e6e0e5..2437ea7a 100644 --- a/components/src/VectorTileSource/VectorTileSource.svelte +++ b/components/src/VectorTileSource/VectorTileSource.svelte @@ -21,4 +21,4 @@ }; - + From e8e48237d2e7b173785ee29fbbdd726ace707459 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Fri, 16 May 2025 15:01:00 +0200 Subject: [PATCH 21/76] Iterate MapLayer --- components/src/Map/Map.mdx | 6 ++++- components/src/MapSource/MapSource.svelte | 14 ++++++++--- .../MapVectorLayer.stories.svelte | 23 +++++++++++++++++-- .../src/MapVectorLayer/MapVectorLayer.svelte | 16 +++++++++---- 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/components/src/Map/Map.mdx b/components/src/Map/Map.mdx index 44c5c2b1..ee1784a5 100644 --- a/components/src/Map/Map.mdx +++ b/components/src/Map/Map.mdx @@ -24,4 +24,8 @@ Renders maplibre's default attribution control. Allows you to forward-geocode and move the map to a location specified by the `location` URL parameter ### Custom controls ## Tooltips -## Styles \ No newline at end of file +## Styles + +## Known issues + +- Firefox throws `WebGL warning: texImage: Alpha-premult and y-flip are deprecated for non-DOM-Element uploads.`, see: https://github.com/maplibre/maplibre-gl-js/issues/2030 \ No newline at end of file diff --git a/components/src/MapSource/MapSource.svelte b/components/src/MapSource/MapSource.svelte index a91bfeef..bc932ff6 100644 --- a/components/src/MapSource/MapSource.svelte +++ b/components/src/MapSource/MapSource.svelte @@ -1,6 +1,6 @@ diff --git a/components/src/MapVectorLayer/MapVectorLayer.stories.svelte b/components/src/MapVectorLayer/MapVectorLayer.stories.svelte index 05fa51cd..6820755c 100644 --- a/components/src/MapVectorLayer/MapVectorLayer.stories.svelte +++ b/components/src/MapVectorLayer/MapVectorLayer.stories.svelte @@ -18,13 +18,32 @@ + diff --git a/components/src/MapVectorLayer/MapVectorLayer.svelte b/components/src/MapVectorLayer/MapVectorLayer.svelte index 54cb7c74..91967c2d 100644 --- a/components/src/MapVectorLayer/MapVectorLayer.svelte +++ b/components/src/MapVectorLayer/MapVectorLayer.svelte @@ -1,5 +1,11 @@ diff --git a/components/src/MapTooltip/MapTooltip.svelte b/components/src/MapTooltip/MapTooltip.svelte new file mode 100644 index 00000000..7035ee6b --- /dev/null +++ b/components/src/MapTooltip/MapTooltip.svelte @@ -0,0 +1,50 @@ + + +
+ {@render children?.()} +
diff --git a/components/src/MapTooltip/index.js b/components/src/MapTooltip/index.js new file mode 100644 index 00000000..dd98a551 --- /dev/null +++ b/components/src/MapTooltip/index.js @@ -0,0 +1,2 @@ +import MapTooltip from './MapTooltip.svelte'; +export default MapTooltip; diff --git a/components/src/MapVectorLayer/MapVectorLayer.stories.svelte b/components/src/MapVectorLayer/MapVectorLayer.stories.svelte index 6820755c..015c6942 100644 --- a/components/src/MapVectorLayer/MapVectorLayer.stories.svelte +++ b/components/src/MapVectorLayer/MapVectorLayer.stories.svelte @@ -2,6 +2,7 @@ import { defineMeta } from '@storybook/addon-svelte-csf'; import MapVectorLayer from './MapVectorLayer.svelte'; import Map from '../Map/Map.svelte'; + import AttributionControl from '../AttributionControl/AttributionControl.svelte'; import DesignTokens from '../DesignTokens/DesignTokens.svelte'; import VectorTileSource from '../VectorTileSource/VectorTileSource.svelte'; @@ -14,9 +15,9 @@ -
- - + +
+ + - -
+
+
diff --git a/components/src/MapStyle/MapStyle.ts b/components/src/MapStyle/MapStyle.ts index 0360304e..34dcbd43 100644 --- a/components/src/MapStyle/MapStyle.ts +++ b/components/src/MapStyle/MapStyle.ts @@ -209,9 +209,8 @@ const style: StyleSpecification = { }, glyphs: 'https://static.datenhub.net/maps/fonts/{fontstack}/{range}.pbf', sources: { - 'versatiles-shortbread': { - attribution: - '© OpenStreetMap contributors', + 'versatiles-osm': { + attribution: '© OpenStreetMap contributors', tiles: ['https://tiles.versatiles.org/tiles/osm/{z}/{x}/{y}'], type: 'vector', scheme: 'xyz', @@ -229,7 +228,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-ocean', type: 'fill', 'source-layer': 'ocean', @@ -238,7 +237,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-glacier', type: 'fill', 'source-layer': 'water_polygons', @@ -248,7 +247,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-industrial', type: 'fill', 'source-layer': 'land', @@ -259,7 +258,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-agriculture', type: 'fill', 'source-layer': 'land', @@ -289,7 +288,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-waste', type: 'fill', 'source-layer': 'land', @@ -305,7 +304,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-park', type: 'fill', 'source-layer': 'land', @@ -321,7 +320,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-garden', type: 'fill', 'source-layer': 'land', @@ -337,7 +336,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-burial', type: 'fill', 'source-layer': 'land', @@ -353,7 +352,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-leisure', type: 'fill', 'source-layer': 'land', @@ -363,7 +362,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-rock', type: 'fill', 'source-layer': 'land', @@ -373,7 +372,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-forest', type: 'fill', 'source-layer': 'land', @@ -389,7 +388,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-grass', type: 'fill', 'source-layer': 'land', @@ -405,7 +404,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-vegetation', type: 'fill', 'source-layer': 'land', @@ -421,7 +420,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-sand', type: 'fill', 'source-layer': 'land', @@ -431,7 +430,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'land-wetland', type: 'fill', 'source-layer': 'land', @@ -447,7 +446,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-river', type: 'line', 'source-layer': 'water_lines', @@ -472,7 +471,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-canal', type: 'line', 'source-layer': 'water_lines', @@ -496,7 +495,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-stream', type: 'line', 'source-layer': 'water_lines', @@ -520,7 +519,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-ditch', type: 'line', 'source-layer': 'water_lines', @@ -543,7 +542,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-area', type: 'fill', 'source-layer': 'water_polygons', @@ -559,7 +558,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-area-river', type: 'fill', 'source-layer': 'water_polygons', @@ -575,7 +574,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-area-small', type: 'fill', 'source-layer': 'water_polygons', @@ -591,7 +590,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-dam-area', type: 'fill', 'source-layer': 'dam_polygons', @@ -607,7 +606,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-dam', type: 'line', 'source-layer': 'dam_lines', @@ -621,7 +620,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-pier-area', type: 'fill', 'source-layer': 'pier_polygons', @@ -637,7 +636,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'water-pier', type: 'line', 'source-layer': 'pier_lines', @@ -657,7 +656,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-dangerarea', type: 'fill', 'source-layer': 'sites', @@ -669,7 +668,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-university', type: 'fill', 'source-layer': 'sites', @@ -680,7 +679,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-college', type: 'fill', 'source-layer': 'sites', @@ -691,7 +690,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-school', type: 'fill', 'source-layer': 'sites', @@ -702,7 +701,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-hospital', type: 'fill', 'source-layer': 'sites', @@ -713,7 +712,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-prison', type: 'fill', 'source-layer': 'sites', @@ -724,7 +723,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-parking', type: 'fill', 'source-layer': 'sites', @@ -734,7 +733,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-bicycleparking', type: 'fill', 'source-layer': 'sites', @@ -744,7 +743,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'site-construction', type: 'fill', 'source-layer': 'sites', @@ -755,7 +754,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'airport-area', type: 'fill', 'source-layer': 'street_polygons', @@ -766,7 +765,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'airport-taxiway:outline', type: 'line', 'source-layer': 'streets', @@ -789,7 +788,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'airport-runway:outline', type: 'line', 'source-layer': 'streets', @@ -815,7 +814,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'airport-taxiway', type: 'line', 'source-layer': 'streets', @@ -844,7 +843,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'airport-runway', type: 'line', 'source-layer': 'streets', @@ -877,7 +876,7 @@ const style: StyleSpecification = { }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'building', type: 'fill', 'source-layer': 'buildings', @@ -892,7 +891,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-pedestrian-zone', type: 'fill', 'source-layer': 'street_polygons', @@ -908,7 +907,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-way-footway:outline', type: 'line', 'source-layer': 'streets', @@ -931,7 +930,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-way-steps:outline', type: 'line', 'source-layer': 'streets', @@ -954,7 +953,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-way-path:outline', type: 'line', 'source-layer': 'streets', @@ -977,7 +976,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-way-cycleway:outline', type: 'line', 'source-layer': 'streets', @@ -1000,7 +999,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-track:outline', type: 'line', 'source-layer': 'streets', @@ -1029,7 +1028,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-pedestrian:outline', type: 'line', 'source-layer': 'streets', @@ -1059,7 +1058,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-service:outline', type: 'line', 'source-layer': 'streets', @@ -1093,7 +1092,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-livingstreet:outline', type: 'line', 'source-layer': 'streets', @@ -1123,7 +1122,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-residential:outline', type: 'line', 'source-layer': 'streets', @@ -1139,7 +1138,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-unclassified:outline', type: 'line', 'source-layer': 'streets', @@ -1169,7 +1168,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-tertiary-link:outline', type: 'line', 'source-layer': 'streets', @@ -1199,7 +1198,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-secondary-link:outline', type: 'line', 'source-layer': 'streets', @@ -1224,7 +1223,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-primary-link:outline', type: 'line', 'source-layer': 'streets', @@ -1241,7 +1240,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-trunk-link:outline', type: 'line', 'source-layer': 'streets', @@ -1257,7 +1256,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-motorway-link:outline', type: 'line', 'source-layer': 'streets', @@ -1274,7 +1273,7 @@ const style: StyleSpecification = { minzoom: 12 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-tertiary:outline', type: 'line', 'source-layer': 'streets', @@ -1304,7 +1303,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-secondary:outline', type: 'line', 'source-layer': 'streets', @@ -1335,7 +1334,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-primary:outline', type: 'line', 'source-layer': 'streets', @@ -1362,7 +1361,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-trunk:outline', type: 'line', 'source-layer': 'streets', @@ -1378,7 +1377,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-motorway:outline', type: 'line', 'source-layer': 'streets', @@ -1394,7 +1393,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-way-footway', type: 'line', 'source-layer': 'streets', @@ -1418,7 +1417,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-way-steps', type: 'line', 'source-layer': 'streets', @@ -1442,7 +1441,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-way-path', type: 'line', 'source-layer': 'streets', @@ -1466,7 +1465,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-way-cycleway', type: 'line', 'source-layer': 'streets', @@ -1490,7 +1489,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-track', type: 'line', 'source-layer': 'streets', @@ -1519,7 +1518,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-pedestrian', type: 'line', 'source-layer': 'streets', @@ -1549,7 +1548,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-service', type: 'line', 'source-layer': 'streets', @@ -1583,7 +1582,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-livingstreet', type: 'line', 'source-layer': 'streets', @@ -1613,7 +1612,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-residential', type: 'line', 'source-layer': 'streets', @@ -1634,7 +1633,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-unclassified', type: 'line', 'source-layer': 'streets', @@ -1664,7 +1663,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-track-bicycle', type: 'line', 'source-layer': 'streets', @@ -1683,7 +1682,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-pedestrian-bicycle', type: 'line', 'source-layer': 'streets', @@ -1715,7 +1714,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-service-bicycle', type: 'line', 'source-layer': 'streets', @@ -1735,7 +1734,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-livingstreet-bicycle', type: 'line', 'source-layer': 'streets', @@ -1767,7 +1766,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-residential-bicycle', type: 'line', 'source-layer': 'streets', @@ -1785,7 +1784,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-unclassified-bicycle', type: 'line', 'source-layer': 'streets', @@ -1817,7 +1816,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-tertiary-link', type: 'line', 'source-layer': 'streets', @@ -1847,7 +1846,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-secondary-link', type: 'line', 'source-layer': 'streets', @@ -1860,7 +1859,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-primary-link', type: 'line', 'source-layer': 'streets', @@ -1873,7 +1872,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-trunk-link', type: 'line', 'source-layer': 'streets', @@ -1886,7 +1885,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-motorway-link', type: 'line', 'source-layer': 'streets', @@ -1900,7 +1899,7 @@ const style: StyleSpecification = { minzoom: 12 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-tertiary', type: 'line', 'source-layer': 'streets', @@ -1930,7 +1929,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-secondary', type: 'line', 'source-layer': 'streets', @@ -1957,7 +1956,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-primary', type: 'line', 'source-layer': 'streets', @@ -1975,7 +1974,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-trunk', type: 'line', 'source-layer': 'streets', @@ -1993,7 +1992,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-street-motorway', type: 'line', 'source-layer': 'streets', @@ -2006,7 +2005,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-transport-monorail', type: 'line', 'source-layer': 'streets', @@ -2018,7 +2017,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-transport-funicular', type: 'line', 'source-layer': 'streets', @@ -2030,7 +2029,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-transport-tram', type: 'line', 'source-layer': 'streets', @@ -2042,7 +2041,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-transport-narrowgauge', type: 'line', 'source-layer': 'streets', @@ -2054,7 +2053,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-transport-lightrail', type: 'line', 'source-layer': 'streets', @@ -2066,7 +2065,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'tunnel-transport-rail', type: 'line', 'source-layer': 'streets', @@ -2078,7 +2077,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-pedestrian-zone', type: 'fill', 'source-layer': 'street_polygons', @@ -2096,7 +2095,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'way-footway:outline', type: 'line', 'source-layer': 'streets', @@ -2119,7 +2118,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'way-steps:outline', type: 'line', 'source-layer': 'streets', @@ -2142,7 +2141,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'way-path:outline', type: 'line', 'source-layer': 'streets', @@ -2165,7 +2164,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'way-cycleway:outline', type: 'line', 'source-layer': 'streets', @@ -2188,7 +2187,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-track:outline', type: 'line', 'source-layer': 'streets', @@ -2217,7 +2216,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-pedestrian:outline', type: 'line', 'source-layer': 'streets', @@ -2247,7 +2246,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-service:outline', type: 'line', 'source-layer': 'streets', @@ -2282,7 +2281,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-livingstreet:outline', type: 'line', 'source-layer': 'streets', @@ -2317,7 +2316,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-residential:outline', type: 'line', 'source-layer': 'streets', @@ -2338,7 +2337,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-unclassified:outline', type: 'line', 'source-layer': 'streets', @@ -2373,7 +2372,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-tertiary-link:outline', type: 'line', 'source-layer': 'streets', @@ -2409,7 +2408,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-secondary-link:outline', type: 'line', 'source-layer': 'streets', @@ -2431,7 +2430,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-primary-link:outline', type: 'line', 'source-layer': 'streets', @@ -2453,7 +2452,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-trunk-link:outline', type: 'line', 'source-layer': 'streets', @@ -2475,7 +2474,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-motorway-link:outline', type: 'line', 'source-layer': 'streets', @@ -2497,7 +2496,7 @@ const style: StyleSpecification = { minzoom: 12 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-tertiary:outline', type: 'line', 'source-layer': 'streets', @@ -2533,7 +2532,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-secondary:outline', type: 'line', 'source-layer': 'streets', @@ -2569,7 +2568,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-primary:outline', type: 'line', 'source-layer': 'streets', @@ -2590,7 +2589,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-trunk:outline', type: 'line', 'source-layer': 'streets', @@ -2611,7 +2610,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-motorway:outline', type: 'line', 'source-layer': 'streets', @@ -2632,7 +2631,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'way-footway', type: 'line', 'source-layer': 'streets', @@ -2655,7 +2654,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'way-steps', type: 'line', 'source-layer': 'streets', @@ -2678,7 +2677,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'way-path', type: 'line', 'source-layer': 'streets', @@ -2701,7 +2700,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'way-cycleway', type: 'line', 'source-layer': 'streets', @@ -2724,7 +2723,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-track', type: 'line', 'source-layer': 'streets', @@ -2753,7 +2752,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-pedestrian', type: 'line', 'source-layer': 'streets', @@ -2784,7 +2783,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-service', type: 'line', 'source-layer': 'streets', @@ -2819,7 +2818,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-livingstreet', type: 'line', 'source-layer': 'streets', @@ -2840,7 +2839,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-residential', type: 'line', 'source-layer': 'streets', @@ -2861,7 +2860,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-unclassified', type: 'line', 'source-layer': 'streets', @@ -2896,7 +2895,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-track-bicycle', type: 'line', 'source-layer': 'streets', @@ -2916,7 +2915,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-pedestrian-bicycle', type: 'line', 'source-layer': 'streets', @@ -2949,7 +2948,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-service-bicycle', type: 'line', 'source-layer': 'streets', @@ -2970,7 +2969,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-livingstreet-bicycle', type: 'line', 'source-layer': 'streets', @@ -3003,7 +3002,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-residential-bicycle', type: 'line', 'source-layer': 'streets', @@ -3022,7 +3021,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-unclassified-bicycle', type: 'line', 'source-layer': 'streets', @@ -3055,7 +3054,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-tertiary-link', type: 'line', 'source-layer': 'streets', @@ -3091,7 +3090,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-secondary-link', type: 'line', 'source-layer': 'streets', @@ -3113,7 +3112,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-primary-link', type: 'line', 'source-layer': 'streets', @@ -3135,7 +3134,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-trunk-link', type: 'line', 'source-layer': 'streets', @@ -3157,7 +3156,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-motorway-link', type: 'line', 'source-layer': 'streets', @@ -3180,7 +3179,7 @@ const style: StyleSpecification = { minzoom: 12 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-tertiary', type: 'line', 'source-layer': 'streets', @@ -3216,7 +3215,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-secondary', type: 'line', 'source-layer': 'streets', @@ -3243,7 +3242,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-primary', type: 'line', 'source-layer': 'streets', @@ -3270,7 +3269,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-trunk', type: 'line', 'source-layer': 'streets', @@ -3292,7 +3291,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'street-motorway', type: 'line', 'source-layer': 'streets', @@ -3314,7 +3313,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'transport-rail:dashes', type: 'line', 'source-layer': 'streets', @@ -3333,7 +3332,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'transport-monorail', type: 'line', 'source-layer': 'streets', @@ -3359,7 +3358,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'transport-funicular', type: 'line', 'source-layer': 'streets', @@ -3385,7 +3384,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'transport-tram', type: 'line', 'source-layer': 'streets', @@ -3403,7 +3402,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'transport-narrowgauge', type: 'line', 'source-layer': 'streets', @@ -3421,7 +3420,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'transport-lightrail', type: 'line', 'source-layer': 'streets', @@ -3444,7 +3443,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'transport-rail', type: 'line', 'source-layer': 'streets', @@ -3462,7 +3461,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'transport-ferry', type: 'line', 'source-layer': 'ferries', @@ -3485,7 +3484,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-footway:bridge', type: 'line', 'source-layer': 'streets', @@ -3510,7 +3509,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-steps:bridge', type: 'line', 'source-layer': 'streets', @@ -3535,7 +3534,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-path:bridge', type: 'line', 'source-layer': 'streets', @@ -3560,7 +3559,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-cycleway:bridge', type: 'line', 'source-layer': 'streets', @@ -3585,7 +3584,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-track:bridge', type: 'line', 'source-layer': 'streets', @@ -3614,7 +3613,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-pedestrian:bridge', type: 'line', 'source-layer': 'streets', @@ -3644,7 +3643,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-service:bridge', type: 'line', 'source-layer': 'streets', @@ -3678,7 +3677,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-livingstreet:bridge', type: 'line', 'source-layer': 'streets', @@ -3708,7 +3707,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-residential:bridge', type: 'line', 'source-layer': 'streets', @@ -3724,7 +3723,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-unclassified:bridge', type: 'line', 'source-layer': 'streets', @@ -3754,7 +3753,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-tertiary-link:bridge', type: 'line', 'source-layer': 'streets', @@ -3784,7 +3783,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-secondary-link:bridge', type: 'line', 'source-layer': 'streets', @@ -3809,7 +3808,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-primary-link:bridge', type: 'line', 'source-layer': 'streets', @@ -3825,7 +3824,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-trunk-link:bridge', type: 'line', 'source-layer': 'streets', @@ -3850,7 +3849,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-motorway-link:bridge', type: 'line', 'source-layer': 'streets', @@ -3867,7 +3866,7 @@ const style: StyleSpecification = { minzoom: 12 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-tertiary:bridge', type: 'line', 'source-layer': 'streets', @@ -3897,7 +3896,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-secondary:bridge', type: 'line', 'source-layer': 'streets', @@ -3927,7 +3926,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-primary:bridge', type: 'line', 'source-layer': 'streets', @@ -3942,7 +3941,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-trunk:bridge', type: 'line', 'source-layer': 'streets', @@ -3958,7 +3957,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-motorway:bridge', type: 'line', 'source-layer': 'streets', @@ -3974,7 +3973,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-pedestrian-zone', type: 'fill', 'source-layer': 'street_polygons', @@ -3990,7 +3989,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-footway:outline', type: 'line', 'source-layer': 'streets', @@ -4013,7 +4012,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-steps:outline', type: 'line', 'source-layer': 'streets', @@ -4036,7 +4035,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-path:outline', type: 'line', 'source-layer': 'streets', @@ -4059,7 +4058,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-cycleway:outline', type: 'line', 'source-layer': 'streets', @@ -4082,7 +4081,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-track:outline', type: 'line', 'source-layer': 'streets', @@ -4108,7 +4107,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-pedestrian:outline', type: 'line', 'source-layer': 'streets', @@ -4135,7 +4134,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-service:outline', type: 'line', 'source-layer': 'streets', @@ -4166,7 +4165,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-livingstreet:outline', type: 'line', 'source-layer': 'streets', @@ -4193,7 +4192,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-residential:outline', type: 'line', 'source-layer': 'streets', @@ -4206,7 +4205,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-unclassified:outline', type: 'line', 'source-layer': 'streets', @@ -4233,7 +4232,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-tertiary-link:outline', type: 'line', 'source-layer': 'streets', @@ -4260,7 +4259,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-secondary-link:outline', type: 'line', 'source-layer': 'streets', @@ -4282,7 +4281,7 @@ const style: StyleSpecification = { }, { 'source-layer': 'streets', - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-primary-link:outline', type: 'line', filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], @@ -4294,7 +4293,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-trunk-link:outline', type: 'line', 'source-layer': 'streets', @@ -4307,7 +4306,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-motorway-link:outline', type: 'line', 'source-layer': 'streets', @@ -4320,7 +4319,7 @@ const style: StyleSpecification = { minzoom: 12 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-tertiary:outline', type: 'line', 'source-layer': 'streets', @@ -4347,7 +4346,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-secondary:outline', type: 'line', 'source-layer': 'streets', @@ -4374,7 +4373,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-primary:outline', type: 'line', 'source-layer': 'streets', @@ -4386,7 +4385,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-trunk:outline', type: 'line', 'source-layer': 'streets', @@ -4398,7 +4397,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-motorway:outline', type: 'line', 'source-layer': 'streets', @@ -4410,7 +4409,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-footway', type: 'line', 'source-layer': 'streets', @@ -4433,7 +4432,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-steps', type: 'line', 'source-layer': 'streets', @@ -4456,7 +4455,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-path', type: 'line', 'source-layer': 'streets', @@ -4479,7 +4478,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-way-cycleway', type: 'line', 'source-layer': 'streets', @@ -4502,7 +4501,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-track', type: 'line', 'source-layer': 'streets', @@ -4528,7 +4527,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-pedestrian', type: 'line', 'source-layer': 'streets', @@ -4555,7 +4554,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-service', type: 'line', 'source-layer': 'streets', @@ -4586,7 +4585,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-livingstreet', type: 'line', 'source-layer': 'streets', @@ -4613,7 +4612,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-residential', type: 'line', 'source-layer': 'streets', @@ -4626,7 +4625,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-unclassified', type: 'line', 'source-layer': 'streets', @@ -4653,7 +4652,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-track-bicycle', type: 'line', 'source-layer': 'streets', @@ -4669,7 +4668,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-pedestrian-bicycle', type: 'line', 'source-layer': 'streets', @@ -4701,7 +4700,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-service-bicycle', type: 'line', 'source-layer': 'streets', @@ -4718,7 +4717,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-livingstreet-bicycle', type: 'line', 'source-layer': 'streets', @@ -4750,7 +4749,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-residential-bicycle', type: 'line', 'source-layer': 'streets', @@ -4768,7 +4767,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-unclassified-bicycle', type: 'line', 'source-layer': 'streets', @@ -4800,7 +4799,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-tertiary-link', type: 'line', 'source-layer': 'streets', @@ -4827,7 +4826,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-secondary-link', type: 'line', 'source-layer': 'streets', @@ -4848,7 +4847,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-primary-link', type: 'line', 'source-layer': 'streets', @@ -4861,7 +4860,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-trunk-link', type: 'line', 'source-layer': 'streets', @@ -4874,7 +4873,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-motorway-link', type: 'line', 'source-layer': 'streets', @@ -4888,7 +4887,7 @@ const style: StyleSpecification = { minzoom: 12 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-tertiary', type: 'line', 'source-layer': 'streets', @@ -4915,7 +4914,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-secondary', type: 'line', 'source-layer': 'streets', @@ -4933,7 +4932,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-primary', type: 'line', 'source-layer': 'streets', @@ -4951,7 +4950,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-trunk', type: 'line', 'source-layer': 'streets', @@ -4964,7 +4963,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-street-motorway', type: 'line', 'source-layer': 'streets', @@ -4977,7 +4976,7 @@ const style: StyleSpecification = { layout: street_layout }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-monorail:outline', type: 'line', 'source-layer': 'streets', @@ -4989,7 +4988,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-funicular:outline', type: 'line', 'source-layer': 'streets', @@ -5001,7 +5000,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-tram:outline', type: 'line', 'source-layer': 'streets', @@ -5013,7 +5012,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-narrowgauge:outline', type: 'line', 'source-layer': 'streets', @@ -5025,7 +5024,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-lightrail:outline', type: 'line', 'source-layer': 'streets', @@ -5037,7 +5036,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-rail:outline', type: 'line', 'source-layer': 'streets', @@ -5049,7 +5048,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-monorail', type: 'line', 'source-layer': 'streets', @@ -5061,7 +5060,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-funicular', type: 'line', 'source-layer': 'streets', @@ -5073,7 +5072,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-tram', type: 'line', 'source-layer': 'streets', @@ -5085,7 +5084,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-narrowgauge', type: 'line', 'source-layer': 'streets', @@ -5097,7 +5096,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-lightrail', type: 'line', 'source-layer': 'streets', @@ -5109,7 +5108,7 @@ const style: StyleSpecification = { } }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'bridge-transport-rail', type: 'line', 'source-layer': 'streets', @@ -5123,7 +5122,7 @@ const style: StyleSpecification = { ...buildAdmin([0, 1, 2, 3]), { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-street-pedestrian', type: 'symbol', 'source-layer': 'street_labels', @@ -5149,7 +5148,7 @@ const style: StyleSpecification = { minzoom: 14 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-street-livingstreet', type: 'symbol', 'source-layer': 'street_labels', @@ -5175,7 +5174,7 @@ const style: StyleSpecification = { minzoom: 14 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-street-residential', type: 'symbol', 'source-layer': 'street_labels', @@ -5201,7 +5200,7 @@ const style: StyleSpecification = { minzoom: 15 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-street-unclassified', type: 'symbol', 'source-layer': 'street_labels', @@ -5226,7 +5225,7 @@ const style: StyleSpecification = { minzoom: 14 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-street-tertiary', type: 'symbol', 'source-layer': 'street_labels', @@ -5252,7 +5251,7 @@ const style: StyleSpecification = { minzoom: 14 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-street-secondary', type: 'symbol', 'source-layer': 'street_labels', @@ -5277,7 +5276,7 @@ const style: StyleSpecification = { minzoom: 14 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-street-primary', type: 'symbol', 'source-layer': 'street_labels', @@ -5302,7 +5301,7 @@ const style: StyleSpecification = { minzoom: 14 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-street-trunk', type: 'symbol', 'source-layer': 'street_labels', @@ -5327,7 +5326,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-neighbourhood', type: 'symbol', 'source-layer': 'place_labels', @@ -5347,7 +5346,7 @@ const style: StyleSpecification = { minzoom: 14 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-quarter', type: 'symbol', 'source-layer': 'place_labels', @@ -5367,7 +5366,7 @@ const style: StyleSpecification = { minzoom: 14 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-suburb', type: 'symbol', 'source-layer': 'place_labels', @@ -5390,7 +5389,7 @@ const style: StyleSpecification = { minzoom: 11 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-hamlet', type: 'symbol', 'source-layer': 'place_labels', @@ -5414,7 +5413,7 @@ const style: StyleSpecification = { minzoom: 13 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-village', type: 'symbol', 'source-layer': 'place_labels', @@ -5438,7 +5437,7 @@ const style: StyleSpecification = { minzoom: 11 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-town-large', type: 'symbol', 'source-layer': 'place_labels', @@ -5461,7 +5460,7 @@ const style: StyleSpecification = { minzoom: 8 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-town', type: 'symbol', 'source-layer': 'place_labels', @@ -5485,7 +5484,7 @@ const style: StyleSpecification = { }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-city', type: 'symbol', 'source-layer': 'place_labels', @@ -5509,7 +5508,7 @@ const style: StyleSpecification = { maxzoom: 11 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-statecapital', type: 'symbol', 'source-layer': 'place_labels', @@ -5537,7 +5536,7 @@ const style: StyleSpecification = { maxzoom: 12 }, { - source: 'versatiles-shortbread', + source: 'versatiles-osm', id: 'label-place-capital', type: 'symbol', 'source-layer': 'place_labels', diff --git a/components/src/MapTooltip/MapTooltip.stories.svelte b/components/src/MapTooltip/MapTooltip.stories.svelte index 42c4be0d..973880a9 100644 --- a/components/src/MapTooltip/MapTooltip.stories.svelte +++ b/components/src/MapTooltip/MapTooltip.stories.svelte @@ -1,9 +1,86 @@ - + + + +
+ + + { + hovered = ev.features?.[0]; + mouseCoords = ev.lngLat; + }} + onmouseleave={() => (hovered = undefined)} + paint={{ + 'fill-color': [ + 'step', + ['get', 'coverage_2025'], + 'white', + 1, + 'lightgray', + 1.3, + 'lightgreen' + ] + }} + > + + {#if hovered} + +
{Object.entries(hovered.properties)
+								.map(([key, val]) => `${key}: ${val}`)
+								.join('\n')}
+
+ {/if} + +
+
+
+
+ + diff --git a/components/src/MapTooltip/MapTooltip.svelte b/components/src/MapTooltip/MapTooltip.svelte index 7035ee6b..d6cd2f6a 100644 --- a/components/src/MapTooltip/MapTooltip.svelte +++ b/components/src/MapTooltip/MapTooltip.svelte @@ -1,19 +1,25 @@ -
+
{@render children?.()}
+ + diff --git a/components/src/MapVectorLayer/MapVectorLayer.svelte b/components/src/MapVectorLayer/MapVectorLayer.svelte index 4c22d842..012d72af 100644 --- a/components/src/MapVectorLayer/MapVectorLayer.svelte +++ b/components/src/MapVectorLayer/MapVectorLayer.svelte @@ -4,10 +4,13 @@ FillLayoutProps, FillPaintProps, LineLayoutProps, - LinePaintProps + LinePaintProps, + MapGeoJSONFeature, + MapLayerMouseEvent } from 'maplibre-gl'; import { getMapContext } from '../Map/context.svelte.ts'; import { onDestroy } from 'svelte'; + import { resetLayerEventListener } from '../Map/utils'; interface MapVectorLayerProps { id: string; @@ -20,6 +23,11 @@ maxZoom?: number; paint?: LinePaintProps | FillPaintProps; layout?: LineLayoutProps | FillLayoutProps; + hovered?: MapGeoJSONFeature | undefined; + + onclick: (e: MapLayerMouseEvent) => any; + onmousemove: (e: MapLayerMouseEvent) => any; + onmouseleave: (e: MapLayerMouseEvent) => any; } const { id, @@ -30,12 +38,18 @@ type, paint, layout, + hovered = $bindable(), minZoom = 0, - maxZoom = 24 + maxZoom = 24, + onclick, + onmousemove, + onmouseleave }: MapVectorLayerProps = $props(); const { map, styleLoaded } = $derived(getMapContext()); let beforeId: string | undefined = $state(); + let prevSelected: string | number | undefined = $state(); + let prevHovered: string | number | undefined = $state(); const layerSpec = { id, @@ -56,6 +70,7 @@ })?.id; } }); + $effect(() => { if (map && styleLoaded && beforeId) { console.log(`Rendering layer ${id}`); @@ -63,6 +78,35 @@ } }); + $effect(() => resetLayerEventListener(map, 'click', id, onclick)); + $effect(() => resetLayerEventListener(map, 'mousemove', id, onmousemove)); + $effect(() => resetLayerEventListener(map, 'mouseleave', id, onmouseleave)); + + $effect(() => { + if (styleLoaded) { + if (hovered) { + if (prevHovered) { + map?.setFeatureState( + { source: sourceId, sourceLayer: sourceLayer, id: prevHovered }, + { hovered: false } + ); + } + map?.setFeatureState( + { source: sourceId, sourceLayer: sourceLayer, id: hovered.id }, + { hovered: true } + ); + prevHovered = hovered.id; + } else { + if (prevHovered) { + map?.setFeatureState( + { source: sourceId, sourceLayer: sourceLayer, id: prevHovered }, + { hovered: false } + ); + } + } + } + }); + onDestroy(() => { if (map && map.getLayer(id)) map.removeLayer(id); }); From f8bf90ebe0fc0073f35bf06e2b749846dd928303 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Sun, 18 May 2025 22:17:15 +0200 Subject: [PATCH 24/76] Tweak formatting --- components/src/MapTooltip/MapTooltip.stories.svelte | 7 ++++--- .../src/MapVectorLayer/MapVectorLayer.stories.svelte | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/components/src/MapTooltip/MapTooltip.stories.svelte b/components/src/MapTooltip/MapTooltip.stories.svelte index 973880a9..846b32e4 100644 --- a/components/src/MapTooltip/MapTooltip.stories.svelte +++ b/components/src/MapTooltip/MapTooltip.stories.svelte @@ -13,8 +13,6 @@ component: MapTooltip }); - const url = - 'https://static.datenhub.net/data/p108_e_auto_check/ev_infra_merged.versatiles?tiles/{z}/{x}/{y}'; let hovered = $state() as MapGeoJSONFeature | undefined; let mouseCoords = $state([0, 0]) as LngLatLike; @@ -23,7 +21,10 @@
- +
- + Date: Sun, 18 May 2025 23:31:12 +0200 Subject: [PATCH 25/76] Tweak formatting --- components/src/MapTooltip/MapTooltip.svelte | 29 ++++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/components/src/MapTooltip/MapTooltip.svelte b/components/src/MapTooltip/MapTooltip.svelte index d6cd2f6a..742ba1c8 100644 --- a/components/src/MapTooltip/MapTooltip.svelte +++ b/components/src/MapTooltip/MapTooltip.svelte @@ -5,22 +5,31 @@ interface MapTooltipProps { position: LngLatLike | undefined; - offset?: number; - maxWidth?: string; + children?: Snippet; + maxWidth?: number; showCloseButton?: boolean; + /** + * Close the tooltip if the user clicks anywhere on the map + */ closeOnClick?: boolean; + /** + * y axis offset (px) + */ + offset?: number; + /** + * Toggle mouse events on the tooltip element. Should be false if the tooltip appears on hover to avoid flickering. + */ mouseEvents?: boolean; - children?: Snippet; } let { + position, + children, offset = 20, - closeOnClick = true, + maxWidth = 360, showCloseButton = false, - mouseEvents = false, - maxWidth = '360px', - position, - children + closeOnClick = true, + mouseEvents = false }: MapTooltipProps = $props(); const { map } = $derived(getMapContext()); @@ -28,8 +37,8 @@ let tooltip = new Popup({ closeButton: showCloseButton, closeOnClick: closeOnClick, - offset: offset, - maxWidth: maxWidth + maxWidth: `${maxWidth}px`, + offset: offset }); let el: Node | undefined = $state(); From 4d26019280bd918bc18745b4eed8c28cfc1a4c1e Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 19 May 2025 09:27:22 +0200 Subject: [PATCH 26/76] Iterate attribution control typography --- .../AttributionControl.stories.svelte | 20 ++++++++- .../AttributionControl.svelte | 41 ++++--------------- 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/components/src/AttributionControl/AttributionControl.stories.svelte b/components/src/AttributionControl/AttributionControl.stories.svelte index 73329e5d..27f0196b 100644 --- a/components/src/AttributionControl/AttributionControl.stories.svelte +++ b/components/src/AttributionControl/AttributionControl.stories.svelte @@ -1,9 +1,27 @@ + + + +
+ + + +
+
+
+ + diff --git a/components/src/AttributionControl/AttributionControl.svelte b/components/src/AttributionControl/AttributionControl.svelte index a4773fd0..23c08def 100644 --- a/components/src/AttributionControl/AttributionControl.svelte +++ b/components/src/AttributionControl/AttributionControl.svelte @@ -2,60 +2,35 @@ import { type ControlPosition, AttributionControl } from 'maplibre-gl'; import MapControl from '../MapControl/MapControl.svelte'; interface AttributionControlProps { - compact?: boolean; position?: ControlPosition; + customAttribution?: string; } - const { compact = false, position = 'bottom-right' }: AttributionControlProps = $props(); + const { position = 'bottom-right', customAttribution }: AttributionControlProps = $props(); - + From 2ca40bcee662a96140bc8d7be0a37af95e9f34c9 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 19 May 2025 09:42:36 +0200 Subject: [PATCH 27/76] Add geocoder story --- .../GeocoderControl.stories.svelte | 19 +++++++++++++++++++ .../GeocoderControl/GeocoderControl.svelte | 11 ++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/components/src/GeocoderControl/GeocoderControl.stories.svelte b/components/src/GeocoderControl/GeocoderControl.stories.svelte index 1f21b35d..4ccf422e 100644 --- a/components/src/GeocoderControl/GeocoderControl.stories.svelte +++ b/components/src/GeocoderControl/GeocoderControl.stories.svelte @@ -1,9 +1,28 @@ + + + +
+ + + +
+
+
+ + diff --git a/components/src/GeocoderControl/GeocoderControl.svelte b/components/src/GeocoderControl/GeocoderControl.svelte index 5a2f728b..da59d46d 100644 --- a/components/src/GeocoderControl/GeocoderControl.svelte +++ b/components/src/GeocoderControl/GeocoderControl.svelte @@ -10,8 +10,17 @@ interface GeocoderControlProps { key: string; service: 'maptiler'; - limit?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; + /** + * Maximum number of suggestions to display + */ + limit?: number; + /** + * Limit search to one or more countries (tends to improve results) + */ countries?: Country[] | Country; + /** + * Limit search to one or more languages. The UI is localised to the first language specified if [available](https://github.com/maplibre/maplibre-gl-geocoder/blob/main/lib/localization.ts). + */ languages?: Language[] | Language; } From 1b620397437244eef77c9f969054aaeee9e4eb80 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 19 May 2025 09:45:07 +0200 Subject: [PATCH 28/76] Tweak wording --- components/src/GeocoderControl/GeocoderControl.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/src/GeocoderControl/GeocoderControl.svelte b/components/src/GeocoderControl/GeocoderControl.svelte index da59d46d..bc968564 100644 --- a/components/src/GeocoderControl/GeocoderControl.svelte +++ b/components/src/GeocoderControl/GeocoderControl.svelte @@ -15,7 +15,7 @@ */ limit?: number; /** - * Limit search to one or more countries (tends to improve results) + * Limit search to one or more countries */ countries?: Country[] | Country; /** From 49a5ce0bfb3c81b166944e023aa45b2bd9e92d00 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 19 May 2025 11:21:18 +0200 Subject: [PATCH 29/76] Never toggle attribution --- .../src/AttributionControl/AttributionControl.svelte | 12 ++++++++++-- components/src/Map/Map.svelte | 5 ----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/components/src/AttributionControl/AttributionControl.svelte b/components/src/AttributionControl/AttributionControl.svelte index 23c08def..95071486 100644 --- a/components/src/AttributionControl/AttributionControl.svelte +++ b/components/src/AttributionControl/AttributionControl.svelte @@ -8,7 +8,13 @@ const { position = 'bottom-right', customAttribution }: AttributionControlProps = $props(); - + diff --git a/components/src/MapStyle/MapStyle.ts b/components/src/MapStyle/MapStyle.ts deleted file mode 100644 index 34dcbd43..00000000 --- a/components/src/MapStyle/MapStyle.ts +++ /dev/null @@ -1,5565 +0,0 @@ -import type { StyleSpecification } from "maplibre-gl"; -import tokens from "./tokens" -import buildAdmin from "./Admin"; - -const street_layout = { - 'line-join': 'round', - 'line-cap': 'butt' -}; - -const motorway = { - line_color: tokens.street_primary, - line_width: { - stops: [ - [6, 1], - [7, 1.5], - [11, 2], - [14, 12] - ] - }, - line_opacity: { - stops: [ - [6, 0], - [7, 1] - ] - } -}; - -const motorway_outline = { - line_color: tokens.street_primary_outline, - line_width: { - stops: [ - [10, 0], - [11, 2], - [14, 14] - ] - } -}; - -const motorway_link = { - line_width: { - stops: [ - [6, 0], - [7, 1], - [12, 2], - [14, 6] - ] - } -}; - -const motorway_link_outline = { - line_width: { - stops: [ - [6, 0], - [7, 2], - [12, 3], - [14, 8] - ] - } -}; - -const street_primary = { - line_color: tokens.street_primary, - line_width: { - stops: [ - [8, 0], - [10, 1], - [12, 2], - [14, 3], - [16, 10], - [18, 34], - [19, 70], - [20, 140] - ] - }, - line_opacity: { - stops: [ - [8, 0], - [9, 1] - ] - } -}; -const street_primary_outline = { - line_color: tokens.street_primary_outline, - line_width: { - stops: [ - [11, 0], - [14, 5], - [16, 12], - [18, 36], - [19, 74], - [20, 144] - ] - }, - line_opacity: { - stops: [ - [8, 0], - [9, 1] - ] - } -}; - -const street_secondary = { - line_width: { - stops: [ - [11, 1], - [14, 4], - [16, 6], - [18, 28], - [19, 64], - [20, 130] - ] - } -}; -const street_secondary_outline = { - line_width: { - stops: [ - [12, 2], - [14, 5], - [16, 7], - [18, 14], - [20, 40] - ] - } -}; - -const street_residential = { - line_color: tokens.street_tertiary, - line_width: { - stops: [ - [13, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - line_opacity: { - stops: [ - [12, 0], - [13, 1] - ] - } -}; -const street_residential_outline = { - line_color: tokens.street_tertiary_outline, - line_width: { - stops: [ - [14, 0], - [15, 4] - ] - }, - line_opacity: { - stops: [ - [12, 0], - [13, 1] - ] - } -}; - -const rail = { - line_color: '#d3d3d3', - line_dasharray: [2, 2], - line_width: { - stops: [ - [8, 1], - [13, 1], - [20, 2] - ] - }, - line_opacity: { - stops: [ - [12, 0], - [13, 1] - ] - } -}; -const rail_outline = { - line_color: tokens.background, - line_width: { - stops: [ - [13, 2], - [20, 4] - ] - }, - line_opacity: { - stops: [ - [12, 0], - [13, 1] - ] - } -}; -const rail_overlay = { - line_width: { - stops: [ - [8, 1], - [13, 6], - [20, 12] - ] - }, - line_dasharray: [0.125, 6] -}; - -const style: StyleSpecification = { - version: 8, - name: 'swr-datalab-light', - metadata: { - license: 'https://creativecommons.org/publicdomain/zero/1.0/' - }, - glyphs: 'https://static.datenhub.net/maps/fonts/{fontstack}/{range}.pbf', - sources: { - 'versatiles-osm': { - attribution: '© OpenStreetMap contributors', - tiles: ['https://tiles.versatiles.org/tiles/osm/{z}/{x}/{y}'], - type: 'vector', - scheme: 'xyz', - bounds: [-180, -85.0511287798066, 180, 85.0511287798066], - minzoom: 0, - maxzoom: 14 - } - }, - layers: [ - { - id: 'background', - type: 'background', - paint: { - 'background-color': tokens.background - } - }, - { - source: 'versatiles-osm', - id: 'water-ocean', - type: 'fill', - 'source-layer': 'ocean', - paint: { - 'fill-color': 'hsl(218, 58%, 87%)' - } - }, - { - source: 'versatiles-osm', - id: 'land-glacier', - type: 'fill', - 'source-layer': 'water_polygons', - filter: ['all', ['==', 'kind', 'glacier']], - paint: { - 'fill-color': 'hsl(0,0%,100%)' - } - }, - { - source: 'versatiles-osm', - id: 'land-industrial', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'industrial', 'quarry', 'railway']], - paint: { - 'fill-color': tokens.background, - 'fill-opacity': ["interpolate", ["linear"], ["zoom"], 10, 0, 11, 1] - } - }, - { - source: 'versatiles-osm', - id: 'land-agriculture', - type: 'fill', - 'source-layer': 'land', - filter: [ - 'all', - [ - 'in', - 'kind', - 'brownfield', - 'farmland', - 'farmyard', - 'greenfield', - 'greenhouse_horticulture', - 'orchard', - 'plant_nursery', - 'vineyard' - ] - ], - paint: { - 'fill-color': tokens.grass, - 'fill-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'land-waste', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'landfill']], - paint: { - 'fill-color': 'hsl(50,0%,80%)', - 'fill-opacity': { - stops: [ - [10, 0], - [11, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'land-park', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'park', 'village_green', 'recreation_ground']], - paint: { - 'fill-color': tokens.grass, - 'fill-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'land-garden', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'allotments', 'garden']], - paint: { - 'fill-color': tokens.grass, - 'fill-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'land-burial', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'cemetery', 'grave_yard']], - paint: { - 'fill-color': tokens.grass, - 'fill-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'land-leisure', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'miniature_golf', 'playground', 'golf_course']], - paint: { - 'fill-color': tokens.grass_dark - } - }, - { - source: 'versatiles-osm', - id: 'land-rock', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'bare_rock', 'scree', 'shingle']], - paint: { - 'fill-color': 'hsl(192,0%,89%)' - } - }, - { - source: 'versatiles-osm', - id: 'land-forest', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'forest']], - paint: { - 'fill-color': tokens.grass, - 'fill-opacity': { - stops: [ - [12, 0], - [13, 0.25] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'land-grass', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'grass', 'grassland', 'meadow', 'wet_meadow']], - paint: { - 'fill-color': tokens.grass, - 'fill-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'land-vegetation', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'heath', 'scrub']], - paint: { - 'fill-color': tokens.grass, - 'fill-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'land-sand', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'beach', 'sand']], - paint: { - 'fill-color': 'hsl(60,0%,95%)' - } - }, - { - source: 'versatiles-osm', - id: 'land-wetland', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'bog', 'marsh', 'string_bog', 'swamp']], - paint: { - 'fill-color': tokens.marsh, - 'fill-opacity': { - stops: [ - [10, 0], - [11, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'water-river', - type: 'line', - 'source-layer': 'water_lines', - filter: ['all', ['in', 'kind', 'river'], ['!=', 'tunnel', true]], - paint: { - 'line-color': tokens.water, - 'line-width': { - stops: [ - [8, 0], - [10, 1], - [12, 2], - [15, 4], - [17, 9], - [18, 20], - [20, 60] - ] - } - }, - layout: { - 'line-cap': 'round', - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'water-canal', - type: 'line', - 'source-layer': 'water_lines', - filter: ['all', ['in', 'kind', 'canal'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], - paint: { - 'line-color': tokens.water, - 'line-width': { - stops: [ - [9, 0], - [10, 2], - [15, 3], - [17, 8], - [18, 17], - [20, 50] - ] - } - }, - layout: { - 'line-cap': 'round', - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'water-stream', - type: 'line', - 'source-layer': 'water_lines', - filter: ['all', ['in', 'kind', 'stream'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], - paint: { - 'line-color': tokens.water, - 'line-width': { - stops: [ - [13, 0], - [14, 1], - [15, 2], - [17, 6], - [18, 12], - [20, 30] - ] - } - }, - layout: { - 'line-cap': 'round', - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'water-ditch', - type: 'line', - 'source-layer': 'water_lines', - filter: ['all', ['in', 'kind', 'ditch'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], - paint: { - 'line-color': tokens.water_light, - 'line-width': { - stops: [ - [14, 0], - [15, 1], - [17, 4], - [18, 8], - [20, 20] - ] - } - }, - layout: { - 'line-cap': 'round', - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'water-area', - type: 'fill', - 'source-layer': 'water_polygons', - filter: ['==', 'kind', 'water'], - paint: { - 'fill-color': tokens.water_light, - 'fill-opacity': { - stops: [ - [4, 0], - [6, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'water-area-river', - type: 'fill', - 'source-layer': 'water_polygons', - filter: ['==', 'kind', 'river'], - paint: { - 'fill-color': tokens.water, - 'fill-opacity': { - stops: [ - [4, 0], - [6, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'water-area-small', - type: 'fill', - 'source-layer': 'water_polygons', - filter: ['in', 'kind', 'reservoir', 'basin', 'dock'], - paint: { - 'fill-color': tokens.water, - 'fill-opacity': { - stops: [ - [4, 0], - [6, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'water-dam-area', - type: 'fill', - 'source-layer': 'dam_polygons', - filter: ['==', 'kind', 'dam'], - paint: { - 'fill-color': 'hsl(33,0%,95%)', - 'fill-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'water-dam', - type: 'line', - 'source-layer': 'dam_lines', - filter: ['==', 'kind', 'dam'], - paint: { - 'line-color': 'hsl(205,0%,85%)' - }, - layout: { - 'line-cap': 'round', - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'water-pier-area', - type: 'fill', - 'source-layer': 'pier_polygons', - filter: ['in', 'kind', 'pier', 'breakwater', 'groyne'], - paint: { - 'fill-color': tokens.street_tertiary, - 'fill-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'water-pier', - type: 'line', - 'source-layer': 'pier_lines', - filter: ['in', 'kind', 'pier', 'breakwater', 'groyne'], - paint: { - 'line-color': tokens.street_tertiary, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-cap': 'round', - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'site-dangerarea', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'danger_area'], - paint: { - 'fill-color': 'hsl(0,0%,50%)', - 'fill-outline-color': 'hsl(0,0%,50%)', - 'fill-opacity': 0.3 - } - }, - { - source: 'versatiles-osm', - id: 'site-university', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'university'], - paint: { - 'fill-color': 'hsl(60,0%,75%)', - 'fill-opacity': 0.1 - } - }, - { - source: 'versatiles-osm', - id: 'site-college', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'college'], - paint: { - 'fill-color': 'hsl(60,0%,75%)', - 'fill-opacity': 0.1 - } - }, - { - source: 'versatiles-osm', - id: 'site-school', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'school'], - paint: { - 'fill-color': 'hsl(60,0%,75%)', - 'fill-opacity': 0.1 - } - }, - { - source: 'versatiles-osm', - id: 'site-hospital', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'hospital'], - paint: { - 'fill-color': 'hsl(0,0%,70%)', - 'fill-opacity': 0.1 - } - }, - { - source: 'versatiles-osm', - id: 'site-prison', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'prison'], - paint: { - 'fill-color': 'hsl(305,0%,97%)', - 'fill-opacity': 0.1 - } - }, - { - source: 'versatiles-osm', - id: 'site-parking', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'parking'], - paint: { - 'fill-color': 'hsl(24,0%,95%)' - } - }, - { - source: 'versatiles-osm', - id: 'site-bicycleparking', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'bicycle_parking'], - paint: { - 'fill-color': 'hsl(24,0%,95%)' - } - }, - { - source: 'versatiles-osm', - id: 'site-construction', - type: 'fill', - 'source-layer': 'sites', - filter: ['in', 'kind', 'construction'], - paint: { - 'fill-color': 'hsl(0,0%,66%)', - 'fill-opacity': 0.1 - } - }, - { - source: 'versatiles-osm', - id: 'airport-area', - type: 'fill', - 'source-layer': 'street_polygons', - filter: ['in', 'kind', 'runway', 'taxiway'], - paint: { - 'fill-color': 'hsl(0,0%,100%)', - 'fill-opacity': 0.5 - } - }, - { - source: 'versatiles-osm', - id: 'airport-taxiway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['==', 'kind', 'taxiway'], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [13, 0], - [14, 2], - [15, 10], - [16, 14], - [18, 20], - [20, 40] - ] - } - }, - layout: { - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'airport-runway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['==', 'kind', 'runway'], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [11, 0], - [12, 6], - [13, 9], - [14, 16], - [15, 24], - [16, 40], - [17, 100], - [18, 160], - [20, 300] - ] - } - }, - layout: { - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'airport-taxiway', - type: 'line', - 'source-layer': 'streets', - filter: ['==', 'kind', 'taxiway'], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [13, 0], - [14, 1], - [15, 8], - [16, 12], - [18, 18], - [20, 36] - ] - }, - 'line-opacity': { - stops: [ - [13, 0], - [14, 1] - ] - } - }, - layout: { - 'line-join': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'airport-runway', - type: 'line', - 'source-layer': 'streets', - filter: ['==', 'kind', 'runway'], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [11, 0], - [12, 5], - [13, 8], - [14, 14], - [15, 22], - [16, 38], - [17, 98], - [18, 158], - [20, 298] - ] - }, - 'line-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - }, - layout: { - 'line-join': 'round' - } - }, - - { - source: 'versatiles-osm', - id: 'building', - type: 'fill', - 'source-layer': 'buildings', - paint: { - 'fill-color': 'hsl(240, 4%, 90%)', - 'fill-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-pedestrian-zone', - type: 'fill', - 'source-layer': 'street_polygons', - filter: ['all', ['==', 'tunnel', true], ['==', 'kind', 'pedestrian']], - paint: { - 'fill-color': 'rgb(247,247,247)', - 'fill-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-way-footway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'footway']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'hsl(0,0%,86%)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'tunnel-way-steps:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'steps']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'hsl(0,0%,86%)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'tunnel-way-path:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'path']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'hsl(0,0%,86%)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'tunnel-way-cycleway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'cycleway']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'hsl(0,0%,87%)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-track:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'track'], ['==', 'tunnel', true]], - paint: { - 'line-color': 'rgb(222,222,222)', - 'line-width': { - stops: [ - [14, 2], - [16, 4], - [18, 18], - [19, 48], - [20, 96] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-pedestrian:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'tunnel', true]], - paint: { - 'line-color': 'rgb(222,222,222)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-service:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['==', 'tunnel', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'rgb(222,222,222)', - 'line-width': { - stops: [ - [14, 2], - [16, 4], - [18, 18], - [19, 48], - [20, 96] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-livingstreet:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'living_street'], ['==', 'tunnel', true]], - paint: { - 'line-color': 'rgb(222,222,222)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-residential:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'residential'], ['==', 'tunnel', true]], - paint: { - 'line-color': street_residential_outline.line_color, - 'line-width': street_residential_outline.line_width, - 'line-opacity': street_residential_outline.line_opacity - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-unclassified:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'tunnel', true]], - paint: { - 'line-color': 'rgb(222,222,222)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-tertiary-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], - paint: { - 'line-color': 'rgb(222,222,222)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-secondary-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], - paint: { - 'line-color': 'rgb(180,180,180)', - 'line-dasharray': [1, 0.3], - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 7], - [18, 14], - [20, 40] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-primary-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['==', 'link', true]], - paint: { - 'line-color': street_primary_outline.line_color, - 'line-dasharray': [1, 0.3], - 'line-width': street_primary_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-trunk-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-motorway-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_link_outline.line_width, - 'line-dasharray': [1, 0.3] - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - }, - minzoom: 12 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-tertiary:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], - paint: { - 'line-color': 'rgb(222,222,222)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-secondary:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], - paint: { - 'line-color': 'rgb(180,180,180)', - 'line-dasharray': [1, 0.3], - 'line-width': { - stops: [ - [11, 2], - [14, 5], - [16, 8], - [18, 30], - [19, 68], - [20, 138] - ] - }, - 'line-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-primary:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], - paint: { - 'line-color': tokens.street_primary_outline, - 'line-dasharray': [1, 0.3], - 'line-width': { - stops: [ - [8, 0], - [9, 1], - [10, 4], - [14, 6], - [16, 12], - [18, 36], - [19, 74], - [20, 144] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-trunk:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], - paint: { - 'line-color': motorway_outline.line_color, - 'line-dasharray': [1, 0.3], - 'line-width': motorway_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-motorway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_outline.line_width, - 'line-dasharray': [1, 0.3] - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-way-footway', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'footway']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'hsl(0,0%,94%)', - 'line-dasharray': [1, 0.2] - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'tunnel-way-steps', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'steps']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'hsl(0,0%,94%)', - 'line-dasharray': [1, 0.2] - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'tunnel-way-path', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'path']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'hsl(0,0%,94%)', - 'line-dasharray': [1, 0.2] - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'tunnel-way-cycleway', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'cycleway']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'hsl(0,0%,95%)', - 'line-dasharray': [1, 0.2] - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-track', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'track'], ['==', 'tunnel', true]], - paint: { - 'line-color': 'rgb(247,247,247)', - 'line-width': { - stops: [ - [14, 1], - [16, 3], - [18, 16], - [19, 44], - [20, 88] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-pedestrian', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'tunnel', true]], - paint: { - 'line-color': 'rgb(247,247,247)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-service', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['==', 'tunnel', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'rgb(247,247,247)', - 'line-width': { - stops: [ - [14, 1], - [16, 3], - [18, 16], - [19, 44], - [20, 88] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-livingstreet', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'living_street'], ['==', 'tunnel', true]], - paint: { - 'line-color': 'rgb(247,247,247)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-residential', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'residential'], ['==', 'tunnel', true]], - paint: { - 'line-color': street_residential.line_color, - 'line-width': street_residential.line_width, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-unclassified', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'tunnel', true]], - paint: { - 'line-color': 'rgb(247,247,247)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-track-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'track'], - ['==', 'bicycle', 'designated'], - ['==', 'tunnel', true] - ], - paint: { - 'line-color': 'rgb(247,247,247)' - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-pedestrian-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'pedestrian'], - ['==', 'bicycle', 'designated'], - ['==', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-service-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['==', 'bicycle', 'designated'], - ['==', 'tunnel', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'rgb(247,247,247)' - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-livingstreet-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'living_street'], - ['==', 'bicycle', 'designated'], - ['==', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-residential-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'residential'], - ['==', 'bicycle', 'designated'], - ['==', 'tunnel', true] - ], - paint: { - 'line-color': street_residential.line_color, - 'line-width': street_residential.line_width, - 'line-opacity': street_residential.line_opacity - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-unclassified-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'unclassified'], - ['==', 'bicycle', 'designated'], - ['==', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-tertiary-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], - paint: { - 'line-color': 'rgb(247,247,247)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-secondary-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], - paint: { - 'line-color': tokens.street_secondary, - 'line-width': street_secondary.line_width - }, - layout: street_layout, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-primary-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['==', 'link', true]], - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width - }, - layout: street_layout, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-trunk-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway_link.line_width - }, - layout: street_layout, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-motorway-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway_link.line_width, - 'line-opacity': motorway.line_opacity - }, - layout: street_layout, - minzoom: 12 - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-tertiary', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], - paint: { - 'line-color': 'rgb(247,247,247)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-secondary', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], - paint: { - 'line-color': 'rgb(217,217,217)', - 'line-width': { - stops: [ - [11, 1], - [14, 4], - [16, 6], - [18, 28], - [19, 64], - [20, 130] - ] - }, - 'line-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-primary', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width, - 'line-opacity': { - stops: [ - [8, 0], - [9, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-trunk', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway.line_width, - 'line-opacity': { - stops: [ - [7, 0], - [8, 0.75] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'tunnel-street-motorway', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway.line_width, - 'line-opacity': motorway.line_opacity - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'tunnel-transport-monorail', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'tunnel', true]], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-transport-funicular', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'tunnel', true]], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-transport-tram', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'tunnel', true]], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-transport-narrowgauge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'tunnel', true]], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-transport-lightrail', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'tunnel', true]], - paint: { - 'line-color': rail.line_color, - 'line-width': rail.line_width, - 'line-opacity': rail.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'tunnel-transport-rail', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'tunnel', true]], - paint: { - 'line-color': rail.line_color, - 'line-width': rail.line_width, - 'line-opacity': rail.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'street-pedestrian-zone', - type: 'fill', - 'source-layer': 'street_polygons', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['==', 'kind', 'pedestrian']], - paint: { - 'fill-color': 'rgba(245,245,245,0.25)', - 'fill-opacity': { - stops: [ - [12, 0], - [13, 1], - [14, 0], - [15, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'way-footway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'footway']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'rgb(220,220,220)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'way-steps:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'steps']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'rgb(220,220,220)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'way-path:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'path']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'rgb(220,220,220)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'way-cycleway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'cycleway']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'rgb(222,222,222)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'street-track:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'track'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [14, 2], - [16, 4], - [18, 18], - [19, 48], - [20, 96] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-pedestrian:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'pedestrian'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-service:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [14, 2], - [16, 4], - [18, 18], - [19, 48], - [20, 96] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-livingstreet:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'living_street'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-residential:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'residential'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': street_residential_outline.line_color, - 'line-width': street_residential_outline.line_width, - 'line-opacity': street_residential_outline.line_opacity - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-unclassified:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'unclassified'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-tertiary-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'tertiary'], - ['==', 'link', true] - ], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-secondary-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'secondary'], - ['==', 'link', true] - ], - paint: { - 'line-color': tokens.street_secondary_outline, - 'line-width': street_secondary_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'street-primary-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'primary'], - ['==', 'link', true] - ], - paint: { - 'line-color': tokens.street_primary_outline, - 'line-width': street_primary_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'street-trunk-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'trunk'], - ['==', 'link', true] - ], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_link_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'street-motorway-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'motorway'], - ['==', 'link', true] - ], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_link_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - }, - minzoom: 12 - }, - { - source: 'versatiles-osm', - id: 'street-tertiary:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'tertiary'], - ['!=', 'link', true] - ], - paint: { - 'line-color': 'hsl(36,0%,80%)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-secondary:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'secondary'], - ['!=', 'link', true] - ], - paint: { - 'line-color': 'hsl(28,0%,69%)', - 'line-width': { - stops: [ - [11, 2], - [14, 5], - [16, 8], - [18, 30], - [19, 68], - [20, 138] - ] - }, - 'line-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-primary:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'primary'], - ['!=', 'link', true] - ], - paint: { - 'line-color': street_primary_outline.line_color, - 'line-width': street_primary_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - } - }, - { - source: 'versatiles-osm', - id: 'street-trunk:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'trunk'], - ['!=', 'link', true] - ], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - } - }, - { - source: 'versatiles-osm', - id: 'street-motorway:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'motorway'], - ['!=', 'link', true] - ], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_outline.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'butt' - } - }, - { - source: 'versatiles-osm', - id: 'way-footway', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'footway']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'rgb(245,245,245)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'way-steps', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'steps']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'rgb(245,245,245)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'way-path', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'path']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'rgb(245,245,245)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'way-cycleway', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'cycleway']], - layout: { - 'line-cap': 'round' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'hsl(203,0%,97%)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'street-track', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'track'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [14, 1], - [16, 3], - [18, 16], - [19, 44], - [20, 88] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-pedestrian', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'pedestrian'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], - paint: { - 'line-color': tokens.street_tertiary, - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 0], - [14, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-service', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [14, 1], - [16, 3], - [18, 16], - [19, 44], - [20, 88] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-livingstreet', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'living_street'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': street_residential.line_color, - 'line-width': street_residential.line_width, - 'line-opacity': street_residential.line_opacity - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-residential', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'residential'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': street_residential.line_color, - 'line-width': street_residential.line_width, - 'line-opacity': street_residential.line_opacity - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-unclassified', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'unclassified'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-track-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'track'], - ['==', 'bicycle', 'designated'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)' - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-pedestrian-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'pedestrian'], - ['==', 'bicycle', 'designated'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'street-service-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['==', 'bicycle', 'designated'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)' - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-livingstreet-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'living_street'], - ['==', 'bicycle', 'designated'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'street-residential-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'residential'], - ['==', 'bicycle', 'designated'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': street_residential.line_color, - 'line-width': street_residential.line_width, - 'line-opacity': street_residential.line_opacity - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'street-unclassified-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'unclassified'], - ['==', 'bicycle', 'designated'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'street-tertiary-link', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'tertiary'], - ['==', 'link', true] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-secondary-link', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'secondary'], - ['==', 'link', true] - ], - paint: { - 'line-color': tokens.street_secondary, - 'line-width': street_secondary.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'street-primary-link', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'primary'], - ['==', 'link', true] - ], - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'street-trunk-link', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'trunk'], - ['==', 'link', true] - ], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway_link.line_width - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'street-motorway-link', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'motorway'], - ['==', 'link', true] - ], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway_link.line_width, - 'line-opacity': motorway.line_opacity - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - }, - minzoom: 12 - }, - { - source: 'versatiles-osm', - id: 'street-tertiary', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'tertiary'], - ['!=', 'link', true] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-secondary', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'secondary'], - ['!=', 'link', true] - ], - paint: { - 'line-color': tokens.street_secondary, - 'line-width': street_secondary.line_width, - 'line-opacity': { - stops: [ - [9, 0], - [10, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-primary', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'primary'], - ['!=', 'link', true] - ], - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width, - 'line-opacity': { - stops: [ - [8, 0], - [9, 1] - ] - } - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-trunk', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'trunk'], - ['!=', 'link', true] - ], - paint: { - 'line-color': motorway.line_color, - 'line-width': motorway.line_width, - 'line-opacity': motorway.line_opacity - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'street-motorway', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['!=', 'bridge', true], - ['!=', 'tunnel', true], - ['in', 'kind', 'motorway'], - ['!=', 'link', true] - ], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway.line_width, - 'line-opacity': motorway.line_opacity - }, - layout: { - 'line-join': 'round', - 'line-cap': 'round' - } - }, - { - source: 'versatiles-osm', - id: 'transport-rail:dashes', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['in', 'kind', 'rail'], - ['!has', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': rail.line_color, - 'line-opacity': rail.line_opacity, - 'line-width': rail_overlay.line_width, - 'line-dasharray': rail_overlay.line_dasharray - } - }, - { - source: 'versatiles-osm', - id: 'transport-monorail', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['in', 'kind', 'monorail'], - ['!has', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - minzoom: 13, - paint: { - 'line-width': { - stops: [ - [13, 0], - [16, 1], - [17, 2], - [18, 3], - [20, 5] - ] - }, - 'line-color': 'hsl(208,0%,73%)' - } - }, - { - source: 'versatiles-osm', - id: 'transport-funicular', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['in', 'kind', 'funicular'], - ['!has', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - minzoom: 13, - paint: { - 'line-width': { - stops: [ - [13, 0], - [16, 1], - [17, 2], - [18, 3], - [20, 5] - ] - }, - 'line-color': 'hsl(208,0%,73%)' - } - }, - { - source: 'versatiles-osm', - id: 'transport-tram', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['in', 'kind', 'tram'], - ['!has', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'transport-narrowgauge', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['in', 'kind', 'narrow_gauge'], - ['!has', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'transport-lightrail', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['in', 'kind', 'light_rail'], - ['!has', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': rail.line_color, - 'line-width': rail.line_width, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'transport-rail', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['in', 'kind', 'rail'], - ['!has', 'service'], - ['!=', 'bridge', true], - ['!=', 'tunnel', true] - ], - paint: { - 'line-color': rail.line_color, - 'line-width': rail.line_width, - 'line-opacity': rail.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'transport-ferry', - type: 'line', - 'source-layer': 'ferries', - minzoom: 10, - paint: { - 'line-color': 'rgb(184, 189, 207)', - 'line-width': { - stops: [ - [10, 1], - [13, 2], - [14, 3], - [16, 4], - [17, 6] - ] - }, - 'line-opacity': { - stops: [[10, 0]] - }, - 'line-dasharray': [1, 1] - } - }, - { - source: 'versatiles-osm', - id: 'bridge-way-footway:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': 0.5, - 'line-width': { - stops: [ - [15, 0], - [16, 7], - [18, 10], - [19, 17], - [20, 31] - ] - } - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-steps:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': 0.5, - 'line-width': { - stops: [ - [15, 0], - [16, 7], - [18, 10], - [19, 17], - [20, 31] - ] - } - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-path:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': 0.5, - 'line-width': { - stops: [ - [15, 0], - [16, 7], - [18, 10], - [19, 17], - [20, 31] - ] - } - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-cycleway:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': 0.5, - 'line-width': { - stops: [ - [15, 0], - [16, 7], - [18, 10], - [19, 17], - [20, 31] - ] - } - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-track:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - }, - 'line-width': { - stops: [ - [14, 3], - [16, 6], - [18, 25], - [19, 67], - [20, 134] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-pedestrian:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - }, - 'line-width': { - stops: [ - [12, 3], - [14, 4], - [16, 8], - [18, 36], - [19, 90], - [20, 179] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-service:bridge', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['==', 'bridge', true], - ['!=', 'service', 'driveway'] - ], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - }, - 'line-width': { - stops: [ - [14, 3], - [16, 6], - [18, 25], - [19, 67], - [20, 134] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-livingstreet:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - }, - 'line-width': { - stops: [ - [12, 3], - [14, 4], - [16, 8], - [18, 36], - [19, 90], - [20, 179] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-residential:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': street_residential.line_color, - 'line-opacity': street_residential.line_opacity, - 'line-width': street_residential.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-unclassified:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - }, - 'line-width': { - stops: [ - [12, 3], - [14, 4], - [16, 8], - [18, 36], - [19, 90], - [20, 179] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-tertiary-link:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - }, - 'line-width': { - stops: [ - [12, 3], - [14, 4], - [16, 8], - [18, 36], - [19, 90], - [20, 179] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-secondary-link:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': 0.5, - 'line-width': { - stops: [ - [12, 3], - [14, 4], - [16, 10], - [18, 20], - [20, 56] - ] - } - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-primary-link:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-trunk-link:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': motorway.line_color, - 'line-opacity': 0.5, - 'line-width': { - stops: [ - [12, 3], - [14, 4], - [16, 10], - [18, 20], - [20, 56] - ] - } - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-motorway-link:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway_link.line_width, - 'line-opacity': motorway.line_opacity - }, - minzoom: 12 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-tertiary:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - }, - 'line-width': { - stops: [ - [12, 3], - [14, 4], - [16, 8], - [18, 36], - [19, 90], - [20, 179] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-secondary:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': 'rgb(239,239,239)', - 'line-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - }, - 'line-width': { - stops: [ - [11, 3], - [14, 7], - [16, 11], - [18, 42], - [19, 95], - [20, 193] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-primary:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-trunk:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': motorway.line_color, - 'line-width': motorway.line_width, - 'line-opacity': motorway.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-motorway:bridge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], - layout: { - 'line-cap': 'butt', - 'line-join': 'round' - }, - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway.line_width, - 'line-opacity': motorway.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'bridge-street-pedestrian-zone', - type: 'fill', - 'source-layer': 'street_polygons', - filter: ['all', ['==', 'bridge', true], ['==', 'kind', 'pedestrian']], - paint: { - 'fill-color': 'hsl(0,0%,100%)', - 'fill-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - } - }, - { - source: 'versatiles-osm', - id: 'bridge-way-footway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], - layout: { - 'line-cap': 'butt' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'rgb(220,220,220)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-steps:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], - layout: { - 'line-cap': 'butt' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'rgb(220,220,220)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-path:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], - layout: { - 'line-cap': 'butt' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'rgb(220,220,220)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-cycleway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], - layout: { - 'line-cap': 'butt' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 5], - [18, 7], - [19, 12], - [20, 22] - ] - }, - 'line-color': 'rgb(222,222,222)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-track:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], - paint: { - 'line-color': 'rgb(217,217,217)', - 'line-width': { - stops: [ - [14, 2], - [16, 4], - [18, 18], - [19, 48], - [20, 96] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-pedestrian:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], - paint: { - 'line-color': 'rgb(217,217,217)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-service:outline', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['==', 'bridge', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'rgb(217,217,217)', - 'line-width': { - stops: [ - [14, 2], - [16, 4], - [18, 18], - [19, 48], - [20, 96] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-livingstreet:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], - paint: { - 'line-color': 'rgb(217,217,217)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-residential:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], - paint: { - 'line-color': street_residential_outline.line_color, - 'line-width': street_residential_outline.line_width, - 'line-opacity': street_residential_outline.line_opacity - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-unclassified:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], - paint: { - 'line-color': 'rgb(217,217,217)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-tertiary-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], - paint: { - 'line-color': 'rgb(217,217,217)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-secondary-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], - paint: { - 'line-color': 'hsl(28,0%,69%)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 7], - [18, 14], - [20, 40] - ] - } - }, - layout: street_layout, - minzoom: 13 - }, - { - 'source-layer': 'streets', - source: 'versatiles-osm', - id: 'bridge-street-primary-link:outline', - type: 'line', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width - }, - layout: street_layout, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-trunk-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_outline.line_width - }, - layout: street_layout, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-motorway-link:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_link_outline.line_width - }, - layout: street_layout, - minzoom: 12 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-tertiary:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], - paint: { - 'line-color': 'rgb(217,217,217)', - 'line-width': { - stops: [ - [12, 2], - [14, 3], - [16, 6], - [18, 26], - [19, 64], - [20, 128] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-secondary:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], - paint: { - 'line-color': 'hsl(28,0%,69%)', - 'line-width': { - stops: [ - [11, 2], - [14, 5], - [16, 8], - [18, 30], - [19, 68], - [20, 138] - ] - }, - 'line-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-primary:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], - paint: { - 'line-color': street_primary_outline.line_color, - 'line-width': street_primary_outline.line_width - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-trunk:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_outline.line_width - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-motorway:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], - paint: { - 'line-color': motorway_outline.line_color, - 'line-width': motorway_outline.line_width - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-way-footway', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], - layout: { - 'line-cap': 'butt' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'rgb(245,245,245)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-steps', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], - layout: { - 'line-cap': 'butt' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'rgb(245,245,245)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-path', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], - layout: { - 'line-cap': 'butt' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'rgb(245,245,245)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-way-cycleway', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], - layout: { - 'line-cap': 'butt' - }, - paint: { - 'line-width': { - stops: [ - [15, 0], - [16, 4], - [18, 6], - [19, 10], - [20, 20] - ] - }, - 'line-color': 'hsl(203,0%,97%)' - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-track', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [14, 1], - [16, 3], - [18, 16], - [19, 44], - [20, 88] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-pedestrian', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-service', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['==', 'bridge', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [14, 1], - [16, 3], - [18, 16], - [19, 44], - [20, 88] - ] - }, - 'line-opacity': { - stops: [ - [14, 0], - [15, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-livingstreet', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-residential', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], - paint: { - 'line-color': street_residential.line_color, - 'line-width': street_residential.line_width, - 'line-opacity': street_residential.line_opacity - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-unclassified', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-track-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'track'], - ['==', 'bicycle', 'designated'], - ['==', 'bridge', true] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)' - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-pedestrian-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'pedestrian'], - ['==', 'bicycle', 'designated'], - ['==', 'bridge', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-service-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'service'], - ['==', 'bicycle', 'designated'], - ['==', 'bridge', true], - ['!=', 'service', 'driveway'] - ], - paint: { - 'line-color': 'hsl(0,0%,100%)' - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-livingstreet-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'living_street'], - ['==', 'bicycle', 'designated'], - ['==', 'bridge', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-residential-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'residential'], - ['==', 'bicycle', 'designated'], - ['==', 'bridge', true] - ], - paint: { - 'line-color': street_residential.line_color, - 'line-width': street_residential.line_width, - 'line-opacity': street_residential.line_opacity - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-unclassified-bicycle', - type: 'line', - 'source-layer': 'streets', - filter: [ - 'all', - ['==', 'kind', 'unclassified'], - ['==', 'bicycle', 'designated'], - ['==', 'bridge', true] - ], - paint: { - 'line-color': 'hsl(203,0%,97%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-tertiary-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-secondary-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], - paint: { - 'line-color': 'hsl(48,0%,83%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 12], - [20, 38] - ] - } - }, - layout: street_layout, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-primary-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width - }, - layout: street_layout, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-trunk-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway_link.line_width - }, - layout: street_layout, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-motorway-link', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway_link.line_width, - 'line-opacity': motorway.line_opacity - }, - layout: street_layout, - minzoom: 12 - }, - { - source: 'versatiles-osm', - id: 'bridge-street-tertiary', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], - paint: { - 'line-color': 'hsl(0,0%,100%)', - 'line-width': { - stops: [ - [12, 1], - [14, 2], - [16, 5], - [18, 24], - [19, 60], - [20, 120] - ] - }, - 'line-opacity': { - stops: [ - [12, 0], - [13, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-secondary', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], - paint: { - 'line-color': tokens.street_secondary, - 'line-width': street_secondary.line_width, - 'line-opacity': { - stops: [ - [11, 0], - [12, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-primary', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], - paint: { - 'line-color': street_primary.line_color, - 'line-width': street_primary.line_width, - 'line-opacity': { - stops: [ - [8, 0], - [9, 1] - ] - } - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-trunk', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway.line_width, - 'line-opacity': motorway.line_opacity - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-street-motorway', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], - paint: { - 'line-color': tokens.street_primary, - 'line-width': motorway.line_width, - 'line-opacity': motorway.line_opacity - }, - layout: street_layout - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-monorail:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'bridge', true]], - minzoom: 15, - paint: { - 'line-color': rail_outline.line_color, - 'line-width': rail_outline.line_width - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-funicular:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'bridge', true]], - minzoom: 15, - paint: { - 'line-color': rail_outline.line_color, - 'line-width': rail_outline.line_width - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-tram:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'bridge', true]], - minzoom: 15, - paint: { - 'line-color': rail_outline.line_color, - 'line-width': rail_outline.line_width - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-narrowgauge:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'bridge', true]], - minzoom: 15, - paint: { - 'line-color': rail_outline.line_color, - 'line-width': rail_outline.line_width - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-lightrail:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'bridge', true]], - paint: { - 'line-color': rail_outline.line_color, - 'line-width': rail_outline.line_width, - 'line-opacity': rail_outline.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-rail:outline', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'bridge', true]], - paint: { - 'line-color': rail_outline.line_color, - 'line-width': rail_outline.line_width, - 'line-opacity': rail_outline.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-monorail', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'bridge', true]], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-funicular', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'bridge', true]], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-tram', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'bridge', true]], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-narrowgauge', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'bridge', true]], - minzoom: 13, - paint: { - 'line-width': rail.line_width, - 'line-color': rail.line_color - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-lightrail', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'bridge', true]], - paint: { - 'line-color': rail.line_color, - 'line-width': rail.line_width, - 'line-opacity': rail.line_opacity - } - }, - { - source: 'versatiles-osm', - id: 'bridge-transport-rail', - type: 'line', - 'source-layer': 'streets', - filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'bridge', true]], - paint: { - 'line-color': rail.line_color, - 'line-width': rail.line_width, - 'line-opacity': rail.line_opacity - } - }, - ...buildAdmin([0, 1, 2, 3]), - - { - source: 'versatiles-osm', - id: 'label-street-pedestrian', - type: 'symbol', - 'source-layer': 'street_labels', - filter: ['==', 'kind', 'pedestrian'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'symbol-placement': 'line', - 'text-anchor': 'center', - 'text-size': { - stops: [ - [12, 10], - [15, 13] - ] - } - }, - paint: { - 'text-color': 'hsl(240,0%,23%)', - 'text-halo-color': 'hsla(0,0%,100%,0.8)', - 'text-halo-width': 2, - 'text-halo-blur': 1 - }, - minzoom: 14 - }, - { - source: 'versatiles-osm', - id: 'label-street-livingstreet', - type: 'symbol', - 'source-layer': 'street_labels', - filter: ['==', 'kind', 'living_street'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'symbol-placement': 'line', - 'text-anchor': 'center', - 'text-size': { - stops: [ - [12, 10], - [15, 13] - ] - } - }, - paint: { - 'text-color': 'hsl(240,0%,23%)', - 'text-halo-color': 'hsla(0,0%,100%,0.8)', - 'text-halo-width': 2, - 'text-halo-blur': 1 - }, - minzoom: 14 - }, - { - source: 'versatiles-osm', - id: 'label-street-residential', - type: 'symbol', - 'source-layer': 'street_labels', - filter: ['==', 'kind', 'residential'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'symbol-placement': 'line', - 'text-anchor': 'center', - 'text-size': { - stops: [ - [12, 10], - [15, 13] - ] - } - }, - paint: { - 'text-color': 'hsl(240,0%,23%)', - 'text-halo-color': 'hsla(0,0%,100%,0.8)', - 'text-halo-width': 2, - 'text-halo-blur': 1 - }, - minzoom: 15 - }, - { - source: 'versatiles-osm', - id: 'label-street-unclassified', - type: 'symbol', - 'source-layer': 'street_labels', - filter: ['==', 'kind', 'unclassified'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'symbol-placement': 'line', - 'text-anchor': 'center', - 'text-size': { - stops: [ - [12, 10], - [15, 13] - ] - } - }, - paint: { - 'text-color': tokens.label_secondary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 14 - }, - { - source: 'versatiles-osm', - id: 'label-street-tertiary', - type: 'symbol', - 'source-layer': 'street_labels', - filter: ['==', 'kind', 'tertiary'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'symbol-placement': 'line', - 'text-anchor': 'center', - 'text-size': { - stops: [ - [12, 10], - [15, 13] - ] - } - }, - paint: { - 'text-color': 'hsl(240,0%,23%)', - 'text-halo-color': 'hsla(0,0%,100%,0.8)', - 'text-halo-width': 2, - 'text-halo-blur': 1 - }, - minzoom: 14 - }, - { - source: 'versatiles-osm', - id: 'label-street-secondary', - type: 'symbol', - 'source-layer': 'street_labels', - filter: ['==', 'kind', 'secondary'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'symbol-placement': 'line', - 'text-anchor': 'center', - 'text-size': { - stops: [ - [12, 10], - [15, 13] - ] - } - }, - paint: { - 'text-color': tokens.label_primary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 14 - }, - { - source: 'versatiles-osm', - id: 'label-street-primary', - type: 'symbol', - 'source-layer': 'street_labels', - filter: ['==', 'kind', 'primary'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'symbol-placement': 'line', - 'text-anchor': 'center', - 'text-size': { - stops: [ - [12, 10], - [15, 13] - ] - } - }, - paint: { - 'text-color': tokens.label_primary, - 'text-halo-color': 'hsla(0,0%,100%,0.8)', - 'text-halo-width': 2 - }, - minzoom: 14 - }, - { - source: 'versatiles-osm', - id: 'label-street-trunk', - type: 'symbol', - 'source-layer': 'street_labels', - filter: ['==', 'kind', 'trunk'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'symbol-placement': 'line', - 'text-anchor': 'center', - 'text-size': { - stops: [ - [12, 10], - [15, 13] - ] - } - }, - paint: { - 'text-color': tokens.label_primary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'label-place-neighbourhood', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['==', 'kind', 'neighbourhood'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'text-size': { - stops: [[14, 14]] - } - }, - paint: { - 'text-color': tokens.label_secondary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 14 - }, - { - source: 'versatiles-osm', - id: 'label-place-quarter', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['==', 'kind', 'quarter'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'text-size': { - stops: [[10, 14]] - } - }, - paint: { - 'text-color': 'rgb(57,57,57)', - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 14 - }, - { - source: 'versatiles-osm', - id: 'label-place-suburb', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['==', 'kind', 'suburb'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'text-size': { - stops: [ - [11, 13], - [13, 15] - ] - } - }, - paint: { - 'text-color': 'rgb(57,57,57)', - 'text-halo-color': tokens.background, - 'text-halo-width': 1.5 - }, - minzoom: 11 - }, - { - source: 'versatiles-osm', - id: 'label-place-hamlet', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['==', 'kind', 'hamlet'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'text-size': { - stops: [ - [10, 11], - [12, 14] - ] - } - }, - paint: { - 'icon-color': 'rgb(57,57,57)', - 'text-color': 'rgb(57,57,57)', - 'text-halo-color': 'hsla(0,0%,100%,0.8)', - 'text-halo-width': 2 - }, - minzoom: 13 - }, - { - source: 'versatiles-osm', - id: 'label-place-village', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['==', 'kind', 'village'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'text-size': { - stops: [ - [9, 11], - [12, 14] - ] - } - }, - paint: { - 'icon-color': 'rgb(57,57,57)', - 'text-color': 'rgb(57,57,57)', - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 11 - }, - { - source: 'versatiles-osm', - id: 'label-place-town-large', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['all', ['==', 'kind', 'town'], ['>', 'population', 30000]], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'text-size': { - stops: [ - [8, 13], - [12, 16] - ] - } - }, - paint: { - 'text-color': tokens.label_primary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 8 - }, - { - source: 'versatiles-osm', - id: 'label-place-town', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['all', ['==', 'kind', 'town'], ['<', 'population', 30000]], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'text-size': { - stops: [ - [8, 13], - [12, 16] - ] - } - }, - paint: { - 'text-color': tokens.label_primary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 9 - }, - - { - source: 'versatiles-osm', - id: 'label-place-city', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['==', 'kind', 'city'], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_medium, - 'text-size': { - stops: [ - [8, 11], - [10, 14] - ] - } - }, - paint: { - 'text-color': tokens.label_primary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 6, - maxzoom: 11 - }, - { - source: 'versatiles-osm', - id: 'label-place-statecapital', - type: 'symbol', - 'source-layer': 'place_labels', - filter: [ - 'all', - ['==', 'kind', 'state_capital'], - ['in', 'name_de', 'Hannover', 'München', 'Stuttgart', 'Hamburg', 'Köln', 'Essen', 'Mainz'] - ], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_regular, - 'text-size': { - stops: [ - [5, 12], - [14, 20] - ] - } - }, - paint: { - 'text-color': tokens.label_primary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 5, - maxzoom: 12 - }, - { - source: 'versatiles-osm', - id: 'label-place-capital', - type: 'symbol', - 'source-layer': 'place_labels', - filter: ['all', ['==', 'kind', 'capital'], ['==', 'name_de', 'Berlin']], - layout: { - 'text-field': '{name_de}', - 'text-font': tokens.sans_medium, - 'text-size': { - stops: [ - [7, 14], - [10, 20] - ] - } - }, - paint: { - 'text-color': tokens.label_primary, - 'text-halo-color': tokens.background, - 'text-halo-width': 2 - }, - minzoom: 5, - maxzoom: 12 - } - ] -}; - -export default style; diff --git a/components/src/MapStyle/Roads.ts b/components/src/MapStyle/Roads.ts deleted file mode 100644 index 4cc8756f..00000000 --- a/components/src/MapStyle/Roads.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default function Roads() { - -} \ No newline at end of file diff --git a/components/src/MapStyle/SWRDataLight.ts b/components/src/MapStyle/SWRDataLight.ts new file mode 100644 index 00000000..65dd7f51 --- /dev/null +++ b/components/src/MapStyle/SWRDataLight.ts @@ -0,0 +1,66 @@ +import type { StyleSpecification } from "maplibre-gl"; + +import makeAdmin from "./components/Admin"; +import makeBuildings from "./components/Buildings"; +import makeLanduse from "./components/Landuse"; +import makeTransit from "./components/Transit"; +import makePlaceLabels from "./components/PlaceLabels"; +import makeWalking from "./components/Walking"; +import makeRoads from "./components/Roads"; + +const { buildings } = makeBuildings() +const { landuse } = makeLanduse() +const { placeLabels } = makePlaceLabels() +const { admin } = makeAdmin() +const { airports, transitBridges, transitSurface, transitTunnels } = makeTransit() +const { walkingLabels, walkingTunnels, walkingSurface, walkingBridges } = makeWalking() +const { roadLabels, roadBridges, roadSurface, roadTunnels } = makeRoads() + +const style: StyleSpecification = { + version: 8, + name: 'swr-datalab-light', + metadata: { license: 'https://creativecommons.org/publicdomain/zero/1.0/' }, + glyphs: 'https://static.datenhub.net/maps/fonts/{fontstack}/{range}.pbf', + sources: { + 'versatiles-osm': { + attribution: '© OpenStreetMap contributors', + tiles: ['https://tiles.versatiles.org/tiles/osm/{z}/{x}/{y}'], + bounds: [-180, -85.0511287798066, 180, 85.0511287798066], + type: 'vector', + scheme: 'xyz', + minzoom: 0, + maxzoom: 14 + } + }, + layers: [ + // 1. Landuse + ...landuse, + ...airports, + ...buildings, + + // 2. Tunnels + ...walkingTunnels, + ...roadTunnels, + ...transitTunnels, + + // 3. Surface ways + ...walkingSurface, + ...roadSurface, + ...transitSurface, + + // 4. Bridges ways + ...walkingBridges, + ...roadBridges, + ...transitBridges, + + // 5. Admin boundaries + ...admin, + + // 6. Labels + ...walkingLabels, + ...roadLabels, + ...placeLabels + ] +}; + +export default style; diff --git a/components/src/MapStyle/Admin.ts b/components/src/MapStyle/components/Admin.ts similarity index 84% rename from components/src/MapStyle/Admin.ts rename to components/src/MapStyle/components/Admin.ts index 8201163e..d9346406 100644 --- a/components/src/MapStyle/Admin.ts +++ b/components/src/MapStyle/components/Admin.ts @@ -1,14 +1,10 @@ -import type { FillLayerSpecification, LineLayerSpecification } from "maplibre-gl" -import tokens from "./tokens" -type Layer = LineLayerSpecification | FillLayerSpecification -type AdminLevel = 1 | 2 | 3 | 4 +import tokens from "../tokens" +import { type Layer } from "./types" -export default function buildAdmin(levels: AdminLevel[]): Layer[] { - const layers = [{ - source: 'versatiles-osm', +export default function makeAdmin(): any { + const admin: Layer[] = [{ id: 'boundary-country:outline', type: 'line', - 'source-layer': 'boundaries', filter: [ 'all', ['==', 'admin_level', 2], @@ -34,10 +30,8 @@ export default function buildAdmin(levels: AdminLevel[]): Layer[] { } }, { - source: 'versatiles-osm', id: 'boundary-country-disputed:outline', type: 'line', - 'source-layer': 'boundaries', filter: [ 'all', ['==', 'admin_level', 2], @@ -58,10 +52,8 @@ export default function buildAdmin(levels: AdminLevel[]): Layer[] { } }, { - source: 'versatiles-osm', id: 'boundary-state:outline', type: 'line', - 'source-layer': 'boundaries', filter: [ 'all', ['==', 'admin_level', 4], @@ -87,10 +79,8 @@ export default function buildAdmin(levels: AdminLevel[]): Layer[] { } }, { - source: 'versatiles-osm', id: 'boundary-country', type: 'line', - 'source-layer': 'boundaries', filter: [ 'all', ['==', 'admin_level', 2], @@ -121,10 +111,8 @@ export default function buildAdmin(levels: AdminLevel[]): Layer[] { } }, { - source: 'versatiles-osm', id: 'boundary-country-disputed', type: 'line', - 'source-layer': 'boundaries', filter: [ 'all', ['==', 'admin_level', 2], @@ -148,10 +136,8 @@ export default function buildAdmin(levels: AdminLevel[]): Layer[] { } }, { - source: 'versatiles-osm', id: 'boundary-state', type: 'line', - 'source-layer': 'boundaries', filter: [ 'all', ['==', 'admin_level', 4], @@ -179,5 +165,12 @@ export default function buildAdmin(levels: AdminLevel[]): Layer[] { 'line-join': 'round' } }] - return layers + + // Set common properties + admin.forEach((_, i) => { + admin[i]["source"] = "versatiles-osm" + admin[i]["source-layer"] = "boundaries" + }) + + return { admin } } \ No newline at end of file diff --git a/components/src/MapStyle/components/Buildings.ts b/components/src/MapStyle/components/Buildings.ts new file mode 100644 index 00000000..f5f8f42b --- /dev/null +++ b/components/src/MapStyle/components/Buildings.ts @@ -0,0 +1,25 @@ +import { type Layer } from "./types" + +export default function makeBuildings(): any { + const buildings: Layer[] = [{ + id: 'building-fill', + type: 'fill', + paint: { + 'fill-color': 'hsl(240, 4%, 90%)', + 'fill-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + } + }] + + // Set common properties + buildings.forEach(l => { + l["source"] = "versatiles-osm" + l["source-layer"] = "buildings" + }) + + return { buildings } +} \ No newline at end of file diff --git a/components/src/MapStyle/components/Landuse.ts b/components/src/MapStyle/components/Landuse.ts new file mode 100644 index 00000000..d514781a --- /dev/null +++ b/components/src/MapStyle/components/Landuse.ts @@ -0,0 +1,531 @@ +import tokens from "../tokens" +import { type Layer } from "./types" + +export default function makeLanduse(): any { + const landuse: Layer[] = [ + { + id: 'background', + type: 'background', + paint: { + 'background-color': tokens.background + } + }, + { + id: 'water-ocean', + type: 'fill', + 'source-layer': 'ocean', + paint: { + 'fill-color': 'hsl(219, 56%, 93%)' + } + }, + { + id: 'land-glacier', + type: 'fill', + 'source-layer': 'water_polygons', + filter: ['all', ['==', 'kind', 'glacier']], + paint: { + 'fill-color': 'hsl(0,0%,100%)' + } + }, + { + id: 'land-industrial', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'industrial', 'quarry', 'railway']], + paint: { + 'fill-color': tokens.background, + 'fill-opacity': ["interpolate", ["linear"], ["zoom"], 10, 0, 11, 1] + } + }, + { + id: 'land-agriculture', + type: 'fill', + 'source-layer': 'land', + filter: [ + 'all', + [ + 'in', + 'kind', + 'brownfield', + 'farmland', + 'farmyard', + 'greenfield', + 'greenhouse_horticulture', + 'orchard', + 'plant_nursery', + 'vineyard' + ] + ], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + } + }, + { + id: 'land-waste', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'landfill']], + paint: { + 'fill-color': 'hsl(50,0%,80%)', + 'fill-opacity': { + stops: [ + [10, 0], + [11, 1] + ] + } + } + }, + { + id: 'land-park', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'park', 'village_green', 'recreation_ground']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + } + }, + { + id: 'land-garden', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'allotments', 'garden']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + } + }, + { + id: 'land-burial', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'cemetery', 'grave_yard']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + } + }, + { + id: 'land-leisure', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'miniature_golf', 'playground', 'golf_course']], + paint: { + 'fill-color': tokens.grass_dark + } + }, + { + id: 'land-rock', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'bare_rock', 'scree', 'shingle']], + paint: { + 'fill-color': 'hsl(192,0%,89%)' + } + }, + { + id: 'land-forest', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'forest']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [12, 0], + [13, 0.25] + ] + } + } + }, + { + id: 'land-grass', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'grass', 'grassland', 'meadow', 'wet_meadow']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + } + }, + { + id: 'land-vegetation', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'heath', 'scrub']], + paint: { + 'fill-color': tokens.grass, + 'fill-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + } + }, + { + id: 'land-sand', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'beach', 'sand']], + paint: { + 'fill-color': 'hsl(60,0%,95%)' + } + }, + { + id: 'land-wetland', + type: 'fill', + 'source-layer': 'land', + filter: ['all', ['in', 'kind', 'bog', 'marsh', 'string_bog', 'swamp']], + paint: { + 'fill-color': tokens.marsh, + 'fill-opacity': { + stops: [ + [10, 0], + [11, 1] + ] + } + } + }, + { + id: 'water-river', + type: 'line', + 'source-layer': 'water_lines', + filter: ['all', ['in', 'kind', 'river'], ['!=', 'tunnel', true]], + paint: { + 'line-color': tokens.water, + 'line-width': { + stops: [ + [8, 0], + [10, 1], + [12, 2], + [15, 4], + [17, 9], + [18, 20], + [20, 60] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + id: 'water-canal', + type: 'line', + 'source-layer': 'water_lines', + filter: ['all', ['in', 'kind', 'canal'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], + paint: { + 'line-color': tokens.water, + 'line-width': { + stops: [ + [9, 0], + [10, 2], + [15, 3], + [17, 8], + [18, 17], + [20, 50] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + id: 'water-stream', + type: 'line', + 'source-layer': 'water_lines', + filter: ['all', ['in', 'kind', 'stream'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], + paint: { + 'line-color': tokens.water, + 'line-width': { + stops: [ + [13, 0], + [14, 1], + [15, 2], + [17, 6], + [18, 12], + [20, 30] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + id: 'water-ditch', + type: 'line', + 'source-layer': 'water_lines', + filter: ['all', ['in', 'kind', 'ditch'], ['!=', 'tunnel', true], ['!=', 'bridge', true]], + paint: { + 'line-color': tokens.water_light, + 'line-width': { + stops: [ + [14, 0], + [15, 1], + [17, 4], + [18, 8], + [20, 20] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + id: 'water-area', + type: 'fill', + 'source-layer': 'water_polygons', + filter: ['==', 'kind', 'water'], + paint: { + 'fill-color': tokens.water_light, + 'fill-opacity': { + stops: [ + [4, 0], + [6, 1] + ] + } + } + }, + { + id: 'water-area-river', + type: 'fill', + 'source-layer': 'water_polygons', + filter: ['==', 'kind', 'river'], + paint: { + 'fill-color': tokens.water, + 'fill-opacity': { + stops: [ + [4, 0], + [6, 1] + ] + } + } + }, + { + id: 'water-area-small', + type: 'fill', + 'source-layer': 'water_polygons', + filter: ['in', 'kind', 'reservoir', 'basin', 'dock'], + paint: { + 'fill-color': tokens.water, + 'fill-opacity': { + stops: [ + [4, 0], + [6, 1] + ] + } + } + }, + { + id: 'water-dam-area', + type: 'fill', + 'source-layer': 'dam_polygons', + filter: ['==', 'kind', 'dam'], + paint: { + 'fill-color': 'hsl(33,0%,95%)', + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + } + }, + { + id: 'water-dam', + type: 'line', + 'source-layer': 'dam_lines', + filter: ['==', 'kind', 'dam'], + paint: { + 'line-color': 'hsl(205,0%,85%)' + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + id: 'water-pier-area', + type: 'fill', + 'source-layer': 'pier_polygons', + filter: ['in', 'kind', 'pier', 'breakwater', 'groyne'], + paint: { + 'fill-color': tokens.street_tertiary, + 'fill-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + } + }, + { + id: 'water-pier', + type: 'line', + 'source-layer': 'pier_lines', + filter: ['in', 'kind', 'pier', 'breakwater', 'groyne'], + paint: { + 'line-color': tokens.street_tertiary, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-cap': 'round', + 'line-join': 'round' + } + }, + { + id: 'site-dangerarea', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'danger_area'], + paint: { + 'fill-color': 'hsl(0,0%,50%)', + 'fill-outline-color': 'hsl(0,0%,50%)', + 'fill-opacity': 0.3 + } + }, + { + source: 'versatiles-osm', + id: 'site-university', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'university'], + paint: { + 'fill-color': 'hsl(60,0%,75%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-osm', + id: 'site-college', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'college'], + paint: { + 'fill-color': 'hsl(60,0%,75%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-osm', + id: 'site-school', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'school'], + paint: { + 'fill-color': 'hsl(60,0%,75%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-osm', + id: 'site-hospital', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'hospital'], + paint: { + 'fill-color': 'hsl(0,0%,70%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-osm', + id: 'site-prison', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'prison'], + paint: { + 'fill-color': 'hsl(305,0%,97%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-osm', + id: 'site-parking', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'parking'], + paint: { + 'fill-color': 'hsl(24,0%,95%)' + } + }, + { + source: 'versatiles-osm', + id: 'site-bicycleparking', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'bicycle_parking'], + paint: { + 'fill-color': 'hsl(24,0%,95%)' + } + }, + { + source: 'versatiles-osm', + id: 'site-construction', + type: 'fill', + 'source-layer': 'sites', + filter: ['in', 'kind', 'construction'], + paint: { + 'fill-color': 'hsl(0,0%,66%)', + 'fill-opacity': 0.1 + } + }, + { + source: 'versatiles-osm', + id: 'airport-area', + type: 'fill', + 'source-layer': 'street_polygons', + filter: ['in', 'kind', 'runway', 'taxiway'], + paint: { + 'fill-color': 'hsl(0,0%,100%)', + 'fill-opacity': 0.5 + } + } + ] + + // Set common properties + landuse.forEach((_, i) => { + landuse[i]["source"] = "versatiles-osm" + }) + + return { landuse } +} \ No newline at end of file diff --git a/components/src/MapStyle/components/Natural.ts b/components/src/MapStyle/components/Natural.ts new file mode 100644 index 00000000..fe344a1f --- /dev/null +++ b/components/src/MapStyle/components/Natural.ts @@ -0,0 +1,3 @@ +export default function makeNatural() { + +} \ No newline at end of file diff --git a/components/src/MapStyle/components/PlaceLabels.ts b/components/src/MapStyle/components/PlaceLabels.ts new file mode 100644 index 00000000..090e5771 --- /dev/null +++ b/components/src/MapStyle/components/PlaceLabels.ts @@ -0,0 +1,227 @@ +import { type Layer } from "./types" +import tokens from "../tokens" + +export default function makePlaceLabels() { + const placeLabels: Layer[] = [ + { + id: 'label-place-neighbourhood', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'neighbourhood'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [[14, 14]] + } + }, + paint: { + 'text-color': tokens.label_secondary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + id: 'label-place-quarter', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'quarter'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [[10, 14]] + } + }, + paint: { + 'text-color': 'rgb(57,57,57)', + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + id: 'label-place-suburb', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'suburb'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [11, 13], + [13, 15] + ] + } + }, + paint: { + 'text-color': 'rgb(57,57,57)', + 'text-halo-color': tokens.background, + 'text-halo-width': 1.5 + }, + minzoom: 11 + }, + { + id: 'label-place-hamlet', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'hamlet'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [10, 11], + [12, 14] + ] + } + }, + paint: { + 'text-color': 'rgb(57,57,57)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2 + }, + minzoom: 13 + }, + { + id: 'label-place-village', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'village'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [9, 11], + [12, 14] + ] + } + }, + paint: { + 'text-color': 'rgb(57,57,57)', + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 11 + }, + { + id: 'label-place-town-large', + 'source-layer': 'place_labels', + filter: ['all', ['==', 'kind', 'town'], ['>', 'population', 30000]], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [8, 13], + [12, 16] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 8 + }, + { + id: 'label-place-town', + 'source-layer': 'place_labels', + filter: ['all', ['==', 'kind', 'town'], ['<', 'population', 30000]], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [8, 13], + [12, 16] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 9 + }, + + { + id: 'label-place-city', + 'source-layer': 'place_labels', + filter: ['==', 'kind', 'city'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_medium, + 'text-size': { + stops: [ + [8, 11], + [10, 14] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 6, + maxzoom: 11 + }, + { + id: 'label-place-statecapital', + 'source-layer': 'place_labels', + filter: [ + 'all', + ['==', 'kind', 'state_capital'], + ['in', 'name_de', 'Hannover', 'München', 'Stuttgart', 'Hamburg', 'Köln', 'Essen', 'Mainz'] + ], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'text-size': { + stops: [ + [5, 12], + [14, 20] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 5, + maxzoom: 12 + }, + { + id: 'label-place-capital', + 'source-layer': 'place_labels', + filter: ['all', ['==', 'kind', 'capital'], ['==', 'name_de', 'Berlin']], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_medium, + 'text-size': { + stops: [ + [7, 14], + [10, 20] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 5, + maxzoom: 12 + } + ] + + // Set common properties + placeLabels.forEach((_, i) => { + placeLabels[i]["type"] = "symbol" + placeLabels[i]["source"] = "versatiles-osm" + }) + + return { placeLabels } +} \ No newline at end of file diff --git a/components/src/MapStyle/components/Roads.ts b/components/src/MapStyle/components/Roads.ts new file mode 100644 index 00000000..c8a5dfc9 --- /dev/null +++ b/components/src/MapStyle/components/Roads.ts @@ -0,0 +1,2623 @@ +import { type Layer } from "./types" +import tokens from "../tokens"; + +const street_layout = { + 'line-join': 'round', + 'line-cap': 'butt' +}; + +const motorway = { + line_color: tokens.street_primary, + line_width: { + stops: [ + [6, 1], + [7, 1.5], + [11, 2], + [14, 12] + ] + }, + line_opacity: { + stops: [ + [6, 0], + [7, 1] + ] + } +}; + +const motorway_outline = { + line_color: tokens.street_primary_outline, + line_width: { + stops: [ + [10, 0], + [11, 2], + [14, 14] + ] + } +}; + +const motorway_link = { + line_width: { + stops: [ + [6, 0], + [7, 1], + [12, 2], + [14, 6] + ] + } +}; + +const motorway_link_outline = { + line_width: { + stops: [ + [6, 0], + [7, 2], + [12, 3], + [14, 8] + ] + } +}; + +const street_primary = { + line_color: tokens.street_primary, + line_width: { + stops: [ + [8, 0], + [10, 1], + [12, 2], + [14, 3], + [16, 10], + [18, 34], + [19, 70], + [20, 140] + ] + }, + line_opacity: { + stops: [ + [8, 0], + [9, 1] + ] + } +}; +const street_primary_outline = { + line_color: tokens.street_primary_outline, + line_width: { + stops: [ + [11, 0], + [14, 5], + [16, 12], + [18, 36], + [19, 74], + [20, 144] + ] + }, + line_opacity: { + stops: [ + [8, 0], + [9, 1] + ] + } +}; + +const street_secondary = { + line_width: { + stops: [ + [11, 1], + [14, 4], + [16, 6], + [18, 28], + [19, 64], + [20, 130] + ] + } +}; +const street_secondary_outline = { + line_width: { + stops: [ + [12, 2], + [14, 5], + [16, 7], + [18, 14], + [20, 40] + ] + } +}; + +const street_residential = { + line_color: tokens.street_tertiary, + line_width: { + stops: [ + [13, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; + +const street_residential_outline = { + line_color: tokens.street_tertiary_outline, + line_width: { + stops: [ + [14, 0], + [15, 4] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; + +export default function makeRoads() { + const roadLabels: Layer[] = [ + { + source: 'versatiles-osm', + id: 'label-street-livingstreet', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'living_street'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': 'hsl(240,0%,23%)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2, + 'text-halo-blur': 1 + }, + minzoom: 14 + }, + { + source: 'versatiles-osm', + id: 'label-street-residential', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'residential'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': 'hsl(240,0%,23%)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2, + 'text-halo-blur': 1 + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'label-street-unclassified', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'unclassified'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': tokens.label_secondary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + source: 'versatiles-osm', + id: 'label-street-tertiary', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'tertiary'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': 'hsl(240,0%,23%)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2, + 'text-halo-blur': 1 + }, + minzoom: 14 + }, + { + source: 'versatiles-osm', + id: 'label-street-secondary', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'secondary'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + source: 'versatiles-osm', + id: 'label-street-primary', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'primary'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2 + }, + minzoom: 14 + }, + { + source: 'versatiles-osm', + id: 'label-street-trunk', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'trunk'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': tokens.label_primary, + 'text-halo-color': tokens.background, + 'text-halo-width': 2 + }, + minzoom: 13 + }, + ] + const roadBridges: Layer[] = [ + { + source: 'versatiles-osm', + id: 'bridge-street-service:bridge', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bridge', true], + ['!=', 'service', 'driveway'] + ], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + }, + 'line-width': { + stops: [ + [14, 3], + [16, 6], + [18, 25], + [19, 67], + [20, 134] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-livingstreet:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-residential:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': street_residential.line_color, + 'line-opacity': street_residential.line_opacity, + 'line-width': street_residential.line_opacity + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-unclassified:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-tertiary-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-secondary-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 10], + [18, 20], + [20, 56] + ] + } + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-primary-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-trunk-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': motorway.line_color, + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 10], + [18, 20], + [20, 56] + ] + } + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-motorway-link:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width, + 'line-opacity': motorway.line_opacity + }, + minzoom: 12 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-tertiary:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-secondary:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + }, + 'line-width': { + stops: [ + [11, 3], + [14, 7], + [16, 11], + [18, 42], + [19, 95], + [20, 193] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-primary:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-trunk:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': motorway.line_color, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-motorway:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-service:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bridge', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-livingstreet:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-residential:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], + paint: { + 'line-color': street_residential_outline.line_color, + 'line-width': street_residential_outline.line_width, + 'line-opacity': street_residential_outline.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-unclassified:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-tertiary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-secondary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + paint: { + 'line-color': 'hsl(28,0%,69%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 7], + [18, 14], + [20, 40] + ] + } + }, + layout: street_layout, + minzoom: 13 + }, + { + 'source-layer': 'streets', + source: 'versatiles-osm', + id: 'bridge-street-primary-link:outline', + type: 'line', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-trunk-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-motorway-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_link_outline.line_width + }, + layout: street_layout, + minzoom: 12 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-tertiary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-secondary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + paint: { + 'line-color': 'hsl(28,0%,69%)', + 'line-width': { + stops: [ + [11, 2], + [14, 5], + [16, 8], + [18, 30], + [19, 68], + [20, 138] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-primary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + paint: { + 'line-color': street_primary_outline.line_color, + 'line-width': street_primary_outline.line_width + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-trunk:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-motorway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-service', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bridge', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-livingstreet', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'bridge', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-residential', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'bridge', true]], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-unclassified', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'bridge', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-tertiary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-secondary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + paint: { + 'line-color': 'hsl(48,0%,83%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 12], + [20, 38] + ] + } + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-primary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-trunk-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-motorway-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout, + minzoom: 12 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-tertiary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-secondary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_secondary, + 'line-width': street_secondary.line_width, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-primary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width, + 'line-opacity': { + stops: [ + [8, 0], + [9, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-trunk', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-motorway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout + }, + ] + const roadTunnels: Layer[] = [ + { + source: 'versatiles-osm', + id: 'tunnel-street-service:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-livingstreet:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-residential:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'tunnel', true]], + paint: { + 'line-color': street_residential_outline.line_color, + 'line-width': street_residential_outline.line_width, + 'line-opacity': street_residential_outline.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-unclassified:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-tertiary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-secondary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + paint: { + 'line-color': 'rgb(180,180,180)', + 'line-dasharray': [1, 0.3], + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 7], + [18, 14], + [20, 40] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-primary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + paint: { + 'line-color': street_primary_outline.line_color, + 'line-dasharray': [1, 0.3], + 'line-width': street_primary_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-trunk-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-motorway-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_link_outline.line_width, + 'line-dasharray': [1, 0.3] + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 12 + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-tertiary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-secondary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(180,180,180)', + 'line-dasharray': [1, 0.3], + 'line-width': { + stops: [ + [11, 2], + [14, 5], + [16, 8], + [18, 30], + [19, 68], + [20, 138] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-primary:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary_outline, + 'line-dasharray': [1, 0.3], + 'line-width': { + stops: [ + [8, 0], + [9, 1], + [10, 4], + [14, 6], + [16, 12], + [18, 36], + [19, 74], + [20, 144] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-trunk:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-dasharray': [1, 0.3], + 'line-width': motorway_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-motorway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width, + 'line-dasharray': [1, 0.3] + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-service', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-livingstreet', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'living_street'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-residential', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'residential'], ['==', 'tunnel', true]], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-unclassified', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'unclassified'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-tertiary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['==', 'link', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-secondary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_secondary, + 'line-width': street_secondary.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-primary-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['==', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-trunk-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width + }, + layout: street_layout, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-motorway-link', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['==', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout, + minzoom: 12 + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-tertiary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'tertiary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-secondary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'secondary'], ['!=', 'link', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [11, 1], + [14, 4], + [16, 6], + [18, 28], + [19, 64], + [20, 130] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-primary', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'primary'], ['!=', 'link', true]], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width, + 'line-opacity': { + stops: [ + [8, 0], + [9, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-trunk', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'trunk'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': { + stops: [ + [7, 0], + [8, 0.75] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-motorway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'motorway'], ['!=', 'link', true]], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: street_layout + }, + ] + + const roadSurface: Layer[] = [{ + source: 'versatiles-osm', + id: 'street-service:outline', // See: https://wiki.openstreetmap.org/wiki/Tag:highway%3Dservice + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-livingstreet:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-residential:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': street_residential_outline.line_color, + 'line-width': street_residential_outline.line_width, + 'line-opacity': street_residential_outline.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-unclassified:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-tertiary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'tertiary'], + ['==', 'link', true] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-secondary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'secondary'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_secondary_outline, + 'line-width': street_secondary_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'street-primary-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'primary'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_primary_outline, + 'line-width': street_primary_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'street-trunk-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'trunk'], + ['==', 'link', true] + ], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_link_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'street-motorway-link:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'motorway'], + ['==', 'link', true] + ], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_link_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + }, + minzoom: 12 + }, + { + source: 'versatiles-osm', + id: 'street-tertiary:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'tertiary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-secondary:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'secondary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': 'hsl(28,0%,69%)', + 'line-width': { + stops: [ + [11, 2], + [14, 5], + [16, 8], + [18, 30], + [19, 68], + [20, 138] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-primary:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'primary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': street_primary_outline.line_color, + 'line-width': street_primary_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + } + }, + { + source: 'versatiles-osm', + id: 'street-trunk:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'trunk'], + ['!=', 'link', true] + ], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + } + }, + { + source: 'versatiles-osm', + id: 'street-motorway:outline', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'motorway'], + ['!=', 'link', true] + ], + paint: { + 'line-color': motorway_outline.line_color, + 'line-width': motorway_outline.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'butt' + } + }, + { + source: 'versatiles-osm', + id: 'street-service', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-livingstreet', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-residential', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-unclassified', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, { + source: 'versatiles-osm', + id: 'street-tertiary-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'tertiary'], + ['==', 'link', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-secondary-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'secondary'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_secondary, + 'line-width': street_secondary.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'street-primary-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'primary'], + ['==', 'link', true] + ], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'street-trunk-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'trunk'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 13 + }, + { + source: 'versatiles-osm', + id: 'street-motorway-link', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'motorway'], + ['==', 'link', true] + ], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway_link.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + }, + minzoom: 12 + }, + { + source: 'versatiles-osm', + id: 'street-tertiary', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'tertiary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-secondary', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'secondary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': tokens.street_secondary, + 'line-width': street_secondary.line_width, + 'line-opacity': { + stops: [ + [9, 0], + [10, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-primary', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'primary'], + ['!=', 'link', true] + ], + paint: { + 'line-color': street_primary.line_color, + 'line-width': street_primary.line_width, + 'line-opacity': { + stops: [ + [8, 0], + [9, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-trunk', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'trunk'], + ['!=', 'link', true] + ], + paint: { + 'line-color': motorway.line_color, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-motorway', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['in', 'kind', 'motorway'], + ['!=', 'link', true] + ], + paint: { + 'line-color': tokens.street_primary, + 'line-width': motorway.line_width, + 'line-opacity': motorway.line_opacity + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + },] + + return { roadLabels, roadBridges, roadSurface, roadTunnels } +} \ No newline at end of file diff --git a/components/src/MapStyle/components/Transit.ts b/components/src/MapStyle/components/Transit.ts new file mode 100644 index 00000000..fe6bfaf2 --- /dev/null +++ b/components/src/MapStyle/components/Transit.ts @@ -0,0 +1,557 @@ +import tokens from "../tokens"; +import type { Layer } from "./types"; + +const rail = { + line_color: '#d3d3d3', + line_dasharray: [2, 2], + line_width: { + stops: [ + [8, 1], + [13, 1], + [20, 2] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; + +const rail_overlay = { + line_width: { + stops: [ + [8, 1], + [13, 6], + [20, 12] + ] + }, + line_dasharray: [0.125, 6] +}; + +const rail_outline = { + line_color: tokens.background, + line_width: { + stops: [ + [13, 2], + [20, 4] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; + +export default function makeTransit() { + const airports = [{ + source: 'versatiles-osm', + id: 'airport-taxiway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['==', 'kind', 'taxiway'], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [13, 0], + [14, 2], + [15, 10], + [16, 14], + [18, 20], + [20, 40] + ] + } + }, + layout: { + 'line-join': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'airport-runway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['==', 'kind', 'runway'], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [11, 0], + [12, 6], + [13, 9], + [14, 16], + [15, 24], + [16, 40], + [17, 100], + [18, 160], + [20, 300] + ] + } + }, + layout: { + 'line-join': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'airport-taxiway', + type: 'line', + 'source-layer': 'streets', + filter: ['==', 'kind', 'taxiway'], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [13, 0], + [14, 1], + [15, 8], + [16, 12], + [18, 18], + [20, 36] + ] + }, + 'line-opacity': { + stops: [ + [13, 0], + [14, 1] + ] + } + }, + layout: { + 'line-join': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'airport-runway', + type: 'line', + 'source-layer': 'streets', + filter: ['==', 'kind', 'runway'], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [11, 0], + [12, 5], + [13, 8], + [14, 14], + [15, 22], + [16, 38], + [17, 98], + [18, 158], + [20, 298] + ] + }, + 'line-opacity': { + stops: [ + [11, 0], + [12, 1] + ] + } + }, + layout: { + 'line-join': 'round' + } + }] + + const transitBridges = [ + { + source: 'versatiles-osm', + id: 'bridge-transport-monorail:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 15, + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-funicular:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 15, + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-tram:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 15, + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-narrowgauge:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 15, + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-lightrail:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'bridge', true]], + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width, + 'line-opacity': rail_outline.line_opacity + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-rail:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'bridge', true]], + paint: { + 'line-color': rail_outline.line_color, + 'line-width': rail_outline.line_width, + 'line-opacity': rail_outline.line_opacity + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-monorail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-funicular', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-tram', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-narrowgauge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'bridge', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-lightrail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'bridge', true]], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + }, + { + source: 'versatiles-osm', + id: 'bridge-transport-rail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'bridge', true]], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + } + ] + + const transitTunnels: Layer[] = [ + { + source: 'versatiles-osm', + id: 'tunnel-transport-monorail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'monorail'], ['!has', 'service'], ['==', 'tunnel', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-transport-funicular', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'funicular'], ['!has', 'service'], ['==', 'tunnel', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-transport-tram', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'tram'], ['!has', 'service'], ['==', 'tunnel', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-transport-narrowgauge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'narrow_gauge'], ['!has', 'service'], ['==', 'tunnel', true]], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-transport-lightrail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'light_rail'], ['!has', 'service'], ['==', 'tunnel', true]], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-transport-rail', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['in', 'kind', 'rail'], ['!has', 'service'], ['==', 'tunnel', true]], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + } + ] + const transitSurface: Layer[] = [ + { + source: 'versatiles-osm', + id: 'transport-rail:dashes', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'rail'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': rail.line_color, + 'line-opacity': rail.line_opacity, + 'line-width': rail_overlay.line_width, + 'line-dasharray': rail_overlay.line_dasharray + } + }, + { + source: 'versatiles-osm', + id: 'transport-monorail', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'monorail'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + minzoom: 13, + paint: { + 'line-width': { + stops: [ + [13, 0], + [16, 1], + [17, 2], + [18, 3], + [20, 5] + ] + }, + 'line-color': 'hsl(208,0%,73%)' + } + }, + { + source: 'versatiles-osm', + id: 'transport-funicular', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'funicular'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + minzoom: 13, + paint: { + 'line-width': { + stops: [ + [13, 0], + [16, 1], + [17, 2], + [18, 3], + [20, 5] + ] + }, + 'line-color': 'hsl(208,0%,73%)' + } + }, + { + source: 'versatiles-osm', + id: 'transport-tram', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'tram'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'transport-narrowgauge', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'narrow_gauge'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + minzoom: 13, + paint: { + 'line-width': rail.line_width, + 'line-color': rail.line_color + } + }, + { + source: 'versatiles-osm', + id: 'transport-lightrail', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'light_rail'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'transport-rail', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['in', 'kind', 'rail'], + ['!has', 'service'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': rail.line_color, + 'line-width': rail.line_width, + 'line-opacity': rail.line_opacity + } + }, + { + source: 'versatiles-osm', + id: 'transport-ferry', + type: 'line', + 'source-layer': 'ferries', + minzoom: 10, + paint: { + 'line-color': 'rgb(184, 189, 207)', + 'line-width': { + stops: [ + [10, 1], + [13, 2], + [14, 3], + [16, 4], + [17, 6] + ] + }, + 'line-opacity': { + stops: [[10, 0]] + }, + 'line-dasharray': [1, 1] + } + }, + ] + + return { airports, transitBridges, transitSurface, transitTunnels } +} \ No newline at end of file diff --git a/components/src/MapStyle/components/Walking.ts b/components/src/MapStyle/components/Walking.ts new file mode 100644 index 00000000..0b058ab3 --- /dev/null +++ b/components/src/MapStyle/components/Walking.ts @@ -0,0 +1,1634 @@ +import { type Layer } from "./types" +import tokens from "../tokens"; + +const street_layout = { + 'line-join': 'round', + 'line-cap': 'butt' +}; + +const street_residential = { + line_color: tokens.street_tertiary, + line_width: { + stops: [ + [13, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; + +const street_residential_outline = { + line_color: tokens.street_tertiary_outline, + line_width: { + stops: [ + [14, 0], + [15, 4] + ] + }, + line_opacity: { + stops: [ + [12, 0], + [13, 1] + ] + } +}; + +export default function makeWalking(): any { + const walkingTunnels: Layer[] = [{ + id: 'tunnel-street-pedestrian-zone', + type: 'fill', + 'source-layer': 'street_polygons', + filter: ['all', ['==', 'tunnel', true], ['==', 'kind', 'pedestrian']], + paint: { + 'fill-color': 'rgb(247,247,247)', + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + } + }, + { + id: 'tunnel-way-footway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'hsl(0,0%,86%)' + }, + minzoom: 15 + }, + { + id: 'tunnel-way-steps:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'hsl(0,0%,86%)' + }, + minzoom: 15 + }, + { + id: 'tunnel-way-path:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'hsl(0,0%,86%)' + }, + minzoom: 15 + }, + { + id: 'tunnel-way-cycleway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'hsl(0,0%,87%)' + }, + minzoom: 15 + }, { + // See: https://wiki.openstreetmap.org/wiki/Tag:highway%3Dtrack + id: 'tunnel-street-track:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + id: 'tunnel-street-pedestrian:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(222,222,222)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + id: 'tunnel-way-footway', // See: https://wiki.openstreetmap.org/wiki/Tag:highway%3Dfootway + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(0,0%,94%)', + 'line-dasharray': [1, 0.2] + }, + minzoom: 15 + }, { + id: 'tunnel-way-steps', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(0,0%,94%)', + 'line-dasharray': [1, 0.2] + }, + minzoom: 15 + }, + { + id: 'tunnel-way-path', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(0,0%,94%)', + 'line-dasharray': [1, 0.2] + }, + minzoom: 15 + }, + { + id: 'tunnel-way-cycleway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'tunnel', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(0,0%,95%)', + 'line-dasharray': [1, 0.2] + }, + minzoom: 15 + }, + { + id: 'tunnel-street-track', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + id: 'tunnel-street-pedestrian', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'tunnel', true]], + paint: { + 'line-color': 'rgb(247,247,247)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, { + source: 'versatiles-osm', + id: 'tunnel-street-livingstreet-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-residential-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: street_layout + }, + { + id: 'tunnel-street-unclassified-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, { + source: 'versatiles-osm', + id: 'tunnel-street-track-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'track'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': 'rgb(247,247,247)' + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-pedestrian-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'pedestrian'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'tunnel-street-service-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bicycle', 'designated'], + ['==', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'rgb(247,247,247)' + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + },] + + walkingTunnels.forEach((_, index) => { + walkingTunnels[index]["source"] = "versatiles-osm" + }) + + const walkingSurface: Layer[] = [ + { + source: 'versatiles-osm', + id: 'street-pedestrian-zone', + type: 'fill', + 'source-layer': 'street_polygons', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['==', 'kind', 'pedestrian']], + paint: { + 'fill-color': 'rgba(245,245,245,0.25)', + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1], + [14, 0], + [15, 1] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'way-footway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'way-steps:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'way-path:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'way-cycleway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(222,222,222)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'street-track:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-pedestrian:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], + paint: { + 'line-color': 'hsl(36,0%,80%)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'way-footway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'way-steps', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'way-path', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'way-cycleway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['!=', 'bridge', true], ['!=', 'tunnel', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'round' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(203,0%,97%)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'street-track', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-pedestrian', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['!=', 'bridge', true], ['!=', 'tunnel', true]], + paint: { + 'line-color': tokens.street_tertiary, + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 0], + [14, 1] + ] + } + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-track-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'track'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)' + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-pedestrian-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'pedestrian'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'street-service-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)' + }, + layout: { + 'line-join': 'round', + 'line-cap': 'round' + } + }, + { + source: 'versatiles-osm', + id: 'street-livingstreet-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'street-residential-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'street-unclassified-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['==', 'bicycle', 'designated'], + ['!=', 'bridge', true], + ['!=', 'tunnel', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + } + ] + const walkingBridges: Layer[] = [ + { + source: 'versatiles-osm', + id: 'bridge-way-footway:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [15, 0], + [16, 7], + [18, 10], + [19, 17], + [20, 31] + ] + } + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-steps:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [15, 0], + [16, 7], + [18, 10], + [19, 17], + [20, 31] + ] + } + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-path:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [15, 0], + [16, 7], + [18, 10], + [19, 17], + [20, 31] + ] + } + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-cycleway:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': 0.5, + 'line-width': { + stops: [ + [15, 0], + [16, 7], + [18, 10], + [19, 17], + [20, 31] + ] + } + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-track:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + }, + 'line-width': { + stops: [ + [14, 3], + [16, 6], + [18, 25], + [19, 67], + [20, 134] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-pedestrian:bridge', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], + layout: { + 'line-cap': 'butt', + 'line-join': 'round' + }, + paint: { + 'line-color': 'rgb(239,239,239)', + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + }, + 'line-width': { + stops: [ + [12, 3], + [14, 4], + [16, 8], + [18, 36], + [19, 90], + [20, 179] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-street-pedestrian-zone', + type: 'fill', + 'source-layer': 'street_polygons', + filter: ['all', ['==', 'bridge', true], ['==', 'kind', 'pedestrian']], + paint: { + 'fill-color': 'hsl(0,0%,100%)', + 'fill-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + } + }, + { + source: 'versatiles-osm', + id: 'bridge-way-footway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-steps:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-path:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(220,220,220)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-cycleway:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 5], + [18, 7], + [19, 12], + [20, 22] + ] + }, + 'line-color': 'rgb(222,222,222)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-track:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [14, 2], + [16, 4], + [18, 18], + [19, 48], + [20, 96] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-pedestrian:outline', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], + paint: { + 'line-color': 'rgb(217,217,217)', + 'line-width': { + stops: [ + [12, 2], + [14, 3], + [16, 6], + [18, 26], + [19, 64], + [20, 128] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-way-footway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'footway']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-steps', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'steps']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-path', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'path']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'rgb(245,245,245)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-way-cycleway', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'bridge', true], ['in', 'kind', 'cycleway']], + layout: { + 'line-cap': 'butt' + }, + paint: { + 'line-width': { + stops: [ + [15, 0], + [16, 4], + [18, 6], + [19, 10], + [20, 20] + ] + }, + 'line-color': 'hsl(203,0%,97%)' + }, + minzoom: 15 + }, + { + source: 'versatiles-osm', + id: 'bridge-street-track', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'track'], ['==', 'bridge', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [14, 1], + [16, 3], + [18, 16], + [19, 44], + [20, 88] + ] + }, + 'line-opacity': { + stops: [ + [14, 0], + [15, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-pedestrian', + type: 'line', + 'source-layer': 'streets', + filter: ['all', ['==', 'kind', 'pedestrian'], ['==', 'bridge', true]], + paint: { + 'line-color': 'hsl(0,0%,100%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-track-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'track'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)' + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-pedestrian-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'pedestrian'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-service-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'service'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true], + ['!=', 'service', 'driveway'] + ], + paint: { + 'line-color': 'hsl(0,0%,100%)' + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-livingstreet-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'living_street'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-residential-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'residential'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': street_residential.line_color, + 'line-width': street_residential.line_width, + 'line-opacity': street_residential.line_opacity + }, + layout: street_layout + }, + { + source: 'versatiles-osm', + id: 'bridge-street-unclassified-bicycle', + type: 'line', + 'source-layer': 'streets', + filter: [ + 'all', + ['==', 'kind', 'unclassified'], + ['==', 'bicycle', 'designated'], + ['==', 'bridge', true] + ], + paint: { + 'line-color': 'hsl(203,0%,97%)', + 'line-width': { + stops: [ + [12, 1], + [14, 2], + [16, 5], + [18, 24], + [19, 60], + [20, 120] + ] + }, + 'line-opacity': { + stops: [ + [12, 0], + [13, 1] + ] + } + }, + layout: street_layout + }, + ] + + const walkingLabels: Layer[] = [{ + source: 'versatiles-osm', + id: 'label-street-pedestrian', + type: 'symbol', + 'source-layer': 'street_labels', + filter: ['==', 'kind', 'pedestrian'], + layout: { + 'text-field': '{name_de}', + 'text-font': tokens.sans_regular, + 'symbol-placement': 'line', + 'text-anchor': 'center', + 'text-size': { + stops: [ + [12, 10], + [15, 13] + ] + } + }, + paint: { + 'text-color': 'hsl(240,0%,23%)', + 'text-halo-color': 'hsla(0,0%,100%,0.8)', + 'text-halo-width': 2, + 'text-halo-blur': 1 + }, + minzoom: 14 + },] + + return { walkingTunnels, walkingSurface, walkingBridges, walkingLabels } +} \ No newline at end of file diff --git a/components/src/MapStyle/components/types.ts b/components/src/MapStyle/components/types.ts new file mode 100644 index 00000000..b3f50f2f --- /dev/null +++ b/components/src/MapStyle/components/types.ts @@ -0,0 +1,3 @@ +import type { BackgroundLayerSpecification, FillLayerSpecification, LineLayerSpecification, SymbolLayerSpecification } from "maplibre-gl" + +export type Layer = LineLayerSpecification | FillLayerSpecification | SymbolLayerSpecification | BackgroundLayerSpecification diff --git a/components/src/MapStyle/index.js b/components/src/MapStyle/index.js index 8d890b06..c5baf529 100644 --- a/components/src/MapStyle/index.js +++ b/components/src/MapStyle/index.js @@ -1,2 +1,2 @@ -import SWRDataBaseLight from './MapStyle'; +import SWRDataBaseLight from './SWRDataLight'; export { SWRDataBaseLight }; From a7d6049dd7003cd5c93353b983479a211849d55a Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 19 May 2025 17:06:45 +0200 Subject: [PATCH 31/76] improve directory structure --- .../src/GeocoderControl/GeocoderAPIs.ts | 49 ------------------- components/src/GeocoderControl/index.js | 2 - .../AttributionControl.stories.svelte | 3 +- .../AttributionControl.svelte | 1 + .../AttributionControl/index.js | 0 .../GeocoderControl}/GeocoderAPIs.ts | 0 .../GeocoderControl.stories.svelte | 2 +- .../GeocoderControl/GeocoderControl.svelte | 0 .../GeocoderControl}/index.js | 0 .../LinkToLocationControl.stories.svelte | 0 .../LinkToLocationControl.svelte | 5 +- .../LinkToLocationControl/index.js | 0 components/src/{ => maplibre}/Map/Map.mdx | 0 .../src/{ => maplibre}/Map/Map.stories.svelte | 2 +- components/src/{ => maplibre}/Map/Map.svelte | 2 +- components/src/{ => maplibre}/Map/index.js | 0 .../MapControl/MapControl.stories.svelte | 0 .../MapControl/MapControl.svelte | 6 +-- .../src/{ => maplibre}/MapControl/index.js | 0 .../src/{ => maplibre}/MapStyle/MapStyle.mdx | 1 - .../MapStyle/MapStyle.stories.svelte | 7 ++- .../{ => maplibre}/MapStyle/SWRDataLight.ts | 0 .../MapStyle/components/Admin.ts | 0 .../MapStyle/components/Buildings.ts | 2 +- .../MapStyle/components/Landuse.ts | 0 .../MapStyle/components/Natural.ts | 0 .../MapStyle/components/PlaceLabels.ts | 0 .../MapStyle/components/Roads.ts | 0 .../MapStyle/components/Transit.ts | 0 .../MapStyle/components/Walking.ts | 0 .../MapStyle/components/types.ts | 0 .../src/{ => maplibre}/MapStyle/index.js | 0 .../src/{ => maplibre}/MapStyle/tokens.ts | 0 .../NavigationControl.stories.svelte | 0 .../NavigationControl.svelte | 0 .../{ => maplibre}/NavigationControl/index.js | 0 .../ScaleControl/ScaleControl.stories.svelte | 0 .../ScaleControl/ScaleControl.svelte | 2 +- .../src/{ => maplibre}/ScaleControl/index.js | 0 .../Source}/MapSource.stories.svelte | 0 .../Source}/MapSource.svelte | 2 +- .../{MapSource => maplibre/Source}/index.js | 0 .../{MapSource => maplibre/Source}/source.ts | 0 .../Tooltip}/MapTooltip.stories.svelte | 7 +-- .../Tooltip}/MapTooltip.svelte | 2 +- .../{MapTooltip => maplibre/Tooltip}/index.js | 0 .../MapVectorLayer.stories.svelte | 2 +- .../VectorLayer}/MapVectorLayer.svelte | 5 +- .../VectorLayer}/index.js | 0 .../VectorTileSource/VectorTileSource.mdx | 0 .../VectorTileSource.stories.svelte | 0 .../VectorTileSource/VectorTileSource.svelte | 2 +- .../{ => maplibre}/VectorTileSource/index.js | 0 .../src/{Map => maplibre}/context.svelte.ts | 2 +- components/src/{Map => maplibre}/utils.ts | 0 55 files changed, 31 insertions(+), 75 deletions(-) delete mode 100644 components/src/GeocoderControl/GeocoderAPIs.ts delete mode 100644 components/src/GeocoderControl/index.js rename components/src/{ => maplibre}/AttributionControl/AttributionControl.stories.svelte (90%) rename components/src/{ => maplibre}/AttributionControl/AttributionControl.svelte (99%) rename components/src/{ => maplibre}/AttributionControl/index.js (100%) rename components/src/{GeoCoderControl => maplibre/GeocoderControl}/GeocoderAPIs.ts (100%) rename components/src/{ => maplibre}/GeocoderControl/GeocoderControl.stories.svelte (90%) rename components/src/{ => maplibre}/GeocoderControl/GeocoderControl.svelte (100%) rename components/src/{GeoCoderControl => maplibre/GeocoderControl}/index.js (100%) rename components/src/{ => maplibre}/LinkToLocationControl/LinkToLocationControl.stories.svelte (100%) rename components/src/{ => maplibre}/LinkToLocationControl/LinkToLocationControl.svelte (96%) rename components/src/{ => maplibre}/LinkToLocationControl/index.js (100%) rename components/src/{ => maplibre}/Map/Map.mdx (100%) rename components/src/{ => maplibre}/Map/Map.stories.svelte (97%) rename components/src/{ => maplibre}/Map/Map.svelte (99%) rename components/src/{ => maplibre}/Map/index.js (100%) rename components/src/{ => maplibre}/MapControl/MapControl.stories.svelte (100%) rename components/src/{ => maplibre}/MapControl/MapControl.svelte (89%) rename components/src/{ => maplibre}/MapControl/index.js (100%) rename components/src/{ => maplibre}/MapStyle/MapStyle.mdx (99%) rename components/src/{ => maplibre}/MapStyle/MapStyle.stories.svelte (77%) rename components/src/{ => maplibre}/MapStyle/SWRDataLight.ts (100%) rename components/src/{ => maplibre}/MapStyle/components/Admin.ts (100%) rename components/src/{ => maplibre}/MapStyle/components/Buildings.ts (91%) rename components/src/{ => maplibre}/MapStyle/components/Landuse.ts (100%) rename components/src/{ => maplibre}/MapStyle/components/Natural.ts (100%) rename components/src/{ => maplibre}/MapStyle/components/PlaceLabels.ts (100%) rename components/src/{ => maplibre}/MapStyle/components/Roads.ts (100%) rename components/src/{ => maplibre}/MapStyle/components/Transit.ts (100%) rename components/src/{ => maplibre}/MapStyle/components/Walking.ts (100%) rename components/src/{ => maplibre}/MapStyle/components/types.ts (100%) rename components/src/{ => maplibre}/MapStyle/index.js (100%) rename components/src/{ => maplibre}/MapStyle/tokens.ts (100%) rename components/src/{ => maplibre}/NavigationControl/NavigationControl.stories.svelte (100%) rename components/src/{ => maplibre}/NavigationControl/NavigationControl.svelte (100%) rename components/src/{ => maplibre}/NavigationControl/index.js (100%) rename components/src/{ => maplibre}/ScaleControl/ScaleControl.stories.svelte (100%) rename components/src/{ => maplibre}/ScaleControl/ScaleControl.svelte (91%) rename components/src/{ => maplibre}/ScaleControl/index.js (100%) rename components/src/{MapSource => maplibre/Source}/MapSource.stories.svelte (100%) rename components/src/{MapSource => maplibre/Source}/MapSource.svelte (94%) rename components/src/{MapSource => maplibre/Source}/index.js (100%) rename components/src/{MapSource => maplibre/Source}/source.ts (100%) rename components/src/{MapTooltip => maplibre/Tooltip}/MapTooltip.stories.svelte (94%) rename components/src/{MapTooltip => maplibre/Tooltip}/MapTooltip.svelte (98%) rename components/src/{MapTooltip => maplibre/Tooltip}/index.js (100%) rename components/src/{MapVectorLayer => maplibre/VectorLayer}/MapVectorLayer.stories.svelte (95%) rename components/src/{MapVectorLayer => maplibre/VectorLayer}/MapVectorLayer.svelte (95%) rename components/src/{MapVectorLayer => maplibre/VectorLayer}/index.js (100%) rename components/src/{ => maplibre}/VectorTileSource/VectorTileSource.mdx (100%) rename components/src/{ => maplibre}/VectorTileSource/VectorTileSource.stories.svelte (100%) rename components/src/{ => maplibre}/VectorTileSource/VectorTileSource.svelte (89%) rename components/src/{ => maplibre}/VectorTileSource/index.js (100%) rename components/src/{Map => maplibre}/context.svelte.ts (95%) rename components/src/{Map => maplibre}/utils.ts (100%) diff --git a/components/src/GeocoderControl/GeocoderAPIs.ts b/components/src/GeocoderControl/GeocoderAPIs.ts deleted file mode 100644 index 75e84686..00000000 --- a/components/src/GeocoderControl/GeocoderAPIs.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { - type CarmenGeojsonFeature, - type MaplibreGeocoderApi, - type MaplibreGeocoderApiConfig, - type MaplibreGeocoderFeatureResults -} from "@maplibre/maplibre-gl-geocoder" - -export class MaptilerGeocoderAPI implements MaplibreGeocoderApi { - key: string - - constructor(key: string) { - this.key = key - } - - async forwardGeocode(config: MaplibreGeocoderApiConfig): Promise { - const result: MaplibreGeocoderFeatureResults = { - type: 'FeatureCollection', - features: [] - }; - try { - const response = await fetch( - `https://api.maptiler.com/geocoding/${config.query}.json?country=${config.countries}&language=${config.language}&key=${this.key}` - ); - const geojson = await response.json(); - for (const feature of geojson.features) { - const res: CarmenGeojsonFeature = { - type: 'Feature', - id: feature.id, - place_type: ['place'], - place_name: feature.place_name, - language: feature.properties.display_name, - text: feature.text, - bbox: feature.bbox, - geometry: { - type: 'Point', - coordinates: feature.center - }, - properties: { - text: feature.text - } - }; - result.features.push(res); - } - } catch (e) { - console.error(`Failed to forwardGeocode with error: ${e}`); - } - return result; - } -} \ No newline at end of file diff --git a/components/src/GeocoderControl/index.js b/components/src/GeocoderControl/index.js deleted file mode 100644 index fe365908..00000000 --- a/components/src/GeocoderControl/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import GeocoderControl from './GeocoderControl.svelte'; -export default GeocoderControl; diff --git a/components/src/AttributionControl/AttributionControl.stories.svelte b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte similarity index 90% rename from components/src/AttributionControl/AttributionControl.stories.svelte rename to components/src/maplibre/AttributionControl/AttributionControl.stories.svelte index 27f0196b..96466d67 100644 --- a/components/src/AttributionControl/AttributionControl.stories.svelte +++ b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte @@ -1,8 +1,9 @@ diff --git a/components/src/MapControl/index.js b/components/src/maplibre/MapControl/index.js similarity index 100% rename from components/src/MapControl/index.js rename to components/src/maplibre/MapControl/index.js diff --git a/components/src/MapStyle/MapStyle.mdx b/components/src/maplibre/MapStyle/MapStyle.mdx similarity index 99% rename from components/src/MapStyle/MapStyle.mdx rename to components/src/maplibre/MapStyle/MapStyle.mdx index 8a4d8e75..098365f0 100644 --- a/components/src/MapStyle/MapStyle.mdx +++ b/components/src/maplibre/MapStyle/MapStyle.mdx @@ -25,5 +25,4 @@ The actual layering order needs to be more sophisticated {SWRDataLight.layers.length} layers - diff --git a/components/src/MapStyle/MapStyle.stories.svelte b/components/src/maplibre/MapStyle/MapStyle.stories.svelte similarity index 77% rename from components/src/MapStyle/MapStyle.stories.svelte rename to components/src/maplibre/MapStyle/MapStyle.stories.svelte index 2ecf27de..44bd5229 100644 --- a/components/src/MapStyle/MapStyle.stories.svelte +++ b/components/src/maplibre/MapStyle/MapStyle.stories.svelte @@ -1,7 +1,8 @@ + + + + + + From 76e64c94918d5d39b9da42e1339ce3fe58e1d273 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 19 May 2025 18:28:36 +0200 Subject: [PATCH 33/76] Fix type issues --- .../LinkToLocationControl.svelte | 3 +-- components/src/maplibre/Map/Map.svelte | 20 +++++++++---------- .../MapStyle/components/PlaceLabels.ts | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte index 536eed35..8f7a0c31 100644 --- a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte +++ b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte @@ -49,9 +49,8 @@ limit: 1 }; const res = await geocoder.forwardGeocode(config); - console.log(res.features[0]); if (res.features[0].bbox && res.features[0].geometry.type === 'Point') { - map.jumpTo({ + map?.jumpTo({ center: [ res.features[0].geometry.coordinates[0], res.features[0].geometry.coordinates[1] diff --git a/components/src/maplibre/Map/Map.svelte b/components/src/maplibre/Map/Map.svelte index cf9b7312..22962a4d 100644 --- a/components/src/maplibre/Map/Map.svelte +++ b/components/src/maplibre/Map/Map.svelte @@ -59,17 +59,17 @@ }); mapContext.map.on('load', () => { - zoom = mapContext.map.getZoom(); - center = mapContext.map.getCenter(); - pitch = mapContext.map.getPitch(); - bearing = mapContext.map.getBearing(); + zoom = mapContext.map?.getZoom(); + center = mapContext.map?.getCenter(); + pitch = mapContext.map?.getPitch(); + bearing = mapContext.map?.getBearing(); }); mapContext.map.on('moveend', () => { - zoom = mapContext.map.getZoom(); - center = mapContext.map.getCenter(); - pitch = mapContext.map.getPitch(); - bearing = mapContext.map.getBearing(); + zoom = mapContext.map?.getZoom(); + center = mapContext.map?.getCenter(); + pitch = mapContext.map?.getPitch(); + bearing = mapContext.map?.getBearing(); }); }); @@ -83,9 +83,9 @@ $effect(() => { if (allowRotation) { - mapContext.map.touchZoomRotate.enableRotation(); + mapContext.map?.touchZoomRotate.enableRotation(); } else { - mapContext.map.touchZoomRotate.disableRotation(); + mapContext.map?.touchZoomRotate.disableRotation(); } }); diff --git a/components/src/maplibre/MapStyle/components/PlaceLabels.ts b/components/src/maplibre/MapStyle/components/PlaceLabels.ts index 2e481fd1..9e99bd49 100644 --- a/components/src/maplibre/MapStyle/components/PlaceLabels.ts +++ b/components/src/maplibre/MapStyle/components/PlaceLabels.ts @@ -3,7 +3,7 @@ import tokens from "../tokens" import type { SymbolLayerSpecification } from "maplibre-gl" export default function makePlaceLabels() { - const placeLabels: Layer[] = [ + const placeLabels: SymbolLayerSpecification[] = [ { id: 'label-place-neighbourhood', filter: ['==', 'kind', 'neighbourhood'], From f35a7df6aed61715bc69ee802ce0901f4d56ef12 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Mon, 19 May 2025 18:29:54 +0200 Subject: [PATCH 34/76] Fix import --- .../maplibre/LinkToLocationControl/LinkToLocationControl.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte index 8f7a0c31..8608e73c 100644 --- a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte +++ b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte @@ -1,6 +1,6 @@ diff --git a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte index b58f3664..b426b9da 100644 --- a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte +++ b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte @@ -1,9 +1,38 @@ + + + +
+ + + +
+
+
+ + + +
+ + + +
+
+
+ + diff --git a/components/src/maplibre/NavigationControl/NavigationControl.svelte b/components/src/maplibre/NavigationControl/NavigationControl.svelte index d5ec3d0f..ad0753eb 100644 --- a/components/src/maplibre/NavigationControl/NavigationControl.svelte +++ b/components/src/maplibre/NavigationControl/NavigationControl.svelte @@ -4,6 +4,9 @@ interface NavigationControlProps { showCompass?: boolean; + /** + * Show 3d tilt in the compass control. Requires `showCompass` to be `true` + */ visualizePitch?: boolean; position?: ControlPosition; } diff --git a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte index 13d12a3f..7e254209 100644 --- a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte +++ b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte @@ -1,9 +1,70 @@ + + { + const canvas = within(canvasElement); + const containerEl = canvas.getByTestId('map-container'); + await step('Scale control renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-scale'); + expect(el).toBeTruthy(); + }); + await step('Distance is rendered in metric units', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-scale'); + expect(el).toHaveTextContent('100 m'); + }); + }} +> + +
+ + + +
+
+
+ + { + const canvas = within(canvasElement); + const containerEl = canvas.getByTestId('map-container'); + await step('Scale control renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-scale'); + expect(el).toBeTruthy(); + }); + await step('Distance is rendered in imperial units', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-scale'); + expect(el).toHaveTextContent('300 ft'); + }); + }} +> + +
+ + + +
+
+
+ + diff --git a/components/src/maplibre/Tooltip/MapTooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte similarity index 85% rename from components/src/maplibre/Tooltip/MapTooltip.stories.svelte rename to components/src/maplibre/Tooltip/Tooltip.stories.svelte index a34c606d..4db9ff21 100644 --- a/components/src/maplibre/Tooltip/MapTooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -5,13 +5,13 @@ import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import Map from '../Map/Map.svelte'; import VectorTileSource from '../VectorTileSource/VectorTileSource.svelte'; - import MapVectorLayer from '../VectorLayer/MapVectorLayer.svelte'; + import VectorLayer from '../VectorLayer/VectorLayer.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; - import MapTooltip from './MapTooltip.svelte'; + import Tooltip from './Tooltip.svelte'; const { Story } = defineMeta({ - title: 'Map/MapTooltip', - component: MapTooltip + title: 'Map/Tooltip', + component: Tooltip }); let hovered = $state() as MapGeoJSONFeature | undefined; @@ -26,7 +26,7 @@ id="ev-infra-source" url={`https://static.datenhub.net/data/p108_e_auto_check/ev_infra_merged.versatiles?tiles/{z}/{x}/{y}`} /> - - + {#if hovered} - +
{Object.entries(hovered.properties)
 								.map(([key, val]) => `${key}: ${val}`)
 								.join('\n')}
-
+ {/if}
diff --git a/components/src/maplibre/Tooltip/MapTooltip.svelte b/components/src/maplibre/Tooltip/Tooltip.svelte similarity index 98% rename from components/src/maplibre/Tooltip/MapTooltip.svelte rename to components/src/maplibre/Tooltip/Tooltip.svelte index ca5fe621..1013d706 100644 --- a/components/src/maplibre/Tooltip/MapTooltip.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.svelte @@ -3,7 +3,7 @@ import { type LngLatLike, Popup } from 'maplibre-gl'; import { getMapContext } from '../context.svelte.ts'; - interface MapTooltipProps { + interface TooltipProps { position: LngLatLike | undefined; children?: Snippet; maxWidth?: number; @@ -30,7 +30,7 @@ showCloseButton = false, closeOnClick = true, mouseEvents = false - }: MapTooltipProps = $props(); + }: TooltipProps = $props(); const { map } = $derived(getMapContext()); diff --git a/components/src/maplibre/Tooltip/index.js b/components/src/maplibre/Tooltip/index.js index dd98a551..3a23b131 100644 --- a/components/src/maplibre/Tooltip/index.js +++ b/components/src/maplibre/Tooltip/index.js @@ -1,2 +1,2 @@ -import MapTooltip from './MapTooltip.svelte'; -export default MapTooltip; +import Tooltip from './Tooltip.svelte'; +export default Tooltip; diff --git a/components/src/maplibre/VectorLayer/MapVectorLayer.stories.svelte b/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte similarity index 88% rename from components/src/maplibre/VectorLayer/MapVectorLayer.stories.svelte rename to components/src/maplibre/VectorLayer/VectorLayer.stories.svelte index 2f33c9e7..b8007660 100644 --- a/components/src/maplibre/VectorLayer/MapVectorLayer.stories.svelte +++ b/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte @@ -1,14 +1,14 @@ @@ -20,7 +20,7 @@ id="ev-infra-source" url={`https://static.datenhub.net/data/p108_e_auto_check/ev_infra_merged.versatiles?tiles/{z}/{x}/{y}`} /> - - + Date: Tue, 20 May 2025 11:21:21 +0200 Subject: [PATCH 41/76] Add msw plugin --- components/package.json | 144 +++++++-------- package-lock.json | 385 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 458 insertions(+), 71 deletions(-) diff --git a/components/package.json b/components/package.json index 6a17d668..77961892 100644 --- a/components/package.json +++ b/components/package.json @@ -1,72 +1,74 @@ { - "name": "@swr-data-lab/components", - "description": "SWR Data Lab component library", - "author": "SWR Data Lab", - "publishConfig": { - "access": "restricted" - }, - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "storybook": "storybook dev -p 6006", - "start": "storybook dev -p 6006", - "build-storybook": "storybook build --disable-telemetry", - "test-storybook": "vitest run --project=storybook", - "test-storybook:ci": "concurrently -k -s first -n \"Storybook,Test\" -c \"magenta,blue\" \"npm run build-storybook --quiet && npx http-server storybook-static --port 6006 --silent\" \"wait-on tcp:6006 && npm run test-storybook\"", - "semantic-release": "semantic-release" - }, - "dependencies": { - "svelte-select": "^5.8.3", - "@maplibre/maplibre-gl-geocoder": "^1.8.0", - "maplibre-gl": "^5.5.0" - }, - "devDependencies": { - "@chromatic-com/storybook": "^4.0.0-next.6", - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/git": "^10.0.1", - "@semantic-release/npm": "^12.0.1", - "@storybook/addon-docs": "^9.0.0-beta.11", - "@storybook/addon-links": "^9.0.0-beta.11", - "@storybook/addon-svelte-csf": "^5.0.0-next.30", - "@storybook/addon-vitest": "^9.0.0-beta.11", - "@storybook/sveltekit": "^9.0.0-beta.11", - "@storybook/test-runner": "^0.23.0-next.1", - "@sveltejs/adapter-auto": "^3.0.0", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^5.0.3", - "@vitest/browser": "^3.1.1", - "@vitest/coverage-v8": "^3.1.1", - "concurrently": "^9.0.1", - "http-server": "^14.1.1", - "playwright": "^1.51.1", - "sass-embedded": "^1.78.0", - "semantic-release": "^24.1.2", - "storybook": "^9.0.0-beta.11", - "svelte": "^5.23.0", - "svelte-check": "^4.0.0", - "typescript": "^5.0.0", - "vite": "^6.0.0", - "vitest": "^3.1.1", - "wait-on": "^8.0.1" - }, - "type": "module", - "release": { - "plugins": [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", - "@semantic-release/npm" - ] - }, - "exports": { - ".": { - "svelte": "./src/index.js" - } - }, - "version": "1.0.6", - "overrides": { - "storybook": "$storybook" - } -} \ No newline at end of file + "name": "@swr-data-lab/components", + "description": "SWR Data Lab component library", + "author": "SWR Data Lab", + "publishConfig": { + "access": "restricted" + }, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "storybook": "storybook dev -p 6006", + "start": "storybook dev -p 6006", + "build-storybook": "storybook build --disable-telemetry", + "test-storybook": "vitest run --project=storybook", + "test-storybook:ci": "concurrently -k -s first -n \"Storybook,Test\" -c \"magenta,blue\" \"npm run build-storybook --quiet && npx http-server storybook-static --port 6006 --silent\" \"wait-on tcp:6006 && npm run test-storybook\"", + "semantic-release": "semantic-release" + }, + "dependencies": { + "@maplibre/maplibre-gl-geocoder": "^1.8.0", + "maplibre-gl": "^5.5.0", + "svelte-select": "^5.8.3" + }, + "devDependencies": { + "@chromatic-com/storybook": "^4.0.0-next.6", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/git": "^10.0.1", + "@semantic-release/npm": "^12.0.1", + "@storybook/addon-docs": "^9.0.0-beta.11", + "@storybook/addon-links": "^9.0.0-beta.11", + "@storybook/addon-svelte-csf": "^5.0.0-next.30", + "@storybook/addon-vitest": "^9.0.0-beta.11", + "@storybook/sveltekit": "^9.0.0-beta.11", + "@storybook/test-runner": "^0.23.0-next.1", + "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@vitest/browser": "^3.1.1", + "@vitest/coverage-v8": "^3.1.1", + "concurrently": "^9.0.1", + "http-server": "^14.1.1", + "msw": "^2.8.4", + "msw-storybook-addon": "^2.0.4", + "playwright": "^1.51.1", + "sass-embedded": "^1.78.0", + "semantic-release": "^24.1.2", + "storybook": "^9.0.0-beta.11", + "svelte": "^5.23.0", + "svelte-check": "^4.0.0", + "typescript": "^5.0.0", + "vite": "^6.0.0", + "vitest": "^3.1.1", + "wait-on": "^8.0.1" + }, + "type": "module", + "release": { + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/npm" + ] + }, + "exports": { + ".": { + "svelte": "./src/index.js" + } + }, + "version": "1.0.6", + "overrides": { + "storybook": "$storybook" + } +} diff --git a/package-lock.json b/package-lock.json index 9fe6c5c8..26fa2842 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,8 @@ "@vitest/coverage-v8": "^3.1.1", "concurrently": "^9.0.1", "http-server": "^14.1.1", + "msw": "^2.8.4", + "msw-storybook-addon": "^2.0.4", "playwright": "^1.51.1", "sass-embedded": "^1.78.0", "semantic-release": "^24.1.2", @@ -1431,6 +1433,43 @@ "integrity": "sha512-/g5EzJifw5GF8aren8wZ/G5oMuPoGeS6MQD3ca8ddcvdXR5UELUfdTZITCGNhNXynY/AYl3Z4plmxdj/tRl/hQ==", "dev": true }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", + "dev": true, + "dependencies": { + "cookie": "^0.7.2" + } + }, + "node_modules/@bundled-es-modules/cookie/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dev": true, + "dependencies": { + "statuses": "^2.0.1" + } + }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "dev": true, + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -2176,6 +2215,118 @@ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" }, + "node_modules/@inquirer/confirm": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.10.tgz", + "integrity": "sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.11", + "@inquirer/type": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.11.tgz", + "integrity": "sha512-BXwI/MCqdtAhzNQlBEFE7CEflhPkl/BqvAuV/aK6lW3DClIfYVDWPP/kXuXHtBWC7/EEbNqd/1BGq2BGBBnuxw==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", + "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz", + "integrity": "sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -2796,6 +2947,23 @@ "react": ">=16" } }, + "node_modules/@mswjs/interceptors": { + "version": "0.37.6", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.6.tgz", + "integrity": "sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==", + "dev": true, + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2973,6 +3141,28 @@ "@octokit/openapi-types": "^24.2.0" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "dev": true + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -4510,6 +4700,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", + "dev": true + }, "node_modules/@types/supercluster": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", @@ -4518,6 +4714,12 @@ "@types/geojson": "*" } }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, "node_modules/@types/wait-on": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/@types/wait-on/-/wait-on-5.3.4.tgz", @@ -6017,6 +6219,15 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -8871,6 +9082,15 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/graphql": { + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", + "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -9003,6 +9223,12 @@ "he": "bin/he" } }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "dev": true + }, "node_modules/highlight.js": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", @@ -9550,6 +9776,12 @@ "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==" }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -11880,6 +12112,74 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/msw": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.8.4.tgz", + "integrity": "sha512-GLU8gx0o7RBG/3x/eTnnLd5S5ZInxXRRRMN8GJwaPZ4jpJTxzQfWGvwr90e8L5dkKJnz+gT4gQYCprLy/c4kVw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.1", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.37.0", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.26.1", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw-storybook-addon": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/msw-storybook-addon/-/msw-storybook-addon-2.0.4.tgz", + "integrity": "sha512-rstO8+r01sRMg6PPP7OxM8LG5/6r4+wmp2uapHeHvm9TQQRHvpPXOU/Y9/Somysz8Oi4Ea1aummXH3JlnP2LIA==", + "dev": true, + "dependencies": { + "is-node-process": "^1.0.1" + }, + "peerDependencies": { + "msw": "^2.0.0" + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/multimatch": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", @@ -11911,6 +12211,15 @@ "mustache": "bin/mustache" } }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -15091,6 +15400,12 @@ "node": ">=0.10.0" } }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "dev": true + }, "node_modules/p-each-series": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", @@ -16087,6 +16402,18 @@ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, "node_modules/pug": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", @@ -16240,6 +16567,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -18097,6 +18430,12 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -18806,6 +19145,30 @@ "node": ">=6" } }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/traverse": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", @@ -19072,6 +19435,16 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -19828,6 +20201,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zimmerframe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", From fba200244defbc6af1f8fb54570cd364018bc4d6 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 20 May 2025 11:21:26 +0200 Subject: [PATCH 42/76] Fix formatting --- components/.storybook/main.ts | 30 +- components/src/maplibre/Map/Map.mdx | 34 +- .../src/maplibre/Map/Map.stories.svelte | 2 + components/src/maplibre/MapStyle/MapStyle.mdx | 6 +- .../src/maplibre/MapStyle/SWRDataLight.ts | 33 +- .../src/maplibre/MapStyle/components/Admin.ts | 336 +- .../maplibre/MapStyle/components/Buildings.ts | 38 +- .../maplibre/MapStyle/components/Landuse.ts | 1013 ++-- .../maplibre/MapStyle/components/Natural.ts | 4 +- .../MapStyle/components/PlaceLabels.ts | 382 +- .../src/maplibre/MapStyle/components/Roads.ts | 4699 +++++++++-------- .../maplibre/MapStyle/components/Transit.ts | 983 ++-- .../maplibre/MapStyle/components/Walking.ts | 3045 +++++------ .../src/maplibre/MapStyle/components/types.ts | 4 +- components/src/maplibre/MapStyle/tokens.ts | 36 +- components/src/maplibre/Source/source.ts | 100 +- .../VectorTileSource/VectorTileSource.mdx | 15 +- components/src/maplibre/context.svelte.ts | 96 +- components/src/maplibre/utils.ts | 54 +- 19 files changed, 5476 insertions(+), 5434 deletions(-) diff --git a/components/.storybook/main.ts b/components/.storybook/main.ts index 9f5ef4ec..cc69d849 100644 --- a/components/.storybook/main.ts +++ b/components/.storybook/main.ts @@ -2,27 +2,31 @@ import { dirname, join } from 'path'; import type { StorybookConfig } from '@storybook/sveltekit'; function getAbsolutePath(value: string): any { - if (process.platform.includes("win")) { - return value + if (process.platform.includes('win')) { + return value; } else { return dirname(require.resolve(join(value, 'package.json'))); } } const config: StorybookConfig = { - stories: [ - '../src/**/*.stories.@(js|ts|svelte)', - '../src/**/*.mdx' - ], + staticDirs: ['../public'], + stories: ['../src/**/*.stories.@(js|ts|svelte)', '../src/**/*.mdx'], - addons: [{ - name: getAbsolutePath("@storybook/addon-svelte-csf"), - options: { - legacyTemplate: true - } - }, getAbsolutePath('@storybook/addon-links'), getAbsolutePath('@chromatic-com/storybook'), getAbsolutePath('@storybook/addon-vitest'), getAbsolutePath("@storybook/addon-docs")], + addons: [ + { + name: getAbsolutePath('@storybook/addon-svelte-csf'), + options: { + legacyTemplate: true + } + }, + getAbsolutePath('@storybook/addon-links'), + getAbsolutePath('@chromatic-com/storybook'), + getAbsolutePath('@storybook/addon-vitest'), + getAbsolutePath('@storybook/addon-docs') + ], framework: { - name: getAbsolutePath("@storybook/sveltekit"), + name: getAbsolutePath('@storybook/sveltekit'), options: {} }, diff --git a/components/src/maplibre/Map/Map.mdx b/components/src/maplibre/Map/Map.mdx index 84d0e9b8..be5783e9 100644 --- a/components/src/maplibre/Map/Map.mdx +++ b/components/src/maplibre/Map/Map.mdx @@ -1,37 +1,57 @@ -import { Story, Meta, Primary, Controls, Stories} from '@storybook/addon-docs/blocks'; +import { Story, Meta, Primary, Controls, Stories } from '@storybook/addon-docs/blocks'; import * as MapStories from './Map.stories.svelte'; - + # Map - - - + + Svelte components and modular basemaps for rendering custom slippy maps using the [versatiles](https://docs.versatiles.org/) stack. Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreise/blob/main/src/lib/components/Map/Map.svelte) from [Jakob Bauer](https://github.com/AgricolaJKB), [dimfield](https://github.com/dimfeld/svelte-maplibre) and [MIRUNE](https://github.com/MIERUNE/svelte-maplibre-gl). ## Sources + ### VectorTileSource + Loads a vector tile source + ## Layers + ### VectorLayer + Renders a layer from a vector tile source. + ## Controls + ### ScaleControl + Renders a dynamic scalebar. + ### NavigationControl + Renders zoom buttons + ### GeocoderControl + Renders a search input using [maplibre-gl-geocoder](https://github.com/maplibre/maplibre-gl-geocoder) and any supported forward geocoding service. Currently only [maptiler](https://www.maptiler.com/) is supported. + ### AttributionControl + Renders maplibre's default attribution control. + ### LinkToLocationControl -Allows you to forward-geocode and move the map to a location specified by the `location` URL parameter + +Allows you to forward-geocode and move the map to a location specified by the `location` URL parameter + ### Custom controls + ## Tooltips + ## Styles + ### SWR Data Light + ## Known issues -- Firefox throws warning `WebGL warning: texImage: Alpha-premult and y-flip are deprecated for non-DOM-Element uploads`: Known [upstream mapligre-gl issue](https://github.com/maplibre/maplibre-gl-js/issues/2030). \ No newline at end of file +- Firefox throws warning `WebGL warning: texImage: Alpha-premult and y-flip are deprecated for non-DOM-Element uploads`: Known [upstream mapligre-gl issue](https://github.com/maplibre/maplibre-gl-js/issues/2030). diff --git a/components/src/maplibre/Map/Map.stories.svelte b/components/src/maplibre/Map/Map.stories.svelte index dfd38ef1..1fb087ca 100644 --- a/components/src/maplibre/Map/Map.stories.svelte +++ b/components/src/maplibre/Map/Map.stories.svelte @@ -1,6 +1,7 @@ - +
diff --git a/components/src/maplibre/ScaleControl/ScaleControl.svelte b/components/src/maplibre/ScaleControl/ScaleControl.svelte index 3f48c0e2..7eac37d8 100644 --- a/components/src/maplibre/ScaleControl/ScaleControl.svelte +++ b/components/src/maplibre/ScaleControl/ScaleControl.svelte @@ -15,9 +15,8 @@ diff --git a/components/src/maplibre/Map/Map.svelte b/components/src/maplibre/Map/Map.svelte index c04b9031..15be0ce9 100644 --- a/components/src/maplibre/Map/Map.svelte +++ b/components/src/maplibre/Map/Map.svelte @@ -2,7 +2,7 @@ import maplibre, { type StyleSpecification } from 'maplibre-gl'; import { onMount, onDestroy, type Snippet } from 'svelte'; import { createMapContext } from '../context.svelte'; - import { SWRDataBaseLight } from '../MapStyle'; + import FallbackStyle from './FallbackStyle'; interface Location { lat: number; @@ -29,7 +29,7 @@ let { children, options, - style = SWRDataBaseLight, + style = FallbackStyle, minZoom = 0, maxZoom = 14.99, zoom = $bindable(), diff --git a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte b/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte index d582d4b1..61a0bebe 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte +++ b/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte @@ -3,7 +3,7 @@ import Map from '../Map/Map.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; - + import { SWRDataBaseLight } from './index'; const { Story } = defineMeta({ title: 'Map/Style/SWR Data Lab Light', component: Map @@ -15,6 +15,7 @@
diff --git a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte index b426b9da..5c017707 100644 --- a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte +++ b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte @@ -2,6 +2,7 @@ import { defineMeta } from '@storybook/addon-svelte-csf'; import NavigationControl from './NavigationControl.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; + import { SWRDataBaseLight } from '../MapStyle'; import Map from '../Map/Map.svelte'; const { Story } = defineMeta({ @@ -13,7 +14,7 @@
- +
@@ -23,7 +24,7 @@
- +
diff --git a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte index 7e254209..fd61e8ef 100644 --- a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte +++ b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte @@ -5,6 +5,7 @@ import ScaleControl from './ScaleControl.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import Map from '../Map/Map.svelte'; + import { SWRDataBaseLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Map/Control/ScaleControl', @@ -30,7 +31,7 @@ >
- +
@@ -55,7 +56,7 @@ >
- +
diff --git a/components/src/maplibre/Tooltip/Tooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte index 4db9ff21..d0c8828c 100644 --- a/components/src/maplibre/Tooltip/Tooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -8,6 +8,7 @@ import VectorLayer from '../VectorLayer/VectorLayer.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; import Tooltip from './Tooltip.svelte'; + import { SWRDataBaseLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Map/Tooltip', @@ -21,7 +22,11 @@
- + - +
- + Date: Tue, 20 May 2025 12:28:24 +0200 Subject: [PATCH 46/76] Fix formatting --- components/src/maplibre/Map/Map.stories.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/components/src/maplibre/Map/Map.stories.svelte b/components/src/maplibre/Map/Map.stories.svelte index ffb13b0a..b55895b4 100644 --- a/components/src/maplibre/Map/Map.stories.svelte +++ b/components/src/maplibre/Map/Map.stories.svelte @@ -10,6 +10,7 @@ import GeocoderControl from '../GeocoderControl/GeocoderControl.svelte'; import { SWRDataBaseLight } from '../MapStyle'; + import { eclipse } from '@versatiles/style'; const alternateStyle = eclipse({ language: 'de', From 55f3d7dfd6ba486404ea9954fb5dceed37578e80 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 20 May 2025 12:37:19 +0200 Subject: [PATCH 47/76] Rename Basic stories to Default --- .../AttributionControl/AttributionControl.stories.svelte | 2 +- .../src/maplibre/GeocoderControl/GeocoderControl.stories.svelte | 2 +- components/src/maplibre/Map/Map.stories.svelte | 2 +- components/src/maplibre/Tooltip/Tooltip.stories.svelte | 2 +- .../maplibre/VectorTileSource/VectorTileSource.stories.svelte | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte index 37399a32..cecfaedd 100644 --- a/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte +++ b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte @@ -11,7 +11,7 @@ }); - +
diff --git a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte index adca170d..b8a3bd46 100644 --- a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte +++ b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte @@ -12,7 +12,7 @@ }); - +
diff --git a/components/src/maplibre/Map/Map.stories.svelte b/components/src/maplibre/Map/Map.stories.svelte index b55895b4..b35c6994 100644 --- a/components/src/maplibre/Map/Map.stories.svelte +++ b/components/src/maplibre/Map/Map.stories.svelte @@ -26,7 +26,7 @@ { const canvas = within(canvasElement); const containerEl = canvas.getByTestId('map-container'); diff --git a/components/src/maplibre/Tooltip/Tooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte index d0c8828c..8126c14d 100644 --- a/components/src/maplibre/Tooltip/Tooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -19,7 +19,7 @@ let mouseCoords = $state([0, 0]) as LngLatLike; - +
- + Date: Tue, 20 May 2025 14:02:25 +0200 Subject: [PATCH 48/76] Add exports --- components/src/index.js | 9 +++++++++ .../AttributionControl/AttributionControl.stories.svelte | 4 ++-- components/src/maplibre/Map/Map.stories.svelte | 4 ++-- .../src/maplibre/MapStyle/SWRDataLight.stories.svelte | 4 ++-- components/src/maplibre/MapStyle/index.js | 4 ++-- .../NavigationControl/NavigationControl.stories.svelte | 6 +++--- .../maplibre/ScaleControl/ScaleControl.stories.svelte | 6 +++--- components/src/maplibre/Tooltip/Tooltip.stories.svelte | 8 ++------ .../src/maplibre/VectorLayer/VectorLayer.stories.svelte | 4 ++-- 9 files changed, 27 insertions(+), 22 deletions(-) diff --git a/components/src/index.js b/components/src/index.js index 7742fe40..24fad693 100644 --- a/components/src/index.js +++ b/components/src/index.js @@ -10,3 +10,12 @@ export { default as ChartHeader } from './ChartHeader/ChartHeader.svelte'; export { default as ChartFooter } from './ChartFooter/ChartFooter.svelte'; export { default as Middot } from './Middot/Middot.svelte'; export { default as FormLabel } from './FormLabel/FormLabel.svelte'; +export { default as Map } from './maplibre/Map/Map.svelte'; +export { default as MapControl } from './maplibre/MapControl/MapControl.svelte'; +export { SWRDataLight } from './maplibre/MapStyle'; +export { default as NavigationControl } from './maplibre/NavigationControl/NavigationControl.svelte'; +export { default as ScaleControl } from './maplibre/ScaleControl/ScaleControl.svelte'; +export { default as Source } from './maplibre/Source/Source.svelte'; +export { default as Tooltip } from './maplibre/Tooltip/Tooltip.svelte'; +export { default as VectorLayer } from './maplibre/VectorLayer/VectorLayer.svelte'; +export { default as VectorTileSource } from './maplibre/VectorTileSource/VectorTileSource.svelte'; diff --git a/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte index cecfaedd..966e60a8 100644 --- a/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte +++ b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte @@ -3,7 +3,7 @@ import AttributionControl from './AttributionControl.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import Map from '../Map/Map.svelte'; - import { SWRDataBaseLight } from '../MapStyle'; + import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Map/Control/AttributionControl', @@ -14,7 +14,7 @@
- +
diff --git a/components/src/maplibre/Map/Map.stories.svelte b/components/src/maplibre/Map/Map.stories.svelte index b35c6994..07b48c8f 100644 --- a/components/src/maplibre/Map/Map.stories.svelte +++ b/components/src/maplibre/Map/Map.stories.svelte @@ -9,7 +9,7 @@ import AttributionControl from '../AttributionControl/AttributionControl.svelte'; import GeocoderControl from '../GeocoderControl/GeocoderControl.svelte'; - import { SWRDataBaseLight } from '../MapStyle'; + import { SWRDataLight } from '../MapStyle'; import { eclipse } from '@versatiles/style'; const alternateStyle = eclipse({ @@ -65,7 +65,7 @@ >
- + diff --git a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte b/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte index 61a0bebe..8b3e829c 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte +++ b/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte @@ -3,7 +3,7 @@ import Map from '../Map/Map.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; - import { SWRDataBaseLight } from './index'; + import { SWRDataLight } from './index'; const { Story } = defineMeta({ title: 'Map/Style/SWR Data Lab Light', component: Map @@ -15,7 +15,7 @@
diff --git a/components/src/maplibre/MapStyle/index.js b/components/src/maplibre/MapStyle/index.js index c5baf529..36c737eb 100644 --- a/components/src/maplibre/MapStyle/index.js +++ b/components/src/maplibre/MapStyle/index.js @@ -1,2 +1,2 @@ -import SWRDataBaseLight from './SWRDataLight'; -export { SWRDataBaseLight }; +import SWRDataLight from './SWRDataLight'; +export { SWRDataLight }; diff --git a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte index 5c017707..078e3d09 100644 --- a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte +++ b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte @@ -2,7 +2,7 @@ import { defineMeta } from '@storybook/addon-svelte-csf'; import NavigationControl from './NavigationControl.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; - import { SWRDataBaseLight } from '../MapStyle'; + import { SWRDataLight } from '../MapStyle'; import Map from '../Map/Map.svelte'; const { Story } = defineMeta({ @@ -14,7 +14,7 @@
- +
@@ -24,7 +24,7 @@
- +
diff --git a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte index fd61e8ef..42714df6 100644 --- a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte +++ b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte @@ -5,7 +5,7 @@ import ScaleControl from './ScaleControl.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import Map from '../Map/Map.svelte'; - import { SWRDataBaseLight } from '../MapStyle'; + import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Map/Control/ScaleControl', @@ -31,7 +31,7 @@ >
- +
@@ -56,7 +56,7 @@ >
- +
diff --git a/components/src/maplibre/Tooltip/Tooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte index 8126c14d..abad8189 100644 --- a/components/src/maplibre/Tooltip/Tooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -8,7 +8,7 @@ import VectorLayer from '../VectorLayer/VectorLayer.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; import Tooltip from './Tooltip.svelte'; - import { SWRDataBaseLight } from '../MapStyle'; + import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Map/Tooltip', @@ -22,11 +22,7 @@
- +
- + Date: Tue, 20 May 2025 14:13:38 +0200 Subject: [PATCH 49/76] Map: Add allowZoom prop --- components/src/maplibre/Map/Map.svelte | 10 ++++++---- components/src/maplibre/Tooltip/Tooltip.stories.svelte | 7 ++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/components/src/maplibre/Map/Map.svelte b/components/src/maplibre/Map/Map.svelte index 15be0ce9..29d6ebb8 100644 --- a/components/src/maplibre/Map/Map.svelte +++ b/components/src/maplibre/Map/Map.svelte @@ -14,6 +14,7 @@ style?: StyleSpecification | string; initialLocation?: Location; allowRotation?: boolean; + allowZoom?: boolean; minZoom?: number; maxZoom?: number; zoom?: number; @@ -38,6 +39,7 @@ bearing = $bindable(), loading = $bindable(true), allowRotation = false, + allowZoom = true, showDebug = false, initialLocation = { lat: 51.3, lng: 10.2, zoom: 5 } }: MapProps = $props(); @@ -82,10 +84,10 @@ }); $effect(() => { - if (allowRotation) { - mapContext.map?.touchZoomRotate.enableRotation(); + if (allowZoom === false) { + mapContext.map?.scrollZoom.disable(); } else { - mapContext.map?.touchZoomRotate.disableRotation(); + mapContext.map?.scrollZoom.enable(); } }); @@ -98,7 +100,7 @@ {/if} {#if showDebug}
- {JSON.stringify({ ...center, zoom })} + {JSON.stringify({ ...center, zoom, allowZoom, allowRotation })}
{/if}
diff --git a/components/src/maplibre/Tooltip/Tooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte index abad8189..c48a0361 100644 --- a/components/src/maplibre/Tooltip/Tooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -22,7 +22,12 @@
- + Date: Tue, 20 May 2025 14:17:28 +0200 Subject: [PATCH 50/76] Fix import --- .../maplibre/GeocoderControl/GeocoderControl.stories.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte index b8a3bd46..70e60054 100644 --- a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte +++ b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte @@ -4,7 +4,7 @@ import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import Map from '../Map/Map.svelte'; - import { SWRDataBaseLight } from '../MapStyle'; + import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Map/Control/GeoCoderControl', @@ -15,7 +15,7 @@
- +
From c424c7d31b25d98f4643aa21c24990e7ed2b62d9 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 20 May 2025 15:47:32 +0200 Subject: [PATCH 51/76] Iterate docs --- .../VectorLayer/VectorLayer.stories.svelte | 2 +- .../VectorTileSource.stories.svelte | 41 +++++++++++++++---- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte b/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte index 280bf766..c5a4e5ef 100644 --- a/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte +++ b/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte @@ -9,7 +9,7 @@ import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ - title: 'Map/VectorLayer', + title: 'Map/Layer/VectorLayer', component: VectorLayer }); diff --git a/components/src/maplibre/VectorTileSource/VectorTileSource.stories.svelte b/components/src/maplibre/VectorTileSource/VectorTileSource.stories.svelte index cfabac58..216591a3 100644 --- a/components/src/maplibre/VectorTileSource/VectorTileSource.stories.svelte +++ b/components/src/maplibre/VectorTileSource/VectorTileSource.stories.svelte @@ -1,19 +1,46 @@ - - - + +
+ + + + + +
+
+ + From f7e40c295d4595df2f46db0a02e094d8fd91e994 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 20 May 2025 16:25:48 +0200 Subject: [PATCH 52/76] Iterate docs --- components/.storybook/preview.ts | 12 ++-- .../AttributionControl.stories.svelte | 2 +- .../GeocoderControl.stories.svelte | 2 +- .../LinkToLocationControl.stories.svelte | 2 +- components/src/maplibre/Map/Map.mdx | 39 ----------- .../src/maplibre/Map/Map.stories.svelte | 2 +- .../MapControl/MapControl.stories.svelte | 2 +- .../src/maplibre/MapStyle/SWRDataLight.mdx | 6 +- .../MapStyle/SWRDataLight.stories.svelte | 2 +- components/src/maplibre/Maplibre.mdx | 43 ++++++++++++ .../NavigationControl.stories.svelte | 2 +- .../ScaleControl/ScaleControl.stories.svelte | 2 +- .../maplibre/Tooltip/Tooltip.stories.svelte | 70 ++++++++++++++++++- .../VectorLayer/VectorLayer.stories.svelte | 2 +- .../VectorTileSource.stories.svelte | 2 +- 15 files changed, 132 insertions(+), 58 deletions(-) delete mode 100644 components/src/maplibre/Map/Map.mdx create mode 100644 components/src/maplibre/Maplibre.mdx diff --git a/components/.storybook/preview.ts b/components/.storybook/preview.ts index 0f79d863..79caa065 100644 --- a/components/.storybook/preview.ts +++ b/components/.storybook/preview.ts @@ -12,16 +12,16 @@ const preview: Preview = { 'Display', 'Chart', ['ChartHeader'], - 'Map', + 'Maplibre', [ 'Map', 'MapStyle', - 'MapSource', - 'VectorTileSource', - 'VectorLayer', - 'Tooltip', + 'Source', + 'Layer', 'Control', - ['MapControl', 'ScaleControl', 'NavigationControl'] + ['MapControl', 'ScaleControl', 'NavigationControl'], + 'Style', + 'Tooltip' ], 'Form', 'Deprecated' diff --git a/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte index 966e60a8..48606b6b 100644 --- a/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte +++ b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte @@ -6,7 +6,7 @@ import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ - title: 'Map/Control/AttributionControl', + title: 'Maplibre/Control/AttributionControl', component: AttributionControl }); diff --git a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte index 70e60054..ab8b3071 100644 --- a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte +++ b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte @@ -7,7 +7,7 @@ import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ - title: 'Map/Control/GeoCoderControl', + title: 'Maplibre/Control/GeoCoderControl', component: GeocoderControl }); diff --git a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.stories.svelte b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.stories.svelte index d7b84f1f..af10da6b 100644 --- a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.stories.svelte +++ b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.stories.svelte @@ -3,7 +3,7 @@ import LinkToLocationControl from './LinkToLocationControl.svelte'; const { Story } = defineMeta({ - title: 'Map/Control/LinkToLocationControl', + title: 'Maplibre/Control/LinkToLocationControl', component: LinkToLocationControl }); diff --git a/components/src/maplibre/Map/Map.mdx b/components/src/maplibre/Map/Map.mdx deleted file mode 100644 index 56906616..00000000 --- a/components/src/maplibre/Map/Map.mdx +++ /dev/null @@ -1,39 +0,0 @@ -import { Story, Meta, Primary, Controls, Stories } from '@storybook/addon-docs/blocks'; -import * as MapStories from './Map.stories.svelte'; - - - -# Map - -Svelte components and modular basemaps for rendering custom slippy maps using the [versatiles](https://docs.versatiles.org/) stack. Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreise/blob/main/src/lib/components/Map/Map.svelte) from [Jakob Bauer](https://github.com/AgricolaJKB), [dimfield](https://github.com/dimfeld/svelte-maplibre) and [MIRUNE](https://github.com/MIERUNE/svelte-maplibre-gl). - - - - -## Sources - -- **VectorTileSource**: Loads a vector tile source - -## Layers - -- **VectorLayer**: Renders a layer from a vector tile source. - -## Controls - -- **[ScaleControl](?path=/docs/map-control-scalecontrol--docs)**: Renders a dynamic scalebar -- **[NavigationControl](?path=/docs/map-control-navigationcontrol--docs)**: Renders zoom buttons and optional compass -- **[GeocoderControl](?path=/docs/map-control-geocodercontrol--docs)**: Renders a search input using [maplibre-gl-geocoder](https://github.com/maplibre/maplibre-gl-geocoder) and any supported forward geocoding service (currently [maptiler](https://www.maptiler.com/) only) -- **[AttributionControl](?path=/docs/map-control-attributioncontrol--docs)**: Renders maplibre's default attribution control. -- **LinkToLocationControl**: Allows you to forward-geocode and move the map to a location specified by the `?location` URL parameter -- **Custom controls** - -## Tooltips - -## Styles - -- SWR Data Light -- Any [versatiles style](https://github.com/versatiles-org/versatiles-style) (see [demo](?path=/story/map-map--alternate-style)) - -## Known issues - -- Firefox throws warning `WebGL warning: texImage: Alpha-premult and y-flip are deprecated for non-DOM-Element uploads`: Known [upstream mapligre-gl issue](https://github.com/maplibre/maplibre-gl-js/issues/2030). diff --git a/components/src/maplibre/Map/Map.stories.svelte b/components/src/maplibre/Map/Map.stories.svelte index 07b48c8f..02b5d243 100644 --- a/components/src/maplibre/Map/Map.stories.svelte +++ b/components/src/maplibre/Map/Map.stories.svelte @@ -19,7 +19,7 @@ }); const { Story } = defineMeta({ - title: 'Map/Map', + title: 'Maplibre/Map', component: Map }); diff --git a/components/src/maplibre/MapControl/MapControl.stories.svelte b/components/src/maplibre/MapControl/MapControl.stories.svelte index 615d482a..55bd924a 100644 --- a/components/src/maplibre/MapControl/MapControl.stories.svelte +++ b/components/src/maplibre/MapControl/MapControl.stories.svelte @@ -3,7 +3,7 @@ import MapControl from './MapControl.svelte'; const { Story } = defineMeta({ - title: 'Map/Control/MapControl', + title: 'Maplibre/Control/MapControl', component: MapControl }); diff --git a/components/src/maplibre/MapStyle/SWRDataLight.mdx b/components/src/maplibre/MapStyle/SWRDataLight.mdx index de6c7935..a5423b6d 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.mdx +++ b/components/src/maplibre/MapStyle/SWRDataLight.mdx @@ -5,9 +5,11 @@ import * as MapStyleStories from './SWRDataLight.stories.svelte'; -# SWR Data Light +# SWR Data Lab Light - +Light-themed basemap using SWR colours and typefaces. Uses `versatiles-osm` vector tiles in the `versatiles-shortbread` schema. + + {SWRDataLight.layers.length} layers diff --git a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte b/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte index 8b3e829c..fa3de021 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte +++ b/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte @@ -5,7 +5,7 @@ import AttributionControl from '../AttributionControl/AttributionControl.svelte'; import { SWRDataLight } from './index'; const { Story } = defineMeta({ - title: 'Map/Style/SWR Data Lab Light', + title: 'Maplibre/Style/SWR Data Lab Light', component: Map }); diff --git a/components/src/maplibre/Maplibre.mdx b/components/src/maplibre/Maplibre.mdx new file mode 100644 index 00000000..3bbf863a --- /dev/null +++ b/components/src/maplibre/Maplibre.mdx @@ -0,0 +1,43 @@ +import { Meta } from '@storybook/addon-docs/blocks'; +import { Story, Primary, Controls, Stories } from '@storybook/addon-docs/blocks'; +import * as MapStories from './Map/Map.stories.svelte'; + + + +# Maplibre + +Lightweight svelte components and basemaps for rendering custom slippy maps using the [versatiles](https://docs.versatiles.org/) stack. + +Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreise/blob/main/src/lib/components/Map/Map.svelte) from [Jakob Bauer](https://github.com/AgricolaJKB), [dimfield](https://github.com/dimfeld/svelte-maplibre) and [MIRUNE](https://github.com/MIERUNE/svelte-maplibre-gl). + + + +## Sources + +- **[VectorTileSource](?path=/docs/maplibre-source-vectortilesource--docs)**: Loads a vector tile source supplied by a tileserver + +## Layers + +- **[VectorLayer](?path=/docs/maplibre-layer-vectorlayer--docs)**: Renders a layer from a vector tile source. + +## Controls + +- **[ScaleControl](?path=/docs/map-control-scalecontrol--docs)**: Renders a dynamic scalebar +- **[NavigationControl](?path=/docs/map-control-navigationcontrol--docs)**: Renders zoom buttons and optional compass +- **[GeocoderControl](?path=/docs/map-control-geocodercontrol--docs)**: Renders a search input using [maplibre-gl-geocoder](https://github.com/maplibre/maplibre-gl-geocoder) and any supported forward geocoding service (currently [maptiler](https://www.maptiler.com/) only) +- **[AttributionControl](?path=/docs/map-control-attributioncontrol--docs)**: Renders maplibre's default attribution control. +- **LinkToLocationControl**: Allows you to forward-geocode and move the map to a location specified by the `?location` URL parameter +- **Custom controls** + +## Misc + +- **[Tooltip](?path=/docs/maplibre-tooltip--docs)** + +## Styles + +- **[SWR Data Lab Light](http://localhost:6006/?path=/docs/maplibre-style-swr-data-lab-light--docs)**: Light-themed basemap using SWR colours and typefaces +- Any valid MapLibre style specification, such as [versatiles-style](https://github.com/versatiles-org/versatiles-style) (see [demo](?path=/story/map-map--alternate-style)) + +## Known issues + +- Firefox throws warning `WebGL warning: texImage: Alpha-premult and y-flip are deprecated for non-DOM-Element uploads`: Known [upstream mapligre-gl issue](https://github.com/maplibre/maplibre-gl-js/issues/2030). diff --git a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte index 078e3d09..6d2060d8 100644 --- a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte +++ b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte @@ -6,7 +6,7 @@ import Map from '../Map/Map.svelte'; const { Story } = defineMeta({ - title: 'Map/Control/NavigationControl', + title: 'Maplibre/Control/NavigationControl', component: NavigationControl }); diff --git a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte index 42714df6..569e7059 100644 --- a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte +++ b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte @@ -8,7 +8,7 @@ import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ - title: 'Map/Control/ScaleControl', + title: 'Maplibre/Control/ScaleControl', component: ScaleControl }); diff --git a/components/src/maplibre/Tooltip/Tooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte index c48a0361..8f82a1c6 100644 --- a/components/src/maplibre/Tooltip/Tooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -11,11 +11,12 @@ import { SWRDataLight } from '../MapStyle'; const { Story } = defineMeta({ - title: 'Map/Tooltip', + title: 'Maplibre/Tooltip', component: Tooltip }); let hovered = $state() as MapGeoJSONFeature | undefined; + let selected = $state() as MapGeoJSONFeature | undefined; let mouseCoords = $state([0, 0]) as LngLatLike; @@ -86,6 +87,73 @@
+ + +
+ + + { + hovered = ev.features?.[0]; + mouseCoords = ev.lngLat; + }} + onmouseleave={() => (hovered = undefined)} + paint={{ + 'fill-color': [ + 'step', + ['get', 'coverage_2025'], + 'white', + 1, + 'lightgray', + 1.3, + 'lightgreen' + ] + }} + /> + + {#if hovered} + +
{Object.entries(hovered.properties)
+								.map(([key, val]) => `${key}: ${val}`)
+								.join('\n')}
+
+ {/if} + +
+
+
+
+ diff --git a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte index c6e72d5c..47a6deaf 100644 --- a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte +++ b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte @@ -13,7 +13,7 @@ interface LinkToLocationControlProps { key: string; - urlParameter: string; + urlParameter?: string; service?: 'maptiler'; countries?: Country[] | Country; languages?: Language[] | Language; diff --git a/components/src/maplibre/MapStyle/SWRDataLight.mdx b/components/src/maplibre/MapStyle/SWRDataLight.mdx index a5423b6d..8200489d 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.mdx +++ b/components/src/maplibre/MapStyle/SWRDataLight.mdx @@ -7,7 +7,9 @@ import * as MapStyleStories from './SWRDataLight.stories.svelte'; # SWR Data Lab Light -Light-themed basemap using SWR colours and typefaces. Uses `versatiles-osm` vector tiles in the `versatiles-shortbread` schema. +Light-themed basemap using SWR colours and the SWR-Sans typeface. + +Uses `versatiles-osm` vector tiles in the `versatiles-shortbread` schema served from `tiles.versatiles.org`, typefaces come from `https://static.datenhub.net/maps/fonts/`. diff --git a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte b/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte index fa3de021..1c1a4922 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte +++ b/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte @@ -17,9 +17,8 @@ - +
From fb64535012cb0eb01da9e1d99b8a0e16ca6f63c4 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 20 May 2025 20:29:51 +0200 Subject: [PATCH 55/76] Replace LinkToLocationControl with better WithLinkLocation --- .../LinkToLocationControl.mdx | 11 ----- .../maplibre/LinkToLocationControl/index.js | 2 - components/src/maplibre/Map/Map.svelte | 14 +++---- .../src/maplibre/MapStyle/components/Admin.ts | 2 +- .../maplibre/MapStyle/components/Buildings.ts | 2 +- .../maplibre/MapStyle/components/Landuse.ts | 2 +- .../src/maplibre/MapStyle/components/Roads.ts | 2 +- .../maplibre/MapStyle/components/Transit.ts | 2 +- .../maplibre/MapStyle/components/Walking.ts | 2 +- components/src/maplibre/Maplibre.mdx | 1 + .../maplibre/Tooltip/Tooltip.stories.svelte | 2 +- .../WithLinkLocation/WithLinkLocation.mdx | 11 +++++ .../WithLinkLocation.stories.svelte} | 17 +++----- .../WithLinkLocation.svelte} | 40 ++++++++++++------- .../src/maplibre/WithLinkLocation/index.js | 2 + .../{MapStyle/components => }/types.ts | 5 +++ 16 files changed, 63 insertions(+), 54 deletions(-) delete mode 100644 components/src/maplibre/LinkToLocationControl/LinkToLocationControl.mdx delete mode 100644 components/src/maplibre/LinkToLocationControl/index.js create mode 100644 components/src/maplibre/WithLinkLocation/WithLinkLocation.mdx rename components/src/maplibre/{LinkToLocationControl/LinkToLocationControl.stories.svelte => WithLinkLocation/WithLinkLocation.stories.svelte} (55%) rename components/src/maplibre/{LinkToLocationControl/LinkToLocationControl.svelte => WithLinkLocation/WithLinkLocation.svelte} (70%) create mode 100644 components/src/maplibre/WithLinkLocation/index.js rename components/src/maplibre/{MapStyle/components => }/types.ts (67%) diff --git a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.mdx b/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.mdx deleted file mode 100644 index 348968e0..00000000 --- a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.mdx +++ /dev/null @@ -1,11 +0,0 @@ -import { Story, Meta, Primary, Controls, Stories } from '@storybook/addon-docs/blocks'; - -import * as LinkToLocationControlStories from './LinkToLocationControl.stories.svelte'; - - - -# LinkToLocationControl - - - - diff --git a/components/src/maplibre/LinkToLocationControl/index.js b/components/src/maplibre/LinkToLocationControl/index.js deleted file mode 100644 index 04a81eea..00000000 --- a/components/src/maplibre/LinkToLocationControl/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import LinkToLocationControl from './LinkToLocationControl.svelte'; -export default LinkToLocationControl; diff --git a/components/src/maplibre/Map/Map.svelte b/components/src/maplibre/Map/Map.svelte index 29d6ebb8..00bbff18 100644 --- a/components/src/maplibre/Map/Map.svelte +++ b/components/src/maplibre/Map/Map.svelte @@ -1,15 +1,10 @@
- - - + + +
diff --git a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte b/components/src/maplibre/WithLinkLocation/WithLinkLocation.svelte similarity index 70% rename from components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte rename to components/src/maplibre/WithLinkLocation/WithLinkLocation.svelte index 47a6deaf..2c716bde 100644 --- a/components/src/maplibre/LinkToLocationControl/LinkToLocationControl.svelte +++ b/components/src/maplibre/WithLinkLocation/WithLinkLocation.svelte @@ -1,7 +1,7 @@ + +{#if location !== undefined} + {@render children?.()} +{/if} diff --git a/components/src/maplibre/WithLinkLocation/index.js b/components/src/maplibre/WithLinkLocation/index.js new file mode 100644 index 00000000..194f0d87 --- /dev/null +++ b/components/src/maplibre/WithLinkLocation/index.js @@ -0,0 +1,2 @@ +import WithLinkLocation from './WithLinkLocation.svelte'; +export default WithLinkLocation; diff --git a/components/src/maplibre/MapStyle/components/types.ts b/components/src/maplibre/types.ts similarity index 67% rename from components/src/maplibre/MapStyle/components/types.ts rename to components/src/maplibre/types.ts index a6c9bd8f..ac806a7f 100644 --- a/components/src/maplibre/MapStyle/components/types.ts +++ b/components/src/maplibre/types.ts @@ -1,3 +1,8 @@ import type { FillLayerSpecification, LineLayerSpecification } from 'maplibre-gl'; export type Layer = LineLayerSpecification | FillLayerSpecification; +export interface Location { + lat: number; + lng: number; + zoom: number; +} From 0fdcecae4bdea5120264a6f513a5502f465a71a7 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Tue, 20 May 2025 20:30:42 +0200 Subject: [PATCH 56/76] Fix documentation --- components/src/maplibre/Maplibre.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/components/src/maplibre/Maplibre.mdx b/components/src/maplibre/Maplibre.mdx index 22f92f1c..fa1aedb9 100644 --- a/components/src/maplibre/Maplibre.mdx +++ b/components/src/maplibre/Maplibre.mdx @@ -26,7 +26,6 @@ Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreis - **[NavigationControl](?path=/docs/map-control-navigationcontrol--docs)**: Renders zoom buttons and optional compass - **[GeocoderControl](?path=/docs/map-control-geocodercontrol--docs)**: Renders a search input using [maplibre-gl-geocoder](https://github.com/maplibre/maplibre-gl-geocoder) and any supported forward geocoding service (currently [maptiler](https://www.maptiler.com/) only) - **[AttributionControl](?path=/docs/map-control-attributioncontrol--docs)**: Renders maplibre's default attribution control. -- **LinkToLocationControl**: Allows you to forward-geocode and move the map to a location specified by the `?location` URL parameter - **Custom controls** ## Misc From 19bb53fce98d268f04cbbee5a07b09706bad95f2 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 12:55:57 +0200 Subject: [PATCH 57/76] Iterate docs --- README.md | 22 +- components/.storybook/blocks/Mermaid.jsx | 9 + components/package.json | 3 +- .../src/maplibre/MapStyle/SWRDataLight.mdx | 96 +- package-lock.json | 12469 ++++++++++------ 5 files changed, 8239 insertions(+), 4360 deletions(-) create mode 100644 components/.storybook/blocks/Mermaid.jsx diff --git a/README.md b/README.md index a286f237..a7ac4c16 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,11 @@ There are three parts to this repository: ## Notes -- Steps 2 - 5 in the proposed workflow above should (?) be automated -- The **[pjax hydration bug](https://github.com/SWRdata/pjax-sveltekit/issues/3)** is solved in `mock-sveltekit` using a [server hook](https://github.com/SWRdata/components/blob/main/mock-sveltekit/src/hooks.server.js), as [suggested here](https://github.com/sveltejs/kit/issues/10411). -- **Style encapsulation** between our news apps and the SWR.de website is implemented using SvelteKit's [Custom Elements API](https://svelte.dev/docs/custom-elements-api) following the pattern [developed here](https://github.com/SWRdata/pjax-sveltekit/issues/1). This doesn't support [declarative shadow DOM](https://web.dev/articles/declarative-shadow-dom), which means our apps will in effect be client-side rendered, but this... - - is an acceptable tradeoff - - may [change in Svelte 5](https://github.com/sveltejs/svelte/pull/10721) +- Steps 2 - 5 in the proposed workflow above should (?) be automated +- The **[pjax hydration bug](https://github.com/SWRdata/pjax-sveltekit/issues/3)** is solved in `mock-sveltekit` using a [server hook](https://github.com/SWRdata/components/blob/main/mock-sveltekit/src/hooks.server.js), as [suggested here](https://github.com/sveltejs/kit/issues/10411). +- **Style encapsulation** between our news apps and the SWR.de website is implemented using SvelteKit's [Custom Elements API](https://svelte.dev/docs/custom-elements-api) following the pattern [developed here](https://github.com/SWRdata/pjax-sveltekit/issues/1). This doesn't support [declarative shadow DOM](https://web.dev/articles/declarative-shadow-dom), which means our apps will in effect be client-side rendered, but this... + - is an acceptable tradeoff + - may [change in Svelte 5](https://github.com/sveltejs/svelte/pull/10721) ## NPM Release Workflow @@ -40,15 +40,15 @@ Merges into the main branch are protected and require a pull request review. [Semantic Release](https://github.com/semantic-release/) automatically: -- analyzes commits and bumps the version (major, minor, or patch). -- publishes the package to the [NPM registry](https://www.npmjs.com/package/@swr-data-lab/components). -- pushes the release to GitHub with a tag reflecting the NPM package version. +- analyzes commits and bumps the version (major, minor, or patch). +- publishes the package to the [NPM registry](https://www.npmjs.com/package/@swr-data-lab/components). +- pushes the release to GitHub with a tag reflecting the NPM package version. Only merges following [conventional commits](https://www.conventionalcommits.org/) will trigger a new release. Summary: -- PATCH version bump: Commit message "fix: ..." -- MINOR version bump: Commit message "feat: ..." -- MAJOR version bump: Commit message "!: ..." or include "BREAKING CHANGE: ..." in the footer +- PATCH version bump: Commit message "fix: ..." +- MINOR version bump: Commit message "feat: ..." +- MAJOR version bump: Commit message "!: ..." or include "BREAKING CHANGE: ..." in the footer For further questions, refer to the [Semantic Release Docs (FAQ)](https://semantic-release.gitbook.io/semantic-release/support/faq). diff --git a/components/.storybook/blocks/Mermaid.jsx b/components/.storybook/blocks/Mermaid.jsx new file mode 100644 index 00000000..ae286c05 --- /dev/null +++ b/components/.storybook/blocks/Mermaid.jsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { Mermaid as MdxMermaid } from 'mdx-mermaid/Mermaid'; + +export default function Mermaid({ chart }) { + if (!chart) { + return null; + } + return React.createElement(MdxMermaid, { chart }); +} diff --git a/components/package.json b/components/package.json index fcb5222d..09997ba1 100644 --- a/components/package.json +++ b/components/package.json @@ -21,9 +21,7 @@ "dependencies": { "@maplibre/maplibre-gl-geocoder": "^1.8.0", "@versatiles/style": "^5.6.0", - "install": "^0.13.0", "maplibre-gl": "^5.5.0", - "npm": "^10.9.2", "svelte-select": "^5.8.3" }, "devDependencies": { @@ -44,6 +42,7 @@ "@vitest/coverage-v8": "^3.1.1", "concurrently": "^9.0.1", "http-server": "^14.1.1", + "mdx-mermaid": "^2.0.3", "playwright": "^1.51.1", "sass-embedded": "^1.78.0", "semantic-release": "^24.1.2", diff --git a/components/src/maplibre/MapStyle/SWRDataLight.mdx b/components/src/maplibre/MapStyle/SWRDataLight.mdx index 8200489d..90d99c16 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.mdx +++ b/components/src/maplibre/MapStyle/SWRDataLight.mdx @@ -1,4 +1,5 @@ import { Story, Meta, Primary, Controls, Stories } from '@storybook/addon-docs/blocks'; +import Mermaid from '../../../.storybook/blocks/Mermaid'; import SWRDataLight from './SWRDataLight'; import * as MapStyleStories from './SWRDataLight.stories.svelte'; @@ -7,24 +8,93 @@ import * as MapStyleStories from './SWRDataLight.stories.svelte'; # SWR Data Lab Light -Light-themed basemap using SWR colours and the SWR-Sans typeface. +Light-themed basemap using SWR colours and typefaces based on [versatiles-greybeard](https://github.com/versatiles-org/versatiles-style). -Uses `versatiles-osm` vector tiles in the `versatiles-shortbread` schema served from `tiles.versatiles.org`, typefaces come from `https://static.datenhub.net/maps/fonts/`. +- Data sources + - Vector data: [versatiles-osm](https://download.versatiles.org/) in the [Shortbread schema](https://shortbread-tiles.org/) served from `tiles.versatiles.org` + - Typefaces: SWR Sans served from `https://static.datenhub.net/maps/fonts/`. +- Layer count: {SWRDataLight.layers.length} -{SWRDataLight.layers.length} layers +
-### Semantic Components +### Design Notes -1. Land + Water -2. Natural Features -3. Roads -4. Transit -5. Walking + Cycling -6. Buildings -7. Admin +We take a two-step design approach: -The actual layering order needs to be more sophisticated +1. Sort the geographic data we want to present into semantic groups like "Admin Boundaries", "Roads" or "Transit" (inspired by Mapbox's [Style Components](https://docs.mapbox.com/studio-manual/guides/components/)) +2. Derive physical layers (ie. `MapLayerSpecification`) from these groups and interleave them to produce a convincing image -- https://shortbread-tiles.org/ + a_admin_labels +s_admin --> a_admin0 +s_admin --> a_admin1 +s_admin --> a_admin2 +s_buildings --> a_buildings +s_roads --> a_roads_surface +s_roads --> a_roads_bridge +s_roads --> a_roads_tunnel +s_roads --> a_roads_labels +s_transit --> a_transit_surface +s_transit --> a_transit_bridge +s_transit --> a_transit_tunnel +s_walking --> a_walking_surface +s_walking --> a_walking_bridge +s_walking --> a_walking_tunnel +s_landuse --> a_land +s_landuse --> a_ocean + +class s_admin,a_admin0,a_admin1,a_admin2,a_admin_labels admin +class s_buildings,a_buildings buildings +class s_roads,a_roads_bridge,a_roads_surface,a_roads_tunnel,a_roads_labels roads +class s_transit,a_transit_bridge,a_transit_surface,a_transit_tunnel,a_transit_labels transit +class s_walking,a_walking_bridge,a_walking_surface,a_walking_tunnel,a_walking_labels walking +class s_landuse,a_land,a_ocean landuse +`}/> + +### References + +- [Foundational Map Design | BUILD with Mapbox ](https://www.youtube.com/watch?v=QDfj9oGVZmE) diff --git a/package-lock.json b/package-lock.json index 48633515..17a371ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,9 +22,7 @@ "dependencies": { "@maplibre/maplibre-gl-geocoder": "^1.8.0", "@versatiles/style": "^5.6.0", - "install": "^0.13.0", "maplibre-gl": "^5.5.0", - "npm": "^10.9.2", "svelte-select": "^5.8.3" }, "devDependencies": { @@ -45,6 +43,7 @@ "@vitest/coverage-v8": "^3.1.1", "concurrently": "^9.0.1", "http-server": "^14.1.1", + "mdx-mermaid": "^2.0.3", "playwright": "^1.51.1", "sass-embedded": "^1.78.0", "semantic-release": "^24.1.2", @@ -914,6 +913,40 @@ "node": ">=6.0.0" } }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/install-pkg/node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@antfu/utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", + "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -1428,6 +1461,14 @@ "dev": true, "license": "MIT" }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz", + "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@bufbuild/protobuf": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.5.tgz", @@ -1479,6 +1520,55 @@ "tough-cookie": "^4.1.4" } }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", + "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@chevrotain/gast": "11.0.3", + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/gast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz", + "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/regexp-to-ast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", + "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/@chevrotain/types": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz", + "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/@chevrotain/utils": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz", + "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -2224,6 +2314,46 @@ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@iconify/utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", + "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@antfu/install-pkg": "^1.0.0", + "@antfu/utils": "^8.1.0", + "@iconify/types": "^2.0.0", + "debug": "^4.4.0", + "globals": "^15.14.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "mlly": "^1.7.4" + } + }, + "node_modules/@iconify/utils/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@inquirer/confirm": { "version": "5.1.10", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.10.tgz", @@ -2970,6 +3100,17 @@ "react": ">=16" } }, + "node_modules/@mermaid-js/parser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.4.0.tgz", + "integrity": "sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "langium": "3.3.1" + } + }, "node_modules/@mswjs/interceptors": { "version": "0.37.6", "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.6.tgz", @@ -3252,6 +3393,30 @@ "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", "dev": true }, + "node_modules/@puppeteer/browsers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", + "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "debug": "^4.3.5", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.39.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", @@ -4547,6 +4712,25 @@ "node": ">=18" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -4604,702 +4788,796 @@ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, - "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true - }, - "node_modules/@types/geojson": { - "version": "7946.0.16", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", - "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==" - }, - "node_modules/@types/geojson-vt": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", - "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@types/d3-selection": "*" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "@types/d3-selection": "*" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/@types/mapbox__point-geometry": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", - "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==" + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/@types/mapbox__vector-tile": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", - "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@types/geojson": "*", - "@types/mapbox__point-geometry": "*", - "@types/pbf": "*" + "@types/d3-array": "*", + "@types/geojson": "*" } }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/@types/node": { - "version": "22.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", - "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "undici-types": "~6.21.0" + "@types/d3-selection": "*" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/@types/pbf": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", - "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/@types/react": { - "version": "19.1.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.3.tgz", - "integrity": "sha512-dLWQ+Z0CkIvK1J8+wrDPwGxEYFA4RAyHoZPxHVGspYmFVnwGSNT24cGIhFJrtfRnWVuW8X7NO52gCXmhkVUWGQ==", + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "csstype": "^3.0.2" + "@types/d3-dsv": "*" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, - "node_modules/@types/statuses": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", - "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", "dev": true, - "optional": true, + "license": "MIT", "peer": true }, - "node_modules/@types/supercluster": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", - "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "@types/geojson": "*" } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", "dev": true, - "optional": true, + "license": "MIT", "peer": true }, - "node_modules/@types/wait-on": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/@types/wait-on/-/wait-on-5.3.4.tgz", - "integrity": "sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==", + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@types/node": "*" + "@types/d3-color": "*" } }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } + "peer": true }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz", - "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==", + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "8.20.0", - "@typescript-eslint/visitor-keys": "8.20.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "MIT", + "peer": true }, - "node_modules/@typescript-eslint/types": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.20.0.tgz", - "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==", + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "MIT", + "peer": true }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz", - "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==", + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/types": "8.20.0", - "@typescript-eslint/visitor-keys": "8.20.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.8.0" + "@types/d3-time": "*" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } + "license": "MIT", + "peer": true }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT", + "peer": true }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz", - "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==", + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/types": "8.20.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@types/d3-path": "*" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } + "license": "MIT", + "peer": true }, - "node_modules/@versatiles/style": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@versatiles/style/-/style-5.6.0.tgz", - "integrity": "sha512-5yU3iuUfhVvUSv2WluTLdRRiq02/O7R0GJo4ajKXZQ9h1Eme/1NipXFe6End+wcMi98mPh3oLBoQhBb6z+DR6w==", + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "dev": true, "license": "MIT", - "dependencies": { - "brace-expansion": "^4.0.0" - } + "peer": true }, - "node_modules/@versatiles/style/node_modules/balanced-match": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-3.0.1.tgz", - "integrity": "sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==", + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 16" + "peer": true + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/d3-selection": "*" } }, - "node_modules/@versatiles/style/node_modules/brace-expansion": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-4.0.0.tgz", - "integrity": "sha512-l/mOwLWs7BQIgOKrL46dIAbyCKvPV7YJPDspkuc88rHsZRlg3hptUGdU7Trv0VFP4d3xnSGBQrKu5ZvGB7UeIw==", + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "balanced-match": "^3.0.0" - }, - "engines": { - "node": ">= 18" + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" } }, - "node_modules/@vitest/browser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.1.1.tgz", - "integrity": "sha512-A+A69mMtrj1RPh96LfXGc309KSXhy2MslvyL+cp9+Y5EVdoJD4KfXDx/3SSlRGN70+hIoJ3RRbTidTvj18PZ/A==", + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@testing-library/dom": "^10.4.0", - "@testing-library/user-event": "^14.6.1", - "@vitest/mocker": "3.1.1", - "@vitest/utils": "3.1.1", - "magic-string": "^0.30.17", - "sirv": "^3.0.1", - "tinyrainbow": "^2.0.0", - "ws": "^8.18.1" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "playwright": "*", - "vitest": "3.1.1", - "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true - } + "@types/ms": "*" } }, - "node_modules/@vitest/browser/node_modules/@testing-library/user-event": { - "version": "14.6.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", - "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" + "optional": true, + "dependencies": { + "@types/estree": "*" } }, - "node_modules/@vitest/browser/node_modules/@vitest/pretty-format": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", - "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==" + }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "@types/node": "*" } }, - "node_modules/@vitest/browser/node_modules/@vitest/utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", - "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", + "node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@vitest/pretty-format": "3.1.1", - "loupe": "^3.1.3", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "@types/unist": "^2" } }, - "node_modules/@vitest/browser/node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } + "license": "MIT" }, - "node_modules/@vitest/coverage-v8": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.1.tgz", - "integrity": "sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==", + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@bcoe/v8-coverage": "^1.0.2", - "debug": "^4.4.0", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.6", - "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.17", - "magicast": "^0.3.5", - "std-env": "^3.8.1", - "test-exclude": "^7.0.1", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@vitest/browser": "3.1.1", - "vitest": "3.1.1" - }, - "peerDependenciesMeta": { - "@vitest/browser": { - "optional": true - } + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@vitest/coverage-v8/node_modules/@bcoe/v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", - "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "node_modules/@vitest/coverage-v8/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", "dependencies": { - "balanced-match": "^1.0.0" + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" } }, - "node_modules/@vitest/coverage-v8/node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@types/unist": "^2" } }, - "node_modules/@vitest/coverage-v8/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT" }, - "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" - } + "license": "MIT", + "optional": true }, - "node_modules/@vitest/coverage-v8/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@types/node": { + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "undici-types": "~6.21.0" } }, - "node_modules/@vitest/coverage-v8/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" + }, + "node_modules/@types/react": { + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.3.tgz", + "integrity": "sha512-dLWQ+Z0CkIvK1J8+wrDPwGxEYFA4RAyHoZPxHVGspYmFVnwGSNT24cGIhFJrtfRnWVuW8X7NO52gCXmhkVUWGQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" } }, - "node_modules/@vitest/coverage-v8/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT" }, - "node_modules/@vitest/coverage-v8/node_modules/test-exclude": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "node_modules/@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", "dev": true, - "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^9.0.4" - }, - "engines": { - "node": ">=18" + "@types/geojson": "*" } }, - "node_modules/@vitest/coverage-v8/node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } + "optional": true, + "peer": true }, - "node_modules/@vitest/mocker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.1.tgz", - "integrity": "sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==", + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "dev": true, "license": "MIT", - "dependencies": { - "@vitest/spy": "3.1.1", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "optional": true, + "peer": true + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/wait-on": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/@types/wait-on/-/wait-on-5.3.4.tgz", + "integrity": "sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz", + "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0" }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.1.tgz", - "integrity": "sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==", + "node_modules/@typescript-eslint/types": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.20.0.tgz", + "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz", + "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==", "dev": true, - "license": "MIT", "dependencies": { - "tinyspy": "^3.0.2" + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/vitest" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@vitest/runner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.1.tgz", - "integrity": "sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { - "@vitest/utils": "3.1.1", - "pathe": "^2.0.3" + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", - "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz", + "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==", "dev": true, - "license": "MIT", "dependencies": { - "tinyrainbow": "^2.0.0" + "@typescript-eslint/types": "8.20.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/vitest" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vitest/runner/node_modules/@vitest/utils": { + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@versatiles/style": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@versatiles/style/-/style-5.6.0.tgz", + "integrity": "sha512-5yU3iuUfhVvUSv2WluTLdRRiq02/O7R0GJo4ajKXZQ9h1Eme/1NipXFe6End+wcMi98mPh3oLBoQhBb6z+DR6w==", + "license": "MIT", + "dependencies": { + "brace-expansion": "^4.0.0" + } + }, + "node_modules/@versatiles/style/node_modules/balanced-match": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-3.0.1.tgz", + "integrity": "sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==", + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/@versatiles/style/node_modules/brace-expansion": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-4.0.0.tgz", + "integrity": "sha512-l/mOwLWs7BQIgOKrL46dIAbyCKvPV7YJPDspkuc88rHsZRlg3hptUGdU7Trv0VFP4d3xnSGBQrKu5ZvGB7UeIw==", + "license": "MIT", + "dependencies": { + "balanced-match": "^3.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@vitest/browser": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", - "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.1.1.tgz", + "integrity": "sha512-A+A69mMtrj1RPh96LfXGc309KSXhy2MslvyL+cp9+Y5EVdoJD4KfXDx/3SSlRGN70+hIoJ3RRbTidTvj18PZ/A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.1", - "loupe": "^3.1.3", - "tinyrainbow": "^2.0.0" + "@testing-library/dom": "^10.4.0", + "@testing-library/user-event": "^14.6.1", + "@vitest/mocker": "3.1.1", + "@vitest/utils": "3.1.1", + "magic-string": "^0.30.17", + "sirv": "^3.0.1", + "tinyrainbow": "^2.0.0", + "ws": "^8.18.1" }, "funding": { "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "3.1.1", + "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } } }, - "node_modules/@vitest/runner/node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "node_modules/@vitest/browser/node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" } }, - "node_modules/@vitest/snapshot": { + "node_modules/@vitest/browser/node_modules/@vitest/pretty-format": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.1.tgz", - "integrity": "sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", + "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.1", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { + "node_modules/@vitest/browser/node_modules/@vitest/utils": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", - "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", "dev": true, "license": "MIT", "dependencies": { + "@vitest/pretty-format": "3.1.1", + "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/snapshot/node_modules/tinyrainbow": { + "node_modules/@vitest/browser/node_modules/tinyrainbow": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", @@ -5309,339 +5587,658 @@ "node": ">=14.0.0" } }, - "node_modules/a-sync-waterfall": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "node_modules/@vitest/coverage-v8": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.1.tgz", + "integrity": "sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^1.0.2", + "debug": "^4.4.0", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "std-env": "^3.8.1", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" }, - "engines": { - "node": ">=0.4.0" + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "3.1.1", + "vitest": "3.1.1" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@vitest/coverage-v8/node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "license": "MIT", + "engines": { + "node": ">=18" } }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "node_modules/@vitest/coverage-v8/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">= 14" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@vitest/coverage-v8/node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, + "license": "ISC", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@vitest/coverage-v8/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, - "peer": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@vitest/coverage-v8/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "type-fest": "^0.21.3" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/@vitest/coverage-v8/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@vitest/coverage-v8/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@vitest/coverage-v8/node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" }, "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/append-transform": { + "node_modules/@vitest/coverage-v8/node_modules/tinyrainbow": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, "license": "MIT", - "dependencies": { - "default-require-extensions": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "node_modules/@vitest/mocker": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.1.tgz", + "integrity": "sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==", "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "@vitest/spy": "3.1.1", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "node_modules/argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", - "dev": true - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "node_modules/@vitest/mocker/node_modules/@vitest/spy": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.1.tgz", + "integrity": "sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==", "dev": true, + "license": "MIT", "dependencies": { - "dequal": "^2.0.3" + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "engines": { - "node": ">=8" + "node_modules/@vitest/runner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.1.tgz", + "integrity": "sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.1.1", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" + "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", + "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/@vitest/runner/node_modules/@vitest/utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.1.1", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/@vitest/runner/node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "node_modules/@vitest/snapshot": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.1.tgz", + "integrity": "sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.1.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==" + "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", + "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "node_modules/@vitest/snapshot/node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=14.0.0" } }, - "node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, - "dependencies": { - "tslib": "^2.0.1" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "engines": { + "node": ">= 14" + } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "peer": true, "dependencies": { - "possible-typed-array-names": "^1.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "type-fest": "^0.21.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "peer": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^5.0.4", @@ -5754,18 +6351,128 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "node_modules/bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, "engines": { "node": ">= 0.8" } }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/bcp-47": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-1.0.8.tgz", @@ -5906,12 +6613,49 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/buffer-builder": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", "dev": true }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -6070,6 +6814,18 @@ ], "license": "CC-BY-4.0" }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chai": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", @@ -6110,6 +6866,42 @@ "node": ">=10" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", @@ -6118,6 +6910,18 @@ "is-regex": "^1.0.3" } }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/check-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", @@ -6127,6 +6931,36 @@ "node": ">= 16" } }, + "node_modules/chevrotain": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", + "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@chevrotain/cst-dts-gen": "11.0.3", + "@chevrotain/gast": "11.0.3", + "@chevrotain/regexp-to-ast": "11.0.3", + "@chevrotain/types": "11.0.3", + "@chevrotain/utils": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/chevrotain-allstar": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", + "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "chevrotain": "^11.0.0" + } + }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -6166,6 +7000,22 @@ } } }, + "node_modules/chromium-bidi": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", + "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -6382,6 +7232,18 @@ "node": ">= 0.8" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", @@ -6454,6 +7316,14 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -6570,6 +7440,17 @@ "node": ">= 0.4.0" } }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "layout-base": "^1.0.0" + } + }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -6717,1733 +7598,3025 @@ "node": ">=0.8" } }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/cytoscape": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.0.tgz", + "integrity": "sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, - "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", "dev": true, "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "peer": true, + "dependencies": { + "cose-base": "^1.0.0" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "peerDependencies": { + "cytoscape": "^3.2.0" } }, - "node_modules/dedent-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true, + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", "dev": true, - "engines": { - "node": ">=6" + "license": "MIT", + "peer": true, + "dependencies": { + "layout-base": "^2.0.0" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, "engines": { - "node": ">=4.0.0" + "node": ">=12" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", "dev": true, + "license": "ISC", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/default-require-extensions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "strip-bom": "^4.0.0" + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "d3-path": "1 - 3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", "dev": true, + "license": "ISC", + "peer": true, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "d3-array": "^3.2.0" + }, "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "delaunator": "5" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=12" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", "dev": true, + "license": "ISC", + "peer": true, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/dev-ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, "bin": { - "dev-ip": "lib/dev-ip.js" + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" }, "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/devalue": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", - "dev": true - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/diffable-html": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/diffable-html/-/diffable-html-4.1.0.tgz", - "integrity": "sha512-++kyNek+YBLH8cLXS+iTj/Hiy2s5qkRJEJ8kgu/WHbFrVY2vz9xPFUT+fii2zGF0m1CaojDlQJjkfrCt7YWM1g==", + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", "dev": true, - "license": "MIT", - "dependencies": { - "htmlparser2": "^3.9.2" + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/dir-glob": { + "node_modules/d3-fetch": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "path-type": "^4.0.0" + "d3-dsv": "1 - 3" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/doctrine": { + "node_modules/d3-force": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { - "esutils": "^2.0.2" + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" }, "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==" - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "license": "ISC", + "peer": true, + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", "dev": true, - "license": "BSD-2-Clause" + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } }, - "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "1" + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, + "license": "ISC", + "peer": true, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "readable-stream": "^2.0.2" + "internmap": "^1.0.0" } }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "license": "BSD-3-Clause", + "peer": true }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "safe-buffer": "~5.1.0" + "d3-path": "1" } }, - "node_modules/earcut": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.1.tgz", - "integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "license": "ISC", + "peer": true }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/electron-to-chromium": { - "version": "1.5.150", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz", - "integrity": "sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==", + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "d3-path": "^3.1.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "d3-array": "2 - 3" }, "engines": { - "node": ">=8.6" + "node": ">=12" } }, - "node_modules/enquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { - "ansi-regex": "^5.0.1" + "d3-time": "1 - 3" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", "dev": true, - "license": "BSD-2-Clause" + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } }, - "node_modules/env-ci": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-11.1.0.tgz", - "integrity": "sha512-Z8dnwSDbV1XYM9SBF2J0GcNVvmfmfh3a49qddGIROhBoVro6MZVTji15z/sJbQ2ko2ei8n988EU1wzoLU/tF+g==", + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "execa": "^8.0.0", - "java-properties": "^1.0.2" + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" }, "engines": { - "node": "^18.17 || >=20.6.1" + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" } }, - "node_modules/env-ci/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" }, "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=12" } }, - "node_modules/env-ci/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/dagre-d3-es": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz", + "integrity": "sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==", "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "peer": true, + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" } }, - "node_modules/env-ci/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, + "license": "MIT", + "optional": true, "engines": { - "node": ">=16.17.0" + "node": ">= 14" } }, - "node_modules/env-ci/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/env-ci/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/env-ci/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/decode-named-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "character-entities": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/env-ci/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/env-ci/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/env-ci/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/env-ci/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "peer": true, "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "optional": true, "dependencies": { - "es-errors": "^1.3.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 14" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/degenerator/node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "tslib": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/es-toolkit": { - "version": "1.37.2", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.37.2.tgz", - "integrity": "sha512-ADDfk+pPFF0ofMpRAIc6on01p8heiuwuuJsYLzTP4UOjxVK9QsE2+0D1Q4J/zX2XBo6ac+27H5++YBIwmGAX/g==", + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", "dev": true, - "license": "MIT", - "workspaces": [ - "docs", - "benchmarks" - ] + "license": "ISC", + "peer": true, + "dependencies": { + "robust-predicates": "^3.0.2" + } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/esbuild": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", - "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, - "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", "bin": { - "esbuild": "bin/esbuild" + "dev-ip": "lib/dev-ip.js" }, "engines": { - "node": ">=18" + "node": ">= 0.8.0" + } + }, + "node_modules/devalue": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "dev": true + }, + "node_modules/devtools-protocol": { + "version": "0.0.1312386", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz", + "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/diffable-html": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/diffable-html/-/diffable-html-4.1.0.tgz", + "integrity": "sha512-++kyNek+YBLH8cLXS+iTj/Hiy2s5qkRJEJ8kgu/WHbFrVY2vz9xPFUT+fii2zGF0m1CaojDlQJjkfrCt7YWM1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^3.9.2" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "peer": true, + "dependencies": { + "esutils": "^2.0.2" }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==" + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/dompurify": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", + "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", + "dev": true, + "license": "(MPL-2.0 OR Apache-2.0)", + "peer": true, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/earcut": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.1.tgz", + "integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.150", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz", + "integrity": "sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/env-ci": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-11.1.0.tgz", + "integrity": "sha512-Z8dnwSDbV1XYM9SBF2J0GcNVvmfmfh3a49qddGIROhBoVro6MZVTji15z/sJbQ2ko2ei8n988EU1wzoLU/tF+g==", + "dev": true, + "dependencies": { + "execa": "^8.0.0", + "java-properties": "^1.0.2" + }, + "engines": { + "node": "^18.17 || >=20.6.1" + } + }, + "node_modules/env-ci/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/env-ci/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/env-ci/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/env-ci/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-toolkit": { + "version": "1.37.2", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.37.2.tgz", + "integrity": "sha512-ADDfk+pPFF0ofMpRAIc6on01p8heiuwuuJsYLzTP4UOjxVK9QsE2+0D1Q4J/zX2XBo6ac+27H5++YBIwmGAX/g==", + "dev": true, + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, + "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/esbuild-register": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", - "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "peerDependencies": { - "esbuild": ">=0.12 <1" + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", - "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", "cpu": [ - "ppc64" + "x64" ], "dev": true, "optional": true, "os": [ - "aix" + "sunos" ], "peer": true, "engines": { "node": ">=18" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", - "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", "cpu": [ - "arm" + "arm64" ], "dev": true, "optional": true, "os": [ - "android" + "win32" ], "peer": true, "engines": { "node": ">=18" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", - "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", "cpu": [ - "arm64" + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" ], + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "peer": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.2.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-svelte": { + "version": "2.46.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.1.tgz", + "integrity": "sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@jridgewell/sourcemap-codec": "^1.4.15", + "eslint-compat-utils": "^0.5.1", + "esutils": "^2.0.3", + "known-css-properties": "^0.35.0", + "postcss": "^8.4.38", + "postcss-load-config": "^3.1.4", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.1.0", + "semver": "^7.6.2", + "svelte-eslint-parser": "^0.43.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "optional": true, - "os": [ - "android" - ], "peer": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, "engines": { - "node": ">=18" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", - "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", - "cpu": [ - "x64" - ], + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "optional": true, - "os": [ - "android" - ], "peer": true, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", - "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", - "cpu": [ - "arm64" - ], + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", - "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", - "cpu": [ - "x64" - ], + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], "peer": true, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", - "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", - "cpu": [ - "arm64" - ], + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=18" + "node": ">=10.13.0" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", - "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", - "cpu": [ - "x64" - ], + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=18" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", - "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", - "cpu": [ - "arm" - ], + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "peer": true, "engines": { - "node": ">=18" + "node": ">= 4" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", - "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", - "cpu": [ - "arm64" - ], + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "peer": true, - "engines": { - "node": ">=18" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", - "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", - "cpu": [ - "ia32" - ], + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", - "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", - "cpu": [ - "loong64" - ], + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "peer": true, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", - "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", - "cpu": [ - "mips64el" - ], + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "dev": true + }, + "node_modules/espree": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "peer": true, + "dependencies": { + "acorn": "^8.6.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", - "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", - "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", - "cpu": [ - "riscv64" - ], + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, "engines": { - "node": ">=18" + "node": ">=0.10" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", - "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", - "cpu": [ - "s390x" - ], + "node_modules/esrap": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz", + "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", - "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", - "cpu": [ - "x64" - ], + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=18" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", - "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", - "cpu": [ - "x64" - ], + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, "engines": { - "node": ">=18" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", - "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", - "cpu": [ - "x64" - ], + "node_modules/estree-util-attach-comments": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz", + "integrity": "sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=18" + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", - "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", - "cpu": [ - "x64" - ], + "node_modules/estree-util-is-identifier-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", + "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", - "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", - "cpu": [ - "arm64" - ], + "node_modules/estree-util-to-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz", + "integrity": "sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", - "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", - "cpu": [ - "ia32" - ], + "node_modules/estree-util-to-js/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "optional": true, - "os": [ - "win32" - ], - "peer": true, "engines": { - "node": ">=18" + "node": ">= 8" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", - "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", - "cpu": [ - "x64" - ], + "node_modules/estree-util-visit": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", + "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "@types/estree": "^1.0.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "peer": true, - "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.2.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^7.5.4" + "os-homedir": "^1.0.1" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint-plugin-svelte": { - "version": "2.46.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.1.tgz", - "integrity": "sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==", + "node_modules/expect-playwright": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/expect-playwright/-/expect-playwright-0.8.0.tgz", + "integrity": "sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg==", + "dev": true, + "license": "MIT" + }, + "node_modules/expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/exsolve": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", + "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==", "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@jridgewell/sourcemap-codec": "^1.4.15", - "eslint-compat-utils": "^0.5.1", - "esutils": "^2.0.3", - "known-css-properties": "^0.35.0", - "postcss": "^8.4.38", - "postcss-load-config": "^3.1.4", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.1.0", - "semver": "^7.6.2", - "svelte-eslint-parser": "^0.43.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" + "bin": { + "extract-zip": "cli.js" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + "engines": { + "node": ">= 10.17.0" }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "pump": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/fast-content-type-parse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", + "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", "dev": true, - "peer": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "node": ">=8.6.0" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "peer": true + "license": "MIT", + "optional": true, + "dependencies": { + "pend": "~1.2.0" + } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dev": true, - "peer": true, + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "peer": true, "dependencies": { - "is-glob": "^4.0.3" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=10.13.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "peer": true, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dependencies": { - "type-fest": "^0.20.2" + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/filesize": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", + "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", "dev": true, - "peer": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 4" + "node": ">= 10.4.0" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "peer": true, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { - "argparse": "^2.0.1" + "to-regex-range": "^5.0.1" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { - "ansi-regex": "^5.0.1" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/esm-env": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", - "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", - "dev": true - }, - "node_modules/espree": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", - "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "acorn": "^8.6.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "semver": "^6.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "semver": "bin/semver.js" + } + }, + "node_modules/find-file-up": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", + "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-exists-sync": "^0.1.0", + "resolve-dir": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/find-pkg": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", + "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", "dev": true, + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "find-file-up": "^0.1.2" }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/esrap": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz", - "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==", + "node_modules/find-process": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.10.tgz", + "integrity": "sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "chalk": "~4.1.2", + "commander": "^12.1.0", + "loglevel": "^1.9.2" + }, + "bin": { + "find-process": "bin/find-process.js" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/find-versions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-6.0.0.tgz", + "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", "dev": true, "dependencies": { - "@types/estree": "^1.0.0" + "semver-regex": "^4.0.5", + "super-regex": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": ">=0.8.x" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "peer": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "is-callable": "^1.2.7" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "os-homedir": "^1.0.1" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/expect-playwright": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/expect-playwright/-/expect-playwright-0.8.0.tgz", - "integrity": "sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg==", + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "license": "MIT" + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } }, - "node_modules/expect-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", - "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/fast-content-type-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", - "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/fastify" + "url": "https://github.com/sponsors/feross" }, { - "type": "opencollective", - "url": "https://opencollective.com/fastify" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "node_modules/fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=14.14" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dependencies": { - "reusify": "^1.0.4" - } + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/figures": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-timeout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", + "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", "dev": true, - "dependencies": { - "is-unicode-supported": "^2.0.0" - }, "engines": { "node": ">=18" }, @@ -8451,202 +10624,233 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true, - "peer": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, + "peer": true + }, + "node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.6.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { - "minimatch": "^5.0.1" + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/geojson-vt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dependencies": { - "brace-expansion": "^2.0.1" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filesize": { - "version": "10.1.6", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", - "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">= 10.4.0" + "node": ">=8.0.0" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dependencies": { - "to-regex-range": "^5.0.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-uri": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" }, "engines": { - "node": ">= 0.8" + "node": ">= 14" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/git-log-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", + "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "0.6.8" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "license": "MIT", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8" + "node": "*" }, "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "semver": "^6.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">= 6" } }, - "node_modules/find-file-up": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", - "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", + "node_modules/global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", "dev": true, "license": "MIT", "dependencies": { - "fs-exists-sync": "^0.1.0", - "resolve-dir": "^0.1.0" + "global-prefix": "^0.1.4", + "is-windows": "^0.2.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/find-pkg": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", - "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", + "node_modules/global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", "dev": true, "license": "MIT", "dependencies": { - "find-file-up": "^0.1.2" + "homedir-polyfill": "^1.0.0", + "ini": "^1.3.4", + "is-windows": "^0.2.0", + "which": "^1.2.12" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-process": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.10.tgz", - "integrity": "sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==", + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "chalk": "~4.1.2", - "commander": "^12.1.0", - "loglevel": "^1.9.2" + "isexe": "^2.0.0" }, "bin": { - "find-process": "bin/find-process.js" + "which": "bin/which" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, "engines": { "node": ">=18" }, @@ -8654,15 +10858,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-versions": { + "node_modules/globby/node_modules/path-type": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-6.0.0.tgz", - "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", "dev": true, - "dependencies": { - "semver-regex": "^4.0.5", - "super-regex": "^1.0.0" - }, "engines": { "node": ">=18" }, @@ -8670,56 +10870,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/globby/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, - "peer": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "node_modules/globby/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "engines": { - "node": ">=4.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "peer": true, - "dependencies": { - "is-callable": "^1.2.7" - }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "engines": { "node": ">= 0.4" }, @@ -8727,884 +10905,1052 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/graphql": { + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", + "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dev": true, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">=6.0" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } + "license": "MIT", + "peer": true }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "node_modules/hamljs": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz", + "integrity": "sha512-/chXRp4WpL47I+HX1vCCdSbEXAljEG2FBMmgO7Am0bYsqgnEjreeWzUdX1onXqwZtcfgxbCg5WtEYYvuZ5muBg==" }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dependencies": { - "safe-buffer": "~5.1.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", - "dev": true, - "license": "MIT", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "peer": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=14.14" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function-timeout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", - "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "peer": true + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } }, - "node_modules/fuzzy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": ">= 0.6.0" + "node": ">= 0.4" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/hast-util-from-html": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-1.0.2.tgz", + "integrity": "sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.9.0" + "optional": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^7.0.0", + "vfile": "^5.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/geojson-vt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", - "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/hast-util-from-html/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", "dev": true, + "license": "BSD-2-Clause", + "optional": true, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/hast-util-from-html/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" + "entities": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/hast-util-from-parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", + "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.0.0" + "optional": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "hastscript": "^7.0.0", + "property-information": "^6.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/hast-util-parse-selector": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "@types/hast": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" + "node_modules/hast-util-to-estree": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz", + "integrity": "sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.1", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/git-log-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", - "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", + "node_modules/hast-util-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", + "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "0.6.8" + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "parse-passwd": "^1.0.0" }, "engines": { - "node": "*" + "node": ">=0.10.0" + } + }, + "node_modules/hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">= 6" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, - "license": "MIT", "dependencies": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "license": "MIT", "dependencies": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" - }, + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/http-equiv-refresh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz", + "integrity": "sha512-TScO04soylRN9i/QdOdgZyhydXg9z6XdaGzEyOgDKycePeDeTT4KvigjBcI+tgfTlieLWauGORMq5F1eIDa+1w==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, - "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "dev": true, "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" }, - "engines": { - "node": ">=18" + "bin": { + "http-server": "bin/http-server" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/globby/node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, - "engines": { - "node": ">=18" + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 14" } }, - "node_modules/globby/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { - "node": ">=14.16" + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/globby/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", "dev": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/immutable": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", + "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/graphql": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", - "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "optional": true, - "peer": true, "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + "node": ">=4" } }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "node_modules/import-from-esm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-2.0.0.tgz", + "integrity": "sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==", + "dev": true, "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" + "debug": "^4.3.4", + "import-meta-resolve": "^4.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=18.20" } }, - "node_modules/hamljs": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz", - "integrity": "sha512-/chXRp4WpL47I+HX1vCCdSbEXAljEG2FBMmgO7Am0bYsqgnEjreeWzUdX1onXqwZtcfgxbCg5WtEYYvuZ5muBg==" - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "bin": { - "handlebars": "bin/handlebars" + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=0.4.7" + "node": ">=8" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-flag": { + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", "dev": true, - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true, + "license": "ISC", + "peer": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "dev": true, "dependencies": { - "has-symbols": "^1.0.3" + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 12" } }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dependencies": { - "function-bind": "^1.1.2" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/he": { + "node_modules/is-arguments": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, - "bin": { - "he": "bin/he" + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/headers-polyfill": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", - "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", - "dev": true, - "optional": true, - "peer": true + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "dev": true, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "dependencies": { - "parse-passwd": "^1.0.0" - }, + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/hook-std": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "peer": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dependencies": { - "lru-cache": "^10.0.1" + "hasown": "^2.0.2" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "license": "MIT", + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "acorn": "^7.1.1", + "object-assign": "^4.1.1" } }, - "node_modules/http-equiv-refresh": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz", - "integrity": "sha512-TScO04soylRN9i/QdOdgZyhydXg9z6XdaGzEyOgDKycePeDeTT4KvigjBcI+tgfTlieLWauGORMq5F1eIDa+1w==", + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">= 0.10" + "node": ">=0.4.0" } }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { - "node": ">= 14" + "node": ">=0.10.0" } }, - "node_modules/http-server": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "basic-auth": "^2.0.1", - "chalk": "^4.1.2", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.6", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" - }, - "bin": { - "http-server": "bin/http-server" - }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, + "license": "MIT", "engines": { - "node": ">= 14" + "node": ">=6" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, "engines": { - "node": ">=10.17.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/ignore": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", - "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==" + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", "dev": true, + "optional": true, + "peer": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">= 4" + "node": ">=0.12.0" } }, - "node_modules/immutable": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", - "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", - "dev": true + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, - "node_modules/import-from-esm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-2.0.0.tgz", - "integrity": "sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==", + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "import-meta-resolve": "^4.0.0" - }, - "engines": { - "node": ">=18.20" + "@types/estree": "^1.0.6" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "engines": { + "node": ">=8" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "peer": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, "engines": { - "node": ">=0.8.19" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", - "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, "engines": { "node": ">=18" @@ -9613,479 +11959,638 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node_modules/is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "node_modules/install": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", - "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==", - "license": "MIT", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/iso-639-1": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.15.tgz", + "integrity": "sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==", "engines": { - "node": ">= 0.10" + "node": ">=6.0" } }, - "node_modules/into-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", - "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "node_modules/issue-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", "dev": true, "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17 || >=20.6.1" } }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "append-transform": "^2.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=8" } }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, - "peer": true, + "license": "BSD-3-Clause", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "license": "ISC", "dependencies": { - "binary-extensions": "^2.0.0" + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, "engines": { "node": ">=8" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, "dependencies": { - "hasown": "^2.0.2" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, "bin": { - "acorn": "bin/acorn" + "jake": "bin/cli.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-json": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", - "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==" - }, - "node_modules/is-node-process": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", - "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "optional": true, - "peer": true + "license": "MIT" }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "node_modules/is-reference": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", - "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.6" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "node_modules/jest-config/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/iso-639-1": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.15.tgz", - "integrity": "sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==", - "engines": { - "node": ">=6.0" - } + "node_modules/jest-each/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, - "node_modules/issue-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", - "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^18.17 || >=20.6.1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "append-transform": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "node_modules/jest-junit": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", + "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "Apache-2.0", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "mkdirp": "^1.0.4", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2", + "xml": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">=10.12.0" } }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "node_modules/jest-junit/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "node_modules/jest-junit/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", @@ -10095,157 +12600,120 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, + "license": "MIT", "engines": { "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "engines": { - "node": ">= 0.6.0" - } + "license": "MIT" }, - "node_modules/jest": { + "node_modules/jest-matcher-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-changed-files": { + "node_modules/jest-matcher-utils/node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus": { + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-message-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", + "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", - "@types/node": "*", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -10253,7 +12721,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { + "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -10266,7 +12734,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/pretty-format": { + "node_modules/jest-message-util/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", @@ -10281,145 +12749,271 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/react-is": { + "node_modules/jest-message-util/node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/jest-cli": { + "node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-playwright-preset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jest-playwright-preset/-/jest-playwright-preset-4.0.0.tgz", + "integrity": "sha512-+dGZ1X2KqtwXaabVjTGxy0a3VzYfvYsWaRcuO8vMhyclHSOpGSI1+5cmlqzzCwQ3+fv0EjkTc7I5aV9lo08dYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect-playwright": "^0.8.0", + "jest-process-manager": "^0.4.0", + "nyc": "^15.1.0", + "playwright-core": ">=1.2.0", + "rimraf": "^3.0.2", + "uuid": "^8.3.2" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "jest": "^29.3.1", + "jest-circus": "^29.3.1", + "jest-environment-node": "^29.3.1", + "jest-runner": "^29.3.1" + } + }, + "node_modules/jest-playwright-preset/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" }, "peerDependenciesMeta": { - "node-notifier": { + "jest-resolve": { "optional": true } } }, - "node_modules/jest-config": { + "node_modules/jest-process-manager": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jest-process-manager/-/jest-process-manager-0.4.0.tgz", + "integrity": "sha512-80Y6snDyb0p8GG83pDxGI/kQzwVTkCxc7ep5FPe/F6JYdvRDhwr6RzRmPSP7SEwuLhxo80lBS/NqOdUIbHIfhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/wait-on": "^5.2.0", + "chalk": "^4.1.0", + "cwd": "^0.10.0", + "exit": "^0.1.2", + "find-process": "^1.4.4", + "prompts": "^2.4.1", + "signal-exit": "^3.0.3", + "spawnd": "^5.0.0", + "tree-kill": "^1.2.2", + "wait-on": "^7.0.0" + } + }, + "node_modules/jest-process-manager/node_modules/wait-on": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", + "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.6.1", + "joi": "^17.11.0", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.1" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", + "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", "jest-regex-util": "^29.6.3", "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", + "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "strip-bom": "^4.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-serializer-html": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/jest-serializer-html/-/jest-serializer-html-7.1.0.tgz", + "integrity": "sha512-xYL2qC7kmoYHJo8MYqJkzrl/Fdlx+fat4U1AqYg+kafqwcKPiMkOcjWHPKhueuNEgr+uemhGc+jqXYiwCyRyLA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "diffable-html": "^4.1.0" } }, - "node_modules/jest-config/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff": { + "node_modules/jest-snapshot": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { + "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -10432,7 +13026,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-diff/node_modules/pretty-format": { + "node_modules/jest-snapshot/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", @@ -10447,44 +13041,50 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/react-is": { + "node_modules/jest-snapshot/node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/jest-docblock": { + "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each": { + "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", + "leven": "^3.1.0", "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { + "node_modules/jest-validate/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -10497,7 +13097,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/pretty-format": { + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", @@ -10512,1534 +13125,1898 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/react-is": { + "node_modules/jest-validate/node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/jest-watch-typeahead": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.2.tgz", + "integrity": "sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "ansi-escapes": "^6.0.0", + "chalk": "^5.2.0", + "jest-regex-util": "^29.0.0", + "jest-watcher": "^29.0.0", + "slash": "^5.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-junit": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", - "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" + "node": "^14.17.0 || ^16.10.0 || >=18.0.0" }, - "engines": { - "node": ">=10.12.0" + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0 || ^29.0.0" } }, - "node_modules/jest-junit/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/jest-watch-typeahead/node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/jest-junit/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "node": ">=14.16" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-watch-typeahead/node_modules/char-regex": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", + "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12.20" } }, - "node_modules/jest-leak-detector/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", "dev": true, "license": "MIT", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "node_modules/jest-watcher": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util": { + "node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + }, + "node_modules/jquery-pjax": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jquery-pjax/-/jquery-pjax-2.0.1.tgz", + "integrity": "sha512-xMSUMh5p0f0O2XMh13YbkS94NWuWkV9k+3ouECvVWb9Li6OCF7BVinotGwbUYDKYWA0PCoTq64dTYiJwmN6H6Q==" + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12.0.0" } }, - "node_modules/jest-playwright-preset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jest-playwright-preset/-/jest-playwright-preset-4.0.0.tgz", - "integrity": "sha512-+dGZ1X2KqtwXaabVjTGxy0a3VzYfvYsWaRcuO8vMhyclHSOpGSI1+5cmlqzzCwQ3+fv0EjkTc7I5aV9lo08dYw==", + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", - "dependencies": { - "expect-playwright": "^0.8.0", - "jest-process-manager": "^0.4.0", - "nyc": "^15.1.0", - "playwright-core": ">=1.2.0", - "rimraf": "^3.0.2", - "uuid": "^8.3.2" + "bin": { + "jsesc": "bin/jsesc" }, - "peerDependencies": { - "jest": "^29.3.1", - "jest-circus": "^29.3.1", - "jest-environment-node": "^29.3.1", - "jest-runner": "^29.3.1" + "engines": { + "node": ">=6" } }, - "node_modules/jest-playwright-preset/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/jest-process-manager": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/jest-process-manager/-/jest-process-manager-0.4.0.tgz", - "integrity": "sha512-80Y6snDyb0p8GG83pDxGI/kQzwVTkCxc7ep5FPe/F6JYdvRDhwr6RzRmPSP7SEwuLhxo80lBS/NqOdUIbHIfhw==", - "dev": true, - "license": "MIT", + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", "dependencies": { - "@types/wait-on": "^5.2.0", - "chalk": "^4.1.0", - "cwd": "^0.10.0", - "exit": "^0.1.2", - "find-process": "^1.4.4", - "prompts": "^2.4.1", - "signal-exit": "^3.0.3", - "spawnd": "^5.0.0", - "tree-kill": "^1.2.2", - "wait-on": "^7.0.0" + "is-promise": "^2.0.0", + "promise": "^7.0.1" } }, - "node_modules/jest-process-manager/node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "node_modules/junk": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", + "integrity": "sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/katex": { + "version": "0.16.22", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", + "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], "license": "MIT", + "peer": true, "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", - "lodash": "^4.17.21", - "minimist": "^1.2.8", - "rxjs": "^7.8.1" + "commander": "^8.3.0" }, "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=12.0.0" + "katex": "cli.js" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 12" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "json-buffer": "3.0.1" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==", "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, + "peer": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "node_modules/known-css-properties": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "dev": true + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/langium": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz", + "integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "chevrotain": "~11.0.3", + "chevrotain-allstar": "~0.3.0", + "vscode-languageserver": "~9.0.1", + "vscode-languageserver-textdocument": "~1.0.11", + "vscode-uri": "~3.0.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/jest-serializer-html": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/jest-serializer-html/-/jest-serializer-html-7.1.0.tgz", - "integrity": "sha512-xYL2qC7kmoYHJo8MYqJkzrl/Fdlx+fat4U1AqYg+kafqwcKPiMkOcjWHPKhueuNEgr+uemhGc+jqXYiwCyRyLA==", + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", "dev": true, "license": "MIT", - "dependencies": { - "diffable-html": "^4.1.0" - } + "peer": true }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "uc.micro": "^1.0.1" + } + }, + "node_modules/liquidjs": { + "version": "10.21.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.21.0.tgz", + "integrity": "sha512-DouqxNU2jfoZzb1LinVjOc/f6ssitGIxiDJT+kEKyYqPSSSd+WmGOAhtWbVm1/n75svu4aQ+FyQ3ctd3wh1bbw==", + "dependencies": { + "commander": "^10.0.0" + }, + "bin": { + "liquid": "bin/liquid.js", + "liquidjs": "bin/liquid.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/liquidjs" } }, - "node_modules/jest-snapshot/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" + "node_modules/liquidjs/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "node_modules/list-to-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", + "integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-validate/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true, "license": "MIT" }, - "node_modules/jest-watch-typeahead": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.2.tgz", - "integrity": "sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^6.0.0", - "chalk": "^5.2.0", - "jest-regex-util": "^29.0.0", - "jest-watcher": "^29.0.0", - "slash": "^5.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0 || ^29.0.0" - } + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true }, - "node_modules/jest-watch-typeahead/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true + }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">= 0.6.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" } }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, + "optional": true, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jest-watch-typeahead/node_modules/char-regex": { + "node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "dev": true + }, + "node_modules/lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", - "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.20" + "dependencies": { + "tslib": "^2.0.3" } }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luxon": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "lz-string": "bin/bin.js" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "semver": "^7.5.3" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "tmpl": "1.0.5" } }, - "node_modules/jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + "node_modules/maplibre-gl": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.5.0.tgz", + "integrity": "sha512-p8AOPuzzqn1ZA9gcXxKw0IED715we/2Owa/YUr6PANmgMvNMe/JG+V/C1hRra43Wm62Biz+Aa8AgbOLJimA8tA==", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^23.2.2", + "@types/geojson": "^7946.0.16", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.1", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.3", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } }, - "node_modules/jquery-pjax": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jquery-pjax/-/jquery-pjax-2.0.1.tgz", - "integrity": "sha512-xMSUMh5p0f0O2XMh13YbkS94NWuWkV9k+3ouECvVWb9Li6OCF7BVinotGwbUYDKYWA0PCoTq64dTYiJwmN6H6Q==" + "node_modules/maplibre-gl/node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==" + "node_modules/maplibre-gl/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/js-tokens": { + "node_modules/maplibre-gl/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/maplibre-gl/node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/markdown-it": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", + "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "markdown-it": "bin/markdown-it.js" } }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", - "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", - "dev": true, - "peer": true, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "engines": { - "node": ">=12.0.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/marked": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", "dev": true, - "license": "MIT", "bin": { - "jsesc": "bin/jsesc" + "marked": "bin/marked.js" }, "engines": { - "node": ">=6" + "node": ">= 18" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-pretty-compact": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", - "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/marked-terminal": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", + "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "ansi-escapes": "^7.0.0", + "ansi-regex": "^6.1.0", + "chalk": "^5.4.1", + "cli-highlight": "^2.1.11", + "cli-table3": "^0.6.5", + "node-emoji": "^2.2.0", + "supports-hyperlinks": "^3.1.0" }, "engines": { - "node": ">=6" + "node": ">=16.0.0" + }, + "peerDependencies": { + "marked": ">=1 <16" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "node_modules/marked-terminal/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, - "license": "MIT" + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/jsonfile": { + "node_modules/marked-terminal/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "engines": { + "node": ">=12" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/junk": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", - "integrity": "sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/kdbush": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", - "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, + "node_modules/maximatch": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", + "integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==", "dependencies": { - "json-buffer": "3.0.1" + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/maximatch/node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/maximatch/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dependencies": { + "array-uniq": "^1.0.1" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/known-css-properties": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", - "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", - "dev": true - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", + "node_modules/maximatch/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "node_modules/mdast-util-mdx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", + "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "optional": true, + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "node_modules/mdast-util-mdx-expression": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", + "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "uc.micro": "^1.0.1" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/liquidjs": { - "version": "10.21.0", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.21.0.tgz", - "integrity": "sha512-DouqxNU2jfoZzb1LinVjOc/f6ssitGIxiDJT+kEKyYqPSSSd+WmGOAhtWbVm1/n75svu4aQ+FyQ3ctd3wh1bbw==", + "node_modules/mdast-util-mdx-jsx": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", + "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "commander": "^10.0.0" - }, - "bin": { - "liquid": "bin/liquid.js", - "liquidjs": "bin/liquid.js" - }, - "engines": { - "node": ">=14" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "mdast-util-from-markdown": "^1.1.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/liquidjs" - } - }, - "node_modules/liquidjs/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" + "url": "https://opencollective.com/unified" } }, - "node_modules/list-to-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", - "integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==" - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "node_modules/mdast-util-mdxjs-esm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", + "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", "dev": true, - "engines": { - "node": ">=4" + "license": "MIT", + "optional": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "p-locate": "^4.1.0" + "@types/mdast": "^3.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.deburr": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "node_modules/mdx-mermaid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-2.0.3.tgz", + "integrity": "sha512-aVLaaVbQD8KmqzEk2AdLFb02MMENWkq5QQPD25sdtiswTIWk684JoaCOmy8oV+w3pthkcy2lRp0xVKIq1sLsqg==", "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true + "license": "MIT", + "optionalDependencies": { + "estree-util-to-js": "^1.2.0", + "estree-util-visit": "^1.2.1", + "hast-util-from-html": "^1.0.2", + "hast-util-to-estree": "^2.3.3", + "mdast-util-from-markdown": "^1.3.1", + "mdast-util-mdx": "^2.0.1", + "micromark-extension-mdxjs": "^1.0.1", + "puppeteer": "^22.15.0" + }, + "peerDependencies": { + "mermaid": ">=8.11.0", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "unist-util-visit": "^4.1.0" + } }, - "node_modules/loglevel": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", - "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.6.0" + "node": ">=18" }, "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/mermaid": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.6.0.tgz", + "integrity": "sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==", "dev": true, - "license": "ISC", + "license": "MIT", + "peer": true, "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/luxon": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", - "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", - "engines": { - "node": ">=12" + "@braintree/sanitize-url": "^7.0.4", + "@iconify/utils": "^2.1.33", + "@mermaid-js/parser": "^0.4.0", + "@types/d3": "^7.4.3", + "cytoscape": "^3.29.3", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.11", + "dayjs": "^1.11.13", + "dompurify": "^3.2.4", + "katex": "^0.16.9", + "khroma": "^2.1.0", + "lodash-es": "^4.17.21", + "marked": "^15.0.7", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "node_modules/mermaid/node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "dev": true, + "license": "MIT", + "peer": true, "bin": { - "lz-string": "bin/bin.js" + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz", + "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@types/estree": "^1.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/magicast": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", + "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@babel/parser": "^7.25.4", - "@babel/types": "^7.25.4", - "source-map-js": "^1.2.0" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/micromark-extension-mdx-md": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", + "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" + "micromark-util-types": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "node_modules/micromark-extension-mdxjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", + "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "optional": true, "dependencies": { - "tmpl": "1.0.5" + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/maplibre-gl": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.5.0.tgz", - "integrity": "sha512-p8AOPuzzqn1ZA9gcXxKw0IED715we/2Owa/YUr6PANmgMvNMe/JG+V/C1hRra43Wm62Biz+Aa8AgbOLJimA8tA==", + "node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", + "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@mapbox/geojson-rewind": "^0.5.2", - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.6", - "@mapbox/unitbezier": "^0.0.1", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "@maplibre/maplibre-gl-style-spec": "^23.2.2", - "@types/geojson": "^7946.0.16", - "@types/geojson-vt": "3.2.5", - "@types/mapbox__point-geometry": "^0.1.4", - "@types/mapbox__vector-tile": "^1.3.4", - "@types/pbf": "^3.0.5", - "@types/supercluster": "^7.1.3", - "earcut": "^3.0.1", - "geojson-vt": "^4.0.2", - "gl-matrix": "^3.4.3", - "global-prefix": "^4.0.0", - "kdbush": "^4.0.2", - "murmurhash-js": "^1.0.0", - "pbf": "^3.3.0", - "potpack": "^2.0.0", - "quickselect": "^3.0.0", - "supercluster": "^8.0.1", - "tinyqueue": "^3.0.0", - "vt-pbf": "^3.1.3" - }, - "engines": { - "node": ">=16.14.0", - "npm": ">=8.1.0" + "@types/estree": "^1.0.0", + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, "funding": { - "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/maplibre-gl/node_modules/global-prefix": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", - "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, "dependencies": { - "ini": "^4.1.3", - "kind-of": "^6.0.3", - "which": "^4.0.0" - }, - "engines": { - "node": ">=16" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/maplibre-gl/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/maplibre-gl/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "engines": { - "node": ">=16" + "node_modules/micromark-factory-mdx-expression": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz", + "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/maplibre-gl/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/markdown-it": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", - "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/marked-terminal": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", - "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", "dev": true, - "dependencies": { - "ansi-escapes": "^7.0.0", - "ansi-regex": "^6.1.0", - "chalk": "^5.4.1", - "cli-highlight": "^2.1.11", - "cli-table3": "^0.6.5", - "node-emoji": "^2.2.0", - "supports-hyperlinks": "^3.1.0" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "marked": ">=1 <16" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/marked-terminal/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/math-intrinsics": { + "node_modules/micromark-util-decode-string": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "engines": { - "node": ">= 0.4" + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/maximatch": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", - "integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==", + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz", + "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, "dependencies": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^2.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/maximatch/node_modules/array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true }, - "node_modules/maximatch/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/maximatch/node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "engines": { - "node": ">=0.10.0" + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-util-types": "^1.0.0" } }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } }, - "node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "optional": true }, "node_modules/micromatch": { "version": "4.0.8", @@ -12140,17 +15117,60 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" } }, "node_modules/mock-sophora": { @@ -12342,6 +15362,17 @@ "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", "dev": true }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -12503,6 +15534,7 @@ "which", "write-file-atomic" ], + "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^8.0.0", @@ -15607,6 +18639,42 @@ "node": ">=6" } }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/package-hash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", @@ -15630,6 +18698,14 @@ "dev": true, "license": "BlueOak-1.0.0" }, + "node_modules/package-manager-detector": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", + "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -15642,6 +18718,67 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -15727,6 +18864,14 @@ "tslib": "^2.0.3" } }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -15833,6 +18978,14 @@ "pbf": "bin/pbf" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -15962,6 +19115,19 @@ "node": ">=8" } }, + "node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, "node_modules/playwright": { "version": "1.51.1", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.1.tgz", @@ -16015,6 +19181,26 @@ "semver-compare": "^1.0.0" } }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, "node_modules/portfinder": { "version": "1.0.35", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.35.tgz", @@ -16409,7 +19595,6 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "peer": true, "engines": { "node": ">=0.4.0" } @@ -16457,6 +19642,18 @@ "node": ">=6" } }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -16468,6 +19665,38 @@ "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "optional": true, + "engines": { + "node": ">=12" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -16605,6 +19834,18 @@ "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -16614,6 +19855,45 @@ "node": ">=6" } }, + "node_modules/puppeteer": { + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.15.0.tgz", + "integrity": "sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@puppeteer/browsers": "2.3.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1312386", + "puppeteer-core": "22.15.0" + }, + "bin": { + "puppeteer": "lib/esm/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", + "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@puppeteer/browsers": "2.3.0", + "chromium-bidi": "0.6.3", + "debug": "^4.3.6", + "devtools-protocol": "0.0.1312386", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/pure-rand": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", @@ -16646,6 +19926,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT", + "peer": true + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -17100,6 +20398,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "dev": true, + "license": "Unlicense", + "peer": true + }, "node_modules/rollup": { "version": "4.39.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", @@ -17139,6 +20445,20 @@ "fsevents": "~2.3.2" } }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -18242,6 +21562,50 @@ "node": ">=8.0.0" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/sophora-components": { "resolved": "sophora-components", "link": true @@ -18274,6 +21638,18 @@ "source-map": "^0.6.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/spawn-error-forwarder": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", @@ -18511,6 +21887,21 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/streamx": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, "node_modules/strict-event-emitter": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", @@ -18626,10 +22017,26 @@ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/strip-ansi": { @@ -18725,6 +22132,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/subtag": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/subtag/-/subtag-0.5.0.tgz", @@ -19021,6 +22447,35 @@ "node": ">=16.0.0" } }, + "node_modules/tar-fs": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", + "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -19075,6 +22530,17 @@ "node": ">=8" } }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -19103,6 +22569,14 @@ "node": ">=0.8" } }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -19373,6 +22847,14 @@ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", @@ -19385,6 +22867,18 @@ "node": ">=0.8.0" } }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", @@ -19439,6 +22933,112 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", + "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", + "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", + "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universal-user-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", @@ -19534,6 +23134,14 @@ "requires-port": "^1.0.0" } }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -19554,6 +23162,41 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/v8-compile-cache": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", @@ -19592,6 +23235,56 @@ "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", "dev": true }, + "node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", + "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { "version": "6.2.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", @@ -19845,6 +23538,67 @@ "node": ">=0.10.0" } }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/vt-pbf": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", @@ -19987,6 +23741,18 @@ "makeerror": "1.0.12" } }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", @@ -20266,6 +24032,18 @@ "node": ">=12" } }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -20310,6 +24088,29 @@ "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", "dev": true }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "sophora-components": { "version": "0.0.1", "devDependencies": { From 38b91d296d6f61323fb326f0842461368c5651c3 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 14:03:02 +0200 Subject: [PATCH 58/76] Tweak colours --- .../src/maplibre/MapStyle/SWRDataLight.mdx | 52 +++++++------------ .../src/maplibre/MapStyle/SWRDataLight.ts | 8 +-- .../maplibre/MapStyle/components/Landuse.ts | 10 ---- components/src/maplibre/MapStyle/tokens.ts | 8 +-- 4 files changed, 28 insertions(+), 50 deletions(-) diff --git a/components/src/maplibre/MapStyle/SWRDataLight.mdx b/components/src/maplibre/MapStyle/SWRDataLight.mdx index 90d99c16..13a05fbd 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.mdx +++ b/components/src/maplibre/MapStyle/SWRDataLight.mdx @@ -1,14 +1,14 @@ import { Story, Meta, Primary, Controls, Stories } from '@storybook/addon-docs/blocks'; import Mermaid from '../../../.storybook/blocks/Mermaid'; import SWRDataLight from './SWRDataLight'; - import * as MapStyleStories from './SWRDataLight.stories.svelte'; # SWR Data Lab Light -Light-themed basemap using SWR colours and typefaces based on [versatiles-greybeard](https://github.com/versatiles-org/versatiles-style). +Light-themed general-purpose basemap using SWR colours and typefaces based on +[versatiles-greybeard](https://github.com/versatiles-org/versatiles-style). - Data sources - Vector data: [versatiles-osm](https://download.versatiles.org/) in the [Shortbread schema](https://shortbread-tiles.org/) served from `tiles.versatiles.org` @@ -23,21 +23,22 @@ Light-themed basemap using SWR colours and typefaces based on [versatiles-greybe We take a two-step design approach: -1. Sort the geographic data we want to present into semantic groups like "Admin Boundaries", "Roads" or "Transit" (inspired by Mapbox's [Style Components](https://docs.mapbox.com/studio-manual/guides/components/)) +1. Sort the geographic data we want to present into semantic groups like "Admin Boundaries", "Roads" or "Transit" (inspired by Mapbox's [Style Components](https://docs.mapbox.com/studio-manual/guides/components/)). 2. Derive physical layers (ie. `MapLayerSpecification`) from these groups and interleave them to produce a convincing image +3. Use shared design tokens to style each physical layer a_admin_labels -s_admin --> a_admin0 -s_admin --> a_admin1 -s_admin --> a_admin2 -s_buildings --> a_buildings -s_roads --> a_roads_surface -s_roads --> a_roads_bridge -s_roads --> a_roads_tunnel -s_roads --> a_roads_labels -s_transit --> a_transit_surface -s_transit --> a_transit_bridge -s_transit --> a_transit_tunnel -s_walking --> a_walking_surface -s_walking --> a_walking_bridge -s_walking --> a_walking_tunnel -s_landuse --> a_land -s_landuse --> a_ocean - class s_admin,a_admin0,a_admin1,a_admin2,a_admin_labels admin class s_buildings,a_buildings buildings class s_roads,a_roads_bridge,a_roads_surface,a_roads_tunnel,a_roads_labels roads class s_transit,a_transit_bridge,a_transit_surface,a_transit_tunnel,a_transit_labels transit class s_walking,a_walking_bridge,a_walking_surface,a_walking_tunnel,a_walking_labels walking -class s_landuse,a_land,a_ocean landuse +class s_landuse,a_land,a_ocean,a_background landuse `}/> ### References diff --git a/components/src/maplibre/MapStyle/SWRDataLight.ts b/components/src/maplibre/MapStyle/SWRDataLight.ts index 417801c1..76155397 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.ts +++ b/components/src/maplibre/MapStyle/SWRDataLight.ts @@ -37,7 +37,6 @@ const style: StyleSpecification = { // 1. Landuse ...landuse, ...airports, - ...buildings, // 2. Tunnels ...walkingTunnels, @@ -54,10 +53,13 @@ const style: StyleSpecification = { ...roadBridges, ...transitBridges, - // 5. Admin boundaries + // 5. Buildings + ...buildings, + + // 6. Admin boundaries ...admin, - // 6. Labels + // 7. Labels ...walkingLabels, ...roadLabels, ...placeLabels diff --git a/components/src/maplibre/MapStyle/components/Landuse.ts b/components/src/maplibre/MapStyle/components/Landuse.ts index e5fe8423..44b6f3c9 100644 --- a/components/src/maplibre/MapStyle/components/Landuse.ts +++ b/components/src/maplibre/MapStyle/components/Landuse.ts @@ -27,16 +27,6 @@ export default function makeLanduse(): any { 'fill-color': 'hsl(0,0%,100%)' } }, - { - id: 'land-industrial', - type: 'fill', - 'source-layer': 'land', - filter: ['all', ['in', 'kind', 'industrial', 'quarry', 'railway']], - paint: { - 'fill-color': tokens.background, - 'fill-opacity': ['interpolate', ['linear'], ['zoom'], 10, 0, 11, 1] - } - }, { id: 'land-agriculture', type: 'fill', diff --git a/components/src/maplibre/MapStyle/tokens.ts b/components/src/maplibre/MapStyle/tokens.ts index 831d09cc..207e6d95 100644 --- a/components/src/maplibre/MapStyle/tokens.ts +++ b/components/src/maplibre/MapStyle/tokens.ts @@ -2,12 +2,12 @@ const tokens = { sans_regular: ['SWR Sans Regular'], sans_medium: ['SWR Sans Medium'], sans_bold: ['SWR Sans Bold'], - background: 'hsl(0, 0%, 98.25%)', + background: 'hsl(0, 0%, 100%)', water: 'hsl(210, 41%, 87%)', water_light: 'hsl(210, 41%, 90%)', marsh: 'hsl(200, 14%, 97%)', - grass: 'hsl(90, 23%, 95%)', - grass_dark: 'hsl(105, 30%, 90%)', + grass: 'hsl(149, 37%, 97%)', + grass_dark: 'hsl(149, 37%, 93%)', street_primary: 'hsl(0, 0%, 95%)', street_primary_outline: 'hsla(0, 0%, 0%, 20%)', street_secondary: 'hsl(0, 0%, 95%)', @@ -15,7 +15,7 @@ const tokens = { street_tertiary: 'hsl(0, 0%, 95%)', street_tertiary_outline: 'hsl(0, 0%, 50%)', label_primary: 'rgb(10, 10, 11)', - label_secondary: 'rgb(32, 32, 33)' + label_secondary: 'hsl(240, 2%, 20%)' }; export default tokens; From 627954d4f447ab5c2df7752bb8d0149e5ceb99b2 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 14:26:03 +0200 Subject: [PATCH 59/76] Rename SWRDataLight to SWRDataLabLight --- components/src/index.js | 2 +- .../AttributionControl.stories.svelte | 4 ++-- components/src/maplibre/Map/Map.stories.svelte | 4 ++-- .../{SWRDataLight.mdx => SWRDataLabLight.mdx} | 6 +++--- ...stories.svelte => SWRDataLabLight.stories.svelte} | 7 +++++-- .../MapStyle/{SWRDataLight.ts => SWRDataLabLight.ts} | 12 ++++++------ components/src/maplibre/MapStyle/index.js | 4 ++-- .../NavigationControl.stories.svelte | 6 +++--- .../ScaleControl/ScaleControl.stories.svelte | 6 +++--- .../src/maplibre/Tooltip/Tooltip.stories.svelte | 6 +++--- .../maplibre/VectorLayer/VectorLayer.stories.svelte | 4 ++-- .../VectorTileSource/VectorTileSource.stories.svelte | 4 ++-- .../WithLinkLocation/WithLinkLocation.stories.svelte | 4 ++-- 13 files changed, 36 insertions(+), 33 deletions(-) rename components/src/maplibre/MapStyle/{SWRDataLight.mdx => SWRDataLabLight.mdx} (94%) rename components/src/maplibre/MapStyle/{SWRDataLight.stories.svelte => SWRDataLabLight.stories.svelte} (78%) rename components/src/maplibre/MapStyle/{SWRDataLight.ts => SWRDataLabLight.ts} (95%) diff --git a/components/src/index.js b/components/src/index.js index 24fad693..38b4a9d2 100644 --- a/components/src/index.js +++ b/components/src/index.js @@ -12,7 +12,7 @@ export { default as Middot } from './Middot/Middot.svelte'; export { default as FormLabel } from './FormLabel/FormLabel.svelte'; export { default as Map } from './maplibre/Map/Map.svelte'; export { default as MapControl } from './maplibre/MapControl/MapControl.svelte'; -export { SWRDataLight } from './maplibre/MapStyle'; +export { SWRDataLabLight } from './maplibre/MapStyle'; export { default as NavigationControl } from './maplibre/NavigationControl/NavigationControl.svelte'; export { default as ScaleControl } from './maplibre/ScaleControl/ScaleControl.svelte'; export { default as Source } from './maplibre/Source/Source.svelte'; diff --git a/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte index 48606b6b..f474f8b4 100644 --- a/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte +++ b/components/src/maplibre/AttributionControl/AttributionControl.stories.svelte @@ -3,7 +3,7 @@ import AttributionControl from './AttributionControl.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import Map from '../Map/Map.svelte'; - import { SWRDataLight } from '../MapStyle'; + import { SWRDataLabLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Maplibre/Control/AttributionControl', @@ -14,7 +14,7 @@
- +
diff --git a/components/src/maplibre/Map/Map.stories.svelte b/components/src/maplibre/Map/Map.stories.svelte index 02b5d243..469dacab 100644 --- a/components/src/maplibre/Map/Map.stories.svelte +++ b/components/src/maplibre/Map/Map.stories.svelte @@ -9,7 +9,7 @@ import AttributionControl from '../AttributionControl/AttributionControl.svelte'; import GeocoderControl from '../GeocoderControl/GeocoderControl.svelte'; - import { SWRDataLight } from '../MapStyle'; + import { SWRDataLabLight } from '../MapStyle'; import { eclipse } from '@versatiles/style'; const alternateStyle = eclipse({ @@ -65,7 +65,7 @@ >
- + diff --git a/components/src/maplibre/MapStyle/SWRDataLight.mdx b/components/src/maplibre/MapStyle/SWRDataLabLight.mdx similarity index 94% rename from components/src/maplibre/MapStyle/SWRDataLight.mdx rename to components/src/maplibre/MapStyle/SWRDataLabLight.mdx index 13a05fbd..5e50951a 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.mdx +++ b/components/src/maplibre/MapStyle/SWRDataLabLight.mdx @@ -1,7 +1,7 @@ import { Story, Meta, Primary, Controls, Stories } from '@storybook/addon-docs/blocks'; import Mermaid from '../../../.storybook/blocks/Mermaid'; -import SWRDataLight from './SWRDataLight'; -import * as MapStyleStories from './SWRDataLight.stories.svelte'; +import SWRDataLabLight from './SWRDataLabLight'; +import * as MapStyleStories from './SWRDataLabLight.stories.svelte'; @@ -13,7 +13,7 @@ Light-themed general-purpose basemap using SWR colours and typefaces based on - Data sources - Vector data: [versatiles-osm](https://download.versatiles.org/) in the [Shortbread schema](https://shortbread-tiles.org/) served from `tiles.versatiles.org` - Typefaces: SWR Sans served from `https://static.datenhub.net/maps/fonts/`. -- Layer count: {SWRDataLight.layers.length} +- Layer count: {SWRDataLabLight.layers.length} diff --git a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte b/components/src/maplibre/MapStyle/SWRDataLabLight.stories.svelte similarity index 78% rename from components/src/maplibre/MapStyle/SWRDataLight.stories.svelte rename to components/src/maplibre/MapStyle/SWRDataLabLight.stories.svelte index 1c1a4922..60848f94 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.stories.svelte +++ b/components/src/maplibre/MapStyle/SWRDataLabLight.stories.svelte @@ -3,7 +3,9 @@ import Map from '../Map/Map.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; - import { SWRDataLight } from './index'; + import GeocoderControl from '../GeocoderControl/GeocoderControl.svelte'; + + import { SWRDataLabLight } from './index'; const { Story } = defineMeta({ title: 'Maplibre/Style/SWR Data Lab Light', component: Map @@ -15,9 +17,10 @@
+
diff --git a/components/src/maplibre/MapStyle/SWRDataLight.ts b/components/src/maplibre/MapStyle/SWRDataLabLight.ts similarity index 95% rename from components/src/maplibre/MapStyle/SWRDataLight.ts rename to components/src/maplibre/MapStyle/SWRDataLabLight.ts index 76155397..82963f85 100644 --- a/components/src/maplibre/MapStyle/SWRDataLight.ts +++ b/components/src/maplibre/MapStyle/SWRDataLabLight.ts @@ -38,24 +38,24 @@ const style: StyleSpecification = { ...landuse, ...airports, - // 2. Tunnels + // 2. Buildings + ...buildings, + + // 3. Tunnels ...walkingTunnels, ...roadTunnels, ...transitTunnels, - // 3. Surface ways + // 4. Surface ways ...walkingSurface, ...roadSurface, ...transitSurface, - // 4. Bridges ways + // 5. Bridges ways ...walkingBridges, ...roadBridges, ...transitBridges, - // 5. Buildings - ...buildings, - // 6. Admin boundaries ...admin, diff --git a/components/src/maplibre/MapStyle/index.js b/components/src/maplibre/MapStyle/index.js index 36c737eb..ece80d1e 100644 --- a/components/src/maplibre/MapStyle/index.js +++ b/components/src/maplibre/MapStyle/index.js @@ -1,2 +1,2 @@ -import SWRDataLight from './SWRDataLight'; -export { SWRDataLight }; +import SWRDataLabLight from './SWRDataLabLight'; +export { SWRDataLabLight }; diff --git a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte index 6d2060d8..e6cab33d 100644 --- a/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte +++ b/components/src/maplibre/NavigationControl/NavigationControl.stories.svelte @@ -2,7 +2,7 @@ import { defineMeta } from '@storybook/addon-svelte-csf'; import NavigationControl from './NavigationControl.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; - import { SWRDataLight } from '../MapStyle'; + import { SWRDataLabLight } from '../MapStyle'; import Map from '../Map/Map.svelte'; const { Story } = defineMeta({ @@ -14,7 +14,7 @@
- +
@@ -24,7 +24,7 @@
- +
diff --git a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte index 569e7059..e10fc6b8 100644 --- a/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte +++ b/components/src/maplibre/ScaleControl/ScaleControl.stories.svelte @@ -5,7 +5,7 @@ import ScaleControl from './ScaleControl.svelte'; import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import Map from '../Map/Map.svelte'; - import { SWRDataLight } from '../MapStyle'; + import { SWRDataLabLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Maplibre/Control/ScaleControl', @@ -31,7 +31,7 @@ >
- +
@@ -56,7 +56,7 @@ >
- +
diff --git a/components/src/maplibre/Tooltip/Tooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte index 2416f6e1..08987455 100644 --- a/components/src/maplibre/Tooltip/Tooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -8,7 +8,7 @@ import VectorLayer from '../VectorLayer/VectorLayer.svelte'; import AttributionControl from '../AttributionControl/AttributionControl.svelte'; import Tooltip from './Tooltip.svelte'; - import { SWRDataLight } from '../MapStyle'; + import { SWRDataLabLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Maplibre/Extras/Tooltip', @@ -25,7 +25,7 @@
@@ -92,7 +92,7 @@
diff --git a/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte b/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte index fd174dd6..6024e33c 100644 --- a/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte +++ b/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte @@ -6,7 +6,7 @@ import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import VectorTileSource from '../VectorTileSource/VectorTileSource.svelte'; - import { SWRDataLight } from '../MapStyle'; + import { SWRDataLabLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Maplibre/Layer/VectorLayer', @@ -17,7 +17,7 @@
- +
- +
- +
From 642f60dd8aaabd2d682d363d532d8bc2dded7ca6 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 14:44:58 +0200 Subject: [PATCH 60/76] Add custom control demo --- components/src/Switcher/Switcher.svelte | 1 + .../src/maplibre/MapControl/MapControl.mdx | 12 +++++ .../MapControl/MapControl.stories.svelte | 49 ++++++++++++++++++- .../src/maplibre/MapControl/MapControl.svelte | 4 +- 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 components/src/maplibre/MapControl/MapControl.mdx diff --git a/components/src/Switcher/Switcher.svelte b/components/src/Switcher/Switcher.svelte index 73bed7cb..0545eae0 100644 --- a/components/src/Switcher/Switcher.svelte +++ b/components/src/Switcher/Switcher.svelte @@ -60,6 +60,7 @@ padding: 0; margin: 0; border: 1px solid currentColor; + background: white; border-radius: var(--br-small); @media (min-width: base.$bp-s) { diff --git a/components/src/maplibre/MapControl/MapControl.mdx b/components/src/maplibre/MapControl/MapControl.mdx new file mode 100644 index 00000000..e51be5fa --- /dev/null +++ b/components/src/maplibre/MapControl/MapControl.mdx @@ -0,0 +1,12 @@ +import { Meta } from '@storybook/addon-docs/blocks'; +import { Story, Primary, Controls, Stories } from '@storybook/addon-docs/blocks'; +import * as MapControlStories from './MapControl.stories.svelte'; + + + +# MapControl + +Base component used by all other built-in control components. Also useful for building application-specific controls (see demo below). + + + diff --git a/components/src/maplibre/MapControl/MapControl.stories.svelte b/components/src/maplibre/MapControl/MapControl.stories.svelte index 55bd924a..dd223829 100644 --- a/components/src/maplibre/MapControl/MapControl.stories.svelte +++ b/components/src/maplibre/MapControl/MapControl.stories.svelte @@ -1,9 +1,56 @@ - + + + +
+ + + + + +
+
+
+ + diff --git a/components/src/maplibre/MapControl/MapControl.svelte b/components/src/maplibre/MapControl/MapControl.svelte index a689c996..a726a7b8 100644 --- a/components/src/maplibre/MapControl/MapControl.svelte +++ b/components/src/maplibre/MapControl/MapControl.svelte @@ -4,8 +4,8 @@ import { getMapContext } from '../context.svelte.ts'; interface MapControlProps { - control: IControl; position: ControlPosition; + control?: IControl; className?: string; children?: Snippet; } @@ -34,7 +34,7 @@ }); -
+
{#if children} {@render children()} {/if} From 8c58eceeea02f455d0129f8899d4f74220c73d86 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 15:04:14 +0200 Subject: [PATCH 61/76] Iterate docs --- components/src/Select/Select.stories.svelte | 6 ++--- .../GeocoderControl.stories.svelte | 4 ++-- .../GeocoderControl/GeocoderControl.svelte | 13 ++++++----- components/src/maplibre/Maplibre.mdx | 4 ++-- .../WithLinkLocation/WithLinkLocation.svelte | 22 +++++++++++++------ components/src/maplibre/types.ts | 4 ++++ 6 files changed, 33 insertions(+), 20 deletions(-) diff --git a/components/src/Select/Select.stories.svelte b/components/src/Select/Select.stories.svelte index a4f69b45..ebe3de35 100644 --- a/components/src/Select/Select.stories.svelte +++ b/components/src/Select/Select.stories.svelte @@ -136,17 +136,17 @@ expect(canvas.getByTestId('custom-item-title').innerText).toEqual('Journalismus'); expect(canvas.getByTestId('custom-item-addon').innerText).toContain('Redakteur/in'); await userEvent.type(select, '{enter}'); - expect(selectedItem.details.title).toEqual('Journalismus'); + expect(selectedItem?.details.title).toEqual('Journalismus'); }); await step('Entering an item\'s "title" selects that item', async () => { await userEvent.type(select, 'Tierpflege{enter}'); - expect(selectedItem.details.title).toEqual('Tierpflege'); + expect(selectedItem?.details.title).toEqual('Tierpflege'); }); await step('Entering an item\'s "addon" selects that item', async () => { await userEvent.type(select, 'Zirkuskünstler{enter}'); - expect(selectedItem.details.title).toEqual('Schauspiel und Tanz'); + expect(selectedItem?.details.title).toEqual('Schauspiel und Tanz'); }); }} > diff --git a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte index ab8b3071..214a8e2e 100644 --- a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte +++ b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte @@ -4,7 +4,7 @@ import DesignTokens from '../../DesignTokens/DesignTokens.svelte'; import Map from '../Map/Map.svelte'; - import { SWRDataLight } from '../MapStyle'; + import { SWRDataLabLight } from '../MapStyle'; const { Story } = defineMeta({ title: 'Maplibre/Control/GeoCoderControl', @@ -15,7 +15,7 @@
- +
diff --git a/components/src/maplibre/GeocoderControl/GeocoderControl.svelte b/components/src/maplibre/GeocoderControl/GeocoderControl.svelte index bc968564..ff155181 100644 --- a/components/src/maplibre/GeocoderControl/GeocoderControl.svelte +++ b/components/src/maplibre/GeocoderControl/GeocoderControl.svelte @@ -3,13 +3,14 @@ import MaplibreGeocoder, { type MaplibreGeocoderApi } from '@maplibre/maplibre-gl-geocoder'; import { MaptilerGeocoderAPI } from './GeocoderAPIs'; import MapControl from '../MapControl/MapControl.svelte'; - - type Language = 'de' | 'en'; - type Country = 'de' | 'at'; + import { type GeocodingCountry, type GeocodingLanguage, type GeocodingService } from '../types'; interface GeocoderControlProps { + service: GeocodingService; + /** + * API key for selected geocoding `service` + */ key: string; - service: 'maptiler'; /** * Maximum number of suggestions to display */ @@ -17,11 +18,11 @@ /** * Limit search to one or more countries */ - countries?: Country[] | Country; + countries?: GeocodingCountry | GeocodingCountry[]; /** * Limit search to one or more languages. The UI is localised to the first language specified if [available](https://github.com/maplibre/maplibre-gl-geocoder/blob/main/lib/localization.ts). */ - languages?: Language[] | Language; + languages?: GeocodingLanguage | GeocodingLanguage[]; } const { diff --git a/components/src/maplibre/Maplibre.mdx b/components/src/maplibre/Maplibre.mdx index fa1aedb9..128cc0a1 100644 --- a/components/src/maplibre/Maplibre.mdx +++ b/components/src/maplibre/Maplibre.mdx @@ -25,8 +25,8 @@ Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreis - **[ScaleControl](?path=/docs/map-control-scalecontrol--docs)**: Renders a dynamic scalebar - **[NavigationControl](?path=/docs/map-control-navigationcontrol--docs)**: Renders zoom buttons and optional compass - **[GeocoderControl](?path=/docs/map-control-geocodercontrol--docs)**: Renders a search input using [maplibre-gl-geocoder](https://github.com/maplibre/maplibre-gl-geocoder) and any supported forward geocoding service (currently [maptiler](https://www.maptiler.com/) only) -- **[AttributionControl](?path=/docs/map-control-attributioncontrol--docs)**: Renders maplibre's default attribution control. -- **Custom controls** +- **[AttributionControl](?path=/docs/map-control-attributioncontrol--docs)**: Renders maplibre's default attribution control +- **[Custom controls](?path=/docs/maplibre-control-mapcontrol--docs)**: Renders arbitrary HTML inside maplibre's layout ## Misc diff --git a/components/src/maplibre/WithLinkLocation/WithLinkLocation.svelte b/components/src/maplibre/WithLinkLocation/WithLinkLocation.svelte index 2c716bde..71c7c64e 100644 --- a/components/src/maplibre/WithLinkLocation/WithLinkLocation.svelte +++ b/components/src/maplibre/WithLinkLocation/WithLinkLocation.svelte @@ -1,21 +1,29 @@ From c603c1962170c474b21c93a4d67e40b8ab66ef57 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 15:44:25 +0200 Subject: [PATCH 64/76] Fix docs link --- components/src/maplibre/Maplibre.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/src/maplibre/Maplibre.mdx b/components/src/maplibre/Maplibre.mdx index c621456f..6e66322d 100644 --- a/components/src/maplibre/Maplibre.mdx +++ b/components/src/maplibre/Maplibre.mdx @@ -33,7 +33,7 @@ Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreis ## Misc -- **[Tooltip](?path=/docs/maplibre-tooltip--docs)** +- **[Tooltip](?path=/docs/maplibre-extras-tooltip--docs)** - **[WithLinkLocation](?path=/docs/maplibre-extras-withlinklocation--docs)**: Derive the maps initial location from a URL parameter (includes forward geocoding) ## Styles From fc40ac393a8d15135fdc15d98edd2e0b1647de89 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 18:41:53 +0200 Subject: [PATCH 65/76] Clean up Tooltip stories --- .../MapStyle/components/PlaceLabels.ts | 9 +-- .../maplibre/Tooltip/Tooltip.stories.svelte | 62 +++++++++++++------ .../src/maplibre/Tooltip/Tooltip.svelte | 44 ++++++++----- .../maplibre/VectorLayer/VectorLayer.svelte | 29 +++++++++ components/src/maplibre/utils.ts | 18 +++++- 5 files changed, 124 insertions(+), 38 deletions(-) diff --git a/components/src/maplibre/MapStyle/components/PlaceLabels.ts b/components/src/maplibre/MapStyle/components/PlaceLabels.ts index e369954c..38de1494 100644 --- a/components/src/maplibre/MapStyle/components/PlaceLabels.ts +++ b/components/src/maplibre/MapStyle/components/PlaceLabels.ts @@ -127,18 +127,19 @@ export default function makePlaceLabels() { maxzoom: 11, layout: { 'text-field': '{name_de}', - 'text-font': tokens.sans_medium, + 'text-font': tokens.sans_regular, + 'text-letter-spacing': 0.015, 'text-size': { stops: [ - [8, 12], + [8, 14], [10, 14] ] } }, paint: { - 'text-color': tokens.label_primary, + 'text-color': tokens.label_secondary, 'text-halo-color': tokens.background, - 'text-halo-width': 2 + 'text-halo-width': 1 } }, { diff --git a/components/src/maplibre/Tooltip/Tooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte index 08987455..d984a7ad 100644 --- a/components/src/maplibre/Tooltip/Tooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -16,15 +16,17 @@ }); let hovered = $state() as MapGeoJSONFeature | undefined; + let hovered2 = $state() as MapGeoJSONFeature | undefined; + let hoverCoords = $state([0, 0]) as LngLatLike; + let selected = $state() as MapGeoJSONFeature | undefined; - let mouseCoords = $state([0, 0]) as LngLatLike; + let selectCoords = $state([0, 0]) as LngLatLike;
{ - hovered = ev.features?.[0]; - mouseCoords = ev.lngLat; + onmousemove={(e) => { + hovered = e.features?.[0]; + hoverCoords = e.lngLat; }} onmouseleave={() => (hovered = undefined)} paint={{ @@ -75,13 +77,18 @@ }} /> {#if hovered} - +
{Object.entries(hovered.properties)
 								.map(([key, val]) => `${key}: ${val}`)
 								.join('\n')}
{/if} - +
@@ -91,7 +98,6 @@
{ - hovered = ev.features?.[0]; - mouseCoords = ev.lngLat; + onmousemove={(e) => { + hovered2 = e.features?.[0]; }} - onmouseleave={() => (hovered = undefined)} + onclick={(e) => { + selected = e.features?.[0]; + selectCoords = e.lngLat; + }} + onmouseleave={() => (hovered2 = undefined)} paint={{ 'fill-color': [ 'step', @@ -124,16 +133,20 @@ }} /> - {#if hovered} - -
{Object.entries(hovered.properties)
+				{#if selected}
+					 {
+							selected = undefined;
+						}}
+					>
+						
{Object.entries(selected.properties)
 								.map(([key, val]) => `${key}: ${val}`)
 								.join('\n')}
{/if} - +
@@ -159,4 +179,8 @@ width: 100%; height: 600px; } + + .padRight { + padding-right: 2.5em; + } diff --git a/components/src/maplibre/Tooltip/Tooltip.svelte b/components/src/maplibre/Tooltip/Tooltip.svelte index 1013d706..62447341 100644 --- a/components/src/maplibre/Tooltip/Tooltip.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.svelte @@ -1,7 +1,8 @@ @@ -60,10 +70,13 @@ diff --git a/components/src/maplibre/VectorLayer/VectorLayer.svelte b/components/src/maplibre/VectorLayer/VectorLayer.svelte index 19bf3d12..849dabdc 100644 --- a/components/src/maplibre/VectorLayer/VectorLayer.svelte +++ b/components/src/maplibre/VectorLayer/VectorLayer.svelte @@ -25,6 +25,7 @@ paint?: LinePaintProps | FillPaintProps; layout?: LineLayoutProps | FillLayoutProps; hovered?: MapGeoJSONFeature | undefined; + selected?: MapGeoJSONFeature | undefined; onclick: (e: MapLayerMouseEvent) => any; onmousemove: (e: MapLayerMouseEvent) => any; @@ -40,6 +41,7 @@ paint, layout, hovered = $bindable(), + selected = $bindable(), minZoom = 0, maxZoom = 24, onclick, @@ -83,6 +85,7 @@ $effect(() => resetLayerEventListener(map, 'mousemove', id, onmousemove)); $effect(() => resetLayerEventListener(map, 'mouseleave', id, onmouseleave)); + // Set hovered feature state $effect(() => { if (styleLoaded) { if (hovered) { @@ -108,6 +111,32 @@ } }); + // Set selected feature state + $effect(() => { + if (styleLoaded) { + if (selected) { + if (prevSelected) { + map?.setFeatureState( + { source: sourceId, sourceLayer: sourceLayer, id: prevSelected }, + { selected: false } + ); + } + map?.setFeatureState( + { source: sourceId, sourceLayer: sourceLayer, id: selected.id }, + { selected: true } + ); + prevSelected = selected.id; + } else { + if (prevSelected) { + map?.setFeatureState( + { source: sourceId, sourceLayer: sourceLayer, id: prevSelected }, + { selected: false } + ); + } + } + } + }); + onDestroy(() => { if (map && map.getLayer(id)) map.removeLayer(id); }); diff --git a/components/src/maplibre/utils.ts b/components/src/maplibre/utils.ts index f3312723..e77c8722 100644 --- a/components/src/maplibre/utils.ts +++ b/components/src/maplibre/utils.ts @@ -1,6 +1,6 @@ // Source: https://github.com/MIERUNE/svelte-maplibre-gl/blob/main/src/lib/maplibre/utils.ts -import type { Evented, Listener, Map, MapLayerEventType } from 'maplibre-gl'; +import type { Evented, Listener, Map, MapLayerEventType, Popup } from 'maplibre-gl'; export function resetEventListener( evented: Evented | null | undefined, @@ -34,3 +34,19 @@ export function resetLayerEventListener( } }; } + +export function resetPopupEventListener( + popup: Popup | null, + type: 'open' | 'close', + listener: Listener | undefined +) { + if (listener) { + popup?.on(type, listener); + } + const prevListener = listener; + return () => { + if (prevListener) { + popup?.off(type, prevListener); + } + }; +} From 83fa28b890a2199f89b145c53ddcaeccb5ac1e19 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 19:18:44 +0200 Subject: [PATCH 66/76] Iterate Tooltip stories --- .../MapStyle/components/PlaceLabels.ts | 2 +- .../maplibre/Tooltip/Tooltip.stories.svelte | 50 +++++++++++-------- .../src/maplibre/Tooltip/Tooltip.svelte | 2 +- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/components/src/maplibre/MapStyle/components/PlaceLabels.ts b/components/src/maplibre/MapStyle/components/PlaceLabels.ts index 38de1494..e192ca9b 100644 --- a/components/src/maplibre/MapStyle/components/PlaceLabels.ts +++ b/components/src/maplibre/MapStyle/components/PlaceLabels.ts @@ -139,7 +139,7 @@ export default function makePlaceLabels() { paint: { 'text-color': tokens.label_secondary, 'text-halo-color': tokens.background, - 'text-halo-width': 1 + 'text-halo-width': 2 } }, { diff --git a/components/src/maplibre/Tooltip/Tooltip.stories.svelte b/components/src/maplibre/Tooltip/Tooltip.stories.svelte index d984a7ad..0240c8ec 100644 --- a/components/src/maplibre/Tooltip/Tooltip.stories.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.stories.svelte @@ -47,15 +47,7 @@ }} onmouseleave={() => (hovered = undefined)} paint={{ - 'fill-color': [ - 'step', - ['get', 'coverage_2025'], - 'white', - 1, - 'lightgray', - 1.3, - 'lightgreen' - ] + 'fill-color': ['step', ['get', 'coverage_2025'], 'white', 1, '#ffcfcc', 1.3, '#FF4D20'] }} /> + {#if hovered} (hovered2 = undefined)} paint={{ - 'fill-color': [ - 'step', - ['get', 'coverage_2025'], - 'white', - 1, - 'lightgray', - 1.3, - 'lightgreen' - ] + 'fill-color': ['step', ['get', 'coverage_2025'], 'white', 1, '#CCDCFF', 1.3, '#6280E5'] }} /> diff --git a/components/src/maplibre/Tooltip/Tooltip.svelte b/components/src/maplibre/Tooltip/Tooltip.svelte index 62447341..96ae49e3 100644 --- a/components/src/maplibre/Tooltip/Tooltip.svelte +++ b/components/src/maplibre/Tooltip/Tooltip.svelte @@ -158,7 +158,7 @@ } .maplibregl-popup-close-button:hover, - .maplibregl-popup-close-button:focus-visible { + .maplibregl-popup-close-button:focus { background: rgb(245, 245, 245); } From 11d3c65f3549b2ecedc908b93840913bfe18a737 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 19:50:55 +0200 Subject: [PATCH 67/76] Improve primary-road-link transition --- components/src/maplibre/MapStyle/components/Roads.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/src/maplibre/MapStyle/components/Roads.ts b/components/src/maplibre/MapStyle/components/Roads.ts index dff520dc..20cd49bb 100644 --- a/components/src/maplibre/MapStyle/components/Roads.ts +++ b/components/src/maplibre/MapStyle/components/Roads.ts @@ -1876,7 +1876,7 @@ export default function makeRoads() { }, layout: { 'line-join': 'round', - 'line-cap': 'round' + 'line-cap': 'butt' }, minzoom: 13 }, From c75eb9b9b791ee6ee99917b6e9d2201e96989eee Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 21:48:50 +0200 Subject: [PATCH 68/76] Iterate GeoCoderControl --- components/src/DesignTokens/Tokens.ts | 27 +++--- .../maplibre/GeocoderControl/GeocoderAPIs.ts | 88 +++++++++---------- .../GeocoderControl/GeocoderControl.svelte | 32 ++++--- components/src/maplibre/Map/Map.svelte | 9 ++ .../src/maplibre/MapStyle/components/Roads.ts | 4 +- 5 files changed, 88 insertions(+), 72 deletions(-) diff --git a/components/src/DesignTokens/Tokens.ts b/components/src/DesignTokens/Tokens.ts index 7ce74e0a..a6138400 100644 --- a/components/src/DesignTokens/Tokens.ts +++ b/components/src/DesignTokens/Tokens.ts @@ -2,10 +2,10 @@ interface ColourMap { [index: string]: ColourPalette | ColourList; } interface ColourPalette { - [index: string]: string + [index: string]: string; } interface ColourList { - [index: number]: string + [index: number]: string; } const shades: ColourMap = { @@ -142,9 +142,13 @@ const shades: ColourMap = { dark5: '#1D0B40' }, gray: { + light5: 'hsl(225, 2%, 95%)', light3: 'hsl(225, 2%, 77%)', base: 'hsl(227, 2%, 50%)', - dark3: 'hsl(236, 2%, 34%)' + dark2: 'hsl(236, 2%, 38%)', + dark3: 'hsl(236, 2%, 32%)', + dark4: 'hsl(236, 2%, 22%)', + dark5: 'hsl(236, 2%, 5%)' } }; @@ -164,18 +168,17 @@ const scales: ColourMap = { forest_plum: [...Object.values(shades.forest).reverse(), ...Object.values(shades.plum)] }; - const typography = { wide: { sizes: { - "fs-small-3": "0.75rem", - "fs-small-2": "0.875rem", - "fs-small-1": "1rem", - "fs-base": "1.25rem", - "fs-large-1": "1.5rem", - "fs-large-2": "2rem", - "fs-large-3": "2.5rem", - "fs-large-4": "3.5rem" + 'fs-small-3': '0.75rem', + 'fs-small-2': '0.875rem', + 'fs-small-1': '1rem', + 'fs-base': '1.25rem', + 'fs-large-1': '1.5rem', + 'fs-large-2': '2rem', + 'fs-large-3': '2.5rem', + 'fs-large-4': '3.5rem' } } }; diff --git a/components/src/maplibre/GeocoderControl/GeocoderAPIs.ts b/components/src/maplibre/GeocoderControl/GeocoderAPIs.ts index 75e84686..ed30aba8 100644 --- a/components/src/maplibre/GeocoderControl/GeocoderAPIs.ts +++ b/components/src/maplibre/GeocoderControl/GeocoderAPIs.ts @@ -1,49 +1,49 @@ import { - type CarmenGeojsonFeature, - type MaplibreGeocoderApi, - type MaplibreGeocoderApiConfig, - type MaplibreGeocoderFeatureResults -} from "@maplibre/maplibre-gl-geocoder" + type CarmenGeojsonFeature, + type MaplibreGeocoderApi, + type MaplibreGeocoderApiConfig, + type MaplibreGeocoderFeatureResults +} from '@maplibre/maplibre-gl-geocoder'; export class MaptilerGeocoderAPI implements MaplibreGeocoderApi { - key: string + key: string; - constructor(key: string) { - this.key = key - } + constructor(key: string) { + this.key = key; + } - async forwardGeocode(config: MaplibreGeocoderApiConfig): Promise { - const result: MaplibreGeocoderFeatureResults = { - type: 'FeatureCollection', - features: [] - }; - try { - const response = await fetch( - `https://api.maptiler.com/geocoding/${config.query}.json?country=${config.countries}&language=${config.language}&key=${this.key}` - ); - const geojson = await response.json(); - for (const feature of geojson.features) { - const res: CarmenGeojsonFeature = { - type: 'Feature', - id: feature.id, - place_type: ['place'], - place_name: feature.place_name, - language: feature.properties.display_name, - text: feature.text, - bbox: feature.bbox, - geometry: { - type: 'Point', - coordinates: feature.center - }, - properties: { - text: feature.text - } - }; - result.features.push(res); - } - } catch (e) { - console.error(`Failed to forwardGeocode with error: ${e}`); - } - return result; - } -} \ No newline at end of file + async forwardGeocode(config: MaplibreGeocoderApiConfig): Promise { + const result: MaplibreGeocoderFeatureResults = { + type: 'FeatureCollection', + features: [] + }; + try { + const response = await fetch( + `https://api.maptiler.com/geocoding/${config.query}.json?country=${config.countries}&language=${config.language}&key=${this.key}` + ); + const geojson = await response.json(); + for (const feature of geojson.features) { + const res: CarmenGeojsonFeature = { + type: 'Feature', + id: feature.id, + place_type: ['place'], + place_name: feature.place_name, + language: feature.properties.display_name, + text: feature.text, + bbox: feature.bbox, + geometry: { + type: 'Point', + coordinates: feature.center + }, + properties: { + text: feature.text + } + }; + result.features.push(res); + } + } catch (e) { + console.error(`Failed to forwardGeocode with error: ${e}`); + } + return result; + } +} diff --git a/components/src/maplibre/GeocoderControl/GeocoderControl.svelte b/components/src/maplibre/GeocoderControl/GeocoderControl.svelte index ff155181..8bd05e59 100644 --- a/components/src/maplibre/GeocoderControl/GeocoderControl.svelte +++ b/components/src/maplibre/GeocoderControl/GeocoderControl.svelte @@ -56,16 +56,13 @@ .maplibregl-ctrl-geocoder { background-color: #fff; position: relative; - min-width: 250px; width: 100%; z-index: 1; font-family: var(--swr-sans); font-size: var(--fs-small-1); border-radius: var(--br-small); - border: 1px solid var(--violet-dark-5); - transition: - width 0.25s, - min-width 0.25s; + border: 1px solid rgba(0, 0, 0, 0.75); + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1); } .maplibre-gl-geocoder--error { @@ -80,10 +77,10 @@ font-family: inherit; font-size: inherit; background-color: transparent; - color: black; + color: var(--gray-dark-5); border: 0; height: 2em; - padding: 0 2em; + padding: 0 1.85em; padding-top: 0.1em; text-overflow: ellipsis; white-space: nowrap; @@ -108,7 +105,8 @@ /* Suggestions */ .maplibregl-ctrl-geocoder .suggestions { background: white; - border: 1px solid var(--violet-dark-5); + border: 1px solid rgba(0, 0, 0, 0.75); + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1); border-radius: var(--br-small); left: 0; list-style: none; @@ -128,10 +126,10 @@ .maplibregl-ctrl-geocoder .suggestions > li > a { cursor: default; display: block; - padding: 0.75em 0.85em; - color: var(--violet-dark-5); - padding-bottom: 0.7em; - border-bottom: 1px solid var(--gray-light-2); + padding: 0.5em 0.75em; + color: var(--gray-dark-5); + padding-bottom: 0.5em; + border-bottom: 1px solid var(--gray-light-3); } .maplibregl-ctrl-geocoder .suggestions > li:last-child > a { border-bottom: 0; @@ -139,9 +137,13 @@ .maplibregl-ctrl-geocoder .suggestions > .active > a, .maplibregl-ctrl-geocoder .suggestions > li > a:hover { + background: var(--gray-light-5); text-decoration: none; cursor: pointer; - background: var(--gray-light-3); + } + .maplibregl-ctrl-geocoder .suggestions > .active .maplibregl-ctrl-geocoder--result-title, + .maplibregl-ctrl-geocoder .suggestions > li > a:hover .maplibregl-ctrl-geocoder--result-title { + text-decoration: underline; } .maplibregl-ctrl-geocoder--suggestion { @@ -171,10 +173,12 @@ display: none; } .maplibregl-ctrl-geocoder--result-title { - font-weight: 700; + font-weight: 600; + letter-spacing: 0; } .maplibregl-ctrl-geocoder--result-address { font-size: var(--fs-small-2); + color: var(--gray-dark-2); line-height: 1.3; } diff --git a/components/src/maplibre/Map/Map.svelte b/components/src/maplibre/Map/Map.svelte index 80f4ae09..422aad74 100644 --- a/components/src/maplibre/Map/Map.svelte +++ b/components/src/maplibre/Map/Map.svelte @@ -270,5 +270,14 @@ .maplibregl-ctrl-group button:focus:only-child { border-radius: inherit; } + .maplibregl-marker { + left: 0; + top: 0; + position: absolute; + will-change: transform; + } + .maplibregl-marker path { + fill: var(--violet-dark-5); + } } diff --git a/components/src/maplibre/MapStyle/components/Roads.ts b/components/src/maplibre/MapStyle/components/Roads.ts index 20cd49bb..5a5f4abd 100644 --- a/components/src/maplibre/MapStyle/components/Roads.ts +++ b/components/src/maplibre/MapStyle/components/Roads.ts @@ -1803,7 +1803,7 @@ export default function makeRoads() { }, layout: { 'line-join': 'round', - 'line-cap': 'round' + 'line-cap': 'butt' } }, { @@ -1837,7 +1837,7 @@ export default function makeRoads() { }, layout: { 'line-join': 'round', - 'line-cap': 'round' + 'line-cap': 'butt' } }, { From a95d94cbd670b05e122fcb2997e116a9c3339303 Mon Sep 17 00:00:00 2001 From: Max Kohler Date: Wed, 21 May 2025 21:58:09 +0200 Subject: [PATCH 69/76] GeoCoderControl: Add placeholder prop --- .../GeocoderControl.stories.svelte | 50 ++++++++++++++++++- .../GeocoderControl/GeocoderControl.svelte | 6 +++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte index 214a8e2e..0bf8bc7f 100644 --- a/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte +++ b/components/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte @@ -1,5 +1,7 @@ - + { + const canvas = within(canvasElement); + const containerEl = canvas.getByTestId('map-container'); + + await step('Geocoder control renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-geocoder'); + expect(el).toBeTruthy(); + }); + await step('Localised placeholder text renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-geocoder input'); + expect(el).toHaveAttribute('placeholder', 'Suche'); + }); + }} +>
@@ -21,6 +39,36 @@
+ { + const canvas = within(canvasElement); + const containerEl = canvas.getByTestId('map-container'); + + await step('Geocoder control renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-geocoder'); + expect(el).toBeTruthy(); + }); + await step('Custom placeholder text renders', async () => { + const el = containerEl.querySelector('.maplibregl-ctrl-geocoder input'); + expect(el).toHaveAttribute('placeholder', 'My placeholder text'); + }); + }} +> + +
+ + + +
+
+
+``` + +## Available components + +### Sources - **[VectorTileSource](?path=/docs/maplibre-source-vectortilesource--docs)**: Loads a vector tile source supplied by a tileserver -## Layers +### Layers - **[VectorLayer](?path=/docs/maplibre-layer-vectorlayer--docs)**: Renders a layer from a vector tile source. -## Controls +### Controls - **[ScaleControl](?path=/docs/maplibre-control-scalecontrol--docs)**: Renders a dynamic scalebar - **[NavigationControl](?path=/docs/maplibre-control-navigationcontrol--docs)**: Renders zoom buttons and optional compass @@ -31,12 +76,12 @@ Based on [prior work](https://github.com/SWRdata/frontend_svelte_p012_spritpreis - **[AttributionControl](?path=/docs/maplibre-control-attributioncontrol--docs)**: Renders maplibre's default attribution control - **[Custom controls](?path=/docs/maplibre-control-mapcontrol--docs)**: Renders arbitrary HTML inside maplibre's layout -## Misc +### Misc - **[Tooltip](?path=/docs/maplibre-extras-tooltip--docs)** -- **[WithLinkLocation](?path=/docs/maplibre-extras-withlinklocation--docs)**: Derive the maps initial location from a URL parameter (includes forward geocoding) +- **[WithLinkLocation](?path=/docs/maplibre-extras-withlinklocation--docs)**: Derive the maps `initialLocation` from a URL parameter via forward geocoding -## Styles +### Styles - **[SWR Data Lab Light](?path=/docs/maplibre-style-swr-data-lab-light--docs)**: Light-themed basemap using SWR colours and typefaces - Any valid MapLibre style specification, such as [versatiles-style](https://github.com/versatiles-org/versatiles-style) (see [demo](?path=/story/map-map--alternate-style)) diff --git a/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte b/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte index 6024e33c..184b3226 100644 --- a/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte +++ b/components/src/maplibre/VectorLayer/VectorLayer.stories.svelte @@ -1,9 +1,9 @@