@provoly/dashboard 0.11.7 → 0.11.9
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.
- package/esm2022/admin/components/admin-fields/store/fields.effects.mjs +3 -2
- package/esm2022/lib/dashboard/store/dashboard-init.service.mjs +11 -7
- package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
- package/esm2022/presentation/components/presentation.component.mjs +6 -4
- package/esm2022/presentation/style/css.component.mjs +2 -2
- package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +3 -3
- package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +26 -32
- package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +50 -0
- package/esm2022/restitution/i18n/fr.translations.mjs +6 -2
- package/esm2022/restitution/public-api.mjs +2 -1
- package/esm2022/restitution/restitution.module.mjs +16 -5
- package/esm2022/restitution/style/css.component.mjs +2 -2
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +8 -4
- package/esm2022/widgets/widget-map/style/css.component.mjs +2 -2
- package/fesm2022/provoly-dashboard-admin.mjs +2 -1
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +9 -7
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +96 -46
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +9 -5
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +10 -6
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/package.json +1 -1
- package/presentation/style/_o-pry-presentation.scss +51 -0
- package/restitution/components/restitution-list/restitution-list.component.d.ts +12 -8
- package/restitution/components/restitution-list-item/restitution-list-item.component.d.ts +21 -0
- package/restitution/i18n/fr.translations.d.ts +4 -0
- package/restitution/public-api.d.ts +1 -0
- package/restitution/restitution.module.d.ts +10 -9
- package/restitution/style/_o-restitution-list.scss +37 -2
- package/styles-theme/components-theme/_o-restitution-list.theme.scss +15 -0
- package/widgets/widget-map/component/widget-map.component.d.ts +2 -0
- package/widgets/widget-map/style/_o-layer-legend.scss +2 -1
package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs
CHANGED
|
@@ -88,11 +88,11 @@ export class PryRestitutionCatalogComponent {
|
|
|
88
88
|
this.confirm.nativeElement.focus();
|
|
89
89
|
}
|
|
90
90
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryRestitutionCatalogComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
91
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryRestitutionCatalogComponent, selector: "pry-restitution-catalog", inputs: { modalOpen: "modalOpen" }, viewQueries: [{ propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "openModal", first: true, predicate: ["openModal"], descendants: true, read: ElementRef }, { propertyName: "cancelRemove", first: true, predicate: ["cancelRemove"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "confirm", first: true, predicate: ["confirm"], descendants: true }], ngImport: i0, template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-manifest-layout o-restitution-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <div class=\"o-manifest-layout__toolbox\">\n <button\n type=\"button\"\n (click)=\"selectMode(mode.CREATION)\"\n [pryTooltip]=\"infoTooltipCreateRestitution\"\n class=\"a-btn a-btn--primary\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'create' }\"\n >\n {{ '@pry.restitution.create_title' | i18n }}\n </button>\n <div>\n <div class=\"o-catalog__search\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.restitution.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n </div>\n </div>\n <div class=\"o-manifest-layout__content\">\n <h1 class=\"a-h1\">{{ '@pry.restitution.catalog' | i18n }}</h1>\n\n <div class=\"o-presentation-wrapper\">\n <ul class=\"o-presentation\">\n <li class=\"o-presentation__item\" *ngFor=\"let restitution of filteredRestitution$ | async\">\n <div class=\"o-presentation__item__header\">\n <ng-container *ngIf=\"restitution.visibility?.type === PryVisibilityType.PRIVATE\">\n <pry-icon\n iconSvg=\"private\"\n [pryTooltip]=\"private\"\n class=\"is-private\"\n [height]=\"17\"\n [width]=\"17\"\n ></pry-icon>\n </ng-container>\n <img\n alt=\"\"\n [height]=\"restitution.cover ? 600 : 128\"\n [width]=\"restitution.cover ? 600 : 128\"\n [class.is-full-width]=\"restitution.cover\"\n [src]=\"restitution.image | getSecuredImage: [600, 600] | async\"\n class=\"pointer\"\n (click)=\"selectRestitution(restitution)\"\n [pryTooltip]=\"infoTooltipEye\"\n />\n </div>\n\n <div class=\"o-presentation__item__txt\">\n <h3 class=\"a-h3\">{{ restitution.name }}</h3>\n <p class=\"a-p -date\">{{ restitution.modificationDate | sinceDate }}</p>\n </div>\n\n <div class=\"o-presentation__item__footer\">\n <ul class=\"m-actions-list\">\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn icon-only\"\n (click)=\"selectRestitution(restitution)\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'consult' }\"\n >\n <pry-icon iconSvg=\"eye\" [pryTooltip]=\"infoTooltipEye\"></pry-icon>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"editRestitution(restitution)\"\n [disabled]=\"!restitution.owner\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'edit' }\"\n >\n <pry-icon iconSvg=\"edit\" [pryTooltip]=\"infoTooltipUpdate\"></pry-icon>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"toggleRemoveConfirm($event, restitution)\"\n [disabled]=\"!restitution.owner\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'delete' }\"\n >\n <pry-icon iconSvg=\"delete\" [pryTooltip]=\"infoTooltipDelete\"></pry-icon>\n </button>\n </li>\n </ul>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution($event)\"\n class=\"restitution\"\n ></pry-restitution>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution (restitutionCreated)=\"closeRestitution($event)\" class=\"restitution\"></pry-restitution>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"selectedMode === mode.EDITION\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution\n (restitutionCreated)=\"closeRestitution($event)\"\n [selectedRestitution]=\"selectedRestitution\"\n class=\"restitution\"\n ></pry-restitution>\n </div>\n </ng-template>\n</div>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n tabindex=\"0\"\n #deleteModal\n *ngIf=\"restitution\"\n (keydown.escape)=\"toggleRemoveConfirm($event, restitution)\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n #cross\n (keydown.shift.tab)=\"focusValidation()\"\n (click)=\"cancelRemoveConfirm()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" #cancelRemove (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #confirm\n (click)=\"deleteRestitution(restitution)\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipEye>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.consult' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipUpdate>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.update' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipDelete>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.delete' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipCreateRestitution>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.create_title' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #private>\n <div class=\"m-tooltip\" role=\"tooltip\">\n <span class=\"m-tooltip__text\">{{ '@pry.restitution.lock' | i18n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.PryTooltipDirective, selector: "[pryTooltip]", inputs: ["pryTooltip", "styleReversed", "pryTooltipContext", "pryTooltipPosition", "pryTooltipShowDelay"] }, { kind: "component", type: i6.PryRestitutionComponent, selector: "pry-restitution", inputs: ["selectedRestitution", "edit", "isDataSourceSelected", "bindId"], outputs: ["restitutionCreated"] }, { kind: "component", type: i7.PryCatalogCssComponent, selector: "pry-restitution-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.GetSecuredImagePipe, name: "getSecuredImage" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i8.PrySinceDatePipe, name: "sinceDate" }] }); }
|
|
91
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryRestitutionCatalogComponent, selector: "pry-restitution-catalog", inputs: { modalOpen: "modalOpen" }, viewQueries: [{ propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "openModal", first: true, predicate: ["openModal"], descendants: true, read: ElementRef }, { propertyName: "cancelRemove", first: true, predicate: ["cancelRemove"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "confirm", first: true, predicate: ["confirm"], descendants: true }], ngImport: i0, template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-manifest-layout o-restitution-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <div class=\"o-manifest-layout__toolbox\">\n <button\n type=\"button\"\n (click)=\"selectMode(mode.CREATION)\"\n [pryTooltip]=\"infoTooltipCreateRestitution\"\n class=\"a-btn a-btn--primary\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'create' }\"\n >\n {{ '@pry.restitution.create_title' | i18n }}\n </button>\n <div>\n <div class=\"o-catalog__search\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.restitution.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n </div>\n </div>\n <div class=\"o-manifest-layout__content\">\n <h1 class=\"a-h1\">{{ '@pry.restitution.catalog' | i18n }}</h1>\n\n <div class=\"o-presentation-wrapper\">\n <ul class=\"o-presentation\">\n <li class=\"o-presentation__item\" *ngFor=\"let restitution of filteredRestitution$ | async\">\n <div class=\"o-presentation__item__header\">\n <ng-container *ngIf=\"restitution.visibility?.type === PryVisibilityType.PRIVATE\">\n <pry-icon\n iconSvg=\"private\"\n [pryTooltip]=\"private\"\n class=\"is-private\"\n [height]=\"17\"\n [width]=\"17\"\n ></pry-icon>\n </ng-container>\n <img\n alt=\"\"\n [height]=\"restitution.cover ? 600 : 128\"\n [width]=\"restitution.cover ? 600 : 128\"\n [class.is-full-width]=\"restitution.cover\"\n [src]=\"restitution.image | getSecuredImage : [600, 600] | async\"\n class=\"pointer\"\n (click)=\"selectRestitution(restitution)\"\n [pryTooltip]=\"infoTooltipEye\"\n />\n </div>\n\n <div class=\"o-presentation__item__txt\">\n <h3 class=\"a-h3\">{{ restitution.name }}</h3>\n <p class=\"a-p -date\">{{ restitution.modificationDate | sinceDate }}</p>\n </div>\n\n <div class=\"o-presentation__item__footer\">\n <ul class=\"m-actions-list\">\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn icon-only\"\n (click)=\"selectRestitution(restitution)\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'consult' }\"\n >\n <pry-icon iconSvg=\"eye\" [pryTooltip]=\"infoTooltipEye\"></pry-icon>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"editRestitution(restitution)\"\n [disabled]=\"!restitution.owner\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'edit' }\"\n >\n <pry-icon iconSvg=\"edit\" [pryTooltip]=\"infoTooltipUpdate\"></pry-icon>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"toggleRemoveConfirm($event, restitution)\"\n [disabled]=\"!restitution.owner\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'delete' }\"\n >\n <pry-icon iconSvg=\"delete\" [pryTooltip]=\"infoTooltipDelete\"></pry-icon>\n </button>\n </li>\n </ul>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution($event)\"\n class=\"restitution\"\n ></pry-restitution>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution (restitutionCreated)=\"closeRestitution($event)\" class=\"restitution\"></pry-restitution>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"selectedMode === mode.EDITION\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution\n (restitutionCreated)=\"closeRestitution($event)\"\n [selectedRestitution]=\"selectedRestitution\"\n class=\"restitution\"\n ></pry-restitution>\n </div>\n </ng-template>\n</div>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n tabindex=\"0\"\n #deleteModal\n *ngIf=\"restitution\"\n (keydown.escape)=\"toggleRemoveConfirm($event, restitution)\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n #cross\n (keydown.shift.tab)=\"focusValidation()\"\n (click)=\"cancelRemoveConfirm()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" #cancelRemove (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #confirm\n (click)=\"deleteRestitution(restitution)\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipEye>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.consult' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipUpdate>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.update' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipDelete>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.delete' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipCreateRestitution>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.create_title' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #private>\n <div class=\"m-tooltip\" role=\"tooltip\">\n <span class=\"m-tooltip__text\">{{ '@pry.restitution.lock' | i18n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.PryTooltipDirective, selector: "[pryTooltip]", inputs: ["pryTooltip", "styleReversed", "pryTooltipContext", "pryTooltipPosition", "pryTooltipShowDelay"] }, { kind: "component", type: i6.PryRestitutionComponent, selector: "pry-restitution", inputs: ["selectedRestitution", "edit", "isDataSourceSelected", "bindId"], outputs: ["restitutionCreated"] }, { kind: "component", type: i7.PryCatalogCssComponent, selector: "pry-restitution-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.GetSecuredImagePipe, name: "getSecuredImage" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }, { kind: "pipe", type: i8.PrySinceDatePipe, name: "sinceDate" }] }); }
|
|
92
92
|
}
|
|
93
93
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryRestitutionCatalogComponent, decorators: [{
|
|
94
94
|
type: Component,
|
|
95
|
-
args: [{ selector: 'pry-restitution-catalog', template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-manifest-layout o-restitution-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <div class=\"o-manifest-layout__toolbox\">\n <button\n type=\"button\"\n (click)=\"selectMode(mode.CREATION)\"\n [pryTooltip]=\"infoTooltipCreateRestitution\"\n class=\"a-btn a-btn--primary\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'create' }\"\n >\n {{ '@pry.restitution.create_title' | i18n }}\n </button>\n <div>\n <div class=\"o-catalog__search\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.restitution.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n </div>\n </div>\n <div class=\"o-manifest-layout__content\">\n <h1 class=\"a-h1\">{{ '@pry.restitution.catalog' | i18n }}</h1>\n\n <div class=\"o-presentation-wrapper\">\n <ul class=\"o-presentation\">\n <li class=\"o-presentation__item\" *ngFor=\"let restitution of filteredRestitution$ | async\">\n <div class=\"o-presentation__item__header\">\n <ng-container *ngIf=\"restitution.visibility?.type === PryVisibilityType.PRIVATE\">\n <pry-icon\n iconSvg=\"private\"\n [pryTooltip]=\"private\"\n class=\"is-private\"\n [height]=\"17\"\n [width]=\"17\"\n ></pry-icon>\n </ng-container>\n <img\n alt=\"\"\n [height]=\"restitution.cover ? 600 : 128\"\n [width]=\"restitution.cover ? 600 : 128\"\n [class.is-full-width]=\"restitution.cover\"\n [src]=\"restitution.image | getSecuredImage: [600, 600] | async\"\n class=\"pointer\"\n (click)=\"selectRestitution(restitution)\"\n [pryTooltip]=\"infoTooltipEye\"\n />\n </div>\n\n <div class=\"o-presentation__item__txt\">\n <h3 class=\"a-h3\">{{ restitution.name }}</h3>\n <p class=\"a-p -date\">{{ restitution.modificationDate | sinceDate }}</p>\n </div>\n\n <div class=\"o-presentation__item__footer\">\n <ul class=\"m-actions-list\">\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn icon-only\"\n (click)=\"selectRestitution(restitution)\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'consult' }\"\n >\n <pry-icon iconSvg=\"eye\" [pryTooltip]=\"infoTooltipEye\"></pry-icon>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"editRestitution(restitution)\"\n [disabled]=\"!restitution.owner\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'edit' }\"\n >\n <pry-icon iconSvg=\"edit\" [pryTooltip]=\"infoTooltipUpdate\"></pry-icon>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"toggleRemoveConfirm($event, restitution)\"\n [disabled]=\"!restitution.owner\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'delete' }\"\n >\n <pry-icon iconSvg=\"delete\" [pryTooltip]=\"infoTooltipDelete\"></pry-icon>\n </button>\n </li>\n </ul>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution($event)\"\n class=\"restitution\"\n ></pry-restitution>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution (restitutionCreated)=\"closeRestitution($event)\" class=\"restitution\"></pry-restitution>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"selectedMode === mode.EDITION\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution\n (restitutionCreated)=\"closeRestitution($event)\"\n [selectedRestitution]=\"selectedRestitution\"\n class=\"restitution\"\n ></pry-restitution>\n </div>\n </ng-template>\n</div>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n tabindex=\"0\"\n #deleteModal\n *ngIf=\"restitution\"\n (keydown.escape)=\"toggleRemoveConfirm($event, restitution)\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n #cross\n (keydown.shift.tab)=\"focusValidation()\"\n (click)=\"cancelRemoveConfirm()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" #cancelRemove (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #confirm\n (click)=\"deleteRestitution(restitution)\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipEye>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.consult' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipUpdate>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.update' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipDelete>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.delete' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipCreateRestitution>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.create_title' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #private>\n <div class=\"m-tooltip\" role=\"tooltip\">\n <span class=\"m-tooltip__text\">{{ '@pry.restitution.lock' | i18n }}</span>\n </div>\n</ng-template>\n" }]
|
|
95
|
+
args: [{ selector: 'pry-restitution-catalog', template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-manifest-layout o-restitution-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <div class=\"o-manifest-layout__toolbox\">\n <button\n type=\"button\"\n (click)=\"selectMode(mode.CREATION)\"\n [pryTooltip]=\"infoTooltipCreateRestitution\"\n class=\"a-btn a-btn--primary\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'create' }\"\n >\n {{ '@pry.restitution.create_title' | i18n }}\n </button>\n <div>\n <div class=\"o-catalog__search\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.restitution.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n </div>\n </div>\n <div class=\"o-manifest-layout__content\">\n <h1 class=\"a-h1\">{{ '@pry.restitution.catalog' | i18n }}</h1>\n\n <div class=\"o-presentation-wrapper\">\n <ul class=\"o-presentation\">\n <li class=\"o-presentation__item\" *ngFor=\"let restitution of filteredRestitution$ | async\">\n <div class=\"o-presentation__item__header\">\n <ng-container *ngIf=\"restitution.visibility?.type === PryVisibilityType.PRIVATE\">\n <pry-icon\n iconSvg=\"private\"\n [pryTooltip]=\"private\"\n class=\"is-private\"\n [height]=\"17\"\n [width]=\"17\"\n ></pry-icon>\n </ng-container>\n <img\n alt=\"\"\n [height]=\"restitution.cover ? 600 : 128\"\n [width]=\"restitution.cover ? 600 : 128\"\n [class.is-full-width]=\"restitution.cover\"\n [src]=\"restitution.image | getSecuredImage : [600, 600] | async\"\n class=\"pointer\"\n (click)=\"selectRestitution(restitution)\"\n [pryTooltip]=\"infoTooltipEye\"\n />\n </div>\n\n <div class=\"o-presentation__item__txt\">\n <h3 class=\"a-h3\">{{ restitution.name }}</h3>\n <p class=\"a-p -date\">{{ restitution.modificationDate | sinceDate }}</p>\n </div>\n\n <div class=\"o-presentation__item__footer\">\n <ul class=\"m-actions-list\">\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn icon-only\"\n (click)=\"selectRestitution(restitution)\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'consult' }\"\n >\n <pry-icon iconSvg=\"eye\" [pryTooltip]=\"infoTooltipEye\"></pry-icon>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"editRestitution(restitution)\"\n [disabled]=\"!restitution.owner\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'edit' }\"\n >\n <pry-icon iconSvg=\"edit\" [pryTooltip]=\"infoTooltipUpdate\"></pry-icon>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"toggleRemoveConfirm($event, restitution)\"\n [disabled]=\"!restitution.owner\"\n *pryAccess=\"{ module: 'dashboard', page: 'restitution', action: 'delete' }\"\n >\n <pry-icon iconSvg=\"delete\" [pryTooltip]=\"infoTooltipDelete\"></pry-icon>\n </button>\n </li>\n </ul>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution($event)\"\n class=\"restitution\"\n ></pry-restitution>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution (restitutionCreated)=\"closeRestitution($event)\" class=\"restitution\"></pry-restitution>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"selectedMode === mode.EDITION\">\n <div class=\"o-manifest-layout__toolbox\">\n <button type=\"button\" (click)=\"selectMode(mode.CATALOG)\" class=\"a-btn a-btn--primary\">\n {{ '@pry.restitution.backToCatalog' | i18n }}\n </button>\n </div>\n <div class=\"o-manifest-layout__content\">\n <pry-restitution\n (restitutionCreated)=\"closeRestitution($event)\"\n [selectedRestitution]=\"selectedRestitution\"\n class=\"restitution\"\n ></pry-restitution>\n </div>\n </ng-template>\n</div>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n tabindex=\"0\"\n #deleteModal\n *ngIf=\"restitution\"\n (keydown.escape)=\"toggleRemoveConfirm($event, restitution)\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n #cross\n (keydown.shift.tab)=\"focusValidation()\"\n (click)=\"cancelRemoveConfirm()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" #cancelRemove (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #confirm\n (click)=\"deleteRestitution(restitution)\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipEye>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.consult' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipUpdate>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.update' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipDelete>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.delete' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipCreateRestitution>\n <div class=\"card-title-tooltip__wrapper\">\n <span class=\"card-title-tooltip__name\">{{ '@pry.restitution.create_title' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #private>\n <div class=\"m-tooltip\" role=\"tooltip\">\n <span class=\"m-tooltip__text\">{{ '@pry.restitution.lock' | i18n }}</span>\n </div>\n</ng-template>\n" }]
|
|
96
96
|
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { templateModal: [{
|
|
97
97
|
type: ViewChild,
|
|
98
98
|
args: ['templateModal', { read: TemplateRef, static: false }]
|
|
@@ -111,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
|
|
|
111
111
|
}], modalOpen: [{
|
|
112
112
|
type: Input
|
|
113
113
|
}] } });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tY2F0YWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWNhdGFsb2cvcmVzdGl0dXRpb24tY2F0YWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWNhdGFsb2cvcmVzdGl0dXRpb24tY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUV2RyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFNdkUsTUFBTSxPQUFPLDhCQUE4QjtJQW1CekMsWUFDVSxLQUFZLEVBQ1YsT0FBZ0IsRUFDaEIsZ0JBQWtDO1FBRnBDLFVBQUssR0FBTCxLQUFLLENBQU87UUFDVixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFwQjlDLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQVN6QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGtC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ImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBDb25maWdBY3Rpb25zLCBDb25maWdTZWxlY3RvcnMsIFByeVZpc2liaWxpdHlUeXBlLCBWaWV3TW9kZSwgV2lkZ2V0IH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1yZXN0aXR1dGlvbi1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3RpdHV0aW9uLWNhdGFsb2cuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeVJlc3RpdHV0aW9uQ2F0YWxvZ0NvbXBvbmVudCB7XG4gIHJlc3RpdHV0aW9ucyQ6IE9ic2VydmFibGU8V2lkZ2V0W10+O1xuICBzZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIGZpbHRlcmVkUmVzdGl0dXRpb24kOiBPYnNlcnZhYmxlPFdpZGdldFtdPjtcbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVNb2RhbCcsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSkgdGVtcGxhdGVNb2RhbCE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ29wZW5Nb2RhbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBvcGVuTW9kYWwhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2FuY2VsUmVtb3ZlJykgY2FuY2VsUmVtb3ZlITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2Nyb3NzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNyb3NzITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm0nKSBjb25maXJtITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIHByaXZhdGUgY29uZmlybVJlbW92ZVJlZjogT3ZlcmxheVJlZiB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0ZWRJdGVtPzogRWxlbWVudCB8IG51bGw7XG4gIEBJbnB1dCgpIG1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc092ZXJsYXlPcGVuID0gZmFsc2U7XG4gIG1vZGUgPSBWaWV3TW9kZTtcbiAgc2VsZWN0ZWRNb2RlOiBWaWV3TW9kZSA9IFZpZXdNb2RlLkNBVEFMT0c7XG4gIHNlbGVjdGVkUmVzdGl0dXRpb246IFdpZGdldCB8IG51bGwgPSBudWxsO1xuICByZXN0aXR1dGlvbj86IFdpZGdldDtcbiAgUHJ5VmlzaWJpbGl0eVR5cGUgPSBQcnlWaXNpYmlsaXR5VHlwZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcm90ZWN0ZWQgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZlxuICApIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMubG9hZFdpZGdldHMoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmdldE1hcFN0eWxlcygpKTtcblxuICAgIHRoaXMucmVzdGl0dXRpb25zJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmNhdGFsb2cpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN0aXR1dGlvbkxpc3QpID0+XG4gICAgICAgICAgWy4uLnJlc3RpdHV0aW9uTGlzdF0uc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgIGEubW9kaWZpY2F0aW9uRGF0ZSA/IGIubW9kaWZpY2F0aW9uRGF0ZS5sb2NhbGVDb21wYXJlKGEubW9kaWZpY2F0aW9uRGF0ZSkgOiAxXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIHRoaXMuZmlsdGVyZWRSZXN0aXR1dGlvbiQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3RpdHV0aW9ucyQsIHRoaXMuc2VhcmNoJF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZXN0aXR1dGlvbnMsIHNlYXJjaF0pID0+XG4gICAgICAgIHJlc3RpdHV0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKHJlc3RpdHV0aW9uKSA9PiBzZWFyY2gubGVuZ3RoID09PSAwIHx8IHJlc3RpdHV0aW9uLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RNb2RlKG5ld01vZGU6IFZpZXdNb2RlKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBuZXdNb2RlO1xuICB9XG5cbiAgc2VsZWN0UmVzdGl0dXRpb24ocmVzdGl0dXRpb246IFdpZGdldCkge1xuICAgIHRoaXMuc2VsZWN0ZWRSZXN0aXR1dGlvbiA9IHJlc3RpdHV0aW9uO1xuICAgIHRoaXMuc2VsZWN0TW9kZSh0aGlzLm1vZGUuQ09OU1VMVCk7XG4gIH1cblxuICBjbG9zZVJlc3RpdHV0aW9uKCRldmVudDogdm9pZCkge1xuICAgIHRoaXMuc2VsZWN0ZWRSZXN0aXR1dGlvbiA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RNb2RlKHRoaXMubW9kZS5DQVRBTE9HKTtcbiAgfVxuXG4gIGRlbGV0ZVJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uOiBXaWRnZXQpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuZGVsZXRlUmVzdGl0dXRpb24oeyBpZDogcmVzdGl0dXRpb24uaWQgfSkpO1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgfVxuXG4gIGVkaXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbjogV2lkZ2V0KSB7XG4gICAgdGhpcy5zZWxlY3RlZFJlc3RpdHV0aW9uID0gcmVzdGl0dXRpb247XG4gICAgdGhpcy5zZWxlY3RNb2RlKFZpZXdNb2RlLkVESVRJT04pO1xuICB9XG5cbiAgdG9nZ2xlUmVtb3ZlQ29uZmlybSgkZXZlbnQ/OiBhbnksIHJlc3RpdHV0aW9uPzogV2lkZ2V0KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1SZW1vdmVSZWYpIHtcbiAgICAgIHRoaXMucmVzdGl0dXRpb24gPSByZXN0aXR1dGlvbjtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICAgIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ28tbW9kYWwtd3JhcHBlciddLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWY/LmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGVSZW1vdmVDb25maXJtKCRldmVudCwgcmVzdGl0dXRpb24pKTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZj8uYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlTW9kYWwsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsUmVtb3ZlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5jbG9zZU92ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJy1tb2RhbCcgfSkpO1xuICAgICAgdGhpcy5vcGVuTW9kYWw/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxSZW1vdmVDb25maXJtKCkge1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgfVxuXG4gIGZvY3VzQ3Jvc3NFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLmNyb3NzKSB7XG4gICAgICB0aGlzLmNyb3NzPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNWYWxpZGF0aW9uKCkge1xuICAgIHRoaXMuY29uZmlybS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbiIsIjxwcnktcmVzdGl0dXRpb24tY3NzPjwvcHJ5LXJlc3RpdHV0aW9uLWNzcz5cbjxkaXYgY2xhc3M9XCJvLW1hbmlmZXN0LWxheW91dCBvLXJlc3RpdHV0aW9uLWNhdGFsb2dcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGVkTW9kZSA9PT0gbW9kZS5DQVRBTE9HXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X190b29sYm94XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9kZShtb2RlLkNSRUFUSU9OKVwiXG4gICAgICAgIFtwcnlUb29sdGlwXT1cImluZm9Ub29sdGlwQ3JlYXRlUmVzdGl0dXRpb25cIlxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCJcbiAgICAgICAgKnByeUFjY2Vzcz1cInsgbW9kdWxlOiAnZGFzaGJvYXJkJywgcGFnZTogJ3Jlc3RpdHV0aW9uJywgYWN0aW9uOiAnY3JlYXRlJyB9XCJcbiAgICAgID5cbiAgICAgICAge3sgJ0BwcnkucmVzdGl0dXRpb24uY3JlYXRlX3RpdGxlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fc2VhcmNoXCI+XG4gICAgICAgICAgPGxhYmVsIGlkPVwiY2F0YWxvZy1zZWFyY2gtbGFiZWxcIiBmb3I9XCJjYXRhbG9nLXNlYXJjaFwiIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LnRvb2xib3guY2F0YWxvZy5maWx0ZXIubmFtZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImNhdGFsb2ctc2VhcmNoXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHByeS5yZXN0aXR1dGlvbi5zZWFyY2gnIHwgaTE4blwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2gkIHwgYXN5bmNcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic2VhcmNoXCIgW3dpZHRoXT1cIjE3XCIgW2hlaWdodF09XCIxN1wiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X19jb250ZW50XCI+XG4gICAgICA8aDEgY2xhc3M9XCJhLWgxXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24uY2F0YWxvZycgfCBpMThuIH19PC9oMT5cblxuICAgICAgPGRpdiBjbGFzcz1cIm8tcHJlc2VudGF0aW9uLXdyYXBwZXJcIj5cbiAgICAgICAgPHVsIGNsYXNzPVwiby1wcmVzZW50YXRpb25cIj5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJvLXByZXNlbnRhdGlvbl9faXRlbVwiICpuZ0Zvcj1cImxldCByZXN0aXR1dGlvbiBvZiBmaWx0ZXJlZFJlc3RpdHV0aW9uJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1wcmVzZW50YXRpb25fX2l0ZW1fX2hlYWRlclwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVzdGl0dXRpb24udmlzaWJpbGl0eT8udHlwZSA9PT0gUHJ5VmlzaWJpbGl0eVR5cGUuUFJJVkFURVwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgaWNvblN2Zz1cInByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgW3ByeVRvb2x0aXBdPVwicHJpdmF0ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlzLXByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxN1wiXG4gICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTdcIlxuICAgICAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCJyZXN0aXR1dGlvbi5jb3ZlciA/IDYwMCA6IDEyOFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cInJlc3RpdHV0aW9uLmNvdmVyID8gNjAwIDogMTI4XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZnVsbC13aWR0aF09XCJyZXN0aXR1dGlvbi5jb3ZlclwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJyZXN0aXR1dGlvbi5pbWFnZSB8IGdldFNlY3VyZWRJbWFnZTogWzYwMCwgNjAwXSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSZXN0aXR1dGlvbihyZXN0aXR1dGlvbilcIlxuICAgICAgICAgICAgICAgIFtwcnlUb29sdGlwXT1cImluZm9Ub29sdGlwRXllXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1wcmVzZW50YXRpb25fX2l0ZW1fX3R4dFwiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJhLWgzXCI+e3sgcmVzdGl0dXRpb24ubmFtZSB9fTwvaDM+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYS1wIC1kYXRlXCI+e3sgcmVzdGl0dXRpb24ubW9kaWZpY2F0aW9uRGF0ZSB8IHNpbmNlRGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1wcmVzZW50YXRpb25fX2l0ZW1fX2Zvb3RlclwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJtLWFjdGlvbnMtbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4gaWNvbi1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICpwcnlBY2Nlc3M9XCJ7IG1vZHVsZTogJ2Rhc2hib2FyZCcsIHBhZ2U6ICdyZXN0aXR1dGlvbicsIGFjdGlvbjogJ2NvbnN1bHQnIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImV5ZVwiIFtwcnlUb29sdGlwXT1cImluZm9Ub29sdGlwRXllXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0biYjNDU7JiM0NTtpY29uLW9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVzdGl0dXRpb24ub3duZXJcIlxuICAgICAgICAgICAgICAgICAgICAqcHJ5QWNjZXNzPVwieyBtb2R1bGU6ICdkYXNoYm9hcmQnLCBwYWdlOiAncmVzdGl0dXRpb24nLCBhY3Rpb246ICdlZGl0JyB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJlZGl0XCIgW3ByeVRvb2x0aXBdPVwiaW5mb1Rvb2x0aXBVcGRhdGVcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuJiM0NTsmIzQ1O2ljb24tb25seVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSZW1vdmVDb25maXJtKCRldmVudCwgcmVzdGl0dXRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyZXN0aXR1dGlvbi5vd25lclwiXG4gICAgICAgICAgICAgICAgICAgICpwcnlBY2Nlc3M9XCJ7IG1vZHVsZTogJ2Rhc2hib2FyZCcsIHBhZ2U6ICdyZXN0aXR1dGlvbicsIGFjdGlvbjogJ2RlbGV0ZScgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZGVsZXRlXCIgW3ByeVRvb2x0aXBdPVwiaW5mb1Rvb2x0aXBEZWxldGVcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0ZWRNb2RlID09PSBtb2RlLkNPTlNVTFRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1tYW5pZmVzdC1sYXlvdXRfX3Rvb2xib3hcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZWxlY3RNb2RlKG1vZGUuQ0FUQUxPRylcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnJlc3RpdHV0aW9uLmJhY2tUb0NhdGFsb2cnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X19jb250ZW50XCI+XG4gICAgICA8cHJ5LXJlc3RpdHV0aW9uXG4gICAgICAgIFtzZWxlY3RlZFJlc3RpdHV0aW9uXT1cInNlbGVjdGVkUmVzdGl0dXRpb25cIlxuICAgICAgICBbZWRpdF09XCJmYWxzZVwiXG4gICAgICAgIChyZXN0aXR1dGlvbkNyZWF0ZWQpPVwiY2xvc2VSZXN0aXR1dGlvbigkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJyZXN0aXR1dGlvblwiXG4gICAgICA+PC9wcnktcmVzdGl0dXRpb24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3RlZE1vZGUgPT09IG1vZGUuQ1JFQVRJT05cIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1tYW5pZmVzdC1sYXlvdXRfX3Rvb2xib3hcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZWxlY3RNb2RlKG1vZGUuQ0FUQUxPRylcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnJlc3RpdHV0aW9uLmJhY2tUb0NhdGFsb2cnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X19jb250ZW50XCI+XG4gICAgICA8cHJ5LXJlc3RpdHV0aW9uIChyZXN0aXR1dGlvbkNyZWF0ZWQpPVwiY2xvc2VSZXN0aXR1dGlvbigkZXZlbnQpXCIgY2xhc3M9XCJyZXN0aXR1dGlvblwiPjwvcHJ5LXJlc3RpdHV0aW9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0ZWRNb2RlID09PSBtb2RlLkVESVRJT05cIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1tYW5pZmVzdC1sYXlvdXRfX3Rvb2xib3hcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZWxlY3RNb2RlKG1vZGUuQ0FUQUxPRylcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnJlc3RpdHV0aW9uLmJhY2tUb0NhdGFsb2cnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X19jb250ZW50XCI+XG4gICAgICA8cHJ5LXJlc3RpdHV0aW9uXG4gICAgICAgIChyZXN0aXR1dGlvbkNyZWF0ZWQpPVwiY2xvc2VSZXN0aXR1dGlvbigkZXZlbnQpXCJcbiAgICAgICAgW3NlbGVjdGVkUmVzdGl0dXRpb25dPVwic2VsZWN0ZWRSZXN0aXR1dGlvblwiXG4gICAgICAgIGNsYXNzPVwicmVzdGl0dXRpb25cIlxuICAgICAgPjwvcHJ5LXJlc3RpdHV0aW9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVNb2RhbD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiby1tb2RhbFwiXG4gICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgIGFyaWEtbGFiZWxsZWRieT1cImRpYWxvZyBjb25maXJtIGRlbGV0ZSBwcmVzZW50YXRpb25cIlxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgI2RlbGV0ZU1vZGFsXG4gICAgKm5nSWY9XCJyZXN0aXR1dGlvblwiXG4gICAgKGtleWRvd24uZXNjYXBlKT1cInRvZ2dsZVJlbW92ZUNvbmZpcm0oJGV2ZW50LCByZXN0aXR1dGlvbilcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fdGl0bGVcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiYS1oMlwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tb2RhbFRpdGxlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fY2xvc2VcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAgICAgI2Nyb3NzXG4gICAgICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cImZvY3VzVmFsaWRhdGlvbigpXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbaGVpZ2h0XT1cIjM1XCIgW3dpZHRoXT1cIjM1XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkudG9vbGJveC5jbG9zZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI2NhbmNlbFJlbW92ZSAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCJcbiAgICAgICAgI2NvbmZpcm1cbiAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKVwiXG4gICAgICAgIChrZXlkb3duLnRhYik9XCJmb2N1c0Nyb3NzRWxlbWVudCgpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2luZm9Ub29sdGlwRXllPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZS10b29sdGlwX193cmFwcGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjYXJkLXRpdGxlLXRvb2x0aXBfX25hbWVcIj57eyAnQHByeS5yZXN0aXR1dGlvbi5jb25zdWx0JyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcFVwZGF0ZT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUtdG9vbHRpcF9fd3JhcHBlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS10b29sdGlwX19uYW1lXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24udXBkYXRlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcERlbGV0ZT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUtdG9vbHRpcF9fd3JhcHBlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS10b29sdGlwX19uYW1lXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24uZGVsZXRlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcENyZWF0ZVJlc3RpdHV0aW9uPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZS10b29sdGlwX193cmFwcGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjYXJkLXRpdGxlLXRvb2x0aXBfX25hbWVcIj57eyAnQHByeS5yZXN0aXR1dGlvbi5jcmVhdGVfdGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcml2YXRlPlxuICA8ZGl2IGNsYXNzPVwibS10b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tdG9vbHRpcF9fdGV4dFwiPnt7ICdAcHJ5LnJlc3RpdHV0aW9uLmxvY2snIHwgaTE4biB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tY2F0YWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWNhdGFsb2cvcmVzdGl0dXRpb24tY2F0YWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWNhdGFsb2cvcmVzdGl0dXRpb24tY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUV2RyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFNdkUsTUFBTSxPQUFPLDhCQUE4QjtJQW1CekMsWUFDVSxLQUFZLEVBQ1YsT0FBZ0IsRUFDaEIsZ0JBQWtDO1FBRnBDLFVBQUssR0FBTCxLQUFLLENBQU87UUFDVixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFwQjlDLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQVN6QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGtC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ImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBDb25maWdBY3Rpb25zLCBDb25maWdTZWxlY3RvcnMsIFByeVZpc2liaWxpdHlUeXBlLCBWaWV3TW9kZSwgV2lkZ2V0IH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1yZXN0aXR1dGlvbi1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3RpdHV0aW9uLWNhdGFsb2cuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeVJlc3RpdHV0aW9uQ2F0YWxvZ0NvbXBvbmVudCB7XG4gIHJlc3RpdHV0aW9ucyQ6IE9ic2VydmFibGU8V2lkZ2V0W10+O1xuICBzZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIGZpbHRlcmVkUmVzdGl0dXRpb24kOiBPYnNlcnZhYmxlPFdpZGdldFtdPjtcbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVNb2RhbCcsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSkgdGVtcGxhdGVNb2RhbCE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ29wZW5Nb2RhbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBvcGVuTW9kYWwhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2FuY2VsUmVtb3ZlJykgY2FuY2VsUmVtb3ZlITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2Nyb3NzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNyb3NzITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm0nKSBjb25maXJtITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIHByaXZhdGUgY29uZmlybVJlbW92ZVJlZjogT3ZlcmxheVJlZiB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0ZWRJdGVtPzogRWxlbWVudCB8IG51bGw7XG4gIEBJbnB1dCgpIG1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc092ZXJsYXlPcGVuID0gZmFsc2U7XG4gIG1vZGUgPSBWaWV3TW9kZTtcbiAgc2VsZWN0ZWRNb2RlOiBWaWV3TW9kZSA9IFZpZXdNb2RlLkNBVEFMT0c7XG4gIHNlbGVjdGVkUmVzdGl0dXRpb246IFdpZGdldCB8IG51bGwgPSBudWxsO1xuICByZXN0aXR1dGlvbj86IFdpZGdldDtcbiAgUHJ5VmlzaWJpbGl0eVR5cGUgPSBQcnlWaXNpYmlsaXR5VHlwZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcm90ZWN0ZWQgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZlxuICApIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMubG9hZFdpZGdldHMoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmdldE1hcFN0eWxlcygpKTtcblxuICAgIHRoaXMucmVzdGl0dXRpb25zJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmNhdGFsb2cpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN0aXR1dGlvbkxpc3QpID0+XG4gICAgICAgICAgWy4uLnJlc3RpdHV0aW9uTGlzdF0uc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgIGEubW9kaWZpY2F0aW9uRGF0ZSA/IGIubW9kaWZpY2F0aW9uRGF0ZS5sb2NhbGVDb21wYXJlKGEubW9kaWZpY2F0aW9uRGF0ZSkgOiAxXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIHRoaXMuZmlsdGVyZWRSZXN0aXR1dGlvbiQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3RpdHV0aW9ucyQsIHRoaXMuc2VhcmNoJF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZXN0aXR1dGlvbnMsIHNlYXJjaF0pID0+XG4gICAgICAgIHJlc3RpdHV0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKHJlc3RpdHV0aW9uKSA9PiBzZWFyY2gubGVuZ3RoID09PSAwIHx8IHJlc3RpdHV0aW9uLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RNb2RlKG5ld01vZGU6IFZpZXdNb2RlKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBuZXdNb2RlO1xuICB9XG5cbiAgc2VsZWN0UmVzdGl0dXRpb24ocmVzdGl0dXRpb246IFdpZGdldCkge1xuICAgIHRoaXMuc2VsZWN0ZWRSZXN0aXR1dGlvbiA9IHJlc3RpdHV0aW9uO1xuICAgIHRoaXMuc2VsZWN0TW9kZSh0aGlzLm1vZGUuQ09OU1VMVCk7XG4gIH1cblxuICBjbG9zZVJlc3RpdHV0aW9uKCRldmVudDogdm9pZCkge1xuICAgIHRoaXMuc2VsZWN0ZWRSZXN0aXR1dGlvbiA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RNb2RlKHRoaXMubW9kZS5DQVRBTE9HKTtcbiAgfVxuXG4gIGRlbGV0ZVJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uOiBXaWRnZXQpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuZGVsZXRlUmVzdGl0dXRpb24oeyBpZDogcmVzdGl0dXRpb24uaWQgfSkpO1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgfVxuXG4gIGVkaXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbjogV2lkZ2V0KSB7XG4gICAgdGhpcy5zZWxlY3RlZFJlc3RpdHV0aW9uID0gcmVzdGl0dXRpb247XG4gICAgdGhpcy5zZWxlY3RNb2RlKFZpZXdNb2RlLkVESVRJT04pO1xuICB9XG5cbiAgdG9nZ2xlUmVtb3ZlQ29uZmlybSgkZXZlbnQ/OiBhbnksIHJlc3RpdHV0aW9uPzogV2lkZ2V0KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1SZW1vdmVSZWYpIHtcbiAgICAgIHRoaXMucmVzdGl0dXRpb24gPSByZXN0aXR1dGlvbjtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICAgIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ28tbW9kYWwtd3JhcHBlciddLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWY/LmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGVSZW1vdmVDb25maXJtKCRldmVudCwgcmVzdGl0dXRpb24pKTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZj8uYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlTW9kYWwsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsUmVtb3ZlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5jbG9zZU92ZXJsYXkoeyBpZDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJy1tb2RhbCcgfSkpO1xuICAgICAgdGhpcy5vcGVuTW9kYWw/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxSZW1vdmVDb25maXJtKCkge1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgfVxuXG4gIGZvY3VzQ3Jvc3NFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLmNyb3NzKSB7XG4gICAgICB0aGlzLmNyb3NzPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNWYWxpZGF0aW9uKCkge1xuICAgIHRoaXMuY29uZmlybS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbiIsIjxwcnktcmVzdGl0dXRpb24tY3NzPjwvcHJ5LXJlc3RpdHV0aW9uLWNzcz5cbjxkaXYgY2xhc3M9XCJvLW1hbmlmZXN0LWxheW91dCBvLXJlc3RpdHV0aW9uLWNhdGFsb2dcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGVkTW9kZSA9PT0gbW9kZS5DQVRBTE9HXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X190b29sYm94XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9kZShtb2RlLkNSRUFUSU9OKVwiXG4gICAgICAgIFtwcnlUb29sdGlwXT1cImluZm9Ub29sdGlwQ3JlYXRlUmVzdGl0dXRpb25cIlxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCJcbiAgICAgICAgKnByeUFjY2Vzcz1cInsgbW9kdWxlOiAnZGFzaGJvYXJkJywgcGFnZTogJ3Jlc3RpdHV0aW9uJywgYWN0aW9uOiAnY3JlYXRlJyB9XCJcbiAgICAgID5cbiAgICAgICAge3sgJ0BwcnkucmVzdGl0dXRpb24uY3JlYXRlX3RpdGxlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fc2VhcmNoXCI+XG4gICAgICAgICAgPGxhYmVsIGlkPVwiY2F0YWxvZy1zZWFyY2gtbGFiZWxcIiBmb3I9XCJjYXRhbG9nLXNlYXJjaFwiIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LnRvb2xib3guY2F0YWxvZy5maWx0ZXIubmFtZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImNhdGFsb2ctc2VhcmNoXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHByeS5yZXN0aXR1dGlvbi5zZWFyY2gnIHwgaTE4blwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2gkIHwgYXN5bmNcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic2VhcmNoXCIgW3dpZHRoXT1cIjE3XCIgW2hlaWdodF09XCIxN1wiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X19jb250ZW50XCI+XG4gICAgICA8aDEgY2xhc3M9XCJhLWgxXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24uY2F0YWxvZycgfCBpMThuIH19PC9oMT5cblxuICAgICAgPGRpdiBjbGFzcz1cIm8tcHJlc2VudGF0aW9uLXdyYXBwZXJcIj5cbiAgICAgICAgPHVsIGNsYXNzPVwiby1wcmVzZW50YXRpb25cIj5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJvLXByZXNlbnRhdGlvbl9faXRlbVwiICpuZ0Zvcj1cImxldCByZXN0aXR1dGlvbiBvZiBmaWx0ZXJlZFJlc3RpdHV0aW9uJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1wcmVzZW50YXRpb25fX2l0ZW1fX2hlYWRlclwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVzdGl0dXRpb24udmlzaWJpbGl0eT8udHlwZSA9PT0gUHJ5VmlzaWJpbGl0eVR5cGUuUFJJVkFURVwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgaWNvblN2Zz1cInByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgW3ByeVRvb2x0aXBdPVwicHJpdmF0ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlzLXByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxN1wiXG4gICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTdcIlxuICAgICAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCJyZXN0aXR1dGlvbi5jb3ZlciA/IDYwMCA6IDEyOFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cInJlc3RpdHV0aW9uLmNvdmVyID8gNjAwIDogMTI4XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZnVsbC13aWR0aF09XCJyZXN0aXR1dGlvbi5jb3ZlclwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJyZXN0aXR1dGlvbi5pbWFnZSB8IGdldFNlY3VyZWRJbWFnZSA6IFs2MDAsIDYwMF0gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmVzdGl0dXRpb24ocmVzdGl0dXRpb24pXCJcbiAgICAgICAgICAgICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcEV5ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8tcHJlc2VudGF0aW9uX19pdGVtX190eHRcIj5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiYS1oM1wiPnt7IHJlc3RpdHV0aW9uLm5hbWUgfX08L2gzPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImEtcCAtZGF0ZVwiPnt7IHJlc3RpdHV0aW9uLm1vZGlmaWNhdGlvbkRhdGUgfCBzaW5jZURhdGUgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8tcHJlc2VudGF0aW9uX19pdGVtX19mb290ZXJcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibS1hY3Rpb25zLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuIGljb24tb25seVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSZXN0aXR1dGlvbihyZXN0aXR1dGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAqcHJ5QWNjZXNzPVwieyBtb2R1bGU6ICdkYXNoYm9hcmQnLCBwYWdlOiAncmVzdGl0dXRpb24nLCBhY3Rpb246ICdjb25zdWx0JyB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJleWVcIiBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcEV5ZVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4mIzQ1OyYjNDU7aWNvbi1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbilcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXJlc3RpdHV0aW9uLm93bmVyXCJcbiAgICAgICAgICAgICAgICAgICAgKnByeUFjY2Vzcz1cInsgbW9kdWxlOiAnZGFzaGJvYXJkJywgcGFnZTogJ3Jlc3RpdHV0aW9uJywgYWN0aW9uOiAnZWRpdCcgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZWRpdFwiIFtwcnlUb29sdGlwXT1cImluZm9Ub29sdGlwVXBkYXRlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0biYjNDU7JiM0NTtpY29uLW9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUmVtb3ZlQ29uZmlybSgkZXZlbnQsIHJlc3RpdHV0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVzdGl0dXRpb24ub3duZXJcIlxuICAgICAgICAgICAgICAgICAgICAqcHJ5QWNjZXNzPVwieyBtb2R1bGU6ICdkYXNoYm9hcmQnLCBwYWdlOiAncmVzdGl0dXRpb24nLCBhY3Rpb246ICdkZWxldGUnIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImRlbGV0ZVwiIFtwcnlUb29sdGlwXT1cImluZm9Ub29sdGlwRGVsZXRlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGVkTW9kZSA9PT0gbW9kZS5DT05TVUxUXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X190b29sYm94XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2VsZWN0TW9kZShtb2RlLkNBVEFMT0cpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICB7eyAnQHByeS5yZXN0aXR1dGlvbi5iYWNrVG9DYXRhbG9nJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvLW1hbmlmZXN0LWxheW91dF9fY29udGVudFwiPlxuICAgICAgPHByeS1yZXN0aXR1dGlvblxuICAgICAgICBbc2VsZWN0ZWRSZXN0aXR1dGlvbl09XCJzZWxlY3RlZFJlc3RpdHV0aW9uXCJcbiAgICAgICAgW2VkaXRdPVwiZmFsc2VcIlxuICAgICAgICAocmVzdGl0dXRpb25DcmVhdGVkKT1cImNsb3NlUmVzdGl0dXRpb24oJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwicmVzdGl0dXRpb25cIlxuICAgICAgPjwvcHJ5LXJlc3RpdHV0aW9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0ZWRNb2RlID09PSBtb2RlLkNSRUFUSU9OXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X190b29sYm94XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2VsZWN0TW9kZShtb2RlLkNBVEFMT0cpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICB7eyAnQHByeS5yZXN0aXR1dGlvbi5iYWNrVG9DYXRhbG9nJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvLW1hbmlmZXN0LWxheW91dF9fY29udGVudFwiPlxuICAgICAgPHByeS1yZXN0aXR1dGlvbiAocmVzdGl0dXRpb25DcmVhdGVkKT1cImNsb3NlUmVzdGl0dXRpb24oJGV2ZW50KVwiIGNsYXNzPVwicmVzdGl0dXRpb25cIj48L3ByeS1yZXN0aXR1dGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGVkTW9kZSA9PT0gbW9kZS5FRElUSU9OXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFuaWZlc3QtbGF5b3V0X190b29sYm94XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2VsZWN0TW9kZShtb2RlLkNBVEFMT0cpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICB7eyAnQHByeS5yZXN0aXR1dGlvbi5iYWNrVG9DYXRhbG9nJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvLW1hbmlmZXN0LWxheW91dF9fY29udGVudFwiPlxuICAgICAgPHByeS1yZXN0aXR1dGlvblxuICAgICAgICAocmVzdGl0dXRpb25DcmVhdGVkKT1cImNsb3NlUmVzdGl0dXRpb24oJGV2ZW50KVwiXG4gICAgICAgIFtzZWxlY3RlZFJlc3RpdHV0aW9uXT1cInNlbGVjdGVkUmVzdGl0dXRpb25cIlxuICAgICAgICBjbGFzcz1cInJlc3RpdHV0aW9uXCJcbiAgICAgID48L3ByeS1yZXN0aXR1dGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlTW9kYWw+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm8tbW9kYWxcIlxuICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJkaWFsb2cgY29uZmlybSBkZWxldGUgcHJlc2VudGF0aW9uXCJcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgICNkZWxldGVNb2RhbFxuICAgICpuZ0lmPVwicmVzdGl0dXRpb25cIlxuICAgIChrZXlkb3duLmVzY2FwZSk9XCJ0b2dnbGVSZW1vdmVDb25maXJtKCRldmVudCwgcmVzdGl0dXRpb24pXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX3RpdGxlXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImEtaDJcIj5cbiAgICAgICAgICB7eyAnQHByeS53aWRnZXQubW9kYWxUaXRsZScgfCBpMThuIH19XG4gICAgICAgIDwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX2Nsb3NlXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAgICNjcm9zc1xuICAgICAgICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJmb2N1c1ZhbGlkYXRpb24oKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNhbmNlbFJlbW92ZUNvbmZpcm0oKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCIgW2hlaWdodF09XCIzNVwiIFt3aWR0aF09XCIzNVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LnRvb2xib3guY2xvc2UnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNjYW5jZWxSZW1vdmUgKGNsaWNrKT1cImNhbmNlbFJlbW92ZUNvbmZpcm0oKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LmNsb3NlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiXG4gICAgICAgICNjb25maXJtXG4gICAgICAgIChjbGljayk9XCJkZWxldGVSZXN0aXR1dGlvbihyZXN0aXR1dGlvbilcIlxuICAgICAgICAoa2V5ZG93bi50YWIpPVwiZm9jdXNDcm9zc0VsZW1lbnQoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QudmFsaWRhdGUnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcEV5ZT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUtdG9vbHRpcF9fd3JhcHBlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS10b29sdGlwX19uYW1lXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24uY29uc3VsdCcgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBVcGRhdGU+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlLXRvb2x0aXBfX3dyYXBwZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNhcmQtdGl0bGUtdG9vbHRpcF9fbmFtZVwiPnt7ICdAcHJ5LnJlc3RpdHV0aW9uLnVwZGF0ZScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBEZWxldGU+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlLXRvb2x0aXBfX3dyYXBwZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNhcmQtdGl0bGUtdG9vbHRpcF9fbmFtZVwiPnt7ICdAcHJ5LnJlc3RpdHV0aW9uLmRlbGV0ZScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBDcmVhdGVSZXN0aXR1dGlvbj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUtdG9vbHRpcF9fd3JhcHBlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS10b29sdGlwX19uYW1lXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24uY3JlYXRlX3RpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcHJpdmF0ZT5cbiAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtLXRvb2x0aXBfX3RleHRcIj57eyAnQHByeS5yZXN0aXR1dGlvbi5sb2NrJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { ConfigActions,
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { ConfigActions, PryVisibilityType, SubscriptionnerDirective, ViewMode } from '@provoly/dashboard';
|
|
3
3
|
import { BehaviorSubject, combineLatest, map } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@provoly/dashboard";
|
|
@@ -8,6 +8,7 @@ import * as i3 from "@angular/common";
|
|
|
8
8
|
import * as i4 from "@angular/forms";
|
|
9
9
|
import * as i5 from "../restitution/restitution.component";
|
|
10
10
|
import * as i6 from "../../style/css.component";
|
|
11
|
+
import * as i7 from "../restitution-list-item/restitution-list-item.component";
|
|
11
12
|
export class PryRestitutionListComponent extends SubscriptionnerDirective {
|
|
12
13
|
constructor(toolboxMenuService, translateService, toolboxManifestService, store) {
|
|
13
14
|
super();
|
|
@@ -15,54 +16,47 @@ export class PryRestitutionListComponent extends SubscriptionnerDirective {
|
|
|
15
16
|
this.translateService = translateService;
|
|
16
17
|
this.toolboxManifestService = toolboxManifestService;
|
|
17
18
|
this.store = store;
|
|
19
|
+
this.showTabs = true;
|
|
18
20
|
this.search$ = new BehaviorSubject('');
|
|
19
21
|
this.type$ = new BehaviorSubject(undefined);
|
|
20
22
|
this.selectedRestitution = null;
|
|
21
23
|
this.mode = ViewMode;
|
|
22
24
|
this.selectedMode = ViewMode.CATALOG;
|
|
23
|
-
this.
|
|
25
|
+
this.categories = [
|
|
26
|
+
{ label: 'model', color: '#FFC971' },
|
|
27
|
+
{ label: 'noModel', color: '#4E92E4' }
|
|
28
|
+
];
|
|
29
|
+
this.categoryOpened = '';
|
|
24
30
|
this.PryVisibilityType = PryVisibilityType;
|
|
25
31
|
this.store.dispatch(ConfigActions.loadWidgets());
|
|
26
|
-
this.filteredWidgets$ = combineLatest([this.toolboxMenuService.menuList$, this.search$, this.type$]).pipe(map(([menus, search, type]) => menus.filter((menu) => (search.length === 0 ||
|
|
27
|
-
this.translateService.instant(menu.label).toLocaleLowerCase().includes(search.toLocaleLowerCase())) &&
|
|
28
|
-
(!type || this.toolboxManifestService.get(menu.type).type === type))));
|
|
29
32
|
this.types$ = this.toolboxMenuService.types$;
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
.
|
|
33
|
-
|
|
34
|
-
this.
|
|
35
|
-
}
|
|
36
|
-
dragStart($event, type) {
|
|
37
|
-
if (!this.modeAuto) {
|
|
38
|
-
this.toolboxManifestService.dataTransfer($event, type);
|
|
39
|
-
}
|
|
33
|
+
this.filteredWidgets$ = combineLatest([this.toolboxMenuService.menuList$, this.search$, this.type$]).pipe(map(([widgets, search, type]) => widgets.filter((widget) => (search.length === 0 ||
|
|
34
|
+
this.translateService.instant(widget.label).toLocaleLowerCase().includes(search.toLocaleLowerCase())) &&
|
|
35
|
+
(!type || this.toolboxManifestService.get(widget.type).type === type))));
|
|
36
|
+
this.nonCustomWidgets$ = this.filteredWidgets$.pipe(map((widgets) => widgets.filter((widget) => this.toolboxManifestService.isModel(widget.type))));
|
|
37
|
+
this.customWidgets$ = this.filteredWidgets$.pipe(map((widgets) => widgets.filter((widget) => !this.toolboxManifestService.isModel(widget.type))));
|
|
40
38
|
}
|
|
41
39
|
selectMode(newMode) {
|
|
42
40
|
this.selectedMode = newMode;
|
|
43
41
|
}
|
|
44
|
-
selectRestitution(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (widget.id === catalogEntry.type) {
|
|
48
|
-
this.selectedRestitution = widget;
|
|
49
|
-
this.selectMode(this.mode.CONSULT);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
42
|
+
selectRestitution($event) {
|
|
43
|
+
this.selectedRestitution = $event;
|
|
44
|
+
this.selectMode(ViewMode.CONSULT);
|
|
53
45
|
}
|
|
54
|
-
closeRestitution(
|
|
46
|
+
closeRestitution() {
|
|
55
47
|
this.selectedRestitution = null;
|
|
56
48
|
this.selectMode(this.mode.CATALOG);
|
|
57
49
|
}
|
|
58
|
-
|
|
59
|
-
this.
|
|
50
|
+
toggle(category) {
|
|
51
|
+
this.categoryOpened = this.categoryOpened === category ? '' : category;
|
|
60
52
|
}
|
|
61
53
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryRestitutionListComponent, deps: [{ token: i1.ToolboxMenuService }, { token: i1.PryI18nService }, { token: i1.ToolboxManifestService }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
62
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryRestitutionListComponent, selector: "pry-catalog", usesInheritance: true, ngImport: i0, template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <h2 class=\"a-h2\">{{ '@pry.restitution.catalog' | i18n }}</h2>\n <div class=\"o-catalog__filters\">\n <div class=\"o-catalog__filters__by-name\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"a-label u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.action.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n </div>\n <label class=\"a-label\">{{ '@pry.action.filterByType' | i18n }}</label>\n <div class=\"o-catalog__filters__by-type\">\n <ul class=\"o-catalog__filters__by-type__list\">\n <li *ngFor=\"let typeOpt of types$ | async\">\n <input\n type=\"radio\"\n class=\"a-form-field u-sr-only\"\n name=\"catalog-filter\"\n id=\"catalog-button-{{ typeOpt.type }}\"\n [checked]=\"typeOpt.type === (type$ | async)\"\n (change)=\"type$.next(typeOpt.type)\"\n />\n <label\n class=\"a-label\"\n id=\"catalog-button-label-{{ typeOpt.type }}\"\n for=\"catalog-button-{{ typeOpt.type }}\"\n [title]=\"typeOpt.label | i18n\"\n >\n <span class=\"u-sr-only\">{{ typeOpt.label | i18n }} </span>\n <pry-icon [width]=\"18\" [height]=\"18\" [iconSvg]=\"typeOpt.icon\"></pry-icon>\n </label>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n (click)=\"type$.next(undefined)\"\n [disabled]=\"!type$.getValue()\"\n [class.u-visually-hidden]=\"!type$.getValue()\"\n >\n <pry-icon [width]=\"15\" [height]=\"15\" iconSvg=\"delete\"></pry-icon>\n {{ '@pry.toolbox.catalog.filter.delete' | i18n }}\n </button>\n </div>\n </div>\n <
|
|
54
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryRestitutionListComponent, selector: "pry-catalog", inputs: { showTabs: "showTabs" }, usesInheritance: true, ngImport: i0, template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <h2 class=\"a-h2\">{{ '@pry.restitution.catalog' | i18n }}</h2>\n <div class=\"o-catalog__filters\">\n <div class=\"o-catalog__filters__by-name\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"a-label u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.action.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n </div>\n <label class=\"a-label\">{{ '@pry.action.filterByType' | i18n }}</label>\n <div class=\"o-catalog__filters__by-type\">\n <ul class=\"o-catalog__filters__by-type__list\">\n <li *ngFor=\"let typeOpt of types$ | async\">\n <input\n type=\"radio\"\n class=\"a-form-field u-sr-only\"\n name=\"catalog-filter\"\n id=\"catalog-button-{{ typeOpt.type }}\"\n [checked]=\"typeOpt.type === (type$ | async)\"\n (change)=\"type$.next(typeOpt.type)\"\n />\n <label\n class=\"a-label\"\n id=\"catalog-button-label-{{ typeOpt.type }}\"\n for=\"catalog-button-{{ typeOpt.type }}\"\n [title]=\"typeOpt.label | i18n\"\n >\n <span class=\"u-sr-only\">{{ typeOpt.label | i18n }} </span>\n <pry-icon [width]=\"18\" [height]=\"18\" [iconSvg]=\"typeOpt.icon\"></pry-icon>\n </label>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n (click)=\"type$.next(undefined)\"\n [disabled]=\"!type$.getValue()\"\n [class.u-visually-hidden]=\"!type$.getValue()\"\n >\n <pry-icon [width]=\"15\" [height]=\"15\" iconSvg=\"delete\"></pry-icon>\n {{ '@pry.toolbox.catalog.filter.delete' | i18n }}\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"showTabs; else list\">\n <div class=\"o-accordion\" role=\"tablist\" aria-multiselectable=\"false\">\n <ng-container *ngFor=\"let category of categories\">\n <h2\n class=\"o-accordion__title\"\n [class.is-active]=\"categoryOpened === category.label\"\n [style.--border-color]=\"category.color\"\n >\n <button\n type=\"button\"\n class=\"o-accordion__title__btn\"\n [id]=\"'button_' + category.label\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + category.label\"\n [attr.aria-selected]=\"categoryOpened === category.label\"\n [attr.aria-expanded]=\"categoryOpened === category.label\"\n (click)=\"toggle(category.label)\"\n >\n <span>\n {{ '@pry.restitution.catalogTabs.' + category.label | i18n }}\n ({{\n category.label === 'model' ? (nonCustomWidgets$ | async)?.length : (customWidgets$ | async)?.length\n }})\n </span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"categoryOpened === category.label ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </h2>\n <div\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + category.label\"\n [id]=\"'panel_' + category.label\"\n [attr.aria-hidden]=\"categoryOpened !== category.label\"\n >\n <ng-container *ngIf=\"categoryOpened === category.label\">\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <ng-container *ngIf=\"categoryOpened === 'model'\">\n <pry-catalog-item\n *ngFor=\"let widget of nonCustomWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n <ng-container *ngIf=\"categoryOpened === 'noModel'\">\n <pry-catalog-item\n *ngFor=\"let widget of customWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n </ul>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #list>\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <pry-catalog-item\n *ngFor=\"let widget of filteredWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ul>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeRestitution()\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution()\"\n ></pry-restitution>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--ghost\" (click)=\"selectMode(mode.CATALOG)\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution (restitutionCreated)=\"closeRestitution()\"></pry-restitution>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.PryRestitutionComponent, selector: "pry-restitution", inputs: ["selectedRestitution", "edit", "isDataSourceSelected", "bindId"], outputs: ["restitutionCreated"] }, { kind: "component", type: i6.PryCatalogCssComponent, selector: "pry-restitution-css" }, { kind: "component", type: i7.PryRestitutionListItemComponent, selector: "pry-catalog-item", inputs: ["widget"], outputs: ["selectRestitution"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
|
|
63
55
|
}
|
|
64
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryRestitutionListComponent, decorators: [{
|
|
65
57
|
type: Component,
|
|
66
|
-
args: [{ selector: 'pry-catalog', template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <h2 class=\"a-h2\">{{ '@pry.restitution.catalog' | i18n }}</h2>\n <div class=\"o-catalog__filters\">\n <div class=\"o-catalog__filters__by-name\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"a-label u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.action.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n </div>\n <label class=\"a-label\">{{ '@pry.action.filterByType' | i18n }}</label>\n <div class=\"o-catalog__filters__by-type\">\n <ul class=\"o-catalog__filters__by-type__list\">\n <li *ngFor=\"let typeOpt of types$ | async\">\n <input\n type=\"radio\"\n class=\"a-form-field u-sr-only\"\n name=\"catalog-filter\"\n id=\"catalog-button-{{ typeOpt.type }}\"\n [checked]=\"typeOpt.type === (type$ | async)\"\n (change)=\"type$.next(typeOpt.type)\"\n />\n <label\n class=\"a-label\"\n id=\"catalog-button-label-{{ typeOpt.type }}\"\n for=\"catalog-button-{{ typeOpt.type }}\"\n [title]=\"typeOpt.label | i18n\"\n >\n <span class=\"u-sr-only\">{{ typeOpt.label | i18n }} </span>\n <pry-icon [width]=\"18\" [height]=\"18\" [iconSvg]=\"typeOpt.icon\"></pry-icon>\n </label>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n (click)=\"type$.next(undefined)\"\n [disabled]=\"!type$.getValue()\"\n [class.u-visually-hidden]=\"!type$.getValue()\"\n >\n <pry-icon [width]=\"15\" [height]=\"15\" iconSvg=\"delete\"></pry-icon>\n {{ '@pry.toolbox.catalog.filter.delete' | i18n }}\n </button>\n </div>\n </div>\n <
|
|
67
|
-
}], ctorParameters: function () { return [{ type: i1.ToolboxMenuService }, { type: i1.PryI18nService }, { type: i1.ToolboxManifestService }, { type: i2.Store }]; }
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QvcmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QvcmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFFTCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBRWxCLGlCQUFpQixFQUNqQix3QkFBd0IsRUFHeEIsUUFBUSxFQUVULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU12RSxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsd0JBQXdCO0lBYXZFLFlBQ1Usa0JBQXNDLEVBQ3RDLGdCQUFnQyxFQUNoQyxzQkFBOEMsRUFDOUMsS0FBWTtRQUVwQixLQUFLLEVBQUUsQ0FBQztRQUxBLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQjtRQUNoQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFVBQUssR0FBTCxLQUFLLENBQU87UUFoQnRCLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQXFCLFNBQVMsQ0FB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QixDQUFDLE1BQVk7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFvQjtRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7OEdBbkVVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLDBFQ3ZCeEMsNjRLQW1JQTs7MkZENUdhLDJCQUEyQjtrQkFKdkMsU0FBUzsrQkFDRSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENhdGFsb2dFbnRyeSxcbiAgQ29uZmlnQWN0aW9ucyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRHcmlkTGF5b3V0LFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBQcnlWaXNpYmlsaXR5VHlwZSxcbiAgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlLFxuICBUb29sYm94TWFuaWZlc3RTZXJ2aWNlLFxuICBUb29sYm94TWVudVNlcnZpY2UsXG4gIFZpZXdNb2RlLFxuICBXaWRnZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3RpdHV0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeVJlc3RpdHV0aW9uTGlzdENvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB7XG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgdHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHVuZGVmaW5lZCB8IHN0cmluZz4odW5kZWZpbmVkKTtcbiAgZmlsdGVyZWRXaWRnZXRzJDogT2JzZXJ2YWJsZTxDYXRhbG9nRW50cnlbXT47XG4gIHR5cGVzJDogT2JzZXJ2YWJsZTx7IGljb246IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgdHlwZTogc3RyaW5nIH1bXT47XG4gIHNlbGVjdGVkUmVzdGl0dXRpb246IFdpZGdldCB8IG51bGwgPSBudWxsO1xuICBtb2RlID0gVmlld01vZGU7XG4gIHNlbGVjdGVkTW9kZTogVmlld01vZGUgPSBWaWV3TW9kZS5DQVRBTE9HO1xuICBjYXRhbG9nOiBXaWRnZXRbXSB8IHVuZGVmaW5lZDtcbiAgYXV0b21hdGljR3JpZE1vZGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBtb2RlQXV0bzogYm9vbGVhbiA9IGZhbHNlO1xuICBQcnlWaXNpYmlsaXR5VHlwZSA9IFByeVZpc2liaWxpdHlUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9vbGJveE1lbnVTZXJ2aWNlOiBUb29sYm94TWVudVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHRvb2xib3hNYW5pZmVzdFNlcnZpY2U6IFRvb2xib3hNYW5pZmVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMubG9hZFdpZGdldHMoKSk7XG4gICAgdGhpcy5maWx0ZXJlZFdpZGdldHMkID0gY29tYmluZUxhdGVzdChbdGhpcy50b29sYm94TWVudVNlcnZpY2UubWVudUxpc3QkLCB0aGlzLnNlYXJjaCQsIHRoaXMudHlwZSRdKS5waXBlKFxuICAgICAgbWFwKChbbWVudXMsIHNlYXJjaCwgdHlwZV0pID0+XG4gICAgICAgIG1lbnVzLmZpbHRlcihcbiAgICAgICAgICAobWVudSkgPT5cbiAgICAgICAgICAgIChzZWFyY2gubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lbnUubGFiZWwpLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSAmJlxuICAgICAgICAgICAgKCF0eXBlIHx8IHRoaXMudG9vbGJveE1hbmlmZXN0U2VydmljZS5nZXQobWVudS50eXBlKS50eXBlID09PSB0eXBlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnR5cGVzJCA9IHRoaXMudG9vbGJveE1lbnVTZXJ2aWNlLnR5cGVzJDtcbiAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuY2F0YWxvZykuc3Vic2NyaWJlKChjYXRhbG9nOiBXaWRnZXRbXSkgPT4gKHRoaXMuY2F0YWxvZyA9IGNhdGFsb2cpKTtcbiAgICB0aGlzLmF1dG9tYXRpY0dyaWRNb2RlJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpXG4gICAgICAucGlwZShtYXAoKGxheW91dCkgPT4gbGF5b3V0ICE9PSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdXRvbWF0aWNHcmlkTW9kZSQuc3Vic2NyaWJlKChtb2RlQXV0bykgPT4gKHRoaXMubW9kZUF1dG8gPSBtb2RlQXV0bykpKTtcbiAgfVxuXG4gIGRyYWdTdGFydCgkZXZlbnQ6IERyYWdFdmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVBdXRvKSB7XG4gICAgICB0aGlzLnRvb2xib3hNYW5pZmVzdFNlcnZpY2UuZGF0YVRyYW5zZmVyKCRldmVudCwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0TW9kZShuZXdNb2RlOiBWaWV3TW9kZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlID0gbmV3TW9kZTtcbiAgfVxuXG4gIHNlbGVjdFJlc3RpdHV0aW9uKGNhdGFsb2dFbnRyeTogQ2F0YWxvZ0VudHJ5KSB7XG4gICAgaWYgKGNhdGFsb2dFbnRyeS5pc0N1c3RvbSkge1xuICAgICAgdGhpcy5jYXRhbG9nPy5mb3JFYWNoKCh3aWRnZXQ6IFdpZGdldCkgPT4ge1xuICAgICAgICBpZiAod2lkZ2V0LmlkID09PSBjYXRhbG9nRW50cnkudHlwZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXN0aXR1dGlvbiA9IHdpZGdldDtcbiAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUodGhpcy5tb2RlLkNPTlNVTFQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVJlc3RpdHV0aW9uKCRldmVudDogdm9pZCkge1xuICAgIHRoaXMuc2VsZWN0ZWRSZXN0aXR1dGlvbiA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RNb2RlKHRoaXMubW9kZS5DQVRBTE9HKTtcbiAgfVxuXG4gIHZpZXdJbkRhc2hib2FyZCh3aWRnZXQ6IENhdGFsb2dFbnRyeSkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hZGRXaWRnZXRUb1ByZXNlbnRhdGlvbih7IHdpZGdldFR5cGU6IHdpZGdldC50eXBlIH0pKTtcbiAgfVxufVxuIiwiPHByeS1yZXN0aXR1dGlvbi1jc3M+PC9wcnktcmVzdGl0dXRpb24tY3NzPlxuPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ1wiPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0ZWRNb2RlID09PSBtb2RlLkNBVEFMT0dcIj5cbiAgICA8aDIgY2xhc3M9XCJhLWgyXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24uY2F0YWxvZycgfCBpMThuIH19PC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwiby1jYXRhbG9nX19maWx0ZXJzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1jYXRhbG9nX19maWx0ZXJzX19ieS1uYW1lXCI+XG4gICAgICAgIDxsYWJlbCBpZD1cImNhdGFsb2ctc2VhcmNoLWxhYmVsXCIgZm9yPVwiY2F0YWxvZy1zZWFyY2hcIiBjbGFzcz1cImEtbGFiZWwgdS12aXN1YWxseS1oaWRkZW5cIj5cbiAgICAgICAgICA8c3Bhbj57eyAnQHByeS50b29sYm94LmNhdGFsb2cuZmlsdGVyLm5hbWUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzZWFyY2hcIiBbd2lkdGhdPVwiMTdcIiBbaGVpZ2h0XT1cIjE3XCI+PC9wcnktaWNvbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgaWQ9XCJjYXRhbG9nLXNlYXJjaFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BwcnkuYWN0aW9uLnNlYXJjaCcgfCBpMThuXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2gkIHwgYXN5bmNcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRoaXMuc2VhcmNoJC5uZXh0KCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuYWN0aW9uLmZpbHRlckJ5VHlwZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2ZpbHRlcnNfX2J5LXR5cGVcIj5cbiAgICAgICAgPHVsIGNsYXNzPVwiby1jYXRhbG9nX19maWx0ZXJzX19ieS10eXBlX19saXN0XCI+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCB0eXBlT3B0IG9mIHR5cGVzJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGQgdS1zci1vbmx5XCJcbiAgICAgICAgICAgICAgbmFtZT1cImNhdGFsb2ctZmlsdGVyXCJcbiAgICAgICAgICAgICAgaWQ9XCJjYXRhbG9nLWJ1dHRvbi17eyB0eXBlT3B0LnR5cGUgfX1cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ0eXBlT3B0LnR5cGUgPT09ICh0eXBlJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidHlwZSQubmV4dCh0eXBlT3B0LnR5cGUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWxhYmVsXCJcbiAgICAgICAgICAgICAgaWQ9XCJjYXRhbG9nLWJ1dHRvbi1sYWJlbC17eyB0eXBlT3B0LnR5cGUgfX1cIlxuICAgICAgICAgICAgICBmb3I9XCJjYXRhbG9nLWJ1dHRvbi17eyB0eXBlT3B0LnR5cGUgfX1cIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwidHlwZU9wdC5sYWJlbCB8IGkxOG5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtc3Itb25seVwiPnt7IHR5cGVPcHQubGFiZWwgfCBpMThuIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHByeS1pY29uIFt3aWR0aF09XCIxOFwiIFtoZWlnaHRdPVwiMThcIiBbaWNvblN2Z109XCJ0eXBlT3B0Lmljb25cIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi10ZXh0IC1saW5rLWxpa2VcIlxuICAgICAgICAgIChjbGljayk9XCJ0eXBlJC5uZXh0KHVuZGVmaW5lZClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhdHlwZSQuZ2V0VmFsdWUoKVwiXG4gICAgICAgICAgW2NsYXNzLnUtdmlzdWFsbHktaGlkZGVuXT1cIiF0eXBlJC5nZXRWYWx1ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgaWNvblN2Zz1cImRlbGV0ZVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAge3sgJ0BwcnkudG9vbGJveC5jYXRhbG9nLmZpbHRlci5kZWxldGUnIHwgaTE4biB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDx1bCBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdFwiIHJvbGU9XCJsaXN0XCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICA8bGlcbiAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiBmaWx0ZXJlZFdpZGdldHMkIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdF9faXRlbVwiXG4gICAgICAgIFtjbGFzcy5pcy1wb2ludF09XCJhdXRvbWF0aWNHcmlkTW9kZSQgfCBhc3luY1wiXG4gICAgICAgIFtkcmFnZ2FibGVdPVwiIShhdXRvbWF0aWNHcmlkTW9kZSQgfCBhc3luYylcIlxuICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICBhcmlhLWdyYWJiZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIFt0aXRsZV09XCJ3aWRnZXQuZGVzY3JpcHRpb24gPz8gd2lkZ2V0LmxhYmVsIHwgaTE4blwiXG4gICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KCRldmVudCwgd2lkZ2V0LnR5cGUpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF1dG9tYXRpY0dyaWRNb2RlJCB8IGFzeW5jXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdJbkRhc2hib2FyZCh3aWRnZXQpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQHByeS5yZXN0aXR1dGlvbi5hZGRfaWNvbicgfCBpMThuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LWljb24gW3dpZHRoXT1cIjI1XCIgW2hlaWdodF09XCIyNVwiIGljb25Tdmc9XCJhZGRfY29sdW1uXCIgY2xhc3M9XCJvLWNhdGFsb2dfX2xpc3RfX2ljb25cIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LnJlc3RpdHV0aW9uLmFkZF9pY29uJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgW2FsdF09XCJ3aWRnZXQubGFiZWxcIlxuICAgICAgICAgIFtzcmNdPVwid2lkZ2V0Lmljb24gfCBnZXRTZWN1cmVkSW1hZ2U6IFs2MDAsIDYwMF0gfCBhc3luY1wiXG4gICAgICAgICAgW2hlaWdodF09XCJ3aWRnZXQuY292ZXIgPyA2MDAgOiA1M1wiXG4gICAgICAgICAgW3dpZHRoXT1cIndpZGdldC5jb3ZlciA/IDYwMCA6IDUzXCJcbiAgICAgICAgICBbY2xhc3MuaXMtZnVsbC13aWR0aF09XCJ3aWRnZXQuY292ZXJcIlxuICAgICAgICAvPlxuICAgICAgICA8cCBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdF9faXRlbV9fbGliZWxsZVwiICpuZ0lmPVwid2lkZ2V0LmlzQ3VzdG9tOyBlbHNlIHRyYW5zbGF0ZVwiPnt7IHdpZGdldC5sYWJlbCB9fTwvcD5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0cmFuc2xhdGU+XG4gICAgICAgICAgPHAgY2xhc3M9XCJvLWNhdGFsb2dfX2xpc3RfX2l0ZW1fX2xpYmVsbGVcIj57eyB3aWRnZXQubGFiZWwgfCBpMThuIH19PC9wPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwid2lkZ2V0LnZpc2liaWxpdHk/LnR5cGUgPT09IFByeVZpc2liaWxpdHlUeXBlLlBSSVZBVEVcIj5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInByaXZhdGVcIiBbcHJ5VG9vbHRpcF09XCJwcml2YXRlXCIgY2xhc3M9XCJpcy1wcml2YXRlXCIgW2hlaWdodF09XCIxN1wiIFt3aWR0aF09XCIxN1wiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1jYXRhbG9nX19saXN0X19pdGVtX19hY3Rpb25cIiAqbmdJZj1cIndpZGdldC5pc0N1c3RvbVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWdob3N0XCIgKGNsaWNrKT1cInNlbGVjdFJlc3RpdHV0aW9uKHdpZGdldClcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LnJlc3RpdHV0aW9uLnZpZXcnIHwgaTE4biB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0ZWRNb2RlID09PSBtb2RlLkNPTlNVTFRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1jYXRhbG9nX19jcmVhdGVcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNsb3NlUmVzdGl0dXRpb24oKVwiPlxuICAgICAgICB7eyAnQHByeS5yZXN0aXR1dGlvbi5jYW5jZWwnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8cHJ5LXJlc3RpdHV0aW9uXG4gICAgICBbc2VsZWN0ZWRSZXN0aXR1dGlvbl09XCJzZWxlY3RlZFJlc3RpdHV0aW9uXCJcbiAgICAgIFtlZGl0XT1cImZhbHNlXCJcbiAgICAgIChyZXN0aXR1dGlvbkNyZWF0ZWQpPVwiY2xvc2VSZXN0aXR1dGlvbigkZXZlbnQpXCJcbiAgICA+PC9wcnktcmVzdGl0dXRpb24+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGVkTW9kZSA9PT0gbW9kZS5DUkVBVElPTlwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2NyZWF0ZVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1naG9zdFwiIChjbGljayk9XCJzZWxlY3RNb2RlKG1vZGUuQ0FUQUxPRylcIj5cbiAgICAgICAge3sgJ0BwcnkucmVzdGl0dXRpb24uY2FuY2VsJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPHByeS1yZXN0aXR1dGlvbiAocmVzdGl0dXRpb25DcmVhdGVkKT1cImNsb3NlUmVzdGl0dXRpb24oJGV2ZW50KVwiPjwvcHJ5LXJlc3RpdHV0aW9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcHJpdmF0ZT5cbiAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtLXRvb2x0aXBfX3RleHRcIj57eyAnQHByeS5yZXN0aXR1dGlvbi5sb2NrJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
58
|
+
args: [{ selector: 'pry-catalog', template: "<pry-restitution-css></pry-restitution-css>\n<div class=\"o-catalog\">\n <ng-template [ngIf]=\"selectedMode === mode.CATALOG\">\n <h2 class=\"a-h2\">{{ '@pry.restitution.catalog' | i18n }}</h2>\n <div class=\"o-catalog__filters\">\n <div class=\"o-catalog__filters__by-name\">\n <label id=\"catalog-search-label\" for=\"catalog-search\" class=\"a-label u-visually-hidden\">\n <span>{{ '@pry.toolbox.catalog.filter.name' | i18n }}</span>\n </label>\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.action.search' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n </div>\n <label class=\"a-label\">{{ '@pry.action.filterByType' | i18n }}</label>\n <div class=\"o-catalog__filters__by-type\">\n <ul class=\"o-catalog__filters__by-type__list\">\n <li *ngFor=\"let typeOpt of types$ | async\">\n <input\n type=\"radio\"\n class=\"a-form-field u-sr-only\"\n name=\"catalog-filter\"\n id=\"catalog-button-{{ typeOpt.type }}\"\n [checked]=\"typeOpt.type === (type$ | async)\"\n (change)=\"type$.next(typeOpt.type)\"\n />\n <label\n class=\"a-label\"\n id=\"catalog-button-label-{{ typeOpt.type }}\"\n for=\"catalog-button-{{ typeOpt.type }}\"\n [title]=\"typeOpt.label | i18n\"\n >\n <span class=\"u-sr-only\">{{ typeOpt.label | i18n }} </span>\n <pry-icon [width]=\"18\" [height]=\"18\" [iconSvg]=\"typeOpt.icon\"></pry-icon>\n </label>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n (click)=\"type$.next(undefined)\"\n [disabled]=\"!type$.getValue()\"\n [class.u-visually-hidden]=\"!type$.getValue()\"\n >\n <pry-icon [width]=\"15\" [height]=\"15\" iconSvg=\"delete\"></pry-icon>\n {{ '@pry.toolbox.catalog.filter.delete' | i18n }}\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"showTabs; else list\">\n <div class=\"o-accordion\" role=\"tablist\" aria-multiselectable=\"false\">\n <ng-container *ngFor=\"let category of categories\">\n <h2\n class=\"o-accordion__title\"\n [class.is-active]=\"categoryOpened === category.label\"\n [style.--border-color]=\"category.color\"\n >\n <button\n type=\"button\"\n class=\"o-accordion__title__btn\"\n [id]=\"'button_' + category.label\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + category.label\"\n [attr.aria-selected]=\"categoryOpened === category.label\"\n [attr.aria-expanded]=\"categoryOpened === category.label\"\n (click)=\"toggle(category.label)\"\n >\n <span>\n {{ '@pry.restitution.catalogTabs.' + category.label | i18n }}\n ({{\n category.label === 'model' ? (nonCustomWidgets$ | async)?.length : (customWidgets$ | async)?.length\n }})\n </span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"categoryOpened === category.label ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </h2>\n <div\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + category.label\"\n [id]=\"'panel_' + category.label\"\n [attr.aria-hidden]=\"categoryOpened !== category.label\"\n >\n <ng-container *ngIf=\"categoryOpened === category.label\">\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <ng-container *ngIf=\"categoryOpened === 'model'\">\n <pry-catalog-item\n *ngFor=\"let widget of nonCustomWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n <ng-container *ngIf=\"categoryOpened === 'noModel'\">\n <pry-catalog-item\n *ngFor=\"let widget of customWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ng-container>\n </ul>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #list>\n <ul class=\"o-catalog__list\" role=\"list\" aria-live=\"polite\">\n <pry-catalog-item\n *ngFor=\"let widget of filteredWidgets$ | async\"\n [widget]=\"widget\"\n (selectRestitution)=\"selectRestitution($event)\"\n ></pry-catalog-item>\n </ul>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CONSULT\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeRestitution()\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution\n [selectedRestitution]=\"selectedRestitution\"\n [edit]=\"false\"\n (restitutionCreated)=\"closeRestitution()\"\n ></pry-restitution>\n </ng-template>\n\n <ng-template [ngIf]=\"selectedMode === mode.CREATION\">\n <div class=\"o-catalog__create\">\n <button class=\"a-btn a-btn--ghost\" (click)=\"selectMode(mode.CATALOG)\">\n {{ '@pry.restitution.cancel' | i18n }}\n </button>\n </div>\n\n <pry-restitution (restitutionCreated)=\"closeRestitution()\"></pry-restitution>\n </ng-template>\n</div>\n" }]
|
|
59
|
+
}], ctorParameters: function () { return [{ type: i1.ToolboxMenuService }, { type: i1.PryI18nService }, { type: i1.ToolboxManifestService }, { type: i2.Store }]; }, propDecorators: { showTabs: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}] } });
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QvcmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QvcmVzdGl0dXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBRUwsYUFBYSxFQUViLGlCQUFpQixFQUNqQix3QkFBd0IsRUFHeEIsUUFBUSxFQUVULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFNdkUsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHdCQUF3QjtJQWtCdkUsWUFDVSxrQkFBc0MsRUFDdEMsZ0JBQWdDLEVBQ2hDLHNCQUE4QyxFQUM5QyxLQUFZO1FBRXBCLEtBQUssRUFBRSxDQUFDO1FBTEEsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBQ2hDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsVUFBSyxHQUFMLEtBQUssQ0FBTztRQXJCYixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQXFCLFNBQVMsQ0FBQyxDQUFDO1FBSzNE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RFUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsNEdDbkJ4Qyx5a01Bc0pBOzsyRkRuSWEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLGFBQWE7K0xBSWQsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQ2F0YWxvZ0VudHJ5LFxuICBDb25maWdBY3Rpb25zLFxuICBQcnlJMThuU2VydmljZSxcbiAgUHJ5VmlzaWJpbGl0eVR5cGUsXG4gIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSxcbiAgVG9vbGJveE1hbmlmZXN0U2VydmljZSxcbiAgVG9vbGJveE1lbnVTZXJ2aWNlLFxuICBWaWV3TW9kZSxcbiAgV2lkZ2V0XG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktY2F0YWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0aXR1dGlvbi1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQcnlSZXN0aXR1dGlvbkxpc3RDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUge1xuICBASW5wdXQoKSBzaG93VGFicyA9IHRydWU7XG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgdHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHVuZGVmaW5lZCB8IHN0cmluZz4odW5kZWZpbmVkKTtcbiAgZmlsdGVyZWRXaWRnZXRzJDogT2JzZXJ2YWJsZTxDYXRhbG9nRW50cnlbXT47XG4gIG5vbkN1c3RvbVdpZGdldHMkOiBPYnNlcnZhYmxlPENhdGFsb2dFbnRyeVtdPjtcbiAgY3VzdG9tV2lkZ2V0cyQ6IE9ic2VydmFibGU8Q2F0YWxvZ0VudHJ5W10+O1xuICB0eXBlcyQ6IE9ic2VydmFibGU8eyBpY29uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHR5cGU6IHN0cmluZyB9W10+O1xuICBzZWxlY3RlZFJlc3RpdHV0aW9uOiBXaWRnZXQgfCBudWxsID0gbnVsbDtcbiAgbW9kZSA9IFZpZXdNb2RlO1xuICBzZWxlY3RlZE1vZGU6IFZpZXdNb2RlID0gVmlld01vZGUuQ0FUQUxPRztcbiAgY2F0ZWdvcmllcyA9IFtcbiAgICB7IGxhYmVsOiAnbW9kZWwnLCBjb2xvcjogJyNGRkM5NzEnIH0sXG4gICAgeyBsYWJlbDogJ25vTW9kZWwnLCBjb2xvcjogJyM0RTkyRTQnIH1cbiAgXTtcbiAgY2F0ZWdvcnlPcGVuZWQ6IHN0cmluZyA9ICcnO1xuICBQcnlWaXNpYmlsaXR5VHlwZSA9IFByeVZpc2liaWxpdHlUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9vbGJveE1lbnVTZXJ2aWNlOiBUb29sYm94TWVudVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHRvb2xib3hNYW5pZmVzdFNlcnZpY2U6IFRvb2xib3hNYW5pZmVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMubG9hZFdpZGdldHMoKSk7XG4gICAgdGhpcy50eXBlcyQgPSB0aGlzLnRvb2xib3hNZW51U2VydmljZS50eXBlcyQ7XG4gICAgdGhpcy5maWx0ZXJlZFdpZGdldHMkID0gY29tYmluZUxhdGVzdChbdGhpcy50b29sYm94TWVudVNlcnZpY2UubWVudUxpc3QkLCB0aGlzLnNlYXJjaCQsIHRoaXMudHlwZSRdKS5waXBlKFxuICAgICAgbWFwKChbd2lkZ2V0cywgc2VhcmNoLCB0eXBlXSkgPT5cbiAgICAgICAgd2lkZ2V0cy5maWx0ZXIoXG4gICAgICAgICAgKHdpZGdldCkgPT5cbiAgICAgICAgICAgIChzZWFyY2gubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHdpZGdldC5sYWJlbCkudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb2NhbGVMb3dlckNhc2UoKSkpICYmXG4gICAgICAgICAgICAoIXR5cGUgfHwgdGhpcy50b29sYm94TWFuaWZlc3RTZXJ2aWNlLmdldCh3aWRnZXQudHlwZSkudHlwZSA9PT0gdHlwZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5ub25DdXN0b21XaWRnZXRzJCA9IHRoaXMuZmlsdGVyZWRXaWRnZXRzJC5waXBlKFxuICAgICAgbWFwKCh3aWRnZXRzKSA9PiB3aWRnZXRzLmZpbHRlcigod2lkZ2V0KSA9PiB0aGlzLnRvb2xib3hNYW5pZmVzdFNlcnZpY2UuaXNNb2RlbCh3aWRnZXQudHlwZSkpKVxuICAgICk7XG4gICAgdGhpcy5jdXN0b21XaWRnZXRzJCA9IHRoaXMuZmlsdGVyZWRXaWRnZXRzJC5waXBlKFxuICAgICAgbWFwKCh3aWRnZXRzKSA9PiB3aWRnZXRzLmZpbHRlcigod2lkZ2V0KSA9PiAhdGhpcy50b29sYm94TWFuaWZlc3RTZXJ2aWNlLmlzTW9kZWwod2lkZ2V0LnR5cGUpKSlcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0TW9kZShuZXdNb2RlOiBWaWV3TW9kZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlID0gbmV3TW9kZTtcbiAgfVxuXG4gIHNlbGVjdFJlc3RpdHV0aW9uKCRldmVudDogV2lkZ2V0KSB7XG4gICAgdGhpcy5zZWxlY3RlZFJlc3RpdHV0aW9uID0gJGV2ZW50O1xuICAgIHRoaXMuc2VsZWN0TW9kZShWaWV3TW9kZS5DT05TVUxUKTtcbiAgfVxuXG4gIGNsb3NlUmVzdGl0dXRpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFJlc3RpdHV0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdE1vZGUodGhpcy5tb2RlLkNBVEFMT0cpO1xuICB9XG5cbiAgdG9nZ2xlKGNhdGVnb3J5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNhdGVnb3J5T3BlbmVkID0gdGhpcy5jYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnkgPyAnJyA6IGNhdGVnb3J5O1xuICB9XG59XG4iLCI8cHJ5LXJlc3RpdHV0aW9uLWNzcz48L3ByeS1yZXN0aXR1dGlvbi1jc3M+XG48ZGl2IGNsYXNzPVwiby1jYXRhbG9nXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3RlZE1vZGUgPT09IG1vZGUuQ0FUQUxPR1wiPlxuICAgIDxoMiBjbGFzcz1cImEtaDJcIj57eyAnQHByeS5yZXN0aXR1dGlvbi5jYXRhbG9nJyB8IGkxOG4gfX08L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2ZpbHRlcnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2ZpbHRlcnNfX2J5LW5hbWVcIj5cbiAgICAgICAgPGxhYmVsIGlkPVwiY2F0YWxvZy1zZWFyY2gtbGFiZWxcIiBmb3I9XCJjYXRhbG9nLXNlYXJjaFwiIGNsYXNzPVwiYS1sYWJlbCB1LXZpc3VhbGx5LWhpZGRlblwiPlxuICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LnRvb2xib3guY2F0YWxvZy5maWx0ZXIubmFtZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInNlYXJjaFwiIFt3aWR0aF09XCIxN1wiIFtoZWlnaHRdPVwiMTdcIj48L3ByeS1pY29uPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cImNhdGFsb2ctc2VhcmNoXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHByeS5hY3Rpb24uc2VhcmNoJyB8IGkxOG5cIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaCQgfCBhc3luY1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5hY3Rpb24uZmlsdGVyQnlUeXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fZmlsdGVyc19fYnktdHlwZVwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJvLWNhdGFsb2dfX2ZpbHRlcnNfX2J5LXR5cGVfX2xpc3RcIj5cbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHR5cGVPcHQgb2YgdHlwZXMkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZCB1LXNyLW9ubHlcIlxuICAgICAgICAgICAgICBuYW1lPVwiY2F0YWxvZy1maWx0ZXJcIlxuICAgICAgICAgICAgICBpZD1cImNhdGFsb2ctYnV0dG9uLXt7IHR5cGVPcHQudHlwZSB9fVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInR5cGVPcHQudHlwZSA9PT0gKHR5cGUkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0eXBlJC5uZXh0KHR5cGVPcHQudHlwZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImEtbGFiZWxcIlxuICAgICAgICAgICAgICBpZD1cImNhdGFsb2ctYnV0dG9uLWxhYmVsLXt7IHR5cGVPcHQudHlwZSB9fVwiXG4gICAgICAgICAgICAgIGZvcj1cImNhdGFsb2ctYnV0dG9uLXt7IHR5cGVPcHQudHlwZSB9fVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJ0eXBlT3B0LmxhYmVsIHwgaTE4blwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS1zci1vbmx5XCI+e3sgdHlwZU9wdC5sYWJlbCB8IGkxOG4gfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxOFwiIFtpY29uU3ZnXT1cInR5cGVPcHQuaWNvblwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInR5cGUkLm5leHQodW5kZWZpbmVkKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiF0eXBlJC5nZXRWYWx1ZSgpXCJcbiAgICAgICAgICBbY2xhc3MudS12aXN1YWxseS1oaWRkZW5dPVwiIXR5cGUkLmdldFZhbHVlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIiBpY29uU3ZnPVwiZGVsZXRlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICB7eyAnQHByeS50b29sYm94LmNhdGFsb2cuZmlsdGVyLmRlbGV0ZScgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUYWJzOyBlbHNlIGxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWFjY29yZGlvblwiIHJvbGU9XCJ0YWJsaXN0XCIgYXJpYS1tdWx0aXNlbGVjdGFibGU9XCJmYWxzZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzXCI+XG4gICAgICAgICAgPGgyXG4gICAgICAgICAgICBjbGFzcz1cIm8tYWNjb3JkaW9uX190aXRsZVwiXG4gICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cImNhdGVnb3J5T3BlbmVkID09PSBjYXRlZ29yeS5sYWJlbFwiXG4gICAgICAgICAgICBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwiY2F0ZWdvcnkuY29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiby1hY2NvcmRpb25fX3RpdGxlX19idG5cIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2J1dHRvbl8nICsgY2F0ZWdvcnkubGFiZWxcIlxuICAgICAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCIncGFuZWxfJyArIGNhdGVnb3J5LmxhYmVsXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnkubGFiZWxcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImNhdGVnb3J5T3BlbmVkID09PSBjYXRlZ29yeS5sYWJlbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGUoY2F0ZWdvcnkubGFiZWwpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAge3sgJ0BwcnkucmVzdGl0dXRpb24uY2F0YWxvZ1RhYnMuJyArIGNhdGVnb3J5LmxhYmVsIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICh7e1xuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkubGFiZWwgPT09ICdtb2RlbCcgPyAobm9uQ3VzdG9tV2lkZ2V0cyQgfCBhc3luYyk/Lmxlbmd0aCA6IChjdXN0b21XaWRnZXRzJCB8IGFzeW5jKT8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfX0pXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaWNvblN2Z109XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnkubGFiZWwgPyAnY2hldnJvbl90b3Bfcm91bmRlZCcgOiAnY2hldnJvbl9ib3R0b21fcm91bmRlZCdcIlxuICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJvLWFjY29yZGlvbl9fcGFuZWxcIlxuICAgICAgICAgICAgcm9sZT1cInRhYnBhbmVsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCInYnV0dG9uXycgKyBjYXRlZ29yeS5sYWJlbFwiXG4gICAgICAgICAgICBbaWRdPVwiJ3BhbmVsXycgKyBjYXRlZ29yeS5sYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJjYXRlZ29yeU9wZW5lZCAhPT0gY2F0ZWdvcnkubGFiZWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yeU9wZW5lZCA9PT0gY2F0ZWdvcnkubGFiZWxcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiby1jYXRhbG9nX19saXN0XCIgcm9sZT1cImxpc3RcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2F0ZWdvcnlPcGVuZWQgPT09ICdtb2RlbCdcIj5cbiAgICAgICAgICAgICAgICAgIDxwcnktY2F0YWxvZy1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2Ygbm9uQ3VzdG9tV2lkZ2V0cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFt3aWRnZXRdPVwid2lkZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdFJlc3RpdHV0aW9uKT1cInNlbGVjdFJlc3RpdHV0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgPjwvcHJ5LWNhdGFsb2ctaXRlbT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2F0ZWdvcnlPcGVuZWQgPT09ICdub01vZGVsJ1wiPlxuICAgICAgICAgICAgICAgICAgPHByeS1jYXRhbG9nLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiBjdXN0b21XaWRnZXRzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpZGdldF09XCJ3aWRnZXRcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0UmVzdGl0dXRpb24pPVwic2VsZWN0UmVzdGl0dXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9wcnktY2F0YWxvZy1pdGVtPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2xpc3Q+XG4gICAgICA8dWwgY2xhc3M9XCJvLWNhdGFsb2dfX2xpc3RcIiByb2xlPVwibGlzdFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8cHJ5LWNhdGFsb2ctaXRlbVxuICAgICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2YgZmlsdGVyZWRXaWRnZXRzJCB8IGFzeW5jXCJcbiAgICAgICAgICBbd2lkZ2V0XT1cIndpZGdldFwiXG4gICAgICAgICAgKHNlbGVjdFJlc3RpdHV0aW9uKT1cInNlbGVjdFJlc3RpdHV0aW9uKCRldmVudClcIlxuICAgICAgICA+PC9wcnktY2F0YWxvZy1pdGVtPlxuICAgICAgPC91bD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3RlZE1vZGUgPT09IG1vZGUuQ09OU1VMVFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLWNhdGFsb2dfX2NyZWF0ZVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2xvc2VSZXN0aXR1dGlvbigpXCI+XG4gICAgICAgIHt7ICdAcHJ5LnJlc3RpdHV0aW9uLmNhbmNlbCcgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxwcnktcmVzdGl0dXRpb25cbiAgICAgIFtzZWxlY3RlZFJlc3RpdHV0aW9uXT1cInNlbGVjdGVkUmVzdGl0dXRpb25cIlxuICAgICAgW2VkaXRdPVwiZmFsc2VcIlxuICAgICAgKHJlc3RpdHV0aW9uQ3JlYXRlZCk9XCJjbG9zZVJlc3RpdHV0aW9uKClcIlxuICAgID48L3ByeS1yZXN0aXR1dGlvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0ZWRNb2RlID09PSBtb2RlLkNSRUFUSU9OXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tY2F0YWxvZ19fY3JlYXRlXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWdob3N0XCIgKGNsaWNrKT1cInNlbGVjdE1vZGUobW9kZS5DQVRBTE9HKVwiPlxuICAgICAgICB7eyAnQHByeS5yZXN0aXR1dGlvbi5jYW5jZWwnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8cHJ5LXJlc3RpdHV0aW9uIChyZXN0aXR1dGlvbkNyZWF0ZWQpPVwiY2xvc2VSZXN0aXR1dGlvbigpXCI+PC9wcnktcmVzdGl0dXRpb24+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { ConfigSelectors, DashboardActions, DashboardGridLayout, DashboardSelectors, PryVisibilityType, SubscriptionnerDirective } from '@provoly/dashboard';
|
|
3
|
+
import { map } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@ngrx/store";
|
|
6
|
+
import * as i2 from "@provoly/dashboard";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
export class PryRestitutionListItemComponent extends SubscriptionnerDirective {
|
|
9
|
+
constructor(store, toolboxManifestService) {
|
|
10
|
+
super();
|
|
11
|
+
this.store = store;
|
|
12
|
+
this.toolboxManifestService = toolboxManifestService;
|
|
13
|
+
this.selectRestitution = new EventEmitter();
|
|
14
|
+
this.automaticGridMode = false;
|
|
15
|
+
this.PryVisibilityType = PryVisibilityType;
|
|
16
|
+
this.store.select(ConfigSelectors.catalog).subscribe((catalog) => (this.catalog = catalog));
|
|
17
|
+
this.automaticGridMode$ = this.store
|
|
18
|
+
.select(DashboardSelectors.gridLayout)
|
|
19
|
+
.pipe(map((layout) => layout !== DashboardGridLayout.MANUAL));
|
|
20
|
+
this.subscriptions.add(this.automaticGridMode$.subscribe((modeAuto) => (this.automaticGridMode = modeAuto)));
|
|
21
|
+
}
|
|
22
|
+
dragStart($event, type) {
|
|
23
|
+
if (!this.automaticGridMode) {
|
|
24
|
+
this.toolboxManifestService.dataTransfer($event, type);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
emitSelectedRestitution(catalogEntry) {
|
|
28
|
+
if (catalogEntry.isCustom) {
|
|
29
|
+
this.catalog?.forEach((widget) => {
|
|
30
|
+
if (widget.id === catalogEntry.type) {
|
|
31
|
+
this.selectRestitution.emit(widget);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
viewInDashboard(widget) {
|
|
37
|
+
this.store.dispatch(DashboardActions.addWidgetToPresentation({ widgetType: widget.type }));
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryRestitutionListItemComponent, deps: [{ token: i1.Store }, { token: i2.ToolboxManifestService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryRestitutionListItemComponent, selector: "pry-catalog-item", inputs: { widget: "widget" }, outputs: { selectRestitution: "selectRestitution" }, usesInheritance: true, ngImport: i0, template: "<li\n class=\"o-catalog__list__item\"\n [class.is-point]=\"automaticGridMode$ | async\"\n [draggable]=\"!(automaticGridMode$ | async)\"\n role=\"listitem\"\n aria-grabbed=\"false\"\n aria-haspopup=\"true\"\n tabindex=\"-1\"\n [title]=\"widget.description ?? widget.label | i18n\"\n (dragstart)=\"dragStart($event, widget.type)\"\n>\n <ng-container *ngIf=\"automaticGridMode$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"viewInDashboard(widget)\"\n [title]=\"'@pry.restitution.add_icon' | i18n\"\n >\n <pry-icon [width]=\"25\" [height]=\"25\" iconSvg=\"add_column\" class=\"o-catalog__list__icon\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.restitution.add_icon' | i18n }}</span>\n </button>\n </ng-container>\n <img\n [alt]=\"widget.label\"\n [src]=\"widget.icon | getSecuredImage : [600, 600] | async\"\n [height]=\"widget.cover ? 600 : 53\"\n [width]=\"widget.cover ? 600 : 53\"\n [class.is-full-width]=\"widget.cover\"\n />\n <p class=\"o-catalog__list__item__libelle\" *ngIf=\"widget.isCustom; else translate\">{{ widget.label }}</p>\n <ng-template #translate>\n <p class=\"o-catalog__list__item__libelle\">{{ widget.label | i18n }}</p>\n </ng-template>\n <ng-container *ngIf=\"widget.visibility?.type === PryVisibilityType.PRIVATE\">\n <pry-icon iconSvg=\"private\" [pryTooltip]=\"private\" class=\"is-private\" [height]=\"17\" [width]=\"17\"></pry-icon>\n </ng-container>\n <div class=\"o-catalog__list__item__action\" *ngIf=\"widget.isCustom\">\n <button type=\"button\" class=\"a-btn a-btn--ghost\" (click)=\"emitSelectedRestitution(widget)\">\n {{ '@pry.restitution.view' | i18n }}\n </button>\n </div>\n</li>\n\n<ng-template #private>\n <div class=\"m-tooltip\" role=\"tooltip\">\n <span class=\"m-tooltip__text\">{{ '@pry.restitution.lock' | i18n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2.PryTooltipDirective, selector: "[pryTooltip]", inputs: ["pryTooltip", "styleReversed", "pryTooltipContext", "pryTooltipPosition", "pryTooltipShowDelay"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.GetSecuredImagePipe, name: "getSecuredImage" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryRestitutionListItemComponent, decorators: [{
|
|
43
|
+
type: Component,
|
|
44
|
+
args: [{ selector: 'pry-catalog-item', template: "<li\n class=\"o-catalog__list__item\"\n [class.is-point]=\"automaticGridMode$ | async\"\n [draggable]=\"!(automaticGridMode$ | async)\"\n role=\"listitem\"\n aria-grabbed=\"false\"\n aria-haspopup=\"true\"\n tabindex=\"-1\"\n [title]=\"widget.description ?? widget.label | i18n\"\n (dragstart)=\"dragStart($event, widget.type)\"\n>\n <ng-container *ngIf=\"automaticGridMode$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"viewInDashboard(widget)\"\n [title]=\"'@pry.restitution.add_icon' | i18n\"\n >\n <pry-icon [width]=\"25\" [height]=\"25\" iconSvg=\"add_column\" class=\"o-catalog__list__icon\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.restitution.add_icon' | i18n }}</span>\n </button>\n </ng-container>\n <img\n [alt]=\"widget.label\"\n [src]=\"widget.icon | getSecuredImage : [600, 600] | async\"\n [height]=\"widget.cover ? 600 : 53\"\n [width]=\"widget.cover ? 600 : 53\"\n [class.is-full-width]=\"widget.cover\"\n />\n <p class=\"o-catalog__list__item__libelle\" *ngIf=\"widget.isCustom; else translate\">{{ widget.label }}</p>\n <ng-template #translate>\n <p class=\"o-catalog__list__item__libelle\">{{ widget.label | i18n }}</p>\n </ng-template>\n <ng-container *ngIf=\"widget.visibility?.type === PryVisibilityType.PRIVATE\">\n <pry-icon iconSvg=\"private\" [pryTooltip]=\"private\" class=\"is-private\" [height]=\"17\" [width]=\"17\"></pry-icon>\n </ng-container>\n <div class=\"o-catalog__list__item__action\" *ngIf=\"widget.isCustom\">\n <button type=\"button\" class=\"a-btn a-btn--ghost\" (click)=\"emitSelectedRestitution(widget)\">\n {{ '@pry.restitution.view' | i18n }}\n </button>\n </div>\n</li>\n\n<ng-template #private>\n <div class=\"m-tooltip\" role=\"tooltip\">\n <span class=\"m-tooltip__text\">{{ '@pry.restitution.lock' | i18n }}</span>\n </div>\n</ng-template>\n" }]
|
|
45
|
+
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.ToolboxManifestService }]; }, propDecorators: { widget: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], selectRestitution: [{
|
|
48
|
+
type: Output
|
|
49
|
+
}] } });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGl0dXRpb24tbGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3Jlc3RpdHV0aW9uL2NvbXBvbmVudHMvcmVzdGl0dXRpb24tbGlzdC1pdGVtL3Jlc3RpdHV0aW9uLWxpc3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9yZXN0aXR1dGlvbi9jb21wb25lbnRzL3Jlc3RpdHV0aW9uLWxpc3QtaXRlbS9yZXN0aXR1dGlvbi1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBRUwsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQix3QkFBd0IsRUFHekIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7OztBQU92QyxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsd0JBQXdCO0lBUTNFLFlBQW9CLEtBQVksRUFBVSxzQkFBOEM7UUFDdEYsS0FBSyxFQUFFLENBQUM7UUFEVSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQVUsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQU45RSxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBR3pELHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxzQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUlwQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLO2FBQ2pDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7YUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBaUIsRUFBRSxJQUFZO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEQ7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsWUFBMEI7UUFDaEQsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsSUFBSSxFQUFFO29CQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQW9CO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQzs4R0FuQ1UsK0JBQStCO2tHQUEvQiwrQkFBK0Isa0tDbkI1QywyNURBZ0RBOzsyRkQ3QmEsK0JBQStCO2tCQUozQyxTQUFTOytCQUNFLGtCQUFrQjtpSUFJbkIsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDYXRhbG9nRW50cnksXG4gIENvbmZpZ1NlbGVjdG9ycyxcbiAgRGFzaGJvYXJkQWN0aW9ucyxcbiAgRGFzaGJvYXJkR3JpZExheW91dCxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBQcnlWaXNpYmlsaXR5VHlwZSxcbiAgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlLFxuICBUb29sYm94TWFuaWZlc3RTZXJ2aWNlLFxuICBXaWRnZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1jYXRhbG9nLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdGl0dXRpb24tbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQcnlSZXN0aXR1dGlvbkxpc3RJdGVtQ29tcG9uZW50IGV4dGVuZHMgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIHtcbiAgQElucHV0KCkgd2lkZ2V0ITogQ2F0YWxvZ0VudHJ5O1xuICBAT3V0cHV0KCkgc2VsZWN0UmVzdGl0dXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFdpZGdldD4oKTtcbiAgY2F0YWxvZzogV2lkZ2V0W10gfCB1bmRlZmluZWQ7XG4gIGF1dG9tYXRpY0dyaWRNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgYXV0b21hdGljR3JpZE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgUHJ5VmlzaWJpbGl0eVR5cGUgPSBQcnlWaXNpYmlsaXR5VHlwZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSwgcHJpdmF0ZSB0b29sYm94TWFuaWZlc3RTZXJ2aWNlOiBUb29sYm94TWFuaWZlc3RTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuY2F0YWxvZykuc3Vic2NyaWJlKChjYXRhbG9nOiBXaWRnZXRbXSkgPT4gKHRoaXMuY2F0YWxvZyA9IGNhdGFsb2cpKTtcbiAgICB0aGlzLmF1dG9tYXRpY0dyaWRNb2RlJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpXG4gICAgICAucGlwZShtYXAoKGxheW91dCkgPT4gbGF5b3V0ICE9PSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdXRvbWF0aWNHcmlkTW9kZSQuc3Vic2NyaWJlKChtb2RlQXV0bykgPT4gKHRoaXMuYXV0b21hdGljR3JpZE1vZGUgPSBtb2RlQXV0bykpKTtcbiAgfVxuXG4gIGRyYWdTdGFydCgkZXZlbnQ6IERyYWdFdmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmF1dG9tYXRpY0dyaWRNb2RlKSB7XG4gICAgICB0aGlzLnRvb2xib3hNYW5pZmVzdFNlcnZpY2UuZGF0YVRyYW5zZmVyKCRldmVudCwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgZW1pdFNlbGVjdGVkUmVzdGl0dXRpb24oY2F0YWxvZ0VudHJ5OiBDYXRhbG9nRW50cnkpIHtcbiAgICBpZiAoY2F0YWxvZ0VudHJ5LmlzQ3VzdG9tKSB7XG4gICAgICB0aGlzLmNhdGFsb2c/LmZvckVhY2goKHdpZGdldDogV2lkZ2V0KSA9PiB7XG4gICAgICAgIGlmICh3aWRnZXQuaWQgPT09IGNhdGFsb2dFbnRyeS50eXBlKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RSZXN0aXR1dGlvbi5lbWl0KHdpZGdldCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHZpZXdJbkRhc2hib2FyZCh3aWRnZXQ6IENhdGFsb2dFbnRyeSkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hZGRXaWRnZXRUb1ByZXNlbnRhdGlvbih7IHdpZGdldFR5cGU6IHdpZGdldC50eXBlIH0pKTtcbiAgfVxufVxuIiwiPGxpXG4gIGNsYXNzPVwiby1jYXRhbG9nX19saXN0X19pdGVtXCJcbiAgW2NsYXNzLmlzLXBvaW50XT1cImF1dG9tYXRpY0dyaWRNb2RlJCB8IGFzeW5jXCJcbiAgW2RyYWdnYWJsZV09XCIhKGF1dG9tYXRpY0dyaWRNb2RlJCB8IGFzeW5jKVwiXG4gIHJvbGU9XCJsaXN0aXRlbVwiXG4gIGFyaWEtZ3JhYmJlZD1cImZhbHNlXCJcbiAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICB0YWJpbmRleD1cIi0xXCJcbiAgW3RpdGxlXT1cIndpZGdldC5kZXNjcmlwdGlvbiA/PyB3aWRnZXQubGFiZWwgfCBpMThuXCJcbiAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoJGV2ZW50LCB3aWRnZXQudHlwZSlcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV0b21hdGljR3JpZE1vZGUkIHwgYXN5bmNcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAoY2xpY2spPVwidmlld0luRGFzaGJvYXJkKHdpZGdldClcIlxuICAgICAgW3RpdGxlXT1cIidAcHJ5LnJlc3RpdHV0aW9uLmFkZF9pY29uJyB8IGkxOG5cIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBbd2lkdGhdPVwiMjVcIiBbaGVpZ2h0XT1cIjI1XCIgaWNvblN2Zz1cImFkZF9jb2x1bW5cIiBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdF9faWNvblwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkucmVzdGl0dXRpb24uYWRkX2ljb24nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxpbWdcbiAgICBbYWx0XT1cIndpZGdldC5sYWJlbFwiXG4gICAgW3NyY109XCJ3aWRnZXQuaWNvbiB8IGdldFNlY3VyZWRJbWFnZSA6IFs2MDAsIDYwMF0gfCBhc3luY1wiXG4gICAgW2hlaWdodF09XCJ3aWRnZXQuY292ZXIgPyA2MDAgOiA1M1wiXG4gICAgW3dpZHRoXT1cIndpZGdldC5jb3ZlciA/IDYwMCA6IDUzXCJcbiAgICBbY2xhc3MuaXMtZnVsbC13aWR0aF09XCJ3aWRnZXQuY292ZXJcIlxuICAvPlxuICA8cCBjbGFzcz1cIm8tY2F0YWxvZ19fbGlzdF9faXRlbV9fbGliZWxsZVwiICpuZ0lmPVwid2lkZ2V0LmlzQ3VzdG9tOyBlbHNlIHRyYW5zbGF0ZVwiPnt7IHdpZGdldC5sYWJlbCB9fTwvcD5cbiAgPG5nLXRlbXBsYXRlICN0cmFuc2xhdGU+XG4gICAgPHAgY2xhc3M9XCJvLWNhdGFsb2dfX2xpc3RfX2l0ZW1fX2xpYmVsbGVcIj57eyB3aWRnZXQubGFiZWwgfCBpMThuIH19PC9wPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwid2lkZ2V0LnZpc2liaWxpdHk/LnR5cGUgPT09IFByeVZpc2liaWxpdHlUeXBlLlBSSVZBVEVcIj5cbiAgICA8cHJ5LWljb24gaWNvblN2Zz1cInByaXZhdGVcIiBbcHJ5VG9vbHRpcF09XCJwcml2YXRlXCIgY2xhc3M9XCJpcy1wcml2YXRlXCIgW2hlaWdodF09XCIxN1wiIFt3aWR0aF09XCIxN1wiPjwvcHJ5LWljb24+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiby1jYXRhbG9nX19saXN0X19pdGVtX19hY3Rpb25cIiAqbmdJZj1cIndpZGdldC5pc0N1c3RvbVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWdob3N0XCIgKGNsaWNrKT1cImVtaXRTZWxlY3RlZFJlc3RpdHV0aW9uKHdpZGdldClcIj5cbiAgICAgIHt7ICdAcHJ5LnJlc3RpdHV0aW9uLnZpZXcnIHwgaTE4biB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbGk+XG5cbjxuZy10ZW1wbGF0ZSAjcHJpdmF0ZT5cbiAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtLXRvb2x0aXBfX3RleHRcIj57eyAnQHByeS5yZXN0aXR1dGlvbi5sb2NrJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|