66 lines
1.6 KiB
Plaintext
66 lines
1.6 KiB
Plaintext
@using System.Globalization
|
|
|
|
<input type="number"
|
|
value="@FormattedValue"
|
|
@onchange="OnChange"
|
|
step="@Step.ToString(CultureInfo.InvariantCulture)"
|
|
min="@(Min?.ToString(CultureInfo.InvariantCulture))"
|
|
max="@(Max?.ToString(CultureInfo.InvariantCulture))"
|
|
class="@CssClass" />
|
|
|
|
@code {
|
|
/// <summary>
|
|
/// Actual bind value
|
|
/// </summary>
|
|
[Parameter]
|
|
public double Value { get; set; }
|
|
|
|
/// <summary>
|
|
/// Event for value changed
|
|
/// </summary>
|
|
[Parameter]
|
|
public EventCallback<double> ValueChanged { get; set; }
|
|
|
|
/// <summary>
|
|
/// Number of decimal places to display
|
|
/// </summary>
|
|
[Parameter]
|
|
public int Decimals { get; set; } = 3;
|
|
|
|
/// <summary>
|
|
/// Step increment
|
|
/// </summary>
|
|
[Parameter]
|
|
public double Step { get; set; } = 0.001;
|
|
|
|
/// <summary>
|
|
/// Minimum value
|
|
/// </summary>
|
|
[Parameter]
|
|
public double? Min { get; set; }
|
|
|
|
/// <summary>
|
|
/// Maximum value
|
|
/// </summary>
|
|
[Parameter]
|
|
public double? Max { get; set; }
|
|
|
|
/// <summary>
|
|
/// CssClass for input component
|
|
/// </summary>
|
|
[Parameter]
|
|
public string CssClass { get; set; } = string.Empty;
|
|
|
|
private string FormattedValue => Value.ToString($"F{Decimals}", CultureInfo.InvariantCulture);
|
|
|
|
private async Task OnChange(ChangeEventArgs e)
|
|
{
|
|
if (double.TryParse(e.Value?.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsed))
|
|
{
|
|
var rounded = Math.Round(parsed, Decimals);
|
|
Value = rounded;
|
|
await ValueChanged.InvokeAsync(rounded);
|
|
}
|
|
}
|
|
}
|