import { useLayoutEffect, useRef } from 'react'; import { Divider, Group } from '@mantine/core'; import { useHotkeys } from '@mantine/hooks'; import { Variants, motion } from 'framer-motion'; import { useTranslation } from 'react-i18next'; import { RiArrowDownSLine, RiSettings3Line } from 'react-icons/ri'; import { useLocation } from 'react-router'; import styled from 'styled-components'; import { Button, NumberInput, Option, Popover, Select, Slider, Switch, } from '/@/renderer/components'; import { useCurrentSong, useFullScreenPlayerStore, useFullScreenPlayerStoreActions, useLyricsSettings, useSettingsStore, useSettingsStoreActions, useWindowSettings, } from '/@/renderer/store'; import { useFastAverageColor } from '../../../hooks/use-fast-average-color'; import { FullScreenPlayerImage } from '/@/renderer/features/player/components/full-screen-player-image'; import { FullScreenPlayerQueue } from '/@/renderer/features/player/components/full-screen-player-queue'; import { TableConfigDropdown } from '/@/renderer/components/virtual-table'; import { Platform } from '/@/renderer/types'; const Container = styled(motion.div)` position: absolute; top: 0; left: 0; z-index: 200; display: flex; justify-content: center; padding: 2rem; @media screen and (orientation: portrait) { padding: 2rem 2rem 1rem; } `; const ResponsiveContainer = styled.div` display: grid; grid-template-rows: minmax(0, 1fr); grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 2rem 2rem; width: 100%; max-width: 2560px; margin-top: 5rem; @media screen and (orientation: portrait) { grid-template-rows: minmax(0, 1fr) minmax(0, 1fr); grid-template-columns: minmax(0, 1fr); margin-top: 0; } `; interface BackgroundImageOverlayProps { $blur: number; } const BackgroundImageOverlay = styled.div` position: absolute; top: 0; left: 0; z-index: -1; width: 100%; height: 100%; background: var(--bg-header-overlay); backdrop-filter: blur(${({ $blur }) => $blur}rem); `; const mainBackground = 'var(--main-bg)'; const Controls = () => { const { t } = useTranslation(); const { dynamicBackground, dynamicImageBlur, dynamicIsImage, expanded, opacity, useImageAspectRatio, } = useFullScreenPlayerStore(); const { setStore } = useFullScreenPlayerStoreActions(); const { setSettings } = useSettingsStoreActions(); const lyricConfig = useLyricsSettings(); const handleToggleFullScreenPlayer = () => { setStore({ expanded: !expanded }); }; const handleLyricsSettings = (property: string, value: any) => { setSettings({ lyrics: { ...useSettingsStore.getState().lyrics, [property]: value, }, }); }; useHotkeys([['Escape', handleToggleFullScreenPlayer]]); return ( {dynamicBackground && ( )} {dynamicBackground && dynamicIsImage && ( )} {dynamicBackground && ( )}