From 0e1b0e4ed651f06ce55ed9eb0925bd848103c520 Mon Sep 17 00:00:00 2001 From: Argo-AscioTech Date: Wed, 9 Oct 2024 19:53:43 +0800 Subject: [PATCH 1/9] feat: add OnItemCloseAsync method --- .../DropdownWidget/DropdownWidget.razor | 5 ++-- .../DropdownWidget/DropdownWidget.razor.cs | 28 +++++++++++++++++++ .../DropdownWidget/DropdownWidget.razor.js | 24 ++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js diff --git a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor index a95a82e4ebb..ce68d0d98a1 100644 --- a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor +++ b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor @@ -1,7 +1,8 @@ @namespace BootstrapBlazor.Components -@inherits BootstrapComponentBase +@inherits BootstrapModuleComponentBase +@attribute [BootstrapModuleAutoLoader(JSObjectReference = true)] -
+
@ChildContent diff --git a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs index 8f7874ef3b7..3d7fd5decca 100644 --- a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs +++ b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs @@ -25,8 +25,20 @@ public sealed partial class DropdownWidget [Parameter] public IEnumerable? Items { get; set; } + /// + /// 获得/设置 下拉项关闭回调方法 + /// + [Parameter] + public Func? OnItemCloseAsync { get; set; } + private List Childs { get; } = new List(20); + /// + /// + /// + /// + protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, new { Method = nameof(OnWidgetItemClosed) }); + /// /// 添加 DropdownWidgetItem 方法 /// @@ -37,4 +49,20 @@ internal void Add(DropdownWidgetItem item) } private IEnumerable GetItems() => Items == null ? Childs : Childs.Concat(Items); + + /// + /// Widget 下拉项关闭回调方法 由 JavaScript 调用 + /// + /// + /// + [JSInvokable] + public async Task OnWidgetItemClosed(int index) + { + var items = GetItems().ToList(); + var item = index < items.Count ? items[index] : null; + if (item != null && OnItemCloseAsync != null) + { + await OnItemCloseAsync(item); + } + } } diff --git a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js new file mode 100644 index 00000000000..2fef5a7b807 --- /dev/null +++ b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js @@ -0,0 +1,24 @@ +import Data from "../../modules/data.js" +import EventHandler from "../../modules/event-handler.js" + +export function init(id, invoke, options) { + const el = document.getElementById(id); + if (el === null) { + return; + } + + const { method } = options; + EventHandler.on(el, 'hidden.bs.dropdown', e => { + const item = e.target; + const items = [...el.querySelectorAll("[data-bs-toggle=\"dropdown\"]")]; + const index = items.indexOf(item); + invoke.invokeMethodAsync(method, index); + }); +} + +export function dispose(id) { + const dw = Data.get(id) + Data.remove(id); + + EventHandler.off(el, 'hidden.bs.dropdown'); +} From da9de816a8b00bc191857d4267a3b5d3885551c0 Mon Sep 17 00:00:00 2001 From: Argo-AscioTech Date: Wed, 9 Oct 2024 19:54:00 +0800 Subject: [PATCH 2/9] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=20DropdownWidget?= =?UTF-8?q?=20=E7=A4=BA=E4=BE=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Samples/DropdownWidgets.razor | 6 ++++-- .../Components/Samples/DropdownWidgets.razor.cs | 16 ++++++++++++++++ src/BootstrapBlazor.Server/Locales/en-US.json | 3 ++- src/BootstrapBlazor.Server/Locales/zh-CN.json | 3 ++- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/DropdownWidgets.razor b/src/BootstrapBlazor.Server/Components/Samples/DropdownWidgets.razor index c6e7ad895fd..dd3f4609dd2 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/DropdownWidgets.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/DropdownWidgets.razor @@ -7,7 +7,7 @@
- + @Localizer["BasicUsageMessage"] @@ -81,7 +81,9 @@
- +
+ +
diff --git a/src/BootstrapBlazor.Server/Components/Samples/DropdownWidgets.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/DropdownWidgets.razor.cs index 055c6484392..f01f520f938 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/DropdownWidgets.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/DropdownWidgets.razor.cs @@ -9,6 +9,14 @@ namespace BootstrapBlazor.Server.Components.Samples; /// public partial class DropdownWidgets { + private ConsoleLogger _logger = default!; + + private Task OnItemCloseAsync(DropdownWidgetItem item) + { + _logger.Log($"Item {item.BadgeNumber} closed"); + return Task.CompletedTask; + } + private AttributeItem[] GetAttributes() => [ new() @@ -82,6 +90,14 @@ private AttributeItem[] GetAttributes() => Type = "RenderFragment", ValueList = " — ", DefaultValue = " — " + }, + new() + { + Name = "OnItemCloseAsync", + Description = Localizer["OnItemCloseAsync"], + Type = "Func", + ValueList = " — ", + DefaultValue = " — " } ]; } diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 118f16ed38e..7742592c80e 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -3980,7 +3980,8 @@ "BasicUsageNotify": "You have 10 unread notifications", "BasicUsageViewNotify": "View all notifications", "BasicUsageTasks": "You have 3 tasks", - "BasicUsageViewTasks": "View all tasks" + "BasicUsageViewTasks": "View all tasks", + "OnItemCloseAsync": "Close dropdown widget item callback method" }, "BootstrapBlazor.Server.Components.Samples.Empties": { "Title": "Empty", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index af0183f5542..470910d311d 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -3980,7 +3980,8 @@ "BasicUsageNotify": "您有 10 个未读通知", "BasicUsageViewNotify": "查看所有通知", "BasicUsageTasks": "您有 3 个任务", - "BasicUsageViewTasks": "查看所有任务" + "BasicUsageViewTasks": "查看所有任务", + "OnItemCloseAsync": "关闭菜单项回调方法" }, "BootstrapBlazor.Server.Components.Samples.Empties": { "Title": "Empty 空状态", From e778430359ba6fa7766a98c9dabffd0999df8c47 Mon Sep 17 00:00:00 2001 From: Argo-AscioTech Date: Wed, 9 Oct 2024 20:02:24 +0800 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20OnItemShownAsy?= =?UTF-8?q?nc=20=E5=9B=9E=E8=B0=83=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DropdownWidget/DropdownWidget.razor.cs | 20 ++++++++++++++++--- .../DropdownWidget/DropdownWidget.razor.js | 11 ++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs index 3d7fd5decca..092accbe446 100644 --- a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs +++ b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs @@ -31,6 +31,12 @@ public sealed partial class DropdownWidget [Parameter] public Func? OnItemCloseAsync { get; set; } + /// + /// 获得/设置 下拉项关闭回调方法 + /// + [Parameter] + public Func? OnItemShownAsync { get; set; } + private List Childs { get; } = new List(20); /// @@ -54,15 +60,23 @@ internal void Add(DropdownWidgetItem item) /// Widget 下拉项关闭回调方法 由 JavaScript 调用 /// /// + /// /// [JSInvokable] - public async Task OnWidgetItemClosed(int index) + public async Task OnWidgetItemClosed(int index, bool shown) { var items = GetItems().ToList(); var item = index < items.Count ? items[index] : null; - if (item != null && OnItemCloseAsync != null) + if (item != null) { - await OnItemCloseAsync(item); + if (OnItemCloseAsync != null && !shown) + { + await OnItemCloseAsync(item); + } + else if (OnItemShownAsync != null && shown) + { + await OnItemShownAsync(item); + } } } } diff --git a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js index 2fef5a7b807..34de43e2aa1 100644 --- a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js +++ b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js @@ -7,13 +7,16 @@ export function init(id, invoke, options) { return; } - const { method } = options; - EventHandler.on(el, 'hidden.bs.dropdown', e => { + const invokeMethod = e => { const item = e.target; const items = [...el.querySelectorAll("[data-bs-toggle=\"dropdown\"]")]; const index = items.indexOf(item); - invoke.invokeMethodAsync(method, index); - }); + invoke.invokeMethodAsync(method, index, e.type === 'shown.bs.dropdown'); + } + + const { method } = options; + EventHandler.on(el, 'hidden.bs.dropdown', invokeMethod); + EventHandler.on(el, 'shown.bs.dropdown', invokeMethod); } export function dispose(id) { From 2977321988ff89bc8a3231d6a282005e15a9fc9c Mon Sep 17 00:00:00 2001 From: Argo-AscioTech Date: Thu, 10 Oct 2024 09:39:55 +0800 Subject: [PATCH 4/9] =?UTF-8?q?test:=20=E6=9B=B4=E6=96=B0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{DropdownWigetTest.cs => DropdownWidgetTest.cs} | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) rename test/UnitTest/Components/{DropdownWigetTest.cs => DropdownWidgetTest.cs} (95%) diff --git a/test/UnitTest/Components/DropdownWigetTest.cs b/test/UnitTest/Components/DropdownWidgetTest.cs similarity index 95% rename from test/UnitTest/Components/DropdownWigetTest.cs rename to test/UnitTest/Components/DropdownWidgetTest.cs index 8dfe7ff9e62..369fa1eec05 100644 --- a/test/UnitTest/Components/DropdownWigetTest.cs +++ b/test/UnitTest/Components/DropdownWidgetTest.cs @@ -4,7 +4,7 @@ namespace UnitTest.Components; -public class DropdownWigetTest : BootstrapBlazorTestBase +public class DropdownWidgetTest : BootstrapBlazorTestBase { [Fact] public void Items_OK() @@ -54,12 +54,12 @@ public void Title_OK() builder.Add(s => s.ChildContent, new RenderFragment(builder => { builder.OpenComponent(0); - builder.AddAttribute(1, nameof(DropdownWidgetItem.Title), "Wiget Title"); + builder.AddAttribute(1, nameof(DropdownWidgetItem.Title), "Widget Title"); builder.CloseComponent(); })); }); - Assert.Contains("Wiget Title", cut.Markup); + Assert.Contains("Widget Title", cut.Markup); } [Fact] @@ -184,7 +184,7 @@ public void HeaderColor_OK() private static IEnumerable GetItems() { var ret = new List(); - var wiget = new DropdownWidgetItem(); + var widget = new DropdownWidgetItem(); var parameters = new Dictionary() { ["Icon"] = "fa-regular fa-bell", @@ -207,8 +207,8 @@ private static IEnumerable GetItems() }), }; - wiget.SetParametersAsync(ParameterView.FromDictionary(parameters!)); - ret.Add(wiget); + widget.SetParametersAsync(ParameterView.FromDictionary(parameters!)); + ret.Add(widget); return ret; } } From 59d95eb5dcb762bd4a798671f59c0c43961d26d7 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 9 Oct 2024 18:33:46 -0700 Subject: [PATCH 5/9] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Properties/launchSettings.json | 25 +------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/src/BootstrapBlazor.Server/Properties/launchSettings.json b/src/BootstrapBlazor.Server/Properties/launchSettings.json index abe15615528..7152745fa40 100644 --- a/src/BootstrapBlazor.Server/Properties/launchSettings.json +++ b/src/BootstrapBlazor.Server/Properties/launchSettings.json @@ -8,7 +8,7 @@ } }, "profiles": { - "WebConsole": { + "console": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, @@ -17,15 +17,6 @@ "ASPNETCORE_ENVIRONMENT": "Development" } }, - "Watch": { - "commandName": "Executable", - "executablePath": "dotnet.exe", - "workingDirectory": "$(ProjectDir)", - "commandLineArgs": "watch run", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, "https": { "commandName": "Project", "dotnetRunMessages": true, @@ -35,26 +26,12 @@ "ASPNETCORE_ENVIRONMENT": "Development" } }, - "LanConsole": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://0.0.0.0/", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } - }, - "Docker": { - "commandName": "Docker", - "launchBrowser": true, - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}" } } } From 63d52f8d4e1ec4989daf4f4b9b78b5fed55f6f7e Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 9 Oct 2024 18:42:48 -0700 Subject: [PATCH 6/9] =?UTF-8?q?refactor:=20=E7=B2=BE=E7=AE=80=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/DropdownWidget/DropdownWidget.razor.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js index 34de43e2aa1..f23422284bc 100644 --- a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js +++ b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.js @@ -1,5 +1,4 @@ -import Data from "../../modules/data.js" -import EventHandler from "../../modules/event-handler.js" +import EventHandler from "../../modules/event-handler.js" export function init(id, invoke, options) { const el = document.getElementById(id); @@ -15,13 +14,10 @@ export function init(id, invoke, options) { } const { method } = options; - EventHandler.on(el, 'hidden.bs.dropdown', invokeMethod); EventHandler.on(el, 'shown.bs.dropdown', invokeMethod); + EventHandler.on(el, 'hidden.bs.dropdown', invokeMethod); } export function dispose(id) { - const dw = Data.get(id) - Data.remove(id); - EventHandler.off(el, 'hidden.bs.dropdown'); } From 6439290a954674e9631eacbc95ef8c8593ea52c9 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 9 Oct 2024 18:56:08 -0700 Subject: [PATCH 7/9] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DropdownWidget/DropdownWidget.razor.cs | 4 +- .../UnitTest/Components/DropdownWidgetTest.cs | 40 ++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs index 092accbe446..ae84d07ae3a 100644 --- a/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs +++ b/src/BootstrapBlazor/Components/DropdownWidget/DropdownWidget.razor.cs @@ -43,7 +43,7 @@ public sealed partial class DropdownWidget /// /// /// - protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, new { Method = nameof(OnWidgetItemClosed) }); + protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, new { Method = nameof(TriggerStateChanged) }); /// /// 添加 DropdownWidgetItem 方法 @@ -63,7 +63,7 @@ internal void Add(DropdownWidgetItem item) /// /// [JSInvokable] - public async Task OnWidgetItemClosed(int index, bool shown) + public async Task TriggerStateChanged(int index, bool shown) { var items = GetItems().ToList(); var item = index < items.Count ? items[index] : null; diff --git a/test/UnitTest/Components/DropdownWidgetTest.cs b/test/UnitTest/Components/DropdownWidgetTest.cs index 369fa1eec05..c4e9b10d77c 100644 --- a/test/UnitTest/Components/DropdownWidgetTest.cs +++ b/test/UnitTest/Components/DropdownWidgetTest.cs @@ -181,7 +181,45 @@ public void HeaderColor_OK() Assert.NotNull(ele); } - private static IEnumerable GetItems() + [Fact] + public async Task OnItemAsync_OK() + { + var shown = false; + var closed = false; + var cut = Context.RenderComponent(builder => + { + builder.Add(a => a.OnItemShownAsync, item => + { + shown = true; + return Task.CompletedTask; + }); + builder.Add(a => a.OnItemCloseAsync, item => + { + closed = true; + return Task.CompletedTask; + }); + builder.Add(s => s.ChildContent, new RenderFragment(builder => + { + builder.OpenComponent(0); + builder.AddAttribute(1, nameof(DropdownWidgetItem.HeaderColor), Color.Success); + builder.AddAttribute(2, nameof(DropdownWidgetItem.Title), "Test1"); + builder.CloseComponent(); + + builder.OpenComponent(0); + builder.AddAttribute(10, nameof(DropdownWidgetItem.HeaderColor), Color.Success); + builder.AddAttribute(11, nameof(DropdownWidgetItem.Title), "Test2"); + builder.CloseComponent(); + })); + }); + + await cut.InvokeAsync(() => cut.Instance.TriggerStateChanged(0, true)); + Assert.True(shown); + + await cut.InvokeAsync(() => cut.Instance.TriggerStateChanged(1, false)); + Assert.True(closed); + } + + private static List GetItems() { var ret = new List(); var widget = new DropdownWidgetItem(); From a57de9d9c49f6a7c2c0004b10b9914387c83a8dd Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 9 Oct 2024 19:05:12 -0700 Subject: [PATCH 8/9] =?UTF-8?q?test:=20=E6=9B=B4=E6=96=B0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnitTest/Components/DropdownWidgetTest.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/test/UnitTest/Components/DropdownWidgetTest.cs b/test/UnitTest/Components/DropdownWidgetTest.cs index c4e9b10d77c..9bc26dccbf2 100644 --- a/test/UnitTest/Components/DropdownWidgetTest.cs +++ b/test/UnitTest/Components/DropdownWidgetTest.cs @@ -193,11 +193,6 @@ public async Task OnItemAsync_OK() shown = true; return Task.CompletedTask; }); - builder.Add(a => a.OnItemCloseAsync, item => - { - closed = true; - return Task.CompletedTask; - }); builder.Add(s => s.ChildContent, new RenderFragment(builder => { builder.OpenComponent(0); @@ -212,9 +207,26 @@ public async Task OnItemAsync_OK() })); }); + // 索引越界 + await cut.InvokeAsync(() => cut.Instance.TriggerStateChanged(2, false)); + Assert.False(closed); + + // 未注册 OnItemCloseAsync 回调 + await cut.InvokeAsync(() => cut.Instance.TriggerStateChanged(1, false)); + Assert.False(closed); + + // 触发 OnItemShownAsync 回调 await cut.InvokeAsync(() => cut.Instance.TriggerStateChanged(0, true)); Assert.True(shown); + cut.SetParametersAndRender(pb => + { + pb.Add(a => a.OnItemCloseAsync, item => + { + closed = true; + return Task.CompletedTask; + }); + }); await cut.InvokeAsync(() => cut.Instance.TriggerStateChanged(1, false)); Assert.True(closed); } From 21e877222df657868ff2e6b766f2b30a4491e349 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 9 Oct 2024 19:05:29 -0700 Subject: [PATCH 9/9] chore: bump version 8.10.2-beta05 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 30a2b24ecd5..366d487b631 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 8.10.2-beta04 + 8.10.2-beta05