@yuuvis/user-management-app 2.3.1 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,7 @@ import * as i4 from '@angular/material/tooltip';
18
18
  import { MatTooltipModule } from '@angular/material/tooltip';
19
19
  import { Router, ActivatedRoute } from '@angular/router';
20
20
  import { expand, EMPTY, reduce, switchMap, map, of, forkJoin, shareReplay, catchError, throwError, debounceTime, distinctUntilChanged, startWith, filter, tap } from 'rxjs';
21
- import { BackendService, TranslateService, ApiBase, LocalizationService, Logger, NotificationService, TranslatePipe, TabGuardDirective, UserService } from '@yuuvis/client-core';
21
+ import { BackendService, TranslateService, ApiBase, LocalizationService, Logger, NotificationService, TranslatePipe, UserService } from '@yuuvis/client-core';
22
22
  import { ConfirmService, AbstractMatFormField, BusyOverlayDirective, DialogComponent, LayoutSettingsService, ClickDoubleDirective } from '@yuuvis/client-components/common';
23
23
  import { SimpleSearchComponent } from '@yuuvis/client-framework/simple-search';
24
24
  import { ShellService } from '@yuuvis/client-shell-core';
@@ -1382,7 +1382,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
1382
1382
  args: [{ selector: 'ymusrmgmt-create-group', standalone: true, imports: [...modules$3, ...components$3], template: "<yuv-dialog\n class=\"not-separated\"\n [yuvBusyOverlay]=\"busy()\"\n [headertitle]=\"'yuv.app.user-management.groups.action.create.label' | translate\"\n>\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.app.user-management.groups.property.name' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"name\"\n type=\"text\"\n [attr.aria-label]=\"'yuv.app.user-management.groups.property.name' | translate\"\n />\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\n 'yuv.app.user-management.groups.property.description' | translate\n }}</mat-label>\n <input\n matInput\n [formControl]=\"description\"\n type=\"text\"\n [attr.aria-label]=\"'yuv.app.user-management.groups.property.description' | translate\"\n />\n </mat-form-field>\n <div class=\"roles-section\" [class.has-error]=\"roles.invalid && roles.touched\">\n <ymusrmgmt-role-selection\n [allRoles]=\"allAvailableRoles()\"\n [initialRoles]=\"groupRoles()\"\n (rolesChange)=\"onRolesChange($event)\"\n >\n </ymusrmgmt-role-selection>\n </div>\n </form>\n @if (error()) {\n <p class=\"error\" role=\"alert\">{{ error() }}</p>\n }\n </main>\n <footer>\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ 'yuv.app.user-management.groups.action.button.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"createGroup()\">\n {{ 'yuv.app.user-management.groups.action.button.create' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main{background-color:var(--ymt-surface);border:var(--ymt-outline-width) solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m)}:host main .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main .hint{color:var(--ymt-on-info-container, inherit);background-color:var(--ymt-info-container, var(--ymt-surface-container));padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs);margin:0 0 var(--ymt-spacing-m)}:host main .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m);margin:0}\n"] }]
1383
1383
  }], ctorParameters: () => [] });
1384
1384
 
