From 67fa933601ecc2faeea1eff737dd5514c2a538d9 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Wed, 23 Jul 2025 16:03:28 +0530 Subject: [PATCH 1/5] refactor: consolidate password strength indicator into shared UI package --- .../core/components/instance/setup-form.tsx | 5 +- .../account/auth-forms/password.tsx | 11 +- .../settings/account/security/page.tsx | 5 +- .../(all)/accounts/reset-password/page.tsx | 6 +- .../app/(all)/accounts/set-password/page.tsx | 5 +- apps/web/app/(all)/profile/security/page.tsx | 5 +- .../account/auth-forms/password.tsx | 6 +- .../components/onboarding/profile-setup.tsx | 8 +- packages/ui/src/form-fields/index.ts | 1 + .../ui/src/form-fields/password/helper.tsx | 65 +++++++++++ packages/ui/src/form-fields/password/index.ts | 2 + .../ui/src/form-fields/password/indicator.tsx | 75 ++++++++++++ packages/utils/src/auth.ts | 109 ++++++++---------- 13 files changed, 215 insertions(+), 88 deletions(-) create mode 100644 packages/ui/src/form-fields/password/helper.tsx create mode 100644 packages/ui/src/form-fields/password/index.ts create mode 100644 packages/ui/src/form-fields/password/indicator.tsx diff --git a/apps/admin/core/components/instance/setup-form.tsx b/apps/admin/core/components/instance/setup-form.tsx index 4e771e91be8..e3169ed63e6 100644 --- a/apps/admin/core/components/instance/setup-form.tsx +++ b/apps/admin/core/components/instance/setup-form.tsx @@ -7,11 +7,10 @@ import { Eye, EyeOff } from "lucide-react"; // plane internal packages import { API_BASE_URL, E_PASSWORD_STRENGTH } from "@plane/constants"; import { AuthService } from "@plane/services"; -import { Button, Checkbox, Input, Spinner } from "@plane/ui"; +import { Button, Checkbox, Input, PasswordStrengthIndicator, Spinner } from "@plane/ui"; import { getPasswordStrength } from "@plane/utils"; // components import { Banner } from "@/components/common/banner"; -import { PasswordStrengthMeter } from "@/components/common/password-strength-meter"; // service initialization const authService = new AuthService(); @@ -274,7 +273,7 @@ export const InstanceSetupForm: FC = (props) => { {errorData.type && errorData.type === EErrorCodes.INVALID_PASSWORD && errorData.message && (

{errorData.message}

)} - +
diff --git a/apps/space/core/components/account/auth-forms/password.tsx b/apps/space/core/components/account/auth-forms/password.tsx index 08ff7f14219..7d71fca96b9 100644 --- a/apps/space/core/components/account/auth-forms/password.tsx +++ b/apps/space/core/components/account/auth-forms/password.tsx @@ -4,13 +4,10 @@ import React, { useEffect, useMemo, useRef, useState } from "react"; import { observer } from "mobx-react"; import { Eye, EyeOff, XCircle } from "lucide-react"; // plane imports -import { API_BASE_URL } from "@plane/constants"; +import { API_BASE_URL, E_PASSWORD_STRENGTH } from "@plane/constants"; import { AuthService } from "@plane/services"; -import { Button, Input, Spinner } from "@plane/ui"; -// components -import { PasswordStrengthMeter } from "@/components/account"; -// helpers -import { E_PASSWORD_STRENGTH, getPasswordStrength } from "@/helpers/password.helper"; +import { Button, Input, Spinner, PasswordStrengthIndicator } from "@plane/ui"; +import { getPasswordStrength } from "@plane/utils"; // types import { EAuthModes, EAuthSteps } from "@/types/auth"; @@ -72,7 +69,7 @@ export const AuthPasswordForm: React.FC = observer((props: Props) => { const passwordSupport = passwordFormData.password.length > 0 && mode === EAuthModes.SIGN_UP && getPasswordStrength(passwordFormData.password) != E_PASSWORD_STRENGTH.STRENGTH_VALID && ( - + ); const isButtonDisabled = useMemo( diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx index 3200959c762..d4886a6abc6 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx @@ -7,10 +7,9 @@ import { Eye, EyeOff } from "lucide-react"; // plane imports import { E_PASSWORD_STRENGTH } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; +import { Button, Input, PasswordStrengthIndicator, TOAST_TYPE, setToast } from "@plane/ui"; import { getPasswordStrength } from "@plane/utils"; // components -import { PasswordStrengthMeter } from "@/components/account"; import { PageHead } from "@/components/core"; import { ProfileSettingContentHeader } from "@/components/profile"; // helpers @@ -108,7 +107,7 @@ const SecurityPage = observer(() => { const passwordSupport = password.length > 0 && getPasswordStrength(password) != E_PASSWORD_STRENGTH.STRENGTH_VALID && ( - + ); const renderPasswordMatchError = !isRetryPasswordInputFocused || confirmPassword.length >= password.length; diff --git a/apps/web/app/(all)/accounts/reset-password/page.tsx b/apps/web/app/(all)/accounts/reset-password/page.tsx index 388e7a02da2..bf6980e9b4d 100644 --- a/apps/web/app/(all)/accounts/reset-password/page.tsx +++ b/apps/web/app/(all)/accounts/reset-password/page.tsx @@ -11,10 +11,10 @@ import { Eye, EyeOff } from "lucide-react"; // ui import { API_BASE_URL, E_PASSWORD_STRENGTH } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { Button, Input } from "@plane/ui"; +import { Button, Input, PasswordStrengthIndicator } from "@plane/ui"; // components import { getPasswordStrength } from "@plane/utils"; -import { AuthBanner, PasswordStrengthMeter } from "@/components/account"; +import { AuthBanner } from "@/components/account"; // helpers import { EAuthenticationErrorCodes, @@ -192,7 +192,7 @@ const ResetPasswordPage = observer(() => { /> )}
- +
- +
)} /> - +