| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- export type PasswordConditionsHelperProps = {
- password: string
- }
- const PasswordConditionsHelper = ({ password }: PasswordConditionsHelperProps) => {
- const isEightCharactersLong = password.length >= 8
- const hasUppercase = /[A-Z]/.test(password)
- const hasLowercase = /[a-z]/.test(password)
- const hasNumber = /[0-9]/.test(password)
- const hasSpecialCharacter = /[!@#$%^&*()_+\-=\[\]{};`':"\\|,.<>\/?]/.test(password)
- return (
- <div className="text-sm">
- <PasswordCondition title="Uppercase letter" isMet={hasUppercase} />
- <PasswordCondition title="Lowercase letter" isMet={hasLowercase} />
- <PasswordCondition title="Number" isMet={hasNumber} />
- <PasswordCondition title="Special character (e.g. !?<>@#$%)" isMet={hasSpecialCharacter} />
- <PasswordCondition title="8 characters or more" isMet={isEightCharactersLong} />
- {password.length > 72 && <PasswordCondition title="72 characters or less" isMet={false} />}
- </div>
- )
- }
- export default PasswordConditionsHelper
- type PasswordConditionProps = {
- title: string
- isMet: boolean
- }
- const PasswordCondition = ({ title, isMet }: PasswordConditionProps) => {
- return (
- <div
- className={
- 'flex items-center gap-1 space-x-1.5 transition duration-200 ' +
- (isMet ? 'text-foreground-light' : 'text-foreground-lighter')
- }
- >
- {isMet ? (
- <svg
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 24 24"
- fill="currentColor"
- className="w-4 h-4"
- >
- <path
- fillRule="evenodd"
- d="M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm13.36-1.814a.75.75 0 10-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 00-1.06 1.06l2.25 2.25a.75.75 0 001.14-.094l3.75-5.25z"
- clipRule="evenodd"
- />
- </svg>
- ) : (
- <svg
- xmlns="http://www.w3.org/2000/svg"
- fill="none"
- stroke="currentColor"
- strokeWidth={1.5}
- viewBox="0 0 24 24"
- className="w-4 h-4"
- >
- <path
- strokeLinecap="round"
- strokeLinejoin="round"
- d="M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0z"
- />
- </svg>
- )}
- <p className="text-sm">{title}</p>
- </div>
- )
- }
|