@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
@@ -82,7 +82,7 @@ export class FilePickerComponent {
82
82
  }
83
83
  }
84
84
  FilePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: FilePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
85
- FilePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: FilePickerComponent, selector: "c8y-file-picker", inputs: { maxAllowedFiles: "maxAllowedFiles", uploadChoice: "uploadChoice", fileUrl: "fileUrl", fileBinary: "fileBinary", config: "config", fileUrlPopover: "fileUrlPopover" }, outputs: { onFilesPicked: "onFilesPicked" }, viewQueries: [{ propertyName: "dropArea", first: true, predicate: DropAreaComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"form-group\">\n <label title=\"{{ 'Upload a binary' | translate }}\" class=\"c8y-radio radio-inline\">\n <input\n #radio\n type=\"radio\"\n value=\"uploadBinary\"\n name=\"uploadChoice\"\n [(ngModel)]=\"uploadChoice\"\n (click)=\"clearInputFromUrl()\"\n />\n <span></span>\n <span>{{ 'Upload a binary' | translate }}</span>\n </label>\n <label\n title=\"{{ 'Provide a file path' | translate }}\"\n class=\"c8y-radio radio-inline m-l-8\"\n data-cy=\"file-picker--file-path-input\"\n >\n <input\n #radio\n type=\"radio\"\n value=\"uploadUrl\"\n name=\"uploadChoice\"\n [(ngModel)]=\"uploadChoice\"\n (click)=\"clearSelectedFiles()\"\n />\n <span></span>\n <span>\n {{ 'Provide a file path' | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ fileUrlPopover | translate }}\"\n placement=\"top\"\n triggers=\"focus\"\n container=\"body\"\n placement=\"top\"\n *ngIf=\"isPopoverUsed()\"\n ></button>\n </label>\n</div>\n\n<div [hidden]=\"uploadChoice !== 'uploadBinary'\">\n <c8y-form-group class=\"m-0\">\n <c8y-drop-area\n class=\"drop-area-sm\"\n (dropped)=\"onFileDropped($event)\"\n [title]=\"'Drop file or click to browse' | translate\"\n [attr.aria-label]=\"'Drop file or click to browse' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n [files]=\"droppedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n</div>\n\n<div [hidden]=\"uploadChoice !== '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 name=\"fileUrl\"\n data-cy=\"file-picker--fileUrl\"\n [(ngModel)]=\"fileUrl\"\n (ngModelChange)=\"onFileUrlChange($event)\"\n placeholder=\"{{ 'e.g.' | translate }} http://example.com/binary.zip\"\n maxlength=\"{{ config.maxlength }}\"\n required\n />\n </div>\n </div>\n </c8y-form-group>\n</div>\n", dependencies: [{ 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i6.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i8.C8yTranslatePipe, name: "translate" }] });
85
+ FilePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: FilePickerComponent, selector: "c8y-file-picker", inputs: { maxAllowedFiles: "maxAllowedFiles", uploadChoice: "uploadChoice", fileUrl: "fileUrl", fileBinary: "fileBinary", config: "config", fileUrlPopover: "fileUrlPopover" }, outputs: { onFilesPicked: "onFilesPicked" }, viewQueries: [{ propertyName: "dropArea", first: true, predicate: DropAreaComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"form-group\">\n <label title=\"{{ 'Upload a binary' | translate }}\" class=\"c8y-radio radio-inline\">\n <input\n #radio\n type=\"radio\"\n value=\"uploadBinary\"\n name=\"uploadChoice\"\n [(ngModel)]=\"uploadChoice\"\n (click)=\"clearInputFromUrl()\"\n />\n <span></span>\n <span>{{ 'Upload a binary' | translate }}</span>\n </label>\n <label\n title=\"{{ 'Provide a file path' | translate }}\"\n class=\"c8y-radio radio-inline m-l-8\"\n data-cy=\"file-picker--file-path-input\"\n >\n <input\n #radio\n type=\"radio\"\n value=\"uploadUrl\"\n name=\"uploadChoice\"\n [(ngModel)]=\"uploadChoice\"\n (click)=\"clearSelectedFiles()\"\n />\n <span></span>\n <span>\n {{ 'Provide a file path' | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ fileUrlPopover | translate }}\"\n placement=\"top\"\n triggers=\"focus\"\n container=\"body\"\n placement=\"top\"\n *ngIf=\"isPopoverUsed()\"\n ></button>\n </label>\n</div>\n\n<div [hidden]=\"uploadChoice !== 'uploadBinary'\">\n <c8y-form-group class=\"m-0\">\n <c8y-drop-area\n class=\"drop-area-sm\"\n (dropped)=\"onFileDropped($event)\"\n [title]=\"'Drop file or click to browse' | translate\"\n [attr.aria-label]=\"'Drop file or click to browse' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n [files]=\"droppedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n</div>\n\n<div [hidden]=\"uploadChoice !== '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 name=\"fileUrl\"\n data-cy=\"file-picker--fileUrl\"\n [(ngModel)]=\"fileUrl\"\n (ngModelChange)=\"onFileUrlChange($event)\"\n placeholder=\"{{ 'e.g.' | translate }} http://example.com/binary.zip\"\n maxlength=\"{{ config.maxlength }}\"\n required\n />\n </div>\n </div>\n </c8y-form-group>\n</div>\n", dependencies: [{ 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.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: i6.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i8.C8yTranslatePipe, name: "translate" }] });
86
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: FilePickerComponent, decorators: [{
87
87
  type: Component,
88
88
  args: [{ selector: 'c8y-file-picker', template: "<div class=\"form-group\">\n <label title=\"{{ 'Upload a binary' | translate }}\" class=\"c8y-radio radio-inline\">\n <input\n #radio\n type=\"radio\"\n value=\"uploadBinary\"\n name=\"uploadChoice\"\n [(ngModel)]=\"uploadChoice\"\n (click)=\"clearInputFromUrl()\"\n />\n <span></span>\n <span>{{ 'Upload a binary' | translate }}</span>\n </label>\n <label\n title=\"{{ 'Provide a file path' | translate }}\"\n class=\"c8y-radio radio-inline m-l-8\"\n data-cy=\"file-picker--file-path-input\"\n >\n <input\n #radio\n type=\"radio\"\n value=\"uploadUrl\"\n name=\"uploadChoice\"\n [(ngModel)]=\"uploadChoice\"\n (click)=\"clearSelectedFiles()\"\n />\n <span></span>\n <span>\n {{ 'Provide a file path' | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ fileUrlPopover | translate }}\"\n placement=\"top\"\n triggers=\"focus\"\n container=\"body\"\n placement=\"top\"\n *ngIf=\"isPopoverUsed()\"\n ></button>\n </label>\n</div>\n\n<div [hidden]=\"uploadChoice !== 'uploadBinary'\">\n <c8y-form-group class=\"m-0\">\n <c8y-drop-area\n class=\"drop-area-sm\"\n (dropped)=\"onFileDropped($event)\"\n [title]=\"'Drop file or click to browse' | translate\"\n [attr.aria-label]=\"'Drop file or click to browse' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n [files]=\"droppedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n</div>\n\n<div [hidden]=\"uploadChoice !== '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 name=\"fileUrl\"\n data-cy=\"file-picker--fileUrl\"\n [(ngModel)]=\"fileUrl\"\n (ngModelChange)=\"onFileUrlChange($event)\"\n placeholder=\"{{ 'e.g.' | translate }} http://example.com/binary.zip\"\n maxlength=\"{{ config.maxlength }}\"\n required\n />\n </div>\n </div>\n </c8y-form-group>\n</div>\n" }]
@@ -75,7 +75,7 @@ export class AddApplicationComponent {
75
75
  }
76
76
  }
77
77
  AddApplicationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddApplicationComponent, deps: [{ token: i1.EcosystemService }, { token: i2.AlertService }, { token: i3.ApplicationService }, { token: i2.WizardComponent }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
78
- 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: i5.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: i5.AsyncPipe, name: "async" }] });
78
+ 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: i5.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: i5.AsyncPipe, name: "async" }] });
79
79
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddApplicationComponent, decorators: [{
80
80
  type: Component,
81
81
  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" }]
@@ -66,7 +66,7 @@ export class UploadArchiveComponent {
66
66
  }
67
67
  }
68
68
  UploadArchiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UploadArchiveComponent, deps: [{ token: i1.EcosystemService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component });
69
- 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.AsyncPipe, name: "async" }] });
69
+ 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.AsyncPipe, name: "async" }] });
70
70
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UploadArchiveComponent, decorators: [{
71
71
  type: Component,
72
72
  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" }]
@@ -300,7 +300,7 @@ export class OpcuaServerConfigComponent {
300
300
  }
301
301
  }
302
302
  OpcuaServerConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: OpcuaServerConfigComponent, deps: [{ token: i1.OpcuaService }], target: i0.ɵɵFactoryTarget.Component });
