@provoly/hypervisor 0.0.97 → 0.0.98
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/src/lib/event/detail/event-detail.component.mjs +7 -5
- package/esm2022/src/lib/general/procedure-actions/procedure-actions.component.mjs +3 -3
- package/fesm2022/provoly-hypervisor.mjs +8 -6
- package/fesm2022/provoly-hypervisor.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/components/_o-hvy-procedure-actions.scss +11 -4
|
@@ -162,11 +162,11 @@ export class ProcedureActionsComponent extends SubscriptionnerDirective {
|
|
|
162
162
|
return !this.editing && action.status === 'NEW';
|
|
163
163
|
}
|
|
164
164
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureActionsComponent, deps: [{ token: i1.PryDialogService }, { token: i2.Overlay }, { token: i1.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
165
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: ProcedureActionsComponent, selector: "hvy-procedure-actions", inputs: { mode: "mode", actions: "actions" }, outputs: { modified: "modified" }, viewQueries: [{ propertyName: "menuButtons", predicate: ["menuButton"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"o-hvy-events-detail__procedure__actions\"\n (drag)=\"move($event)\"\n (drop)=\"drop($event)\"\n (dragover)=\"allowDrop($event)\"\n>\n @for (action of actions; track action.id; let idx = $index) {\n <div\n class=\"o-hvy-events-detail__procedure__actions__action\"\n [draggable]=\"isDraggable(action)\"\n (dragstart)=\"dragStart($event, action, idx)\"\n (mousedown)=\"onMouseDown($event)\"\n [class.-updating]=\"!!action._status\"\n [class.-other-updating]=\"editing\"\n >\n <pry-icon\n iconSvg=\"six_dot\"\n #handle\n [class.-disabled]=\"!isDraggable(action)\"\n [class.-hidden]=\"action._status\"\n ></pry-icon>\n <div class=\"number-badge\">{{ idx + 1 }}</div>\n @if (!action._status) {\n @if (mode === 'procedure') {\n <pry-checkbox\n [ngModel]=\"action.status !== 'NEW'\"\n (click)=\"toggleActionStatus(idx, $event)\"\n [disabled]=\"action.status === 'DONE'\"\n ></pry-checkbox>\n }\n <div [class.-done]=\"action.status === 'DONE'\" [class.-disabled]=\"editing\">\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"false\"></hvy-action-parameter>\n </div>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"openModal(action, idx)\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"more_horiz\" #menuButton></pry-icon>\n </button>\n } @else {\n <div class=\"o-hvy-events-detail__procedure__actions__action__create\">\n <div class=\"o-hvy-events-detail__procedure__actions__action__create__header\">\n <p>{{ '@hvy.procedure.action.' + action._status | i18n }}</p>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"saveAction(action, idx)\" [disabled]=\"!isValid(action)\">\n <pry-icon iconSvg=\"check\"></pry-icon>\n </button>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction(action, idx)\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div>\n <pry-select\n [ngModel]=\"action.type\"\n [items]=\"ACTIONS_TYPES\"\n (ngModelChange)=\"update(idx, 'type', $event)\"\n i18nPrefix=\"@hvy.procedure.action.\"\n [placeholder]=\"'@hvy.procedure.action.placeholder.action' | i18n\"\n ></pry-select>\n </div>\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"true\"></hvy-action-parameter>\n </div>\n }\n </div>\n } @empty {\n @if (actions.length === 0) {\n <div>{{ '@hvy.event.log.procedure.noAction' | i18n }}</div>\n }\n }\n <div class=\"o-hvy-events-detail__procedure__button\">\n <button class=\"a-btn a-btn--primary\" (click)=\"add()\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n {{ '@hvy.procedure.action.add' | i18n }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { 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: i1.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i1.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i5.HvyActionParameterComponent, selector: "hvy-action-parameter", inputs: ["isParam", "type", "action"] }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
|
|
165
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: ProcedureActionsComponent, selector: "hvy-procedure-actions", inputs: { mode: "mode", actions: "actions" }, outputs: { modified: "modified" }, viewQueries: [{ propertyName: "menuButtons", predicate: ["menuButton"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"o-hvy-events-detail__procedure__actions\"\n (drag)=\"move($event)\"\n (drop)=\"drop($event)\"\n (dragover)=\"allowDrop($event)\"\n>\n @for (action of actions; track action.id; let idx = $index) {\n <div\n class=\"o-hvy-events-detail__procedure__actions__action\"\n [draggable]=\"isDraggable(action)\"\n (dragstart)=\"dragStart($event, action, idx)\"\n (mousedown)=\"onMouseDown($event)\"\n [class.-updating]=\"!!action._status\"\n [class.-other-updating]=\"editing\"\n >\n <pry-icon\n iconSvg=\"six_dot\"\n #handle\n [class.-disabled]=\"!isDraggable(action)\"\n [class.-hidden]=\"action._status\"\n class=\"grabbable\"\n ></pry-icon>\n <div class=\"number-badge\">{{ idx + 1 }}</div>\n @if (!action._status) {\n @if (mode === 'procedure') {\n <pry-checkbox\n [ngModel]=\"action.status !== 'NEW'\"\n (click)=\"toggleActionStatus(idx, $event)\"\n [disabled]=\"action.status === 'DONE'\"\n ></pry-checkbox>\n }\n <div [class.-done]=\"action.status === 'DONE'\" [class.-disabled]=\"editing\">\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"false\"></hvy-action-parameter>\n </div>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"openModal(action, idx)\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"more_horiz\" #menuButton></pry-icon>\n </button>\n } @else {\n <div class=\"o-hvy-events-detail__procedure__actions__action__create\">\n <div class=\"o-hvy-events-detail__procedure__actions__action__create__header\">\n <p>{{ '@hvy.procedure.action.' + action._status | i18n }}</p>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"saveAction(action, idx)\" [disabled]=\"!isValid(action)\">\n <pry-icon iconSvg=\"check\"></pry-icon>\n </button>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction(action, idx)\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div>\n <pry-select\n [ngModel]=\"action.type\"\n [items]=\"ACTIONS_TYPES\"\n (ngModelChange)=\"update(idx, 'type', $event)\"\n i18nPrefix=\"@hvy.procedure.action.\"\n [placeholder]=\"'@hvy.procedure.action.placeholder.action' | i18n\"\n ></pry-select>\n </div>\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"true\"></hvy-action-parameter>\n </div>\n }\n </div>\n } @empty {\n @if (actions.length === 0) {\n <div>{{ '@hvy.event.log.procedure.noAction' | i18n }}</div>\n }\n }\n <div class=\"o-hvy-events-detail__procedure__button\">\n <button class=\"a-btn a-btn--primary\" (click)=\"add()\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n {{ '@hvy.procedure.action.add' | i18n }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { 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: i1.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i1.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i5.HvyActionParameterComponent, selector: "hvy-action-parameter", inputs: ["isParam", "type", "action"] }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
|
|
166
166
|
}
|
|
167
167
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureActionsComponent, decorators: [{
|
|
168
168
|
type: Component,
|
|
169
|
-
args: [{ selector: 'hvy-procedure-actions', template: "<div\n class=\"o-hvy-events-detail__procedure__actions\"\n (drag)=\"move($event)\"\n (drop)=\"drop($event)\"\n (dragover)=\"allowDrop($event)\"\n>\n @for (action of actions; track action.id; let idx = $index) {\n <div\n class=\"o-hvy-events-detail__procedure__actions__action\"\n [draggable]=\"isDraggable(action)\"\n (dragstart)=\"dragStart($event, action, idx)\"\n (mousedown)=\"onMouseDown($event)\"\n [class.-updating]=\"!!action._status\"\n [class.-other-updating]=\"editing\"\n >\n <pry-icon\n iconSvg=\"six_dot\"\n #handle\n [class.-disabled]=\"!isDraggable(action)\"\n [class.-hidden]=\"action._status\"\n ></pry-icon>\n <div class=\"number-badge\">{{ idx + 1 }}</div>\n @if (!action._status) {\n @if (mode === 'procedure') {\n <pry-checkbox\n [ngModel]=\"action.status !== 'NEW'\"\n (click)=\"toggleActionStatus(idx, $event)\"\n [disabled]=\"action.status === 'DONE'\"\n ></pry-checkbox>\n }\n <div [class.-done]=\"action.status === 'DONE'\" [class.-disabled]=\"editing\">\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"false\"></hvy-action-parameter>\n </div>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"openModal(action, idx)\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"more_horiz\" #menuButton></pry-icon>\n </button>\n } @else {\n <div class=\"o-hvy-events-detail__procedure__actions__action__create\">\n <div class=\"o-hvy-events-detail__procedure__actions__action__create__header\">\n <p>{{ '@hvy.procedure.action.' + action._status | i18n }}</p>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"saveAction(action, idx)\" [disabled]=\"!isValid(action)\">\n <pry-icon iconSvg=\"check\"></pry-icon>\n </button>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction(action, idx)\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div>\n <pry-select\n [ngModel]=\"action.type\"\n [items]=\"ACTIONS_TYPES\"\n (ngModelChange)=\"update(idx, 'type', $event)\"\n i18nPrefix=\"@hvy.procedure.action.\"\n [placeholder]=\"'@hvy.procedure.action.placeholder.action' | i18n\"\n ></pry-select>\n </div>\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"true\"></hvy-action-parameter>\n </div>\n }\n </div>\n } @empty {\n @if (actions.length === 0) {\n <div>{{ '@hvy.event.log.procedure.noAction' | i18n }}</div>\n }\n }\n <div class=\"o-hvy-events-detail__procedure__button\">\n <button class=\"a-btn a-btn--primary\" (click)=\"add()\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n {{ '@hvy.procedure.action.add' | i18n }}\n </button>\n </div>\n</div>\n" }]
|
|
169
|
+
args: [{ selector: 'hvy-procedure-actions', template: "<div\n class=\"o-hvy-events-detail__procedure__actions\"\n (drag)=\"move($event)\"\n (drop)=\"drop($event)\"\n (dragover)=\"allowDrop($event)\"\n>\n @for (action of actions; track action.id; let idx = $index) {\n <div\n class=\"o-hvy-events-detail__procedure__actions__action\"\n [draggable]=\"isDraggable(action)\"\n (dragstart)=\"dragStart($event, action, idx)\"\n (mousedown)=\"onMouseDown($event)\"\n [class.-updating]=\"!!action._status\"\n [class.-other-updating]=\"editing\"\n >\n <pry-icon\n iconSvg=\"six_dot\"\n #handle\n [class.-disabled]=\"!isDraggable(action)\"\n [class.-hidden]=\"action._status\"\n class=\"grabbable\"\n ></pry-icon>\n <div class=\"number-badge\">{{ idx + 1 }}</div>\n @if (!action._status) {\n @if (mode === 'procedure') {\n <pry-checkbox\n [ngModel]=\"action.status !== 'NEW'\"\n (click)=\"toggleActionStatus(idx, $event)\"\n [disabled]=\"action.status === 'DONE'\"\n ></pry-checkbox>\n }\n <div [class.-done]=\"action.status === 'DONE'\" [class.-disabled]=\"editing\">\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"false\"></hvy-action-parameter>\n </div>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"openModal(action, idx)\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"more_horiz\" #menuButton></pry-icon>\n </button>\n } @else {\n <div class=\"o-hvy-events-detail__procedure__actions__action__create\">\n <div class=\"o-hvy-events-detail__procedure__actions__action__create__header\">\n <p>{{ '@hvy.procedure.action.' + action._status | i18n }}</p>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"saveAction(action, idx)\" [disabled]=\"!isValid(action)\">\n <pry-icon iconSvg=\"check\"></pry-icon>\n </button>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction(action, idx)\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div>\n <pry-select\n [ngModel]=\"action.type\"\n [items]=\"ACTIONS_TYPES\"\n (ngModelChange)=\"update(idx, 'type', $event)\"\n i18nPrefix=\"@hvy.procedure.action.\"\n [placeholder]=\"'@hvy.procedure.action.placeholder.action' | i18n\"\n ></pry-select>\n </div>\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"true\"></hvy-action-parameter>\n </div>\n }\n </div>\n } @empty {\n @if (actions.length === 0) {\n <div>{{ '@hvy.event.log.procedure.noAction' | i18n }}</div>\n }\n }\n <div class=\"o-hvy-events-detail__procedure__button\">\n <button class=\"a-btn a-btn--primary\" (click)=\"add()\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n {{ '@hvy.procedure.action.add' | i18n }}\n </button>\n </div>\n</div>\n" }]
|
|
170
170
|
}], ctorParameters: () => [{ type: i1.PryDialogService }, { type: i2.Overlay }, { type: i1.PryI18nService }], propDecorators: { modified: [{
|
|
171
171
|
type: Output
|
|
172
172
|
}], mode: [{
|
|
@@ -177,4 +177,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
177
177
|
}], actions: [{
|
|
178
178
|
type: Input
|
|
179
179
|
}] } });
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlLWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9oeXBlcnZpc29yL3NyYy9saWIvZ2VuZXJhbC9wcm9jZWR1cmUtYWN0aW9ucy9wcm9jZWR1cmUtYWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2h5cGVydmlzb3Ivc3JjL2xpYi9nZW5lcmFsL3Byb2NlZHVyZS1hY3Rpb25zL3Byb2NlZHVyZS1hY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFvQyx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLHlCQUF5QixDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQU16RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsd0JBQXdCO2FBQzlELGdCQUFXLEdBQUcsRUFBRSxBQUFMLENBQU07SUFheEIsWUFDVSxTQUEyQixFQUMzQixPQUFnQixFQUNoQixXQUEyQjtRQUVuQyxLQUFLLEVBQUUsQ0FBQztRQUpBLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBZHJDLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDckIsc0JBQWlC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QUFPLENBQUM7UUFDbkMsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFpQjtRQUN2QixPQUFPLENBQ0wsTUFBTSxDQUFDLElBQUk7WUFDWCxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTO2dCQUN4RCxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBaUI7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUM7SUFDbEQsQ0FBQzs4R0FsTFUseUJBQXlCO2tHQUF6Qix5QkFBeUIsdU5BWUEsVUFBVSxvREN4QmhELDgrRkF3RUE7OzJGRDVEYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsdUJBQXVCO3dJQVd2QixRQUFRO3NCQUFqQixNQUFNO2dCQUNFLElBQUk7c0JBQVosS0FBSztnQkFHNEMsV0FBVztzQkFBNUQsWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQVluQyxPQUFPO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBtb2RlbCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJ5RGlhbG9nU2VydmljZSwgUHJ5STE4blNlcnZpY2UsIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBIeXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9wcm9jZWR1cmUvaHlwLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IEh2eUFjdGlvbk1lbnVDb21wb25lbnQsIEh2eUFjdGlvbk1lbnVEYXRhIH0gZnJvbSAnLi9hY3Rpb24tbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IEFDVElPTlNfVFlQRVMgfSBmcm9tICcuL2FjdGlvbnMtdHlwZXMuY29uc3RhbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdodnktcHJvY2VkdXJlLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvY2VkdXJlLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByb2NlZHVyZUFjdGlvbnNDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUge1xuICBzdGF0aWMgQ0FSRF9IRUlHSFQgPSA3NTtcbiAgbW92aW5nQWN0aW9uPzogSHlwQWN0aW9uO1xuICBtb3ZlU3RhcnQgPSAwO1xuICBtb3ZlSW5pdGlhbEluZGV4ID0gMDtcbiAgaW5pdGlhbEFjdGlvbkxpc3Q6IEh5cEFjdGlvbltdID0gW107XG4gIHByZXZpb3VzT2Zmc2V0ID0gMDtcbiAgZHJhZ1RhcmdldD86IEV2ZW50VGFyZ2V0IHwgbnVsbDtcbiAgQE91dHB1dCgpIG1vZGlmaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxIeXBBY3Rpb25bXT4oKTtcbiAgQElucHV0KCkgbW9kZTogJ21vZGVsJyB8ICdwcm9jZWR1cmUnID0gJ3Byb2NlZHVyZSc7XG4gIEFDVElPTlNfVFlQRVM6IHN0cmluZ1tdO1xuICBfYWN0aW9uczogSHlwQWN0aW9uW10gPSBbXTtcbiAgQFZpZXdDaGlsZHJlbignbWVudUJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBtZW51QnV0dG9ucyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByeURpYWxvZzogUHJ5RGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBpMThuU2VydmljZTogUHJ5STE4blNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLkFDVElPTlNfVFlQRVMgPSBPYmplY3Qua2V5cyhBQ1RJT05TX1RZUEVTLnZhbHVlcyk7XG4gICAgdGhpcy5BQ1RJT05TX1RZUEVTLnNvcnQoKGEsIGIpID0+IEFDVElPTlNfVFlQRVMudmFsdWVzW2FdLm9yZGVyIC0gQUNUSU9OU19UWVBFUy52YWx1ZXNbYl0ub3JkZXIpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGFjdGlvbnMoYWN0aW9uczogSHlwQWN0aW9uW10pIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhY3Rpb25zID8/IFtdKSk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgfVxuXG4gIGdldCBlZGl0aW5nKCkge1xuICAgIHJldHVybiAhIXRoaXMuYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi5fc3RhdHVzKTtcbiAgfVxuXG4gIG9uTW91c2VEb3duKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuZHJhZ1RhcmdldCA9ICRldmVudC50YXJnZXQ7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50OiBNb3VzZUV2ZW50LCBhY3Rpb246IEh5cEFjdGlvbiwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdUYXJnZXQgJiYgKHRoaXMuZHJhZ1RhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubWFza0ltYWdlLmluZGV4T2YoJ3NpeF9kb3QnKSA+IC0xKSB7XG4gICAgICB0aGlzLm1vdmluZ0FjdGlvbiA9IGFjdGlvbjtcbiAgICAgIHRoaXMubW92ZVN0YXJ0ID0gJGV2ZW50LmNsaWVudFk7XG4gICAgICB0aGlzLm1vdmVJbml0aWFsSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuaW5pdGlhbEFjdGlvbkxpc3QgPSBbLi4udGhpcy5hY3Rpb25zXTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgbW92ZSgkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5tb3ZpbmdBY3Rpb24pIHtcbiAgICAgIGNvbnN0IG9mZnNldEluQ2FyZHMgPSBNYXRoLnJvdW5kKCgkZXZlbnQuY2xpZW50WSAtIHRoaXMubW92ZVN0YXJ0KSAvIFByb2NlZHVyZUFjdGlvbnNDb21wb25lbnQuQ0FSRF9IRUlHSFQpO1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNPZmZzZXQgIT09IG9mZnNldEluQ2FyZHMpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c09mZnNldCA9IG9mZnNldEluQ2FyZHM7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgTWF0aC5tYXgodGhpcy5tb3ZlSW5pdGlhbEluZGV4ICsgb2Zmc2V0SW5DYXJkcywgMCksXG4gICAgICAgICAgdGhpcy5pbml0aWFsQWN0aW9uTGlzdC5sZW5ndGggLSAxXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld0FjdGlvbnMgPSBbLi4udGhpcy5pbml0aWFsQWN0aW9uTGlzdF07XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXdBY3Rpb25zLnNwbGljZSh0aGlzLm1vdmVJbml0aWFsSW5kZXgsIDEpWzBdO1xuICAgICAgICBuZXdBY3Rpb25zLnNwbGljZShuZXdJbmRleCwgMCwgZWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5tb2RpZmllZC5uZXh0KG5ld0FjdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRyb3AoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5tb3ZlKCRldmVudCk7XG4gICAgdGhpcy5tb3ZpbmdBY3Rpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBhbGxvd0Ryb3AoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICB0b2dnbGVBY3Rpb25TdGF0dXMoaW5kZXg6IG51bWJlciwgJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgbmV3QWN0aW9ucyA9IFsuLi50aGlzLmFjdGlvbnNdO1xuICAgIGlmIChuZXdBY3Rpb25zW2luZGV4XS5zdGF0dXMgIT09ICdET05FJykge1xuICAgICAgbmV3QWN0aW9uc1tpbmRleF0gPSB7XG4gICAgICAgIC4uLm5ld0FjdGlvbnNbaW5kZXhdLFxuICAgICAgICBzdGF0dXM6IG5ld0FjdGlvbnNbaW5kZXhdLnN0YXR1cyA9PT0gJ05FVycgPyAnSU5fUFJPR1JFU1MnIDogJ05FVydcbiAgICAgIH07XG4gICAgICB0aGlzLm1vZGlmaWVkLm5leHQobmV3QWN0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgYWRkKCkge1xuICAgIHRoaXMuYWN0aW9ucy5wdXNoKHsgdHlwZTogJycsIHN0YXR1czogJ05FVycsIGlkOiB2NCgpLCBfc3RhdHVzOiAnY3JlYXRlJyB9IGFzIEh5cEFjdGlvbik7XG4gICAgdGhpcy5tb2RpZmllZC5uZXh0KHRoaXMuYWN0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZWwgPSBtb2RlbDtcblxuICB1cGRhdGUoaWR4OiBudW1iZXIsIHByb3A6IHN0cmluZywgJGV2ZW50OiBhbnkpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5hY3Rpb25zW2lkeF1bcHJvcF0gPSAkZXZlbnQ7XG4gIH1cblxuICBvcGVuTW9kYWwoYWN0aW9uOiBIeXBBY3Rpb24sIGlkeDogbnVtYmVyKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5wcnlEaWFsb2cub3BlbihIdnlBY3Rpb25NZW51Q29tcG9uZW50LCB7XG4gICAgICBvdmVybGF5Q29uZmlnOiB7XG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ3ByeS1kaWFsb2ctY29udGFpbmVyJ10sXG4gICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCcsXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheVxuICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5tZW51QnV0dG9ucy5nZXQoaWR4KSEpXG4gICAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG4gICAgICB9LFxuICAgICAgZGF0YToge1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZVxuICAgICAgfSBhcyBIdnlBY3Rpb25NZW51RGF0YVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3ViID0gZGlhbG9nUmVmLmNsb3NlVmFsdWUuc3Vic2NyaWJlKCh0eXBlKSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgWWV0IEltcGxlbWVudGVkJyk7XG4gICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgYWN0aW9uLl9pbml0aWFsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhY3Rpb24pKTtcbiAgICAgICAgICBhY3Rpb24uX3N0YXR1cyA9ICdtb2RpZnknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZG9uZSc6XG4gICAgICAgICAgYWN0aW9uLnN0YXR1cyA9ICdET05FJztcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kaWZpZWQubmV4dCh0aGlzLmFjdGlvbnMpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmVBY3Rpb24oYWN0aW9uOiBIeXBBY3Rpb24sIGlkeDogbnVtYmVyKSB7XG4gICAgZGVsZXRlIGFjdGlvbi5faW5pdGlhbDtcbiAgICBkZWxldGUgYWN0aW9uLl9zdGF0dXM7XG4gICAgdGhpcy5tb2RpZmllZC5uZXh0KHRoaXMuYWN0aW9ucyk7XG4gIH1cblxuICBjYW5jZWxBY3Rpb24oYWN0aW9uOiBIeXBBY3Rpb24sIGlkeDogbnVtYmVyKSB7XG4gICAgaWYgKGFjdGlvbi5fc3RhdHVzID09PSAnbW9kaWZ5Jykge1xuICAgICAgdGhpcy5hY3Rpb25zW2lkeF0gPSB7IC4uLmFjdGlvbi5faW5pdGlhbCEgfTtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGlvbnNbaWR4XS5faW5pdGlhbDtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGlvbnNbaWR4XS5fc3RhdHVzO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uLl9zdGF0dXMgPT09ICdjcmVhdGUnKSB7XG4gICAgICB0aGlzLmFjdGlvbnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGhhcHBlbicpO1xuICAgIH1cbiAgICB0aGlzLm1vZGlmaWVkLm5leHQodGhpcy5hY3Rpb25zKTtcbiAgfVxuXG4gIGlzVmFsaWQoYWN0aW9uOiBIeXBBY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgYWN0aW9uLnR5cGUgJiZcbiAgICAgIChBQ1RJT05TX1RZUEVTLnZhbHVlc1thY3Rpb24udHlwZV0udmFsaWRhdG9yID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgQUNUSU9OU19UWVBFUy52YWx1ZXNbYWN0aW9uLnR5cGVdLnZhbGlkYXRvciEoYWN0aW9uKSlcbiAgICApO1xuICB9XG5cbiAgaXNEcmFnZ2FibGUoYWN0aW9uOiBIeXBBY3Rpb24pIHtcbiAgICByZXR1cm4gIXRoaXMuZWRpdGluZyAmJiBhY3Rpb24uc3RhdHVzID09PSAnTkVXJztcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fYWN0aW9uc1wiXG4gIChkcmFnKT1cIm1vdmUoJGV2ZW50KVwiXG4gIChkcm9wKT1cImRyb3AoJGV2ZW50KVwiXG4gIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50KVwiXG4+XG4gIEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25zOyB0cmFjayBhY3Rpb24uaWQ7IGxldCBpZHggPSAkaW5kZXgpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fYWN0aW9uc19fYWN0aW9uXCJcbiAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGUoYWN0aW9uKVwiXG4gICAgICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydCgkZXZlbnQsIGFjdGlvbiwgaWR4KVwiXG4gICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudClcIlxuICAgICAgW2NsYXNzLi11cGRhdGluZ109XCIhIWFjdGlvbi5fc3RhdHVzXCJcbiAgICAgIFtjbGFzcy4tb3RoZXItdXBkYXRpbmddPVwiZWRpdGluZ1wiXG4gICAgPlxuICAgICAgPHByeS1pY29uXG4gICAgICAgIGljb25Tdmc9XCJzaXhfZG90XCJcbiAgICAgICAgI2hhbmRsZVxuICAgICAgICBbY2xhc3MuLWRpc2FibGVkXT1cIiFpc0RyYWdnYWJsZShhY3Rpb24pXCJcbiAgICAgICAgW2NsYXNzLi1oaWRkZW5dPVwiYWN0aW9uLl9zdGF0dXNcIlxuICAgICAgPjwvcHJ5LWljb24+XG4gICAgICA8ZGl2IGNsYXNzPVwibnVtYmVyLWJhZGdlXCI+e3sgaWR4ICsgMSB9fTwvZGl2PlxuICAgICAgQGlmICghYWN0aW9uLl9zdGF0dXMpIHtcbiAgICAgICAgQGlmIChtb2RlID09PSAncHJvY2VkdXJlJykge1xuICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImFjdGlvbi5zdGF0dXMgIT09ICdORVcnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25TdGF0dXMoaWR4LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uc3RhdHVzID09PSAnRE9ORSdcIlxuICAgICAgICAgID48L3ByeS1jaGVja2JveD5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IFtjbGFzcy4tZG9uZV09XCJhY3Rpb24uc3RhdHVzID09PSAnRE9ORSdcIiBbY2xhc3MuLWRpc2FibGVkXT1cImVkaXRpbmdcIj5cbiAgICAgICAgICA8aHZ5LWFjdGlvbi1wYXJhbWV0ZXIgW2FjdGlvbl09XCJhY3Rpb25cIiBbdHlwZV09XCJhY3Rpb24udHlwZVwiIFtpc1BhcmFtXT1cImZhbHNlXCI+PC9odnktYWN0aW9uLXBhcmFtZXRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cIm9wZW5Nb2RhbChhY3Rpb24sIGlkeClcIiBbZGlzYWJsZWRdPVwiZWRpdGluZ1wiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibW9yZV9ob3JpelwiICNtZW51QnV0dG9uPjwvcHJ5LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudHMtZGV0YWlsX19wcm9jZWR1cmVfX2FjdGlvbnNfX2FjdGlvbl9fY3JlYXRlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fYWN0aW9uc19fYWN0aW9uX19jcmVhdGVfX2hlYWRlclwiPlxuICAgICAgICAgICAgPHA+e3sgJ0BodnkucHJvY2VkdXJlLmFjdGlvbi4nICsgYWN0aW9uLl9zdGF0dXMgfCBpMThuIH19PC9wPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwic2F2ZUFjdGlvbihhY3Rpb24sIGlkeClcIiBbZGlzYWJsZWRdPVwiIWlzVmFsaWQoYWN0aW9uKVwiPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNoZWNrXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKGFjdGlvbiwgaWR4KVwiPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhY3Rpb24udHlwZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJBQ1RJT05TX1RZUEVTXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlKGlkeCwgJ3R5cGUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBodnkucHJvY2VkdXJlLmFjdGlvbi5cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BodnkucHJvY2VkdXJlLmFjdGlvbi5wbGFjZWhvbGRlci5hY3Rpb24nIHwgaTE4blwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxodnktYWN0aW9uLXBhcmFtZXRlciBbYWN0aW9uXT1cImFjdGlvblwiIFt0eXBlXT1cImFjdGlvbi50eXBlXCIgW2lzUGFyYW1dPVwidHJ1ZVwiPjwvaHZ5LWFjdGlvbi1wYXJhbWV0ZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9IEBlbXB0eSB7XG4gICAgQGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgPGRpdj57eyAnQGh2eS5ldmVudC5sb2cucHJvY2VkdXJlLm5vQWN0aW9uJyB8IGkxOG4gfX08L2Rpdj5cbiAgICB9XG4gIH1cbiAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fYnV0dG9uXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCIgKGNsaWNrKT1cImFkZCgpXCIgW2Rpc2FibGVkXT1cImVkaXRpbmdcIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYWRkXCI+PC9wcnktaWNvbj5cbiAgICAgIHt7ICdAaHZ5LnByb2NlZHVyZS5hY3Rpb24uYWRkJyB8IGkxOG4gfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlLWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9oeXBlcnZpc29yL3NyYy9saWIvZ2VuZXJhbC9wcm9jZWR1cmUtYWN0aW9ucy9wcm9jZWR1cmUtYWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2h5cGVydmlzb3Ivc3JjL2xpYi9nZW5lcmFsL3Byb2NlZHVyZS1hY3Rpb25zL3Byb2NlZHVyZS1hY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFvQyx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLHlCQUF5QixDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQU16RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsd0JBQXdCO2FBQzlELGdCQUFXLEdBQUcsRUFBRSxBQUFMLENBQU07SUFheEIsWUFDVSxTQUEyQixFQUMzQixPQUFnQixFQUNoQixXQUEyQjtRQUVuQyxLQUFLLEVBQUUsQ0FBQztRQUpBLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBZHJDLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDckIsc0JBQWlCLEdBQWdCLEVBQUUsQ0FBQztRQUNwQyxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUVULGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBQzVDLFNBQUksR0FBMEIsV0FBVyxDQUFDO1FBRW5ELGFBQVEsR0FBZ0IsRUFBRSxDQUFDO1FBc0ZSLFVBQUssR0FBRyxLQUFLLENBQUM7UUE3RS9CLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRCxJQUFhLE9BQU8sQ0FBQyxPQUFvQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxXQUFXLENBQUMsTUFBa0I7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBa0IsRUFBRSxNQUFpQixFQUFFLEtBQWE7UUFDNUQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFLLElBQUksQ0FBQyxVQUE2QixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkcsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsTUFBa0I7UUFDckIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1RyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO2dCQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNsQyxDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQWtCO1FBQ3JCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBa0I7UUFDMUIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsTUFBa0I7UUFDbEQsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRztnQkFDbEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUNwQixNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUNuRSxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxHQUFHO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQWUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBSUQsTUFBTSxDQUFDLEdBQVcsRUFBRSxJQUFZLEVBQUUsTUFBVztRQUMzQyxhQUFhO1FBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFpQixFQUFFLEdBQVc7UUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDNUQsYUFBYSxFQUFFO2dCQUNiLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDcEMsYUFBYSxFQUFFLFVBQVU7Z0JBQ3pCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPO3FCQUMzQixRQUFRLEVBQUU7cUJBQ1YsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUM7cUJBQy9DLGFBQWEsQ0FBQztvQkFDYjt3QkFDRSxPQUFPLEVBQUUsT0FBTzt3QkFDaEIsT0FBTyxFQUFFLFFBQVE7d0JBQ2pCLFFBQVEsRUFBRSxPQUFPO3dCQUNqQixRQUFRLEVBQUUsS0FBSztxQkFDaEI7aUJBQ0YsQ0FBQzthQUNMO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLE1BQU07Z0JBQ04sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ0s7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsRCxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssU0FBUztvQkFDWixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3pDLEtBQUssUUFBUTtvQkFDWCxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztvQkFDMUIsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUM1QixNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFpQixFQUFFLEdBQVc7UUFDdkMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFpQixFQUFFLEdBQVc7UUFDekMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFTLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkMsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFpQjtRQUN2QixPQUFPLENBQ0wsTUFBTSxDQUFDLElBQUk7WUFDWCxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTO2dCQUN4RCxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBaUI7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUM7SUFDbEQsQ0FBQzs4R0FsTFUseUJBQXlCO2tHQUF6Qix5QkFBeUIsdU5BWUEsVUFBVSxvREN4QmhELDJnR0F5RUE7OzJGRDdEYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsdUJBQXVCO3dJQVd2QixRQUFRO3NCQUFqQixNQUFNO2dCQUNFLElBQUk7c0JBQVosS0FBSztnQkFHNEMsV0FBVztzQkFBNUQsWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQVluQyxPQUFPO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBtb2RlbCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJ5RGlhbG9nU2VydmljZSwgUHJ5STE4blNlcnZpY2UsIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBIeXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9wcm9jZWR1cmUvaHlwLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IEh2eUFjdGlvbk1lbnVDb21wb25lbnQsIEh2eUFjdGlvbk1lbnVEYXRhIH0gZnJvbSAnLi9hY3Rpb24tbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IEFDVElPTlNfVFlQRVMgfSBmcm9tICcuL2FjdGlvbnMtdHlwZXMuY29uc3RhbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdodnktcHJvY2VkdXJlLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvY2VkdXJlLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByb2NlZHVyZUFjdGlvbnNDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUge1xuICBzdGF0aWMgQ0FSRF9IRUlHSFQgPSA3NTtcbiAgbW92aW5nQWN0aW9uPzogSHlwQWN0aW9uO1xuICBtb3ZlU3RhcnQgPSAwO1xuICBtb3ZlSW5pdGlhbEluZGV4ID0gMDtcbiAgaW5pdGlhbEFjdGlvbkxpc3Q6IEh5cEFjdGlvbltdID0gW107XG4gIHByZXZpb3VzT2Zmc2V0ID0gMDtcbiAgZHJhZ1RhcmdldD86IEV2ZW50VGFyZ2V0IHwgbnVsbDtcbiAgQE91dHB1dCgpIG1vZGlmaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxIeXBBY3Rpb25bXT4oKTtcbiAgQElucHV0KCkgbW9kZTogJ21vZGVsJyB8ICdwcm9jZWR1cmUnID0gJ3Byb2NlZHVyZSc7XG4gIEFDVElPTlNfVFlQRVM6IHN0cmluZ1tdO1xuICBfYWN0aW9uczogSHlwQWN0aW9uW10gPSBbXTtcbiAgQFZpZXdDaGlsZHJlbignbWVudUJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBtZW51QnV0dG9ucyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByeURpYWxvZzogUHJ5RGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBpMThuU2VydmljZTogUHJ5STE4blNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLkFDVElPTlNfVFlQRVMgPSBPYmplY3Qua2V5cyhBQ1RJT05TX1RZUEVTLnZhbHVlcyk7XG4gICAgdGhpcy5BQ1RJT05TX1RZUEVTLnNvcnQoKGEsIGIpID0+IEFDVElPTlNfVFlQRVMudmFsdWVzW2FdLm9yZGVyIC0gQUNUSU9OU19UWVBFUy52YWx1ZXNbYl0ub3JkZXIpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGFjdGlvbnMoYWN0aW9uczogSHlwQWN0aW9uW10pIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhY3Rpb25zID8/IFtdKSk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgfVxuXG4gIGdldCBlZGl0aW5nKCkge1xuICAgIHJldHVybiAhIXRoaXMuYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi5fc3RhdHVzKTtcbiAgfVxuXG4gIG9uTW91c2VEb3duKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuZHJhZ1RhcmdldCA9ICRldmVudC50YXJnZXQ7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50OiBNb3VzZUV2ZW50LCBhY3Rpb246IEh5cEFjdGlvbiwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdUYXJnZXQgJiYgKHRoaXMuZHJhZ1RhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubWFza0ltYWdlLmluZGV4T2YoJ3NpeF9kb3QnKSA+IC0xKSB7XG4gICAgICB0aGlzLm1vdmluZ0FjdGlvbiA9IGFjdGlvbjtcbiAgICAgIHRoaXMubW92ZVN0YXJ0ID0gJGV2ZW50LmNsaWVudFk7XG4gICAgICB0aGlzLm1vdmVJbml0aWFsSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuaW5pdGlhbEFjdGlvbkxpc3QgPSBbLi4udGhpcy5hY3Rpb25zXTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgbW92ZSgkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5tb3ZpbmdBY3Rpb24pIHtcbiAgICAgIGNvbnN0IG9mZnNldEluQ2FyZHMgPSBNYXRoLnJvdW5kKCgkZXZlbnQuY2xpZW50WSAtIHRoaXMubW92ZVN0YXJ0KSAvIFByb2NlZHVyZUFjdGlvbnNDb21wb25lbnQuQ0FSRF9IRUlHSFQpO1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNPZmZzZXQgIT09IG9mZnNldEluQ2FyZHMpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c09mZnNldCA9IG9mZnNldEluQ2FyZHM7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgTWF0aC5tYXgodGhpcy5tb3ZlSW5pdGlhbEluZGV4ICsgb2Zmc2V0SW5DYXJkcywgMCksXG4gICAgICAgICAgdGhpcy5pbml0aWFsQWN0aW9uTGlzdC5sZW5ndGggLSAxXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld0FjdGlvbnMgPSBbLi4udGhpcy5pbml0aWFsQWN0aW9uTGlzdF07XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXdBY3Rpb25zLnNwbGljZSh0aGlzLm1vdmVJbml0aWFsSW5kZXgsIDEpWzBdO1xuICAgICAgICBuZXdBY3Rpb25zLnNwbGljZShuZXdJbmRleCwgMCwgZWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5tb2RpZmllZC5uZXh0KG5ld0FjdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRyb3AoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5tb3ZlKCRldmVudCk7XG4gICAgdGhpcy5tb3ZpbmdBY3Rpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBhbGxvd0Ryb3AoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICB0b2dnbGVBY3Rpb25TdGF0dXMoaW5kZXg6IG51bWJlciwgJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgbmV3QWN0aW9ucyA9IFsuLi50aGlzLmFjdGlvbnNdO1xuICAgIGlmIChuZXdBY3Rpb25zW2luZGV4XS5zdGF0dXMgIT09ICdET05FJykge1xuICAgICAgbmV3QWN0aW9uc1tpbmRleF0gPSB7XG4gICAgICAgIC4uLm5ld0FjdGlvbnNbaW5kZXhdLFxuICAgICAgICBzdGF0dXM6IG5ld0FjdGlvbnNbaW5kZXhdLnN0YXR1cyA9PT0gJ05FVycgPyAnSU5fUFJPR1JFU1MnIDogJ05FVydcbiAgICAgIH07XG4gICAgICB0aGlzLm1vZGlmaWVkLm5leHQobmV3QWN0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgYWRkKCkge1xuICAgIHRoaXMuYWN0aW9ucy5wdXNoKHsgdHlwZTogJycsIHN0YXR1czogJ05FVycsIGlkOiB2NCgpLCBfc3RhdHVzOiAnY3JlYXRlJyB9IGFzIEh5cEFjdGlvbik7XG4gICAgdGhpcy5tb2RpZmllZC5uZXh0KHRoaXMuYWN0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZWwgPSBtb2RlbDtcblxuICB1cGRhdGUoaWR4OiBudW1iZXIsIHByb3A6IHN0cmluZywgJGV2ZW50OiBhbnkpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5hY3Rpb25zW2lkeF1bcHJvcF0gPSAkZXZlbnQ7XG4gIH1cblxuICBvcGVuTW9kYWwoYWN0aW9uOiBIeXBBY3Rpb24sIGlkeDogbnVtYmVyKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5wcnlEaWFsb2cub3BlbihIdnlBY3Rpb25NZW51Q29tcG9uZW50LCB7XG4gICAgICBvdmVybGF5Q29uZmlnOiB7XG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ3ByeS1kaWFsb2ctY29udGFpbmVyJ10sXG4gICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCcsXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheVxuICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5tZW51QnV0dG9ucy5nZXQoaWR4KSEpXG4gICAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG4gICAgICB9LFxuICAgICAgZGF0YToge1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZVxuICAgICAgfSBhcyBIdnlBY3Rpb25NZW51RGF0YVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3ViID0gZGlhbG9nUmVmLmNsb3NlVmFsdWUuc3Vic2NyaWJlKCh0eXBlKSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgWWV0IEltcGxlbWVudGVkJyk7XG4gICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgYWN0aW9uLl9pbml0aWFsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhY3Rpb24pKTtcbiAgICAgICAgICBhY3Rpb24uX3N0YXR1cyA9ICdtb2RpZnknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZG9uZSc6XG4gICAgICAgICAgYWN0aW9uLnN0YXR1cyA9ICdET05FJztcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kaWZpZWQubmV4dCh0aGlzLmFjdGlvbnMpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmVBY3Rpb24oYWN0aW9uOiBIeXBBY3Rpb24sIGlkeDogbnVtYmVyKSB7XG4gICAgZGVsZXRlIGFjdGlvbi5faW5pdGlhbDtcbiAgICBkZWxldGUgYWN0aW9uLl9zdGF0dXM7XG4gICAgdGhpcy5tb2RpZmllZC5uZXh0KHRoaXMuYWN0aW9ucyk7XG4gIH1cblxuICBjYW5jZWxBY3Rpb24oYWN0aW9uOiBIeXBBY3Rpb24sIGlkeDogbnVtYmVyKSB7XG4gICAgaWYgKGFjdGlvbi5fc3RhdHVzID09PSAnbW9kaWZ5Jykge1xuICAgICAgdGhpcy5hY3Rpb25zW2lkeF0gPSB7IC4uLmFjdGlvbi5faW5pdGlhbCEgfTtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGlvbnNbaWR4XS5faW5pdGlhbDtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGlvbnNbaWR4XS5fc3RhdHVzO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uLl9zdGF0dXMgPT09ICdjcmVhdGUnKSB7XG4gICAgICB0aGlzLmFjdGlvbnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGhhcHBlbicpO1xuICAgIH1cbiAgICB0aGlzLm1vZGlmaWVkLm5leHQodGhpcy5hY3Rpb25zKTtcbiAgfVxuXG4gIGlzVmFsaWQoYWN0aW9uOiBIeXBBY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgYWN0aW9uLnR5cGUgJiZcbiAgICAgIChBQ1RJT05TX1RZUEVTLnZhbHVlc1thY3Rpb24udHlwZV0udmFsaWRhdG9yID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgQUNUSU9OU19UWVBFUy52YWx1ZXNbYWN0aW9uLnR5cGVdLnZhbGlkYXRvciEoYWN0aW9uKSlcbiAgICApO1xuICB9XG5cbiAgaXNEcmFnZ2FibGUoYWN0aW9uOiBIeXBBY3Rpb24pIHtcbiAgICByZXR1cm4gIXRoaXMuZWRpdGluZyAmJiBhY3Rpb24uc3RhdHVzID09PSAnTkVXJztcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fYWN0aW9uc1wiXG4gIChkcmFnKT1cIm1vdmUoJGV2ZW50KVwiXG4gIChkcm9wKT1cImRyb3AoJGV2ZW50KVwiXG4gIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50KVwiXG4+XG4gIEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25zOyB0cmFjayBhY3Rpb24uaWQ7IGxldCBpZHggPSAkaW5kZXgpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fYWN0aW9uc19fYWN0aW9uXCJcbiAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGUoYWN0aW9uKVwiXG4gICAgICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydCgkZXZlbnQsIGFjdGlvbiwgaWR4KVwiXG4gICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudClcIlxuICAgICAgW2NsYXNzLi11cGRhdGluZ109XCIhIWFjdGlvbi5fc3RhdHVzXCJcbiAgICAgIFtjbGFzcy4tb3RoZXItdXBkYXRpbmddPVwiZWRpdGluZ1wiXG4gICAgPlxuICAgICAgPHByeS1pY29uXG4gICAgICAgIGljb25Tdmc9XCJzaXhfZG90XCJcbiAgICAgICAgI2hhbmRsZVxuICAgICAgICBbY2xhc3MuLWRpc2FibGVkXT1cIiFpc0RyYWdnYWJsZShhY3Rpb24pXCJcbiAgICAgICAgW2NsYXNzLi1oaWRkZW5dPVwiYWN0aW9uLl9zdGF0dXNcIlxuICAgICAgICBjbGFzcz1cImdyYWJiYWJsZVwiXG4gICAgICA+PC9wcnktaWNvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJudW1iZXItYmFkZ2VcIj57eyBpZHggKyAxIH19PC9kaXY+XG4gICAgICBAaWYgKCFhY3Rpb24uX3N0YXR1cykge1xuICAgICAgICBAaWYgKG1vZGUgPT09ICdwcm9jZWR1cmUnKSB7XG4gICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgW25nTW9kZWxdPVwiYWN0aW9uLnN0YXR1cyAhPT0gJ05FVydcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvblN0YXR1cyhpZHgsICRldmVudClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5zdGF0dXMgPT09ICdET05FJ1wiXG4gICAgICAgICAgPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgW2NsYXNzLi1kb25lXT1cImFjdGlvbi5zdGF0dXMgPT09ICdET05FJ1wiIFtjbGFzcy4tZGlzYWJsZWRdPVwiZWRpdGluZ1wiPlxuICAgICAgICAgIDxodnktYWN0aW9uLXBhcmFtZXRlciBbYWN0aW9uXT1cImFjdGlvblwiIFt0eXBlXT1cImFjdGlvbi50eXBlXCIgW2lzUGFyYW1dPVwiZmFsc2VcIj48L2h2eS1hY3Rpb24tcGFyYW1ldGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwib3Blbk1vZGFsKGFjdGlvbiwgaWR4KVwiIFtkaXNhYmxlZF09XCJlZGl0aW5nXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJtb3JlX2hvcml6XCIgI21lbnVCdXR0b24+PC9wcnktaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fYWN0aW9uc19fYWN0aW9uX19jcmVhdGVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fcHJvY2VkdXJlX19hY3Rpb25zX19hY3Rpb25fX2NyZWF0ZV9faGVhZGVyXCI+XG4gICAgICAgICAgICA8cD57eyAnQGh2eS5wcm9jZWR1cmUuYWN0aW9uLicgKyBhY3Rpb24uX3N0YXR1cyB8IGkxOG4gfX08L3A+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJzYXZlQWN0aW9uKGFjdGlvbiwgaWR4KVwiIFtkaXNhYmxlZF09XCIhaXNWYWxpZChhY3Rpb24pXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2hlY2tcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJjYW5jZWxBY3Rpb24oYWN0aW9uLCBpZHgpXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImFjdGlvbi50eXBlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cIkFDVElPTlNfVFlQRVNcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGUoaWR4LCAndHlwZScsICRldmVudClcIlxuICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQGh2eS5wcm9jZWR1cmUuYWN0aW9uLlwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQGh2eS5wcm9jZWR1cmUuYWN0aW9uLnBsYWNlaG9sZGVyLmFjdGlvbicgfCBpMThuXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGh2eS1hY3Rpb24tcGFyYW1ldGVyIFthY3Rpb25dPVwiYWN0aW9uXCIgW3R5cGVdPVwiYWN0aW9uLnR5cGVcIiBbaXNQYXJhbV09XCJ0cnVlXCI+PC9odnktYWN0aW9uLXBhcmFtZXRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH0gQGVtcHR5IHtcbiAgICBAaWYgKGFjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICA8ZGl2Pnt7ICdAaHZ5LmV2ZW50LmxvZy5wcm9jZWR1cmUubm9BY3Rpb24nIHwgaTE4biB9fTwvZGl2PlxuICAgIH1cbiAgfVxuICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fcHJvY2VkdXJlX19idXR0b25cIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwiYWRkKClcIiBbZGlzYWJsZWRdPVwiZWRpdGluZ1wiPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhZGRcIj48L3ByeS1pY29uPlxuICAgICAge3sgJ0BodnkucHJvY2VkdXJlLmFjdGlvbi5hZGQnIHwgaTE4biB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -920,11 +920,11 @@ class ProcedureActionsComponent extends SubscriptionnerDirective {
|
|
|
920
920
|
return !this.editing && action.status === 'NEW';
|
|
921
921
|
}
|
|
922
922
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureActionsComponent, deps: [{ token: i1$3.PryDialogService }, { token: i2.Overlay }, { token: i1$3.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
923
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: ProcedureActionsComponent, selector: "hvy-procedure-actions", inputs: { mode: "mode", actions: "actions" }, outputs: { modified: "modified" }, viewQueries: [{ propertyName: "menuButtons", predicate: ["menuButton"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"o-hvy-events-detail__procedure__actions\"\n (drag)=\"move($event)\"\n (drop)=\"drop($event)\"\n (dragover)=\"allowDrop($event)\"\n>\n @for (action of actions; track action.id; let idx = $index) {\n <div\n class=\"o-hvy-events-detail__procedure__actions__action\"\n [draggable]=\"isDraggable(action)\"\n (dragstart)=\"dragStart($event, action, idx)\"\n (mousedown)=\"onMouseDown($event)\"\n [class.-updating]=\"!!action._status\"\n [class.-other-updating]=\"editing\"\n >\n <pry-icon\n iconSvg=\"six_dot\"\n #handle\n [class.-disabled]=\"!isDraggable(action)\"\n [class.-hidden]=\"action._status\"\n ></pry-icon>\n <div class=\"number-badge\">{{ idx + 1 }}</div>\n @if (!action._status) {\n @if (mode === 'procedure') {\n <pry-checkbox\n [ngModel]=\"action.status !== 'NEW'\"\n (click)=\"toggleActionStatus(idx, $event)\"\n [disabled]=\"action.status === 'DONE'\"\n ></pry-checkbox>\n }\n <div [class.-done]=\"action.status === 'DONE'\" [class.-disabled]=\"editing\">\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"false\"></hvy-action-parameter>\n </div>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"openModal(action, idx)\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"more_horiz\" #menuButton></pry-icon>\n </button>\n } @else {\n <div class=\"o-hvy-events-detail__procedure__actions__action__create\">\n <div class=\"o-hvy-events-detail__procedure__actions__action__create__header\">\n <p>{{ '@hvy.procedure.action.' + action._status | i18n }}</p>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"saveAction(action, idx)\" [disabled]=\"!isValid(action)\">\n <pry-icon iconSvg=\"check\"></pry-icon>\n </button>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction(action, idx)\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div>\n <pry-select\n [ngModel]=\"action.type\"\n [items]=\"ACTIONS_TYPES\"\n (ngModelChange)=\"update(idx, 'type', $event)\"\n i18nPrefix=\"@hvy.procedure.action.\"\n [placeholder]=\"'@hvy.procedure.action.placeholder.action' | i18n\"\n ></pry-select>\n </div>\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"true\"></hvy-action-parameter>\n </div>\n }\n </div>\n } @empty {\n @if (actions.length === 0) {\n <div>{{ '@hvy.event.log.procedure.noAction' | i18n }}</div>\n }\n }\n <div class=\"o-hvy-events-detail__procedure__button\">\n <button class=\"a-btn a-btn--primary\" (click)=\"add()\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n {{ '@hvy.procedure.action.add' | i18n }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i4.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1$3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i1$3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: HvyActionParameterComponent, selector: "hvy-action-parameter", inputs: ["isParam", "type", "action"] }, { kind: "pipe", type: i1$3.I18nPipe, name: "i18n" }] }); }
|
|
923
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: ProcedureActionsComponent, selector: "hvy-procedure-actions", inputs: { mode: "mode", actions: "actions" }, outputs: { modified: "modified" }, viewQueries: [{ propertyName: "menuButtons", predicate: ["menuButton"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"o-hvy-events-detail__procedure__actions\"\n (drag)=\"move($event)\"\n (drop)=\"drop($event)\"\n (dragover)=\"allowDrop($event)\"\n>\n @for (action of actions; track action.id; let idx = $index) {\n <div\n class=\"o-hvy-events-detail__procedure__actions__action\"\n [draggable]=\"isDraggable(action)\"\n (dragstart)=\"dragStart($event, action, idx)\"\n (mousedown)=\"onMouseDown($event)\"\n [class.-updating]=\"!!action._status\"\n [class.-other-updating]=\"editing\"\n >\n <pry-icon\n iconSvg=\"six_dot\"\n #handle\n [class.-disabled]=\"!isDraggable(action)\"\n [class.-hidden]=\"action._status\"\n class=\"grabbable\"\n ></pry-icon>\n <div class=\"number-badge\">{{ idx + 1 }}</div>\n @if (!action._status) {\n @if (mode === 'procedure') {\n <pry-checkbox\n [ngModel]=\"action.status !== 'NEW'\"\n (click)=\"toggleActionStatus(idx, $event)\"\n [disabled]=\"action.status === 'DONE'\"\n ></pry-checkbox>\n }\n <div [class.-done]=\"action.status === 'DONE'\" [class.-disabled]=\"editing\">\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"false\"></hvy-action-parameter>\n </div>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"openModal(action, idx)\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"more_horiz\" #menuButton></pry-icon>\n </button>\n } @else {\n <div class=\"o-hvy-events-detail__procedure__actions__action__create\">\n <div class=\"o-hvy-events-detail__procedure__actions__action__create__header\">\n <p>{{ '@hvy.procedure.action.' + action._status | i18n }}</p>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"saveAction(action, idx)\" [disabled]=\"!isValid(action)\">\n <pry-icon iconSvg=\"check\"></pry-icon>\n </button>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction(action, idx)\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div>\n <pry-select\n [ngModel]=\"action.type\"\n [items]=\"ACTIONS_TYPES\"\n (ngModelChange)=\"update(idx, 'type', $event)\"\n i18nPrefix=\"@hvy.procedure.action.\"\n [placeholder]=\"'@hvy.procedure.action.placeholder.action' | i18n\"\n ></pry-select>\n </div>\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"true\"></hvy-action-parameter>\n </div>\n }\n </div>\n } @empty {\n @if (actions.length === 0) {\n <div>{{ '@hvy.event.log.procedure.noAction' | i18n }}</div>\n }\n }\n <div class=\"o-hvy-events-detail__procedure__button\">\n <button class=\"a-btn a-btn--primary\" (click)=\"add()\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n {{ '@hvy.procedure.action.add' | i18n }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i4.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1$3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i1$3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: HvyActionParameterComponent, selector: "hvy-action-parameter", inputs: ["isParam", "type", "action"] }, { kind: "pipe", type: i1$3.I18nPipe, name: "i18n" }] }); }
|
|
924
924
|
}
|
|
925
925
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureActionsComponent, decorators: [{
|
|
926
926
|
type: Component,
|
|
927
|
-
args: [{ selector: 'hvy-procedure-actions', template: "<div\n class=\"o-hvy-events-detail__procedure__actions\"\n (drag)=\"move($event)\"\n (drop)=\"drop($event)\"\n (dragover)=\"allowDrop($event)\"\n>\n @for (action of actions; track action.id; let idx = $index) {\n <div\n class=\"o-hvy-events-detail__procedure__actions__action\"\n [draggable]=\"isDraggable(action)\"\n (dragstart)=\"dragStart($event, action, idx)\"\n (mousedown)=\"onMouseDown($event)\"\n [class.-updating]=\"!!action._status\"\n [class.-other-updating]=\"editing\"\n >\n <pry-icon\n iconSvg=\"six_dot\"\n #handle\n [class.-disabled]=\"!isDraggable(action)\"\n [class.-hidden]=\"action._status\"\n ></pry-icon>\n <div class=\"number-badge\">{{ idx + 1 }}</div>\n @if (!action._status) {\n @if (mode === 'procedure') {\n <pry-checkbox\n [ngModel]=\"action.status !== 'NEW'\"\n (click)=\"toggleActionStatus(idx, $event)\"\n [disabled]=\"action.status === 'DONE'\"\n ></pry-checkbox>\n }\n <div [class.-done]=\"action.status === 'DONE'\" [class.-disabled]=\"editing\">\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"false\"></hvy-action-parameter>\n </div>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"openModal(action, idx)\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"more_horiz\" #menuButton></pry-icon>\n </button>\n } @else {\n <div class=\"o-hvy-events-detail__procedure__actions__action__create\">\n <div class=\"o-hvy-events-detail__procedure__actions__action__create__header\">\n <p>{{ '@hvy.procedure.action.' + action._status | i18n }}</p>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"saveAction(action, idx)\" [disabled]=\"!isValid(action)\">\n <pry-icon iconSvg=\"check\"></pry-icon>\n </button>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction(action, idx)\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div>\n <pry-select\n [ngModel]=\"action.type\"\n [items]=\"ACTIONS_TYPES\"\n (ngModelChange)=\"update(idx, 'type', $event)\"\n i18nPrefix=\"@hvy.procedure.action.\"\n [placeholder]=\"'@hvy.procedure.action.placeholder.action' | i18n\"\n ></pry-select>\n </div>\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"true\"></hvy-action-parameter>\n </div>\n }\n </div>\n } @empty {\n @if (actions.length === 0) {\n <div>{{ '@hvy.event.log.procedure.noAction' | i18n }}</div>\n }\n }\n <div class=\"o-hvy-events-detail__procedure__button\">\n <button class=\"a-btn a-btn--primary\" (click)=\"add()\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n {{ '@hvy.procedure.action.add' | i18n }}\n </button>\n </div>\n</div>\n" }]
|
|
927
|
+
args: [{ selector: 'hvy-procedure-actions', template: "<div\n class=\"o-hvy-events-detail__procedure__actions\"\n (drag)=\"move($event)\"\n (drop)=\"drop($event)\"\n (dragover)=\"allowDrop($event)\"\n>\n @for (action of actions; track action.id; let idx = $index) {\n <div\n class=\"o-hvy-events-detail__procedure__actions__action\"\n [draggable]=\"isDraggable(action)\"\n (dragstart)=\"dragStart($event, action, idx)\"\n (mousedown)=\"onMouseDown($event)\"\n [class.-updating]=\"!!action._status\"\n [class.-other-updating]=\"editing\"\n >\n <pry-icon\n iconSvg=\"six_dot\"\n #handle\n [class.-disabled]=\"!isDraggable(action)\"\n [class.-hidden]=\"action._status\"\n class=\"grabbable\"\n ></pry-icon>\n <div class=\"number-badge\">{{ idx + 1 }}</div>\n @if (!action._status) {\n @if (mode === 'procedure') {\n <pry-checkbox\n [ngModel]=\"action.status !== 'NEW'\"\n (click)=\"toggleActionStatus(idx, $event)\"\n [disabled]=\"action.status === 'DONE'\"\n ></pry-checkbox>\n }\n <div [class.-done]=\"action.status === 'DONE'\" [class.-disabled]=\"editing\">\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"false\"></hvy-action-parameter>\n </div>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"openModal(action, idx)\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"more_horiz\" #menuButton></pry-icon>\n </button>\n } @else {\n <div class=\"o-hvy-events-detail__procedure__actions__action__create\">\n <div class=\"o-hvy-events-detail__procedure__actions__action__create__header\">\n <p>{{ '@hvy.procedure.action.' + action._status | i18n }}</p>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"saveAction(action, idx)\" [disabled]=\"!isValid(action)\">\n <pry-icon iconSvg=\"check\"></pry-icon>\n </button>\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction(action, idx)\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <div>\n <pry-select\n [ngModel]=\"action.type\"\n [items]=\"ACTIONS_TYPES\"\n (ngModelChange)=\"update(idx, 'type', $event)\"\n i18nPrefix=\"@hvy.procedure.action.\"\n [placeholder]=\"'@hvy.procedure.action.placeholder.action' | i18n\"\n ></pry-select>\n </div>\n <hvy-action-parameter [action]=\"action\" [type]=\"action.type\" [isParam]=\"true\"></hvy-action-parameter>\n </div>\n }\n </div>\n } @empty {\n @if (actions.length === 0) {\n <div>{{ '@hvy.event.log.procedure.noAction' | i18n }}</div>\n }\n }\n <div class=\"o-hvy-events-detail__procedure__button\">\n <button class=\"a-btn a-btn--primary\" (click)=\"add()\" [disabled]=\"editing\">\n <pry-icon iconSvg=\"add\"></pry-icon>\n {{ '@hvy.procedure.action.add' | i18n }}\n </button>\n </div>\n</div>\n" }]
|
|
928
928
|
}], ctorParameters: () => [{ type: i1$3.PryDialogService }, { type: i2.Overlay }, { type: i1$3.PryI18nService }], propDecorators: { modified: [{
|
|
929
929
|
type: Output
|
|
930
930
|
}], mode: [{
|
|
@@ -1261,7 +1261,9 @@ class EventDetailComponent extends SubscriptionnerDirective {
|
|
|
1261
1261
|
openDeleteModal() {
|
|
1262
1262
|
const data = {
|
|
1263
1263
|
title: '@chh.event.deleteT',
|
|
1264
|
-
message: '@chh.event.deleteM',
|
|
1264
|
+
message: this.i18nService.instant(this.events.length > 1 ? '@chh.event.deleteM+' : '@chh.event.deleteM1', {
|
|
1265
|
+
nbEvents: this.events.length
|
|
1266
|
+
}),
|
|
1265
1267
|
actions: [
|
|
1266
1268
|
{ id: 0, label: '@chh.action.cancel', color: 'secondary' },
|
|
1267
1269
|
{
|
|
@@ -1276,17 +1278,17 @@ class EventDetailComponent extends SubscriptionnerDirective {
|
|
|
1276
1278
|
}
|
|
1277
1279
|
]
|
|
1278
1280
|
};
|
|
1279
|
-
this.pryDialog.open(PryDialogConfirmComponent, { data });
|
|
1281
|
+
this.pryDialog.open(PryDialogConfirmComponent, { data, backdropClass: 'backdrop-dark' });
|
|
1280
1282
|
}
|
|
1281
1283
|
convertDate(newValue) {
|
|
1282
1284
|
return new Date(newValue).toISOString();
|
|
1283
1285
|
}
|
|
1284
1286
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventDetailComponent, deps: [{ token: EquipmentService }, { token: i1$1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i1$3.PrySnackbarService }, { token: i1$3.PryI18nService }, { token: i1$3.PryDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1285
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: EventDetailComponent, selector: "hvy-event-detail", inputs: { title: "title", events: "events", procedure: "procedure", cancelModifications: "cancelModifications", equipmentName: "equipmentName" }, outputs: { modifiedEvents: "modifiedEvents", modifiedProcedure: "modifiedProcedure", eventErrors: "eventErrors" }, viewQueries: [{ propertyName: "confirmDialog", first: true, predicate: ["confirmDialog"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-hvy-events-detail\">\n <div class=\"o-hvy-events-detail__header\">\n <div class=\"o-hvy-events-detail__header__split\">\n <h1>{{ title ?? '@hvy.event.detail' | i18n }}</h1>\n @if (events.length > 1) {\n @if (canCloseSome) {\n <button class=\"a-btn a-btn--secondary -fix-right\" [disabled]=\"!canCloseSome\" (click)=\"closeAll()\">\n {{ (canCloseSome ? '@hvy.event.log.event.close' : '@hvy.event.log.event.closed') | i18n }}\n </button>\n }\n @if (!canCloseSome) {\n <div\n class=\"a-tooltip\"\n [attr.data-tooltip]=\"'... TODO: get closing comment ...'\"\n data-tooltip-position=\"bottom\"\n >\n <pry-icon iconSvg=\"i\" [height]=\"18\" [width]=\"18\">i</pry-icon>\n </div>\n }\n }\n </div>\n <div class=\"o-hvy-events-detail__header__split\">\n @if (canCloseSome) {\n <button class=\"a-btn a-btn--secondary\" (click)=\"openDeleteModal()\">\n {{ '@hvy.event.log.procedure.delete' | i18n }}\n </button>\n }\n </div>\n </div>\n <div class=\"o-hvy-events-detail__container\">\n <div class=\"o-hvy-events-detail__container__scrollable\">\n <div class=\"o-hvy-events-detail__events\">\n @for (event of events; track event.id; let idx = $index) {\n <div class=\"o-hvy-events-detail__events__event\">\n <div class=\"o-hvy-events-detail__events__event__header\">\n <pry-icon\n iconSvg=\"arrow_down_rounded\"\n [class.-rotated]=\"opened[idx]\"\n (click)=\"toggle(idx)\"\n [width]=\"10\"\n [height]=\"10\"\n ></pry-icon>\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n <h2>{{ event.name }}</h2>\n <hvy-status-display\n [item]=\"event\"\n [modifiable]=\"event.status !== 'DONE'\"\n (modified)=\"changeStatus($event, event)\"\n ></hvy-status-display>\n </div>\n <div class=\"o-hvy-events-detail__events__event__content\">\n @if (!opened[idx]) {\n <div>{{ '@hvy.event.log.event.description' | i18n }} : {{ event.description }}</div>\n <div>{{ '@hvy.event.log.event.address' | i18n }} : {{ event.address }}</div>\n } @else {\n @if (access(event); as accessValue) {\n <div class=\"o-hvy-events-detail__events__event__content__header\">\n <h3>{{ '@hvy.event.log.event.detail' | i18n }}</h3>\n <span class=\"required\">{{ '@hvy.event.log.event.mandatory' | i18n }}</span>\n </div>\n <table>\n <tbody>\n <tr>\n <td>{{ '@hvy.event.log.event.name' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('name', idx)\"\n [value]=\"event.name\"\n (change)=\"modifyEvent(idx, 'name', $event)\"\n [readonly]=\"accessValue.name\"\n [maxLength]=\"50\"\n />\n </td>\n </tr>\n @if (event.id > 0) {\n <tr>\n <td>{{ '@hvy.event.log.event.id' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <input type=\"text\" class=\"a-form-field\" [value]=\"padId.fn(event.id)\" [readonly]=\"true\" />\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.log.event.category' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <pry-select\n [ngModel]=\"event.category\"\n [items]=\"categories(event)\"\n [class.-error]=\"hasError('category', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'category', $event)\"\n i18nPrefix=\"@hvy.event.category.\"\n [disabled]=\"accessValue.category\"\n ></pry-select>\n </td>\n </tr>\n @if (event.category === 'ANOMALY') {\n <tr>\n <td>{{ '@hvy.event.subCategory.name' | i18n }} :</td>\n <td>\n <pry-select\n [ngModel]=\"event.subCategory\"\n [items]=\"subCategories\"\n [class.-error]=\"hasError('subCategory', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'subCategory', $event)\"\n i18nPrefix=\"@hvy.event.subCategory.\"\n [disabled]=\"accessValue.subCategory\"\n ></pry-select>\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.criticality.name' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <pry-select\n [ngModel]=\"event.criticality\"\n [items]=\"criticalities\"\n [class.-error]=\"hasError('criticality', idx)\"\n i18nPrefix=\"@hvy.event.criticality.\"\n [disabled]=\"accessValue.criticality\"\n (ngModelChange)=\"modifyEvent(idx, 'criticality', $event)\"\n ></pry-select>\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.log.event.description' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <textarea\n [ngModel]=\"event.description\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('description', idx)\"\n [readonly]=\"accessValue.description\"\n (ngModelChange)=\"modifyEvent(idx, 'description', $event)\"\n [maxLength]=\"256\"\n ></textarea>\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.log.event.address' | i18n }} :</td>\n <td>\n <textarea\n [ngModel]=\"event.address\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('address', idx)\"\n [readonly]=\"accessValue.address\"\n (ngModelChange)=\"modifyEvent(idx, 'address', $event)\"\n [maxLength]=\"256\"\n ></textarea>\n </td>\n </tr>\n @if (event.category !== 'MANIFESTATION') {\n <tr>\n <td>{{ '@hvy.event.source' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"event.externalSourceRef ?? ''\"\n [class.-error]=\"hasError('source', idx)\"\n [readonly]=\"accessValue.source\"\n (change)=\"modifyEvent(idx, 'source', $event)\"\n />\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.equipment' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"event.equipment?.name ?? ''\"\n [class.-error]=\"hasError('equipment', idx)\"\n [readonly]=\"accessValue.eqName\"\n (change)=\"changeEquipment(idx, $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.equipmentEntity' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('equipment', idx)\"\n [value]=\"\n (event.equipment?.entity ? '@hvy.event.entity.' + event.equipment?.entity : '') | i18n\n \"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.domain.name' | i18n }} :</td>\n <td>\n <pry-select\n [items]=\"DOMAINS\"\n [ngModel]=\"event.domain\"\n i18nPrefix=\"@hvy.event.domain.\"\n [class.-error]=\"hasError('domain', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'domain', $event)\"\n [disabled]=\"accessValue.domain\"\n ></pry-select>\n </td>\n </tr>\n <tr>\n <td>\n {{ '@hvy.event.startDate' | i18n }}\n @if (event.category === 'MANIFESTATION') {\n <span class=\"required\">*</span>\n }\n :\n </td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.startDate | forDateTimeLocal\"\n [class.-error]=\"hasError('startDate', idx)\"\n [readonly]=\"accessValue.startDate\"\n (change)=\"modifyEvent(idx, 'startDate', $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>\n {{ '@hvy.event.endDate' | i18n }}\n @if (event.category === 'MANIFESTATION') {\n <span class=\"required\">*</span>\n }\n :\n </td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.endDate | forDateTimeLocal\"\n [class.-error]=\"hasError('endDate', idx)\"\n [readonly]=\"accessValue.endDate\"\n (change)=\"modifyEvent(idx, 'endDate', $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.creationDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.creationDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.lastModificationDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.lastModificationDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.closeDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.closeDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"o-hvy-events-detail__events__event__content__comments\">\n <h3>{{ '@hvy.event.log.event.comments.name' | i18n }} :</h3>\n <textarea\n [placeholder]=\"('@hvy.event.log.event.comments.placeholder' | i18n) + '...'\"\n [(ngModel)]=\"newComentContent\"\n ></textarea>\n <div class=\"o-hvy-events-detail__events__event__content__comments__button\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"newComentContent.length === 0\">\n {{ '@hvy.action.comment' | i18n }}\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n <div class=\"o-hvy-events-detail__procedure\">\n <div class=\"o-hvy-events-detail__procedure__header\">\n <h2>\n {{ (events.length === 1 ? '@hvy.event.log.procedure.name1' : '@hvy.event.log.procedure.name') | i18n }}\n </h2>\n </div>\n @if (procedure) {\n <div class=\"o-hvy-events-detail__procedure__description\">\n <p>{{ procedure.description }}</p>\n </div>\n <div class=\"o-hvy-events-detail__procedure__progress\">\n <p>{{ '@hvy.event.log.procedure.progress' | i18n }}</p>\n <hvy-progress-display [progress]=\"calculatedProgress\"></hvy-progress-display>\n </div>\n <hvy-procedure-actions\n [actions]=\"procedure.actions\"\n (modified)=\"modifiedActions($event)\"\n ></hvy-procedure-actions>\n } @else {\n <button class=\"a-btn a-btn--secondary\" [disabled]=\"!canAssociateProcedure\" (click)=\"openAssociationModal()\">\n {{ '@hvy.action.associate' | i18n }}\n </button>\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #confirmDialog>\n <div\n class=\"o-hvy-close-confirm__dialog\"\n aria-labelledby=\"confirm\"\n tabindex=\"-1\"\n id=\"choice\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <h2>\n {{\n (changeStatusContext.events.length === 1 ? '@hvy.event.close.oneTitle' : '@hvy.event.close.multiTitle') | i18n\n }}\n </h2>\n <p>{{ (changeStatusContext.events.length === 1 ? '@hvy.event.close.one' : '@hvy.event.close.multi') | i18n }}</p>\n <ul>\n @for (event of changeStatusContext.events; track event.id) {\n <li>{{ event.name }}</li>\n }\n </ul>\n <p class=\"o-hvy-close-confirm__dialog__comment-title\">\n {{ '@hvy.event.close.comment' | i18n }}<span class=\"required\">*</span> :\n </p>\n <div class=\"o-hvy-close-confirm__dialog__comment\">\n <textarea [(ngModel)]=\"changeStatusContext.comment\" class=\"a-form-field\" [maxLength]=\"255\"></textarea>\n </div>\n <div class=\"o-hvy-close-confirm__dialog__actions\">\n <button class=\"a-btn a-btn--primary\" (click)=\"confirmedClose()\" [disabled]=\"confirmDisabled()\">\n {{ '@hvy.action.validate' | i18n }}\n </button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"toggleConfirm()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1$3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i1$3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: IconDisplayComponent, selector: "hvy-icon-display", inputs: ["event"] }, { kind: "component", type: StatusDisplayComponent, selector: "hvy-status-display", inputs: ["type", "item", "modifiable"], outputs: ["modified"] }, { kind: "component", type: ProgressDisplayComponent, selector: "hvy-progress-display", inputs: ["progress"] }, { kind: "component", type: ProcedureActionsComponent, selector: "hvy-procedure-actions", inputs: ["mode", "actions"], outputs: ["modified"] }, { kind: "pipe", type: i1$3.I18nPipe, name: "i18n" }, { kind: "pipe", type: ForDatetimeLocalPipe, name: "forDateTimeLocal" }] }); }
|
|
1287
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: EventDetailComponent, selector: "hvy-event-detail", inputs: { title: "title", events: "events", procedure: "procedure", cancelModifications: "cancelModifications", equipmentName: "equipmentName" }, outputs: { modifiedEvents: "modifiedEvents", modifiedProcedure: "modifiedProcedure", eventErrors: "eventErrors" }, viewQueries: [{ propertyName: "confirmDialog", first: true, predicate: ["confirmDialog"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-hvy-events-detail\">\n <div class=\"o-hvy-events-detail__header\">\n <div class=\"o-hvy-events-detail__header__split\">\n <h1>{{ title ?? '@hvy.event.detail' | i18n }}</h1>\n @if (events.length > 1) {\n @if (canCloseSome) {\n <button class=\"a-btn a-btn--secondary -fix-right\" [disabled]=\"!canCloseSome\" (click)=\"closeAll()\">\n {{ (canCloseSome ? '@hvy.event.log.event.close' : '@hvy.event.log.event.closed') | i18n }}\n </button>\n }\n @if (!canCloseSome) {\n <div\n class=\"a-tooltip\"\n [attr.data-tooltip]=\"'... TODO: get closing comment ...'\"\n data-tooltip-position=\"bottom\"\n >\n <pry-icon iconSvg=\"i\" [height]=\"18\" [width]=\"18\">i</pry-icon>\n </div>\n }\n }\n </div>\n <div class=\"o-hvy-events-detail__header__split\">\n @if (procedure) {\n <button class=\"a-btn a-btn--secondary\" (click)=\"openDeleteModal()\">\n {{ '@hvy.event.log.procedure.delete' | i18n }}\n </button>\n }\n </div>\n </div>\n <div class=\"o-hvy-events-detail__container\">\n <div class=\"o-hvy-events-detail__container__scrollable\">\n <div class=\"o-hvy-events-detail__events\">\n @for (event of events; track event.id; let idx = $index) {\n <div class=\"o-hvy-events-detail__events__event\">\n <div class=\"o-hvy-events-detail__events__event__header\">\n <pry-icon\n iconSvg=\"arrow_down_rounded\"\n [class.-rotated]=\"opened[idx]\"\n (click)=\"toggle(idx)\"\n [width]=\"10\"\n [height]=\"10\"\n ></pry-icon>\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n <h2>{{ event.name }}</h2>\n <hvy-status-display\n [item]=\"event\"\n [modifiable]=\"event.status !== 'DONE'\"\n (modified)=\"changeStatus($event, event)\"\n ></hvy-status-display>\n </div>\n <div class=\"o-hvy-events-detail__events__event__content\">\n @if (!opened[idx]) {\n <div>{{ '@hvy.event.log.event.description' | i18n }} : {{ event.description }}</div>\n <div>{{ '@hvy.event.log.event.address' | i18n }} : {{ event.address }}</div>\n } @else {\n @if (access(event); as accessValue) {\n <div class=\"o-hvy-events-detail__events__event__content__header\">\n <h3>{{ '@hvy.event.log.event.detail' | i18n }}</h3>\n <span class=\"required\">{{ '@hvy.event.log.event.mandatory' | i18n }}</span>\n </div>\n <table>\n <tbody>\n <tr>\n <td>{{ '@hvy.event.log.event.name' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('name', idx)\"\n [value]=\"event.name\"\n (change)=\"modifyEvent(idx, 'name', $event)\"\n [readonly]=\"accessValue.name\"\n [maxLength]=\"50\"\n />\n </td>\n </tr>\n @if (event.id > 0) {\n <tr>\n <td>{{ '@hvy.event.log.event.id' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <input type=\"text\" class=\"a-form-field\" [value]=\"padId.fn(event.id)\" [readonly]=\"true\" />\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.log.event.category' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <pry-select\n [ngModel]=\"event.category\"\n [items]=\"categories(event)\"\n [class.-error]=\"hasError('category', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'category', $event)\"\n i18nPrefix=\"@hvy.event.category.\"\n [disabled]=\"accessValue.category\"\n ></pry-select>\n </td>\n </tr>\n @if (event.category === 'ANOMALY') {\n <tr>\n <td>{{ '@hvy.event.subCategory.name' | i18n }} :</td>\n <td>\n <pry-select\n [ngModel]=\"event.subCategory\"\n [items]=\"subCategories\"\n [class.-error]=\"hasError('subCategory', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'subCategory', $event)\"\n i18nPrefix=\"@hvy.event.subCategory.\"\n [disabled]=\"accessValue.subCategory\"\n ></pry-select>\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.criticality.name' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <pry-select\n [ngModel]=\"event.criticality\"\n [items]=\"criticalities\"\n [class.-error]=\"hasError('criticality', idx)\"\n i18nPrefix=\"@hvy.event.criticality.\"\n [disabled]=\"accessValue.criticality\"\n (ngModelChange)=\"modifyEvent(idx, 'criticality', $event)\"\n ></pry-select>\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.log.event.description' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <textarea\n [ngModel]=\"event.description\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('description', idx)\"\n [readonly]=\"accessValue.description\"\n (ngModelChange)=\"modifyEvent(idx, 'description', $event)\"\n [maxLength]=\"256\"\n ></textarea>\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.log.event.address' | i18n }} :</td>\n <td>\n <textarea\n [ngModel]=\"event.address\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('address', idx)\"\n [readonly]=\"accessValue.address\"\n (ngModelChange)=\"modifyEvent(idx, 'address', $event)\"\n [maxLength]=\"256\"\n ></textarea>\n </td>\n </tr>\n @if (event.category !== 'MANIFESTATION') {\n <tr>\n <td>{{ '@hvy.event.source' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"event.externalSourceRef ?? ''\"\n [class.-error]=\"hasError('source', idx)\"\n [readonly]=\"accessValue.source\"\n (change)=\"modifyEvent(idx, 'source', $event)\"\n />\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.equipment' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"event.equipment?.name ?? ''\"\n [class.-error]=\"hasError('equipment', idx)\"\n [readonly]=\"accessValue.eqName\"\n (change)=\"changeEquipment(idx, $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.equipmentEntity' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('equipment', idx)\"\n [value]=\"\n (event.equipment?.entity ? '@hvy.event.entity.' + event.equipment?.entity : '') | i18n\n \"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.domain.name' | i18n }} :</td>\n <td>\n <pry-select\n [items]=\"DOMAINS\"\n [ngModel]=\"event.domain\"\n i18nPrefix=\"@hvy.event.domain.\"\n [class.-error]=\"hasError('domain', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'domain', $event)\"\n [disabled]=\"accessValue.domain\"\n ></pry-select>\n </td>\n </tr>\n <tr>\n <td>\n {{ '@hvy.event.startDate' | i18n }}\n @if (event.category === 'MANIFESTATION') {\n <span class=\"required\">*</span>\n }\n :\n </td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.startDate | forDateTimeLocal\"\n [class.-error]=\"hasError('startDate', idx)\"\n [readonly]=\"accessValue.startDate\"\n (change)=\"modifyEvent(idx, 'startDate', $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>\n {{ '@hvy.event.endDate' | i18n }}\n @if (event.category === 'MANIFESTATION') {\n <span class=\"required\">*</span>\n }\n :\n </td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.endDate | forDateTimeLocal\"\n [class.-error]=\"hasError('endDate', idx)\"\n [readonly]=\"accessValue.endDate\"\n (change)=\"modifyEvent(idx, 'endDate', $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.creationDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.creationDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.lastModificationDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.lastModificationDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.closeDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.closeDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"o-hvy-events-detail__events__event__content__comments\">\n <h3>{{ '@hvy.event.log.event.comments.name' | i18n }} :</h3>\n <textarea\n [placeholder]=\"('@hvy.event.log.event.comments.placeholder' | i18n) + '...'\"\n [(ngModel)]=\"newComentContent\"\n ></textarea>\n <div class=\"o-hvy-events-detail__events__event__content__comments__button\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"newComentContent.length === 0\">\n {{ '@hvy.action.comment' | i18n }}\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n <div class=\"o-hvy-events-detail__procedure\">\n <div class=\"o-hvy-events-detail__procedure__header\">\n <h2>\n {{ (events.length === 1 ? '@hvy.event.log.procedure.name1' : '@hvy.event.log.procedure.name') | i18n }}\n </h2>\n </div>\n @if (procedure) {\n <div class=\"o-hvy-events-detail__procedure__description\">\n <p>{{ procedure.description }}</p>\n </div>\n <div class=\"o-hvy-events-detail__procedure__progress\">\n <p>{{ '@hvy.event.log.procedure.progress' | i18n }}</p>\n <hvy-progress-display [progress]=\"calculatedProgress\"></hvy-progress-display>\n </div>\n <hvy-procedure-actions\n [actions]=\"procedure.actions\"\n (modified)=\"modifiedActions($event)\"\n ></hvy-procedure-actions>\n } @else {\n <button class=\"a-btn a-btn--secondary\" [disabled]=\"!canAssociateProcedure\" (click)=\"openAssociationModal()\">\n {{ '@hvy.action.associate' | i18n }}\n </button>\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #confirmDialog>\n <div\n class=\"o-hvy-close-confirm__dialog\"\n aria-labelledby=\"confirm\"\n tabindex=\"-1\"\n id=\"choice\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <h2>\n {{\n (changeStatusContext.events.length === 1 ? '@hvy.event.close.oneTitle' : '@hvy.event.close.multiTitle') | i18n\n }}\n </h2>\n <p>{{ (changeStatusContext.events.length === 1 ? '@hvy.event.close.one' : '@hvy.event.close.multi') | i18n }}</p>\n <ul>\n @for (event of changeStatusContext.events; track event.id) {\n <li>{{ event.name }}</li>\n }\n </ul>\n <p class=\"o-hvy-close-confirm__dialog__comment-title\">\n {{ '@hvy.event.close.comment' | i18n }}<span class=\"required\">*</span> :\n </p>\n <div class=\"o-hvy-close-confirm__dialog__comment\">\n <textarea [(ngModel)]=\"changeStatusContext.comment\" class=\"a-form-field\" [maxLength]=\"255\"></textarea>\n </div>\n <div class=\"o-hvy-close-confirm__dialog__actions\">\n <button class=\"a-btn a-btn--primary\" (click)=\"confirmedClose()\" [disabled]=\"confirmDisabled()\">\n {{ '@hvy.action.validate' | i18n }}\n </button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"toggleConfirm()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1$3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i1$3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: IconDisplayComponent, selector: "hvy-icon-display", inputs: ["event"] }, { kind: "component", type: StatusDisplayComponent, selector: "hvy-status-display", inputs: ["type", "item", "modifiable"], outputs: ["modified"] }, { kind: "component", type: ProgressDisplayComponent, selector: "hvy-progress-display", inputs: ["progress"] }, { kind: "component", type: ProcedureActionsComponent, selector: "hvy-procedure-actions", inputs: ["mode", "actions"], outputs: ["modified"] }, { kind: "pipe", type: i1$3.I18nPipe, name: "i18n" }, { kind: "pipe", type: ForDatetimeLocalPipe, name: "forDateTimeLocal" }] }); }
|
|
1286
1288
|
}
|
|
1287
1289
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventDetailComponent, decorators: [{
|
|
1288
1290
|
type: Component,
|
|
1289
|
-
args: [{ selector: 'hvy-event-detail', template: "<div class=\"o-hvy-events-detail\">\n <div class=\"o-hvy-events-detail__header\">\n <div class=\"o-hvy-events-detail__header__split\">\n <h1>{{ title ?? '@hvy.event.detail' | i18n }}</h1>\n @if (events.length > 1) {\n @if (canCloseSome) {\n <button class=\"a-btn a-btn--secondary -fix-right\" [disabled]=\"!canCloseSome\" (click)=\"closeAll()\">\n {{ (canCloseSome ? '@hvy.event.log.event.close' : '@hvy.event.log.event.closed') | i18n }}\n </button>\n }\n @if (!canCloseSome) {\n <div\n class=\"a-tooltip\"\n [attr.data-tooltip]=\"'... TODO: get closing comment ...'\"\n data-tooltip-position=\"bottom\"\n >\n <pry-icon iconSvg=\"i\" [height]=\"18\" [width]=\"18\">i</pry-icon>\n </div>\n }\n }\n </div>\n <div class=\"o-hvy-events-detail__header__split\">\n @if (canCloseSome) {\n <button class=\"a-btn a-btn--secondary\" (click)=\"openDeleteModal()\">\n {{ '@hvy.event.log.procedure.delete' | i18n }}\n </button>\n }\n </div>\n </div>\n <div class=\"o-hvy-events-detail__container\">\n <div class=\"o-hvy-events-detail__container__scrollable\">\n <div class=\"o-hvy-events-detail__events\">\n @for (event of events; track event.id; let idx = $index) {\n <div class=\"o-hvy-events-detail__events__event\">\n <div class=\"o-hvy-events-detail__events__event__header\">\n <pry-icon\n iconSvg=\"arrow_down_rounded\"\n [class.-rotated]=\"opened[idx]\"\n (click)=\"toggle(idx)\"\n [width]=\"10\"\n [height]=\"10\"\n ></pry-icon>\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n <h2>{{ event.name }}</h2>\n <hvy-status-display\n [item]=\"event\"\n [modifiable]=\"event.status !== 'DONE'\"\n (modified)=\"changeStatus($event, event)\"\n ></hvy-status-display>\n </div>\n <div class=\"o-hvy-events-detail__events__event__content\">\n @if (!opened[idx]) {\n <div>{{ '@hvy.event.log.event.description' | i18n }} : {{ event.description }}</div>\n <div>{{ '@hvy.event.log.event.address' | i18n }} : {{ event.address }}</div>\n } @else {\n @if (access(event); as accessValue) {\n <div class=\"o-hvy-events-detail__events__event__content__header\">\n <h3>{{ '@hvy.event.log.event.detail' | i18n }}</h3>\n <span class=\"required\">{{ '@hvy.event.log.event.mandatory' | i18n }}</span>\n </div>\n <table>\n <tbody>\n <tr>\n <td>{{ '@hvy.event.log.event.name' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('name', idx)\"\n [value]=\"event.name\"\n (change)=\"modifyEvent(idx, 'name', $event)\"\n [readonly]=\"accessValue.name\"\n [maxLength]=\"50\"\n />\n </td>\n </tr>\n @if (event.id > 0) {\n <tr>\n <td>{{ '@hvy.event.log.event.id' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <input type=\"text\" class=\"a-form-field\" [value]=\"padId.fn(event.id)\" [readonly]=\"true\" />\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.log.event.category' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <pry-select\n [ngModel]=\"event.category\"\n [items]=\"categories(event)\"\n [class.-error]=\"hasError('category', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'category', $event)\"\n i18nPrefix=\"@hvy.event.category.\"\n [disabled]=\"accessValue.category\"\n ></pry-select>\n </td>\n </tr>\n @if (event.category === 'ANOMALY') {\n <tr>\n <td>{{ '@hvy.event.subCategory.name' | i18n }} :</td>\n <td>\n <pry-select\n [ngModel]=\"event.subCategory\"\n [items]=\"subCategories\"\n [class.-error]=\"hasError('subCategory', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'subCategory', $event)\"\n i18nPrefix=\"@hvy.event.subCategory.\"\n [disabled]=\"accessValue.subCategory\"\n ></pry-select>\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.criticality.name' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <pry-select\n [ngModel]=\"event.criticality\"\n [items]=\"criticalities\"\n [class.-error]=\"hasError('criticality', idx)\"\n i18nPrefix=\"@hvy.event.criticality.\"\n [disabled]=\"accessValue.criticality\"\n (ngModelChange)=\"modifyEvent(idx, 'criticality', $event)\"\n ></pry-select>\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.log.event.description' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <textarea\n [ngModel]=\"event.description\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('description', idx)\"\n [readonly]=\"accessValue.description\"\n (ngModelChange)=\"modifyEvent(idx, 'description', $event)\"\n [maxLength]=\"256\"\n ></textarea>\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.log.event.address' | i18n }} :</td>\n <td>\n <textarea\n [ngModel]=\"event.address\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('address', idx)\"\n [readonly]=\"accessValue.address\"\n (ngModelChange)=\"modifyEvent(idx, 'address', $event)\"\n [maxLength]=\"256\"\n ></textarea>\n </td>\n </tr>\n @if (event.category !== 'MANIFESTATION') {\n <tr>\n <td>{{ '@hvy.event.source' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"event.externalSourceRef ?? ''\"\n [class.-error]=\"hasError('source', idx)\"\n [readonly]=\"accessValue.source\"\n (change)=\"modifyEvent(idx, 'source', $event)\"\n />\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.equipment' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"event.equipment?.name ?? ''\"\n [class.-error]=\"hasError('equipment', idx)\"\n [readonly]=\"accessValue.eqName\"\n (change)=\"changeEquipment(idx, $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.equipmentEntity' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('equipment', idx)\"\n [value]=\"\n (event.equipment?.entity ? '@hvy.event.entity.' + event.equipment?.entity : '') | i18n\n \"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.domain.name' | i18n }} :</td>\n <td>\n <pry-select\n [items]=\"DOMAINS\"\n [ngModel]=\"event.domain\"\n i18nPrefix=\"@hvy.event.domain.\"\n [class.-error]=\"hasError('domain', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'domain', $event)\"\n [disabled]=\"accessValue.domain\"\n ></pry-select>\n </td>\n </tr>\n <tr>\n <td>\n {{ '@hvy.event.startDate' | i18n }}\n @if (event.category === 'MANIFESTATION') {\n <span class=\"required\">*</span>\n }\n :\n </td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.startDate | forDateTimeLocal\"\n [class.-error]=\"hasError('startDate', idx)\"\n [readonly]=\"accessValue.startDate\"\n (change)=\"modifyEvent(idx, 'startDate', $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>\n {{ '@hvy.event.endDate' | i18n }}\n @if (event.category === 'MANIFESTATION') {\n <span class=\"required\">*</span>\n }\n :\n </td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.endDate | forDateTimeLocal\"\n [class.-error]=\"hasError('endDate', idx)\"\n [readonly]=\"accessValue.endDate\"\n (change)=\"modifyEvent(idx, 'endDate', $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.creationDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.creationDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.lastModificationDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.lastModificationDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.closeDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.closeDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"o-hvy-events-detail__events__event__content__comments\">\n <h3>{{ '@hvy.event.log.event.comments.name' | i18n }} :</h3>\n <textarea\n [placeholder]=\"('@hvy.event.log.event.comments.placeholder' | i18n) + '...'\"\n [(ngModel)]=\"newComentContent\"\n ></textarea>\n <div class=\"o-hvy-events-detail__events__event__content__comments__button\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"newComentContent.length === 0\">\n {{ '@hvy.action.comment' | i18n }}\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n <div class=\"o-hvy-events-detail__procedure\">\n <div class=\"o-hvy-events-detail__procedure__header\">\n <h2>\n {{ (events.length === 1 ? '@hvy.event.log.procedure.name1' : '@hvy.event.log.procedure.name') | i18n }}\n </h2>\n </div>\n @if (procedure) {\n <div class=\"o-hvy-events-detail__procedure__description\">\n <p>{{ procedure.description }}</p>\n </div>\n <div class=\"o-hvy-events-detail__procedure__progress\">\n <p>{{ '@hvy.event.log.procedure.progress' | i18n }}</p>\n <hvy-progress-display [progress]=\"calculatedProgress\"></hvy-progress-display>\n </div>\n <hvy-procedure-actions\n [actions]=\"procedure.actions\"\n (modified)=\"modifiedActions($event)\"\n ></hvy-procedure-actions>\n } @else {\n <button class=\"a-btn a-btn--secondary\" [disabled]=\"!canAssociateProcedure\" (click)=\"openAssociationModal()\">\n {{ '@hvy.action.associate' | i18n }}\n </button>\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #confirmDialog>\n <div\n class=\"o-hvy-close-confirm__dialog\"\n aria-labelledby=\"confirm\"\n tabindex=\"-1\"\n id=\"choice\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <h2>\n {{\n (changeStatusContext.events.length === 1 ? '@hvy.event.close.oneTitle' : '@hvy.event.close.multiTitle') | i18n\n }}\n </h2>\n <p>{{ (changeStatusContext.events.length === 1 ? '@hvy.event.close.one' : '@hvy.event.close.multi') | i18n }}</p>\n <ul>\n @for (event of changeStatusContext.events; track event.id) {\n <li>{{ event.name }}</li>\n }\n </ul>\n <p class=\"o-hvy-close-confirm__dialog__comment-title\">\n {{ '@hvy.event.close.comment' | i18n }}<span class=\"required\">*</span> :\n </p>\n <div class=\"o-hvy-close-confirm__dialog__comment\">\n <textarea [(ngModel)]=\"changeStatusContext.comment\" class=\"a-form-field\" [maxLength]=\"255\"></textarea>\n </div>\n <div class=\"o-hvy-close-confirm__dialog__actions\">\n <button class=\"a-btn a-btn--primary\" (click)=\"confirmedClose()\" [disabled]=\"confirmDisabled()\">\n {{ '@hvy.action.validate' | i18n }}\n </button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"toggleConfirm()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n </div>\n</ng-template>\n" }]
|
|
1291
|
+
args: [{ selector: 'hvy-event-detail', template: "<div class=\"o-hvy-events-detail\">\n <div class=\"o-hvy-events-detail__header\">\n <div class=\"o-hvy-events-detail__header__split\">\n <h1>{{ title ?? '@hvy.event.detail' | i18n }}</h1>\n @if (events.length > 1) {\n @if (canCloseSome) {\n <button class=\"a-btn a-btn--secondary -fix-right\" [disabled]=\"!canCloseSome\" (click)=\"closeAll()\">\n {{ (canCloseSome ? '@hvy.event.log.event.close' : '@hvy.event.log.event.closed') | i18n }}\n </button>\n }\n @if (!canCloseSome) {\n <div\n class=\"a-tooltip\"\n [attr.data-tooltip]=\"'... TODO: get closing comment ...'\"\n data-tooltip-position=\"bottom\"\n >\n <pry-icon iconSvg=\"i\" [height]=\"18\" [width]=\"18\">i</pry-icon>\n </div>\n }\n }\n </div>\n <div class=\"o-hvy-events-detail__header__split\">\n @if (procedure) {\n <button class=\"a-btn a-btn--secondary\" (click)=\"openDeleteModal()\">\n {{ '@hvy.event.log.procedure.delete' | i18n }}\n </button>\n }\n </div>\n </div>\n <div class=\"o-hvy-events-detail__container\">\n <div class=\"o-hvy-events-detail__container__scrollable\">\n <div class=\"o-hvy-events-detail__events\">\n @for (event of events; track event.id; let idx = $index) {\n <div class=\"o-hvy-events-detail__events__event\">\n <div class=\"o-hvy-events-detail__events__event__header\">\n <pry-icon\n iconSvg=\"arrow_down_rounded\"\n [class.-rotated]=\"opened[idx]\"\n (click)=\"toggle(idx)\"\n [width]=\"10\"\n [height]=\"10\"\n ></pry-icon>\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n <h2>{{ event.name }}</h2>\n <hvy-status-display\n [item]=\"event\"\n [modifiable]=\"event.status !== 'DONE'\"\n (modified)=\"changeStatus($event, event)\"\n ></hvy-status-display>\n </div>\n <div class=\"o-hvy-events-detail__events__event__content\">\n @if (!opened[idx]) {\n <div>{{ '@hvy.event.log.event.description' | i18n }} : {{ event.description }}</div>\n <div>{{ '@hvy.event.log.event.address' | i18n }} : {{ event.address }}</div>\n } @else {\n @if (access(event); as accessValue) {\n <div class=\"o-hvy-events-detail__events__event__content__header\">\n <h3>{{ '@hvy.event.log.event.detail' | i18n }}</h3>\n <span class=\"required\">{{ '@hvy.event.log.event.mandatory' | i18n }}</span>\n </div>\n <table>\n <tbody>\n <tr>\n <td>{{ '@hvy.event.log.event.name' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('name', idx)\"\n [value]=\"event.name\"\n (change)=\"modifyEvent(idx, 'name', $event)\"\n [readonly]=\"accessValue.name\"\n [maxLength]=\"50\"\n />\n </td>\n </tr>\n @if (event.id > 0) {\n <tr>\n <td>{{ '@hvy.event.log.event.id' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <input type=\"text\" class=\"a-form-field\" [value]=\"padId.fn(event.id)\" [readonly]=\"true\" />\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.log.event.category' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <pry-select\n [ngModel]=\"event.category\"\n [items]=\"categories(event)\"\n [class.-error]=\"hasError('category', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'category', $event)\"\n i18nPrefix=\"@hvy.event.category.\"\n [disabled]=\"accessValue.category\"\n ></pry-select>\n </td>\n </tr>\n @if (event.category === 'ANOMALY') {\n <tr>\n <td>{{ '@hvy.event.subCategory.name' | i18n }} :</td>\n <td>\n <pry-select\n [ngModel]=\"event.subCategory\"\n [items]=\"subCategories\"\n [class.-error]=\"hasError('subCategory', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'subCategory', $event)\"\n i18nPrefix=\"@hvy.event.subCategory.\"\n [disabled]=\"accessValue.subCategory\"\n ></pry-select>\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.criticality.name' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <pry-select\n [ngModel]=\"event.criticality\"\n [items]=\"criticalities\"\n [class.-error]=\"hasError('criticality', idx)\"\n i18nPrefix=\"@hvy.event.criticality.\"\n [disabled]=\"accessValue.criticality\"\n (ngModelChange)=\"modifyEvent(idx, 'criticality', $event)\"\n ></pry-select>\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.log.event.description' | i18n }}<span class=\"required\">*</span> :</td>\n <td>\n <textarea\n [ngModel]=\"event.description\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('description', idx)\"\n [readonly]=\"accessValue.description\"\n (ngModelChange)=\"modifyEvent(idx, 'description', $event)\"\n [maxLength]=\"256\"\n ></textarea>\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.log.event.address' | i18n }} :</td>\n <td>\n <textarea\n [ngModel]=\"event.address\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('address', idx)\"\n [readonly]=\"accessValue.address\"\n (ngModelChange)=\"modifyEvent(idx, 'address', $event)\"\n [maxLength]=\"256\"\n ></textarea>\n </td>\n </tr>\n @if (event.category !== 'MANIFESTATION') {\n <tr>\n <td>{{ '@hvy.event.source' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"event.externalSourceRef ?? ''\"\n [class.-error]=\"hasError('source', idx)\"\n [readonly]=\"accessValue.source\"\n (change)=\"modifyEvent(idx, 'source', $event)\"\n />\n </td>\n </tr>\n }\n <tr>\n <td>{{ '@hvy.event.equipment' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [value]=\"event.equipment?.name ?? ''\"\n [class.-error]=\"hasError('equipment', idx)\"\n [readonly]=\"accessValue.eqName\"\n (change)=\"changeEquipment(idx, $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.equipmentEntity' | i18n }} :</td>\n <td>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [class.-error]=\"hasError('equipment', idx)\"\n [value]=\"\n (event.equipment?.entity ? '@hvy.event.entity.' + event.equipment?.entity : '') | i18n\n \"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.domain.name' | i18n }} :</td>\n <td>\n <pry-select\n [items]=\"DOMAINS\"\n [ngModel]=\"event.domain\"\n i18nPrefix=\"@hvy.event.domain.\"\n [class.-error]=\"hasError('domain', idx)\"\n (ngModelChange)=\"modifyEvent(idx, 'domain', $event)\"\n [disabled]=\"accessValue.domain\"\n ></pry-select>\n </td>\n </tr>\n <tr>\n <td>\n {{ '@hvy.event.startDate' | i18n }}\n @if (event.category === 'MANIFESTATION') {\n <span class=\"required\">*</span>\n }\n :\n </td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.startDate | forDateTimeLocal\"\n [class.-error]=\"hasError('startDate', idx)\"\n [readonly]=\"accessValue.startDate\"\n (change)=\"modifyEvent(idx, 'startDate', $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>\n {{ '@hvy.event.endDate' | i18n }}\n @if (event.category === 'MANIFESTATION') {\n <span class=\"required\">*</span>\n }\n :\n </td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.endDate | forDateTimeLocal\"\n [class.-error]=\"hasError('endDate', idx)\"\n [readonly]=\"accessValue.endDate\"\n (change)=\"modifyEvent(idx, 'endDate', $event)\"\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.creationDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.creationDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.lastModificationDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.lastModificationDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n <tr>\n <td>{{ '@hvy.event.closeDate' | i18n }} :</td>\n <td>\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [value]=\"event.closeDate | forDateTimeLocal\"\n readonly\n />\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"o-hvy-events-detail__events__event__content__comments\">\n <h3>{{ '@hvy.event.log.event.comments.name' | i18n }} :</h3>\n <textarea\n [placeholder]=\"('@hvy.event.log.event.comments.placeholder' | i18n) + '...'\"\n [(ngModel)]=\"newComentContent\"\n ></textarea>\n <div class=\"o-hvy-events-detail__events__event__content__comments__button\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"newComentContent.length === 0\">\n {{ '@hvy.action.comment' | i18n }}\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n <div class=\"o-hvy-events-detail__procedure\">\n <div class=\"o-hvy-events-detail__procedure__header\">\n <h2>\n {{ (events.length === 1 ? '@hvy.event.log.procedure.name1' : '@hvy.event.log.procedure.name') | i18n }}\n </h2>\n </div>\n @if (procedure) {\n <div class=\"o-hvy-events-detail__procedure__description\">\n <p>{{ procedure.description }}</p>\n </div>\n <div class=\"o-hvy-events-detail__procedure__progress\">\n <p>{{ '@hvy.event.log.procedure.progress' | i18n }}</p>\n <hvy-progress-display [progress]=\"calculatedProgress\"></hvy-progress-display>\n </div>\n <hvy-procedure-actions\n [actions]=\"procedure.actions\"\n (modified)=\"modifiedActions($event)\"\n ></hvy-procedure-actions>\n } @else {\n <button class=\"a-btn a-btn--secondary\" [disabled]=\"!canAssociateProcedure\" (click)=\"openAssociationModal()\">\n {{ '@hvy.action.associate' | i18n }}\n </button>\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #confirmDialog>\n <div\n class=\"o-hvy-close-confirm__dialog\"\n aria-labelledby=\"confirm\"\n tabindex=\"-1\"\n id=\"choice\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <h2>\n {{\n (changeStatusContext.events.length === 1 ? '@hvy.event.close.oneTitle' : '@hvy.event.close.multiTitle') | i18n\n }}\n </h2>\n <p>{{ (changeStatusContext.events.length === 1 ? '@hvy.event.close.one' : '@hvy.event.close.multi') | i18n }}</p>\n <ul>\n @for (event of changeStatusContext.events; track event.id) {\n <li>{{ event.name }}</li>\n }\n </ul>\n <p class=\"o-hvy-close-confirm__dialog__comment-title\">\n {{ '@hvy.event.close.comment' | i18n }}<span class=\"required\">*</span> :\n </p>\n <div class=\"o-hvy-close-confirm__dialog__comment\">\n <textarea [(ngModel)]=\"changeStatusContext.comment\" class=\"a-form-field\" [maxLength]=\"255\"></textarea>\n </div>\n <div class=\"o-hvy-close-confirm__dialog__actions\">\n <button class=\"a-btn a-btn--primary\" (click)=\"confirmedClose()\" [disabled]=\"confirmDisabled()\">\n {{ '@hvy.action.validate' | i18n }}\n </button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"toggleConfirm()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n </div>\n</ng-template>\n" }]
|
|
1290
1292
|
}], ctorParameters: () => [{ type: EquipmentService }, { type: i1$1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i1$3.PrySnackbarService }, { type: i1$3.PryI18nService }, { type: i1$3.PryDialogService }], propDecorators: { modifiedEvents: [{
|
|
1291
1293
|
type: Output
|
|
1292
1294
|
}], modifiedProcedure: [{
|