@gravitee/ui-policy-studio-angular 13.5.1 → 13.5.2-renovate-angular-88a840f

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.
Files changed (18) hide show
  1. package/esm2022/lib/components/filter-pipe/gio-flter-connectors-by-mode.pipe.mjs +3 -3
  2. package/esm2022/lib/components/flow-details/gio-ps-flow-details.component.mjs +3 -3
  3. package/esm2022/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.mjs +3 -3
  4. package/esm2022/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.mjs +3 -3
  5. package/esm2022/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.mjs +3 -3
  6. package/esm2022/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.mjs +3 -3
  7. package/esm2022/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.mjs +3 -3
  8. package/esm2022/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.mjs +3 -3
  9. package/esm2022/lib/components/flows-menu/gio-ps-flows-menu.component.mjs +3 -3
  10. package/esm2022/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.mjs +3 -3
  11. package/esm2022/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.mjs +3 -3
  12. package/esm2022/lib/components/step-form/gio-ps-step-form.component.mjs +3 -3
  13. package/esm2022/lib/policy-group-studio/gio-policy-group-studio.component.mjs +5 -5
  14. package/esm2022/lib/policy-studio/gio-policy-studio.component.mjs +3 -3
  15. package/esm2022/lib/policy-studio/gio-policy-studio.service.mjs +3 -3
  16. package/fesm2022/gravitee-ui-policy-studio-angular.mjs +46 -46
  17. package/fesm2022/gravitee-ui-policy-studio-angular.mjs.map +1 -1
  18. package/package.json +1 -1
@@ -139,10 +139,10 @@ export class GioPolicyStudioPoliciesCatalogDialogComponent {
139
139
  this.isValid = false;
140
140
  this.isUnlicensed = false;
141
141
  }
142
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioPoliciesCatalogDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
143
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: GioPolicyStudioPoliciesCatalogDialogComponent, isStandalone: true, selector: "gio-ps-policies-catalog-dialog", ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n Policies for <span class=\"title__phase\">{{ flowPhaseLabel }}</span> phase\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<ng-container>\n <mat-dialog-content *ngIf=\"!selectedPolicy\" class=\"policiesCatalog\">\n <div class=\"policiesCatalog__filters\" [formGroup]=\"filtersForm\">\n <mat-form-field class=\"policiesCatalog__filters__search\" appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input matInput formControlName=\"search\" />\n <button\n matIconSuffix\n mat-icon-button\n aria-label=\"Clear\"\n *ngIf=\"filtersForm.get('search')?.value\"\n (click)=\"filtersForm.get('search')?.setValue('')\"\n >\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-chip-listbox\n *ngIf=\"categories.length > 1\"\n class=\"policiesCatalog__filters__categories\"\n aria-label=\"Categories selection\"\n multiple\n formControlName=\"categories\"\n >\n <mat-chip-option *ngFor=\"let category of categories\" [selected]=\"category\" [value]=\"category\"\n >{{ category | titlecase }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n\n <div *ngIf=\"policies.length; else emptyPoliciesTpl\" class=\"policiesCatalog__list\">\n <div *ngFor=\"let policy of policies\" class=\"policiesCatalog__list__policy\">\n <div class=\"policiesCatalog__list__policy__head\">\n <mat-icon class=\"policiesCatalog__list__policy__head__icon\" [svgIcon]=\"policy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"policy.name\" class=\"policiesCatalog__list__policy__head__name\">{{ policy.name }}</span>\n\n <span\n *ngIf=\"policy.genericPolicy.type === 'SHARED_POLICY_GROUP'\"\n class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\"\n matTooltip=\"Shared Policy Group\"\n >\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n </div>\n\n <div class=\"policiesCatalog__list__policy__enterprise\" *ngIf=\"policy.deployed === false\">\n <mat-icon\n class=\"policiesCatalog__list__policy__enterprise__lock\"\n [svgIcon]=\"'gio:lock'\"\n matTooltip=\"This policy is only available for users with an enterprise license.\"\n ></mat-icon>\n </div>\n\n <div *ngIf=\"policy.description\" class=\"policiesCatalog__list__policy__description\">{{ policy.description }}</div>\n\n <button class=\"policiesCatalog__list__policy__selectBtn\" mat-stroked-button role=\"dialog\" (click)=\"onSelectPolicy(policy)\">\n Select\n </button>\n </div>\n </div>\n </mat-dialog-content>\n</ng-container>\n\n<ng-template #emptyPoliciesTpl>\n <div class=\"emptyPoliciesCatalog\">No policies available.</div>\n</ng-template>\n\n<mat-dialog-content *ngIf=\"selectedPolicy\" class=\"policyForm\">\n <button class=\"policyForm__goBackBtn\" mat-stroked-button (click)=\"onGoBack()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n Go back\n </button>\n\n <gio-banner *ngIf=\"isUnlicensed\" type=\"error\" icon=\"gio:universe\">\n This policy is only available for users with an enterprise license.\n <span gioBannerBody>Request a license to upgrade your account and unlock this policy</span>\n <div gioBannerAction>\n <a *ngIf=\"trialUrl\" mat-stroked-button [href]=\"trialUrl\" target=\"_blank\">Request upgrade</a>\n </div>\n </gio-banner>\n\n <div class=\"policyForm__info\">\n <div class=\"policyForm__info__head\">\n <mat-icon class=\"policyForm__info__head__icon\" [svgIcon]=\"selectedPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"selectedPolicy.name\" class=\"policyForm__info__head__name\">{{ selectedPolicy.name }}</span>\n\n <span *ngIf=\"selectedPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span>\n </div>\n\n <div *ngIf=\"selectedPolicy.description\" class=\"policyForm__info__description\">{{ selectedPolicy.description }}</div>\n </div>\n\n <gio-ps-step-form\n [genericPolicy]=\"selectedPolicy\"\n [flowPhase]=\"flowPhase\"\n (stepChange)=\"onStepChange($event)\"\n (isValid)=\"onIsValid($event)\"\n ></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button\n *ngIf=\"selectedPolicy\"\n class=\"actions__addBtn\"\n color=\"primary\"\n mat-flat-button\n role=\"dialog\"\n [disabled]=\"!isValid || isUnlicensed\"\n (click)=\"onAddPolicy()\"\n >\n Add policy\n </button>\n</mat-dialog-actions>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}.title__closeBtn{top:0;right:-24px;float:right}.policiesCatalog__filters{display:flex;flex-direction:column;padding:0 0 8px;gap:8px}.policiesCatalog__filters__search{width:100%;height:54px;padding-bottom:0}.policiesCatalog__list{--grid-layout-gap: 16px;--grid-column-count: 3;--grid-item-min-width: 200px;--gap-count: calc(var(--grid-column-count) - 1);--total-gap-width: calc(var(--gap-count) * var(--grid-layout-gap));--grid-item-max-width: calc((100% - var(--total-gap-width)) / var(--grid-column-count));display:grid;grid-gap:var(--grid-layout-gap);grid-template-columns:repeat(auto-fill,minmax(max(var(--grid-item-min-width),var(--grid-item-max-width)),1fr))}.policiesCatalog__list__policy{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;padding:16px;border:1px solid #d3d5dc;border-radius:8px;gap:4px}.policiesCatalog__list__policy__head{display:flex;align-items:center;align-self:stretch}.policiesCatalog__list__policy__head__icon{min-width:24px;flex:0 0 24px;margin-right:8px}.policiesCatalog__list__policy__head__name{overflow:hidden;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.policiesCatalog__list__policy__head__badge{float:left}.policiesCatalog__list__policy__enterprise{position:absolute;top:0;right:0;padding:8px 8px 8px 16px;border-radius:0 8px 0 38px;background:#e7e8ef;color:#6c59bd}.policiesCatalog__list__policy__enterprise__lock{min-width:16px;max-width:16px;color:#6c59bd}.policiesCatalog__list__policy__description{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;color:#606274;-webkit-line-clamp:2}.policiesCatalog__list__policy__description:empty{display:none}.policiesCatalog__list__policy__selectBtn{margin-top:8px}.policyForm__goBackBtn{margin:16px 0}.policyForm__info{display:flex;max-width:100%;flex-direction:column;align-items:flex-start;padding-bottom:16px;gap:4px}.policyForm__info__head{display:flex;align-items:center}.policyForm__info__head__icon{min-width:24px;flex:1 1 24px;margin-right:8px}.policyForm__info__head__name{flex:1 1 auto}.policyForm__info__description{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i6.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i6.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: GioBannerModule }, { kind: "component", type: i8.GioBannerComponent, selector: "gio-banner", inputs: ["type", "icon", "collapsible"] }, { kind: "directive", type: i8.GioBannerBodyDirective, selector: "[gioBannerBody]" }, { kind: "directive", type: i8.GioBannerActionDirective, selector: "[gioBannerAction]" }, { kind: "ngmodule", type: GioIconsModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: GioPolicyStudioStepFormComponent, selector: "gio-ps-step-form", inputs: ["readOnly", "step", "flowPhase", "genericPolicy"], outputs: ["stepChange", "isValid"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
142
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioPoliciesCatalogDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
143
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: GioPolicyStudioPoliciesCatalogDialogComponent, isStandalone: true, selector: "gio-ps-policies-catalog-dialog", ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n Policies for <span class=\"title__phase\">{{ flowPhaseLabel }}</span> phase\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<ng-container>\n <mat-dialog-content *ngIf=\"!selectedPolicy\" class=\"policiesCatalog\">\n <div class=\"policiesCatalog__filters\" [formGroup]=\"filtersForm\">\n <mat-form-field class=\"policiesCatalog__filters__search\" appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input matInput formControlName=\"search\" />\n <button\n matIconSuffix\n mat-icon-button\n aria-label=\"Clear\"\n *ngIf=\"filtersForm.get('search')?.value\"\n (click)=\"filtersForm.get('search')?.setValue('')\"\n >\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-chip-listbox\n *ngIf=\"categories.length > 1\"\n class=\"policiesCatalog__filters__categories\"\n aria-label=\"Categories selection\"\n multiple\n formControlName=\"categories\"\n >\n <mat-chip-option *ngFor=\"let category of categories\" [selected]=\"category\" [value]=\"category\"\n >{{ category | titlecase }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n\n <div *ngIf=\"policies.length; else emptyPoliciesTpl\" class=\"policiesCatalog__list\">\n <div *ngFor=\"let policy of policies\" class=\"policiesCatalog__list__policy\">\n <div class=\"policiesCatalog__list__policy__head\">\n <mat-icon class=\"policiesCatalog__list__policy__head__icon\" [svgIcon]=\"policy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"policy.name\" class=\"policiesCatalog__list__policy__head__name\">{{ policy.name }}</span>\n\n <span\n *ngIf=\"policy.genericPolicy.type === 'SHARED_POLICY_GROUP'\"\n class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\"\n matTooltip=\"Shared Policy Group\"\n >\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n </div>\n\n <div class=\"policiesCatalog__list__policy__enterprise\" *ngIf=\"policy.deployed === false\">\n <mat-icon\n class=\"policiesCatalog__list__policy__enterprise__lock\"\n [svgIcon]=\"'gio:lock'\"\n matTooltip=\"This policy is only available for users with an enterprise license.\"\n ></mat-icon>\n </div>\n\n <div *ngIf=\"policy.description\" class=\"policiesCatalog__list__policy__description\">{{ policy.description }}</div>\n\n <button class=\"policiesCatalog__list__policy__selectBtn\" mat-stroked-button role=\"dialog\" (click)=\"onSelectPolicy(policy)\">\n Select\n </button>\n </div>\n </div>\n </mat-dialog-content>\n</ng-container>\n\n<ng-template #emptyPoliciesTpl>\n <div class=\"emptyPoliciesCatalog\">No policies available.</div>\n</ng-template>\n\n<mat-dialog-content *ngIf=\"selectedPolicy\" class=\"policyForm\">\n <button class=\"policyForm__goBackBtn\" mat-stroked-button (click)=\"onGoBack()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n Go back\n </button>\n\n <gio-banner *ngIf=\"isUnlicensed\" type=\"error\" icon=\"gio:universe\">\n This policy is only available for users with an enterprise license.\n <span gioBannerBody>Request a license to upgrade your account and unlock this policy</span>\n <div gioBannerAction>\n <a *ngIf=\"trialUrl\" mat-stroked-button [href]=\"trialUrl\" target=\"_blank\">Request upgrade</a>\n </div>\n </gio-banner>\n\n <div class=\"policyForm__info\">\n <div class=\"policyForm__info__head\">\n <mat-icon class=\"policyForm__info__head__icon\" [svgIcon]=\"selectedPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"selectedPolicy.name\" class=\"policyForm__info__head__name\">{{ selectedPolicy.name }}</span>\n\n <span *ngIf=\"selectedPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span>\n </div>\n\n <div *ngIf=\"selectedPolicy.description\" class=\"policyForm__info__description\">{{ selectedPolicy.description }}</div>\n </div>\n\n <gio-ps-step-form\n [genericPolicy]=\"selectedPolicy\"\n [flowPhase]=\"flowPhase\"\n (stepChange)=\"onStepChange($event)\"\n (isValid)=\"onIsValid($event)\"\n ></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button\n *ngIf=\"selectedPolicy\"\n class=\"actions__addBtn\"\n color=\"primary\"\n mat-flat-button\n role=\"dialog\"\n [disabled]=\"!isValid || isUnlicensed\"\n (click)=\"onAddPolicy()\"\n >\n Add policy\n </button>\n</mat-dialog-actions>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}.title__closeBtn{top:0;right:-24px;float:right}.policiesCatalog__filters{display:flex;flex-direction:column;padding:0 0 8px;gap:8px}.policiesCatalog__filters__search{width:100%;height:54px;padding-bottom:0}.policiesCatalog__list{--grid-layout-gap: 16px;--grid-column-count: 3;--grid-item-min-width: 200px;--gap-count: calc(var(--grid-column-count) - 1);--total-gap-width: calc(var(--gap-count) * var(--grid-layout-gap));--grid-item-max-width: calc((100% - var(--total-gap-width)) / var(--grid-column-count));display:grid;grid-gap:var(--grid-layout-gap);grid-template-columns:repeat(auto-fill,minmax(max(var(--grid-item-min-width),var(--grid-item-max-width)),1fr))}.policiesCatalog__list__policy{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;padding:16px;border:1px solid #d3d5dc;border-radius:8px;gap:4px}.policiesCatalog__list__policy__head{display:flex;align-items:center;align-self:stretch}.policiesCatalog__list__policy__head__icon{min-width:24px;flex:0 0 24px;margin-right:8px}.policiesCatalog__list__policy__head__name{overflow:hidden;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.policiesCatalog__list__policy__head__badge{float:left}.policiesCatalog__list__policy__enterprise{position:absolute;top:0;right:0;padding:8px 8px 8px 16px;border-radius:0 8px 0 38px;background:#e7e8ef;color:#6c59bd}.policiesCatalog__list__policy__enterprise__lock{min-width:16px;max-width:16px;color:#6c59bd}.policiesCatalog__list__policy__description{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;color:#606274;-webkit-line-clamp:2}.policiesCatalog__list__policy__description:empty{display:none}.policiesCatalog__list__policy__selectBtn{margin-top:8px}.policyForm__goBackBtn{margin:16px 0}.policyForm__info{display:flex;max-width:100%;flex-direction:column;align-items:flex-start;padding-bottom:16px;gap:4px}.policyForm__info__head{display:flex;align-items:center}.policyForm__info__head__icon{min-width:24px;flex:1 1 24px;margin-right:8px}.policyForm__info__head__name{flex:1 1 auto}.policyForm__info__description{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i6.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i6.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: GioBannerModule }, { kind: "component", type: i8.GioBannerComponent, selector: "gio-banner", inputs: ["type", "icon", "collapsible"] }, { kind: "directive", type: i8.GioBannerBodyDirective, selector: "[gioBannerBody]" }, { kind: "directive", type: i8.GioBannerActionDirective, selector: "[gioBannerAction]" }, { kind: "ngmodule", type: GioIconsModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: GioPolicyStudioStepFormComponent, selector: "gio-ps-step-form", inputs: ["readOnly", "step", "flowPhase", "genericPolicy"], outputs: ["stepChange", "isValid"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
144
144
  }
