Files
decePubClient/Components/Daisy/Actions/DThemeController.razor
T

27 lines
1.3 KiB
Plaintext
Raw Normal View History

@inherits DComponentBase
@* daisyUI Theme controller: https://daisyui.com/components/theme-controller/ . While checked, the page uses the theme
named in Value (daisyUI's :root:has(.theme-controller:checked) rule). The app itself sets data-theme from C#, so
this exists for completeness. Style it with class="toggle", "checkbox", "radio", "btn" and so on. For a radio
group, pass the same name attribute to each and set Checked from one shared value: a radio raises no change event
when another one unchecks it. *@
<input @attributes="AdditionalAttributes" type="@(Radio ? "radio" : "checkbox")" value="@Value" class="@CssClass"
checked="@Checked" @onchange="OnChange" />
@code {
/// <summary>A daisyUI theme name, e.g. "neo-dark".</summary>
[Parameter] public string Value { get; set; }
[Parameter] public bool Checked { get; set; }
[Parameter] public EventCallback<bool> CheckedChanged { get; set; }
/// <summary>Render a radio instead of a checkbox.</summary>
[Parameter] public bool Radio { get; set; }
string CssClass => Cx("theme-controller", Class);
async Task OnChange(ChangeEventArgs e)
{
// A checkbox reports its checked state; a radio only reports its value when it becomes checked.
Checked = Radio || e.Value is true;
await CheckedChanged.InvokeAsync(Checked);
}
}