38 lines
1.2 KiB
Plaintext
38 lines
1.2 KiB
Plaintext
@* Generic collapsible section with clickable header and chevron toggle *@
|
|
<div class="@Class">
|
|
<div class="d-flex align-items-center gap-2 cursor-pointer" @onclick="Toggle" role="button">
|
|
@if (TitleContent is not null) {
|
|
@TitleContent
|
|
} else if (!string.IsNullOrEmpty(Title)) {
|
|
<span>@Title</span>
|
|
}
|
|
<span class="ms-auto small @(Expanded ? "bi-chevron-up" : "bi-chevron-down")"></span>
|
|
</div>
|
|
@if (Expanded) {
|
|
<div class="@ContentClass">
|
|
@ChildContent
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
@code {
|
|
[Parameter] public string? Title { get; set; }
|
|
[Parameter] public RenderFragment? TitleContent { get; set; }
|
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
|
[Parameter] public bool InitiallyExpanded { get; set; }
|
|
[Parameter] public string? Class { get; set; }
|
|
[Parameter] public string? ContentClass { get; set; }
|
|
[Parameter] public EventCallback<bool> ExpandedChanged { get; set; }
|
|
|
|
bool Expanded { get; set; }
|
|
|
|
protected override void OnInitialized() {
|
|
Expanded = InitiallyExpanded;
|
|
}
|
|
|
|
async Task Toggle() {
|
|
Expanded = !Expanded;
|
|
await ExpandedChanged.InvokeAsync(Expanded);
|
|
}
|
|
}
|