1385
- const components$2 = [BusyOverlayDirective, YmtButtonDirective, DialogComponent, TabGuardDirective];
1385
+ const components$2 = [BusyOverlayDirective, YmtButtonDirective, DialogComponent];
1386
1386
  const modules$2 = [
1387
1387
  CommonModule,
1388
1388
  ReactiveFormsModule,
@@ -1604,11 +1604,11 @@ class SettingsComponent {
1604
1604
  this.#dialogRef.close();
1605
1605
  }
1606
1606
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1607
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: SettingsComponent, isStandalone: true, selector: "ymusrmgmt-settings", ngImport: i0, template: "<yuv-dialog\n class=\"not-separated\"\n [yuvBusyOverlay]=\"busy()\"\n [headertitle]=\"'yuv.app.user-management.settings.label.dialog.title' | translate\"\n>\n <main class=\"yuv-dialog-content\">\n <ng-template\n #editableField\n let-labelKey=\"labelKey\"\n let-control=\"control\"\n let-type=\"type\"\n let-placeholder=\"placeholder\"\n let-autocomplete=\"autocomplete\"\n >\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ labelKey | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"control\"\n [type]=\"type || 'text'\"\n [placeholder]=\"placeholder || ''\"\n [autocomplete]=\"autocomplete || 'off'\"\n [attr.aria-label]=\"labelKey | translate\"\n />\n </mat-form-field>\n </ng-template>\n <ng-template\n #readonlyField\n let-labelKey=\"labelKey\"\n let-value=\"value\"\n let-type=\"type\"\n let-copyable=\"copyable\"\n >\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ labelKey | translate }}</mat-label>\n <input\n matInput\n readonly\n [type]=\"type || 'text'\"\n [attr.tabindex]=\"-1\"\n [value]=\"value || '\u2014'\"\n [attr.aria-label]=\"labelKey | translate\"\n />\n @if (copyable && value) {\n <button\n matSuffix\n mat-icon-button\n class=\"copy-button\"\n type=\"button\"\n [matTooltip]=\"'yuv.app.user-management.settings.oidc.action.copy.label' | translate\"\n [attr.aria-label]=\"'yuv.app.user-management.settings.oidc.action.copy.label' | translate\"\n [cdkCopyToClipboard]=\"value\"\n (cdkCopyToClipboardCopied)=\"onCopied($event)\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n }\n </mat-form-field>\n </ng-template>\n\n @if (!showForm()) {\n <div class=\"empty-state\">\n <mat-icon class=\"empty-state-icon\" aria-hidden=\"true\">admin_panel_settings</mat-icon>\n <p class=\"empty-state-title\">\n {{ 'yuv.app.user-management.settings.oidc.label.notConfigured' | translate }}\n </p>\n <p class=\"empty-state-description\">\n {{ 'yuv.app.user-management.settings.oidc.label.setup.description' | translate }}\n </p>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"startAdd()\">\n {{ 'yuv.app.user-management.settings.oidc.action.setup.label' | translate }}\n </button>\n </div>\n } @else {\n <mat-tab-group yuvTabGuardDisable>\n <mat-tab [label]=\"'yuv.app.user-management.settings.oidc.tab.authentication' | translate\">\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.label.setup.hint' | translate }}\n </p>\n <form [formGroup]=\"form\">\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.displayName',\n control: displayName,\n placeholder: 'e.g. Microsoft Entra ID'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.discoveryUrl',\n control: discoveryUrl,\n placeholder:\n 'e.g. https://login.microsoftonline.com/<entra-tenant-id>/v2.0/.well-known/openid-configuration'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.clientId',\n control: clientId,\n placeholder: 'e.g. yuuvis'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.clientSecret',\n control: clientSecret,\n type: 'password',\n autocomplete: 'new-password'\n }\n \"\n ></ng-container>\n @if (redirectUri(); as uri) {\n <hr class=\"divider\" />\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.property.redirectUri.hint' | translate }}\n </p>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.redirectUri',\n value: uri,\n copyable: true\n }\n \"\n ></ng-container>\n }\n </form>\n </mat-tab>\n <mat-tab\n [label]=\"'yuv.app.user-management.settings.oidc.label.section.provisioning' | translate\"\n >\n @if (scimProvisioning(); as scimProvisioning) { @if (provider(); as oidcProvider) {\n <p class=\"hint\">\n {{\n 'yuv.app.user-management.settings.oidc.label.provisioning.hint'\n | translate : { provider: oidcProvider.displayName }\n }}\n </p>\n }\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.tenantUrl',\n value: tenantUrl(),\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.tokenUrl',\n value: scimProvisioning.tokenEndpoint,\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.clientName',\n value: scimProvisioning.clientId,\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.clientSecret',\n value: scimProvisioning.clientSecret,\n type: 'password',\n copyable: true\n }\n \"\n ></ng-container>\n } @else {\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.label.provisioning.unavailable' | translate }}\n </p>\n }\n </mat-tab>\n </mat-tab-group>\n } @if (error()) {\n <p class=\"error\" role=\"alert\">{{ error() }}</p>\n }\n </main>\n <footer>\n @if (provider()) {\n <button ymtButton=\"danger\" [disabled]=\"busy()\" (click)=\"revert()\">\n <mat-icon>reset_wrench</mat-icon>\n {{ 'yuv.app.user-management.settings.oidc.action.reset.label' | translate }}\n </button>\n }\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ 'yuv.app.user-management.settings.action.button.cancel' | translate }}\n </button>\n @if (showForm()) {\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"configure()\">\n {{ 'yuv.app.user-management.settings.oidc.action.save.label' | translate }}\n </button>\n }\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main{background-color:var(--ymt-surface);border:var(--ymt-outline-width) solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m)}:host main .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main .hint{color:var(--ymt-on-info-container, inherit);background-color:var(--ymt-info-container, var(--ymt-surface-container));padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs);margin:0 0 var(--ymt-spacing-m)}:host main .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m);margin:0}:host main{min-height:var(--ymt-sizing-7xl)}:host main .yuv-form-field input::placeholder{color:var(--ymt-text-color-subtle, inherit);font-size:.9em;opacity:1}:host main .empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--ymt-spacing-m);width:100%;padding:var(--ymt-spacing-4xl) var(--ymt-spacing-l);justify-content:center;min-height:var(--ymt-sizing-7xl)}:host main .empty-state .empty-state-icon{width:var(--ymt-sizing-5xl);height:var(--ymt-sizing-5xl);border-radius:var(--ymt-corner-full);background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container);display:flex;align-items:center;justify-content:center;flex-shrink:0}:host main .empty-state .empty-state-title{font:var(--ymt-font-headline-small);color:var(--ymt-text-color);margin:0}:host main .empty-state .empty-state-description{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);max-width:80ch;margin:0}:host main .divider{border:none;border-top:var(--ymt-outline-width) solid var(--ymt-outline-variant);margin:var(--ymt-spacing-m) 0}:host main ::ng-deep .mat-mdc-tab-body-content{padding-top:var(--ymt-spacing-m)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ClipboardModule }, { kind: "directive", type: i1.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i8.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i8.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "directive", type: TabGuardDirective, selector: "mat-tab-group[yuvTabGuardDisable]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1607
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: SettingsComponent, isStandalone: true, selector: "ymusrmgmt-settings", ngImport: i0, template: "<yuv-dialog\n class=\"not-separated\"\n [yuvBusyOverlay]=\"busy()\"\n [headertitle]=\"'yuv.app.user-management.settings.label.dialog.title' | translate\"\n>\n <main class=\"yuv-dialog-content\">\n <ng-template\n #editableField\n let-labelKey=\"labelKey\"\n let-control=\"control\"\n let-type=\"type\"\n let-placeholder=\"placeholder\"\n let-autocomplete=\"autocomplete\"\n >\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ labelKey | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"control\"\n [type]=\"type || 'text'\"\n [placeholder]=\"placeholder || ''\"\n [autocomplete]=\"autocomplete || 'off'\"\n [attr.aria-label]=\"labelKey | translate\"\n />\n </mat-form-field>\n </ng-template>\n <ng-template\n #readonlyField\n let-labelKey=\"labelKey\"\n let-value=\"value\"\n let-type=\"type\"\n let-copyable=\"copyable\"\n >\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ labelKey | translate }}</mat-label>\n <input\n matInput\n readonly\n [type]=\"type || 'text'\"\n [attr.tabindex]=\"-1\"\n [value]=\"value || '\u2014'\"\n [attr.aria-label]=\"labelKey | translate\"\n />\n @if (copyable && value) {\n <button\n matSuffix\n mat-icon-button\n class=\"copy-button\"\n type=\"button\"\n [matTooltip]=\"'yuv.app.user-management.settings.oidc.action.copy.label' | translate\"\n [attr.aria-label]=\"'yuv.app.user-management.settings.oidc.action.copy.label' | translate\"\n [cdkCopyToClipboard]=\"value\"\n (cdkCopyToClipboardCopied)=\"onCopied($event)\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n }\n </mat-form-field>\n </ng-template>\n\n @if (!showForm()) {\n <div class=\"empty-state\">\n <mat-icon class=\"empty-state-icon\" aria-hidden=\"true\">admin_panel_settings</mat-icon>\n <p class=\"empty-state-title\">\n {{ 'yuv.app.user-management.settings.oidc.label.notConfigured' | translate }}\n </p>\n <p class=\"empty-state-description\">\n {{ 'yuv.app.user-management.settings.oidc.label.setup.description' | translate }}\n </p>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"startAdd()\">\n {{ 'yuv.app.user-management.settings.oidc.action.setup.label' | translate }}\n </button>\n </div>\n } @else {\n <mat-tab-group>\n <mat-tab [label]=\"'yuv.app.user-management.settings.oidc.tab.authentication' | translate\">\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.label.setup.hint' | translate }}\n </p>\n <form [formGroup]=\"form\">\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.displayName',\n control: displayName,\n placeholder: 'e.g. Microsoft Entra ID'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.discoveryUrl',\n control: discoveryUrl,\n placeholder:\n 'e.g. https://login.microsoftonline.com/<entra-tenant-id>/v2.0/.well-known/openid-configuration'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.clientId',\n control: clientId,\n placeholder: 'e.g. yuuvis'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.clientSecret',\n control: clientSecret,\n type: 'password',\n autocomplete: 'new-password'\n }\n \"\n ></ng-container>\n @if (redirectUri(); as uri) {\n <hr class=\"divider\" />\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.property.redirectUri.hint' | translate }}\n </p>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.redirectUri',\n value: uri,\n copyable: true\n }\n \"\n ></ng-container>\n }\n </form>\n </mat-tab>\n <mat-tab\n [label]=\"'yuv.app.user-management.settings.oidc.label.section.provisioning' | translate\"\n [disabled]=\"!provider()\"\n >\n @if (scimProvisioning(); as scimProvisioning) { @if (provider(); as oidcProvider) {\n <p class=\"hint\">\n {{\n 'yuv.app.user-management.settings.oidc.label.provisioning.hint'\n | translate : { provider: oidcProvider.displayName }\n }}\n </p>\n }\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.tenantUrl',\n value: tenantUrl(),\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.tokenUrl',\n value: scimProvisioning.tokenEndpoint,\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.clientName',\n value: scimProvisioning.clientId,\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.clientSecret',\n value: scimProvisioning.clientSecret,\n type: 'password',\n copyable: true\n }\n \"\n ></ng-container>\n } @else {\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.label.provisioning.unavailable' | translate }}\n </p>\n }\n </mat-tab>\n </mat-tab-group>\n } @if (error()) {\n <p class=\"error\" role=\"alert\">{{ error() }}</p>\n }\n </main>\n <footer>\n @if (provider()) {\n <button ymtButton=\"danger\" [disabled]=\"busy()\" (click)=\"revert()\">\n <mat-icon>reset_wrench</mat-icon>\n {{ 'yuv.app.user-management.settings.oidc.action.reset.label' | translate }}\n </button>\n }\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ 'yuv.app.user-management.settings.action.button.cancel' | translate }}\n </button>\n @if (showForm()) {\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"configure()\">\n {{ 'yuv.app.user-management.settings.oidc.action.save.label' | translate }}\n </button>\n }\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main{background-color:var(--ymt-surface);border:var(--ymt-outline-width) solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m)}:host main .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main .hint{color:var(--ymt-on-info-container, inherit);background-color:var(--ymt-info-container, var(--ymt-surface-container));padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs);margin:0 0 var(--ymt-spacing-m)}:host main .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m);margin:0}:host main{min-height:var(--ymt-sizing-7xl)}:host main .yuv-form-field input::placeholder{color:var(--ymt-text-color-subtle, inherit);font-size:.9em;opacity:1}:host main .empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--ymt-spacing-m);width:100%;padding:var(--ymt-spacing-4xl) var(--ymt-spacing-l);justify-content:center;min-height:var(--ymt-sizing-7xl)}:host main .empty-state .empty-state-icon{width:var(--ymt-sizing-5xl);height:var(--ymt-sizing-5xl);border-radius:var(--ymt-corner-full);background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container);display:flex;align-items:center;justify-content:center;flex-shrink:0}:host main .empty-state .empty-state-title{font:var(--ymt-font-headline-small);color:var(--ymt-text-color);margin:0}:host main .empty-state .empty-state-description{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);max-width:80ch;margin:0}:host main .divider{border:none;border-top:var(--ymt-outline-width) solid var(--ymt-outline-variant);margin:var(--ymt-spacing-m) 0}:host main ::ng-deep .mat-mdc-tab-body-content{padding-top:var(--ymt-spacing-m)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ClipboardModule }, { kind: "directive", type: i1.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i8.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i8.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1608
1608
  }
