diff --git a/package-lock.json b/package-lock.json
index c6ddde8..51baf51 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,6 +17,7 @@
"date-fns": "^3.6.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-joyride": "^2.9.2",
"react-share": "^5.1.0",
"styled-components": "^6.1.12"
},
@@ -925,6 +926,12 @@
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz",
"integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ=="
},
+ "node_modules/@gilbarbara/deep-equal": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@gilbarbara/deep-equal/-/deep-equal-0.3.1.tgz",
+ "integrity": "sha512-I7xWjLs2YSVMc5gGx1Z3ZG1lgFpITPndpi8Ku55GeEIKpACCPQNS/OTqQbxgTCfq0Ncvcc+CrFov96itVh6Qvw==",
+ "license": "MIT"
+ },
"node_modules/@headlessui/react": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.1.2.tgz",
@@ -1568,14 +1575,12 @@
"node_modules/@types/prop-types": {
"version": "15.7.12",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
- "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==",
- "dev": true
+ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q=="
},
"node_modules/@types/react": {
"version": "18.3.3",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
"integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
- "dev": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -2541,12 +2546,27 @@
}
}
},
+ "node_modules/deep-diff": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-1.0.2.tgz",
+ "integrity": "sha512-aWS3UIVH+NPGCD1kki+DCU9Dua032iSsO43LqQpcs4R3+dVv7tX0qBGjiVHJHjplsoUM2XRO/KB92glqc68awg==",
+ "license": "MIT"
+ },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -3815,6 +3835,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-lite": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-1.2.1.tgz",
+ "integrity": "sha512-pgF+L5bxC+10hLBgf6R2P4ZZUBOQIIacbdo8YvuCP8/JvsWxG7aZ9p10DYuLtifFci4l3VITphhMlMV4Y+urPw==",
+ "license": "MIT"
+ },
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -4385,7 +4411,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -4651,6 +4676,17 @@
"node": ">= 6"
}
},
+ "node_modules/popper.js": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
+ "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
"node_modules/possible-typed-array-names": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -4844,7 +4880,6 @@
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
"dependencies": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
@@ -4903,11 +4938,94 @@
"react": "^18.3.1"
}
},
+ "node_modules/react-floater": {
+ "version": "0.7.9",
+ "resolved": "https://registry.npmjs.org/react-floater/-/react-floater-0.7.9.tgz",
+ "integrity": "sha512-NXqyp9o8FAXOATOEo0ZpyaQ2KPb4cmPMXGWkx377QtJkIXHlHRAGer7ai0r0C1kG5gf+KJ6Gy+gdNIiosvSicg==",
+ "license": "MIT",
+ "dependencies": {
+ "deepmerge": "^4.3.1",
+ "is-lite": "^0.8.2",
+ "popper.js": "^1.16.0",
+ "prop-types": "^15.8.1",
+ "tree-changes": "^0.9.1"
+ },
+ "peerDependencies": {
+ "react": "15 - 18",
+ "react-dom": "15 - 18"
+ }
+ },
+ "node_modules/react-floater/node_modules/@gilbarbara/deep-equal": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@gilbarbara/deep-equal/-/deep-equal-0.1.2.tgz",
+ "integrity": "sha512-jk+qzItoEb0D0xSSmrKDDzf9sheQj/BAPxlgNxgmOaA3mxpUa6ndJLYGZKsJnIVEQSD8zcTbyILz7I0HcnBCRA==",
+ "license": "MIT"
+ },
+ "node_modules/react-floater/node_modules/is-lite": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.8.2.tgz",
+ "integrity": "sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw==",
+ "license": "MIT"
+ },
+ "node_modules/react-floater/node_modules/tree-changes": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/tree-changes/-/tree-changes-0.9.3.tgz",
+ "integrity": "sha512-vvvS+O6kEeGRzMglTKbc19ltLWNtmNt1cpBoSYLj/iEcPVvpJasemKOlxBrmZaCtDJoF+4bwv3m01UKYi8mukQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@gilbarbara/deep-equal": "^0.1.1",
+ "is-lite": "^0.8.2"
+ }
+ },
+ "node_modules/react-innertext": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/react-innertext/-/react-innertext-1.1.5.tgz",
+ "integrity": "sha512-PWAqdqhxhHIv80dT9znP2KvS+hfkbRovFp4zFYHFFlOoQLRiawIic81gKb3U1wEyJZgMwgs3JoLtwryASRWP3Q==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": ">=0.0.0 <=99",
+ "react": ">=0.0.0 <=99"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/react-joyride": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.9.2.tgz",
+ "integrity": "sha512-DQ3m3W/GeoASv4UE9ZaadFp3ACJusV0kjjBe7zTpPwWuHpvEoofc+2TCJkru0lbA+G9l39+vPVttcJA/p1XeSA==",
+ "license": "MIT",
+ "dependencies": {
+ "@gilbarbara/deep-equal": "^0.3.1",
+ "deep-diff": "^1.0.2",
+ "deepmerge": "^4.3.1",
+ "is-lite": "^1.2.1",
+ "react-floater": "^0.7.9",
+ "react-innertext": "^1.1.5",
+ "react-is": "^16.13.1",
+ "scroll": "^3.0.1",
+ "scrollparent": "^2.1.0",
+ "tree-changes": "^0.11.2",
+ "type-fest": "^4.26.1"
+ },
+ "peerDependencies": {
+ "react": "15 - 18",
+ "react-dom": "15 - 18"
+ }
+ },
+ "node_modules/react-joyride/node_modules/type-fest": {
+ "version": "4.26.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz",
+ "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/react-refresh": {
"version": "0.14.2",
@@ -5143,6 +5261,18 @@
"loose-envify": "^1.1.0"
}
},
+ "node_modules/scroll": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/scroll/-/scroll-3.0.1.tgz",
+ "integrity": "sha512-pz7y517OVls1maEzlirKO5nPYle9AXsFzTMNJrRGmT951mzpIBy7sNHOg5o/0MQd/NqliCiWnAi0kZneMPFLcg==",
+ "license": "MIT"
+ },
+ "node_modules/scrollparent": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/scrollparent/-/scrollparent-2.1.0.tgz",
+ "integrity": "sha512-bnnvJL28/Rtz/kz2+4wpBjHzWoEzXhVg/TE8BeVGJHUqE8THNIRnDxDWMktwM+qahvlRdvlLdsQfYe+cuqfZeA==",
+ "license": "ISC"
+ },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -5722,6 +5852,16 @@
"node": ">=8.0"
}
},
+ "node_modules/tree-changes": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/tree-changes/-/tree-changes-0.11.2.tgz",
+ "integrity": "sha512-4gXlUthrl+RabZw6lLvcCDl6KfJOCmrC16BC5CRdut1EAH509Omgg0BfKLY+ViRlzrvYOTWR0FMS2SQTwzumrw==",
+ "license": "MIT",
+ "dependencies": {
+ "@gilbarbara/deep-equal": "^0.3.1",
+ "is-lite": "^1.2.0"
+ }
+ },
"node_modules/ts-interface-checker": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
diff --git a/package.json b/package.json
index f1174f8..a92f78d 100644
--- a/package.json
+++ b/package.json
@@ -19,6 +19,7 @@
"date-fns": "^3.6.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-joyride": "^2.9.2",
"react-share": "^5.1.0",
"styled-components": "^6.1.12"
},
diff --git a/public/composited_1fps_g1_crf18.mp4 b/public/composited_1fps_g1_crf18.mp4
deleted file mode 100644
index 267dc71..0000000
Binary files a/public/composited_1fps_g1_crf18.mp4 and /dev/null differ
diff --git a/public/tasmax_monthly_ssp126_first_frame.png b/public/tasmax_monthly_ssp126_first_frame.png
new file mode 100644
index 0000000..7e9ff54
Binary files /dev/null and b/public/tasmax_monthly_ssp126_first_frame.png differ
diff --git a/public/tasmax_monthly_ssp126_max12_8192_1024x512.mp4 b/public/tasmax_monthly_ssp126_max12_8192_1024x512.mp4
index c1eeea2..238bca1 100644
Binary files a/public/tasmax_monthly_ssp126_max12_8192_1024x512.mp4 and b/public/tasmax_monthly_ssp126_max12_8192_1024x512.mp4 differ
diff --git a/public/tasmax_monthly_ssp126_max12_8192_512x256.mp4 b/public/tasmax_monthly_ssp126_max12_8192_512x256.mp4
index 6a0c487..c3b9719 100644
Binary files a/public/tasmax_monthly_ssp126_max12_8192_512x256.mp4 and b/public/tasmax_monthly_ssp126_max12_8192_512x256.mp4 differ
diff --git a/public/tasmax_monthly_ssp245_first_frame.png b/public/tasmax_monthly_ssp245_first_frame.png
new file mode 100644
index 0000000..8f7a8a8
Binary files /dev/null and b/public/tasmax_monthly_ssp245_first_frame.png differ
diff --git a/public/tasmax_monthly_ssp245_max12_8192_1024x512.mp4 b/public/tasmax_monthly_ssp245_max12_8192_1024x512.mp4
index 4a77050..0ee9dc8 100644
Binary files a/public/tasmax_monthly_ssp245_max12_8192_1024x512.mp4 and b/public/tasmax_monthly_ssp245_max12_8192_1024x512.mp4 differ
diff --git a/public/tasmax_monthly_ssp245_max12_8192_512x256.mp4 b/public/tasmax_monthly_ssp245_max12_8192_512x256.mp4
new file mode 100644
index 0000000..6460783
Binary files /dev/null and b/public/tasmax_monthly_ssp245_max12_8192_512x256.mp4 differ
diff --git a/public/tasmax_monthly_ssp370_first_frame.png b/public/tasmax_monthly_ssp370_first_frame.png
new file mode 100644
index 0000000..16bd3fe
Binary files /dev/null and b/public/tasmax_monthly_ssp370_first_frame.png differ
diff --git a/public/tasmax_monthly_ssp370_max12_8192_1024x512.mp4 b/public/tasmax_monthly_ssp370_max12_8192_1024x512.mp4
index 146516c..c47ddd5 100644
Binary files a/public/tasmax_monthly_ssp370_max12_8192_1024x512.mp4 and b/public/tasmax_monthly_ssp370_max12_8192_1024x512.mp4 differ
diff --git a/public/tasmax_monthly_ssp370_max12_8192_512x256.mp4 b/public/tasmax_monthly_ssp370_max12_8192_512x256.mp4
index 06a08f4..bbb2dc3 100644
Binary files a/public/tasmax_monthly_ssp370_max12_8192_512x256.mp4 and b/public/tasmax_monthly_ssp370_max12_8192_512x256.mp4 differ
diff --git a/public/tasmax_monthly_ssp585_first_frame.png b/public/tasmax_monthly_ssp585_first_frame.png
new file mode 100644
index 0000000..c98d6e6
Binary files /dev/null and b/public/tasmax_monthly_ssp585_first_frame.png differ
diff --git a/public/tasmax_monthly_ssp585_max12_8192_1024x512.mp4 b/public/tasmax_monthly_ssp585_max12_8192_1024x512.mp4
index 0289295..dd53ddc 100644
Binary files a/public/tasmax_monthly_ssp585_max12_8192_1024x512.mp4 and b/public/tasmax_monthly_ssp585_max12_8192_1024x512.mp4 differ
diff --git a/public/tasmax_monthly_ssp585_max12_8192_512x256.mp4 b/public/tasmax_monthly_ssp585_max12_8192_512x256.mp4
index 24ca1e7..5f80e8d 100644
Binary files a/public/tasmax_monthly_ssp585_max12_8192_512x256.mp4 and b/public/tasmax_monthly_ssp585_max12_8192_512x256.mp4 differ
diff --git a/src/App.jsx b/src/App.jsx
index 6b8a51a..a471563 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -5,10 +5,13 @@ import EICLogo from './components/Logo';
import {
MapViewContext,
ChartDataContext,
- DataSelectionContext
+ DataSelectionContext,
+ ErrorContext
} from './contexts/AppContext';
import { VideoProvider } from './contexts/VideoContext';
import config from './config.json';
+import RotateOverlay from './components/RotateOverlay';
+import Tour from './components/Tour';
export default function App() {
const defaultDataset = config.datasets[0];
@@ -19,22 +22,38 @@ export default function App() {
]);
const [mapView, setMapView] = useState(null);
const [chartData, setChartData] = useState([]);
+ const [hasWebGLError, setHasWebGLError] = useState(false);
return (
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ {hasWebGLError ? (
+
+ Your WebGL implementation doesn't seem to
+ support hardware accelerated rendering.
+ Check your browser settings or if your GPU
+ is in a blocklist.
+
+ ) : (
+ <>
+
+
+
+
+
+ >
+ )}
+
+
+
+
+
);
}
diff --git a/src/components/DataLayerModal.tsx b/src/components/DataLayerModal.tsx
index d09f5f0..4a1a5b8 100644
--- a/src/components/DataLayerModal.tsx
+++ b/src/components/DataLayerModal.tsx
@@ -27,7 +27,7 @@ export default function DataLayerModal({
return (
@@ -53,7 +53,7 @@ export default function DataLayerModal({