diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 83172568a14..5ed70fd2a34 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 9.5.0-beta13 + 9.5.0-beta15 diff --git a/src/BootstrapBlazor/Components/Layout/Layout.razor b/src/BootstrapBlazor/Components/Layout/Layout.razor index 6c6a9aaec5e..d712f36af28 100644 --- a/src/BootstrapBlazor/Components/Layout/Layout.razor +++ b/src/BootstrapBlazor/Components/Layout/Layout.razor @@ -119,6 +119,11 @@ } diff --git a/src/BootstrapBlazor/Components/Layout/Layout.razor.cs b/src/BootstrapBlazor/Components/Layout/Layout.razor.cs index ccdcc04446c..6a4dde17696 100644 --- a/src/BootstrapBlazor/Components/Layout/Layout.razor.cs +++ b/src/BootstrapBlazor/Components/Layout/Layout.razor.cs @@ -17,6 +17,66 @@ public partial class Layout : IHandlerException { private bool IsSmallScreen { get; set; } + /// + /// Gets or sets the tab style. Default is . + /// + [Parameter] + public TabStyle TabStyle { get; set; } + + /// + /// Gets or sets whether show the toolbar. Default is false. + /// + [Parameter] + public bool ShowToolbar { get; set; } + + /// + /// Gets or sets the template of the toolbar button. Default is null. + /// + [Parameter] + public RenderFragment? ToolbarTemplate { get; set; } + + /// + /// Gets or sets whether show the full screen button. Default is true. + /// + [Parameter] + public bool ShowFullscreenToolbarButton { get; set; } = true; + + /// + /// Gets or sets the full screen toolbar button icon string. Default is null. + /// + [Parameter] + public string? FullscreenToolbarButtonIcon { get; set; } + + /// + /// Gets or sets the full screen toolbar button tooltip string. Default is null. + /// + [Parameter] + public string? FullscreenToolbarTooltipText { get; set; } + + /// + /// Gets or sets whether show the full screen button. Default is true. + /// + [Parameter] + public bool ShowRefreshToolbarButton { get; set; } = true; + + /// + /// Gets or sets the refresh toolbar button icon string. Default is null. + /// + [Parameter] + public string? RefreshToolbarButtonIcon { get; set; } + + /// + /// Gets or sets the refresh toolbar button tooltip string. Default is null. + /// + [Parameter] + public string? RefreshToolbarTooltipText { get; set; } + + /// + /// Gets or sets the refresh toolbar button click event callback. Default is null. + /// + [Parameter] + public Func? OnToolbarRefreshCallback { get; set; } + /// /// 获得/设置 侧边栏状态 /// diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs index be2cf1bc303..4c50e196e96 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs @@ -695,7 +695,10 @@ public void AddTab(string url, string text, string? icon = null, bool active = t private void AddTabItem(string url) { - var parameters = new Dictionary(); + var parameters = new Dictionary + { + { nameof(TabItem.Url), url } + }; var context = RouteTableFactory.Create(AdditionalAssemblies, url); if (context.Handler != null) { @@ -720,7 +723,6 @@ private void AddTabItem(string url) var menu = GetMenuItem(url) ?? new MenuItem() { Text = url.Split("/").FirstOrDefault() }; SetTabItemParameters(menu.Text, menu.Icon, true, true); } - parameters.Add(nameof(TabItem.Url), url); parameters.Add(nameof(TabItem.ChildContent), new RenderFragment(builder => { diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.scss b/src/BootstrapBlazor/Components/Tab/Tab.razor.scss index acbe3ee6af8..167bbcfc76b 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.scss +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.scss @@ -136,7 +136,6 @@ left: 0; height: 2px; background-color: var(--bb-tabs-bar-bg); - z-index: 1; transition: transform .3s cubic-bezier(.645,.045,.355,1); list-style: none; } @@ -559,10 +558,9 @@ align-items: flex-end; flex-shrink: 0; padding: 0 1rem; - z-index: 1; &.active { - z-index: 5; + z-index: 1; .tab-corner { background-color: var(--bs-body-bg); diff --git a/test/UnitTest/Components/LayoutTest.cs b/test/UnitTest/Components/LayoutTest.cs index 179c8e2699a..f768f7f70e2 100644 --- a/test/UnitTest/Components/LayoutTest.cs +++ b/test/UnitTest/Components/LayoutTest.cs @@ -13,6 +13,42 @@ namespace UnitTest.Components; public class LayoutTest : BootstrapBlazorTestBase { + [Fact] + public void TabStyle_Ok() + { + var cut = Context.RenderComponent(pb => + { + pb.Add(a => a.UseTabSet, true); + pb.Add(a => a.TabStyle, TabStyle.Default); + pb.Add(a => a.RefreshToolbarButtonIcon, "test-refresh-icon"); + pb.Add(a => a.FullscreenToolbarButtonIcon, "test-fullscreen-icon"); + pb.Add(a => a.OnToolbarRefreshCallback, () => Task.CompletedTask); + pb.Add(a => a.RefreshToolbarTooltipText, "test-refresh-tooltip"); + pb.Add(a => a.FullscreenToolbarTooltipText, "test-fullscreen-tooltip"); + }); + Assert.DoesNotContain("tabs-chrome", cut.Markup); + Assert.DoesNotContain("tabs-capsule", cut.Markup); + + cut.SetParametersAndRender(pb => pb.Add(a => a.TabStyle, TabStyle.Capsule)); + Assert.Contains("tabs-capsule", cut.Markup); + + cut.SetParametersAndRender(pb => pb.Add(a => a.TabStyle, TabStyle.Chrome)); + Assert.Contains("tabs-chrome", cut.Markup); + + cut.SetParametersAndRender(pb => pb.Add(a => a.ShowToolbar, true)); + Assert.Contains("tabs-nav-toolbar-refresh", cut.Markup); + Assert.Contains("tabs-nav-toolbar-fs", cut.Markup); + + cut.SetParametersAndRender(pb => pb.Add(a => a.ShowRefreshToolbarButton, false)); + Assert.DoesNotContain("tabs-nav-toolbar-refresh", cut.Markup); + + cut.SetParametersAndRender(pb => pb.Add(a => a.ShowFullscreenToolbarButton, false)); + Assert.DoesNotContain("tabs-nav-toolbar-fs", cut.Markup); + + cut.SetParametersAndRender(pb => pb.Add(a => a.ToolbarTemplate, builder => builder.AddContent(0, "test-toolbar-template"))); + Assert.Contains("test-toolbar-template", cut.Markup); + } + [Fact] public void ShowFooter_OK() {