diff --git a/package-lock.json b/package-lock.json
index 5a51b94cb..d9e1b694a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,10 +13,10 @@
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@minoru/react-dnd-treeview": "^3.5.4",
- "@mui/icons-material": "^7.3.5",
- "@mui/lab": "^7.0.0-beta.17",
- "@mui/material": "^7.0.2",
- "@mui/system": "^7.0.2",
+ "@mui/icons-material": "^9.5.0",
+ "@mui/lab": "9.0.0-beta.10",
+ "@mui/material": "^9.5.0",
+ "@mui/system": "^9.5.0",
"@mui/x-data-grid": "^9.14.0",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0",
@@ -35,7 +35,7 @@
"jsroot": "^7.10.3",
"keycloak-js": "^26.2.1",
"ky": "^2.2.0",
- "material-ui-popup-state": "^5.3.6",
+ "material-ui-popup-state": "^5.3.7",
"notistack": "^3.0.2",
"object-hash": "^3.0.0",
"pyodide": "^0.29.0",
@@ -4036,9 +4036,9 @@
}
},
"node_modules/@mui/core-downloads-tracker": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.5.tgz",
- "integrity": "sha512-kOLwlcDPnVz2QMhiBv0OQ8le8hTCqKM9cRXlfVPL91l3RGeOsxrIhNRsUt3Xb8wb+pTVUolW+JXKym93vRKxCw==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-9.5.0.tgz",
+ "integrity": "sha512-PErEpl3Lp+1ZqWYKI7GQU8XSiciAFmLbUAZ7IoaUL598HLy1UAFuEUMEJu8yAS1v8vkXYzWprMVZzky4UwXoOA==",
"license": "MIT",
"funding": {
"type": "opencollective",
@@ -4046,12 +4046,12 @@
}
},
"node_modules/@mui/icons-material": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.5.tgz",
- "integrity": "sha512-LciL1GLMZ+VlzyHAALSVAR22t8IST4LCXmljcUSx2NOutgO2XnxdIp8ilFbeNf9wpo0iUFbAuoQcB7h+HHIf3A==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-9.5.0.tgz",
+ "integrity": "sha512-dahtVaqnRUIBgaZ4WC9EdP+LgJ5d2rslASYIX+nDFG6+ssUiM11jQ+Gd1wH8vhUGoNA9ES40MYics5BI8zJFXQ==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.28.4"
+ "@babel/runtime": "^7.29.7 || ^8.0.5"
},
"engines": {
"node": ">=14.0.0"
@@ -4061,7 +4061,7 @@
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
- "@mui/material": "^7.3.5",
+ "@mui/material": "^9.5.0",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
@@ -4072,15 +4072,15 @@
}
},
"node_modules/@mui/lab": {
- "version": "7.0.0-beta.17",
- "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-7.0.0-beta.17.tgz",
- "integrity": "sha512-H8tSINm6Xgbi7o49MplAwks4tAEE6SpFNd9l7n4NURl0GSpOv0CZvgXKSJt4+6TmquDhE7pomHpHWJiVh/2aCg==",
+ "version": "9.0.0-beta.10",
+ "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-9.0.0-beta.10.tgz",
+ "integrity": "sha512-XLjMJRiOQfD2p5YIorNuymI3CZqrAIAZJsaaeoomMEwAp3p1VwpSmR072VZZr+PfB1r2aUvouxmCXQNGHyw4qw==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.28.3",
- "@mui/system": "^7.3.2",
- "@mui/types": "^7.4.6",
- "@mui/utils": "^7.3.2",
+ "@babel/runtime": "^7.29.7 || ^8.0.5",
+ "@mui/system": "^9.5.0",
+ "@mui/types": "^9.5.0",
+ "@mui/utils": "^9.5.0",
"clsx": "^2.1.1",
"prop-types": "^15.8.1"
},
@@ -4094,8 +4094,8 @@
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
- "@mui/material": "^7.3.2",
- "@mui/material-pigment-css": "^7.3.2",
+ "@mui/material": "^9.5.0",
+ "@mui/material-pigment-css": "^9.5.0",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -4116,22 +4116,23 @@
}
},
"node_modules/@mui/material": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.5.tgz",
- "integrity": "sha512-8VVxFmp1GIm9PpmnQoCoYo0UWHoOrdA57tDL62vkpzEgvb/d71Wsbv4FRg7r1Gyx7PuSo0tflH34cdl/NvfHNQ==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-9.5.0.tgz",
+ "integrity": "sha512-QgqvdVjZoKxP8E8SBxYY6LrdV+kw00moXweZQWBbMMdifPKZAGfUaaXhGKIca6fjKnCL6HJIe/AWWCpqNvyHVw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/runtime": "^7.28.4",
- "@mui/core-downloads-tracker": "^7.3.5",
- "@mui/system": "^7.3.5",
- "@mui/types": "^7.4.8",
- "@mui/utils": "^7.3.5",
+ "@babel/runtime": "^7.29.7 || ^8.0.5",
+ "@mui/core-downloads-tracker": "^9.5.0",
+ "@mui/system": "^9.5.0",
+ "@mui/types": "^9.5.0",
+ "@mui/utils": "^9.5.0",
"@popperjs/core": "^2.11.8",
"@types/react-transition-group": "^4.4.12",
"clsx": "^2.1.1",
- "csstype": "^3.1.3",
+ "csstype": "^3.2.3",
"prop-types": "^15.8.1",
- "react-is": "^19.2.0",
+ "react-is": "^19.3.0",
"react-transition-group": "^4.4.5"
},
"engines": {
@@ -4144,7 +4145,7 @@
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
- "@mui/material-pigment-css": "^7.3.5",
+ "@mui/material-pigment-css": "^9.5.0",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -4165,13 +4166,13 @@
}
},
"node_modules/@mui/private-theming": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.5.tgz",
- "integrity": "sha512-cTx584W2qrLonwhZLbEN7P5pAUu0nZblg8cLBlTrZQ4sIiw8Fbvg7GvuphQaSHxPxrCpa7FDwJKtXdbl2TSmrA==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-9.5.0.tgz",
+ "integrity": "sha512-UHZKySlr4ZJeA5HEhe/Tq1fhsR5573ViKYn7JV80dCVJtgqRQIplRSer1DHPg2Yi22llX7QRhgM0Vtrx4kZHSA==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.28.4",
- "@mui/utils": "^7.3.5",
+ "@babel/runtime": "^7.29.7 || ^8.0.5",
+ "@mui/utils": "^9.5.0",
"prop-types": "^15.8.1"
},
"engines": {
@@ -4192,16 +4193,16 @@
}
},
"node_modules/@mui/styled-engine": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.5.tgz",
- "integrity": "sha512-zbsZ0uYYPndFCCPp2+V3RLcAN6+fv4C8pdwRx6OS3BwDkRCN8WBehqks7hWyF3vj1kdQLIWrpdv/5Y0jHRxYXQ==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-9.5.0.tgz",
+ "integrity": "sha512-IX1ceHnZ0bJgzJRWO/Ayl4ME1rNmpWVYwV28yb089UAMR17rJkV1qfr7ApsWQXXPi1oi+2JapJrWQAiAnTlJHQ==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.28.4",
+ "@babel/runtime": "^7.29.7 || ^8.0.5",
"@emotion/cache": "^11.14.0",
"@emotion/serialize": "^1.3.3",
"@emotion/sheet": "^1.4.0",
- "csstype": "^3.1.3",
+ "csstype": "^3.2.3",
"prop-types": "^15.8.1"
},
"engines": {
@@ -4226,18 +4227,19 @@
}
},
"node_modules/@mui/system": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.5.tgz",
- "integrity": "sha512-yPaf5+gY3v80HNkJcPi6WT+r9ebeM4eJzrREXPxMt7pNTV/1eahyODO4fbH3Qvd8irNxDFYn5RQ3idHW55rA6g==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-9.5.0.tgz",
+ "integrity": "sha512-OZuAwvoiaaHpvn0a540VH1DUwwmojJubGfNmO2g+nb2ybNDP4/gF7t7aA6AMduELSuJ5yxwlzyFvUO3CfLv1Yg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/runtime": "^7.28.4",
- "@mui/private-theming": "^7.3.5",
- "@mui/styled-engine": "^7.3.5",
- "@mui/types": "^7.4.8",
- "@mui/utils": "^7.3.5",
+ "@babel/runtime": "^7.29.7 || ^8.0.5",
+ "@mui/private-theming": "^9.5.0",
+ "@mui/styled-engine": "^9.5.0",
+ "@mui/types": "^9.5.0",
+ "@mui/utils": "^9.5.0",
"clsx": "^2.1.1",
- "csstype": "^3.1.3",
+ "csstype": "^3.2.3",
"prop-types": "^15.8.1"
},
"engines": {
@@ -4266,12 +4268,12 @@
}
},
"node_modules/@mui/types": {
- "version": "7.4.8",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.8.tgz",
- "integrity": "sha512-ZNXLBjkPV6ftLCmmRCafak3XmSn8YV0tKE/ZOhzKys7TZXUiE0mZxlH8zKDo6j6TTUaDnuij68gIG+0Ucm7Xhw==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-9.5.0.tgz",
+ "integrity": "sha512-O0S6xS80qEQqW2CYNrd4GlBEQ1xpMOHZ5b4zO/DaLu6NZmtthM6smEg0Gz/u9gX5vL+8NB3EiBIxmxSCcG590Q==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.28.4"
+ "@babel/runtime": "^7.29.7 || ^8.0.5"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -4283,17 +4285,17 @@
}
},
"node_modules/@mui/utils": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.5.tgz",
- "integrity": "sha512-jisvFsEC3sgjUjcPnR4mYfhzjCDIudttSGSbe1o/IXFNu0kZuR+7vqQI0jg8qtcVZBHWrwTfvAZj9MNMumcq1g==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.5.0.tgz",
+ "integrity": "sha512-8m0LfSgE2pj58znY3kZ+anwRKbnBkcu/7AJPA8L/77wEjN0QnpX4/zRAccyplp1VEUnMsUBADeTRin5Mkf7epA==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.28.4",
- "@mui/types": "^7.4.8",
+ "@babel/runtime": "^7.29.7 || ^8.0.5",
+ "@mui/types": "^9.5.0",
"@types/prop-types": "^15.7.15",
"clsx": "^2.1.1",
"prop-types": "^15.8.1",
- "react-is": "^19.2.0"
+ "react-is": "^19.3.0"
},
"engines": {
"node": ">=14.0.0"
@@ -4351,53 +4353,6 @@
}
}
},
- "node_modules/@mui/x-data-grid/node_modules/@mui/types": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-9.4.0.tgz",
- "integrity": "sha512-13DH0Oniua4WmGqeYbQAZqmiN7r4nfd0zwIoGJ5QeJwyIHgEmf+LkRw/jV1HZb6AiUoHX8Oxf4xgalq3vYHcIw==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.29.7"
- },
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@mui/x-data-grid/node_modules/@mui/utils": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.4.0.tgz",
- "integrity": "sha512-WkzY8uYtqUDyGKPShrRQRBomfMQHddlsyKu/gRRESYO24tDPD2z0xRE8CBoUsWqpBa+YrFs9KixiS7kQRjsPAQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.29.7",
- "@mui/types": "^9.4.0",
- "@types/prop-types": "^15.7.15",
- "clsx": "^2.1.1",
- "prop-types": "^15.8.1",
- "react-is": "^19.2.8"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mui-org"
- },
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@mui/x-internals": {
"version": "9.14.0",
"resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-9.14.0.tgz",
@@ -4422,53 +4377,6 @@
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/@mui/x-internals/node_modules/@mui/types": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-9.4.0.tgz",
- "integrity": "sha512-13DH0Oniua4WmGqeYbQAZqmiN7r4nfd0zwIoGJ5QeJwyIHgEmf+LkRw/jV1HZb6AiUoHX8Oxf4xgalq3vYHcIw==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.29.7"
- },
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@mui/x-internals/node_modules/@mui/utils": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.4.0.tgz",
- "integrity": "sha512-WkzY8uYtqUDyGKPShrRQRBomfMQHddlsyKu/gRRESYO24tDPD2z0xRE8CBoUsWqpBa+YrFs9KixiS7kQRjsPAQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.29.7",
- "@mui/types": "^9.4.0",
- "@types/prop-types": "^15.7.15",
- "clsx": "^2.1.1",
- "prop-types": "^15.8.1",
- "react-is": "^19.2.8"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mui-org"
- },
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@mui/x-virtualizer": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/@mui/x-virtualizer/-/x-virtualizer-0.7.2.tgz",
@@ -4492,53 +4400,6 @@
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/@mui/x-virtualizer/node_modules/@mui/types": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-9.4.0.tgz",
- "integrity": "sha512-13DH0Oniua4WmGqeYbQAZqmiN7r4nfd0zwIoGJ5QeJwyIHgEmf+LkRw/jV1HZb6AiUoHX8Oxf4xgalq3vYHcIw==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.29.7"
- },
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@mui/x-virtualizer/node_modules/@mui/utils": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.4.0.tgz",
- "integrity": "sha512-WkzY8uYtqUDyGKPShrRQRBomfMQHddlsyKu/gRRESYO24tDPD2z0xRE8CBoUsWqpBa+YrFs9KixiS7kQRjsPAQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.29.7",
- "@mui/types": "^9.4.0",
- "@types/prop-types": "^15.7.15",
- "clsx": "^2.1.1",
- "prop-types": "^15.8.1",
- "react-is": "^19.2.8"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mui-org"
- },
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@@ -16165,9 +16026,9 @@
}
},
"node_modules/material-ui-popup-state": {
- "version": "5.3.6",
- "resolved": "https://registry.npmjs.org/material-ui-popup-state/-/material-ui-popup-state-5.3.6.tgz",
- "integrity": "sha512-tGpq417auecyK9iKMGxSQfyv6pwg0Wii2Isi9RuL92YDDkdnXlorl5c3+S4Zg8MH6Hk4NUa/5Y9PPEWgKakzOw==",
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/material-ui-popup-state/-/material-ui-popup-state-5.3.7.tgz",
+ "integrity": "sha512-3ppRgNEfJ4pSEmVnRYeDDi/8L6RSGnsBrCP+WikozCeF7E21DyKAm80EOtBbeiOTooPCEQoeqrQ32uDKW2VYcw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
@@ -16179,9 +16040,9 @@
"node": ">=16"
},
"peerDependencies": {
- "@mui/material": "^5.0.0 || ^6.0.0 || ^7.0.0",
+ "@mui/material": ">=5 <10",
"@types/react": "^16.8.0 || ^17 || ^18 || ^19",
- "react": "^16.8.0 || ^17 || ^18 || ^19"
+ "react": ">=16.8.0 <20"
},
"peerDependenciesMeta": {
"@types/react": {
diff --git a/package.json b/package.json
index 9f5a6d71c..5125e21e2 100644
--- a/package.json
+++ b/package.json
@@ -11,10 +11,10 @@
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@minoru/react-dnd-treeview": "^3.5.4",
- "@mui/icons-material": "^7.3.5",
- "@mui/lab": "^7.0.0-beta.17",
- "@mui/material": "^7.0.2",
- "@mui/system": "^7.0.2",
+ "@mui/icons-material": "^9.5.0",
+ "@mui/lab": "9.0.0-beta.10",
+ "@mui/material": "^9.5.0",
+ "@mui/system": "^9.5.0",
"@mui/x-data-grid": "^9.14.0",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0",
@@ -33,7 +33,7 @@
"jsroot": "^7.10.3",
"keycloak-js": "^26.2.1",
"ky": "^2.2.0",
- "material-ui-popup-state": "^5.3.6",
+ "material-ui-popup-state": "^5.3.7",
"notistack": "^3.0.2",
"object-hash": "^3.0.0",
"pyodide": "^0.29.0",
diff --git a/src/App.tsx b/src/App.tsx
index 6b6129c1b..0f3446e29 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -59,6 +59,8 @@ function ServiceTree({ services, children }: { services: ReactElement[]; childre
}, children);
}
+const ROVING_KEYS = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];
+
function App() {
const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
const theme = useMemo(
@@ -88,6 +90,32 @@ function App() {
dimensions: {
navDrawerWidth: 200
},
+ components: {
+ MuiToggleButton: {
+ defaultProps: {
+ tabIndex: 0,
+ onKeyDown: event => {
+ if (ROVING_KEYS.includes(event.key)) event.stopPropagation();
+ }
+ }
+ },
+ MuiAutocomplete: {
+ defaultProps: {
+ onMouseDownCapture: event => {
+ const target = event.target;
+
+ if (
+ event.button !== 0 &&
+ target instanceof HTMLInputElement &&
+ target.classList.contains('MuiAutocomplete-input')
+ )
+ target.dispatchEvent(
+ new MouseEvent('mousedown', { bubbles: true, button: 0 })
+ );
+ }
+ }
+ }
+ },
cssVariables: true
}),
[prefersDarkMode]
diff --git a/src/JsRoot/GraphData.tsx b/src/JsRoot/GraphData.tsx
index ea9c8796f..ca1366ad7 100644
--- a/src/JsRoot/GraphData.tsx
+++ b/src/JsRoot/GraphData.tsx
@@ -142,7 +142,9 @@ function Section({ title, children }: SectionProps) {
<>
+ sx={{
+ fontWeight: 'bold'
+ }}>
{title}:
{children}
diff --git a/src/ThreeEditor/components/Dialog/OpenFileDialog.tsx b/src/ThreeEditor/components/Dialog/OpenFileDialog.tsx
index b07bc8ee2..9ee14fb6b 100644
--- a/src/ThreeEditor/components/Dialog/OpenFileDialog.tsx
+++ b/src/ThreeEditor/components/Dialog/OpenFileDialog.tsx
@@ -1,4 +1,4 @@
-import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';
+import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutlineOutlined';
import { TabContext, TabPanel } from '@mui/lab';
import { Box, Button, IconButton, TextField, Tooltip } from '@mui/material';
import { ChangeEvent, SyntheticEvent, useCallback, useMemo, useState } from 'react';
diff --git a/src/ThreeEditor/components/Editor/EditorToolbar.tsx b/src/ThreeEditor/components/Editor/EditorToolbar.tsx
index cd78988e6..9db965171 100644
--- a/src/ThreeEditor/components/Editor/EditorToolbar.tsx
+++ b/src/ThreeEditor/components/Editor/EditorToolbar.tsx
@@ -91,7 +91,9 @@ export function EditorToolbar({ editor, sx }: EditorToolbarProps) {
{toolButtons.map(({ label, icon, value, disabled }, idx) => (
+ sx={{
+ mr: 1
+ }}>
{tool === value ? (
+ sx={{
+ textTransform: 'none',
+ color: theme.palette.text.primary
+ }}>
{title}
{saving && (
diff --git a/src/ThreeEditor/components/Sidebar/EditorSidebar.tsx b/src/ThreeEditor/components/Sidebar/EditorSidebar.tsx
index fd6459d96..cd622ac29 100644
--- a/src/ThreeEditor/components/Sidebar/EditorSidebar.tsx
+++ b/src/ThreeEditor/components/Sidebar/EditorSidebar.tsx
@@ -98,8 +98,11 @@ export function EditorSidebar(props: EditorSidebarProps) {
<>
{editor.selected && (
+ sx={{
+ fontSize: '1rem',
+ marginTop: '1rem',
+ marginBottom: '.5rem'
+ }}>
Details
)}
@@ -112,8 +115,10 @@ export function EditorSidebar(props: EditorSidebarProps) {
+ sx={{
+ fontSize: '1rem',
+ marginBottom: '.5rem'
+ }}>
Beam
+ sx={{
+ fontSize: '1rem',
+ marginBottom: '.5rem'
+ }}>
Physics
editor.selectById(object.id)}
- width='100%'
+ {...bindContextMenu(popupState)}
sx={{
+ width: '100%',
cursor: 'pointer'
- }}
- {...bindContextMenu(popupState)}>
+ }}>
-
multiple={true}
onChange={(_, value) => {
setValueCommand(
diff --git a/src/ThreeEditor/components/Sidebar/properties/category/ObjectMaterial.tsx b/src/ThreeEditor/components/Sidebar/properties/category/ObjectMaterial.tsx
index 952138fc4..b177afbe3 100644
--- a/src/ThreeEditor/components/Sidebar/properties/category/ObjectMaterial.tsx
+++ b/src/ThreeEditor/components/Sidebar/properties/category/ObjectMaterial.tsx
@@ -161,8 +161,10 @@ export function ObjectMaterial(props: { editor: YaptideEditor; object: Object3D
+ sx={{
+ justifyContent: 'center',
+ alignItems: 'center'
+ }}>
{editorPhysic.stoppingPowerTable}
diff --git a/src/ThreeEditor/components/Sidebar/properties/category/ScoringQuantityMaterialOverrides.tsx b/src/ThreeEditor/components/Sidebar/properties/category/ScoringQuantityMaterialOverrides.tsx
index d8a81440a..d2f496802 100644
--- a/src/ThreeEditor/components/Sidebar/properties/category/ScoringQuantityMaterialOverrides.tsx
+++ b/src/ThreeEditor/components/Sidebar/properties/category/ScoringQuantityMaterialOverrides.tsx
@@ -133,8 +133,10 @@ export function ScoringQuantityMaterialOverrides(props: {
+ sx={{
+ justifyContent: 'center',
+ alignItems: 'center'
+ }}>
{editorPhysic.stoppingPowerTable}
diff --git a/src/ThreeEditor/components/Sidebar/properties/fields/SourceFileField.tsx b/src/ThreeEditor/components/Sidebar/properties/fields/SourceFileField.tsx
index 99d0083b7..476b4812c 100644
--- a/src/ThreeEditor/components/Sidebar/properties/fields/SourceFileField.tsx
+++ b/src/ThreeEditor/components/Sidebar/properties/fields/SourceFileField.tsx
@@ -51,8 +51,10 @@ export function SourceFileDefinitionField(props: {
+ direction='row'
+ sx={{
+ gap: 1
+ }}>
+
+ {SimulatorsDescriptions[simulator].name}
+
}
secondary={
-
+
{SimulatorsDescriptions[simulator].description}
}
@@ -108,8 +116,10 @@ export default function SimulatorControls(props: SimulationControlsProps) {
<>
+ sx={{
+ userSelect: 'none',
+ color: simulatorReady ? 'primary.main' : theme.palette.grey['600']
+ }}>
{simulatorReady
? 'Connected'
: demoMode
@@ -130,9 +140,11 @@ export default function SimulatorControls(props: SimulationControlsProps) {
{yaptideEditor ? (
+ sx={{
+ textTransform: 'none',
+ fontSize: 14,
+ width: '100%'
+ }}>
{SimulatorsDescriptions[yaptideEditor.contextManager.currentSimulator].name}
) : (
diff --git a/src/WrapperApp/components/InputEditor/InputFilesEditor.tsx b/src/WrapperApp/components/InputEditor/InputFilesEditor.tsx
index 8922c2601..bc6baf86d 100644
--- a/src/WrapperApp/components/InputEditor/InputFilesEditor.tsx
+++ b/src/WrapperApp/components/InputEditor/InputFilesEditor.tsx
@@ -181,8 +181,8 @@ export function InputFilesEditor(props: InputFilesEditorProps) {
)}
{isLargeFile && (
+ sx={{
+ gap: '1rem',
+ alignItems: 'center'
+ }}>
Url on server:
+ sx={{
+ fontWeight: 'bold'
+ }}>
{page.resultsUrl}
diff --git a/src/WrapperApp/components/Results/ResultsPanel.tsx b/src/WrapperApp/components/Results/ResultsPanel.tsx
index 5ed575aca..b55b57aa0 100644
--- a/src/WrapperApp/components/Results/ResultsPanel.tsx
+++ b/src/WrapperApp/components/Results/ResultsPanel.tsx
@@ -118,7 +118,9 @@ function ResultsPanel(props: { simulation: FullSimulationData | undefined }) {
gutterBottom
variant='h5'
component='div'
- lineHeight={2}>
+ sx={{
+ lineHeight: 2
+ }}>
{title}
diff --git a/src/WrapperApp/components/Results/ResultsTable.tsx b/src/WrapperApp/components/Results/ResultsTable.tsx
index e54ed6272..f261039e4 100644
--- a/src/WrapperApp/components/Results/ResultsTable.tsx
+++ b/src/WrapperApp/components/Results/ResultsTable.tsx
@@ -106,8 +106,10 @@ export default function TablePage0D(props: { estimator: EstimatorResults }) {
+ sx={{
+ alignItems: 'center',
+ marginLeft: '.5rem'
+ }}>
Unit: Auto
}
checkedIcon={}
+ slotProps={{
+ input: { 'aria-labelledby': 'useCommandLineOptions' }
+ }}
/>
)}
// Value is rendered as chips below the input
- renderTags={() => null}
+ renderValue={() => null}
/>
+ sx={{
+ color: 'text.secondary'
+ }}>
Checking cache status...
@@ -199,8 +201,10 @@ function CacheStatusIndicator() {
title={`Browser storage: ${storageEstimate.usedMB.toFixed(0)} MB used of ${storageEstimate.quotaMB.toFixed(0)} MB (${storageEstimate.percentUsed.toFixed(1)}%)`}>
+ sx={{
+ color: 'text.secondary',
+ flexGrow: 1
+ }}>
{cachedCount > 0 && `${storageEstimate.usedMB.toFixed(0)} MB used`}
{!allCached &&
(cachedCount > 0
@@ -245,9 +249,12 @@ export function Geant4DatasetDownloadSelector(props: {
{geant4DatasetType === Geant4DatasetsType.FULL ? (
<>
+ sx={{
+ textTransform: 'none',
+ fontSize: 11,
+ flex: 1,
+ mr: 1
+ }}>
FULL: Speed up the simulation by downloading Geant4 datasets.
+ sx={{
+ textTransform: 'none',
+ fontSize: 11,
+ flex: 1,
+ mr: 1
+ }}>
PARTIAL: Longer simulation time because of downloading thousands
of files on-the-fly. Smaller total download size.
@@ -326,8 +336,10 @@ export function Geant4Datasets() {
expandIcon={}
onClick={() => setOpen(!open)}>
+ sx={{
+ textTransform: 'none',
+ fontSize: 16
+ }}>
Dataset Download{' '}
{geant4DownloadManagerState === DownloadManagerStatus.FINISHED ? '(done)' : ''}
diff --git a/src/WrapperApp/components/Simulation/RecentSimulations.tsx b/src/WrapperApp/components/Simulation/RecentSimulations.tsx
index 8d6f956ce..1a2782f98 100644
--- a/src/WrapperApp/components/Simulation/RecentSimulations.tsx
+++ b/src/WrapperApp/components/Simulation/RecentSimulations.tsx
@@ -236,8 +236,10 @@ export default function RecentSimulations() {
}}>
+ sx={{
+ textTransform: 'none',
+ fontSize: 16
+ }}>
Last 5 simulations
diff --git a/src/WrapperApp/components/Simulation/RunSimulationForm.tsx b/src/WrapperApp/components/Simulation/RunSimulationForm.tsx
index 55d7013df..4f29196c8 100644
--- a/src/WrapperApp/components/Simulation/RunSimulationForm.tsx
+++ b/src/WrapperApp/components/Simulation/RunSimulationForm.tsx
@@ -319,8 +319,10 @@ export function RunSimulationForm({
}}>
+ sx={{
+ textTransform: 'none',
+ fontSize: 16
+ }}>
Run new simulation
diff --git a/src/WrapperApp/components/Simulation/RunSimulationPanel.tsx b/src/WrapperApp/components/Simulation/RunSimulationPanel.tsx
index fa6d56b28..44f30e4c4 100644
--- a/src/WrapperApp/components/Simulation/RunSimulationPanel.tsx
+++ b/src/WrapperApp/components/Simulation/RunSimulationPanel.tsx
@@ -36,8 +36,10 @@ export default function RunSimulationPanel(props: RunSimulationPanelProps) {
sx={{ margin: theme.spacing(1), height: '100%' }}>
+ sx={{
+ textTransform: 'none',
+ fontSize: 16
+ }}>
Run new simulation
@@ -60,7 +62,9 @@ export default function RunSimulationPanel(props: RunSimulationPanelProps) {
Demo Mode
+ sx={{
+ textAlign: 'center'
+ }}>
Running{' '}
{yaptideEditor &&
SimulatorNames.get(
@@ -84,7 +88,9 @@ export default function RunSimulationPanel(props: RunSimulationPanelProps) {
+ sx={{
+ textAlign: 'center'
+ }}>
Note that you can still use Geant4.
>
@@ -98,7 +104,9 @@ export default function RunSimulationPanel(props: RunSimulationPanelProps) {
Login required
+ sx={{
+ textAlign: 'center'
+ }}>
Running{' '}
{yaptideEditor &&
SimulatorNames.get(
diff --git a/src/__tests__/FlukaConverter.test.ts b/src/__tests__/FlukaConverter.test.ts
index 098e71efb..d63ef32bf 100644
--- a/src/__tests__/FlukaConverter.test.ts
+++ b/src/__tests__/FlukaConverter.test.ts
@@ -99,7 +99,7 @@ describe('Fluka Converter', () => {
const loadFileDialog = await driver.wait(
until.elementLocated(
By.xpath(
- `//div[@role = 'dialog' and @aria-labelledby = '${loadFileTitleId}' and @aria-describedby = '${loadFileContentId}']`
+ `//div[(@role = 'dialog' or @role = 'alertdialog') and @aria-labelledby = '${loadFileTitleId}' and @aria-describedby = '${loadFileContentId}']`
)
),
10_000
diff --git a/src/__tests__/Geant4Converter.test.ts b/src/__tests__/Geant4Converter.test.ts
index 300b48c47..25dcc15c6 100644
--- a/src/__tests__/Geant4Converter.test.ts
+++ b/src/__tests__/Geant4Converter.test.ts
@@ -99,7 +99,7 @@ describe('Geant4 Converter', () => {
const loadFileDialog = await driver.wait(
until.elementLocated(
By.xpath(
- `//div[@role = 'dialog' and @aria-labelledby = '${loadFileTitleId}' and @aria-describedby = '${loadFileContentId}']`
+ `//div[(@role = 'dialog' or @role = 'alertdialog') and @aria-labelledby = '${loadFileTitleId}' and @aria-describedby = '${loadFileContentId}']`
)
),
10_000
diff --git a/src/__tests__/ShieldhitConverter.test.ts b/src/__tests__/ShieldhitConverter.test.ts
index 4dcc37f1e..9afab75d3 100644
--- a/src/__tests__/ShieldhitConverter.test.ts
+++ b/src/__tests__/ShieldhitConverter.test.ts
@@ -104,7 +104,7 @@ describe('ShieldhitConverter', () => {
const loadFileDialog = await driver.wait(
until.elementLocated(
By.xpath(
- `//div[@role = 'dialog' and @aria-labelledby = '${loadFileTitleId}' and @aria-describedby = '${loadFileContentId}']`
+ `//div[(@role = 'dialog' or @role = 'alertdialog') and @aria-labelledby = '${loadFileTitleId}' and @aria-describedby = '${loadFileContentId}']`
)
),
10_000
diff --git a/src/__tests__/TopasConverter.test.ts b/src/__tests__/TopasConverter.test.ts
index f85e50d44..12954989b 100644
--- a/src/__tests__/TopasConverter.test.ts
+++ b/src/__tests__/TopasConverter.test.ts
@@ -64,7 +64,9 @@ describe('TopasConverter', () => {
const openProjectWidget = await driver.wait(
until.elementLocated(
- By.xpath(`//div[@role = 'dialog' and @aria-labelledby = '${openProjectTitleId}']`)
+ By.xpath(
+ `//div[(@role = 'dialog' or @role = 'alertdialog') and @aria-labelledby = '${openProjectTitleId}']`
+ )
),
10_000
);
@@ -128,7 +130,7 @@ describe('TopasConverter', () => {
const loadFileDialog = await driver.wait(
until.elementLocated(
By.xpath(
- `//div[@role = 'dialog' and @aria-labelledby = '${loadFileTitleId}' and @aria-describedby = '${loadFileContentId}']`
+ `//div[(@role = 'dialog' or @role = 'alertdialog') and @aria-labelledby = '${loadFileTitleId}' and @aria-describedby = '${loadFileContentId}']`
)
),
10_000
diff --git a/src/shared/components/Menu/MenuPosition.tsx b/src/shared/components/Menu/MenuPosition.tsx
index 1ca964d06..dba677453 100644
--- a/src/shared/components/Menu/MenuPosition.tsx
+++ b/src/shared/components/Menu/MenuPosition.tsx
@@ -53,7 +53,9 @@ export default function MenuPosition({
disableRipple>
diff --git a/src/util/genericComponents/AutoCompleteSelect.tsx b/src/util/genericComponents/AutoCompleteSelect.tsx
index 7aded5c52..c5e99c209 100644
--- a/src/util/genericComponents/AutoCompleteSelect.tsx
+++ b/src/util/genericComponents/AutoCompleteSelect.tsx
@@ -25,8 +25,9 @@ export function AutoCompleteSelect<