UNPKG

systelab-login

Version:

Library with common Systelab login components to speed up our Angular developments

1 lines 70 kB
{"version":3,"file":"systelab-login.mjs","sources":["../../../projects/systelab-login/src/lib/form-login/form-login.component.ts","../../../projects/systelab-login/src/lib/form-login/form-login.component.html","../../../projects/systelab-login/src/lib/password-indicator/password-indicator.util.ts","../../../projects/systelab-login/src/lib/password-indicator/password-indicator.component.ts","../../../projects/systelab-login/src/lib/password-indicator/password-indicator.component.html","../../../projects/systelab-login/src/lib/form-signup/form-signup.component.ts","../../../projects/systelab-login/src/lib/form-signup/form-signup.component.html","../../../projects/systelab-login/src/lib/form-recovery/form-recovery.component.ts","../../../projects/systelab-login/src/lib/form-recovery/form-recovery.component.html","../../../projects/systelab-login/src/lib/login.component.ts","../../../projects/systelab-login/src/lib/login.component.html","../../../projects/systelab-login/src/lib/change-password-dialog.component.ts","../../../projects/systelab-login/src/lib/change-password-dialog.component.html","../../../projects/systelab-login/src/lib/role-directives/logged-user-roles.service.ts","../../../projects/systelab-login/src/lib/role-directives/allowed-roles.directive.ts","../../../projects/systelab-login/src/lib/role-directives/forbidden-roles.directive.ts","../../../projects/systelab-login/src/lib/systelab-login.module.ts","../../../projects/systelab-login/src/public-api.ts","../../../projects/systelab-login/src/systelab-login.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { I18nService } from 'systelab-translate';\n\n@Component({\n    selector: 'slt-form-login',\n    templateUrl: 'form-login.component.html',\n    styleUrls: ['../login.component.scss'],\n    standalone: false\n})\nexport class FormLoginComponent implements OnInit {\n\t@Input() public isRecoveryActive = false;\n\t@Input() public isSignUpActive = false;\n\t@Input() public errorUserPwd = false;\n\t@Input() public txtUsername = '';\n\t@Input() public isLoading = false;\n\t@Input() public maxUsernameLength = 20;\n\t@Input() public isExternalLoginActive = false;\n\n\t@Output() userNameChange = new EventEmitter();\n\t@Output() public passwordChange = new EventEmitter();\n\t@Output() public currentFormChange = new EventEmitter();\n\t@Output() public login = new EventEmitter();\n\t@Output() public externalLogin = new EventEmitter();\n\n\t@Input()\n\tget userName(): string {\n\t\treturn this._userName;\n\t}\n\n\tset userName(value: string) {\n\t\tthis._userName = value;\n\t\tthis.userNameChange.emit(this._userName);\n\t}\n\n\t@Input()\n\tget password(): string {\n\t\treturn this._password;\n\t}\n\n\tset password(value: string) {\n\t\tthis._password = value;\n\t\tthis.passwordChange.emit(this._password);\n\t}\n\n\t@Input()\n\tget currentForm(): string {\n\t\treturn this._currentForm;\n\t}\n\n\tset currentForm(value: string) {\n\t\tthis._currentForm = value;\n\t\tthis.currentFormChange.emit(this._currentForm);\n\t}\n\n\tprivate _currentForm = '';\n\tprivate _userName = '';\n\tprivate _password = '';\n\n\tconstructor(protected i18nService: I18nService) {\n\t}\n\n\tpublic ngOnInit(): void {\n\t\tif (!this.txtUsername) {\n\t\t\tthis.i18nService.get('COMMON_USERNAME')\n\t\t\t\t.subscribe((res: string) => {\n\t\t\t\t\tthis.txtUsername = res;\n\t\t\t\t});\n\t\t}\n\t}\n\n\tpublic doLogin(): void {\n\t\tthis.login.emit();\n\t}\n\n\tpublic doExternalLogin(): void {\n\t\tthis.externalLogin.emit();\n\t}\n\n\tpublic goSignUp(): void {\n\t\tthis.currentForm = 'signup';\n\t}\n\n\tpublic goRecovery(): void {\n\t\tthis.currentForm = 'recovery';\n\t}\n\n}\n","<input type=\"text\" class=\"w-100 slab-form__input slab-form__input--topradius\" [(ngModel)]=\"userName\" [class.slab-form_input--error]=\"inputUserName.invalid && inputUserName.touched\"\n  id=\"inputUserName\" placeholder=\"{{txtUsername}}\" #inputUserName=\"ngModel\" name=\"inputUserName\"\n  (keyup.enter)=\"doLogin()\"\n  required autocomplete=\"off\" maxlength=\"{{maxUsernameLength}}\" autofocus>\n  <input type=\"password\" class=\"w-100 slab-form__input slab-form__input--bottomradius\" [(ngModel)]=\"password\" [class.slab-form_input--error]=\"inputPassword.invalid && inputPassword.touched\"\n    id=\"inputPassword\" placeholder=\"{{ 'COMMON_PASSWORD' | translate | async }}\" #inputPassword=\"ngModel\" name=\"inputPassword\"\n    (keyup.enter)=\"doLogin()\"\n    required autocomplete=\"off\">\n\n    @if (isRecoveryActive) {\n      <div class=\"slab-form_input--marginTop15 text-right\">\n        <a href=\"#\" class=\"slab-text slab-text--link\" (click)=\"goRecovery()\">{{ 'COMMON_FORGOT_PASSWORD' | translate | async }}</a>\n      </div>\n    }\n\n    <button type=\"button\" class=\"w-100 btn btn-primary slab-form__submit mt-4\" [disabled]=\"inputUserName.invalid ||  inputPassword.invalid\"\n      (click)=\"doLogin()\">{{ 'COMMON_ENTER' | translate | async }}\n    </button>\n\n    @if (isSignUpActive) {\n      <div class=\"slab-form_input--marginTop25 text-center\">\n        <a href=\"#\" class=\"slab-text slab-text--link  \" (click)=\"goSignUp()\">{{ 'COMMON_CREATE_NEW_ACCOUNT' | translate | async }}</a>\n      </div>\n    }\n\n    @if (isExternalLoginActive) {\n      <div class=\"slab-form_input--marginTop15 text-center\">\n        <button type=\"button\" class=\"btn btn-link\" (click)=\"doExternalLogin()\">{{ 'COMMON_EXTERNAL_LOGIN' | translate | async }}</button>\n      </div>\n    }\n\n    @if (errorUserPwd) {\n      <div class=\"alert alert-danger text-center slab-form_input--marginTop25\">\n        <a>{{ 'ERROR_INCORRECT_USERNAME_OR_PASSWORD' | translate | async }}</a>\n      </div>\n    }\n\n    @if (isLoading) {\n      <div class=\"text-center pt-2\">\n        {{ 'COMMON_LOADING' | translate | async }}...\n        <i class=\"icon-spinner spin\"></i>\n      </div>\n    }\n\n","import { I18nService } from 'systelab-translate';\n\nexport class PasswordUtil {\n\n\tprivate static veryStrongPatternRegex = new RegExp('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])(?=.{14,})');\n\tprivate static strongPatternRegex = new RegExp('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])(?=.{10,})');\n\tprivate static slightlyStrongPatternRegex = new RegExp('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])(?=.{8,})');\n\tprivate static goodPatternRegex = new RegExp('^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})');\n\tprivate static moderatePatternRegex =\n\t\tnew RegExp('^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{4,})');\n\n\tpublic static getPasswordComplexityTooltip(minPasswordStrengthValue: number, i18nService: I18nService): string | any {\n\t\treturn i18nService.instant(PasswordUtil.getPasswordComplexityTooltipTranslationKey(minPasswordStrengthValue), {\n\t\t\tcomplexity:  PasswordUtil.getPasswordComplexity(minPasswordStrengthValue, i18nService),\n\t\t\tchar_number: PasswordUtil.getMinPasswordLength(minPasswordStrengthValue)\n\t\t});\n\t}\n\n\tpublic static evaluatePasswordStrength(currentPassword): number {\n\t\tif (!currentPassword) {\n\t\t\treturn 0;\n\t\t} else if (PasswordUtil.veryStrongPatternRegex.test(currentPassword)) {\n\t\t\treturn 6;\n\t\t} else if (PasswordUtil.strongPatternRegex.test(currentPassword)) {\n\t\t\treturn 5;\n\t\t} else if (PasswordUtil.slightlyStrongPatternRegex.test(currentPassword)) {\n\t\t\treturn 4;\n\t\t} else if (PasswordUtil.goodPatternRegex.test(currentPassword)) {\n\t\t\treturn 3;\n\t\t} else if (PasswordUtil.moderatePatternRegex.test(currentPassword)) {\n\t\t\treturn 2;\n\t\t} else {\n\t\t\treturn 1;\n\t\t}\n\t}\n\n\tpublic static getTranslationKey(n: number): string | undefined {\n\t\tswitch (n) {\n\t\t\tcase 6:\n\t\t\t\treturn 'PASSWORD_STRENGTH_VERY_STRONG';\n\t\t\tcase 5:\n\t\t\t\treturn 'PASSWORD_STRENGTH_STRONG';\n\t\t\tcase 4:\n\t\t\t\treturn 'PASSWORD_STRENGTH_SLIGHTLY_STRONG';\n\t\t\tcase 3:\n\t\t\t\treturn 'PASSWORD_STRENGTH_GOOD';\n\t\t\tcase 2:\n\t\t\t\treturn 'PASSWORD_STRENGTH_MODERATE';\n\t\t\tcase 1:\n\t\t\t\treturn 'PASSWORD_STRENGTH_WEAK';\n\t\t\tdefault:\n\t\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tpublic static getStyle(n: number): string {\n\t\tswitch (n) {\n\t\t\tcase 6:\n\t\t\t\treturn 'slab-very-strong';\n\t\t\tcase 5:\n\t\t\t\treturn 'slab-strong';\n\t\t\tcase 4:\n\t\t\t\treturn 'slab-slightly-strong';\n\t\t\tcase 3:\n\t\t\t\treturn 'slab-good';\n\t\t\tcase 2:\n\t\t\t\treturn 'slab-moderate';\n\t\t\tcase 1:\n\t\t\t\treturn 'slab-weak';\n\t\t\tdefault:\n\t\t\t\treturn 'slab-very-weak';\n\t\t}\n\t}\n\n\tprivate static getPasswordComplexityTooltipTranslationKey(minPasswordStrengthValue: number) {\n\t\tswitch (minPasswordStrengthValue) {\n\t\t\tcase 2:\n\t\t\t\treturn 'PASSWORD_CRITERIA_LOW';\n\t\t\tcase 3:\n\t\t\t\treturn 'PASSWORD_CRITERIA_LOW';\n\t\t\tcase 4:\n\t\t\t\treturn 'PASSWORD_CRITERIA';\n\t\t\tcase 5:\n\t\t\t\treturn 'PASSWORD_CRITERIA';\n\t\t\tcase 6:\n\t\t\t\treturn 'PASSWORD_CRITERIA';\n\t\t\tdefault:\n\t\t\t\treturn 'PASSWORD_CRITERIA_WEAK';\n\t\t}\n\t}\n\n\tprivate static getPasswordComplexity(minPasswordStrengthValue: number, i18nService: I18nService) {\n\t\tswitch (minPasswordStrengthValue) {\n\t\t\tcase 2:\n\t\t\t\treturn i18nService.instant('PASSWORD_STRENGTH_MODERATE');\n\t\t\tcase 3:\n\t\t\t\treturn i18nService.instant('PASSWORD_STRENGTH_GOOD');\n\t\t\tcase 4:\n\t\t\t\treturn i18nService.instant('PASSWORD_STRENGTH_SLIGHTLY_STRONG');\n\t\t\tcase 5:\n\t\t\t\treturn i18nService.instant('PASSWORD_STRENGTH_STRONG');\n\t\t\tcase 6:\n\t\t\t\treturn i18nService.instant('PASSWORD_STRENGTH_VERY_STRONG');\n\t\t\tdefault:\n\t\t\t\treturn i18nService.instant('PASSWORD_STRENGTH_WEAK');\n\t\t}\n\t}\n\n\tprivate static getMinPasswordLength(minPasswordStrengthValue: number) {\n\t\tswitch (minPasswordStrengthValue) {\n\t\t\tcase 2:\n\t\t\t\treturn 4;\n\t\t\tcase 3:\n\t\t\t\treturn 6;\n\t\t\tcase 4:\n\t\t\t\treturn 8;\n\t\t\tcase 5:\n\t\t\t\treturn 10;\n\t\t\tcase 6:\n\t\t\t\treturn 14;\n\t\t\tdefault:\n\t\t\t\treturn 2;\n\t\t}\n\t}\n}\n","import { Component, Input } from '@angular/core';\nimport { I18nService } from 'systelab-translate';\nimport { PasswordUtil } from './password-indicator.util';\n\n@Component({\n    selector: 'systelab-password-indicator',\n    templateUrl: 'password-indicator.component.html',\n    styleUrls: ['password-indicator.component.scss'],\n    standalone: false\n})\nexport class PasswordIndicatorComponent {\n\n\t@Input() public minPasswordStrengthValue = 1;\n\n\t@Input() public password = '';\n\n\tconstructor(protected i18nService: I18nService) {\n\t}\n\n\tpublic getPasswordComplexityTooltip(): string | any {\n\t\treturn PasswordUtil.getPasswordComplexityTooltip(this.minPasswordStrengthValue, this.i18nService);\n\t}\n\n\tpublic getPasswordComplexityStyle(): string {\n\t\treturn PasswordUtil.getStyle(PasswordUtil.evaluatePasswordStrength(this.password));\n\t}\n\n\tpublic isOK(): boolean {\n\t\treturn PasswordUtil.evaluatePasswordStrength(this.password) >= this.minPasswordStrengthValue;\n\t}\n\n\tpublic getPasswordComplexityAsLabel(): string | any {\n\t\tconst key = PasswordUtil.getTranslationKey(PasswordUtil.evaluatePasswordStrength(this.password));\n\t\tif (key) {\n\t\t\treturn this.i18nService.instant(key);\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t}\n}\n","<div class=\"d-none d-sm-block mt-2 text-right\">\n    <i class=\"icon-info-circle mt-1 slab-info-icon\" title=\"{{ getPasswordComplexityTooltip() }}\"></i>\n</div>\n\n<div class=\"slab-password-strength mt-1 d-inline-block\"\n     [ngClass]=\"getPasswordComplexityStyle()\">\n    <div class=\"d-inline-block slab-first-step\"></div>\n    <div class=\"d-inline-block slab-second-step\"></div>\n    <div class=\"d-inline-block slab-third-step\"></div>\n    <div class=\"d-inline-block slab-fourth-step\"></div>\n    <div class=\"d-inline-block slab-fifth-step\"></div>\n    <div class=\"d-inline-block slab-sixth-step\"></div>\n</div>\n<div class=\"text-center mt-0\">\n    {{getPasswordComplexityAsLabel()}}&nbsp;\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { I18nService } from 'systelab-translate';\n\n@Component({\n    selector: 'slt-form-signup',\n    templateUrl: 'form-signup.component.html',\n    styleUrls: ['../login.component.scss'],\n    standalone: false\n})\nexport class FormSignupComponent {\n\t@Input() public minPasswordStrengthValue = 1;\n\t@Input() public maxUsernameLength = 20;\n\t@Input() public isLoginActive = false;\n\t@Input() public errorUserExist = false;\n\t@Input() public isLoading = false;\n\n\t@Output() public signUp = new EventEmitter();\n\n\t@Input()\n\tget userName(): string {\n\t\treturn this._userName;\n\t}\n\n\tset userName(value: string) {\n\t\tthis._userName = value;\n\t\tthis.userNameChange.emit(this._userName);\n\t}\n\n\t@Output() public userNameChange = new EventEmitter();\n\n\t@Input()\n\tget password(): string {\n\t\treturn this._password;\n\t}\n\n\tset password(value: string) {\n\t\tthis._password = value;\n\t\tthis.passwordChange.emit(this._password);\n\t}\n\n\t@Output() public passwordChange = new EventEmitter();\n\n\t@Input()\n\tget lastName(): string {\n\t\treturn this._lastName;\n\t}\n\n\tset lastName(value: string) {\n\t\tthis._lastName = value;\n\t\tthis.lastNameChange.emit(this._lastName);\n\t}\n\n\t@Output() public lastNameChange = new EventEmitter();\n\n\t@Input()\n\tget name(): string {\n\t\treturn this._name;\n\t}\n\n\tset name(value: string) {\n\t\tthis._name = value;\n\t\tthis.nameChange.emit(this._name);\n\t}\n\n\t@Output() public nameChange = new EventEmitter();\n\n\t@Input()\n\tget email(): string {\n\t\treturn this._email;\n\t}\n\n\tset email(value: string) {\n\t\tthis._email = value;\n\t\tthis.emailChange.emit(this._email);\n\t}\n\n\t@Output() public emailChange = new EventEmitter();\n\n\t@Input()\n\tget currentForm(): string {\n\t\treturn this._currentForm;\n\t}\n\n\tset currentForm(value: string) {\n\t\tthis._currentForm = value;\n\t\tthis.currentFormChange.emit(this._currentForm);\n\t}\n\n\t@Output() public currentFormChange = new EventEmitter();\n\n\tprivate _userName = '';\n\tprivate _password = '';\n\tprivate _lastName = '';\n\tprivate _name = '';\n\tprivate _email = '';\n\tprivate _currentForm = '';\n\n\tconstructor(protected i18nService: I18nService) {\n\t}\n\n\tpublic goLogin(): void {\n\t\tthis.currentForm = 'login';\n\t}\n\n\tpublic doSignUp(): void {\n\t\tthis.signUp.emit();\n\t}\n}\n","<input #inputUserName=\"ngModel\" type=\"text\" class=\"w-100 slab-form__input slab-form__input--topradius\"\n  [class.slab-form_input--error]=\"inputUserName.invalid && inputUserName.touched\"\n  id=\"inputUserName\" [(ngModel)]=\"userName\" placeholder=\"{{ 'COMMON_USERNAME' | translate | async }}\"\n  name=\"inputUserName\" (keyup.enter)=\"doSignUp()\" required autocomplete=\"off\" maxlength=\"{{maxUsernameLength}}\" autofocus>\n\n  <input #inputPassword=\"ngModel\" type=\"password\" [class.slab-form_input--error]=\"!passwordIndicator.isOK() && inputPassword.touched\" placeholder=\"{{ 'COMMON_PASSWORD' | translate | async }}\"\n    autocomplete=\"off\" class=\"w-100 slab-form__input slab-form__input--bottomradius\" id=\"inputPassword\"\n    name=\"inputPassword\" (keyup.enter)=\"doSignUp()\" [(ngModel)]=\"password\"\n    required/>\n\n    <systelab-password-indicator #passwordIndicator [minPasswordStrengthValue]=\"minPasswordStrengthValue\" [password]=\"password\"></systelab-password-indicator>\n\n\n    <input #inputEmail=\"ngModel\" type=\"email\" [class.slab-form_input--error]=\"inputEmail.invalid && inputEmail.touched\" autocomplete=\"off\"\n      placeholder=\" {{ 'COMMON_EMAIL' | translate | async }}\" class=\"w-100 slab-form_input--marginTop15 slab-form__input slab-form__input--topradius\"\n      (keyup.enter)=\"doSignUp()\" id=\"inputEmail\"  name=\"inputEmail\" [(ngModel)]=\"email\" required email/>\n\n      <input #inputName=\"ngModel\" type=\"text\" [class.slab-form_input--error]=\"inputName.invalid && inputName.touched\" placeholder=\" {{ 'COMMON_NAME' | translate | async }}\"\n        class=\"w-100  slab-form__input \" (keyup.enter)=\"doSignUp()\" id=\"inputName\" name=\"inputName\"  [(ngModel)]=\"name\"\n        required maxlength=\"50\" minlength=\"2\"/>\n\n        <input #inputLastName=\"ngModel\" type=\"text\" [class.slab-form_input--error]=\"inputLastName.invalid && inputLastName.touched\" placeholder=\" {{ 'COMMON_LASTNAME' | translate | async }}\"\n          class=\"w-100  slab-form__input \" (keyup.enter)=\"doSignUp()\" id=\"inputLastName\" name=\"inputLastName\" [(ngModel)]=\"lastName\"\n          required maxlength=\"80\" minlength=\"2\"/>\n\n          <button type=\"button\" class=\"w-100 btn btn-primary slab-form__submit mt-4\" (click)=\"doSignUp()\"\n            [disabled]=\"inputUserName.invalid || inputEmail.invalid || inputPassword.invalid || inputName.invalid ||  inputLastName.invalid || !passwordIndicator.isOK()\">{{ 'COMMON_SEND' | translate | async }}\n          </button>\n\n\n          @if (isLoginActive) {\n            <div class=\"slab-form_input--marginTop25 text-center\">\n              <a href=\"#\" class=\"slab-text slab-text--link\" (click)=\"goLogin()\">{{ 'COMMON_I_HAVE_ACCOUNT' | translate | async }}</a>\n            </div>\n          }\n\n          @if (errorUserExist) {\n            <div class=\"alert alert-danger text-center slab-form_input--marginTop25\">\n              <a>{{ 'ERROR_USER_ALREADY_EXIST' | translate | async }}</a>\n            </div>\n          }\n\n          @if (isLoading) {\n            <div class=\"text-center pt-2\">{{ 'COMMON_LOADING' | translate | async }}...<i class=\"icon-spinner spin\"></i>\n          </div>\n        }\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { I18nService } from 'systelab-translate';\n\n@Component({\n    selector: 'slt-form-recovery',\n    templateUrl: 'form-recovery.component.html',\n    styleUrls: ['../login.component.scss'],\n    standalone: false\n})\nexport class FormRecoveryComponent implements OnInit {\n\t@Input() public isLoginActive = false;\n\t@Input() public txtRecoverProcessStarted = undefined;\n\t@Input() public errorUserDoesNotExist = false;\n\t@Input() public errorUserPwd = false;\n\t@Input() public txtUsername = '';\n\t@Input() public maxUsernameLength = 20;\n\t@Input() public isLoading = false;\n\t@Input() public showBackButton = false;\n\n\t@Output() public recovery = new EventEmitter();\n\n\t@Input()\n\tget userName(): string {\n\t\treturn this._userName;\n\t}\n\n\tset userName(value: string) {\n\t\tthis._userName = value;\n\t\tthis.userNameChange.emit(this._userName);\n\t}\n\n\t@Output() public userNameChange = new EventEmitter();\n\n\t@Input()\n\tget currentForm(): string {\n\t\treturn this._currentForm;\n\t}\n\n\tset currentForm(value: string) {\n\t\tthis._currentForm = value;\n\t\tthis.currentFormChange.emit(this._currentForm);\n\t}\n\n\t@Output() public currentFormChange = new EventEmitter();\n\n\tprivate _userName = '';\n\tprivate _currentForm = '';\n\n\tconstructor(protected i18nService: I18nService) {\n\t}\n\n\tpublic ngOnInit(): void {\n\t\tif (!this.txtUsername) {\n\t\t\tthis.i18nService.get('COMMON_USERNAME')\n\t\t\t\t.subscribe((res: string) => {\n\t\t\t\t\tthis.txtUsername = res;\n\t\t\t\t});\n\t\t}\n\t}\n\n\tpublic doRecovery(): void {\n\t\tthis.recovery.emit();\n\t}\n\n\tpublic goLogin(): void {\n\t\tthis.currentForm = 'login';\n\t}\n}\n","<input #inputUserName=\"ngModel\" type=\"text\" class=\"w-100 slab-form__input slab-form__input--topradius\" [class.slab-form_input--error]=\"inputUserName.invalid && inputUserName.touched\"\n  id=\"inputUserName\" [(ngModel)]=\"userName\" placeholder=\"{{txtUsername}}\"\n  name=\"inputUserName\" (keyup.enter)=\"doRecovery()\" required autocomplete=\"off\" maxlength=\"{{maxUsernameLength}}\" autofocus>\n\n  <button type=\"button\" class=\"w-100 btn btn-primary slab-form__submit mt-4\" (click)=\"doRecovery()\" [disabled]=\"inputUserName.invalid \">{{ 'COMMON_SEND' | translate | async }}</button>\n\n  @if (isLoginActive || showBackButton) {\n    <div class=\"slab-form_input--marginTop25 text-center\">\n      <a href=\"#\" class=\"slab-text slab-text--link  \" (click)=\"goLogin()\">{{ (showBackButton ? 'COMMON_BACK' : 'COMMON_I_HAVE_ACCOUNT') | translate | async }}</a>\n    </div>\n  }\n  @if (errorUserDoesNotExist) {\n    <div class=\"alert alert-danger text-center slab-form_input--marginTop25\">\n      <a>{{ 'ERROR_DOES_NOT_EXIST' | translate | async }}</a>\n    </div>\n  }\n\n  @if (txtRecoverProcessStarted) {\n    <div class=\"alert alert-success text-center slab-form_input--marginTop25\">\n      <a>{{txtRecoverProcessStarted}}</a>\n    </div>\n  }\n\n  @if (isLoading) {\n    <div class=\"text-center pt-2\">\n      {{ 'COMMON_LOADING' | translate | async }}...\n      <i class=\"icon-spinner spin\"></i>\n    </div>\n  }\n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { I18nService } from 'systelab-translate';\n\n@Component({\n    selector: 'systelab-login',\n    templateUrl: 'login.component.html',\n    styleUrls: ['login.component.scss'],\n    standalone: false\n})\nexport class LoginComponent implements OnInit {\n\t@Input() public currentForm = undefined;\n\t@Input() public isRecoveryActive = false;\n\t@Input() public isLoginActive = false;\n\t@Input() public isSignUpActive = false;\n\t@Input() public moreInfo = false;\n\n\t@Input() public applicationName = undefined;\n\t@Input() public moduleName = undefined;\n\t@Input() public version = undefined;\n\n\t@Input() public applicationLogo = undefined;\n\t@Input() public companyLogo = undefined;\n\t@Input() public clickableLogo = true;\n\t@Input() public background = undefined;\n\t@Input() public copyright = undefined;\n\n\t@Input() public errorUserExist = false;\n\t@Input() public errorUserDoesNotExist = false;\n\t@Input() public errorUserPwd = false;\n\t@Input() public errorMessage = '';\n\t@Input() public isLoading = false;\n\t@Input() public txtUsername = '';\n\t@Input() public txtRecoverProcessStarted = undefined;\n\t@Input() public minPasswordStrengthValue = 1;\n\t@Input() public showBackButton = false;\n\t@Input() public noticeText: string;\n\n\t@Input() public pathTerms = undefined;\n\t@Input() public pathPrivacy = undefined;\n\t@Input() public isExternalLoginActive = false;\n\t@Input() public maxUsernameLength = 20;\n\n\t@Output() public userNameChange = new EventEmitter();\n\t@Output() public passwordChange = new EventEmitter();\n\t@Output() public lastNameChange = new EventEmitter();\n\n\t@Output() public nameChange = new EventEmitter();\n\t@Output() public emailChange = new EventEmitter();\n\n\t@Output() public onMoreInfo = new EventEmitter();\n\t@Output() public login = new EventEmitter();\n\t@Output() public externalLogin = new EventEmitter();\n\t@Output() public signUp = new EventEmitter();\n\t@Output() public recovery = new EventEmitter();\n\t@Output() public logoClicked = new EventEmitter();\n\n\t@Input()\n\tget userName(): string {\n\t\treturn this._userName;\n\t}\n\n\tset userName(value: string) {\n\t\tthis._userName = value;\n\t\tthis.userNameChange.emit(this._userName);\n\t}\n\n\t@Input()\n\tget password(): string {\n\t\treturn this._password;\n\t}\n\n\tset password(value: string) {\n\t\tthis._password = value;\n\t\tthis.passwordChange.emit(this._password);\n\t}\n\n\t@Input()\n\tget lastName(): string {\n\t\treturn this._lastName;\n\t}\n\n\tset lastName(value: string) {\n\t\tthis._lastName = value;\n\t\tthis.lastNameChange.emit(this._lastName);\n\t}\n\n\t@Input()\n\tget name(): string {\n\t\treturn this._name;\n\t}\n\n\tset name(value: string) {\n\t\tthis._name = value;\n\t\tthis.nameChange.emit(this._name);\n\t}\n\n\t@Input()\n\tget email(): string {\n\t\treturn this._email;\n\t}\n\n\tset email(value: string) {\n\t\tthis._email = value;\n\t\tthis.emailChange.emit(this._email);\n\t}\n\n\tprivate _password = '';\n\tprivate _lastName = '';\n\tprivate _name = '';\n\tprivate _email = '';\n\tprivate _userName = '';\n\n\n\tconstructor(protected i18nService: I18nService) {\n\t\tif (!this.currentForm) {\n\t\t\tthis.currentForm = 'login';\n\t\t}\n\t}\n\n\tpublic ngOnInit(): void {\n\t\tif (!this.txtUsername) {\n\t\t\tthis.i18nService.get('COMMON_USERNAME')\n\t\t\t\t.subscribe((res: string) => {\n\t\t\t\t\tthis.txtUsername = res;\n\t\t\t\t});\n\t\t}\n\t}\n\n\tpublic doLogin(): void {\n\t\tthis.login.emit();\n\t}\n\n\tpublic doExternalLogin(): void {\n\t\tthis.externalLogin.emit();\n\t}\n\n\tpublic doSignUp(): void {\n\t\tthis.signUp.emit();\n\t}\n\n\tpublic doRecovery(): void {\n\t\tthis.recovery.emit();\n\t}\n\n\tpublic goSignUp(): void {\n\t\tthis.currentForm = 'signup';\n\t}\n\n\tpublic goRecovery(): void {\n\t\tthis.currentForm = 'recovery';\n\t}\n\n\tpublic goLogin(): void {\n\t\tthis.currentForm = 'login';\n\t}\n\n\tpublic doMoreInfo(): void {\n\t\tthis.onMoreInfo.emit();\n\t}\n\n\tpublic doClickLogo(): void {\n\t\tthis.logoClicked.emit();\n\t}\n}\n","<div class=\"d-flex h-100 slab-login\">\n  <div class=\"slab-login__background slab-login__background--configuration\" [style.background-image]=\"'url(' + background + ')'\"></div>\n  <div class=\"slab-login__content d-flex flex-column\">\n    <div class=\"d-flex slab-header align-content-center\">\n      @if (applicationLogo && clickableLogo) {\n        <img alt=\"header-logo\" class=\"slab-header__logo mr-4\" src=\"{{applicationLogo}}\" (click)=\"doClickLogo()\">\n      }\n      @if (applicationLogo && !clickableLogo) {\n        <img alt=\"header-logo\" class=\"slab-header__no-click-logo mr-4\" src=\"{{applicationLogo}}\">\n      }\n      <div>\n        @if (applicationName) {\n          <div id=\"application-name-id\" class=\"slab-text\">{{applicationName}}</div>\n        }\n        @if (moduleName) {\n          <div class=\"slab-text slab-text--large\">{{moduleName}}</div>\n        }\n        @if (version) {\n          <div class=\"slab-text slab-text--small slab-text--muted\">{{ 'COMMON_VERSION' | translate | async }}: {{version}} @if (moreInfo) {\n            <i class=\"fas fa-info-circle\" style=\"cursor: pointer\" (click)=\"doMoreInfo()\"></i>\n          }</div>\n        }\n      </div>\n    </div>\n    @if (noticeText) {\n      <div class=\"d-flex align-self-center m-4 font-weight-bolder\">{{noticeText}}</div>\n    }\n    @if (currentForm === 'login') {\n      <div class=\"d-flex slab-form align-content-center flex-wrap mt-4\">\n        <div class=\"mb-4 slab-text slab-text--large slab-text--muted\">{{ 'COMMON_SESSION_LOGIN' | translate | async }}</div>\n        <form novalidate class=\"w-100\" autocomplete=\"off\">\n          <slt-form-login (login)=\"doLogin()\"\n            (externalLogin)=\"doExternalLogin()\"\n            [(userName)]=\"userName\"\n            [(password)]=\"password\"\n            [isRecoveryActive]=\"isRecoveryActive\"\n            [isSignUpActive]=\"isSignUpActive\"\n            [errorUserPwd]=\"errorUserPwd\"\n            [txtUsername]=\"txtUsername\"\n            [(currentForm)]=\"currentForm\"\n            [isLoading]=\"isLoading\"\n            [maxUsernameLength]=\"maxUsernameLength\"\n            [isExternalLoginActive]=\"isExternalLoginActive\">\n          </slt-form-login>\n        </form>\n      </div>\n    }\n    @if (currentForm === 'signup') {\n      <div class=\"d-flex slab-form align-content-center flex-wrap mt-4\">\n        <div class=\"mb-4 slab-text slab-text--large slab-text--muted\">{{ 'COMMON_SESSION_SIGNUP' | translate | async }}</div>\n        <form novalidate class=\"w-100\" autocomplete=\"off\">\n          <slt-form-signup (signUp)=\"doSignUp()\" [(userName)]=\"userName\" [(password)]=\"password\" [(name)]=\"name\" [(lastName)]=\"lastName\"\n            [(email)]=\"email\" [isLoginActive]=\"isLoginActive\" [(currentForm)]=\"currentForm\" [errorUserExist]=\"errorUserExist\" [isLoading]=\"isLoading\"\n            [minPasswordStrengthValue]=\"minPasswordStrengthValue\" [maxUsernameLength]=\"maxUsernameLength\">\n          </slt-form-signup>\n        </form>\n      </div>\n    }\n    @if (currentForm === 'recovery') {\n      <div class=\"d-flex slab-form align-content-center flex-wrap mt-4\">\n        <div class=\"mb-4 slab-text slab-text--large slab-text--muted\">{{ 'COMMON_SESSION_RECOVERY' | translate | async }}</div>\n        <form novalidate class=\"w-100\" autocomplete=\"off\">\n          <slt-form-recovery (recovery)=\"doRecovery()\" [(userName)]=\"userName\" [txtUsername]=\"txtUsername\" [(currentForm)]=\"currentForm\"\n            [errorUserDoesNotExist]=\"errorUserDoesNotExist\" [isLoginActive]=\"isLoginActive\" [txtRecoverProcessStarted]=\"txtRecoverProcessStarted\"\n            [isLoading]=\"isLoading\" [maxUsernameLength]=\"maxUsernameLength\" [showBackButton]=\"showBackButton\">\n          </slt-form-recovery>\n        </form>\n      </div>\n    }\n\n    <div class=\"d-flex slab-footer flex-column\">\n      <img width=\"132\" alt=\"company-logo\" src=\"{{ companyLogo }}\" class=\"mt-4 align-self-center\">\n      <div class=\"d-none d-sm-block slab-text slab-text--small align-self-center mt-4 \">{{copyright}}</div>\n      <div class=\"mt-4 align-self-center\">\n        @if (pathTerms) {\n          <a class=\"slab-text slab-text--link slab-text--small mr-2 \" target=\"_blank\" href=\"pathTerms\">{{ 'COMMON_TERMS_OF_USE' | translate | async }}</a>\n        }\n        @if (pathTerms && pathPrivacy) {\n          <span>·</span>\n        }\n        @if (pathPrivacy) {\n          <a class=\"ml-2 slab-text slab-text--link slab-text--small\"\n          href=\"pathPrivacy\" target=\"_blank\">{{ 'COMMON_PRIVACY' | translate | async }}</a>\n        }\n      </div>\n    </div>\n  </div>\n</div>\n","import { AfterViewInit, Component } from '@angular/core';\nimport { DialogRef, MessagePopupService, ModalComponent, SystelabModalContext } from 'systelab-components';\nimport { I18nService } from 'systelab-translate';\nimport { Observable } from 'rxjs';\n\nexport class ChangePasswordDialogParameters extends SystelabModalContext {\n\tpublic override width = 550;\n\tpublic override maxHeight = 360;\n\tpublic userName: string;\n\tpublic minPasswordStrengthValue = 1;\n\tpublic showOldPasswordField = true;\n\tpublic action: (oldPassword: string, newPassword: string) => Observable<boolean>;\n\tpublic hasNumpad = false;\n\tpublic showUsernameField = false;\n}\n\n@Component({\n    templateUrl: 'change-password-dialog.component.html',\n    styleUrls: ['change-password-dialog.component.scss'],\n    standalone: false\n})\nexport class ChangePasswordDialog implements ModalComponent<ChangePasswordDialogParameters>, AfterViewInit {\n\n\tpublic parameters: ChangePasswordDialogParameters;\n\n\tpublic isLoading = false;\n\n\tpublic newPassword: string;\n\tpublic repeatedPassword: string;\n\tpublic oldPassword: string;\n\tpublic showOldPasswordField = true;\n\tpublic showUsernameField = false;\n\n\tconstructor(public dialog: DialogRef<ChangePasswordDialogParameters>,\n\t\t\t\t\t\t\tprotected i18nService: I18nService, protected messagePopupService: MessagePopupService) {\n\t\tthis.parameters = dialog.context;\n\t\tthis.showOldPasswordField = this.parameters.showOldPasswordField;\n\t\tthis.showUsernameField = this.parameters.showUsernameField;\n\t}\n\n\tpublic static getParameters(): ChangePasswordDialogParameters {\n\t\treturn new ChangePasswordDialogParameters();\n\t}\n\n\tpublic ngAfterViewInit(): void {\n\t\tsetTimeout(() => {\n\t\t\tif (this.showOldPasswordField){\n\t\t\t\tdocument.getElementById('form-h-it')\n\t\t\t\t\t.focus();\n\t\t\t\tthis.oldPassword = '';\n\t\t\t} else {\n\t\t\t\tdocument.getElementById('form-h-ip')\n\t\t\t\t\t.focus();\n\t\t\t}\n\t\t}, 500);\n\t}\n\n\tpublic close(): void {\n\t\tthis.dialog.close();\n\t}\n\n\tpublic isOK(): boolean {\n\t\treturn (this.oldPassword || !this.showOldPasswordField) &&\n\t\t\tthis.newPassword === this.repeatedPassword;\n\t}\n\n\tpublic changePassword(): void {\n\t\tthis.parameters.action(this.oldPassword, this.newPassword)\n\t\t\t.subscribe(\n\t\t\t\t(response) => {\n\t\t\t\t\tif (response) {\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tpublic checkNewRepeatedPassword(): boolean {\n\t\treturn this.newPassword !== this.repeatedPassword;\n\t}\n}\n","<systelab-dialog-header (close)=\"close()\">{{'COMMON_CHANGE_PASSWORD' | translate | async }}</systelab-dialog-header>\n<div class=\"slab-change-password slab-flex-1\">\n  <form class=\"w-100 h-100 p-3\" (keypress)=\"($event.which === 13 && isOK()) ? changePassword() : 0\"\n    autocomplete=\"off\">\n\n    @if (showUsernameField) {\n      <div class=\"row mt-1 pb-2\">\n        <label class=\"col-md-6 col-form-label\">{{ 'COMMON_USERNAME' | translate | async }}</label>\n        <label class=\"col-md-6 col-form-label font-weight-bold\">{{ dialog.context.userName }}</label>\n      </div>\n    }\n\n    @if (showOldPasswordField) {\n      <div class=\"row mt-1\">\n        <label for=\"form-h-it\" class=\"col-md-6 col-form-label\">{{ 'LOGIN_ENTER_OLDPASSWORD' |\n        translate | async}}</label>\n        <div class=\"col-md-6\">\n          @if (!dialog.context.hasNumpad) {\n            <input autofocus class=\"form-control\"\n              [(ngModel)]=\"oldPassword\" name=\"oldpassword\" type=\"password\" id=\"form-h-it\">\n          }\n          @if (dialog.context.hasNumpad) {\n            <systelab-numpad [autofocus]=\"true\" [(value)]=\"oldPassword\"\n            [isPassword]=\"true\"></systelab-numpad>\n          }\n        </div>\n      </div>\n    }\n\n    <div class=\"row mt-1\">\n      <label for=\"form-h-ip\"\n      class=\"col-md-6 col-form-label\">{{ 'LOGIN_ENTER_NEWPASSWORD' | translate | async}}</label>\n      <div class=\"col-md-6\">\n        @if (!dialog.context.hasNumpad) {\n          <input class=\"form-control\"\n            [(ngModel)]=\"newPassword\" name=\"newpassword\" type=\"password\" id=\"form-h-ip\">\n        }\n        @if (dialog.context.hasNumpad) {\n          <systelab-numpad [(value)]=\"newPassword\"\n          [isPassword]=\"true\"></systelab-numpad>\n        }\n      </div>\n    </div>\n\n    <div class=\"row mt-1\">\n      <label for=\"form-h-ir\"\n      class=\"col-md-6 col-form-label\">{{ 'LOGIN_REPEAT_NEWPASSWORD' | translate | async}}</label>\n      <div class=\"col-md-6\">\n        @if (!dialog.context.hasNumpad) {\n          <input class=\"form-control\"\n            [(ngModel)]=\"repeatedPassword\" name=\"repeatedPassword\"\n            [class.is-invalid]=\"checkNewRepeatedPassword()\" type=\"password\" id=\"form-h-ir\">\n        }\n        @if (dialog.context.hasNumpad) {\n          <systelab-numpad [(value)]=\"repeatedPassword\"\n          [isPassword]=\"true\"></systelab-numpad>\n        }\n      </div>\n    </div>\n\n    <systelab-password-indicator #passwordIndicator [minPasswordStrengthValue]=\"parameters.minPasswordStrengthValue\"\n    [password]=\"newPassword\"></systelab-password-indicator>\n\n  </form>\n</div>\n<systelab-dialog-bottom>\n  <button type=\"button\" class=\"btn btn-primary ml-auto\"\n    [disabled]=\"!isOK() || !passwordIndicator.isOK()\"\n    (click)=\"changePassword()\">{{ 'COMMON_SUBMIT' | translate | async}}\n  </button>\n</systelab-dialog-bottom>\n","import { Observable } from 'rxjs';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport abstract class LoggedUserRolesService {\n\tpublic abstract getLoggedUserRoles(): Observable<string[]>;\n}\n","import { Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { LoggedUserRolesService } from './logged-user-roles.service';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n    selector: '[sltAllowedRoles]',\n    standalone: false\n})\nexport class AllowedRolesDirective implements OnInit, OnDestroy {\n\t@Input() public sltAllowedRoles: string[];\n\tpublic isVisible = false;\n\tpublic stop$ = new Subject();\n\n\tconstructor(\n\t\tprivate viewContainerRef: ViewContainerRef,\n\t\tprivate templateRef: TemplateRef<any>,\n\t\tprivate loggedUserRolesService: LoggedUserRolesService\n\t) {\n\t}\n\n\tpublic ngOnInit(): void {\n\t\tthis.loggedUserRolesService.getLoggedUserRoles()\n\t\t\t.pipe(takeUntil(this.stop$))\n\t\t\t.subscribe(\n\t\t\t\t(loggedUserRoles: string[]) => {\n\t\t\t\t\tif (!loggedUserRoles) {\n\t\t\t\t\t\tthis.viewContainerRef.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst isLogged: boolean = loggedUserRoles && (loggedUserRoles.length > 0);\n\t\t\t\t\tif (isLogged && this.isAnyRoleAllowed(loggedUserRoles)) {\n\t\t\t\t\t\tif (!this.isVisible) {\n\t\t\t\t\t\t\tthis.isVisible = true;\n\t\t\t\t\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.isVisible = false;\n\t\t\t\t\t\tthis.viewContainerRef.clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.stop$.next(true);\n\t}\n\n\tprivate isAnyRoleAllowed(roles: string[]): boolean {\n\t\treturn !!roles.find(\n\t\t\t(role: string): boolean => {\n\t\t\t\treturn !!this.sltAllowedRoles.find(\n\t\t\t\t\t(allowedRole: string): boolean => {\n\t\t\t\t\t\treturn role === allowedRole;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}\n}\n","import { Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { LoggedUserRolesService } from './logged-user-roles.service';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n    selector: '[sltForbiddenRoles]',\n    standalone: false\n})\nexport class ForbiddenRolesDirective implements OnInit, OnDestroy {\n\t@Input() public sltForbiddenRoles: string[];\n\tpublic isVisible = false;\n\tpublic stop$ = new Subject();\n\n\tconstructor(\n\t\tprivate viewContainerRef: ViewContainerRef,\n\t\tprivate templateRef: TemplateRef<any>,\n\t\tprivate loggedUserRolesService: LoggedUserRolesService\n\t) {\n\t}\n\n\tpublic ngOnInit(): void {\n\t\tthis.loggedUserRolesService.getLoggedUserRoles()\n\t\t\t.pipe(takeUntil(this.stop$))\n\t\t\t.subscribe(\n\t\t\t\t(loggedUserRoles: string[]) => {\n\t\t\t\t\tif (!loggedUserRoles) {\n\t\t\t\t\t\tthis.viewContainerRef.clear();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst isLogged: boolean = loggedUserRoles && (loggedUserRoles.length > 0);\n\t\t\t\t\tif (!isLogged || this.isAnyRoleForbidden(loggedUserRoles)) {\n\t\t\t\t\t\tthis.isVisible = false;\n\t\t\t\t\t\tthis.viewContainerRef.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!this.isVisible) {\n\t\t\t\t\t\t\tthis.isVisible = true;\n\t\t\t\t\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.stop$.next(true);\n\t}\n\n\tprivate isAnyRoleForbidden(roles: string[]): boolean {\n\t\treturn !!roles.find(\n\t\t\t(role: string): boolean => {\n\t\t\t\treturn !!this.sltForbiddenRoles.find(\n\t\t\t\t\t(forbiddenRole: string): boolean => {\n\t\t\t\t\t\treturn role === forbiddenRole;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\n\nimport {SystelabTranslateModule} from 'systelab-translate';\nimport {LoginComponent} from './login.component';\nimport {ChangePasswordDialog} from './change-password-dialog.component';\nimport {SystelabComponentsModule} from 'systelab-components';\nimport {FormLoginComponent} from './form-login/form-login.component';\nimport {FormSignupComponent} from './form-signup/form-signup.component';\nimport {FormRecoveryComponent} from './form-recovery/form-recovery.component';\nimport {PasswordIndicatorComponent} from './password-indicator/password-indicator.component';\nimport {AllowedRolesDirective} from './role-directives/allowed-roles.directive';\nimport {ForbiddenRolesDirective} from './role-directives/forbidden-roles.directive';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        SystelabTranslateModule,\n        SystelabComponentsModule\n    ],\n    declarations: [\n        LoginComponent,\n        ChangePasswordDialog,\n        FormLoginComponent,\n        FormSignupComponent,\n        FormRecoveryComponent,\n        PasswordIndicatorComponent,\n        AllowedRolesDirective,\n        ForbiddenRolesDirective\n    ],\n    exports: [\n        LoginComponent,\n        PasswordIndicatorComponent,\n        AllowedRolesDirective,\n        ForbiddenRolesDirective,\n        ChangePasswordDialog\n    ]\n})\nexport class SystelabLoginModule {\n}\n","/*\n * Public API Surface of test-ng-workspace\n */\n\nexport * from './lib/systelab-login.module';\nexport * from './lib/login.component';\nexport * from './lib/change-password-dialog.component';\nexport * from './lib/password-indicator/password-indicator.component';\n\nexport * from './lib/role-directives/allowed-roles.directive';\nexport * from './lib/role-directives/forbidden-roles.directive';\nexport * from './lib/role-directives/logged-user-roles.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3.PasswordIndicatorComponent","i4","i3.FormLoginComponent","i4.FormSignupComponent","i5.FormRecoveryComponent","i6","i1","i3","i4.PasswordIndicatorComponent","i5","i1.LoggedUserRolesService"],"mappings":"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"}