From 6f0f438f30284b476f5b5b392fb327066cc6e76c Mon Sep 17 00:00:00 2001 From: dev Date: Tue, 4 Aug 2026 22:45:35 +0200 Subject: [PATCH] docs(media-player): el handoff recoge las cuatro entregas de la tarde Waveform visible, velocidad bajable, API de eventos y transporte de lista. Con la leccion reutilizable: componer un primitivo desde soma deja su receta fuera, la carga el componente que lo compone. Co-Authored-By: Claude Opus 5 --- docs/process/CONTINUE-sound-engine.md | 38 ++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/docs/process/CONTINUE-sound-engine.md b/docs/process/CONTINUE-sound-engine.md index 2179bd574..789510a34 100644 --- a/docs/process/CONTINUE-sound-engine.md +++ b/docs/process/CONTINUE-sound-engine.md @@ -305,8 +305,44 @@ De este hilo quedan **cuatro cosas, y ninguna es código a ciegas**: 4. **El rojo de `audio-player` en `lint.test.ts`** — guard compartido, decisión pendiente entre categoría nueva o `KNOWN_MISSING_MORFO`. +## Sesión 2026-08-04 (tarde) — cuatro entregas, todas verificadas en navegador + +Commits `ee51172d8` · `5cbb03904` · `dbd239bcc` (+ el waveform, `127c4c95b`). +El detalle está en los mensajes y en el README de eidos del componente; aquí +sólo lo que cambia el mapa. + +1. **El waveform ya se VE en la demo.** No se veía por dos causas encadenadas: + el scrubber compone el Waveform de _soma_, así que su envoltorio de eidos + nunca montaba y **su receta no se importaba** (onda sin estilar, 255px de + alto); y la muestra local era `whoosh.wav`, de **0,18 s**. El player carga + ahora `waveform.css` igual que ya cargaba `slider.css`, y la demo usa + `/music/t2.wav` (2:44). ⚠️ **Lección reutilizable**: componer un primitivo + desde soma deja su receta fuera — la carga el componente que lo compone. +2. **La velocidad ya se puede BAJAR** (`RateFloat`). El `RateButton` sólo subía + y recortaba en `2×`. Ahora `AudioLayout` compone un `DropdownMenu` + + `RadioGroup`; el disparador sigue siendo el `RateButton` real, con su ciclado + anulado vía `preventDefault()` en la costura. ⚠️ Dos defectos del panel + portado, los mismos que el float de volumen: el suelo de `12rem` del menú, y + **la etiqueta redimensionaba el botón y desplazaba la botonera** (ancho fijo + `4.6em`, medido 64·74·88·121px). +3. **API de eventos para la app** — `onPlay` · `onPause` · `onEnded` · + `onError`. Antes no había NINGUNA: la única vía era enchufar un + `MediaProvider` entero. Dos divergencias deliberadas respecto a la capa + perceptual, las dos en el test: el `pause` del final natural no se reporta, y + `onEnded` SÍ dispara para un final por salto (que `commit-complete` exime). +4. **Transporte de lista** — `RestartButton` + `SkipButton` (morfo **25** partes, + las dos opt-in, sin eventos sema nuevos por decisión del usuario). El player + **no tiene cola a propósito**: `onPrevious`/`onNext` piden y la app cambia el + `src`. Una dirección sin manejador se pinta deshabilitada, que es justo el + aspecto de los extremos de una cola. + +⚠️ **Otra sesión commitea en esta misma rama** (hilo de dirección): verificar +`HEAD` antes de dar nada por perdido, y `git reset -q` + `add` sólo lo propio. + El siguiente ítem de CÓDIGO del componente no es de este hilo sino del handoff -hermano: **`settings-button`**, lo único que separa al morfo de 23/23. +hermano: **`settings-button`**, lo único que separa al morfo de 25/25 — y su +alcance ENCOGIÓ: la velocidad ya tiene su lista, así que al menú de ajustes sólo +le quedan calidad y pista. Ver [`CONTINUE-player-rtl.md`](./CONTINUE-player-rtl.md) §0. ## Trampas de este repo (verificadas a base de perder tiempo)