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
+79 -15
View File
@@ -15,11 +15,13 @@
"prefix": "cnsl", "prefix": "cnsl",
"architect": { "architect": {
"build": { "build": {
"builder": "@angular-devkit/build-angular:browser", "builder": "@angular/build:application",
"options": { "options": {
"outputPath": "dist/console", "outputPath": {
"browser": "",
"base": "dist/console"
},
"index": "src/index.html", "index": "src/index.html",
"main": "src/main.ts",
"polyfills": ["zone.js"], "polyfills": ["zone.js"],
"tsConfig": "tsconfig.app.json", "tsConfig": "tsconfig.app.json",
"inlineStyleLanguage": "scss", "inlineStyleLanguage": "scss",
@@ -32,7 +34,13 @@
"styles": ["src/styles.scss"], "styles": ["src/styles.scss"],
"scripts": ["./node_modules/tinycolor2/dist/tinycolor-min.js"], "scripts": ["./node_modules/tinycolor2/dist/tinycolor-min.js"],
"stylePreprocessorOptions": { "stylePreprocessorOptions": {
"includePaths": ["node_modules"] "sass": {
"silenceDeprecations": ["import", "mixed-decls"]
},
"includePaths": [
"node_modules",
"."
]
}, },
"allowedCommonJsDependencies": [ "allowedCommonJsDependencies": [
"opentype.js", "opentype.js",
@@ -46,7 +54,8 @@
"file-saver", "file-saver",
"qrcode", "qrcode",
"codemirror" "codemirror"
] ],
"browser": "src/main.ts"
}, },
"configurations": { "configurations": {
"production": { "production": {
@@ -74,9 +83,7 @@
"outputHashing": "all" "outputHashing": "all"
}, },
"development": { "development": {
"buildOptimizer": false,
"optimization": false, "optimization": false,
"vendorChunk": true,
"extractLicenses": false, "extractLicenses": false,
"sourceMap": true, "sourceMap": true,
"namedChunks": true "namedChunks": true
@@ -85,26 +92,56 @@
"defaultConfiguration": "development" "defaultConfiguration": "development"
}, },
"serve": { "serve": {
"builder": "@angular-devkit/build-angular:dev-server", "builder": "@angular/build:dev-server",
"options": {
"prebundle": {
"exclude": [
"google-protobuf",
"google-protobuf/google/protobuf/timestamp_pb.js",
"google-protobuf/google/protobuf/descriptor_pb.js",
"google-protobuf/google/protobuf/struct_pb.js",
"google-protobuf/google/protobuf/duration_pb.js",
"i18n-iso-countries/langs/de.json",
"i18n-iso-countries/langs/en.json",
"i18n-iso-countries/langs/es.json",
"i18n-iso-countries/langs/fr.json",
"i18n-iso-countries/langs/id.json",
"i18n-iso-countries/langs/it.json",
"i18n-iso-countries/langs/ja.json",
"i18n-iso-countries/langs/pl.json",
"i18n-iso-countries/langs/zh.json",
"i18n-iso-countries/langs/bg.json",
"i18n-iso-countries/langs/pt.json",
"i18n-iso-countries/langs/mk.json",
"i18n-iso-countries/langs/ru.json",
"i18n-iso-countries/langs/cs.json",
"i18n-iso-countries/langs/nl.json",
"i18n-iso-countries/langs/sv.json",
"i18n-iso-countries/langs/hu.json",
"i18n-iso-countries/langs/ko.json",
"i18n-iso-countries/langs/ro.json",
"i18n-iso-countries/langs/tr.json"
]
}
},
"configurations": { "configurations": {
"production": { "production": {
"browserTarget": "console:build:production" "buildTarget": "console:build:production"
}, },
"development": { "development": {
"browserTarget": "console:build:development" "buildTarget": "console:build:development"
} }
}, },
"defaultConfiguration": "development" "defaultConfiguration": "development"
}, },
"extract-i18n": { "extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n", "builder": "@angular/build:extract-i18n",
"options": { "options": {
"browserTarget": "console:build" "buildTarget": "console:build"
} }
}, },
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular/build:karma",
"options": { "options": {
"polyfills": ["zone.js", "zone.js/testing"], "polyfills": ["zone.js", "zone.js/testing"],
"tsConfig": "tsconfig.spec.json", "tsConfig": "tsconfig.spec.json",
@@ -125,6 +162,33 @@
}, },
"cli": { "cli": {
"analytics": false, "analytics": false,
"schematicCollections": ["@angular-eslint/schematics"] "schematicCollections": ["@angular-eslint/schematics"],
"packageManager": "pnpm"
},
"schematics": {
"@schematics/angular:component": {
"type": "component"
},
"@schematics/angular:directive": {
"type": "directive"
},
"@schematics/angular:service": {
"type": "service"
},
"@schematics/angular:guard": {
"typeSeparator": "."
},
"@schematics/angular:interceptor": {
"typeSeparator": "."
},
"@schematics/angular:module": {
"typeSeparator": "."
},
"@schematics/angular:pipe": {
"typeSeparator": "."
},
"@schematics/angular:resolver": {
"typeSeparator": "."
}
} }
} }
+28 -28
View File
@@ -15,37 +15,38 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "^16.2.12", "@angular/animations": "^20.3.1",
"@angular/cdk": "^16.2.14", "@angular/cdk": "^20.2.4",
"@angular/common": "^16.2.12", "@angular/common": "^20.3.1",
"@angular/compiler": "^16.2.12", "@angular/compiler": "^20.3.1",
"@angular/core": "^16.2.12", "@angular/core": "^20.3.1",
"@angular/forms": "^16.2.12", "@angular/forms": "^20.3.1",
"@angular/material": "^16.2.14", "@angular/material": "^20.2.4",
"@angular/material-moment-adapter": "^16.2.14", "@angular/material-moment-adapter": "^20.2.4",
"@angular/platform-browser": "^16.2.12", "@angular/platform-browser": "^20.3.1",
"@angular/platform-browser-dynamic": "^16.2.12", "@angular/platform-browser-dynamic": "^20.3.1",
"@angular/router": "^16.2.12", "@angular/router": "^20.3.1",
"@angular/service-worker": "^16.2.12", "@angular/service-worker": "^20.3.1",
"@bufbuild/protobuf": "2.6.3", "@bufbuild/protobuf": "2.6.3",
"@connectrpc/connect": "~2.0.0", "@connectrpc/connect": "~2.0.0",
"@connectrpc/connect-web": "~2.0.0", "@connectrpc/connect-web": "~2.0.0",
"@ctrl/ngx-codemirror": "^6.1.0", "@ctrl/ngx-codemirror": "^6.1.0",
"@fortawesome/angular-fontawesome": "^0.13.0", "@fortawesome/angular-fontawesome": "^3.0.0",
"@fortawesome/fontawesome-svg-core": "^6.7.2", "@fortawesome/fontawesome-svg-core": "^6.7.2",
"@fortawesome/free-brands-svg-icons": "^6.7.2", "@fortawesome/free-brands-svg-icons": "^6.7.2",
"@ng-icons/core": "^25.0.0", "@netlify/build-info": "^10.0.7",
"@ng-icons/heroicons": "^25.0.0", "@ng-icons/core": "^32.1.0",
"@ngx-translate/core": "^15.0.0", "@ng-icons/heroicons": "^32.1.0",
"@ngx-translate/core": "^17.0.0",
"@tanstack/angular-query-experimental": "^5.85.6", "@tanstack/angular-query-experimental": "^5.85.6",
"@zitadel/client": "workspace:*", "@zitadel/client": "workspace:*",
"@zitadel/proto": "workspace:*", "@zitadel/proto": "workspace:*",
"angular-oauth2-oidc": "^15.0.1", "angular-oauth2-oidc": "^20.0.2",
"angularx-qrcode": "^16.0.2", "angularx-qrcode": "^20.0.0",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"codemirror": "^5.65.19", "codemirror": "^5.65.19",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"flag-icons": "^7.3.2", "flag-icons": "^7.5.0",
"google-protobuf": "~3.21.4", "google-protobuf": "~3.21.4",
"grpc-web": "~1.5.0", "grpc-web": "~1.5.0",
"i18n-iso-countries": "^7.14.0", "i18n-iso-countries": "^7.14.0",
@@ -59,20 +60,19 @@
"tinycolor2": "^1.6.0", "tinycolor2": "^1.6.0",
"tslib": "^2.7.0", "tslib": "^2.7.0",
"uuid": "^10.0.0", "uuid": "^10.0.0",
"zone.js": "~0.13.3" "zone.js": "~0.15.1"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "^16.2.2",
"@angular-eslint/builder": "18.3.0", "@angular-eslint/builder": "18.3.0",
"@angular-eslint/eslint-plugin": "18.0.0", "@angular-eslint/eslint-plugin": "18.0.0",
"@angular-eslint/eslint-plugin-template": "18.0.0", "@angular-eslint/eslint-plugin-template": "18.0.0",
"@angular-eslint/schematics": "16.2.0", "@angular-eslint/schematics": "19.8.1",
"@angular-eslint/template-parser": "18.3.0", "@angular-eslint/template-parser": "19.8.1",
"@angular/cli": "^16.2.15", "@angular/build": "^20.3.2",
"@angular/compiler-cli": "^16.2.5", "@angular/cli": "^20.3.2",
"@angular/language-service": "^18.2.4", "@angular/compiler-cli": "^20.3.1",
"@angular/language-service": "^20.3.1",
"@bufbuild/buf": "~1.55.1", "@bufbuild/buf": "~1.55.1",
"@netlify/framework-info": "^9.8.13",
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
"@types/google-protobuf": "~3.15.12", "@types/google-protobuf": "~3.15.12",
"@types/jasmine": "~5.1.4", "@types/jasmine": "~5.1.4",
@@ -95,6 +95,6 @@
"karma-jasmine-html-reporter": "^2.1.0", "karma-jasmine-html-reporter": "^2.1.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"prettier-plugin-organize-imports": "^4.1.0", "prettier-plugin-organize-imports": "^4.1.0",
"typescript": "5.1" "typescript": "5.9.2"
} }
} }
+13 -2
View File
@@ -1,7 +1,17 @@
import { BreakpointObserver } from '@angular/cdk/layout'; import { BreakpointObserver } from '@angular/cdk/layout';
import { OverlayContainer } from '@angular/cdk/overlay'; import { OverlayContainer } from '@angular/cdk/overlay';
import { DOCUMENT, ViewportScroller } from '@angular/common'; import { ViewportScroller } from '@angular/common';
import { Component, DestroyRef, effect, HostBinding, HostListener, Inject, OnDestroy, ViewChild } from '@angular/core'; import {
Component,
DestroyRef,
effect,
HostBinding,
HostListener,
Inject,
OnDestroy,
ViewChild,
DOCUMENT,
} from '@angular/core';
import { MatIconRegistry } from '@angular/material/icon'; import { MatIconRegistry } from '@angular/material/icon';
import { MatDrawer } from '@angular/material/sidenav'; import { MatDrawer } from '@angular/material/sidenav';
import { DomSanitizer } from '@angular/platform-browser'; import { DomSanitizer } from '@angular/platform-browser';
@@ -30,6 +40,7 @@ import { NewAuthService } from './services/new-auth.service';
templateUrl: './app.component.html', templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'], styleUrls: ['./app.component.scss'],
animations: [toolbarAnimation, ...navAnimations, accountCard, routeAnimations, adminLineAnimation], animations: [toolbarAnimation, ...navAnimations, accountCard, routeAnimations, adminLineAnimation],
standalone: false,
}) })
export class AppComponent { export class AppComponent {
@ViewChild('drawer') public drawer!: MatDrawer; @ViewChild('drawer') public drawer!: MatDrawer;
+14 -17
View File
@@ -1,5 +1,5 @@
import { CommonModule, registerLocaleData } from '@angular/common'; import { CommonModule, registerLocaleData } from '@angular/common';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import localeBg from '@angular/common/locales/bg'; import localeBg from '@angular/common/locales/bg';
import localeDe from '@angular/common/locales/de'; import localeDe from '@angular/common/locales/de';
import localeCs from '@angular/common/locales/cs'; import localeCs from '@angular/common/locales/cs';
@@ -20,7 +20,7 @@ import localeHu from '@angular/common/locales/hu';
import localeKo from '@angular/common/locales/ko'; import localeKo from '@angular/common/locales/ko';
import localeRo from '@angular/common/locales/ro'; import localeRo from '@angular/common/locales/ro';
import localeTr from '@angular/common/locales/tr'; import localeTr from '@angular/common/locales/tr';
import { APP_INITIALIZER, NgModule } from '@angular/core'; import { NgModule, inject, provideAppInitializer } from '@angular/core';
import { MatNativeDateModule } from '@angular/material/core'; import { MatNativeDateModule } from '@angular/material/core';
import { MatDialogModule } from '@angular/material/dialog'; import { MatDialogModule } from '@angular/material/dialog';
import { MatIconModule } from '@angular/material/icon'; import { MatIconModule } from '@angular/material/icon';
@@ -147,8 +147,11 @@ const authConfig: AuthConfig = {
@NgModule({ @NgModule({
declarations: [AppComponent], declarations: [AppComponent],
bootstrap: [AppComponent],
exports: [],
imports: [ imports: [
AppRoutingModule, AppRoutingModule,
CommonModule, CommonModule,
BrowserModule, BrowserModule,
HeaderModule, HeaderModule,
@@ -164,7 +167,6 @@ const authConfig: AuthConfig = {
HasRoleModule, HasRoleModule,
InfoOverlayModule, InfoOverlayModule,
BrowserAnimationsModule, BrowserAnimationsModule,
HttpClientModule,
MatIconModule, MatIconModule,
MatTooltipModule, MatTooltipModule,
FooterModule, FooterModule,
@@ -182,18 +184,14 @@ const authConfig: AuthConfig = {
ThemeService, ThemeService,
EnvironmentService, EnvironmentService,
ExhaustedService, ExhaustedService,
{ provideAppInitializer(() => {
provide: APP_INITIALIZER, const initializerFn = appInitializerFn(inject(GrpcService));
useFactory: appInitializerFn, return initializerFn();
multi: true, }),
deps: [GrpcService], provideAppInitializer(() => {
}, const initializerFn = stateHandlerFn(inject(StatehandlerService));
{ return initializerFn();
provide: APP_INITIALIZER, }),
useFactory: stateHandlerFn,
multi: true,
deps: [StatehandlerService],
},
{ {
provide: AuthConfig, provide: AuthConfig,
useValue: authConfig, useValue: authConfig,
@@ -258,9 +256,8 @@ const authConfig: AuthConfig = {
provideNgIconsConfig({ provideNgIconsConfig({
size: '1rem', size: '1rem',
}), }),
provideHttpClient(withInterceptorsFromDi()),
], ],
bootstrap: [AppComponent],
exports: [],
}) })
export class AppModule { export class AppModule {
constructor() {} constructor() {}
@@ -6,7 +6,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
import { CopyToClipboardModule } from 'src/app/directives/copy-to-clipboard/copy-to-clipboard.module'; import { CopyToClipboardModule } from 'src/app/directives/copy-to-clipboard/copy-to-clipboard.module';
@Component({ @Component({
standalone: true,
selector: 'cnsl-copy-row', selector: 'cnsl-copy-row',
templateUrl: './copy-row.component.html', templateUrl: './copy-row.component.html',
styleUrls: ['./copy-row.component.scss'], styleUrls: ['./copy-row.component.scss'],
@@ -11,7 +11,6 @@ import { ReplaySubject } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
@Component({ @Component({
standalone: true,
selector: 'cnsl-feature-toggle', selector: 'cnsl-feature-toggle',
templateUrl: './feature-toggle.component.html', templateUrl: './feature-toggle.component.html',
styleUrls: ['./feature-toggle.component.scss'], styleUrls: ['./feature-toggle.component.scss'],
@@ -12,7 +12,6 @@ import { TranslateModule } from '@ngx-translate/core';
import { MatTooltipModule } from '@angular/material/tooltip'; import { MatTooltipModule } from '@angular/material/tooltip';
@Component({ @Component({
standalone: true,
selector: 'cnsl-login-v2-feature-toggle', selector: 'cnsl-login-v2-feature-toggle',
templateUrl: './login-v2-feature-toggle.component.html', templateUrl: './login-v2-feature-toggle.component.html',
imports: [ imports: [
@@ -65,7 +65,6 @@ export type ToggleStateKeys = keyof ToggleStates;
FeatureToggleComponent, FeatureToggleComponent,
LoginV2FeatureToggleComponent, LoginV2FeatureToggleComponent,
], ],
standalone: true,
selector: 'cnsl-features', selector: 'cnsl-features',
templateUrl: './features.component.html', templateUrl: './features.component.html',
styleUrls: ['./features.component.scss'], styleUrls: ['./features.component.scss'],
@@ -12,7 +12,6 @@ import { Observable, map, of, startWith, switchMap, tap } from 'rxjs';
import { Framework } from '../quickstart/quickstart.component'; import { Framework } from '../quickstart/quickstart.component';
@Component({ @Component({
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'cnsl-framework-autocomplete', selector: 'cnsl-framework-autocomplete',
templateUrl: './framework-autocomplete.component.html', templateUrl: './framework-autocomplete.component.html',
@@ -17,7 +17,6 @@ import { TranslateModule } from '@ngx-translate/core';
selector: 'cnsl-framework-change-dialog', selector: 'cnsl-framework-change-dialog',
templateUrl: './framework-change-dialog.component.html', templateUrl: './framework-change-dialog.component.html',
styleUrls: ['./framework-change-dialog.component.scss'], styleUrls: ['./framework-change-dialog.component.scss'],
standalone: true,
imports: [MatButtonModule, MatDialogModule, TranslateModule, FrameworkAutocompleteComponent], imports: [MatButtonModule, MatDialogModule, TranslateModule, FrameworkAutocompleteComponent],
}) })
export class FrameworkChangeDialogComponent { export class FrameworkChangeDialogComponent {
@@ -10,7 +10,6 @@ import { MatDialog } from '@angular/material/dialog';
import { FrameworkChangeDialogComponent } from './framework-change-dialog.component'; import { FrameworkChangeDialogComponent } from './framework-change-dialog.component';
@Component({ @Component({
standalone: true,
selector: 'cnsl-framework-change', selector: 'cnsl-framework-change',
templateUrl: './framework-change.component.html', templateUrl: './framework-change.component.html',
styleUrls: ['./framework-change.component.scss'], styleUrls: ['./framework-change.component.scss'],
@@ -3,9 +3,11 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
import { RouterModule } from '@angular/router'; import { RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import type { FrameworkName } from '@netlify/framework-info/lib/generated/frameworkNames'; import type { getFramework } from '@netlify/build-info';
import { AddOIDCAppRequest } from 'src/app/proto/generated/zitadel/management_pb'; import { AddOIDCAppRequest } from 'src/app/proto/generated/zitadel/management_pb';
type FrameworkName = Parameters<typeof getFramework>[0];
export type FrameworkDefinition = { export type FrameworkDefinition = {
id?: FrameworkName | string; id?: FrameworkName | string;
title: string; title: string;
@@ -20,7 +22,6 @@ export type Framework = FrameworkDefinition & {
}; };
@Component({ @Component({
standalone: true,
selector: 'cnsl-oidc-app-configuration', selector: 'cnsl-oidc-app-configuration',
templateUrl: './oidc-configuration.component.html', templateUrl: './oidc-configuration.component.html',
styleUrls: ['./oidc-configuration.component.scss'], styleUrls: ['./oidc-configuration.component.scss'],
@@ -4,9 +4,11 @@ import { RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import frameworkDefinition from '../../../../../docs/frameworks.json'; import frameworkDefinition from '../../../../../docs/frameworks.json';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import type { FrameworkName } from '@netlify/framework-info/lib/generated/frameworkNames'; import type { getFramework } from '@netlify/build-info';
import { OIDC_CONFIGURATIONS } from 'src/app/utils/framework'; import { OIDC_CONFIGURATIONS } from 'src/app/utils/framework';
type FrameworkName = Parameters<typeof getFramework>[0];
export type FrameworkDefinition = { export type FrameworkDefinition = {
id?: FrameworkName | string; id?: FrameworkName | string;
title: string; title: string;
@@ -22,7 +24,6 @@ export type Framework = FrameworkDefinition & {
}; };
@Component({ @Component({
standalone: true,
selector: 'cnsl-quickstart', selector: 'cnsl-quickstart',
templateUrl: './quickstart.component.html', templateUrl: './quickstart.component.html',
styleUrls: ['./quickstart.component.scss'], styleUrls: ['./quickstart.component.scss'],
@@ -5,6 +5,7 @@ import { NavigationService } from 'src/app/services/navigation.service';
@Directive({ @Directive({
selector: '[cnslBack]', selector: '[cnslBack]',
standalone: false,
}) })
export class BackDirective { export class BackDirective {
new: Boolean = false; new: Boolean = false;
@@ -2,6 +2,7 @@ import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/c
@Directive({ @Directive({
selector: '[cnslCopyToClipboard]', selector: '[cnslCopyToClipboard]',
standalone: false,
}) })
export class CopyToClipboardDirective { export class CopyToClipboardDirective {
@Input() valueToCopy: string = ''; @Input() valueToCopy: string = '';
@@ -2,6 +2,7 @@ import { Directive, EventEmitter, HostListener, Output } from '@angular/core';
@Directive({ @Directive({
selector: '[cnslDropzone]', selector: '[cnslDropzone]',
standalone: false,
}) })
export class DropzoneDirective { export class DropzoneDirective {
@Output() dropped: EventEmitter<FileList> = new EventEmitter<FileList>(); @Output() dropped: EventEmitter<FileList> = new EventEmitter<FileList>();
@@ -4,6 +4,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Directive({ @Directive({
selector: '[cnslHasRole]', selector: '[cnslHasRole]',
standalone: false,
}) })
export class HasRoleDirective { export class HasRoleDirective {
private hasView: boolean = false; private hasView: boolean = false;
@@ -6,6 +6,7 @@ import { CdkCellDef } from '@angular/cdk/table';
@Directive({ @Directive({
selector: '[cnslCellDef]', selector: '[cnslCellDef]',
providers: [{ provide: CdkCellDef, useExisting: TypeSafeCellDefDirective }], providers: [{ provide: CdkCellDef, useExisting: TypeSafeCellDefDirective }],
standalone: false,
}) })
export class TypeSafeCellDefDirective<T> extends MatCellDef { export class TypeSafeCellDefDirective<T> extends MatCellDef {
@Input({ required: true }) cnslCellDefDataSource!: DataSource<T>; @Input({ required: true }) cnslCellDefDataSource!: DataSource<T>;
@@ -38,6 +38,7 @@ interface V1AndV2Session {
selector: 'cnsl-accounts-card', selector: 'cnsl-accounts-card',
templateUrl: './accounts-card.component.html', templateUrl: './accounts-card.component.html',
styleUrls: ['./accounts-card.component.scss'], styleUrls: ['./accounts-card.component.scss'],
standalone: false,
}) })
export class AccountsCardComponent { export class AccountsCardComponent {
@Input({ required: true }) @Input({ required: true })
@@ -16,6 +16,7 @@ export enum ActionKeysType {
selector: 'cnsl-action-keys', selector: 'cnsl-action-keys',
templateUrl: './action-keys.component.html', templateUrl: './action-keys.component.html',
styleUrls: ['./action-keys.component.scss'], styleUrls: ['./action-keys.component.scss'],
standalone: false,
}) })
export class ActionKeysComponent implements AfterViewInit { export class ActionKeysComponent implements AfterViewInit {
@Input() type: ActionKeysType = ActionKeysType.ADD; @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', templateUrl: './actions-two-actions-table.component.html',
styleUrls: ['./actions-two-actions-table.component.scss'], styleUrls: ['./actions-two-actions-table.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
}) })
export class ActionsTwoActionsTableComponent { export class ActionsTwoActionsTableComponent {
@Output() @Output()
@@ -23,6 +23,7 @@ import { ExecutionFieldName } from '@zitadel/proto/zitadel/action/v2beta/query_p
templateUrl: './actions-two-actions.component.html', templateUrl: './actions-two-actions.component.html',
styleUrls: ['./actions-two-actions.component.scss'], styleUrls: ['./actions-two-actions.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
}) })
export class ActionsTwoActionsComponent { export class ActionsTwoActionsComponent {
protected readonly refresh$ = new Subject<true>(); protected readonly refresh$ = new Subject<true>();
@@ -29,7 +29,6 @@ class Filter implements PipeTransform {
selector: 'cnsl-actions-two-add-action-autocomplete-input', selector: 'cnsl-actions-two-add-action-autocomplete-input',
templateUrl: './actions-two-add-action-autocomplete-input.component.html', templateUrl: './actions-two-add-action-autocomplete-input.component.html',
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
imports: [ imports: [
AsyncPipe, AsyncPipe,
Filter, Filter,
@@ -28,7 +28,6 @@ export type ConditionTypeValue<T extends ConditionType> = Omit<
>; >;
@Component({ @Component({
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'cnsl-actions-two-add-action-condition', selector: 'cnsl-actions-two-add-action-condition',
templateUrl: './actions-two-add-action-condition.component.html', 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', selector: 'cnsl-actions-two-add-action-dialog',
templateUrl: './actions-two-add-action-dialog.component.html', templateUrl: './actions-two-add-action-dialog.component.html',
styleUrls: ['./actions-two-add-action-dialog.component.scss'], styleUrls: ['./actions-two-add-action-dialog.component.scss'],
standalone: true,
imports: [ imports: [
CommonModule, CommonModule,
MatButtonModule, MatButtonModule,
@@ -35,7 +35,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
import { TableActionsModule } from 'src/app/modules/table-actions/table-actions.module'; import { TableActionsModule } from 'src/app/modules/table-actions/table-actions.module';
@Component({ @Component({
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'cnsl-actions-two-add-action-target', selector: 'cnsl-actions-two-add-action-target',
templateUrl: './actions-two-add-action-target.component.html', templateUrl: './actions-two-add-action-target.component.html',
@@ -16,7 +16,6 @@ import { ConditionType } from '../actions-two-add-action-condition/actions-two-a
// } // }
@Component({ @Component({
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'cnsl-actions-two-add-action-type', selector: 'cnsl-actions-two-add-action-type',
templateUrl: './actions-two-add-action-type.component.html', templateUrl: './actions-two-add-action-type.component.html',
@@ -22,7 +22,6 @@ type TargetTypes = ActionTwoAddTargetDialogComponent['targetTypes'][number];
selector: 'cnsl-actions-two-add-target-dialog', selector: 'cnsl-actions-two-add-target-dialog',
templateUrl: './actions-two-add-target-dialog.component.html', templateUrl: './actions-two-add-target-dialog.component.html',
styleUrls: ['./actions-two-add-target-dialog.component.scss'], styleUrls: ['./actions-two-add-target-dialog.component.scss'],
standalone: true,
imports: [ imports: [
CommonModule, CommonModule,
MatButtonModule, MatButtonModule,
@@ -10,6 +10,7 @@ import { toSignal } from '@angular/core/rxjs-interop';
templateUrl: './actions-two-targets-table.component.html', templateUrl: './actions-two-targets-table.component.html',
styleUrls: ['./actions-two-targets-table.component.scss'], styleUrls: ['./actions-two-targets-table.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
}) })
export class ActionsTwoTargetsTableComponent { export class ActionsTwoTargetsTableComponent {
@Output() @Output()
@@ -19,6 +19,7 @@ import { InfoSectionType } from '../../info-section/info-section.component';
templateUrl: './actions-two-targets.component.html', templateUrl: './actions-two-targets.component.html',
styleUrls: ['./actions-two-targets.component.scss'], styleUrls: ['./actions-two-targets.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
}) })
export class ActionsTwoTargetsComponent { export class ActionsTwoTargetsComponent {
protected readonly targets$: Observable<Target[]>; protected readonly targets$: Observable<Target[]>;
@@ -12,6 +12,7 @@ export enum AddKeyDialogType {
selector: 'cnsl-add-key-dialog', selector: 'cnsl-add-key-dialog',
templateUrl: './add-key-dialog.component.html', templateUrl: './add-key-dialog.component.html',
styleUrls: ['./add-key-dialog.component.scss'], styleUrls: ['./add-key-dialog.component.scss'],
standalone: false,
}) })
export class AddKeyDialogComponent { export class AddKeyDialogComponent {
public startDate: Date = new Date(); public startDate: Date = new Date();
@@ -21,6 +21,7 @@ export enum CreationType {
selector: 'cnsl-member-create-dialog', selector: 'cnsl-member-create-dialog',
templateUrl: './member-create-dialog.component.html', templateUrl: './member-create-dialog.component.html',
styleUrls: ['./member-create-dialog.component.scss'], styleUrls: ['./member-create-dialog.component.scss'],
standalone: false,
}) })
export class MemberCreateDialogComponent { export class MemberCreateDialogComponent {
private projectId: string = ''; private projectId: string = '';
@@ -6,6 +6,7 @@ import { getMembershipColor } from 'src/app/utils/color';
selector: 'cnsl-add-member-roles-dialog', selector: 'cnsl-add-member-roles-dialog',
templateUrl: './add-member-roles-dialog.component.html', templateUrl: './add-member-roles-dialog.component.html',
styleUrls: ['./add-member-roles-dialog.component.scss'], styleUrls: ['./add-member-roles-dialog.component.scss'],
standalone: false,
}) })
export class AddMemberRolesDialogComponent { export class AddMemberRolesDialogComponent {
public allRoles: string[] = []; public allRoles: string[] = [];
@@ -6,6 +6,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
selector: 'cnsl-add-token-dialog', selector: 'cnsl-add-token-dialog',
templateUrl: './add-token-dialog.component.html', templateUrl: './add-token-dialog.component.html',
styleUrls: ['./add-token-dialog.component.scss'], styleUrls: ['./add-token-dialog.component.scss'],
standalone: false,
}) })
export class AddTokenDialogComponent { export class AddTokenDialogComponent {
public startDate: Date = new Date(); public startDate: Date = new Date();
@@ -5,6 +5,7 @@ import { OIDCAppType } from 'src/app/proto/generated/zitadel/app_pb';
selector: 'cnsl-app-card', selector: 'cnsl-app-card',
templateUrl: './app-card.component.html', templateUrl: './app-card.component.html',
styleUrls: ['./app-card.component.scss'], styleUrls: ['./app-card.component.scss'],
standalone: false,
}) })
export class AppCardComponent { export class AppCardComponent {
@Input() public outline: boolean = false; @Input() public outline: boolean = false;
@@ -25,6 +25,7 @@ export interface RadioItemAuthType {
selector: 'cnsl-auth-method-radio', selector: 'cnsl-auth-method-radio',
templateUrl: './app-auth-method-radio.component.html', templateUrl: './app-auth-method-radio.component.html',
styleUrls: ['./app-auth-method-radio.component.scss'], styleUrls: ['./app-auth-method-radio.component.scss'],
standalone: false,
}) })
export class AppAuthMethodRadioComponent { export class AppAuthMethodRadioComponent {
@Input() current: string = ''; @Input() current: string = '';
@@ -5,6 +5,7 @@ import { RadioItemAppType, WEB_TYPE } from 'src/app/pages/projects/apps/authtype
selector: 'cnsl-type-radio', selector: 'cnsl-type-radio',
templateUrl: './app-type-radio.component.html', templateUrl: './app-type-radio.component.html',
styleUrls: ['./app-type-radio.component.scss'], styleUrls: ['./app-type-radio.component.scss'],
standalone: false,
}) })
export class AppTypeRadioComponent { export class AppTypeRadioComponent {
@Input() selected: RadioItemAppType = WEB_TYPE; @Input() selected: RadioItemAppType = WEB_TYPE;
@@ -6,6 +6,7 @@ import { Color, getColorHash } from 'src/app/utils/color';
selector: 'cnsl-avatar', selector: 'cnsl-avatar',
templateUrl: './avatar.component.html', templateUrl: './avatar.component.html',
styleUrls: ['./avatar.component.scss'], styleUrls: ['./avatar.component.scss'],
standalone: false,
}) })
export class AvatarComponent implements OnInit { export class AvatarComponent implements OnInit {
@Input() name: string = ''; @Input() name: string = '';
@@ -5,6 +5,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
templateUrl: './card.component.html', templateUrl: './card.component.html',
styleUrls: ['./card.component.scss'], styleUrls: ['./card.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
}) })
export class CardComponent { export class CardComponent {
@Input() public title: string = ''; @Input() public title: string = '';
@@ -5,7 +5,7 @@
<div class="scroll-container"> <div class="scroll-container">
<li class="item" *ngFor="let hist of data | async; index as histindex"> <li class="item" *ngFor="let hist of data | async; index as histindex">
<span *ngIf="hist.values[0].dates[0]" class="date"> <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> </span>
<div class="item" *ngFor="let dayelement of hist.values; index as i"> <div class="item" *ngFor="let dayelement of hist.values; index as i">
<div class="row"> <div class="row">
@@ -28,7 +28,7 @@
<span class="msg">{{ action.localizedMessage }}</span> <span class="msg">{{ action.localizedMessage }}</span>
<span <span
class="block" 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 >{{ dayelement.dates[j] | timestampToDate | localizedDate: 'HH:mm' }}</span
> >
</div> </div>
@@ -51,6 +51,7 @@ type ListChanges =
selector: 'cnsl-changes', selector: 'cnsl-changes',
templateUrl: './changes.component.html', templateUrl: './changes.component.html',
styleUrls: ['./changes.component.scss'], styleUrls: ['./changes.component.scss'],
standalone: false,
}) })
export class ChangesComponent implements OnInit { export class ChangesComponent implements OnInit {
@Input({ required: true }) public changeType!: ChangeType; @Input({ required: true }) public changeType!: ChangeType;
@@ -19,6 +19,7 @@ import { PageEvent, PaginatorComponent } from '../paginator/paginator.component'
selector: 'cnsl-client-keys', selector: 'cnsl-client-keys',
templateUrl: './client-keys.component.html', templateUrl: './client-keys.component.html',
styleUrls: ['./client-keys.component.scss'], styleUrls: ['./client-keys.component.scss'],
standalone: false,
}) })
export class ClientKeysComponent implements OnInit { export class ClientKeysComponent implements OnInit {
@Input() projectId!: string; @Input() projectId!: string;
@@ -25,6 +25,7 @@ import { Type } from 'src/app/proto/generated/zitadel/user_pb';
]), ]),
]), ]),
], ],
standalone: false,
}) })
export class ContributorsComponent { export class ContributorsComponent {
@Input() title: string = ''; @Input() title: string = '';
@@ -4,6 +4,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
selector: 'cnsl-create-layout', selector: 'cnsl-create-layout',
templateUrl: './create-layout.component.html', templateUrl: './create-layout.component.html',
styleUrls: ['./create-layout.component.scss'], styleUrls: ['./create-layout.component.scss'],
standalone: false,
}) })
export class CreateLayoutComponent { export class CreateLayoutComponent {
@Input() currentCreateStep: number = 1; @Input() currentCreateStep: number = 1;
@@ -4,6 +4,7 @@ import { Component, Input } from '@angular/core';
selector: 'cnsl-detail-layout', selector: 'cnsl-detail-layout',
templateUrl: './detail-layout.component.html', templateUrl: './detail-layout.component.html',
styleUrls: ['./detail-layout.component.scss'], styleUrls: ['./detail-layout.component.scss'],
standalone: false,
}) })
export class DetailLayoutComponent { export class DetailLayoutComponent {
@Input() hasBackButton: boolean = true; @Input() hasBackButton: boolean = true;
@@ -7,6 +7,7 @@ import { Event } from 'src/app/proto/generated/zitadel/event_pb';
selector: 'cnsl-display-json-dialog', selector: 'cnsl-display-json-dialog',
templateUrl: './display-json-dialog.component.html', templateUrl: './display-json-dialog.component.html',
styleUrls: ['./display-json-dialog.component.scss'], styleUrls: ['./display-json-dialog.component.scss'],
standalone: false,
}) })
export class DisplayJsonDialogComponent { export class DisplayJsonDialogComponent {
public event?: Event; public event?: Event;
@@ -5,6 +5,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
selector: 'cnsl-add-domain-dialog', selector: 'cnsl-add-domain-dialog',
templateUrl: './add-domain-dialog.component.html', templateUrl: './add-domain-dialog.component.html',
styleUrls: ['./add-domain-dialog.component.scss'], styleUrls: ['./add-domain-dialog.component.scss'],
standalone: false,
}) })
export class AddDomainDialogComponent { export class AddDomainDialogComponent {
public newdomain: string = ''; public newdomain: string = '';
@@ -11,6 +11,7 @@ import { ToastService } from 'src/app/services/toast.service';
selector: 'cnsl-domain-verification', selector: 'cnsl-domain-verification',
templateUrl: './domain-verification.component.html', templateUrl: './domain-verification.component.html',
styleUrls: ['./domain-verification.component.scss'], styleUrls: ['./domain-verification.component.scss'],
standalone: false,
}) })
export class DomainVerificationComponent { export class DomainVerificationComponent {
public domain?: Domain.AsObject; public domain?: Domain.AsObject;
@@ -14,6 +14,7 @@ import { DomainVerificationComponent } from './domain-verification/domain-verifi
selector: 'cnsl-domains', selector: 'cnsl-domains',
templateUrl: './domains.component.html', templateUrl: './domains.component.html',
styleUrls: ['./domains.component.scss'], styleUrls: ['./domains.component.scss'],
standalone: false,
}) })
export class DomainsComponent implements OnInit { export class DomainsComponent implements OnInit {
public domains: Domain.AsObject[] = []; public domains: Domain.AsObject[] = [];
@@ -9,6 +9,7 @@ import { InfoSectionType } from '../info-section/info-section.component';
selector: 'cnsl-edit-text', selector: 'cnsl-edit-text',
templateUrl: './edit-text.component.html', templateUrl: './edit-text.component.html',
styleUrls: ['./edit-text.component.scss'], styleUrls: ['./edit-text.component.scss'],
standalone: false,
}) })
export class EditTextComponent implements OnInit, OnDestroy { export class EditTextComponent implements OnInit, OnDestroy {
@Input() label: string = ''; @Input() label: string = '';
@@ -31,6 +31,7 @@ type LoadRequest = {
selector: 'cnsl-events', selector: 'cnsl-events',
templateUrl: './events.component.html', templateUrl: './events.component.html',
styleUrls: ['./events.component.scss'], styleUrls: ['./events.component.scss'],
standalone: false,
}) })
export class EventsComponent implements OnDestroy { export class EventsComponent implements OnDestroy {
public INITPAGESIZE = 20; public INITPAGESIZE = 20;
@@ -12,6 +12,7 @@ import { ToastService } from 'src/app/services/toast.service';
selector: 'cnsl-iam-failed-events', selector: 'cnsl-iam-failed-events',
templateUrl: './failed-events.component.html', templateUrl: './failed-events.component.html',
styleUrls: ['./failed-events.component.scss'], styleUrls: ['./failed-events.component.scss'],
standalone: false,
}) })
export class FailedEventsComponent implements AfterViewInit { export class FailedEventsComponent implements AfterViewInit {
@ViewChild(MatPaginator) public eventPaginator!: MatPaginator; @ViewChild(MatPaginator) public eventPaginator!: MatPaginator;
@@ -34,6 +34,7 @@ function dateToTs(date: Date): Timestamp {
selector: 'cnsl-filter-events', selector: 'cnsl-filter-events',
templateUrl: './filter-events.component.html', templateUrl: './filter-events.component.html',
styleUrls: ['./filter-events.component.scss'], styleUrls: ['./filter-events.component.scss'],
standalone: false,
}) })
export class FilterEventsComponent implements OnInit { export class FilterEventsComponent implements OnInit {
// Make enum available in template // Make enum available in template
@@ -26,6 +26,7 @@ enum SubQuery {
selector: 'cnsl-filter-org', selector: 'cnsl-filter-org',
templateUrl: './filter-org.component.html', templateUrl: './filter-org.component.html',
styleUrls: ['./filter-org.component.scss'], styleUrls: ['./filter-org.component.scss'],
standalone: false,
}) })
export class FilterOrgComponent extends FilterComponent implements OnInit { export class FilterOrgComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery; public SubQuery: any = SubQuery;
@@ -17,6 +17,7 @@ enum SubQuery {
selector: 'cnsl-filter-project', selector: 'cnsl-filter-project',
templateUrl: './filter-project.component.html', templateUrl: './filter-project.component.html',
styleUrls: ['./filter-project.component.scss'], styleUrls: ['./filter-project.component.scss'],
standalone: false,
}) })
export class FilterProjectComponent extends FilterComponent implements OnInit { export class FilterProjectComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery; public SubQuery: any = SubQuery;
@@ -24,6 +24,7 @@ enum SubQuery {
selector: 'cnsl-filter-user-grants', selector: 'cnsl-filter-user-grants',
templateUrl: './filter-user-grants.component.html', templateUrl: './filter-user-grants.component.html',
styleUrls: ['./filter-user-grants.component.scss'], styleUrls: ['./filter-user-grants.component.scss'],
standalone: false,
}) })
export class FilterUserGrantsComponent extends FilterComponent implements OnInit { export class FilterUserGrantsComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery; public SubQuery: any = SubQuery;
@@ -26,6 +26,7 @@ enum SubQuery {
selector: 'cnsl-filter-user', selector: 'cnsl-filter-user',
templateUrl: './filter-user.component.html', templateUrl: './filter-user.component.html',
styleUrls: ['./filter-user.component.scss'], styleUrls: ['./filter-user.component.scss'],
standalone: false,
}) })
export class FilterUserComponent extends FilterComponent implements OnInit { export class FilterUserComponent extends FilterComponent implements OnInit {
public SubQuery: any = SubQuery; public SubQuery: any = SubQuery;
@@ -22,6 +22,7 @@ type FilterSearchQueryAsObject =
selector: 'cnsl-filter', selector: 'cnsl-filter',
templateUrl: './filter.component.html', templateUrl: './filter.component.html',
styleUrls: ['./filter.component.scss'], styleUrls: ['./filter.component.scss'],
standalone: false,
}) })
export class FilterComponent { export class FilterComponent {
@Output() public filterChanged: EventEmitter<FilterSearchQuery[]> = new EventEmitter(); @Output() public filterChanged: EventEmitter<FilterSearchQuery[]> = new EventEmitter();
@@ -7,6 +7,7 @@ import { faXTwitter } from '@fortawesome/free-brands-svg-icons';
selector: 'cnsl-footer', selector: 'cnsl-footer',
templateUrl: './footer.component.html', templateUrl: './footer.component.html',
styleUrls: ['./footer.component.scss'], styleUrls: ['./footer.component.scss'],
standalone: false,
}) })
export class FooterComponent { export class FooterComponent {
public faXTwitter = faXTwitter; public faXTwitter = faXTwitter;
@@ -12,6 +12,7 @@ export const CNSL_ERROR = new InjectionToken<CnslErrorDirective>('CnslError');
'[attr.id]': 'id', '[attr.id]': 'id',
}, },
providers: [{ provide: CNSL_ERROR, useExisting: CnslErrorDirective }], providers: [{ provide: CNSL_ERROR, useExisting: CnslErrorDirective }],
standalone: false,
}) })
export class CnslErrorDirective { export class CnslErrorDirective {
@Input() id: string = `cnsl-error-${nextUniqueId++}`; @Input() id: string = `cnsl-error-${nextUniqueId++}`;
@@ -60,6 +60,7 @@ interface ValidationError {
encapsulation: ViewEncapsulation.None, encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
animations: [cnslFormFieldAnimations.transitionMessages], animations: [cnslFormFieldAnimations.transitionMessages],
standalone: false,
}) })
export class CnslFormFieldComponent extends CnslFormFieldBase implements OnDestroy, AfterContentInit, AfterViewInit { export class CnslFormFieldComponent extends CnslFormFieldBase implements OnDestroy, AfterContentInit, AfterViewInit {
focused: boolean = false; focused: boolean = false;
@@ -13,6 +13,7 @@ import { Organization } from '@zitadel/proto/zitadel/org/v2/org_pb';
selector: 'cnsl-header', selector: 'cnsl-header',
templateUrl: './header.component.html', templateUrl: './header.component.html',
styleUrls: ['./header.component.scss'], styleUrls: ['./header.component.scss'],
standalone: false,
}) })
export class HeaderComponent { export class HeaderComponent {
@Input() public isDarkTheme: boolean = true; @Input() public isDarkTheme: boolean = true;
@@ -12,6 +12,7 @@ import { Breadcrumb, BreadcrumbService, BreadcrumbType } from 'src/app/services/
selector: 'cnsl-iam-views', selector: 'cnsl-iam-views',
templateUrl: './iam-views.component.html', templateUrl: './iam-views.component.html',
styleUrls: ['./iam-views.component.scss'], styleUrls: ['./iam-views.component.scss'],
standalone: false,
}) })
export class IamViewsComponent implements AfterViewInit { export class IamViewsComponent implements AfterViewInit {
@ViewChild(MatSort) sort!: MatSort; @ViewChild(MatSort) sort!: MatSort;
@@ -43,6 +43,7 @@ import { first } from 'rxjs/operators';
selector: 'cnsl-idp-table', selector: 'cnsl-idp-table',
templateUrl: './idp-table.component.html', templateUrl: './idp-table.component.html',
styleUrls: ['./idp-table.component.scss'], styleUrls: ['./idp-table.component.scss'],
standalone: false,
}) })
export class IdpTableComponent implements OnInit, OnDestroy { export class IdpTableComponent implements OnInit, OnDestroy {
@Input() public serviceType!: PolicyComponentServiceType; @Input() public serviceType!: PolicyComponentServiceType;
@@ -7,6 +7,7 @@ import { InfoSectionType } from '../info-section/info-section.component';
selector: 'cnsl-info-dialog', selector: 'cnsl-info-dialog',
templateUrl: './info-dialog.component.html', templateUrl: './info-dialog.component.html',
styleUrls: ['./info-dialog.component.scss'], styleUrls: ['./info-dialog.component.scss'],
standalone: false,
}) })
export class InfoDialogComponent { export class InfoDialogComponent {
public confirm: string = ''; public confirm: string = '';
@@ -7,6 +7,7 @@ export const OVERLAY_DATA = new InjectionToken<any>('OVERLAY_DATA');
selector: 'cnsl-info-overlay', selector: 'cnsl-info-overlay',
templateUrl: './info-overlay.component.html', templateUrl: './info-overlay.component.html',
styleUrls: ['./info-overlay.component.scss'], styleUrls: ['./info-overlay.component.scss'],
standalone: false,
}) })
export class InfoOverlayComponent { export class InfoOverlayComponent {
constructor( constructor(
@@ -21,14 +21,14 @@
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'USER.DETAILS.DATECREATED' | translate }}</p> <p class="info-row-title">{{ 'USER.DETAILS.DATECREATED' | translate }}</p>
<p *ngIf="creationDate" class="info-row-desc"> <p *ngIf="creationDate" class="info-row-desc">
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }} {{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p> </p>
</div> </div>
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'USER.DETAILS.DATECHANGED' | translate }}</p> <p class="info-row-title">{{ 'USER.DETAILS.DATECHANGED' | translate }}</p>
<p *ngIf="changeDate" class="info-row-desc"> <p *ngIf="changeDate" class="info-row-desc">
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }} {{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
</p> </p>
</div> </div>
@@ -97,14 +97,14 @@
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'ORG.PAGES.CREATIONDATE' | translate }}</p> <p class="info-row-title">{{ 'ORG.PAGES.CREATIONDATE' | translate }}</p>
<p *ngIf="instance?.details?.creationDate as creationDate" class="info-row-desc"> <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> </p>
</div> </div>
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'ORG.PAGES.DATECHANGED' | translate }}</p> <p class="info-row-title">{{ 'ORG.PAGES.DATECHANGED' | translate }}</p>
<p *ngIf="instance?.details?.changeDate as changeDate" class="info-row-desc"> <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> </p>
</div> </div>
</div> </div>
@@ -144,14 +144,14 @@
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'ORG.PAGES.CREATIONDATE' | translate }}</p> <p class="info-row-title">{{ 'ORG.PAGES.CREATIONDATE' | translate }}</p>
<p *ngIf="org?.details?.creationDate as creationDate" class="info-row-desc"> <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> </p>
</div> </div>
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'ORG.PAGES.DATECHANGED' | translate }}</p> <p class="info-row-title">{{ 'ORG.PAGES.DATECHANGED' | translate }}</p>
<p *ngIf="org?.details?.changeDate as changeDate" class="info-row-desc"> <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> </p>
</div> </div>
</div> </div>
@@ -179,14 +179,14 @@
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'PROJECT.PAGES.CREATEDON' | translate }}</p> <p class="info-row-title">{{ 'PROJECT.PAGES.CREATEDON' | translate }}</p>
<p *ngIf="project?.details?.creationDate as creationDate" class="info-row-desc"> <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> </p>
</div> </div>
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'PROJECT.PAGES.LASTMODIFIED' | translate }}</p> <p class="info-row-title">{{ 'PROJECT.PAGES.LASTMODIFIED' | translate }}</p>
<p *ngIf="project?.details?.changeDate as changeDate" class="info-row-desc"> <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> </p>
</div> </div>
</div> </div>
@@ -219,14 +219,14 @@
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'PROJECT.PAGES.CREATEDON' | translate }}</p> <p class="info-row-title">{{ 'PROJECT.PAGES.CREATEDON' | translate }}</p>
<p *ngIf="grantedProject?.details?.creationDate as creationDate" class="info-row-desc"> <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> </p>
</div> </div>
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'PROJECT.PAGES.LASTMODIFIED' | translate }}</p> <p class="info-row-title">{{ 'PROJECT.PAGES.LASTMODIFIED' | translate }}</p>
<p *ngIf="grantedProject?.details?.changeDate as changeDate" class="info-row-desc"> <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> </p>
</div> </div>
</div> </div>
@@ -265,14 +265,14 @@
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'APP.PAGES.DATECREATED' | translate }}</p> <p class="info-row-title">{{ 'APP.PAGES.DATECREATED' | translate }}</p>
<p *ngIf="app?.details?.creationDate as creationDate" class="info-row-desc"> <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> </p>
</div> </div>
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'APP.PAGES.DATECHANGED' | translate }}</p> <p class="info-row-title">{{ 'APP.PAGES.DATECHANGED' | translate }}</p>
<p *ngIf="app?.details?.changeDate as changeDate" class="info-row-desc"> <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> </p>
</div> </div>
@@ -318,14 +318,14 @@
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'IDP.DETAIL.DATECREATED' | translate }}</p> <p class="info-row-title">{{ 'IDP.DETAIL.DATECREATED' | translate }}</p>
<p class="info-row-desc" *ngIf="idp?.details?.creationDate as creationDate"> <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> </p>
</div> </div>
<div class="info-wrapper"> <div class="info-wrapper">
<p class="info-row-title">{{ 'IDP.DETAIL.DATECHANGED' | translate }}</p> <p class="info-row-title">{{ 'IDP.DETAIL.DATECHANGED' | translate }}</p>
<p class="info-row-desc" *ngIf="idp?.details?.changeDate as changeDate"> <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> </p>
</div> </div>
@@ -15,6 +15,7 @@ import { Organization as OrgV2 } from '@zitadel/proto/zitadel/org/v2/org_pb';
selector: 'cnsl-info-row', selector: 'cnsl-info-row',
templateUrl: './info-row.component.html', templateUrl: './info-row.component.html',
styleUrls: ['./info-row.component.scss'], styleUrls: ['./info-row.component.scss'],
standalone: false,
}) })
export class InfoRowComponent { export class InfoRowComponent {
@Input() public user?: User.AsObject | UserV2 | UserV1; @Input() public user?: User.AsObject | UserV2 | UserV1;
@@ -11,6 +11,7 @@ export enum InfoSectionType {
templateUrl: './info-section.component.html', templateUrl: './info-section.component.html',
styleUrls: ['./info-section.component.scss'], styleUrls: ['./info-section.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
}) })
export class InfoSectionComponent { export class InfoSectionComponent {
@Input() type: InfoSectionType = InfoSectionType.INFO; @Input() type: InfoSectionType = InfoSectionType.INFO;
@@ -12,6 +12,7 @@ import { By } from '@angular/platform-browser';
@Component({ @Component({
template: `<input appInputDirective />`, template: `<input appInputDirective />`,
standalone: false,
}) })
class TestHostComponent {} class TestHostComponent {}
@@ -16,7 +16,7 @@ import {
Self, Self,
} from '@angular/core'; } from '@angular/core';
import { FormGroupDirective, NgControl, NgForm } from '@angular/forms'; 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 { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';
import { getMatInputUnsupportedTypeError, MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input'; import { getMatInputUnsupportedTypeError, MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@@ -26,24 +26,6 @@ const MAT_INPUT_INVALID_TYPES = ['button', 'checkbox', 'file', 'hidden', 'image'
let nextUniqueId = 0; 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 that allows a native input to work inside a `MatFormField`. */
@Directive({ @Directive({
selector: `input[cnslInput], textarea[cnslInput], select[cnslNativeControl]`, selector: `input[cnslInput], textarea[cnslInput], select[cnslNativeControl]`,
@@ -68,11 +50,9 @@ const _MatInputBase = mixinErrorState(
'[attr.aria-required]': 'required.toString()', '[attr.aria-required]': 'required.toString()',
}, },
providers: [{ provide: MatFormFieldControl, useExisting: InputDirective }], providers: [{ provide: MatFormFieldControl, useExisting: InputDirective }],
standalone: false,
}) })
export class InputDirective export class InputDirective implements MatFormFieldControl<any>, OnChanges, OnDestroy, AfterViewInit, DoCheck {
extends _MatInputBase
implements MatFormFieldControl<any>, OnChanges, CanUpdateErrorState, OnDestroy, AfterViewInit, DoCheck, CanUpdateErrorState
{
protected _uid: string = `cnsl-input-${nextUniqueId++}`; protected _uid: string = `cnsl-input-${nextUniqueId++}`;
protected _previousNativeValue: any; protected _previousNativeValue: any;
private _inputValueAccessor: { value: any }; private _inputValueAccessor: { value: any };
@@ -97,7 +77,14 @@ export class InputDirective
* Implemented as part of MatFormFieldControl. * Implemented as part of MatFormFieldControl.
* @docs-private * @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. * Implemented as part of MatFormFieldControl.
@@ -184,9 +171,6 @@ export class InputDirective
} }
protected _type: string = 'text'; protected _type: string = 'text';
/** An object used to control when error messages are shown. */
@Input() override errorStateMatcher!: ErrorStateMatcher;
/** /**
* Implemented as part of MatFormFieldControl. * Implemented as part of MatFormFieldControl.
* @docs-private * @docs-private
@@ -223,24 +207,40 @@ export class InputDirective
getSupportedInputTypes().has(t), getSupportedInputTypes().has(t),
); );
@Input()
get errorStateMatcher() {
return this._errorStateTracker.matcher;
}
set errorStateMatcher(value: ErrorStateMatcher) {
this._errorStateTracker.matcher = value;
}
private _errorStateTracker: _ErrorStateTracker;
constructor( constructor(
protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>, protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,
protected _platform: Platform, protected _platform: Platform,
/** @docs-private */ /** @docs-private */
@Optional() @Self() public override ngControl: NgControl, @Optional() @Self() public ngControl: NgControl,
@Optional() _parentForm: NgForm, @Optional() parentForm: NgForm,
@Optional() _parentFormGroup: FormGroupDirective, @Optional() parentFormGroup: FormGroupDirective,
_defaultErrorStateMatcher: ErrorStateMatcher, defaultErrorStateMatcher: ErrorStateMatcher,
@Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any, @Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any,
private _autofillMonitor: AutofillMonitor, private _autofillMonitor: AutofillMonitor,
ngZone: NgZone, ngZone: NgZone,
@Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField, @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField,
) { ) {
super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);
const element = this._elementRef.nativeElement; const element = this._elementRef.nativeElement;
const nodeName = element.nodeName.toLowerCase(); 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 // If no input value accessor was explicitly specified, use the element as the input value
// accessor. // accessor.
this._inputValueAccessor = inputValueAccessor || element; this._inputValueAccessor = inputValueAccessor || element;
@@ -317,6 +317,10 @@ export class InputDirective
this._dirtyCheckPlaceholder(); this._dirtyCheckPlaceholder();
} }
updateErrorState() {
this._errorStateTracker.updateErrorState();
}
/** Focuses the input. */ /** Focuses the input. */
focus(options?: FocusOptions): void { focus(options?: FocusOptions): void {
this._elementRef.nativeElement.focus(options); this._elementRef.nativeElement.focus(options);
@@ -7,6 +7,7 @@ import { KeyboardShortcut, ORGSHORTCUTS, SIDEWIDESHORTCUTS } from 'src/app/servi
selector: 'cnsl-keyboard-shortcuts', selector: 'cnsl-keyboard-shortcuts',
templateUrl: './keyboard-shortcuts.component.html', templateUrl: './keyboard-shortcuts.component.html',
styleUrls: ['./keyboard-shortcuts.component.scss'], styleUrls: ['./keyboard-shortcuts.component.scss'],
standalone: false,
}) })
export class KeyboardShortcutsComponent { export class KeyboardShortcutsComponent {
public orgShortcuts: KeyboardShortcut[] = ORGSHORTCUTS; public orgShortcuts: KeyboardShortcut[] = ORGSHORTCUTS;
@@ -4,6 +4,7 @@ import { Component } from '@angular/core';
selector: 'cnsl-label', selector: 'cnsl-label',
templateUrl: './label.component.html', templateUrl: './label.component.html',
styleUrls: ['./label.component.scss'], styleUrls: ['./label.component.scss'],
standalone: false,
}) })
export class LabelComponent { export class LabelComponent {
constructor() {} constructor() {}
@@ -20,6 +20,7 @@ import { WarnDialogComponent } from '../warn-dialog/warn-dialog.component';
selector: 'cnsl-machine-keys', selector: 'cnsl-machine-keys',
templateUrl: './machine-keys.component.html', templateUrl: './machine-keys.component.html',
styleUrls: ['./machine-keys.component.scss'], styleUrls: ['./machine-keys.component.scss'],
standalone: false,
}) })
export class MachineKeysComponent implements OnInit { export class MachineKeysComponent implements OnInit {
@Input() userId?: string; @Input() userId?: string;
@@ -26,6 +26,7 @@ type MemberDatasource =
selector: 'cnsl-members-table', selector: 'cnsl-members-table',
templateUrl: './members-table.component.html', templateUrl: './members-table.component.html',
styleUrls: ['./members-table.component.scss'], styleUrls: ['./members-table.component.scss'],
standalone: false,
}) })
export class MembersTableComponent implements OnInit, OnDestroy { export class MembersTableComponent implements OnInit, OnDestroy {
public INITIALPAGESIZE: number = 25; public INITIALPAGESIZE: number = 25;
@@ -22,6 +22,7 @@ import { Organization } from '@zitadel/proto/zitadel/org/v2/org_pb';
selector: 'cnsl-memberships-table', selector: 'cnsl-memberships-table',
templateUrl: './memberships-table.component.html', templateUrl: './memberships-table.component.html',
styleUrls: ['./memberships-table.component.scss'], styleUrls: ['./memberships-table.component.scss'],
standalone: false,
}) })
export class MembershipsTableComponent implements OnInit, OnDestroy { export class MembershipsTableComponent implements OnInit, OnDestroy {
public INITIALPAGESIZE: number = 25; public INITIALPAGESIZE: number = 25;
@@ -7,6 +7,7 @@ import { map } from 'rxjs/operators';
selector: 'cnsl-meta-layout', selector: 'cnsl-meta-layout',
templateUrl: './meta-layout.component.html', templateUrl: './meta-layout.component.html',
styleUrls: ['./meta-layout.component.scss'], styleUrls: ['./meta-layout.component.scss'],
standalone: false,
}) })
export class MetaLayoutComponent { export class MetaLayoutComponent {
constructor(private breakpointObserver: BreakpointObserver) { constructor(private breakpointObserver: BreakpointObserver) {
@@ -15,6 +15,7 @@ export type MetadataDialogData = {
selector: 'cnsl-metadata-dialog', selector: 'cnsl-metadata-dialog',
templateUrl: './metadata-dialog.component.html', templateUrl: './metadata-dialog.component.html',
styleUrls: ['./metadata-dialog.component.scss'], styleUrls: ['./metadata-dialog.component.scss'],
standalone: false,
}) })
export class MetadataDialogComponent { export class MetadataDialogComponent {
public metadata: { key: string; value: string }[] = []; public metadata: { key: string; value: string }[] = [];
@@ -15,6 +15,7 @@ type StringMetadata = {
selector: 'cnsl-metadata', selector: 'cnsl-metadata',
templateUrl: './metadata.component.html', templateUrl: './metadata.component.html',
styleUrls: ['./metadata.component.scss'], styleUrls: ['./metadata.component.scss'],
standalone: false,
}) })
export class MetadataComponent implements OnInit { export class MetadataComponent implements OnInit {
@Input({ required: true }) public set metadata(metadata: (Metadata.AsObject | MetadataV2)[]) { @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', selector: 'cnsl-name-dialog',
templateUrl: './name-dialog.component.html', templateUrl: './name-dialog.component.html',
styleUrls: ['./name-dialog.component.scss'], styleUrls: ['./name-dialog.component.scss'],
standalone: false,
}) })
export class NameDialogComponent { export class NameDialogComponent {
public name: string = ''; public name: string = '';
@@ -4,6 +4,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
selector: 'cnsl-nav-toggle', selector: 'cnsl-nav-toggle',
templateUrl: './nav-toggle.component.html', templateUrl: './nav-toggle.component.html',
styleUrls: ['./nav-toggle.component.scss'], styleUrls: ['./nav-toggle.component.scss'],
standalone: false,
}) })
export class NavToggleComponent { export class NavToggleComponent {
@Input() public label: string = ''; @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 { export class NavComponent implements OnDestroy {
@ViewChild('input', { static: false }) input!: ElementRef; @ViewChild('input', { static: false }) input!: ElementRef;
@@ -7,7 +7,6 @@ import { MatRippleModule } from '@angular/material/core';
selector: 'cnsl-header-button', selector: 'cnsl-header-button',
templateUrl: './header-button.component.html', templateUrl: './header-button.component.html',
styleUrls: ['./header-button.component.scss'], styleUrls: ['./header-button.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [NgIconComponent, MatRippleModule], imports: [NgIconComponent, MatRippleModule],
providers: [provideIcons({ heroChevronUpDown })], providers: [provideIcons({ heroChevronUpDown })],
@@ -23,7 +23,6 @@ import { ReplaySubject } from 'rxjs';
selector: 'cnsl-header-dropdown', selector: 'cnsl-header-dropdown',
templateUrl: './header-dropdown.component.html', templateUrl: './header-dropdown.component.html',
styleUrls: ['./header-dropdown.component.scss'], styleUrls: ['./header-dropdown.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [CdkConnectedOverlay, NgIf, AsyncPipe], 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 // to make sure the dropdown will be rendered in the correct position
runInInjectionContext(this.injector, () => { runInInjectionContext(this.injector, () => {
const isOpen = toSignal(this.isOpen$, { requireSync: true }); const isOpen = toSignal(this.isOpen$, { requireSync: true });
effect( effect(() => {
() => { this.isHandset();
this.isHandset(); if (untracked(() => isOpen())) {
if (untracked(() => isOpen())) { this.closed.emit();
this.closed.emit(); }
} });
},
{ allowSignalWrites: true },
);
}); });
} }
@@ -1,7 +1,6 @@
import { ChangeDetectionStrategy, Component, EventEmitter, Output, Input } from '@angular/core'; import { ChangeDetectionStrategy, Component, EventEmitter, Output, Input } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { Router, RouterLink } from '@angular/router';
import { InstanceDetail } from '@zitadel/proto/zitadel/instance_pb'; import { InstanceDetail } from '@zitadel/proto/zitadel/instance_pb';
import { NgIconComponent, provideIcons } from '@ng-icons/core'; import { NgIconComponent, provideIcons } from '@ng-icons/core';
import { heroCog8ToothSolid } from '@ng-icons/heroicons/solid'; import { heroCog8ToothSolid } from '@ng-icons/heroicons/solid';
@@ -14,9 +13,8 @@ import { CommonModule } from '@angular/common';
selector: 'cnsl-instance-selector', selector: 'cnsl-instance-selector',
templateUrl: './instance-selector.component.html', templateUrl: './instance-selector.component.html',
styleUrls: ['./instance-selector.component.scss'], styleUrls: ['./instance-selector.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [TranslateModule, MatButtonModule, RouterLink, NgIconComponent, CommonModule], imports: [TranslateModule, MatButtonModule, NgIconComponent, CommonModule],
providers: [provideIcons({ heroCog8ToothSolid, heroChevronRight })], providers: [provideIcons({ heroCog8ToothSolid, heroChevronRight })],
}) })
export class InstanceSelectorComponent { export class InstanceSelectorComponent {
@@ -25,7 +25,6 @@ import { MatRippleModule } from '@angular/material/core';
selector: 'cnsl-new-header', selector: 'cnsl-new-header',
templateUrl: './new-header.component.html', templateUrl: './new-header.component.html',
styleUrls: ['./new-header.component.scss'], styleUrls: ['./new-header.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [ imports: [
MatToolbarModule, MatToolbarModule,
@@ -48,7 +48,6 @@ const QUERY_LIMIT = 20;
selector: 'cnsl-organization-selector', selector: 'cnsl-organization-selector',
templateUrl: './organization-selector.component.html', templateUrl: './organization-selector.component.html',
styleUrls: ['./organization-selector.component.scss'], styleUrls: ['./organization-selector.component.scss'],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [ imports: [
NgForOf, NgForOf,
@@ -7,6 +7,7 @@ import { ONBOARDING_MILESTONES } from 'src/app/utils/onboarding';
selector: 'cnsl-onboarding-card', selector: 'cnsl-onboarding-card',
templateUrl: './onboarding-card.component.html', templateUrl: './onboarding-card.component.html',
styleUrls: ['./onboarding-card.component.scss'], styleUrls: ['./onboarding-card.component.scss'],
standalone: false,
}) })
export class OnboardingCardComponent implements OnInit { export class OnboardingCardComponent implements OnInit {
public percentageChanged: EventEmitter<number> = new EventEmitter<number>(); public percentageChanged: EventEmitter<number> = new EventEmitter<number>();
@@ -7,6 +7,7 @@ import { ONBOARDING_MILESTONES } from 'src/app/utils/onboarding';
selector: 'cnsl-onboarding', selector: 'cnsl-onboarding',
templateUrl: './onboarding.component.html', templateUrl: './onboarding.component.html',
styleUrls: ['./onboarding.component.scss'], styleUrls: ['./onboarding.component.scss'],
standalone: false,
}) })
export class OnboardingComponent { export class OnboardingComponent {
public actions = this.adminService.progressMilestones; public actions = this.adminService.progressMilestones;
@@ -15,6 +15,7 @@ const ORG_QUERY_LIMIT = 100;
selector: 'cnsl-org-context', selector: 'cnsl-org-context',
templateUrl: './org-context.component.html', templateUrl: './org-context.component.html',
styleUrls: ['./org-context.component.scss'], styleUrls: ['./org-context.component.scss'],
standalone: false,
}) })
export class OrgContextComponent implements OnInit { export class OrgContextComponent implements OnInit {
public pinned: SelectionModel<Org.AsObject> = new SelectionModel<Org.AsObject>(true, []); public pinned: SelectionModel<Org.AsObject> = new SelectionModel<Org.AsObject>(true, []);
@@ -26,6 +26,7 @@ type SearchQuery = NonNullable<MessageInitShape<typeof ListOrganizationsRequestS
selector: 'cnsl-org-table', selector: 'cnsl-org-table',
templateUrl: './org-table.component.html', templateUrl: './org-table.component.html',
styleUrls: ['./org-table.component.scss'], styleUrls: ['./org-table.component.scss'],
standalone: false,
}) })
export class OrgTableComponent { export class OrgTableComponent {
public displayedColumns: string[] = ['name', 'state', 'primaryDomain', 'creationDate', 'changeDate', 'actions']; public displayedColumns: string[] = ['name', 'state', 'primaryDomain', 'creationDate', 'changeDate', 'actions'];
@@ -13,6 +13,7 @@ export interface PageEvent {
selector: 'cnsl-paginator', selector: 'cnsl-paginator',
templateUrl: './paginator.component.html', templateUrl: './paginator.component.html',
styleUrls: ['./paginator.component.scss'], styleUrls: ['./paginator.component.scss'],
standalone: false,
}) })
export class PaginatorComponent { export class PaginatorComponent {
@Input() public timestamp: Timestamp.AsObject | ConnectTimestamp | undefined = undefined; @Input() public timestamp: Timestamp.AsObject | ConnectTimestamp | undefined = undefined;
@@ -30,22 +30,22 @@
}}) }})
</span> </span>
</div> </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?.pristine || password?.errors?.['errorssymbolerror']" class="las la-times red"></i>
<i *ngIf="password?.dirty && !password?.errors?.['errorssymbolerror']" class="las la-check green"></i> <i *ngIf="password?.dirty && !password?.errors?.['errorssymbolerror']" class="las la-check green"></i>
<span class="cnsl-secondary-text"> {{ 'ERRORS.SYMBOLERROR' | translate }}</span> <span class="cnsl-secondary-text"> {{ 'ERRORS.SYMBOLERROR' | translate }}</span>
</div> </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?.pristine || password?.errors?.['errorsnumbererror']" class="las la-times red"></i>
<i *ngIf="password?.dirty && !password?.errors?.['errorsnumbererror']" class="las la-check green"></i> <i *ngIf="password?.dirty && !password?.errors?.['errorsnumbererror']" class="las la-check green"></i>
<span class="cnsl-secondary-text"> {{ 'ERRORS.NUMBERERROR' | translate }}</span> <span class="cnsl-secondary-text"> {{ 'ERRORS.NUMBERERROR' | translate }}</span>
</div> </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?.pristine || password?.errors?.['errorsuppercasemissing']" class="las la-times red"></i>
<i *ngIf="password?.dirty && !password?.errors?.['errorsuppercasemissing']" class="las la-check green"></i> <i *ngIf="password?.dirty && !password?.errors?.['errorsuppercasemissing']" class="las la-check green"></i>
<span class="cnsl-secondary-text"> {{ 'ERRORS.UPPERCASEMISSING' | translate }}</span> <span class="cnsl-secondary-text"> {{ 'ERRORS.UPPERCASEMISSING' | translate }}</span>
</div> </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?.pristine || password?.errors?.['errorslowercasemissing']" class="las la-times red"></i>
<i *ngIf="password?.dirty && !password?.errors?.['errorslowercasemissing']" class="las la-check green"></i> <i *ngIf="password?.dirty && !password?.errors?.['errorslowercasemissing']" class="las la-check green"></i>
<span class="cnsl-secondary-text">{{ 'ERRORS.LOWERCASEMISSING' | translate }}</span> <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', selector: 'cnsl-password-complexity-view',
templateUrl: './password-complexity-view.component.html', templateUrl: './password-complexity-view.component.html',
styleUrls: ['./password-complexity-view.component.scss'], styleUrls: ['./password-complexity-view.component.scss'],
standalone: false,
}) })
export class PasswordComplexityViewComponent { export class PasswordComplexityViewComponent {
@Input() public password: AbstractControl | null = null; @Input() public password: AbstractControl | null = null;
@@ -20,6 +20,7 @@ import { WarnDialogComponent } from '../warn-dialog/warn-dialog.component';
selector: 'cnsl-personal-access-tokens', selector: 'cnsl-personal-access-tokens',
templateUrl: './personal-access-tokens.component.html', templateUrl: './personal-access-tokens.component.html',
styleUrls: ['./personal-access-tokens.component.scss'], styleUrls: ['./personal-access-tokens.component.scss'],
standalone: false,
}) })
export class PersonalAccessTokensComponent implements OnInit { export class PersonalAccessTokensComponent implements OnInit {
@Input() userId!: string; @Input() userId!: string;
@@ -21,6 +21,7 @@ import { NewOrganizationService } from '../../../services/new-organization.servi
selector: 'cnsl-domain-policy', selector: 'cnsl-domain-policy',
templateUrl: './domain-policy.component.html', templateUrl: './domain-policy.component.html',
styleUrls: ['./domain-policy.component.scss'], styleUrls: ['./domain-policy.component.scss'],
standalone: false,
}) })
export class DomainPolicyComponent implements OnInit, OnDestroy { export class DomainPolicyComponent implements OnInit, OnDestroy {
private managementService!: ManagementService; private managementService!: ManagementService;
@@ -8,6 +8,7 @@ import { PolicyComponentServiceType } from '../policy-component-types.enum';
selector: 'cnsl-idp-settings', selector: 'cnsl-idp-settings',
templateUrl: './idp-settings.component.html', templateUrl: './idp-settings.component.html',
styleUrls: ['./idp-settings.component.scss'], styleUrls: ['./idp-settings.component.scss'],
standalone: false,
}) })
export class IdpSettingsComponent implements OnInit { export class IdpSettingsComponent implements OnInit {
@Input() public serviceType!: PolicyComponentServiceType; @Input() public serviceType!: PolicyComponentServiceType;
@@ -17,6 +17,7 @@ interface State {
selector: 'cnsl-language-settings', selector: 'cnsl-language-settings',
templateUrl: './language-settings.component.html', templateUrl: './language-settings.component.html',
styleUrls: ['./language-settings.component.scss'], styleUrls: ['./language-settings.component.scss'],
standalone: false,
}) })
export class LanguageSettingsComponent { export class LanguageSettingsComponent {
public canWriteRestrictions$: Observable<boolean> = this.authService.isAllowed(['iam.restrictions.write']); public canWriteRestrictions$: Observable<boolean> = this.authService.isAllowed(['iam.restrictions.write']);
@@ -11,6 +11,7 @@ enum LoginMethodComponentType {
selector: 'cnsl-dialog-add-type', selector: 'cnsl-dialog-add-type',
templateUrl: './dialog-add-type.component.html', templateUrl: './dialog-add-type.component.html',
styleUrls: ['./dialog-add-type.component.scss'], styleUrls: ['./dialog-add-type.component.scss'],
standalone: false,
}) })
export class DialogAddTypeComponent { export class DialogAddTypeComponent {
public LoginMethodComponentType: any = LoginMethodComponentType; public LoginMethodComponentType: any = LoginMethodComponentType;
@@ -33,6 +33,7 @@ export enum LoginMethodComponentType {
selector: 'cnsl-factor-table', selector: 'cnsl-factor-table',
templateUrl: './factor-table.component.html', templateUrl: './factor-table.component.html',
styleUrls: ['./factor-table.component.scss'], styleUrls: ['./factor-table.component.scss'],
standalone: false,
}) })
export class FactorTableComponent { export class FactorTableComponent {
public LoginMethodComponentType: any = LoginMethodComponentType; public LoginMethodComponentType: any = LoginMethodComponentType;

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