From 7fa09baa7f44e1aebd15adbacf7d80095ed5dd2c Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 7 Mar 2025 20:58:28 +0800 Subject: [PATCH 01/14] Revert "doc(Layout): remove man z-index attribute (#5540)" This reverts commit 096dc3f7e8806e26151af3d3626fedc2d57699ef. --- .../Components/Layout/BaseLayout.razor.css | 2 ++ .../Components/Layout/MainLayout.razor.css | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.css b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.css index 0cd9a6f5bfe..49ce1233146 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.css +++ b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.css @@ -6,4 +6,6 @@ main { min-height: calc(100vh - var(--bs-header-height)); + position: relative; + z-index: 10; } diff --git a/src/BootstrapBlazor.Server/Components/Layout/MainLayout.razor.css b/src/BootstrapBlazor.Server/Components/Layout/MainLayout.razor.css index 55a9b7ee606..d0416ad10ed 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/MainLayout.razor.css +++ b/src/BootstrapBlazor.Server/Components/Layout/MainLayout.razor.css @@ -4,6 +4,8 @@ .main { padding: var(--bb-main-pading); + position: relative; + z-index: 5; } .sidebar-title { From e2ba7f7eb8fbb097c7a21f544f87912eef25cab1 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Mar 2025 18:04:14 +0800 Subject: [PATCH 02/14] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=20InvokeAs?= =?UTF-8?q?ync=20=E5=8C=85=E8=A3=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs index 296f1a54100..434b85e1942 100644 --- a/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs +++ b/src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs @@ -55,7 +55,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) } } - private async Task Show(DialogOption option) + private Task Show(DialogOption option) { _onShownAsync = async () => { @@ -158,7 +158,8 @@ private async Task Show(DialogOption option) // Add ModalDialog to the container DialogParameters.Add(parameters, (_isKeyboard, _isBackdrop)); - await InvokeAsync(StateHasChanged); + StateHasChanged(); + return Task.CompletedTask; } private static RenderFragment RenderDialog(int index, Dictionary parameter) => builder => From 7fb7ef1b36d829b00b76dd4c4c2e01ed795e76a3 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Mar 2025 18:04:34 +0800 Subject: [PATCH 03/14] =?UTF-8?q?refactor:=20=E6=94=AF=E6=8C=81=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=20provider=20=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/BootstrapBlazorRootRegisterService.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor/Services/BootstrapBlazorRootRegisterService.cs b/src/BootstrapBlazor/Services/BootstrapBlazorRootRegisterService.cs index 17437922b5a..a5dc7d6b3bc 100644 --- a/src/BootstrapBlazor/Services/BootstrapBlazorRootRegisterService.cs +++ b/src/BootstrapBlazor/Services/BootstrapBlazorRootRegisterService.cs @@ -99,17 +99,12 @@ public void Unsubscribe(object identifier) /// public void NotifyContentProviderChanged(object identifier, BootstrapBlazorRootContent provider) { - if (!_providersByIdentifier.TryGetValue(identifier, out var providers)) + if (!_providersByIdentifier.TryGetValue(identifier, out _)) { throw new InvalidOperationException($"There are no content providers with the given root ID '{identifier}'."); } - // We only notify content changed for subscribers when the content of the - // most recently added provider changes. - if (providers.Count != 0 && providers[^1] == provider) - { - NotifyContentChangedForSubscriber(identifier, provider); - } + NotifyContentChangedForSubscriber(identifier, provider); } private static BootstrapBlazorRootContent? GetCurrentProviderContentOrDefault(List providers) From f3cfc2acc5a2790e17e0e5503b1142e52077ab86 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Mar 2025 18:04:53 +0800 Subject: [PATCH 04/14] =?UTF-8?q?refactor:=20=E4=BD=BF=E7=94=A8=20Bootstra?= =?UTF-8?q?pBlazorRootContent=20=E6=9B=B4=E6=94=B9=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Modal/Modal.razor | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/BootstrapBlazor/Components/Modal/Modal.razor b/src/BootstrapBlazor/Components/Modal/Modal.razor index 74959d6aba6..28e989b800d 100644 --- a/src/BootstrapBlazor/Components/Modal/Modal.razor +++ b/src/BootstrapBlazor/Components/Modal/Modal.razor @@ -2,8 +2,10 @@ @inherits BootstrapModuleComponentBase @attribute [BootstrapModuleAutoLoader(JSObjectReference = true)] - + + + From b12dd0f247f5ffa57a2e53526c146cb031ed1d10 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Mar 2025 18:25:54 +0800 Subject: [PATCH 05/14] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=20Swal=20?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/SweetAlert/SweetAlert.razor | 8 +++----- .../Components/SweetAlert/SweetAlert.razor.scss | 6 ------ 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor b/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor index 678cee05b72..02b4931fdd7 100644 --- a/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor +++ b/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor @@ -2,8 +2,6 @@ @inherits BootstrapComponentBase @inject SwalService Swal -
- - @RenderDialog() - -
+ + @RenderDialog() + diff --git a/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.scss b/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.scss index 71ea5725bea..17ddfa974f7 100644 --- a/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.scss +++ b/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.scss @@ -1,9 +1,3 @@ -.swal { - position: fixed; - --bb-swal-zindex: 1075; - z-index: var(--bb-swal-zindex); -} - .swal2-header { display: flex; flex-direction: column; From a9104300b33f9e8c7003f16cd751e4d8dc8c749e Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Mar 2025 18:29:58 +0800 Subject: [PATCH 06/14] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/SweetAlert/SweetAlert.razor.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.cs b/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.cs index c7952b1a36e..e97264f477f 100644 --- a/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.cs +++ b/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.cs @@ -6,18 +6,18 @@ namespace BootstrapBlazor.Components; /// -/// SweetAlert 组件 +/// SweetAlert component /// public partial class SweetAlert : IAsyncDisposable { /// - /// 获得/设置 Modal 容器组件实例 + /// Gets or sets the Modal container component instance /// [NotNull] private Modal? ModalContainer { get; set; } /// - /// DialogServices 服务实例 + /// Gets or sets the DialogServices service instance /// [Inject] [NotNull] @@ -46,10 +46,10 @@ protected override void OnInitialized() { base.OnInitialized(); - // 注册 Swal 弹窗事件 + // Register Swal popup event SwalService.Register(this, Show); - // 设置 OnCloseAsync 回调方法 + // Set OnCloseAsync callback method OnCloseAsync = () => { IsShowDialog = false; @@ -78,10 +78,10 @@ protected override async Task OnAfterRenderAsync(bool firstRender) if (IsShowDialog) { - // 打开弹窗 + // Open popup await ModalContainer.Show(); - // 自动关闭处理逻辑 + // Auto close handling logic if (AutoHideCheck()) { try @@ -112,7 +112,7 @@ private async Task Show(SwalOption option) { if (!IsShowDialog) { - // 保证仅打开一个弹窗 + // Ensure only one popup is opened IsShowDialog = true; IsAutoHide = option.IsAutoHide; @@ -131,7 +131,7 @@ private async Task Show(SwalOption option) OnCloseCallbackAsync = AutoHideCheck() ? option.OnCloseAsync : null; - // 渲染 UI 准备弹窗 Dialog + // Render UI to prepare popup Dialog await InvokeAsync(StateHasChanged); } } @@ -151,7 +151,7 @@ private RenderFragment RenderDialog() => builder => private bool disposed; /// - /// Dispose 方法 + /// Dispose method /// /// protected virtual async ValueTask DisposeAsync(bool disposing) @@ -162,22 +162,22 @@ protected virtual async ValueTask DisposeAsync(bool disposing) if (IsShowDialog) { - // 关闭弹窗 + // Close popup DelayToken.Cancel(); await ModalContainer.Close(); IsShowDialog = false; } - // 释放 Token + // Release Token DelayToken.Dispose(); - // 注销服务 + // Unregister service SwalService.UnRegister(this); } } /// - /// Dispose 方法 + /// /// public async ValueTask DisposeAsync() { From 7051d162f6eac95d87b200f9f33eac5262427019 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Mar 2025 18:33:14 +0800 Subject: [PATCH 07/14] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Modal/Modal.razor.cs | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/BootstrapBlazor/Components/Modal/Modal.razor.cs b/src/BootstrapBlazor/Components/Modal/Modal.razor.cs index 40955d25a38..a3d4a0834e6 100644 --- a/src/BootstrapBlazor/Components/Modal/Modal.razor.cs +++ b/src/BootstrapBlazor/Components/Modal/Modal.razor.cs @@ -8,68 +8,68 @@ namespace BootstrapBlazor.Components; /// -/// Modal 组件 +/// Modal component /// public partial class Modal { /// - /// 获得 样式字符串 + /// Gets the style string /// private string? ClassString => CssBuilder.Default("modal") .AddClass("fade", IsFade) .Build(); /// - /// 获得 ModalDialog 集合 + /// Gets the collection of ModalDialog /// protected List Dialogs { get; } = new(8); private readonly ConcurrentDictionary> _shownCallbackCache = []; /// - /// 获得/设置 是否后台关闭弹窗 默认 false + /// Gets or sets whether to close the popup in the background, default is false /// [Parameter] public bool IsBackdrop { get; set; } /// - /// 获得/设置 是否开启键盘支持 默认 true 响应键盘 ESC 按键 + /// Gets or sets whether to enable keyboard support, default is true to respond to the ESC key /// [Parameter] public bool IsKeyboard { get; set; } = true; /// - /// 获得/设置 是否开启淡入淡出动画 默认为 true 开启动画 + /// Gets or sets whether to enable fade in and out animation, default is true to enable animation /// [Parameter] public bool IsFade { get; set; } = true; /// - /// 获得/设置 子组件 + /// Gets or sets the child component /// [Parameter] public RenderFragment? ChildContent { get; set; } /// - /// 获得/设置 组件已经渲染完毕回调方法 + /// Gets or sets the callback method when the component has finished rendering /// [Parameter] public Func? FirstAfterRenderCallbackAsync { get; set; } /// - /// 获得/设置 弹窗已显示时回调此方法 + /// Gets or sets the callback method when the popup is shown /// [Parameter] public Func? OnShownAsync { get; set; } /// - /// 获得/设置 关闭弹窗回调委托 + /// Gets or sets the callback delegate when the popup is closed /// [Parameter] public Func? OnCloseAsync { get; set; } /// - /// 获得 后台关闭弹窗设置 + /// Gets the background close popup setting /// private string? Backdrop => IsBackdrop ? null : "static"; @@ -97,7 +97,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(ShownCallback), nameof(CloseCallback)); /// - /// 添加对话框方法 + /// Method to add a dialog /// /// internal void AddDialog(ModalDialog dialog) @@ -107,12 +107,12 @@ internal void AddDialog(ModalDialog dialog) } /// - /// 移除对话框方法 + /// Method to remove a dialog /// /// internal void RemoveDialog(ModalDialog dialog) { - // 移除当前弹窗 + // Remove the current popup Dialogs.Remove(dialog); if (Dialogs.Count > 0) @@ -123,7 +123,7 @@ internal void RemoveDialog(ModalDialog dialog) private void ResetShownDialog(ModalDialog dialog) { - // 保证新添加的 Dialog 为当前弹窗 + // Ensure the newly added Dialog is the current popup Dialogs.ForEach(d => { d.IsShown = d == dialog; @@ -131,7 +131,7 @@ private void ResetShownDialog(ModalDialog dialog) } /// - /// 弹窗已经弹出回调方法 JSInvoke 调用 + /// Callback method when the popup has been shown, called by JSInvoke /// /// [JSInvokable] @@ -149,20 +149,20 @@ public async Task ShownCallback() } /// - /// 弹窗已经关闭回调方法 JSInvoke 调用 + /// Callback method when the popup has been closed, called by JSInvoke /// /// [JSInvokable] public async Task CloseCallback() { - // 移除当前弹窗 + // Remove the current popup var dialog = Dialogs.FirstOrDefault(d => d.IsShown); if (dialog != null) { Dialogs.Remove(dialog); } - // 多级弹窗支持 + // Support for multi-level popups if (Dialogs.Count > 0) { ResetShownDialog(Dialogs.Last()); @@ -175,7 +175,7 @@ public async Task CloseCallback() } /// - /// 弹窗状态切换方法 + /// Method to toggle the popup state /// public async Task Toggle() { @@ -184,7 +184,7 @@ public async Task Toggle() } /// - /// 显示弹窗方法 + /// Method to show the popup /// /// public async Task Show() @@ -194,13 +194,13 @@ public async Task Show() } /// - /// 关闭当前弹窗方法 + /// Method to close the current popup /// /// public Task Close() => InvokeVoidAsync("execute", Id, "hide"); /// - /// 设置 Header 文字方法 + /// Method to set the header text /// /// public void SetHeaderText(string text) @@ -210,19 +210,19 @@ public void SetHeaderText(string text) } /// - /// 注册弹窗显示后回调方法,供代码调用等效 OnShownAsync 参数赋值 + /// Registers a callback method to be called after the popup is shown, equivalent to setting the OnShownAsync parameter /// - /// 组件 - /// 回调方法 + /// Component + /// Callback method public void RegisterShownCallback(IComponent component, Func value) { _shownCallbackCache.AddOrUpdate(component, _ => value, (_, _) => value); } /// - /// 取消注册窗口显示后回调方法 + /// Unregisters the callback method to be called after the popup is shown /// - /// 组件 + /// Component public void UnRegisterShownCallback(IComponent component) { _shownCallbackCache.TryRemove(component, out _); From 4b0b08a2d6149f090d24b3b734d269a2b70d0f26 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 10 Mar 2025 14:49:36 +0800 Subject: [PATCH 08/14] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Modal/Modal.razor.cs | 1 + src/BootstrapBlazor/Components/Modal/ModalDialog.razor | 2 +- src/BootstrapBlazor/Components/Modal/ModalDialog.razor.cs | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Modal/Modal.razor.cs b/src/BootstrapBlazor/Components/Modal/Modal.razor.cs index a3d4a0834e6..c19ecb9adf1 100644 --- a/src/BootstrapBlazor/Components/Modal/Modal.razor.cs +++ b/src/BootstrapBlazor/Components/Modal/Modal.razor.cs @@ -17,6 +17,7 @@ public partial class Modal /// private string? ClassString => CssBuilder.Default("modal") .AddClass("fade", IsFade) + .AddClassFromAttributes(AdditionalAttributes) .Build(); /// diff --git a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor index 4b14e755ccd..fdad76028ed 100644 --- a/src/BootstrapBlazor/Components/Modal/ModalDialog.razor +++ b/src/BootstrapBlazor/Components/Modal/ModalDialog.razor @@ -2,7 +2,7 @@ @inherits BootstrapModuleComponentBase @attribute [BootstrapModuleAutoLoader("Modal/ModalDialog.razor.js", JSObjectReference = true)] -
+