@c8y/ngx-components 1018.0.82 → 1018.0.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/core/common/files.service.d.ts +1 -1
  2. package/core/drop-area/drop-area.component.d.ts +3 -1
  3. package/esm2020/core/common/bytes.pipe.mjs +3 -3
  4. package/esm2020/core/common/files.service.mjs +4 -4
  5. package/esm2020/core/drop-area/drop-area.component.mjs +16 -5
  6. package/esm2020/core/dynamic-forms/file/file.type.component.mjs +4 -3
  7. package/esm2020/core/dynamic-forms/json-schema/c8y-json-schema.service.mjs +12 -1
  8. package/esm2020/core/file-picker/file-picker.component.mjs +1 -1
  9. package/esm2020/ecosystem/shared/add-application.component.mjs +1 -1
  10. package/esm2020/ecosystem/shared/upload-archive.component.mjs +1 -1
  11. package/esm2020/protocol-opcua/opcua-server-config.component.mjs +1 -1
  12. package/esm2020/sub-assets/asset-properties-item.component.mjs +3 -3
  13. package/esm2020/trusted-certificates/add-trusted-certificate.component.mjs +1 -1
  14. package/esm2020/widgets/implementations/image/image-widget-config/image-widget-config.component.mjs +2 -2
  15. package/esm2020/widgets/implementations/markdown/markdown-widget-config/markdown-widget-config.component.mjs +1 -1
  16. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  17. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  18. package/fesm2015/c8y-ngx-components-protocol-opcua.mjs +1 -1
  19. package/fesm2015/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  20. package/fesm2015/c8y-ngx-components-sub-assets.mjs +2 -2
  21. package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
  22. package/fesm2015/c8y-ngx-components-trusted-certificates.mjs +1 -1
  23. package/fesm2015/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  24. package/fesm2015/c8y-ngx-components-widgets-implementations-image.mjs +1 -1
  25. package/fesm2015/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  26. package/fesm2015/c8y-ngx-components-widgets-implementations-markdown.mjs +1 -1
  27. package/fesm2015/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  28. package/fesm2015/c8y-ngx-components.mjs +27 -11
  29. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  30. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  31. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  32. package/fesm2020/c8y-ngx-components-protocol-opcua.mjs +1 -1
  33. package/fesm2020/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  34. package/fesm2020/c8y-ngx-components-sub-assets.mjs +2 -2
  35. package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
  36. package/fesm2020/c8y-ngx-components-trusted-certificates.mjs +1 -1
  37. package/fesm2020/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  38. package/fesm2020/c8y-ngx-components-widgets-implementations-image.mjs +1 -1
  39. package/fesm2020/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  40. package/fesm2020/c8y-ngx-components-widgets-implementations-markdown.mjs +1 -1
  41. package/fesm2020/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  42. package/fesm2020/c8y-ngx-components.mjs +34 -11
  43. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  44. package/package.json +1 -1
@@ -126,7 +126,7 @@ export class ImageWidgetConfigComponent {
126
126
  }
127
127
  }
