using System.Numerics; using Microsoft.AspNetCore.Components; namespace AIStudio.Components; public partial class MudTextSlider : ComponentBase where T : struct, INumber { /// /// The minimum value for the slider. /// [Parameter] public T Min { get; set; } = T.Zero; /// /// The maximum value for the slider. /// [Parameter] public T Max { get; set; } = T.One; /// /// The step size for the slider. /// [Parameter] public T Step { get; set; } = T.One; /// /// The unit to display next to the slider's value. /// [Parameter] public string Unit { get; set; } = string.Empty; [Parameter] public T Value { get; set; } [Parameter] public EventCallback ValueChanged { get; set; } /// /// The label to display above the slider. /// [Parameter] public string Label { get; set; } = string.Empty; [Parameter] public Func Disabled { get; set; } = () => false; #region Overrides of ComponentBase protected override async Task OnInitializedAsync() { await this.EnsureMinMax(); await base.OnInitializedAsync(); } protected override async Task OnParametersSetAsync() { await this.EnsureMinMax(); await base.OnParametersSetAsync(); } #endregion private async Task EnsureMinMax() { if (this.Value < this.Min) await this.ValueUpdated(this.Min); else if(this.Value > this.Max) await this.ValueUpdated(this.Max); } private async Task ValueUpdated(T value) { this.Value = value; await this.ValueChanged.InvokeAsync(this.Value); } }