@c8y/ngx-components 1018.0.206 → 1018.0.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/common/ApplicationOptions.d.ts +6 -0
- package/ecosystem/shared/ecosystem.constants.d.ts +1 -1
- package/esm2020/auth-configuration/sso-configuration/template-parts/external-token-config.component.mjs +3 -3
- package/esm2020/cockpit-config/cockpit-configuration.component.mjs +3 -3
- package/esm2020/cockpit-config/setup/cockpit-setup-step3.component.mjs +3 -3
- package/esm2020/core/common/ApplicationOptions.mjs +1 -1
- package/esm2020/core/file-picker-new/file-picker-new.component.mjs +3 -3
- package/esm2020/core/file-picker-new/file-picker-validators.mjs +4 -4
- package/esm2020/core/help/help.component.mjs +3 -3
- package/esm2020/ecosystem/license-confirm/license-confirm-modal.component.mjs +5 -5
- package/esm2020/ecosystem/shared/ecosystem.constants.mjs +2 -2
- package/esm2020/icon-selector/icons/hands/index.mjs +2 -2
- package/esm2020/map/map-status.component.mjs +3 -3
- package/esm2020/protocol-lwm2m/factories/lwm2m-device-grid.factory.mjs +2 -2
- package/esm2020/sub-assets/assign-devices/assign-devices.component.mjs +3 -3
- package/esm2020/widgets/implementations/map/map-widget-config.component.mjs +3 -3
- package/fesm2015/c8y-ngx-components-auth-configuration.mjs +2 -2
- package/fesm2015/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-cockpit-config.mjs +4 -4
- package/fesm2015/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-license-confirm.mjs +4 -4
- package/fesm2015/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-icon-selector-icons-hands.mjs +1 -1
- package/fesm2015/c8y-ngx-components-icon-selector-icons-hands.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-map.mjs +2 -2
- package/fesm2015/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-protocol-lwm2m-factories.mjs +1 -1
- package/fesm2015/c8y-ngx-components-protocol-lwm2m-factories.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sub-assets.mjs +2 -2
- package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-widgets-implementations-map.mjs +2 -2
- package/fesm2015/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +7 -7
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-auth-configuration.mjs +2 -2
- package/fesm2020/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-cockpit-config.mjs +4 -4
- package/fesm2020/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-license-confirm.mjs +4 -4
- package/fesm2020/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-icon-selector-icons-hands.mjs +1 -1
- package/fesm2020/c8y-ngx-components-icon-selector-icons-hands.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-map.mjs +2 -2
- package/fesm2020/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-protocol-lwm2m-factories.mjs +1 -1
- package/fesm2020/c8y-ngx-components-protocol-lwm2m-factories.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sub-assets.mjs +2 -2
- package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-widgets-implementations-map.mjs +2 -2
- package/fesm2020/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +7 -7
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/icon-selector/icons/hands/index.d.ts +1 -1
- package/locales/de.po +519 -166
- package/locales/en.po +4 -1
- package/locales/es.po +816 -305
- package/locales/fr.po +732 -220
- package/locales/ja_JP.po +812 -225
- package/locales/ko.po +940 -429
- package/locales/locales.pot +20 -38
- package/locales/nl.po +804 -293
- package/locales/pl.po +712 -222
- package/locales/pt_BR.po +875 -364
- package/locales/ru.po +752 -250
- package/locales/zh_CN.po +823 -312
- package/locales/zh_TW.po +1188 -677
- package/package.json +1 -1
|
@@ -154,10 +154,10 @@ export class MapWidgetConfigComponent {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
MapWidgetConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: MapWidgetConfigComponent, deps: [{ token: i1.MapService }, { token: i2.AlertService }, { token: i3.TranslateService }, { token: MAP_DEFAULT_CONFIG, optional: true }, { token: i4.IconSelectorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
-
MapWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: MapWidgetConfigComponent, selector: "c8y-map-widget-config", inputs: { config: "config" }, viewQueries: [{ propertyName: "previewMap", first: true, predicate: MapComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row p-t-16\">\n <div class=\"col-xs-2\">\n <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n <label translate>Marker icon</label>\n <div class=\"icon-32 text-muted text-center p-b-8\" *ngIf=\"formConfig.icon\">\n <i [c8yIcon]=\"formConfig.icon\"></i>\n </div>\n <div class=\"icon-32 text-muted text-center\" *ngIf=\"!formConfig.icon\">\n <span class=\"d-block text-12 p-b-16 p-t-16\">\n <em>{{ 'Auto' | translate }}</em>\n </span>\n </div>\n <button\n type=\"button\"\n title=\"{{ 'Select icon to override default behavior' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"!formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Change icon' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Change' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Remove icon and use default behavior' | translate }}\"\n class=\"btn btn-danger btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"removeIcon()\"\n >\n {{ 'Remove' | translate }}\n </button>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-10\">\n <div class=\"row tight-grid separator-bottom\">\n <div class=\"col-xs-4\">\n <div class=\"form-group form-group-sm\">\n <label translate>Zoom level</label>\n <c8y-range\n #range\n [(ngModel)]=\"formConfig.zoomLevel\"\n name=\"zoomLevel\"\n class=\"label-bottom\"\n (change)=\"zoomLevelChanged()\"\n >\n <input type=\"range\" min=\"2\" max=\"18\" step=\"1\" />\n </c8y-range>\n </div>\n </div>\n <div class=\"col-xs-8\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Center bound</label>\n <div class=\"input-group input-group-sm\">\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lat\"\n [(ngModel)]=\"formConfig.center[0]\"\n (change)=\"changeCenter()\"\n name=\"centerLat\"\n />\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lng\"\n [(ngModel)]=\"formConfig.center[1]\"\n (change)=\"changeCenter()\"\n name=\"centerLng\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n (click)=\"useOwnPosition()\"\n [attr.aria-label]=\"'Use your location' | translate\"\n [tooltip]=\"'Use your location' | translate\"\n container=\"body\"\n placement=\"top\"\n >\n <i c8yIcon=\"location-arrow\" class=\"icon-14\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\" *ngIf=\"canAutoCenter\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Use selected asset location' | translate\"\n [tooltip]=\"'Use selected asset location' | translate\"\n placement=\"top\"\n container=\"body\"\n (click)=\"centerToAsset()\"\n >\n <i c8yIcon=\"location\" class=\"icon-14\"></i>\n </button>\n </div>\n </div>\n <div class=\"help-block\">\n {{ 'Drag the map below to the desired position' | translate }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row tight-grid p-t-8 d-flex a-i-center\">\n <div class=\"col-xs-4\">\n <c8y-form-group class=\"m-b-0 form-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"selectExample\"\n class=\"form-control\"\n [(ngModel)]=\"refreshOptions\"\n name=\"refreshSelection\"\n title=\"{{ 'Refresh options' | translate }}\"\n (change)=\"updateRefreshOptions()\"\n >\n <option value=\"none\" [title]=\"'Only refreshing on interaction' | translate\" translate>\n No automatic refresh\n </option>\n <option\n value=\"interval\"\n *ngIf=\"!isPositionedDevice\"\n [title]=\"'Refreshing after a give interval and on interaction' | translate\"\n translate\n >\n Use refresh interval\n </option>\n <option\n value=\"realtime\"\n *ngIf=\"isPositionedDevice\"\n [title]=\"'Live updating on each position change' | translate\"\n translate\n >\n Realtime\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-8\">\n <div class=\"form-group form-group-sm m-b-0\">\n <c8y-range\n #intervalRange\n [(ngModel)]=\"formConfig.refreshInterval\"\n name=\"refreshInterval\"\n class=\"label-bottom\"\n *ngIf=\"refreshOptions === 'interval'\"\n >\n <ng-template #c8yRangeValue>\n <div>\n <span\n translate\n [translateParams]=\"{ interval: intervalRange.value * 0.001 }\"\n ngNonBindable\n >\n {{ interval }}s\n </span>\n </div>\n </ng-template>\n <input type=\"range\" min=\"5000\" max=\"100000\" step=\"1000\" />\n </c8y-range>\n </div>\n <label class=\"c8y-switch c8y-switch--inline\" *ngIf=\"refreshOptions === 'realtime'\">\n <input type=\"checkbox\" [(ngModel)]=\"formConfig.follow\" name=\"follow\" />\n <span></span>\n <span class=\"text-12\" translate>Follow selected</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-t-16 p-b-16\" style=\"width: 100%; height: 240px\">\n <c8y-map\n [assets]=\"assets\"\n (onMove)=\"onPreviewMapMove($event)\"\n (onZoomStart)=\"onPreviewZoomStart()\"\n (onZoomEnd)=\"onPreviewZoomEnd($event)\"\n [config]=\"config.mapConfig\"\n ></c8y-map>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.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: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i2.RangeDirective, selector: "input[type=\"range\"]" }, { kind: "component", type: i2.RangeComponent, selector: "c8y-range" }, { kind: "component", type: i1.MapComponent, selector: "c8y-map", inputs: ["config", "assets"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
157
|
+
MapWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: MapWidgetConfigComponent, selector: "c8y-map-widget-config", inputs: { config: "config" }, viewQueries: [{ propertyName: "previewMap", first: true, predicate: MapComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row p-t-16\">\n <div class=\"col-xs-2\">\n <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n <label translate>Marker icon</label>\n <div class=\"icon-32 text-muted text-center p-b-8\" *ngIf=\"formConfig.icon\">\n <i [c8yIcon]=\"formConfig.icon\"></i>\n </div>\n <div class=\"icon-32 text-muted text-center\" *ngIf=\"!formConfig.icon\">\n <span class=\"d-block text-12 p-b-16 p-t-16\">\n <em>{{ 'Auto' | translate }}</em>\n </span>\n </div>\n <button\n type=\"button\"\n title=\"{{ 'Select icon to override default behavior' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"!formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Change icon' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Change' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Remove icon and use default behavior' | translate }}\"\n class=\"btn btn-danger btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"removeIcon()\"\n >\n {{ 'Remove' | translate }}\n </button>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-10\">\n <div class=\"row tight-grid separator-bottom\">\n <div class=\"col-xs-4\">\n <div class=\"form-group form-group-sm\">\n <label translate>Zoom level</label>\n <c8y-range\n #range\n [(ngModel)]=\"formConfig.zoomLevel\"\n name=\"zoomLevel\"\n class=\"label-bottom\"\n (change)=\"zoomLevelChanged()\"\n >\n <input type=\"range\" min=\"2\" max=\"18\" step=\"1\" />\n </c8y-range>\n </div>\n </div>\n <div class=\"col-xs-8\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Center bound</label>\n <div class=\"input-group input-group-sm\">\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lat\"\n [(ngModel)]=\"formConfig.center[0]\"\n (change)=\"changeCenter()\"\n name=\"centerLat\"\n />\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lng\"\n [(ngModel)]=\"formConfig.center[1]\"\n (change)=\"changeCenter()\"\n name=\"centerLng\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n (click)=\"useOwnPosition()\"\n [attr.aria-label]=\"'Use your location' | translate\"\n [tooltip]=\"'Use your location' | translate\"\n container=\"body\"\n placement=\"top\"\n >\n <i c8yIcon=\"location-arrow\" class=\"icon-14\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\" *ngIf=\"canAutoCenter\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Use selected asset location' | translate\"\n [tooltip]=\"'Use selected asset location' | translate\"\n placement=\"top\"\n container=\"body\"\n (click)=\"centerToAsset()\"\n >\n <i c8yIcon=\"location\" class=\"icon-14\"></i>\n </button>\n </div>\n </div>\n <div class=\"help-block\">\n {{ 'Drag the map to the desired position' | translate }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row tight-grid p-t-8 d-flex a-i-center\">\n <div class=\"col-xs-4\">\n <c8y-form-group class=\"m-b-0 form-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"selectExample\"\n class=\"form-control\"\n [(ngModel)]=\"refreshOptions\"\n name=\"refreshSelection\"\n title=\"{{ 'Refresh options' | translate }}\"\n (change)=\"updateRefreshOptions()\"\n >\n <option value=\"none\" [title]=\"'Only refreshing on interaction' | translate\" translate>\n No automatic refresh\n </option>\n <option\n value=\"interval\"\n *ngIf=\"!isPositionedDevice\"\n [title]=\"'Refreshing after a give interval and on interaction' | translate\"\n translate\n >\n Use refresh interval\n </option>\n <option\n value=\"realtime\"\n *ngIf=\"isPositionedDevice\"\n [title]=\"'Live updating on each position change' | translate\"\n translate\n >\n Realtime\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-8\">\n <div class=\"form-group form-group-sm m-b-0\">\n <c8y-range\n #intervalRange\n [(ngModel)]=\"formConfig.refreshInterval\"\n name=\"refreshInterval\"\n class=\"label-bottom\"\n *ngIf=\"refreshOptions === 'interval'\"\n >\n <ng-template #c8yRangeValue>\n <div>\n <span\n translate\n [translateParams]=\"{ interval: intervalRange.value * 0.001 }\"\n ngNonBindable\n >\n {{ interval }}s\n </span>\n </div>\n </ng-template>\n <input type=\"range\" min=\"5000\" max=\"100000\" step=\"1000\" />\n </c8y-range>\n </div>\n <label class=\"c8y-switch c8y-switch--inline\" *ngIf=\"refreshOptions === 'realtime'\">\n <input type=\"checkbox\" [(ngModel)]=\"formConfig.follow\" name=\"follow\" />\n <span></span>\n <span class=\"text-12\" translate>Follow selected</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-t-16 p-b-16\" style=\"width: 100%; height: 240px\">\n <c8y-map\n [assets]=\"assets\"\n (onMove)=\"onPreviewMapMove($event)\"\n (onZoomStart)=\"onPreviewZoomStart()\"\n (onZoomEnd)=\"onPreviewZoomEnd($event)\"\n [config]=\"config.mapConfig\"\n ></c8y-map>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.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: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i2.RangeDirective, selector: "input[type=\"range\"]" }, { kind: "component", type: i2.RangeComponent, selector: "c8y-range" }, { kind: "component", type: i1.MapComponent, selector: "c8y-map", inputs: ["config", "assets"], outputs: ["onMove", "onMoveEnd", "onZoomStart", "onZoomEnd"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
158
158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: MapWidgetConfigComponent, decorators: [{
|
|
159
159
|
type: Component,
|
|
160
|
-
args: [{ selector: 'c8y-map-widget-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"row p-t-16\">\n <div class=\"col-xs-2\">\n <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n <label translate>Marker icon</label>\n <div class=\"icon-32 text-muted text-center p-b-8\" *ngIf=\"formConfig.icon\">\n <i [c8yIcon]=\"formConfig.icon\"></i>\n </div>\n <div class=\"icon-32 text-muted text-center\" *ngIf=\"!formConfig.icon\">\n <span class=\"d-block text-12 p-b-16 p-t-16\">\n <em>{{ 'Auto' | translate }}</em>\n </span>\n </div>\n <button\n type=\"button\"\n title=\"{{ 'Select icon to override default behavior' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"!formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Change icon' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Change' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Remove icon and use default behavior' | translate }}\"\n class=\"btn btn-danger btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"removeIcon()\"\n >\n {{ 'Remove' | translate }}\n </button>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-10\">\n <div class=\"row tight-grid separator-bottom\">\n <div class=\"col-xs-4\">\n <div class=\"form-group form-group-sm\">\n <label translate>Zoom level</label>\n <c8y-range\n #range\n [(ngModel)]=\"formConfig.zoomLevel\"\n name=\"zoomLevel\"\n class=\"label-bottom\"\n (change)=\"zoomLevelChanged()\"\n >\n <input type=\"range\" min=\"2\" max=\"18\" step=\"1\" />\n </c8y-range>\n </div>\n </div>\n <div class=\"col-xs-8\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Center bound</label>\n <div class=\"input-group input-group-sm\">\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lat\"\n [(ngModel)]=\"formConfig.center[0]\"\n (change)=\"changeCenter()\"\n name=\"centerLat\"\n />\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lng\"\n [(ngModel)]=\"formConfig.center[1]\"\n (change)=\"changeCenter()\"\n name=\"centerLng\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n (click)=\"useOwnPosition()\"\n [attr.aria-label]=\"'Use your location' | translate\"\n [tooltip]=\"'Use your location' | translate\"\n container=\"body\"\n placement=\"top\"\n >\n <i c8yIcon=\"location-arrow\" class=\"icon-14\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\" *ngIf=\"canAutoCenter\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Use selected asset location' | translate\"\n [tooltip]=\"'Use selected asset location' | translate\"\n placement=\"top\"\n container=\"body\"\n (click)=\"centerToAsset()\"\n >\n <i c8yIcon=\"location\" class=\"icon-14\"></i>\n </button>\n </div>\n </div>\n <div class=\"help-block\">\n {{ 'Drag the map
|
|
160
|
+
args: [{ selector: 'c8y-map-widget-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"row p-t-16\">\n <div class=\"col-xs-2\">\n <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n <label translate>Marker icon</label>\n <div class=\"icon-32 text-muted text-center p-b-8\" *ngIf=\"formConfig.icon\">\n <i [c8yIcon]=\"formConfig.icon\"></i>\n </div>\n <div class=\"icon-32 text-muted text-center\" *ngIf=\"!formConfig.icon\">\n <span class=\"d-block text-12 p-b-16 p-t-16\">\n <em>{{ 'Auto' | translate }}</em>\n </span>\n </div>\n <button\n type=\"button\"\n title=\"{{ 'Select icon to override default behavior' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"!formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Change icon' | translate }}\"\n class=\"btn btn-default btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Change' | translate }}\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Remove icon and use default behavior' | translate }}\"\n class=\"btn btn-danger btn-xs btn-block\"\n *ngIf=\"formConfig.icon\"\n (click)=\"removeIcon()\"\n >\n {{ 'Remove' | translate }}\n </button>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-10\">\n <div class=\"row tight-grid separator-bottom\">\n <div class=\"col-xs-4\">\n <div class=\"form-group form-group-sm\">\n <label translate>Zoom level</label>\n <c8y-range\n #range\n [(ngModel)]=\"formConfig.zoomLevel\"\n name=\"zoomLevel\"\n class=\"label-bottom\"\n (change)=\"zoomLevelChanged()\"\n >\n <input type=\"range\" min=\"2\" max=\"18\" step=\"1\" />\n </c8y-range>\n </div>\n </div>\n <div class=\"col-xs-8\">\n <c8y-form-group class=\"form-group-sm m-b-8\">\n <label translate>Center bound</label>\n <div class=\"input-group input-group-sm\">\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lat\"\n [(ngModel)]=\"formConfig.center[0]\"\n (change)=\"changeCenter()\"\n name=\"centerLat\"\n />\n <input\n class=\"form-control\"\n type=\"number\"\n required\n placeholder=\"lng\"\n [(ngModel)]=\"formConfig.center[1]\"\n (change)=\"changeCenter()\"\n name=\"centerLng\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n (click)=\"useOwnPosition()\"\n [attr.aria-label]=\"'Use your location' | translate\"\n [tooltip]=\"'Use your location' | translate\"\n container=\"body\"\n placement=\"top\"\n >\n <i c8yIcon=\"location-arrow\" class=\"icon-14\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\" *ngIf=\"canAutoCenter\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Use selected asset location' | translate\"\n [tooltip]=\"'Use selected asset location' | translate\"\n placement=\"top\"\n container=\"body\"\n (click)=\"centerToAsset()\"\n >\n <i c8yIcon=\"location\" class=\"icon-14\"></i>\n </button>\n </div>\n </div>\n <div class=\"help-block\">\n {{ 'Drag the map to the desired position' | translate }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row tight-grid p-t-8 d-flex a-i-center\">\n <div class=\"col-xs-4\">\n <c8y-form-group class=\"m-b-0 form-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"selectExample\"\n class=\"form-control\"\n [(ngModel)]=\"refreshOptions\"\n name=\"refreshSelection\"\n title=\"{{ 'Refresh options' | translate }}\"\n (change)=\"updateRefreshOptions()\"\n >\n <option value=\"none\" [title]=\"'Only refreshing on interaction' | translate\" translate>\n No automatic refresh\n </option>\n <option\n value=\"interval\"\n *ngIf=\"!isPositionedDevice\"\n [title]=\"'Refreshing after a give interval and on interaction' | translate\"\n translate\n >\n Use refresh interval\n </option>\n <option\n value=\"realtime\"\n *ngIf=\"isPositionedDevice\"\n [title]=\"'Live updating on each position change' | translate\"\n translate\n >\n Realtime\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-8\">\n <div class=\"form-group form-group-sm m-b-0\">\n <c8y-range\n #intervalRange\n [(ngModel)]=\"formConfig.refreshInterval\"\n name=\"refreshInterval\"\n class=\"label-bottom\"\n *ngIf=\"refreshOptions === 'interval'\"\n >\n <ng-template #c8yRangeValue>\n <div>\n <span\n translate\n [translateParams]=\"{ interval: intervalRange.value * 0.001 }\"\n ngNonBindable\n >\n {{ interval }}s\n </span>\n </div>\n </ng-template>\n <input type=\"range\" min=\"5000\" max=\"100000\" step=\"1000\" />\n </c8y-range>\n </div>\n <label class=\"c8y-switch c8y-switch--inline\" *ngIf=\"refreshOptions === 'realtime'\">\n <input type=\"checkbox\" [(ngModel)]=\"formConfig.follow\" name=\"follow\" />\n <span></span>\n <span class=\"text-12\" translate>Follow selected</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-t-16 p-b-16\" style=\"width: 100%; height: 240px\">\n <c8y-map\n [assets]=\"assets\"\n (onMove)=\"onPreviewMapMove($event)\"\n (onZoomStart)=\"onPreviewZoomStart()\"\n (onZoomEnd)=\"onPreviewZoomEnd($event)\"\n [config]=\"config.mapConfig\"\n ></c8y-map>\n</div>\n" }]
|
|
161
161
|
}], ctorParameters: function () { return [{ type: i1.MapService }, { type: i2.AlertService }, { type: i3.TranslateService }, { type: undefined, decorators: [{
|
|
162
162
|
type: Optional
|
|
163
163
|
}, {
|
|
@@ -169,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
169
169
|
type: ViewChild,
|
|
170
170
|
args: [MapComponent]
|
|
171
171
|
}] } });
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXdpZGdldC1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvbWFwL21hcC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL21hcC9tYXAtd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWixVQUFVLEVBQ1Ysa0JBQWtCLEVBRW5CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQVN2RCxNQUFNLE9BQU8sd0JBQXdCO0lBa0JuQyxZQUNVLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNNLGFBQStCLEVBQ3ZFLFlBQWlDO1FBSmpDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNNLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUN2RSxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUF0QmxDLFdBQU0sR0FBb0I7WUFDakMsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FB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dEI3Qix3QkFBd0IsdUlBZXhCLFlBQVkscUVDL0N6QixtcE5BNExBLG1zR0Q5SmlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzJGQUV4RCx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsdUJBQXVCLGlCQUVsQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MEJBd0JoRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs4RUFyQi9CLE1BQU07c0JBQWQsS0FBSztnQkFlRSxVQUFVO3NCQURqQixTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pY29uLXNlbGVjdG9yJztcbmltcG9ydCB7XG4gIENsdXN0ZXJNYXBDb25maWcsXG4gIGRlZmF1bHRNYXBDb25maWcsXG4gIE1hcENvbXBvbmVudCxcbiAgTWFwRGVmYXVsdENvbmZpZyxcbiAgTWFwU2VydmljZSxcbiAgTUFQX0RFRkFVTFRfQ09ORklHLFxuICBQb3NpdGlvbk1hbmFnZWRPYmplY3Rcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHR5cGUgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IE1hcFdpZGdldENvbmZpZywgUmVmcmVzaE9wdGlvbnMgfSBmcm9tICcuL21hcC13aWRnZXQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbWFwLXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLXdpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIE1hcFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiBNYXBXaWRnZXRDb25maWcgPSB7XG4gICAgbWFwQ29uZmlnOiB1bmRlZmluZWRcbiAgfTtcblxuICBmb3JtQ29uZmlnOiBDbHVzdGVyTWFwQ29uZmlnO1xuXG4gIGNhbkF1dG9DZW50ZXIgPSB0cnVlO1xuICBpc1Bvc2l0aW9uZWREZXZpY2UgPSBmYWxzZTtcbiAgYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcbiAgcmVmcmVzaE9wdGlvbnM6IFJlZnJlc2hPcHRpb25zID0gJ25vbmUnO1xuXG4gIHByaXZhdGUgbGVhZmxldDogdHlwZW9mIEw7XG4gIHByaXZhdGUgY2VudGVySWNvbjogTC5NYXJrZXI7XG5cbiAgQFZpZXdDaGlsZChNYXBDb21wb25lbnQpXG4gIHByaXZhdGUgcHJldmlld01hcDogTWFwQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BUF9ERUZBVUxUX0NPTkZJRykgcHJpdmF0ZSBkZWZhdWx0Q29uZmlnOiBNYXBEZWZhdWx0Q29uZmlnLFxuICAgIHByaXZhdGUgaWNvblNlbGVjdG9yOiBJY29uU2VsZWN0b3JTZXJ2aWNlXG4gICkge1xuICAgIGlmICghdGhpcy5kZWZhdWx0Q29uZmlnKSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSBkZWZhdWx0TWFwQ29uZmlnO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Db25maWcgPSB7XG4gICAgICB6b29tTGV2ZWw6IHRoaXMuZGVmYXVsdENvbmZpZy56b29tTGV2ZWwsXG4gICAgICBjZW50ZXI6IHRoaXMuZGVmYXVsdENvbmZpZy5jZW50ZXJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5tYXBDb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZztcbiAgICB9XG4gICAgdGhpcy5mb3JtQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy5mb3JtQ29uZmlnLFxuICAgICAgLi4udGhpcy5jb25maWcubWFwQ29uZmlnLFxuICAgICAgZGlzYWJsZVBhbjogZmFsc2VcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQXNzZXQoKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY29uZmlnLnByZXZpb3VzVmFsdWUgJiZcbiAgICAgICFjaGFuZ2VzLmNvbmZpZy5maXJzdENoYW5nZVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVBc3NldCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmxlYWZsZXQgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0TGVhZmxldCgpO1xuICAgIHRoaXMuYWRkQ2VudGVySWNvbih0aGlzLmZvcm1Db25maWcuY2VudGVyWzBdLCB0aGlzLmZvcm1Db25maWcuY2VudGVyWzFdKTtcbiAgfVxuXG4gIG9uQmVmb3JlU2F2ZSgpIHtcbiAgICB0aGlzLmNvbmZpZy5tYXBDb25maWcgPSB0aGlzLmZvcm1Db25maWc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB6b29tTGV2ZWxDaGFuZ2VkKCkge1xuICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLm1hcENvbmZpZyxcbiAgICAgIHpvb21MZXZlbDogdGhpcy5mb3JtQ29uZmlnLnpvb21MZXZlbFxuICAgIH07XG4gIH1cblxuICBjaGFuZ2VDZW50ZXIoKSB7XG4gICAgdGhpcy5jb25maWcubWFwQ29uZmlnID0geyAuLi50aGlzLmZvcm1Db25maWcsIGNlbnRlcjogdGhpcy5mb3JtQ29uZmlnLmNlbnRlciB9O1xuICB9XG5cbiAgb25QcmV2aWV3Wm9vbVN0YXJ0KCkge1xuICAgIHRoaXMuY2VudGVySWNvbi5yZW1vdmUoKTtcbiAgfVxuXG4gIG9uUHJldmlld1pvb21FbmQoZXZlbnQ6IEwuTGVhZmxldEV2ZW50KSB7XG4gICAgdGhpcy5mb3JtQ29uZmlnLnpvb21MZXZlbCA9IE1hdGguZmxvb3IoZXZlbnQudGFyZ2V0LmdldFpvb20oKSk7XG4gIH1cblxuICBvblByZXZpZXdNYXBNb3ZlKGV2ZW50OiBMLkxlYWZsZXRFdmVudCkge1xuICAgIGlmICh0aGlzLmNlbnRlckljb24pIHtcbiAgICAgIHRoaXMuY2VudGVySWNvbi5yZW1vdmUoKTtcbiAgICB9XG4gICAgY29uc3QgeyBsYXQsIGxuZyB9ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5kcygpLmdldENlbnRlcigpO1xuICAgIHRoaXMuYWRkQ2VudGVySWNvbihsYXQsIGxuZyk7XG4gICAgdGhpcy5mb3JtQ29uZmlnLmNlbnRlciA9IFtsYXQsIGxuZ107XG4gIH1cblxuICB1c2VPd25Qb3NpdGlvbigpIHtcbiAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCh7IGNvb3JkcyB9KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Db25maWcuY2VudGVyID0gW2Nvb3Jkcy5sYXRpdHVkZSwgY29vcmRzLmxvbmdpdHVkZV07XG4gICAgICB0aGlzLmNoYW5nZUNlbnRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgY2VudGVyVG9Bc3NldCgpIHtcbiAgICB0aGlzLmZvcm1Db25maWcuY2VudGVyID0gW1xuICAgICAgdGhpcy5jb25maWcuZGV2aWNlLmM4eV9Qb3NpdGlvbi5sYXQsXG4gICAgICB0aGlzLmNvbmZpZy5kZXZpY2UuYzh5X1Bvc2l0aW9uLmxuZ1xuICAgIF07XG4gICAgdGhpcy5jaGFuZ2VDZW50ZXIoKTtcbiAgfVxuXG4gIHVwZGF0ZVJlZnJlc2hPcHRpb25zKCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSA9IHRoaXMucmVmcmVzaE9wdGlvbnMgPT09ICdyZWFsdGltZSc7XG4gICAgdGhpcy5mb3JtQ29uZmlnLnJlZnJlc2hJbnRlcnZhbCA9IHRoaXMucmVmcmVzaE9wdGlvbnMgPT09ICdpbnRlcnZhbCcgPyA1MDAwIDogbnVsbDtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvbGxvdyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5JY29uU2VsZWN0b3IoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGljb24gPSBhd2FpdCB0aGlzLmljb25TZWxlY3Rvci5zZWxlY3RJY29uKHtcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbjogdGhpcy5mb3JtQ29uZmlnLmljb25cbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtQ29uZmlnLmljb24gPSBpY29uO1xuICAgICAgdGhpcy5jb25maWcubWFwQ29uZmlnID0geyAuLi50aGlzLmNvbmZpZy5tYXBDb25maWcsIGljb24gfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICB9XG4gIH1cblxuICByZW1vdmVJY29uKCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZy5pY29uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZy5pY29uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJldmlld01hcC5yZWZyZXNoTWFya2VycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBc3NldCgpIHtcbiAgICB0aGlzLmNhbkF1dG9DZW50ZXIgPSB0aGlzLm1hcFNlcnZpY2UuaGFzUG9zaXRpb24odGhpcy5jb25maWcuZGV2aWNlKTtcbiAgICB0aGlzLmlzUG9zaXRpb25lZERldmljZSA9IHRoaXMubWFwU2VydmljZS5pc1Bvc2l0aW9uZWREZXZpY2UodGhpcy5jb25maWcuZGV2aWNlKTtcbiAgICB0aGlzLnJlZnJlc2hPcHRpb25zID0gdGhpcy5nZXRSZWZyZXNoT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlUmVmcmVzaE9wdGlvbnMoKTtcblxuICAgIGNvbnN0IHsgZGF0YSwgcGFnaW5nIH0gPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0QWxsUG9zaXRpb25zTU9zKHRoaXMuY29uZmlnLmRldmljZSk7XG4gICAgdGhpcy5hc3NldHMgPSBkYXRhO1xuICAgIGlmIChwYWdpbmcudG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnSXQgbWlnaHQgYmUgcG9zc2libGUgdGhhdCBhc3NldHMgYXJlIG5vdCBzaG93biBpbiB0aGUgcHJldmlldywgYXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGhhcyBtb3JlIHRoYW4gNTAwIGFzc2V0cyBhbmQgdGhlIHByZXZpZXcgb25seSBzdXBwb3J0cyBhIG1heGltdW0gb2YgNTAwIGFzc2V0cy4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWZyZXNoT3B0aW9ucygpOiBSZWZyZXNoT3B0aW9ucyB7XG4gICAgbGV0IG9wdGlvbjogUmVmcmVzaE9wdGlvbnMgPSAnbm9uZSc7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgb3B0aW9uID0gJ3JlYWx0aW1lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwpIHtcbiAgICAgIG9wdGlvbiA9ICdpbnRlcnZhbCc7XG4gICAgfVxuICAgIGNvbnN0IGlzTm90QWxsb3dlZE9wdGlvbiA9XG4gICAgICAoIXRoaXMuaXNQb3NpdGlvbmVkRGV2aWNlICYmIG9wdGlvbiA9PT0gJ3JlYWx0aW1lJykgfHxcbiAgICAgICh0aGlzLmlzUG9zaXRpb25lZERldmljZSAmJiBvcHRpb24gPT09ICdpbnRlcnZhbCcpO1xuICAgIG9wdGlvbiA9IGlzTm90QWxsb3dlZE9wdGlvbiA/ICdub25lJyA6IG9wdGlvbjtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDZW50ZXJJY29uKGxhdDogbnVtYmVyLCBsbmc6IG51bWJlcikge1xuICAgIGNvbnN0IHRpdGxlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ01hcCBjZW50ZXInKSk7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMubGVhZmxldC5kaXZJY29uKHtcbiAgICAgIGh0bWw6IGA8aSBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCIgY2xhc3M9XCJjOHktbWFwLW1hcmtlci1pY29uIHRleHQtbXV0ZWQgZGx0LWM4eS1pY29uLXRhcmdldCBpY29uLTJ4XCIgdGl0bGU9XCIke3RpdGxlVGV4dH1cIiAvPmBcbiAgICB9KTtcbiAgICB0aGlzLmNlbnRlckljb24gPSB0aGlzLmxlYWZsZXQubWFya2VyKFtsYXQsIGxuZ10sIHtcbiAgICAgIGljb25cbiAgICB9KTtcbiAgICB0aGlzLnByZXZpZXdNYXAuYWRkTWFya2VyVG9NYXAodGhpcy5jZW50ZXJJY29uKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvdyBwLXQtMTZcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC14cy0yXCI+XG4gICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTAgdGV4dC1jZW50ZXIgZm9ybS1ncm91cC1zbVwiPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NYXJrZXIgaWNvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi0zMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyIHAtYi04XCIgKm5nSWY9XCJmb3JtQ29uZmlnLmljb25cIj5cbiAgICAgICAgPGkgW2M4eUljb25dPVwiZm9ybUNvbmZpZy5pY29uXCI+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi0zMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyXCIgKm5nSWY9XCIhZm9ybUNvbmZpZy5pY29uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayB0ZXh0LTEyIHAtYi0xNiBwLXQtMTZcIj5cbiAgICAgICAgICA8ZW0+e3sgJ0F1dG8nIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3QgaWNvbiB0byBvdmVycmlkZSBkZWZhdWx0IGJlaGF2aW9yJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBidG4tYmxvY2tcIlxuICAgICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLmljb25cIlxuICAgICAgICAoY2xpY2spPVwib3Blbkljb25TZWxlY3RvcigpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ1NlbGVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2hhbmdlIGljb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIGJ0bi1ibG9ja1wiXG4gICAgICAgICpuZ0lmPVwiZm9ybUNvbmZpZy5pY29uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5JY29uU2VsZWN0b3IoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdDaGFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZSBpY29uIGFuZCB1c2UgZGVmYXVsdCBiZWhhdmlvcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi14cyBidG4tYmxvY2tcIlxuICAgICAgICAqbmdJZj1cImZvcm1Db25maWcuaWNvblwiXG4gICAgICAgIChjbGljayk9XCJyZW1vdmVJY29uKClcIlxuICAgICAgPlxuICAgICAgICB7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wteHMtMTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHRpZ2h0LWdyaWQgc2VwYXJhdG9yLWJvdHRvbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPlpvb20gbGV2ZWw8L2xhYmVsPlxuICAgICAgICAgIDxjOHktcmFuZ2VcbiAgICAgICAgICAgICNyYW5nZVxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtQ29uZmlnLnpvb21MZXZlbFwiXG4gICAgICAgICAgICBuYW1lPVwiem9vbUxldmVsXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtYm90dG9tXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiem9vbUxldmVsQ2hhbmdlZCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWluPVwiMlwiIG1heD1cIjE4XCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICAgIDwvYzh5LXJhbmdlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy04XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cImZvcm0tZ3JvdXAtc20gbS1iLThcIj5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPkNlbnRlciBib3VuZDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJsYXRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1Db25maWcuY2VudGVyWzBdXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VDZW50ZXIoKVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjZW50ZXJMYXRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImxuZ1wiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUNvbmZpZy5jZW50ZXJbMV1cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUNlbnRlcigpXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNlbnRlckxuZ1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VPd25Qb3NpdGlvbigpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidVc2UgeW91ciBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidVc2UgeW91ciBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibG9jYXRpb24tYXJyb3dcIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCIgKm5nSWY9XCJjYW5BdXRvQ2VudGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVXNlIHNlbGVjdGVkIGFzc2V0IGxvY2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1VzZSBzZWxlY3RlZCBhc3NldCBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNlbnRlclRvQXNzZXQoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibG9jYXRpb25cIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIj5cbiAgICAgICAgICAgIHt7ICdEcmFnIHRoZSBtYXAgYmVsb3cgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGlnaHQtZ3JpZCBwLXQtOCBkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy00XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0wIGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGlkPVwic2VsZWN0RXhhbXBsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZWZyZXNoT3B0aW9uc1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJyZWZyZXNoU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVmcmVzaCBvcHRpb25zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlUmVmcmVzaE9wdGlvbnMoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub25lXCIgW3RpdGxlXT1cIidPbmx5IHJlZnJlc2hpbmcgb24gaW50ZXJhY3Rpb24nIHwgdHJhbnNsYXRlXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIE5vIGF1dG9tYXRpYyByZWZyZXNoXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJpbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNQb3NpdGlvbmVkRGV2aWNlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1JlZnJlc2hpbmcgYWZ0ZXIgYSBnaXZlIGludGVydmFsIGFuZCBvbiBpbnRlcmFjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgVXNlIHJlZnJlc2ggaW50ZXJ2YWxcbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICB2YWx1ZT1cInJlYWx0aW1lXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzUG9zaXRpb25lZERldmljZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidMaXZlIHVwZGF0aW5nIG9uIGVhY2ggcG9zaXRpb24gY2hhbmdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBSZWFsdGltZVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZm9ybS1ncm91cC1zbSBtLWItMFwiPlxuICAgICAgICAgIDxjOHktcmFuZ2VcbiAgICAgICAgICAgICNpbnRlcnZhbFJhbmdlXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1Db25maWcucmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgIG5hbWU9XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJsYWJlbC1ib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJyZWZyZXNoT3B0aW9ucyA9PT0gJ2ludGVydmFsJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjOHlSYW5nZVZhbHVlPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBpbnRlcnZhbDogaW50ZXJ2YWxSYW5nZS52YWx1ZSAqIDAuMDAxIH1cIlxuICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGludGVydmFsIH19c1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1pbj1cIjUwMDBcIiBtYXg9XCIxMDAwMDBcIiBzdGVwPVwiMTAwMFwiIC8+XG4gICAgICAgICAgPC9jOHktcmFuZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoIGM4eS1zd2l0Y2gtLWlubGluZVwiICpuZ0lmPVwicmVmcmVzaE9wdGlvbnMgPT09ICdyZWFsdGltZSdcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJmb3JtQ29uZmlnLmZvbGxvd1wiIG5hbWU9XCJmb2xsb3dcIiAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTJcIiB0cmFuc2xhdGU+Rm9sbG93IHNlbGVjdGVkPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwLXQtMTYgcC1iLTE2XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAyNDBweFwiPlxuICA8Yzh5LW1hcFxuICAgIFthc3NldHNdPVwiYXNzZXRzXCJcbiAgICAob25Nb3ZlKT1cIm9uUHJldmlld01hcE1vdmUoJGV2ZW50KVwiXG4gICAgKG9uWm9vbVN0YXJ0KT1cIm9uUHJldmlld1pvb21TdGFydCgpXCJcbiAgICAob25ab29tRW5kKT1cIm9uUHJldmlld1pvb21FbmQoJGV2ZW50KVwiXG4gICAgW2NvbmZpZ109XCJjb25maWcubWFwQ29uZmlnXCJcbiAgPjwvYzh5LW1hcD5cbjwvZGl2PlxuIl19
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXdpZGdldC1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvbWFwL21hcC13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL21hcC9tYXAtd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWixVQUFVLEVBQ1Ysa0JBQWtCLEVBRW5CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQVN2RCxNQUFNLE9BQU8sd0JBQXdCO0lBa0JuQyxZQUNVLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNNLGFBQStCLEVBQ3ZFLFlBQWlDO1FBSmpDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNNLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUN2RSxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUF0QmxDLFdBQU0sR0FBb0I7WUFDakMsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FB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dEI3Qix3QkFBd0IsdUlBZXhCLFlBQVkscUVDL0N6Qiw2b05BNExBLG1zR0Q5SmlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzJGQUV4RCx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsdUJBQXVCLGlCQUVsQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MEJBd0JoRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs4RUFyQi9CLE1BQU07c0JBQWQsS0FBSztnQkFlRSxVQUFVO3NCQURqQixTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pY29uLXNlbGVjdG9yJztcbmltcG9ydCB7XG4gIENsdXN0ZXJNYXBDb25maWcsXG4gIGRlZmF1bHRNYXBDb25maWcsXG4gIE1hcENvbXBvbmVudCxcbiAgTWFwRGVmYXVsdENvbmZpZyxcbiAgTWFwU2VydmljZSxcbiAgTUFQX0RFRkFVTFRfQ09ORklHLFxuICBQb3NpdGlvbk1hbmFnZWRPYmplY3Rcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHR5cGUgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IE1hcFdpZGdldENvbmZpZywgUmVmcmVzaE9wdGlvbnMgfSBmcm9tICcuL21hcC13aWRnZXQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbWFwLXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLXdpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIE1hcFdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiBNYXBXaWRnZXRDb25maWcgPSB7XG4gICAgbWFwQ29uZmlnOiB1bmRlZmluZWRcbiAgfTtcblxuICBmb3JtQ29uZmlnOiBDbHVzdGVyTWFwQ29uZmlnO1xuXG4gIGNhbkF1dG9DZW50ZXIgPSB0cnVlO1xuICBpc1Bvc2l0aW9uZWREZXZpY2UgPSBmYWxzZTtcbiAgYXNzZXRzOiBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcbiAgcmVmcmVzaE9wdGlvbnM6IFJlZnJlc2hPcHRpb25zID0gJ25vbmUnO1xuXG4gIHByaXZhdGUgbGVhZmxldDogdHlwZW9mIEw7XG4gIHByaXZhdGUgY2VudGVySWNvbjogTC5NYXJrZXI7XG5cbiAgQFZpZXdDaGlsZChNYXBDb21wb25lbnQpXG4gIHByaXZhdGUgcHJldmlld01hcDogTWFwQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BUF9ERUZBVUxUX0NPTkZJRykgcHJpdmF0ZSBkZWZhdWx0Q29uZmlnOiBNYXBEZWZhdWx0Q29uZmlnLFxuICAgIHByaXZhdGUgaWNvblNlbGVjdG9yOiBJY29uU2VsZWN0b3JTZXJ2aWNlXG4gICkge1xuICAgIGlmICghdGhpcy5kZWZhdWx0Q29uZmlnKSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSBkZWZhdWx0TWFwQ29uZmlnO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Db25maWcgPSB7XG4gICAgICB6b29tTGV2ZWw6IHRoaXMuZGVmYXVsdENvbmZpZy56b29tTGV2ZWwsXG4gICAgICBjZW50ZXI6IHRoaXMuZGVmYXVsdENvbmZpZy5jZW50ZXJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5tYXBDb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZztcbiAgICB9XG4gICAgdGhpcy5mb3JtQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy5mb3JtQ29uZmlnLFxuICAgICAgLi4udGhpcy5jb25maWcubWFwQ29uZmlnLFxuICAgICAgZGlzYWJsZVBhbjogZmFsc2VcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQXNzZXQoKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY29uZmlnLnByZXZpb3VzVmFsdWUgJiZcbiAgICAgICFjaGFuZ2VzLmNvbmZpZy5maXJzdENoYW5nZVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVBc3NldCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmxlYWZsZXQgPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0TGVhZmxldCgpO1xuICAgIHRoaXMuYWRkQ2VudGVySWNvbih0aGlzLmZvcm1Db25maWcuY2VudGVyWzBdLCB0aGlzLmZvcm1Db25maWcuY2VudGVyWzFdKTtcbiAgfVxuXG4gIG9uQmVmb3JlU2F2ZSgpIHtcbiAgICB0aGlzLmNvbmZpZy5tYXBDb25maWcgPSB0aGlzLmZvcm1Db25maWc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB6b29tTGV2ZWxDaGFuZ2VkKCkge1xuICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLm1hcENvbmZpZyxcbiAgICAgIHpvb21MZXZlbDogdGhpcy5mb3JtQ29uZmlnLnpvb21MZXZlbFxuICAgIH07XG4gIH1cblxuICBjaGFuZ2VDZW50ZXIoKSB7XG4gICAgdGhpcy5jb25maWcubWFwQ29uZmlnID0geyAuLi50aGlzLmZvcm1Db25maWcsIGNlbnRlcjogdGhpcy5mb3JtQ29uZmlnLmNlbnRlciB9O1xuICB9XG5cbiAgb25QcmV2aWV3Wm9vbVN0YXJ0KCkge1xuICAgIHRoaXMuY2VudGVySWNvbi5yZW1vdmUoKTtcbiAgfVxuXG4gIG9uUHJldmlld1pvb21FbmQoZXZlbnQ6IEwuTGVhZmxldEV2ZW50KSB7XG4gICAgdGhpcy5mb3JtQ29uZmlnLnpvb21MZXZlbCA9IE1hdGguZmxvb3IoZXZlbnQudGFyZ2V0LmdldFpvb20oKSk7XG4gIH1cblxuICBvblByZXZpZXdNYXBNb3ZlKGV2ZW50OiBMLkxlYWZsZXRFdmVudCkge1xuICAgIGlmICh0aGlzLmNlbnRlckljb24pIHtcbiAgICAgIHRoaXMuY2VudGVySWNvbi5yZW1vdmUoKTtcbiAgICB9XG4gICAgY29uc3QgeyBsYXQsIGxuZyB9ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5kcygpLmdldENlbnRlcigpO1xuICAgIHRoaXMuYWRkQ2VudGVySWNvbihsYXQsIGxuZyk7XG4gICAgdGhpcy5mb3JtQ29uZmlnLmNlbnRlciA9IFtsYXQsIGxuZ107XG4gIH1cblxuICB1c2VPd25Qb3NpdGlvbigpIHtcbiAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCh7IGNvb3JkcyB9KSA9PiB7XG4gICAgICB0aGlzLmZvcm1Db25maWcuY2VudGVyID0gW2Nvb3Jkcy5sYXRpdHVkZSwgY29vcmRzLmxvbmdpdHVkZV07XG4gICAgICB0aGlzLmNoYW5nZUNlbnRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgY2VudGVyVG9Bc3NldCgpIHtcbiAgICB0aGlzLmZvcm1Db25maWcuY2VudGVyID0gW1xuICAgICAgdGhpcy5jb25maWcuZGV2aWNlLmM4eV9Qb3NpdGlvbi5sYXQsXG4gICAgICB0aGlzLmNvbmZpZy5kZXZpY2UuYzh5X1Bvc2l0aW9uLmxuZ1xuICAgIF07XG4gICAgdGhpcy5jaGFuZ2VDZW50ZXIoKTtcbiAgfVxuXG4gIHVwZGF0ZVJlZnJlc2hPcHRpb25zKCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSA9IHRoaXMucmVmcmVzaE9wdGlvbnMgPT09ICdyZWFsdGltZSc7XG4gICAgdGhpcy5mb3JtQ29uZmlnLnJlZnJlc2hJbnRlcnZhbCA9IHRoaXMucmVmcmVzaE9wdGlvbnMgPT09ICdpbnRlcnZhbCcgPyA1MDAwIDogbnVsbDtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvbGxvdyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5JY29uU2VsZWN0b3IoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGljb24gPSBhd2FpdCB0aGlzLmljb25TZWxlY3Rvci5zZWxlY3RJY29uKHtcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbjogdGhpcy5mb3JtQ29uZmlnLmljb25cbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtQ29uZmlnLmljb24gPSBpY29uO1xuICAgICAgdGhpcy5jb25maWcubWFwQ29uZmlnID0geyAuLi50aGlzLmNvbmZpZy5tYXBDb25maWcsIGljb24gfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICB9XG4gIH1cblxuICByZW1vdmVJY29uKCkge1xuICAgIHRoaXMuZm9ybUNvbmZpZy5pY29uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29uZmlnLm1hcENvbmZpZy5pY29uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJldmlld01hcC5yZWZyZXNoTWFya2VycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBc3NldCgpIHtcbiAgICB0aGlzLmNhbkF1dG9DZW50ZXIgPSB0aGlzLm1hcFNlcnZpY2UuaGFzUG9zaXRpb24odGhpcy5jb25maWcuZGV2aWNlKTtcbiAgICB0aGlzLmlzUG9zaXRpb25lZERldmljZSA9IHRoaXMubWFwU2VydmljZS5pc1Bvc2l0aW9uZWREZXZpY2UodGhpcy5jb25maWcuZGV2aWNlKTtcbiAgICB0aGlzLnJlZnJlc2hPcHRpb25zID0gdGhpcy5nZXRSZWZyZXNoT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlUmVmcmVzaE9wdGlvbnMoKTtcblxuICAgIGNvbnN0IHsgZGF0YSwgcGFnaW5nIH0gPSBhd2FpdCB0aGlzLm1hcFNlcnZpY2UuZ2V0QWxsUG9zaXRpb25zTU9zKHRoaXMuY29uZmlnLmRldmljZSk7XG4gICAgdGhpcy5hc3NldHMgPSBkYXRhO1xuICAgIGlmIChwYWdpbmcudG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnSXQgbWlnaHQgYmUgcG9zc2libGUgdGhhdCBhc3NldHMgYXJlIG5vdCBzaG93biBpbiB0aGUgcHJldmlldywgYXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGhhcyBtb3JlIHRoYW4gNTAwIGFzc2V0cyBhbmQgdGhlIHByZXZpZXcgb25seSBzdXBwb3J0cyBhIG1heGltdW0gb2YgNTAwIGFzc2V0cy4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWZyZXNoT3B0aW9ucygpOiBSZWZyZXNoT3B0aW9ucyB7XG4gICAgbGV0IG9wdGlvbjogUmVmcmVzaE9wdGlvbnMgPSAnbm9uZSc7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgb3B0aW9uID0gJ3JlYWx0aW1lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwpIHtcbiAgICAgIG9wdGlvbiA9ICdpbnRlcnZhbCc7XG4gICAgfVxuICAgIGNvbnN0IGlzTm90QWxsb3dlZE9wdGlvbiA9XG4gICAgICAoIXRoaXMuaXNQb3NpdGlvbmVkRGV2aWNlICYmIG9wdGlvbiA9PT0gJ3JlYWx0aW1lJykgfHxcbiAgICAgICh0aGlzLmlzUG9zaXRpb25lZERldmljZSAmJiBvcHRpb24gPT09ICdpbnRlcnZhbCcpO1xuICAgIG9wdGlvbiA9IGlzTm90QWxsb3dlZE9wdGlvbiA/ICdub25lJyA6IG9wdGlvbjtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDZW50ZXJJY29uKGxhdDogbnVtYmVyLCBsbmc6IG51bWJlcikge1xuICAgIGNvbnN0IHRpdGxlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ01hcCBjZW50ZXInKSk7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMubGVhZmxldC5kaXZJY29uKHtcbiAgICAgIGh0bWw6IGA8aSBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCIgY2xhc3M9XCJjOHktbWFwLW1hcmtlci1pY29uIHRleHQtbXV0ZWQgZGx0LWM4eS1pY29uLXRhcmdldCBpY29uLTJ4XCIgdGl0bGU9XCIke3RpdGxlVGV4dH1cIiAvPmBcbiAgICB9KTtcbiAgICB0aGlzLmNlbnRlckljb24gPSB0aGlzLmxlYWZsZXQubWFya2VyKFtsYXQsIGxuZ10sIHtcbiAgICAgIGljb25cbiAgICB9KTtcbiAgICB0aGlzLnByZXZpZXdNYXAuYWRkTWFya2VyVG9NYXAodGhpcy5jZW50ZXJJY29uKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvdyBwLXQtMTZcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC14cy0yXCI+XG4gICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwibS1iLTAgdGV4dC1jZW50ZXIgZm9ybS1ncm91cC1zbVwiPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NYXJrZXIgaWNvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi0zMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyIHAtYi04XCIgKm5nSWY9XCJmb3JtQ29uZmlnLmljb25cIj5cbiAgICAgICAgPGkgW2M4eUljb25dPVwiZm9ybUNvbmZpZy5pY29uXCI+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi0zMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyXCIgKm5nSWY9XCIhZm9ybUNvbmZpZy5pY29uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayB0ZXh0LTEyIHAtYi0xNiBwLXQtMTZcIj5cbiAgICAgICAgICA8ZW0+e3sgJ0F1dG8nIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3QgaWNvbiB0byBvdmVycmlkZSBkZWZhdWx0IGJlaGF2aW9yJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBidG4tYmxvY2tcIlxuICAgICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLmljb25cIlxuICAgICAgICAoY2xpY2spPVwib3Blbkljb25TZWxlY3RvcigpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ1NlbGVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2hhbmdlIGljb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIGJ0bi1ibG9ja1wiXG4gICAgICAgICpuZ0lmPVwiZm9ybUNvbmZpZy5pY29uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5JY29uU2VsZWN0b3IoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdDaGFuZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZSBpY29uIGFuZCB1c2UgZGVmYXVsdCBiZWhhdmlvcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi14cyBidG4tYmxvY2tcIlxuICAgICAgICAqbmdJZj1cImZvcm1Db25maWcuaWNvblwiXG4gICAgICAgIChjbGljayk9XCJyZW1vdmVJY29uKClcIlxuICAgICAgPlxuICAgICAgICB7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2wteHMtMTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHRpZ2h0LWdyaWQgc2VwYXJhdG9yLWJvdHRvbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPlpvb20gbGV2ZWw8L2xhYmVsPlxuICAgICAgICAgIDxjOHktcmFuZ2VcbiAgICAgICAgICAgICNyYW5nZVxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtQ29uZmlnLnpvb21MZXZlbFwiXG4gICAgICAgICAgICBuYW1lPVwiem9vbUxldmVsXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtYm90dG9tXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiem9vbUxldmVsQ2hhbmdlZCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgbWluPVwiMlwiIG1heD1cIjE4XCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICAgIDwvYzh5LXJhbmdlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy04XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cImZvcm0tZ3JvdXAtc20gbS1iLThcIj5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPkNlbnRlciBib3VuZDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJsYXRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1Db25maWcuY2VudGVyWzBdXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VDZW50ZXIoKVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjZW50ZXJMYXRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImxuZ1wiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybUNvbmZpZy5jZW50ZXJbMV1cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUNlbnRlcigpXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNlbnRlckxuZ1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VPd25Qb3NpdGlvbigpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidVc2UgeW91ciBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidVc2UgeW91ciBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibG9jYXRpb24tYXJyb3dcIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCIgKm5nSWY9XCJjYW5BdXRvQ2VudGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVXNlIHNlbGVjdGVkIGFzc2V0IGxvY2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1VzZSBzZWxlY3RlZCBhc3NldCBsb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNlbnRlclRvQXNzZXQoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibG9jYXRpb25cIiBjbGFzcz1cImljb24tMTRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIj5cbiAgICAgICAgICAgIHt7ICdEcmFnIHRoZSBtYXAgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGlnaHQtZ3JpZCBwLXQtOCBkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy00XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cIm0tYi0wIGZvcm0tZ3JvdXAtc21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGlkPVwic2VsZWN0RXhhbXBsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZWZyZXNoT3B0aW9uc1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJyZWZyZXNoU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVmcmVzaCBvcHRpb25zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlUmVmcmVzaE9wdGlvbnMoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub25lXCIgW3RpdGxlXT1cIidPbmx5IHJlZnJlc2hpbmcgb24gaW50ZXJhY3Rpb24nIHwgdHJhbnNsYXRlXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIE5vIGF1dG9tYXRpYyByZWZyZXNoXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJpbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNQb3NpdGlvbmVkRGV2aWNlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1JlZnJlc2hpbmcgYWZ0ZXIgYSBnaXZlIGludGVydmFsIGFuZCBvbiBpbnRlcmFjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgVXNlIHJlZnJlc2ggaW50ZXJ2YWxcbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICB2YWx1ZT1cInJlYWx0aW1lXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzUG9zaXRpb25lZERldmljZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidMaXZlIHVwZGF0aW5nIG9uIGVhY2ggcG9zaXRpb24gY2hhbmdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBSZWFsdGltZVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZm9ybS1ncm91cC1zbSBtLWItMFwiPlxuICAgICAgICAgIDxjOHktcmFuZ2VcbiAgICAgICAgICAgICNpbnRlcnZhbFJhbmdlXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1Db25maWcucmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgIG5hbWU9XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJsYWJlbC1ib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJyZWZyZXNoT3B0aW9ucyA9PT0gJ2ludGVydmFsJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjOHlSYW5nZVZhbHVlPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBpbnRlcnZhbDogaW50ZXJ2YWxSYW5nZS52YWx1ZSAqIDAuMDAxIH1cIlxuICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGludGVydmFsIH19c1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIG1pbj1cIjUwMDBcIiBtYXg9XCIxMDAwMDBcIiBzdGVwPVwiMTAwMFwiIC8+XG4gICAgICAgICAgPC9jOHktcmFuZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoIGM4eS1zd2l0Y2gtLWlubGluZVwiICpuZ0lmPVwicmVmcmVzaE9wdGlvbnMgPT09ICdyZWFsdGltZSdcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJmb3JtQ29uZmlnLmZvbGxvd1wiIG5hbWU9XCJmb2xsb3dcIiAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTJcIiB0cmFuc2xhdGU+Rm9sbG93IHNlbGVjdGVkPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwLXQtMTYgcC1iLTE2XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAyNDBweFwiPlxuICA8Yzh5LW1hcFxuICAgIFthc3NldHNdPVwiYXNzZXRzXCJcbiAgICAob25Nb3ZlKT1cIm9uUHJldmlld01hcE1vdmUoJGV2ZW50KVwiXG4gICAgKG9uWm9vbVN0YXJ0KT1cIm9uUHJldmlld1pvb21TdGFydCgpXCJcbiAgICAob25ab29tRW5kKT1cIm9uUHJldmlld1pvb21FbmQoJGV2ZW50KVwiXG4gICAgW2NvbmZpZ109XCJjb25maWcubWFwQ29uZmlnXCJcbiAgPjwvYzh5LW1hcD5cbjwvZGl2PlxuIl19
|
|
@@ -1697,10 +1697,10 @@ class ExternalTokenConfigComponent {
|
|
|
1697
1697
|
}
|
|
1698
1698
|
}
|
|
1699
1699
|
ExternalTokenConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ExternalTokenConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1700
|
-
ExternalTokenConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ExternalTokenConfigComponent, selector: "c8y-external-token-config", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"col-md-12 p-16\">\n <div class=\"row m-l-8 m-r-8\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div class=\"h4 text-normal text-right text-left-xs\" translate>\n External token configuration\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9 p-0\" *ngIf=\"templateModel\">\n <div class=\"row p-l-4\">\n <div class=\"col-md-8\">\n <label\n for=\"enabled\"\n title=\"{{\n 'Allow authentication with access token from external
|
|
1700
|
+
ExternalTokenConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ExternalTokenConfigComponent, selector: "c8y-external-token-config", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"col-md-12 p-16\">\n <div class=\"row m-l-8 m-r-8\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div class=\"h4 text-normal text-right text-left-xs\" translate>\n External token configuration\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9 p-0\" *ngIf=\"templateModel\">\n <div class=\"row p-l-4\">\n <div class=\"col-md-8\">\n <label\n for=\"enabled\"\n title=\"{{\n 'Allow authentication with access token from external AIM system' | translate\n }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"enabled\"\n name=\"enabled\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.enabled\"\n />\n <span></span>\n <span class=\"control-label\">\n {{ 'Allow authentication with access token from external AIM system' | translate }}\n </span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.enabled\">\n <c8y-user-id-configuration\n [userIdConfig]=\"externalTokenConfig.userOrAppIdConfig\"\n [withHeader]=\"false\"\n ></c8y-user-id-configuration>\n <div class=\"row p-l-4\">\n <div class=\"col-sm-6\">\n <label\n for=\"validationRequired\"\n title=\"{{ 'Validate access token' | translate }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"validationRequired\"\n name=\"validationRequired\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.validationRequired\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Validate access token' | translate }}</span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.validationRequired\">\n <div class=\"row\">\n <div class=\"col-sm-6 m-t-16 m-l-8\">\n <label for=\"validationMethod\" class=\"control-label\" translate>\n Validation method\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"validationMethod\"\n name=\"validationMethod\"\n [ngModel]=\"externalTokenConfig.validationMethod\"\n (ngModelChange)=\"onValidationMethodChange($event)\"\n >\n <option\n *ngFor=\"let validationMethod of validationMethods | keyvalue\"\n [ngValue]=\"validationMethod.key\"\n >\n {{ validationMethod.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <c8y-request-configuration\n [templateModel]=\"externalTokenConfig\"\n [requestName]=\"'Token validation request' | translate\"\n [requestType]=\"'tokenValidationRequest'\"\n ></c8y-request-configuration>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6 m-l-8\">\n <c8y-form-group>\n <label\n for=\"accessTokenValidityCheckIntervalInMinutes\"\n class=\"control-label\"\n translate\n >\n Access token validation frequency\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"accessTokenValidityCheckIntervalInMinutes\"\n name=\"accessTokenValidityCheckIntervalInMinutes\"\n [(ngModel)]=\"externalTokenConfig.accessTokenValidityCheckIntervalInMinutes\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '1' }\"\n step=\"1\"\n required\n [min]=\"1\"\n />\n <span class=\"input-group-addon\" translate>minutes</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { 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: i1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: RequestConfigurationComponent, selector: "c8y-request-configuration", inputs: ["templateModel", "requestName", "requestType"] }, { kind: "component", type: UserIdConfigurationComponent, selector: "c8y-user-id-configuration", inputs: ["userIdConfig", "withHeader"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
1701
1701
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ExternalTokenConfigComponent, decorators: [{
|
|
1702
1702
|
type: Component,
|
|
1703
|
-
args: [{ selector: 'c8y-external-token-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"col-md-12 p-16\">\n <div class=\"row m-l-8 m-r-8\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div class=\"h4 text-normal text-right text-left-xs\" translate>\n External token configuration\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9 p-0\" *ngIf=\"templateModel\">\n <div class=\"row p-l-4\">\n <div class=\"col-md-8\">\n <label\n for=\"enabled\"\n title=\"{{\n 'Allow authentication with access token from external
|
|
1703
|
+
args: [{ selector: 'c8y-external-token-config', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"col-md-12 p-16\">\n <div class=\"row m-l-8 m-r-8\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div class=\"h4 text-normal text-right text-left-xs\" translate>\n External token configuration\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9 p-0\" *ngIf=\"templateModel\">\n <div class=\"row p-l-4\">\n <div class=\"col-md-8\">\n <label\n for=\"enabled\"\n title=\"{{\n 'Allow authentication with access token from external AIM system' | translate\n }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"enabled\"\n name=\"enabled\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.enabled\"\n />\n <span></span>\n <span class=\"control-label\">\n {{ 'Allow authentication with access token from external AIM system' | translate }}\n </span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.enabled\">\n <c8y-user-id-configuration\n [userIdConfig]=\"externalTokenConfig.userOrAppIdConfig\"\n [withHeader]=\"false\"\n ></c8y-user-id-configuration>\n <div class=\"row p-l-4\">\n <div class=\"col-sm-6\">\n <label\n for=\"validationRequired\"\n title=\"{{ 'Validate access token' | translate }}\"\n class=\"c8y-switch\"\n >\n <input\n id=\"validationRequired\"\n name=\"validationRequired\"\n type=\"checkbox\"\n [(ngModel)]=\"externalTokenConfig.validationRequired\"\n />\n <span></span>\n <span class=\"control-label\">{{ 'Validate access token' | translate }}</span>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"externalTokenConfig.validationRequired\">\n <div class=\"row\">\n <div class=\"col-sm-6 m-t-16 m-l-8\">\n <label for=\"validationMethod\" class=\"control-label\" translate>\n Validation method\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"validationMethod\"\n name=\"validationMethod\"\n [ngModel]=\"externalTokenConfig.validationMethod\"\n (ngModelChange)=\"onValidationMethodChange($event)\"\n >\n <option\n *ngFor=\"let validationMethod of validationMethods | keyvalue\"\n [ngValue]=\"validationMethod.key\"\n >\n {{ validationMethod.value.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <c8y-request-configuration\n [templateModel]=\"externalTokenConfig\"\n [requestName]=\"'Token validation request' | translate\"\n [requestType]=\"'tokenValidationRequest'\"\n ></c8y-request-configuration>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6 m-l-8\">\n <c8y-form-group>\n <label\n for=\"accessTokenValidityCheckIntervalInMinutes\"\n class=\"control-label\"\n translate\n >\n Access token validation frequency\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n class=\"form-control\"\n id=\"accessTokenValidityCheckIntervalInMinutes\"\n name=\"accessTokenValidityCheckIntervalInMinutes\"\n [(ngModel)]=\"externalTokenConfig.accessTokenValidityCheckIntervalInMinutes\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '1' }\"\n step=\"1\"\n required\n [min]=\"1\"\n />\n <span class=\"input-group-addon\" translate>minutes</span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n" }]
|
|
1704
1704
|
}], propDecorators: { templateModel: [{
|
|
1705
1705
|
type: Input
|
|
1706
1706
|
}] } });
|