using Microsoft.AspNetCore.Components; namespace DeepDrftPublic.Client.Controls.AudioPlayerBar; /// /// Centre zone of the player: seek slider over the spectrum visualizer. /// Owns the pointer-gesture seek logic (drag-to-seek) in one place so it is no /// longer duplicated inline between the desktop and mobile branches of the parent. /// public partial class PlayerSeekZone : ComponentBase { private double _seekPosition; private bool _isSeeking = false; [Parameter] public double DisplayTime { get; set; } [Parameter] public double? Duration { get; set; } [Parameter] public bool CanSeek { get; set; } [Parameter] public EventCallback OnSeekStart { get; set; } [Parameter] public EventCallback OnSeekEnd { get; set; } [Parameter] public EventCallback OnSeekChange { get; set; } [Parameter] public string? Class { get; set; } private async Task HandlePointerDown() { _isSeeking = true; _seekPosition = DisplayTime; await OnSeekStart.InvokeAsync(); } private async Task HandlePointerUp() { _isSeeking = false; await OnSeekEnd.InvokeAsync(_seekPosition); } private async Task HandlePointerLeave() { if (_isSeeking) { _isSeeking = false; await OnSeekEnd.InvokeAsync(_seekPosition); } } private async Task HandleValueChanged(double value) { _seekPosition = value; await OnSeekChange.InvokeAsync(value); } }