diff --git a/src/AliasVault.Admin2/Account/Pages/Logout.razor b/src/AliasVault.Admin2/Account/Pages/Logout.razor new file mode 100644 index 000000000..e68953a46 --- /dev/null +++ b/src/AliasVault.Admin2/Account/Pages/Logout.razor @@ -0,0 +1,20 @@ +@page "/user/logout" +@using AliasVault.Admin2.Services +@using Microsoft.AspNetCore.Identity +@inject SignInManager SignInManager +@inject NavigationManager NavigationManager +@inject GlobalNotificationService GlobalNotificationService + +@code { + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + + // Sign out the user + await SignInManager.SignOutAsync(); + GlobalNotificationService.ClearMessages(); + + // Redirect to the home page with hard refresh. + NavigationManager.NavigateTo("/", true); + } +} diff --git a/src/AliasVault.Admin2/AliasVault.Admin2.csproj b/src/AliasVault.Admin2/AliasVault.Admin2.csproj index 4dd90f30a..bc51a7055 100644 --- a/src/AliasVault.Admin2/AliasVault.Admin2.csproj +++ b/src/AliasVault.Admin2/AliasVault.Admin2.csproj @@ -25,59 +25,6 @@ - - <_ContentIncludedByDefault Remove="Components\Account\Pages\AccessDenied.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\ConfirmEmail.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\ConfirmEmailChange.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\ExternalLogin.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\ForgotPassword.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\ForgotPasswordConfirmation.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\InvalidPasswordReset.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\InvalidUser.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Lockout.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Login.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\LoginWith2fa.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\LoginWithRecoveryCode.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\ChangePassword.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\DeletePersonalData.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\Disable2fa.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\Email.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\EnableAuthenticator.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\ExternalLogins.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\GenerateRecoveryCodes.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\Index.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\PersonalData.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\ResetAuthenticator.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\SetPassword.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\TwoFactorAuthentication.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Manage\_Imports.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\Register.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\RegisterConfirmation.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\ResendEmailConfirmation.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\ResetPassword.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\ResetPasswordConfirmation.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Pages\_Imports.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Shared\AccountLayout.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Shared\ExternalLoginPicker.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Shared\ManageLayout.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Shared\ManageNavMenu.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Shared\RedirectToLogin.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Shared\ShowRecoveryCodes.razor" /> - <_ContentIncludedByDefault Remove="Components\Account\Shared\StatusMessage.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\ChangePassword.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\DeletePersonalData.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\Disable2fa.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\Email.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\EnableAuthenticator.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\GenerateRecoveryCodes.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\Index.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\PersonalData.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\ResetAuthenticator.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\SetPassword.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\TwoFactorAuthentication.razor" /> - <_ContentIncludedByDefault Remove="Account\Pages\Manage\_Imports.razor" /> - - @@ -98,9 +45,6 @@ - - - diff --git a/src/AliasVault.Admin2/Main/App.razor b/src/AliasVault.Admin2/Main/App.razor index 4858080b5..c9c1072ef 100644 --- a/src/AliasVault.Admin2/Main/App.razor +++ b/src/AliasVault.Admin2/Main/App.razor @@ -5,15 +5,54 @@ - - + + - + + + + + + diff --git a/src/AliasVault.Admin2/Main/Layout/Footer.razor b/src/AliasVault.Admin2/Main/Layout/Footer.razor new file mode 100644 index 000000000..694980a58 --- /dev/null +++ b/src/AliasVault.Admin2/Main/Layout/Footer.razor @@ -0,0 +1,10 @@ + diff --git a/src/AliasVault.Admin2/Main/Layout/Footer.razor.css b/src/AliasVault.Admin2/Main/Layout/Footer.razor.css new file mode 100644 index 000000000..881d128a5 --- /dev/null +++ b/src/AliasVault.Admin2/Main/Layout/Footer.razor.css @@ -0,0 +1,83 @@ +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +.top-row { + height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.bi { + display: inline-block; + position: relative; + width: 1.25rem; + height: 1.25rem; + margin-right: 0.75rem; + top: -1px; + background-size: cover; +} + +.bi-house-door-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); +} + +.bi-plus-square-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); +} + +.bi-list-nested-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep a { + color: #d7d7d7; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + } + +.nav-item ::deep a.active { + background-color: rgba(255,255,255,0.37); + color: white; +} + +.nav-item ::deep a:hover { + background-color: rgba(255,255,255,0.1); + color: white; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .collapse { + /* Never collapse the sidebar for wide screens */ + display: block; + } + + .nav-scrollable { + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/src/AliasVault.Admin2/Main/Layout/MainLayout.razor b/src/AliasVault.Admin2/Main/Layout/MainLayout.razor index 4ad4997eb..7c456c452 100644 --- a/src/AliasVault.Admin2/Main/Layout/MainLayout.razor +++ b/src/AliasVault.Admin2/Main/Layout/MainLayout.razor @@ -2,37 +2,14 @@ @implements IDisposable @inject NavigationManager NavigationManager -
- - -
-
- - - - - - -
- -
+ +
+
+
@Body -
-
+ +
+
diff --git a/src/AliasVault.Admin2/Main/Layout/NavMenu.razor b/src/AliasVault.Admin2/Main/Layout/NavMenu.razor deleted file mode 100644 index 7ea8c13e0..000000000 --- a/src/AliasVault.Admin2/Main/Layout/NavMenu.razor +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/src/AliasVault.Admin2/Main/Layout/NavMenu.razor.css b/src/AliasVault.Admin2/Main/Layout/NavMenu.razor.css deleted file mode 100644 index 16700eba7..000000000 --- a/src/AliasVault.Admin2/Main/Layout/NavMenu.razor.css +++ /dev/null @@ -1,125 +0,0 @@ -.navbar-toggler { - appearance: none; - cursor: pointer; - width: 3.5rem; - height: 2.5rem; - color: white; - position: absolute; - top: 0.5rem; - right: 1rem; - border: 1px solid rgba(255, 255, 255, 0.1); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); -} - -.navbar-toggler:checked { - background-color: rgba(255, 255, 255, 0.5); -} - -.top-row { - height: 3.5rem; - background-color: rgba(0,0,0,0.4); -} - -.navbar-brand { - font-size: 1.1rem; -} - -.bi { - display: inline-block; - position: relative; - width: 1.25rem; - height: 1.25rem; - margin-right: 0.75rem; - top: -1px; - background-size: cover; -} - -.bi-house-door-fill-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); -} - -.bi-plus-square-fill-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); -} - -.bi-list-nested-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); -} - -.bi-lock-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath d='M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2zM5 8h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1z'/%3E%3C/svg%3E"); -} - -.bi-person-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-person' viewBox='0 0 16 16'%3E%3Cpath d='M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6Zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4Zm-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10Z'/%3E%3C/svg%3E"); -} - -.bi-person-badge-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-person-badge' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 2a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1h-3zM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0z'/%3E%3Cpath d='M4.5 0A2.5 2.5 0 0 0 2 2.5V14a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2.5A2.5 2.5 0 0 0 11.5 0h-7zM3 2.5A1.5 1.5 0 0 1 4.5 1h7A1.5 1.5 0 0 1 13 2.5v10.795a4.2 4.2 0 0 0-.776-.492C11.392 12.387 10.063 12 8 12s-3.392.387-4.224.803a4.2 4.2 0 0 0-.776.492V2.5z'/%3E%3C/svg%3E"); -} - -.bi-person-fill-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-person-fill' viewBox='0 0 16 16'%3E%3Cpath d='M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z'/%3E%3C/svg%3E"); -} - -.bi-arrow-bar-left-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-arrow-bar-left' viewBox='0 0 16 16'%3E%3Cpath d='M12.5 15a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5ZM10 8a.5.5 0 0 1-.5.5H3.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L3.707 7.5H9.5a.5.5 0 0 1 .5.5Z'/%3E%3C/svg%3E"); -} - -.nav-item { - font-size: 0.9rem; - padding-bottom: 0.5rem; -} - - .nav-item:first-of-type { - padding-top: 1rem; - } - - .nav-item:last-of-type { - padding-bottom: 1rem; - } - - .nav-item ::deep .nav-link { - color: #d7d7d7; - background: none; - border: none; - border-radius: 4px; - height: 3rem; - display: flex; - align-items: center; - line-height: 3rem; - width: 100%; - } - -.nav-item ::deep a.active { - background-color: rgba(255,255,255,0.37); - color: white; -} - -.nav-item ::deep .nav-link:hover { - background-color: rgba(255,255,255,0.1); - color: white; -} - -.nav-scrollable { - display: none; -} - -.navbar-toggler:checked ~ .nav-scrollable { - display: block; -} - -@media (min-width: 641px) { - .navbar-toggler { - display: none; - } - - .nav-scrollable { - /* Never collapse the sidebar for wide screens */ - display: block; - - /* Allow sidebar to scroll for tall menus */ - height: calc(100vh - 3.5rem); - overflow-y: auto; - } -} diff --git a/src/AliasVault.Admin2/Main/Layout/TopMenu.razor b/src/AliasVault.Admin2/Main/Layout/TopMenu.razor new file mode 100644 index 000000000..5e9a6325d --- /dev/null +++ b/src/AliasVault.Admin2/Main/Layout/TopMenu.razor @@ -0,0 +1,142 @@ +@inherits MainBase +@implements IDisposable + +
+ + @if (isMobileMenuOpen) + { + + } +
+ +@code { + private bool isMenuOpen = false; + private bool isMobileMenuOpen = false; + private string _username { get; set; } = ""; + + /// + /// Close the menu. + /// + [JSInvokable] + public void CloseMenu() + { + isMenuOpen = false; + isMobileMenuOpen = false; + StateHasChanged(); + } + + /// + /// Dispose method. + /// + public void Dispose() + { + NavigationManager.LocationChanged -= LocationChanged; + } + + /// + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _username = GetUsername(); + NavigationManager.LocationChanged += LocationChanged; + } + + /// + protected override async Task OnAfterRenderAsync(bool firstRender) + { + await base.OnAfterRenderAsync(firstRender); + if (firstRender) + { + await Js.InvokeVoidAsync("window.initTopMenu"); + DotNetObjectReference objRef = DotNetObjectReference.Create(this); + await Js.InvokeVoidAsync("window.registerClickOutsideHandler", objRef); + } + } + + private void LocationChanged(object? sender, LocationChangedEventArgs e) + { + isMenuOpen = false; + isMobileMenuOpen = false; + StateHasChanged(); + } + + private void ToggleMenu() + { + isMenuOpen = !isMenuOpen; + } + + private void ToggleMobileMenu() + { + isMobileMenuOpen = !isMobileMenuOpen; + } +} diff --git a/src/AliasVault.Admin2/Main/Layout/TopMenu.razor.css b/src/AliasVault.Admin2/Main/Layout/TopMenu.razor.css new file mode 100644 index 000000000..881d128a5 --- /dev/null +++ b/src/AliasVault.Admin2/Main/Layout/TopMenu.razor.css @@ -0,0 +1,83 @@ +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +.top-row { + height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.bi { + display: inline-block; + position: relative; + width: 1.25rem; + height: 1.25rem; + margin-right: 0.75rem; + top: -1px; + background-size: cover; +} + +.bi-house-door-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); +} + +.bi-plus-square-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); +} + +.bi-list-nested-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep a { + color: #d7d7d7; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + } + +.nav-item ::deep a.active { + background-color: rgba(255,255,255,0.37); + color: white; +} + +.nav-item ::deep a:hover { + background-color: rgba(255,255,255,0.1); + color: white; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .collapse { + /* Never collapse the sidebar for wide screens */ + display: block; + } + + .nav-scrollable { + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/src/AliasVault.Admin2/Main/Pages/Account/Manage/Index.razor b/src/AliasVault.Admin2/Main/Pages/Account/Manage/Index.razor index eeb896403..7d3dbef0f 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/Manage/Index.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/Manage/Index.razor @@ -11,23 +11,22 @@ Profile

Profile

- -
-
+
+
- -
- - + +
+ +
-
- - - +
+ + +
- +
diff --git a/src/AliasVault.Admin2/Main/Pages/Account/ManageLayout.razor b/src/AliasVault.Admin2/Main/Pages/Account/ManageLayout.razor index d724159dc..4cd1e5ad6 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/ManageLayout.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/ManageLayout.razor @@ -2,16 +2,24 @@ @using AliasVault.Admin2.Main.Layout @layout MainLayout -

Manage your account

+
+
+ -
-

Change your account settings

-
-
-
+
+

Manage account

+
+

Manage your profile here.

+
+
+ +
+
+
+
-
+
@Body
diff --git a/src/AliasVault.Admin2/Main/Pages/Account/ManageNavMenu.razor b/src/AliasVault.Admin2/Main/Pages/Account/ManageNavMenu.razor index fffc62811..065721ca8 100644 --- a/src/AliasVault.Admin2/Main/Pages/Account/ManageNavMenu.razor +++ b/src/AliasVault.Admin2/Main/Pages/Account/ManageNavMenu.razor @@ -2,27 +2,27 @@ @inject SignInManager SignInManager -