Files
lux/Lux.UI/Components/Compo/Base/InputDecimal.razor
T
2025-10-31 11:21:01 +01:00

60 lines
1.5 KiB
Plaintext

@using System.Globalization
@inherits InputBase<decimal>
<input type="number"
value="@CurrentValueAsString"
@onchange="OnChange"
step="@Step"
min="@Min"
max="@Max"
class="@CssClass" />
@code {
/// <summary>
/// Number of decimal digits to display (default 3).
/// </summary>
[Parameter] public int Decimals { get; set; } = 3;
/// <summary>
/// Step increment for the number input (default 0.001).
/// </summary>
[Parameter] public decimal Step { get; set; } = 0.001M;
/// <summary>
/// Optional minimum value.
/// </summary>
[Parameter] public decimal? Min { get; set; }
/// <summary>
/// Optional maximum value.
/// </summary>
[Parameter] public decimal? Max { get; set; }
protected override string FormatValueAsString(decimal value)
{
return value.ToString($"F{Decimals}", CultureInfo.InvariantCulture);
}
protected override bool TryParseValueFromString(
string value,
out decimal result,
out string validationErrorMessage)
{
if (decimal.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out var parsed))
{
result = Math.Round(parsed, Decimals);
validationErrorMessage = null;
return true;
}
result = 0;
validationErrorMessage = "Invalid decimal number";
return false;
}
private void OnChange(ChangeEventArgs e)
{
CurrentValueAsString = e.Value?.ToString();
}
}