|
|
@@ -1,194 +1,194 @@
|
|
|
<div class="items-container animated fadeIn">
|
|
|
- <div id="navigation" class="mb-8">
|
|
|
- <div class="prev-page prevent-select indigo_primary_background mat-elevation-z8" (click)="goBack(1)" matRipple>
|
|
|
- <mat-icon style="color: white;">arrow_back</mat-icon>
|
|
|
- <div class="page-name ml-4">Administrador del sistema</div>
|
|
|
- </div>
|
|
|
+ <div id="navigation" class="mb-8">
|
|
|
+ <div class="prev-page prevent-select indigo_primary_background mat-elevation-z8" (click)="goBack(1)" matRipple>
|
|
|
+ <mat-icon style="color: white;">arrow_back</mat-icon>
|
|
|
+ <div class="page-name ml-4">Administrador del sistema</div>
|
|
|
</div>
|
|
|
- <mat-card class="override-elevation-z8" style="width: 100%; height: calc(100% - 48px);">
|
|
|
- <mat-card-title style="text-align: center;" class="prevent-select pv-16">Políticas de seguridad</mat-card-title>
|
|
|
- <mat-card-content>
|
|
|
- <div class="loader-container prevent-select" *ngIf="isLoading">
|
|
|
- <mat-spinner></mat-spinner>
|
|
|
- <h2 class="loader-label">Cargando...</h2>
|
|
|
+ </div>
|
|
|
+ <mat-card class="override-elevation-z8" style="width: 100%; height: calc(100% - 48px);">
|
|
|
+ <mat-card-title style="text-align: center;" class="prevent-select pv-16">Políticas de seguridad</mat-card-title>
|
|
|
+ <mat-card-content>
|
|
|
+ <div class="loader-container prevent-select" *ngIf="isLoading">
|
|
|
+ <mat-spinner></mat-spinner>
|
|
|
+ <h2 class="loader-label">Cargando...</h2>
|
|
|
+ </div>
|
|
|
+ <div class="error-container prevent-select" *ngIf="!isLoading && hasError">
|
|
|
+ <mat-icon style="color: #e53935; transform: scale(5); margin: 48px;">error</mat-icon>
|
|
|
+ <h1 style="color: #e53935;">¡Error!</h1>
|
|
|
+ <p style="font-style: italic; font-size: 16px; overflow-wrap: anywhere; text-align: center;">{{ errorStr }}</p>
|
|
|
+ </div>
|
|
|
+ <div class="table-container" [hidden]="!(!isLoading && !hasError)" style="overflow: hidden;" class="animated fadeIn">
|
|
|
+ <mat-tab-group class="prevent-select">
|
|
|
+ <mat-tab label="Patrón de contraseñas" >
|
|
|
+ <div class="form-pass-container animated fadeIn" style="height: calc(100vh - 304px);" [formGroup]="politicsForm" *ngIf="passwordPatternEnabled">
|
|
|
+ <div class="element">
|
|
|
+ <mat-checkbox [disabled]="true" checked>Longitud mínima</mat-checkbox>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="minLength">
|
|
|
+ <button mat-icon-button matPrefix (click)="editMinLength(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editMinLength(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="element">
|
|
|
+ <mat-checkbox formControlName="enableUpperCase" (change)="disableMinUpper()">Letras mayúsculas</mat-checkbox>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="minUpper">
|
|
|
+ <button mat-icon-button matPrefix (click)="editMinUpper(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editMinUpper(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="element">
|
|
|
+ <mat-checkbox formControlName="enableNumbers" (change)="disableMinNumber()">Números</mat-checkbox>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="minNumber">
|
|
|
+ <button mat-icon-button matPrefix (click)="editMinNumber(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editMinNumber(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="element">
|
|
|
+ <mat-checkbox formControlName="enableCharacters" (change)="disableMinCharacters()">Caracteres especiales</mat-checkbox>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="minCharacters">
|
|
|
+ <button mat-icon-button matPrefix (click)="editMinCharacters(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editMinCharacters(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="save-politics-container">
|
|
|
+ <button mat-flat-button class="indigo_primary_background white_font" (click)="savePaswordFormat()">Guardar configuración</button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="error-container prevent-select" *ngIf="!isLoading && hasError">
|
|
|
- <mat-icon style="color: #e53935; transform: scale(5); margin: 48px;">error</mat-icon>
|
|
|
- <h1 style="color: #e53935;">¡Error!</h1>
|
|
|
- <p style="font-style: italic; font-size: 16px; overflow-wrap: anywhere; text-align: center;">{{ errorStr }}</p>
|
|
|
+ <div class="animated fadeIn" *ngIf="!passwordPatternEnabled">
|
|
|
+ <h3 class="ml-20 mt-16"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
|
|
|
</div>
|
|
|
- <div class="table-container" [hidden]="!(!isLoading && !hasError)" style="overflow: hidden;" class="animated fadeIn">
|
|
|
- <mat-tab-group class="prevent-select">
|
|
|
- <mat-tab label="Patrón de contraseñas" >
|
|
|
- <div class="form-pass-container animated fadeIn" style="height: calc(100vh - 304px);" [formGroup]="politicsForm" *ngIf="passwordPatternEnabled">
|
|
|
- <div class="element">
|
|
|
- <mat-checkbox [disabled]="true" checked>Longitud mínima</mat-checkbox>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="minLength">
|
|
|
- <button mat-icon-button matPrefix (click)="editMinLength(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editMinLength(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="element">
|
|
|
- <mat-checkbox formControlName="enableUpperCase" (change)="disableMinUpper()">Letras mayúsculas</mat-checkbox>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="minUpper">
|
|
|
- <button mat-icon-button matPrefix (click)="editMinUpper(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editMinUpper(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="element">
|
|
|
- <mat-checkbox formControlName="enableNumbers" (change)="disableMinNumber()">Números</mat-checkbox>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="minNumber">
|
|
|
- <button mat-icon-button matPrefix (click)="editMinNumber(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editMinNumber(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="element">
|
|
|
- <mat-checkbox formControlName="enableCharacters" (change)="disableMinCharacters()">Caracteres especiales</mat-checkbox>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="minCharacters">
|
|
|
- <button mat-icon-button matPrefix (click)="editMinCharacters(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editMinCharacters(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="save-politics-container">
|
|
|
- <button mat-flat-button class="indigo_primary_background white_font" (click)="savePaswordFormat()">Guardar configuración</button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="animated fadeIn" *ngIf="!passwordPatternEnabled">
|
|
|
- <h3 class="ml-20 mt-16"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
|
|
|
- </div>
|
|
|
- </mat-tab>
|
|
|
- <mat-tab label="Duración de sesiones">
|
|
|
- <div class="form-pass-container animated fadeIn" style="height: calc(100vh - 304px);" [formGroup]="sessionsForm" *ngIf="sessionsDurationEnabled">
|
|
|
- <div class="element">
|
|
|
- <mat-label>Días</mat-label>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="days">
|
|
|
- <button mat-icon-button matPrefix (click)="editDays(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editDays(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="element">
|
|
|
- <mat-label>Horas</mat-label>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="hours">
|
|
|
- <button mat-icon-button matPrefix (click)="editHours(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editHours(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="element">
|
|
|
- <mat-label>Minutos</mat-label>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="minutes">
|
|
|
- <button mat-icon-button matPrefix (click)="editMinutes(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editMinutes(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="element">
|
|
|
- <mat-label>Segundos</mat-label>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="seconds">
|
|
|
- <button mat-icon-button matPrefix (click)="editSeconds(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editSeconds(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="save-politics-container">
|
|
|
- <button mat-flat-button class="indigo_primary_background white_font" (click)="saveSessionsDuration()">Guardar configuración</button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="animated fadeIn" *ngIf="!sessionsDurationEnabled">
|
|
|
- <h3 class="ml-20 mt-16"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
|
|
|
- </div>
|
|
|
- </mat-tab>
|
|
|
- <mat-tab label="Autenticación en dos pasos">
|
|
|
- <div class="auth-table-container animated fadeIn" style="height: calc(100vh - 304px);" *ngIf="twoFactorAuthEnabled">
|
|
|
- <table mat-table [dataSource]="dataSourceAuth!">
|
|
|
- <ng-container matColumnDef="ID">
|
|
|
- <th mat-header-cell *matHeaderCellDef>ID</th>
|
|
|
- <td mat-cell *matCellDef="let row"> {{row.IDUSUARIO}} </td>
|
|
|
- </ng-container>
|
|
|
-
|
|
|
- <ng-container matColumnDef="NAME">
|
|
|
- <th mat-header-cell *matHeaderCellDef>Usuario</th>
|
|
|
- <td mat-cell *matCellDef="let row"> {{row.NOMBREUSUARIO}} </td>
|
|
|
- </ng-container>
|
|
|
-
|
|
|
- <ng-container matColumnDef="AUTH">
|
|
|
- <th mat-header-cell *matHeaderCellDef>Usar autorización</th>
|
|
|
- <td mat-cell *matCellDef="let row; let i = index">
|
|
|
- <mat-slide-toggle (change)="changeStatus(i)" [checked]="row.AUTHENABLED">
|
|
|
- {{ row.AUTHENABLED ? 'Activado' : 'Desactivado' }}
|
|
|
- </mat-slide-toggle>
|
|
|
- </td>
|
|
|
- </ng-container>
|
|
|
-
|
|
|
- <tr mat-header-row *matHeaderRowDef="displayedColumnsAuth"></tr>
|
|
|
- <tr mat-row *matRowDef="let row; columns: displayedColumnsAuth;"></tr>
|
|
|
- </table>
|
|
|
- </div>
|
|
|
- <div class="animated fadeIn" *ngIf="!twoFactorAuthEnabled">
|
|
|
- <h3 class="ml-20 mt-16"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
|
|
|
- </div>
|
|
|
- </mat-tab>
|
|
|
- <mat-tab label="Número de sesiones activas">
|
|
|
- <div class="form-pass-container animated fadeIn" style="height: calc(100vh - 304px);" [formGroup]="sessionsNumberForm" *ngIf="activeSessionsNumberEnabled">
|
|
|
- <div class="element">
|
|
|
- <mat-label>Sesiones configuradas</mat-label>
|
|
|
- <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
- <input matInput style="text-align: center;" readonly formControlName="number">
|
|
|
- <button mat-icon-button matPrefix (click)="editNumber(0)">
|
|
|
- <mat-icon>remove</mat-icon>
|
|
|
- </button>
|
|
|
- <button mat-icon-button matSuffix (click)="editNumber(1)">
|
|
|
- <mat-icon>add</mat-icon>
|
|
|
- </button>
|
|
|
- </mat-form-field>
|
|
|
- </div>
|
|
|
- <div class="save-politics-container">
|
|
|
- <button mat-flat-button class="indigo_primary_background white_font" (click)="saveActiveSessionsNumber()">Guardar configuración</button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="animated fadeIn" *ngIf="!activeSessionsNumberEnabled">
|
|
|
- <h3 class="ml-20 mt-16"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
|
|
|
- </div>
|
|
|
- </mat-tab>
|
|
|
- </mat-tab-group>
|
|
|
+ </mat-tab>
|
|
|
+ <mat-tab label="Duración de sesiones">
|
|
|
+ <div class="form-pass-container animated fadeIn" style="height: calc(100vh - 304px);" [formGroup]="sessionsForm" *ngIf="sessionsDurationEnabled">
|
|
|
+ <div class="element">
|
|
|
+ <mat-label>Días</mat-label>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="days">
|
|
|
+ <button mat-icon-button matPrefix (click)="editDays(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editDays(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="element">
|
|
|
+ <mat-label>Horas</mat-label>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="hours">
|
|
|
+ <button mat-icon-button matPrefix (click)="editHours(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editHours(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="element">
|
|
|
+ <mat-label>Minutos</mat-label>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="minutes">
|
|
|
+ <button mat-icon-button matPrefix (click)="editMinutes(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editMinutes(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="element">
|
|
|
+ <mat-label>Segundos</mat-label>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="seconds">
|
|
|
+ <button mat-icon-button matPrefix (click)="editSeconds(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editSeconds(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="save-politics-container">
|
|
|
+ <button mat-flat-button class="indigo_primary_background white_font" (click)="saveSessionsDuration()">Guardar configuración</button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </mat-card-content>
|
|
|
- </mat-card>
|
|
|
+ <div class="animated fadeIn" *ngIf="!sessionsDurationEnabled">
|
|
|
+ <h3 class="ml-20 mt-16"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
|
|
|
+ </div>
|
|
|
+ </mat-tab>
|
|
|
+ <mat-tab label="Autenticación en dos pasos">
|
|
|
+ <div class="auth-table-container animated fadeIn" style="height: calc(100vh - 304px);" *ngIf="twoFactorAuthEnabled">
|
|
|
+ <table mat-table [dataSource]="dataSourceAuth!">
|
|
|
+ <ng-container matColumnDef="ID">
|
|
|
+ <th mat-header-cell *matHeaderCellDef>ID</th>
|
|
|
+ <td mat-cell *matCellDef="let row"> {{row.IDUSUARIO}} </td>
|
|
|
+ </ng-container>
|
|
|
+
|
|
|
+ <ng-container matColumnDef="NAME">
|
|
|
+ <th mat-header-cell *matHeaderCellDef>Usuario</th>
|
|
|
+ <td mat-cell *matCellDef="let row"> {{row.NOMBREUSUARIO}} </td>
|
|
|
+ </ng-container>
|
|
|
+
|
|
|
+ <ng-container matColumnDef="AUTH">
|
|
|
+ <th mat-header-cell *matHeaderCellDef>Usar autorización</th>
|
|
|
+ <td mat-cell *matCellDef="let row; let i = index">
|
|
|
+ <mat-slide-toggle (change)="changeStatus(i)" [checked]="row.AUTHENABLED">
|
|
|
+ {{ row.AUTHENABLED ? 'Activado' : 'Desactivado' }}
|
|
|
+ </mat-slide-toggle>
|
|
|
+ </td>
|
|
|
+ </ng-container>
|
|
|
+
|
|
|
+ <tr mat-header-row *matHeaderRowDef="displayedColumnsAuth"></tr>
|
|
|
+ <tr mat-row *matRowDef="let row; columns: displayedColumnsAuth;"></tr>
|
|
|
+ </table>
|
|
|
+ </div>
|
|
|
+ <div class="animated fadeIn" *ngIf="!twoFactorAuthEnabled">
|
|
|
+ <h3 class="ml-20 mt-16"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
|
|
|
+ </div>
|
|
|
+ </mat-tab>
|
|
|
+ <mat-tab label="Número de sesiones activas">
|
|
|
+ <div class="form-pass-container animated fadeIn" style="height: calc(100vh - 304px);" [formGroup]="sessionsNumberForm" *ngIf="activeSessionsNumberEnabled">
|
|
|
+ <div class="element">
|
|
|
+ <mat-label>Sesiones configuradas</mat-label>
|
|
|
+ <mat-form-field appearance="outline" style="width: 100%;">
|
|
|
+ <input matInput style="text-align: center;" readonly formControlName="number">
|
|
|
+ <button mat-icon-button matPrefix (click)="editNumber(0)">
|
|
|
+ <mat-icon>remove</mat-icon>
|
|
|
+ </button>
|
|
|
+ <button mat-icon-button matSuffix (click)="editNumber(1)">
|
|
|
+ <mat-icon>add</mat-icon>
|
|
|
+ </button>
|
|
|
+ </mat-form-field>
|
|
|
+ </div>
|
|
|
+ <div class="save-politics-container">
|
|
|
+ <button mat-flat-button class="indigo_primary_background white_font" (click)="saveActiveSessionsNumber()">Guardar configuración</button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="animated fadeIn" *ngIf="!activeSessionsNumberEnabled">
|
|
|
+ <h3 class="ml-20 mt-16"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
|
|
|
+ </div>
|
|
|
+ </mat-tab>
|
|
|
+ </mat-tab-group>
|
|
|
+ </div>
|
|
|
+ </mat-card-content>
|
|
|
+ </mat-card>
|
|
|
</div>
|