import { Progress } from '@mantine/core'; import { minPasswordLength } from '~/validations/user'; import { PasswordRequirement } from './password-requirement'; const requirements = [ { re: /[0-9]/, label: 'number' }, { re: /[a-z]/, label: 'lowercase' }, { re: /[A-Z]/, label: 'uppercase' }, { re: /[$&+,:;=?@#|'<>.^*()%!-]/, label: 'special' }, ]; function getStrength(password: string) { let score = 0; const goal = requirements.length + 1; requirements.forEach((requirement) => { if (requirement.re.test(password)) { score += 1; } }); if (password.length >= minPasswordLength) { score += 1; } return (score / goal) * 100; } export const PasswordRequirements = ({ value }: { value: string }) => { const checks = requirements.map((requirement, index) => ( )); const strength = getStrength(value); const color = strength === 100 ? 'teal' : strength > 50 ? 'yellow' : 'red'; return ( <> = minPasswordLength} /> {checks} ); };