diff --git a/console/package-lock.json b/console/package-lock.json index e50a166fc7..fc348898be 100644 --- a/console/package-lock.json +++ b/console/package-lock.json @@ -34,6 +34,7 @@ "grpc-web": "^1.2.1", "libphonenumber-js": "^1.9.16", "moment": "^2.29.1", + "ngx-color": "^7.0.0", "ngx-quicklink": "^0.2.6", "rxjs": "~6.6.7", "ts-protoc-gen": "^0.14.0", @@ -2915,6 +2916,14 @@ "node": ">=4.0.0" } }, + "node_modules/@ctrl/tinycolor": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", + "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", @@ -10058,6 +10067,11 @@ "node": ">=0.10.0" } }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -10690,6 +10704,20 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/ngx-color": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-7.0.0.tgz", + "integrity": "sha512-BiTapBTT/f3sFSEFqet3xe06bpqmBm7hmA24s09ogRYYVGL1J69U13XfLwTQG8PhX4qNBceh7p5nhKA1zczHMg==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0", + "material-colors": "^1.2.6", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@angular/common": ">=12.0.0-0", + "@angular/core": ">=12.0.0-0" + } + }, "node_modules/ngx-quicklink": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/ngx-quicklink/-/ngx-quicklink-0.2.6.tgz", @@ -19366,6 +19394,11 @@ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", "dev": true }, + "@ctrl/tinycolor": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", + "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" + }, "@discoveryjs/json-ext": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", @@ -25200,6 +25233,11 @@ "object-visit": "^1.0.0" } }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, "mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -25710,6 +25748,16 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "ngx-color": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-7.0.0.tgz", + "integrity": "sha512-BiTapBTT/f3sFSEFqet3xe06bpqmBm7hmA24s09ogRYYVGL1J69U13XfLwTQG8PhX4qNBceh7p5nhKA1zczHMg==", + "requires": { + "@ctrl/tinycolor": "^3.4.0", + "material-colors": "^1.2.6", + "tslib": "^2.1.0" + } + }, "ngx-quicklink": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/ngx-quicklink/-/ngx-quicklink-0.2.6.tgz", diff --git a/console/package.json b/console/package.json index e48ce5e2f6..c2c9dddfad 100644 --- a/console/package.json +++ b/console/package.json @@ -37,6 +37,7 @@ "grpc-web": "^1.2.1", "libphonenumber-js": "^1.9.16", "moment": "^2.29.1", + "ngx-color": "^7.0.0", "ngx-quicklink": "^0.2.6", "rxjs": "~6.6.7", "ts-protoc-gen": "^0.14.0", diff --git a/console/src/app/app.module.ts b/console/src/app/app.module.ts index f7b46955ca..2ef2d406a0 100644 --- a/console/src/app/app.module.ts +++ b/console/src/app/app.module.ts @@ -25,8 +25,8 @@ import { QuicklinkModule } from 'ngx-quicklink'; import { from, Observable } from 'rxjs'; import { OnboardingModule } from 'src/app/modules/onboarding/onboarding.module'; import { RegExpPipeModule } from 'src/app/pipes/regexp-pipe/regexp-pipe.module'; +import { AssetService } from 'src/app/services/asset.service'; import { SubscriptionService } from 'src/app/services/subscription.service'; -import { UploadService } from 'src/app/services/upload.service'; import { environment } from '../environments/environment'; import { AppRoutingModule } from './app-routing.module'; @@ -181,7 +181,7 @@ const authConfig: AuthConfig = { AuthenticationService, GrpcAuthService, SubscriptionService, - UploadService, + AssetService, { provide: 'windowObject', useValue: window }, ], bootstrap: [AppComponent], diff --git a/console/src/app/modules/idp-create/idp-create.component.ts b/console/src/app/modules/idp-create/idp-create.component.ts index af28973dc9..8001cc43e2 100644 --- a/console/src/app/modules/idp-create/idp-create.component.ts +++ b/console/src/app/modules/idp-create/idp-create.component.ts @@ -16,171 +16,171 @@ import { ToastService } from 'src/app/services/toast.service'; import { PolicyComponentServiceType } from '../policies/policy-component-types.enum'; @Component({ - selector: 'app-idp-create', - templateUrl: './idp-create.component.html', - styleUrls: ['./idp-create.component.scss'], + selector: 'app-idp-create', + templateUrl: './idp-create.component.html', + styleUrls: ['./idp-create.component.scss'], }) export class IdpCreateComponent implements OnInit, OnDestroy { - public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; - private service!: ManagementService | AdminService; - public readonly separatorKeysCodes: number[] = [ENTER, COMMA, SPACE]; - public mappingFields: OIDCMappingField[] = []; + public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; + private service!: ManagementService | AdminService; + public readonly separatorKeysCodes: number[] = [ENTER, COMMA, SPACE]; + public mappingFields: OIDCMappingField[] = []; - private subscription?: Subscription; - public projectId: string = ''; + private subscription?: Subscription; + public projectId: string = ''; - public formGroup!: FormGroup; - public createSteps: number = 1; - public currentCreateStep: number = 1; - public loading: boolean = false; - constructor( - private router: Router, - private route: ActivatedRoute, - private toast: ToastService, - private injector: Injector, - private _location: Location, - ) { - this.formGroup = new FormGroup({ - name: new FormControl('', [Validators.required]), - clientId: new FormControl('', [Validators.required]), - clientSecret: new FormControl('', [Validators.required]), - issuer: new FormControl('', [Validators.required]), - scopesList: new FormControl(['openid', 'profile', 'email'], []), - idpDisplayNameMapping: new FormControl(0), - usernameMapping: new FormControl(0), - }); + public formGroup!: FormGroup; + public createSteps: number = 1; + public currentCreateStep: number = 1; + public loading: boolean = false; + constructor( + private router: Router, + private route: ActivatedRoute, + private toast: ToastService, + private injector: Injector, + private _location: Location, + ) { + this.formGroup = new FormGroup({ + name: new FormControl('', [Validators.required]), + clientId: new FormControl('', [Validators.required]), + clientSecret: new FormControl('', [Validators.required]), + issuer: new FormControl('', [Validators.required]), + scopesList: new FormControl(['openid', 'profile', 'email'], []), + idpDisplayNameMapping: new FormControl(0), + usernameMapping: new FormControl(0), + }); - this.route.data.pipe(take(1)).subscribe(data => { - this.serviceType = data.serviceType; - switch (this.serviceType) { - case PolicyComponentServiceType.MGMT: - this.service = this.injector.get(ManagementService as Type); - this.mappingFields = [ - OIDCMappingField.OIDC_MAPPING_FIELD_PREFERRED_USERNAME, - OIDCMappingField.OIDC_MAPPING_FIELD_EMAIL]; - break; - case PolicyComponentServiceType.ADMIN: - this.service = this.injector.get(AdminService as Type); - this.mappingFields = [ - OIDCMappingField.OIDC_MAPPING_FIELD_PREFERRED_USERNAME, - OIDCMappingField.OIDC_MAPPING_FIELD_EMAIL]; - break; - } - }); + this.route.data.pipe(take(1)).subscribe(data => { + this.serviceType = data.serviceType; + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + this.service = this.injector.get(ManagementService as Type); + this.mappingFields = [ + OIDCMappingField.OIDC_MAPPING_FIELD_PREFERRED_USERNAME, + OIDCMappingField.OIDC_MAPPING_FIELD_EMAIL]; + break; + case PolicyComponentServiceType.ADMIN: + this.service = this.injector.get(AdminService as Type); + this.mappingFields = [ + OIDCMappingField.OIDC_MAPPING_FIELD_PREFERRED_USERNAME, + OIDCMappingField.OIDC_MAPPING_FIELD_EMAIL]; + break; + } + }); + } + + public ngOnInit(): void { + this.subscription = this.route.params.subscribe(params => this.getData(params)); + } + + public ngOnDestroy(): void { + this.subscription?.unsubscribe(); + } + + private getData({ projectid }: Params): void { + this.projectId = projectid; + } + + public addIdp(): void { + if (this.serviceType === PolicyComponentServiceType.MGMT) { + const req = new AddOrgOIDCIDPRequest(); + + req.setName(this.name?.value); + req.setClientId(this.clientId?.value); + req.setClientSecret(this.clientSecret?.value); + req.setIssuer(this.issuer?.value); + req.setScopesList(this.scopesList?.value); + req.setDisplayNameMapping(this.idpDisplayNameMapping?.value); + req.setUsernameMapping(this.usernameMapping?.value); + this.loading = true; + (this.service as ManagementService).addOrgOIDCIDP(req).then((idp) => { + setTimeout(() => { + this.loading = false; + this.router.navigate([ + (this.serviceType === PolicyComponentServiceType.MGMT ? 'org' : + this.serviceType === PolicyComponentServiceType.ADMIN ? 'iam' : ''), + 'policy', 'login']); + }, 2000); + }).catch(error => { + this.toast.showError(error); + }); + } else if (PolicyComponentServiceType.ADMIN) { + const req = new AddOIDCIDPRequest(); + req.setName(this.name?.value); + req.setClientId(this.clientId?.value); + req.setClientSecret(this.clientSecret?.value); + req.setIssuer(this.issuer?.value); + req.setScopesList(this.scopesList?.value); + req.setDisplayNameMapping(this.idpDisplayNameMapping?.value); + req.setUsernameMapping(this.usernameMapping?.value); + this.loading = true; + (this.service as AdminService).addOIDCIDP(req).then((idp) => { + setTimeout(() => { + this.loading = false; + this.router.navigate([ + (this.serviceType === PolicyComponentServiceType.MGMT ? 'org' : + this.serviceType === PolicyComponentServiceType.ADMIN ? 'iam' : ''), + 'policy', 'login']); + }, 2000); + }).catch(error => { + this.toast.showError(error); + }); } + } - public ngOnInit(): void { - this.subscription = this.route.params.subscribe(params => this.getData(params)); - } + public close(): void { + this._location.back(); + } - public ngOnDestroy(): void { - this.subscription?.unsubscribe(); - } + public addScope(event: MatChipInputEvent): void { + const input = event.chipInput?.inputElement; + const value = event.value.trim(); - private getData({ projectid }: Params): void { - this.projectId = projectid; - } - - public addIdp(): void { - if (this.serviceType === PolicyComponentServiceType.MGMT) { - const req = new AddOrgOIDCIDPRequest(); - - req.setName(this.name?.value); - req.setClientId(this.clientId?.value); - req.setClientSecret(this.clientSecret?.value); - req.setIssuer(this.issuer?.value); - req.setScopesList(this.scopesList?.value); - req.setDisplayNameMapping(this.idpDisplayNameMapping?.value); - req.setUsernameMapping(this.usernameMapping?.value); - this.loading = true; - (this.service as ManagementService).addOrgOIDCIDP(req).then((idp) => { - setTimeout(() => { - this.loading = false; - this.router.navigate([ - (this.serviceType === PolicyComponentServiceType.MGMT ? 'org' : - this.serviceType === PolicyComponentServiceType.ADMIN ? 'iam' : ''), - 'policy', 'login']); - }, 2000); - }).catch(error => { - this.toast.showError(error); - }); - } else if (PolicyComponentServiceType.ADMIN) { - const req = new AddOIDCIDPRequest(); - req.setName(this.name?.value); - req.setClientId(this.clientId?.value); - req.setClientSecret(this.clientSecret?.value); - req.setIssuer(this.issuer?.value); - req.setScopesList(this.scopesList?.value); - req.setDisplayNameMapping(this.idpDisplayNameMapping?.value); - req.setUsernameMapping(this.usernameMapping?.value); - this.loading = true; - (this.service as AdminService).addOIDCIDP(req).then((idp) => { - setTimeout(() => { - this.loading = false; - this.router.navigate([ - (this.serviceType === PolicyComponentServiceType.MGMT ? 'org' : - this.serviceType === PolicyComponentServiceType.ADMIN ? 'iam' : ''), - 'policy', 'login']); - }, 2000); - }).catch(error => { - this.toast.showError(error); - }); + if (value !== '') { + if (this.scopesList?.value) { + this.scopesList.value.push(value); + if (input) { + input.value = ''; } + } } + } - public close(): void { - this._location.back(); + public removeScope(uri: string): void { + if (this.scopesList?.value) { + const index = this.scopesList.value.indexOf(uri); + + if (index !== undefined && index >= 0) { + this.scopesList.value.splice(index, 1); + } } + } - public addScope(event: MatChipInputEvent): void { - const input = event.input; - const value = event.value.trim(); + public get name(): AbstractControl | null { + return this.formGroup.get('name'); + } - if (value !== '') { - if (this.scopesList?.value) { - this.scopesList.value.push(value); - if (input) { - input.value = ''; - } - } - } - } + public get clientId(): AbstractControl | null { + return this.formGroup.get('clientId'); + } - public removeScope(uri: string): void { - if (this.scopesList?.value) { - const index = this.scopesList.value.indexOf(uri); + public get clientSecret(): AbstractControl | null { + return this.formGroup.get('clientSecret'); + } - if (index !== undefined && index >= 0) { - this.scopesList.value.splice(index, 1); - } - } - } + public get issuer(): AbstractControl | null { + return this.formGroup.get('issuer'); + } + public get scopesList(): AbstractControl | null { + return this.formGroup.get('scopesList'); + } - public get name(): AbstractControl | null { - return this.formGroup.get('name'); - } + public get idpDisplayNameMapping(): AbstractControl | null { + return this.formGroup.get('idpDisplayNameMapping'); + } - public get clientId(): AbstractControl | null { - return this.formGroup.get('clientId'); - } - - public get clientSecret(): AbstractControl | null { - return this.formGroup.get('clientSecret'); - } - - public get issuer(): AbstractControl | null { - return this.formGroup.get('issuer'); - } - public get scopesList(): AbstractControl | null { - return this.formGroup.get('scopesList'); - } - - public get idpDisplayNameMapping(): AbstractControl | null { - return this.formGroup.get('idpDisplayNameMapping'); - } - - public get usernameMapping(): AbstractControl | null { - return this.formGroup.get('usernameMapping'); - } + public get usernameMapping(): AbstractControl | null { + return this.formGroup.get('usernameMapping'); + } } diff --git a/console/src/app/modules/idp/idp.component.ts b/console/src/app/modules/idp/idp.component.ts index 7c5b98cfeb..a147d94589 100644 --- a/console/src/app/modules/idp/idp.component.ts +++ b/console/src/app/modules/idp/idp.component.ts @@ -16,245 +16,245 @@ import { ToastService } from 'src/app/services/toast.service'; import { PolicyComponentServiceType } from '../policies/policy-component-types.enum'; @Component({ - selector: 'app-idp', - templateUrl: './idp.component.html', - styleUrls: ['./idp.component.scss'], + selector: 'app-idp', + templateUrl: './idp.component.html', + styleUrls: ['./idp.component.scss'], }) export class IdpComponent implements OnInit, OnDestroy { - public mappingFields: OIDCMappingField[] = []; - public styleFields: IDPStylingType[] = []; + public mappingFields: OIDCMappingField[] = []; + public styleFields: IDPStylingType[] = []; - public showIdSecretSection: boolean = false; - public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; - private service!: ManagementService | AdminService; - public readonly separatorKeysCodes: number[] = [ENTER, COMMA, SPACE]; + public showIdSecretSection: boolean = false; + public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; + private service!: ManagementService | AdminService; + public readonly separatorKeysCodes: number[] = [ENTER, COMMA, SPACE]; - private subscription?: Subscription; - public projectId: string = ''; + private subscription?: Subscription; + public projectId: string = ''; - public idpForm!: FormGroup; - public oidcConfigForm!: FormGroup; + public idpForm!: FormGroup; + public oidcConfigForm!: FormGroup; - constructor( - private toast: ToastService, - private injector: Injector, - private route: ActivatedRoute, - private _location: Location, - ) { - this.idpForm = new FormGroup({ - id: new FormControl({ disabled: true, value: '' }, [Validators.required]), - name: new FormControl('', [Validators.required]), - stylingType: new FormControl('', [Validators.required]), - }); + constructor( + private toast: ToastService, + private injector: Injector, + private route: ActivatedRoute, + private _location: Location, + ) { + this.idpForm = new FormGroup({ + id: new FormControl({ disabled: true, value: '' }, [Validators.required]), + name: new FormControl('', [Validators.required]), + stylingType: new FormControl('', [Validators.required]), + }); - this.oidcConfigForm = new FormGroup({ - clientId: new FormControl('', [Validators.required]), - clientSecret: new FormControl(''), - issuer: new FormControl('', [Validators.required]), - scopesList: new FormControl([], []), - idpDisplayNameMapping: new FormControl(0), - usernameMapping: new FormControl(0), - }); + this.oidcConfigForm = new FormGroup({ + clientId: new FormControl('', [Validators.required]), + clientSecret: new FormControl(''), + issuer: new FormControl('', [Validators.required]), + scopesList: new FormControl([], []), + idpDisplayNameMapping: new FormControl(0), + usernameMapping: new FormControl(0), + }); - this.route.data.pipe(switchMap(data => { - this.serviceType = data.serviceType; - switch (this.serviceType) { - case PolicyComponentServiceType.MGMT: - this.service = this.injector.get(ManagementService as Type); + this.route.data.pipe(switchMap(data => { + this.serviceType = data.serviceType; + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + this.service = this.injector.get(ManagementService as Type); - break; - case PolicyComponentServiceType.ADMIN: - this.service = this.injector.get(AdminService as Type); + break; + case PolicyComponentServiceType.ADMIN: + this.service = this.injector.get(AdminService as Type); - break; - } + break; + } - this.mappingFields = [ - OIDCMappingField.OIDC_MAPPING_FIELD_PREFERRED_USERNAME, - OIDCMappingField.OIDC_MAPPING_FIELD_EMAIL]; - this.styleFields = [ - IDPStylingType.STYLING_TYPE_UNSPECIFIED, - IDPStylingType.STYLING_TYPE_GOOGLE]; + this.mappingFields = [ + OIDCMappingField.OIDC_MAPPING_FIELD_PREFERRED_USERNAME, + OIDCMappingField.OIDC_MAPPING_FIELD_EMAIL]; + this.styleFields = [ + IDPStylingType.STYLING_TYPE_UNSPECIFIED, + IDPStylingType.STYLING_TYPE_GOOGLE]; - return this.route.params.pipe(take(1)); - })).subscribe((params) => { - const { id } = params; - if (id) { - if (this.serviceType === PolicyComponentServiceType.MGMT) { - (this.service as ManagementService).getOrgIDPByID(id).then(resp => { - if (resp.idp) { - const idpObject = resp.idp; - this.idpForm.patchValue(idpObject); - if (idpObject.oidcConfig) { - this.oidcConfigForm.patchValue(idpObject.oidcConfig); - } - } - }); - } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { - (this.service as AdminService).getIDPByID(id).then(resp => { - if (resp.idp) { - const idpObject = resp.idp; - this.idpForm.patchValue(idpObject); - if (idpObject.oidcConfig) { - this.oidcConfigForm.patchValue(idpObject.oidcConfig); - } - } - }); - } - } - }); - } - - public ngOnInit(): void { - this.subscription = this.route.params.subscribe(params => this.getData(params)); - } - - public ngOnDestroy(): void { - this.subscription?.unsubscribe(); - } - - private getData({ projectid }: Params): void { - this.projectId = projectid; - } - - public updateIdp(): void { + return this.route.params.pipe(take(1)); + })).subscribe((params) => { + const { id } = params; + if (id) { if (this.serviceType === PolicyComponentServiceType.MGMT) { - const req = new UpdateOrgIDPRequest(); - - req.setIdpId(this.id?.value); - req.setName(this.name?.value); - req.setStylingType(this.stylingType?.value); - - (this.service as ManagementService).updateOrgIDP(req).then(() => { - this.toast.showInfo('IDP.TOAST.SAVED', true); - // this.router.navigate(['idp', ]); - }).catch(error => { - this.toast.showError(error); - }); - } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { - const req = new UpdateIDPRequest(); - - req.setIdpId(this.id?.value); - req.setName(this.name?.value); - req.setStylingType(this.stylingType?.value); - - (this.service as AdminService).updateIDP(req).then(() => { - this.toast.showInfo('IDP.TOAST.SAVED', true); - // this.router.navigate(['idp', ]); - }).catch(error => { - this.toast.showError(error); - }); - } - } - - public updateOidcConfig(): void { - if (this.serviceType === PolicyComponentServiceType.MGMT) { - const req = new UpdateOrgIDPOIDCConfigRequest(); - - req.setIdpId(this.id?.value); - req.setClientId(this.clientId?.value); - req.setClientSecret(this.clientSecret?.value); - req.setIssuer(this.issuer?.value); - req.setScopesList(this.scopesList?.value); - req.setUsernameMapping(this.usernameMapping?.value); - req.setDisplayNameMapping(this.idpDisplayNameMapping?.value); - - (this.service as ManagementService).updateOrgIDPOIDCConfig(req).then((oidcConfig) => { - this.toast.showInfo('IDP.TOAST.SAVED', true); - // this.router.navigate(['idp', ]); - }).catch(error => { - this.toast.showError(error); - }); - } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { - const req = new UpdateIDPOIDCConfigRequest(); - - req.setIdpId(this.id?.value); - req.setClientId(this.clientId?.value); - req.setClientSecret(this.clientSecret?.value); - req.setIssuer(this.issuer?.value); - req.setScopesList(this.scopesList?.value); - req.setUsernameMapping(this.usernameMapping?.value); - req.setDisplayNameMapping(this.idpDisplayNameMapping?.value); - - (this.service as AdminService).updateIDPOIDCConfig(req).then((oidcConfig) => { - this.toast.showInfo('IDP.TOAST.SAVED', true); - // this.router.navigate(['idp', ]); - }).catch(error => { - this.toast.showError(error); - }); - } - } - - public close(): void { - this._location.back(); - } - - public addScope(event: MatChipInputEvent): void { - const input = event.input; - const value = event.value.trim(); - - if (value !== '') { - if (this.scopesList?.value) { - this.scopesList.value.push(value); - if (input) { - input.value = ''; - } + (this.service as ManagementService).getOrgIDPByID(id).then(resp => { + if (resp.idp) { + const idpObject = resp.idp; + this.idpForm.patchValue(idpObject); + if (idpObject.oidcConfig) { + this.oidcConfigForm.patchValue(idpObject.oidcConfig); + } } - } - } - - public removeScope(uri: string): void { - if (this.scopesList?.value) { - const index = this.scopesList?.value.indexOf(uri); - - if (index !== undefined && index >= 0) { - this.scopesList?.value.splice(index, 1); + }); + } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { + (this.service as AdminService).getIDPByID(id).then(resp => { + if (resp.idp) { + const idpObject = resp.idp; + this.idpForm.patchValue(idpObject); + if (idpObject.oidcConfig) { + this.oidcConfigForm.patchValue(idpObject.oidcConfig); + } } + }); } - } + } + }); + } - public get backroutes(): string[] { - switch (this.serviceType) { - case PolicyComponentServiceType.MGMT: - return ['/org', 'policy', 'login']; - case PolicyComponentServiceType.ADMIN: - return ['/iam', 'policy', 'login']; + public ngOnInit(): void { + this.subscription = this.route.params.subscribe(params => this.getData(params)); + } + + public ngOnDestroy(): void { + this.subscription?.unsubscribe(); + } + + private getData({ projectid }: Params): void { + this.projectId = projectid; + } + + public updateIdp(): void { + if (this.serviceType === PolicyComponentServiceType.MGMT) { + const req = new UpdateOrgIDPRequest(); + + req.setIdpId(this.id?.value); + req.setName(this.name?.value); + req.setStylingType(this.stylingType?.value); + + (this.service as ManagementService).updateOrgIDP(req).then(() => { + this.toast.showInfo('IDP.TOAST.SAVED', true); + // this.router.navigate(['idp', ]); + }).catch(error => { + this.toast.showError(error); + }); + } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { + const req = new UpdateIDPRequest(); + + req.setIdpId(this.id?.value); + req.setName(this.name?.value); + req.setStylingType(this.stylingType?.value); + + (this.service as AdminService).updateIDP(req).then(() => { + this.toast.showInfo('IDP.TOAST.SAVED', true); + // this.router.navigate(['idp', ]); + }).catch(error => { + this.toast.showError(error); + }); + } + } + + public updateOidcConfig(): void { + if (this.serviceType === PolicyComponentServiceType.MGMT) { + const req = new UpdateOrgIDPOIDCConfigRequest(); + + req.setIdpId(this.id?.value); + req.setClientId(this.clientId?.value); + req.setClientSecret(this.clientSecret?.value); + req.setIssuer(this.issuer?.value); + req.setScopesList(this.scopesList?.value); + req.setUsernameMapping(this.usernameMapping?.value); + req.setDisplayNameMapping(this.idpDisplayNameMapping?.value); + + (this.service as ManagementService).updateOrgIDPOIDCConfig(req).then((oidcConfig) => { + this.toast.showInfo('IDP.TOAST.SAVED', true); + // this.router.navigate(['idp', ]); + }).catch(error => { + this.toast.showError(error); + }); + } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { + const req = new UpdateIDPOIDCConfigRequest(); + + req.setIdpId(this.id?.value); + req.setClientId(this.clientId?.value); + req.setClientSecret(this.clientSecret?.value); + req.setIssuer(this.issuer?.value); + req.setScopesList(this.scopesList?.value); + req.setUsernameMapping(this.usernameMapping?.value); + req.setDisplayNameMapping(this.idpDisplayNameMapping?.value); + + (this.service as AdminService).updateIDPOIDCConfig(req).then((oidcConfig) => { + this.toast.showInfo('IDP.TOAST.SAVED', true); + // this.router.navigate(['idp', ]); + }).catch(error => { + this.toast.showError(error); + }); + } + } + + public close(): void { + this._location.back(); + } + + public addScope(event: MatChipInputEvent): void { + const input = event.chipInput?.inputElement; + const value = event.value.trim(); + + if (value !== '') { + if (this.scopesList?.value) { + this.scopesList.value.push(value); + if (input) { + input.value = ''; } + } } + } - public get id(): AbstractControl | null { - return this.idpForm.get('id'); - } + public removeScope(uri: string): void { + if (this.scopesList?.value) { + const index = this.scopesList?.value.indexOf(uri); - public get name(): AbstractControl | null { - return this.idpForm.get('name'); + if (index !== undefined && index >= 0) { + this.scopesList?.value.splice(index, 1); + } } + } - public get stylingType(): AbstractControl | null { - return this.idpForm.get('stylingType'); + public get backroutes(): string[] { + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + return ['/org', 'policy', 'login']; + case PolicyComponentServiceType.ADMIN: + return ['/iam', 'policy', 'login']; } + } - public get clientId(): AbstractControl | null { - return this.oidcConfigForm.get('clientId'); - } + public get id(): AbstractControl | null { + return this.idpForm.get('id'); + } - public get clientSecret(): AbstractControl | null { - return this.oidcConfigForm.get('clientSecret'); - } + public get name(): AbstractControl | null { + return this.idpForm.get('name'); + } - public get issuer(): AbstractControl | null { - return this.oidcConfigForm.get('issuer'); - } + public get stylingType(): AbstractControl | null { + return this.idpForm.get('stylingType'); + } - public get scopesList(): AbstractControl | null { - return this.oidcConfigForm.get('scopesList'); - } + public get clientId(): AbstractControl | null { + return this.oidcConfigForm.get('clientId'); + } - public get idpDisplayNameMapping(): AbstractControl | null { - return this.oidcConfigForm.get('idpDisplayNameMapping'); - } + public get clientSecret(): AbstractControl | null { + return this.oidcConfigForm.get('clientSecret'); + } - public get usernameMapping(): AbstractControl | null { - return this.oidcConfigForm.get('usernameMapping'); - } + public get issuer(): AbstractControl | null { + return this.oidcConfigForm.get('issuer'); + } + + public get scopesList(): AbstractControl | null { + return this.oidcConfigForm.get('scopesList'); + } + + public get idpDisplayNameMapping(): AbstractControl | null { + return this.oidcConfigForm.get('idpDisplayNameMapping'); + } + + public get usernameMapping(): AbstractControl | null { + return this.oidcConfigForm.get('usernameMapping'); + } } diff --git a/console/src/app/modules/policies/private-labeling-policy/color/color.component.html b/console/src/app/modules/policies/private-labeling-policy/color/color.component.html index 0515ec725a..958b42dc94 100644 --- a/console/src/app/modules/policies/private-labeling-policy/color/color.component.html +++ b/console/src/app/modules/policies/private-labeling-policy/color/color.component.html @@ -1,15 +1,19 @@ -
- - {{name}} (current {{color}}) - - - -
-
-
- P - C +

