diff --git a/front/src/App.vue b/front/src/App.vue index c8732d958..dc6a4bdb5 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -9,15 +9,13 @@ import { color } from '~/composables/color'; import { generateTrackCreditStringFromQueue } from '~/utils/utils' -// TODO: Check if these modals are still needed: // import ChannelUploadModal from '~/components/channels/UploadModal.vue' -// import PlaylistModal from '~/components/playlists/PlaylistModal.vue' -// import FilterModal from '~/components/moderation/FilterModal.vue' -// import ReportModal from '~/components/moderation/ReportModal.vue' -// import ServiceMessages from '~/components/ServiceMessages.vue' -// TODO: Modernise and add player/queue: +import PlaylistModal from '~/components/playlists/PlaylistModal.vue' +import FilterModal from '~/components/moderation/FilterModal.vue' +import ReportModal from '~/components/moderation/ReportModal.vue' +import ServiceMessages from '~/components/ServiceMessages.vue' import AudioPlayer from '~/components/audio/Player.vue' -// import Queue from '~/components/Queue.vue' +import Queue from '~/components/Queue.vue' import Sidebar from '~/ui/components/Sidebar.vue' import ShortcutsModal from '~/ui/modals/Shortcuts.vue' import LanguagesModal from '~/ui/modals/Languages.vue' @@ -83,8 +81,15 @@ store.dispatch('auth/fetchUser') + + + + + + + diff --git a/front/src/components/Queue.vue b/front/src/components/Queue.vue index c4f068476..6ab5cfb6a 100644 --- a/front/src/components/Queue.vue +++ b/front/src/components/Queue.vue @@ -22,6 +22,8 @@ import PlayerControls from '~/components/audio/PlayerControls.vue' import VirtualList from '~/components/vui/list/VirtualList.vue' import QueueItem from '~/components/QueueItem.vue' +import Button from '~/components/ui/Button.vue' + const MilkDrop = defineAsyncComponent(() => import('~/components/audio/visualizer/MilkDrop.vue')) const { @@ -174,7 +176,7 @@ if (!isWebGLSupported) { - - - - + - - + /> - - - - + - - + /> @@ -345,20 +340,21 @@ if (!isWebGLSupported) { - - - + /> @@ -399,16 +395,21 @@ if (!isWebGLSupported) { - - + > + {{ t('components.Queue.button.clear') }} + {{ labels.queue }} @@ -421,7 +422,7 @@ if (!isWebGLSupported) { - + {{ endsIn }} @@ -464,18 +465,19 @@ if (!isWebGLSupported) { > - + {{ t('components.Queue.header.radio') }} {{ t('components.Queue.message.radio') }} - {{ t('components.Queue.button.stopRadio') }} - + diff --git a/front/src/components/QueueItem.vue b/front/src/components/QueueItem.vue index edeac69e2..86e4b8271 100644 --- a/front/src/components/QueueItem.vue +++ b/front/src/components/QueueItem.vue @@ -5,6 +5,8 @@ import time from '~/utils/time' import { generateTrackCreditStringFromQueue } from '~/utils/utils' import { useStore } from '~/store' +import Button from '~/components/ui/Button.vue' + const store = useStore() interface Events { @@ -27,7 +29,7 @@ defineProps() tabindex="0" > - + () > - () {{ generateTrackCreditStringFromQueue(source) }} - + @@ -57,26 +59,28 @@ defineProps() - - - - + - - + /> diff --git a/front/src/components/audio/Player.vue b/front/src/components/audio/Player.vue index 0681735bb..76ba2420e 100644 --- a/front/src/components/audio/Player.vue +++ b/front/src/components/audio/Player.vue @@ -48,12 +48,21 @@ const store = useStore() const router = useRouter() const { t } = useI18n() -const toggleMobilePlayer = () => { - store.commit('ui/queueFocused', ['queue', 'player'].includes(store.state.ui.queueFocused as string) ? null : 'player') +/** Toggle between null and player */ +const togglePlayer = () => { + store.commit('ui/queueFocused', + store.state.ui.queueFocused === 'queue' ? null + : store.state.ui.queueFocused === 'player' ? null + : 'player' + ) +} + +const switchTab = () => { + store.commit('ui/queueFocused', store.state.ui.queueFocused === 'player' ? 'queue' : 'player') } // Key binds -onKeyboardShortcut('e', toggleMobilePlayer) +onKeyboardShortcut('e', togglePlayer) onKeyboardShortcut('p', () => { isPlaying.value = !isPlaying.value }) onKeyboardShortcut('s', shuffle) onKeyboardShortcut('q', clear) @@ -87,10 +96,6 @@ const labels = computed(() => ({ addArtistContentFilter: t('components.audio.Player.label.addArtistContentFilter') })) -const switchTab = () => { - store.commit('ui/queueFocused', store.state.ui.queueFocused === 'player' ? 'queue' : 'player') -} - const progressBar = ref() const touchProgress = (event: MouseEvent) => { const time = ((event.clientX - ((event.target as Element).closest('.progress')?.getBoundingClientRect().left ?? 0)) / progressBar.value.offsetWidth) * duration.value @@ -138,7 +143,7 @@ const hideArtist = () => { /> { @click.prevent.stop="shuffle()" /> + + @@ -320,7 +327,6 @@ const hideArtist = () => { @@ -334,37 +340,19 @@ const hideArtist = () => { - + :class="['desktop-and-up', { 'close-control': store.state.ui.queueFocused }]" + :icon="store.state.ui.queueFocused ? 'bi-chevron-down' : 'bi-chevron-up'" + :aria-pressed="store.state.ui.queueFocused ? true : undefined" + @click.stop="togglePlayer" + /> - - - - - + /> * { padding: 0.5em; } - } + .close-control { + background-color: transparent; + & i { + color: var(--vibrant-color); + } + } + } } } diff --git a/front/src/style/components/_queue.scss b/front/src/style/components/_queue.scss index 69197f8a5..794c9b8e9 100644 --- a/front/src/style/components/_queue.scss +++ b/front/src/style/components/_queue.scss @@ -1,3 +1,14 @@ +.opaque { + @include dark-theme { + background-color: rgba(#292525, 0.8); + } + @include light-theme { + background-color: rgba(#ffffff, 0.8); + } + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); +} + .queue-controls { @include media(" i { + color: var(--fw-red-800); + } */ + &.active { - background: #E0E0E0; - color: #000000de; + background: var(--player-color); + color: var(--player-background); + + .button > i { + color: var(--player-background); + } + + /* .button.pink > i { + color: var(--fw-red-800); + } */ + + &:hover .button > i { + color: var(--player-color); + } } } }
{{ t('components.Queue.message.radio') }}