1609
1609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SettingsComponent, decorators: [{
1610
1610
  type: Component,
1611
- args: [{ selector: 'ymusrmgmt-settings', standalone: true, imports: [...modules$2, ...components$2], template: "<yuv-dialog\n class=\"not-separated\"\n [yuvBusyOverlay]=\"busy()\"\n [headertitle]=\"'yuv.app.user-management.settings.label.dialog.title' | translate\"\n>\n <main class=\"yuv-dialog-content\">\n <ng-template\n #editableField\n let-labelKey=\"labelKey\"\n let-control=\"control\"\n let-type=\"type\"\n let-placeholder=\"placeholder\"\n let-autocomplete=\"autocomplete\"\n >\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ labelKey | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"control\"\n [type]=\"type || 'text'\"\n [placeholder]=\"placeholder || ''\"\n [autocomplete]=\"autocomplete || 'off'\"\n [attr.aria-label]=\"labelKey | translate\"\n />\n </mat-form-field>\n </ng-template>\n <ng-template\n #readonlyField\n let-labelKey=\"labelKey\"\n let-value=\"value\"\n let-type=\"type\"\n let-copyable=\"copyable\"\n >\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ labelKey | translate }}</mat-label>\n <input\n matInput\n readonly\n [type]=\"type || 'text'\"\n [attr.tabindex]=\"-1\"\n [value]=\"value || '\u2014'\"\n [attr.aria-label]=\"labelKey | translate\"\n />\n @if (copyable && value) {\n <button\n matSuffix\n mat-icon-button\n class=\"copy-button\"\n type=\"button\"\n [matTooltip]=\"'yuv.app.user-management.settings.oidc.action.copy.label' | translate\"\n [attr.aria-label]=\"'yuv.app.user-management.settings.oidc.action.copy.label' | translate\"\n [cdkCopyToClipboard]=\"value\"\n (cdkCopyToClipboardCopied)=\"onCopied($event)\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n }\n </mat-form-field>\n </ng-template>\n\n @if (!showForm()) {\n <div class=\"empty-state\">\n <mat-icon class=\"empty-state-icon\" aria-hidden=\"true\">admin_panel_settings</mat-icon>\n <p class=\"empty-state-title\">\n {{ 'yuv.app.user-management.settings.oidc.label.notConfigured' | translate }}\n </p>\n <p class=\"empty-state-description\">\n {{ 'yuv.app.user-management.settings.oidc.label.setup.description' | translate }}\n </p>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"startAdd()\">\n {{ 'yuv.app.user-management.settings.oidc.action.setup.label' | translate }}\n </button>\n </div>\n } @else {\n <mat-tab-group yuvTabGuardDisable>\n <mat-tab [label]=\"'yuv.app.user-management.settings.oidc.tab.authentication' | translate\">\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.label.setup.hint' | translate }}\n </p>\n <form [formGroup]=\"form\">\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.displayName',\n control: displayName,\n placeholder: 'e.g. Microsoft Entra ID'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.discoveryUrl',\n control: discoveryUrl,\n placeholder:\n 'e.g. https://login.microsoftonline.com/<entra-tenant-id>/v2.0/.well-known/openid-configuration'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.clientId',\n control: clientId,\n placeholder: 'e.g. yuuvis'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.clientSecret',\n control: clientSecret,\n type: 'password',\n autocomplete: 'new-password'\n }\n \"\n ></ng-container>\n @if (redirectUri(); as uri) {\n <hr class=\"divider\" />\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.property.redirectUri.hint' | translate }}\n </p>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.redirectUri',\n value: uri,\n copyable: true\n }\n \"\n ></ng-container>\n }\n </form>\n </mat-tab>\n <mat-tab\n [label]=\"'yuv.app.user-management.settings.oidc.label.section.provisioning' | translate\"\n >\n @if (scimProvisioning(); as scimProvisioning) { @if (provider(); as oidcProvider) {\n <p class=\"hint\">\n {{\n 'yuv.app.user-management.settings.oidc.label.provisioning.hint'\n | translate : { provider: oidcProvider.displayName }\n }}\n </p>\n }\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.tenantUrl',\n value: tenantUrl(),\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.tokenUrl',\n value: scimProvisioning.tokenEndpoint,\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.clientName',\n value: scimProvisioning.clientId,\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.clientSecret',\n value: scimProvisioning.clientSecret,\n type: 'password',\n copyable: true\n }\n \"\n ></ng-container>\n } @else {\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.label.provisioning.unavailable' | translate }}\n </p>\n }\n </mat-tab>\n </mat-tab-group>\n } @if (error()) {\n <p class=\"error\" role=\"alert\">{{ error() }}</p>\n }\n </main>\n <footer>\n @if (provider()) {\n <button ymtButton=\"danger\" [disabled]=\"busy()\" (click)=\"revert()\">\n <mat-icon>reset_wrench</mat-icon>\n {{ 'yuv.app.user-management.settings.oidc.action.reset.label' | translate }}\n </button>\n }\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ 'yuv.app.user-management.settings.action.button.cancel' | translate }}\n </button>\n @if (showForm()) {\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"configure()\">\n {{ 'yuv.app.user-management.settings.oidc.action.save.label' | translate }}\n </button>\n }\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main{background-color:var(--ymt-surface);border:var(--ymt-outline-width) solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m)}:host main .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main .hint{color:var(--ymt-on-info-container, inherit);background-color:var(--ymt-info-container, var(--ymt-surface-container));padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs);margin:0 0 var(--ymt-spacing-m)}:host main .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m);margin:0}:host main{min-height:var(--ymt-sizing-7xl)}:host main .yuv-form-field input::placeholder{color:var(--ymt-text-color-subtle, inherit);font-size:.9em;opacity:1}:host main .empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--ymt-spacing-m);width:100%;padding:var(--ymt-spacing-4xl) var(--ymt-spacing-l);justify-content:center;min-height:var(--ymt-sizing-7xl)}:host main .empty-state .empty-state-icon{width:var(--ymt-sizing-5xl);height:var(--ymt-sizing-5xl);border-radius:var(--ymt-corner-full);background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container);display:flex;align-items:center;justify-content:center;flex-shrink:0}:host main .empty-state .empty-state-title{font:var(--ymt-font-headline-small);color:var(--ymt-text-color);margin:0}:host main .empty-state .empty-state-description{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);max-width:80ch;margin:0}:host main .divider{border:none;border-top:var(--ymt-outline-width) solid var(--ymt-outline-variant);margin:var(--ymt-spacing-m) 0}:host main ::ng-deep .mat-mdc-tab-body-content{padding-top:var(--ymt-spacing-m)}\n"] }]
1611
+ args: [{ selector: 'ymusrmgmt-settings', standalone: true, imports: [...modules$2, ...components$2], template: "<yuv-dialog\n class=\"not-separated\"\n [yuvBusyOverlay]=\"busy()\"\n [headertitle]=\"'yuv.app.user-management.settings.label.dialog.title' | translate\"\n>\n <main class=\"yuv-dialog-content\">\n <ng-template\n #editableField\n let-labelKey=\"labelKey\"\n let-control=\"control\"\n let-type=\"type\"\n let-placeholder=\"placeholder\"\n let-autocomplete=\"autocomplete\"\n >\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ labelKey | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"control\"\n [type]=\"type || 'text'\"\n [placeholder]=\"placeholder || ''\"\n [autocomplete]=\"autocomplete || 'off'\"\n [attr.aria-label]=\"labelKey | translate\"\n />\n </mat-form-field>\n </ng-template>\n <ng-template\n #readonlyField\n let-labelKey=\"labelKey\"\n let-value=\"value\"\n let-type=\"type\"\n let-copyable=\"copyable\"\n >\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ labelKey | translate }}</mat-label>\n <input\n matInput\n readonly\n [type]=\"type || 'text'\"\n [attr.tabindex]=\"-1\"\n [value]=\"value || '\u2014'\"\n [attr.aria-label]=\"labelKey | translate\"\n />\n @if (copyable && value) {\n <button\n matSuffix\n mat-icon-button\n class=\"copy-button\"\n type=\"button\"\n [matTooltip]=\"'yuv.app.user-management.settings.oidc.action.copy.label' | translate\"\n [attr.aria-label]=\"'yuv.app.user-management.settings.oidc.action.copy.label' | translate\"\n [cdkCopyToClipboard]=\"value\"\n (cdkCopyToClipboardCopied)=\"onCopied($event)\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n }\n </mat-form-field>\n </ng-template>\n\n @if (!showForm()) {\n <div class=\"empty-state\">\n <mat-icon class=\"empty-state-icon\" aria-hidden=\"true\">admin_panel_settings</mat-icon>\n <p class=\"empty-state-title\">\n {{ 'yuv.app.user-management.settings.oidc.label.notConfigured' | translate }}\n </p>\n <p class=\"empty-state-description\">\n {{ 'yuv.app.user-management.settings.oidc.label.setup.description' | translate }}\n </p>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"startAdd()\">\n {{ 'yuv.app.user-management.settings.oidc.action.setup.label' | translate }}\n </button>\n </div>\n } @else {\n <mat-tab-group>\n <mat-tab [label]=\"'yuv.app.user-management.settings.oidc.tab.authentication' | translate\">\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.label.setup.hint' | translate }}\n </p>\n <form [formGroup]=\"form\">\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.displayName',\n control: displayName,\n placeholder: 'e.g. Microsoft Entra ID'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.discoveryUrl',\n control: discoveryUrl,\n placeholder:\n 'e.g. https://login.microsoftonline.com/<entra-tenant-id>/v2.0/.well-known/openid-configuration'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.clientId',\n control: clientId,\n placeholder: 'e.g. yuuvis'\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n editableField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.clientSecret',\n control: clientSecret,\n type: 'password',\n autocomplete: 'new-password'\n }\n \"\n ></ng-container>\n @if (redirectUri(); as uri) {\n <hr class=\"divider\" />\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.property.redirectUri.hint' | translate }}\n </p>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.property.redirectUri',\n value: uri,\n copyable: true\n }\n \"\n ></ng-container>\n }\n </form>\n </mat-tab>\n <mat-tab\n [label]=\"'yuv.app.user-management.settings.oidc.label.section.provisioning' | translate\"\n [disabled]=\"!provider()\"\n >\n @if (scimProvisioning(); as scimProvisioning) { @if (provider(); as oidcProvider) {\n <p class=\"hint\">\n {{\n 'yuv.app.user-management.settings.oidc.label.provisioning.hint'\n | translate : { provider: oidcProvider.displayName }\n }}\n </p>\n }\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.tenantUrl',\n value: tenantUrl(),\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.tokenUrl',\n value: scimProvisioning.tokenEndpoint,\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.clientName',\n value: scimProvisioning.clientId,\n copyable: true\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n readonlyField;\n context: {\n labelKey: 'yuv.app.user-management.settings.oidc.provisioning.property.clientSecret',\n value: scimProvisioning.clientSecret,\n type: 'password',\n copyable: true\n }\n \"\n ></ng-container>\n } @else {\n <p class=\"hint\">\n {{ 'yuv.app.user-management.settings.oidc.label.provisioning.unavailable' | translate }}\n </p>\n }\n </mat-tab>\n </mat-tab-group>\n } @if (error()) {\n <p class=\"error\" role=\"alert\">{{ error() }}</p>\n }\n </main>\n <footer>\n @if (provider()) {\n <button ymtButton=\"danger\" [disabled]=\"busy()\" (click)=\"revert()\">\n <mat-icon>reset_wrench</mat-icon>\n {{ 'yuv.app.user-management.settings.oidc.action.reset.label' | translate }}\n </button>\n }\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ 'yuv.app.user-management.settings.action.button.cancel' | translate }}\n </button>\n @if (showForm()) {\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"configure()\">\n {{ 'yuv.app.user-management.settings.oidc.action.save.label' | translate }}\n </button>\n }\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main{background-color:var(--ymt-surface);border:var(--ymt-outline-width) solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m)}:host main .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main .hint{color:var(--ymt-on-info-container, inherit);background-color:var(--ymt-info-container, var(--ymt-surface-container));padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs);margin:0 0 var(--ymt-spacing-m)}:host main .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);border-radius:var(--ymt-corner-m);padding:var(--ymt-spacing-m);margin:0}:host main{min-height:var(--ymt-sizing-7xl)}:host main .yuv-form-field input::placeholder{color:var(--ymt-text-color-subtle, inherit);font-size:.9em;opacity:1}:host main .empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--ymt-spacing-m);width:100%;padding:var(--ymt-spacing-4xl) var(--ymt-spacing-l);justify-content:center;min-height:var(--ymt-sizing-7xl)}:host main .empty-state .empty-state-icon{width:var(--ymt-sizing-5xl);height:var(--ymt-sizing-5xl);border-radius:var(--ymt-corner-full);background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container);display:flex;align-items:center;justify-content:center;flex-shrink:0}:host main .empty-state .empty-state-title{font:var(--ymt-font-headline-small);color:var(--ymt-text-color);margin:0}:host main .empty-state .empty-state-description{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);max-width:80ch;margin:0}:host main .divider{border:none;border-top:var(--ymt-outline-width) solid var(--ymt-outline-variant);margin:var(--ymt-spacing-m) 0}:host main ::ng-deep .mat-mdc-tab-body-content{padding-top:var(--ymt-spacing-m)}\n"] }]
1612
1612
  }], ctorParameters: () => [] });
1613
1613
 
1614
1614
  /**