{{name}} (current {{color}})

+ +
+ + +
+ + {{previewColorCropped}}
-
\ No newline at end of file +
+ + + + \ No newline at end of file diff --git a/console/src/app/modules/policies/private-labeling-policy/color/color.component.scss b/console/src/app/modules/policies/private-labeling-policy/color/color.component.scss index c2f7a49aac..d85972ebf9 100644 --- a/console/src/app/modules/policies/private-labeling-policy/color/color.component.scss +++ b/console/src/app/modules/policies/private-labeling-policy/color/color.component.scss @@ -1,52 +1,52 @@ -.title { - // font-size: 1rem; - display: block; - font-size: 18px; - - &.border { - border-top: 1px solid var(--grey); - padding-top: 1.5rem; - } +.name { + font-size: 14px; + margin-bottom: 0; + color: var(--grey); } -.form-row { +.wrapper { + border-radius: .5rem; + padding: 0 1rem; display: flex; - align-items: flex-end; + align-items: center; - .formfield { - flex: 1; + .hex-wrapper { + display: flex; + align-items: center; + flex-direction: row; + color: var(--grey); + font-size: 14px; + padding: 0 1rem; + cursor: pointer; + + .hex { + font-size: 16px; + } } button { - margin-bottom: .9rem; - } -} - -.color-selector { - display: flex; - align-items: center; - flex-wrap: wrap; - margin: 0 -.25rem; - width: 100%; - padding-bottom: 1rem; - - .circle { - height: 30px; - width: 30px; - background-color: #cd5c5c; - border-radius: 50%; - margin: .25rem; - box-sizing: border-box; + cursor: pointer; + margin: .5rem 0; + border-radius: .5rem; + height: 35px; + width: 35px; display: flex; align-items: center; - justify-content: center; - - span { - font-size: 18px; - } - - &.active { - border: 3px solid #ffffff90; - } + border: none; + justify-content: space-between; } } + +.picker { + margin: 1rem 0; +} + +// stylelint-disable +::ng-deep .chrome-picker { + border-radius: .5rem !important; +} + +::ng-deep .saturation { + border-radius: .5rem .5rem 0 0 !important; +} +// stylelint-enable diff --git a/console/src/app/modules/policies/private-labeling-policy/color/color.component.ts b/console/src/app/modules/policies/private-labeling-policy/color/color.component.ts index d40c2bb738..bf83ff6a36 100644 --- a/console/src/app/modules/policies/private-labeling-policy/color/color.component.ts +++ b/console/src/app/modules/policies/private-labeling-policy/color/color.component.ts @@ -1,4 +1,5 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { ColorEvent } from 'ngx-color'; import { ColorType } from '../private-labeling-policy.component'; @@ -77,6 +78,7 @@ export class ColorComponent implements OnInit { ]; public colors: Array<{ name: string; color: string; }> = this.PRIMARY; + public isOpen: boolean = false; @Input() colorType: ColorType = ColorType.PRIMARY; @Input() color: string = ''; @@ -89,8 +91,7 @@ export class ColorComponent implements OnInit { this.previewChanged.emit(this.previewColor); } - ngOnInit(): void { - + public ngOnInit(): void { switch (this.colorType) { case ColorType.PRIMARY: this.colors = this.PRIMARY; @@ -115,4 +116,16 @@ export class ColorComponent implements OnInit { break; } } + + public changeComplete(event: ColorEvent): void { + this.emitPreview(event.color.hex); + } + + public get previewColorCropped(): string { + let s = this.previewColor; + while (s.charAt(0) === '#') { + s = s.substring(1); + } + return s; + } } diff --git a/console/src/app/modules/policies/private-labeling-policy/preview/preview.component.html b/console/src/app/modules/policies/private-labeling-policy/preview/preview.component.html index 30ae51a4c1..56d79f8716 100644 --- a/console/src/app/modules/policies/private-labeling-policy/preview/preview.component.html +++ b/console/src/app/modules/policies/private-labeling-policy/preview/preview.component.html @@ -3,10 +3,8 @@
- - - -

{{'POLICY.PRIVATELABELING.THEME' | translate}}

@@ -35,6 +28,15 @@
+ + + + + + @@ -64,14 +66,26 @@
- dark logo preview +
+ remove_circle + dark logo preview +
- dark logo +
+ + dark logo +
- logo preview +
+ remove_circle + logo preview +
- logo +
+ + logo +
- dark icon preview +
+ remove_circle + dark icon preview +
- dark icon +
+ + dark icon +
- icon preview +
+ remove_circle + icon preview +
- icon +
+ + icon +
- +
- +
- +
- +
@@ -152,22 +178,26 @@
- +
- +
- +
- +
+ +
+ +
@@ -179,11 +209,12 @@
-
- text_fields +
+ text_fields ABC • abc • 123 - _ - Upload your favorite font for the UI + + +
- {{'FEATURES.NOTAVAILABLE' | translate: ({value: + {{'FEATURES.NOTAVAILABLE' | translate: ({value: 'label_policy.private_label'})}} diff --git a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.scss b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.scss index c28c6c1e78..29af9f8ee6 100644 --- a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.scss +++ b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.scss @@ -83,7 +83,15 @@ .top-row { display: flex; - justify-content: space-between; + + .fill-space { + flex: 1; + } + + .reset-button { + align-self: flex-end; + margin-right: 1rem; + } .activate-button { border-radius: 50%; @@ -180,7 +188,7 @@ outline: none; height: 150px; width: 100%; - border-radius: 16px; + border-radius: .5rem; background: if($is-dark-theme, #2d2e30, #fff); border: 1px solid if($is-dark-theme, #4a4b4b, #ddd); display: flex; @@ -257,11 +265,39 @@ display: flex; margin-bottom: 1rem; - .prev, - .curr { - height: 50px; - object-fit: contain; + .img-wrapper { + flex: 1; + position: relative; + min-height: 80px; + border: 1px solid if($is-dark-theme, #ffffff20, #00000020); border-radius: .5rem; + max-width: 120px; + + .dl-btn { + position: absolute; + top: -12px; + left: -12px; + cursor: pointer; + visibility: hidden; + } + + .prev, + .curr { + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 0; + max-height: 80px; + max-width: 120px; + object-fit: contain; + border-radius: .5rem; + } + + &:hover { + .dl-btn { + visibility: visible; + } + } } .fill-space { @@ -280,6 +316,12 @@ } } + .clr-btn-wrapper { + width: 100%; + display: flex; + justify-content: flex-end; + } + .fonts { .title { display: block; @@ -288,10 +330,19 @@ .font-preview { display: flex; - flex-direction: column; align-items: center; - padding: 30px 50px; + padding: .5rem; text-align: center; + border-radius: .5rem; + margin-bottom: 1rem; + + .icon { + margin-right: 1rem; + } + + .fill-space { + flex: 1; + } } .font-selector { @@ -299,7 +350,6 @@ align-items: center; flex-wrap: wrap; margin: 0 -.25rem; - width: 100%; padding-bottom: 1rem; .font { diff --git a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.ts b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.ts index 44f4afbd54..de60802eaf 100644 --- a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.ts +++ b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.ts @@ -17,9 +17,9 @@ import { } from 'src/app/proto/generated/zitadel/management_pb'; import { LabelPolicy } from 'src/app/proto/generated/zitadel/policy_pb'; import { AdminService } from 'src/app/services/admin.service'; +import { AssetEndpoint, AssetService, AssetType } from 'src/app/services/asset.service'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; -import { DownloadEndpoint, UploadEndpoint, UploadService } from 'src/app/services/upload.service'; import { CnslLinks } from '../../links/links.component'; import { IAM_COMPLEXITY_LINK, IAM_LOGIN_POLICY_LINK, IAM_POLICY_LINK } from '../../policy-grid/policy-links'; @@ -82,6 +82,7 @@ export class PrivateLabelingPolicyComponent implements OnDestroy { public Theme: any = Theme; public Preview: any = Preview; public ColorType: any = ColorType; + public AssetType: any = AssetType; public refreshPreview: EventEmitter = new EventEmitter(); public loadingImages: boolean = false; @@ -90,7 +91,7 @@ export class PrivateLabelingPolicyComponent implements OnDestroy { private route: ActivatedRoute, private toast: ToastService, private injector: Injector, - private uploadService: UploadService, + private assetService: AssetService, private sanitizer: DomSanitizer, ) { this.sub = this.route.data.pipe(switchMap(data => { @@ -133,17 +134,17 @@ export class PrivateLabelingPolicyComponent implements OnDestroy { if (theme === Theme.DARK) { switch (this.serviceType) { case PolicyComponentServiceType.MGMT: - return this.handleUploadPromise(this.uploadService.upload(UploadEndpoint.MGMTDARKLOGO, formData)); + return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.MGMTDARKLOGO, formData)); case PolicyComponentServiceType.ADMIN: - return this.handleUploadPromise(this.uploadService.upload(UploadEndpoint.IAMDARKLOGO, formData)); + return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMDARKLOGO, formData)); } } if (theme === Theme.LIGHT) { switch (this.serviceType) { case PolicyComponentServiceType.MGMT: - return this.handleUploadPromise(this.uploadService.upload(UploadEndpoint.MGMTLIGHTLOGO, formData)); + return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.MGMTLOGO, formData)); case PolicyComponentServiceType.ADMIN: - return this.handleUploadPromise(this.uploadService.upload(UploadEndpoint.IAMLIGHTLOGO, formData)); + return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMLOGO, formData)); } } @@ -157,13 +158,87 @@ export class PrivateLabelingPolicyComponent implements OnDestroy { formData.append('file', file); switch (this.serviceType) { case PolicyComponentServiceType.MGMT: - return this.uploadService.upload(UploadEndpoint.MGMTFONT, formData); + return this.handleFontUploadPromise(this.assetService.upload(AssetEndpoint.MGMTFONT, formData)); case PolicyComponentServiceType.ADMIN: - return this.uploadService.upload(UploadEndpoint.IAMFONT, formData); + return this.handleFontUploadPromise(this.assetService.upload(AssetEndpoint.IAMFONT, formData)); } } } + public deleteFont(): Promise { + const handler = (prom: Promise) => prom.then(() => { + this.toast.showInfo('POLICY.TOAST.DELETESUCCESS', true); + setTimeout(() => { + this.loadingImages = true; + this.getPreviewData().then(data => { + + if (data.policy) { + this.previewData = data.policy; + this.loadPreviewImages(); + } + }); + }, 1000); + }).catch(error => this.toast.showError(error)); + + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + return handler((this.service as ManagementService).removeLabelPolicyFont()); + case PolicyComponentServiceType.ADMIN: + return handler((this.service as AdminService).removeLabelPolicyFont()); + } + } + + public deleteAsset(type: AssetType, theme: Theme): any { + const previewHandler = (prom: Promise) => { + return prom.then(() => { + this.toast.showInfo('POLICY.TOAST.DELETESUCCESS', true); + setTimeout(() => { + this.loadingImages = true; + this.getPreviewData().then(data => { + + if (data.policy) { + this.previewData = data.policy; + this.loadPreviewImages(); + } + }); + }, 1000); + }).catch(error => this.toast.showError(error)); + }; + + switch (this.serviceType) { + case PolicyComponentServiceType.ADMIN: + if (type === AssetType.LOGO) { + if (theme === Theme.DARK) { + return previewHandler(this.service.removeLabelPolicyLogoDark()); + } else if (theme === Theme.LIGHT) { + return previewHandler(this.service.removeLabelPolicyLogo()); + } + } else if (type === AssetType.ICON) { + if (theme === Theme.DARK) { + return previewHandler(this.service.removeLabelPolicyIconDark()); + } else if (theme === Theme.LIGHT) { + return previewHandler(this.service.removeLabelPolicyIcon()); + } + } + break; + case PolicyComponentServiceType.MGMT: + if (type === AssetType.LOGO) { + if (theme === Theme.DARK) { + return previewHandler(this.service.removeLabelPolicyLogoDark()); + } else if (theme === Theme.LIGHT) { + return previewHandler(this.service.removeLabelPolicyLogo()); + } + } else if (type === AssetType.ICON) { + if (theme === Theme.DARK) { + return previewHandler(this.service.removeLabelPolicyIconDark()); + } else if (theme === Theme.LIGHT) { + return previewHandler(this.service.removeLabelPolicyIcon()); + } + } + break; + } + } + public toggleHoverIcon(theme: Theme, isHovering: boolean): void { if (theme === Theme.DARK) { this.isHoveringOverDarkIcon = isHovering; @@ -182,26 +257,39 @@ export class PrivateLabelingPolicyComponent implements OnDestroy { if (theme === Theme.DARK) { switch (this.serviceType) { case PolicyComponentServiceType.MGMT: - this.handleUploadPromise(this.uploadService.upload(UploadEndpoint.MGMTDARKICON, formData)); + this.handleUploadPromise(this.assetService.upload(AssetEndpoint.MGMTDARKICON, formData)); break; case PolicyComponentServiceType.ADMIN: - this.handleUploadPromise(this.uploadService.upload(UploadEndpoint.IAMDARKICON, formData)); + this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMDARKICON, formData)); break; } } if (theme === Theme.LIGHT) { switch (this.serviceType) { case PolicyComponentServiceType.MGMT: - this.handleUploadPromise(this.uploadService.upload(UploadEndpoint.MGMTLIGHTICON, formData)); + this.handleUploadPromise(this.assetService.upload(AssetEndpoint.MGMTICON, formData)); break; case PolicyComponentServiceType.ADMIN: - this.handleUploadPromise(this.uploadService.upload(UploadEndpoint.IAMLIGHTICON, formData)); + this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMICON, formData)); break; } } } } + private handleFontUploadPromise(task: Promise): Promise { + return task.then(() => { + this.toast.showInfo('POLICY.TOAST.UPLOADSUCCESS', true); + setTimeout(() => { + this.getPreviewData().then(data => { + if (data.policy) { + this.previewData = data.policy; + } + }); + }, 1000); + }).catch(error => this.toast.showError(error)); + } + private handleUploadPromise(task: Promise): Promise { return task.then(() => { this.toast.showInfo('POLICY.TOAST.UPLOADSUCCESS', true); @@ -250,63 +338,86 @@ export class PrivateLabelingPolicyComponent implements OnDestroy { } private loadImages(): void { + const promises: Promise[] = []; if (this.serviceType === PolicyComponentServiceType.ADMIN) { if (this.data.logoUrlDark) { - this.loadAsset('darkLogo', DownloadEndpoint.IAMDARKLOGOPREVIEW); + promises.push(this.loadAsset('darkLogo', AssetEndpoint.IAMDARKLOGO)); } if (this.data.iconUrlDark) { - this.loadAsset('darkIcon', DownloadEndpoint.IAMDARKICONPREVIEW); + promises.push(this.loadAsset('darkIcon', AssetEndpoint.IAMDARKICON)); } if (this.data.logoUrl) { - this.loadAsset('logo', DownloadEndpoint.IAMLOGOPREVIEW); + promises.push(this.loadAsset('logo', AssetEndpoint.IAMLOGO)); } if (this.data.iconUrl) { - this.loadAsset('icon', DownloadEndpoint.IAMICONPREVIEW); + promises.push(this.loadAsset('icon', AssetEndpoint.IAMICON)); } } else if (this.serviceType === PolicyComponentServiceType.MGMT) { if (this.data.logoUrlDark) { - this.loadAsset('darkLogo', DownloadEndpoint.MGMTDARKLOGOPREVIEW); + promises.push(this.loadAsset('darkLogo', AssetEndpoint.MGMTDARKLOGO)); } if (this.data.iconUrlDark) { - this.loadAsset('darkIcon', DownloadEndpoint.MGMTDARKICONPREVIEW); + promises.push(this.loadAsset('darkIcon', AssetEndpoint.MGMTDARKICON)); } if (this.data.logoUrl) { - this.loadAsset('logo', DownloadEndpoint.MGMTLOGOPREVIEW); + promises.push(this.loadAsset('logo', AssetEndpoint.MGMTLOGO)); } if (this.data.iconUrl) { - this.loadAsset('icon', DownloadEndpoint.MGMTICONPREVIEW); + promises.push(this.loadAsset('icon', AssetEndpoint.MGMTICON)); } } + + if (promises.length) { + Promise.all(promises).then(() => { + this.loadingImages = false; + }).catch(error => { + this.loadingImages = false; + }); + } else { + this.loadingImages = false; + } } private loadPreviewImages(): void { + const promises: Promise[] = []; + if (this.serviceType === PolicyComponentServiceType.ADMIN) { if (this.previewData.logoUrlDark) { - this.loadAsset('previewDarkLogo', DownloadEndpoint.IAMDARKLOGOPREVIEW); + promises.push(this.loadAsset('previewDarkLogo', AssetEndpoint.IAMDARKLOGOPREVIEW)); } if (this.previewData.iconUrlDark) { - this.loadAsset('previewDarkIcon', DownloadEndpoint.IAMDARKICONPREVIEW); + promises.push(this.loadAsset('previewDarkIcon', AssetEndpoint.IAMDARKICONPREVIEW)); } if (this.previewData.logoUrl) { - this.loadAsset('previewLogo', DownloadEndpoint.IAMLOGOPREVIEW); + promises.push(this.loadAsset('previewLogo', AssetEndpoint.IAMLOGOPREVIEW)); } if (this.previewData.iconUrl) { - this.loadAsset('previewIcon', DownloadEndpoint.IAMICONPREVIEW); + promises.push(this.loadAsset('previewIcon', AssetEndpoint.IAMICONPREVIEW)); } } else if (this.serviceType === PolicyComponentServiceType.MGMT) { if (this.previewData.logoUrlDark) { - this.loadAsset('previewDarkLogo', DownloadEndpoint.MGMTDARKLOGOPREVIEW); + promises.push(this.loadAsset('previewDarkLogo', AssetEndpoint.MGMTDARKLOGOPREVIEW)); } if (this.previewData.iconUrlDark) { - this.loadAsset('previewDarkIcon', DownloadEndpoint.MGMTDARKICONPREVIEW); + promises.push(this.loadAsset('previewDarkIcon', AssetEndpoint.MGMTDARKICONPREVIEW)); } if (this.previewData.logoUrl) { - this.loadAsset('previewLogo', DownloadEndpoint.MGMTLOGOPREVIEW); + promises.push(this.loadAsset('previewLogo', AssetEndpoint.MGMTLOGOPREVIEW)); } if (this.previewData.iconUrl) { - this.loadAsset('previewIcon', DownloadEndpoint.MGMTICONPREVIEW); + promises.push(this.loadAsset('previewIcon', AssetEndpoint.MGMTICONPREVIEW)); } } + + if (promises.length) { + Promise.all(promises).then(() => { + this.loadingImages = false; + }).catch(error => { + this.loadingImages = false; + }); + } else { + this.loadingImages = false; + } } public ngOnDestroy(): void { @@ -340,14 +451,12 @@ export class PrivateLabelingPolicyComponent implements OnDestroy { } private loadAsset(imagekey: string, url: string): Promise { - return this.uploadService.load(`${url}`).then(data => { + return this.assetService.load(`${url}`).then(data => { const objectURL = URL.createObjectURL(data); this.images[imagekey] = this.sanitizer.bypassSecurityTrustUrl(objectURL); this.refreshPreview.emit(); - this.loadingImages = false; }).catch(error => { this.toast.showError(error); - this.loadingImages = false; }); } diff --git a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.module.ts b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.module.ts index 864c8d0594..467140e631 100644 --- a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.module.ts +++ b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.module.ts @@ -1,3 +1,4 @@ +import { OverlayModule } from '@angular/cdk/overlay'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; @@ -8,6 +9,7 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatTooltipModule } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; +import { ColorChromeModule } from 'ngx-color/chrome'; import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; import { HasFeaturePipeModule } from 'src/app/pipes/has-feature-pipe/has-feature-pipe.module'; @@ -28,12 +30,14 @@ import { PrivateLabelingPolicyComponent } from './private-labeling-policy.compon ColorComponent, ], imports: [ + ColorChromeModule, PrivateLabelingPolicyRoutingModule, CommonModule, FormsModule, InputModule, MatButtonModule, MatSlideToggleModule, + OverlayModule, MatIconModule, HasRoleModule, MatTooltipModule, diff --git a/console/src/app/modules/search-project-autocomplete/search-project-autocomplete.component.ts b/console/src/app/modules/search-project-autocomplete/search-project-autocomplete.component.ts index 47981e1d8a..94c3451092 100644 --- a/console/src/app/modules/search-project-autocomplete/search-project-autocomplete.component.ts +++ b/console/src/app/modules/search-project-autocomplete/search-project-autocomplete.component.ts @@ -12,143 +12,143 @@ import { ManagementService } from 'src/app/services/mgmt.service'; export enum ProjectAutocompleteType { - PROJECT_OWNED = 0, - PROJECT_GRANTED = 1, + PROJECT_OWNED = 0, + PROJECT_GRANTED = 1, } @Component({ - selector: 'app-search-project-autocomplete', - templateUrl: './search-project-autocomplete.component.html', - styleUrls: ['./search-project-autocomplete.component.scss'], + selector: 'app-search-project-autocomplete', + templateUrl: './search-project-autocomplete.component.html', + styleUrls: ['./search-project-autocomplete.component.scss'], }) export class SearchProjectAutocompleteComponent implements OnDestroy { - public selectable: boolean = true; - public removable: boolean = true; - public addOnBlur: boolean = true; - public separatorKeysCodes: number[] = [ENTER, COMMA]; - public myControl: FormControl = new FormControl(); - public names: string[] = []; - public projects: Array = []; - public filteredProjects: Array = []; - public isLoading: boolean = false; - @ViewChild('nameInput') public nameInput!: ElementRef; - @ViewChild('auto') public matAutocomplete!: MatAutocomplete; - @Input() public singleOutput: boolean = false; - @Input() public autocompleteType!: ProjectAutocompleteType; - @Output() public selectionChanged: EventEmitter< - GrantedProject.AsObject[] - | GrantedProject.AsObject - | Project.AsObject - | Project.AsObject[] - > = new EventEmitter(); + public selectable: boolean = true; + public removable: boolean = true; + public addOnBlur: boolean = true; + public separatorKeysCodes: number[] = [ENTER, COMMA]; + public myControl: FormControl = new FormControl(); + public names: string[] = []; + public projects: Array = []; + public filteredProjects: Array = []; + public isLoading: boolean = false; + @ViewChild('nameInput') public nameInput!: ElementRef; + @ViewChild('auto') public matAutocomplete!: MatAutocomplete; + @Input() public singleOutput: boolean = false; + @Input() public autocompleteType!: ProjectAutocompleteType; + @Output() public selectionChanged: EventEmitter< + GrantedProject.AsObject[] + | GrantedProject.AsObject + | Project.AsObject + | Project.AsObject[] + > = new EventEmitter(); - private unsubscribed$: Subject = new Subject(); - constructor(private mgmtService: ManagementService) { - this.myControl.valueChanges - .pipe( - takeUntil(this.unsubscribed$), - debounceTime(200), - tap(() => this.isLoading = true), - switchMap(value => { - const query = new ProjectQuery(); - const nameQuery = new ProjectNameQuery(); - nameQuery.setName(value); - nameQuery.setMethod(TextQueryMethod.TEXT_QUERY_METHOD_CONTAINS_IGNORE_CASE); - query.setNameQuery(nameQuery); + private unsubscribed$: Subject = new Subject(); + constructor(private mgmtService: ManagementService) { + this.myControl.valueChanges + .pipe( + takeUntil(this.unsubscribed$), + debounceTime(200), + tap(() => this.isLoading = true), + switchMap(value => { + const query = new ProjectQuery(); + const nameQuery = new ProjectNameQuery(); + nameQuery.setName(value); + nameQuery.setMethod(TextQueryMethod.TEXT_QUERY_METHOD_CONTAINS_IGNORE_CASE); + query.setNameQuery(nameQuery); - switch (this.autocompleteType) { - case ProjectAutocompleteType.PROJECT_GRANTED: - return from(this.mgmtService.listGrantedProjects(10, 0, [query])); - case ProjectAutocompleteType.PROJECT_OWNED: - return from(this.mgmtService.listProjects(10, 0, [query])); - default: - return forkJoin([ - from(this.mgmtService.listGrantedProjects(10, 0, [query])), - from(this.mgmtService.listProjects(10, 0, [query])), - ]); - } - }), - ).subscribe((returnValue) => { - switch (this.autocompleteType) { - case ProjectAutocompleteType.PROJECT_GRANTED: - this.isLoading = false; - this.filteredProjects = [...(returnValue as ListProjectGrantsResponse.AsObject).resultList]; - break; - case ProjectAutocompleteType.PROJECT_OWNED: - this.isLoading = false; - this.filteredProjects = [...(returnValue as ListProjectsResponse.AsObject).resultList]; - break; - default: - this.isLoading = false; - this.filteredProjects = [ - ...(returnValue as (ListProjectsResponse.AsObject | ListProjectGrantsResponse.AsObject)[])[0] - .resultList, - ...(returnValue as (ListProjectsResponse.AsObject | ListProjectGrantsResponse.AsObject)[])[1] - .resultList, - ]; - break; - } - }); - } - - public ngOnDestroy(): void { - this.unsubscribed$.next(); - } - - public displayFn(project?: any): string | undefined { - return (project && project.projectName) ? `${project.projectName}` : - (project && project.name) ? `${project.name}` : undefined; - } - - public add(event: MatChipInputEvent): void { - if (!this.matAutocomplete.isOpen) { - const input = event.input; - const value = event.value; - - if ((value || '').trim()) { - const index = this.filteredProjects.findIndex((project) => { - if (project?.projectName) { - return project.projectName === value; - } else if (project?.name) { - return project.name === value; - } - }); - if (index > -1) { - if (this.projects && this.projects.length > 0) { - this.projects.push(this.filteredProjects[index]); - } else { - this.projects = [this.filteredProjects[index]]; - } - } - } - - if (input) { - input.value = ''; - } + switch (this.autocompleteType) { + case ProjectAutocompleteType.PROJECT_GRANTED: + return from(this.mgmtService.listGrantedProjects(10, 0, [query])); + case ProjectAutocompleteType.PROJECT_OWNED: + return from(this.mgmtService.listProjects(10, 0, [query])); + default: + return forkJoin([ + from(this.mgmtService.listGrantedProjects(10, 0, [query])), + from(this.mgmtService.listProjects(10, 0, [query])), + ]); + } + }), + ).subscribe((returnValue) => { + switch (this.autocompleteType) { + case ProjectAutocompleteType.PROJECT_GRANTED: + this.isLoading = false; + this.filteredProjects = [...(returnValue as ListProjectGrantsResponse.AsObject).resultList]; + break; + case ProjectAutocompleteType.PROJECT_OWNED: + this.isLoading = false; + this.filteredProjects = [...(returnValue as ListProjectsResponse.AsObject).resultList]; + break; + default: + this.isLoading = false; + this.filteredProjects = [ + ...(returnValue as (ListProjectsResponse.AsObject | ListProjectGrantsResponse.AsObject)[])[0] + .resultList, + ...(returnValue as (ListProjectsResponse.AsObject | ListProjectGrantsResponse.AsObject)[])[1] + .resultList, + ]; + break; } - } + }); + } - public remove(project: GrantedProject.AsObject): void { - const index = this.projects.indexOf(project); + public ngOnDestroy(): void { + this.unsubscribed$.next(); + } - if (index >= 0) { - this.projects.splice(index, 1); + public displayFn(project?: any): string | undefined { + return (project && project.projectName) ? `${project.projectName}` : + (project && project.name) ? `${project.name}` : undefined; + } + + public add(event: MatChipInputEvent): void { + if (!this.matAutocomplete.isOpen) { + const input = event.chipInput?.inputElement; + const value = event.value; + + if ((value || '').trim()) { + const index = this.filteredProjects.findIndex((project) => { + if (project?.projectName) { + return project.projectName === value; + } else if (project?.name) { + return project.name === value; + } + }); + if (index > -1) { + if (this.projects && this.projects.length > 0) { + this.projects.push(this.filteredProjects[index]); + } else { + this.projects = [this.filteredProjects[index]]; + } } - } + } - public selected(event: MatAutocompleteSelectedEvent): void { - if (this.singleOutput) { - this.selectionChanged.emit(event.option.value); - } else { - if (this.projects && this.projects.length > 0) { - this.projects.push(event.option.value); - } else { - this.projects = [event.option.value]; - } - this.selectionChanged.emit(this.projects); - - this.nameInput.nativeElement.value = ''; - this.myControl.setValue(null); - } + if (input) { + input.value = ''; + } } + } + + public remove(project: GrantedProject.AsObject): void { + const index = this.projects.indexOf(project); + + if (index >= 0) { + this.projects.splice(index, 1); + } + } + + public selected(event: MatAutocompleteSelectedEvent): void { + if (this.singleOutput) { + this.selectionChanged.emit(event.option.value); + } else { + if (this.projects && this.projects.length > 0) { + this.projects.push(event.option.value); + } else { + this.projects = [event.option.value]; + } + this.selectionChanged.emit(this.projects); + + this.nameInput.nativeElement.value = ''; + this.myControl.setValue(null); + } + } } diff --git a/console/src/app/modules/search-roles-autocomplete/search-roles-autocomplete.component.ts b/console/src/app/modules/search-roles-autocomplete/search-roles-autocomplete.component.ts index ec69459ca5..471583a7a2 100644 --- a/console/src/app/modules/search-roles-autocomplete/search-roles-autocomplete.component.ts +++ b/console/src/app/modules/search-roles-autocomplete/search-roles-autocomplete.component.ts @@ -10,113 +10,113 @@ import { ManagementService } from 'src/app/services/mgmt.service'; @Component({ - selector: 'app-search-roles-autocomplete', - templateUrl: './search-roles-autocomplete.component.html', - styleUrls: ['./search-roles-autocomplete.component.scss'], + selector: 'app-search-roles-autocomplete', + templateUrl: './search-roles-autocomplete.component.html', + styleUrls: ['./search-roles-autocomplete.component.scss'], }) export class SearchRolesAutocompleteComponent implements OnDestroy { - public selectable: boolean = true; - public removable: boolean = true; - public addOnBlur: boolean = true; - public separatorKeysCodes: number[] = [ENTER, COMMA]; - public myControl: FormControl = new FormControl(); - public names: string[] = []; - public roles: Array = []; - public filteredRoles: Array = []; - public isLoading: boolean = false; - @ViewChild('nameInput') public nameInput!: ElementRef; - @ViewChild('auto') public matAutocomplete!: MatAutocomplete; - @Input() public projectId: string = ''; - @Input() public singleOutput: boolean = false; - @Output() public selectionChanged: EventEmitter = new EventEmitter(); + public selectable: boolean = true; + public removable: boolean = true; + public addOnBlur: boolean = true; + public separatorKeysCodes: number[] = [ENTER, COMMA]; + public myControl: FormControl = new FormControl(); + public names: string[] = []; + public roles: Array = []; + public filteredRoles: Array = []; + public isLoading: boolean = false; + @ViewChild('nameInput') public nameInput!: ElementRef; + @ViewChild('auto') public matAutocomplete!: MatAutocomplete; + @Input() public projectId: string = ''; + @Input() public singleOutput: boolean = false; + @Output() public selectionChanged: EventEmitter = new EventEmitter(); - private unsubscribed$: Subject = new Subject(); - constructor(private mgmtService: ManagementService) { - this.myControl.valueChanges - .pipe( - takeUntil(this.unsubscribed$), - debounceTime(200), - tap(() => this.isLoading = true), - switchMap(value => { - const query = new RoleQuery(); + private unsubscribed$: Subject = new Subject(); + constructor(private mgmtService: ManagementService) { + this.myControl.valueChanges + .pipe( + takeUntil(this.unsubscribed$), + debounceTime(200), + tap(() => this.isLoading = true), + switchMap(value => { + const query = new RoleQuery(); - // const key = new RoleKeyQuery(); - // key.setKey(key) - // query.setKey(key) + // const key = new RoleKeyQuery(); + // key.setKey(key) + // query.setKey(key) - const dQuery = new RoleDisplayNameQuery(); - dQuery.setDisplayName(value); - query.setDisplayNameQuery(dQuery); + const dQuery = new RoleDisplayNameQuery(); + dQuery.setDisplayName(value); + query.setDisplayNameQuery(dQuery); - return from(this.mgmtService.listProjectRoles(this.projectId, 10, 0, [query])); - }), - ).subscribe((resp) => { - this.isLoading = false; - this.filteredRoles = resp.resultList; - }, error => { - this.isLoading = false; - }); - } + return from(this.mgmtService.listProjectRoles(this.projectId, 10, 0, [query])); + }), + ).subscribe((resp) => { + this.isLoading = false; + this.filteredRoles = resp.resultList; + }, error => { + this.isLoading = false; + }); + } - public ngOnDestroy(): void { - this.unsubscribed$.next(); - } + public ngOnDestroy(): void { + this.unsubscribed$.next(); + } - public displayFn(project?: Role.AsObject): string | undefined { - return project ? `${project.displayName}` : undefined; - } + public displayFn(project?: Role.AsObject): string | undefined { + return project ? `${project.displayName}` : undefined; + } - public add(event: MatChipInputEvent): void { - if (!this.matAutocomplete.isOpen) { - const input = event.input; - const value = event.value; + public add(event: MatChipInputEvent): void { + if (!this.matAutocomplete.isOpen) { + const input = event.chipInput?.inputElement; + const value = event.value; - if ((value || '').trim()) { - const index = this.filteredRoles.findIndex((role) => { - if (role.key) { - return role.key === value; - } - }); - if (index > -1) { - if (this.roles && this.roles.length > 0) { - this.roles.push(this.filteredRoles[index]); - } else { - this.roles = [this.filteredRoles[index]]; - } - } - } - - if (input) { - input.value = ''; - } + if ((value || '').trim()) { + const index = this.filteredRoles.findIndex((role) => { + if (role.key) { + return role.key === value; + } + }); + if (index > -1) { + if (this.roles && this.roles.length > 0) { + this.roles.push(this.filteredRoles[index]); + } else { + this.roles = [this.filteredRoles[index]]; + } } + } + + if (input) { + input.value = ''; + } } + } - public remove(role: Role.AsObject): void { - const index = this.roles.indexOf(role); - - if (index >= 0) { - this.roles.splice(index, 1); - } - } - - public selected(event: MatAutocompleteSelectedEvent): void { - const index = this.filteredRoles.findIndex((role) => role.key === event.option.value); - if (index !== -1) { - if (this.singleOutput) { - this.selectionChanged.emit(this.filteredRoles[index]); - } else { - if (this.roles && this.roles.length > 0) { - this.roles.push(this.filteredRoles[index]); - } else { - this.roles = [this.filteredRoles[index]]; - } - this.selectionChanged.emit(this.roles); - - this.nameInput.nativeElement.value = ''; - this.myControl.setValue(null); - } + public remove(role: Role.AsObject): void { + const index = this.roles.indexOf(role); + if (index >= 0) { + this.roles.splice(index, 1); + } + } + + public selected(event: MatAutocompleteSelectedEvent): void { + const index = this.filteredRoles.findIndex((role) => role.key === event.option.value); + if (index !== -1) { + if (this.singleOutput) { + this.selectionChanged.emit(this.filteredRoles[index]); + } else { + if (this.roles && this.roles.length > 0) { + this.roles.push(this.filteredRoles[index]); + } else { + this.roles = [this.filteredRoles[index]]; } + this.selectionChanged.emit(this.roles); + + this.nameInput.nativeElement.value = ''; + this.myControl.setValue(null); + } + } + } } diff --git a/console/src/app/modules/search-user-autocomplete/search-user-autocomplete.component.ts b/console/src/app/modules/search-user-autocomplete/search-user-autocomplete.component.ts index 2a01b1eb35..631a0fb77b 100644 --- a/console/src/app/modules/search-user-autocomplete/search-user-autocomplete.component.ts +++ b/console/src/app/modules/search-user-autocomplete/search-user-autocomplete.component.ts @@ -1,14 +1,14 @@ import { COMMA, ENTER } from '@angular/cdk/keycodes'; import { - AfterContentChecked, - ChangeDetectorRef, - Component, - ElementRef, - EventEmitter, - Input, - OnInit, - Output, - ViewChild, + AfterContentChecked, + ChangeDetectorRef, + Component, + ElementRef, + EventEmitter, + Input, + OnInit, + Output, + ViewChild, } from '@angular/core'; import { FormControl } from '@angular/forms'; import { MatAutocomplete, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; @@ -22,163 +22,163 @@ import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; export enum UserTarget { - SELF = 'self', - EXTERNAL = 'external', + SELF = 'self', + EXTERNAL = 'external', } @Component({ - selector: 'app-search-user-autocomplete', - templateUrl: './search-user-autocomplete.component.html', - styleUrls: ['./search-user-autocomplete.component.scss'], + selector: 'app-search-user-autocomplete', + templateUrl: './search-user-autocomplete.component.html', + styleUrls: ['./search-user-autocomplete.component.scss'], }) export class SearchUserAutocompleteComponent implements OnInit, AfterContentChecked { - public selectable: boolean = true; - public removable: boolean = true; - public addOnBlur: boolean = true; - public separatorKeysCodes: number[] = [ENTER, COMMA]; + public selectable: boolean = true; + public removable: boolean = true; + public addOnBlur: boolean = true; + public separatorKeysCodes: number[] = [ENTER, COMMA]; - public myControl: FormControl = new FormControl(); - public globalLoginNameControl: FormControl = new FormControl(); + public myControl: FormControl = new FormControl(); + public globalLoginNameControl: FormControl = new FormControl(); - public loginNames: string[] = []; - @Input() public users: Array = []; - public filteredUsers: Array = []; - public isLoading: boolean = false; - @Input() public target: UserTarget = UserTarget.SELF; - public hint: string = ''; - public UserTarget: any = UserTarget; - @ViewChild('usernameInput') public usernameInput!: ElementRef; - @ViewChild('auto') public matAutocomplete!: MatAutocomplete; - @Output() public selectionChanged: EventEmitter = new EventEmitter(); - @Input() public singleOutput: boolean = false; + public loginNames: string[] = []; + @Input() public users: Array = []; + public filteredUsers: Array = []; + public isLoading: boolean = false; + @Input() public target: UserTarget = UserTarget.SELF; + public hint: string = ''; + public UserTarget: any = UserTarget; + @ViewChild('usernameInput') public usernameInput!: ElementRef; + @ViewChild('auto') public matAutocomplete!: MatAutocomplete; + @Output() public selectionChanged: EventEmitter = new EventEmitter(); + @Input() public singleOutput: boolean = false; - private unsubscribed$: Subject = new Subject(); - constructor(private userService: ManagementService, private toast: ToastService, private cdref: ChangeDetectorRef) { } + private unsubscribed$: Subject = new Subject(); + constructor(private userService: ManagementService, private toast: ToastService, private cdref: ChangeDetectorRef) { } - public ngOnInit(): void { - if (this.target === UserTarget.EXTERNAL) { - this.filteredUsers = []; - this.unsubscribed$.next(); // clear old subscription - } else if (this.target === UserTarget.SELF) { - this.getFilteredResults(); // new subscription - } + public ngOnInit(): void { + if (this.target === UserTarget.EXTERNAL) { + this.filteredUsers = []; + this.unsubscribed$.next(); // clear old subscription + } else if (this.target === UserTarget.SELF) { + this.getFilteredResults(); // new subscription } + } - public ngAfterContentChecked(): void { - this.cdref.detectChanges(); - } + public ngAfterContentChecked(): void { + this.cdref.detectChanges(); + } - private getFilteredResults(): void { - this.myControl.valueChanges.pipe(debounceTime(200), - takeUntil(this.unsubscribed$), - tap(() => this.isLoading = true), - switchMap(value => { - const query = new SearchQuery(); + private getFilteredResults(): void { + this.myControl.valueChanges.pipe(debounceTime(200), + takeUntil(this.unsubscribed$), + tap(() => this.isLoading = true), + switchMap(value => { + const query = new SearchQuery(); - const unQuery = new UserNameQuery(); - unQuery.setMethod(TextQueryMethod.TEXT_QUERY_METHOD_CONTAINS_IGNORE_CASE); - unQuery.setUserName(value); + const unQuery = new UserNameQuery(); + unQuery.setMethod(TextQueryMethod.TEXT_QUERY_METHOD_CONTAINS_IGNORE_CASE); + unQuery.setUserName(value); - query.setUserNameQuery(unQuery); + query.setUserNameQuery(unQuery); - if (this.target === UserTarget.SELF) { - return from(this.userService.listUsers(10, 0, [query])); - } else { - return of(); - } - }), - ).subscribe((userresp: ListUsersResponse.AsObject | unknown) => { - this.isLoading = false; - if (this.target === UserTarget.SELF && userresp) { - this.filteredUsers = (userresp as ListUsersResponse.AsObject).resultList; - } - }); - } - - public displayFn(user?: User.AsObject): string | undefined { - return user ? `${user.preferredLoginName}` : undefined; - } - - public add(event: MatChipInputEvent): void { - if (!this.matAutocomplete.isOpen) { - const input = event.input; - const value = event.value; - - if ((value || '').trim()) { - const index = this.filteredUsers.findIndex((user) => { - if (user.preferredLoginName) { - return user.preferredLoginName === value; - } - }); - if (index > -1) { - if (this.users && this.users.length > 0) { - this.users.push(this.filteredUsers[index]); - } else { - this.users = [this.filteredUsers[index]]; - } - } - } - - if (input) { - input.value = ''; - } - } - } - - public remove(user: User.AsObject): void { - const index = this.users.indexOf(user); - - if (index >= 0) { - this.users.splice(index, 1); - this.selectionChanged.emit(this.users); - } - } - - public selected(event: MatAutocompleteSelectedEvent): void { - const index = this.filteredUsers.findIndex((user) => user === event.option.value); - if (index !== -1) { - if (this.singleOutput) { - this.selectionChanged.emit(this.filteredUsers[index]); - } else { - if (this.users && this.users.length > 0) { - this.users.push(this.filteredUsers[index]); - } else { - this.users = [this.filteredUsers[index]]; - } - - if (this.singleOutput) { - this.selectionChanged.emit(this.users[0]); - } else { - this.selectionChanged.emit(this.users); - } - this.usernameInput.nativeElement.value = ''; - this.myControl.setValue(null); - } - } - } - - public changeTarget(): void { if (this.target === UserTarget.SELF) { - this.target = UserTarget.EXTERNAL; - this.filteredUsers = []; - this.unsubscribed$.next(); // clear old subscription - } else if (this.target === UserTarget.EXTERNAL) { - this.target = UserTarget.SELF; - this.getFilteredResults(); // new subscription + return from(this.userService.listUsers(10, 0, [query])); + } else { + return of(); } - } + }), + ).subscribe((userresp: ListUsersResponse.AsObject | unknown) => { + this.isLoading = false; + if (this.target === UserTarget.SELF && userresp) { + this.filteredUsers = (userresp as ListUsersResponse.AsObject).resultList; + } + }); + } - public getGlobalUser(): void { - this.userService.getUserByLoginNameGlobal(this.globalLoginNameControl.value).then(resp => { - if (this.singleOutput && resp.user) { - this.users = [resp.user]; - this.selectionChanged.emit(this.users[0]); - } else if (resp.user) { - this.users.push(resp.user); - this.selectionChanged.emit(this.users); - } - }).catch(error => { - this.toast.showError(error); + public displayFn(user?: User.AsObject): string | undefined { + return user ? `${user.preferredLoginName}` : undefined; + } + + public add(event: MatChipInputEvent): void { + if (!this.matAutocomplete.isOpen) { + const input = event.chipInput?.inputElement; + const value = event.value; + + if ((value || '').trim()) { + const index = this.filteredUsers.findIndex((user) => { + if (user.preferredLoginName) { + return user.preferredLoginName === value; + } }); + if (index > -1) { + if (this.users && this.users.length > 0) { + this.users.push(this.filteredUsers[index]); + } else { + this.users = [this.filteredUsers[index]]; + } + } + } + + if (input) { + input.value = ''; + } } + } + + public remove(user: User.AsObject): void { + const index = this.users.indexOf(user); + + if (index >= 0) { + this.users.splice(index, 1); + this.selectionChanged.emit(this.users); + } + } + + public selected(event: MatAutocompleteSelectedEvent): void { + const index = this.filteredUsers.findIndex((user) => user === event.option.value); + if (index !== -1) { + if (this.singleOutput) { + this.selectionChanged.emit(this.filteredUsers[index]); + } else { + if (this.users && this.users.length > 0) { + this.users.push(this.filteredUsers[index]); + } else { + this.users = [this.filteredUsers[index]]; + } + + if (this.singleOutput) { + this.selectionChanged.emit(this.users[0]); + } else { + this.selectionChanged.emit(this.users); + } + this.usernameInput.nativeElement.value = ''; + this.myControl.setValue(null); + } + } + } + + public changeTarget(): void { + if (this.target === UserTarget.SELF) { + this.target = UserTarget.EXTERNAL; + this.filteredUsers = []; + this.unsubscribed$.next(); // clear old subscription + } else if (this.target === UserTarget.EXTERNAL) { + this.target = UserTarget.SELF; + this.getFilteredResults(); // new subscription + } + } + + public getGlobalUser(): void { + this.userService.getUserByLoginNameGlobal(this.globalLoginNameControl.value).then(resp => { + if (this.singleOutput && resp.user) { + this.users = [resp.user]; + this.selectionChanged.emit(this.users[0]); + } else if (resp.user) { + this.users.push(resp.user); + this.selectionChanged.emit(this.users); + } + }).catch(error => { + this.toast.showError(error); + }); + } } diff --git a/console/src/app/services/upload.service.ts b/console/src/app/services/asset.service.ts similarity index 66% rename from console/src/app/services/upload.service.ts rename to console/src/app/services/asset.service.ts index 67fbc41d5d..ffb5179910 100644 --- a/console/src/app/services/upload.service.ts +++ b/console/src/app/services/asset.service.ts @@ -1,6 +1,8 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { PolicyComponentServiceType } from '../modules/policies/policy-component-types.enum'; +import { Theme } from '../modules/policies/private-labeling-policy/private-labeling-policy.component'; import { Org } from '../proto/generated/zitadel/org_pb'; import { StorageService } from './storage.service'; @@ -11,22 +13,12 @@ const orgKey = 'x-zitadel-orgid'; const bearerPrefix = 'Bearer'; const accessTokenStorageKey = 'access_token'; -export enum UploadEndpoint { - IAMFONT = 'iam/policy/label/font', - MGMTFONT = 'org/policy/label/font', - - IAMDARKLOGO = 'iam/policy/label/logo/dark', - IAMLIGHTLOGO = 'iam/policy/label/logo', - IAMDARKICON = 'iam/policy/label/icon/dark', - IAMLIGHTICON = 'iam/policy/label/icon', - - MGMTDARKLOGO = 'org/policy/label/logo/dark', - MGMTLIGHTLOGO = 'org/policy/label/logo', - MGMTDARKICON = 'org/policy/label/icon/dark', - MGMTLIGHTICON = 'org/policy/label/icon', +export enum AssetType { + LOGO, + ICON, } -export enum DownloadEndpoint { +export enum AssetEndpoint { IAMFONT = 'iam/policy/label/font', MGMTFONT = 'org/policy/label/font', @@ -51,10 +43,33 @@ export enum DownloadEndpoint { MGMTICONPREVIEW = 'org/policy/label/icon/_preview', } +export const ENDPOINT = { + [Theme.DARK]: { + [PolicyComponentServiceType.ADMIN]: { + [AssetType.LOGO]: AssetEndpoint.IAMDARKLOGO, + [AssetType.ICON]: AssetEndpoint.IAMDARKICON, + }, + [PolicyComponentServiceType.MGMT]: { + [AssetType.LOGO]: AssetEndpoint.MGMTDARKLOGO, + [AssetType.ICON]: AssetEndpoint.MGMTDARKICON, + }, + }, + [Theme.LIGHT]: { + [PolicyComponentServiceType.ADMIN]: { + [AssetType.LOGO]: AssetEndpoint.IAMLOGO, + [AssetType.ICON]: AssetEndpoint.IAMICON, + }, + [PolicyComponentServiceType.MGMT]: { + [AssetType.LOGO]: AssetEndpoint.MGMTLOGO, + [AssetType.ICON]: AssetEndpoint.MGMTICON, + }, + }, +}; + @Injectable({ providedIn: 'root', }) -export class UploadService { +export class AssetService { private serviceUrl: string = ''; private accessToken: string = ''; private org!: Org.AsObject; @@ -81,7 +96,7 @@ export class UploadService { }); } - public upload(endpoint: UploadEndpoint, body: any): Promise { + public upload(endpoint: AssetEndpoint, body: any): Promise { return this.http.post(`${this.serviceUrl}/assets/v1/${endpoint}`, body, { @@ -103,4 +118,14 @@ export class UploadService { }, }).toPromise(); } + + public delete(endpoint: AssetEndpoint): Promise { + return this.http.delete(`${this.serviceUrl}/assets/v1/${endpoint}`, + { + headers: { + [authorizationKey]: `${bearerPrefix} ${this.accessToken}`, + [orgKey]: `${this.org.id}`, + }, + }).toPromise(); + } } diff --git a/console/src/app/services/mgmt.service.ts b/console/src/app/services/mgmt.service.ts index 7b9800580d..df6522e74b 100644 --- a/console/src/app/services/mgmt.service.ts +++ b/console/src/app/services/mgmt.service.ts @@ -12,6 +12,8 @@ import { RemoveLabelPolicyIconResponse, RemoveLabelPolicyLogoDarkRequest, RemoveLabelPolicyLogoDarkResponse, + RemoveLabelPolicyLogoRequest, + RemoveLabelPolicyLogoResponse, } from '../proto/generated/zitadel/admin_pb'; import { AppQuery } from '../proto/generated/zitadel/app_pb'; import { KeyType } from '../proto/generated/zitadel/auth_n_key_pb'; @@ -212,8 +214,6 @@ import { RemoveAppKeyResponse, RemoveAppRequest, RemoveAppResponse, - RemoveCustomLabelPolicyLogoRequest, - RemoveCustomLabelPolicyLogoResponse, RemoveHumanAuthFactorOTPRequest, RemoveHumanAuthFactorOTPResponse, RemoveHumanAuthFactorU2FRequest, @@ -783,31 +783,31 @@ export class ManagementService { public removeLabelPolicyFont(): Promise { const req = new RemoveLabelPolicyFontRequest(); - return this.grpcService.admin.removeLabelPolicyFont(req, null).then(resp => resp.toObject()); + return this.grpcService.mgmt.removeCustomLabelPolicyFont(req, null).then(resp => resp.toObject()); } public removeLabelPolicyIcon(): Promise { const req = new RemoveLabelPolicyIconRequest(); - return this.grpcService.admin.removeLabelPolicyIcon(req, null).then(resp => resp.toObject()); + return this.grpcService.mgmt.removeCustomLabelPolicyIcon(req, null).then(resp => resp.toObject()); } public removeLabelPolicyIconDark(): Promise { const req = new RemoveLabelPolicyIconDarkRequest(); - return this.grpcService.admin.removeLabelPolicyIconDark(req, null).then(resp => resp.toObject()); + return this.grpcService.mgmt.removeCustomLabelPolicyIconDark(req, null).then(resp => resp.toObject()); } - public removeCustomLabelPolicyLogo(): - Promise { - const req = new RemoveCustomLabelPolicyLogoRequest(); + public removeLabelPolicyLogo(): + Promise { + const req = new RemoveLabelPolicyLogoRequest(); return this.grpcService.mgmt.removeCustomLabelPolicyLogo(req, null).then(resp => resp.toObject()); } public removeLabelPolicyLogoDark(): Promise { const req = new RemoveLabelPolicyLogoDarkRequest(); - return this.grpcService.admin.removeLabelPolicyLogoDark(req, null).then(resp => resp.toObject()); + return this.grpcService.mgmt.removeCustomLabelPolicyLogoDark(req, null).then(resp => resp.toObject()); } public getOrgIAMPolicy(): Promise { diff --git a/console/src/assets/environment.json b/console/src/assets/environment.json index 1648861c16..6b55ee86b3 100644 --- a/console/src/assets/environment.json +++ b/console/src/assets/environment.json @@ -1,9 +1,9 @@ { - "authServiceUrl": "https://api.zitadel.io", - "mgmtServiceUrl": "https://api.zitadel.io", - "adminServiceUrl":"https://api.zitadel.io", - "subscriptionServiceUrl":"https://sub.zitadel.io", - "uploadServiceUrl":"https://api.zitadel.io", - "issuer": "https://issuer.zitadel.io", - "clientid": "69234247558357051@zitadel" + "authServiceUrl": "https://api.zitadel.dev", + "mgmtServiceUrl": "https://api.zitadel.dev", + "adminServiceUrl":"https://api.zitadel.dev", + "subscriptionServiceUrl":"https://sub.zitadel.dev", + "uploadServiceUrl":"https://api.zitadel.dev", + "issuer": "https://issuer.zitadel.dev", + "clientid": "70669160379706195@zitadel" } diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index 0a0f7ac29b..39e1e5ba7f 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -718,6 +718,7 @@ "SET": "Richtline erfolgreich gesetzt!", "RESETSUCCESS": "Richtline zurückgesetzt!", "UPLOADSUCCESS": "Upload erfolgreich", + "DELETESUCCESS": "Löschen erfolgreich", "UPLOADFAILED":"Upload fehlgeschlagen!" } }, diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index fc41c43858..d9b9d838c4 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -720,6 +720,7 @@ "SET": "Policy set successfully!", "RESETSUCCESS": "Policy reset successfully!", "UPLOADSUCCESS": "Uploaded successfully!", + "DELETESUCCESS": "Deleted successfully!", "UPLOADFAILED":"Upload failed!" } }, diff --git a/internal/ui/login/static/resources/themes/scss/styles/button/button_base.scss b/internal/ui/login/static/resources/themes/scss/styles/button/button_base.scss index b102dac308..94fab3de84 100644 --- a/internal/ui/login/static/resources/themes/scss/styles/button/button_base.scss +++ b/internal/ui/login/static/resources/themes/scss/styles/button/button_base.scss @@ -14,7 +14,7 @@ $lgn-stroked-button-border-width: 1px; $lgn-icon-button-size: 40px !default; $lgn-icon-button-border-radius: 50% !default; -$lgn-icon-button-line-height: 24px !default; +$lgn-icon-button-line-height: 40px !default; // adds base styles to all button types. @mixin lgn-button-base { diff --git a/internal/ui/login/static/resources/themes/scss/styles/container/container.scss b/internal/ui/login/static/resources/themes/scss/styles/container/container.scss index c6c0fed862..87e9eab568 100644 --- a/internal/ui/login/static/resources/themes/scss/styles/container/container.scss +++ b/internal/ui/login/static/resources/themes/scss/styles/container/container.scss @@ -100,7 +100,8 @@ $lgn-container-bottom-margin: 50px; .lgn-left-action { position: absolute; left: 1rem; - top: -40px; + top: -75px; + transform: translateY(-50%); } .lgn-register-options { diff --git a/internal/ui/login/static/resources/themes/scss/styles/footer/footer.scss b/internal/ui/login/static/resources/themes/scss/styles/footer/footer.scss index d141ec7700..04170b2cc7 100644 --- a/internal/ui/login/static/resources/themes/scss/styles/footer/footer.scss +++ b/internal/ui/login/static/resources/themes/scss/styles/footer/footer.scss @@ -30,8 +30,6 @@ footer { .watermark { display: flex; - position: relative; - width: 100%; .powered { font-size: 12px; @@ -39,9 +37,9 @@ footer { } .lgn-logo-watermark { - height: 34px; - width: 125px; - margin: 2px; + height: 40px; + min-width: 125px; + margin: auto 2px; } } diff --git a/internal/ui/login/static/resources/themes/scss/styles/footer/footer_theme.scss b/internal/ui/login/static/resources/themes/scss/styles/footer/footer_theme.scss index 8fe41b69d0..52738789b0 100644 --- a/internal/ui/login/static/resources/themes/scss/styles/footer/footer_theme.scss +++ b/internal/ui/login/static/resources/themes/scss/styles/footer/footer_theme.scss @@ -18,8 +18,8 @@ } .lgn-logo-watermark { - background: var(--zitadel-logo-powered-by); - background-position: auto; + background: var(--zitadel-logo-powered-by) no-repeat; + background-position: center; background-size: contain; } } diff --git a/internal/ui/login/static/resources/themes/scss/styles/header/header.scss b/internal/ui/login/static/resources/themes/scss/styles/header/header.scss index 433e6a53d5..0691e5bc33 100644 --- a/internal/ui/login/static/resources/themes/scss/styles/header/header.scss +++ b/internal/ui/login/static/resources/themes/scss/styles/header/header.scss @@ -1,16 +1,22 @@ $lgn-header-padding: 0; -$lgn-header-margin: 1rem auto .5rem auto; +$lgn-header-margin: auto; .lgn-header { - display: block; + display: flex; position: relative; margin: $lgn-header-margin; padding: $lgn-header-padding; - width: 100%; + max-width: 250px; + min-height: 150px; + align-items: center; + justify-content: center; .lgn-logo { display: block; - max-height: 100px; + height: 100px; margin: 0 auto; + max-width: 250px; + max-height: 150px; + object-fit: contain; } } diff --git a/internal/ui/login/static/resources/themes/scss/styles/vars.scss b/internal/ui/login/static/resources/themes/scss/styles/vars.scss index cc9fb64430..549711cda7 100644 --- a/internal/ui/login/static/resources/themes/scss/styles/vars.scss +++ b/internal/ui/login/static/resources/themes/scss/styles/vars.scss @@ -91,6 +91,7 @@ --zitadel-color-raised-button-background: var(--zitadel-color-white); + --zitadel-color-white: #ffffff; --zitadel-color-black: #000000; --zitadel-color-grey-50: #fafafa; --zitadel-color-grey-100: #f5f5f5; @@ -109,8 +110,8 @@ --zitadel-color-google-text: #8b8d8d; --zitadel-color-google-background: #ffffff; - --zitadel-color-qr: var(--zitadel-color-white); - --zitadel-color-qr-background: var(--zitadel-color-black); + --zitadel-color-qr: var(--zitadel-color-black); + --zitadel-color-qr-background: var(--zitadel-color-white); } .lgn-dark-theme { diff --git a/internal/ui/login/static/resources/themes/zitadel/css/zitadel.css b/internal/ui/login/static/resources/themes/zitadel/css/zitadel.css index 87c2154b69..cb6788de43 100644 --- a/internal/ui/login/static/resources/themes/zitadel/css/zitadel.css +++ b/internal/ui/login/static/resources/themes/zitadel/css/zitadel.css @@ -77,6 +77,7 @@ --zitadel-color-button-selected-background: var(--zitadel-color-grey-900); --zitadel-color-button-disabled-selected-background: var(--zitadel-color-grey-800); --zitadel-color-raised-button-background: var(--zitadel-color-white); + --zitadel-color-white: #ffffff; --zitadel-color-black: #000000; --zitadel-color-grey-50: #fafafa; --zitadel-color-grey-100: #f5f5f5; @@ -92,8 +93,8 @@ --zitadel-logo-powered-by: url("../logo-dark.svg"); --zitadel-color-google-text: #8b8d8d; --zitadel-color-google-background: #ffffff; - --zitadel-color-qr: var(--zitadel-color-white); - --zitadel-color-qr-background: var(--zitadel-color-black); + --zitadel-color-qr: var(--zitadel-color-black); + --zitadel-color-qr-background: var(--zitadel-color-white); } .lgn-dark-theme { @@ -221,30 +222,34 @@ footer a { } footer .watermark { display: flex; - position: relative; - width: 100%; } footer .watermark .powered { font-size: 12px; margin: auto 2px; } footer .watermark .lgn-logo-watermark { - height: 34px; - width: 125px; - margin: 2px; + height: 40px; + min-width: 125px; + margin: auto 2px; } .lgn-header { - display: block; + display: flex; position: relative; - margin: 1rem auto 0.5rem auto; + margin: auto; padding: 0; - width: 100%; + max-width: 250px; + min-height: 150px; + align-items: center; + justify-content: center; } .lgn-header .lgn-logo { display: block; - max-height: 100px; + height: 100px; margin: 0 auto; + max-width: 250px; + max-height: 150px; + object-fit: contain; } .lgn-button, .lgn-stroked-button, .lgn-icon-button { @@ -310,7 +315,7 @@ footer .watermark .lgn-logo-watermark { border-radius: 50%; } .lgn-icon-button i, .lgn-icon-button .mat-icon { - line-height: 24px; + line-height: 40px; } .lgn-stroked-button { @@ -621,7 +626,8 @@ a.block { .content-container .lgn-left-action { position: absolute; left: 1rem; - top: -40px; + top: -75px; + transform: translateY(-50%); } .content-container .lgn-register-options { display: flex; @@ -1105,30 +1111,34 @@ footer a { } footer .watermark { display: flex; - position: relative; - width: 100%; } footer .watermark .powered { font-size: 12px; margin: auto 2px; } footer .watermark .lgn-logo-watermark { - height: 34px; - width: 125px; - margin: 2px; + height: 40px; + min-width: 125px; + margin: auto 2px; } .lgn-header { - display: block; + display: flex; position: relative; - margin: 1rem auto 0.5rem auto; + margin: auto; padding: 0; - width: 100%; + max-width: 250px; + min-height: 150px; + align-items: center; + justify-content: center; } .lgn-header .lgn-logo { display: block; - max-height: 100px; + height: 100px; margin: 0 auto; + max-width: 250px; + max-height: 150px; + object-fit: contain; } .lgn-button, .lgn-stroked-button, .lgn-icon-button { @@ -1194,7 +1204,7 @@ footer .watermark .lgn-logo-watermark { border-radius: 50%; } .lgn-icon-button i, .lgn-icon-button .mat-icon { - line-height: 24px; + line-height: 40px; } .lgn-stroked-button { @@ -1505,7 +1515,8 @@ a.block { .content-container .lgn-left-action { position: absolute; left: 1rem; - top: -40px; + top: -75px; + transform: translateY(-50%); } .content-container .lgn-register-options { display: flex; @@ -2307,7 +2318,8 @@ i { .content-container .lgn-left-action { position: absolute; left: 1rem; - top: -40px; + top: -75px; + transform: translateY(-50%); } .content-container .lgn-register-options { display: flex; @@ -2342,16 +2354,22 @@ i { } .lgn-header { - display: block; + display: flex; position: relative; - margin: 1rem auto 0.5rem auto; + margin: auto; padding: 0; - width: 100%; + max-width: 250px; + min-height: 150px; + align-items: center; + justify-content: center; } .lgn-header .lgn-logo { display: block; - max-height: 100px; + height: 100px; margin: 0 auto; + max-width: 250px; + max-height: 150px; + object-fit: contain; } @keyframes shake { @@ -2705,8 +2723,8 @@ footer a { color: var(--zitadel-color-primary); } footer .lgn-logo-watermark { - background: var(--zitadel-logo-powered-by); - background-position: auto; + background: var(--zitadel-logo-powered-by) no-repeat; + background-position: center; background-size: contain; } diff --git a/internal/ui/login/static/resources/themes/zitadel/css/zitadel.css.map b/internal/ui/login/static/resources/themes/zitadel/css/zitadel.css.map index 655f1fd655..bc1ac7e0e9 100644 --- a/internal/ui/login/static/resources/themes/zitadel/css/zitadel.css.map +++ b/internal/ui/login/static/resources/themes/zitadel/css/zitadel.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/styles/vars.scss","../../scss/main.scss","../../scss/styles/footer/footer.scss","../../scss/styles/header/header.scss","../../scss/styles/button/button.scss","../../scss/styles/button/button_base.scss","../../scss/styles/input/input.scss","../../scss/styles/input/input_base.scss","../../scss/styles/label/label.scss","../../scss/styles/label/label_base.scss","../../scss/styles/radio/radio_base.scss","../../scss/styles/radio/radio.scss","../../scss/styles/a/a.scss","../../scss/styles/identity_provider/identity_provider.scss","../../scss/styles/identity_provider/identity_provider_base.scss","../../scss/styles/error/error.scss","../../scss/styles/qrcode/qrcode.scss","../../scss/styles/container/container.scss","../../scss/styles/account_selection/account_selection.scss","../../scss/styles/avatar/avatar.scss","../../scss/styles/checkbox/checkbox.scss","../../scss/styles/checkbox/checkbox_base.scss","../../scss/styles/select/select.scss","../../scss/styles/select/select_base.scss","../../scss/styles/list/list_base.scss","../../scss/styles/typography/faces/ailerons_font_faces.scss","../../scss/styles/typography/faces/lato_font_faces.scss","../../scss/styles/typography/faces/roboto_font_faces.scss","../../scss/styles/typography/faces/raleway_font_faces.scss","../../scss/styles/typography/faces/pt_sans_font_faces.scss","../../scss/styles/success_label/success_label.scss","../../scss/styles/register/register.scss","../../scss/styles/animations.scss","../../scss/styles/typography/typography.scss","../../scss/styles/core/core.scss","../../scss/styles/header/header_theme.scss","../../scss/styles/button/button_theme.scss","../../scss/styles/elevation/elevation.scss","../../scss/styles/input/input_theme.scss","../../scss/styles/radio/radio_theme.scss","../../scss/styles/checkbox/checkbox_theme.scss","../../scss/styles/label/label_theme.scss","../../scss/styles/footer/footer_theme.scss","../../scss/styles/a/a_theme.scss","../../scss/styles/error/error_theme.scss","../../scss/styles/qrcode/qrcode_theme.scss","../../scss/styles/container/container_theme.scss","../../scss/styles/account_selection/account_selection_theme.scss","../../scss/styles/avatar/avatar_theme.scss","../../scss/styles/select/select_theme.scss","../../scss/styles/list/list_theme.scss","../../scss/styles/identity_provider/identity_provider_theme.scss","../../scss/styles/success_label/success_label_theme.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAGA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;AAGA;EACA;EACA;EAGA;EACA;;;AC7MF;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AChBJ;EACI;EACA;EACA;EACA,YAPY;EAQZ;EACA;EACA,SATa;;AAWb;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EAnBJ;IAoBQ;IACA;IACA;IACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;;;ACxCZ;EACI;EACA;EACA,QALgB;EAMhB,SAPiB;EAQjB;;AAEA;EACI;EACA;EACA;;;ACXR;ECkBE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA,QAjCkB;EAkClB,WAnCqB;EAoCrB,aAlCuB;EAmCvB,SAtCmB;EAuCnB,eAnCyB;EAqCzB;;AAEA;EACE;;AAGF;EACE;;;AD1CJ;ECcE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA,QAjCkB;EAkClB,WAnCqB;EAoCrB,aAlCuB;EAmCvB,SAtCmB;EAuCnB,eAnCyB;EAqCzB;EAgBA;;AAdA;EACE;;AAGF;EACE;;;ADtCJ;EACE;EACA;EACA,OCCqB;EDArB;EACA;EACA,aCFqB;EDGrB,eCF8B;;ADI9B;EACE,aCJ0B;;;ADQ9B;EACE;EACA,SCf2B;EDgB3B,aCjB+B;;;ADoBjC;EACE;EACA,YC3B4B;;;AD+B5B;EACE;;;AEnCJ;AAAA;ECOI;EACA;EACA,sBAXsB;EAYtB;EACA;EACA;EACA;EACA,eAZsB;EAatB;EACA;EACA;EACA,cAfqB;EAgBrB,QAlBoB;EAmBpB,SArBgB;EAsBhB;EACA;EACA,QAvBe;;AAyBf;AAAA;EACI,WAtB0B;EAuB1B;;;ADrBR;ECCI;EACA;EACA,sBAXsB;EAYtB;EACA;EACA;EACA;EACA,eAZsB;EAatB;EACA;EACA;EACA,cAfqB;EAgBrB,QAlBoB;EAmBpB,SArBgB;EAsBhB;EACA;EACA,QAvBe;;AAyBf;EACI,WAtB0B;EAuB1B;;;ADjBR;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AElBR;ECGI;EACA,WANkB;EAOlB;EACA,QAPe;EAQf,aAPoB;;;ACMxB;EACI;IACE;;EAGF;IACE;;EAGF;IACE;;;AChBN;EDqBI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA,QA9BS;EA+BT;EACA,SA7BkB;EA8BlB;EACA;EACA;EACA;EACA;EACA,WAzCc;EA0Cd;;AAEA;EAEI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA,OArDK;EAsDL,QAtDK;EAuDL;EACA;;AAGJ;EACI;EACA;EACA,OA7Da;EA8Db,QA9Da;EA+Db;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAOA;EACI;EACA;;AAGJ;EACI;;AAKZ;AAAA;AAAA;EAGI;;;AE5GR;EACI;EACA;EACA;EACA;;AAEA;EACI;;;ACLR;ECKI;EACA,QARa;EASb;EACA;EACA;EACA;EACA,SAZc;EAad,eAXoB;EAYpB;EACA;;AAEA;EACI;EACA;;AAGJ;EACI,aAtB4B;EAuB5B;EACA;EACA;;AAIA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtCZ;EACI;EACA;EACA;;AACA;EACI;EACA;;;ACNR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;;ACHR;EACI,WAPsB;EAQtB;EACA;EACA,eAN0B;EAO1B;;AAEA;EAPJ;IAQQ,YAXmB;;;;AAe3B;EACI;EACA;EACA,QAnBmB;EAoBnB,SArBoB;EAsBpB;EACA;;AAGI;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMhB;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;;ACtHJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;;ACrDZ;EACI,QAHc;EAId,OAJc;EAKd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACrBJ;ECCI;EACA;EACA;EACA,WANqB;EAOrB;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA,WA3BiB;EA4BjB;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AChDZ;ECCI;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;ACVJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;;;ACpCR;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;A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;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMhB;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;;ACtHJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;;ACrDZ;EACI,QAHc;EAId,OAJc;EAKd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACrBJ;ECCI;EACA;EACA;EACA,WANqB;EAOrB;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA,WA3BiB;EA4BjB;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AChDZ;ECCI;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;ACVJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;;;ACpCR;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC9GJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;ACtBJ;EACI;EACA;EACA;EACA;;;ALNJ;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC9GJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AZlBJ;EACI,WAPsB;EAQtB;EACA;EACA,eAN0B;EAO1B;;AAEA;EAPJ;IAQQ,YAXmB;;;;AAe3B;EACI;EACA;EACA,QAnBmB;EAoBnB,SArBoB;EAsBpB;EACA;;AAGI;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMh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","file":"zitadel.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/styles/vars.scss","../../scss/main.scss","../../scss/styles/footer/footer.scss","../../scss/styles/header/header.scss","../../scss/styles/button/button.scss","../../scss/styles/button/button_base.scss","../../scss/styles/input/input.scss","../../scss/styles/input/input_base.scss","../../scss/styles/label/label.scss","../../scss/styles/label/label_base.scss","../../scss/styles/radio/radio_base.scss","../../scss/styles/radio/radio.scss","../../scss/styles/a/a.scss","../../scss/styles/identity_provider/identity_provider.scss","../../scss/styles/identity_provider/identity_provider_base.scss","../../scss/styles/error/error.scss","../../scss/styles/qrcode/qrcode.scss","../../scss/styles/container/container.scss","../../scss/styles/account_selection/account_selection.scss","../../scss/styles/avatar/avatar.scss","../../scss/styles/checkbox/checkbox.scss","../../scss/styles/checkbox/checkbox_base.scss","../../scss/styles/select/select.scss","../../scss/styles/select/select_base.scss","../../scss/styles/list/list_base.scss","../../scss/styles/typography/faces/ailerons_font_faces.scss","../../scss/styles/typography/faces/lato_font_faces.scss","../../scss/styles/typography/faces/roboto_font_faces.scss","../../scss/styles/typography/faces/raleway_font_faces.scss","../../scss/styles/typography/faces/pt_sans_font_faces.scss","../../scss/styles/success_label/success_label.scss","../../scss/styles/register/register.scss","../../scss/styles/animations.scss","../../scss/styles/typography/typography.scss","../../scss/styles/core/core.scss","../../scss/styles/header/header_theme.scss","../../scss/styles/button/button_theme.scss","../../scss/styles/elevation/elevation.scss","../../scss/styles/input/input_theme.scss","../../scss/styles/radio/radio_theme.scss","../../scss/styles/checkbox/checkbox_theme.scss","../../scss/styles/label/label_theme.scss","../../scss/styles/footer/footer_theme.scss","../../scss/styles/a/a_theme.scss","../../scss/styles/error/error_theme.scss","../../scss/styles/qrcode/qrcode_theme.scss","../../scss/styles/container/container_theme.scss","../../scss/styles/account_selection/account_selection_theme.scss","../../scss/styles/avatar/avatar_theme.scss","../../scss/styles/select/select_theme.scss","../../scss/styles/list/list_theme.scss","../../scss/styles/identity_provider/identity_provider_theme.scss","../../scss/styles/success_label/success_label_theme.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAGA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;AAGA;EACA;EACA;EAGA;EACA;;;AC9MF;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AChBJ;EACI;EACA;EACA;EACA,YAPY;EAQZ;EACA;EACA,SATa;;AAWb;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EAnBJ;IAoBQ;IACA;IACA;IACA;;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;;;ACtCZ;EACI;EACA;EACA,QALgB;EAMhB,SAPiB;EAQjB;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;;ACjBR;ECkBE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA,QAjCkB;EAkClB,WAnCqB;EAoCrB,aAlCuB;EAmCvB,SAtCmB;EAuCnB,eAnCyB;EAqCzB;;AAEA;EACE;;AAGF;EACE;;;AD1CJ;ECcE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA,QAjCkB;EAkClB,WAnCqB;EAoCrB,aAlCuB;EAmCvB,SAtCmB;EAuCnB,eAnCyB;EAqCzB;EAgBA;;AAdA;EACE;;AAGF;EACE;;;ADtCJ;EACE;EACA;EACA,OCCqB;EDArB;EACA;EACA,aCFqB;EDGrB,eCF8B;;ADI9B;EACE,aCJ0B;;;ADQ9B;EACE;EACA,SCf2B;EDgB3B,aCjB+B;;;ADoBjC;EACE;EACA,YC3B4B;;;AD+B5B;EACE;;;AEnCJ;AAAA;ECOI;EACA;EACA,sBAXsB;EAYtB;EACA;EACA;EACA;EACA,eAZsB;EAatB;EACA;EACA;EACA,cAfqB;EAgBrB,QAlBoB;EAmBpB,SArBgB;EAsBhB;EACA;EACA,QAvBe;;AAyBf;AAAA;EACI,WAtB0B;EAuB1B;;;ADrBR;ECCI;EACA;EACA,sBAXsB;EAYtB;EACA;EACA;EACA;EACA,eAZsB;EAatB;EACA;EACA;EACA,cAfqB;EAgBrB,QAlBoB;EAmBpB,SArBgB;EAsBhB;EACA;EACA,QAvBe;;AAyBf;EACI,WAtB0B;EAuB1B;;;ADjBR;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AElBR;ECGI;EACA,WANkB;EAOlB;EACA,QAPe;EAQf,aAPoB;;;ACMxB;EACI;IACE;;EAGF;IACE;;EAGF;IACE;;;AChBN;EDqBI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA,QA9BS;EA+BT;EACA,SA7BkB;EA8BlB;EACA;EACA;EACA;EACA;EACA,WAzCc;EA0Cd;;AAEA;EAEI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA,OArDK;EAsDL,QAtDK;EAuDL;EACA;;AAGJ;EACI;EACA;EACA,OA7Da;EA8Db,QA9Da;EA+Db;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAOA;EACI;EACA;;AAGJ;EACI;;AAKZ;AAAA;AAAA;EAGI;;;AE5GR;EACI;EACA;EACA;EACA;;AAEA;EACI;;;ACLR;ECKI;EACA,QARa;EASb;EACA;EACA;EACA;EACA,SAZc;EAad,eAXoB;EAYpB;EACA;;AAEA;EACI;EACA;;AAGJ;EACI,aAtB4B;EAuB5B;EACA;EACA;;AAIA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtCZ;EACI;EACA;EACA;;AACA;EACI;EACA;;;ACNR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;;ACHR;EACI,WAPsB;EAQtB;EACA;EACA,eAN0B;EAO1B;;AAEA;EAPJ;IAQQ,YAXmB;;;;AAe3B;EACI;EACA;EACA,QAnBmB;EAoBnB,SArBoB;EAsBpB;EACA;;AAGI;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMhB;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;;ACvHJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;;ACrDZ;EACI,QAHc;EAId,OAJc;EAKd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACrBJ;ECCI;EACA;EACA;EACA,WANqB;EAOrB;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA,WA3BiB;EA4BjB;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AChDZ;ECCI;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;ACVJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;;;ACpCR;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EA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ACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMhB;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;;ACvHJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;;ACrDZ;EACI,QAHc;EAId,OAJc;EAKd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACrBJ;ECCI;EACA;EACA;EACA,WANqB;EAOrB;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA,WA3BiB;EA4BjB;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AChDZ;ECCI;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;ACVJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;;;ACpCR;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC9GJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;ACtBJ;EACI;EACA;EACA;EACA;;;ALNJ;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC9GJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AZlBJ;EACI,WAPsB;EAQtB;EACA;EACA,eAN0B;EAO1B;;AAEA;EAPJ;IAQQ,YAXmB;;;;AAe3B;EACI;EACA;EACA,QAnBmB;EAoBnB,SArBoB;EAsBpB;EACA;;AAGI;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;E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","file":"zitadel.css"} \ No newline at end of file