diff --git a/src/website/package-lock.json b/src/website/package-lock.json
index 47bd58f4a..6af887e3f 100644
--- a/src/website/package-lock.json
+++ b/src/website/package-lock.json
@@ -5,9 +5,10 @@
"packages": {
"": {
"dependencies": {
- "@emotion/react": "^11.11.1",
+ "@emotion/react": "^11.11.4",
"@emotion/styled": "^11.11.0",
- "@mui/material": "^5.14.12",
+ "@mui/icons-material": "^5.15.10",
+ "@mui/material": "^5.15.12",
"@react-google-maps/api": "^2.19.2",
"@reduxjs/toolkit": "^1.9.5",
"dotenv": "^16.3.1",
@@ -682,9 +683,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
- "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz",
+ "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -834,13 +835,14 @@
"license": "MIT"
},
"node_modules/@emotion/react": {
- "version": "11.11.1",
- "license": "MIT",
+ "version": "11.11.4",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz",
+ "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==",
"dependencies": {
"@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.11.0",
"@emotion/cache": "^11.11.0",
- "@emotion/serialize": "^1.1.2",
+ "@emotion/serialize": "^1.1.3",
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
"@emotion/utils": "^1.2.1",
"@emotion/weak-memoize": "^0.3.1",
@@ -856,8 +858,9 @@
}
},
"node_modules/@emotion/serialize": {
- "version": "1.1.2",
- "license": "MIT",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz",
+ "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==",
"dependencies": {
"@emotion/hash": "^0.9.1",
"@emotion/memoize": "^0.8.1",
@@ -872,7 +875,8 @@
},
"node_modules/@emotion/styled": {
"version": "11.11.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz",
+ "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==",
"dependencies": {
"@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.11.0",
@@ -990,28 +994,28 @@
}
},
"node_modules/@floating-ui/core": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz",
- "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz",
+ "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==",
"dependencies": {
- "@floating-ui/utils": "^0.1.3"
+ "@floating-ui/utils": "^0.2.1"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz",
- "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==",
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz",
+ "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==",
"dependencies": {
- "@floating-ui/core": "^1.4.2",
- "@floating-ui/utils": "^0.1.3"
+ "@floating-ui/core": "^1.0.0",
+ "@floating-ui/utils": "^0.2.0"
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz",
- "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz",
+ "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==",
"dependencies": {
- "@floating-ui/dom": "^1.5.1"
+ "@floating-ui/dom": "^1.6.1"
},
"peerDependencies": {
"react": ">=16.8.0",
@@ -1019,9 +1023,9 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz",
- "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz",
+ "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q=="
},
"node_modules/@googlemaps/js-api-loader": {
"version": "1.16.2",
@@ -1104,16 +1108,16 @@
}
},
"node_modules/@mui/base": {
- "version": "5.0.0-beta.19",
- "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.19.tgz",
- "integrity": "sha512-maNBgAscddyPNzFZQUJDF/puxM27Li+NqSBsr/lAP8TLns2VvWS2SoL3OKFOIoRnAMKGY/Ic6Aot6gCYeQnssA==",
- "dependencies": {
- "@babel/runtime": "^7.23.1",
- "@floating-ui/react-dom": "^2.0.2",
- "@mui/types": "^7.2.6",
- "@mui/utils": "^5.14.13",
+ "version": "5.0.0-beta.38",
+ "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.38.tgz",
+ "integrity": "sha512-AsjD6Y1X5A1qndxz8xCcR8LDqv31aiwlgWMPxFAX/kCKiIGKlK65yMeVZ62iQr/6LBz+9hSKLiD1i4TZdAHKcQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@floating-ui/react-dom": "^2.0.8",
+ "@mui/types": "^7.2.13",
+ "@mui/utils": "^5.15.12",
"@popperjs/core": "^2.11.8",
- "clsx": "^2.0.0",
+ "clsx": "^2.1.0",
"prop-types": "^15.8.1"
},
"engines": {
@@ -1121,7 +1125,7 @@
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/mui"
+ "url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
@@ -1135,28 +1139,53 @@
}
},
"node_modules/@mui/core-downloads-tracker": {
- "version": "5.14.13",
- "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.13.tgz",
- "integrity": "sha512-3ZUbzcH4yloLKlV6Y+S0Edn2wef9t+EGHSfEkwVCn8E0ULdshifEFgfEroKRegQifDIwcKS/ofccxuZ8njTAYg==",
+ "version": "5.15.12",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.12.tgz",
+ "integrity": "sha512-brRO+tMFLpGyjEYHrX97bzqeF6jZmKpqqe1rY0LyIHAwP6xRVzh++zSecOQorDOCaZJg4XkGT9xfD+RWOWxZBA==",
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/mui"
+ "url": "https://opencollective.com/mui-org"
+ }
+ },
+ "node_modules/@mui/icons-material": {
+ "version": "5.15.10",
+ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.10.tgz",
+ "integrity": "sha512-9cF8oUHZKo9oQ7EQ3pxPELaZuZVmphskU4OI6NiJNDVN7zcuvrEsuWjYo1Zh4fLiC39Nrvm30h/B51rcUjvSGA==",
+ "dependencies": {
+ "@babel/runtime": "^7.23.9"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@mui/material": "^5.0.0",
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"node_modules/@mui/material": {
- "version": "5.14.13",
- "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.13.tgz",
- "integrity": "sha512-iPEFwhoVG789UVsXX4gqd1eJUlcLW1oceqwJYQN8Z4MpcAKfL9Lv3fda65AwG7pQ5lf+d7IbHzm4m48SWZxI2g==",
- "dependencies": {
- "@babel/runtime": "^7.23.1",
- "@mui/base": "5.0.0-beta.19",
- "@mui/core-downloads-tracker": "^5.14.13",
- "@mui/system": "^5.14.13",
- "@mui/types": "^7.2.6",
- "@mui/utils": "^5.14.13",
- "@types/react-transition-group": "^4.4.7",
- "clsx": "^2.0.0",
- "csstype": "^3.1.2",
+ "version": "5.15.12",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.12.tgz",
+ "integrity": "sha512-vXJGg6KNKucsvbW6l7w9zafnpOp0CWc0Wx4mDykuABTpQ5QQBnZxP7+oB4yAS1hDZQ1WobbeIl0CjxK4EEahkA==",
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@mui/base": "5.0.0-beta.38",
+ "@mui/core-downloads-tracker": "^5.15.12",
+ "@mui/system": "^5.15.12",
+ "@mui/types": "^7.2.13",
+ "@mui/utils": "^5.15.12",
+ "@types/react-transition-group": "^4.4.10",
+ "clsx": "^2.1.0",
+ "csstype": "^3.1.3",
"prop-types": "^15.8.1",
"react-is": "^18.2.0",
"react-transition-group": "^4.4.5"
@@ -1166,7 +1195,7 @@
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/mui"
+ "url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@emotion/react": "^11.5.0",
@@ -1193,12 +1222,12 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"node_modules/@mui/private-theming": {
- "version": "5.14.13",
- "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.13.tgz",
- "integrity": "sha512-5EFqk4tqiSwPguj4NW/6bUf4u1qoUWXy9lrKfNh9H6oAohM+Ijv/7qSxFjnxPGBctj469/Sc5aKAR35ILBKZLQ==",
+ "version": "5.15.12",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.12.tgz",
+ "integrity": "sha512-cqoSo9sgA5HE+8vZClbLrq9EkyOnYysooepi5eKaKvJ41lReT2c5wOZAeDDM1+xknrMDos+0mT2zr3sZmUiRRA==",
"dependencies": {
- "@babel/runtime": "^7.23.1",
- "@mui/utils": "^5.14.13",
+ "@babel/runtime": "^7.23.9",
+ "@mui/utils": "^5.15.12",
"prop-types": "^15.8.1"
},
"engines": {
@@ -1206,7 +1235,7 @@
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/mui"
+ "url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
@@ -1219,13 +1248,13 @@
}
},
"node_modules/@mui/styled-engine": {
- "version": "5.14.13",
- "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.13.tgz",
- "integrity": "sha512-1ff/egFQl26hiwcUtCMKAkp4Sgqpm3qIewmXq+GN27fb44lDIACquehMFBuadOjceOFmbIXbayzbA46ZyqFYzA==",
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.11.tgz",
+ "integrity": "sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==",
"dependencies": {
- "@babel/runtime": "^7.23.1",
+ "@babel/runtime": "^7.23.9",
"@emotion/cache": "^11.11.0",
- "csstype": "^3.1.2",
+ "csstype": "^3.1.3",
"prop-types": "^15.8.1"
},
"engines": {
@@ -1233,7 +1262,7 @@
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/mui"
+ "url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@emotion/react": "^11.4.1",
@@ -1250,17 +1279,17 @@
}
},
"node_modules/@mui/system": {
- "version": "5.14.13",
- "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.13.tgz",
- "integrity": "sha512-+5+Dx50lG4csbx2sGjrKLozXQJeCpJ4dIBZolyFLkZ+XphD1keQWouLUvJkPQ3MSglLLKuD37pp52YjMncZMEQ==",
- "dependencies": {
- "@babel/runtime": "^7.23.1",
- "@mui/private-theming": "^5.14.13",
- "@mui/styled-engine": "^5.14.13",
- "@mui/types": "^7.2.6",
- "@mui/utils": "^5.14.13",
- "clsx": "^2.0.0",
- "csstype": "^3.1.2",
+ "version": "5.15.12",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.12.tgz",
+ "integrity": "sha512-/pq+GO6yN3X7r3hAwFTrzkAh7K1bTF5r8IzS79B9eyKJg7v6B/t4/zZYMR6OT9qEPtwf6rYN2Utg1e6Z7F1OgQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@mui/private-theming": "^5.15.12",
+ "@mui/styled-engine": "^5.15.11",
+ "@mui/types": "^7.2.13",
+ "@mui/utils": "^5.15.12",
+ "clsx": "^2.1.0",
+ "csstype": "^3.1.3",
"prop-types": "^15.8.1"
},
"engines": {
@@ -1268,7 +1297,7 @@
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/mui"
+ "url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@emotion/react": "^11.5.0",
@@ -1289,9 +1318,9 @@
}
},
"node_modules/@mui/types": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.6.tgz",
- "integrity": "sha512-7sjLQrUmBwufm/M7jw/quNiPK/oor2+pGUQP2CULRcFCArYTq78oJ3D5esTaL0UMkXKJvDqXn6Ike69yAOBQng==",
+ "version": "7.2.13",
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz",
+ "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==",
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0"
},
@@ -1302,12 +1331,12 @@
}
},
"node_modules/@mui/utils": {
- "version": "5.14.13",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.13.tgz",
- "integrity": "sha512-2AFpyXWw7uDCIqRu7eU2i/EplZtks5LAMzQvIhC79sPV9IhOZU2qwOWVnPtdctRXiQJOAaXulg+A37pfhEueQw==",
+ "version": "5.15.12",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.12.tgz",
+ "integrity": "sha512-8SDGCnO2DY9Yy+5bGzu00NZowSDtuyHP4H8gunhHGQoIlhlY2Z3w64wBzAOLpYw/ZhJNzksDTnS/i8qdJvxuow==",
"dependencies": {
- "@babel/runtime": "^7.23.1",
- "@types/prop-types": "^15.7.7",
+ "@babel/runtime": "^7.23.9",
+ "@types/prop-types": "^15.7.11",
"prop-types": "^15.8.1",
"react-is": "^18.2.0"
},
@@ -1316,7 +1345,7 @@
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/mui"
+ "url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
@@ -2278,9 +2307,9 @@
"license": "MIT"
},
"node_modules/@types/prop-types": {
- "version": "15.7.8",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz",
- "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ=="
+ "version": "15.7.11",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
+ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
},
"node_modules/@types/qs": {
"version": "6.9.7",
@@ -2303,9 +2332,9 @@
}
},
"node_modules/@types/react-transition-group": {
- "version": "4.4.7",
- "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.7.tgz",
- "integrity": "sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==",
+ "version": "4.4.10",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz",
+ "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==",
"dependencies": {
"@types/react": "*"
}
@@ -3230,9 +3259,9 @@
"license": "MIT"
},
"node_modules/clsx": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
- "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
+ "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==",
"engines": {
"node": ">=6"
}
@@ -3355,9 +3384,9 @@
}
},
"node_modules/csstype": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/d3-array": {
"version": "3.2.4",
diff --git a/src/website/package.json b/src/website/package.json
index d92309816..7075399bc 100644
--- a/src/website/package.json
+++ b/src/website/package.json
@@ -8,9 +8,10 @@
"format": "prettier --write ."
},
"dependencies": {
- "@emotion/react": "^11.11.1",
+ "@emotion/react": "^11.11.4",
"@emotion/styled": "^11.11.0",
- "@mui/material": "^5.14.12",
+ "@mui/icons-material": "^5.15.10",
+ "@mui/material": "^5.15.12",
"@react-google-maps/api": "^2.19.2",
"@reduxjs/toolkit": "^1.9.5",
"dotenv": "^16.3.1",
diff --git a/src/website/pages/Polaris/index.tsx b/src/website/pages/Polaris/index.tsx
new file mode 100644
index 000000000..0d2303788
--- /dev/null
+++ b/src/website/pages/Polaris/index.tsx
@@ -0,0 +1,6 @@
+import React from 'react';
+import PolarisContainer from '@/views/PolarisContainer';
+
+export default function DataSets() {
+ return ;
+}
diff --git a/src/website/pages/index.tsx b/src/website/pages/index.tsx
index 8b29c9bdc..ccba2b428 100644
--- a/src/website/pages/index.tsx
+++ b/src/website/pages/index.tsx
@@ -1,5 +1,6 @@
import dynamic from 'next/dynamic';
import { CircularProgress } from '@mui/material';
+import DashboardContainer from '@/views/DashboardContainer';
import Header from '@/views/components/Header/Header';
import styles from './style.module.css';
@@ -21,10 +22,6 @@ const MapsContainer = dynamic(() => import('@/views/MapsContainer'), {
ssr: false,
});
-const DashboardContainer = dynamic(() => import('@/views/DashboardContainer'), {
- ssr: false,
-});
-
export default function Home() {
return (
<>
diff --git a/src/website/public/BoatIconFinal.png b/src/website/public/BoatIconFinal.png
deleted file mode 100644
index f4f912dbf..000000000
Binary files a/src/website/public/BoatIconFinal.png and /dev/null differ
diff --git a/src/website/public/NSEWCompass.png b/src/website/public/NSEWCompass.png
deleted file mode 100644
index 59a8312e3..000000000
Binary files a/src/website/public/NSEWCompass.png and /dev/null differ
diff --git a/src/website/public/NSEWCompassBackdrop.png b/src/website/public/NSEWCompassBackdrop.png
deleted file mode 100644
index 0ef342a07..000000000
Binary files a/src/website/public/NSEWCompassBackdrop.png and /dev/null differ
diff --git a/src/website/public/Polaris.png b/src/website/public/Polaris.png
new file mode 100644
index 000000000..37aa5f21b
Binary files /dev/null and b/src/website/public/Polaris.png differ
diff --git a/src/website/views/DashboardContainer.tsx b/src/website/views/DashboardContainer.tsx
index 84532e735..7abe3a498 100644
--- a/src/website/views/DashboardContainer.tsx
+++ b/src/website/views/DashboardContainer.tsx
@@ -1,17 +1,15 @@
import React from 'react';
import { connect } from 'react-redux';
import UPlotLineChartComponent from './components/LineChart/UPlotLineChart';
-import { GPSState } from '@/stores/GPS/GPSTypes';
-import { BatteriesState } from '@/stores/Batteries/BatteriesTypes';
-import { WindSensorsState } from '@/stores/WindSensors/WindSensorsTypes';
+import { GPS } from '@/stores/GPS/GPSTypes';
+import { Batteries } from '@/stores/Batteries/BatteriesTypes';
+import { WindSensors } from '@/stores/WindSensors/WindSensorsTypes';
import UPlotMultiLineChartComponent from './components/LineChart/UPlotMultiLineChart';
-import SingleValueChart from './components/SingleValueChart/SingleValueChart';
-import { Grid } from '@mui/material';
export interface DashboardContainerProps {
- gps: GPSState;
- batteries: BatteriesState;
- windSensors: WindSensorsState;
+ gps: GPS[];
+ batteries: Batteries[];
+ windSensors: WindSensors[];
}
class DashboardContainer extends React.PureComponent {
@@ -23,11 +21,6 @@ class DashboardContainer extends React.PureComponent {
gps.data.map((data) => data.speed),
];
- const gpsDistanceData = [
- gps.data.map((data) => data.latitude),
- gps.data.map((data) => data.longitude)
- ];
-
const batteriesVoltageData = [
batteries.data.map((data) => this._parseISOString(data.timestamp)),
batteries.data.map((data) => data.batteries[0].voltage),
@@ -46,29 +39,8 @@ class DashboardContainer extends React.PureComponent {
windSensors.data.map((data) => data.windSensors[1].speed),
];
- const totalTripDistance = this._computeTotalTripDistance(gpsDistanceData[0], gpsDistanceData[1])
-
return (
- {/*
-
-
-
-
-
-
-
-
-
-
-
-
- */}
{
_parseISOString(s: string) {
return Math.floor(Date.parse(s) / 1000); // Converts to seconds
}
-
- _haversineDistance(lat1: number, long1: number, lat2: number, long2: number) {
-
- function toRadians(angle: number): number{
- return angle * Math.PI / 180
- }
-
- const EARTH_RADIUS = 6571 // in km
-
- let delta_lat = lat2-lat1
- let delta_lat_rad = toRadians(delta_lat)
- let delta_long = long2-long1
- let delta_long_rad = toRadians(delta_long)
-
- let a = (Math.sin(delta_lat_rad/2) * Math.sin(delta_lat_rad/2))
- + (Math.cos(toRadians(lat1)) * Math.cos(toRadians(lat2))
- * Math.sin(delta_long_rad/2)
- * Math.sin(delta_long_rad/2))
- let c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
-
- let distance = EARTH_RADIUS * c;
-
- return distance
- }
-
- _computeTotalTripDistance(latitude: number[], longitude: number[]) {
- if(latitude.length != longitude.length){
- return -1;
- }
-
- let totalDistance = 0;
-
- for(let i = 1; i < latitude.length; i++){
- totalDistance += this._haversineDistance(latitude[i-1], longitude[i-1], latitude[i], longitude[i]);
- }
-
- return Number(totalDistance.toFixed(2));
- }
}
const mapStateToProps = (state: any) => ({
diff --git a/src/website/views/MapsContainer.tsx b/src/website/views/MapsContainer.tsx
index d1d88006b..9cfb561de 100644
--- a/src/website/views/MapsContainer.tsx
+++ b/src/website/views/MapsContainer.tsx
@@ -5,9 +5,6 @@ import { GlobalPathState } from '@/stores/GlobalPath/GlobalPathTypes';
import { AISShipsState } from '@/stores/AISShips/AISShipsTypes';
import { WayPoint, LocalPathState } from '@/stores/LocalPath/LocalPathTypes';
import Maps, { convertToLatLng } from './components/Maps/Maps';
-import SingleValueLine from './components/SingleValueLine/SingleValueLine';
-import styles from './components/SingleValueLine/singlevalueline.module.css'
-import BoatCompass from './components/BoatCompass/BoatCompass';
export interface MapsContainerProps {
gps: GPSState;
@@ -18,77 +15,22 @@ export interface MapsContainerProps {
class MapsContainer extends React.PureComponent {
render() {
- const { gps } = this.props;
-
- const gpsDistanceData = [
- gps.data.map((data) => data.latitude),
- gps.data.map((data) => data.longitude)
- ];
-
- const totalTripDistance = this._computeTotalTripDistance(gpsDistanceData[0], gpsDistanceData[1])
-
return (
-
-
-
-
-
-
-
-
- convertToLatLng(gpsPoint),
- )}
- globalPath={this.props.globalPath.data.waypoints.map(
- (waypoint: WayPoint) => convertToLatLng(waypoint),
- )}
- aisShips={this.props.aisShips.data.ships}
- localPath={this.props.localPath.data.waypoints.map(
- (waypoint: WayPoint) => convertToLatLng(waypoint),
- )}
- />
-
+
+ convertToLatLng(gpsPoint),
+ )}
+ globalPath={this.props.globalPath.data.waypoints.map(
+ (waypoint: WayPoint) => convertToLatLng(waypoint),
+ )}
+ aisShips={this.props.aisShips.data.ships}
+ localPath={this.props.localPath.data.waypoints.map(
+ (waypoint: WayPoint) => convertToLatLng(waypoint),
+ )}
+ />
);
}
-
- _haversineDistance(lat1: number, long1: number, lat2: number, long2: number) {
-
- function toRadians(angle: number): number{
- return angle * Math.PI / 180
- }
-
- const EARTH_RADIUS = 6571 // in km
-
- let delta_lat = lat2-lat1
- let delta_lat_rad = toRadians(delta_lat)
- let delta_long = long2-long1
- let delta_long_rad = toRadians(delta_long)
-
- let a = (Math.sin(delta_lat_rad/2) * Math.sin(delta_lat_rad/2))
- + (Math.cos(toRadians(lat1)) * Math.cos(toRadians(lat2))
- * Math.sin(delta_long_rad/2)
- * Math.sin(delta_long_rad/2))
- let c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
-
- let distance = EARTH_RADIUS * c;
-
- return distance
- }
-
- _computeTotalTripDistance(latitude: number[], longitude: number[]) {
- if(latitude.length != longitude.length){
- return -1;
- }
-
- let totalDistance = 0;
-
- for(let i = 1; i < latitude.length; i++){
- totalDistance += this._haversineDistance(latitude[i-1], longitude[i-1], latitude[i], longitude[i]);
- }
-
- return Number(totalDistance.toFixed(2));
- }
}
const mapStateToProps = (state: any) => ({
diff --git a/src/website/views/PolarisContainer.tsx b/src/website/views/PolarisContainer.tsx
new file mode 100644
index 000000000..3ebd0e3c3
--- /dev/null
+++ b/src/website/views/PolarisContainer.tsx
@@ -0,0 +1,101 @@
+import React from 'react';
+import { connect } from 'react-redux';
+import CustomAccordion from './components/DropDown/DropDown';
+import Grid from '@mui/material/Grid';
+import { styled } from '@mui/material/styles';
+
+const Container = styled('div')(({ theme }) => ({
+ flexGrow: 1,
+ padding: theme.spacing(2),
+ backgroundColor: '#ecf0f1',
+}));
+
+const TopHeader = styled('div')(({ theme }) => ({
+ backgroundColor: '#2c3e50',
+ color: 'white',
+ padding: theme.spacing(13),
+ display: 'flex',
+ justifyContent: 'flex-start',
+}));
+
+const Title = styled('span')(({ theme }) => ({
+ marginLeft: '700px',
+ fontWeight: 'bold',
+ fontSize: '3.5em',
+}));
+
+const DataSetHeader = styled('div')(({ theme }) => ({
+ marginTop: theme.spacing(2.5),
+ marginBottom: theme.spacing(0),
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+ fontSize: '2em',
+ fontWeight: 'bold',
+ color: 'white',
+ backgroundColor: '#2c3e50',
+ width: '100%',
+ padding: `${theme.spacing(50)}px 0`,
+ }));
+
+class PolarisContainer extends React.Component {
+ render() {
+ const voyageInfo = {
+ image: "./Polaris.png",
+ header: "Polaris",
+ desc: "Long description here...",
+ };
+
+ return (
+
+ {/* Center the grid items */}
+
+
+ {voyageInfo.header}
+
+
+
+
+
+
+
+
+ {voyageInfo.desc}
+
+
+ Downloadable Data Sets
+
+
+
+ Insert Data sets here
+
+
+
+
+ Insert Data sets here
+
+
+
+
+ Insert Data sets here
+
+
+
+
+ Insert Data sets here
+
+
+
+
+ );
+ }
+}
+
+export default connect()(PolarisContainer);
diff --git a/src/website/views/components/BoatCompass/BoatCompass.tsx b/src/website/views/components/BoatCompass/BoatCompass.tsx
deleted file mode 100644
index 0c864681a..000000000
--- a/src/website/views/components/BoatCompass/BoatCompass.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import React from "react";
-import Image from "next/image";
-import { Grid, Paper, Typography } from "@mui/material";
-import SingleValueLine from "../SingleValueLine/SingleValueLine";
-import styles from "./boatcompass.module.css"
-
-interface BoatCompassProps {
- angle: number;
-}
-
-class BoatCompass extends React.Component {
- render() {
- const { angle } = this.props;
-
- return (
-
-
-
- {`${this._rotateBoat(angle).toFixed()}°`}
-
-
-
-
-
- );
- }
-
- _rotateBoat(boatAngle: number) {
- return (boatAngle < 0) ? boatAngle + 360 : boatAngle;
- }
-
- _rotateBoatString(boatAngle: number) {
- return `rotate(${this._rotateBoat(boatAngle)}deg)`;
- }
-}
-
-export default BoatCompass;
diff --git a/src/website/views/components/BoatCompass/boatcompass.module.css b/src/website/views/components/BoatCompass/boatcompass.module.css
deleted file mode 100644
index 2aaa86b21..000000000
--- a/src/website/views/components/BoatCompass/boatcompass.module.css
+++ /dev/null
@@ -1,13 +0,0 @@
-.bottom {
- position: absolute;
-}
-
-.middle {
- position: absolute;
- z-index: 1;
-}
-
-.top {
- position: relative;
- z-index: 1000000000;
-}
diff --git a/src/website/views/components/DropDown/DropDown.tsx b/src/website/views/components/DropDown/DropDown.tsx
new file mode 100644
index 000000000..3fc240419
--- /dev/null
+++ b/src/website/views/components/DropDown/DropDown.tsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import { Accordion, AccordionSummary, AccordionDetails } from '@mui/material';
+import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
+
+function CustomAccordion({ title, children }) {
+ return (
+
+ }
+ aria-controls="panel1-content"
+ id="panel1-header"
+ sx={{
+ backgroundColor: '#3498db',
+ color: 'white',
+ '& .MuiAccordionSummary-expandIconWrapper.Mui-expanded': {
+ transform: 'rotate(180deg)',
+ },
+ '&.Mui-expanded': {
+ minHeight: 48,
+ backgroundColor: '#2980b9',
+ },
+ '&:hover': {
+ backgroundColor: '#2980b9',
+ },
+ }}
+ >
+ {title}
+
+
+ {children}
+
+
+ );
+}
+
+export default CustomAccordion;
diff --git a/src/website/views/components/LineChart/UPlotLineChart.tsx b/src/website/views/components/LineChart/UPlotLineChart.tsx
index 7364d0552..9cd60f5db 100644
--- a/src/website/views/components/LineChart/UPlotLineChart.tsx
+++ b/src/website/views/components/LineChart/UPlotLineChart.tsx
@@ -14,9 +14,6 @@ export interface IUPlotLineChartState {
options: uPlot.Options;
}
-const fmtDate = uPlot.fmtDate("{YYYY}-{MM}-{DD} {h}:{mm}:{ss}{aa}");
-const localTz = new Intl.DateTimeFormat().resolvedOptions().timeZone;
-const tzDate = ts => uPlot.tzDate(new Date(ts * 1e3), localTz);
export default class UPlotLineChartComponent extends React.Component<
IUPlotLineChartProps,
IUPlotLineChartState
@@ -27,36 +24,21 @@ export default class UPlotLineChartComponent extends React.Component<
width: 0,
height: 250,
scales: {
- x: {},
+ x: {
+ time: true,
+ },
y: {},
},
axes: [{}],
series: [
- {
- show: true,
- spanGaps: false,
- label: "Time",
- value: (self, rawValue, xValuesIndex, currentVal) => {
- if (currentVal == null) {
- let xValues = self.data[xValuesIndex];
- let xValue = fmtDate(tzDate(xValues[xValues.length - 1]));
- return `${xValue}`;
- }
- return fmtDate(tzDate(rawValue));
- },
- stroke: 'red',
- width: 1,
- band: true,
- },
+ {},
{
show: true,
spanGaps: false,
label: this.props.label,
- value: (self, rawValue, yValuesIndex, currentVal) => {
- if (currentVal == null) {
- let yValues = self.data[yValuesIndex];
- let yValue = (yValues[yValues.length - 1])?.toFixed(2);
- return `${yValue} ${this.props.unit}`;
+ value: (self, rawValue) => {
+ if (!rawValue) {
+ return `-- ${this.props.unit}`;
}
return rawValue?.toFixed(2) + ` ${this.props.unit}`;
},
diff --git a/src/website/views/components/LineChart/UPlotMultiLineChart.tsx b/src/website/views/components/LineChart/UPlotMultiLineChart.tsx
index f666147d4..37140595f 100644
--- a/src/website/views/components/LineChart/UPlotMultiLineChart.tsx
+++ b/src/website/views/components/LineChart/UPlotMultiLineChart.tsx
@@ -15,9 +15,6 @@ export interface IUPlotMultiLineChartState {
options: uPlot.Options;
}
-const fmtDate = uPlot.fmtDate("{YYYY}-{MM}-{DD} {h}:{mm}:{ss}{aa}");
-const localTz = new Intl.DateTimeFormat().resolvedOptions().timeZone;
-const tzDate = ts => uPlot.tzDate(new Date(ts * 1e3), localTz);
export default class UPlotMultiLineChartComponent extends React.Component<
IUPlotMultiLineChartProps,
IUPlotMultiLineChartState
@@ -28,36 +25,21 @@ export default class UPlotMultiLineChartComponent extends React.Component<
width: 0,
height: 250,
scales: {
- x: {},
+ x: {
+ time: true,
+ },
y: {},
},
axes: [{}],
series: [
- {
- show: true,
- spanGaps: false,
- label: "Time",
- value: (self, rawValue, xValuesIndex, currentVal) => {
- if (currentVal == null) {
- let xValues = self.data[xValuesIndex];
- let xValue = fmtDate(tzDate(xValues[xValues.length - 1]));
- return `${xValue}`;
- }
- return fmtDate(tzDate(rawValue));
- },
- stroke: 'red',
- width: 1,
- band: true,
- },
+ {},
{
show: true,
spanGaps: false,
label: this.props.labelOne,
- value: (self, rawValue, yValuesIndex, currentVal) => {
- if (currentVal == null) {
- let yValues = self.data[yValuesIndex]
- let yValue = (yValues[yValues.length - 1])?.toFixed(2)
- return `${yValue} ${this.props.unit}`
+ value: (self, rawValue) => {
+ if (!rawValue) {
+ return `-- ${this.props.unit}`;
}
return rawValue?.toFixed(2) + ` ${this.props.unit}`;
},
@@ -69,11 +51,9 @@ export default class UPlotMultiLineChartComponent extends React.Component<
show: true,
spanGaps: false,
label: this.props.labelTwo,
- value: (self, rawValue, yValuesIndex, currentVal) => {
- if (currentVal == null) {
- let yValues = self.data[yValuesIndex]
- let yValue = (yValues[yValues.length - 1])?.toFixed(2)
- return `${yValue} ${this.props.unit}`
+ value: (self, rawValue) => {
+ if (!rawValue) {
+ return `-- ${this.props.unit}`;
}
return rawValue?.toFixed(2) + ` ${this.props.unit}`;
},
diff --git a/src/website/views/components/SingleValueChart/SingleValueChart.tsx b/src/website/views/components/SingleValueChart/SingleValueChart.tsx
deleted file mode 100644
index 83f1803b5..000000000
--- a/src/website/views/components/SingleValueChart/SingleValueChart.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react';
-import { Typography } from '@mui/material';
-import Card from '@mui/material/Card';
-import CardContent from '@mui/material/CardContent';
-import styles from './singlevaluechart.module.css'
-
-
-interface SingleValueChartProps {
- title: string;
- data: number | string | undefined;
- unit: string;
-}
-
-class SingleValueChart extends React.Component {
- render() {
- const { title, data, unit } = this.props;
-
- return (
-
-
-
- {`${title}`}
-
-
- {(data) ? `${data} ${unit}` : `-- ${unit}`}
-
-
-
- );
- }
-}
-
-export default SingleValueChart;
diff --git a/src/website/views/components/SingleValueChart/singlevaluechart.module.css b/src/website/views/components/SingleValueChart/singlevaluechart.module.css
deleted file mode 100644
index a88cd0719..000000000
--- a/src/website/views/components/SingleValueChart/singlevaluechart.module.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.card{
- display: block;
- width: 15vw;
- height: 13vh;
-}
diff --git a/src/website/views/components/SingleValueLine/SingleValueLine.tsx b/src/website/views/components/SingleValueLine/SingleValueLine.tsx
deleted file mode 100644
index 85c825c5b..000000000
--- a/src/website/views/components/SingleValueLine/SingleValueLine.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from 'react';
-import { Grid, Paper, Typography } from '@mui/material';
-
-
-interface SingleValueLineProps {
- title: string;
- data: number | string | undefined;
- unit: string;
-}
-
-class SingleValueLine extends React.Component {
- render() {
- const { title, data, unit } = this.props;
-
- return (
-
-
-
-
- {(data) ? `${title}: ${data} ${unit}` : `-- ${unit}`}
-
-
-
-
- );
- }
-}
-
-export default SingleValueLine;
diff --git a/src/website/views/components/SingleValueLine/singlevalueline.module.css b/src/website/views/components/SingleValueLine/singlevalueline.module.css
deleted file mode 100644
index 99b7ad42c..000000000
--- a/src/website/views/components/SingleValueLine/singlevalueline.module.css
+++ /dev/null
@@ -1,17 +0,0 @@
-.parent {
- position: relative;
-}
-
-.topRight {
- position: absolute;
- z-index: 10000000000;
- top: 0.6vh;
- right: 0.3vw;
-}
-
-.bottomRight {
- position: absolute;
- z-index: 10000000000;
- bottom: 3.1vh;
- right: 0.5vw;
-}
diff --git a/src/website/views/components/VoyagePageTemplate/VoyagePageTemplate.tsx b/src/website/views/components/VoyagePageTemplate/VoyagePageTemplate.tsx
new file mode 100644
index 000000000..d3ad68bba
--- /dev/null
+++ b/src/website/views/components/VoyagePageTemplate/VoyagePageTemplate.tsx
@@ -0,0 +1,79 @@
+import React from 'react';
+function VoyagePageTemplate({ image, header, desc }) {
+ const containerStyle = {
+ display: 'flex',
+ flexDirection: 'column',
+ backgroundColor: '#3498db',
+ color: 'white',
+ fontFamily: 'Verdana, Geneva, sans-serif',
+ width: '100%',
+ height: '100%',
+ boxSizing: 'border-box',
+ position: 'relative',
+ };
+
+ const headerStyle = {
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ padding: '20px',
+ width: 'auto',
+ backgroundColor: '#2c3e50',
+ minHeight: '300px',
+ position: 'relative'
+ };
+
+ const imageStyle = {
+ width: '40%',
+ height: '200%',
+ position: 'absolute',
+ top: '20%',
+ left: '25%',
+ transform: 'translateX(-50%)',
+ };
+
+ const headerTextStyle = {
+ fontSize: '2.5em',
+ fontWeight: 'bold',
+ margin: 1,
+ zIndex: 1,
+ position: 'relative',
+ right: '-10%'
+ };
+
+ const descBoxStyle = {
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: '20px',
+ backgroundColor: '#ecf0f1',
+ color: '#2c3e50',
+ fontSize: '1em',
+ width: '65%',
+ boxSizing: 'border-box',
+ marginTop: '20px',
+ marginLeft: 'auto',
+ marginRight: 'auto',
+ };
+
+ const descStyle = {
+ textAlign: 'center',
+ width: '100%',
+ fontSize: '0.9em',
+ wordBreak: 'break-word',
+ };
+ return (
+
+
+
+
+
{header}
+
+
+
+ );
+}
+
+export default VoyagePageTemplate;