diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 0000000000..3ce8a6b537
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,6 @@
+# .github/release.yml
+
+changelog:
+ exclude:
+ labels:
+ - ignore-for-release
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Daily.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Daily.md
new file mode 100644
index 0000000000..29160ab27e
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Daily.md
@@ -0,0 +1,10 @@
+The Cloud Liquid Water Path (L3, Daily) layer is the integrated liquid water, cloud water only, in the atmospheric column in units of grams per square meter (g/m2).
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Daily Ascending/Descending .25 x .25 deg Ocean Grids data set (AU_DyOcn) reports daily estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean on a global 0.25° × 0.25° resolution grid. The data are derived from the AMSR-E/AMSR2 Unified L2B Global Swath Ocean Products, Version 1 data set.
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is daily.
+
+References: AU_DyOcn [doi:10.5067/K9QZU22GVZHS](https://doi.org/10.5067/K9QZU22GVZHS)
+
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Monthly.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Monthly.md
new file mode 100644
index 0000000000..49799b64e4
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Monthly.md
@@ -0,0 +1,9 @@
+The Cloud Liquid Water Path (L3, Monthly) layer is the integrated liquid water, cloud water only, in the atmospheric column in units of grams per square meter (g/m2).
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Monthly Ascending/Descending .25x.25 deg Ocean Grids data set (AU_MoOcn) is a gridded product that reports monthly estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean. The data are derived from resampled Near Real-Time (NRT) Level-1R data provided by Japan Aerospace Exploration Agency (JAXA).
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is monthly.
+
+References: AU_MoOcn [doi:10.5067/EX7P1JPQ0UA8](https://doi.org/10.5067/EX7P1JPQ0UA8)
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Weekly.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Weekly.md
new file mode 100644
index 0000000000..6a50b41d1d
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Weekly.md
@@ -0,0 +1,10 @@
+The Cloud Liquid Water Path (L3, Weekly) layer is the integrated liquid water, cloud water only, in the atmospheric column in units of grams per square meter (g/m2).
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Weekly Ascending/Descending .25 x .25 deg Ocean Grids data set (AU_WkOcn) reports weekly estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean on a global 0.25° × 0.25° resolution grid. The data are derived from the AMSR-E/AMSR2 Unified L2B Global Swath Ocean Products, Version 1 data set.
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is weekly.
+
+References: AU_WkOcn [doi:10.5067/1A3CSUWVLD7V](https://doi.org/10.5067/1A3CSUWVLD7V)
+
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Daily.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Daily.md
new file mode 100644
index 0000000000..0600267de3
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Daily.md
@@ -0,0 +1,9 @@
+The Ocean Wind Speed (L3, Daily) layer shows daily estimates of surface wind speed over oceans in meters per second (m/s) at 10 meter altitude above the ocean surface.
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Daily Ascending/Descending .25 x .25 deg Ocean Grids data set (AU_DyOcn) reports daily estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean on a global 0.25° × 0.25° resolution grid. The data are derived from the AMSR-E/AMSR2 Unified L2B Global Swath Ocean Products, Version 1 data set.
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is daily.
+
+References: AU_DyOcn [doi:10.5067/K9QZU22GVZHS](https://doi.org/10.5067/K9QZU22GVZHS)
\ No newline at end of file
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Monthly.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Monthly.md
new file mode 100644
index 0000000000..47da88f376
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Monthly.md
@@ -0,0 +1,9 @@
+The Ocean Wind Speed (L3, Monthly) layer shows monthly estimates of surface wind speed over oceans in meters per second (m/s) at 10 meter altitude above the ocean surface.
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Monthly Ascending/Descending .25x.25 deg Ocean Grids data set (AU_MoOcn) is a gridded product that reports monthly estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean. The data are derived from resampled Near Real-Time (NRT) Level-1R data provided by Japan Aerospace Exploration Agency (JAXA).
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is monthly.
+
+References: AU_MoOcn [doi:10.5067/EX7P1JPQ0UA8](https://doi.org/10.5067/EX7P1JPQ0UA8)
\ No newline at end of file
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Weekly.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Weekly.md
new file mode 100644
index 0000000000..8502cf59d1
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Weekly.md
@@ -0,0 +1,9 @@
+The Ocean Wind Speed (L3, Weekly) layer shows daily estimates of surface wind speed over oceans in meters per second (m/s) at 10 meter altitude above the ocean surface.
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Weekly Ascending/Descending .25 x .25 deg Ocean Grids data set (AU_WkOcn) reports weekly estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean on a global 0.25° × 0.25° resolution grid. The data are derived from the AMSR-E/AMSR2 Unified L2B Global Swath Ocean Products, Version 1 data set.
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is weekly.
+
+References: AU_WkOcn [doi:10.5067/1A3CSUWVLD7V](https://doi.org/10.5067/1A3CSUWVLD7V)
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Daily.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Daily.md
new file mode 100644
index 0000000000..4cd57bd903
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Daily.md
@@ -0,0 +1,9 @@
+The Total Precipitable Water (L3, Daily) layer displays the integrated water vapor in the atmospheric columnn in millimeters (mm).
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Daily Ascending/Descending .25 x .25 deg Ocean Grids data set (AU_DyOcn) reports daily estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean on a global 0.25° × 0.25° resolution grid. The data are derived from the AMSR-E/AMSR2 Unified L2B Global Swath Ocean Products, Version 1 data set.
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is daily.
+
+References: AU_DyOcn [doi:10.5067/K9QZU22GVZHS](https://doi.org/10.5067/K9QZU22GVZHS)
\ No newline at end of file
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Monthly.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Monthly.md
new file mode 100644
index 0000000000..46cc4fc0b3
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Monthly.md
@@ -0,0 +1,9 @@
+The Total Precipitable Water (L3, Monthly) layer displays the integrated water vapor in the atmospheric columnn in millimeters (mm).
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Monthly Ascending/Descending .25x.25 deg Ocean Grids data set (AU_MoOcn) is a gridded product that reports monthly estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean. The data are derived from resampled Near Real-Time (NRT) Level-1R data provided by Japan Aerospace Exploration Agency (JAXA).
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is monthly.
+
+References: AU_MoOcn [doi:10.5067/EX7P1JPQ0UA8](https://doi.org/10.5067/EX7P1JPQ0UA8)
\ No newline at end of file
diff --git a/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Weekly.md b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Weekly.md
new file mode 100644
index 0000000000..410978b15c
--- /dev/null
+++ b/config/default/common/config/metadata/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Weekly.md
@@ -0,0 +1,9 @@
+The Total Precipitable Water (L3, Weekly) layer displays the integrated water vapor in the atmospheric columnn in millimeters (mm).
+
+The Advanced Microwave Scanning Radiometer 2 (AMSR2) instrument on the Global Change Observation Mission - Water 1 (GCOM-W1) provides global passive microwave measurements of terrestrial, oceanic, and atmospheric parameters for the investigation of global water and energy cycles.
+
+The AMSR-E/AMSR2 Unified L3 Global Weekly Ascending/Descending .25 x .25 deg Ocean Grids data set (AU_WkOcn) reports weekly estimates of water vapor, cloud liquid water content, and surface wind speed over the ocean on a global 0.25° × 0.25° resolution grid. The data are derived from the AMSR-E/AMSR2 Unified L2B Global Swath Ocean Products, Version 1 data set.
+
+The imagery resolution is 2 km and sensor resolution is 0.25 degrees x 0.25 degrees. The temporal resolution is weekly.
+
+References: AU_WkOcn [doi:10.5067/1A3CSUWVLD7V](https://doi.org/10.5067/1A3CSUWVLD7V)
diff --git a/config/default/common/config/metadata/stories/el_nino/el_nino_background.png b/config/default/common/config/metadata/stories/el_nino/el_nino_background.png
new file mode 100644
index 0000000000..5c1c739791
Binary files /dev/null and b/config/default/common/config/metadata/stories/el_nino/el_nino_background.png differ
diff --git a/config/default/common/config/metadata/stories/el_nino/step001.md b/config/default/common/config/metadata/stories/el_nino/step001.md
new file mode 100644
index 0000000000..faa7dfa183
--- /dev/null
+++ b/config/default/common/config/metadata/stories/el_nino/step001.md
@@ -0,0 +1,2 @@
+## What is El Niño anyway?
+El Niño conditions are known to form when trade winds in the equatorial Pacific, which usually blow from east to west, weaken or even reverse direction and blow from west to east. This transports warm water from the western Pacific to the west coast of South America, resulting in higher than normal sea surface temperatures (SST) in that region.
\ No newline at end of file
diff --git a/config/default/common/config/metadata/stories/el_nino/step002.md b/config/default/common/config/metadata/stories/el_nino/step002.md
new file mode 100644
index 0000000000..6c66ada9e8
--- /dev/null
+++ b/config/default/common/config/metadata/stories/el_nino/step002.md
@@ -0,0 +1,3 @@
+El Niño is noticeable in the equatorial Pacific in this SST anomalies layer, based on the Multiscale Ultrahigh Resolution (MUR) SST dataset, from October 22, 2023. Deep red colors indicate SST increases of about 3°C from normal climatological conditions whereas blue/purple colors indicate cooler SST temperatures.
+
+For [more information](https://www.noaa.gov/understanding-el-nino) on El Niño including how it is quantified via the NOAA Oceanic Niño Index, visit [NOAA El Niño-Southern Oscillation (ENSO)](https://www.climate.gov/enso) and [NOAA Oceanic Niño Index (ONI)](https://www.climate.gov/news-features/understanding-climate/climate-variability-oceanic-nino-index).
\ No newline at end of file
diff --git a/config/default/common/config/metadata/stories/el_nino/step003.md b/config/default/common/config/metadata/stories/el_nino/step003.md
new file mode 100644
index 0000000000..abefdde9e7
--- /dev/null
+++ b/config/default/common/config/metadata/stories/el_nino/step003.md
@@ -0,0 +1,4 @@
+## When was the last El Niño?
+As of 2023, the last notable El Niño event was in 2015. This is a comparison of SST anomalies between October 22, 2015 (left "A" side) and October 22, 2023 (right "B" side). In 2015, an SST signature showing warmer than normal SSTs, known as "[The Blob](https://www.nps.gov/articles/theblob.htm)", was visible along the west coast of North America. 2023 does not appear to exhibit the same contemporaneous phenomenon.
+
+While the Blob is not directly associated with El Niños, it caused significant [impacts](https://www.fisheries.noaa.gov/feature-story/looking-back-blob-record-warming-drives-unprecedented-ocean-change) across North America when it occured together with the 2015 El Niño.
\ No newline at end of file
diff --git a/config/default/common/config/metadata/stories/el_nino/step004.md b/config/default/common/config/metadata/stories/el_nino/step004.md
new file mode 100644
index 0000000000..305b11bf27
--- /dev/null
+++ b/config/default/common/config/metadata/stories/el_nino/step004.md
@@ -0,0 +1,5 @@
+## What does El Niño impact?
+The weakening and shift in trade winds in the Equatorial Pacific causes changes in sea level and sea surface temperature, leading to ocean currents and atmospheric circulation spreading varying impacts of El Niño such as precipitation across the globe.
+
+Press the "Play" button to view an animation of SST anomalies (rainbow color palette) overlaid with precipitation rate (rain rate in shades of green and snow rate in shades of blue) during the last notable El Niño, in seven day increments from May 2014 to May 2016.
+
diff --git a/config/default/common/config/metadata/stories/el_nino/step005.md b/config/default/common/config/metadata/stories/el_nino/step005.md
new file mode 100644
index 0000000000..dab90a7994
--- /dev/null
+++ b/config/default/common/config/metadata/stories/el_nino/step005.md
@@ -0,0 +1,4 @@
+## What does El Niño impact?
+During an El Niño, Peru and Chile often experience wetter weather while drier conditions occur across the western Pacific. Additionally, due to warmer SSTs, El Niño negatively impacts biodiversity and local economies. For example, the coastal upwelling off the Peruvian coast (where cold nutrient rich ocean water from the bottom rises towards the surface) is weakened due to warmer waters arriving from the western Equatorial Pacific. The warm waters suppress the cold, nutrient rich upwelling that support increased primary productivity and healthy fisheries. This causes a direct negative impact on fisheries yield and the economy of Peru.
+
+Press the "Play" button to view the development of the 2023 El Niño throughout the year, from January 1, 2023 to January 15, 2024 in 7-day increments.
diff --git a/config/default/common/config/metadata/stories/el_nino/step006.md b/config/default/common/config/metadata/stories/el_nino/step006.md
new file mode 100644
index 0000000000..628a43fc77
--- /dev/null
+++ b/config/default/common/config/metadata/stories/el_nino/step006.md
@@ -0,0 +1,2 @@
+## Transition to La Niña
+During La Niña conditions, SST anomalies in the Tropical Pacific transition from warm to cold temperatures. [NOAA](https://www.cpc.ncep.noaa.gov/products/analysis_monitoring/enso_advisory/ensodisc.shtml) predicts a near 60 percent chance of a weak La Niña developing in the fall of 2024 to winter of 2025. Current conditions (November 14, 2024) indicate SSTs have returned to more normal temperatures.
diff --git a/config/default/common/config/wv.json/layerOrder.json b/config/default/common/config/wv.json/layerOrder.json
index 112fdd837b..db7925aa12 100644
--- a/config/default/common/config/wv.json/layerOrder.json
+++ b/config/default/common/config/wv.json/layerOrder.json
@@ -460,6 +460,15 @@
"AMSRU2_Sea_Ice_Concentration_25km",
"AMSRU2_Sea_Ice_Brightness_Temp_6km_89H",
"AMSRU2_Sea_Ice_Brightness_Temp_6km_89V",
+ "AMSRU2_L3_Cloud_Liquid_Water_Daily",
+ "AMSRU2_L3_Total_Precipitable_Water_Daily",
+ "AMSRU2_L3_Ocean_Wind_Speed_Daily",
+ "AMSRU2_L3_Cloud_Liquid_Water_Weekly",
+ "AMSRU2_L3_Total_Precipitable_Water_Weekly",
+ "AMSRU2_L3_Ocean_Wind_Speed_Weekly",
+ "AMSRU2_L3_Cloud_Liquid_Water_Monthly",
+ "AMSRU2_L3_Total_Precipitable_Water_Monthly",
+ "AMSRU2_L3_Ocean_Wind_Speed_Monthly",
"LPRM_AMSR2_Surface_Soil_Moisture_C1_Band_Day_Daily",
"LPRM_AMSR2_Surface_Soil_Moisture_C1_Band_Night_Daily",
"LPRM_AMSR2_Downscaled_Surface_Soil_Moisture_C1_Band_Day_Daily",
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Daily.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Daily.json
new file mode 100644
index 0000000000..2fb2aa320b
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Daily.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Cloud_Liquid_Water_Daily": {
+ "id": "AMSRU2_L3_Cloud_Liquid_Water_Daily",
+ "description": "amsr2/AMSRU2_L3_Cloud_Liquid_Water_Daily",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Cloud Liquid Water"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Monthly.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Monthly.json
new file mode 100644
index 0000000000..8d6b238394
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Monthly.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Cloud_Liquid_Water_Monthly": {
+ "id": "AMSRU2_L3_Cloud_Liquid_Water_Monthly",
+ "description": "amsr2/AMSRU2_L3_Cloud_Liquid_Water_Monthly",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Cloud Liquid Water"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Weekly.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Weekly.json
new file mode 100644
index 0000000000..5ed8f4850f
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Cloud_Liquid_Water_Weekly.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Cloud_Liquid_Water_Weekly": {
+ "id": "AMSRU2_L3_Cloud_Liquid_Water_Weekly",
+ "description": "amsr2/AMSRU2_L3_Cloud_Liquid_Water_Weekly",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Cloud Liquid Water"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Daily.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Daily.json
new file mode 100644
index 0000000000..d8a98be05c
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Daily.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Ocean_Wind_Speed_Daily": {
+ "id": "AMSRU2_L3_Ocean_Wind_Speed_Daily",
+ "description": "amsr2/AMSRU2_L3_Ocean_Wind_Speed_Daily",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Wind Speed"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Monthly.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Monthly.json
new file mode 100644
index 0000000000..a33f0b6106
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Monthly.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Ocean_Wind_Speed_Monthly": {
+ "id": "AMSRU2_L3_Ocean_Wind_Speed_Monthly",
+ "description": "amsr2/AMSRU2_L3_Ocean_Wind_Speed_Monthly",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Wind Speed"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Weekly.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Weekly.json
new file mode 100644
index 0000000000..b1287b0eda
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Ocean_Wind_Speed_Weekly.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Ocean_Wind_Speed_Weekly": {
+ "id": "AMSRU2_L3_Ocean_Wind_Speed_Weekly",
+ "description": "amsr2/AMSRU2_L3_Ocean_Wind_Speed_Weekly",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Wind Speed"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Daily.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Daily.json
new file mode 100644
index 0000000000..7e8fd1f3f4
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Daily.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Total_Precipitable_Water_Daily": {
+ "id": "AMSRU2_L3_Total_Precipitable_Water_Daily",
+ "description": "amsr2/AMSRU2_L3_Total_Precipitable_Water_Daily",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Precipitation Rate"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Monthly.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Monthly.json
new file mode 100644
index 0000000000..8fd1de37cd
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Monthly.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Total_Precipitable_Water_Monthly": {
+ "id": "AMSRU2_L3_Total_Precipitable_Water_Monthly",
+ "description": "amsr2/AMSRU2_L3_Total_Precipitable_Water_Monthly",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Precipitation Rate"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Weekly.json b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Weekly.json
new file mode 100644
index 0000000000..1be13a380c
--- /dev/null
+++ b/config/default/common/config/wv.json/layers/amsr2/AMSRU2_L3_Total_Precipitable_Water_Weekly.json
@@ -0,0 +1,11 @@
+{
+ "layers": {
+ "AMSRU2_L3_Total_Precipitable_Water_Weekly": {
+ "id": "AMSRU2_L3_Total_Precipitable_Water_Weekly",
+ "description": "amsr2/AMSRU2_L3_Total_Precipitable_Water_Weekly",
+ "tags": "amsru2 amsr-u2",
+ "group": "overlays",
+ "layergroup": "Precipitation Rate"
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/measurements/Cloud Liquid Water.json b/config/default/common/config/wv.json/measurements/Cloud Liquid Water.json
index dade17fbad..3d512a93ed 100644
--- a/config/default/common/config/wv.json/measurements/Cloud Liquid Water.json
+++ b/config/default/common/config/wv.json/measurements/Cloud Liquid Water.json
@@ -13,6 +13,9 @@
"settings": [
"AMSRU2_Cloud_Liquid_Water_Day",
"AMSRU2_Cloud_Liquid_Water_Night",
+ "AMSRU2_L3_Cloud_Liquid_Water_Daily",
+ "AMSRU2_L3_Cloud_Liquid_Water_Weekly",
+ "AMSRU2_L3_Cloud_Liquid_Water_Monthly",
"OrbitTracks_GCOM-W1_Ascending",
"OrbitTracks_GCOM-W1_Descending"
]
diff --git a/config/default/common/config/wv.json/measurements/Precipitation Rate.json b/config/default/common/config/wv.json/measurements/Precipitation Rate.json
index 06ea6d6357..d24f7e44fc 100644
--- a/config/default/common/config/wv.json/measurements/Precipitation Rate.json
+++ b/config/default/common/config/wv.json/measurements/Precipitation Rate.json
@@ -36,6 +36,9 @@
"AMSRU2_Surface_Precipitation_Night",
"AMSRU2_Total_Precipitable_Water_Day",
"AMSRU2_Total_Precipitable_Water_Night",
+ "AMSRU2_L3_Total_Precipitable_Water_Daily",
+ "AMSRU2_L3_Total_Precipitable_Water_Weekly",
+ "AMSRU2_L3_Total_Precipitable_Water_Monthly",
"OrbitTracks_GCOM-W1_Ascending",
"OrbitTracks_GCOM-W1_Descending"
]
diff --git a/config/default/common/config/wv.json/measurements/Wind Speed.json b/config/default/common/config/wv.json/measurements/Wind Speed.json
index a1d5677087..3cd905a61b 100644
--- a/config/default/common/config/wv.json/measurements/Wind Speed.json
+++ b/config/default/common/config/wv.json/measurements/Wind Speed.json
@@ -13,6 +13,9 @@
"settings": [
"AMSRU2_Wind_Speed_Day",
"AMSRU2_Wind_Speed_Night",
+ "AMSRU2_L3_Ocean_Wind_Speed_Daily",
+ "AMSRU2_L3_Ocean_Wind_Speed_Weekly",
+ "AMSRU2_L3_Ocean_Wind_Speed_Monthly",
"OrbitTracks_GCOM-W1_Ascending",
"OrbitTracks_GCOM-W1_Descending"
]
diff --git a/config/default/common/config/wv.json/stories/default/el_nino.json b/config/default/common/config/wv.json/stories/default/el_nino.json
new file mode 100644
index 0000000000..8ff975b78e
--- /dev/null
+++ b/config/default/common/config/wv.json/stories/default/el_nino.json
@@ -0,0 +1,90 @@
+{
+ "stories": {
+ "el_nino": {
+ "id": "el_nino",
+ "type": "default",
+ "title": "El Niño Impacts Around the Globe",
+ "description": "Explore two recent El Niño events (2015 and 2023) over the Pacific Ocean.",
+ "backgroundImage": "el_nino_background.png",
+ "backgroundImageHover": "",
+ "readMoreLinks": [
+ {
+ "title": "Understanding El Niño",
+ "link": "https://www.noaa.gov/understanding-el-nino"
+ },
+ {
+ "title": "NOAA El Niño-Southern Oscillation (ENSO)",
+ "link": "https://www.climate.gov/enso"
+ },
+ {
+ "title": "NOAA Oceanic Niño Index (ONI)",
+ "link": "https://www.climate.gov/news-features/understanding-climate/climate-variability-oceanic-nino-index"
+ },
+ {
+ "title": "The Blob",
+ "link": "https://www.nps.gov/articles/theblob.htm"
+ },
+ {
+ "title": "Looking Back At The Blob: Record Warming Drives Unprecedented Ocean Change",
+ "link": "https://www.fisheries.noaa.gov/feature-story/looking-back-blob-record-warming-drives-unprecedented-ocean-change"
+ }
+ ],
+ "steps": [
+ {
+ "id": "001",
+ "description": "step001.html",
+ "transition": {
+ "element": "",
+ "action": ""
+ },
+ "stepLink": "v=-248.06956668783653,-68.87363612899186,35.63583680803386,69.64918999105753&l=Reference_Labels_15m(hidden),Reference_Features_15m(hidden),Coastlines_15m(hidden),GHRSST_L4_MUR_Sea_Surface_Temperature_Anomalies,BlueMarble_ShadedRelief&lg=true&t=2023-10-22-T06%3A19%3A29Z"
+ },
+ {
+ "id": "002",
+ "description": "step002.html",
+ "transition": {
+ "element": "",
+ "action": ""
+ },
+ "stepLink": "v=-290.1424151729069,-64.86126039100748,-6.437011677036509,65.3142325516217&l=Reference_Labels_15m(hidden),Reference_Features_15m(hidden),Coastlines_15m(hidden),GHRSST_L4_MUR_Sea_Surface_Temperature_Anomalies,BlueMarble_ShadedRelief&lg=true&t=2023-10-22-T06%3A19%3A29Z"
+ },
+ {
+ "id": "003",
+ "description": "step003.html",
+ "transition": {
+ "element": "",
+ "action": ""
+ },
+ "stepLink": "v=-240.02690135611005,-68.71114541979478,30.876080783471693,78.06675899260173&l=Reference_Labels_15m(hidden),Reference_Features_15m(hidden),Coastlines_15m(hidden),GHRSST_L4_MUR25_Sea_Surface_Temperature_Anomalies,GHRSST_L4_MUR_Sea_Surface_Temperature_Anomalies(hidden),BlueMarble_ShadedRelief&lg=true&l1=Reference_Labels_15m(hidden),Reference_Features_15m(hidden),Coastlines_15m(hidden),GHRSST_L4_MUR25_Sea_Surface_Temperature_Anomalies,GHRSST_L4_MUR_Sea_Surface_Temperature_Anomalies(hidden),BlueMarble_ShadedRelief&lg1=true&ca=true&cv=51&t=2015-10-22-T10%3A19%3A29Z&t1=2023-10-22-T10%3A19%3A29Z"
+ },
+ {
+ "id": "004",
+ "description": "step004.html",
+ "transition": {
+ "element": "",
+ "action": ""
+ },
+ "stepLink": "v=-274.26840499015793,-60.74871569831879,25.57558470468338,77.06453000105336&z=2&i=2&ics=true&ici=3&icd=7&as=2014-05-01-T00%3A00%3A00Z&ae=2016-06-30-T00%3A00%3A00Z&l=Reference_Labels_15m(hidden),Reference_Features_15m(hidden),Coastlines_15m(hidden),IMERG_Precipitation_Rate(palette=green_2;blue_6,disabled=;),GHRSST_L4_MUR25_Sea_Surface_Temperature_Anomalies,Land_Water_Map,BlueMarble_ShadedRelief(hidden)&lg=true&al=true&av=5.5&ab=on&t=2014-05-01-T00%3A00%3A00Z"
+ },
+ {
+ "id": "005",
+ "description": "step005.html",
+ "transition": {
+ "element": "",
+ "action": ""
+ },
+ "stepLink": "v=-243.65255625061272,-86.39594597509173,30.135471793466166,54.514911181397224&z=2&ics=true&ici=3&icd=7&as=2023-01-01-T00%3A00%3A00Z&ae=2024-01-15-T00%3A00%3A00Z&l=Reference_Labels_15m(hidden),Reference_Features_15m(hidden),Coastlines_15m(hidden),GHRSST_L4_MUR_Sea_Surface_Temperature_Anomalies,BlueMarble_ShadedRelief&lg=true&al=true&av=1.5&ab=on&t=2023-01-01-T20%3A54%3A18Z"
+ },
+ {
+ "id": "006",
+ "description": "step006.html",
+ "transition": {
+ "element": "",
+ "action": ""
+ },
+ "stepLink": "v=-236.49653317730642,-56.83993131155791,20.128259302844555,69.37801859813834&l=Reference_Labels_15m(hidden),Reference_Features_15m(hidden),Coastlines_15m(hidden),GHRSST_L4_MUR_Sea_Surface_Temperature_Anomalies,BlueMarble_ShadedRelief&lg=true&t=2024-11-14-T01%3A13%3A38Z"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/default/common/config/wv.json/storyOrder.json b/config/default/common/config/wv.json/storyOrder.json
index 51a3aac260..fc1bd6a1ef 100644
--- a/config/default/common/config/wv.json/storyOrder.json
+++ b/config/default/common/config/wv.json/storyOrder.json
@@ -1,5 +1,6 @@
{
"storyOrder": [
+ "el_nino",
"surface_water_extent",
"atmospheric_rivers",
"flood-product",
diff --git a/e2e/features/image-download/unsupported-test.spec.js b/e2e/features/image-download/unsupported-test.spec.js
index cce0c6a185..2ca858547e 100644
--- a/e2e/features/image-download/unsupported-test.spec.js
+++ b/e2e/features/image-download/unsupported-test.spec.js
@@ -1,7 +1,7 @@
// @ts-check
const { test, expect } = require('@playwright/test')
const createSelectors = require('../../test-utils/global-variables/selectors')
-const { closeImageDownloadPanel, closeModal } = require('../../test-utils/hooks/wvHooks')
+const { closeModal } = require('../../test-utils/hooks/wvHooks')
const { joinUrl } = require('../../test-utils/hooks/basicHooks')
let page
@@ -28,31 +28,6 @@ test.afterAll(async () => {
await page.close()
})
-test('Custom palettes are not supported dialog', async () => {
- const { snapshotToolbarButton } = selectors
- const url = await joinUrl(startParams, '&l=MODIS_Terra_Aerosol(palette=red_1)')
- await page.goto(url)
- await closeModal(page)
- await snapshotToolbarButton.click()
- await expect(notify).toBeVisible()
-})
-
-test('Custom palettes: Cancel button', async () => {
- await cancelNotify.click()
- await expect(notify).not.toBeVisible()
- await expect(toolbarSnapshot).not.toBeVisible()
-})
-
-test('Custom palettes: OK button brings up download panel', async () => {
- const { snapshotToolbarButton } = selectors
- await snapshotToolbarButton.click()
- await expect(notify).toBeVisible()
- await acceptNotify.click()
- await expect(notify).not.toBeVisible()
- await expect(toolbarSnapshot).toBeVisible()
- await closeImageDownloadPanel(page)
-})
-
test('Rotation is not supported dialog', async () => {
const { snapshotToolbarButton } = selectors
const url = await joinUrl(startParams, '&p=arctic&r=18')
diff --git a/package-lock.json b/package-lock.json
index 065979e832..4b0ff1cf51 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,25 +1,25 @@
{
"name": "worldview",
- "version": "4.52.0",
+ "version": "4.53.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "worldview",
- "version": "4.52.0",
+ "version": "4.53.0",
"hasInstallScript": true,
"license": "NASA-1.3",
"dependencies": {
"@edsc/earthdata-react-icons": "^0.0.2",
- "@elastic/react-search-ui": "^1.21.5",
- "@elastic/react-search-ui-views": "^1.21.2",
- "@fortawesome/fontawesome-svg-core": "^6.6.0",
- "@fortawesome/free-brands-svg-icons": "^6.6.0",
- "@fortawesome/free-solid-svg-icons": "^6.6.0",
+ "@elastic/react-search-ui": "^1.22.0",
+ "@elastic/react-search-ui-views": "^1.22.0",
+ "@fortawesome/fontawesome-svg-core": "^6.7.1",
+ "@fortawesome/free-brands-svg-icons": "^6.7.1",
+ "@fortawesome/free-solid-svg-icons": "^6.7.1",
"@fortawesome/react-fontawesome": "^0.2.2",
"@khanisak/temperature-converter": "^2.0.1",
- "@reduxjs/toolkit": "^2.2.8",
- "axios": "^1.7.7",
+ "@reduxjs/toolkit": "^2.4.0",
+ "axios": "^1.7.8",
"bluebird": "3.7.2",
"bootstrap": "^5.3.3",
"cachai": "^1.0.2",
@@ -45,9 +45,9 @@
"ol": "^8.2.0",
"ol-mapbox-style": "^12.3.5",
"p-queue": "^8.0.1",
- "proj4": "^2.14.0",
+ "proj4": "^2.15.0",
"prop-types": "^15.8.1",
- "qs": "^6.13.0",
+ "qs": "^6.13.1",
"react": "^18.3.1",
"react-beautiful-dnd": "^13.1.1",
"react-device-detect": "^2.2.3",
@@ -55,7 +55,7 @@
"react-draggable": "^4.4.6",
"react-image-crop": "^11.0.7",
"react-infinite-scroller": "^1.2.6",
- "react-joyride": "^2.9.2",
+ "react-joyride": "^2.9.3",
"react-mobile-datepicker": "^4.0.2",
"react-redux": "^9.1.1",
"react-resizable": "^3.0.5",
@@ -85,7 +85,7 @@
"@babel/plugin-transform-private-methods": "^7.25.9",
"@babel/preset-env": "^7.26.0",
"@babel/preset-react": "^7.25.9",
- "@playwright/test": "^1.48.2",
+ "@playwright/test": "^1.49.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
"@webpack-cli/serve": "^2.0.5",
"ajv": "^8.17.1",
@@ -105,14 +105,14 @@
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.9.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
- "eslint-plugin-n": "^17.13.1",
+ "eslint-plugin-n": "^17.14.0",
"eslint-plugin-no-storage": "^1.0.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.6.0",
"eslint-plugin-react": "^7.37.2",
"express": "^4.21.0",
"glob": "^11.0.0",
- "husky": "^9.1.6",
+ "husky": "^9.1.7",
"jest": "^29.7.0",
"jest-canvas-mock": "^2.5.2",
"jest-environment-jsdom": "^29.7.0",
@@ -122,13 +122,13 @@
"node-ssh": "^13.2.0",
"npm-run-all": "^4.1.5",
"patch-package": "^8.0.0",
- "postcss": "^8.4.47",
+ "postcss": "^8.4.49",
"postcss-loader": "^8.1.1",
"react-refresh": "^0.14.1",
"react-test-renderer": "^18.3.0",
"redux-mock-store": "^1.5.5",
"run-script-os": "^1.1.6",
- "sass": "^1.80.6",
+ "sass": "^1.81.0",
"sass-loader": "^16.0.3",
"shelljs": "^0.8.5",
"showdown": "^2.1.0",
@@ -137,7 +137,7 @@
"stylelint-high-performance-animation": "^1.10.0",
"tar": "^7.4.3",
"terser-webpack-plugin": "^5.3.10",
- "uuid": "^11.0.2",
+ "uuid": "^11.0.3",
"webpack": "^5.96.1",
"webpack-bundle-analyzer": "^4.10.2",
"webpack-cli": "^5.1.4",
@@ -1886,11 +1886,13 @@
}
},
"node_modules/@elastic/react-search-ui": {
- "version": "1.21.5",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/@elastic/react-search-ui/-/react-search-ui-1.22.0.tgz",
+ "integrity": "sha512-auGjSuOpaWamGSOEQytUUSzZc+z4tY2x2tjELv4v9ugvouMykdUu8ETYK76gasojlKsHGt6tA8dIXFKR5Dug2g==",
"license": "Apache-2.0",
"dependencies": {
- "@elastic/react-search-ui-views": "1.21.5",
- "@elastic/search-ui": "1.21.5"
+ "@elastic/react-search-ui-views": "1.22.0",
+ "@elastic/search-ui": "1.22.0"
},
"peerDependencies": {
"react": ">= 16.8.0 < 19",
@@ -1898,10 +1900,12 @@
}
},
"node_modules/@elastic/react-search-ui-views": {
- "version": "1.21.5",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/@elastic/react-search-ui-views/-/react-search-ui-views-1.22.0.tgz",
+ "integrity": "sha512-ys/jkOziBlk53eS+OTyiFAjYjey+24+0Cj68X8W6FZfq34wbLjtRvwNzdFPGGAWm4WATZpasWpW6rdlLlrPgEw==",
"license": "Apache-2.0",
"dependencies": {
- "@elastic/search-ui": "1.21.5",
+ "@elastic/search-ui": "1.22.0",
"downshift": "^3.2.10",
"rc-pagination": "^4.0.4",
"react-select": "^5.0.0"
@@ -1912,7 +1916,9 @@
}
},
"node_modules/@elastic/search-ui": {
- "version": "1.21.5",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/@elastic/search-ui/-/search-ui-1.22.0.tgz",
+ "integrity": "sha512-ce3kOKKYQX+vsjynuRY1aMRnjDaG94CSx12jsWeO+antbVfhdPenZEdtQnjUOc0ta7nXgdOHBfXJCqhwVLgh0g==",
"license": "Apache-2.0",
"dependencies": {
"date-fns": "^1.30.1",
@@ -1923,6 +1929,8 @@
},
"node_modules/@elastic/search-ui/node_modules/history": {
"version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
+ "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.1.2",
@@ -2172,37 +2180,45 @@
"license": "MIT"
},
"node_modules/@fortawesome/fontawesome-common-types": {
- "version": "6.6.0",
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.1.tgz",
+ "integrity": "sha512-gbDz3TwRrIPT3i0cDfujhshnXO9z03IT1UKRIVi/VEjpNHtSBIP2o5XSm+e816FzzCFEzAxPw09Z13n20PaQJQ==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/fontawesome-svg-core": {
- "version": "6.6.0",
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.1.tgz",
+ "integrity": "sha512-8dBIHbfsKlCk2jHQ9PoRBg2Z+4TwyE3vZICSnoDlnsHA6SiMlTwfmW6yX0lHsRmWJugkeb92sA0hZdkXJhuz+g==",
"license": "MIT",
"dependencies": {
- "@fortawesome/fontawesome-common-types": "6.6.0"
+ "@fortawesome/fontawesome-common-types": "6.7.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-brands-svg-icons": {
- "version": "6.6.0",
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.7.1.tgz",
+ "integrity": "sha512-nJR76eqPzCnMyhbiGf6X0aclDirZriTPRcFm1YFvuupyJOGwlNF022w3YBqu+yrHRhnKRpzFX+8wJKqiIjWZkA==",
"license": "(CC-BY-4.0 AND MIT)",
"dependencies": {
- "@fortawesome/fontawesome-common-types": "6.6.0"
+ "@fortawesome/fontawesome-common-types": "6.7.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-solid-svg-icons": {
- "version": "6.6.0",
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.1.tgz",
+ "integrity": "sha512-BTKc0b0mgjWZ2UDKVgmwaE0qt0cZs6ITcDgjrti5f/ki7aF5zs+N91V6hitGo3TItCFtnKg6cUVGdTmBFICFRg==",
"license": "(CC-BY-4.0 AND MIT)",
"dependencies": {
- "@fortawesome/fontawesome-common-types": "6.6.0"
+ "@fortawesome/fontawesome-common-types": "6.7.1"
},
"engines": {
"node": ">=6"
@@ -3191,7 +3207,9 @@
}
},
"node_modules/@petamoriken/float16": {
- "version": "3.7.1",
+ "version": "3.8.7",
+ "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.7.tgz",
+ "integrity": "sha512-/Ri4xDDpe12NT6Ex/DRgHzLlobiQXEW/hmG08w1wj/YU7hLemk97c+zHQFp0iZQ9r7YqgLEXZR2sls4HxBf9NA==",
"license": "MIT"
},
"node_modules/@pkgjs/parseargs": {
@@ -3204,13 +3222,13 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.48.2",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.2.tgz",
- "integrity": "sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==",
+ "version": "1.49.0",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.0.tgz",
+ "integrity": "sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright": "1.48.2"
+ "playwright": "1.49.0"
},
"bin": {
"playwright": "cli.js"
@@ -3306,7 +3324,9 @@
}
},
"node_modules/@reduxjs/toolkit": {
- "version": "2.3.0",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.4.0.tgz",
+ "integrity": "sha512-wJZEuSKj14tvNfxiIiJws0tQN77/rDqucBq528ApebMIRHyWpCanJVQRxQ8WWZC19iCDKxDsGlbAir3F1layxA==",
"license": "MIT",
"dependencies": {
"immer": "^10.0.3",
@@ -4522,7 +4542,9 @@
}
},
"node_modules/axios": {
- "version": "1.7.7",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz",
+ "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -4900,6 +4922,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/bonjour-service": {
"version": "1.2.1",
"dev": true,
@@ -5861,7 +5899,9 @@
}
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -6785,6 +6825,8 @@
},
"node_modules/earcut": {
"version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
+ "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==",
"license": "ISC"
},
"node_modules/eastasianwidth": {
@@ -7541,9 +7583,9 @@
}
},
"node_modules/eslint-plugin-n": {
- "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==",
+ "version": "17.14.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.14.0.tgz",
+ "integrity": "sha512-maxPLMEA0rPmRpoOlxEclKng4UpDe+N5BJS4t24I3UKnN109Qcivnfs37KMy84G0af3bxjog5lKctP5ObsvcTA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8122,6 +8164,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/express/node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/express/node_modules/safe-buffer": {
"version": "5.2.1",
"dev": true,
@@ -8645,7 +8703,9 @@
"license": "MIT"
},
"node_modules/geotiff": {
- "version": "2.0.7",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.3.tgz",
+ "integrity": "sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==",
"license": "MIT",
"dependencies": {
"@petamoriken/float16": "^3.4.7",
@@ -8654,7 +8714,8 @@
"parse-headers": "^2.0.2",
"quick-lru": "^6.1.1",
"web-worker": "^1.2.0",
- "xml-utils": "^1.0.2"
+ "xml-utils": "^1.0.2",
+ "zstddec": "^0.1.0"
},
"engines": {
"node": ">=10.19"
@@ -8662,10 +8723,14 @@
},
"node_modules/geotiff/node_modules/pako": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz",
+ "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==",
"license": "(MIT AND Zlib)"
},
"node_modules/geotiff/node_modules/quick-lru": {
- "version": "6.1.1",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz",
+ "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -9208,7 +9273,9 @@
}
},
"node_modules/husky": {
- "version": "9.1.6",
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
+ "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
"dev": true,
"license": "MIT",
"bin": {
@@ -9253,6 +9320,8 @@
},
"node_modules/ieee754": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"funding": [
{
"type": "github",
@@ -9300,7 +9369,9 @@
"license": "MIT"
},
"node_modules/immutable": {
- "version": "4.3.4",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.2.tgz",
+ "integrity": "sha512-1NU7hWZDkV7hJ4PJ9dur9gTNQ4ePNPN4k9/0YhwjzykTi/+3Q5pF93YU5QoVj8BuOnhLgaY8gs0U2pj4kSYVcw==",
"dev": true,
"license": "MIT"
},
@@ -11896,6 +11967,8 @@
},
"node_modules/lerc": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
+ "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==",
"license": "Apache-2.0"
},
"node_modules/leven": {
@@ -12708,7 +12781,9 @@
}
},
"node_modules/npm-run-all/node_modules/cross-spawn": {
- "version": "6.0.5",
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
+ "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12905,6 +12980,8 @@
},
"node_modules/ol": {
"version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/ol/-/ol-8.2.0.tgz",
+ "integrity": "sha512-/m1ddd7Jsp4Kbg+l7+ozR5aKHAZNQOBAoNZ5pM9Jvh4Etkf0WGkXr9qXd7PnhmwiC1Hnc2Toz9XjCzBBvexfXw==",
"license": "BSD-2-Clause",
"dependencies": {
"color-rgba": "^3.0.0",
@@ -13123,6 +13200,8 @@
},
"node_modules/parse-headers": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
+ "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==",
"license": "MIT"
},
"node_modules/parse-import": {
@@ -13410,6 +13489,8 @@
},
"node_modules/pbf": {
"version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
+ "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
"license": "BSD-3-Clause",
"dependencies": {
"ieee754": "^1.1.12",
@@ -13420,7 +13501,9 @@
}
},
"node_modules/picocolors": {
- "version": "1.1.0",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"license": "ISC"
},
"node_modules/picomatch": {
@@ -13540,13 +13623,13 @@
}
},
"node_modules/playwright": {
- "version": "1.48.2",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.2.tgz",
- "integrity": "sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==",
+ "version": "1.49.0",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz",
+ "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.48.2"
+ "playwright-core": "1.49.0"
},
"bin": {
"playwright": "cli.js"
@@ -13559,9 +13642,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.48.2",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.2.tgz",
- "integrity": "sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==",
+ "version": "1.49.0",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.0.tgz",
+ "integrity": "sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -13588,7 +13671,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.47",
+ "version": "8.4.49",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
"dev": true,
"funding": [
{
@@ -13607,7 +13692,7 @@
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.1.0",
+ "picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
@@ -14234,11 +14319,13 @@
"license": "MIT"
},
"node_modules/proj4": {
- "version": "2.14.0",
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.15.0.tgz",
+ "integrity": "sha512-LqCNEcPdI03BrCHxPLj29vsd5afsm+0sV1H/O3nTDKrv8/LA01ea1z4QADDMjUqxSXWnrmmQDjqFm1J/uZ5RLw==",
"license": "MIT",
"dependencies": {
"mgrs": "1.0.0",
- "wkt-parser": "^1.3.3"
+ "wkt-parser": "^1.4.0"
}
},
"node_modules/prompts": {
@@ -14264,6 +14351,8 @@
},
"node_modules/protocol-buffers-schema": {
"version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
+ "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==",
"license": "MIT"
},
"node_modules/proxy-addr": {
@@ -14310,7 +14399,9 @@
"license": "MIT"
},
"node_modules/qs": {
- "version": "6.13.0",
+ "version": "6.13.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz",
+ "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==",
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.6"
@@ -14365,6 +14456,8 @@
},
"node_modules/quickselect": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
+ "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==",
"license": "ISC"
},
"node_modules/quill-delta": {
@@ -14416,6 +14509,8 @@
},
"node_modules/rbush": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
+ "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
"license": "MIT",
"dependencies": {
"quickselect": "^2.0.0"
@@ -14598,7 +14693,9 @@
"license": "MIT"
},
"node_modules/react-joyride": {
- "version": "2.9.2",
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.9.3.tgz",
+ "integrity": "sha512-1+Mg34XK5zaqJ63eeBhqdbk7dlGCFp36FXwsEvgpjqrtyywX2C6h9vr3jgxP0bGHCw8Ilsp/nRDzNVq6HJ3rNw==",
"license": "MIT",
"dependencies": {
"@gilbarbara/deep-equal": "^0.3.1",
@@ -14611,7 +14708,7 @@
"scroll": "^3.0.1",
"scrollparent": "^2.1.0",
"tree-changes": "^0.11.2",
- "type-fest": "^4.26.1"
+ "type-fest": "^4.27.0"
},
"peerDependencies": {
"react": "15 - 18",
@@ -14631,7 +14728,9 @@
}
},
"node_modules/react-joyride/node_modules/type-fest": {
- "version": "4.26.1",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.28.0.tgz",
+ "integrity": "sha512-jXMwges/FVbFRe5lTMJZVEZCrO9kI9c8k0PA/z7nF3bo0JSCCLysvokFjNPIUK/itEMas10MQM+AiHoHt/T/XA==",
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=16"
@@ -15282,6 +15381,8 @@
},
"node_modules/resolve-pathname": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
+ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==",
"license": "MIT"
},
"node_modules/resolve-pkg-maps": {
@@ -15294,6 +15395,8 @@
},
"node_modules/resolve-protobuf-schema": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
+ "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
"license": "MIT",
"dependencies": {
"protocol-buffers-schema": "^3.3.1"
@@ -15469,14 +15572,14 @@
"license": "MIT"
},
"node_modules/sass": {
- "version": "1.80.6",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.6.tgz",
- "integrity": "sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==",
+ "version": "1.81.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.81.0.tgz",
+ "integrity": "sha512-Q4fOxRfhmv3sqCLoGfvrC9pRV8btc0UtqL9mN6Yrv6Qi9ScL55CVH1vlPP863ISLEEMNLLuu9P+enCeGHlnzhA==",
"dev": true,
"license": "MIT",
"dependencies": {
"chokidar": "^4.0.0",
- "immutable": "^4.0.0",
+ "immutable": "^5.0.2",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
@@ -16992,6 +17095,8 @@
},
"node_modules/tiny-warning": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
"license": "MIT"
},
"node_modules/tldts": {
@@ -17453,7 +17558,9 @@
}
},
"node_modules/uuid": {
- "version": "11.0.2",
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz",
+ "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==",
"dev": true,
"funding": [
"https://github.com/sponsors/broofa",
@@ -17499,6 +17606,8 @@
},
"node_modules/value-equal": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
+ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==",
"license": "MIT"
},
"node_modules/vary": {
@@ -17563,7 +17672,9 @@
}
},
"node_modules/web-worker": {
- "version": "1.2.0",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz",
+ "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==",
"license": "Apache-2.0"
},
"node_modules/webidl-conversions": {
@@ -18156,7 +18267,9 @@
"license": "MIT"
},
"node_modules/wkt-parser": {
- "version": "1.3.3",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.4.0.tgz",
+ "integrity": "sha512-qpwO7Ihds/YYDTi1aADFTI1Sm9YC/tTe3SHD24EeIlZxy7Ik6a1b4HOz7jAi0xdUAw487duqpo8OGu+Tf4nwlQ==",
"license": "MIT"
},
"node_modules/word-wrap": {
@@ -18338,7 +18451,9 @@
}
},
"node_modules/xml-utils": {
- "version": "1.3.0",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.10.1.tgz",
+ "integrity": "sha512-Dn6vJ1Z9v1tepSjvnCpwk5QqwIPcEFKdgnjqfYOABv1ngSofuAhtlugcUC3ehS1OHdgDWSG6C5mvj+Qm15udTQ==",
"license": "CC0-1.0"
},
"node_modules/xml2js": {
@@ -18428,6 +18543,12 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "node_modules/zstddec": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz",
+ "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==",
+ "license": "MIT AND BSD-3-Clause"
}
}
}
diff --git a/package.json b/package.json
index a6fd2929f4..518a2449b9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "worldview",
- "version": "4.52.0",
+ "version": "4.53.0",
"description": "Interactive interface for browsing full-resolution, global satellite imagery",
"keywords": [
"NASA",
@@ -83,7 +83,7 @@
"@babel/plugin-transform-private-methods": "^7.25.9",
"@babel/preset-env": "^7.26.0",
"@babel/preset-react": "^7.25.9",
- "@playwright/test": "^1.48.2",
+ "@playwright/test": "^1.49.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
"@webpack-cli/serve": "^2.0.5",
"ajv": "^8.17.1",
@@ -103,14 +103,14 @@
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.9.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
- "eslint-plugin-n": "^17.13.1",
+ "eslint-plugin-n": "^17.14.0",
"eslint-plugin-no-storage": "^1.0.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.6.0",
"eslint-plugin-react": "^7.37.2",
"express": "^4.21.0",
"glob": "^11.0.0",
- "husky": "^9.1.6",
+ "husky": "^9.1.7",
"jest": "^29.7.0",
"jest-canvas-mock": "^2.5.2",
"jest-environment-jsdom": "^29.7.0",
@@ -120,13 +120,13 @@
"node-ssh": "^13.2.0",
"npm-run-all": "^4.1.5",
"patch-package": "^8.0.0",
- "postcss": "^8.4.47",
+ "postcss": "^8.4.49",
"postcss-loader": "^8.1.1",
"react-refresh": "^0.14.1",
"react-test-renderer": "^18.3.0",
"redux-mock-store": "^1.5.5",
"run-script-os": "^1.1.6",
- "sass": "^1.80.6",
+ "sass": "^1.81.0",
"sass-loader": "^16.0.3",
"shelljs": "^0.8.5",
"showdown": "^2.1.0",
@@ -135,7 +135,7 @@
"stylelint-high-performance-animation": "^1.10.0",
"tar": "^7.4.3",
"terser-webpack-plugin": "^5.3.10",
- "uuid": "^11.0.2",
+ "uuid": "^11.0.3",
"webpack": "^5.96.1",
"webpack-bundle-analyzer": "^4.10.2",
"webpack-cli": "^5.1.4",
@@ -147,15 +147,15 @@
},
"dependencies": {
"@edsc/earthdata-react-icons": "^0.0.2",
- "@elastic/react-search-ui": "^1.21.5",
- "@elastic/react-search-ui-views": "^1.21.2",
- "@fortawesome/fontawesome-svg-core": "^6.6.0",
- "@fortawesome/free-brands-svg-icons": "^6.6.0",
- "@fortawesome/free-solid-svg-icons": "^6.6.0",
+ "@elastic/react-search-ui": "^1.22.0",
+ "@elastic/react-search-ui-views": "^1.22.0",
+ "@fortawesome/fontawesome-svg-core": "^6.7.1",
+ "@fortawesome/free-brands-svg-icons": "^6.7.1",
+ "@fortawesome/free-solid-svg-icons": "^6.7.1",
"@fortawesome/react-fontawesome": "^0.2.2",
"@khanisak/temperature-converter": "^2.0.1",
- "@reduxjs/toolkit": "^2.2.8",
- "axios": "^1.7.7",
+ "@reduxjs/toolkit": "^2.4.0",
+ "axios": "^1.7.8",
"bluebird": "3.7.2",
"bootstrap": "^5.3.3",
"cachai": "^1.0.2",
@@ -181,9 +181,9 @@
"ol": "^8.2.0",
"ol-mapbox-style": "^12.3.5",
"p-queue": "^8.0.1",
- "proj4": "^2.14.0",
+ "proj4": "^2.15.0",
"prop-types": "^15.8.1",
- "qs": "^6.13.0",
+ "qs": "^6.13.1",
"react": "^18.3.1",
"react-beautiful-dnd": "^13.1.1",
"react-device-detect": "^2.2.3",
@@ -191,7 +191,7 @@
"react-draggable": "^4.4.6",
"react-image-crop": "^11.0.7",
"react-infinite-scroller": "^1.2.6",
- "react-joyride": "^2.9.2",
+ "react-joyride": "^2.9.3",
"react-mobile-datepicker": "^4.0.2",
"react-redux": "^9.1.1",
"react-resizable": "^3.0.5",
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Daily.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Daily.jpg
new file mode 100644
index 0000000000..c7e6edd18b
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Daily.jpg differ
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Monthly.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Monthly.jpg
new file mode 100644
index 0000000000..81c5fbe239
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Monthly.jpg differ
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Weekly.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Weekly.jpg
new file mode 100644
index 0000000000..80da709a42
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Cloud_Liquid_Water_Weekly.jpg differ
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Daily.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Daily.jpg
new file mode 100644
index 0000000000..d56e316165
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Daily.jpg differ
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Monthly.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Monthly.jpg
new file mode 100644
index 0000000000..851163bf4a
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Monthly.jpg differ
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Weekly.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Weekly.jpg
new file mode 100644
index 0000000000..bc4292918a
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Ocean_Wind_Speed_Weekly.jpg differ
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Daily.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Daily.jpg
new file mode 100644
index 0000000000..2434dc822d
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Daily.jpg differ
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Monthly.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Monthly.jpg
new file mode 100644
index 0000000000..dc5a4b149b
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Monthly.jpg differ
diff --git a/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Weekly.jpg b/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Weekly.jpg
new file mode 100644
index 0000000000..1aab8447ae
Binary files /dev/null and b/web/images/layers/previews/geographic/AMSRU2_L3_Total_Precipitable_Water_Weekly.jpg differ
diff --git a/web/images/layers/previews/geographic/HLS_SWIR_Landsat.jpg b/web/images/layers/previews/geographic/HLS_SWIR_Landsat.jpg
deleted file mode 100644
index a29cf073db..0000000000
Binary files a/web/images/layers/previews/geographic/HLS_SWIR_Landsat.jpg and /dev/null differ
diff --git a/web/images/layers/previews/geographic/HLS_SWIR_Sentinel.jpg b/web/images/layers/previews/geographic/HLS_SWIR_Sentinel.jpg
deleted file mode 100644
index 86eed48df8..0000000000
Binary files a/web/images/layers/previews/geographic/HLS_SWIR_Sentinel.jpg and /dev/null differ
diff --git a/web/images/layers/previews/geographic/HLS_Shortwave_Infrared_Landsat.jpg b/web/images/layers/previews/geographic/HLS_Shortwave_Infrared_Landsat.jpg
index 7d9c05ee4f..a29cf073db 100644
Binary files a/web/images/layers/previews/geographic/HLS_Shortwave_Infrared_Landsat.jpg and b/web/images/layers/previews/geographic/HLS_Shortwave_Infrared_Landsat.jpg differ
diff --git a/web/images/layers/previews/geographic/HLS_Shortwave_Infrared_Sentinel.jpg b/web/images/layers/previews/geographic/HLS_Shortwave_Infrared_Sentinel.jpg
index 7d9c05ee4f..86eed48df8 100644
Binary files a/web/images/layers/previews/geographic/HLS_Shortwave_Infrared_Sentinel.jpg and b/web/images/layers/previews/geographic/HLS_Shortwave_Infrared_Sentinel.jpg differ
diff --git a/web/js/components/image-download/image-download-panel.js b/web/js/components/image-download/image-download-panel.js
index 8dc415a734..75b0f29a96 100644
--- a/web/js/components/image-download/image-download-panel.js
+++ b/web/js/components/image-download/image-download-panel.js
@@ -1,6 +1,8 @@
import React, { useState, useEffect } from 'react';
+import { useSelector } from 'react-redux';
import PropTypes from 'prop-types';
import googleTagManager from 'googleTagManager';
+import { getActivePalettes } from '../../modules/palettes/selectors';
import {
imageSizeValid,
getDimensions,
@@ -57,6 +59,7 @@ function ImageDownloadPanel(props) {
const [currResolution, setResolution] = useState(resolution);
const [debugUrl, setDebugUrl] = useState('');
const [showGranuleWarning, setShowGranuleWarning] = useState(false);
+ const activePalettes = useSelector((state) => getActivePalettes(state, state.compare.activeString));
useEffect(() => {
const layerList = getLayers();
@@ -83,6 +86,7 @@ function ImageDownloadPanel(props) {
currFileType,
currFileType === 'application/vnd.google-earth.kmz' ? false : currIsWorldfile,
markerCoordinates,
+ activePalettes,
);
window.open(dlURL, '_blank');
diff --git a/web/js/components/timeline/timeline-coverage/coverage-item-container.js b/web/js/components/timeline/timeline-coverage/coverage-item-container.js
index 3f188c7bef..935147c722 100644
--- a/web/js/components/timeline/timeline-coverage/coverage-item-container.js
+++ b/web/js/components/timeline/timeline-coverage/coverage-item-container.js
@@ -72,7 +72,7 @@ class CoverageItemContainer extends Component {
dateIntervalStartDates.forEach((dateIntStartDate) => {
const dateIntTime = new Date(dateIntStartDate).getTime();
// allow overwriting of subsequent date ranges
- if (dateIntTime >= startDateTime && dateIntTime < endDateTime) {
+ if (dateIntTime >= startDateTime && dateIntTime <= endDateTime) {
const dateIntFormatted = dateIntStartDate.toISOString();
multiCoverageDates[dateIntFormatted] = {
date: dateIntFormatted,
diff --git a/web/js/components/timeline/timeline-coverage/coverage-item-list.js b/web/js/components/timeline/timeline-coverage/coverage-item-list.js
index 0c797f1f5c..0dd9349b39 100644
--- a/web/js/components/timeline/timeline-coverage/coverage-item-list.js
+++ b/web/js/components/timeline/timeline-coverage/coverage-item-list.js
@@ -262,9 +262,7 @@ class CoverageItemList extends Component {
const endGreaterThanOrEqualToStartDateLimit = new Date(rangeEnd).getTime() >= startDateLimit.getTime();
if (startLessThanOrEqualToEndDateLimit && endGreaterThanOrEqualToStartDateLimit) {
// check layer date array cache and use caches date array if available, if not add date array
- if (!this.layerDateArrayCache[id]) {
- this.layerDateArrayCache[id] = {};
- }
+ this.layerDateArrayCache[id] ??= {};
const layerIdDates = `${appNow.toISOString()}-${frontDate}-${backDate}`;
if (this.layerDateArrayCache[id][layerIdDates] === undefined) {
diff --git a/web/js/containers/toolbar.js b/web/js/containers/toolbar.js
index 816fd9cd4b..f55953e5f2 100644
--- a/web/js/containers/toolbar.js
+++ b/web/js/containers/toolbar.js
@@ -21,7 +21,7 @@ import {
requestNotifications,
setNotifications,
} from '../modules/notifications/actions';
-import { clearCustoms, refreshPalettes } from '../modules/palettes/actions';
+import { refreshPalettes } from '../modules/palettes/actions';
import { clearRotate, refreshRotation } from '../modules/map/actions';
import {
showLayers, hideLayers,
@@ -136,7 +136,6 @@ class toolbarContainer extends Component {
const nonDownloadableLayers = hasNonDownloadableLayer ? getNonDownloadableLayers(visibleLayersForProj) : null;
const paletteStore = lodashCloneDeep(activePalettes);
toggleDialogVisible(false);
- await this.getPromise(hasCustomPalette, 'palette', clearCustoms, 'Notice');
await this.getPromise(isRotated, 'rotate', clearRotate, 'Reset rotation');
await this.getPromise(hasNonDownloadableLayer, 'layers', hideLayers, 'Remove Layers?');
await openModal(
diff --git a/web/js/modules/image-download/util.js b/web/js/modules/image-download/util.js
index c975bb458e..14c143f076 100644
--- a/web/js/modules/image-download/util.js
+++ b/web/js/modules/image-download/util.js
@@ -1,5 +1,4 @@
import {
- each as lodashEach,
get as lodashGet,
} from 'lodash';
import { transform } from 'ol/proj';
@@ -179,18 +178,21 @@ export function imageUtilCalculateResolution(
* @returns {array} array of layer ids
*
*/
-export function imageUtilGetLayers(products, proj) {
- const layers = [];
- lodashEach(products, (layer) => {
+export function imageUtilGetLayers(products, proj, activePalettes) {
+ const layers = products.map((layer) => {
+ let layerId = layer.id;
if (layer.downloadId) {
- layers.push(layer.downloadId);
+ layerId = layer.downloadId;
} else if (layer.projections[proj].id) {
- layers.push(layer.projections[proj].id);
+ layerId = layer.projections[proj].id;
} else if (layer.projections[proj].layer) {
- layers.push(layer.projections[proj].layer);
- } else {
- layers.push(layer.id);
+ layerId = layer.projections[proj].layer;
+ }
+ const disabled = activePalettes?.[layer.id]?.maps?.[0]?.disabled;
+ if (Array.isArray(disabled)) {
+ return `${layerId}(disabled=${disabled.join('-')})`;
}
+ return layerId;
});
return layers;
}
@@ -306,7 +308,7 @@ export function getTruncatedGranuleDates(layerDefs) {
* @param {Boolean} isWorldfile
* @param {Array} markerCoordinates
*/
-export function getDownloadUrl(url, proj, layerDefs, bbox, dimensions, dateTime, fileType, isWorldfile, markerCoordinates) {
+export function getDownloadUrl(url, proj, layerDefs, bbox, dimensions, dateTime, fileType, isWorldfile, markerCoordinates, activePalettes) {
const { crs } = proj.selected;
const {
layersArray,
@@ -314,7 +316,7 @@ export function getDownloadUrl(url, proj, layerDefs, bbox, dimensions, dateTime,
opacities,
} = imageUtilProcessWrap(
fileType,
- imageUtilGetLayers(layerDefs, proj.id),
+ imageUtilGetLayers(layerDefs, proj.id, activePalettes),
imageUtilGetLayerWrap(layerDefs),
imageUtilGetLayerOpacities(layerDefs),
);
@@ -323,6 +325,7 @@ export function getDownloadUrl(url, proj, layerDefs, bbox, dimensions, dateTime,
const { height, width } = dimensions;
const snappedDateTime = getLatestIntervalTime(layerDefs, dateTime);
const granuleDates = getTruncatedGranuleDates(layerDefs).value;
+ const colormaps = layerDefs.map((layer) => layer.palette?.id);
const params = [
'REQUEST=GetSnapshot',
`TIME=${util.toISOStringSeconds(snappedDateTime)}`,
@@ -334,6 +337,9 @@ export function getDownloadUrl(url, proj, layerDefs, bbox, dimensions, dateTime,
`WIDTH=${width}`,
`HEIGHT=${height}`,
];
+ if (Array.isArray(colormaps) && colormaps.length > 0) {
+ params.push(`colormaps=${colormaps.join(',')}`);
+ }
if (granuleDates.length > 0) {
params.push(`granule_dates=${granuleDates}`);
}
diff --git a/web/js/modules/image-download/util.test.js b/web/js/modules/image-download/util.test.js
index f791c7a497..e422b96b96 100644
--- a/web/js/modules/image-download/util.test.js
+++ b/web/js/modules/image-download/util.test.js
@@ -218,7 +218,7 @@ test('Download URL [imagedownload-url]', () => {
{ id: 1, longitude: 2.7117, latitude: -19.1609 },
{ id: 2, longitude: 71.173, latitude: -39.0961 },
];
- const dlURL = getDownloadUrl(url, proj, mockLayerDefs, lonlats, dimensions, dateTime, false, false, locationMarkers);
+ const dlURL = getDownloadUrl(url, proj, mockLayerDefs, lonlats, dimensions, dateTime, false, false, locationMarkers, undefined);
const expectedURL = 'http://localhost:3002/api/v1/snapshot'
+ '?REQUEST=GetSnapshot'
+ '&TIME=2019-06-24T00:00:00Z'
@@ -228,6 +228,7 @@ test('Download URL [imagedownload-url]', () => {
+ '&WRAP=day'
+ '&FORMAT=image/jpeg'
+ '&WIDTH=300&HEIGHT=300'
+ + '&colormaps='
+ '&MARKER=2.7117,-19.1609,71.173,-39.0961';
expect(dlURL.includes(expectedURL)).toBe(true);
});
diff --git a/web/js/modules/palettes/selectors.js b/web/js/modules/palettes/selectors.js
index e3962bdba0..bc37141fe0 100644
--- a/web/js/modules/palettes/selectors.js
+++ b/web/js/modules/palettes/selectors.js
@@ -504,3 +504,7 @@ export function isPaletteAllowed(layerId, config) {
}
return Boolean(config.layers[layerId].palette);
}
+
+export function getActivePalettes (state, activeString) {
+ return state.palettes[activeString];
+}