refactor(tailwind): replace deprecated tailwind utilities (#2542)

This commit is contained in:
Pierre Spring
2026-02-25 13:28:00 +01:00
committed by GitHub
parent a00c9e5e7c
commit f42a4ecf82
33 changed files with 83 additions and 91 deletions

View File

@@ -28,7 +28,7 @@ const AppDataWarning = () => {
<Alert <Alert
title={intl.formatMessage(messages.dockerVolumeMissingDescription, { title={intl.formatMessage(messages.dockerVolumeMissingDescription, {
code: (msg: React.ReactNode) => ( code: (msg: React.ReactNode) => (
<code className="bg-opacity-50">{msg}</code> <code className="bg-gray-800/50">{msg}</code>
), ),
appDataPath: data.appDataPath, appDataPath: data.appDataPath,
})} })}

View File

@@ -441,13 +441,13 @@ const BlocklistedItem = ({ item, revalidateList }: BlocklistedItemProps) => {
)} )}
<div className="card-field"> <div className="card-field">
{item.mediaType === 'movie' ? ( {item.mediaType === 'movie' ? (
<div className="pointer-events-none z-40 self-start rounded-full border border-blue-500 bg-blue-600 bg-opacity-80 shadow-md"> <div className="pointer-events-none z-40 self-start rounded-full border border-blue-500 bg-blue-600/80 shadow-md">
<div className="flex h-4 items-center px-2 py-2 text-center text-xs font-medium uppercase tracking-wider text-white sm:h-5"> <div className="flex h-4 items-center px-2 py-2 text-center text-xs font-medium uppercase tracking-wider text-white sm:h-5">
{intl.formatMessage(globalMessages.movie)} {intl.formatMessage(globalMessages.movie)}
</div> </div>
</div> </div>
) : ( ) : (
<div className="pointer-events-none z-40 self-start rounded-full border border-purple-600 bg-purple-600 bg-opacity-80 shadow-md"> <div className="pointer-events-none z-40 self-start rounded-full border border-purple-600 bg-purple-600/80 shadow-md">
<div className="flex h-4 items-center px-2 py-2 text-center text-xs font-medium uppercase tracking-wider text-white sm:h-5"> <div className="flex h-4 items-center px-2 py-2 text-center text-xs font-medium uppercase tracking-wider text-white sm:h-5">
{intl.formatMessage(globalMessages.tvshow)} {intl.formatMessage(globalMessages.tvshow)}
</div> </div>

View File

@@ -12,8 +12,7 @@ interface AlertProps {
const Alert = ({ title, children, type }: AlertProps) => { const Alert = ({ title, children, type }: AlertProps) => {
let design = { let design = {
bgColor: bgColor: 'border border-yellow-500 backdrop-blur bg-yellow-400/20',
'border border-yellow-500 backdrop-blur bg-yellow-400 bg-opacity-20',
titleColor: 'text-yellow-100', titleColor: 'text-yellow-100',
textColor: 'text-yellow-300', textColor: 'text-yellow-300',
svg: <ExclamationTriangleIcon className="h-5 w-5" />, svg: <ExclamationTriangleIcon className="h-5 w-5" />,
@@ -22,8 +21,7 @@ const Alert = ({ title, children, type }: AlertProps) => {
switch (type) { switch (type) {
case 'info': case 'info':
design = { design = {
bgColor: bgColor: 'border border-indigo-500 backdrop-blur bg-indigo-400/20',
'border border-indigo-500 backdrop-blur bg-indigo-400 bg-opacity-20',
titleColor: 'text-gray-100', titleColor: 'text-gray-100',
textColor: 'text-gray-300', textColor: 'text-gray-300',
svg: <InformationCircleIcon className="h-5 w-5" />, svg: <InformationCircleIcon className="h-5 w-5" />,

View File

@@ -31,27 +31,25 @@ const Badge = (
switch (badgeType) { switch (badgeType) {
case 'danger': case 'danger':
badgeStyle.push( badgeStyle.push('bg-red-600/80 border-red-500 border !text-red-100');
'bg-red-600 bg-opacity-80 border-red-500 border !text-red-100'
);
if (href) { if (href) {
badgeStyle.push('hover:bg-red-500 bg-opacity-100'); badgeStyle.push('hover:bg-red-500');
} }
break; break;
case 'warning': case 'warning':
badgeStyle.push( badgeStyle.push(
'bg-yellow-500 bg-opacity-80 border-yellow-500 border !text-yellow-100' 'bg-yellow-500/80 border-yellow-500 border !text-yellow-100'
); );
if (href) { if (href) {
badgeStyle.push('hover:bg-yellow-500 hover:bg-opacity-100'); badgeStyle.push('hover:bg-yellow-500');
} }
break; break;
case 'success': case 'success':
badgeStyle.push( badgeStyle.push(
'bg-green-500 bg-opacity-80 border border-green-500 !text-green-100' 'bg-green-500/80 border border-green-500 !text-green-100'
); );
if (href) { if (href) {
badgeStyle.push('hover:bg-green-500 hover:bg-opacity-100'); badgeStyle.push('hover:bg-green-500');
} }
break; break;
case 'dark': case 'dark':
@@ -68,10 +66,10 @@ const Badge = (
break; break;
default: default:
badgeStyle.push( badgeStyle.push(
'bg-indigo-500 bg-opacity-80 border border-indigo-500 !text-indigo-100' 'bg-indigo-500/80 border border-indigo-500 !text-indigo-100'
); );
if (href) { if (href) {
badgeStyle.push('hover:bg-indigo-500 hover:bg-opacity-100'); badgeStyle.push('hover:bg-indigo-500');
} }
} }

View File

@@ -52,22 +52,22 @@ function Button<P extends ElementTypes = 'button'>(
switch (buttonType) { switch (buttonType) {
case 'primary': case 'primary':
buttonStyle.push( buttonStyle.push(
'text-white border border-indigo-500 bg-indigo-600 bg-opacity-80 hover:bg-opacity-100 hover:border-indigo-500 focus:border-indigo-700 focus:ring-indigo active:bg-opacity-100 active:border-indigo-700' 'text-white border border-indigo-500 bg-indigo-600/80 hover:bg-indigo-600 hover:border-indigo-500 focus:border-indigo-700 focus:ring-indigo active:bg-indigo-600 active:border-indigo-700'
); );
break; break;
case 'danger': case 'danger':
buttonStyle.push( buttonStyle.push(
'text-white bg-red-600 bg-opacity-80 border-red-500 hover:bg-opacity-100 hover:border-red-500 focus:border-red-700 focus:ring-red active:bg-red-700 active:border-red-700' 'text-white bg-red-600/80 border-red-500 hover:bg-red-600 hover:border-red-500 focus:border-red-700 focus:ring-red active:bg-red-700 active:border-red-700'
); );
break; break;
case 'warning': case 'warning':
buttonStyle.push( buttonStyle.push(
'text-white border border-yellow-500 bg-yellow-500 bg-opacity-80 hover:bg-opacity-100 hover:border-yellow-400 focus:border-yellow-700 focus:ring-yellow active:bg-opacity-100 active:border-yellow-700' 'text-white border border-yellow-500 bg-yellow-500/80 hover:bg-yellow-500 hover:border-yellow-400 focus:border-yellow-700 focus:ring-yellow active:bg-yellow-500 active:border-yellow-700'
); );
break; break;
case 'success': case 'success':
buttonStyle.push( buttonStyle.push(
'text-white bg-green-500 bg-opacity-80 border-green-500 hover:bg-opacity-100 hover:border-green-400 focus:border-green-700 focus:ring-green active:bg-opacity-100 active:border-green-700' 'text-white bg-green-500/80 border-green-500 hover:bg-green-500 hover:border-green-400 focus:border-green-700 focus:ring-green active:bg-green-500 active:border-green-700'
); );
break; break;
case 'ghost': case 'ghost':
@@ -77,7 +77,7 @@ function Button<P extends ElementTypes = 'button'>(
break; break;
default: default:
buttonStyle.push( buttonStyle.push(
'text-gray-200 bg-gray-800 bg-opacity-80 border-gray-600 hover:text-white hover:bg-gray-700 hover:border-gray-600 group-hover:text-white group-hover:bg-gray-700 group-hover:border-gray-600 focus:border-blue-300 focus:ring-blue active:text-gray-200 active:bg-gray-700 active:border-gray-600' 'text-gray-200 bg-gray-800/80 border-gray-600 hover:text-white hover:bg-gray-700 hover:border-gray-600 group-hover:text-white group-hover:bg-gray-700 group-hover:border-gray-600 focus:border-blue-300 focus:ring-blue active:text-gray-200 active:bg-gray-700 active:border-gray-600'
); );
} }

View File

@@ -34,9 +34,9 @@ const ButtonWithDropdown = ({
break; break;
default: default:
styleClasses.mainButtonClasses += styleClasses.mainButtonClasses +=
' bg-indigo-600 border-indigo-500 bg-opacity-80 hover:bg-opacity-100 hover:border-indigo-500 active:bg-indigo-700 active:border-indigo-700 focus:ring-blue'; ' bg-indigo-600/80 border-indigo-500 hover:bg-indigo-600 hover:border-indigo-500 active:bg-indigo-700 active:border-indigo-700 focus:ring-blue';
styleClasses.dropdownSideButtonClasses += styleClasses.dropdownSideButtonClasses +=
' bg-indigo-600 bg-opacity-80 border-indigo-500 hover:bg-opacity-100 active:bg-opacity-100 focus:ring-blue'; ' bg-indigo-600/80 border-indigo-500 hover:bg-indigo-600 active:bg-indigo-600 focus:ring-blue';
} }
const TriggerElement = props.as ?? 'button'; const TriggerElement = props.as ?? 'button';

View File

@@ -59,7 +59,7 @@ const DropdownItems = ({
className={[ className={[
'absolute right-0 z-40 -mr-1 mt-2 w-56 origin-top-right rounded-md p-1 shadow-lg', 'absolute right-0 z-40 -mr-1 mt-2 w-56 origin-top-right rounded-md p-1 shadow-lg',
dropdownType === 'ghost' dropdownType === 'ghost'
? 'border border-gray-700 bg-gray-800 bg-opacity-80 backdrop-blur' ? 'border border-gray-700 bg-gray-800/80 backdrop-blur'
: 'bg-indigo-600', : 'bg-indigo-600',
className, className,
].join(' ')} ].join(' ')}
@@ -95,7 +95,7 @@ const Dropdown = ({
'button-md inline-flex h-full items-center space-x-2 rounded-md border px-4 py-2 text-sm font-medium leading-5 text-white transition duration-150 ease-in-out hover:z-20 focus:z-20 focus:outline-none', 'button-md inline-flex h-full items-center space-x-2 rounded-md border px-4 py-2 text-sm font-medium leading-5 text-white transition duration-150 ease-in-out hover:z-20 focus:z-20 focus:outline-none',
buttonType === 'ghost' buttonType === 'ghost'
? 'border-gray-600 bg-transparent hover:border-gray-200 focus:border-gray-100 active:border-gray-100' ? 'border-gray-600 bg-transparent hover:border-gray-200 focus:border-gray-100 active:border-gray-100'
: 'focus:ring-blue border-indigo-500 bg-indigo-600 bg-opacity-80 hover:border-indigo-500 hover:bg-opacity-100 active:border-indigo-700 active:bg-indigo-700', : `focus:ring-blue border-indigo-500 bg-indigo-600/80 hover:border-indigo-500 hover:bg-indigo-600 active:border-indigo-700 active:bg-indigo-700`,
className, className,
].join(' ')} ].join(' ')}
ref={buttonRef} ref={buttonRef}

View File

@@ -91,7 +91,7 @@ const Modal = React.forwardRef<HTMLDivElement, ModalProps>(
<Transition.Child <Transition.Child
appear appear
as="div" as="div"
className="fixed bottom-0 left-0 right-0 top-0 z-50 flex h-full w-full items-center justify-center bg-gray-800 bg-opacity-70" className="fixed bottom-0 left-0 right-0 top-0 z-50 flex h-full w-full items-center justify-center bg-gray-800/70"
enter="transition-opacity duration-300" enter="transition-opacity duration-300"
enterFrom="opacity-0" enterFrom="opacity-0"
enterTo="opacity-100" enterTo="opacity-100"

View File

@@ -46,7 +46,7 @@ const SlideOver = ({
> >
{/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */} {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}
<div <div
className={`fixed inset-0 z-50 overflow-hidden bg-gray-800 bg-opacity-70`} className={`fixed inset-0 z-50 overflow-hidden bg-gray-800/70`}
onClick={() => onClose()} onClick={() => onClose()}
onKeyDown={(e) => { onKeyDown={(e) => {
if (e.key === 'Escape') { if (e.key === 'Escape') {
@@ -71,7 +71,7 @@ const SlideOver = ({
ref={slideoverRef} ref={slideoverRef}
onClick={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()}
> >
<div className="flex h-full flex-col rounded-lg bg-gray-800 bg-opacity-80 shadow-xl ring-1 ring-gray-700 backdrop-blur"> <div className="flex h-full flex-col rounded-lg bg-gray-800/80 shadow-xl ring-1 ring-gray-700 backdrop-blur">
<header className="space-y-1 border-b border-gray-700 px-4 py-4"> <header className="space-y-1 border-b border-gray-700 px-4 py-4">
<div className="flex items-center justify-between space-x-3"> <div className="flex items-center justify-between space-x-3">
<h2 className="text-overseerr text-2xl font-bold leading-7"> <h2 className="text-overseerr text-2xl font-bold leading-7">

View File

@@ -24,7 +24,7 @@ const StatusBadgeMini = ({
shrink = false, shrink = false,
}: StatusBadgeMiniProps) => { }: StatusBadgeMiniProps) => {
const badgeStyle = [ const badgeStyle = [
`rounded-full bg-opacity-80 shadow-md ${ `rounded-full shadow-md ${
shrink ? 'w-4 sm:w-5 border p-0' : 'w-5 ring-1 p-0.5' shrink ? 'w-4 sm:w-5 border p-0' : 'w-5 ring-1 p-0.5'
}`, }`,
]; ];
@@ -34,34 +34,34 @@ const StatusBadgeMini = ({
switch (status) { switch (status) {
case MediaStatus.PROCESSING: case MediaStatus.PROCESSING:
badgeStyle.push( badgeStyle.push(
'bg-indigo-500 border-indigo-400 ring-indigo-400 text-indigo-100' 'bg-indigo-500/80 border-indigo-400 ring-indigo-400 text-indigo-100'
); );
indicatorIcon = <ClockIcon />; indicatorIcon = <ClockIcon />;
break; break;
case MediaStatus.AVAILABLE: case MediaStatus.AVAILABLE:
badgeStyle.push( badgeStyle.push(
'bg-green-500 border-green-400 ring-green-400 text-green-100' 'bg-green-500/80 border-green-400 ring-green-400 text-green-100'
); );
indicatorIcon = <CheckCircleIcon />; indicatorIcon = <CheckCircleIcon />;
break; break;
case MediaStatus.PENDING: case MediaStatus.PENDING:
badgeStyle.push( badgeStyle.push(
'bg-yellow-500 border-yellow-400 ring-yellow-400 text-yellow-100' 'bg-yellow-500/80 border-yellow-400 ring-yellow-400 text-yellow-100'
); );
indicatorIcon = <BellIcon />; indicatorIcon = <BellIcon />;
break; break;
case MediaStatus.BLOCKLISTED: case MediaStatus.BLOCKLISTED:
badgeStyle.push('bg-red-500 border-white-400 ring-white-400 text-white'); badgeStyle.push('bg-red-500/80 border-white ring-white text-white');
indicatorIcon = <EyeSlashIcon />; indicatorIcon = <EyeSlashIcon />;
break; break;
case MediaStatus.PARTIALLY_AVAILABLE: case MediaStatus.PARTIALLY_AVAILABLE:
badgeStyle.push( badgeStyle.push(
'bg-green-500 border-green-400 ring-green-400 text-green-100' 'bg-green-500/80 border-green-400 ring-green-400 text-green-100'
); );
indicatorIcon = <MinusSmallIcon />; indicatorIcon = <MinusSmallIcon />;
break; break;
case MediaStatus.DELETED: case MediaStatus.DELETED:
badgeStyle.push('bg-red-500 border-red-400 ring-red-400 text-red-100'); badgeStyle.push('bg-red-500/80 border-red-400 ring-red-400 text-red-100');
indicatorIcon = <TrashIcon />; indicatorIcon = <TrashIcon />;
break; break;
} }

View File

@@ -159,7 +159,7 @@ const Discover = () => {
<button <button
onClick={() => setIsEditing(true)} onClick={() => setIsEditing(true)}
data-testid="discover-start-editing" data-testid="discover-start-editing"
className="h-12 w-12 rounded-full border-2 border-gray-600 bg-gray-700 bg-opacity-90 p-3 text-gray-400 shadow transition-all hover:bg-opacity-100" className="h-12 w-12 rounded-full border-2 border-gray-600 bg-gray-700/90 p-3 text-gray-400 shadow transition-all hover:bg-gray-700"
> >
<PencilIcon className="h-full w-full" /> <PencilIcon className="h-full w-full" />
</button> </button>
@@ -172,7 +172,7 @@ const Discover = () => {
leave="transition duration-300" leave="transition duration-300"
leaveFrom="opacity-100 translate-y-0" leaveFrom="opacity-100 translate-y-0"
leaveTo="opacity-0 translate-y-6" leaveTo="opacity-0 translate-y-6"
className="safe-shift-edit-menu fixed left-0 right-0 z-50 flex flex-col items-center justify-end space-x-0 space-y-2 border-t border-gray-700 bg-gray-800 bg-opacity-80 p-4 backdrop-blur sm:bottom-0 sm:flex-row sm:space-x-3 sm:space-y-0" className="safe-shift-edit-menu fixed left-0 right-0 z-50 flex flex-col items-center justify-end space-x-0 space-y-2 border-t border-gray-700 bg-gray-800/80 p-4 backdrop-blur sm:bottom-0 sm:flex-row sm:space-x-3 sm:space-y-0"
> >
<Button <Button
buttonType="default" buttonType="default"

View File

@@ -20,8 +20,8 @@ const GenreCard = ({ image, url, name, canExpand = false }: GenreCardProps) => {
canExpand ? 'w-full' : 'w-56 sm:w-72' canExpand ? 'w-full' : 'w-56 sm:w-72'
} transform-gpu cursor-pointer p-8 shadow ring-1 transition duration-300 ease-in-out ${ } transform-gpu cursor-pointer p-8 shadow ring-1 transition duration-300 ease-in-out ${
isHovered isHovered
? 'scale-105 bg-gray-700 bg-opacity-100 ring-gray-500' ? 'scale-105 bg-gray-700/100 ring-gray-500'
: 'scale-100 bg-gray-800 bg-opacity-80 ring-gray-700' : 'scale-100 bg-gray-800/80 ring-gray-700'
} overflow-hidden rounded-xl bg-cover bg-center`} } overflow-hidden rounded-xl bg-cover bg-center`}
onMouseEnter={() => { onMouseEnter={() => {
setHovered(true); setHovered(true);
@@ -43,8 +43,8 @@ const GenreCard = ({ image, url, name, canExpand = false }: GenreCardProps) => {
fill fill
/> />
<div <div
className={`absolute inset-0 z-10 h-full w-full bg-gray-800 transition duration-300 ${ className={`absolute inset-0 z-10 h-full w-full transition duration-300 ${
isHovered ? 'bg-opacity-10' : 'bg-opacity-30' isHovered ? 'bg-gray-800/10' : 'bg-gray-800/30'
}`} }`}
/> />
<div className="relative z-20 w-full truncate whitespace-normal text-center text-2xl font-bold text-white sm:text-3xl"> <div className="relative z-20 w-full truncate whitespace-normal text-center text-2xl font-bold text-white sm:text-3xl">

View File

@@ -244,7 +244,7 @@ const CreateIssueModal = ({
<RadioGroup.Label className="sr-only"> <RadioGroup.Label className="sr-only">
Select an Issue Select an Issue
</RadioGroup.Label> </RadioGroup.Label>
<div className="-space-y-px overflow-hidden rounded-md bg-gray-800 bg-opacity-30"> <div className="-space-y-px overflow-hidden rounded-md bg-gray-800/30">
{issueOptions.map((setting, index) => ( {issueOptions.map((setting, index) => (
<RadioGroup.Option <RadioGroup.Option
key={`issue-type-${setting.issueType}`} key={`issue-type-${setting.issueType}`}
@@ -256,7 +256,7 @@ const CreateIssueModal = ({
? 'rounded-bl-md rounded-br-md' ? 'rounded-bl-md rounded-br-md'
: '', : '',
checked checked
? 'z-10 border border-indigo-500 bg-indigo-400 bg-opacity-20' ? 'z-10 border border-indigo-500 bg-indigo-400/20'
: 'border-gray-500', : 'border-gray-500',
'relative flex cursor-pointer border p-4 focus:outline-none' 'relative flex cursor-pointer border p-4 focus:outline-none'
) )

View File

@@ -179,7 +179,7 @@ const MobileMenu = ({
leave="transition duration-500" leave="transition duration-500"
leaveFrom="opacity-100 -translate-y-full" leaveFrom="opacity-100 -translate-y-full"
leaveTo="opacity-0 translate-y-0" leaveTo="opacity-0 translate-y-0"
className="absolute left-0 right-0 top-0 flex w-full -translate-y-full flex-col space-y-6 border-t border-gray-600 bg-gray-900 bg-opacity-90 px-6 py-6 font-semibold text-gray-100 backdrop-blur" className="absolute left-0 right-0 top-0 flex w-full -translate-y-full flex-col space-y-6 border-t border-gray-600 bg-gray-900/90 px-6 py-6 font-semibold text-gray-100 backdrop-blur"
> >
{filteredLinks.map((link) => { {filteredLinks.map((link) => {
const isActive = router.pathname.match(link.activeRegExp); const isActive = router.pathname.match(link.activeRegExp);
@@ -225,7 +225,7 @@ const MobileMenu = ({
); );
})} })}
</Transition> </Transition>
<div className="padding-bottom-safe border-t border-gray-600 bg-gray-800 bg-opacity-90 backdrop-blur"> <div className="padding-bottom-safe border-t border-gray-600 bg-gray-800/90 backdrop-blur">
<div className="flex h-full items-center justify-between px-6 py-4 text-gray-100"> <div className="flex h-full items-center justify-between px-6 py-4 text-gray-100">
{filteredLinks {filteredLinks
.slice(0, filteredLinks.length === 5 ? 5 : 4) .slice(0, filteredLinks.length === 5 ? 5 : 4)

View File

@@ -24,7 +24,7 @@ const SearchInput = () => {
<input <input
id="search_field" id="search_field"
style={{ paddingRight: searchValue.length > 0 ? '1.75rem' : '' }} style={{ paddingRight: searchValue.length > 0 ? '1.75rem' : '' }}
className="block w-full rounded-full border border-gray-600 bg-gray-900 bg-opacity-80 py-2 pl-10 text-white placeholder-gray-300 hover:border-gray-500 focus:border-gray-500 focus:bg-opacity-100 focus:placeholder-gray-400 focus:outline-none focus:ring-0 sm:text-base" className="block w-full rounded-full border border-gray-600 bg-gray-900/80 py-2 pl-10 text-white placeholder-gray-300 hover:border-gray-500 focus:border-gray-500 focus:bg-gray-900 focus:placeholder-gray-400 focus:outline-none focus:ring-0 sm:text-base"
placeholder={intl.formatMessage(messages.searchPlaceholder)} placeholder={intl.formatMessage(messages.searchPlaceholder)}
type="search" type="search"
autoComplete="off" autoComplete="off"

View File

@@ -74,7 +74,7 @@ const UserDropdown = () => {
appear appear
> >
<Menu.Items className="absolute right-0 mt-2 w-72 origin-top-right rounded-md shadow-lg"> <Menu.Items className="absolute right-0 mt-2 w-72 origin-top-right rounded-md shadow-lg">
<div className="divide-y divide-gray-700 rounded-md bg-gray-800 bg-opacity-80 ring-1 ring-gray-700 backdrop-blur"> <div className="divide-y divide-gray-700 rounded-md bg-gray-800/80 ring-1 ring-gray-700 backdrop-blur">
<div className="flex flex-col space-y-4 px-4 py-4"> <div className="flex flex-col space-y-4 px-4 py-4">
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
<CachedImage <CachedImage

View File

@@ -88,8 +88,8 @@ const Layout = ({ children }: LayoutProps) => {
<div className="relative mb-16 flex w-0 min-w-0 flex-1 flex-col lg:ml-64"> <div className="relative mb-16 flex w-0 min-w-0 flex-1 flex-col lg:ml-64">
<PullToRefresh /> <PullToRefresh />
<div <div
className={`searchbar fixed left-0 right-0 top-0 z-10 flex flex-shrink-0 bg-opacity-80 transition duration-300 ${ className={`searchbar fixed left-0 right-0 top-0 z-10 flex flex-shrink-0 transition duration-300 ${
isScrolled ? 'bg-gray-700' : 'bg-transparent' isScrolled ? 'bg-gray-700/80' : 'bg-transparent'
} lg:left-64`} } lg:left-64`}
style={{ style={{
backdropFilter: isScrolled ? 'blur(5px)' : undefined, backdropFilter: isScrolled ? 'blur(5px)' : undefined,

View File

@@ -169,7 +169,7 @@ const Login = () => {
</div> </div>
<div className="relative z-50 mt-8 sm:mx-auto sm:w-full sm:max-w-md"> <div className="relative z-50 mt-8 sm:mx-auto sm:w-full sm:max-w-md">
<div <div
className="bg-gray-800 bg-opacity-50 shadow sm:rounded-lg" className="bg-gray-800/50 shadow sm:rounded-lg"
style={{ backdropFilter: 'blur(5px)' }} style={{ backdropFilter: 'blur(5px)' }}
> >
<> <>

View File

@@ -317,7 +317,7 @@ const CollectionRequestModal = ({
<table className="min-w-full"> <table className="min-w-full">
<thead> <thead>
<tr> <tr>
<th className="w-16 bg-gray-700 bg-opacity-80 px-4 py-3"> <th className="w-16 bg-gray-700/80 px-4 py-3">
<span <span
role="checkbox" role="checkbox"
tabIndex={0} tabIndex={0}
@@ -349,10 +349,10 @@ const CollectionRequestModal = ({
/> />
</span> </span>
</th> </th>
<th className="bg-gray-700 bg-opacity-80 px-1 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6"> <th className="bg-gray-700/80 px-1 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6">
{intl.formatMessage(globalMessages.movie)} {intl.formatMessage(globalMessages.movie)}
</th> </th>
<th className="bg-gray-700 bg-opacity-80 px-2 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6"> <th className="bg-gray-700/80 px-2 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6">
{intl.formatMessage(globalMessages.status)} {intl.formatMessage(globalMessages.status)}
</th> </th>
</tr> </tr>

View File

@@ -84,7 +84,7 @@ const SearchByNameModal = ({
onClick={() => handleClick(item.tvdbId)} onClick={() => handleClick(item.tvdbId)}
> >
<div <div
className={`flex h-40 w-full items-center overflow-hidden rounded-xl border border-gray-700 bg-gray-700 bg-opacity-20 p-2 shadow backdrop-blur transition ${ className={`flex h-40 w-full items-center overflow-hidden rounded-xl border border-gray-700 bg-gray-700/20 p-2 shadow backdrop-blur transition ${
tvdbId === item.tvdbId ? 'ring ring-indigo-500' : '' tvdbId === item.tvdbId ? 'ring ring-indigo-500' : ''
} `} } `}
> >

View File

@@ -529,7 +529,7 @@ const TvRequestModal = ({
<thead> <thead>
<tr> <tr>
<th <th
className={`w-16 bg-gray-700 bg-opacity-80 px-4 py-3 ${ className={`w-16 bg-gray-700/80 px-4 py-3 ${
!settings.currentSettings.partialRequestsEnabled && !settings.currentSettings.partialRequestsEnabled &&
'hidden' 'hidden'
}`} }`}
@@ -566,13 +566,13 @@ const TvRequestModal = ({
/> />
</span> </span>
</th> </th>
<th className="bg-gray-700 bg-opacity-80 px-1 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6"> <th className="bg-gray-700/80 px-1 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6">
{intl.formatMessage(messages.season)} {intl.formatMessage(messages.season)}
</th> </th>
<th className="bg-gray-700 bg-opacity-80 px-5 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6"> <th className="bg-gray-700/80 px-5 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6">
{intl.formatMessage(messages.numberofepisodes)} {intl.formatMessage(messages.numberofepisodes)}
</th> </th>
<th className="bg-gray-700 bg-opacity-80 px-2 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6"> <th className="bg-gray-700/80 px-2 py-3 text-left text-xs font-medium uppercase leading-4 tracking-wider text-gray-200 md:px-6">
{intl.formatMessage(globalMessages.status)} {intl.formatMessage(globalMessages.status)}
</th> </th>
</tr> </tr>

View File

@@ -65,7 +65,7 @@ const ResetPassword = () => {
</div> </div>
<div className="relative z-50 mt-8 sm:mx-auto sm:w-full sm:max-w-md"> <div className="relative z-50 mt-8 sm:mx-auto sm:w-full sm:max-w-md">
<div <div
className="bg-gray-800 bg-opacity-50 shadow sm:rounded-lg" className="bg-gray-800/50 shadow sm:rounded-lg"
style={{ backdropFilter: 'blur(5px)' }} style={{ backdropFilter: 'blur(5px)' }}
> >
<div className="px-10 py-8"> <div className="px-10 py-8">

View File

@@ -75,7 +75,7 @@ const ResetPassword = () => {
</div> </div>
<div className="relative z-50 mt-8 sm:mx-auto sm:w-full sm:max-w-md"> <div className="relative z-50 mt-8 sm:mx-auto sm:w-full sm:max-w-md">
<div <div
className="bg-gray-800 bg-opacity-50 shadow sm:rounded-lg" className="bg-gray-800/50 shadow sm:rounded-lg"
style={{ backdropFilter: 'blur(5px)' }} style={{ backdropFilter: 'blur(5px)' }}
> >
<div className="px-10 py-8"> <div className="px-10 py-8">

View File

@@ -228,7 +228,7 @@ const NotificationsTelegram = () => {
</a> </a>
), ),
code: (msg: React.ReactNode) => ( code: (msg: React.ReactNode) => (
<code className="bg-opacity-50">{msg}</code> <code className="bg-gray-800/50">{msg}</code>
), ),
})} })}
</span> </span>

View File

@@ -60,7 +60,7 @@ const SettingsAbout = () => {
intl.formatMessage(globalMessages.settings), intl.formatMessage(globalMessages.settings),
]} ]}
/> />
<div className="mt-6 rounded-md border border-indigo-500 bg-indigo-400 bg-opacity-20 p-4 backdrop-blur"> <div className="mt-6 rounded-md border border-indigo-500 bg-indigo-400/20 p-4 backdrop-blur">
<div className="flex"> <div className="flex">
<div className="flex-shrink-0"> <div className="flex-shrink-0">
<InformationCircleIcon className="h-5 w-5 text-gray-100" /> <InformationCircleIcon className="h-5 w-5 text-gray-100" />
@@ -88,7 +88,7 @@ const SettingsAbout = () => {
<Alert <Alert
title={intl.formatMessage(messages.runningDevelop, { title={intl.formatMessage(messages.runningDevelop, {
code: (msg: React.ReactNode) => ( code: (msg: React.ReactNode) => (
<code className="bg-opacity-50">{msg}</code> <code className="bg-gray-800/50">{msg}</code>
), ),
})} })}
/> />

View File

@@ -744,7 +744,7 @@ const SettingsJobs = () => {
<p className="description"> <p className="description">
{intl.formatMessage(messages.imagecacheDescription, { {intl.formatMessage(messages.imagecacheDescription, {
code: (msg: React.ReactNode) => ( code: (msg: React.ReactNode) => (
<code className="bg-opacity-50">{msg}</code> <code className="bg-gray-800/50">{msg}</code>
), ),
appDataPath: appData ? appData.appDataPath : '/app/config', appDataPath: appData ? appData.appDataPath : '/app/config',
})} })}

View File

@@ -245,7 +245,7 @@ const SettingsLogs = () => {
<p className="description"> <p className="description">
{intl.formatMessage(messages.logsDescription, { {intl.formatMessage(messages.logsDescription, {
code: (msg: React.ReactNode) => ( code: (msg: React.ReactNode) => (
<code className="whitespace-normal break-words bg-opacity-50"> <code className="whitespace-normal break-words bg-gray-800/50">
{msg} {msg}
</code> </code>
), ),

View File

@@ -164,7 +164,7 @@ const Setup = () => {
<AppDataWarning /> <AppDataWarning />
<nav className="relative z-50"> <nav className="relative z-50">
<ul <ul
className="divide-y divide-gray-600 rounded-md border border-gray-600 bg-gray-800 bg-opacity-50 md:flex md:divide-y-0" className="divide-y divide-gray-600 rounded-md border border-gray-600 bg-gray-800/50 md:flex md:divide-y-0"
style={{ backdropFilter: 'blur(5px)' }} style={{ backdropFilter: 'blur(5px)' }}
> >
<SetupSteps <SetupSteps
@@ -193,7 +193,7 @@ const Setup = () => {
/> />
</ul> </ul>
</nav> </nav>
<div className="mt-10 w-full rounded-md border border-gray-600 bg-gray-800 bg-opacity-50 p-4 text-white"> <div className="mt-10 w-full rounded-md border border-gray-600 bg-gray-800/50 p-4 text-white">
{currentStep === 1 && ( {currentStep === 1 && (
<div className="flex flex-col items-center pb-6"> <div className="flex flex-col items-center pb-6">
<div className="mb-2 flex justify-center text-xl font-bold"> <div className="mb-2 flex justify-center text-xl font-bold">

View File

@@ -137,12 +137,12 @@ const StatusBadge = ({
const badgeDownloadProgress = ( const badgeDownloadProgress = (
<div <div
className={`absolute left-0 top-0 z-10 flex h-full bg-opacity-80 ${ className={`absolute left-0 top-0 z-10 flex h-full ${
status === MediaStatus.DELETED status === MediaStatus.DELETED
? 'bg-red-600' ? 'bg-red-600/80'
: status === MediaStatus.PROCESSING : status === MediaStatus.PROCESSING
? 'bg-indigo-500' ? 'bg-indigo-500/80'
: 'bg-green-500' : 'bg-green-500/80'
} transition-all duration-200 ease-in-out`} } transition-all duration-200 ease-in-out`}
style={{ style={{
width: `${ width: `${
@@ -168,8 +168,7 @@ const StatusBadge = ({
badgeType="success" badgeType="success"
href={mediaLink} href={mediaLink}
className={`${ className={`${
inProgress && inProgress && 'relative !bg-gray-700/80 !px-0 hover:!bg-gray-700'
'relative !bg-gray-700 !bg-opacity-80 !px-0 hover:!bg-gray-700'
} overflow-hidden`} } overflow-hidden`}
> >
{inProgress && badgeDownloadProgress} {inProgress && badgeDownloadProgress}
@@ -234,8 +233,7 @@ const StatusBadge = ({
badgeType="success" badgeType="success"
href={mediaLink} href={mediaLink}
className={`${ className={`${
inProgress && inProgress && 'relative !bg-gray-700/80 !px-0 hover:!bg-gray-700'
'relative !bg-gray-700 !bg-opacity-80 !px-0 hover:!bg-gray-700'
} overflow-hidden`} } overflow-hidden`}
> >
{inProgress && badgeDownloadProgress} {inProgress && badgeDownloadProgress}
@@ -300,8 +298,7 @@ const StatusBadge = ({
badgeType="primary" badgeType="primary"
href={mediaLink} href={mediaLink}
className={`${ className={`${
inProgress && inProgress && 'relative !bg-gray-700/80 !px-0 hover:!bg-gray-700'
'relative !bg-gray-700 !bg-opacity-80 !px-0 hover:!bg-gray-700'
} overflow-hidden`} } overflow-hidden`}
> >
{inProgress && badgeDownloadProgress} {inProgress && badgeDownloadProgress}
@@ -388,8 +385,7 @@ const StatusBadge = ({
badgeType="danger" badgeType="danger"
href={mediaLink} href={mediaLink}
className={`${ className={`${
inProgress && inProgress && 'relative !bg-gray-700/80 !px-0 hover:!bg-gray-700'
'relative !bg-gray-700 !bg-opacity-80 !px-0 hover:!bg-gray-700'
} overflow-hidden`} } overflow-hidden`}
> >
{inProgress && badgeDownloadProgress} {inProgress && badgeDownloadProgress}

View File

@@ -341,10 +341,10 @@ const TitleCard = ({
/> />
<div className="absolute left-0 right-0 flex items-center justify-between p-2"> <div className="absolute left-0 right-0 flex items-center justify-between p-2">
<div <div
className={`pointer-events-none z-40 self-start rounded-full border bg-opacity-80 shadow-md ${ className={`pointer-events-none z-40 self-start rounded-full border shadow-md ${
mediaType === 'movie' || mediaType === 'collection' mediaType === 'movie' || mediaType === 'collection'
? 'border-blue-500 bg-blue-600' ? 'border-blue-500 bg-blue-600/80'
: 'border-purple-600 bg-purple-600' : 'border-purple-600 bg-purple-600/80'
}`} }`}
> >
<div className="flex h-4 items-center px-2 py-2 text-center text-xs font-medium uppercase tracking-wider text-white sm:h-5"> <div className="flex h-4 items-center px-2 py-2 text-center text-xs font-medium uppercase tracking-wider text-white sm:h-5">
@@ -432,7 +432,7 @@ const TitleCard = ({
leaveFrom="opacity-100" leaveFrom="opacity-100"
leaveTo="opacity-0" leaveTo="opacity-0"
> >
<div className="absolute inset-0 z-40 flex items-center justify-center rounded-xl bg-gray-800 bg-opacity-75 text-white"> <div className="absolute inset-0 z-40 flex items-center justify-center rounded-xl bg-gray-800/75 text-white">
<Spinner className="h-10 w-10" /> <Spinner className="h-10 w-10" />
</div> </div>
</Transition> </Transition>

View File

@@ -212,7 +212,7 @@ const UserLinkedAccountsSettings = () => {
{accounts.map((acct, i) => ( {accounts.map((acct, i) => (
<li <li
key={i} key={i}
className="flex items-center gap-4 overflow-hidden rounded-lg bg-gray-800 bg-opacity-50 px-4 py-5 shadow ring-1 ring-gray-700 sm:p-6" className="flex items-center gap-4 overflow-hidden rounded-lg bg-gray-800/50 px-4 py-5 shadow ring-1 ring-gray-700 sm:p-6"
> >
<div className="w-12"> <div className="w-12">
{acct.type === LinkedAccountType.Plex ? ( {acct.type === LinkedAccountType.Plex ? (

View File

@@ -153,7 +153,7 @@ const UserProfile = () => {
)) && ( )) && (
<div className="relative z-40"> <div className="relative z-40">
<dl className="mt-5 grid grid-cols-1 gap-5 lg:grid-cols-3"> <dl className="mt-5 grid grid-cols-1 gap-5 lg:grid-cols-3">
<div className="overflow-hidden rounded-lg bg-gray-800 bg-opacity-50 px-4 py-5 shadow ring-1 ring-gray-700 sm:p-6"> <div className="overflow-hidden rounded-lg bg-gray-800/50 px-4 py-5 shadow ring-1 ring-gray-700 sm:p-6">
<dt className="truncate text-sm font-bold text-gray-300"> <dt className="truncate text-sm font-bold text-gray-300">
{intl.formatMessage(messages.totalrequests)} {intl.formatMessage(messages.totalrequests)}
</dt> </dt>
@@ -173,7 +173,7 @@ const UserProfile = () => {
</dd> </dd>
</div> </div>
<div <div
className={`overflow-hidden rounded-lg bg-gray-800 bg-opacity-50 px-4 py-5 shadow ring-1 ${ className={`overflow-hidden rounded-lg bg-gray-800/50 px-4 py-5 shadow ring-1 ${
quota.movie.restricted quota.movie.restricted
? 'bg-gradient-to-t from-red-900 to-transparent ring-red-500' ? 'bg-gradient-to-t from-red-900 to-transparent ring-red-500'
: 'ring-gray-700' : 'ring-gray-700'
@@ -228,7 +228,7 @@ const UserProfile = () => {
</dd> </dd>
</div> </div>
<div <div
className={`overflow-hidden rounded-lg bg-gray-800 bg-opacity-50 px-4 py-5 shadow ring-1 ${ className={`overflow-hidden rounded-lg bg-gray-800/50 px-4 py-5 shadow ring-1 ${
quota.tv.restricted quota.tv.restricted
? 'bg-gradient-to-t from-red-900 to-transparent ring-red-500' ? 'bg-gradient-to-t from-red-900 to-transparent ring-red-500'
: 'ring-gray-700' : 'ring-gray-700'

View File

@@ -106,7 +106,7 @@
} }
.service-error-banner { .service-error-banner {
@apply mb-2 flex items-center gap-2 rounded-md border border-yellow-500 bg-yellow-500 bg-opacity-20 px-3 py-2 text-sm text-yellow-200; @apply mb-2 flex items-center gap-2 rounded-md border border-yellow-500 bg-yellow-500/20 px-3 py-2 text-sm text-yellow-200;
} }
.slider-title { .slider-title {
@@ -346,7 +346,7 @@
} }
button.input-action { button.input-action {
@apply relative -ml-px inline-flex items-center border border-gray-500 bg-indigo-600 bg-opacity-80 px-3 py-2 text-sm font-medium leading-5 text-white last:rounded-r-md sm:px-3.5; @apply relative -ml-px inline-flex items-center border border-gray-500 bg-indigo-600/80 px-3 py-2 text-sm font-medium leading-5 text-white last:rounded-r-md sm:px-3.5;
} }
button.input-action[disabled] { button.input-action[disabled] {
@@ -354,7 +354,7 @@
} }
button.input-action:not([disabled]) { button.input-action:not([disabled]) {
@apply transition duration-150 ease-in-out hover:bg-opacity-100 active:bg-gray-100 active:text-gray-700; @apply transition duration-150 ease-in-out hover:bg-indigo-600 active:bg-gray-100 active:text-gray-700;
} }
.button-md :where(svg), .button-md :where(svg),