Files
decePubClient/Components/Daisy/DataInput/DInput.razor
T

65 lines
2.2 KiB
Plaintext
Raw Normal View History

@typeparam TValue
@inherits DInputBase<TValue>
@* daisyUI Input: https://daisyui.com/components/input/ . With Prefix or Suffix (icons, labels, kbd) the input class
moves to a wrapping <label>, as daisyUI requires when the field holds more than one element. *@
@if (Prefix is null && Suffix is null)
{
<input @attributes="InputAttributes" type="@Type" class="@CssClassFull" name="@NameAttribute"
value="@CurrentValueAsString" @oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />
}
else
{
<label class="@CssClassFull">
@Prefix
<input @attributes="InputAttributes" type="@Type" class="grow" name="@NameAttribute"
value="@CurrentValueAsString" @oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />
@Suffix
</label>
}
@code {
[Parameter] public string Type { get; set; } = "text";
[Parameter] public DColor Color { get; set; }
[Parameter] public DSize Size { get; set; }
[Parameter] public bool Ghost { get; set; }
/// <summary>Update the bound value on every keystroke instead of on change.</summary>
[Parameter] public bool Immediate { get; set; }
[Parameter] public RenderFragment Prefix { get; set; }
[Parameter] public RenderFragment Suffix { get; set; }
/// <summary>Adds daisyUI's validator class: error/success colors and a following DValidatorHint.</summary>
[Parameter] public bool Validator { get; set; }
string CssClassFull => Cx("input", IsInvalid ? "input-error" : ColorClass, SizeClass, Ghost ? "input-ghost" : null,
Validator ? "validator" : null, CssClass);
string ColorClass => Color switch
{
DColor.Neutral => "input-neutral",
DColor.Primary => "input-primary",
DColor.Secondary => "input-secondary",
DColor.Accent => "input-accent",
DColor.Info => "input-info",
DColor.Success => "input-success",
DColor.Warning => "input-warning",
DColor.Error => "input-error",
_ => null
};
string SizeClass => Size switch
{
DSize.Xs => "input-xs",
DSize.Sm => "input-sm",
DSize.Lg => "input-lg",
DSize.Xl => "input-xl",
_ => null
};
void OnInput(ChangeEventArgs e)
{
if (Immediate)
CurrentValueAsString = e.Value?.ToString();
}
void OnChange(ChangeEventArgs e) => CurrentValueAsString = e.Value?.ToString();
}