mirror of
https://github.com/bitwarden/browser
synced 2026-02-13 23:13:36 +00:00
* rough-in passphrase validation failure handling * trigger valid change from settings * fix `max` constraint enforcement * add taps for generator validation monitoring/debugging * HTML constraints validation rises like a phoenix * remove min/max boundaries to fix chrome display issue * bind settings components as view children of options components * remove defunct `okSettings$` * extend validationless generator to passwords * extend validationless generator to catchall emails * extend validationless generator to forwarder emails * extend validationless generator to subaddress emails * extend validationless generator to usernames * fix observable cycle * disable generate button when no algorithm is selected * prevent duplicate algorithm emissions * add constraints that assign email address defaults
88 lines
2.9 KiB
HTML
88 lines
2.9 KiB
HTML
<bit-card class="tw-flex tw-justify-between tw-mb-4">
|
|
<div class="tw-grow tw-flex tw-items-center">
|
|
<bit-color-password class="tw-font-mono" [password]="value$ | async"></bit-color-password>
|
|
</div>
|
|
<div class="tw-flex tw-items-center tw-space-x-1">
|
|
<button
|
|
type="button"
|
|
bitIconButton="bwi-generate"
|
|
buttonType="main"
|
|
(click)="generate('user request')"
|
|
[appA11yTitle]="credentialTypeGenerateLabel$ | async"
|
|
[disabled]="!(algorithm$ | async)"
|
|
>
|
|
{{ credentialTypeGenerateLabel$ | async }}
|
|
</button>
|
|
<button
|
|
type="button"
|
|
bitIconButton="bwi-clone"
|
|
buttonType="main"
|
|
showToast
|
|
[appA11yTitle]="credentialTypeCopyLabel$ | async"
|
|
[appCopyClick]="value$ | async"
|
|
[valueLabel]="credentialTypeLabel$ | async"
|
|
[disabled]="!(algorithm$ | async)"
|
|
>
|
|
{{ credentialTypeCopyLabel$ | async }}
|
|
</button>
|
|
</div>
|
|
</bit-card>
|
|
<bit-section [disableMargin]="disableMargin">
|
|
<bit-section-header>
|
|
<h2 bitTypography="h6">{{ "options" | i18n }}</h2>
|
|
</bit-section-header>
|
|
<div [ngClass]="{ 'tw-mb-4': !disableMargin }">
|
|
<bit-card>
|
|
<form class="box" [formGroup]="username" class="tw-container">
|
|
<bit-form-field>
|
|
<bit-label>{{ "type" | i18n }}</bit-label>
|
|
<bit-select
|
|
[items]="typeOptions$ | async"
|
|
formControlName="nav"
|
|
data-testid="username-type"
|
|
>
|
|
</bit-select>
|
|
<bit-hint *ngIf="!!(credentialTypeHint$ | async)">{{
|
|
credentialTypeHint$ | async
|
|
}}</bit-hint>
|
|
</bit-form-field>
|
|
</form>
|
|
<form *ngIf="showForwarder$ | async" [formGroup]="forwarder" class="box tw-container">
|
|
<bit-form-field>
|
|
<bit-label>{{ "service" | i18n }}</bit-label>
|
|
<bit-select
|
|
[items]="forwarderOptions$ | async"
|
|
formControlName="nav"
|
|
data-testid="email-forwarding-service"
|
|
>
|
|
</bit-select>
|
|
</bit-form-field>
|
|
</form>
|
|
<tools-catchall-settings
|
|
#catchallSettings
|
|
*ngIf="(algorithm$ | async)?.id === 'catchall'"
|
|
[userId]="this.userId$ | async"
|
|
(onUpdated)="generate('catchall settings')"
|
|
/>
|
|
<tools-forwarder-settings
|
|
#forwarderSettings
|
|
*ngIf="!!(forwarderId$ | async)"
|
|
[forwarder]="forwarderId$ | async"
|
|
[userId]="this.userId$ | async"
|
|
/>
|
|
<tools-subaddress-settings
|
|
#subaddressSettings
|
|
*ngIf="(algorithm$ | async)?.id === 'subaddress'"
|
|
[userId]="this.userId$ | async"
|
|
(onUpdated)="generate('subaddress settings')"
|
|
/>
|
|
<tools-username-settings
|
|
#usernameSettings
|
|
*ngIf="(algorithm$ | async)?.id === 'username'"
|
|
[userId]="this.userId$ | async"
|
|
(onUpdated)="generate('username settings')"
|
|
/>
|
|
</bit-card>
|
|
</div>
|
|
</bit-section>
|