Replace MudSlider seekbar with WaveformSeeker loudness-waveform control

DOM bar chart with clip-overlay progress split; pointer-capture drag;
WaveformProfile fetched on load (fire-and-forget, cancellable); flat
fallback when no profile; small lazily-loaded waveformSeeker.js for
getBoundingClientRect and setPointerCapture.
This commit is contained in:
daniel-c-harvey
2026-06-05 17:35:11 -04:00
parent 7c89220667
commit 8de7342352
12 changed files with 516 additions and 56 deletions
@@ -1,18 +1,9 @@
@namespace DeepDrftPublic.Client.Controls.AudioPlayerBar
<MudStack Row="false" Spacing="0" Class="@Class">
<div class="mx-3"
@onpointerdown="HandlePointerDown"
@onpointerup="HandlePointerUp"
@onpointerleave="HandlePointerLeave">
<MudSlider T="double"
Min="0"
Max="@(Duration ?? 0D)"
Step="0.1"
Value="@DisplayTime"
ValueChanged="HandleValueChanged"
Immediate="true"
Disabled="@(!CanSeek)"/>
</div>
<WaveformSeeker OnSeekStart="OnSeekStart"
OnSeekChange="OnSeekChange"
OnSeekEnd="OnSeekEnd"
Class="seek-waveform"/>
<TimestampLabel CurrentTime="DisplayTime" Duration="@Duration"/>
</MudStack>