chore(console): Angular 20 #10690 (#10768)

# Which Problems Are Solved


# How the Problems Are Solved

# Additional Changes

# Additional Context
- Closes #10690
This commit is contained in:
Ramon
2025-10-08 07:10:50 +00:00
committed by GitHub
parent 4c078c1474
commit e47acaeef2
272 changed files with 3264 additions and 5037 deletions
@@ -38,6 +38,7 @@ interface V1AndV2Session {
selector: 'cnsl-accounts-card',
templateUrl: './accounts-card.component.html',
styleUrls: ['./accounts-card.component.scss'],
standalone: false,
})
export class AccountsCardComponent {
@Input({ required: true })
@@ -16,6 +16,7 @@ export enum ActionKeysType {
selector: 'cnsl-action-keys',
templateUrl: './action-keys.component.html',
styleUrls: ['./action-keys.component.scss'],
standalone: false,
})
export class ActionKeysComponent implements AfterViewInit {
@Input() type: ActionKeysType = ActionKeysType.ADD;
@@ -11,6 +11,7 @@ import { CorrectlyTypedExecution } from '../../actions-two-add-action/actions-tw
templateUrl: './actions-two-actions-table.component.html',
styleUrls: ['./actions-two-actions-table.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class ActionsTwoActionsTableComponent {
@Output()
@@ -23,6 +23,7 @@ import { ExecutionFieldName } from '@zitadel/proto/zitadel/action/v2beta/query_p
templateUrl: './actions-two-actions.component.html',
styleUrls: ['./actions-two-actions.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class ActionsTwoActionsComponent {
protected readonly refresh$ = new Subject<true>();
@@ -29,7 +29,6 @@ class Filter implements PipeTransform {
selector: 'cnsl-actions-two-add-action-autocomplete-input',
templateUrl: './actions-two-add-action-autocomplete-input.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
imports: [
AsyncPipe,
Filter,
@@ -28,7 +28,6 @@ export type ConditionTypeValue<T extends ConditionType> = Omit<
>;
@Component({
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'cnsl-actions-two-add-action-condition',
templateUrl: './actions-two-add-action-condition.component.html',
@@ -53,7 +53,6 @@ export type ActionTwoAddActionDialogResult = MessageInitShape<typeof SetExecutio
selector: 'cnsl-actions-two-add-action-dialog',
templateUrl: './actions-two-add-action-dialog.component.html',
styleUrls: ['./actions-two-add-action-dialog.component.scss'],
standalone: true,
imports: [
CommonModule,
MatButtonModule,
@@ -35,7 +35,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
import { TableActionsModule } from 'src/app/modules/table-actions/table-actions.module';
@Component({
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'cnsl-actions-two-add-action-target',
templateUrl: './actions-two-add-action-target.component.html',
@@ -16,7 +16,6 @@ import { ConditionType } from '../actions-two-add-action-condition/actions-two-a
// }
@Component({
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'cnsl-actions-two-add-action-type',
templateUrl: './actions-two-add-action-type.component.html',
@@ -22,7 +22,6 @@ type TargetTypes = ActionTwoAddTargetDialogComponent['targetTypes'][number];
selector: 'cnsl-actions-two-add-target-dialog',
templateUrl: './actions-two-add-target-dialog.component.html',
styleUrls: ['./actions-two-add-target-dialog.component.scss'],
standalone: true,
imports: [
CommonModule,
MatButtonModule,
@@ -10,6 +10,7 @@ import { toSignal } from '@angular/core/rxjs-interop';
templateUrl: './actions-two-targets-table.component.html',
styleUrls: ['./actions-two-targets-table.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class ActionsTwoTargetsTableComponent {
@Output()
@@ -19,6 +19,7 @@ import { InfoSectionType } from '../../info-section/info-section.component';
templateUrl: './actions-two-targets.component.html',
styleUrls: ['./actions-two-targets.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class ActionsTwoTargetsComponent {
protected readonly targets$: Observable<Target[]>;
@@ -12,6 +12,7 @@ export enum AddKeyDialogType {
selector: 'cnsl-add-key-dialog',
templateUrl: './add-key-dialog.component.html',
styleUrls: ['./add-key-dialog.component.scss'],
standalone: false,
})
export class AddKeyDialogComponent {
public startDate: Date = new Date();
@@ -21,6 +21,7 @@ export enum CreationType {
selector: 'cnsl-member-create-dialog',
templateUrl: './member-create-dialog.component.html',
styleUrls: ['./member-create-dialog.component.scss'],
standalone: false,
})
export class MemberCreateDialogComponent {
private projectId: string = '';
@@ -6,6 +6,7 @@ import { getMembershipColor } from 'src/app/utils/color';
selector: 'cnsl-add-member-roles-dialog',
templateUrl: './add-member-roles-dialog.component.html',
styleUrls: ['./add-member-roles-dialog.component.scss'],
standalone: false,
})
export class AddMemberRolesDialogComponent {
public allRoles: string[] = [];
@@ -6,6 +6,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
selector: 'cnsl-add-token-dialog',
templateUrl: './add-token-dialog.component.html',
styleUrls: ['./add-token-dialog.component.scss'],
standalone: false,
})
export class AddTokenDialogComponent {
public startDate: Date = new Date();
@@ -5,6 +5,7 @@ import { OIDCAppType } from 'src/app/proto/generated/zitadel/app_pb';
selector: 'cnsl-app-card',
templateUrl: './app-card.component.html',
styleUrls: ['./app-card.component.scss'],
standalone: false,
})
export class AppCardComponent {
@Input() public outline: boolean = false;
@@ -25,6 +25,7 @@ export interface RadioItemAuthType {
selector: 'cnsl-auth-method-radio',
templateUrl: './app-auth-method-radio.component.html',
styleUrls: ['./app-auth-method-radio.component.scss'],
standalone: false,
})
export class AppAuthMethodRadioComponent {
@Input() current: string = '';
@@ -5,6 +5,7 @@ import { RadioItemAppType, WEB_TYPE } from 'src/app/pages/projects/apps/authtype
selector: 'cnsl-type-radio',
templateUrl: './app-type-radio.component.html',
styleUrls: ['./app-type-radio.component.scss'],
standalone: false,
})
export class AppTypeRadioComponent {
@Input() selected: RadioItemAppType = WEB_TYPE;
@@ -6,6 +6,7 @@ import { Color, getColorHash } from 'src/app/utils/color';
selector: 'cnsl-avatar',
templateUrl: './avatar.component.html',
styleUrls: ['./avatar.component.scss'],
standalone: false,
})
export class AvatarComponent implements OnInit {
@Input() name: string = '';
@@ -5,6 +5,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
templateUrl: './card.component.html',
styleUrls: ['./card.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class CardComponent {
@Input() public title: string = '';
@@ -5,7 +5,7 @@
<div class="scroll-container">
<li class="item" *ngFor="let hist of data | async; index as histindex">
<span *ngIf="hist.values[0].dates[0]" class="date">
{{ hist.values[0].dates[0] | timestampToDate | localizedDate: 'dd. MMM YYYY' }}
{{ hist.values[0].dates[0] | timestampToDate | localizedDate: 'dd. MMM yyyy' }}
</span>
<div class="item" *ngFor="let dayelement of hist.values; index as i">
<div class="row">
@@ -28,7 +28,7 @@
<span class="msg">{{ action.localizedMessage }}</span>
<span
class="block"
matTooltip="{{ dayelement.dates[j] | timestampToDate | localizedDate: 'dd. MM YYYY, HH:mm:ss.SSS' }}"
matTooltip="{{ dayelement.dates[j] | timestampToDate | localizedDate: 'dd. MM yyyy, HH:mm:ss.SSS' }}"
>{{ dayelement.dates[j] | timestampToDate | localizedDate: 'HH:mm' }}</span
>
</div>
@@ -51,6 +51,7 @@ type ListChanges =
selector: 'cnsl-changes',
templateUrl: './changes.component.html',
styleUrls: ['./changes.component.scss'],
standalone: false,
})
export class ChangesComponent implements OnInit {
@Input({ required: true }) public changeType!: ChangeType;
@@ -19,6 +19,7 @@ import { PageEvent, PaginatorComponent } from '../paginator/paginator.component'
selector: 'cnsl-client-keys',
templateUrl: './client-keys.component.html',
styleUrls: ['./client-keys.component.scss'],
standalone: false,
})
export class ClientKeysComponent implements OnInit {
@Input() projectId!: string;
@@ -25,6 +25,7 @@ import { Type } from 'src/app/proto/generated/zitadel/user_pb';
]),
]),
],
standalone: false,
})
export class ContributorsComponent {
@Input() title: string = '';
@@ -4,6 +4,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
selector: 'cnsl-create-layout',
templateUrl: './create-layout.component.html',
styleUrls: ['./create-layout.component.scss'],
standalone: false,
})
export class CreateLayoutComponent {
@Input() currentCreateStep: number = 1;
@@ -4,6 +4,7 @@ import { Component, Input } from '@angular/core';
selector: 'cnsl-detail-layout',
templateUrl: './detail-layout.component.html',
styleUrls: ['./detail-layout.component.scss'],
standalone: false,
})
export class DetailLayoutComponent {
@Input() hasBackButton: boolean = true;
@@ -7,6 +7,7 @@ import { Event } from 'src/app/proto/generated/zitadel/event_pb';
selector: 'cnsl-display-json-dialog',
templateUrl: './display-json-dialog.component.html',
styleUrls: ['./display-json-dialog.component.scss'],
standalone: false,
})
export class DisplayJsonDialogComponent {
public event?: Event;
@@ -5,6 +5,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
selector: 'cnsl-add-domain-dialog',
templateUrl: './add-domain-dialog.component.html',
styleUrls: ['./add-domain-dialog.component.scss'],
standalone: false,
})
export class AddDomainDialogComponent {
public newdomain: string = '';
@@ -11,6 +11,7 @@ import { ToastService } from 'src/app/services/toast.service';
selector: 'cnsl-domain-verification',
templateUrl: './domain-verification.component.html',
styleUrls: ['./domain-verification.component.scss'],
standalone: false,
})
export class DomainVerificationComponent {
public domain?: Domain.AsObject;
@@ -14,6 +14,7 @@ import { DomainVerificationComponent } from './domain-verification/domain-verifi
selector: 'cnsl-domains',
templateUrl: './domains.component.html',
styleUrls: ['./domains.component.scss'],
standalone: false,
})
export class DomainsComponent implements OnInit {
public domains: Domain.AsObject[] = [];
@@ -9,6 +9,7 @@ import { InfoSectionType } from '../info-section/info-section.component';
selector: 'cnsl-edit-text',
templateUrl: './edit-text.component.html',
styleUrls: ['./edit-text.component.scss'],
standalone: false,
})
export class EditTextComponent implements OnInit, OnDestroy {
@Input() label: string = '';
@@ -31,6 +31,7 @@ type LoadRequest = {
selector: 'cnsl-events',
templateUrl: './events.component.html',
styleUrls: ['./events.component.scss'],
standalone: false,
})
export class EventsComponent implements OnDestroy {
public INITPAGESIZE = 20;
@@ -12,6 +12,7 @@ import { ToastService } from 'src/app/services/toast.service';
selector: 'cnsl-iam-failed-events',
templateUrl: './failed-events.component.html',
styleUrls: ['./failed-events.component.scss'],
standalone: false,
})
export class FailedEventsComponent implements AfterViewInit {
@ViewChild(MatPaginator) public eventPaginator!: MatPaginator;
@@ -34,6 +34,7 @@ function dateToTs(date: Date): Timestamp {
selector: 'cnsl-filter-events',
templateUrl: './filter-events.component.html',
styleUrls: ['./filter-events.component.scss'],
standalone: false,
})
export class FilterEventsComponent implements OnInit {
// Make enum available in template
@@ -26,6 +26,7 @@ enum SubQuery {
selector: 'cnsl-filter-org',
templateUrl: './filter-org.component.html',
styleUrls: ['./filter-org.component.scss'],
standalone: false,
})
export class FilterOrgComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery;
@@ -17,6 +17,7 @@ enum SubQuery {
selector: 'cnsl-filter-project',
templateUrl: './filter-project.component.html',
styleUrls: ['./filter-project.component.scss'],
standalone: false,
})
export class FilterProjectComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery;
@@ -24,6 +24,7 @@ enum SubQuery {
selector: 'cnsl-filter-user-grants',
templateUrl: './filter-user-grants.component.html',
styleUrls: ['./filter-user-grants.component.scss'],
standalone: false,
})
export class FilterUserGrantsComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery;
@@ -26,6 +26,7 @@ enum SubQuery {
selector: 'cnsl-filter-user',
templateUrl: './filter-user.component.html',
styleUrls: ['./filter-user.component.scss'],
standalone: false,
})
export class FilterUserComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery;
@@ -22,6 +22,7 @@ type FilterSearchQueryAsObject =
selector: 'cnsl-filter',
templateUrl: './filter.component.html',
styleUrls: ['./filter.component.scss'],
standalone: false,
})
export class FilterComponent {
@Output() public filterChanged: EventEmitter<FilterSearchQuery[]> = new EventEmitter();
@@ -7,6 +7,7 @@ import { faXTwitter } from '@fortawesome/free-brands-svg-icons';
selector: 'cnsl-footer',
templateUrl: './footer.component.html',
styleUrls: ['./footer.component.scss'],
standalone: false,
})
export class FooterComponent {
public faXTwitter = faXTwitter;
@@ -12,6 +12,7 @@ export const CNSL_ERROR = new InjectionToken<CnslErrorDirective>('CnslError');
'[attr.id]': 'id',
},
providers: [{ provide: CNSL_ERROR, useExisting: CnslErrorDirective }],
standalone: false,
})
export class CnslErrorDirective {
@Input() id: string = `cnsl-error-${nextUniqueId++}`;
@@ -60,6 +60,7 @@ interface ValidationError {
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
animations: [cnslFormFieldAnimations.transitionMessages],
standalone: false,
})
export class CnslFormFieldComponent extends CnslFormFieldBase implements OnDestroy, AfterContentInit, AfterViewInit {
focused: boolean = false;
@@ -13,6 +13,7 @@ import { Organization } from '@zitadel/proto/zitadel/org/v2/org_pb';
selector: 'cnsl-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss'],
standalone: false,
})
export class HeaderComponent {
@Input() public isDarkTheme: boolean = true;
@@ -12,6 +12,7 @@ import { Breadcrumb, BreadcrumbService, BreadcrumbType } from 'src/app/services/
selector: 'cnsl-iam-views',
templateUrl: './iam-views.component.html',
styleUrls: ['./iam-views.component.scss'],
standalone: false,
})
export class IamViewsComponent implements AfterViewInit {
@ViewChild(MatSort) sort!: MatSort;
@@ -43,6 +43,7 @@ import { first } from 'rxjs/operators';
selector: 'cnsl-idp-table',
templateUrl: './idp-table.component.html',
styleUrls: ['./idp-table.component.scss'],
standalone: false,
})
export class IdpTableComponent implements OnInit, OnDestroy {
@Input() public serviceType!: PolicyComponentServiceType;
@@ -7,6 +7,7 @@ import { InfoSectionType } from '../info-section/info-section.component';
selector: 'cnsl-info-dialog',
templateUrl: './info-dialog.component.html',
styleUrls: ['./info-dialog.component.scss'],
standalone: false,
})
export class InfoDialogComponent {
public confirm: string = '';
@@ -7,6 +7,7 @@ export const OVERLAY_DATA = new InjectionToken<any>('OVERLAY_DATA');
selector: 'cnsl-info-overlay',
templateUrl: './info-overlay.component.html',
styleUrls: ['./info-overlay.component.scss'],
standalone: false,
})
export class InfoOverlayComponent {
constructor(
@@ -21,14 +21,14 @@
<div class="info-wrapper">
<p class="info-row-title">{{ 'USER.DETAILS.DATECREATED' | translate }}</p>
<p *ngIf="creationDate" class="info-row-desc">
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
<div class="info-wrapper">
<p class="info-row-title">{{ 'USER.DETAILS.DATECHANGED' | translate }}</p>
<p *ngIf="changeDate" class="info-row-desc">
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
@@ -97,14 +97,14 @@
<div class="info-wrapper">
<p class="info-row-title">{{ 'ORG.PAGES.CREATIONDATE' | translate }}</p>
<p *ngIf="instance?.details?.creationDate as creationDate" class="info-row-desc">
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
<div class="info-wrapper">
<p class="info-row-title">{{ 'ORG.PAGES.DATECHANGED' | translate }}</p>
<p *ngIf="instance?.details?.changeDate as changeDate" class="info-row-desc">
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
</div>
@@ -144,14 +144,14 @@
<div class="info-wrapper">
<p class="info-row-title">{{ 'ORG.PAGES.CREATIONDATE' | translate }}</p>
<p *ngIf="org?.details?.creationDate as creationDate" class="info-row-desc">
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
<div class="info-wrapper">
<p class="info-row-title">{{ 'ORG.PAGES.DATECHANGED' | translate }}</p>
<p *ngIf="org?.details?.changeDate as changeDate" class="info-row-desc">
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
</div>
@@ -179,14 +179,14 @@
<div class="info-wrapper">
<p class="info-row-title">{{ 'PROJECT.PAGES.CREATEDON' | translate }}</p>
<p *ngIf="project?.details?.creationDate as creationDate" class="info-row-desc">
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
<div class="info-wrapper">
<p class="info-row-title">{{ 'PROJECT.PAGES.LASTMODIFIED' | translate }}</p>
<p *ngIf="project?.details?.changeDate as changeDate" class="info-row-desc">
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
</div>
@@ -219,14 +219,14 @@
<div class="info-wrapper">
<p class="info-row-title">{{ 'PROJECT.PAGES.CREATEDON' | translate }}</p>
<p *ngIf="grantedProject?.details?.creationDate as creationDate" class="info-row-desc">
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
<div class="info-wrapper">
<p class="info-row-title">{{ 'PROJECT.PAGES.LASTMODIFIED' | translate }}</p>
<p *ngIf="grantedProject?.details?.changeDate as changeDate" class="info-row-desc">
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
</div>
@@ -265,14 +265,14 @@
<div class="info-wrapper">
<p class="info-row-title">{{ 'APP.PAGES.DATECREATED' | translate }}</p>
<p *ngIf="app?.details?.creationDate as creationDate" class="info-row-desc">
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
<div class="info-wrapper">
<p class="info-row-title">{{ 'APP.PAGES.DATECHANGED' | translate }}</p>
<p *ngIf="app?.details?.changeDate as changeDate" class="info-row-desc">
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
@@ -318,14 +318,14 @@
<div class="info-wrapper">
<p class="info-row-title">{{ 'IDP.DETAIL.DATECREATED' | translate }}</p>
<p class="info-row-desc" *ngIf="idp?.details?.creationDate as creationDate">
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
<div class="info-wrapper">
<p class="info-row-title">{{ 'IDP.DETAIL.DATECHANGED' | translate }}</p>
<p class="info-row-desc" *ngIf="idp?.details?.changeDate as changeDate">
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p>
</div>
@@ -15,6 +15,7 @@ import { Organization as OrgV2 } from '@zitadel/proto/zitadel/org/v2/org_pb';
selector: 'cnsl-info-row',
templateUrl: './info-row.component.html',
styleUrls: ['./info-row.component.scss'],
standalone: false,
})
export class InfoRowComponent {
@Input() public user?: User.AsObject | UserV2 | UserV1;
@@ -11,6 +11,7 @@ export enum InfoSectionType {
templateUrl: './info-section.component.html',
styleUrls: ['./info-section.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class InfoSectionComponent {
@Input() type: InfoSectionType = InfoSectionType.INFO;
@@ -12,6 +12,7 @@ import { By } from '@angular/platform-browser';
@Component({
template: `<input appInputDirective />`,
standalone: false,
})
class TestHostComponent {}
@@ -16,7 +16,7 @@ import {
Self,
} from '@angular/core';
import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';
import { CanUpdateErrorState, ErrorStateMatcher, mixinErrorState } from '@angular/material/core';
import { _ErrorStateTracker, ErrorStateMatcher } from '@angular/material/core';
import { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';
import { getMatInputUnsupportedTypeError, MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';
import { Subject } from 'rxjs';
@@ -26,24 +26,6 @@ const MAT_INPUT_INVALID_TYPES = ['button', 'checkbox', 'file', 'hidden', 'image'
let nextUniqueId = 0;
const _MatInputBase = mixinErrorState(
class {
readonly stateChanges = new Subject<void>();
constructor(
public _defaultErrorStateMatcher: ErrorStateMatcher,
public _parentForm: NgForm,
public _parentFormGroup: FormGroupDirective,
/**
* Form control bound to the component.
* Implemented as part of `MatFormFieldControl`.
* @docs-private
*/
public ngControl: NgControl,
) {}
},
);
/** Directive that allows a native input to work inside a `MatFormField`. */
@Directive({
selector: `input[cnslInput], textarea[cnslInput], select[cnslNativeControl]`,
@@ -68,11 +50,9 @@ const _MatInputBase = mixinErrorState(
'[attr.aria-required]': 'required.toString()',
},
providers: [{ provide: MatFormFieldControl, useExisting: InputDirective }],
standalone: false,
})
export class InputDirective
extends _MatInputBase
implements MatFormFieldControl<any>, OnChanges, CanUpdateErrorState, OnDestroy, AfterViewInit, DoCheck, CanUpdateErrorState
{
export class InputDirective implements MatFormFieldControl<any>, OnChanges, OnDestroy, AfterViewInit, DoCheck {
protected _uid: string = `cnsl-input-${nextUniqueId++}`;
protected _previousNativeValue: any;
private _inputValueAccessor: { value: any };
@@ -97,7 +77,14 @@ export class InputDirective
* Implemented as part of MatFormFieldControl.
* @docs-private
*/
override readonly stateChanges: Subject<void> = new Subject<void>();
readonly stateChanges: Subject<void> = new Subject<void>();
get errorState() {
return this._errorStateTracker.errorState;
}
set errorState(value: boolean) {
this._errorStateTracker.errorState = value;
}
/**
* Implemented as part of MatFormFieldControl.
@@ -184,9 +171,6 @@ export class InputDirective
}
protected _type: string = 'text';
/** An object used to control when error messages are shown. */
@Input() override errorStateMatcher!: ErrorStateMatcher;
/**
* Implemented as part of MatFormFieldControl.
* @docs-private
@@ -223,24 +207,40 @@ export class InputDirective
getSupportedInputTypes().has(t),
);
@Input()
get errorStateMatcher() {
return this._errorStateTracker.matcher;
}
set errorStateMatcher(value: ErrorStateMatcher) {
this._errorStateTracker.matcher = value;
}
private _errorStateTracker: _ErrorStateTracker;
constructor(
protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,
protected _platform: Platform,
/** @docs-private */
@Optional() @Self() public override ngControl: NgControl,
@Optional() _parentForm: NgForm,
@Optional() _parentFormGroup: FormGroupDirective,
_defaultErrorStateMatcher: ErrorStateMatcher,
@Optional() @Self() public ngControl: NgControl,
@Optional() parentForm: NgForm,
@Optional() parentFormGroup: FormGroupDirective,
defaultErrorStateMatcher: ErrorStateMatcher,
@Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any,
private _autofillMonitor: AutofillMonitor,
ngZone: NgZone,
@Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField,
) {
super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);
const element = this._elementRef.nativeElement;
const nodeName = element.nodeName.toLowerCase();
this._errorStateTracker = new _ErrorStateTracker(
defaultErrorStateMatcher,
ngControl,
parentFormGroup,
parentForm,
this.stateChanges,
);
// If no input value accessor was explicitly specified, use the element as the input value
// accessor.
this._inputValueAccessor = inputValueAccessor || element;
@@ -317,6 +317,10 @@ export class InputDirective
this._dirtyCheckPlaceholder();
}
updateErrorState() {
this._errorStateTracker.updateErrorState();
}
/** Focuses the input. */
focus(options?: FocusOptions): void {
this._elementRef.nativeElement.focus(options);
@@ -7,6 +7,7 @@ import { KeyboardShortcut, ORGSHORTCUTS, SIDEWIDESHORTCUTS } from 'src/app/servi
selector: 'cnsl-keyboard-shortcuts',
templateUrl: './keyboard-shortcuts.component.html',
styleUrls: ['./keyboard-shortcuts.component.scss'],
standalone: false,
})
export class KeyboardShortcutsComponent {
public orgShortcuts: KeyboardShortcut[] = ORGSHORTCUTS;
@@ -4,6 +4,7 @@ import { Component } from '@angular/core';
selector: 'cnsl-label',
templateUrl: './label.component.html',
styleUrls: ['./label.component.scss'],
standalone: false,
})
export class LabelComponent {
constructor() {}
@@ -20,6 +20,7 @@ import { WarnDialogComponent } from '../warn-dialog/warn-dialog.component';
selector: 'cnsl-machine-keys',
templateUrl: './machine-keys.component.html',
styleUrls: ['./machine-keys.component.scss'],
standalone: false,
})
export class MachineKeysComponent implements OnInit {
@Input() userId?: string;
@@ -26,6 +26,7 @@ type MemberDatasource =
selector: 'cnsl-members-table',
templateUrl: './members-table.component.html',
styleUrls: ['./members-table.component.scss'],
standalone: false,
})
export class MembersTableComponent implements OnInit, OnDestroy {
public INITIALPAGESIZE: number = 25;
@@ -22,6 +22,7 @@ import { Organization } from '@zitadel/proto/zitadel/org/v2/org_pb';
selector: 'cnsl-memberships-table',
templateUrl: './memberships-table.component.html',
styleUrls: ['./memberships-table.component.scss'],
standalone: false,
})
export class MembershipsTableComponent implements OnInit, OnDestroy {
public INITIALPAGESIZE: number = 25;
@@ -7,6 +7,7 @@ import { map } from 'rxjs/operators';
selector: 'cnsl-meta-layout',
templateUrl: './meta-layout.component.html',
styleUrls: ['./meta-layout.component.scss'],
standalone: false,
})
export class MetaLayoutComponent {
constructor(private breakpointObserver: BreakpointObserver) {
@@ -15,6 +15,7 @@ export type MetadataDialogData = {
selector: 'cnsl-metadata-dialog',
templateUrl: './metadata-dialog.component.html',
styleUrls: ['./metadata-dialog.component.scss'],
standalone: false,
})
export class MetadataDialogComponent {
public metadata: { key: string; value: string }[] = [];
@@ -15,6 +15,7 @@ type StringMetadata = {
selector: 'cnsl-metadata',
templateUrl: './metadata.component.html',
styleUrls: ['./metadata.component.scss'],
standalone: false,
})
export class MetadataComponent implements OnInit {
@Input({ required: true }) public set metadata(metadata: (Metadata.AsObject | MetadataV2)[]) {
@@ -5,6 +5,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
selector: 'cnsl-name-dialog',
templateUrl: './name-dialog.component.html',
styleUrls: ['./name-dialog.component.scss'],
standalone: false,
})
export class NameDialogComponent {
public name: string = '';
@@ -4,6 +4,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
selector: 'cnsl-nav-toggle',
templateUrl: './nav-toggle.component.html',
styleUrls: ['./nav-toggle.component.scss'],
standalone: false,
})
export class NavToggleComponent {
@Input() public label: string = '';
@@ -69,6 +69,7 @@ import { Organization } from '@zitadel/proto/zitadel/org/v2/org_pb';
]),
]),
],
standalone: false,
})
export class NavComponent implements OnDestroy {
@ViewChild('input', { static: false }) input!: ElementRef;
@@ -7,7 +7,6 @@ import { MatRippleModule } from '@angular/material/core';
selector: 'cnsl-header-button',
templateUrl: './header-button.component.html',
styleUrls: ['./header-button.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [NgIconComponent, MatRippleModule],
providers: [provideIcons({ heroChevronUpDown })],
@@ -23,7 +23,6 @@ import { ReplaySubject } from 'rxjs';
selector: 'cnsl-header-dropdown',
templateUrl: './header-dropdown.component.html',
styleUrls: ['./header-dropdown.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [CdkConnectedOverlay, NgIf, AsyncPipe],
})
@@ -59,15 +58,12 @@ export class HeaderDropdownComponent implements OnInit {
// to make sure the dropdown will be rendered in the correct position
runInInjectionContext(this.injector, () => {
const isOpen = toSignal(this.isOpen$, { requireSync: true });
effect(
() => {
this.isHandset();
if (untracked(() => isOpen())) {
this.closed.emit();
}
},
{ allowSignalWrites: true },
);
effect(() => {
this.isHandset();
if (untracked(() => isOpen())) {
this.closed.emit();
}
});
});
}
@@ -1,7 +1,6 @@
import { ChangeDetectionStrategy, Component, EventEmitter, Output, Input } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { MatButtonModule } from '@angular/material/button';
import { Router, RouterLink } from '@angular/router';
import { InstanceDetail } from '@zitadel/proto/zitadel/instance_pb';
import { NgIconComponent, provideIcons } from '@ng-icons/core';
import { heroCog8ToothSolid } from '@ng-icons/heroicons/solid';
@@ -14,9 +13,8 @@ import { CommonModule } from '@angular/common';
selector: 'cnsl-instance-selector',
templateUrl: './instance-selector.component.html',
styleUrls: ['./instance-selector.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [TranslateModule, MatButtonModule, RouterLink, NgIconComponent, CommonModule],
imports: [TranslateModule, MatButtonModule, NgIconComponent, CommonModule],
providers: [provideIcons({ heroCog8ToothSolid, heroChevronRight })],
})
export class InstanceSelectorComponent {
@@ -25,7 +25,6 @@ import { MatRippleModule } from '@angular/material/core';
selector: 'cnsl-new-header',
templateUrl: './new-header.component.html',
styleUrls: ['./new-header.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
MatToolbarModule,
@@ -48,7 +48,6 @@ const QUERY_LIMIT = 20;
selector: 'cnsl-organization-selector',
templateUrl: './organization-selector.component.html',
styleUrls: ['./organization-selector.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
NgForOf,
@@ -7,6 +7,7 @@ import { ONBOARDING_MILESTONES } from 'src/app/utils/onboarding';
selector: 'cnsl-onboarding-card',
templateUrl: './onboarding-card.component.html',
styleUrls: ['./onboarding-card.component.scss'],
standalone: false,
})
export class OnboardingCardComponent implements OnInit {
public percentageChanged: EventEmitter<number> = new EventEmitter<number>();
@@ -7,6 +7,7 @@ import { ONBOARDING_MILESTONES } from 'src/app/utils/onboarding';
selector: 'cnsl-onboarding',
templateUrl: './onboarding.component.html',
styleUrls: ['./onboarding.component.scss'],
standalone: false,
})
export class OnboardingComponent {
public actions = this.adminService.progressMilestones;
@@ -15,6 +15,7 @@ const ORG_QUERY_LIMIT = 100;
selector: 'cnsl-org-context',
templateUrl: './org-context.component.html',
styleUrls: ['./org-context.component.scss'],
standalone: false,
})
export class OrgContextComponent implements OnInit {
public pinned: SelectionModel<Org.AsObject> = new SelectionModel<Org.AsObject>(true, []);
@@ -26,6 +26,7 @@ type SearchQuery = NonNullable<MessageInitShape<typeof ListOrganizationsRequestS
selector: 'cnsl-org-table',
templateUrl: './org-table.component.html',
styleUrls: ['./org-table.component.scss'],
standalone: false,
})
export class OrgTableComponent {
public displayedColumns: string[] = ['name', 'state', 'primaryDomain', 'creationDate', 'changeDate', 'actions'];
@@ -13,6 +13,7 @@ export interface PageEvent {
selector: 'cnsl-paginator',
templateUrl: './paginator.component.html',
styleUrls: ['./paginator.component.scss'],
standalone: false,
})
export class PaginatorComponent {
@Input() public timestamp: Timestamp.AsObject | ConnectTimestamp | undefined = undefined;
@@ -30,22 +30,22 @@
}})
</span>
</div>
<div class="val" *ngIf="this.policy.hasSymbol">
<div class="val" *ngIf="policy.hasSymbol">
<i *ngIf="password?.pristine || password?.errors?.['errorssymbolerror']" class="las la-times red"></i>
<i *ngIf="password?.dirty && !password?.errors?.['errorssymbolerror']" class="las la-check green"></i>
<span class="cnsl-secondary-text"> {{ 'ERRORS.SYMBOLERROR' | translate }}</span>
</div>
<div class="val" *ngIf="this.policy.hasNumber">
<div class="val" *ngIf="policy.hasNumber">
<i *ngIf="password?.pristine || password?.errors?.['errorsnumbererror']" class="las la-times red"></i>
<i *ngIf="password?.dirty && !password?.errors?.['errorsnumbererror']" class="las la-check green"></i>
<span class="cnsl-secondary-text"> {{ 'ERRORS.NUMBERERROR' | translate }}</span>
</div>
<div class="val" *ngIf="this.policy.hasUppercase">
<div class="val" *ngIf="policy.hasUppercase">
<i *ngIf="password?.pristine || password?.errors?.['errorsuppercasemissing']" class="las la-times red"></i>
<i *ngIf="password?.dirty && !password?.errors?.['errorsuppercasemissing']" class="las la-check green"></i>
<span class="cnsl-secondary-text"> {{ 'ERRORS.UPPERCASEMISSING' | translate }}</span>
</div>
<div class="val" *ngIf="this.policy.hasLowercase">
<div class="val" *ngIf="policy.hasLowercase">
<i *ngIf="password?.pristine || password?.errors?.['errorslowercasemissing']" class="las la-times red"></i>
<i *ngIf="password?.dirty && !password?.errors?.['errorslowercasemissing']" class="las la-check green"></i>
<span class="cnsl-secondary-text">{{ 'ERRORS.LOWERCASEMISSING' | translate }}</span>
@@ -6,6 +6,7 @@ import { PasswordComplexityPolicy } from '@zitadel/proto/zitadel/policy_pb';
selector: 'cnsl-password-complexity-view',
templateUrl: './password-complexity-view.component.html',
styleUrls: ['./password-complexity-view.component.scss'],
standalone: false,
})
export class PasswordComplexityViewComponent {
@Input() public password: AbstractControl | null = null;
@@ -20,6 +20,7 @@ import { WarnDialogComponent } from '../warn-dialog/warn-dialog.component';
selector: 'cnsl-personal-access-tokens',
templateUrl: './personal-access-tokens.component.html',
styleUrls: ['./personal-access-tokens.component.scss'],
standalone: false,
})
export class PersonalAccessTokensComponent implements OnInit {
@Input() userId!: string;
@@ -21,6 +21,7 @@ import { NewOrganizationService } from '../../../services/new-organization.servi
selector: 'cnsl-domain-policy',
templateUrl: './domain-policy.component.html',
styleUrls: ['./domain-policy.component.scss'],
standalone: false,
})
export class DomainPolicyComponent implements OnInit, OnDestroy {
private managementService!: ManagementService;
@@ -8,6 +8,7 @@ import { PolicyComponentServiceType } from '../policy-component-types.enum';
selector: 'cnsl-idp-settings',
templateUrl: './idp-settings.component.html',
styleUrls: ['./idp-settings.component.scss'],
standalone: false,
})
export class IdpSettingsComponent implements OnInit {
@Input() public serviceType!: PolicyComponentServiceType;
@@ -17,6 +17,7 @@ interface State {
selector: 'cnsl-language-settings',
templateUrl: './language-settings.component.html',
styleUrls: ['./language-settings.component.scss'],
standalone: false,
})
export class LanguageSettingsComponent {
public canWriteRestrictions$: Observable<boolean> = this.authService.isAllowed(['iam.restrictions.write']);
@@ -11,6 +11,7 @@ enum LoginMethodComponentType {
selector: 'cnsl-dialog-add-type',
templateUrl: './dialog-add-type.component.html',
styleUrls: ['./dialog-add-type.component.scss'],
standalone: false,
})
export class DialogAddTypeComponent {
public LoginMethodComponentType: any = LoginMethodComponentType;
@@ -33,6 +33,7 @@ export enum LoginMethodComponentType {
selector: 'cnsl-factor-table',
templateUrl: './factor-table.component.html',
styleUrls: ['./factor-table.component.scss'],
standalone: false,
})
export class FactorTableComponent {
public LoginMethodComponentType: any = LoginMethodComponentType;
@@ -37,6 +37,7 @@ const minValueValidator = (minValue: number) => (control: AbstractControl) => {
selector: 'cnsl-login-policy',
templateUrl: './login-policy.component.html',
styleUrls: ['./login-policy.component.scss'],
standalone: false,
})
export class LoginPolicyComponent implements OnInit, OnDestroy {
public LoginMethodComponentType: any = LoginMethodComponentType;
@@ -13,11 +13,11 @@
<p class="newer-title" *ngIf="newerVersionExists">{{ 'POLICY.LOGIN_TEXTS.NEWERVERSIONEXISTS' | translate }}</p>
<p *ngIf="newerPolicyChangeDate && newerVersionExists">
{{ 'POLICY.LOGIN_TEXTS.CHANGEDATE' | translate }}:
{{ newerPolicyChangeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm:ss' }}
{{ newerPolicyChangeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm:ss' }}
</p>
<p class="cnsl-secondary-text" *ngIf="currentPolicyChangeDate">
{{ 'POLICY.LOGIN_TEXTS.CURRENTDATE' | translate }}:
{{ currentPolicyChangeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm:ss' }}
{{ currentPolicyChangeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm:ss' }}
</p>
</div>
<button [disabled]="!newerVersionExists" color="primary" mat-raised-button (click)="loadData()">
@@ -94,6 +94,7 @@ const REQUESTMAP = {
selector: 'cnsl-login-texts',
templateUrl: './login-texts.component.html',
styleUrls: ['./login-texts.component.scss'],
standalone: false,
})
export class LoginTextsComponent implements OnInit, OnDestroy {
public loading: boolean = false;
@@ -419,6 +419,7 @@ const REQUESTMAP = {
selector: 'cnsl-message-texts',
templateUrl: './message-texts.component.html',
styleUrls: ['./message-texts.component.scss'],
standalone: false,
})
export class MessageTextsComponent implements OnInit, OnDestroy {
public loading: boolean = false;
@@ -22,6 +22,7 @@ import { PolicyComponentServiceType } from '../policy-component-types.enum';
selector: 'cnsl-notification-policy',
templateUrl: './notification-policy.component.html',
styleUrls: ['./notification-policy.component.scss'],
standalone: false,
})
export class NotificationPolicyComponent implements OnInit {
@Input() public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT;
@@ -20,6 +20,7 @@ enum SMSProviderType {
selector: 'cnsl-dialog-add-sms-provider',
templateUrl: './dialog-add-sms-provider.component.html',
styleUrls: ['./dialog-add-sms-provider.component.scss'],
standalone: false,
})
export class DialogAddSMSProviderComponent {
public SMSProviderType: any = SMSProviderType;
@@ -14,6 +14,7 @@ import { DialogAddSMSProviderComponent } from './dialog-add-sms-provider/dialog-
selector: 'cnsl-notification-sms-provider',
templateUrl: './notification-sms-provider.component.html',
styleUrls: ['./notification-sms-provider.component.scss'],
standalone: false,
})
export class NotificationSMSProviderComponent implements OnInit {
@Input() public serviceType!: PolicyComponentServiceType;
@@ -5,6 +5,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
selector: 'cnsl-password-dialog-sms-provider',
templateUrl: './password-dialog-sms-provider.component.html',
styleUrls: ['./password-dialog-sms-provider.component.scss'],
standalone: false,
})
export class PasswordDialogSMSProviderComponent {
public password: string = '';
@@ -2,7 +2,7 @@
@mixin smtp-settings-theme($theme) {
$primary: map-get($theme, primary);
$primary-color: mat.get-color-from-palette($primary, 500);
$primary-color: mat.m2-get-color-from-palette($primary, 500);
$is-dark-theme: map-get($theme, is-dark);
$background: map-get($theme, background);
$foreground: map-get($theme, foreground);
@@ -9,6 +9,7 @@ import { SMTPKnownProviders } from '../../smtp-provider/known-smtp-providers-set
selector: 'cnsl-notification-smtp-provider',
templateUrl: './notification-smtp-provider.component.html',
styleUrls: ['./notification-smtp-provider.component.scss'],
standalone: false,
})
export class NotificationSMTPProviderComponent implements OnInit {
@Input() public serviceType!: PolicyComponentServiceType;
@@ -18,6 +18,7 @@ import { requiredValidator } from '../../form-field/validators/validators';
selector: 'cnsl-oidc-configuration',
templateUrl: './oidc-configuration.component.html',
styleUrls: ['./oidc-configuration.component.scss'],
standalone: false,
})
export class OIDCConfigurationComponent implements OnInit {
public oidcSettings!: OIDCSettings.AsObject;
@@ -10,6 +10,7 @@ type RawValue<T extends FormGroup> = ReturnType<T['getRawValue']>;
selector: 'cnsl-oidc-webkeys-create',
templateUrl: './oidc-webkeys-create.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class OidcWebKeysCreateComponent {
protected readonly keyType: WritableSignal<NonNullable<WebKey['key']['case']>> = signal('rsa');
@@ -8,6 +8,7 @@ import { WebKey } from '@zitadel/proto/zitadel/webkey/v2beta/key_pb';
selector: 'cnsl-oidc-webkeys-inactive-table',
templateUrl: './oidc-webkeys-inactive-table.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class OidcWebKeysInactiveTableComponent {
@Input({ required: true })
@@ -9,6 +9,7 @@ import { State, WebKey } from '@zitadel/proto/zitadel/webkey/v2beta/key_pb';
templateUrl: './oidc-webkeys-table.component.html',
styleUrls: ['./oidc-webkeys-table.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class OidcWebKeysTableComponent {
@Output()
@@ -19,6 +19,7 @@ const CACHE_WARNING_MS = 5 * 60 * 1000; // 5 minutes
selector: 'cnsl-oidc-webkeys',
templateUrl: './oidc-webkeys.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class OidcWebKeysComponent {
protected readonly refresh = new Subject<true>();
@@ -6,6 +6,7 @@ import { CdkCellDef } from '@angular/cdk/table';
@Directive({
selector: '[cnslCellDef]',
providers: [{ provide: CdkCellDef, useExisting: TypeSafeCellDefDirective }],
standalone: false,
})
export class TypeSafeCellDefDirective<T> extends MatCellDef {
@Input({ required: true }) cnslCellDefDataSource!: DataSource<T>;
@@ -20,6 +20,7 @@ import { take } from 'rxjs/operators';
selector: 'cnsl-password-age-policy',
templateUrl: './password-age-policy.component.html',
styleUrls: ['./password-age-policy.component.scss'],
standalone: false,
})
export class PasswordAgePolicyComponent implements OnInit {
@Input() public service!: ManagementService | AdminService;
@@ -15,6 +15,7 @@ import { PolicyComponentServiceType } from '../policy-component-types.enum';
selector: 'cnsl-password-complexity-policy',
templateUrl: './password-complexity-policy.component.html',
styleUrls: ['./password-complexity-policy.component.scss'],
standalone: false,
})
export class PasswordComplexityPolicyComponent implements OnInit {
@Input() public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT;

Some files were not shown because too many files have changed in this diff Show More