{"version":3,"file":"koalarx-ui-shared-components-input-field-input-password.mjs","sources":["../../projects/koala-ui/shared/components/input-field/input-password/has-lowercase-validator.ts","../../projects/koala-ui/shared/components/input-field/input-password/has-number-validator.ts","../../projects/koala-ui/shared/components/input-field/input-password/has-special-characters-validator.ts","../../projects/koala-ui/shared/components/input-field/input-password/has-uppercase-validator.ts","../../projects/koala-ui/shared/components/input-field/input-password/input-password.ts","../../projects/koala-ui/shared/components/input-field/input-password/input-password.html","../../projects/koala-ui/shared/components/input-field/input-password/koalarx-ui-shared-components-input-field-input-password.ts"],"sourcesContent":["import { AbstractControl } from '@angular/forms';\n\nexport function HasLowercaseValidator(control: AbstractControl) {\n  if (!/[a-z]/.test(control.value)) {\n    return { hasLowercase: true };\n  }\n\n  return null;\n}\n","import { AbstractControl } from '@angular/forms';\n\nexport function HasNumberValidator(control: AbstractControl) {\n  if (!/\\d/.test(control.value)) {\n    return { hasNumber: true };\n  }\n\n  return null;\n}\n","import { AbstractControl } from '@angular/forms';\n\nexport function HasSpecialCharactersValidator(control: AbstractControl) {\n  if (!/[ `!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?~]/.test(control.value)) {\n    return { hasSpecialCharacters: true };\n  }\n\n  return null;\n}\n","import { AbstractControl } from '@angular/forms';\n\nexport function HasUppercaseValidator(control: AbstractControl) {\n  if (!/[A-Z]/.test(control.value)) {\n    return { hasUppercase: true };\n  }\n\n  return null;\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  OnInit,\n  signal,\n} from '@angular/core';\nimport { ReactiveFormsModule, Validators } from '@angular/forms';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { FieldErrors } from '@koalarx/ui/shared/components/field-errors';\nimport { InputFieldBase } from '@koalarx/ui/shared/components/input-field';\nimport { HasLowercaseValidator } from './has-lowercase-validator';\nimport { HasNumberValidator } from './has-number-validator';\nimport { HasSpecialCharactersValidator } from './has-special-characters-validator';\nimport { HasUppercaseValidator } from './has-uppercase-validator';\n\ntype InputPasswordType = 'password' | 'text';\n\n@Component({\n  selector: 'kl-input-password',\n  templateUrl: './input-password.html',\n  imports: [ReactiveFormsModule, FieldErrors],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputPassword extends InputFieldBase implements OnInit {\n  readonly translations = inject(AppConfig).translation.form;\n\n  type = signal<InputPasswordType>('password');\n  enableStrongPasswordCheck = input(false, { transform: booleanAttribute });\n\n  togglePasswordVisibility() {\n    this.type.set(this.type() === 'password' ? 'text' : 'password');\n  }\n\n  ngOnInit(): void {\n    if (this.enableStrongPasswordCheck()) {\n      this.control().addValidators([\n        HasSpecialCharactersValidator,\n        HasLowercaseValidator,\n        HasUppercaseValidator,\n        HasNumberValidator,\n        Validators.minLength(8),\n      ]);\n    }\n  }\n}\n","<label [attr.for]=\"fieldId\" class=\"floating-label input validator w-full\">\n  @if (label(); as label) {\n    <span class=\"label\">\n      <ng-content select=\"[icon]\" />\n      {{ label }} {{ isRequired() ? '*' : '' }}\n    </span>\n  }\n\n  <input\n    [id]=\"fieldId\"\n    [formControl]=\"control()\"\n    [placeholder]=\"label()\n      ? label() + (isRequired() ? '*' : '')\n      : placeholder()\"\n    [required]=\"isRequired()\"\n    [type]=\"type()\"\n  />\n\n  <button class=\"cursor-pointer\" type=\"button\" (click)=\"togglePasswordVisibility()\">\n    @if (type() === 'password') {\n      <i class=\"fa-regular fa-eye-slash\"></i>\n    } @else {\n      <i class=\"fa-regular fa-eye\"></i>\n    }\n  </button>\n</label>\n\n@if (hint()) {\n  <span class=\"hint-content\">{{hint()}}</span>\n}\n\n<kl-field-errors [field]=\"control()\">\n  <ng-container errors>\n    @if (control().errors?.['hasSpecialCharacters']) {\n      {{translations.invalidPasswordHasSpecialCharacters}}<br/>\n    }\n\n    @if (control().errors?.['hasUppercase']) {\n      {{translations.invalidPasswordHasUppercase}}<br/>\n    }\n\n    @if (control().errors?.['hasLowercase']) {\n      {{translations.invalidPasswordHasLowercase}}<br/>\n    }\n\n    @if (control().errors?.['hasNumber']) {\n      {{translations.invalidPasswordHasNumber}}<br/>\n    }\n\n    @if (control().errors?.['minlength']) {\n      {{translations.invalidMinLength(control().errors?.['minlength'].requiredLength)}}<br/>\n    }\n\n    @if (control().errors?.['confirmPassword']) {\n      {{translations.invalidConfirmPassword}}<br/>\n    }\n\n    <ng-content select=\"[errors]\" />\n  </ng-container>\n</kl-field-errors>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAEM,SAAU,qBAAqB,CAAC,OAAwB,EAAA;IAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAChC,QAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE;;AAG/B,IAAA,OAAO,IAAI;AACb;;ACNM,SAAU,kBAAkB,CAAC,OAAwB,EAAA;IACzD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC7B,QAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;;AAG5B,IAAA,OAAO,IAAI;AACb;;ACNM,SAAU,6BAA6B,CAAC,OAAwB,EAAA;IACpE,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACjE,QAAA,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE;;AAGvC,IAAA,OAAO,IAAI;AACb;;ACNM,SAAU,qBAAqB,CAAC,OAAwB,EAAA;IAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAChC,QAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE;;AAG/B,IAAA,OAAO,IAAI;AACb;;ACkBM,MAAO,aAAc,SAAQ,cAAc,CAAA;IACtC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,IAAI;AAE1D,IAAA,IAAI,GAAG,MAAM,CAAoB,UAAU,gDAAC;IAC5C,yBAAyB,GAAG,KAAK,CAAC,KAAK,sEAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAEzE,wBAAwB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;;IAGjE,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC;gBAC3B,6BAA6B;gBAC7B,qBAAqB;gBACrB,qBAAqB;gBACrB,kBAAkB;AAClB,gBAAA,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACxB,aAAA,CAAC;;;uGAlBK,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B1B,opDA4DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrCY,mBAAmB,uyBAAE,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAG/B,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;+BACE,mBAAmB,EAAA,OAAA,EAEpB,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAAA,eAAA,EAC1B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,opDAAA,EAAA;;;AExBjD;;AAEG;;;;"}