{"version":3,"file":"PasswordValidator.mjs","names":["React","useMemo","Fragment","useTranslation","defaultT","key","options","defaultValue","validatePassword","password","lengthRestriction","upperCaseRestriction","specialCharacterRestriction","numberRestriction","lowerCaseRestriction","t","issues","length","push","test","isPasswordValid","PasswordValidator","t0","$","_c","t1","t2","Symbol","for","color","t3","map","_temp","t4","issue","index"],"sources":["../../../../src/shell/ui/user/PasswordValidator.jsx"],"sourcesContent":["import React, { useMemo, Fragment } from 'react';\nimport { useTranslation } from 'react-i18next';\n\n// Fallback translator used when validity is checked outside a component\n// (returns the English defaultValue).\nconst defaultT = (key, options) => options?.defaultValue ?? key;\n\nconst validatePassword = (\n  password,\n  lengthRestriction = 0,\n  upperCaseRestriction = false,\n  specialCharacterRestriction = false,\n  numberRestriction = false,\n  lowerCaseRestriction = false,\n  t = defaultT\n) => {\n  let issues = [];\n  if (!password) return [];\n  if (lengthRestriction && password.length < lengthRestriction) {\n    issues.push(\n      t('shell.user.passwordRules.minLength', {\n        defaultValue:\n          'Password must be at least {{length}} characters long.',\n        length: lengthRestriction\n      })\n    );\n  }\n  if (upperCaseRestriction && !/[A-Z]/.test(password)) {\n    issues.push(\n      t('shell.user.passwordRules.uppercase', {\n        defaultValue: 'Password must contain at least one uppercase letter.'\n      })\n    );\n  }\n  if (specialCharacterRestriction && !/[!@#$%^&*(),.?\":{}|<>]/.test(password)) {\n    issues.push(\n      t('shell.user.passwordRules.specialCharacter', {\n        defaultValue: 'Password must contain at least one special character.'\n      })\n    );\n  }\n  if (numberRestriction && !/\\d/.test(password)) {\n    issues.push(\n      t('shell.user.passwordRules.number', {\n        defaultValue: 'Password must contain at least one number.'\n      })\n    );\n  }\n  if (lowerCaseRestriction && !/[a-z]/.test(password)) {\n    issues.push(\n      t('shell.user.passwordRules.lowercase', {\n        defaultValue: 'Password must contain at least one lowercase letter.'\n      })\n    );\n  }\n  return issues;\n};\nexport const isPasswordValid = (\n  password,\n  lengthRestriction = 0,\n  upperCaseRestriction = false,\n  specialCharacterRestriction = false,\n  numberRestriction = false,\n  lowerCaseRestriction = false\n) => {\n  return (\n    validatePassword(\n      password,\n      lengthRestriction,\n      upperCaseRestriction,\n      specialCharacterRestriction,\n      numberRestriction,\n      lowerCaseRestriction\n    ).length === 0\n  );\n};\nconst PasswordValidator = ({\n  password,\n  lengthRestriction,\n  upperCaseRestriction,\n  specialCharacterRestriction,\n  numberRestriction,\n  lowerCaseRestriction,\n}) => {\n  const { t } = useTranslation();\n\n  const issues = useMemo(() => {\n    return validatePassword(\n      password,\n      lengthRestriction,\n      upperCaseRestriction,\n      specialCharacterRestriction,\n      numberRestriction,\n      lowerCaseRestriction,\n      t\n    );\n  }, [\n    password,\n    lengthRestriction,\n    upperCaseRestriction,\n    specialCharacterRestriction,\n    numberRestriction,\n    lowerCaseRestriction,\n    t\n  ]);\n\n  // Check for length on both to avoid unnecessary empty divs\n  if (!password || issues.length === 0) return null;\n\n  return (\n    <div>\n      <p style={{ color: 'red' }}>\n        {issues.map((issue, index) => (\n          <Fragment key={`${issue}-${index}`}>\n            {issue}\n            <br />\n          </Fragment>\n        ))}\n      </p>\n    </div>\n  );\n};\n\nexport default PasswordValidator;\n"],"mappings":";;;;AAKA,MAAMI,YAAYC,KAAKC,YAAYA,SAASC,gBAAgBF;AAE5D,MAAMG,oBACJC,UACAC,oBAAoB,GACpBC,uBAAuB,OACvBC,8BAA8B,OAC9BC,oBAAoB,OACpBC,uBAAuB,OACvBC,IAAIX,aACD;CACH,IAAIY,SAAS,EAAE;AACf,KAAI,CAACP,SAAU,QAAO,EAAE;AACxB,KAAIC,qBAAqBD,SAASQ,SAASP,kBACzCM,QAAOE,KACLH,EAAE,sCAAsC;EACtCR,cACE;EACFU,QAAQP;EACT,CACH,CAAC;AAEH,KAAIC,wBAAwB,CAAC,QAAQQ,KAAKV,SAAS,CACjDO,QAAOE,KACLH,EAAE,sCAAsC,EACtCR,cAAc,wDACf,CACH,CAAC;AAEH,KAAIK,+BAA+B,CAAC,yBAAyBO,KAAKV,SAAS,CACzEO,QAAOE,KACLH,EAAE,6CAA6C,EAC7CR,cAAc,yDACf,CACH,CAAC;AAEH,KAAIM,qBAAqB,CAAC,KAAKM,KAAKV,SAAS,CAC3CO,QAAOE,KACLH,EAAE,mCAAmC,EACnCR,cAAc,8CACf,CACH,CAAC;AAEH,KAAIO,wBAAwB,CAAC,QAAQK,KAAKV,SAAS,CACjDO,QAAOE,KACLH,EAAE,sCAAsC,EACtCR,cAAc,wDACf,CACH,CAAC;AAEH,QAAOS;;AAET,MAAaI,mBACXX,UACAC,oBAAoB,GACpBC,uBAAuB,OACvBC,8BAA8B,OAC9BC,oBAAoB,OACpBC,uBAAuB,UACpB;AACH,QACEN,iBACEC,UACAC,mBACAC,sBACAC,6BACAC,mBACAC,qBACD,CAACG,WAAW;;AAGjB,MAAMI,qBAAoBC,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAC,MAAA,EAAAf,UAAAC,mBAAAC,sBAAAC,6BAAAC,mBAAAC,yBAAAQ;CAQzB,MAAA,EAAAP,MAAcZ,gBAAgB;CAAC,IAAAsB;AAAA,KAAAF,EAAA,OAAAb,qBAAAa,EAAA,OAAAT,wBAAAS,EAAA,OAAAV,qBAAAU,EAAA,OAAAd,YAAAc,EAAA,OAAAX,+BAAAW,EAAA,OAAAR,KAAAQ,EAAA,OAAAZ,sBAAA;AAGtBc,OAAAjB,iBACLC,UACAC,mBACAC,sBACAC,6BACAC,mBACAC,sBACAC,EACD;AAAAQ,IAAA,KAAAb;AAAAa,IAAA,KAAAT;AAAAS,IAAA,KAAAV;AAAAU,IAAA,KAAAd;AAAAc,IAAA,KAAAX;AAAAW,IAAA,KAAAR;AAAAQ,IAAA,KAAAZ;AAAAY,IAAA,KAAAE;OAAAA,MAAAF,EAAA;CATH,MAAAP,SACES;AAoBF,KAAI,CAAChB,YAAYO,OAAMC,WAAY,EAAC,QAAS;CAAK,IAAAS;AAAA,KAAAH,EAAA,OAAAI,OAAAC,IAAA,4BAAA,EAAA;AAIpCF,OAAA,EAAAG,OAAS,OAAO;AAAAN,IAAA,KAAAG;OAAAA,MAAAH,EAAA;CAAA,IAAAO;AAAA,KAAAP,EAAA,OAAAP,QAAA;AACvBc,OAAAd,OAAMe,IAAKC,MAKV;AAAAT,IAAA,KAAAP;AAAAO,IAAA,MAAAO;OAAAA,MAAAP,EAAA;CAAA,IAAAU;AAAA,KAAAV,EAAA,QAAAO,IAAA;AAPNG,OAAA,sBAAA,cAAA,OAAA,MACE,sBAAA,cAAA,KAAA,EAAU,OAAAP,IAQZ,EAPKI,GAOL,CAAM;AAAAP,IAAA,MAAAO;AAAAP,IAAA,MAAAU;OAAAA,MAAAV,EAAA;AAAA,QATNU;;AAlCsB,SAAAD,MAAAE,OAAAC,OAAA;AAAA,QAqChB,sBAAA,cAAC,UAAD,EAAe,KAAA,GAAGD,MAAK,GAAIC,SAGhB,EAFRD,OACD,sBAAA,cAAA,MAAA,KACF,CAAW"}