docs: reflect Phase 20 Theater Mode landing in PLAN, COMPLETED, CLAUDE.md, and spec status
This commit is contained in:
@@ -443,54 +443,6 @@ not the same work; this phase does not satisfy or depend on that one.
|
||||
|
||||
---
|
||||
|
||||
## Phase 20 — Theater Mode (public Release Detail views)
|
||||
|
||||
A presentation-only feature on the **public listener site** (`DeepDrftPublic` / `DeepDrftPublic.Client`;
|
||||
**no CMS, no API, no data, no schema change**). On a Release Detail view, a new toggle clears the page
|
||||
chrome away from the visualizer: hide the release content (`@if`-gated header/meta/track-list/blurb and
|
||||
the Session/Mix hero overlay) so the lava-lamp + waveform field fills the surface unobstructed, while
|
||||
the **player bar grows** to carry the release identity the hidden page would otherwise show — cover art,
|
||||
release title, and a release-mode share. Borrowed namesake: YouTube/Twitch "theater mode" — collapse the
|
||||
surrounding chrome to let the media (here, the visualizer) take over, one reversible toggle. Full design,
|
||||
component-by-component placement, the SOLID state seam, theming reuse, acceptance criteria, and open
|
||||
questions: `product-notes/phase-20-theater-mode.md`.
|
||||
|
||||
**Scope — the three detail views (verified):** `Pages/CutDetail.razor` (scaffold `Ambient` visualizer),
|
||||
`Pages/SessionDetail.razor` (mounts the visualizer directly — **does not** use `ReleaseDetailScaffold`),
|
||||
`Pages/MixDetail.razor` (scaffold, full-bleed mode-A visualizer). The feature must behave **identically**
|
||||
across all three; the Session-doesn't-use-the-scaffold asymmetry is the key constraint the state design
|
||||
works around.
|
||||
|
||||
**Architectural spine.** **One boolean, multiple observers** (memory: *one source, multiple views*).
|
||||
State home (OQ3, resolved): **widen `WaveformVisualizerControlState` with a `TheaterMode` flag** —
|
||||
the object is already scoped, session-persistent, observed via its `Changed` event, gated on the same
|
||||
`LavaEnabled || WaveformEnabled` the Theater button reads, and *explicitly designed to widen by adding a
|
||||
field + default*. The
|
||||
**detail pages own only the content `@if`** (each page gates the fragments it renders, so the scaffold
|
||||
stays Theater-unaware and Session is covered the same way); the **player bar owns only the enlargement**
|
||||
(reads `CurrentTrack.Release` — `Title`/`ImagePath`/`EntryKey`/`Medium`, all already on the DTO — and
|
||||
renders a small `NowShowingPanel` presentational sub-component); the **toggle button owns only the
|
||||
mutation**. No page reaches into the bar; the bar reaches into no page.
|
||||
|
||||
**Theming (DRY — hard requirement).** The toggle is a `MudIconButton` in `.dd-accent-icon` (green-accent
|
||||
glyph both themes, zero new CSS — same as the lava-lamp trigger it sits beside); the enlarged bar binds
|
||||
existing theme-aware aliases (`--deepdrft-page-surface`/`-text`/`-text-muted`), reuses the
|
||||
`deepdrft-track-detail-cover-art` cover idiom, and wraps the release `SharePopover` in `.dd-accent-icon`.
|
||||
**No new dark overrides, no new palette `Color`, no new token family.**
|
||||
|
||||
**Button placement + gating.** A new right-side icon button immediately **left of the lava-lamp toggle**,
|
||||
visible only when `LavaEnabled || WaveformEnabled`, disabled until interactive, with an on/off active
|
||||
state. Material `Theaters` glyph for v1 (bespoke `DDIcons` deferred — Phase 17 OQ7 precedent).
|
||||
|
||||
**Open questions — all six resolved (Daniel, 2026-06-20; spec §9).** OQ1: Material `Theaters` glyph for
|
||||
v1. OQ2: playing-release only — bar stays a pure function of player state. OQ3: Option A — widen
|
||||
`WaveformVisualizerControlState` with a `TheaterMode` flag. OQ4: top action row (back, lava, theater)
|
||||
stays visible — it's controls, not content. OQ5: session-scoped, resets to OFF on fresh page load.
|
||||
OQ6: detail-pages-only for v1; no Theater affordance on the home hero.
|
||||
|
||||
**Status: scoped and approved — Phase 20, Wave 1.** Cold-start; no dependency on any in-flight phase
|
||||
(Phases 11/16/17 — the player bar, queue, and visualizer it builds on — are all complete).
|
||||
|
||||
---
|
||||
|
||||
## Working with this file
|
||||
|
||||
Reference in New Issue
Block a user