35 lines
1.3 KiB
Plaintext
35 lines
1.3 KiB
Plaintext
@inherits DComponentBase
|
|||
|
|
|
||
|
|
@* daisyUI Swap: https://daisyui.com/components/swap/ . A label around daisyUI's hidden checkbox: clicking anywhere on
|
||
|
|
it toggles the checkbox, whose state is bound to Active (@bind-Active); On shows while checked, Off otherwise. *@
|
||
|
|
<label @attributes="AdditionalAttributes" class="@CssClass">
|
||
|
|
<input type="checkbox" checked="@Active" disabled="@Disabled" aria-label="@LabelText" @onchange="OnChange" />
|
||
|
|
<div class="swap-on">@On</div>
|
||
|
|
<div class="swap-off">@Off</div>
|
||
|
|
</label>
|
||
|
|
|
||
|
|
@code {
|
||
|
|
[Parameter] public RenderFragment On { get; set; }
|
||
|
|
[Parameter] public RenderFragment Off { get; set; }
|
||
|
|
[Parameter] public bool Active { get; set; }
|
||
|
|
[Parameter] public EventCallback<bool> ActiveChanged { get; set; }
|
||
|
|
[Parameter] public DSwapEffect Effect { get; set; }
|
||
|
|
[Parameter] public bool Disabled { get; set; }
|
||
|
|
/// <summary>Accessible name of the checkbox (aria-label), for swaps that show only icons.</summary>
|
||
|
|
[Parameter] public string LabelText { get; set; }
|
||
|
|
|
||
|
|
string CssClass => Cx("swap", EffectClass, Disabled ? "cursor-not-allowed opacity-50" : null, Class);
|
||
|
|
|
||
|
|
string EffectClass => Effect switch
|
||
|
|
{
|
||
|
|
DSwapEffect.Rotate => "swap-rotate",
|
||
|
|
DSwapEffect.Flip => "swap-flip",
|
||
|
|
_ => null
|
||
|
|
};
|
||
|
|
|
||
|
|
async Task OnChange(ChangeEventArgs e)
|
||
|
|
{
|
||
|
|
Active = e.Value is true;
|
||
|
|
await ActiveChanged.InvokeAsync(Active);
|
||
|
|
}
|
||
|
|
}
|