From 614cfeafc05a1763261c205278ce9549bdcda21e Mon Sep 17 00:00:00 2001 From: ArneBo Date: Wed, 5 Feb 2025 02:34:21 +0100 Subject: [PATCH] refactor(front): Player --- front/src/components/audio/Player.vue | 122 ++++++++--------- front/src/components/audio/PlayerControls.vue | 54 ++++---- front/src/components/audio/VolumeControl.vue | 15 ++- front/src/style/_vars.scss | 3 - front/src/style/colors.scss | 9 ++ front/src/style/components/_player.scss | 123 ++++++------------ 6 files changed, 148 insertions(+), 178 deletions(-) diff --git a/front/src/components/audio/Player.vue b/front/src/components/audio/Player.vue index 1d1f3c45e..5fff30821 100644 --- a/front/src/components/audio/Player.vue +++ b/front/src/components/audio/Player.vue @@ -15,6 +15,7 @@ import TrackFavoriteIcon from '~/components/favorites/TrackFavoriteIcon.vue' import TrackPlaylistIcon from '~/components/playlists/TrackPlaylistIcon.vue' import PlayerControls from './PlayerControls.vue' import VolumeControl from './VolumeControl.vue' +import Button from '~/components/ui/Button.vue' const { LoopingMode, @@ -160,10 +161,11 @@ const hideArtist = () => { class="ui tiny image" @click.stop.prevent="router.push({name: 'library.tracks.detail', params: {id: currentTrack.id }})" > +
{ > @@ -186,7 +188,7 @@ const hideArtist = () => { :key="ac.artist.id" > @@ -198,7 +200,7 @@ const hideArtist = () => { + + diff --git a/front/src/components/audio/PlayerControls.vue b/front/src/components/audio/PlayerControls.vue index dcd5c09c1..136e28811 100644 --- a/front/src/components/audio/PlayerControls.vue +++ b/front/src/components/audio/PlayerControls.vue @@ -5,6 +5,8 @@ import { computed } from 'vue' import { usePlayer } from '~/composables/audio/player' import { useQueue } from '~/composables/audio/queue' +import Button from '~/components/ui/Button.vue' + const { playPrevious, hasNext, playNext, currentTrack } = useQueue() const { isPlaying } = usePlayer() @@ -19,40 +21,36 @@ const labels = computed(() => ({ diff --git a/front/src/components/audio/VolumeControl.vue b/front/src/components/audio/VolumeControl.vue index 04e9d8ae9..407fb4a05 100644 --- a/front/src/components/audio/VolumeControl.vue +++ b/front/src/components/audio/VolumeControl.vue @@ -4,6 +4,8 @@ import { useTimeoutFn } from '@vueuse/core' import { ref, computed } from 'vue' import { useI18n } from 'vue-i18n' +import Button from '~/components/ui/Button.vue' + const { volume, mute } = usePlayer() const expanded = ref(false) @@ -32,8 +34,9 @@ const scroll = (event: WheelEvent) => { diff --git a/front/src/style/_vars.scss b/front/src/style/_vars.scss index 8d5d0611a..8f59a182a 100644 --- a/front/src/style/_vars.scss +++ b/front/src/style/_vars.scss @@ -102,9 +102,6 @@ $dropdown-item-selected-background: var(--dropdown-item-hover-background) !defau $segment-color: var(--text-color) !default; $segment-background: var(--site-background) !default; -$player-color: rgba(255, 255, 255, 0.9) !default; -$player-background: #1B1C1D !default; - $table-background: transparent !default; $table-border: var(--divider) !default; diff --git a/front/src/style/colors.scss b/front/src/style/colors.scss index 443c9eb1a..2ffe27a75 100644 --- a/front/src/style/colors.scss +++ b/front/src/style/colors.scss @@ -107,6 +107,9 @@ --disabled-background-color:var(--fw-beige-100); --disabled-border-color:var(--fw-beige-100); + --player-color: var(--fw-gray-700); + --player-background: var(--fw-blue-010); + &.raised { --background-color:var(--fw-beige-300); --border-color:color-mix(in oklab, var(--fw-beige-400) 90%, currentcolor); @@ -295,6 +298,9 @@ } } + + + // Dark theme :is(body.theme-dark, html.dark>body:not(.theme-light)), .force-dark-theme.force-dark-theme.force-dark-theme { @@ -323,6 +329,9 @@ --disabled-background-color:var(--fw-gray-950); --disabled-border-color:var(--fw-gray-950); + --player-color: var(--fw-gray-300); + --player-background: var(--fw-gray-950); + &.raised{ --background-color:var(--fw-gray-950); --border-color:var(--fw-gray-600); diff --git a/front/src/style/components/_player.scss b/front/src/style/components/_player.scss index f9e2987a7..7a55a990d 100644 --- a/front/src/style/components/_player.scss +++ b/front/src/style/components/_player.scss @@ -6,9 +6,8 @@ .ui.top.attached.progress { top: 0; - height: 1rem; + height: 3px; z-index: 1; - padding-bottom: 0.8rem; border-radius: 0; .bar { @@ -18,7 +17,7 @@ } .ui.bottom-player > .segment.fixed-controls { - color: var(--player-color); + color: var(--color); background: var(--player-background); width: 100%; border-radius: 0; @@ -106,18 +105,44 @@ justify-content: flex-start; flex-grow: 1; .image { - padding: 0.5em; + margin: 0.5em; width: auto; - margin-right: 0.5em; + margin-right: 1em; > img { - max-height: 3.7em; - max-width: 4.7em; + max-height: 40px; + max-width: 40px; } } } .controls { min-width: 8em; - font-size: 1.1em; + + a { + text-decoration: none; + font-size: 16px; + } + + .meta { + line-height: 1.5em; + } + + .button { + border: none; + cursor: pointer; + + &:hover { + background-color: transparent; + > i { + color: var(--color); + transform: scale(1.2); + } + } + } + + #volume-slider { + accent-color: var(--vibrant-color); + } + @include media(">desktop") { &:not(.fluid) { width: 20%; @@ -129,7 +154,11 @@ width: 10%; } &.player-controls { - width: 15%; + gap: 8px; + + & i { + font-size: 1.8em; + } } } &.small, .small { @@ -137,11 +166,12 @@ font-size: 0.9em; } } - .icon { - font-size: 1.1em; + i { + font-size: 1.3em; + color: var(--player-color); } - .icon.large { - font-size: 1.4em; + .large i { + font-size: 3.2em; } &:not(.track-controls) { @include media(">desktop") { @@ -159,11 +189,6 @@ padding: 0.5em; } } - &.player-controls { - .icon { - margin: 0; - } - } } } @@ -171,74 +196,12 @@ .component-player { .controls { display: flex; - justify-content: space-between; - } - - .controls .icon.big { - cursor: pointer; - font-size: 2em !important; - } - - .controls .icon { - cursor: pointer; - vertical-align: middle; - } - .timer { - font-size: 1.2em; - } - .looping { - i { - position: relative; - } - .ui.circular.label { - font-family: sans-serif; - position: absolute; - font-size: 0.5em !important; - bottom: -0.7rem; - right: -0.7rem; - padding: 2px 0 !important; - width: 15px !important; - height: 15px !important; - min-width: 15px !important; - min-height: 15px !important; - @include media(">desktop") { - font-size: 0.6em !important; - } - } } .shuffling { color: var(--vibrant-color); } - .control.circular.button { - padding: 0; - border: none; - background-color: transparent; - color: inherit; - - } .fake-dropdown { - border: 1px solid gray; - border-radius: 3px; display: flex; - align-items: center; - justify-content: space-between; - min-width: 8em; z-index: 2; - > .control.button { - padding: 0.5em; - - } - .position.control { - flex-grow: 1; - - i.stream.icon { - position: relative; - top: -2px; - left: -2px; - } - } - .angle.icon { - margin-right: 0; - } } }