145
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioPoliciesCatalogDialogComponent, decorators: [{
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioPoliciesCatalogDialogComponent, decorators: [{
146
146
  type: Component,
147
147
  args: [{ standalone: true, imports: [
148
148
  CommonModule,
@@ -39,10 +39,10 @@ export class GioPolicyStudioStepEditDialogComponent {
39
39
  ...this.step,
40
40
  });
41
41
  }
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioStepEditDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
43
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: GioPolicyStudioStepEditDialogComponent, isStandalone: true, selector: "gio-ps-step-edit-dialog", ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"genericPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"title__name\">\n {{ step.name }}\n <span *ngIf=\"genericPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span></span\n >\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n\n <div class=\"title__description\">\n {{ genericPolicy.description }}\n </div>\n</h2>\n\n<mat-dialog-content class=\"content\">\n <gio-ps-step-form\n [readOnly]=\"readOnly\"\n [genericPolicy]=\"genericPolicy\"\n [flowPhase]=\"flowPhase\"\n [(step)]=\"step\"\n (isValid)=\"isValid = $event\"\n ></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSave()\" [disabled]=\"!isValid\">Save</button>\n</mat-dialog-actions>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}.title__icon{margin-right:8px}.title__closeBtn{top:0;right:-24px;float:right}.title__description{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: GioIconsModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: GioPolicyStudioStepFormComponent, selector: "gio-ps-step-form", inputs: ["readOnly", "step", "flowPhase", "genericPolicy"], outputs: ["stepChange", "isValid"] }] }); }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioStepEditDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: GioPolicyStudioStepEditDialogComponent, isStandalone: true, selector: "gio-ps-step-edit-dialog", ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"genericPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"title__name\">\n {{ step.name }}\n <span *ngIf=\"genericPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span></span\n >\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n\n <div class=\"title__description\">\n {{ genericPolicy.description }}\n </div>\n</h2>\n\n<mat-dialog-content class=\"content\">\n <gio-ps-step-form\n [readOnly]=\"readOnly\"\n [genericPolicy]=\"genericPolicy\"\n [flowPhase]=\"flowPhase\"\n [(step)]=\"step\"\n (isValid)=\"isValid = $event\"\n ></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSave()\" [disabled]=\"!isValid\">Save</button>\n</mat-dialog-actions>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}.title__icon{margin-right:8px}.title__closeBtn{top:0;right:-24px;float:right}.title__description{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: GioIconsModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: GioPolicyStudioStepFormComponent, selector: "gio-ps-step-form", inputs: ["readOnly", "step", "flowPhase", "genericPolicy"], outputs: ["stepChange", "isValid"] }] }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioStepEditDialogComponent, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioStepEditDialogComponent, decorators: [{
46
46
  type: Component,
47
47
  args: [{ standalone: true, imports: [CommonModule, MatButtonModule, MatDialogModule, GioIconsModule, GioPolicyStudioStepFormComponent], selector: 'gio-ps-step-edit-dialog', template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"genericPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"title__name\">\n {{ step.name }}\n <span *ngIf=\"genericPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span></span\n >\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n\n <div class=\"title__description\">\n {{ genericPolicy.description }}\n </div>\n</h2>\n\n<mat-dialog-content class=\"content\">\n <gio-ps-step-form\n [readOnly]=\"readOnly\"\n [genericPolicy]=\"genericPolicy\"\n [flowPhase]=\"flowPhase\"\n [(step)]=\"step\"\n (isValid)=\"isValid = $event\"\n ></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSave()\" [disabled]=\"!isValid\">Save</button>\n</mat-dialog-actions>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}.title__icon{margin-right:8px}.title__closeBtn{top:0;right:-24px;float:right}.title__description{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"] }]
48
48
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
@@ -108,10 +108,10 @@ export class GioPolicyStudioStepFormComponent {
108
108
  configuration,
109
109
  });
110
110
  }
111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioStepFormComponent, deps: [{ token: i1.GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component }); }
112
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: GioPolicyStudioStepFormComponent, isStandalone: true, selector: "gio-ps-step-form", inputs: { readOnly: "readOnly", step: "step", flowPhase: "flowPhase", genericPolicy: "genericPolicy" }, outputs: { stepChange: "stepChange", isValid: "isValid" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"settings\">\n <div class=\"settings__header\">Settings</div>\n\n <div class=\"settings__content\">\n <ng-container *ngIf=\"stepForm && (policySchema$ | async) as policySchema; else loadingTmpl\" [formGroup]=\"stepForm\">\n <mat-form-field>\n <mat-label>Description</mat-label>\n <textarea matInput formControlName=\"description\" cdkFocusInitial></textarea>\n <mat-hint>Describe how your policy works.</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Trigger condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>The condition to execute this policy. Supports Expression Language.</mat-hint>\n </mat-form-field>\n\n @if (isMessage) {\n <mat-form-field>\n <mat-label>Message trigger condition</mat-label>\n <input matInput formControlName=\"messageCondition\" />\n <mat-hint>The condition to execute this policy on message. Supports Expression Language.</mat-hint>\n </mat-form-field>\n }\n\n <gio-form-json-schema\n *ngIf=\"policySchema\"\n [jsonSchema]=\"$any(policySchema)\"\n [context]=\"context\"\n (ready)=\"onJsonSchemaReady($event)\"\n formControlName=\"configuration\"\n ></gio-form-json-schema>\n </ng-container>\n </div>\n</div>\n\n<div class=\"documentation\">\n <div class=\"documentation__header\">Documentation</div>\n\n <div class=\"documentation__content\">\n <gio-banner-warning *ngIf=\"infoBanner\">\n Prerequisite message\n <span gioBannerBody>{{ infoBanner }}</span>\n </gio-banner-warning>\n <ng-container *ngIf=\"policyDocumentation$ | async as policyDocumentation; else loadingTmpl\">\n <gio-asciidoctor [content]=\"policyDocumentation\"></gio-asciidoctor>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loadingTmpl>\n <gio-loader></gio-loader>\n</ng-template>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;flex-direction:row;border:1px solid #d3d5dc;border-radius:8px}.settings{display:flex;flex:0 0 50%;flex-direction:column}.settings__header{border-right:1px solid #d3d5dc}.settings__content{display:flex;flex:1 1 auto;flex-direction:column;padding:16px;border-right:1px solid #d3d5dc}.documentation{display:flex;overflow:auto;flex:0 0 50%;flex-direction:column}.documentation__content{overflow:auto;flex:1 1 auto;padding:16px}.settings__header,.documentation__header{padding:16px;border-bottom:1px solid #d3d5dc;font-size:14px;font-weight:500;line-height:20px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: GioFormJsonSchemaModule }, { kind: "component", type: i6.GioFormJsonSchemaComponent, selector: "gio-form-json-schema", inputs: ["jsonSchema", "context", "options"], outputs: ["ready"] }, { kind: "ngmodule", type: GioAsciidoctorModule }, { kind: "component", type: i7.GioAsciidoctorComponent, selector: "gio-asciidoctor", inputs: ["content", "src"] }, { kind: "ngmodule", type: GioLoaderModule }, { kind: "component", type: i6.GioLoaderComponent, selector: "gio-loader" }, { kind: "ngmodule", type: GioBannerModule }, { kind: "component", type: i6.GioBannerWarningComponent, selector: "gio-banner-warning" }, { kind: "directive", type: i6.GioBannerBodyDirective, selector: "[gioBannerBody]" }] }); }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioStepFormComponent, deps: [{ token: i1.GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component }); }
112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: GioPolicyStudioStepFormComponent, isStandalone: true, selector: "gio-ps-step-form", inputs: { readOnly: "readOnly", step: "step", flowPhase: "flowPhase", genericPolicy: "genericPolicy" }, outputs: { stepChange: "stepChange", isValid: "isValid" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"settings\">\n <div class=\"settings__header\">Settings</div>\n\n <div class=\"settings__content\">\n <ng-container *ngIf=\"stepForm && (policySchema$ | async) as policySchema; else loadingTmpl\" [formGroup]=\"stepForm\">\n <mat-form-field>\n <mat-label>Description</mat-label>\n <textarea matInput formControlName=\"description\" cdkFocusInitial></textarea>\n <mat-hint>Describe how your policy works.</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Trigger condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>The condition to execute this policy. Supports Expression Language.</mat-hint>\n </mat-form-field>\n\n @if (isMessage) {\n <mat-form-field>\n <mat-label>Message trigger condition</mat-label>\n <input matInput formControlName=\"messageCondition\" />\n <mat-hint>The condition to execute this policy on message. Supports Expression Language.</mat-hint>\n </mat-form-field>\n }\n\n <gio-form-json-schema\n *ngIf=\"policySchema\"\n [jsonSchema]=\"$any(policySchema)\"\n [context]=\"context\"\n (ready)=\"onJsonSchemaReady($event)\"\n formControlName=\"configuration\"\n ></gio-form-json-schema>\n </ng-container>\n </div>\n</div>\n\n<div class=\"documentation\">\n <div class=\"documentation__header\">Documentation</div>\n\n <div class=\"documentation__content\">\n <gio-banner-warning *ngIf=\"infoBanner\">\n Prerequisite message\n <span gioBannerBody>{{ infoBanner }}</span>\n </gio-banner-warning>\n <ng-container *ngIf=\"policyDocumentation$ | async as policyDocumentation; else loadingTmpl\">\n <gio-asciidoctor [content]=\"policyDocumentation\"></gio-asciidoctor>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loadingTmpl>\n <gio-loader></gio-loader>\n</ng-template>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;flex-direction:row;border:1px solid #d3d5dc;border-radius:8px}.settings{display:flex;flex:0 0 50%;flex-direction:column}.settings__header{border-right:1px solid #d3d5dc}.settings__content{display:flex;flex:1 1 auto;flex-direction:column;padding:16px;border-right:1px solid #d3d5dc}.documentation{display:flex;overflow:auto;flex:0 0 50%;flex-direction:column}.documentation__content{overflow:auto;flex:1 1 auto;padding:16px}.settings__header,.documentation__header{padding:16px;border-bottom:1px solid #d3d5dc;font-size:14px;font-weight:500;line-height:20px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: GioFormJsonSchemaModule }, { kind: "component", type: i6.GioFormJsonSchemaComponent, selector: "gio-form-json-schema", inputs: ["jsonSchema", "context", "options"], outputs: ["ready"] }, { kind: "ngmodule", type: GioAsciidoctorModule }, { kind: "component", type: i7.GioAsciidoctorComponent, selector: "gio-asciidoctor", inputs: ["content", "src"] }, { kind: "ngmodule", type: GioLoaderModule }, { kind: "component", type: i6.GioLoaderComponent, selector: "gio-loader" }, { kind: "ngmodule", type: GioBannerModule }, { kind: "component", type: i6.GioBannerWarningComponent, selector: "gio-banner-warning" }, { kind: "directive", type: i6.GioBannerBodyDirective, selector: "[gioBannerBody]" }] }); }
113
113
  }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioStepFormComponent, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioStepFormComponent, decorators: [{
115
115
  type: Component,
116
116
  args: [{ standalone: true, imports: [
117
117
  CommonModule,
@@ -147,7 +147,7 @@ export class GioPolicyGroupStudioComponent {
147
147
  this.isLoading = false;
148
148
  this.genericPolicies = toGenericPolicies(this._policies);
149
149
  }
150
- if (changes.executionPhase) {
150
+ if (changes.executionPhase || changes.flowPhase) {
151
151
  this.policyGroupVM = this.phases[`${this.apiType}__${this.flowPhase}`] ?? undefined;
152
152
  this.startConnector = this.createStartConnector(this.policyGroupVM?.startConnectorName ?? '');
153
153
  this.endConnector = this.createEndConnector(this.policyGroupVM?.endConnectorName ?? '');
@@ -160,10 +160,10 @@ export class GioPolicyGroupStudioComponent {
160
160
  this.steps = steps;
161
161
  this.policyGroupChange.emit(steps);
162
162
  }
163
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyGroupStudioComponent, deps: [{ token: i1.GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component }); }
164
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: GioPolicyGroupStudioComponent, isStandalone: true, selector: "gio-policy-group-studio", inputs: { policies: ["policies", "policies", (policies) => policies ?? []], readOnly: "readOnly", apiType: "apiType", executionPhase: "executionPhase", flowPhase: "flowPhase", policySchemaFetcher: "policySchemaFetcher", policyDocumentationFetcher: "policyDocumentationFetcher", policyGroup: "policyGroup" }, outputs: { policyGroupChange: "policyGroupChange" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (!isLoading && policyGroupVM) {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n [name]=\"policyGroupVM.name\"\n [description]=\"policyGroupVM.description\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"startConnector\"\n [endConnector]=\"endConnector\"\n [steps]=\"steps\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n [policyFlowPhase]=\"flowPhase\"\n (stepsChange)=\"onStepsChange($event)\"\n ></gio-ps-flow-details-phase>\n} @else {\n <gio-loader></gio-loader>\n}\n", styles: [""], dependencies: [{ kind: "component", type: GioPolicyStudioDetailsPhaseComponent, selector: "gio-ps-flow-details-phase", inputs: ["readOnly", "steps", "name", "description", "startConnector", "endConnector", "apiType", "genericPolicies", "policyFlowPhase", "trialUrl"], outputs: ["stepsChange"] }, { kind: "ngmodule", type: GioFormJsonSchemaModule }, { kind: "ngmodule", type: GioLoaderModule }, { kind: "component", type: i2.GioLoaderComponent, selector: "gio-loader" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyGroupStudioComponent, deps: [{ token: i1.GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component }); }
164
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: GioPolicyGroupStudioComponent, isStandalone: true, selector: "gio-policy-group-studio", inputs: { policies: ["policies", "policies", (policies) => policies ?? []], readOnly: "readOnly", apiType: "apiType", executionPhase: "executionPhase", flowPhase: "flowPhase", policySchemaFetcher: "policySchemaFetcher", policyDocumentationFetcher: "policyDocumentationFetcher", policyGroup: "policyGroup" }, outputs: { policyGroupChange: "policyGroupChange" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (!isLoading && policyGroupVM) {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n [name]=\"policyGroupVM.name\"\n [description]=\"policyGroupVM.description\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"startConnector\"\n [endConnector]=\"endConnector\"\n [steps]=\"steps\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n [policyFlowPhase]=\"flowPhase\"\n (stepsChange)=\"onStepsChange($event)\"\n ></gio-ps-flow-details-phase>\n} @else {\n <gio-loader></gio-loader>\n}\n", styles: [""], dependencies: [{ kind: "component", type: GioPolicyStudioDetailsPhaseComponent, selector: "gio-ps-flow-details-phase", inputs: ["readOnly", "steps", "name", "description", "startConnector", "endConnector", "apiType", "genericPolicies", "policyFlowPhase", "trialUrl"], outputs: ["stepsChange"] }, { kind: "ngmodule", type: GioFormJsonSchemaModule }, { kind: "ngmodule", type: GioLoaderModule }, { kind: "component", type: i2.GioLoaderComponent, selector: "gio-loader" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
165
165
  }
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyGroupStudioComponent, decorators: [{
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyGroupStudioComponent, decorators: [{
167
167
  type: Component,
168
168
  args: [{ selector: 'gio-policy-group-studio', standalone: true, imports: [GioPolicyStudioDetailsPhaseComponent, GioFormJsonSchemaModule, GioLoaderModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (!isLoading && policyGroupVM) {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n [name]=\"policyGroupVM.name\"\n [description]=\"policyGroupVM.description\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"startConnector\"\n [endConnector]=\"endConnector\"\n [steps]=\"steps\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n [policyFlowPhase]=\"flowPhase\"\n (stepsChange)=\"onStepsChange($event)\"\n ></gio-ps-flow-details-phase>\n} @else {\n <gio-loader></gio-loader>\n}\n" }]
169
169
  }], ctorParameters: () => [{ type: i1.GioPolicyStudioService }], propDecorators: { policies: [{
@@ -191,4 +191,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
191
191
  }], policyGroupChange: [{
192
192
  type: Output
193
193
  }] } });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLXBvbGljeS1ncm91cC1zdHVkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcG9saWN5LXN0dWRpby1hbmd1bGFyL3NyYy9saWIvcG9saWN5LWdyb3VwLXN0dWRpby9naW8tcG9saWN5LWdyb3VwLXN0dWRpby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wb2xpY3ktc3R1ZGlvLWFuZ3VsYXIvc3JjL2xpYi9wb2xpY3ktZ3JvdXAtc3R1ZGlvL2dpby1wb2xpY3ktZ3JvdXAtc3R1ZGlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFMUYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDNUgsT0FBTyxFQUtMLGtCQUFrQixFQUNsQixlQUFlLEVBT2YsaUJBQWlCLEdBQ2xCLE1BQU0sV0FBVyxDQUFDOzs7O0FBcUJuQixNQUFNLE9BQU8sNkJBQTZCO0lBQ3hDOztPQUVHO0lBQ0gsSUFHVyxRQUFRLENBQUMsS0FBK0I7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFlRDs7O09BR0c7SUFDSCxJQUNXLGNBQWMsQ0FBQyxLQUFxQjtRQUM3QyxJQUFJ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VGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdpb0Zvcm1Kc29uU2NoZW1hTW9kdWxlLCBHaW9Mb2FkZXJNb2R1bGUgfSBmcm9tICdAZ3Jhdml0ZWUvdWktcGFydGljbGVzLWFuZ3VsYXInO1xuXG5pbXBvcnQgeyBHaW9Qb2xpY3lTdHVkaW9EZXRhaWxzUGhhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2Zsb3ctZGV0YWlscy1waGFzZS9naW8tcHMtZmxvdy1kZXRhaWxzLXBoYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBBcGlUeXBlLFxuICBDb25uZWN0b3JJbmZvLFxuICBFeGVjdXRpb25QaGFzZSxcbiAgRmxvd1BoYXNlLFxuICBmcm9tRXhlY3V0aW9uUGhhc2UsXG4gIGZyb21Qb2xpY3lJbnB1dCxcbiAgR2VuZXJpY1BvbGljeSxcbiAgUG9saWN5LFxuICBQb2xpY3lEb2N1bWVudGF0aW9uRmV0Y2hlcixcbiAgUG9saWN5SW5wdXQsXG4gIFBvbGljeVNjaGVtYUZldGNoZXIsXG4gIFN0ZXAsXG4gIHRvR2VuZXJpY1BvbGljaWVzLFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgR2lvUG9saWN5U3R1ZGlvU2VydmljZSB9IGZyb20gJy4uL3BvbGljeS1zdHVkaW8vZ2lvLXBvbGljeS1zdHVkaW8uc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIFBvbGljeUdyb3VwT3V0cHV0ID0gU3RlcFtdO1xuZXhwb3J0IHR5cGUgUG9saWN5R3JvdXBJbnB1dCA9IFN0ZXBbXTtcblxudHlwZSBQb2xpY3lHcm91cFZNID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXJ0Q29ubmVjdG9yTmFtZTogc3RyaW5nO1xuICBlbmRDb25uZWN0b3JOYW1lOiBzdHJpbmc7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tcG9saWN5LWdyb3VwLXN0dWRpbycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtHaW9Qb2xpY3lTdHVkaW9EZXRhaWxzUGhhc2VDb21wb25lbnQsIEdpb0Zvcm1Kc29uU2NoZW1hTW9kdWxlLCBHaW9Mb2FkZXJNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2lvLXBvbGljeS1ncm91cC1zdHVkaW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2lvLXBvbGljeS1ncm91cC1zdHVkaW8uY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgR2lvUG9saWN5R3JvdXBTdHVkaW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogTGlzdCBvZiBwb2xpY2llcyB1c2FibGUgaW4gdGhlIHN0dWRpb1xuICAgKi9cbiAgQElucHV0KHtcbiAgICB0cmFuc2Zvcm06IChwb2xpY2llczogdW5rbm93bikgPT4gcG9saWNpZXMgPz8gW10sXG4gIH0pXG4gIHB1YmxpYyBzZXQgcG9saWNpZXModmFsdWU6IChQb2xpY3lJbnB1dCB8IFBvbGljeSlbXSkge1xuICAgIHRoaXMuX3BvbGljaWVzID0gdmFsdWUubWFwKGZyb21Qb2xpY3lJbnB1dCk7XG4gIH1cbiAgcHVibGljIGdldCBwb2xpY2llcygpOiBQb2xpY3lbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BvbGljaWVzO1xuICB9XG4gIHByaXZhdGUgX3BvbGljaWVzOiBQb2xpY3lbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBQb2xpY3kgR3JvdXAgU3R1ZGlvIGlzIGluIHJlYWQtb25seSBtb2RlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgQVBJIHRhcmdldGVkIGJ5IHRoZSBQb2xpY3kgR3JvdXAgU3R1ZGlvXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgYXBpVHlwZSE6IEFwaVR5cGU7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiBwaGFzZSB0YXJnZXRlZCBieSB0aGUgUG9saWN5IEdyb3VwIFN0dWRpb1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGZsb3dQaGFzZWAgaW5zdGVhZC4gVG8ga2VlcCBhcyBsb25nIGFzIHdlIHN1cHBvcnQgQVBJTSA8IDQuNlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBleGVjdXRpb25QaGFzZSh2YWx1ZTogRXhlY3V0aW9uUGhhc2UpIHtcbiAgICB0aGlzLmZsb3dQaGFzZSA9IGZyb21FeGVjdXRpb25QaGFzZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0aW9uIHBoYXNlIHRhcmdldGVkIGJ5IHRoZSBQb2xpY3kgR3JvdXAgU3R1ZGlvXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmxvd1BoYXNlITogRmxvd1BoYXNlO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBQb2xpY3kgR3JvdXAgU3R1ZGlvIG5lZWRzIHRvIGZldGNoIHRoZSBwb2xpY3kgc2NoZW1hXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHBvbGljeSBzY2hlbWFcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBwb2xpY3lTY2hlbWFGZXRjaGVyOiBQb2xpY3lTY2hlbWFGZXRjaGVyID0gKCkgPT4gRU1QVFk7XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIFBvbGljeSBHcm91cCBTdHVkaW8gbmVlZHMgdG8gZmV0Y2ggdGhlIHBvbGljeSBkb2N1bWVudGF0aW9uXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHBvbGljeSBkb2N1bWVudGF0aW9uXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgcG9saWN5RG9jdW1lbnRhdGlvbkZldGNoZXI6IFBvbGljeURvY3VtZW50YXRpb25GZXRjaGVyID0gKCkgPT4gRU1QVFk7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBvbGljeUdyb3VwOiBQb2xpY3lHcm91cElucHV0ID0gW107XG5cbiAgLyoqXG4gICAqIE91dHB1dCBldmVudCB3aGVuIHRoZSBQb2xpY3kgR3JvdXAgU3R1ZGlvIGNoYW5nZXNcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcG9saWN5R3JvdXBDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQb2xpY3lHcm91cE91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBvbGljeUdyb3VwT3V0cHV0PigpO1xuXG4gIHByb3RlY3RlZCBpc0xvYWRpbmcgPSB0cnVlO1xuICBwcm90ZWN0ZWQgY3JlYXRlU3RhcnRDb25uZWN0b3I6IChuYW1lOiBzdHJpbmcpID0+IENvbm5lY3RvckluZm9bXSA9IG5hbWUgPT4gW1xuICAgIHtcbiAgICAgIG5hbWUsXG4gICAgICBpY29uOiAnZ2lvOmFycm93LXJpZ2h0JyxcbiAgICAgIHR5cGU6ICdzdGFydCcsXG4gICAgICBzdXBwb3J0ZWRNb2RlczogW10sXG4gICAgfSxcbiAgXTtcbiAgcHJvdGVjdGVkIGNyZWF0ZUVuZENvbm5lY3RvcjogKG5hbWU6IHN0cmluZykgPT4gQ29ubmVjdG9ySW5mb1tdID0gbmFtZSA9PiBbXG4gICAge1xuICAgICAgbmFtZSxcbiAgICAgIGljb246ICdnaW86YXJyb3ctcmlnaHQnLFxuICAgICAgdHlwZTogJ2VuZCcsXG4gICAgICBzdXBwb3J0ZWRNb2RlczogW10sXG4gICAgfSxcbiAgXTtcbiAgcHJvdGVjdGVkIHBvbGljeUdyb3VwVk0/OiBQb2xpY3lHcm91cFZNO1xuICBwcm90ZWN0ZWQgc3RlcHM6IFN0ZXBbXSA9IFtdO1xuICBwcm90ZWN0ZWQgdHJpYWxVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIGdlbmVyaWNQb2xpY2llczogR2VuZXJpY1BvbGljeVtdID0gW107XG4gIHByb3RlY3RlZCBzdGFydENvbm5lY3RvcjogQ29ubmVjdG9ySW5mb1tdID0gW107XG4gIHByb3RlY3RlZCBlbmRDb25uZWN0b3I6IENvbm5lY3RvckluZm9bXSA9IFtdO1xuXG4gIHByaXZhdGUgcGhhc2VzOiBSZWNvcmQ8YCR7QXBpVHlwZX1fXyR7Rmxvd1BoYXNlfWAsIFBvbGljeUdyb3VwVk0gfCBudWxsPiA9IHtcbiAgICAvLyBIVFRQIFByb3h5XG4gICAgUFJPWFlfX1JFUVVFU1Q6IHtcbiAgICAgIG5hbWU6ICdSZXF1ZXN0IHBoYXNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUG9saWNpZXMgd2lsbCBiZSBhcHBsaWVkIGR1cmluZyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50JyxcbiAgICAgIHN0YXJ0Q29ubmVjdG9yTmFtZTogJ0luY29taW5nIHJlcXVlc3QnLFxuICAgICAgZW5kQ29ubmVjdG9yTmFtZTogJ091dGdvaW5nIHJlcXVlc3QnLFxuICAgIH0sXG4gICAgUFJPWFlfX1JFU1BPTlNFOiB7XG4gICAgICBuYW1lOiAnUmVzcG9uc2UgcGhhc2UnLFxuICAgICAgZGVzY3JpcHRpb246ICdQb2xpY2llcyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHJlc3BvbnNlIGZyb20gdGhlIGluaXRpYWwgY29ubmVjdGlvbi4nLFxuICAgICAgc3RhcnRDb25uZWN0b3JOYW1lOiAnSW5jb21pbmcgcmVzcG9uc2UnLFxuICAgICAgZW5kQ29ubmVjdG9yTmFtZTogJ091dGdvaW5nIHJlc3BvbnNlJyxcbiAgICB9LFxuICAgIFBST1hZX19QVUJMSVNIOiBudWxsLCAvLyBuL2FcbiAgICBQUk9YWV9fU1VCU0NSSUJFOiBudWxsLCAvLyBuL2FcbiAgICBQUk9YWV9fQ09OTkVDVDogbnVsbCwgLy8gbi9hXG4gICAgUFJPWFlfX0lOVEVSQUNUOiBudWxsLCAvLyBuL2FcbiAgICAvLyBIVFRQIE1lc3NhZ2VcbiAgICBNRVNTQUdFX19SRVFVRVNUOiB7XG4gICAgICBuYW1lOiAnUmVxdWVzdCBwaGFzZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1BvbGljaWVzIHdpbGwgYmUgYXBwbGllZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCcsXG4gICAgICBzdGFydENvbm5lY3Rvck5hbWU6ICdJbmNvbWluZyByZXF1ZXN0JyxcbiAgICAgIGVuZENvbm5lY3Rvck5hbWU6ICdPdXRnb2luZyByZXF1ZXN0JyxcbiAgICB9LFxuICAgIE1FU1NBR0VfX1JFU1BPTlNFOiB7XG4gICAgICBuYW1lOiAnUmVzcG9uc2UgcGhhc2UnLFxuICAgICAgZGVzY3JpcHRpb246ICdQb2xpY2llcyB3aWxsIGJlIGFwcGxpZWQgZHVyaW5nIHRoZSBjb25uZWN0aW9uIHRlcm1pbmF0aW9uJyxcbiAgICAgIHN0YXJ0Q29ubmVjdG9yTmFtZTogJ0luY29taW5nIHJlc3BvbnNlJyxcbiAgICAgIGVuZENvbm5lY3Rvck5hbWU6ICdPdXRnb2luZyByZXNwb25zZScsXG4gICAgfSxcbiAgICBNRVNTQUdFX19QVUJMSVNIOiB7XG4gICAgICBuYW1lOiAnUHVibGlzaCBwaGFzZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1BvbGljaWVzIHdpbGwgYmUgYXBwbGllZCBvbiBtZXNzYWdlcyBzZW50IHRvIHRoZSBlbmRwb2ludCcsXG4gICAgICBzdGFydENvbm5lY3Rvck5hbWU6ICdJbmNvbWluZyBtZXNzYWdlIHJlcXVlc3QnLFxuICAgICAgZW5kQ29ubmVjdG9yTmFtZTogJ091dGdvaW5nIG1lc3NhZ2UgcmVxdWVzdCcsXG4gICAgfSxcbiAgICBNRVNTQUdFX19TVUJTQ1JJQkU6IHtcbiAgICAgIG5hbWU6ICdTdWJzY3JpYmUgcGhhc2UnLFxuICAgICAgZGVzY3JpcHRpb246ICdQb2xpY2llcyB3aWxsIGJlIGFwcGxpZWQgb24gbWVzc2FnZXMgcmVjZWl2ZWQgYnkgdGhlIGVudHJ5cG9pbnQnLFxuICAgICAgc3RhcnRDb25uZWN0b3JOYW1lOiAnSW5jb21pbmcgbWVzc2FnZSByZXNwb25zZScsXG4gICAgICBlbmRDb25uZWN0b3JOYW1lOiAnT3V0Z29pbmcgbWVzc2FnZSByZXNwb25zZScsXG4gICAgfSxcbiAgICBNRVNTQUdFX19DT05ORUNUOiBudWxsLCAvLyBuL2FcbiAgICBNRVNTQUdFX19JTlRFUkFDVDogbnVsbCwgLy8gbi9hXG4gICAgLy8gTkFUSVZFXG4gICAgLy8gVE9ETzogVG8gaW1wbGVtZW50IHdlIHdhbnQgdG8gbWFrZSBQUyBjb21wYXRpYmxlIHdpdGggdGhlIG5hdGl2ZSBBUElcbiAgICBOQVRJVkVfX0NPTk5FQ1Q6IG51bGwsIC8vIG4vYVxuICAgIE5BVElWRV9fSU5URVJBQ1Q6IG51bGwsIC8vIG4vYVxuICAgIE5BVElWRV9fUFVCTElTSDogbnVsbCwgLy8gbi9hXG4gICAgTkFUSVZFX19TVUJTQ1JJQkU6IG51bGwsIC8vIG4vYVxuICAgIE5BVElWRV9fUkVRVUVTVDogbnVsbCwgLy8gbi9hXG4gICAgTkFUSVZFX19SRVNQT05TRTogbnVsbCwgLy8gbi9hXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwb2xpY3lTdHVkaW9TZXJ2aWNlOiBHaW9Qb2xpY3lTdHVkaW9TZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMucG9saWN5U2NoZW1hRmV0Y2hlcikge1xuICAgICAgdGhpcy5wb2xpY3lTdHVkaW9TZXJ2aWNlLnNldFBvbGljeVNjaGVtYUZldGNoZXIodGhpcy5wb2xpY3lTY2hlbWFGZXRjaGVyKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5wb2xpY3lEb2N1bWVudGF0aW9uRmV0Y2hlcikge1xuICAgICAgdGhpcy5wb2xpY3lTdHVkaW9TZXJ2aWNlLnNldFBvbGljeURvY3VtZW50YXRpb25GZXRjaGVyKHRoaXMucG9saWN5RG9jdW1lbnRhdGlvbkZldGNoZXIpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5wb2xpY2llcykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2VuZXJpY1BvbGljaWVzID0gdG9HZW5lcmljUG9saWNpZXModGhpcy5fcG9saWNpZXMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5leGVjdXRpb25QaGFzZSkge1xuICAgICAgdGhpcy5wb2xpY3lHcm91cFZNID0gdGhpcy5waGFzZXNbYCR7dGhpcy5hcGlUeXBlfV9fJHt0aGlzLmZsb3dQaGFzZX1gXSA/PyB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0YXJ0Q29ubmVjdG9yID0gdGhpcy5jcmVhdGVTdGFydENvbm5lY3Rvcih0aGlzLnBvbGljeUdyb3VwVk0/LnN0YXJ0Q29ubmVjdG9yTmFtZSA/PyAnJyk7XG4gICAgICB0aGlzLmVuZENvbm5lY3RvciA9IHRoaXMuY3JlYXRlRW5kQ29ubmVjdG9yKHRoaXMucG9saWN5R3JvdXBWTT8uZW5kQ29ubmVjdG9yTmFtZSA/PyAnJyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnBvbGljeUdyb3VwKSB7XG4gICAgICB0aGlzLnN0ZXBzID0gdGhpcy5wb2xpY3lHcm91cDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TdGVwc0NoYW5nZShzdGVwczogU3RlcFtdKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcyA9IHN0ZXBzO1xuICAgIHRoaXMucG9saWN5R3JvdXBDaGFuZ2UuZW1pdChzdGVwcyk7XG4gIH1cbn1cbiIsIjwhLS1cblxuICAgIENvcHlyaWdodCAoQykgMjAyNCBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICAgIFxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgIFxuICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi0tPlxuQGlmICghaXNMb2FkaW5nICYmIHBvbGljeUdyb3VwVk0pIHtcbiAgPGdpby1wcy1mbG93LWRldGFpbHMtcGhhc2VcbiAgICBjbGFzcz1cImNvbnRlbnRfX3BoYXNlXCJcbiAgICBbbmFtZV09XCJwb2xpY3lHcm91cFZNLm5hbWVcIlxuICAgIFtkZXNjcmlwdGlvbl09XCJwb2xpY3lHcm91cFZNLmRlc2NyaXB0aW9uXCJcbiAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgIFtzdGFydENvbm5lY3Rvcl09XCJzdGFydENvbm5lY3RvclwiXG4gICAgW2VuZENvbm5lY3Rvcl09XCJlbmRDb25uZWN0b3JcIlxuICAgIFtzdGVwc109XCJzdGVwc1wiXG4gICAgW2FwaVR5cGVdPVwiYXBpVHlwZVwiXG4gICAgW2dlbmVyaWNQb2xpY2llc109XCJnZW5lcmljUG9saWNpZXNcIlxuICAgIFt0cmlhbFVybF09XCJ0cmlhbFVybFwiXG4gICAgW3BvbGljeUZsb3dQaGFzZV09XCJmbG93UGhhc2VcIlxuICAgIChzdGVwc0NoYW5nZSk9XCJvblN0ZXBzQ2hhbmdlKCRldmVudClcIlxuICA+PC9naW8tcHMtZmxvdy1kZXRhaWxzLXBoYXNlPlxufSBAZWxzZSB7XG4gIDxnaW8tbG9hZGVyPjwvZ2lvLWxvYWRlcj5cbn1cbiJdfQ==
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLXBvbGljeS1ncm91cC1zdHVkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcG9saWN5LXN0dWRpby1hbmd1bGFyL3NyYy9saWIvcG9saWN5LWdyb3VwLXN0dWRpby9naW8tcG9saWN5LWdyb3VwLXN0dWRpby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wb2xpY3ktc3R1ZGlvLWFuZ3VsYXIvc3JjL2xpYi9wb2xpY3ktZ3JvdXAtc3R1ZGlvL2dpby1wb2xpY3ktZ3JvdXAtc3R1ZGlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFMUYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDNUgsT0FBTyxFQUtMLGtCQUFrQixFQUNsQixlQUFlLEVBT2YsaUJBQWlCLEdBQ2xCLE1BQU0sV0FBVyxDQUFDOzs7O0FBcUJuQixNQUFNLE9BQU8sNkJBQTZCO0lBQ3hDOztPQUVHO0lBQ0gsSUFHVyxRQUFRLENBQUMsS0FBK0I7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFlRDs7O09BR0c7SUFDSCxJQUNXLGNBQWMsQ0FBQyxLQUFxQjtRQUM3QyxJQUFJ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IENvcHlyaWdodCAoQykgMjAyNCBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTVBUWSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR2lvRm9ybUpzb25TY2hlbWFNb2R1bGUsIEdpb0xvYWRlck1vZHVsZSB9IGZyb20gJ0BncmF2aXRlZS91aS1wYXJ0aWNsZXMtYW5ndWxhcic7XG5cbmltcG9ydCB7IEdpb1BvbGljeVN0dWRpb0RldGFpbHNQaGFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmxvdy1kZXRhaWxzLXBoYXNlL2dpby1wcy1mbG93LWRldGFpbHMtcGhhc2UuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEFwaVR5cGUsXG4gIENvbm5lY3RvckluZm8sXG4gIEV4ZWN1dGlvblBoYXNlLFxuICBGbG93UGhhc2UsXG4gIGZyb21FeGVjdXRpb25QaGFzZSxcbiAgZnJvbVBvbGljeUlucHV0LFxuICBHZW5lcmljUG9saWN5LFxuICBQb2xpY3ksXG4gIFBvbGljeURvY3VtZW50YXRpb25GZXRjaGVyLFxuICBQb2xpY3lJbnB1dCxcbiAgUG9saWN5U2NoZW1hRmV0Y2hlcixcbiAgU3RlcCxcbiAgdG9HZW5lcmljUG9saWNpZXMsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBHaW9Qb2xpY3lTdHVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vcG9saWN5LXN0dWRpby9naW8tcG9saWN5LXN0dWRpby5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgUG9saWN5R3JvdXBPdXRwdXQgPSBTdGVwW107XG5leHBvcnQgdHlwZSBQb2xpY3lHcm91cElucHV0ID0gU3RlcFtdO1xuXG50eXBlIFBvbGljeUdyb3VwVk0gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhcnRDb25uZWN0b3JOYW1lOiBzdHJpbmc7XG4gIGVuZENvbm5lY3Rvck5hbWU6IHN0cmluZztcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpby1wb2xpY3ktZ3JvdXAtc3R1ZGlvJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0dpb1BvbGljeVN0dWRpb0RldGFpbHNQaGFzZUNvbXBvbmVudCwgR2lvRm9ybUpzb25TY2hlbWFNb2R1bGUsIEdpb0xvYWRlck1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9naW8tcG9saWN5LWdyb3VwLXN0dWRpby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9naW8tcG9saWN5LWdyb3VwLXN0dWRpby5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBHaW9Qb2xpY3lHcm91cFN0dWRpb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHBvbGljaWVzIHVzYWJsZSBpbiB0aGUgc3R1ZGlvXG4gICAqL1xuICBASW5wdXQoe1xuICAgIHRyYW5zZm9ybTogKHBvbGljaWVzOiB1bmtub3duKSA9PiBwb2xpY2llcyA/PyBbXSxcbiAgfSlcbiAgcHVibGljIHNldCBwb2xpY2llcyh2YWx1ZTogKFBvbGljeUlucHV0IHwgUG9saWN5KVtdKSB7XG4gICAgdGhpcy5fcG9saWNpZXMgPSB2YWx1ZS5tYXAoZnJvbVBvbGljeUlucHV0KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBvbGljaWVzKCk6IFBvbGljeVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcG9saWNpZXM7XG4gIH1cbiAgcHJpdmF0ZSBfcG9saWNpZXM6IFBvbGljeVtdID0gW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIFBvbGljeSBHcm91cCBTdHVkaW8gaXMgaW4gcmVhZC1vbmx5IG1vZGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBBUEkgdGFyZ2V0ZWQgYnkgdGhlIFBvbGljeSBHcm91cCBTdHVkaW9cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBhcGlUeXBlITogQXBpVHlwZTtcblxuICAvKipcbiAgICogRXhlY3V0aW9uIHBoYXNlIHRhcmdldGVkIGJ5IHRoZSBQb2xpY3kgR3JvdXAgU3R1ZGlvXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgZmxvd1BoYXNlYCBpbnN0ZWFkLiBUbyBrZWVwIGFzIGxvbmcgYXMgd2Ugc3VwcG9ydCBBUElNIDwgNC42XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGV4ZWN1dGlvblBoYXNlKHZhbHVlOiBFeGVjdXRpb25QaGFzZSkge1xuICAgIHRoaXMuZmxvd1BoYXNlID0gZnJvbUV4ZWN1dGlvblBoYXNlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRpb24gcGhhc2UgdGFyZ2V0ZWQgYnkgdGhlIFBvbGljeSBHcm91cCBTdHVkaW9cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmbG93UGhhc2UhOiBGbG93UGhhc2U7XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIFBvbGljeSBHcm91cCBTdHVkaW8gbmVlZHMgdG8gZmV0Y2ggdGhlIHBvbGljeSBzY2hlbWFcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcG9saWN5IHNjaGVtYVxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHBvbGljeVNjaGVtYUZldGNoZXI6IFBvbGljeVNjaGVtYUZldGNoZXIgPSAoKSA9PiBFTVBUWTtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gUG9saWN5IEdyb3VwIFN0dWRpbyBuZWVkcyB0byBmZXRjaCB0aGUgcG9saWN5IGRvY3VtZW50YXRpb25cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcG9saWN5IGRvY3VtZW50YXRpb25cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBwb2xpY3lEb2N1bWVudGF0aW9uRmV0Y2hlcjogUG9saWN5RG9jdW1lbnRhdGlvbkZldGNoZXIgPSAoKSA9PiBFTVBUWTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcG9saWN5R3JvdXA6IFBvbGljeUdyb3VwSW5wdXQgPSBbXTtcblxuICAvKipcbiAgICogT3V0cHV0IGV2ZW50IHdoZW4gdGhlIFBvbGljeSBHcm91cCBTdHVkaW8gY2hhbmdlc1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBwb2xpY3lHcm91cENoYW5nZTogRXZlbnRFbWl0dGVyPFBvbGljeUdyb3VwT3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9saWN5R3JvdXBPdXRwdXQ+KCk7XG5cbiAgcHJvdGVjdGVkIGlzTG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBjcmVhdGVTdGFydENvbm5lY3RvcjogKG5hbWU6IHN0cmluZykgPT4gQ29ubmVjdG9ySW5mb1tdID0gbmFtZSA9PiBbXG4gICAge1xuICAgICAgbmFtZSxcbiAgICAgIGljb246ICdnaW86YXJyb3ctcmlnaHQnLFxuICAgICAgdHlwZTogJ3N0YXJ0JyxcbiAgICAgIHN1cHBvcnRlZE1vZGVzOiBbXSxcbiAgICB9LFxuICBdO1xuICBwcm90ZWN0ZWQgY3JlYXRlRW5kQ29ubmVjdG9yOiAobmFtZTogc3RyaW5nKSA9PiBDb25uZWN0b3JJbmZvW10gPSBuYW1lID0+IFtcbiAgICB7XG4gICAgICBuYW1lLFxuICAgICAgaWNvbjogJ2dpbzphcnJvdy1yaWdodCcsXG4gICAgICB0eXBlOiAnZW5kJyxcbiAgICAgIHN1cHBvcnRlZE1vZGVzOiBbXSxcbiAgICB9LFxuICBdO1xuICBwcm90ZWN0ZWQgcG9saWN5R3JvdXBWTT86IFBvbGljeUdyb3VwVk07XG4gIHByb3RlY3RlZCBzdGVwczogU3RlcFtdID0gW107XG4gIHByb3RlY3RlZCB0cmlhbFVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgZ2VuZXJpY1BvbGljaWVzOiBHZW5lcmljUG9saWN5W10gPSBbXTtcbiAgcHJvdGVjdGVkIHN0YXJ0Q29ubmVjdG9yOiBDb25uZWN0b3JJbmZvW10gPSBbXTtcbiAgcHJvdGVjdGVkIGVuZENvbm5lY3RvcjogQ29ubmVjdG9ySW5mb1tdID0gW107XG5cbiAgcHJpdmF0ZSBwaGFzZXM6IFJlY29yZDxgJHtBcGlUeXBlfV9fJHtGbG93UGhhc2V9YCwgUG9saWN5R3JvdXBWTSB8IG51bGw+ID0ge1xuICAgIC8vIEhUVFAgUHJveHlcbiAgICBQUk9YWV9fUkVRVUVTVDoge1xuICAgICAgbmFtZTogJ1JlcXVlc3QgcGhhc2UnLFxuICAgICAgZGVzY3JpcHRpb246ICdQb2xpY2llcyB3aWxsIGJlIGFwcGxpZWQgZHVyaW5nIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQnLFxuICAgICAgc3RhcnRDb25uZWN0b3JOYW1lOiAnSW5jb21pbmcgcmVxdWVzdCcsXG4gICAgICBlbmRDb25uZWN0b3JOYW1lOiAnT3V0Z29pbmcgcmVxdWVzdCcsXG4gICAgfSxcbiAgICBQUk9YWV9fUkVTUE9OU0U6IHtcbiAgICAgIG5hbWU6ICdSZXNwb25zZSBwaGFzZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1BvbGljaWVzIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgaW5pdGlhbCBjb25uZWN0aW9uLicsXG4gICAgICBzdGFydENvbm5lY3Rvck5hbWU6ICdJbmNvbWluZyByZXNwb25zZScsXG4gICAgICBlbmRDb25uZWN0b3JOYW1lOiAnT3V0Z29pbmcgcmVzcG9uc2UnLFxuICAgIH0sXG4gICAgUFJPWFlfX1BVQkxJU0g6IG51bGwsIC8vIG4vYVxuICAgIFBST1hZX19TVUJTQ1JJQkU6IG51bGwsIC8vIG4vYVxuICAgIFBST1hZX19DT05ORUNUOiBudWxsLCAvLyBuL2FcbiAgICBQUk9YWV9fSU5URVJBQ1Q6IG51bGwsIC8vIG4vYVxuICAgIC8vIEhUVFAgTWVzc2FnZVxuICAgIE1FU1NBR0VfX1JFUVVFU1Q6IHtcbiAgICAgIG5hbWU6ICdSZXF1ZXN0IHBoYXNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUG9saWNpZXMgd2lsbCBiZSBhcHBsaWVkIGR1cmluZyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50JyxcbiAgICAgIHN0YXJ0Q29ubmVjdG9yTmFtZTogJ0luY29taW5nIHJlcXVlc3QnLFxuICAgICAgZW5kQ29ubmVjdG9yTmFtZTogJ091dGdvaW5nIHJlcXVlc3QnLFxuICAgIH0sXG4gICAgTUVTU0FHRV9fUkVTUE9OU0U6IHtcbiAgICAgIG5hbWU6ICdSZXNwb25zZSBwaGFzZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1BvbGljaWVzIHdpbGwgYmUgYXBwbGllZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gdGVybWluYXRpb24nLFxuICAgICAgc3RhcnRDb25uZWN0b3JOYW1lOiAnSW5jb21pbmcgcmVzcG9uc2UnLFxuICAgICAgZW5kQ29ubmVjdG9yTmFtZTogJ091dGdvaW5nIHJlc3BvbnNlJyxcbiAgICB9LFxuICAgIE1FU1NBR0VfX1BVQkxJU0g6IHtcbiAgICAgIG5hbWU6ICdQdWJsaXNoIHBoYXNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUG9saWNpZXMgd2lsbCBiZSBhcHBsaWVkIG9uIG1lc3NhZ2VzIHNlbnQgdG8gdGhlIGVuZHBvaW50JyxcbiAgICAgIHN0YXJ0Q29ubmVjdG9yTmFtZTogJ0luY29taW5nIG1lc3NhZ2UgcmVxdWVzdCcsXG4gICAgICBlbmRDb25uZWN0b3JOYW1lOiAnT3V0Z29pbmcgbWVzc2FnZSByZXF1ZXN0JyxcbiAgICB9LFxuICAgIE1FU1NBR0VfX1NVQlNDUklCRToge1xuICAgICAgbmFtZTogJ1N1YnNjcmliZSBwaGFzZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1BvbGljaWVzIHdpbGwgYmUgYXBwbGllZCBvbiBtZXNzYWdlcyByZWNlaXZlZCBieSB0aGUgZW50cnlwb2ludCcsXG4gICAgICBzdGFydENvbm5lY3Rvck5hbWU6ICdJbmNvbWluZyBtZXNzYWdlIHJlc3BvbnNlJyxcbiAgICAgIGVuZENvbm5lY3Rvck5hbWU6ICdPdXRnb2luZyBtZXNzYWdlIHJlc3BvbnNlJyxcbiAgICB9LFxuICAgIE1FU1NBR0VfX0NPTk5FQ1Q6IG51bGwsIC8vIG4vYVxuICAgIE1FU1NBR0VfX0lOVEVSQUNUOiBudWxsLCAvLyBuL2FcbiAgICAvLyBOQVRJVkVcbiAgICAvLyBUT0RPOiBUbyBpbXBsZW1lbnQgd2Ugd2FudCB0byBtYWtlIFBTIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlIEFQSVxuICAgIE5BVElWRV9fQ09OTkVDVDogbnVsbCwgLy8gbi9hXG4gICAgTkFUSVZFX19JTlRFUkFDVDogbnVsbCwgLy8gbi9hXG4gICAgTkFUSVZFX19QVUJMSVNIOiBudWxsLCAvLyBuL2FcbiAgICBOQVRJVkVfX1NVQlNDUklCRTogbnVsbCwgLy8gbi9hXG4gICAgTkFUSVZFX19SRVFVRVNUOiBudWxsLCAvLyBuL2FcbiAgICBOQVRJVkVfX1JFU1BPTlNFOiBudWxsLCAvLyBuL2FcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBvbGljeVN0dWRpb1NlcnZpY2U6IEdpb1BvbGljeVN0dWRpb1NlcnZpY2UpIHt9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5wb2xpY3lTY2hlbWFGZXRjaGVyKSB7XG4gICAgICB0aGlzLnBvbGljeVN0dWRpb1NlcnZpY2Uuc2V0UG9saWN5U2NoZW1hRmV0Y2hlcih0aGlzLnBvbGljeVNjaGVtYUZldGNoZXIpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnBvbGljeURvY3VtZW50YXRpb25GZXRjaGVyKSB7XG4gICAgICB0aGlzLnBvbGljeVN0dWRpb1NlcnZpY2Uuc2V0UG9saWN5RG9jdW1lbnRhdGlvbkZldGNoZXIodGhpcy5wb2xpY3lEb2N1bWVudGF0aW9uRmV0Y2hlcik7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnBvbGljaWVzKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5nZW5lcmljUG9saWNpZXMgPSB0b0dlbmVyaWNQb2xpY2llcyh0aGlzLl9wb2xpY2llcyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmV4ZWN1dGlvblBoYXNlIHx8IGNoYW5nZXMuZmxvd1BoYXNlKSB7XG4gICAgICB0aGlzLnBvbGljeUdyb3VwVk0gPSB0aGlzLnBoYXNlc1tgJHt0aGlzLmFwaVR5cGV9X18ke3RoaXMuZmxvd1BoYXNlfWBdID8/IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RhcnRDb25uZWN0b3IgPSB0aGlzLmNyZWF0ZVN0YXJ0Q29ubmVjdG9yKHRoaXMucG9saWN5R3JvdXBWTT8uc3RhcnRDb25uZWN0b3JOYW1lID8/ICcnKTtcbiAgICAgIHRoaXMuZW5kQ29ubmVjdG9yID0gdGhpcy5jcmVhdGVFbmRDb25uZWN0b3IodGhpcy5wb2xpY3lHcm91cFZNPy5lbmRDb25uZWN0b3JOYW1lID8/ICcnKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMucG9saWN5R3JvdXApIHtcbiAgICAgIHRoaXMuc3RlcHMgPSB0aGlzLnBvbGljeUdyb3VwO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblN0ZXBzQ2hhbmdlKHN0ZXBzOiBTdGVwW10pOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXBzID0gc3RlcHM7XG4gICAgdGhpcy5wb2xpY3lHcm91cENoYW5nZS5lbWl0KHN0ZXBzKTtcbiAgfVxufVxuIiwiPCEtLVxuXG4gICAgQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gICAgXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgXG4gICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICBcbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuLS0+XG5AaWYgKCFpc0xvYWRpbmcgJiYgcG9saWN5R3JvdXBWTSkge1xuICA8Z2lvLXBzLWZsb3ctZGV0YWlscy1waGFzZVxuICAgIGNsYXNzPVwiY29udGVudF9fcGhhc2VcIlxuICAgIFtuYW1lXT1cInBvbGljeUdyb3VwVk0ubmFtZVwiXG4gICAgW2Rlc2NyaXB0aW9uXT1cInBvbGljeUdyb3VwVk0uZGVzY3JpcHRpb25cIlxuICAgIFtyZWFkT25seV09XCJyZWFkT25seVwiXG4gICAgW3N0YXJ0Q29ubmVjdG9yXT1cInN0YXJ0Q29ubmVjdG9yXCJcbiAgICBbZW5kQ29ubmVjdG9yXT1cImVuZENvbm5lY3RvclwiXG4gICAgW3N0ZXBzXT1cInN0ZXBzXCJcbiAgICBbYXBpVHlwZV09XCJhcGlUeXBlXCJcbiAgICBbZ2VuZXJpY1BvbGljaWVzXT1cImdlbmVyaWNQb2xpY2llc1wiXG4gICAgW3RyaWFsVXJsXT1cInRyaWFsVXJsXCJcbiAgICBbcG9saWN5Rmxvd1BoYXNlXT1cImZsb3dQaGFzZVwiXG4gICAgKHN0ZXBzQ2hhbmdlKT1cIm9uU3RlcHNDaGFuZ2UoJGV2ZW50KVwiXG4gID48L2dpby1wcy1mbG93LWRldGFpbHMtcGhhc2U+XG59IEBlbHNlIHtcbiAgPGdpby1sb2FkZXI+PC9naW8tbG9hZGVyPlxufVxuIl19
@@ -182,10 +182,10 @@ export class GioPolicyStudioComponent {
182
182
  initGenericPolicies() {
183
183
  this.genericPolicies = toGenericPolicies(this.policies ?? [], this.sharedPolicyGroupPolicies ?? []);
184
184
  }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioComponent, deps: [{ token: i1.GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: GioPolicyStudioComponent, isStandalone: true, selector: "gio-policy-studio", inputs: { readOnly: "readOnly", apiType: "apiType", flowExecution: "flowExecution", entrypointsInfo: "entrypointsInfo", endpointsInfo: "endpointsInfo", commonFlows: "commonFlows", plans: "plans", policies: ["policies", "policies", (policies) => policies ?? []], sharedPolicyGroupPolicies: "sharedPolicyGroupPolicies", trialUrl: "trialUrl", loading: "loading", policySchemaFetcher: "policySchemaFetcher", policyDocumentationFetcher: "policyDocumentationFetcher" }, outputs: { save: "save" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\" *ngIf=\"!loading; else loadingApiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n <ng-template #loadingApiInfo>\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">&nbsp;</span>\n <span class=\"gio-badge-neutral\">&nbsp;</span>\n </div>\n </ng-template>\n\n <div class=\"header__btn\">\n <button *ngIf=\"!saving\" mat-flat-button color=\"primary\" [disabled]=\"loading || disableSaveButton\" (click)=\"onSave()\">Save</button>\n <button *ngIf=\"saving\" mat-flat-button color=\"primary\" disabled>Saving...</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n [entrypointsInfo]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [selectedFlowId]=\"selectedFlow?._id\"\n (selectedFlowIdChange)=\"onSelectFlow($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n [policies]=\"policies\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;height:100%;flex-direction:column;padding:16px;background-color:#fff}::ng-deep .gio-policy-studio__tooltip-line-break{white-space:pre-line}.header{display:flex;align-items:center;padding-bottom:16px}.header__apiInfo{flex:1 1 auto}.wrapper{display:flex;min-height:0;flex:1 1 auto;flex-direction:row;gap:16px}.wrapper__flowsMenu{overflow:hidden;min-width:230px;max-width:400px;flex:1 1 33%;border:1px solid #d3d5dc;border-radius:8px}.wrapper__flowDetails{overflow:hidden;flex:1 1 66%;border:1px solid #d3d5dc;border-radius:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: GioIconsModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: GioPolicyStudioFlowsMenuComponent, selector: "gio-ps-flows-menu", inputs: ["readOnly", "loading", "apiType", "flowExecution", "flowsGroups", "selectedFlowId", "entrypoints", "entrypointsInfo"], outputs: ["selectedFlowIdChange", "flowsGroupsChange", "flowExecutionChange", "deleteFlow"] }, { kind: "component", type: GioPolicyStudioDetailsComponent, selector: "gio-ps-flow-details", inputs: ["readOnly", "loading", "apiType", "flow", "entrypointsInfo", "endpointsInfo", "policies", "genericPolicies", "trialUrl"], outputs: ["flowChange", "deleteFlow"] }] }); }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioComponent, deps: [{ token: i1.GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component }); }
186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.8", type: GioPolicyStudioComponent, isStandalone: true, selector: "gio-policy-studio", inputs: { readOnly: "readOnly", apiType: "apiType", flowExecution: "flowExecution", entrypointsInfo: "entrypointsInfo", endpointsInfo: "endpointsInfo", commonFlows: "commonFlows", plans: "plans", policies: ["policies", "policies", (policies) => policies ?? []], sharedPolicyGroupPolicies: "sharedPolicyGroupPolicies", trialUrl: "trialUrl", loading: "loading", policySchemaFetcher: "policySchemaFetcher", policyDocumentationFetcher: "policyDocumentationFetcher" }, outputs: { save: "save" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\" *ngIf=\"!loading; else loadingApiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n <ng-template #loadingApiInfo>\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">&nbsp;</span>\n <span class=\"gio-badge-neutral\">&nbsp;</span>\n </div>\n </ng-template>\n\n <div class=\"header__btn\">\n <button *ngIf=\"!saving\" mat-flat-button color=\"primary\" [disabled]=\"loading || disableSaveButton\" (click)=\"onSave()\">Save</button>\n <button *ngIf=\"saving\" mat-flat-button color=\"primary\" disabled>Saving...</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n [entrypointsInfo]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [selectedFlowId]=\"selectedFlow?._id\"\n (selectedFlowIdChange)=\"onSelectFlow($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n [policies]=\"policies\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;height:100%;flex-direction:column;padding:16px;background-color:#fff}::ng-deep .gio-policy-studio__tooltip-line-break{white-space:pre-line}.header{display:flex;align-items:center;padding-bottom:16px}.header__apiInfo{flex:1 1 auto}.wrapper{display:flex;min-height:0;flex:1 1 auto;flex-direction:row;gap:16px}.wrapper__flowsMenu{overflow:hidden;min-width:230px;max-width:400px;flex:1 1 33%;border:1px solid #d3d5dc;border-radius:8px}.wrapper__flowDetails{overflow:hidden;flex:1 1 66%;border:1px solid #d3d5dc;border-radius:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: GioIconsModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: GioPolicyStudioFlowsMenuComponent, selector: "gio-ps-flows-menu", inputs: ["readOnly", "loading", "apiType", "flowExecution", "flowsGroups", "selectedFlowId", "entrypoints", "entrypointsInfo"], outputs: ["selectedFlowIdChange", "flowsGroupsChange", "flowExecutionChange", "deleteFlow"] }, { kind: "component", type: GioPolicyStudioDetailsComponent, selector: "gio-ps-flow-details", inputs: ["readOnly", "loading", "apiType", "flow", "entrypointsInfo", "endpointsInfo", "policies", "genericPolicies", "trialUrl"], outputs: ["flowChange", "deleteFlow"] }] }); }
187
187
  }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioComponent, decorators: [{
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioComponent, decorators: [{
189
189
  type: Component,
190
190
  args: [{ standalone: true, imports: [
191
191
  CommonModule,
@@ -62,10 +62,10 @@ export class GioPolicyStudioService {
62
62
  this.documentationsCache[policy.id] = new BehaviorSubject(documentation);
63
63
  }));
64
64
  }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioService, providedIn: 'root' }); }
65
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioService, providedIn: 'root' }); }
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioPolicyStudioService, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GioPolicyStudioService, decorators: [{
69
69
  type: Injectable,
70
70
  args: [{
71
71
  providedIn: 'root',