303
- OpcuaServerConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: OpcuaServerConfigComponent, selector: "opcua-server-config", inputs: { server: "server" }, outputs: { canceled: "canceled", removed: "removed", saved: "saved" }, viewQueries: [{ propertyName: "opcuaConfigForm", first: true, predicate: ["opcuaConfigForm"], descendants: true }, { propertyName: "dropArea", first: true, predicate: DropAreaComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-empty-state m-t-4\" *ngIf=\"!server\">\n <h1 class=\"c8y-icon c8y-icon-duocolor\" c8yIcon=\"server\"></h1>\n <div>\n <p class=\"text-medium\">{{ 'No server to display.' | translate }}</p>\n <p>{{ 'Add or select a server.' | translate }}</p>\n </div>\n</div>\n\n<form #opcuaConfigForm=\"ngForm\" class=\"d-contents\" *ngIf=\"server\">\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>\n {{ 'Server name' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n id=\"name\"\n name=\"name\"\n [(ngModel)]=\"model.name\"\n required\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label class=\"fit-w\" translate>Server connection</label>\n <button\n type=\"button\"\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span title=\"{{ 'Enabled' | translate }}\" [hidden]=\"targetConnectionState !== '1'\">\n {{ 'Enabled' | translate }}\n </span>\n <span title=\"{{ 'Disabled' | translate }}\" [hidden]=\"targetConnectionState !== '0'\">\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label for=\"configServerUrl\" translate>Server URL</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n required\n />\n </c8y-form-group>\n\n <!-- TIMEOUT & STATUS-CHECK-INTERVAL-->\n <div class=\"content-flex-32\">\n <div class=\"col-6\">\n <c8y-form-group>\n <label for=\"config.timeout\" translate>Timeout</label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"config.timeout\"\n name=\"timeout\"\n [min]=\"minIntervalNumber\"\n placeholder=\"{{ 'e.g.' | translate }} 30\"\n [(ngModel)]=\"model.config.timeout\"\n required\n />\n <span class=\"input-group-addon units\" translate>seconds</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-6\">\n <c8y-form-group>\n <label for=\"config.statusCheckInterval\" translate>Status check interval</label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"config.statusCheckInterval\"\n name=\"statusCheckInterval\"\n [min]=\"minIntervalNumber\"\n placeholder=\"{{ 'e.g.' | translate }} 40\"\n [(ngModel)]=\"model.config.statusCheckInterval\"\n required\n />\n <span class=\"input-group-addon units\" translate>seconds</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label for=\"config.securityMode\" translate>Security mode</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n name=\"securityMode\"\n required\n >\n <option *ngFor=\"let mode of securityModes\" [ngValue]=\"mode\">{{ mode }}</option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div *ngIf=\"currentSecMode === NONE\" class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.securityPolicy\" translate>Security policy</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n required\n />\n </div>\n </div>\n <div *ngIf=\"currentSecMode !== NONE\" class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.securityPolicy\" translate>Security policy</label>\n <div class=\"c8y-select-wrapper\">\n <select\n *ngIf=\"currentSecMode === SIGN\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n [(ngModel)]=\"model.config.securityMode\"\n name=\"securityPolicy\"\n required\n >\n <option *ngFor=\"let policy of securityPolicies.sign\" [ngValue]=\"policy\">\n {{ policy }}\n </option>\n </select>\n <select\n *ngIf=\"currentSecMode === SIGN_ENC\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n [(ngModel)]=\"model.config.securityMode\"\n name=\"securityPolicy\"\n required\n >\n <option *ngFor=\"let policy of securityPolicies.sign_enc\" [ngValue]=\"policy\">\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"form-group\">\n <label for=\"config.authenticationMode\" translate>Authentication</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n [(ngModel)]=\"authenticationMode\"\n name=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n required\n >\n <option *ngFor=\"let auth of authenticationModes\" [ngValue]=\"auth\">\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <!-- User/Pw-->\n <div *ngIf=\"authenticationMode.id === 2\" class=\"tight-grid\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"config.userName\" translate>Username</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"config.userName\"\n name=\"userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"model.config.userName\"\n autocomplete=\"new-password\"\n required\n />\n </div>\n </div>\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div class=\"form-group\" *ngIf=\"!initialPasswordRequired\">\n <button type=\"button\" class=\"btn btn-default\" (click)=\"toggleChangePassword()\">\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label for=\"config.password\" translate>Password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n [(ngModel)]=\"model.config.userPassword\"\n autocomplete=\"new-password\"\n required\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n <!-- Key-based -->\n <div *ngIf=\"authenticationMode.id === 3\" class=\"tight-grid\">\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.keystorePass\" translate>Keystore password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n [(ngModel)]=\"model.config.keystorePass\"\n required\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.certificatePass\" translate>Certificate password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n [(ngModel)]=\"model.config.certificatePass\"\n required\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"certificateUpload\" translate>Upload keystore</label>\n <input\n type=\"text\"\n [readonly]=\"true\"\n name=\"certificateUpload\"\n class=\"form-control m-b-8\"\n [ngModel]=\"fileName\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n required\n />\n <c8y-drop-area\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [title]=\"'Import keystore with jks file extension' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n class=\"btn btn-danger\"\n (click)=\"remove()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: 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: i2.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i2.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["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: "component", type: i2.DeviceStatusComponent, selector: "device-status", inputs: ["mo"] }, { kind: "directive", type: i5.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
303
+ OpcuaServerConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: OpcuaServerConfigComponent, selector: "opcua-server-config", inputs: { server: "server" }, outputs: { canceled: "canceled", removed: "removed", saved: "saved" }, viewQueries: [{ propertyName: "opcuaConfigForm", first: true, predicate: ["opcuaConfigForm"], descendants: true }, { propertyName: "dropArea", first: true, predicate: DropAreaComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"c8y-empty-state m-t-4\" *ngIf=\"!server\">\n <h1 class=\"c8y-icon c8y-icon-duocolor\" c8yIcon=\"server\"></h1>\n <div>\n <p class=\"text-medium\">{{ 'No server to display.' | translate }}</p>\n <p>{{ 'Add or select a server.' | translate }}</p>\n </div>\n</div>\n\n<form #opcuaConfigForm=\"ngForm\" class=\"d-contents\" *ngIf=\"server\">\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>\n {{ 'Server name' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n id=\"name\"\n name=\"name\"\n [(ngModel)]=\"model.name\"\n required\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label class=\"fit-w\" translate>Server connection</label>\n <button\n type=\"button\"\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span title=\"{{ 'Enabled' | translate }}\" [hidden]=\"targetConnectionState !== '1'\">\n {{ 'Enabled' | translate }}\n </span>\n <span title=\"{{ 'Disabled' | translate }}\" [hidden]=\"targetConnectionState !== '0'\">\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label for=\"configServerUrl\" translate>Server URL</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n required\n />\n </c8y-form-group>\n\n <!-- TIMEOUT & STATUS-CHECK-INTERVAL-->\n <div class=\"content-flex-32\">\n <div class=\"col-6\">\n <c8y-form-group>\n <label for=\"config.timeout\" translate>Timeout</label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"config.timeout\"\n name=\"timeout\"\n [min]=\"minIntervalNumber\"\n placeholder=\"{{ 'e.g.' | translate }} 30\"\n [(ngModel)]=\"model.config.timeout\"\n required\n />\n <span class=\"input-group-addon units\" translate>seconds</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-6\">\n <c8y-form-group>\n <label for=\"config.statusCheckInterval\" translate>Status check interval</label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"config.statusCheckInterval\"\n name=\"statusCheckInterval\"\n [min]=\"minIntervalNumber\"\n placeholder=\"{{ 'e.g.' | translate }} 40\"\n [(ngModel)]=\"model.config.statusCheckInterval\"\n required\n />\n <span class=\"input-group-addon units\" translate>seconds</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label for=\"config.securityMode\" translate>Security mode</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n name=\"securityMode\"\n required\n >\n <option *ngFor=\"let mode of securityModes\" [ngValue]=\"mode\">{{ mode }}</option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div *ngIf=\"currentSecMode === NONE\" class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.securityPolicy\" translate>Security policy</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n required\n />\n </div>\n </div>\n <div *ngIf=\"currentSecMode !== NONE\" class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.securityPolicy\" translate>Security policy</label>\n <div class=\"c8y-select-wrapper\">\n <select\n *ngIf=\"currentSecMode === SIGN\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n [(ngModel)]=\"model.config.securityMode\"\n name=\"securityPolicy\"\n required\n >\n <option *ngFor=\"let policy of securityPolicies.sign\" [ngValue]=\"policy\">\n {{ policy }}\n </option>\n </select>\n <select\n *ngIf=\"currentSecMode === SIGN_ENC\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n [(ngModel)]=\"model.config.securityMode\"\n name=\"securityPolicy\"\n required\n >\n <option *ngFor=\"let policy of securityPolicies.sign_enc\" [ngValue]=\"policy\">\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"form-group\">\n <label for=\"config.authenticationMode\" translate>Authentication</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n [(ngModel)]=\"authenticationMode\"\n name=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n required\n >\n <option *ngFor=\"let auth of authenticationModes\" [ngValue]=\"auth\">\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <!-- User/Pw-->\n <div *ngIf=\"authenticationMode.id === 2\" class=\"tight-grid\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"config.userName\" translate>Username</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"config.userName\"\n name=\"userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"model.config.userName\"\n autocomplete=\"new-password\"\n required\n />\n </div>\n </div>\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div class=\"form-group\" *ngIf=\"!initialPasswordRequired\">\n <button type=\"button\" class=\"btn btn-default\" (click)=\"toggleChangePassword()\">\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label for=\"config.password\" translate>Password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n [(ngModel)]=\"model.config.userPassword\"\n autocomplete=\"new-password\"\n required\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n <!-- Key-based -->\n <div *ngIf=\"authenticationMode.id === 3\" class=\"tight-grid\">\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.keystorePass\" translate>Keystore password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n [(ngModel)]=\"model.config.keystorePass\"\n required\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.certificatePass\" translate>Certificate password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n [(ngModel)]=\"model.config.certificatePass\"\n required\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"certificateUpload\" translate>Upload keystore</label>\n <input\n type=\"text\"\n [readonly]=\"true\"\n name=\"certificateUpload\"\n class=\"form-control m-b-8\"\n [ngModel]=\"fileName\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n required\n />\n <c8y-drop-area\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [title]=\"'Import keystore with jks file extension' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n class=\"btn btn-danger\"\n (click)=\"remove()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: 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: i2.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i2.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["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: "component", type: i2.DeviceStatusComponent, selector: "device-status", inputs: ["mo"] }, { kind: "directive", type: i5.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
304
304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: OpcuaServerConfigComponent, decorators: [{
305
305
  type: Component,
306
306
  args: [{ selector: 'opcua-server-config', template: "<div class=\"c8y-empty-state m-t-4\" *ngIf=\"!server\">\n <h1 class=\"c8y-icon c8y-icon-duocolor\" c8yIcon=\"server\"></h1>\n <div>\n <p class=\"text-medium\">{{ 'No server to display.' | translate }}</p>\n <p>{{ 'Add or select a server.' | translate }}</p>\n </div>\n</div>\n\n<form #opcuaConfigForm=\"ngForm\" class=\"d-contents\" *ngIf=\"server\">\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>\n {{ 'Server name' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n id=\"name\"\n name=\"name\"\n [(ngModel)]=\"model.name\"\n required\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label class=\"fit-w\" translate>Server connection</label>\n <button\n type=\"button\"\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span title=\"{{ 'Enabled' | translate }}\" [hidden]=\"targetConnectionState !== '1'\">\n {{ 'Enabled' | translate }}\n </span>\n <span title=\"{{ 'Disabled' | translate }}\" [hidden]=\"targetConnectionState !== '0'\">\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label for=\"configServerUrl\" translate>Server URL</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n required\n />\n </c8y-form-group>\n\n <!-- TIMEOUT & STATUS-CHECK-INTERVAL-->\n <div class=\"content-flex-32\">\n <div class=\"col-6\">\n <c8y-form-group>\n <label for=\"config.timeout\" translate>Timeout</label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"config.timeout\"\n name=\"timeout\"\n [min]=\"minIntervalNumber\"\n placeholder=\"{{ 'e.g.' | translate }} 30\"\n [(ngModel)]=\"model.config.timeout\"\n required\n />\n <span class=\"input-group-addon units\" translate>seconds</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-6\">\n <c8y-form-group>\n <label for=\"config.statusCheckInterval\" translate>Status check interval</label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"config.statusCheckInterval\"\n name=\"statusCheckInterval\"\n [min]=\"minIntervalNumber\"\n placeholder=\"{{ 'e.g.' | translate }} 40\"\n [(ngModel)]=\"model.config.statusCheckInterval\"\n required\n />\n <span class=\"input-group-addon units\" translate>seconds</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label for=\"config.securityMode\" translate>Security mode</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n name=\"securityMode\"\n required\n >\n <option *ngFor=\"let mode of securityModes\" [ngValue]=\"mode\">{{ mode }}</option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div *ngIf=\"currentSecMode === NONE\" class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.securityPolicy\" translate>Security policy</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n required\n />\n </div>\n </div>\n <div *ngIf=\"currentSecMode !== NONE\" class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.securityPolicy\" translate>Security policy</label>\n <div class=\"c8y-select-wrapper\">\n <select\n *ngIf=\"currentSecMode === SIGN\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n [(ngModel)]=\"model.config.securityMode\"\n name=\"securityPolicy\"\n required\n >\n <option *ngFor=\"let policy of securityPolicies.sign\" [ngValue]=\"policy\">\n {{ policy }}\n </option>\n </select>\n <select\n *ngIf=\"currentSecMode === SIGN_ENC\"\n class=\"form-control\"\n id=\"config.securityPolicy\"\n [(ngModel)]=\"model.config.securityMode\"\n name=\"securityPolicy\"\n required\n >\n <option *ngFor=\"let policy of securityPolicies.sign_enc\" [ngValue]=\"policy\">\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"form-group\">\n <label for=\"config.authenticationMode\" translate>Authentication</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n [(ngModel)]=\"authenticationMode\"\n name=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n required\n >\n <option *ngFor=\"let auth of authenticationModes\" [ngValue]=\"auth\">\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <!-- User/Pw-->\n <div *ngIf=\"authenticationMode.id === 2\" class=\"tight-grid\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"config.userName\" translate>Username</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"config.userName\"\n name=\"userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"model.config.userName\"\n autocomplete=\"new-password\"\n required\n />\n </div>\n </div>\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div class=\"form-group\" *ngIf=\"!initialPasswordRequired\">\n <button type=\"button\" class=\"btn btn-default\" (click)=\"toggleChangePassword()\">\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label for=\"config.password\" translate>Password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n [(ngModel)]=\"model.config.userPassword\"\n autocomplete=\"new-password\"\n required\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n <!-- Key-based -->\n <div *ngIf=\"authenticationMode.id === 3\" class=\"tight-grid\">\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.keystorePass\" translate>Keystore password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n [(ngModel)]=\"model.config.keystorePass\"\n required\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label for=\"config.certificatePass\" translate>Certificate password</label>\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n [(ngModel)]=\"model.config.certificatePass\"\n required\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"certificateUpload\" translate>Upload keystore</label>\n <input\n type=\"text\"\n [readonly]=\"true\"\n name=\"certificateUpload\"\n class=\"form-control m-b-8\"\n [ngModel]=\"fileName\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n required\n />\n <c8y-drop-area\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [title]=\"'Import keystore with jks file extension' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n class=\"btn btn-danger\"\n (click)=\"remove()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
@@ -66,10 +66,10 @@ export class AssetPropertiesItemComponent {
66
66
  }
67
67
  }
68
68
  AssetPropertiesItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetPropertiesItemComponent, deps: [{ token: i1.AlertService }, { token: i1.C8yJSONSchema }, { token: i1.FilesService }], target: i0.ɵɵFactoryTarget.Component });
69
- AssetPropertiesItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: { key: "key", value: "value", label: "label", type: "type", file: "file", complex: "complex", isEdit: "isEdit", jsonSchema: "jsonSchema" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ value | c8yDate: 'fullDate' }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label\n class=\"small m-b-0 m-r-8 text-truncate\"\n title=\"{{ prop.label | translate }}\"\n [ngClass]=\"{ 'a-s-start': prop.file }\"\n >\n {{ prop.label | translate }}\n </label>\n <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n <c8y-asset-properties-item\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n ></c8y-asset-properties-item>\n </span>\n </li>\n </ul>\n </ng-container>\n <!--\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n </ng-container>\n -->\n <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n {{ value != null ? value : ('Undefined' | translate) }}\n </p>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n {{ (value | translate) || ('Undefined' | translate) }}\n </p>\n </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: ["key", "value", "label", "type", "file", "complex", "isEdit", "jsonSchema"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i1.DatePipe, name: "c8yDate" }] });
69
+ AssetPropertiesItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: { key: "key", value: "value", label: "label", type: "type", file: "file", complex: "complex", isEdit: "isEdit", jsonSchema: "jsonSchema" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ (value | c8yDate: 'fullDate') || ('Undefined' | translate) }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label\n class=\"small m-b-0 m-r-8 text-truncate\"\n title=\"{{ prop.label | translate }}\"\n [ngClass]=\"{ 'a-s-start': prop.file }\"\n >\n {{ prop.label | translate }}\n </label>\n <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n <c8y-asset-properties-item\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n ></c8y-asset-properties-item>\n </span>\n </li>\n </ul>\n </ng-container>\n <!--\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n </ng-container>\n -->\n <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n {{ value != null ? value : ('Undefined' | translate) }}\n </p>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n {{ (value | translate) || ('Undefined' | translate) }}\n </p>\n </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: AssetPropertiesItemComponent, selector: "c8y-asset-properties-item", inputs: ["key", "value", "label", "type", "file", "complex", "isEdit", "jsonSchema"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i1.DatePipe, name: "c8yDate" }] });
70
70
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetPropertiesItemComponent, decorators: [{
71
71
  type: Component,
72
- args: [{ selector: 'c8y-asset-properties-item', template: "<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ value | c8yDate: 'fullDate' }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label\n class=\"small m-b-0 m-r-8 text-truncate\"\n title=\"{{ prop.label | translate }}\"\n [ngClass]=\"{ 'a-s-start': prop.file }\"\n >\n {{ prop.label | translate }}\n </label>\n <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n <c8y-asset-properties-item\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n ></c8y-asset-properties-item>\n </span>\n </li>\n </ul>\n </ng-container>\n <!--\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n </ng-container>\n -->\n <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n {{ value != null ? value : ('Undefined' | translate) }}\n </p>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n {{ (value | translate) || ('Undefined' | translate) }}\n </p>\n </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n" }]
72
+ args: [{ selector: 'c8y-asset-properties-item', template: "<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ (value | c8yDate: 'fullDate') || ('Undefined' | translate) }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label\n class=\"small m-b-0 m-r-8 text-truncate\"\n title=\"{{ prop.label | translate }}\"\n [ngClass]=\"{ 'a-s-start': prop.file }\"\n >\n {{ prop.label | translate }}\n </label>\n <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n <c8y-asset-properties-item\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n ></c8y-asset-properties-item>\n </span>\n </li>\n </ul>\n </ng-container>\n <!--\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n </ng-container>\n -->\n <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n {{ value != null ? value : ('Undefined' | translate) }}\n </p>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n {{ (value | translate) || ('Undefined' | translate) }}\n </p>\n </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n" }]
73
73
  }], ctorParameters: function () { return [{ type: i1.AlertService }, { type: i1.C8yJSONSchema }, { type: i1.FilesService }]; }, propDecorators: { key: [{
74
74
  type: Input
75
75
  }], value: [{
@@ -87,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
87
87
  }], jsonSchema: [{
88
88
  type: Input
89
89
  }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXpGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBTWxDLE1BQU0sT0FBTyw0QkFBNEI7SUF1QnZDLFlBQ1UsS0FBbUIsRUFDbkIsb0JBQW1DLEVBQ3BDLFlBQTBCO1FBRnpCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFlO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQ2hDLENBQUM7SUFFSixLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCO1FBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJO2dCQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdEO1lBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQzthQUN6RDtTQUNGO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNuQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzdDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDM0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQyxPQUFPO2dCQUNMLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUN6QyxDQUFDO1NBQ0g7UUFDRCxPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQWU7UUFDN0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQzs7eUhBbkZVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLDBPQ2J6QywwNUVBK0RBLHN3QkRsRGEsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsMkJBQTJCOzBKQUtyQyxHQUFHO3NCQURGLEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixJQUFJO3NCQURILEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdEJpbmFyeSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgQzh5SlNPTlNjaGVtYSwgZ2V0dGV4dCwgRmlsZXNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgQXNzZXRQcm9wZXJ0aWVzSXRlbSB9IGZyb20gJy4vYXNzZXQtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNyB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1wcm9wZXJ0aWVzLWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0UHJvcGVydGllc0l0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBc3NldFByb3BlcnRpZXNJdGVtLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBrZXk6IHN0cmluZztcbiAgQElucHV0KClcbiAgdmFsdWU6IGFueTtcbiAgQElucHV0KClcbiAgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KClcbiAgdHlwZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBmaWxlOiBJTWFuYWdlZE9iamVjdEJpbmFyeTtcbiAgQElucHV0KClcbiAgY29tcGxleDogQXNzZXRQcm9wZXJ0aWVzSXRlbVtdO1xuICBASW5wdXQoKVxuICBpc0VkaXQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGpzb25TY2hlbWE6IEpTT05TY2hlbWE3O1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuICBtb2RlbDogYW55O1xuICBwcmV2aWV3SW1hZ2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYzh5SnNvblNjaGVtYVNlcnZpY2U6IEM4eUpTT05TY2hlbWEsXG4gICAgcHVibGljIGZpbGVzU2VydmljZTogRmlsZXNTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuaXNFZGl0KSB7XG4gICAgICB0aGlzLnJlc29sdmVKc29uU2NoZW1hKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlc29sdmVGaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRmlsZSgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZUZpbGUgPSBhd2FpdCB0aGlzLmZpbGVzU2VydmljZS5nZXRGaWxlKHRoaXMuZmlsZSk7XG4gICAgICAgIHRoaXMucHJldmlld0ltYWdlID0gYXdhaXQgdGhpcy5nZXRQcmV2aWV3SWZJbWFnZShpbWFnZUZpbGUpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1Db21wbGV4UHJvcHNWYWx1ZSgpIHtcbiAgICBjb25zdCBjb21wbGV4UHJvcHMgPSB7fTtcbiAgICB0aGlzLmNvbXBsZXguZm9yRWFjaChjb21wbGV4T2JqID0+IHtcbiAgICAgIGlmIChjb21wbGV4T2JqLmZpbGUpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IGNvbXBsZXhPYmoudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVbY29tcGxleE9iai5rZXldICE9IG51bGwpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IHRoaXMudmFsdWVbY29tcGxleE9iai5rZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb21wbGV4UHJvcHM7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGVsKCkge1xuICAgIGlmICh0aGlzLmNvbXBsZXggJiYgdGhpcy5jb21wbGV4Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFt0aGlzLmtleV06IHRoaXMuZm9ybUNvbXBsZXhQcm9wc1ZhbHVlKClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBjbG9uZSh0aGlzLnZhbHVlKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVKc29uU2NoZW1hKCkge1xuICAgIGlmICh0aGlzLmpzb25TY2hlbWEpIHtcbiAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5jOHlKc29uU2NoZW1hU2VydmljZS50b0ZpZWxkQ29uZmlnKHRoaXMuanNvblNjaGVtYSwgdGhpcy5qc29uU2NoZW1hKTtcbiAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgdGhpcy5maWVsZHMgPSBbZmllbGRDb25maWddO1xuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFByZXZpZXdJZkltYWdlKGltYWdlRmlsZTogRmlsZSkge1xuICAgIGlmICh0aGlzLmZpbGVzU2VydmljZS5oYXZlVmFsaWRFeHRlbnNpb25zKGltYWdlRmlsZSwgJ2ltYWdlJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzU2VydmljZS50b0Jhc2U2NChpbWFnZUZpbGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiICpuZ0lmPVwiIWlzRWRpdFwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICB7eyB2YWx1ZSB8IGM4eURhdGU6ICdmdWxsRGF0ZScgfX1cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlXCI+XG4gICAgICA8aW1nICpuZ0lmPVwicHJldmlld0ltYWdlXCIgW3NyY109XCJwcmV2aWV3SW1hZ2VcIiBjbGFzcz1cImltZy1yZXNwb25zaXZlXCIgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhcHJldmlld0ltYWdlXCJcbiAgICAgICAgKGNsaWNrKT1cImZpbGVzU2VydmljZS5kb3dubG9hZChmaWxlKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdEb3dubG9hZCcgfCB0cmFuc2xhdGUgfX0ge3sgZmlsZS5uYW1lIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWNsZWFuIHRleHQtdHJ1bmNhdGUgcC0wXCJcbiAgICAgID5cbiAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpbGVcIj5cbiAgICAgIHt7ICdObyBmaWxlIGF0dGFjaGVkLicgfCB0cmFuc2xhdGUgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidvYmplY3QnXCI+XG4gICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBjOHktY3VzdG9tLXByb3BlcnRpZXNcIj5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgcHJvcCBvZiBjb21wbGV4OyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VwYXJhdG9yLXRvcC1ib3R0b20nOiBpID09PSAwLCAnc2VwYXJhdG9yLWJvdHRvbSc6IGkgPiAwIH1cIlxuICAgICAgICBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCB0ZXh0LW5vd3JhcFwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLTggdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBwcm9wLmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhLXMtc3RhcnQnOiBwcm9wLmZpbGUgfVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLWF1dG9cIiBzdHlsZT1cIm1heC13aWR0aDoge3sgcHJvcC5maWxlID8gJzUwJScgOiAnMTAwJScgfX07IG1pbi13aWR0aDowO1wiPlxuICAgICAgICAgIDxjOHktYXNzZXQtcHJvcGVydGllcy1pdGVtXG4gICAgICAgICAgICBbZmlsZV09XCJwcm9wLmZpbGVcIlxuICAgICAgICAgICAgW2tleV09XCJwcm9wLmtleVwiXG4gICAgICAgICAgICBbdHlwZV09XCJwcm9wLnR5cGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInByb3AudmFsdWVcIlxuICAgICAgICAgID48L2M4eS1hc3NldC1wcm9wZXJ0aWVzLWl0ZW0+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDwhLS1cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwidmFsdWVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIC0tPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicgPyB0eXBlIDogJydcIj5cbiAgICA8cCBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIiB0aXRsZT1cInt7IHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6ICgnVW5kZWZpbmVkJyB8IHRyYW5zbGF0ZSkgfX1cIj5cbiAgICAgIHt7IHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6ICgnVW5kZWZpbmVkJyB8IHRyYW5zbGF0ZSkgfX1cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgdGl0bGU9XCJ7eyAodmFsdWUgfCB0cmFuc2xhdGUpIHx8ICgnVW5kZWZpbmVkJyB8IHRyYW5zbGF0ZSkgfX1cIj5cbiAgICAgIHt7ICh2YWx1ZSB8IHRyYW5zbGF0ZSkgfHwgKCdVbmRlZmluZWQnIHwgdHJhbnNsYXRlKSB9fVxuICAgIDwvcD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxmb3JtbHktZm9ybSAqbmdJZj1cImlzRWRpdFwiIFtmb3JtXT1cImZvcm1cIiBbZmllbGRzXT1cImZpZWxkc1wiIFttb2RlbF09XCJtb2RlbFwiPjwvZm9ybWx5LWZvcm0+XG4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvYXNzZXQtcHJvcGVydGllcy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXpGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBTWxDLE1BQU0sT0FBTyw0QkFBNEI7SUF1QnZDLFlBQ1UsS0FBbUIsRUFDbkIsb0JBQW1DLEVBQ3BDLFlBQTBCO1FBRnpCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFlO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQ2hDLENBQUM7SUFFSixLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCO1FBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJO2dCQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdEO1lBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQzthQUN6RDtTQUNGO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNuQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzdDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDM0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQyxPQUFPO2dCQUNMLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUN6QyxDQUFDO1NBQ0g7UUFDRCxPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQWU7UUFDN0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQzs7eUhBbkZVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLDBPQ2J6Qyx5N0VBK0RBLHN3QkRsRGEsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsMkJBQTJCOzBKQUtyQyxHQUFHO3NCQURGLEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixJQUFJO3NCQURILEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdEJpbmFyeSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgQzh5SlNPTlNjaGVtYSwgZ2V0dGV4dCwgRmlsZXNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgQXNzZXRQcm9wZXJ0aWVzSXRlbSB9IGZyb20gJy4vYXNzZXQtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNyB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1wcm9wZXJ0aWVzLWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0UHJvcGVydGllc0l0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBc3NldFByb3BlcnRpZXNJdGVtLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBrZXk6IHN0cmluZztcbiAgQElucHV0KClcbiAgdmFsdWU6IGFueTtcbiAgQElucHV0KClcbiAgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KClcbiAgdHlwZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBmaWxlOiBJTWFuYWdlZE9iamVjdEJpbmFyeTtcbiAgQElucHV0KClcbiAgY29tcGxleDogQXNzZXRQcm9wZXJ0aWVzSXRlbVtdO1xuICBASW5wdXQoKVxuICBpc0VkaXQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGpzb25TY2hlbWE6IEpTT05TY2hlbWE3O1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuICBtb2RlbDogYW55O1xuICBwcmV2aWV3SW1hZ2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYzh5SnNvblNjaGVtYVNlcnZpY2U6IEM4eUpTT05TY2hlbWEsXG4gICAgcHVibGljIGZpbGVzU2VydmljZTogRmlsZXNTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuaXNFZGl0KSB7XG4gICAgICB0aGlzLnJlc29sdmVKc29uU2NoZW1hKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlc29sdmVGaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRmlsZSgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZUZpbGUgPSBhd2FpdCB0aGlzLmZpbGVzU2VydmljZS5nZXRGaWxlKHRoaXMuZmlsZSk7XG4gICAgICAgIHRoaXMucHJldmlld0ltYWdlID0gYXdhaXQgdGhpcy5nZXRQcmV2aWV3SWZJbWFnZShpbWFnZUZpbGUpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1Db21wbGV4UHJvcHNWYWx1ZSgpIHtcbiAgICBjb25zdCBjb21wbGV4UHJvcHMgPSB7fTtcbiAgICB0aGlzLmNvbXBsZXguZm9yRWFjaChjb21wbGV4T2JqID0+IHtcbiAgICAgIGlmIChjb21wbGV4T2JqLmZpbGUpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IGNvbXBsZXhPYmoudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVbY29tcGxleE9iai5rZXldICE9IG51bGwpIHtcbiAgICAgICAgY29tcGxleFByb3BzW2NvbXBsZXhPYmoua2V5XSA9IHRoaXMudmFsdWVbY29tcGxleE9iai5rZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb21wbGV4UHJvcHM7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGVsKCkge1xuICAgIGlmICh0aGlzLmNvbXBsZXggJiYgdGhpcy5jb21wbGV4Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFt0aGlzLmtleV06IHRoaXMuZm9ybUNvbXBsZXhQcm9wc1ZhbHVlKClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBjbG9uZSh0aGlzLnZhbHVlKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVKc29uU2NoZW1hKCkge1xuICAgIGlmICh0aGlzLmpzb25TY2hlbWEpIHtcbiAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5jOHlKc29uU2NoZW1hU2VydmljZS50b0ZpZWxkQ29uZmlnKHRoaXMuanNvblNjaGVtYSwgdGhpcy5qc29uU2NoZW1hKTtcbiAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgdGhpcy5maWVsZHMgPSBbZmllbGRDb25maWddO1xuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFByZXZpZXdJZkltYWdlKGltYWdlRmlsZTogRmlsZSkge1xuICAgIGlmICh0aGlzLmZpbGVzU2VydmljZS5oYXZlVmFsaWRFeHRlbnNpb25zKGltYWdlRmlsZSwgJ2ltYWdlJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzU2VydmljZS50b0Jhc2U2NChpbWFnZUZpbGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiICpuZ0lmPVwiIWlzRWRpdFwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICB7eyAodmFsdWUgfCBjOHlEYXRlOiAnZnVsbERhdGUnKSB8fCAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsZVwiPlxuICAgICAgPGltZyAqbmdJZj1cInByZXZpZXdJbWFnZVwiIFtzcmNdPVwicHJldmlld0ltYWdlXCIgY2xhc3M9XCJpbWctcmVzcG9uc2l2ZVwiIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiIXByZXZpZXdJbWFnZVwiXG4gICAgICAgIChjbGljayk9XCJmaWxlc1NlcnZpY2UuZG93bmxvYWQoZmlsZSlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnRG93bmxvYWQnIHwgdHJhbnNsYXRlIH19IHt7IGZpbGUubmFtZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhbiB0ZXh0LXRydW5jYXRlIHAtMFwiXG4gICAgICA+XG4gICAgICAgIHt7IGZpbGUubmFtZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWxlXCI+XG4gICAgICB7eyAnTm8gZmlsZSBhdHRhY2hlZC4nIHwgdHJhbnNsYXRlIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb2JqZWN0J1wiPlxuICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgYzh5LWN1c3RvbS1wcm9wZXJ0aWVzXCI+XG4gICAgICA8bGlcbiAgICAgICAgKm5nRm9yPVwibGV0IHByb3Agb2YgY29tcGxleDsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlcGFyYXRvci10b3AtYm90dG9tJzogaSA9PT0gMCwgJ3NlcGFyYXRvci1ib3R0b20nOiBpID4gMCB9XCJcbiAgICAgICAgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggdGV4dC1ub3dyYXBcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04IHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgcHJvcC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnYS1zLXN0YXJ0JzogcHJvcC5maWxlIH1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcHJvcC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCIgc3R5bGU9XCJtYXgtd2lkdGg6IHt7IHByb3AuZmlsZSA/ICc1MCUnIDogJzEwMCUnIH19OyBtaW4td2lkdGg6MDtcIj5cbiAgICAgICAgICA8Yzh5LWFzc2V0LXByb3BlcnRpZXMtaXRlbVxuICAgICAgICAgICAgW2ZpbGVdPVwicHJvcC5maWxlXCJcbiAgICAgICAgICAgIFtrZXldPVwicHJvcC5rZXlcIlxuICAgICAgICAgICAgW3R5cGVdPVwicHJvcC50eXBlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJwcm9wLnZhbHVlXCJcbiAgICAgICAgICA+PC9jOHktYXNzZXQtcHJvcGVydGllcy1pdGVtPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8IS0tXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxuICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInZhbHVlXCIgW2Rpc2FibGVkXT1cInRydWVcIiAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nID8gdHlwZSA6ICcnXCI+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgdGl0bGU9XCJ7eyB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XCI+XG4gICAgICB7eyB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XG4gICAgPC9wPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgIDxwIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiIHRpdGxlPVwie3sgKHZhbHVlIHwgdHJhbnNsYXRlKSB8fCAoJ1VuZGVmaW5lZCcgfCB0cmFuc2xhdGUpIH19XCI+XG4gICAgICB7eyAodmFsdWUgfCB0cmFuc2xhdGUpIHx8ICgnVW5kZWZpbmVkJyB8IHRyYW5zbGF0ZSkgfX1cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48Zm9ybWx5LWZvcm0gKm5nSWY9XCJpc0VkaXRcIiBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkc109XCJmaWVsZHNcIiBbbW9kZWxdPVwibW9kZWxcIj48L2Zvcm1seS1mb3JtPlxuIl19
@@ -61,7 +61,7 @@ export class AddTrustedCertificateComponent {
61
61
  }
62
62
  }
63
63
  AddTrustedCertificateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddTrustedCertificateComponent, deps: [{ token: i1.BsModalRef }, { token: i2.TrustedCertificateService }, { token: i3.AlertService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
64
- AddTrustedCertificateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AddTrustedCertificateComponent, selector: "c8y-add-trusted-certificate", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"certificate\"></i>\n <div class=\"modal-title\" id=\"addCertificateModalTitle\" translate>Add trusted certificate</div>\n </div>\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\" id=\"addCertificateModalDescription\">\n <form #addTrustedCertificateForm=\"ngForm\">\n <c8y-form-group>\n <label translate for=\"certificateName\">Certificate name</label>\n <input\n id=\"certificateName\"\n type=\"text\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"certificateName\"\n [(ngModel)]=\"trustedCertificate.name\"\n placeholder=\"{{ 'e.g. My certificate' | translate }}\"\n required\n />\n </c8y-form-group>\n <c8y-form-group>\n <label translate for=\"certificate\">Certificate</label>\n <c8y-drop-area\n class=\"drop-area-sm\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [title]=\"'Paste the certificate in PEM format.' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n <c8y-form-group>\n <label title=\"{{ 'Auto registration' | translate }}\" class=\"c8y-checkbox\">\n <input\n id=\"autoRegistration\"\n type=\"checkbox\"\n name=\"autoRegistration\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n <button\n class=\"btn\"\n type=\"button\"\n name=\"certificateStatus\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n >\n <span\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </span>\n </button>\n </form>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Add certificate' | translate }}\"\n (click)=\"save()\"\n [disabled]=\"\n addTrustedCertificateForm.form.invalid ||\n addTrustedCertificateForm.form.pristine ||\n !fileIsUploaded\n \"\n >\n {{ 'Add certificate' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: i3.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i5.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
64
+ AddTrustedCertificateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AddTrustedCertificateComponent, selector: "c8y-add-trusted-certificate", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"certificate\"></i>\n <div class=\"modal-title\" id=\"addCertificateModalTitle\" translate>Add trusted certificate</div>\n </div>\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\" id=\"addCertificateModalDescription\">\n <form #addTrustedCertificateForm=\"ngForm\">\n <c8y-form-group>\n <label translate for=\"certificateName\">Certificate name</label>\n <input\n id=\"certificateName\"\n type=\"text\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"certificateName\"\n [(ngModel)]=\"trustedCertificate.name\"\n placeholder=\"{{ 'e.g. My certificate' | translate }}\"\n required\n />\n </c8y-form-group>\n <c8y-form-group>\n <label translate for=\"certificate\">Certificate</label>\n <c8y-drop-area\n class=\"drop-area-sm\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [title]=\"'Paste the certificate in PEM format.' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n <c8y-form-group>\n <label title=\"{{ 'Auto registration' | translate }}\" class=\"c8y-checkbox\">\n <input\n id=\"autoRegistration\"\n type=\"checkbox\"\n name=\"autoRegistration\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n <button\n class=\"btn\"\n type=\"button\"\n name=\"certificateStatus\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n >\n <span\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </span>\n </button>\n </form>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Add certificate' | translate }}\"\n (click)=\"save()\"\n [disabled]=\"\n addTrustedCertificateForm.form.invalid ||\n addTrustedCertificateForm.form.pristine ||\n !fileIsUploaded\n \"\n >\n {{ 'Add certificate' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: i3.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: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i5.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
65
65
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddTrustedCertificateComponent, decorators: [{
66
66
  type: Component,
67
67
  args: [{ selector: 'c8y-add-trusted-certificate', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"certificate\"></i>\n <div class=\"modal-title\" id=\"addCertificateModalTitle\" translate>Add trusted certificate</div>\n </div>\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\" id=\"addCertificateModalDescription\">\n <form #addTrustedCertificateForm=\"ngForm\">\n <c8y-form-group>\n <label translate for=\"certificateName\">Certificate name</label>\n <input\n id=\"certificateName\"\n type=\"text\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"certificateName\"\n [(ngModel)]=\"trustedCertificate.name\"\n placeholder=\"{{ 'e.g. My certificate' | translate }}\"\n required\n />\n </c8y-form-group>\n <c8y-form-group>\n <label translate for=\"certificate\">Certificate</label>\n <c8y-drop-area\n class=\"drop-area-sm\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n [title]=\"'Paste the certificate in PEM format.' | translate\"\n [maxAllowedFiles]=\"maxAllowedFiles\"\n ></c8y-drop-area>\n </c8y-form-group>\n <c8y-form-group>\n <label title=\"{{ 'Auto registration' | translate }}\" class=\"c8y-checkbox\">\n <input\n id=\"autoRegistration\"\n type=\"checkbox\"\n name=\"autoRegistration\"\n [(ngModel)]=\"trustedCertificate.autoRegistrationEnabled\"\n />\n <span></span>\n <span>{{ 'Auto registration' | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n popover=\"{{ AUTO_REGISTRATION_POPOVER | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n <button\n class=\"btn\"\n type=\"button\"\n name=\"certificateStatus\"\n [(ngModel)]=\"trustedCertificate.status\"\n btnCheckbox\n btnCheckboxTrue=\"ENABLED\"\n btnCheckboxFalse=\"DISABLED\"\n >\n <span\n title=\"{{ 'Disabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'DISABLED'\"\n >\n {{ 'Disabled`trusted certificate status`' | translate }}\n </span>\n <span\n title=\"{{ 'Enabled`trusted certificate status`' | translate }}\"\n [hidden]=\"trustedCertificate.status !== 'ENABLED'\"\n >\n {{ 'Enabled`trusted certificate status`' | translate }}\n </span>\n </button>\n </form>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Add certificate' | translate }}\"\n (click)=\"save()\"\n [disabled]=\"\n addTrustedCertificateForm.form.invalid ||\n addTrustedCertificateForm.form.pristine ||\n !fileIsUploaded\n \"\n >\n {{ 'Add certificate' | translate }}\n </button>\n </div>\n</div>\n" }]