diff --git a/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Lower_Troposphere.md b/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Lower_Troposphere.md new file mode 100644 index 0000000000..ef9720b6f3 --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Lower_Troposphere.md @@ -0,0 +1,5 @@ +The OMPS Sulfur Dioxide (SO2) Lower Troposphere layer indicates the column density of sulfur dioxide in the lower troposphere (corresponding to 2.5 km center of mass altitude (CMA)) and is measured in Dobson Units (DU). The lower troposphere layer can be used to study degassing from volcanic sources. + +The OMPS Sulfur Dioxide (SO2) Lower Troposphere layer is a science parameter of the Ozone Mapping and Profiler Suite (OMPS)-N20 NM PCA Sulfur Dioxide (SO2) Step 1 Total Column 1-Orbit L2 Swath 17x13km collection 1 product. It is available from the OMPS Nadir-Mapper (NM) sensor on the joint NASA/NOAA NOAA-20 (JPSS-1) satellite. The sensor resolution is 25 km, imagery resolution is 2 km, and the temporal resolution is daily. + +References: [OMPS_N20_NMSO2_PCA_L2_Step1_NRT](https://disc.gsfc.nasa.gov/datasets/OMPS_N20_NMSO2_PCA_L2_Step1_1/summary) diff --git a/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Middle_Troposphere.md b/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Middle_Troposphere.md new file mode 100644 index 0000000000..cb92be96e4 --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Middle_Troposphere.md @@ -0,0 +1,6 @@ +The OMPS Sulfur Dioxide (Middle Troposphere) layer indicates the column density of sulfur dioxide in the middle troposphere (corresponding to 7.5 km center of mass altitude (CMA)) and is measured in Dobson Units (DU). This layer can be used in studies on moderate eruptions and long-range transport of sulfur pollution. + +The OMPS Sulfur Dioxide (SO2) Middle Troposphere layer is a science parameter of the Ozone Mapping and Profiler Suite (OMPS)-N20 NM PCA Sulfur Dioxide (SO2) Step 1 Total Column 1-Orbit L2 Swath 17x13km collection 1 product. It is available from the OMPS Nadir-Mapper (NM) sensor on the joint NASA/NOAA NOAA-20 (JPSS-1) satellite. The sensor resolution is 25 km, imagery resolution is 2 km, and the temporal resolution is daily. + +References: [OMPS_N20_NMSO2_PCA_L2_Step1_NRT](https://disc.gsfc.nasa.gov/datasets/OMPS_N20_NMSO2_PCA_L2_Step1_1/summary) + diff --git a/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.md b/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.md new file mode 100644 index 0000000000..d069fed0b8 --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.md @@ -0,0 +1,6 @@ +The OMPS Sulfur Dioxide (SO2) Planetary Boundary Layer (PBL) indicates the column density of sulfur dioxide in the tropospheric boundary-layer (corresponding to the center of mass altitude (CMA) of 0.9 km) and is measured in Dobson Units (DU). The planetary boundary layer is often used in studies on near-surface pollution. + +The OMPS Sulfur Dioxide (SO2) Planetary Boundary Layer is a science parameter of the Ozone Mapping and Profiler Suite (OMPS)-N20 NM PCA Sulfur Dioxide (SO2) Step 1 Total Column 1-Orbit L2 Swath 17x13km collection 1 product. It is available from the OMPS Nadir-Mapper (NM) sensor on the joint NASA/NOAA NOAA-20 (JPSS-1) satellite. The sensor resolution is 25 km, imagery resolution is 2 km, and the temporal resolution is daily. + +References: [OMPS_N20_NMSO2_PCA_L2_Step1_NRT](https://disc.gsfc.nasa.gov/datasets/OMPS_N20_NMSO2_PCA_L2_Step1_1/summary) + diff --git a/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.md b/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.md new file mode 100644 index 0000000000..d0919e6541 --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.md @@ -0,0 +1,5 @@ +The OMPS Sulfur Dioxide (SO2) Upper Troposphere and Stratosphere layer indicates the column density of sulfur dioxide in the upper troposphere and stratosphere (corresponding to 17 km center of mass altitude (CMA)) and is measured in Dobson Units (DU). This layer can be used for studies on explosive volcanic eruptions. + +The OMPS Sulfur Dioxide (SO2) Upper Troposphere and Stratosphere layer is a science parameter of the Ozone Mapping and Profiler Suite (OMPS)-N20 NM PCA Sulfur Dioxide (SO2) Step 1 Total Column 1-Orbit L2 Swath 17x13km collection 1 product. It is available from the OMPS Nadir-Mapper (NM) sensor on the joint NASA/NOAA NOAA-20 (JPSS-1) satellite. The sensor resolution is 25 km, imagery resolution is 2 km, and the temporal resolution is daily. + +References: [OMPS_N20_NMSO2_PCA_L2_Step1_NRT](https://disc.gsfc.nasa.gov/datasets/OMPS_N20_NMSO2_PCA_L2_Step1_1/summary) diff --git a/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_AerosolHeight.md b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_AerosolHeight.md new file mode 100644 index 0000000000..767240355d --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_AerosolHeight.md @@ -0,0 +1,7 @@ +The OMPS Aerosol Extinction Vertical Profile (Aerosol height) layer indicates the retrieved enhanced aerosol height in kilometers (km), as measured by the Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi NPP satellite. The aerosol height is located at least 1.5 km above the tropopause. The tropopause height is derived from the Goddard Earth Observing System Forward Processing for Instrument Teams (GEOS FP-IT) data product. + +The OMPS Aerosol Extinction Vertical Profile (Height) layer is a science parameter of the OMPS-Suomi NPP LP Near-real-time (NRT) Aerosol Extinction Vertical Profile swath multi-wavelength orbital 3slit product. + +It is available from the OMPS Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi National Polar orbiting Partnership (Suomi NPP) satellite. Spatial coverage is global (-90 to 90 degrees latitude), and there are about 14.5 orbits per day each measuring three limb profiles spaced approximately 250 km in the cross-track direction. The profiles are measured from the ground up to about 80 km with a vertical resolution of the retrieved profiles of approximately 1.8 km. The temporal resolution is daily. + +References: [OMPS_NPP_LP_NRT_AER](https://cmr.earthdata.nasa.gov/search/concepts/C3186057053-OMINRT.html) diff --git a/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.md b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.md new file mode 100644 index 0000000000..44676fe6df --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.md @@ -0,0 +1,7 @@ +The OMPS Aerosol Extinction Vertical Profile (11.5 - 12.5 km) layer indicates the average retrieved aerosol extinction coefficient at altitudes of 11.5 - 12.5 km above the tropopause in km-1 (or 1/km), as measured by the Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi NPP satellite. The assumed tropopause height comes from the Goddard Earth Observing System Forward Processing for Instrument Teams (GEOS FP-IT) data product. + +The OMPS Aerosol Extinction Vertical Profile (11.5 - 12.5 km) layer is a science parameter of the OMPS-Suomi NPP LP Near-real-time (NRT) Aerosol Extinction Vertical Profile swath multi-wavelength orbital 3slit product. + +It is available from the OMPS Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi National Polar orbiting Partnership (Suomi NPP) satellite. Spatial coverage is global (-90 to 90 degrees latitude), and there are about 14.5 orbits per day each measuring three limb profiles spaced approximately 250 km in the cross-track direction. The profiles are measured from the ground up to about 80 km with a vertical resolution of the retrieved profiles of approximately 1.8 km. The temporal resolution is daily. + +References: [OMPS_NPP_LP_NRT_AER](https://cmr.earthdata.nasa.gov/search/concepts/C3186057053-OMINRT.html) diff --git a/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.md b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.md new file mode 100644 index 0000000000..45453cd849 --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.md @@ -0,0 +1,7 @@ +The OMPS Aerosol Extinction Vertical Profile (13.5 - 14.5km) layer indicates the average retrieved aerosol extinction coefficient at altitudes of 13.5 - 14.5 km above the tropopause in km-1 (or 1/km), as measured by the Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi NPP satellite. The assumed tropopause height comes from the Goddard Earth Observing System Forward Processing for Instrument Teams (GEOS FP-IT) data product. + +The OMPS Aerosol Extinction Vertical Profile (13.5 - 14.5 km) layer is a science parameter of the OMPS-Suomi NPP LP Near-real time (NRT) Aerosol Extinction Vertical Profile swath multi-wavelength orbital 3slit product. + +It is available from the OMPS Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi National Polar orbiting Partnership (Suomi NPP) satellite. Spatial coverage is global (-90 to 90 degrees latitude), and there are about 14.5 orbits per day each measuring three limb profiles spaced approximately 250 km in the cross-track direction. The profiles are measured from the ground up to about 80 km with a vertical resolution of the retrieved profiles of approximately 1.8 km. The temporal resolution is daily. + +References: [OMPS_NPP_LP_NRT_AER](https://cmr.earthdata.nasa.gov/search/concepts/C3186057053-OMINRT.html) diff --git a/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.md b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.md new file mode 100644 index 0000000000..b5ad3e2002 --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.md @@ -0,0 +1,6 @@ +The OMPS Aerosol Extinction Vertical Profile (15.5 - 16.5 km) layer indicates the average retrieved aerosol extinction coefficient at altitudes of 15.5 - 16.5 km above the tropopause in km-1 (or 1/km),as measured by the Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi NPP satellite. The assumed tropopause height comes from the Goddard Earth Observing System Forward Processing for Instrument Teams (GEOS FP-IT) data product. +The OMPS Aerosol Extinction Vertical Profile (15.5 - 16.5 km) layer is a science parameter of the OMPS-Suomi NPP LP Near-real-time (NRT) Aerosol Extinction Vertical Profile swath multi-wavelength orbital 3slit product. + +It is available from the OMPS Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi National Polar orbiting Partnership (Suomi NPP) satellite. Spatial coverage is global (-90 to 90 degrees latitude), and there are about 14.5 orbits per day each measuring three limb profiles spaced approximately 250 km in the cross-track direction. The profiles are measured from the ground up to about 80 km with a vertical resolution of the retrieved profiles of approximately 1.8 km. The temporal resolution is daily. + +References: [OMPS_NPP_LP_NRT_AER](https://cmr.earthdata.nasa.gov/search/concepts/C3186057053-OMINRT.html) diff --git a/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.md b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.md new file mode 100644 index 0000000000..f0aef1f4c2 --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.md @@ -0,0 +1,7 @@ +The OMPS Aerosol Extinction Vertical Profile (17.5 - 18.5 km) layer indicates the average retrieved aerosol extinction coefficient at altitudes of 17.5 - 18.5 km above the tropopause in km-1 (or 1/km), as measured by the Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi NPP satellite. The assumed tropopause height comes from the Goddard Earth Observing System Forward Processing for Instrument Teams (GEOS FP-IT) data product. + +The OMPS Aerosol Extinction Vertical Profile (17.5 - 18.5 km) layer is a science parameter of the OMPS-Suomi NPP LP Near-real-time (NRT) Aerosol Extinction Vertical Profile swath multi-wavelength orbital 3slit product. + +It is available from the OMPS Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi National Polar orbiting Partnership (Suomi NPP) satellite. Spatial coverage is global (-90 to 90 degrees latitude), and there are about 14.5 orbits per day each measuring three limb profiles spaced approximately 250 km in the cross-track direction. The profiles are measured from the ground up to about 80 km with a vertical resolution of the retrieved profiles of approximately 1.8 km. The temporal resolution is daily. + +References: [OMPS_NPP_LP_NRT_AER](https://cmr.earthdata.nasa.gov/search/concepts/C3186057053-OMINRT.html) diff --git a/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.md b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.md new file mode 100644 index 0000000000..271fc2235a --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.md @@ -0,0 +1,7 @@ +The OMPS Aerosol Extinction Vertical Profile (19.5 - 20.5 km) layer indicates the average retrieved aerosol extinction coefficient at altitudes of 19.5 - 20.5 km in km-1 (or 1/km), as measured by the Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi NPP satellite. + +The OMPS Aerosol Extinction Vertical Profile (19.5 - 20.5 km) layer is a science parameter of the OMPS-Suomi NPP LP Near-real time (NRT) Aerosol Extinction Vertical Profile swath multi-wavelength orbital 3slit product. + +It is available from the OMPS Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi National Polar orbiting Partnership (Suomi NPP) satellite. Spatial coverage is global (-90 to 90 degrees latitude), and there are about 14.5 orbits per day each measuring three limb profiles spaced approximately 250 km in the cross-track direction. The profiles are measured from the ground up to about 80 km with a vertical resolution of the retrieved profiles of approximately 1.8 km. The temporal resolution is daily. + +References: [OMPS_NPP_LP_NRT_AER](https://cmr.earthdata.nasa.gov/search/concepts/C3186057053-OMINRT.html) diff --git a/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.md b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.md new file mode 100644 index 0000000000..be819f35bd --- /dev/null +++ b/config/default/common/config/metadata/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.md @@ -0,0 +1,7 @@ +The OMPS Stratospheric Aerosol Optical Depth layer indicates the stratospheric aerosol optical depth as measured by the Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi NPP satellite. + +The OMPS Stratospheric Aerosol Optical Depth layer is a science parameter of the OMPS-Suomi NPP LP Near-realtime (NRT) Aerosol Extinction Vertical Profile swath multi-wavelength orbital 3slit product. + +It is available from the OMPS Limb Profiler (LP) sensor on the joint NASA/NOAA Suomi National Polar orbiting Partnership (Suomi NPP) satellite. Spatial coverage is global (-90 to 90 degrees latitude), and there are about 14.5 orbits per day each measuring three limb profiles spaced approximately 250 km in the cross-track direction. The profiles are measured from the ground up to about 80 km with a vertical resolution of the retrieved profiles of approximately 1.8 km. The temporal resolution is daily. + +References: [OMPS_NPP_LP_NRT_AER](https://cmr.earthdata.nasa.gov/search/concepts/C3186057053-OMINRT.html) diff --git a/config/default/common/config/wv.json/categories/hazards_and_disasters/All.json b/config/default/common/config/wv.json/categories/hazards_and_disasters/All.json index db19e8d560..5a1a3cd219 100644 --- a/config/default/common/config/wv.json/categories/hazards_and_disasters/All.json +++ b/config/default/common/config/wv.json/categories/hazards_and_disasters/All.json @@ -9,6 +9,7 @@ "measurements": [ "Aboveground Biomass", "Absolute Dynamic Topography", + "Aerosol Extinction", "Aerosol Index", "Aerosol Optical Depth", "Aerosol Albedo", diff --git a/config/default/common/config/wv.json/categories/science_disciplines/All.json b/config/default/common/config/wv.json/categories/science_disciplines/All.json index d024450f34..38d22d375f 100644 --- a/config/default/common/config/wv.json/categories/science_disciplines/All.json +++ b/config/default/common/config/wv.json/categories/science_disciplines/All.json @@ -9,6 +9,7 @@ "measurements": [ "Aboveground Biomass", "Absolute Dynamic Topography", + "Aerosol Extinction", "Aerosol Index", "Aerosol Optical Depth", "Aerosol Albedo", diff --git a/config/default/common/config/wv.json/categories/science_disciplines/Atmosphere.json b/config/default/common/config/wv.json/categories/science_disciplines/Atmosphere.json index af1dc6d5a2..739e932690 100644 --- a/config/default/common/config/wv.json/categories/science_disciplines/Atmosphere.json +++ b/config/default/common/config/wv.json/categories/science_disciplines/Atmosphere.json @@ -8,6 +8,7 @@ "description": "", "measurements": [ "Aerosol Albedo", + "Aerosol Extinction", "Aerosol Index", "Aerosol Optical Depth", "Aerosol Type", diff --git a/config/default/common/config/wv.json/layerOrder.json b/config/default/common/config/wv.json/layerOrder.json index 25579fd12a..112fdd837b 100644 --- a/config/default/common/config/wv.json/layerOrder.json +++ b/config/default/common/config/wv.json/layerOrder.json @@ -679,9 +679,20 @@ "AIRS_L3_Surface_Relative_Humidity_Monthly_Night", "AIRS_L3_Surface_Air_Temperature_Monthly_Day", "AIRS_L3_Surface_Air_Temperature_Monthly_Night", + "OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth", + "OMPS_SNPP_LimbProfiler_AerosolHeight", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM", "OMPS_Aerosol_Index", "OMPS_Aerosol_Index_PyroCumuloNimbus", "OMPS_Ozone_Total_Column", + "OMPS_NOAA20_SO2_Planetary_Boundary_Layer", + "OMPS_NOAA20_SO2_Lower_Troposphere", + "OMPS_NOAA20_SO2_Middle_Troposphere", + "OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere", "OMPS_SO2_Planetary_Boundary_Layer", "OMPS_SO2_Lower_Troposphere", "OMPS_SO2_Middle_Troposphere", diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Lower_Troposphere.json b/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Lower_Troposphere.json new file mode 100644 index 0000000000..e619abda83 --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Lower_Troposphere.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_NOAA20_SO2_Lower_Troposphere": { + "id": "OMPS_NOAA20_SO2_Lower_Troposphere", + "description": "omps/OMPS_NOAA20_SO2_Lower_Troposphere", + "tags": "SO2, sulphur", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Sulfur Dioxide" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Middle_Troposphere.json b/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Middle_Troposphere.json new file mode 100644 index 0000000000..1419e49deb --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Middle_Troposphere.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_NOAA20_SO2_Middle_Troposphere": { + "id": "OMPS_NOAA20_SO2_Middle_Troposphere", + "description": "omps/OMPS_NOAA20_SO2_Middle_Troposphere", + "tags": "SO2, sulphur", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Sulfur Dioxide" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.json b/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.json new file mode 100644 index 0000000000..7a502eba65 --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_NOAA20_SO2_Planetary_Boundary_Layer": { + "id": "OMPS_NOAA20_SO2_Planetary_Boundary_Layer", + "description": "omps/OMPS_NOAA20_SO2_Planetary_Boundary_Layer", + "tags": "SO2, sulphur", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Sulfur Dioxide" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.json b/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.json new file mode 100644 index 0000000000..b635707eee --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere": { + "id": "OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere", + "description": "omps/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere", + "tags": "SO2, sulphur", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Sulfur Dioxide" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_AerosolHeight.json b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_AerosolHeight.json new file mode 100644 index 0000000000..c89565a152 --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_AerosolHeight.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_SNPP_LimbProfiler_AerosolHeight": { + "id": "OMPS_SNPP_LimbProfiler_AerosolHeight", + "description": "omps/OMPS_SNPP_LimbProfiler_AerosolHeight", + "tags": "AOD", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Aerosol Optical Depth" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.json b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.json new file mode 100644 index 0000000000..4c8eab79b6 --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM": { + "id": "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM", + "description": "omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM", + "tags": "AOD", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Aerosol Extinction" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.json b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.json new file mode 100644 index 0000000000..e5a6c5553d --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM": { + "id": "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM", + "description": "omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM", + "tags": "AOD", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Aerosol Extinction" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.json b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.json new file mode 100644 index 0000000000..8aacd4550e --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM": { + "id": "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM", + "description": "omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM", + "tags": "AOD", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Aerosol Extinction" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.json b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.json new file mode 100644 index 0000000000..e4291db461 --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM": { + "id": "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM", + "description": "omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM", + "tags": "AOD", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Aerosol Extinction" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.json b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.json new file mode 100644 index 0000000000..161137dce6 --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM": { + "id": "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM", + "description": "omps/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM", + "tags": "AOD", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Aerosol Extinction" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.json b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.json new file mode 100644 index 0000000000..3c7b9f40ec --- /dev/null +++ b/config/default/common/config/wv.json/layers/omps/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.json @@ -0,0 +1,12 @@ +{ + "layers": { + "OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth": { + "id": "OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth", + "description": "omps/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth", + "tags": "AOD", + "group": "overlays", + "wrapadjacentdays": true, + "layergroup": "Aerosol Optical Depth" + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/measurements/Aerosol Extinction.json b/config/default/common/config/wv.json/measurements/Aerosol Extinction.json new file mode 100644 index 0000000000..b2cd001f03 --- /dev/null +++ b/config/default/common/config/wv.json/measurements/Aerosol Extinction.json @@ -0,0 +1,25 @@ +{ + "measurements": { + "Aerosol Extinction": { + "id": "aerosol-extinction", + "title": "Aerosol Extinction", + "subtitle": "Suomi NPP/OMPS LP", + "sources": { + "Suomi NPP/OMPS": { + "id": "suomi-npp-omps-lp", + "title": "Suomi NPP/OMPS LP", + "description": "", + "image": "", + "settings": [ + "OMPS_SNPP_LimbProfiler_AerosolHeight", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM", + "OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM" + ] + } + } + } + } +} \ No newline at end of file diff --git a/config/default/common/config/wv.json/measurements/Aerosol Optical Depth.json b/config/default/common/config/wv.json/measurements/Aerosol Optical Depth.json index 6ab167cfe2..e51ab4e580 100644 --- a/config/default/common/config/wv.json/measurements/Aerosol Optical Depth.json +++ b/config/default/common/config/wv.json/measurements/Aerosol Optical Depth.json @@ -3,7 +3,7 @@ "Aerosol Optical Depth": { "id": "aerosol-optical-depth", "title": "Aerosol Optical Depth", - "subtitle": "AERONET, Aura/OMI, Aqua/MODIS, Terra/MODIS, Aqua and Terra/MODIS, Terra/MISR, SeaWiFS Deep Blue, Suomi NPP/VIIRS, NOAA-20/VIIRS, MERRA-2", + "subtitle": "AERONET, Aura/OMI, Aqua/MODIS, Terra/MODIS, Aqua and Terra/MODIS, Terra/MISR, SeaWiFS Deep Blue, Suomi NPP/VIIRS, Suomi NPP/OMPS LP, NOAA-20/VIIRS, MERRA-2", "sources": { "AERONET": { "id": "aeronet", @@ -102,7 +102,17 @@ "VIIRS_SNPP_Angstrom_Exponent_Dark_Target_Ocean", "OrbitTracks_Suomi_NPP_Ascending" ] - } , + }, + "Suomi NPP/OMPS": { + "id": "suomi-npp-omps-lp", + "title": "Suomi NPP/OMPS LP", + "description": "viirs/Aerosol", + "image": "", + "settings": [ + "OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth", + "OrbitTracks_Suomi_NPP_Ascending" + ] + }, "NOAA-20/VIIRS": { "id": "noaa-20-viirs", "title": "NOAA-20/VIIRS", diff --git a/config/default/common/config/wv.json/measurements/Sulfur Dioxide.json b/config/default/common/config/wv.json/measurements/Sulfur Dioxide.json index 2750c205a5..cd8fe84688 100644 --- a/config/default/common/config/wv.json/measurements/Sulfur Dioxide.json +++ b/config/default/common/config/wv.json/measurements/Sulfur Dioxide.json @@ -3,7 +3,7 @@ "Sulfur Dioxide": { "id": "sulfur-dioxide", "title": "Sulfur Dioxide", - "subtitle": "Aqua/AIRS, Aura/MLS, Aura/OMI, Suomi NPP/OMPS, MERRA-2", + "subtitle": "Aqua/AIRS, Aura/MLS, Aura/OMI, NOAA-20/OMPS, Suomi NPP/OMPS, MERRA-2", "sources": { "Aqua/AIRS": { "id": "aqua-airs", @@ -44,13 +44,27 @@ "OrbitTracks_Aura_Ascending" ] }, + "NOAA-20/OMPS": { + "id": "noaa-20-omps", + "title": "NOAA-20/OMPS", + "description": "omps/SO2", + "image": "", + "settings": [ + "OMPS_NOAA20_SO2_Planetary_Boundary_Layer", + "OMPS_NOAA20_SO2_Lower_Troposphere", + "OMPS_NOAA20_SO2_Middle_Troposphere", + "OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere", + "OrbitTracks_NOAA-20_Ascending" + + ] + }, "Suomi NPP/OMPS": { "id": "suomi-npp-omps", "title": "Suomi NPP/OMPS", "description": "omps/SO2", "image": "", "settings": [ - "OMPS_SO2_Planetary_Boundary_Layer", + "OMPS_SO2_Planetary_Boundary_Layer", "OMPS_SO2_Lower_Troposphere", "OMPS_SO2_Middle_Troposphere", "OMPS_SO2_Upper_Troposphere_and_Stratosphere", diff --git a/e2e/features/layers/layer-picker-mobile-test.spec.js b/e2e/features/layers/layer-picker-mobile-test.spec.js index 2728eeea0d..a1a26cf1d2 100644 --- a/e2e/features/layers/layer-picker-mobile-test.spec.js +++ b/e2e/features/layers/layer-picker-mobile-test.spec.js @@ -60,7 +60,7 @@ test('Clicking a measurement shows choices, indicates unavailability', async () // const maiacAvailableCoverage = page.locator('#MODIS_Combined_MAIAC_L2G_AerosolOpticalDepth-checkbox + svg#availability-info') await expect(modisAvailableCoverage).toBeVisible() // await expect(maiacAvailableCoverage).toBeVisible() - await expect(sourceTabs).toHaveCount(10) + await expect(sourceTabs).toHaveCount(11) }) test('Available grid source layer measuremet does not have unavaiable coverage class', async () => { @@ -142,7 +142,7 @@ test('Searching for layers', async () => { aodCheckbox } = selectors await layersSearchField.fill('aerosol optical depth') - await expect(layersSearchRow).toHaveCount(19) + await expect(layersSearchRow).toHaveCount(20) await expect(aodCheckbox).toBeVisible() }) diff --git a/package-lock.json b/package-lock.json index c1a0c9aec4..065979e832 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "worldview", - "version": "4.51.0", + "version": "4.52.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "worldview", - "version": "4.51.0", + "version": "4.52.0", "hasInstallScript": true, "license": "NASA-1.3", "dependencies": { @@ -23,7 +23,7 @@ "bluebird": "3.7.2", "bootstrap": "^5.3.3", "cachai": "^1.0.2", - "compression": "^1.7.4", + "compression": "^1.7.5", "coordinate-parser": "^1.0.7", "copy-to-clipboard": "^3.3.3", "dom-scroll-into-view": "^2.0.1", @@ -45,7 +45,7 @@ "ol": "^8.2.0", "ol-mapbox-style": "^12.3.5", "p-queue": "^8.0.1", - "proj4": "^2.12.1", + "proj4": "^2.14.0", "prop-types": "^15.8.1", "qs": "^6.13.0", "react": "^18.3.1", @@ -62,7 +62,7 @@ "react-swipe-to-delete-component": "1.0.5", "react-visibility-sensor": "^5.1.1", "reactstrap": "^9.2.3", - "recharts": "^2.13.0", + "recharts": "^2.13.3", "redux": "^5.0.1", "redux-location-state": "^2.8.2", "redux-logger": "^3.0.6", @@ -79,13 +79,13 @@ "what-input": "^5.2.12" }, "devDependencies": { - "@babel/core": "^7.25.9", + "@babel/core": "^7.26.0", "@babel/eslint-parser": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/preset-env": "^7.25.9", + "@babel/preset-env": "^7.26.0", "@babel/preset-react": "^7.25.9", - "@playwright/test": "^1.48.0", + "@playwright/test": "^1.48.2", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", "@webpack-cli/serve": "^2.0.5", "ajv": "^8.17.1", @@ -103,9 +103,9 @@ "eslint-config-standard": "^17.1.0", "eslint-import-resolver-webpack": "^0.13.9", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.8.3", - "eslint-plugin-jsx-a11y": "^6.10.1", - "eslint-plugin-n": "^17.11.1", + "eslint-plugin-jest": "^28.9.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-n": "^17.13.1", "eslint-plugin-no-storage": "^1.0.2", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.6.0", @@ -116,7 +116,7 @@ "jest": "^29.7.0", "jest-canvas-mock": "^2.5.2", "jest-environment-jsdom": "^29.7.0", - "mini-css-extract-plugin": "^2.9.1", + "mini-css-extract-plugin": "^2.9.2", "node-dir": "^0.1.17", "node-fetch": "^2.6.9", "node-ssh": "^13.2.0", @@ -128,8 +128,8 @@ "react-test-renderer": "^18.3.0", "redux-mock-store": "^1.5.5", "run-script-os": "^1.1.6", - "sass": "^1.80.4", - "sass-loader": "^16.0.2", + "sass": "^1.80.6", + "sass-loader": "^16.0.3", "shelljs": "^0.8.5", "showdown": "^2.1.0", "stylelint": "^15.11.0", @@ -137,8 +137,8 @@ "stylelint-high-performance-animation": "^1.10.0", "tar": "^7.4.3", "terser-webpack-plugin": "^5.3.10", - "uuid": "^10.0.0", - "webpack": "^5.95.0", + "uuid": "^11.0.2", + "webpack": "^5.96.1", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^5.1.4", "webpack-dev-middleware": "^7.4.2", @@ -171,9 +171,7 @@ }, "node_modules/@babel/code-frame": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", @@ -185,16 +183,14 @@ }, "node_modules/@babel/compat-data": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", @@ -222,9 +218,8 @@ }, "node_modules/@babel/eslint-parser": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz", - "integrity": "sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==", "dev": true, + "license": "MIT", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", @@ -240,9 +235,7 @@ }, "node_modules/@babel/generator": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", - + "license": "MIT", "dependencies": { "@babel/parser": "^7.26.2", "@babel/types": "^7.26.0", @@ -268,8 +261,6 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "license": "MIT", "dependencies": { @@ -281,8 +272,6 @@ }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", "dev": true, "license": "MIT", "dependencies": { @@ -295,8 +284,7 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", @@ -321,8 +309,6 @@ }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "dev": true, "license": "MIT", "dependencies": { @@ -343,8 +329,6 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", "dev": true, "license": "MIT", "dependencies": { @@ -376,8 +360,6 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -390,8 +372,7 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -402,8 +383,7 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", @@ -418,8 +398,6 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -431,8 +409,6 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, "license": "MIT", "engines": { @@ -441,8 +417,6 @@ }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "dev": true, "license": "MIT", "dependencies": { @@ -459,8 +433,6 @@ }, "node_modules/@babel/helper-replace-supers": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -477,9 +449,8 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -490,8 +461,6 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, "license": "MIT", "dependencies": { @@ -504,32 +473,27 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "dev": true, "license": "MIT", "dependencies": { @@ -543,8 +507,7 @@ }, "node_modules/@babel/helpers": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", "@babel/types": "^7.26.0" @@ -555,8 +518,7 @@ }, "node_modules/@babel/parser": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", "dependencies": { "@babel/types": "^7.26.0" }, @@ -569,8 +531,6 @@ }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", "dev": true, "license": "MIT", "dependencies": { @@ -586,8 +546,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", "dev": true, "license": "MIT", "dependencies": { @@ -602,8 +560,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", "dev": true, "license": "MIT", "dependencies": { @@ -618,8 +574,6 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", "dev": true, "license": "MIT", "dependencies": { @@ -636,8 +590,6 @@ }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", "dev": true, "license": "MIT", "dependencies": { @@ -697,8 +649,6 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "dev": true, "license": "MIT", "dependencies": { @@ -713,8 +663,6 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dev": true, "license": "MIT", "dependencies": { @@ -751,8 +699,6 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, "license": "MIT", "dependencies": { @@ -876,8 +822,6 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "dev": true, "license": "MIT", "dependencies": { @@ -892,9 +836,8 @@ }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-remap-async-to-generator": "^7.25.9", @@ -909,8 +852,6 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "dev": true, "license": "MIT", "dependencies": { @@ -927,8 +868,6 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", "dev": true, "license": "MIT", "dependencies": { @@ -943,8 +882,6 @@ }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "dev": true, "license": "MIT", "dependencies": { @@ -959,8 +896,6 @@ }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -976,9 +911,8 @@ }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -992,8 +926,6 @@ }, "node_modules/@babel/plugin-transform-classes": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "dev": true, "license": "MIT", "dependencies": { @@ -1013,8 +945,6 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "dev": true, "license": "MIT", "dependencies": { @@ -1030,8 +960,6 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1046,8 +974,6 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "dev": true, "license": "MIT", "dependencies": { @@ -1063,8 +989,6 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "dev": true, "license": "MIT", "dependencies": { @@ -1079,8 +1003,6 @@ }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", "dev": true, "license": "MIT", "dependencies": { @@ -1096,9 +1018,8 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1111,8 +1032,6 @@ }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", "dev": true, "license": "MIT", "dependencies": { @@ -1128,9 +1047,8 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1143,8 +1061,6 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", "dev": true, "license": "MIT", "dependencies": { @@ -1160,8 +1076,6 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "dev": true, "license": "MIT", "dependencies": { @@ -1178,9 +1092,8 @@ }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1193,8 +1106,6 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1209,9 +1120,8 @@ }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1224,8 +1134,6 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "dev": true, "license": "MIT", "dependencies": { @@ -1240,8 +1148,6 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "dev": true, "license": "MIT", "dependencies": { @@ -1257,8 +1163,6 @@ }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", "dev": true, "license": "MIT", "dependencies": { @@ -1275,8 +1179,6 @@ }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "dev": true, "license": "MIT", "dependencies": { @@ -1294,8 +1196,6 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "dev": true, "license": "MIT", "dependencies": { @@ -1311,8 +1211,6 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "dev": true, "license": "MIT", "dependencies": { @@ -1328,8 +1226,6 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1344,9 +1240,8 @@ }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1359,9 +1254,8 @@ }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1374,9 +1268,8 @@ }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", @@ -1391,8 +1284,6 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1408,9 +1299,8 @@ }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1423,9 +1313,8 @@ }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" @@ -1439,9 +1328,8 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1454,8 +1342,6 @@ }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", "dev": true, "license": "MIT", "dependencies": { @@ -1471,9 +1357,8 @@ }, "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-create-class-features-plugin": "^7.25.9", @@ -1488,8 +1373,6 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "dev": true, "license": "MIT", "dependencies": { @@ -1504,8 +1387,6 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1520,8 +1401,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "license": "MIT", "dependencies": { @@ -1540,8 +1419,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dev": true, "license": "MIT", "dependencies": { @@ -1556,8 +1433,6 @@ }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dev": true, "license": "MIT", "dependencies": { @@ -1573,8 +1448,6 @@ }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", "dev": true, "license": "MIT", "dependencies": { @@ -1590,9 +1463,8 @@ }, "node_modules/@babel/plugin-transform-regexp-modifiers": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1606,8 +1478,6 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -1622,8 +1492,6 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", "dev": true, "license": "MIT", "dependencies": { @@ -1638,8 +1506,6 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "dev": true, "license": "MIT", "dependencies": { @@ -1655,8 +1521,6 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "dev": true, "license": "MIT", "dependencies": { @@ -1671,8 +1535,6 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", "dev": true, "license": "MIT", "dependencies": { @@ -1687,8 +1549,6 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", "dev": true, "license": "MIT", "dependencies": { @@ -1703,8 +1563,6 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1719,8 +1577,6 @@ }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", "dev": true, "license": "MIT", "dependencies": { @@ -1736,8 +1592,6 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", "dev": true, "license": "MIT", "dependencies": { @@ -1753,8 +1607,6 @@ }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1770,9 +1622,8 @@ }, "node_modules/@babel/preset-env": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.26.0", "@babel/helper-compilation-targets": "^7.25.9", @@ -1866,8 +1717,6 @@ }, "node_modules/@babel/preset-react": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", - "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", "dev": true, "license": "MIT", "dependencies": { @@ -1897,8 +1746,7 @@ }, "node_modules/@babel/template": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.25.9", "@babel/parser": "^7.25.9", @@ -1910,8 +1758,7 @@ }, "node_modules/@babel/traverse": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.25.9", "@babel/generator": "^7.25.9", @@ -1927,8 +1774,7 @@ }, "node_modules/@babel/types": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -2201,27 +2047,37 @@ "license": "MIT" }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.3.0", + "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==", "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", + "version": "4.12.1", "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -3303,10 +3159,9 @@ }, "node_modules/@parcel/watcher": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", - "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -3349,13 +3204,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.48.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.1.tgz", - "integrity": "sha512-s9RtWoxkOLmRJdw3oFvhFbs9OJS0BzrLUc8Hf6l2UdCNd1rqeEyD4BhCJkvzeEoD1FsK4mirsWwGerhVmYKtZg==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.2.tgz", + "integrity": "sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.48.1" + "playwright": "1.48.2" }, "bin": { "playwright": "cli.js" @@ -3452,8 +3307,6 @@ }, "node_modules/@reduxjs/toolkit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.3.0.tgz", - "integrity": "sha512-WC7Yd6cNGfHx8zf+iu+Q1UPTfEcXhQ+ATi7CV1hlrSAaQBdlPzg7Ww/wJHNQem7qG9rxmWoFCDCPubSvFObGzA==", "license": "MIT", "dependencies": { "immer": "^10.0.3", @@ -3632,6 +3485,26 @@ "version": "3.0.0", "license": "MIT" }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.6", "license": "MIT" @@ -4215,6 +4088,7 @@ }, "node_modules/accepts": { "version": "1.3.8", + "dev": true, "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -4225,7 +4099,7 @@ } }, "node_modules/acorn": { - "version": "8.10.0", + "version": "8.14.0", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -4234,13 +4108,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "license": "MIT", @@ -4386,9 +4253,8 @@ }, "node_modules/aria-query": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">= 0.4" } @@ -5021,14 +4887,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", "dev": true, @@ -5149,7 +5007,7 @@ } }, "node_modules/bytes": { - "version": "3.0.0", + "version": "3.1.2", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5685,15 +5543,15 @@ } }, "node_modules/compression": { - "version": "1.7.4", + "version": "1.7.5", "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", + "negotiator": "~0.6.4", "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { @@ -5711,6 +5569,31 @@ "version": "2.0.0", "license": "MIT" }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.2.1", + "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/compute-scroll-into-view": { "version": "1.0.20", "license": "MIT" @@ -5776,8 +5659,6 @@ }, "node_modules/cookie": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "license": "MIT", "engines": { @@ -6747,10 +6628,9 @@ }, "node_modules/detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, "license": "Apache-2.0", + "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -7133,9 +7013,8 @@ }, "node_modules/es-iterator-helpers": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", - "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -7349,9 +7228,12 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.1.2", + "version": "0.5.1", "dev": true, "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, "engines": { "node": ">=12" }, @@ -7534,20 +7416,21 @@ } }, "node_modules/eslint-plugin-es-x": { - "version": "7.5.0", + "version": "7.8.0", "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.1.2" + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, "peerDependencies": { "eslint": ">=8" } @@ -7604,7 +7487,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.8.3", + "version": "28.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.9.0.tgz", + "integrity": "sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7629,9 +7514,8 @@ }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, + "license": "MIT", "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", @@ -7657,20 +7541,20 @@ } }, "node_modules/eslint-plugin-n": { - "version": "17.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.11.1.tgz", - "integrity": "sha512-93IUD82N6tIEgjztVI/l3ElHtC2wTa9boJHrD8iN+NyDxjxz/daZUZKfkedjBZNdg6EqDk4irybUsiPwDqXAEA==", + "version": "17.13.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.13.1.tgz", + "integrity": "sha512-97qzhk1z3DdSJNCqT45EslwCu5+LB9GDadSyBItgKUfGsXAmN/aa7LRQ0ZxHffUxUzvgbTPJL27/pE9ZQWHy7A==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "enhanced-resolve": "^5.17.0", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "globals": "^15.8.0", - "ignore": "^5.2.4", + "@eslint-community/eslint-utils": "^4.4.1", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "ignore": "^5.3.2", "minimatch": "^9.0.5", - "semver": "^7.5.3" + "semver": "^7.6.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7691,7 +7575,7 @@ } }, "node_modules/eslint-plugin-n/node_modules/enhanced-resolve": { - "version": "5.17.0", + "version": "5.17.1", "dev": true, "license": "MIT", "dependencies": { @@ -7703,7 +7587,7 @@ } }, "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.8.0", + "version": "15.11.0", "dev": true, "license": "MIT", "engines": { @@ -7778,8 +7662,6 @@ }, "node_modules/eslint-plugin-react": { "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, "license": "MIT", "dependencies": { @@ -8188,8 +8070,6 @@ }, "node_modules/express": { "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8397,6 +8277,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", "engines": { "node": ">=16" } @@ -8706,6 +8587,21 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -8844,7 +8740,7 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", + "version": "4.8.1", "dev": true, "license": "MIT", "dependencies": { @@ -8957,9 +8853,8 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -9257,7 +9152,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "license": "MIT", "dependencies": { @@ -9373,7 +9270,7 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.2.4", + "version": "5.3.2", "license": "MIT", "engines": { "node": ">= 4" @@ -9561,9 +9458,8 @@ }, "node_modules/is-async-function": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9685,9 +9581,8 @@ }, "node_modules/is-finalizationregistry": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -9713,9 +9608,8 @@ }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9773,9 +9667,8 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9901,9 +9794,8 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9984,9 +9876,8 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10007,9 +9898,8 @@ }, "node_modules/is-weakset": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -10145,9 +10035,8 @@ }, "node_modules/iterator.prototype": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", @@ -12381,7 +12270,7 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.1", + "version": "2.9.2", "dev": true, "license": "MIT", "dependencies": { @@ -12665,6 +12554,7 @@ }, "node_modules/negotiator": { "version": "0.6.3", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -12681,10 +12571,9 @@ }, "node_modules/node-addon-api": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/node-dir": { "version": "0.1.17", @@ -13651,13 +13540,13 @@ } }, "node_modules/playwright": { - "version": "1.48.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.1.tgz", - "integrity": "sha512-j8CiHW/V6HxmbntOfyB4+T/uk08tBy6ph0MpBXwuoofkSnLmlfdYNNkFTYD6ofzzlSqLA1fwH4vwvVFvJgLN0w==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.2.tgz", + "integrity": "sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.48.1" + "playwright-core": "1.48.2" }, "bin": { "playwright": "cli.js" @@ -13670,9 +13559,9 @@ } }, "node_modules/playwright-core": { - "version": "1.48.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.1.tgz", - "integrity": "sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.2.tgz", + "integrity": "sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -14345,7 +14234,7 @@ "license": "MIT" }, "node_modules/proj4": { - "version": "2.12.1", + "version": "2.14.0", "license": "MIT", "dependencies": { "mgrs": "1.0.0", @@ -14525,14 +14414,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rbush": { "version": "3.0.1", "license": "MIT", @@ -15115,9 +14996,9 @@ } }, "node_modules/recharts": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.13.0.tgz", - "integrity": "sha512-sbfxjWQ+oLWSZEWmvbq/DFVdeRLqqA6d0CDjKx2PkxVVdoXo16jvENCE+u/x7HxOO+/fwx//nYRwb8p8X6s/lQ==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.13.3.tgz", + "integrity": "sha512-YDZ9dOfK9t3ycwxgKbrnDlRC4BHdjlY73fet3a0C1+qGMjXVZe6+VXmpOIIhzkje5MMEL8AN4hLIe4AMskBzlA==", "license": "MIT", "dependencies": { "clsx": "^2.0.0", @@ -15153,8 +15034,6 @@ }, "node_modules/recharts/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==", "license": "MIT" }, "node_modules/rechoir": { @@ -15212,9 +15091,8 @@ }, "node_modules/redux-mock-store": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.5.tgz", - "integrity": "sha512-YxX+ofKUTQkZE4HbhYG4kKGr7oCTJfB0GLy7bSeqx86GLpGirrbUWstMnqXkqHNaQpcnbMGbof2dYs5KsPE6Zg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.isplainobject": "^4.0.6" }, @@ -15231,9 +15109,8 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -15592,12 +15469,12 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.80.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.5.tgz", - "integrity": "sha512-TQd2aoQl/+zsxRMEDSxVdpPIqeq9UFc6pr7PzkugiTx3VYCFPUaa3P4RrBQsqok4PO200Vkz0vXQBNlg7W907g==", + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.6.tgz", + "integrity": "sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/watcher": "^2.4.1", "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" @@ -15607,10 +15484,13 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { - "version": "16.0.2", + "version": "16.0.3", "dev": true, "license": "MIT", "dependencies": { @@ -16449,9 +16329,8 @@ }, "node_modules/string.prototype.includes": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -17574,7 +17453,7 @@ } }, "node_modules/uuid": { - "version": "10.0.0", + "version": "11.0.2", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -17582,7 +17461,7 @@ ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/uuid-v4": { @@ -17696,16 +17575,18 @@ } }, "node_modules/webpack": { - "version": "5.95.0", + "version": "5.96.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", + "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", "license": "MIT", "dependencies": { - "@types/estree": "^1.0.5", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", @@ -18206,9 +18087,8 @@ }, "node_modules/which-builtin-type": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", "dev": true, + "license": "MIT", "dependencies": { "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", @@ -18232,15 +18112,13 @@ }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", diff --git a/package.json b/package.json index 36e759e02a..a6fd2929f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "worldview", - "version": "4.51.0", + "version": "4.52.0", "description": "Interactive interface for browsing full-resolution, global satellite imagery", "keywords": [ "NASA", @@ -77,13 +77,13 @@ "upload": "node tasks/util/upload.js" }, "devDependencies": { - "@babel/core": "^7.25.9", + "@babel/core": "^7.26.0", "@babel/eslint-parser": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/preset-env": "^7.25.9", + "@babel/preset-env": "^7.26.0", "@babel/preset-react": "^7.25.9", - "@playwright/test": "^1.48.0", + "@playwright/test": "^1.48.2", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", "@webpack-cli/serve": "^2.0.5", "ajv": "^8.17.1", @@ -101,9 +101,9 @@ "eslint-config-standard": "^17.1.0", "eslint-import-resolver-webpack": "^0.13.9", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.8.3", - "eslint-plugin-jsx-a11y": "^6.10.1", - "eslint-plugin-n": "^17.11.1", + "eslint-plugin-jest": "^28.9.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-n": "^17.13.1", "eslint-plugin-no-storage": "^1.0.2", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.6.0", @@ -114,7 +114,7 @@ "jest": "^29.7.0", "jest-canvas-mock": "^2.5.2", "jest-environment-jsdom": "^29.7.0", - "mini-css-extract-plugin": "^2.9.1", + "mini-css-extract-plugin": "^2.9.2", "node-dir": "^0.1.17", "node-fetch": "^2.6.9", "node-ssh": "^13.2.0", @@ -126,8 +126,8 @@ "react-test-renderer": "^18.3.0", "redux-mock-store": "^1.5.5", "run-script-os": "^1.1.6", - "sass": "^1.80.4", - "sass-loader": "^16.0.2", + "sass": "^1.80.6", + "sass-loader": "^16.0.3", "shelljs": "^0.8.5", "showdown": "^2.1.0", "stylelint": "^15.11.0", @@ -135,8 +135,8 @@ "stylelint-high-performance-animation": "^1.10.0", "tar": "^7.4.3", "terser-webpack-plugin": "^5.3.10", - "uuid": "^10.0.0", - "webpack": "^5.95.0", + "uuid": "^11.0.2", + "webpack": "^5.96.1", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^5.1.4", "webpack-dev-middleware": "^7.4.2", @@ -159,7 +159,7 @@ "bluebird": "3.7.2", "bootstrap": "^5.3.3", "cachai": "^1.0.2", - "compression": "^1.7.4", + "compression": "^1.7.5", "coordinate-parser": "^1.0.7", "copy-to-clipboard": "^3.3.3", "dom-scroll-into-view": "^2.0.1", @@ -181,7 +181,7 @@ "ol": "^8.2.0", "ol-mapbox-style": "^12.3.5", "p-queue": "^8.0.1", - "proj4": "^2.12.1", + "proj4": "^2.14.0", "prop-types": "^15.8.1", "qs": "^6.13.0", "react": "^18.3.1", @@ -198,7 +198,7 @@ "react-swipe-to-delete-component": "1.0.5", "react-visibility-sensor": "^5.1.1", "reactstrap": "^9.2.3", - "recharts": "^2.13.0", + "recharts": "^2.13.3", "redux": "^5.0.1", "redux-location-state": "^2.8.2", "redux-logger": "^3.0.6", diff --git a/schemas/layer-config.json b/schemas/layer-config.json index 992bb1dc92..3173e34b29 100644 --- a/schemas/layer-config.json +++ b/schemas/layer-config.json @@ -57,6 +57,7 @@ "Absolute Dynamic Topography", "Aboveground Biomass", "Aerosol Albedo", + "Aerosol Extinction", "Aerosol Index", "Aerosol Optical Depth", "Aerosol Type", diff --git a/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Lower_Troposphere.jpg b/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Lower_Troposphere.jpg new file mode 100644 index 0000000000..2091566cae Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Lower_Troposphere.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Middle_Troposphere.jpg b/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Middle_Troposphere.jpg new file mode 100644 index 0000000000..5eaaac91be Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Middle_Troposphere.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.jpg b/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.jpg new file mode 100644 index 0000000000..b65642eef7 Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Planetary_Boundary_Layer.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.jpg b/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.jpg new file mode 100644 index 0000000000..47fa0bdd70 Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_NOAA20_SO2_Upper_Troposphere_and_Stratosphere.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_AerosolHeight.jpg b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_AerosolHeight.jpg new file mode 100644 index 0000000000..2c283da69d Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_AerosolHeight.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.jpg b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.jpg new file mode 100644 index 0000000000..3daa3bdea4 Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_12KM.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.jpg b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.jpg new file mode 100644 index 0000000000..ef5468c750 Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_14KM.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.jpg b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.jpg new file mode 100644 index 0000000000..f4c01b2669 Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_16KM.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.jpg b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.jpg new file mode 100644 index 0000000000..bf67e653df Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_18KM.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.jpg b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.jpg new file mode 100644 index 0000000000..b93a012d7f Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_ExinctionCoefficient_20KM.jpg differ diff --git a/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.jpg b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.jpg new file mode 100644 index 0000000000..9515f99f83 Binary files /dev/null and b/web/images/layers/previews/geographic/OMPS_SNPP_LimbProfiler_Aerosol_OpticalDepth.jpg differ diff --git a/web/js/components/layer/info/date-ranges.js b/web/js/components/layer/info/date-ranges.js index e6f3fc828d..d3157c7e4b 100644 --- a/web/js/components/layer/info/date-ranges.js +++ b/web/js/components/layer/info/date-ranges.js @@ -1,27 +1,56 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { ListGroup, ListGroupItem } from 'reactstrap'; +import React, { useState } from 'react'; +import { ListGroup, ListGroupItem, Spinner } from 'reactstrap'; import Scrollbar from '../../util/scrollbar'; import { coverageDateFormatter } from '../../../modules/date/util'; -export default class DateRanges extends React.Component { - constructor(props) { - super(props); - this.state = { - showRanges: false, +const formatDateRanges = (dateRanges = []) => dateRanges.map(({ startDate, endDate }) => [startDate, endDate]); + +export default function DateRanges ({ layer }) { + const [showRanges, setShowRanges] = useState(false); + const [dateRanges, setDateRanges] = useState([]); + const { ongoing } = layer; + + const getDateRanges = async () => { + if (dateRanges.length) return; + if (!ongoing) return setDateRanges(formatDateRanges(layer.dateRanges)); + const worker = new Worker('js/workers/describe-domains.worker.js'); + worker.onmessage = (event) => { + if (Array.isArray(event.data)) { // our final format is an array + worker.terminate(); // terminate the worker + const data = event.data.length ? event.data : formatDateRanges(layer.dateRanges); // fallback to layer.dateRanges if no DescribeDomains data + return setDateRanges(data); + } + // DOMParser is not available in workers so we parse the xml on the main thread before sending it back to the worker + const parser = new DOMParser(); + const xmlDoc = parser.parseFromString(event.data, 'text/xml'); + const domains = xmlDoc.querySelector('Domain')?.textContent || ''; + worker.postMessage({ operation: 'mergeDomains', args: [domains, 0] }); + }; + worker.onerror = () => { + worker.terminate(); + setDateRanges(formatDateRanges(layer.dateRanges)); // fallback to layer.dateRanges if worker fails }; - } + const { startDate } = layer; + const endDate = layer.endDate ? new Date(layer.endDate).toISOString() : new Date().toISOString(); // default to today if no end date + const params = { + startDate, + endDate, + id: layer.id, + proj: 'EPSG:4326', + }; + worker.postMessage({ operation: 'requestDescribeDomains', args: [params] }); + }; - renderListItem = (layer) => layer.dateRanges + const renderListItem = () => dateRanges .slice(0) .reverse() .map((l) => { - const ListItemStartDate = () => coverageDateFormatter('START-DATE', l.startDate, layer.period); - const ListItemEndDate = () => coverageDateFormatter('END-DATE', l.endDate, layer.period); + const ListItemStartDate = () => coverageDateFormatter('START-DATE', l[0], layer.period); + const ListItemEndDate = () => coverageDateFormatter('END-DATE', l.at(-1), layer.period); return ( // notranslate included below to prevent Google Translate extension from crashing the page - + {' - '} @@ -29,41 +58,36 @@ export default class DateRanges extends React.Component { ); }); - render() { - const { layer } = this.props; - const { showRanges } = this.state; - const style = showRanges ? { display: 'block' } : { display: 'none' }; - const listItems = this.renderListItem(layer); + const style = showRanges ? { display: 'block' } : { display: 'none' }; - return ( - <> - { - this.setState({ showRanges: !showRanges }); - }} - > - *View Dates - -
-
-

Date Ranges:

+ return ( + <> + { + getDateRanges(); + setShowRanges(!showRanges); + }} + > + *View Dates + +
+
+

Date Ranges:

+
+ {dateRanges.length === 0 && Loading...}
- - - {listItems} - -
- - ); - } + + + {renderListItem()} + + +
+ + ); } - -DateRanges.propTypes = { - layer: PropTypes.object, -}; diff --git a/web/js/components/layer/info/info.js b/web/js/components/layer/info/info.js index 044854a8a6..37d813d7da 100644 --- a/web/js/components/layer/info/info.js +++ b/web/js/components/layer/info/info.js @@ -11,7 +11,6 @@ export default function LayerInfo ({ layer, measurementDescriptionPath }) { id, period, startDate, - ongoing, } = layer; const [layerMetadata, setLayerMetadata] = useState(); @@ -48,7 +47,7 @@ export default function LayerInfo ({ layer, measurementDescriptionPath }) { const overlapDateRanges = hasLayerDateRange ? dateOverlap(period, dateRanges) : []; - return hasLayerDateRange && overlapDateRanges.overlap === false && !ongoing; + return hasLayerDateRange && overlapDateRanges.overlap === false; }; const needDateRanges = getDateOverlapDateRanges(); diff --git a/web/js/components/timeline/timeline-axis/timeline-axis.js b/web/js/components/timeline/timeline-axis/timeline-axis.js index c51c72d8a6..18728d4730 100644 --- a/web/js/components/timeline/timeline-axis/timeline-axis.js +++ b/web/js/components/timeline/timeline-axis/timeline-axis.js @@ -1360,7 +1360,7 @@ class TimelineAxis extends Component { } // if opted in to DescribeDomains availability, get granule date ranges if needed if (dataAvailability === 'dd') { - const worker = new Worker('js/workers/dd.worker.js'); + const worker = new Worker('js/workers/describe-domains.worker.js'); worker.onmessage = (event) => { if (Array.isArray(event.data)) { // our final format is an array worker.terminate(); // terminate the worker diff --git a/web/js/map/granule/granule-layer-builder.js b/web/js/map/granule/granule-layer-builder.js index 5eeafc47c2..469076b67c 100644 --- a/web/js/map/granule/granule-layer-builder.js +++ b/web/js/map/granule/granule-layer-builder.js @@ -204,11 +204,11 @@ export default function granuleLayerBuilder(cache, store, createLayerWMTS) { const granuleIsWithinRange = isWithinRanges(dateDate, granuleDateRanges) ?? true; // check if the current granule is within a date range, defaults to true const gaps = identifyGaps(granuleDateRanges); // identify gaps between date ranges const currentlySelectedGap = !isWithinRange ? gaps.find(([start, end]) => leadingEdgeDate >= start && leadingEdgeDate <= end) : null; // get the gap that the currently selected time is within - const granuleIsWithinSelectedGap = currentlySelectedGap ? dateDate >= currentlySelectedGap[0] && dateDate <= currentlySelectedGap[1] : false; // check if the current granule is within the currently selected gap + const granuleIsWithinSelectedGap = currentlySelectedGap ? dateDate >= currentlySelectedGap[0] && dateDate <= currentlySelectedGap[1] : true; // check if the current granule is within the currently selected gap if (dateDate <= leadingEdgeDate && isWithinRange && granuleIsWithinRange && isWithinBounds(crs, item)) { visibleGranules.unshift(item); - } else if (dateDate <= leadingEdgeDate && !isWithinRange && !granuleIsWithinRange && isWithinBounds(crs, item) && granuleIsWithinSelectedGap) { + } else if (dateDate <= leadingEdgeDate && !granuleIsWithinRange && isWithinBounds(crs, item) && granuleIsWithinSelectedGap) { invisibleGranules.unshift(item); } diff --git a/web/js/workers/dd.worker.js b/web/js/workers/describe-domains.worker.js similarity index 96% rename from web/js/workers/dd.worker.js rename to web/js/workers/describe-domains.worker.js index 220df803f7..5a1d9df41b 100644 --- a/web/js/workers/dd.worker.js +++ b/web/js/workers/describe-domains.worker.js @@ -19,8 +19,8 @@ async function requestDescribeDomains(params) { proj, } = params; - const start = new Date(startDate).toISOString().replace('.000', ''); - const end = new Date(endDate).toISOString().replace('.000', ''); + const start = `${new Date(startDate).toISOString().split('.')[0]}Z`; + const end = `${new Date(endDate).toISOString().split('.')[0]}Z`; const describeDomainsUrl = `https://gibs.earthdata.nasa.gov/wmts/${projDict[proj]}/best/1.0.0/${id}/default/250m/all/${start}--${end}.xml`; const describeDomainsResponse = await fetch(describeDomainsUrl);