From e4b0ce3df03f2867228f834c9fd350ae6cc96816 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Mon, 21 Sep 2026 14:39:20 +0200 Subject: [PATCH] =?UTF-8?q?web-player:=20P12=20=E2=80=94=20chrome=20de=20l?= =?UTF-8?q?a=20app=20(layout,=20navegaci=C3=B3n,=20reproductor)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PlayerExtras se fusiona en PlayerBar, que ahora renderiza volumen y botón de cola inline y usa el nuevo Slider (input range real con grosor de thumb controlado por variables CSS) para barra de progreso y volumen, sustituyendo a SeekBar y VolumeControl (se confirmó por grep que el modo `compact` de SeekBar era código muerto). Sidebar y TabsBar migran a appNavLinks(user, counts?) (creado en P5), eliminando la duplicación de los enlaces de navegación entre ambos. Decisión tomada sin bloquear: Sidebar gana la marca-gradiente Logo que no tenía antes, para consistencia visual con MobileHeader y la pantalla de login. z-index de PlayerDock y MobileHeader corregido a z-(--z-sticky) (son barras fijas, no menús) y el de SegmentedControl a z-(--z-raised), tal como indica la nota B.1.5 del plan. glass-bar y theme-transition se aplican en PlayerBar (ambas variantes), TabsBar, Queue e Inicio (hero/spotlight), sustituyendo estilos duplicados de blur/transición. Verificado con npm run check (0 errores) y npm run build; smoke test de /login sin errores de consola. Sin QA visual autenticada (Docker no disponible en esta sesión). --- 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 @@