diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.html b/src/app/shared/log-in/methods/password/log-in-password.component.html index b85752110ff..df5246c3129 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.html +++ b/src/app/shared/log-in/methods/password/log-in-password.component.html @@ -10,14 +10,26 @@ required type="email" [attr.data-test]="'email' | dsBrowserOnly"> - + + [type]="showPassword ? 'text' : 'password'" + [attr.data-test]="'password' | dsBrowserOnly" + /> + + @if ((error | async) && hasError) { diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.scss b/src/app/shared/log-in/methods/password/log-in-password.component.scss index 955252b51e9..b89449bf6e2 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.scss +++ b/src/app/shared/log-in/methods/password/log-in-password.component.scss @@ -1,12 +1,14 @@ .form-login .form-control:focus { z-index: 2; } + .form-login input[type="email"] { margin-bottom: -1px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } -.form-login input[type="password"] { + +.form-login .password-wrapper .form-control { border-top-left-radius: 0; border-top-right-radius: 0; } @@ -15,3 +17,24 @@ white-space: normal; padding: .25rem .75rem; } + +.password-toggle { + position: absolute; + top: 50%; + right: 1rem; + transform: translateY(-50%); + background: transparent; + border: none; + padding: 0; + cursor: pointer; + color: #6c757d; + z-index: 5; + + &:hover { + color: #495057; + } + + &:focus { + outline: none; + } +} diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.ts b/src/app/shared/log-in/methods/password/log-in-password.component.ts index ac47f8f9295..c7c691d07bf 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.ts +++ b/src/app/shared/log-in/methods/password/log-in-password.component.ts @@ -1,4 +1,7 @@ -import { AsyncPipe } from '@angular/common'; +import { + AsyncPipe, + NgClass, +} from '@angular/common'; import { Component, Inject, @@ -64,6 +67,7 @@ import { BrowserOnlyPipe } from '../../../utils/browser-only.pipe'; BrowserOnlyPipe, BtnDisabledDirective, FormsModule, + NgClass, ReactiveFormsModule, RouterLink, TranslateModule, @@ -122,6 +126,11 @@ export class LogInPasswordComponent implements OnInit { */ canShowDivider$: Observable; + /** + * Has password visibility. + * @type {boolean} + */ + public showPassword = false; constructor( @Inject('authMethodProvider') public injectedAuthMethodModel: AuthMethod, @@ -140,7 +149,6 @@ export class LogInPasswordComponent implements OnInit { * @method ngOnInit */ public ngOnInit() { - // set formGroup this.form = this.formBuilder.group({ email: ['', Validators.required], @@ -187,6 +195,11 @@ export class LogInPasswordComponent implements OnInit { return getForgotPasswordRoute(); } + togglePasswordVisibility(): void { + this.showPassword = !this.showPassword; + } + + /** * Reset error or message. */