diff --git a/package.json b/package.json index a0af160c..0df6c507 100644 --- a/package.json +++ b/package.json @@ -57,10 +57,12 @@ "dependencies": { "@babel/plugin-proposal-decorators": "^7.19.0", "@craco/craco": "^7.1.0", - "@material-ui/core": "^4.12.4", - "@material-ui/icons": "^4.11.3", - "@material-ui/lab": "^4.0.0-alpha.61", - "@material-ui/styles": "^4.11.5", + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@mui/icons-material": "^6.4.4", + "@mui/lab": "^6.0.0-beta.27", + "@mui/material": "^6.4.4", + "@mui/styles": "^6.4.4", "@sentry/electron": "^4.0.2", "classnames": "^2.3.2", "clean-stack": "3.0.1", diff --git a/src/app/AlignmentCard.js b/src/app/AlignmentCard.js index 6c4ee55f..2c138a37 100644 --- a/src/app/AlignmentCard.js +++ b/src/app/AlignmentCard.js @@ -1,38 +1,35 @@ import React from 'react'; import { observer } from 'mobx-react'; import PropTypes from 'prop-types'; -import { makeStyles, withStyles } from '@material-ui/core/styles'; -import IconButton from '@material-ui/core/IconButton'; -import MoreVertIcon from '@material-ui/icons/MoreVert'; -import DeleteForeverIcon from '@material-ui/icons/DeleteForever'; +import { makeStyles, withStyles } from '@mui/styles'; +import IconButton from '@mui/material/IconButton'; +import MoreVertIcon from '@mui/icons-material/MoreVert'; +import DeleteForeverIcon from '@mui/icons-material/DeleteForever'; import classNames from 'classnames'; -import CircularProgress from '@material-ui/core/CircularProgress'; -import Chip from '@material-ui/core/Chip'; -import Switch from '@material-ui/core/Switch'; -import Menu from '@material-ui/core/Menu'; -import MenuItem from '@material-ui/core/MenuItem'; -import FormControl from '@material-ui/core/FormControl'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import InputLabel from '@material-ui/core/InputLabel'; -import Select from '@material-ui/core/Select'; -import Tooltip from '@material-ui/core/Tooltip'; -import Card from '@material-ui/core/Card'; -import CardHeader from '@material-ui/core/CardHeader'; -import CardContent from '@material-ui/core/CardContent'; -import Typography from '@material-ui/core/Typography'; +import CircularProgress from '@mui/material/CircularProgress'; +import Chip from '@mui/material/Chip'; +import Switch from '@mui/material/Switch'; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import Tooltip from '@mui/material/Tooltip'; +import Card from '@mui/material/Card'; +import CardHeader from '@mui/material/CardHeader'; +import CardContent from '@mui/material/CardContent'; +import Typography from '@mui/material/Typography'; import OptionSelect from './components/OptionSelect'; import OptionTextField from './components/OptionTextField'; -import CardActions from '@material-ui/core/CardActions'; -import LoadingButton from './components/LoadingButton'; -import Box from '@material-ui/core/Box'; +import CardActions from '@mui/material/CardActions'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; const InputSwitch = withStyles((theme) => ({ switchBase: { color: theme.palette.input.secondaryText, - '&$checked': { + '&.Mui-checked': { color: theme.palette.input.dark, }, - '&$checked + $track': { + '&.Mui-checked + .Mui-track': { backgroundColor: theme.palette.input.dark, }, }, @@ -149,19 +146,17 @@ function _ModelTestButton({ alignment }) { return null; } return ( - Run ModelTest - + ); } _ModelTestButton.propTypes = { @@ -279,7 +274,7 @@ function AlignmentCard({ className, alignment }) { aria-label="remove-alignment" title="Remove alignment" > - + @@ -288,7 +283,7 @@ function AlignmentCard({ className, alignment }) { aria-owns={anchorEl ? 'alignment-menu' : undefined} aria-haspopup="true" onClick={handleMenuClick} - > + size="large"> @@ -394,7 +389,7 @@ function FinalAlignmentCard({ className, alignment }) { aria-owns={anchorEl ? 'alignment-menu' : undefined} aria-haspopup="true" onClick={handleMenuClick} - > + size="large"> diff --git a/src/app/App.js b/src/app/App.js index 4719fc58..18021499 100644 --- a/src/app/App.js +++ b/src/app/App.js @@ -2,21 +2,22 @@ import React from 'react'; import { observer } from 'mobx-react'; import clsx from 'clsx'; import SplitPane from 'react-split-pane'; -import { makeStyles } from '@material-ui/styles'; -import CssBaseline from '@material-ui/core/CssBaseline'; -import IconButton from '@material-ui/core/IconButton'; -import Chip from '@material-ui/core/Chip'; -import CircularProgress from '@material-ui/core/CircularProgress'; -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; -import IconAdd from '@material-ui/icons/Add'; -import DeleteIcon from '@material-ui/icons/DeleteForever'; -import Box from '@material-ui/core/Box'; -import Snackbar from '@material-ui/core/Snackbar'; -import { Typography } from '@material-ui/core'; -import Modal from '@material-ui/core/Modal'; +import { makeStyles } from '@mui/styles'; +import CssBaseline from '@mui/material/CssBaseline'; +import IconButton from '@mui/material/IconButton'; +import Chip from '@mui/material/Chip'; +import CircularProgress from '@mui/material/CircularProgress'; +import AppBar from '@mui/material/AppBar'; +import Toolbar from '@mui/material/Toolbar'; +import Tabs from '@mui/material/Tabs'; +import Tab from '@mui/material/Tab'; +import IconAdd from '@mui/icons-material/Add'; +import DeleteIcon from '@mui/icons-material/DeleteForever'; +import Box from '@mui/material/Box'; +import Snackbar from '@mui/material/Snackbar'; +import Alert from '@mui/material/Alert'; +import { Typography } from '@mui/material'; +import Modal from '@mui/material/Modal'; import Model from './Model'; import Input from './Input'; @@ -27,7 +28,6 @@ import store from './store'; import PartitionEditor from './PartitionEditor'; import CitationModal from './CitationModal'; -import SnackbarMessage from './components/SnackbarMessage'; import ErrorBoundary from './components/ErrorBoundary'; import ErrorDialog from './components/ErrorDialog'; import ModifiedDialog from './components/ModifiedDialog'; @@ -185,7 +185,6 @@ const useStyles = makeStyles(theme => ({ }, }, Modal: { - top: `50%`, margin: 'auto', display: 'flex', alignItems: 'center', @@ -240,11 +239,13 @@ const App = () => { open={run.showModifiedSnack} onClose={run.clearShowModified} > - + severity="info" + sx={{ width: '100%' }} + > + {message} + ); } @@ -260,11 +261,13 @@ const App = () => { open={store.showAppSnack} onClose={store.clearAppSnack} > - + severity="info" + sx={{ width: '100%' }} + > + {message} + ); } @@ -284,7 +287,7 @@ const App = () => { {TabItems} - + @@ -369,7 +372,7 @@ const App = () => { className={`${classes.verticalHeading} ${classes.consoleHeading}`} > Console - {(run.stdout === '' && run.stderr === '') ? null : ( + {run.stdout === '' && run.stderr === '' ? null : ( { autoHideDuration={6000} onClose={run.clearFinished} > - + { run.exitCode === 0 ? 'Calculation finished!' : `Calculation cancelled!` } - /> + {fileModifiedSnack(run)} {appSnack(store)} diff --git a/src/app/AstralTreeCard.js b/src/app/AstralTreeCard.js index 918500ad..b7227b7f 100644 --- a/src/app/AstralTreeCard.js +++ b/src/app/AstralTreeCard.js @@ -1,21 +1,21 @@ import React from 'react'; import { observer } from 'mobx-react'; import PropTypes from 'prop-types'; -import { makeStyles, withStyles } from '@material-ui/core/styles'; -import IconButton from '@material-ui/core/IconButton'; -import MoreVertIcon from '@material-ui/icons/MoreVert'; -import DeleteForeverIcon from '@material-ui/icons/DeleteForever'; +import { makeStyles } from '@mui/styles'; +import IconButton from '@mui/material/IconButton'; +import MoreVertIcon from '@mui/icons-material/MoreVert'; +import DeleteForeverIcon from '@mui/icons-material/DeleteForever'; import classNames from 'classnames'; -import CircularProgress from '@material-ui/core/CircularProgress'; -import Chip from '@material-ui/core/Chip'; -import Menu from '@material-ui/core/Menu'; -import MenuItem from '@material-ui/core/MenuItem'; -import Tooltip from '@material-ui/core/Tooltip'; -import Card from '@material-ui/core/Card'; -import CardHeader from '@material-ui/core/CardHeader'; -import CardContent from '@material-ui/core/CardContent'; -import CardActions from '@material-ui/core/CardActions'; -import Box from '@material-ui/core/Box'; +import CircularProgress from '@mui/material/CircularProgress'; +import Chip from '@mui/material/Chip'; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import Tooltip from '@mui/material/Tooltip'; +import Card from '@mui/material/Card'; +import CardHeader from '@mui/material/CardHeader'; +import CardContent from '@mui/material/CardContent'; +import CardActions from '@mui/material/CardActions'; +import Box from '@mui/material/Box'; // const useStyles = makeStyles(theme => ({ const useStyles = makeStyles((theme) => { @@ -92,7 +92,7 @@ function AstralTreeCard({ className, astralTree }) { action={
- + @@ -101,7 +101,7 @@ function AstralTreeCard({ className, astralTree }) { aria-owns={anchorEl ? 'astralTree-menu' : undefined} aria-haspopup="true" onClick={handleMenuClick} - > + size="large"> diff --git a/src/app/CitationModal.js b/src/app/CitationModal.js index 55c0f4e6..d320dbee 100644 --- a/src/app/CitationModal.js +++ b/src/app/CitationModal.js @@ -1,15 +1,15 @@ import React from 'react'; import { observer } from 'mobx-react'; import PropTypes from 'prop-types'; -import { makeStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import CardActions from '@material-ui/core/CardActions'; -import Typography from '@material-ui/core/Typography'; -import Box from '@material-ui/core/Box'; -import ToggleButton from '@material-ui/lab/ToggleButton'; -import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; +import { makeStyles } from '@mui/styles'; +import Button from '@mui/material/Button'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import CardActions from '@mui/material/CardActions'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import ToggleButton from '@mui/material/ToggleButton'; +import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; import CodeHighlight from './components/CodeHighlight'; @@ -77,6 +77,7 @@ function CitationModal({ citation }) { ) : null } -
+ ) ); }; diff --git a/src/app/PartitionEditor.js b/src/app/PartitionEditor.js index 5b48e34f..befcdb99 100644 --- a/src/app/PartitionEditor.js +++ b/src/app/PartitionEditor.js @@ -1,18 +1,18 @@ import React from 'react'; import { observer } from 'mobx-react'; import PropTypes from 'prop-types'; -import { makeStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import TextField from '@material-ui/core/TextField'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import CardActions from '@material-ui/core/CardActions'; +import { makeStyles } from '@mui/styles'; +import Button from '@mui/material/Button'; +import TextField from '@mui/material/TextField'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import CardActions from '@mui/material/CardActions'; import OptionTextField from './components/OptionTextField'; import OptionSelect from './components/OptionSelect'; -import Box from '@material-ui/core/Box'; -import Grid from '@material-ui/core/Grid'; -import LinearProgress from '@material-ui/core/LinearProgress'; -import Typography from '@material-ui/core/Typography'; +import Box from '@mui/material/Box'; +import Grid from '@mui/material/Grid2'; +import LinearProgress from '@mui/material/LinearProgress'; +import Typography from '@mui/material/Typography'; const useStyles = makeStyles(theme => ({ Partition: { @@ -58,30 +58,11 @@ const useStyles = makeStyles(theme => ({ function PartitionEditor({ alignment }) { const classes = useStyles(); - // const [partitionText, setPartitionText] = React.useState(alignment.partitionText); - // const [partitionText, setPartitionText] = React.useState( - // alignment.partitionFileContent - // ); - - // function handleChange(event) { - // setPartitionText(event.target.value); - // } function handleAdd(event) { alignment.partition.addPart(); } - // function onClickCancel(event) { - // alignment.setShowPartition(false); - // } - - // function onClickSave(event) { - // alignment.setPartitionText(partitionText); - // alignment.setShowPartition(false); - // } - - // const hasChange = partitionText !== alignment.partitionText; - if (!alignment.showPartition) { return null; } @@ -90,7 +71,7 @@ function PartitionEditor({ alignment }) { const { partToAdd } = partition; return ( - + ( Partition editor @@ -101,25 +82,25 @@ function PartitionEditor({ alignment }) { - + - + - + - + - + - + - + @@ -142,25 +123,27 @@ function PartitionEditor({ alignment }) { margin="normal" helperText={alignment.partitionHelperText || ''} variant="outlined" - InputProps={{ - classes: { - input: 'pre', + slotProps={{ + input: { + classes: { + input: 'pre', + } } }} /> - + { partition.isDefault ? null : ( - + )} - + - + ) ); } @@ -184,7 +167,6 @@ const useStylesOnCard = makeStyles(theme => ({ }, form: {}, textField: { - // height: 80, width: 250, padding: 0, marginTop: 10, @@ -239,6 +221,7 @@ function PartitionOnCard({ alignment }) { ) : null} {run.running ? ( - ) : null} - Run - + @@ -112,13 +104,14 @@ class Raxml extends React.Component { {run.command} -

Command

+ Command ); diff --git a/src/app/TreeCard.js b/src/app/TreeCard.js index d8f7a55d..86fc0b75 100644 --- a/src/app/TreeCard.js +++ b/src/app/TreeCard.js @@ -1,17 +1,17 @@ import React from 'react'; import { observer } from 'mobx-react'; import PropTypes from 'prop-types'; -import { makeStyles } from '@material-ui/core/styles'; -import IconButton from '@material-ui/core/IconButton'; -import MoreVertIcon from '@material-ui/icons/MoreVert'; +import { makeStyles } from '@mui/styles'; +import IconButton from '@mui/material/IconButton'; +import MoreVertIcon from '@mui/icons-material/MoreVert'; import classNames from 'classnames'; -import CircularProgress from "@material-ui/core/CircularProgress"; -import Chip from "@material-ui/core/Chip"; -import Menu from '@material-ui/core/Menu'; -import MenuItem from '@material-ui/core/MenuItem'; -import Card from '@material-ui/core/Card'; -import CardHeader from '@material-ui/core/CardHeader'; -import CardContent from '@material-ui/core/CardContent'; +import CircularProgress from "@mui/material/CircularProgress"; +import Chip from "@mui/material/Chip"; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import Card from '@mui/material/Card'; +import CardHeader from '@mui/material/CardHeader'; +import CardContent from '@mui/material/CardContent'; const useStyles = makeStyles(theme => ({ TreeCard: { @@ -110,7 +110,7 @@ function TreeCard({ className, tree }) { aria-owns={anchorEl ? 'tree-menu' : undefined} aria-haspopup="true" onClick={handleMenuClick} - > + size="large"> diff --git a/src/app/components/CodeHighlight.js b/src/app/components/CodeHighlight.js index f765066a..24db98be 100644 --- a/src/app/components/CodeHighlight.js +++ b/src/app/components/CodeHighlight.js @@ -1,6 +1,6 @@ import React, { useRef, useEffect } from 'react'; import PropTypes from 'prop-types'; -import { makeStyles } from '@material-ui/core/styles'; +import { makeStyles } from '@mui/styles'; import Prism from 'prismjs'; import 'prismjs-bibtex'; import 'prismjs/themes/prism.css'; diff --git a/src/app/components/ErrorBoundary.js b/src/app/components/ErrorBoundary.js index ae46c14c..23c125f5 100644 --- a/src/app/components/ErrorBoundary.js +++ b/src/app/components/ErrorBoundary.js @@ -1,6 +1,6 @@ import React from 'react'; -import { Box } from '@material-ui/core'; -import Typography from '@material-ui/core/Typography'; +import { Box } from '@mui/material'; +import Typography from '@mui/material/Typography'; import ErrorDialog from './ErrorDialog'; class ErrorBoundary extends React.Component { diff --git a/src/app/components/ErrorDialog.js b/src/app/components/ErrorDialog.js index afcb514b..f8eca1d1 100644 --- a/src/app/components/ErrorDialog.js +++ b/src/app/components/ErrorDialog.js @@ -1,19 +1,19 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Box } from '@material-ui/core'; -import Dialog from '@material-ui/core/Dialog'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContentText from '@material-ui/core/DialogContentText'; -import Accordion from '@material-ui/core/Accordion'; -import AccordionSummary from '@material-ui/core/AccordionSummary'; -import AccordionDetails from '@material-ui/core/AccordionDetails'; -import Typography from '@material-ui/core/Typography'; -import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; -import Button from '@material-ui/core/Button'; +import { Box } from '@mui/material'; +import Dialog from '@mui/material/Dialog'; +import DialogTitle from '@mui/material/DialogTitle'; +import DialogContent from '@mui/material/DialogContent'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContentText from '@mui/material/DialogContentText'; +import Accordion from '@mui/material/Accordion'; +import AccordionSummary from '@mui/material/AccordionSummary'; +import AccordionDetails from '@mui/material/AccordionDetails'; +import Typography from '@mui/material/Typography'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import Button from '@mui/material/Button'; +import Alert from '@mui/material/Alert'; import { ipcRenderer } from 'electron'; -import SnackbarMessage from './SnackbarMessage'; import { reportIssueToGitHub, getMailtoLinkToReportError } from '../../common/utils'; import * as ipc from '../../constants/ipc'; @@ -52,23 +52,36 @@ export default function ErrorDialog({ error, onClose, needReload, title }) { const CloseAction = ( - ); - const Actions = reported ? CloseAction : ( + const Actions = reported ? ( + CloseAction + ) : ( - - - + ); @@ -77,7 +90,12 @@ export default function ErrorDialog({ error, onClose, needReload, title }) { Please help us solve the issue by reporting it. ) : ( - + + Thanks for reporting the issue! + ); const GenericErrorDialog = ( diff --git a/src/app/components/LoadingButton.js b/src/app/components/LoadingButton.js deleted file mode 100644 index fdbc3c73..00000000 --- a/src/app/components/LoadingButton.js +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import clsx from 'clsx'; -import { makeStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import CircularProgress from '@material-ui/core/CircularProgress'; - -const useStyles = makeStyles(theme => ({ - wrapper: { - position: 'relative', - }, - progress: { - // color: green[500], - position: 'absolute', - top: '50%', - left: '50%', - marginTop: -12, - marginLeft: -12, - pointerEvents: 'none', - }, -})); - -function LoadingButton(props) { - const classes = useStyles(); - const { loading, noDisabled, className, buttonClassName, progressProps = {}, ...buttonProps } = props; - const disabled = !noDisabled && (loading || buttonProps.disabled); - - return ( -
- - {loading && ( - - )} -
- ); -} - -LoadingButton.propTypes = { - className: PropTypes.string, - children: PropTypes.node, - loading: PropTypes.bool, - buttonClassName: PropTypes.string, - progressProps: PropTypes.object, - noDisabled: PropTypes.bool, -}; - -// LoadingButton.defaultProps = { -// buttonProps: {}, -// progressProps: {}, -// } - -export default LoadingButton; diff --git a/src/app/components/ModifiedDialog.js b/src/app/components/ModifiedDialog.js index a52be308..18c11143 100644 --- a/src/app/components/ModifiedDialog.js +++ b/src/app/components/ModifiedDialog.js @@ -1,17 +1,17 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Box } from '@material-ui/core'; -import Dialog from '@material-ui/core/Dialog'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContentText from '@material-ui/core/DialogContentText'; -import Accordion from '@material-ui/core/Accordion'; -import AccordionSummary from '@material-ui/core/AccordionSummary'; -import AccordionDetails from '@material-ui/core/AccordionDetails'; -import Typography from '@material-ui/core/Typography'; -import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; -import Button from '@material-ui/core/Button'; +import { Box } from '@mui/material'; +import Dialog from '@mui/material/Dialog'; +import DialogTitle from '@mui/material/DialogTitle'; +import DialogContent from '@mui/material/DialogContent'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContentText from '@mui/material/DialogContentText'; +import Accordion from '@mui/material/Accordion'; +import AccordionSummary from '@mui/material/AccordionSummary'; +import AccordionDetails from '@mui/material/AccordionDetails'; +import Typography from '@mui/material/Typography'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import Button from '@mui/material/Button'; export default function ModifiedDialog({ show, onClose, messages }) { if (!show) { @@ -45,7 +45,7 @@ export default function ModifiedDialog({ show, onClose, messages }) { - diff --git a/src/app/components/OptionCheck.js b/src/app/components/OptionCheck.js index a5d03633..eea1ebfe 100644 --- a/src/app/components/OptionCheck.js +++ b/src/app/components/OptionCheck.js @@ -1,9 +1,9 @@ import React from 'react'; import { observer } from 'mobx-react'; import PropTypes from 'prop-types'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import Checkbox from '@material-ui/core/Checkbox'; -import { FormControl, FormHelperText } from '@material-ui/core'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import Checkbox from '@mui/material/Checkbox'; +import { FormControl } from '@mui/material'; const OptionCheck = observer(({ option, className }) => { @@ -11,7 +11,7 @@ const OptionCheck = observer(({ option, className }) => { return null; } return ( - + { @@ -15,22 +15,24 @@ const OptionSelect = observer(({ option, className }) => { if (option.options.length === 1) { // No options to change to, render as a text field instead. return ( - - ) + slotProps={{ + input: { + readOnly: true, + } + }} />) + ); } return ( - +