Update mui dependencies

This commit is contained in:
schroda
2024-09-03 17:15:47 +02:00
parent 161a2bb657
commit d1d37c8516
37 changed files with 349 additions and 166 deletions

View File

@@ -36,8 +36,8 @@
"@emotion/styled": "11.13.0", "@emotion/styled": "11.13.0",
"@fontsource/roboto": "5.0.14", "@fontsource/roboto": "5.0.14",
"@loadable/component": "5.16.4", "@loadable/component": "5.16.4",
"@mui/icons-material": "5.16.6", "@mui/icons-material": "^6.0.2",
"@mui/material": "5.16.6", "@mui/material": "^6.0.2",
"@mui/x-date-pickers": "7.15.0", "@mui/x-date-pickers": "7.15.0",
"apollo-upload-client": "17.0.0", "apollo-upload-client": "17.0.0",
"dayjs": "1.11.13", "dayjs": "1.11.13",

View File

@@ -194,16 +194,32 @@ export function ExtensionCard(props: IProps) {
<Typography variant="h6" component="h3"> <Typography variant="h6" component="h3">
{name} {name}
</Typography> </Typography>
<Typography variant="caption" display="block"> <Typography
variant="caption"
sx={{
display: 'block',
}}
>
{langPress} {versionName} {langPress} {versionName}
{isNsfw && ( {isNsfw && (
<Typography variant="caption" display="inline" color="error"> <Typography
variant="caption"
color="error"
sx={{
display: 'inline',
}}
>
{' 18+'} {' 18+'}
</Typography> </Typography>
)} )}
</Typography> </Typography>
{showSourceRepo && ( {showSourceRepo && (
<Typography variant="caption" display="block"> <Typography
variant="caption"
sx={{
display: 'block',
}}
>
{repo} {repo}
</Typography> </Typography>
)} )}

View File

@@ -100,7 +100,13 @@ export const MigrateDialog = ({ mangaIdToMigrateTo, onClose }: { mangaIdToMigrat
</FormGroup> </FormGroup>
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Stack sx={{ width: '100%' }} direction="row" justifyContent="space-between"> <Stack
direction="row"
sx={{
justifyContent: 'space-between',
width: '100%',
}}
>
<Button disabled={isMigrationInProcess} component={Link} to={`/manga/${mangaIdToMigrateTo}`}> <Button disabled={isMigrationInProcess} component={Link} to={`/manga/${mangaIdToMigrateTo}`}>
{t('migrate.dialog.action.button.show_entry')} {t('migrate.dialog.action.button.show_entry')}
</Button> </Button>

View File

@@ -57,7 +57,12 @@ export const MigrationCard = ({ id, name, lang, iconUrl, mangaCount }: TMigratab
<Typography variant="h6" component="h3"> <Typography variant="h6" component="h3">
{name} {name}
</Typography> </Typography>
<Typography variant="caption" display="block"> <Typography
variant="caption"
sx={{
display: 'block',
}}
>
{translateExtensionLanguage(lang)} {translateExtensionLanguage(lang)}
</Typography> </Typography>
</Box> </Box>

View File

@@ -97,15 +97,31 @@ export const SourceCard: React.FC<IProps> = (props: IProps) => {
{name} {name}
</Typography> </Typography>
{id !== '0' && ( {id !== '0' && (
<Typography variant="caption" display="block"> <Typography
variant="caption"
sx={{
display: 'block',
}}
>
{translateExtensionLanguage(lang)} {translateExtensionLanguage(lang)}
{isNsfw && ( {isNsfw && (
<Typography variant="caption" display="inline" color="error"> <Typography
variant="caption"
color="error"
sx={{
display: 'inline',
}}
>
{' 18+'} {' 18+'}
</Typography> </Typography>
)} )}
{showSourceRepo && ( {showSourceRepo && (
<Typography variant="caption" display="block"> <Typography
variant="caption"
sx={{
display: 'block',
}}
>
{repo} {repo}
</Typography> </Typography>
)} )}

View File

@@ -16,7 +16,15 @@ export const CustomIconButton = forwardRef(
ref: ForwardedRef<HTMLButtonElement | null>, ref: ForwardedRef<HTMLButtonElement | null>,
) => ( ) => (
<Button ref={ref} {...props}> <Button ref={ref} {...props}>
<Stack direction="row" alignItems="center" justifyContent="center" gap={1} flexWrap="wrap"> <Stack
direction="row"
sx={{
alignItems: 'center',
justifyContent: 'center',
gap: 1,
flexWrap: 'wrap',
}}
>
{children} {children}
</Stack> </Stack>
</Button> </Button>

View File

@@ -26,7 +26,13 @@ export const Metadata = ({
{...stackProps} {...stackProps}
sx={{ flexDirection: 'row', columnGap: 1, flexWrap: 'wrap', alignItems: 'baseline', ...stackProps?.sx }} sx={{ flexDirection: 'row', columnGap: 1, flexWrap: 'wrap', alignItems: 'baseline', ...stackProps?.sx }}
> >
<Typography color="text.secondary" {...titleProps}> <Typography
{...titleProps}
sx={{
color: 'text.secondary',
...titleProps?.sx,
}}
>
{title} {title}
</Typography> </Typography>
<Typography {...valueProps}>{value}</Typography> <Typography {...valueProps}>{value}</Typography>

View File

@@ -26,18 +26,20 @@ export const PasswordTextField = (props: TextFieldProps) => {
name="password" name="password"
label={t('global.label.password')} label={t('global.label.password')}
type={showPassword ? 'text' : 'password'} type={showPassword ? 'text' : 'password'}
InputProps={{ slotProps={{
endAdornment: ( input: {
<InputAdornment position="start"> endAdornment: (
<IconButton <InputAdornment position="start">
aria-label="toggle password visibility" <IconButton
onClick={handleClickShowPassword} aria-label="toggle password visibility"
edge="end" onClick={handleClickShowPassword}
> edge="end"
{showPassword ? <VisibilityOff /> : <Visibility />} >
</IconButton> {showPassword ? <VisibilityOff /> : <Visibility />}
</InputAdornment> </IconButton>
), </InputAdornment>
),
},
}} }}
{...props} {...props}
/> />

View File

@@ -14,15 +14,17 @@ import CancelIcon from '@mui/icons-material/Cancel';
export const SearchTextField = ({ onCancel, ...textFieldProps }: TextFieldProps & { onCancel: () => void }) => ( export const SearchTextField = ({ onCancel, ...textFieldProps }: TextFieldProps & { onCancel: () => void }) => (
<TextField <TextField
{...textFieldProps} {...textFieldProps}
InputProps={{ slotProps={{
...textFieldProps.InputProps, input: {
endAdornment: textFieldProps.InputProps?.endAdornment ?? ( ...textFieldProps.InputProps,
<InputAdornment position="end"> endAdornment: textFieldProps.InputProps?.endAdornment ?? (
<IconButton onClick={() => onCancel()}> <InputAdornment position="end">
<CancelIcon /> <IconButton onClick={() => onCancel()}>
</IconButton> <CancelIcon />
</InputAdornment> </IconButton>
), </InputAdornment>
),
},
}} }}
/> />
); );

View File

@@ -120,7 +120,12 @@ export const ChapterCard: React.FC<IProps> = (props: IProps) => {
'&:last-child': { pb: 1.5 }, '&:last-child': { pb: 1.5 },
}} }}
> >
<Stack direction="column" flex={1}> <Stack
direction="column"
sx={{
flex: 1,
}}
>
<Stack <Stack
sx={{ sx={{
flexDirection: 'row', flexDirection: 'row',

View File

@@ -125,10 +125,10 @@ export const MangaGridCard = ({
}} }}
/> />
<Stack <Stack
alignItems="start"
justifyContent="space-between"
direction="row" direction="row"
sx={{ sx={{
alignItems: 'start',
justifyContent: 'space-between',
position: 'absolute', position: 'absolute',
top: (theme) => theme.spacing(1), top: (theme) => theme.spacing(1),
left: (theme) => theme.spacing(1), left: (theme) => theme.spacing(1),
@@ -153,9 +153,9 @@ export const MangaGridCard = ({
)} )}
<Stack <Stack
direction="row" direction="row"
justifyContent={gridLayout !== GridLayout.Comfortable ? 'space-between' : 'end'}
alignItems="end"
sx={{ sx={{
justifyContent: gridLayout !== GridLayout.Comfortable ? 'space-between' : 'end',
alignItems: 'end',
position: 'absolute', position: 'absolute',
bottom: 0, bottom: 0,
width: '100%', width: '100%',

View File

@@ -108,7 +108,13 @@ export const MangaListCard = ({
</TypographyMaxLines> </TypographyMaxLines>
</Tooltip> </Tooltip>
</Box> </Box>
<Stack direction="row" alignItems="center" gap={0.5}> <Stack
direction="row"
sx={{
alignItems: 'center',
gap: 0.5,
}}
>
{mangaBadges} {mangaBadges}
{continueReadingButton} {continueReadingButton}
<MangaOptionButton <MangaOptionButton

View File

@@ -77,9 +77,11 @@ export const ConfirmDialog = ({
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Stack <Stack
sx={{ width: '100%' }}
direction="row" direction="row"
justifyContent={actions.extra.show ? 'space-between' : 'end'} sx={{
justifyContent: actions.extra.show ? 'space-between' : 'end',
width: '100%',
}}
> >
{actions.extra.show && ( {actions.extra.show && (
<Button onClick={onExtra} variant={actions.extra.contain ? 'contained' : undefined}> <Button onClick={onExtra} variant={actions.extra.contain ? 'contained' : undefined}>

View File

@@ -46,7 +46,13 @@ export const DownloadStateIndicator = ({ download }: { download: ChapterDownload
justifyContent: 'center', justifyContent: 'center',
}} }}
> >
<Typography variant="caption" component="div" color="text.secondary"> <Typography
variant="caption"
component="div"
sx={{
color: 'text.secondary',
}}
>
<> <>
{download.progress !== 0 && `${Math.round(download.progress * 100)}%`} {download.progress !== 0 && `${Math.round(download.progress * 100)}%`}
{download.progress === 0 && t(DOWNLOAD_STATE_TO_TRANSLATION_KEY_MAP[download.state])} {download.progress === 0 && t(DOWNLOAD_STATE_TO_TRANSLATION_KEY_MAP[download.state])}

View File

@@ -164,7 +164,15 @@ export function DefaultNavBar() {
{getOptionForDirection(<ArrowBack />, <ArrowForwardIcon />)} {getOptionForDirection(<ArrowBack />, <ArrowForwardIcon />)}
</IconButton> </IconButton>
)} )}
<Typography variant="h5" component="h1" sx={{ flexGrow: 1 }} noWrap textOverflow="ellipsis"> <Typography
variant="h5"
component="h1"
noWrap
sx={{
textOverflow: 'ellipsis',
flexGrow: 1,
}}
>
{title} {title}
</Typography> </Typography>
{action} {action}

View File

@@ -226,9 +226,12 @@ export function ReaderNavBar(props: IProps) {
<Typography <Typography
variant="h6" variant="h6"
component="h1" component="h1"
textOverflow="ellipsis" sx={{
overflow="hidden" textOverflow: 'ellipsis',
sx={{ py: 1, flexGrow: 1 }} overflow: 'hidden',
py: 1,
flexGrow: 1,
}}
> >
{chapter.name} {chapter.name}
</Typography> </Typography>

View File

@@ -223,7 +223,14 @@ export function CategorySelect(props: CategorySelectProps) {
onChange={(e) => setDoNotShowAddToLibraryDialogAgain(e.target.checked)} onChange={(e) => setDoNotShowAddToLibraryDialogAgain(e.target.checked)}
/> />
)} )}
<Stack sx={{ width: '100%' }} direction="row" justifyContent="space-between" alignItems="end"> <Stack
direction="row"
sx={{
justifyContent: 'space-between',
alignItems: 'end',
width: '100%',
}}
>
<Button component={Link} to="/settings/categories"> <Button component={Link} to="/settings/categories">
{t(allCategories.length ? 'global.button.edit' : 'global.button.create')} {t(allCategories.length ? 'global.button.edit' : 'global.button.create')}
</Button> </Button>

View File

@@ -100,7 +100,14 @@ export const DateSetting = ({
</LocalizationProvider> </LocalizationProvider>
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Stack sx={{ width: '100%' }} direction="row" justifyContent="space-between" alignItems="end"> <Stack
direction="row"
sx={{
justifyContent: 'space-between',
alignItems: 'end',
width: '100%',
}}
>
<Stack> <Stack>
{defaultValue !== undefined && ( {defaultValue !== undefined && (
<Button <Button

View File

@@ -167,7 +167,12 @@ export const MutableListSetting = ({
</Typography> </Typography>
)} )}
{dialogDisclaimer && ( {dialogDisclaimer && (
<Stack direction="row" alignItems="center"> <Stack
direction="row"
sx={{
alignItems: 'center',
}}
>
<InfoIcon color="warning" /> <InfoIcon color="warning" />
<Typography <Typography
variant="body1" variant="body1"
@@ -200,7 +205,13 @@ export const MutableListSetting = ({
</List> </List>
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Stack sx={{ width: '100%' }} direction="row" justifyContent="space-between"> <Stack
direction="row"
sx={{
justifyContent: 'space-between',
width: '100%',
}}
>
<Button onClick={() => setIsAddItemDialogOpen(true)}> <Button onClick={() => setIsAddItemDialogOpen(true)}>
{addItemButtonTitle ?? t('global.button.add')} {addItemButtonTitle ?? t('global.button.add')}
</Button> </Button>

View File

@@ -139,7 +139,12 @@ export const NumberSetting = ({
</Typography> </Typography>
)} )}
{dialogDisclaimer && ( {dialogDisclaimer && (
<Stack direction="row" alignItems="center"> <Stack
direction="row"
sx={{
alignItems: 'center',
}}
>
<InfoIcon color="warning" /> <InfoIcon color="warning" />
<Typography <Typography
variant="body1" variant="body1"
@@ -160,10 +165,6 @@ export const NumberSetting = ({
width: '100%', width: '100%',
margin: 'auto', margin: 'auto',
}} }}
InputProps={{
inputProps: { min: minValue, max: maxValue, step: stepSize },
endAdornment: <InputAdornment position="end">{valueUnit}</InputAdornment>,
}}
autoFocus autoFocus
value={dialogValue} value={dialogValue}
type="number" type="number"
@@ -171,6 +172,12 @@ export const NumberSetting = ({
const newValue = Number(e.target.value); const newValue = Number(e.target.value);
updateValue(newValue, false); updateValue(newValue, false);
}} }}
slotProps={{
input: {
inputProps: { min: minValue, max: maxValue, step: stepSize },
endAdornment: <InputAdornment position="end">{valueUnit}</InputAdornment>,
},
}}
/> />
{showSlider ? ( {showSlider ? (
<Slider <Slider

View File

@@ -105,7 +105,12 @@ export const SelectSetting = <SettingValue extends string | number>({
</Typography> </Typography>
)} )}
{dialogValueDisplayInfo.disclaimer && ( {dialogValueDisplayInfo.disclaimer && (
<Stack direction="row" alignItems="center"> <Stack
direction="row"
sx={{
alignItems: 'center',
}}
>
<InfoIcon color="warning" /> <InfoIcon color="warning" />
<Typography <Typography
variant="body1" variant="body1"

View File

@@ -56,7 +56,7 @@ export const WebUIUpdateIntervalSetting = ({
return ( return (
<List> <List>
<ListItem disabled={disabled}> <ListItem>
<ListItemText primary={t('settings.webui.auto_update.label.title')} /> <ListItemText primary={t('settings.webui.auto_update.label.title')} />
<Switch <Switch
disabled={disabled} disabled={disabled}

View File

@@ -209,9 +209,11 @@ export function SourceOptions({
<DialogContent> <DialogContent>
<TextField <TextField
sx={{ width: '100%' }} sx={{ width: '100%' }}
inputProps={{ maxLength: 50 }}
value={newSavedSearch} value={newSavedSearch}
onChange={(e) => setNewSavedSearch(e.target.value as string)} onChange={(e) => setNewSavedSearch(e.target.value as string)}
slotProps={{
htmlInput: { maxLength: 50 },
}}
/> />
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>

View File

@@ -153,7 +153,13 @@ const TrackerActiveHeader = ({
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<Stack direction="row" alignItems="stretch" sx={{ paddingBottom: 2 }}> <Stack
direction="row"
sx={{
alignItems: 'stretch',
paddingBottom: 2,
}}
>
<TrackerActiveLink url={trackRecord.remoteUrl}> <TrackerActiveLink url={trackRecord.remoteUrl}>
<Avatar <Avatar
alt={`${tracker.name}`} alt={`${tracker.name}`}
@@ -170,7 +176,11 @@ const TrackerActiveHeader = ({
</TypographyMaxLines> </TypographyMaxLines>
</Tooltip> </Tooltip>
</ListItemButton> </ListItemButton>
<Stack justifyContent="center"> <Stack
sx={{
justifyContent: 'center',
}}
>
<PopupState variant="popover" popupId={`tracker-active-menu-popup-${tracker.id}`}> <PopupState variant="popover" popupId={`tracker-active-menu-popup-${tracker.id}`}>
{(popupState) => ( {(popupState) => (
<> <>

View File

@@ -29,7 +29,13 @@ import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
import { TTrackerManga } from '@/lib/data/Trackers.ts'; import { TTrackerManga } from '@/lib/data/Trackers.ts';
const TrackerMangaCardTitle = ({ title, selected }: { title: string; selected: boolean }) => ( const TrackerMangaCardTitle = ({ title, selected }: { title: string; selected: boolean }) => (
<Stack direction="row" gap="5px" justifyContent="space-between"> <Stack
direction="row"
sx={{
gap: '5px',
justifyContent: 'space-between',
}}
>
<Tooltip title={title}> <Tooltip title={title}>
<TypographyMaxLines variant="h5" component="h1"> <TypographyMaxLines variant="h5" component="h1">
{title} {title}
@@ -125,7 +131,13 @@ export const TrackerMangaCard = ({
borderColor: selected ? 'primary.main' : 'transparent', borderColor: selected ? 'primary.main' : 'transparent',
}} }}
> >
<Stack direction="row" gap={2} marginBottom={2}> <Stack
direction="row"
sx={{
gap: 2,
marginBottom: 2,
}}
>
<CardMedia <CardMedia
sx={{ sx={{
aspectRatio: '225/350', aspectRatio: '225/350',

View File

@@ -92,7 +92,13 @@ export const TrackerSearch = ({
return ( return (
<> <>
<DialogTitle sx={{ padding: DIALOG_PADDING }}> <DialogTitle sx={{ padding: DIALOG_PADDING }}>
<Stack direction="row" gap="10px" alignItems="center"> <Stack
direction="row"
sx={{
gap: '10px',
alignItems: 'center',
}}
>
<IconButton onClick={closeSearchMode}> <IconButton onClick={closeSearchMode}>
{getOptionForDirection(<ArrowBack />, <ArrowForwardIcon />)} {getOptionForDirection(<ArrowBack />, <ArrowForwardIcon />)}
</IconButton> </IconButton>
@@ -164,8 +170,8 @@ export const TrackerSearch = ({
{showTrackButton && ( {showTrackButton && (
<Stack <Stack
direction="row" direction="row"
justifyContent="center"
sx={{ sx={{
justifyContent: 'center',
position: 'absolute', position: 'absolute',
left: 0, left: 0,
right: 0, right: 0,

View File

@@ -28,7 +28,12 @@ export const TrackerUntrackedCard = ({
return ( return (
<Card sx={CARD_STYLING}> <Card sx={CARD_STYLING}>
<CardContent sx={{ padding: '0' }}> <CardContent sx={{ padding: '0' }}>
<Stack direction="row" gap={3}> <Stack
direction="row"
sx={{
gap: 3,
}}
>
<Avatar <Avatar
alt={`${tracker.name}`} alt={`${tracker.name}`}
src={requestManager.getValidImgUrlFor(tracker.icon)} src={requestManager.getValidImgUrlFor(tracker.icon)}

View File

@@ -15,7 +15,11 @@ export const Progress = ({ progress, showText = true }: { progress: number; show
<CircularProgress variant="determinate" value={progress} /> <CircularProgress variant="determinate" value={progress} />
{showText && ( {showText && (
<Box sx={{ position: 'absolute' }}> <Box sx={{ position: 'absolute' }}>
<Typography fontSize="0.8rem">{`${Math.round(progress)}%`}</Typography> <Typography
sx={{
fontSize: '0.8rem',
}}
>{`${Math.round(progress)}%`}</Typography>
</Box> </Box>
)} )}
</Box> </Box>

View File

@@ -104,7 +104,13 @@ export const SpinnerImage = forwardRef((props: IProps, imgRef: ForwardedRef<HTML
<> <>
{(isLoading || hasError) && ( {(isLoading || hasError) && (
<Box sx={spinnerStyle}> <Box sx={spinnerStyle}>
<Stack height="100%" alignItems="center" justifyContent="center"> <Stack
sx={{
height: '100%',
alignItems: 'center',
justifyContent: 'center',
}}
>
{isLoading && <CircularProgress thickness={5} />} {isLoading && <CircularProgress thickness={5} />}
{hasError && isLoading === false && ( {hasError && isLoading === false && (
<> <>
@@ -128,10 +134,13 @@ export const SpinnerImage = forwardRef((props: IProps, imgRef: ForwardedRef<HTML
{showMissingImageIcon ? ( {showMissingImageIcon ? (
<Stack <Stack
height="100%" sx={{
alignItems="center" height: '100%',
justifyContent="center" alignItems: 'center',
sx={{ background: (theme) => theme.palette.background.default, ...spinnerStyle }} justifyContent: 'center',
background: (theme) => theme.palette.background.default,
...spinnerStyle,
}}
> >
<ImageIcon fontSize="large" /> <ImageIcon fontSize="large" />
</Stack> </Stack>

View File

@@ -63,7 +63,13 @@ export const VersionUpdateInfoDialog = ({
<DialogContentText>{info}</DialogContentText> <DialogContentText>{info}</DialogContentText>
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Stack sx={{ width: '100%' }} direction="row" justifyContent={changelogUrl ? 'space-between' : 'end'}> <Stack
direction="row"
sx={{
justifyContent: changelogUrl ? 'space-between' : 'end',
width: '100%',
}}
>
{changelogUrl && ( {changelogUrl && (
<Button href={changelogUrl} target="_blank" rel="noreferrer"> <Button href={changelogUrl} target="_blank" rel="noreferrer">
{t('global.button.changelog')} {t('global.button.changelog')}

View File

@@ -76,7 +76,12 @@ const DownloadChapterItem = ({
<Typography variant="h6" component="h3"> <Typography variant="h6" component="h3">
{item.manga.title} {item.manga.title}
</Typography> </Typography>
<Typography variant="caption" display="block"> <Typography
variant="caption"
sx={{
display: 'block',
}}
>
{item.chapter.name} {item.chapter.name}
</Typography> </Typography>
</Stack> </Stack>

View File

@@ -263,7 +263,14 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) {
<> <>
{toasts} {toasts}
{FileInputComponent} {FileInputComponent}
<Stack sx={{ paddingTop: '20px' }} alignItems="center" justifyContent="center" rowGap="10px"> <Stack
sx={{
alignItems: 'center',
justifyContent: 'center',
rowGap: '10px',
paddingTop: '20px',
}}
>
<Typography>{t('extension.label.add_repository_info')}</Typography> <Typography>{t('extension.label.add_repository_info')}</Typography>
<Button component={Link} variant="contained" to="/settings/browseSettings"> <Button component={Link} variant="contained" to="/settings/browseSettings">
{t('settings.title')} {t('settings.title')}

View File

@@ -70,7 +70,12 @@ export const Manga: React.FC = () => {
useEffect(() => { useEffect(() => {
setAction( setAction(
<Stack direction="row" alignItems="center"> <Stack
direction="row"
sx={{
alignItems: 'center',
}}
>
{error && !isValidating && !refreshing && ( {error && !isValidating && !refreshing && (
<Tooltip <Tooltip
title={ title={

View File

@@ -149,7 +149,11 @@ const VersionInfo = ({
}; };
return ( return (
<Stack alignItems="start"> <Stack
sx={{
alignItems: 'start',
}}
>
<Typography component="span" variant="body2"> <Typography component="span" variant="body2">
{version} {version}
</Typography> </Typography>

View File

@@ -341,7 +341,13 @@ export function Backup() {
)} )}
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Stack sx={{ width: '100%' }} direction="row" justifyContent="space-between"> <Stack
direction="row"
sx={{
justifyContent: 'space-between',
width: '100%',
}}
>
{!!validationResult?.missingSources.length && ( {!!validationResult?.missingSources.length && (
<Button <Button
onClick={closeInvalidBackupDialog} onClick={closeInvalidBackupDialog}

View File

@@ -206,7 +206,7 @@ export const DownloadSettings = () => {
updateSetting('autoDownloadNewChaptersLimit', autoDownloadNewChaptersLimit) updateSetting('autoDownloadNewChaptersLimit', autoDownloadNewChaptersLimit)
} }
/> />
<ListItem disabled={!downloadSettings?.autoDownloadNewChapters}> <ListItem>
<ListItemText primary={t('download.settings.auto_download.label.ignore_with_unread_chapters')} /> <ListItemText primary={t('download.settings.auto_download.label.ignore_with_unread_chapters')} />
<Switch <Switch
edge="end" edge="end"
@@ -215,7 +215,7 @@ export const DownloadSettings = () => {
disabled={!downloadSettings?.autoDownloadNewChapters} disabled={!downloadSettings?.autoDownloadNewChapters}
/> />
</ListItem> </ListItem>
<ListItem disabled={!downloadSettings?.autoDownloadNewChapters}> <ListItem>
<ListItemText primary={t('download.settings.auto_download.label.ignore_re_uploads')} /> <ListItemText primary={t('download.settings.auto_download.label.ignore_re_uploads')} />
<Switch <Switch
edge="end" edge="end"

148
yarn.lock
View File

@@ -1580,7 +1580,7 @@
dependencies: dependencies:
regenerator-runtime "^0.14.0" regenerator-runtime "^0.14.0"
"@babel/runtime@^7.25.4": "@babel/runtime@^7.25.0", "@babel/runtime@^7.25.4":
version "7.25.6" version "7.25.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2"
integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==
@@ -1710,7 +1710,7 @@
source-map "^0.5.7" source-map "^0.5.7"
stylis "4.2.0" stylis "4.2.0"
"@emotion/cache@11.13.1", "@emotion/cache@^11.13.0": "@emotion/cache@11.13.1", "@emotion/cache@^11.13.0", "@emotion/cache@^11.13.1":
version "11.13.1" version "11.13.1"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.1.tgz#fecfc54d51810beebf05bf2a161271a1a91895d7" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.1.tgz#fecfc54d51810beebf05bf2a161271a1a91895d7"
integrity sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw== integrity sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==
@@ -1721,17 +1721,6 @@
"@emotion/weak-memoize" "^0.4.0" "@emotion/weak-memoize" "^0.4.0"
stylis "4.2.0" stylis "4.2.0"
"@emotion/cache@^11.11.0":
version "11.11.0"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff"
integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==
dependencies:
"@emotion/memoize" "^0.8.1"
"@emotion/sheet" "^1.2.2"
"@emotion/utils" "^1.2.1"
"@emotion/weak-memoize" "^0.3.1"
stylis "4.2.0"
"@emotion/hash@^0.9.2": "@emotion/hash@^0.9.2":
version "0.9.2" version "0.9.2"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b"
@@ -1744,11 +1733,6 @@
dependencies: dependencies:
"@emotion/memoize" "^0.9.0" "@emotion/memoize" "^0.9.0"
"@emotion/memoize@^0.8.1":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17"
integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
"@emotion/memoize@^0.9.0": "@emotion/memoize@^0.9.0":
version "0.9.0" version "0.9.0"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102"
@@ -1790,11 +1774,6 @@
"@emotion/utils" "^1.4.0" "@emotion/utils" "^1.4.0"
csstype "^3.0.2" csstype "^3.0.2"
"@emotion/sheet@^1.2.2":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec"
integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==
"@emotion/sheet@^1.4.0": "@emotion/sheet@^1.4.0":
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c"
@@ -1827,21 +1806,11 @@
resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz#1a818a0b2c481efba0cf34e5ab1e0cb2dcb9dfaf" resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz#1a818a0b2c481efba0cf34e5ab1e0cb2dcb9dfaf"
integrity sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw== integrity sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==
"@emotion/utils@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4"
integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==
"@emotion/utils@^1.4.0": "@emotion/utils@^1.4.0":
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.0.tgz#262f1d02aaedb2ec91c83a0955dd47822ad5fbdd" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.0.tgz#262f1d02aaedb2ec91c83a0955dd47822ad5fbdd"
integrity sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ== integrity sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==
"@emotion/weak-memoize@^0.3.1":
version "0.3.1"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
"@emotion/weak-memoize@^0.4.0": "@emotion/weak-memoize@^0.4.0":
version "0.4.0" version "0.4.0"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6"
@@ -2704,66 +2673,66 @@
hoist-non-react-statics "^3.3.1" hoist-non-react-statics "^3.3.1"
react-is "^16.12.0" react-is "^16.12.0"
"@mui/core-downloads-tracker@^5.16.6": "@mui/core-downloads-tracker@^6.0.2":
version "5.16.6" version "6.0.2"
resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.6.tgz#f029e12ffda8eb79838cc85897f03a628010037c" resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.0.2.tgz#edaec4015e440b55d535a805bd9dcec7e421d6ce"
integrity sha512-kytg6LheUG42V8H/o/Ptz3olSO5kUXW9zF0ox18VnblX6bO2yif1FPItgc3ey1t5ansb1+gbe7SatntqusQupg== integrity sha512-Cg68oOlAfbJgMgvbCwcX3Y3HdygCl6X1nREYTdEWcEKUQhNarrC45Cc35mP+zA7p3ZXE/7FLiaTCCgwuSoef/Q==
"@mui/icons-material@5.16.6": "@mui/icons-material@^6.0.2":
version "5.16.6" version "6.0.2"
resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.6.tgz#7067ddba693bec22f77592cb9cd516e2f1c1fd6e" resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-6.0.2.tgz#fc0fba40421eb6d44f1266b53f9d5e51b67df42b"
integrity sha512-ceNGjoXheH9wbIFa1JHmSc9QVjJUvh18KvHrR4/FkJCSi9HXJ+9ee1kUhCOEFfuxNF8UB6WWVrIUOUgRd70t0A== integrity sha512-WaTPSvKcx8X7NdWAHzJWDZv+YXvK0MUY8+JI/r4/q2GgIa5RW+n4+08CGX6jB7sWhU1R3zy28NfsDUwwQjOThw==
dependencies: dependencies:
"@babel/runtime" "^7.23.9" "@babel/runtime" "^7.25.0"
"@mui/material@5.16.6": "@mui/material@^6.0.2":
version "5.16.6" version "6.0.2"
resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.6.tgz#c7d695f4a9a473052dc086e64471d0435b7e4a52" resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.0.2.tgz#58a3a58d126b1b4ceb842aac401e20542ab0c17e"
integrity sha512-0LUIKBOIjiFfzzFNxXZBRAyr9UQfmTAFzbt6ziOU2FDXhorNN2o3N9/32mNJbCA8zJo2FqFU6d3dtoqUDyIEfA== integrity sha512-KrnkJFSyhsAh8V30DNUbWyRyxMi4ZHjFg1ikQGx+mUAIffFTYIEx9Q+Kxd3vCT0FUFGOmbsuh6F6yRhpybsjkg==
dependencies: dependencies:
"@babel/runtime" "^7.23.9" "@babel/runtime" "^7.25.0"
"@mui/core-downloads-tracker" "^5.16.6" "@mui/core-downloads-tracker" "^6.0.2"
"@mui/system" "^5.16.6" "@mui/system" "^6.0.2"
"@mui/types" "^7.2.15" "@mui/types" "^7.2.16"
"@mui/utils" "^5.16.6" "@mui/utils" "^6.0.2"
"@popperjs/core" "^2.11.8" "@popperjs/core" "^2.11.8"
"@types/react-transition-group" "^4.4.10" "@types/react-transition-group" "^4.4.11"
clsx "^2.1.0" clsx "^2.1.1"
csstype "^3.1.3" csstype "^3.1.3"
prop-types "^15.8.1" prop-types "^15.8.1"
react-is "^18.3.1" react-is "^18.3.1"
react-transition-group "^4.4.5" react-transition-group "^4.4.5"
"@mui/private-theming@^5.16.6": "@mui/private-theming@^6.0.2":
version "5.16.6" version "6.0.2"
resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.6.tgz#547671e7ae3f86b68d1289a0b90af04dfcc1c8c9" resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.0.2.tgz#498cf18040cdb196d1280f1d829d996d2a07e004"
integrity sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw== integrity sha512-emddFcRhA0hPGVIwIbW5g0V8vtCgw2g/H/A7jTdGe7dpCWEPpp6jPIXRRKcEUWgmg91R6rBNfV+LFHxBxmZXOQ==
dependencies: dependencies:
"@babel/runtime" "^7.23.9" "@babel/runtime" "^7.25.0"
"@mui/utils" "^5.16.6" "@mui/utils" "^6.0.2"
prop-types "^15.8.1" prop-types "^15.8.1"
"@mui/styled-engine@^5.16.6": "@mui/styled-engine@^6.0.2":
version "5.16.6" version "6.0.2"
resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.6.tgz#60110c106dd482dfdb7e2aa94fd6490a0a3f8852" resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.0.2.tgz#7eac59f5e9e1a7efba24d245d62de91752a67cc3"
integrity sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g== integrity sha512-qd3Vlhted0SYVGotnCfVNcxff7vW2WN0fclbAexff60NeNS1qs/H/CImHEHUBiUGeNWMPRochbN6VF1arQ7/jA==
dependencies: dependencies:
"@babel/runtime" "^7.23.9" "@babel/runtime" "^7.25.0"
"@emotion/cache" "^11.11.0" "@emotion/cache" "^11.13.1"
csstype "^3.1.3" csstype "^3.1.3"
prop-types "^15.8.1" prop-types "^15.8.1"
"@mui/system@^5.16.6": "@mui/system@^6.0.2":
version "5.16.6" version "6.0.2"
resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.6.tgz#2dabe63d2e45816ce611c40d6e3f79b9c2ccbcd7" resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.0.2.tgz#9dce511047f63a5d819914cc978b719f439ebbc3"
integrity sha512-5xgyJjBIMPw8HIaZpfbGAaFYPwImQn7Nyh+wwKWhvkoIeDosQ1ZMVrbTclefi7G8hNmqhip04duYwYpbBFnBgw== integrity sha512-AZv1/C4PuHgWFTA8YraIzl3FTVLdRz0RIMRwEADWZBdIhnuTHS/4+r8qE9+3CcpTHg1WsEu8btaO3AhQahSM9A==
dependencies: dependencies:
"@babel/runtime" "^7.23.9" "@babel/runtime" "^7.25.0"
"@mui/private-theming" "^5.16.6" "@mui/private-theming" "^6.0.2"
"@mui/styled-engine" "^5.16.6" "@mui/styled-engine" "^6.0.2"
"@mui/types" "^7.2.15" "@mui/types" "^7.2.16"
"@mui/utils" "^5.16.6" "@mui/utils" "^6.0.2"
clsx "^2.1.0" clsx "^2.1.1"
csstype "^3.1.3" csstype "^3.1.3"
prop-types "^15.8.1" prop-types "^15.8.1"
@@ -2772,6 +2741,11 @@
resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.15.tgz#dadd232fe9a70be0d526630675dff3b110f30b53" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.15.tgz#dadd232fe9a70be0d526630675dff3b110f30b53"
integrity sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q== integrity sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q==
"@mui/types@^7.2.16":
version "7.2.16"
resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.16.tgz#66710c691b51cd4fca95322100cd74ec230cfe30"
integrity sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag==
"@mui/utils@^5.16.6": "@mui/utils@^5.16.6":
version "5.16.6" version "5.16.6"
resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.6.tgz#905875bbc58d3dcc24531c3314a6807aba22a711" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.6.tgz#905875bbc58d3dcc24531c3314a6807aba22a711"
@@ -2784,6 +2758,18 @@
prop-types "^15.8.1" prop-types "^15.8.1"
react-is "^18.3.1" react-is "^18.3.1"
"@mui/utils@^6.0.2":
version "6.0.2"
resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.0.2.tgz#be3c7e79af074bce57559b7ea4c693d3a4c3c2ca"
integrity sha512-TeFrYsxcmeoDSlkoPhX+LjIuuqC5Pyj+xz2kRceKCkUpwMNTEeVOfowXDPe+mboZwmpJ5ZxP4eiAgQMdeEasjg==
dependencies:
"@babel/runtime" "^7.25.0"
"@mui/types" "^7.2.16"
"@types/prop-types" "^15.7.12"
clsx "^2.1.1"
prop-types "^15.8.1"
react-is "^18.3.1"
"@mui/x-date-pickers@7.15.0": "@mui/x-date-pickers@7.15.0":
version "7.15.0" version "7.15.0"
resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.15.0.tgz#a2e0979dda5d38fd34e5be76064b8331ef228894" resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.15.0.tgz#a2e0979dda5d38fd34e5be76064b8331ef228894"
@@ -3140,13 +3126,6 @@
hoist-non-react-statics "^3.3.0" hoist-non-react-statics "^3.3.0"
redux "^4.0.0" redux "^4.0.0"
"@types/react-transition-group@^4.4.10":
version "4.4.10"
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac"
integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==
dependencies:
"@types/react" "*"
"@types/react-transition-group@^4.4.11": "@types/react-transition-group@^4.4.11":
version "4.4.11" version "4.4.11"
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.11.tgz#d963253a611d757de01ebb241143b1017d5d63d5" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.11.tgz#d963253a611d757de01ebb241143b1017d5d63d5"
@@ -4014,11 +3993,6 @@ clone@^1.0.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
clsx@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb"
integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==
clsx@^2.1.1: clsx@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"