@inherits DComponentBase @* daisyUI Tab: https://daisyui.com/components/tab/ . Each DTab child registers itself through the cascading value; DTabs renders the tab buttons and the active tab's content. The active tab is an index (@bind-Active). *@ @ChildContent
@for (var i = 0; i < tabs.Count; i++) { var index = i; var tab = tabs[i]; }
@if (Active >= 0 && Active < tabs.Count) {
@tabs[Active].ChildContent
} @code { [Parameter] public RenderFragment ChildContent { get; set; } [Parameter] public int Active { get; set; } [Parameter] public EventCallback ActiveChanged { get; set; } [Parameter] public DTabsVariant Variant { get; set; } [Parameter] public DSize Size { get; set; } [Parameter] public bool Bottom { get; set; } [Parameter] public string ContentClass { get; set; } = "pt-4"; readonly List tabs = new(); string CssClass => Cx("tabs", VariantClass, SizeClass, Bottom ? "tabs-bottom" : null, Class); string VariantClass => Variant switch { DTabsVariant.Box => "tabs-box", DTabsVariant.Border => "tabs-border", DTabsVariant.Lift => "tabs-lift", _ => null }; string SizeClass => Size switch { DSize.Xs => "tabs-xs", DSize.Sm => "tabs-sm", DSize.Lg => "tabs-lg", DSize.Xl => "tabs-xl", _ => null }; internal void Add(DTab tab) { tabs.Add(tab); StateHasChanged(); } internal void Remove(DTab tab) { tabs.Remove(tab); StateHasChanged(); } async Task Select(int index) { Active = index; await ActiveChanged.InvokeAsync(index); } }