diff --git a/components/teks/karaoke-modal.js b/components/teks/karaoke-modal.js index 7d1e811..42053dc 100644 --- a/components/teks/karaoke-modal.js +++ b/components/teks/karaoke-modal.js @@ -1,16 +1,22 @@ 'use client' -import {useState, forwardRef} from 'react' +import {useState, useEffect, forwardRef} from 'react' import PropTypes from 'prop-types' import Fab from '@mui/material/Fab' import Dialog from '@mui/material/Dialog' import Slide from '@mui/material/Slide' import Box from '@mui/material/Box' +import Skeleton from '@mui/material/Skeleton' import IconButton from '@mui/material/IconButton' import Typography from '@mui/material/Typography' import Tooltip from '@mui/material/Tooltip' import useMediaQuery from '@mui/material/useMediaQuery' -import {useTheme} from '@mui/material/styles' +import {useTheme, keyframes} from '@mui/material/styles' + +const pulse = keyframes` + 0%, 100% { opacity: 0.18; transform: scale(1); } + 50% { opacity: 0.55; transform: scale(1.2); } +` import MicIcon from '@mui/icons-material/Mic' import CloseIcon from '@mui/icons-material/Close' @@ -33,9 +39,14 @@ function toEmbedUrl(url) { export default function KaraokeModal({url, titre, artistes}) { const [open, setOpen] = useState(false) + const [loaded, setLoaded] = useState(false) const theme = useTheme() const isMobile = useMediaQuery(theme.breakpoints.down('sm')) + useEffect(() => { + if (!open) setLoaded(false) + }, [open]) + return ( <> @@ -58,55 +69,63 @@ export default function KaraokeModal({url, titre, artistes}) { setOpen(false)} - TransitionComponent={SlideUp} + slots={{transition: SlideUp}} maxWidth={false} - slotProps={{ - backdrop: {sx: {backdropFilter: 'blur(6px)', bgcolor: 'rgba(0,0,0,0.85)'}} + sx={{ + '& .MuiDialog-container': { + alignItems: {xs: 'flex-end', sm: 'center'}, + } }} - PaperProps={{ - sx: { - bgcolor: '#000', - overflow: 'hidden', - ...(isMobile ? { - width: '100vw', - height: '100dvh', - maxWidth: 'none', - maxHeight: 'none', - m: 0, - borderRadius: 0, - } : { - width: 'calc(88vh * 9 / 16)', - height: '88vh', - maxWidth: 'none', - maxHeight: 'none', - borderRadius: 3, - }) + slotProps={{ + backdrop: {sx: {backdropFilter: 'blur(6px)', bgcolor: 'rgba(0,0,0,0.85)'}}, + paper: { + sx: { + bgcolor: '#000', + overflow: 'hidden', + ...(isMobile ? { + width: '100vw', + height: '100dvh', + maxWidth: 'none', + maxHeight: 'none', + m: 0, + borderRadius: 0, + boxShadow: 'none', + } : { + width: 'calc(88vh * 9 / 16)', + height: '88vh', + maxWidth: 'none', + maxHeight: 'none', + borderRadius: '16px', + boxShadow: '0 24px 64px rgba(0,0,0,0.7)', + }) + } } }} > - {/* Header superposé */} + {/* Header superposé en gradient */} - + {titre && ( - + {titre} )} {artistes?.length > 0 && ( - + {artistes.map(a => a.alias).join(', ')} )} @@ -116,10 +135,11 @@ export default function KaraokeModal({url, titre, artistes}) { onClick={() => setOpen(false)} aria-label='fermer' sx={{ + pointerEvents: 'auto', color: '#fff', bgcolor: 'rgba(255,255,255,0.15)', - backdropFilter: 'blur(4px)', - mt: 0.5, + backdropFilter: 'blur(8px)', + border: '1px solid rgba(255,255,255,0.12)', '&:hover': {bgcolor: 'rgba(255,255,255,0.25)'}, }} > @@ -128,14 +148,68 @@ export default function KaraokeModal({url, titre, artistes}) { {open && ( -