@page "/mixes/{EntryKey}"
@using DeepDrftPublic.Client.Controls
@inherits ReleaseDetailBase
@(ViewModel.Release?.Title ?? "Mix") - DeepDrft
@if (ViewModel.IsLoading)
{
}
else if (ViewModel.NotFound || ViewModel.Release is null)
{
}
else
{
var release = ViewModel.Release;
var hasGenre = release.Genre is not null;
var hasDate = release.ReleaseDate is not null;
@* Full-page waveform sits behind the scaffold content. The scaffold's container is positioned
above it via the mix-detail-foreground stacking context. TrackId lets the visualizer couple to
playback only when the player is on this mix's track. *@
@* The seven-knob band lives in its own full-width area below the back/lamp top row.
Blazor — not CSS — controls its visibility: it is rendered only while the lava-lamp is
on, so when off it is not in the DOM at all. No background, no animation, no reflow of
the row above. The band mutates the shared MixVisualizerControlState; the backdrop
bridge pushes the dials. A knob drag does not toggle it — the lamp's click does. *@
@if (_controlsExpanded)
{
}
@* Lava-lamp button top-right, across from the back link. Toggles the knob band below the
row. The icon swaps to its FILLED variant while the band is shown (§7f / Part B). *@
@if (!string.IsNullOrEmpty(release.ImagePath))
{
}
else
{
}
@if (hasGenre)
{
@release.Genre
}
@if (hasDate)
{
Released
@release.ReleaseDate!.Value.ToString("MMMM yyyy")
}
@* Release-mode share: copies the canonical /mixes/{entryKey} URL, not a single track (§3b). *@
}
@code {
protected override string PersistKey => "mix-detail";
// Lava-lamp knob-band visibility. Pure presentation over MixVisualizerControlState — gates whether
// the seven-knob MixVisualizerControls is rendered into the TopContent band; toggling it touches no
// control value or bridge push. The lava-lamp button's filled/outline glyph is driven off this flag.
private bool _controlsExpanded;
private void ToggleSettings() => _controlsExpanded = !_controlsExpanded;
}