-
+
+
-
+
+
@if (!string.IsNullOrEmpty(_errorMessage))
{
@@ -73,7 +77,7 @@
if (_password != value)
{
_password = value;
- ValidatePassword();
+ ValidatePasswordWithDebounce();
}
}
}
@@ -86,7 +90,7 @@
if (_confirmPassword != value)
{
_confirmPassword = value;
- ValidatePassword();
+ ValidatePasswordImmediate();
}
}
}
@@ -115,7 +119,7 @@
_loadingTimer.AutoReset = false;
_loadingTimer.Start();
- _debounceTimer = new Timer(300);
+ _debounceTimer = new Timer(800);
_debounceTimer.Elapsed += async (sender, e) => await ValidatePasswordDebounced();
_debounceTimer.AutoReset = false;
}
@@ -141,9 +145,9 @@
}
///
- /// Validates the password immediately.
+ /// Validates the password with debounce (for main password field).
///
- private void ValidatePassword()
+ private void ValidatePasswordWithDebounce()
{
_errorMessage = string.Empty;
StateHasChanged();
@@ -152,6 +156,14 @@
_debounceTimer?.Start();
}
+ ///
+ /// Validates the password immediately (for confirm password field).
+ ///
+ private async void ValidatePasswordImmediate()
+ {
+ await ValidatePasswordDebounced();
+ }
+
///
/// Validates the password after input has stopped.
///
diff --git a/apps/server/AliasVault.Client/Main/Components/Layout/FormModal.razor b/apps/server/AliasVault.Client/Main/Components/Layout/FormModal.razor
index 6524fb955..3cde009be 100644
--- a/apps/server/AliasVault.Client/Main/Components/Layout/FormModal.razor
+++ b/apps/server/AliasVault.Client/Main/Components/Layout/FormModal.razor
@@ -142,7 +142,7 @@
/// Gets or sets the CSS class for the confirm button.
///
[Parameter]
- public string ConfirmButtonClass { get; set; } = "bg-orange-600 hover:bg-orange-500 dark:bg-orange-700 dark:hover:bg-orange-600";
+ public string ConfirmButtonClass { get; set; } = "bg-primary-600 hover:bg-primary-700";
///
/// Gets or sets whether the modal is in a loading state.
diff --git a/apps/server/AliasVault.Client/Main/Components/Shared/PasswordConfirmationModal.razor b/apps/server/AliasVault.Client/Main/Components/Shared/PasswordConfirmationModal.razor
index be504e75a..7bff47eee 100644
--- a/apps/server/AliasVault.Client/Main/Components/Shared/PasswordConfirmationModal.razor
+++ b/apps/server/AliasVault.Client/Main/Components/Shared/PasswordConfirmationModal.razor
@@ -1,4 +1,5 @@
@using Microsoft.Extensions.Localization
+@using AliasVault.Client.Auth.Components
@SharedLocalizer["Password"]
-
+
diff --git a/apps/server/AliasVault.Client/Main/Pages/Settings/ImportExport/Components/ExportPasswordModal.razor b/apps/server/AliasVault.Client/Main/Pages/Settings/ImportExport/Components/ExportPasswordModal.razor
index 8bae60105..b25c0aed3 100644
--- a/apps/server/AliasVault.Client/Main/Pages/Settings/ImportExport/Components/ExportPasswordModal.razor
+++ b/apps/server/AliasVault.Client/Main/Pages/Settings/ImportExport/Components/ExportPasswordModal.razor
@@ -1,73 +1,78 @@
@using Microsoft.Extensions.Localization
@using AliasVault.RazorComponents.Services
@using AliasVault.Client.Main.Components.Shared
+@using AliasVault.Client.Main.Components.Layout
+@using AliasVault.Client.Auth.Components
@inject IStringLocalizerFactory LocalizerFactory
-@if (IsOpen)
-{
-
-
-
@Title
-
@Description
+
+
+
+
+
+
+ @Description
+
- @if (!string.IsNullOrEmpty(ErrorMessage))
- {
-
- @ErrorMessage
-
- }
+ @if (!string.IsNullOrEmpty(ErrorMessage))
+ {
+
+ }
-
-
-
+
+
+
-
-
-
-
-
-
-
- @if (!string.IsNullOrEmpty(_confirmPassword) && _exportPassword != _confirmPassword)
- {
-
@Localizer["PasswordsDoNotMatch"]
- }
-
-
-
-
-
-
+
-
-}
+
+
+
+
+
+ @if (!string.IsNullOrEmpty(_confirmPassword) && _exportPassword != _confirmPassword)
+ {
+
@Localizer["PasswordsDoNotMatch"]
+ }
+
+
+
+
+
+
+
@code {
[Parameter]
diff --git a/apps/server/AliasVault.Client/Main/Pages/Settings/ImportExport/Components/ImportServiceCard.razor b/apps/server/AliasVault.Client/Main/Pages/Settings/ImportExport/Components/ImportServiceCard.razor
index d0b4437c7..cb1ea4c80 100644
--- a/apps/server/AliasVault.Client/Main/Pages/Settings/ImportExport/Components/ImportServiceCard.razor
+++ b/apps/server/AliasVault.Client/Main/Pages/Settings/ImportExport/Components/ImportServiceCard.razor
@@ -15,6 +15,7 @@
@using AliasVault.Shared.Models.WebApi.Favicon
@using AliasClientDb
@using AliasClientDb.Models
+@using AliasVault.Client.Auth.Components
@@ -105,16 +106,15 @@
{
@@ -846,7 +846,7 @@
else
{
// Create new logo from embedded bytes
- var logo = new Logo
+ var logo = new AliasClientDb.Logo
{
Id = Guid.NewGuid(),
Source = domain,
@@ -896,7 +896,7 @@
else if (ExtractedFavicons.TryGetValue(domain, out var favicon))
{
// Create new logo from extracted favicon
- var logo = new Logo
+ var logo = new AliasClientDb.Logo
{
Id = Guid.NewGuid(),
Source = domain,
diff --git a/apps/server/AliasVault.Client/wwwroot/css/tailwind.css b/apps/server/AliasVault.Client/wwwroot/css/tailwind.css
index d19496ce6..a8140053e 100644
--- a/apps/server/AliasVault.Client/wwwroot/css/tailwind.css
+++ b/apps/server/AliasVault.Client/wwwroot/css/tailwind.css
@@ -2029,6 +2029,11 @@ video {
background-color: rgb(251 146 60 / var(--tw-bg-opacity));
}
+.bg-orange-700 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(194 65 12 / var(--tw-bg-opacity));
+}
+
.bg-opacity-50 {
--tw-bg-opacity: 0.5;
}
@@ -2932,6 +2937,16 @@ video {
background-color: rgb(153 27 27 / var(--tw-bg-opacity));
}
+.hover\:bg-orange-700:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(194 65 12 / var(--tw-bg-opacity));
+}
+
+.hover\:bg-orange-800:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(154 52 18 / var(--tw-bg-opacity));
+}
+
.hover\:from-primary-600:hover {
--tw-gradient-from: #d68338 var(--tw-gradient-from-position);
--tw-gradient-to: rgb(214 131 56 / 0) var(--tw-gradient-to-position);
@@ -3842,6 +3857,11 @@ video {
background-color: rgb(127 29 29 / 0.5);
}
+.dark\:hover\:bg-orange-700:hover:is(.dark *) {
+ --tw-bg-opacity: 1;
+ background-color: rgb(194 65 12 / var(--tw-bg-opacity));
+}
+
.dark\:hover\:from-primary-500:hover:is(.dark *) {
--tw-gradient-from: #f49541 var(--tw-gradient-from-position);
--tw-gradient-to: rgb(244 149 65 / 0) var(--tw-gradient-to-position);