@* Фоновая дорожка *@
@* Буфер *@
@* Активная шкала (заполнение) *@
@* Ползунок *@
@code { [Parameter] public double Value { get; set; } [Parameter] public double BufferValue { get; set; } [Parameter] public double Min { get; set; } = 0; [Parameter] public double Max { get; set; } = 100; [Parameter] public Color Color { get; set; } = Color.Primary; [Parameter] public EventCallback ValueChanged { get; set; } // Генерируем CSS класс на основе перечисления Color private string ColorClass => $"track-color-{Color.ToString().ToLower()}"; private async Task OnInput(ChangeEventArgs e) { if (double.TryParse(e.Value?.ToString(), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out var newValue)) { await ValueChanged.InvokeAsync(newValue); } } private async Task HandleWheel(WheelEventArgs e) { double range = Max - Min; double step = range * 0.02; var newValue = e.DeltaY < 0 ? Math.Min(Value + step, Max) : Math.Max(Value - step, Min); await ValueChanged.InvokeAsync(newValue); } private double CalculatePercentage(double val) { if (Max <= Min) return 0; return ((Math.Clamp(val, Min, Max) - Min) / (Max - Min)) * 100; } }