Phase 9 Wave 4: ARCHIVE nav + Cuts/Sessions/Mixes pages + MixWaveformVisualizer

Replaces flat RELEASES/SESSIONS/MIXES nav with ARCHIVE dropdown (PageRoute.Children,
one-level cap, dual-role node). Adds /archive overview, /cuts (AlbumsView + medium
filter; /albums redirects), /sessions + /sessions/{id} (hero-dominant), /mixes +
/mixes/{id} (MixWaveformVisualizer full-page background). Extracts ReleaseDetailScaffold
from TrackDetail (invariant trio). PersistentComponentState bridge on all new pages.
Click-to-seek seam designed on MixWaveformVisualizer (inert until wired).
This commit is contained in:
daniel-c-harvey
2026-06-12 23:05:25 -04:00
parent 5f7eaed112
commit af724ce570
31 changed files with 1334 additions and 122 deletions
+29 -17
View File
@@ -10,21 +10,33 @@
<ul class="dd-nav-links">
@foreach (var navPage in Pages.MenuPages)
{
<li>
<a href="@navPage.Route" class="dd-nav-link">@navPage.Name</a>
</li>
@if (navPage.HasChildren)
{
@* Dual-role node: the parent anchor navigates to its own route on click,
while hover/focus reveals the child dropdown (pure CSS, no JS). *@
<li class="dd-nav-item-parent">
<a href="@navPage.Route" class="dd-nav-link">@navPage.Name</a>
<ul class="dd-nav-dropdown">
@foreach (var child in navPage.Children)
{
<li>
<a href="@child.Route" class="dd-nav-link dd-nav-dropdown-link">@child.Name</a>
</li>
}
</ul>
</li>
}
else
{
<li>
<a href="@navPage.Route" class="dd-nav-link">@navPage.Name</a>
</li>
}
}
</ul>
<div class="dd-nav-actions">
<StreamNowButton ButtonClass="dd-nav-cta" ButtonLabel="Stream Now &#9654;" />
@* <button type="button" *@
@* class="dd-nav-toggle" *@
@* aria-label="Toggle dark mode" *@
@* aria-pressed="@IsDarkMode.ToString().ToLowerInvariant()" *@
@* @onclick="DarkModeToggle"> *@
@* @((MarkupString)DarkLightModeIconSvg) *@
@* </button> *@
</div>
</nav>
</div>
@@ -35,13 +47,6 @@
<a class="dd-nav-brand" href="/">Deep DRFT</a>
<div class="dd-nav-actions">
@* <button type="button" *@
@* class="dd-nav-toggle" *@
@* aria-label="Toggle dark mode" *@
@* aria-pressed="@IsDarkMode.ToString().ToLowerInvariant()" *@
@* @onclick="DarkModeToggle"> *@
@* @((MarkupString)DarkLightModeIconSvg) *@
@* </button> *@
<button type="button"
class="dd-nav-hamburger"
aria-label="Toggle navigation"
@@ -59,6 +64,13 @@
<li>
<a href="@navPage.Route" class="dd-nav-link" @onclick="CloseMobileMenu">@navPage.Name</a>
</li>
@* One-level fan-out: render children as an indented sub-list under the parent link. *@
@foreach (var child in navPage.Children)
{
<li class="dd-nav-mobile-child">
<a href="@child.Route" class="dd-nav-link" @onclick="CloseMobileMenu">@child.Name</a>
</li>
}
}
<li>
<StreamNowButton ButtonClass="dd-nav-cta" ButtonLabel="Stream Now &#9654;" OnStreamStarted="CloseMobileMenu" />