LayoutOptions
+@* Radzen overlay hosts (dialog/notification/tooltip/context-menu) for interactive pages. *@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@if (!string.IsNullOrWhiteSpace(Layout.Copyright))
{
-
-
-
+
}
-
-
-
-
- @Body
-
-
+
-
+
+ @Body
+
+
An unhandled error has occurred.
@@ -84,7 +54,6 @@
@code {
- private bool sidebarExpanded = true;
private string? currentUserName;
private AppFoundationLayoutOptions Layout => LayoutOptions.Value;
@@ -95,8 +64,6 @@
currentUserName = authState.User.Identity?.Name;
}
- void SidebarToggleClick() => sidebarExpanded = !sidebarExpanded;
-
void OnProfileMenuClick(RadzenProfileMenuItem item)
{
if (item.Text == "Logout")
diff --git a/src/AndreGoepel.AppFoundation/Components/Layout/NavMenu.razor b/src/AndreGoepel.AppFoundation/Components/Layout/NavMenu.razor
index 14d978e..9943e5f 100644
--- a/src/AndreGoepel.AppFoundation/Components/Layout/NavMenu.razor
+++ b/src/AndreGoepel.AppFoundation/Components/Layout/NavMenu.razor
@@ -2,7 +2,7 @@
@using AndreGoepel.Marten.Identity
@using AndreGoepel.Marten.Identity.Blazor
-@using Radzen.Blazor
+@using AndreGoepel.Marten.Identity.Blazor.Features
@using global::Marten
@inject IQuerySession QuerySession
@@ -12,51 +12,51 @@
@if (SetupComplete)
{
-
-
+ ⌂ Home
- @if (Layout.Menu is not null)
- {
-
- }
+ @* Host-contributed entries. Contributed menus should render ag-nav-item /
+ ag-nav-section markup to match the design shell. *@
+ @if (Layout.Menu is not null)
+ {
+
+ }
-
-
-
-
-
-
- @if (twoFactorEnabled)
- {
-
- }
- @if (passkeyEnabled)
- {
-
- }
-
-
-
-
+
+
+ ACCOUNT
+
+ Profile
+ Email
+ Password
+ @if (twoFactorEnabled)
+ {
+ Two-factor authentication
+ }
+ @if (passkeyEnabled)
+ {
+ Passkeys
+ }
+ Personal data
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ ADMINISTRATION
+
+ User cleanup
+ Users
+ Roles
+ Login features
+ Email settings
+
+
+
}
else
{
-
-
-
+ Setup
}
@code {
diff --git a/src/AndreGoepel.AppFoundation/Components/_Imports.razor b/src/AndreGoepel.AppFoundation/Components/_Imports.razor
index 816f3bd..77c6ef5 100644
--- a/src/AndreGoepel.AppFoundation/Components/_Imports.razor
+++ b/src/AndreGoepel.AppFoundation/Components/_Imports.razor
@@ -15,6 +15,8 @@
@using AndreGoepel.Marten.Identity.Blazor.Components.Account
@using AndreGoepel.Marten.Identity.Blazor.Components.Account.Shared
@using AndreGoepel.Marten.Identity.Blazor.Components.Layout
+@using AndreGoepel.Design.Blazor
+@using AndreGoepel.Design.Blazor.Components
@using AndreGoepel.AppFoundation
@using AndreGoepel.AppFoundation.Components
@using AndreGoepel.AppFoundation.Components.Layout
diff --git a/src/AndreGoepel.AppFoundation/Identity/IdentityFeatureServiceCollectionExtensions.cs b/src/AndreGoepel.AppFoundation/Identity/IdentityFeatureServiceCollectionExtensions.cs
index 095db47..3f1ce15 100644
--- a/src/AndreGoepel.AppFoundation/Identity/IdentityFeatureServiceCollectionExtensions.cs
+++ b/src/AndreGoepel.AppFoundation/Identity/IdentityFeatureServiceCollectionExtensions.cs
@@ -1,5 +1,5 @@
using AndreGoepel.AppFoundation.Identity;
-using AndreGoepel.Marten.Identity.Blazor;
+using AndreGoepel.Marten.Identity.Blazor.Features;
namespace Microsoft.Extensions.DependencyInjection;
diff --git a/src/AndreGoepel.AppFoundation/Identity/MartenIdentityFeatureProvider.cs b/src/AndreGoepel.AppFoundation/Identity/MartenIdentityFeatureProvider.cs
index af7f888..71a7e3e 100644
--- a/src/AndreGoepel.AppFoundation/Identity/MartenIdentityFeatureProvider.cs
+++ b/src/AndreGoepel.AppFoundation/Identity/MartenIdentityFeatureProvider.cs
@@ -1,4 +1,4 @@
-using AndreGoepel.Marten.Identity.Blazor;
+using AndreGoepel.Marten.Identity.Blazor.Features;
namespace AndreGoepel.AppFoundation.Identity;
diff --git a/src/AndreGoepel.AppFoundation/packages.lock.json b/src/AndreGoepel.AppFoundation/packages.lock.json
index c05fcc6..4c2f0c2 100644
--- a/src/AndreGoepel.AppFoundation/packages.lock.json
+++ b/src/AndreGoepel.AppFoundation/packages.lock.json
@@ -2,13 +2,23 @@
"version": 2,
"dependencies": {
"net10.0": {
+ "AndreGoepel.Design.Blazor": {
+ "type": "Direct",
+ "requested": "[1.0.0, )",
+ "resolved": "1.0.0",
+ "contentHash": "2Sz0LwsyzW0T2RLqdPPza6l/RfVvHkdUt1rKEiQoJQGXmdng+Lw8ehvtQ99M6zMWuT46HQlusbIB5LOK1cyXcQ==",
+ "dependencies": {
+ "Radzen.Blazor": "11.1.0"
+ }
+ },
"AndreGoepel.Marten.Identity.Blazor": {
"type": "Direct",
- "requested": "[1.2.0, )",
- "resolved": "1.2.0",
- "contentHash": "9333mUhD6RIWdimln+ex5suLnY51DcafY+LHU4jVmfKngTKi5J0WTgNBau5+3lPi5+3PjUjnLaHq6pUPFUn48Q==",
+ "requested": "[1.3.0, )",
+ "resolved": "1.3.0",
+ "contentHash": "eULYGyNNGITdasW3nOmaAcUnOjl8fy0rrhEFYTxsUU+F6bJtfLNjGsMDLhFIpc+uS8DRGfhbSGjd7VHOJs9i4w==",
"dependencies": {
- "AndreGoepel.Marten.Identity": "1.2.0",
+ "AndreGoepel.Design.Blazor": "1.0.0",
+ "AndreGoepel.Marten.Identity": "1.3.0",
"Marten": "9.12.0",
"Radzen.Blazor": "11.1.0"
}
@@ -43,10 +53,10 @@
},
"AndreGoepel.Marten.Identity": {
"type": "Transitive",
- "resolved": "1.2.0",
- "contentHash": "zfvSm4io9gcCjQCFyWThZlbSOwfGoH+Idbp2l/gReR3OcyoUf4VPHiECdBmWGkxIS8mczBiaiI3blL0nuKChQQ==",
+ "resolved": "1.3.0",
+ "contentHash": "F/QEiI0rJ7CGXoMDKvmJW9/IU8UB3LaMb4peL2DZzsmtadXmLrqjI1E/ZoVxt5QhiW7gFRBa1cDBiDk551aA8w==",
"dependencies": {
- "AndreGoepel.Marten.Identity.Abstractions": "1.2.0",
+ "AndreGoepel.Marten.Identity.Abstractions": "1.3.0",
"Marten": "9.12.0",
"Marten.AspNetCore": "9.12.0",
"Quartz.Extensions.Hosting": "3.18.2"
@@ -54,8 +64,8 @@
},
"AndreGoepel.Marten.Identity.Abstractions": {
"type": "Transitive",
- "resolved": "1.2.0",
- "contentHash": "CYj9qrcXogO6kciAF7rQfuiERBdXm8T7e4DY4pc5qSEufWyhUAC7DqJksedigQ4NBpsdoT1AXE9KBxWTMnHPkA=="
+ "resolved": "1.3.0",
+ "contentHash": "/mYBlD9bHJae05zDL4xBpddmL2OpHpdVsJSm9rUTAEG2wS+4EGgcRYkq1/yOC98TcO9CABNua9J69HT6XII5hg=="
},
"BouncyCastle.Cryptography": {
"type": "Transitive",
diff --git a/tests/AndreGoepel.AppFoundation.Tests/packages.lock.json b/tests/AndreGoepel.AppFoundation.Tests/packages.lock.json
index c2166cd..157a4c0 100644
--- a/tests/AndreGoepel.AppFoundation.Tests/packages.lock.json
+++ b/tests/AndreGoepel.AppFoundation.Tests/packages.lock.json
@@ -4,11 +4,12 @@
"net10.0": {
"AndreGoepel.Marten.Identity.Blazor": {
"type": "Direct",
- "requested": "[1.2.0, )",
- "resolved": "1.2.0",
- "contentHash": "9333mUhD6RIWdimln+ex5suLnY51DcafY+LHU4jVmfKngTKi5J0WTgNBau5+3lPi5+3PjUjnLaHq6pUPFUn48Q==",
+ "requested": "[1.3.0, )",
+ "resolved": "1.3.0",
+ "contentHash": "eULYGyNNGITdasW3nOmaAcUnOjl8fy0rrhEFYTxsUU+F6bJtfLNjGsMDLhFIpc+uS8DRGfhbSGjd7VHOJs9i4w==",
"dependencies": {
- "AndreGoepel.Marten.Identity": "1.2.0",
+ "AndreGoepel.Design.Blazor": "1.0.0",
+ "AndreGoepel.Marten.Identity": "1.3.0",
"Marten": "9.12.0",
"Radzen.Blazor": "11.1.0"
}
@@ -68,10 +69,10 @@
},
"AndreGoepel.Marten.Identity": {
"type": "Transitive",
- "resolved": "1.2.0",
- "contentHash": "zfvSm4io9gcCjQCFyWThZlbSOwfGoH+Idbp2l/gReR3OcyoUf4VPHiECdBmWGkxIS8mczBiaiI3blL0nuKChQQ==",
+ "resolved": "1.3.0",
+ "contentHash": "F/QEiI0rJ7CGXoMDKvmJW9/IU8UB3LaMb4peL2DZzsmtadXmLrqjI1E/ZoVxt5QhiW7gFRBa1cDBiDk551aA8w==",
"dependencies": {
- "AndreGoepel.Marten.Identity.Abstractions": "1.2.0",
+ "AndreGoepel.Marten.Identity.Abstractions": "1.3.0",
"Marten": "9.12.0",
"Marten.AspNetCore": "9.12.0",
"Quartz.Extensions.Hosting": "3.18.2"
@@ -79,8 +80,8 @@
},
"AndreGoepel.Marten.Identity.Abstractions": {
"type": "Transitive",
- "resolved": "1.2.0",
- "contentHash": "CYj9qrcXogO6kciAF7rQfuiERBdXm8T7e4DY4pc5qSEufWyhUAC7DqJksedigQ4NBpsdoT1AXE9KBxWTMnHPkA=="
+ "resolved": "1.3.0",
+ "contentHash": "/mYBlD9bHJae05zDL4xBpddmL2OpHpdVsJSm9rUTAEG2wS+4EGgcRYkq1/yOC98TcO9CABNua9J69HT6XII5hg=="
},
"AngleSharp": {
"type": "Transitive",
@@ -731,7 +732,8 @@
"type": "Project",
"dependencies": {
"AndreGoepel.AppFoundation.MailService": "[1.1.0, )",
- "AndreGoepel.Marten.Identity.Blazor": "[1.2.0, )",
+ "AndreGoepel.Design.Blazor": "[1.0.0, )",
+ "AndreGoepel.Marten.Identity.Blazor": "[1.3.0, )",
"Marten": "[9.12.0, )",
"Radzen.Blazor": "[11.1.0, )",
"WolverineFx.Marten": "[6.16.0, )"
@@ -743,7 +745,7 @@
"AndreGoepel.AppFoundation": "[1.1.0, )",
"AndreGoepel.AppFoundation.MailService": "[1.1.0, )",
"AndreGoepel.AppFoundation.ServiceDefaults": "[1.1.0, )",
- "AndreGoepel.Marten.Identity.Blazor": "[1.2.0, )",
+ "AndreGoepel.Marten.Identity.Blazor": "[1.3.0, )",
"Marten": "[9.12.0, )",
"Microsoft.AspNetCore.HeaderPropagation": "[10.0.9, )",
"Radzen.Blazor": "[11.1.0, )",
@@ -771,6 +773,15 @@
"OpenTelemetry.Instrumentation.Runtime": "[1.15.1, )"
}
},
+ "AndreGoepel.Design.Blazor": {
+ "type": "CentralTransitive",
+ "requested": "[1.0.0, )",
+ "resolved": "1.0.0",
+ "contentHash": "2Sz0LwsyzW0T2RLqdPPza6l/RfVvHkdUt1rKEiQoJQGXmdng+Lw8ehvtQ99M6zMWuT46HQlusbIB5LOK1cyXcQ==",
+ "dependencies": {
+ "Radzen.Blazor": "11.1.0"
+ }
+ },
"MailKit": {
"type": "CentralTransitive",
"requested": "[4.17.0, )",