128
128
  ImageWidgetConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ImageWidgetConfigComponent, deps: [{ token: i1.FormBuilder }, { token: i1.NgForm }, { token: i2.FilesService }, { token: i2.AlertService }, { token: i3.ImageWidgetService }, { token: i4.WidgetConfigComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
129
- ImageWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ImageWidgetConfigComponent, selector: "c8y-image-widget-config", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"p-l-24 p-r-24\">\n <div [formGroup]=\"formGroup\" class=\"row p-t-8\">\n <div class=\"col-md-12\">\n <c8y-form-group>\n <label>{{ 'Image' | translate }}</label>\n <c8y-drop-area\n formControlName=\"images\"\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [accept]=\"'image'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <c8y-messages>\n <c8y-message\n name=\"maxFileSizeReached\"\n [text]=\"\n 'The maximum image size is {{ maxFileSize }} kB. The selected image has a size of {{ actualFileSize }} kB.'\n | translate\n \"\n ></c8y-message>\n <c8y-message\n name=\"wrongFileType\"\n [text]=\"'Wrong file type, select an image.' | translate\"\n ></c8y-message>\n <c8y-message name=\"maxlength\" [text]=\"'Only select one image.' | translate\"></c8y-message>\n <c8y-message name=\"required\" [text]=\"'An image is required.' | translate\"></c8y-message>\n <c8y-message name=\"minlength\" [text]=\"'An image is required.' | translate\"></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <ng-container *ngIf=\"imageSrc$ | async as src\">\n <div class=\"col-md-6\">\n <div class=\"legend form-block\">\n {{ 'Size and alignment' | translate }}\n </div>\n <div [formGroupName]=\"'styling'\">\n <c8y-form-group>\n <label>\n {{ 'Image display' | translate }}\n </label>\n <ul class=\"list-group separator-top-bottom\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0\"\n *ngFor=\"let objectFitOption of objectFitOptions; let i = index\"\n >\n <label class=\"c8y-radio\">\n <input\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n formControlName=\"objectFit\"\n [value]=\"objectFitOption.value\"\n />\n <span></span>\n <span class=\"l-h-1\">\n {{ objectFitOption.label | translate }}\n <br />\n <small class=\"text-muted\">\n {{ objectFitOption.description | translate }}\n </small>\n </span>\n </label>\n </li>\n </ul>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label>{{ 'Horizontal alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"objectPositionX\">\n <option [ngValue]=\"'left'\">\n {{ 'left`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'right'\">\n {{ 'right`horizontal alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label>{{ 'Vertical alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"objectPositionY\">\n <option [ngValue]=\"'top'\">\n {{ 'top`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'bottom'\">\n {{ 'bottom`vertical alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"legend form-block\">{{ 'Preview' | translate }}</div>\n <div class=\"form-group\">\n <div\n class=\"border-top border-right border-bottom border-left inner-scroll\"\n style=\"height: 300px\"\n >\n <img\n [src]=\"src\"\n [ngClass]=\"styling ? 'fit-h fit-w' : 'img-responsive'\"\n [ngStyle]=\"styling\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"col-md-12 d-flex j-c-center\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
129
+ ImageWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ImageWidgetConfigComponent, selector: "c8y-image-widget-config", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"p-l-24 p-r-24\">\n <div [formGroup]=\"formGroup\" class=\"row p-t-8\">\n <div class=\"col-md-12\">\n <c8y-form-group>\n <label>{{ 'Image' | translate }}</label>\n <c8y-drop-area\n formControlName=\"images\"\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [accept]=\"'image'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <c8y-messages>\n <c8y-message\n name=\"maxFileSizeReached\"\n [text]=\"\n 'The maximum image size is {{ maxFileSize }} kB. The selected image has a size of {{ actualFileSize }} kB.'\n | translate\n \"\n ></c8y-message>\n <c8y-message\n name=\"wrongFileType\"\n [text]=\"'Wrong file type, select an image.' | translate\"\n ></c8y-message>\n <c8y-message name=\"maxlength\" [text]=\"'Only select one image.' | translate\"></c8y-message>\n <c8y-message name=\"required\" [text]=\"'An image is required.' | translate\"></c8y-message>\n <c8y-message name=\"minlength\" [text]=\"'An image is required.' | translate\"></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <ng-container *ngIf=\"imageSrc$ | async as src\">\n <div class=\"col-md-6\">\n <div class=\"legend form-block\">\n {{ 'Size and alignment' | translate }}\n </div>\n <div [formGroupName]=\"'styling'\">\n <c8y-form-group>\n <label>\n {{ 'Image display' | translate }}\n </label>\n <ul class=\"list-group separator-top-bottom\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0\"\n *ngFor=\"let objectFitOption of objectFitOptions; let i = index\"\n >\n <label class=\"c8y-radio\">\n <input\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n formControlName=\"objectFit\"\n [value]=\"objectFitOption.value\"\n />\n <span></span>\n <span class=\"l-h-1\">\n {{ objectFitOption.label | translate }}\n <br />\n <small class=\"text-muted\">\n {{ objectFitOption.description | translate }}\n </small>\n </span>\n </label>\n </li>\n </ul>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label>{{ 'Horizontal alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"objectPositionX\">\n <option [ngValue]=\"'left'\">\n {{ 'left`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'right'\">\n {{ 'right`horizontal alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label>{{ 'Vertical alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"objectPositionY\">\n <option [ngValue]=\"'top'\">\n {{ 'top`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'bottom'\">\n {{ 'bottom`vertical alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"legend form-block\">{{ 'Preview' | translate }}</div>\n <div class=\"form-group\">\n <div\n class=\"border-top border-right border-bottom border-left inner-scroll\"\n style=\"height: 300px\"\n >\n <img\n [src]=\"src\"\n [ngClass]=\"styling ? 'fit-h fit-w' : 'img-responsive'\"\n [ngStyle]=\"styling\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"col-md-12 d-flex j-c-center\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
130
130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ImageWidgetConfigComponent, decorators: [{
131
131
  type: Component,
132
132
  args: [{ selector: 'c8y-image-widget-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-l-24 p-r-24\">\n <div [formGroup]=\"formGroup\" class=\"row p-t-8\">\n <div class=\"col-md-12\">\n <c8y-form-group>\n <label>{{ 'Image' | translate }}</label>\n <c8y-drop-area\n formControlName=\"images\"\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [accept]=\"'image'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <c8y-messages>\n <c8y-message\n name=\"maxFileSizeReached\"\n [text]=\"\n 'The maximum image size is {{ maxFileSize }} kB. The selected image has a size of {{ actualFileSize }} kB.'\n | translate\n \"\n ></c8y-message>\n <c8y-message\n name=\"wrongFileType\"\n [text]=\"'Wrong file type, select an image.' | translate\"\n ></c8y-message>\n <c8y-message name=\"maxlength\" [text]=\"'Only select one image.' | translate\"></c8y-message>\n <c8y-message name=\"required\" [text]=\"'An image is required.' | translate\"></c8y-message>\n <c8y-message name=\"minlength\" [text]=\"'An image is required.' | translate\"></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <ng-container *ngIf=\"imageSrc$ | async as src\">\n <div class=\"col-md-6\">\n <div class=\"legend form-block\">\n {{ 'Size and alignment' | translate }}\n </div>\n <div [formGroupName]=\"'styling'\">\n <c8y-form-group>\n <label>\n {{ 'Image display' | translate }}\n </label>\n <ul class=\"list-group separator-top-bottom\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0\"\n *ngFor=\"let objectFitOption of objectFitOptions; let i = index\"\n >\n <label class=\"c8y-radio\">\n <input\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n formControlName=\"objectFit\"\n [value]=\"objectFitOption.value\"\n />\n <span></span>\n <span class=\"l-h-1\">\n {{ objectFitOption.label | translate }}\n <br />\n <small class=\"text-muted\">\n {{ objectFitOption.description | translate }}\n </small>\n </span>\n </label>\n </li>\n </ul>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label>{{ 'Horizontal alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"objectPositionX\">\n <option [ngValue]=\"'left'\">\n {{ 'left`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'right'\">\n {{ 'right`horizontal alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label>{{ 'Vertical alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"objectPositionY\">\n <option [ngValue]=\"'top'\">\n {{ 'top`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'bottom'\">\n {{ 'bottom`vertical alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"legend form-block\">{{ 'Preview' | translate }}</div>\n <div class=\"form-group\">\n <div\n class=\"border-top border-right border-bottom border-left inner-scroll\"\n style=\"height: 300px\"\n >\n <img\n [src]=\"src\"\n [ngClass]=\"styling ? 'fit-h fit-w' : 'img-responsive'\"\n [ngStyle]=\"styling\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"col-md-12 d-flex j-c-center\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n </div>\n</div>\n" }]
@@ -135,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
135
135
  }] }]; }, propDecorators: { config: [{
136
136
  type: Input
137
137
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbWFnZS9pbWFnZS13aWRnZXQtY29uZmlnL2ltYWdlLXdpZGdldC1jb25maWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvaW1hZ2UvaW1hZ2Utd2lkZ2V0LWNvbmZpZy9pbWFnZS13aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUNMLGFBQWEsRUFFYixZQUFZLEVBQ1osWUFBWSxFQUNaLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFJM0IsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFhLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFjLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7O0FBTzdELE1BQU0sT0FB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Z0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzswQkFnRGhFLFFBQVE7NENBN0NGLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5pbXBvcnQge1xuICBDOHlWYWxpZGF0b3JzLFxuICBPbkJlZm9yZVNhdmUsXG4gIEZpbGVzU2VydmljZSxcbiAgQWxlcnRTZXJ2aWNlLFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIGRlZmF1bHRPYmplY3RGaXRWYWx1ZSxcbiAgZGVmYXVsdE9iamVjdFBvc2l0aW9uVmFsdWUsXG4gIEltYWdlV2lkZ2V0Q29uZmlnLFxuICBJbWFnZVdpZGdldENvbmZpZ1N0eWxpbmcsXG4gIEltYWdlV2lkZ2V0U3R5bGVcbn0gZnJvbSAnLi4vaW1hZ2Utd2lkZ2V0Lm1vZGVsJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW1hZ2VXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi4vaW1hZ2Utd2lkZ2V0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktaW1hZ2Utd2lkZ2V0LWNvbmZpZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS13aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sJyxcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJbWFnZVdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkJlZm9yZVNhdmUge1xuICBASW5wdXQoKSBjb25maWc6IEltYWdlV2lkZ2V0Q29uZmlnO1xuICBpbWFnZUJpbmFyeUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcbiAgaW1hZ2VTcmMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIGZpbGVGcm9tQ29uZmlnOiBGaWxlO1xuICBzdHlsaW5nOiBJbWFnZVdpZGdldFN0eWxlIHwgbnVsbDtcbiAgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIG9iamVjdEZpdE9wdGlvbnMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0NvbnRhaW5gdmVyYiwgaW1hZ2UgZml0dGluZyBvcHRpb25gJyksXG4gICAgICB2YWx1ZTogJ2NvbnRhaW4nLFxuICAgICAgZGVzY3JpcHRpb246IGdldHRleHQoXG4gICAgICAgICdUaGUgaW1hZ2UgaXMgZW50aXJlbHkgZGlzcGxheWVkIHdpdGhpbiB0aGUgd2lkZ2V0IHdoaWxlIHByZXNlcnZpbmcgdGhlIGFzcGVjdCByYXRpby4nXG4gICAgICApXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQ292ZXJgdmVyYiwgaW1hZ2UgZml0dGluZyBvcHRpb25gJyksXG4gICAgICB2YWx1ZTogJ2NvdmVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KFxuICAgICAgICAnVGhlIGltYWdlIGlzIHJlc2l6ZWQgdG8gZmlsbCB0aGUgd2lkZ2V0IHdoaWxlIHByZXNlcnZpbmcgdGhlIGFzcGVjdCByYXRpby4gT3ZlcmZsb3dpbmcgYXJlYXMgYXJlIGNsaXBwZWQuJ1xuICAgICAgKVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0ZpbGxgdmVyYiwgaW1hZ2UgZml0dGluZyBvcHRpb25gJyksXG4gICAgICB2YWx1ZTogJ2ZpbGwnLFxuICAgICAgZGVzY3JpcHRpb246IGdldHRleHQoXG4gICAgICAgICdUaGUgaW1hZ2UgaXMgc3RyZXRjaGVkIHRvIGZpbGwgdGhlIHdpZGdldCwgb3ZlcnJpZGluZyB0aGUgYXNwZWN0LXJhdGlvLidcbiAgICAgIClcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdGdWxsIHdpZHRoYGltYWdlIGZpdHRpbmcgb3B0aW9uYCcpLFxuICAgICAgdmFsdWU6ICdmdWxsLXdpZHRoJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KFxuICAgICAgICBgVGhlIGltYWdlIGlzIHJlc2l6ZWQgdG8gZml0IHRoZSB3aWRnZXQncyB3aWR0aCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBhc3BlY3QgcmF0aW8uIE92ZXJmbG93aW5nIGFyZWEgaXMgc2Nyb2xsYWJsZS5gXG4gICAgICApXG4gICAgfVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZm9ybTogTmdGb3JtLFxuICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVzU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbWFnZVdpZGdldDogSW1hZ2VXaWRnZXRTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgd2lkZ2V0Q29uZmlnOiBXaWRnZXRDb25maWdDb21wb25lbnRcbiAgKSB7fVxuXG4gIGFzeW5jIG9uQmVmb3JlU2F2ZShjb25maWc/OiBJbWFnZVdpZGdldENvbmZpZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUZyb21Gb3JtID0gdGhpcy5nZXRGaWxlRnJvbUZvcm1WYWx1ZSh0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gICAgaWYgKGZpbGVGcm9tRm9ybSAmJiBmaWxlRnJvbUZvcm0gIT09IHRoaXMuZmlsZUZyb21Db25maWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltYWdlQmluYXJ5SWQgPSBhd2FpdCB0aGlzLmltYWdlV2lkZ2V0LnVwbG9hZEZpbGUoZmlsZUZyb21Gb3JtLCB7XG4gICAgICAgICAgZGFzaGJvYXJkTW9JZDogdGhpcy5nZXREYXNoYm9hcmRNb0lkKCksXG4gICAgICAgICAgaXNEZXZpY2VUeXBlRGFzaGJvYXJkOiB0aGlzLndpZGdldENvbmZpZz8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKGNvbmZpZywgeyBpbWFnZUJpbmFyeUlkIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihnZXR0ZXh0KCdVbmFibGUgdG8gdXBsb2FkIGltYWdlLicpLCBlPy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdHlsaW5nOiBJbWFnZVdpZGdldENvbmZpZ1N0eWxpbmcgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZS5zdHlsaW5nO1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB7IHN0eWxpbmcgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICBjb25zdCBpbWFnZUZyb21Db25maWcgPSB0aGlzLmltYWdlQmluYXJ5SWQkLnBpcGUoXG4gICAgICBmaWx0ZXIoaWQgPT4gISFpZCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFwKCgpID0+ICh0aGlzLmxvYWRpbmcgPSB0cnVlKSksXG4gICAgICBzd2l0Y2hNYXAoaW1hZ2VCaW5hcnlJZCA9PiB0aGlzLmltYWdlV2lkZ2V0LmdldEltYWdlRGV0YWlscyhpbWFnZUJpbmFyeUlkKSksXG4gICAgICB0YXAoZGV0YWlscyA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbGVGcm9tQ29uZmlnID0gZGV0YWlscy5maWxlO1xuICAgICAgICBpZiAoZGV0YWlscykge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoeyBpbWFnZXM6IFt7IGZpbGU6IGRldGFpbHMuZmlsZSwgbmFtZTogZGV0YWlscy5maWxlLm5hbWUgfV0gfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWFwKGRldGFpbHMgPT4gZGV0YWlscz8uYmFzZTY0KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLmdldEZpbGVGcm9tRm9ybVZhbHVlKHZhbHVlKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKGZpbGUgPT4gKGZpbGUgPyB0aGlzLmZpbGVTZXJ2aWNlLnRvQmFzZTY0KGZpbGUpIDogUHJvbWlzZS5yZXNvbHZlKCcnKSkpXG4gICAgKTtcbiAgICB0aGlzLmltYWdlU3JjJCA9IG1lcmdlKGltYWdlRnJvbUNvbmZpZywgc2VsZWN0ZWRGaWxlKS5waXBlKFxuICAgICAgbWFwKGJhc2U2NCA9PiAoYmFzZTY0ID8gKGJhc2U2NCBhcyBzdHJpbmcpIDogJycpKVxuICAgICk7XG4gICAgdGhpcy5pbWFnZUJpbmFyeUlkJC5uZXh0KHRoaXMuY29uZmlnPy5pbWFnZUJpbmFyeUlkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERhc2hib2FyZE1vSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldCh0aGlzLndpZGdldENvbmZpZywgJ21vLmlkJywgbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRGb3JtKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN0eWxpbmdGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIG9iamVjdEZpdDogW1xuICAgICAgICAvLyBmYWxsYmFjayB0byAnZnVsbC13aWR0aCcgZm9yIG9sZCBsZWdhY3kgd2lkZ2V0cywgbmV3bHkgY3JlYXRlZCB3aWRnZXRzIHNob3VsZCB1c2UgZGVmYXVsdE9iamVjdEZpdFZhbHVlXG4gICAgICAgIHRoaXMuY29uZmlnLmltYWdlQmluYXJ5SWQgJiYgIXRoaXMuY29uZmlnLnN0eWxpbmcgPyAnZnVsbC13aWR0aCcgOiBkZWZhdWx0T2JqZWN0Rml0VmFsdWUsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgXSxcbiAgICAgIG9iamVjdFBvc2l0aW9uWDogW2RlZmF1bHRPYmplY3RQb3NpdGlvblZhbHVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgb2JqZWN0UG9zaXRpb25ZOiBbZGVmYXVsdE9iamVjdFBvc2l0aW9uVmFsdWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaW1hZ2VzOiBbXG4gICAgICAgIG51bGwsXG4gICAgICAgIFtcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxuICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEpLFxuICAgICAgICAgIEM4eVZhbGlkYXRvcnMuZmlsZXNWYWxpZGF0b3IoeyBtYXhpbXVtRmlsZVNpemVJbktiOiAxMDAwLCB0eXBlUHJlZml4OiAnaW1hZ2UvJyB9KVxuICAgICAgICBdXG4gICAgICBdLFxuICAgICAgc3R5bGluZzogc3R5bGluZ0Zvcm1Hcm91cFxuICAgIH0pO1xuICAgIHRoaXMuZm9ybS5mb3JtLmFkZENvbnRyb2woJ2NvbmZpZycsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZShjaGFuZ2VzID0+IHRoaXMuc2V0U3R5bGluZyhjaGFuZ2VzKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVGcm9tRm9ybVZhbHVlKGZvcm1WYWx1ZTogYW55KTogRmlsZSB8IG51bGwge1xuICAgIGNvbnN0IGltYWdlczogYW55W10gPSBmb3JtVmFsdWU/LmltYWdlcyB8fCBbXTtcbiAgICByZXR1cm4gaW1hZ2VzWzBdPy5maWxlIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNldFN0eWxpbmcoY29uZmlnOiBJbWFnZVdpZGdldENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuc3R5bGluZyA9IHRoaXMuaW1hZ2VXaWRnZXQuZ2V0U3R5bGluZyhjb25maWcpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1sLTI0IHAtci0yNFwiPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgY2xhc3M9XCJyb3cgcC10LThcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDxsYWJlbD57eyAnSW1hZ2UnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgPGM4eS1kcm9wLWFyZWFcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbWFnZXNcIlxuICAgICAgICAgIGNsYXNzPVwiZHJvcC1hcmVhLXNtXCJcbiAgICAgICAgICBbaWNvbl09XCIndXBsb2FkJ1wiXG4gICAgICAgICAgW2FjY2VwdF09XCInaW1hZ2UnXCJcbiAgICAgICAgICBbbWF4QWxsb3dlZEZpbGVzXT1cIjFcIlxuICAgICAgICA+PC9jOHktZHJvcC1hcmVhPlxuICAgICAgICA8Yzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgbmFtZT1cIm1heEZpbGVTaXplUmVhY2hlZFwiXG4gICAgICAgICAgICBbdGV4dF09XCJcbiAgICAgICAgICAgICAgJ1RoZSBtYXhpbXVtIGltYWdlIHNpemUgaXMge3sgbWF4RmlsZVNpemUgfX0ga0IuIFRoZSBzZWxlY3RlZCBpbWFnZSBoYXMgYSBzaXplIG9mIHt7IGFjdHVhbEZpbGVTaXplIH19IGtCLidcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgIG5hbWU9XCJ3cm9uZ0ZpbGVUeXBlXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIidXcm9uZyBmaWxlIHR5cGUsIHNlbGVjdCBhbiBpbWFnZS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2UgbmFtZT1cIm1heGxlbmd0aFwiIFt0ZXh0XT1cIidPbmx5IHNlbGVjdCBvbmUgaW1hZ2UuJyB8IHRyYW5zbGF0ZVwiPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgPGM4eS1tZXNzYWdlIG5hbWU9XCJyZXF1aXJlZFwiIFt0ZXh0XT1cIidBbiBpbWFnZSBpcyByZXF1aXJlZC4nIHwgdHJhbnNsYXRlXCI+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2UgbmFtZT1cIm1pbmxlbmd0aFwiIFt0ZXh0XT1cIidBbiBpbWFnZSBpcyByZXF1aXJlZC4nIHwgdHJhbnNsYXRlXCI+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWFnZVNyYyQgfCBhc3luYyBhcyBzcmNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2tcIj5cbiAgICAgICAgICB7eyAnU2l6ZSBhbmQgYWxpZ25tZW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCInc3R5bGluZydcIj5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgIHt7ICdJbWFnZSBkaXNwbGF5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgc2VwYXJhdG9yLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGEtaS1jZW50ZXIgcC1sLTBcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvYmplY3RGaXRPcHRpb24gb2Ygb2JqZWN0Rml0T3B0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktcmFkaW9cIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2dyb3VwcmFkaW9jb250ZW50Y2xhc3MnICsgaVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9iamVjdEZpdFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvYmplY3RGaXRPcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibC1oLTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgb2JqZWN0Rml0T3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb2JqZWN0Rml0T3B0aW9uLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnSG9yaXpvbnRhbCBhbGlnbm1lbnQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwib2JqZWN0UG9zaXRpb25YXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiJ2xlZnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ2xlZnRgaG9yaXpvbnRhbCBhbGlnbm1lbnRgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCInY2VudGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdjZW50ZXJgaG9yaXpvbnRhbCBhbGlnbm1lbnRgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIncmlnaHQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ3JpZ2h0YGhvcml6b250YWwgYWxpZ25tZW50YCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ1ZlcnRpY2FsIGFsaWdubWVudCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJvYmplY3RQb3NpdGlvbllcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIndG9wJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICd0b3BgdmVydGljYWwgYWxpZ25tZW50YCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiJ2NlbnRlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAnY2VudGVyYHZlcnRpY2FsIGFsaWdubWVudGAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIidib3R0b20nXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ2JvdHRvbWB2ZXJ0aWNhbCBhbGlnbm1lbnRgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrXCI+e3sgJ1ByZXZpZXcnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItdG9wIGJvcmRlci1yaWdodCBib3JkZXItYm90dG9tIGJvcmRlci1sZWZ0IGlubmVyLXNjcm9sbFwiXG4gICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzAwcHhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgW3NyY109XCJzcmNcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzdHlsaW5nID8gJ2ZpdC1oIGZpdC13JyA6ICdpbWctcmVzcG9uc2l2ZSdcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJzdHlsaW5nXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBkLWZsZXggai1jLWNlbnRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbWFnZS9pbWFnZS13aWRnZXQtY29uZmlnL2ltYWdlLXdpZGdldC1jb25maWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvaW1hZ2UvaW1hZ2Utd2lkZ2V0LWNvbmZpZy9pbWFnZS13aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUNMLGFBQWEsRUFFYixZQUFZLEVBQ1osWUFBWSxFQUNaLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFJM0IsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFhLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFjLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7O0FBTzdELE1BQU0sT0FB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Z0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzswQkFnRGhFLFFBQVE7NENBN0NGLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5pbXBvcnQge1xuICBDOHlWYWxpZGF0b3JzLFxuICBPbkJlZm9yZVNhdmUsXG4gIEZpbGVzU2VydmljZSxcbiAgQWxlcnRTZXJ2aWNlLFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIGRlZmF1bHRPYmplY3RGaXRWYWx1ZSxcbiAgZGVmYXVsdE9iamVjdFBvc2l0aW9uVmFsdWUsXG4gIEltYWdlV2lkZ2V0Q29uZmlnLFxuICBJbWFnZVdpZGdldENvbmZpZ1N0eWxpbmcsXG4gIEltYWdlV2lkZ2V0U3R5bGVcbn0gZnJvbSAnLi4vaW1hZ2Utd2lkZ2V0Lm1vZGVsJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW1hZ2VXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi4vaW1hZ2Utd2lkZ2V0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktaW1hZ2Utd2lkZ2V0LWNvbmZpZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS13aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sJyxcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJbWFnZVdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkJlZm9yZVNhdmUge1xuICBASW5wdXQoKSBjb25maWc6IEltYWdlV2lkZ2V0Q29uZmlnO1xuICBpbWFnZUJpbmFyeUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcbiAgaW1hZ2VTcmMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIGZpbGVGcm9tQ29uZmlnOiBGaWxlO1xuICBzdHlsaW5nOiBJbWFnZVdpZGdldFN0eWxlIHwgbnVsbDtcbiAgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIG9iamVjdEZpdE9wdGlvbnMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0NvbnRhaW5gdmVyYiwgaW1hZ2UgZml0dGluZyBvcHRpb25gJyksXG4gICAgICB2YWx1ZTogJ2NvbnRhaW4nLFxuICAgICAgZGVzY3JpcHRpb246IGdldHRleHQoXG4gICAgICAgICdUaGUgaW1hZ2UgaXMgZW50aXJlbHkgZGlzcGxheWVkIHdpdGhpbiB0aGUgd2lkZ2V0IHdoaWxlIHByZXNlcnZpbmcgdGhlIGFzcGVjdCByYXRpby4nXG4gICAgICApXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQ292ZXJgdmVyYiwgaW1hZ2UgZml0dGluZyBvcHRpb25gJyksXG4gICAgICB2YWx1ZTogJ2NvdmVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KFxuICAgICAgICAnVGhlIGltYWdlIGlzIHJlc2l6ZWQgdG8gZmlsbCB0aGUgd2lkZ2V0IHdoaWxlIHByZXNlcnZpbmcgdGhlIGFzcGVjdCByYXRpby4gT3ZlcmZsb3dpbmcgYXJlYXMgYXJlIGNsaXBwZWQuJ1xuICAgICAgKVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0ZpbGxgdmVyYiwgaW1hZ2UgZml0dGluZyBvcHRpb25gJyksXG4gICAgICB2YWx1ZTogJ2ZpbGwnLFxuICAgICAgZGVzY3JpcHRpb246IGdldHRleHQoXG4gICAgICAgICdUaGUgaW1hZ2UgaXMgc3RyZXRjaGVkIHRvIGZpbGwgdGhlIHdpZGdldCwgb3ZlcnJpZGluZyB0aGUgYXNwZWN0LXJhdGlvLidcbiAgICAgIClcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdGdWxsIHdpZHRoYGltYWdlIGZpdHRpbmcgb3B0aW9uYCcpLFxuICAgICAgdmFsdWU6ICdmdWxsLXdpZHRoJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KFxuICAgICAgICBgVGhlIGltYWdlIGlzIHJlc2l6ZWQgdG8gZml0IHRoZSB3aWRnZXQncyB3aWR0aCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBhc3BlY3QgcmF0aW8uIE92ZXJmbG93aW5nIGFyZWEgaXMgc2Nyb2xsYWJsZS5gXG4gICAgICApXG4gICAgfVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZm9ybTogTmdGb3JtLFxuICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVzU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbWFnZVdpZGdldDogSW1hZ2VXaWRnZXRTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgd2lkZ2V0Q29uZmlnOiBXaWRnZXRDb25maWdDb21wb25lbnRcbiAgKSB7fVxuXG4gIGFzeW5jIG9uQmVmb3JlU2F2ZShjb25maWc/OiBJbWFnZVdpZGdldENvbmZpZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUZyb21Gb3JtID0gdGhpcy5nZXRGaWxlRnJvbUZvcm1WYWx1ZSh0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gICAgaWYgKGZpbGVGcm9tRm9ybSAmJiBmaWxlRnJvbUZvcm0gIT09IHRoaXMuZmlsZUZyb21Db25maWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltYWdlQmluYXJ5SWQgPSBhd2FpdCB0aGlzLmltYWdlV2lkZ2V0LnVwbG9hZEZpbGUoZmlsZUZyb21Gb3JtLCB7XG4gICAgICAgICAgZGFzaGJvYXJkTW9JZDogdGhpcy5nZXREYXNoYm9hcmRNb0lkKCksXG4gICAgICAgICAgaXNEZXZpY2VUeXBlRGFzaGJvYXJkOiB0aGlzLndpZGdldENvbmZpZz8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKGNvbmZpZywgeyBpbWFnZUJpbmFyeUlkIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihnZXR0ZXh0KCdVbmFibGUgdG8gdXBsb2FkIGltYWdlLicpLCBlPy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdHlsaW5nOiBJbWFnZVdpZGdldENvbmZpZ1N0eWxpbmcgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZS5zdHlsaW5nO1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB7IHN0eWxpbmcgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICBjb25zdCBpbWFnZUZyb21Db25maWcgPSB0aGlzLmltYWdlQmluYXJ5SWQkLnBpcGUoXG4gICAgICBmaWx0ZXIoaWQgPT4gISFpZCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFwKCgpID0+ICh0aGlzLmxvYWRpbmcgPSB0cnVlKSksXG4gICAgICBzd2l0Y2hNYXAoaW1hZ2VCaW5hcnlJZCA9PiB0aGlzLmltYWdlV2lkZ2V0LmdldEltYWdlRGV0YWlscyhpbWFnZUJpbmFyeUlkKSksXG4gICAgICB0YXAoZGV0YWlscyA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbGVGcm9tQ29uZmlnID0gZGV0YWlscy5maWxlO1xuICAgICAgICBpZiAoZGV0YWlscykge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoeyBpbWFnZXM6IFt7IGZpbGU6IGRldGFpbHMuZmlsZSwgbmFtZTogZGV0YWlscy5maWxlLm5hbWUgfV0gfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWFwKGRldGFpbHMgPT4gZGV0YWlscz8uYmFzZTY0KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLmdldEZpbGVGcm9tRm9ybVZhbHVlKHZhbHVlKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKGZpbGUgPT4gKGZpbGUgPyB0aGlzLmZpbGVTZXJ2aWNlLnRvQmFzZTY0KGZpbGUpIDogUHJvbWlzZS5yZXNvbHZlKCcnKSkpXG4gICAgKTtcbiAgICB0aGlzLmltYWdlU3JjJCA9IG1lcmdlKGltYWdlRnJvbUNvbmZpZywgc2VsZWN0ZWRGaWxlKS5waXBlKFxuICAgICAgbWFwKGJhc2U2NCA9PiAoYmFzZTY0ID8gKGJhc2U2NCBhcyBzdHJpbmcpIDogJycpKVxuICAgICk7XG4gICAgdGhpcy5pbWFnZUJpbmFyeUlkJC5uZXh0KHRoaXMuY29uZmlnPy5pbWFnZUJpbmFyeUlkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERhc2hib2FyZE1vSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldCh0aGlzLndpZGdldENvbmZpZywgJ21vLmlkJywgbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRGb3JtKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN0eWxpbmdGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIG9iamVjdEZpdDogW1xuICAgICAgICAvLyBmYWxsYmFjayB0byAnZnVsbC13aWR0aCcgZm9yIG9sZCBsZWdhY3kgd2lkZ2V0cywgbmV3bHkgY3JlYXRlZCB3aWRnZXRzIHNob3VsZCB1c2UgZGVmYXVsdE9iamVjdEZpdFZhbHVlXG4gICAgICAgIHRoaXMuY29uZmlnLmltYWdlQmluYXJ5SWQgJiYgIXRoaXMuY29uZmlnLnN0eWxpbmcgPyAnZnVsbC13aWR0aCcgOiBkZWZhdWx0T2JqZWN0Rml0VmFsdWUsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgXSxcbiAgICAgIG9iamVjdFBvc2l0aW9uWDogW2RlZmF1bHRPYmplY3RQb3NpdGlvblZhbHVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgb2JqZWN0UG9zaXRpb25ZOiBbZGVmYXVsdE9iamVjdFBvc2l0aW9uVmFsdWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaW1hZ2VzOiBbXG4gICAgICAgIG51bGwsXG4gICAgICAgIFtcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxuICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEpLFxuICAgICAgICAgIEM4eVZhbGlkYXRvcnMuZmlsZXNWYWxpZGF0b3IoeyBtYXhpbXVtRmlsZVNpemVJbktiOiAxMDAwLCB0eXBlUHJlZml4OiAnaW1hZ2UvJyB9KVxuICAgICAgICBdXG4gICAgICBdLFxuICAgICAgc3R5bGluZzogc3R5bGluZ0Zvcm1Hcm91cFxuICAgIH0pO1xuICAgIHRoaXMuZm9ybS5mb3JtLmFkZENvbnRyb2woJ2NvbmZpZycsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZShjaGFuZ2VzID0+IHRoaXMuc2V0U3R5bGluZyhjaGFuZ2VzKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVGcm9tRm9ybVZhbHVlKGZvcm1WYWx1ZTogYW55KTogRmlsZSB8IG51bGwge1xuICAgIGNvbnN0IGltYWdlczogYW55W10gPSBmb3JtVmFsdWU/LmltYWdlcyB8fCBbXTtcbiAgICByZXR1cm4gaW1hZ2VzWzBdPy5maWxlIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNldFN0eWxpbmcoY29uZmlnOiBJbWFnZVdpZGdldENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuc3R5bGluZyA9IHRoaXMuaW1hZ2VXaWRnZXQuZ2V0U3R5bGluZyhjb25maWcpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1sLTI0IHAtci0yNFwiPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgY2xhc3M9XCJyb3cgcC10LThcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDxsYWJlbD57eyAnSW1hZ2UnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgPGM4eS1kcm9wLWFyZWFcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbWFnZXNcIlxuICAgICAgICAgIGNsYXNzPVwiZHJvcC1hcmVhLXNtXCJcbiAgICAgICAgICBbaWNvbl09XCIndXBsb2FkJ1wiXG4gICAgICAgICAgW2FjY2VwdF09XCInaW1hZ2UnXCJcbiAgICAgICAgICBbbWF4QWxsb3dlZEZpbGVzXT1cIjFcIlxuICAgICAgICA+PC9jOHktZHJvcC1hcmVhPlxuICAgICAgICA8Yzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgbmFtZT1cIm1heEZpbGVTaXplUmVhY2hlZFwiXG4gICAgICAgICAgICBbdGV4dF09XCJcbiAgICAgICAgICAgICAgJ1RoZSBtYXhpbXVtIGltYWdlIHNpemUgaXMge3sgbWF4RmlsZVNpemUgfX0ga0IuIFRoZSBzZWxlY3RlZCBpbWFnZSBoYXMgYSBzaXplIG9mIHt7IGFjdHVhbEZpbGVTaXplIH19IGtCLidcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgIG5hbWU9XCJ3cm9uZ0ZpbGVUeXBlXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIidXcm9uZyBmaWxlIHR5cGUsIHNlbGVjdCBhbiBpbWFnZS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2UgbmFtZT1cIm1heGxlbmd0aFwiIFt0ZXh0XT1cIidPbmx5IHNlbGVjdCBvbmUgaW1hZ2UuJyB8IHRyYW5zbGF0ZVwiPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgPGM4eS1tZXNzYWdlIG5hbWU9XCJyZXF1aXJlZFwiIFt0ZXh0XT1cIidBbiBpbWFnZSBpcyByZXF1aXJlZC4nIHwgdHJhbnNsYXRlXCI+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2UgbmFtZT1cIm1pbmxlbmd0aFwiIFt0ZXh0XT1cIidBbiBpbWFnZSBpcyByZXF1aXJlZC4nIHwgdHJhbnNsYXRlXCI+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWFnZVNyYyQgfCBhc3luYyBhcyBzcmNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2tcIj5cbiAgICAgICAgICB7eyAnU2l6ZSBhbmQgYWxpZ25tZW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCInc3R5bGluZydcIj5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgIHt7ICdJbWFnZSBkaXNwbGF5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgc2VwYXJhdG9yLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGEtaS1jZW50ZXIgcC1sLTBcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvYmplY3RGaXRPcHRpb24gb2Ygb2JqZWN0Rml0T3B0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktcmFkaW9cIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2dyb3VwcmFkaW9jb250ZW50Y2xhc3MnICsgaVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9iamVjdEZpdFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvYmplY3RGaXRPcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibC1oLTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgb2JqZWN0Rml0T3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb2JqZWN0Rml0T3B0aW9uLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnSG9yaXpvbnRhbCBhbGlnbm1lbnQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwib2JqZWN0UG9zaXRpb25YXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiJ2xlZnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ2xlZnRgaG9yaXpvbnRhbCBhbGlnbm1lbnRgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCInY2VudGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdjZW50ZXJgaG9yaXpvbnRhbCBhbGlnbm1lbnRgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIncmlnaHQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ3JpZ2h0YGhvcml6b250YWwgYWxpZ25tZW50YCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ1ZlcnRpY2FsIGFsaWdubWVudCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJvYmplY3RQb3NpdGlvbllcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIndG9wJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICd0b3BgdmVydGljYWwgYWxpZ25tZW50YCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiJ2NlbnRlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAnY2VudGVyYHZlcnRpY2FsIGFsaWdubWVudGAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIidib3R0b20nXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ2JvdHRvbWB2ZXJ0aWNhbCBhbGlnbm1lbnRgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrXCI+e3sgJ1ByZXZpZXcnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItdG9wIGJvcmRlci1yaWdodCBib3JkZXItYm90dG9tIGJvcmRlci1sZWZ0IGlubmVyLXNjcm9sbFwiXG4gICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzAwcHhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgW3NyY109XCJzcmNcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzdHlsaW5nID8gJ2ZpdC1oIGZpdC13JyA6ICdpbWctcmVzcG9uc2l2ZSdcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJzdHlsaW5nXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBkLWZsZXggai1jLWNlbnRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -126,7 +126,7 @@ export class MarkdownWidgetConfigComponent {
126
126
  }
127
127
  }
128
128
  MarkdownWidgetConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: MarkdownWidgetConfigComponent, deps: [{ token: i1.FormBuilder }, { token: i1.NgForm }, { token: i2.AlertService }, { token: i3.MarkdownWidgetService }], target: i0.ɵɵFactoryTarget.Component });
129
- MarkdownWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: MarkdownWidgetConfigComponent, selector: "c8y-markdown-widget-config", inputs: { config: "config" }, ngImport: i0, template: "<form [formGroup]=\"formGroup\" class=\"p-l-24 p-r-24 p-t-16\">\n <div class=\"form-group\">\n <label title=\"{{ 'Upload a binary' | translate }}\" class=\"c8y-radio radio-inline\">\n <input\n #radio\n formControlName=\"uploadChoice\"\n type=\"radio\"\n value=\"uploadBinary\"\n name=\"uploadChoice\"\n (change)=\"onChange($event.target.value)\"\n />\n <span></span>\n <span>{{ 'Upload a binary' | translate }}</span>\n </label>\n <label title=\"{{ 'Provide a file path' | translate }}\" class=\"c8y-radio radio-inline m-l-8\">\n <input\n #radio\n formControlName=\"uploadChoice\"\n type=\"radio\"\n value=\"uploadUrl\"\n name=\"uploadChoice\"\n (change)=\"onChange($event.target.value)\"\n />\n <span></span>\n <span>\n {{ 'Provide a file path' | translate }}\n </span>\n </label>\n </div>\n\n <ng-container [ngSwitch]=\"uploadChoice\">\n <div *ngSwitchCase=\"'uploadBinary'\">\n <c8y-form-group class=\"m-0\">\n <c8y-drop-area\n formControlName=\"droppedFile\"\n class=\"drop-area-sm\"\n [title]=\"'Drop file or click to browse' | translate\"\n [maxAllowedFiles]=\"1\"\n [accept]=\"'md'\"\n ></c8y-drop-area>\n </c8y-form-group>\n </div>\n <div *ngSwitchCase=\"'uploadUrl'\">\n <c8y-form-group class=\"m-0\">\n <div class=\"m-b-4 p-b-8\">\n <div class=\"input-group\">\n <span class=\"input-group-addon\">\n <i c8yIcon=\"globe\"></i>\n </span>\n <input\n type=\"text\"\n class=\"form-control\"\n formControlName=\"contentUrl\"\n placeholder=\"{{ 'e.g.' | translate }} http://example.com/binary.zip\"\n />\n </div>\n </div>\n </c8y-form-group>\n </div>\n </ng-container>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
129
+ MarkdownWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: MarkdownWidgetConfigComponent, selector: "c8y-markdown-widget-config", inputs: { config: "config" }, ngImport: i0, template: "<form [formGroup]=\"formGroup\" class=\"p-l-24 p-r-24 p-t-16\">\n <div class=\"form-group\">\n <label title=\"{{ 'Upload a binary' | translate }}\" class=\"c8y-radio radio-inline\">\n <input\n #radio\n formControlName=\"uploadChoice\"\n type=\"radio\"\n value=\"uploadBinary\"\n name=\"uploadChoice\"\n (change)=\"onChange($event.target.value)\"\n />\n <span></span>\n <span>{{ 'Upload a binary' | translate }}</span>\n </label>\n <label title=\"{{ 'Provide a file path' | translate }}\" class=\"c8y-radio radio-inline m-l-8\">\n <input\n #radio\n formControlName=\"uploadChoice\"\n type=\"radio\"\n value=\"uploadUrl\"\n name=\"uploadChoice\"\n (change)=\"onChange($event.target.value)\"\n />\n <span></span>\n <span>\n {{ 'Provide a file path' | translate }}\n </span>\n </label>\n </div>\n\n <ng-container [ngSwitch]=\"uploadChoice\">\n <div *ngSwitchCase=\"'uploadBinary'\">\n <c8y-form-group class=\"m-0\">\n <c8y-drop-area\n formControlName=\"droppedFile\"\n class=\"drop-area-sm\"\n [title]=\"'Drop file or click to browse' | translate\"\n [maxAllowedFiles]=\"1\"\n [accept]=\"'md'\"\n ></c8y-drop-area>\n </c8y-form-group>\n </div>\n <div *ngSwitchCase=\"'uploadUrl'\">\n <c8y-form-group class=\"m-0\">\n <div class=\"m-b-4 p-b-8\">\n <div class=\"input-group\">\n <span class=\"input-group-addon\">\n <i c8yIcon=\"globe\"></i>\n </span>\n <input\n type=\"text\"\n class=\"form-control\"\n formControlName=\"contentUrl\"\n placeholder=\"{{ 'e.g.' | translate }} http://example.com/binary.zip\"\n />\n </div>\n </div>\n </c8y-form-group>\n </div>\n </ng-container>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
130
130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: MarkdownWidgetConfigComponent, decorators: [{
131
131
  type: Component,
132
132
  args: [{ selector: 'c8y-markdown-widget-config', template: "<form [formGroup]=\"formGroup\" class=\"p-l-24 p-r-24 p-t-16\">\n <div class=\"form-group\">\n <label title=\"{{ 'Upload a binary' | translate }}\" class=\"c8y-radio radio-inline\">\n <input\n #radio\n formControlName=\"uploadChoice\"\n type=\"radio\"\n value=\"uploadBinary\"\n name=\"uploadChoice\"\n (change)=\"onChange($event.target.value)\"\n />\n <span></span>\n <span>{{ 'Upload a binary' | translate }}</span>\n </label>\n <label title=\"{{ 'Provide a file path' | translate }}\" class=\"c8y-radio radio-inline m-l-8\">\n <input\n #radio\n formControlName=\"uploadChoice\"\n type=\"radio\"\n value=\"uploadUrl\"\n name=\"uploadChoice\"\n (change)=\"onChange($event.target.value)\"\n />\n <span></span>\n <span>\n {{ 'Provide a file path' | translate }}\n </span>\n </label>\n </div>\n\n <ng-container [ngSwitch]=\"uploadChoice\">\n <div *ngSwitchCase=\"'uploadBinary'\">\n <c8y-form-group class=\"m-0\">\n <c8y-drop-area\n formControlName=\"droppedFile\"\n class=\"drop-area-sm\"\n [title]=\"'Drop file or click to browse' | translate\"\n [maxAllowedFiles]=\"1\"\n [accept]=\"'md'\"\n ></c8y-drop-area>\n </c8y-form-group>\n </div>\n <div *ngSwitchCase=\"'uploadUrl'\">\n <c8y-form-group class=\"m-0\">\n <div class=\"m-b-4 p-b-8\">\n <div class=\"input-group\">\n <span class=\"input-group-addon\">\n <i c8yIcon=\"globe\"></i>\n </span>\n <input\n type=\"text\"\n class=\"form-control\"\n formControlName=\"contentUrl\"\n placeholder=\"{{ 'e.g.' | translate }} http://example.com/binary.zip\"\n />\n </div>\n </div>\n </c8y-form-group>\n </div>\n </ng-container>\n</form>\n" }]
@@ -929,7 +929,7 @@ class AddApplicationComponent {
929
929
  }
930
930
  }
931
931
  AddApplicationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddApplicationComponent, deps: [{ token: EcosystemService }, { token: i2.AlertService }, { token: i3.ApplicationService }, { token: i2.WizardComponent }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
932
- AddApplicationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AddApplicationComponent, selector: "c8y-add-application", inputs: { headerText: "headerText", headerIcon: "headerIcon", successText: "successText", createApplicationHandler: "createApplicationHandler", uploadApplicationHandler: "uploadApplicationHandler", canGoBack: "canGoBack" }, viewQueries: [{ propertyName: "dropAreaComponent", first: true, predicate: DropAreaComponent, descendants: true }], ngImport: i0, template: "<c8y-wizard-header>\n <i [c8yIcon]=\"headerIcon\"></i>\n <h4 id=\"modal-title\">{{ headerText | translate }}</h4>\n</c8y-wizard-header>\n\n<c8y-wizard-body>\n <p class=\"p-16 text-center text-medium separator-bottom sticky-top bg-component\">\n {{ 'Upload a *.zip file' | translate }}\n </p>\n <c8y-form-group\n *ngIf=\"!isAppCreated; else appCreated\"\n [hasError]=\"!!errorMessage\"\n class=\"m-t-16 m-l-auto m-r-auto\"\n style=\"max-width: 285px\"\n id=\"modal-body\"\n >\n <c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [loading]=\"isLoading\"\n [maxAllowedFiles]=\"1\"\n [progress]=\"progress | async\"\n class=\"drop-area\"\n ></c8y-drop-area>\n <c8y-messages>\n <c8y-message *ngIf=\"errorMessage\">\n {{ errorMessage | translate }}\n </c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <ng-template #appCreated>\n <div class=\"d-flex a-i-center j-c-center\" style=\"min-height: 285px\">\n <c8y-operation-result\n text=\"{{ successText | translate }}\"\n [vertical]=\"true\"\n [size]=\"84\"\n class=\"lead\"\n type=\"success\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"back()\"\n *ngIf=\"!isAppCreated && canGoBack\"\n class=\"btn btn-default\"\n title=\"{{ 'Back' | translate }}\"\n translate\n type=\"button\"\n >\n Back\n </button>\n <button\n (click)=\"cancel()\"\n *ngIf=\"!isAppCreated\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n translate\n type=\"button\"\n >\n Cancel\n </button>\n <button\n (click)=\"done()\"\n *ngIf=\"isAppCreated\"\n class=\"btn btn-default\"\n title=\"{{ 'Done' | translate }}\"\n translate\n type=\"button\"\n >\n Done\n </button>\n <a\n (click)=\"$event.stopPropagation()\"\n *ngIf=\"isAppCreated && canOpenInBrowser\"\n [href]=\"getHref(createdApp)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"btn btn-primary\"\n title=\"{{ 'Open' | translate }}\"\n >\n <i c8yIcon=\"external-link\" class=\"m-r-4\"></i>\n {{ 'Open' | translate }}\n </a>\n</c8y-wizard-footer>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "accept"], outputs: ["dropped"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "component", type: i2.WizardHeaderComponent, selector: "c8y-wizard-header" }, { kind: "component", type: i2.WizardBodyComponent, selector: "c8y-wizard-body" }, { kind: "component", type: i2.WizardFooterComponent, selector: "c8y-wizard-footer" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }] });
932
+ AddApplicationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AddApplicationComponent, selector: "c8y-add-application", inputs: { headerText: "headerText", headerIcon: "headerIcon", successText: "successText", createApplicationHandler: "createApplicationHandler", uploadApplicationHandler: "uploadApplicationHandler", canGoBack: "canGoBack" }, viewQueries: [{ propertyName: "dropAreaComponent", first: true, predicate: DropAreaComponent, descendants: true }], ngImport: i0, template: "<c8y-wizard-header>\n <i [c8yIcon]=\"headerIcon\"></i>\n <h4 id=\"modal-title\">{{ headerText | translate }}</h4>\n</c8y-wizard-header>\n\n<c8y-wizard-body>\n <p class=\"p-16 text-center text-medium separator-bottom sticky-top bg-component\">\n {{ 'Upload a *.zip file' | translate }}\n </p>\n <c8y-form-group\n *ngIf=\"!isAppCreated; else appCreated\"\n [hasError]=\"!!errorMessage\"\n class=\"m-t-16 m-l-auto m-r-auto\"\n style=\"max-width: 285px\"\n id=\"modal-body\"\n >\n <c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [loading]=\"isLoading\"\n [maxAllowedFiles]=\"1\"\n [progress]=\"progress | async\"\n class=\"drop-area\"\n ></c8y-drop-area>\n <c8y-messages>\n <c8y-message *ngIf=\"errorMessage\">\n {{ errorMessage | translate }}\n </c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <ng-template #appCreated>\n <div class=\"d-flex a-i-center j-c-center\" style=\"min-height: 285px\">\n <c8y-operation-result\n text=\"{{ successText | translate }}\"\n [vertical]=\"true\"\n [size]=\"84\"\n class=\"lead\"\n type=\"success\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"back()\"\n *ngIf=\"!isAppCreated && canGoBack\"\n class=\"btn btn-default\"\n title=\"{{ 'Back' | translate }}\"\n translate\n type=\"button\"\n >\n Back\n </button>\n <button\n (click)=\"cancel()\"\n *ngIf=\"!isAppCreated\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n translate\n type=\"button\"\n >\n Cancel\n </button>\n <button\n (click)=\"done()\"\n *ngIf=\"isAppCreated\"\n class=\"btn btn-default\"\n title=\"{{ 'Done' | translate }}\"\n translate\n type=\"button\"\n >\n Done\n </button>\n <a\n (click)=\"$event.stopPropagation()\"\n *ngIf=\"isAppCreated && canOpenInBrowser\"\n [href]=\"getHref(createdApp)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"btn btn-primary\"\n title=\"{{ 'Open' | translate }}\"\n >\n <i c8yIcon=\"external-link\" class=\"m-r-4\"></i>\n {{ 'Open' | translate }}\n </a>\n</c8y-wizard-footer>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "component", type: i2.WizardHeaderComponent, selector: "c8y-wizard-header" }, { kind: "component", type: i2.WizardBodyComponent, selector: "c8y-wizard-body" }, { kind: "component", type: i2.WizardFooterComponent, selector: "c8y-wizard-footer" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }] });
933
933
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddApplicationComponent, decorators: [{
934
934
  type: Component,
935
935
  args: [{ selector: 'c8y-add-application', template: "<c8y-wizard-header>\n <i [c8yIcon]=\"headerIcon\"></i>\n <h4 id=\"modal-title\">{{ headerText | translate }}</h4>\n</c8y-wizard-header>\n\n<c8y-wizard-body>\n <p class=\"p-16 text-center text-medium separator-bottom sticky-top bg-component\">\n {{ 'Upload a *.zip file' | translate }}\n </p>\n <c8y-form-group\n *ngIf=\"!isAppCreated; else appCreated\"\n [hasError]=\"!!errorMessage\"\n class=\"m-t-16 m-l-auto m-r-auto\"\n style=\"max-width: 285px\"\n id=\"modal-body\"\n >\n <c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [loading]=\"isLoading\"\n [maxAllowedFiles]=\"1\"\n [progress]=\"progress | async\"\n class=\"drop-area\"\n ></c8y-drop-area>\n <c8y-messages>\n <c8y-message *ngIf=\"errorMessage\">\n {{ errorMessage | translate }}\n </c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <ng-template #appCreated>\n <div class=\"d-flex a-i-center j-c-center\" style=\"min-height: 285px\">\n <c8y-operation-result\n text=\"{{ successText | translate }}\"\n [vertical]=\"true\"\n [size]=\"84\"\n class=\"lead\"\n type=\"success\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"back()\"\n *ngIf=\"!isAppCreated && canGoBack\"\n class=\"btn btn-default\"\n title=\"{{ 'Back' | translate }}\"\n translate\n type=\"button\"\n >\n Back\n </button>\n <button\n (click)=\"cancel()\"\n *ngIf=\"!isAppCreated\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n translate\n type=\"button\"\n >\n Cancel\n </button>\n <button\n (click)=\"done()\"\n *ngIf=\"isAppCreated\"\n class=\"btn btn-default\"\n title=\"{{ 'Done' | translate }}\"\n translate\n type=\"button\"\n >\n Done\n </button>\n <a\n (click)=\"$event.stopPropagation()\"\n *ngIf=\"isAppCreated && canOpenInBrowser\"\n [href]=\"getHref(createdApp)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"btn btn-primary\"\n title=\"{{ 'Open' | translate }}\"\n >\n <i c8yIcon=\"external-link\" class=\"m-r-4\"></i>\n {{ 'Open' | translate }}\n </a>\n</c8y-wizard-footer>\n" }]
@@ -1521,7 +1521,7 @@ class UploadArchiveComponent {
1521
1521
  }
1522
1522
  }
1523
1523
  UploadArchiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UploadArchiveComponent, deps: [{ token: EcosystemService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component });
1524
- UploadArchiveComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UploadArchiveComponent, selector: "c8y-upload-archive", inputs: { application: "application", uploadNewVersion: "uploadNewVersion", preUploadCallback: "preUploadCallback" }, outputs: { applicationChange: "applicationChange", refresh: "refresh" }, ngImport: i0, template: "<c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [loading]=\"uploadInProgress\"\n [maxAllowedFiles]=\"1\"\n [message]=\"'Upload a *.zip file' | translate\"\n [progress]=\"uploadProgress | async\"\n [forceHideList]=\"true\"\n class=\"drop-area-sm\"\n>\n</c8y-drop-area>\n", dependencies: [{ kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "accept"], outputs: ["dropped"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }] });
1524
+ UploadArchiveComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UploadArchiveComponent, selector: "c8y-upload-archive", inputs: { application: "application", uploadNewVersion: "uploadNewVersion", preUploadCallback: "preUploadCallback" }, outputs: { applicationChange: "applicationChange", refresh: "refresh" }, ngImport: i0, template: "<c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [loading]=\"uploadInProgress\"\n [maxAllowedFiles]=\"1\"\n [message]=\"'Upload a *.zip file' | translate\"\n [progress]=\"uploadProgress | async\"\n [forceHideList]=\"true\"\n class=\"drop-area-sm\"\n>\n</c8y-drop-area>\n", dependencies: [{ kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }] });
1525
1525
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UploadArchiveComponent, decorators: [{
1526
1526
  type: Component,
1527
1527
  args: [{ selector: 'c8y-upload-archive', template: "<c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [loading]=\"uploadInProgress\"\n [maxAllowedFiles]=\"1\"\n [message]=\"'Upload a *.zip file' | translate\"\n [progress]=\"uploadProgress | async\"\n [forceHideList]=\"true\"\n class=\"drop-area-sm\"\n>\n</c8y-drop-area>\n" }]