From 5fa901c2e6e07cfd78f9ee821fb94acbcff0d614 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Mon, 21 Sep 2026 14:39:20 +0200 Subject: [PATCH] web-player: app chrome (layout, navigation, player) PlayerExtras is merged into PlayerBar, which now renders volume and the queue button inline and uses the new Slider (a real range input with thumb thickness controlled via CSS variables) for both the progress bar and volume, replacing SeekBar and VolumeControl (grep confirmed SeekBar's `compact` mode was dead code). Sidebar and TabsBar migrate to appNavLinks(user, counts?), removing the duplicated nav links between the two. Decision made without blocking: Sidebar gains the gradient Logo mark it didn't have before, for visual consistency with MobileHeader and the login screen. PlayerDock and MobileHeader's z-index is fixed to z-(--z-sticky) (they're fixed bars, not menus), and SegmentedControl's to z-(--z-raised), per the plan's note B.1.5. glass-bar and theme-transition are applied to PlayerBar (both variants), TabsBar, Queue and Home (hero/spotlight), replacing duplicated blur/transition styles. Verified with npm run check (0 errors) and npm run build; smoke-tested /login with no console errors. No authenticated visual QA (Docker unavailable this session). --- web-player/docs/frontend-refactor-plan.md | 2 +- .../src/lib/components/MobileHeader.svelte | 11 ++-- web-player/src/lib/components/Sidebar.svelte | 30 +++------ web-player/src/lib/components/TabsBar.svelte | 19 +----- .../lib/components/player/PlayerBar.svelte | 55 +++++++++++++--- .../lib/components/player/PlayerDock.svelte | 2 +- .../lib/components/player/PlayerExtras.svelte | 19 ------ .../src/lib/components/player/Queue.svelte | 2 +- .../src/lib/components/player/SeekBar.svelte | 48 -------------- .../components/player/VolumeControl.svelte | 52 ---------------- web-player/src/lib/components/ui/Logo.svelte | 22 +++++++ .../lib/components/ui/SegmentedControl.svelte | 2 +- .../src/lib/components/ui/Slider.svelte | 62 +++++++++++++++++++ web-player/src/routes/+page.svelte | 4 +- web-player/src/routes/login/+page.svelte | 10 +-- 15 files changed, 155 insertions(+), 185 deletions(-) delete mode 100644 web-player/src/lib/components/player/PlayerExtras.svelte delete mode 100644 web-player/src/lib/components/player/SeekBar.svelte delete mode 100644 web-player/src/lib/components/player/VolumeControl.svelte create mode 100644 web-player/src/lib/components/ui/Logo.svelte create mode 100644 web-player/src/lib/components/ui/Slider.svelte diff --git a/web-player/docs/frontend-refactor-plan.md b/web-player/docs/frontend-refactor-plan.md index c000bff..596f1d0 100644 --- a/web-player/docs/frontend-refactor-plan.md +++ b/web-player/docs/frontend-refactor-plan.md @@ -784,7 +784,7 @@ Tareas: | P9 | ✅ | (pendiente) | MediaCard gana hover-zoom del arte y scrim+PlayButton condicionados a `onPlay` (antes exclusivos de MixTile); ahora se aplicarían a cualquier card futura con onPlay, consistencia intencional. Sin QA visual autenticada (Docker no disponible) | | P10 | ✅ | (pendiente) | Decisión tomada (recomendada, sin bloquear): iconos en los botones de cabecera de playlist (antes solo álbum tenía). PlaylistHeader pierde su prop `id` sin usar tras inlinearlo. Explorar: la cabecera de "Resultados para…" ahora usa el `mb-7/8` de PageHeader en vez de un `mt-5` ajustado a mano antes de los chips de filtro — gap ligeramente mayor entre el resumen y los chips (Δ menor, documentado). Sin QA visual autenticada (Docker no disponible) | | P11 | ✅ | (pendiente) | CoverForm añade snippet `extra` (no está en la spec literal, solo `fields`) para el contenido a ancho completo bajo la fila portada+campos (descripción de álbum, selector de visibilidad de playlist) que no cabía en una única columna. Upload usa ImageDropzone con `onselect` (prop nueva) y se envuelve en `{#key}` para poder resetear tras publicar — Δ: el contenedor de portada pasa de 144/176px (móvil/desktop) a 144px fijo (size-cover-hero, sin variante desktop mayor), y el icono de posición vacía de 64px a 36px (icon-xl), tal como recomienda el plan. Sin QA visual autenticada (Docker no disponible) | -| P12 | ⬜ | | | +| P12 | ✅ | (pendiente) | PlayerExtras se fusiona en PlayerBar (volumen/cola inline); Slider sustituye a SeekBar+VolumeControl (confirmado por grep que el modo `compact` de SeekBar era código muerto). Sidebar y TabsBar migran a `appNavLinks()` (P5). Decisión tomada (sin bloquear): Sidebar gana la marca-gradiente `Logo` que no tenía antes, para consistencia con MobileHeader/login. z-index de PlayerDock/MobileHeader corregido a `z-(--z-sticky)` (son barras fijas, no menús) y SegmentedControl a `z-(--z-raised)`, tal como indica B.1.5. `glass-bar`/`theme-transition` aplicados en PlayerBar (ambas variantes), TabsBar, Queue e Inicio (hero/spotlight), sustituyendo estilos duplicados. Sin QA visual autenticada (Docker no disponible); smoke test de `/login` sin errores de consola | | P13 | ⬜ | | | | P14 | ⬜ | | | diff --git a/web-player/src/lib/components/MobileHeader.svelte b/web-player/src/lib/components/MobileHeader.svelte index d6757bd..f449659 100644 --- a/web-player/src/lib/components/MobileHeader.svelte +++ b/web-player/src/lib/components/MobileHeader.svelte @@ -7,6 +7,7 @@ import AccountMenu from './ui/AccountMenu.svelte'; import Avatar from './ui/Avatar.svelte'; import IconButton from './ui/IconButton.svelte'; + import Logo from './ui/Logo.svelte'; interface Props { user: SessionUser | null; @@ -17,14 +18,10 @@
- - - Musify + + {#if user} diff --git a/web-player/src/lib/components/Sidebar.svelte b/web-player/src/lib/components/Sidebar.svelte index b9bc7da..1ed8134 100644 --- a/web-player/src/lib/components/Sidebar.svelte +++ b/web-player/src/lib/components/Sidebar.svelte @@ -1,18 +1,12 @@