@c8y/ngx-components 1021.63.2 → 1021.64.0

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 (62) hide show
  1. package/core/bottom-drawer/bottom-drawer-ref.d.ts +4 -0
  2. package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
  3. package/core/plugins/plugins.model.d.ts +1 -0
  4. package/core/plugins/plugins.model.d.ts.map +1 -1
  5. package/core/plugins/plugins.service.d.ts +5 -2
  6. package/core/plugins/plugins.service.d.ts.map +1 -1
  7. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +15 -0
  8. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -0
  9. package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -2
  10. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  11. package/ecosystem/application-plugins/application-plugins.module.d.ts +4 -3
  12. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  13. package/ecosystem/application-plugins/install-plugin.component.d.ts +8 -4
  14. package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
  15. package/ecosystem/application-plugins/plugin-list.component.d.ts +10 -26
  16. package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
  17. package/ecosystem/application-plugins/plugin-list.service.d.ts +27 -0
  18. package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -0
  19. package/ecosystem/packages/package-details/package-details.component.d.ts +7 -9
  20. package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
  21. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +5 -1
  22. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
  23. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +6 -3
  24. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
  25. package/ecosystem/packages/package-versions/packages-versions.component.d.ts +9 -2
  26. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  27. package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +9 -3
  28. package/esm2022/core/plugins/plugins.model.mjs +1 -1
  29. package/esm2022/core/plugins/plugins.service.mjs +25 -5
  30. package/esm2022/ecosystem/application-plugins/application-plugin-readme.component.mjs +26 -0
  31. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +26 -11
  32. package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +6 -3
  33. package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +21 -15
  34. package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +3 -3
  35. package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +26 -202
  36. package/esm2022/ecosystem/application-plugins/plugin-list.service.mjs +200 -0
  37. package/esm2022/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +1 -1
  38. package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +25 -44
  39. package/esm2022/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.mjs +14 -4
  40. package/esm2022/ecosystem/packages/package-versions/package-contents/packages-contents.component.mjs +13 -6
  41. package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +22 -8
  42. package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
  43. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +205 -138
  44. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  46. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-ecosystem.mjs +257 -176
  48. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components.mjs +31 -5
  50. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  51. package/locales/de.po +3 -0
  52. package/locales/es.po +3 -0
  53. package/locales/fr.po +3 -0
  54. package/locales/ja_JP.po +3 -0
  55. package/locales/ko.po +3 -0
  56. package/locales/locales.pot +33 -6
  57. package/locales/nl.po +3 -0
  58. package/locales/pl.po +3 -0
  59. package/locales/pt_BR.po +3 -0
  60. package/locales/zh_CN.po +3 -0
  61. package/locales/zh_TW.po +3 -0
  62. package/package.json +1 -1
@@ -1,29 +1,25 @@
1
1
  import { Component } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
- import { FetchClient } from '@c8y/client';
4
3
  import { AppStateService, ContextRouteService, GainsightService, PackageType, PluginsService, WizardModalService } from '@c8y/ngx-components';
5
4
  import { BehaviorSubject } from 'rxjs';
6
5
  import { EcosystemService, EcosystemWizards, packageProperties, PACKAGE_TYPE_LABELS, PackageAvailabilityService, PRODUCT_EXPERIENCE_ECOSYSTEM } from '@c8y/ngx-components/ecosystem/shared';
7
6
  import * as i0 from "@angular/core";
8
7
  import * as i1 from "@angular/router";
9
- import * as i2 from "@c8y/client";
10
- import * as i3 from "@c8y/ngx-components";
11
- import * as i4 from "@c8y/ngx-components/ecosystem/shared";
12
- import * as i5 from "@angular/common";
13
- import * as i6 from "@angular/forms";
14
- import * as i7 from "ngx-bootstrap/tooltip";
15
- import * as i8 from "../../application-plugins/plugin-list.component";
8
+ import * as i2 from "@c8y/ngx-components";
9
+ import * as i3 from "@c8y/ngx-components/ecosystem/shared";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@angular/forms";
12
+ import * as i6 from "ngx-bootstrap/tooltip";
13
+ import * as i7 from "../../application-plugins/plugin-list.component";
16
14
  export class PackageDetailsComponent {
17
- constructor(activatedRoute, client, wizardModalService, ecosystemService, contextRouteService, pluginsService, packageAvailabilityService, ui, pluginService, gainsightService) {
15
+ constructor(activatedRoute, wizardModalService, ecosystemService, contextRouteService, pluginsService, packageAvailabilityService, ui, gainsightService) {
18
16
  this.activatedRoute = activatedRoute;
19
- this.client = client;
20
17
  this.wizardModalService = wizardModalService;
21
18
  this.ecosystemService = ecosystemService;
22
19
  this.contextRouteService = contextRouteService;
23
20
  this.pluginsService = pluginsService;
24
21
  this.packageAvailabilityService = packageAvailabilityService;
25
22
  this.ui = ui;
26
- this.pluginService = pluginService;
27
23
  this.gainsightService = gainsightService;
28
24
  this.package = {};
29
25
  this.exportedPlugins$ = new BehaviorSubject([]);
@@ -33,8 +29,6 @@ export class PackageDetailsComponent {
33
29
  this.packageTypeLabels = PACKAGE_TYPE_LABELS;
34
30
  this.PACKAGE_TYPE = PackageType;
35
31
  this.packageProperties = packageProperties;
36
- this.headers = { 'Content-Type': 'text/markdown', responseType: 'blob' };
37
- this.NOT_FOUND_ERROR_CODE = 404;
38
32
  }
39
33
  async ngOnInit() {
40
34
  this.isAllowedToCreateSubtenants = !!this.ui.currentTenant.value?.allowCreateTenants;
@@ -66,17 +60,27 @@ export class PackageDetailsComponent {
66
60
  }
67
61
  this.isChangingAvailability = false;
68
62
  }
63
+ async showPluginOverview(plugin) {
64
+ this.selectedPlugin = plugin;
65
+ const baseUrl = `/apps/${plugin.id}/`;
66
+ this.pluginBaseUrl = baseUrl;
67
+ this.pluginMarkdown = await this.pluginsService.getReadmeFileContent(baseUrl);
68
+ }
69
+ closeOverview() {
70
+ this.selectedPlugin = null;
71
+ }
69
72
  async loadData(pckg) {
70
73
  this.package = pckg
71
74
  ? pckg
72
75
  : this.contextRouteService.getContextData(this.activatedRoute)?.contextData;
73
76
  this.packageAvailability = this.package.availability;
74
77
  this.packageContentState = this.ecosystemService.getPackageContentState(this.package);
75
- this.packageType = this.pluginService.getPackageType(this.package);
78
+ this.packageType = this.pluginsService.getPackageType(this.package);
76
79
  this.name = this.package?.name;
77
80
  this.description = this.package?.manifest?.description;
78
- this.markdown = await this.getReadmeFileContent();
79
- this.baseUrl = this.getBaseUrl();
81
+ const baseUrl = `/apps/${this.package.contextPath}/`;
82
+ this.markdown = await this.pluginsService.getReadmeFileContent(baseUrl);
83
+ this.baseUrl = baseUrl;
80
84
  this.appState = this.ecosystemService.getAppState(this.package);
81
85
  this.isPackageBlueprint = this.ecosystemService.isPackageBlueprint(this.package);
82
86
  this.isOwnedByCurrentTenant =
@@ -87,34 +91,11 @@ export class PackageDetailsComponent {
87
91
  const exports = this.pluginsService.getMFExports(this.package);
88
92
  this.exportedPlugins$.next(exports);
89
93
  }
90
- async getReadmeFileContent() {
91
- const readmeFile = await this.getReadmeFile();
92
- if (readmeFile.status === 200) {
93
- return await readmeFile.text();
94
- }
95
- return '';
96
- }
97
- async getReadmeFile() {
98
- const baseUrl = this.getBaseUrl();
99
- let result;
100
- const options = {
101
- method: 'GET',
102
- headers: this.headers
103
- };
104
- result = await this.client.fetch(`${baseUrl}README.md`, options);
105
- if (result && result.status === this.NOT_FOUND_ERROR_CODE) {
106
- result = await this.client.fetch(`${baseUrl}readme.md`, options);
107
- }
108
- return result;
109
- }
110
- getBaseUrl() {
111
- return `/apps/${this.package.contextPath}/`;
112
- }
113
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageDetailsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.FetchClient }, { token: i3.WizardModalService }, { token: i4.EcosystemService }, { token: i3.ContextRouteService }, { token: i3.PluginsService }, { token: i4.PackageAvailabilityService }, { token: i3.AppStateService }, { token: i3.PluginsService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
114
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageDetailsComponent, selector: "c8y-package-details", ngImport: i0, template: "<c8y-title>{{ name | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'big-parcel'\"\n [label]=\"'Extensions' | translate\"\n [path]=\"'ecosystem/extension/extensions'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"name | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Extension package' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n placement=\"right\"\n itemClass=\"navbar-form\"\n *ngIf=\"isOwnedByCurrentTenant && isAllowedToCreateSubtenants\"\n>\n <div class=\"form-horizontal\">\n <div class=\"form-group\">\n <label\n for=\"availability\"\n translate\n >\n Availability`of package based on app state`\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"availability\"\n [(ngModel)]=\"packageAvailability\"\n [disabled]=\"isChangingAvailability\"\n (ngModelChange)=\"togglePackageAvailability(package, $event)\"\n >\n <option\n *ngFor=\"let availability of packageAvailabilityService.availabilities\"\n [ngValue]=\"availability.value\"\n >\n {{ availability.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-grid grid__col--8-4--md grid__row--fit-auto\">\n <div class=\"bg-level-1 grid__col--fullspan separator-bottom\">\n <div class=\"card-block p-t-24 p-b-24 large-padding\">\n <button\n class=\"card__ribbon btn-clean\"\n [attr.aria-label]=\"\n (package.label || package.manifest.label | translatePackageLabel) +\n ': ' +\n (packageTypeLabels[packageType].tooltip | translate)\n \"\n tooltip=\"{{ packageTypeLabels[packageType].tooltip | translate }}\"\n placement=\"bottom\"\n type=\"button\"\n *ngIf=\"packageType !== PACKAGE_TYPE.CUSTOM\"\n [delay]=\"500\"\n >\n <span\n [ngClass]=\"{\n 'bg-info': packageType === PACKAGE_TYPE.COMMUNITY,\n 'bg-primary': packageType === PACKAGE_TYPE.OFFICIAL,\n 'bg-warning': packageType === PACKAGE_TYPE.ARCHIVED\n }\"\n >\n {{ package.label || package.manifest.label | translatePackageLabel }}\n </span>\n </button>\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i\n class=\"c8y-icon-duocolor icon-48\"\n c8yIcon=\"big-parcel\"\n ></i>\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"\n (appState?.label | translate) + ': ' + (appState?.tooltip | translate)\n \"\n [tooltip]=\"appState?.tooltip | translate\"\n placement=\"top\"\n type=\"button\"\n [delay]=\"500\"\n >\n <span\n class=\"label\"\n [ngClass]=\"appState?.class\"\n >\n {{ appState?.label | translate }}\n </span>\n </button>\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"\n (packageContentState?.label | translate) +\n ': ' +\n (packageContentState?.tooltip | translate)\n \"\n [tooltip]=\"packageContentState?.tooltip | translate\"\n placement=\"bottom\"\n type=\"button\"\n [delay]=\"500\"\n >\n <span\n class=\"label\"\n [ngClass]=\"packageContentState?.class\"\n >\n {{ packageContentState?.label | translate }}\n </span>\n </button>\n </div>\n\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-5\">\n <div class=\"card-title text-bold m-b-8\">{{ name | humanizeAppName | async }}</div>\n <p *ngIf=\"description\">{{ description }}</p>\n <p\n class=\"text-muted\"\n *ngIf=\"!description\"\n >\n <em>{{ 'No description available.' | translate }}</em>\n </p>\n </div>\n <div\n class=\"col-3 text-right-md p-r-md-40\"\n *ngIf=\"isPackageBlueprint\"\n >\n <button\n class=\"btn btn-primary btn-sm\"\n (click)=\"deploy()\"\n data-cy=\"c8y-package-details--deploy-application-button\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"output\"\n ></i>\n {{ 'Deploy application' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <c8y-properties-list\n [data]=\"package.manifest\"\n [properties]=\"packageProperties\"\n ></c8y-properties-list>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator sticky-top\">\n <div class=\"card-title\">{{ 'Extension package overview' | translate }}</div>\n </div>\n <div class=\"card-block p-l-16 p-r-16\">\n <div\n class=\"alert alert-warning m-b-16\"\n style=\"margin: auto\"\n *ngIf=\"packageType === PACKAGE_TYPE.ARCHIVED\"\n translate\n >\n The package was archived by the owner marking it as out of maintenance. It is not\n recommended to install the package.\n </div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found' | translate\"\n [subtitle]=\"\n 'To view the contents of &quot;README&quot;, add the file &quot;README.md&quot; to the package.'\n | translate\n \"\n *ngIf=\"!markdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n class=\"markdown-content\"\n [innerHTML]=\"markdown | markdownToHtml: { baseUrl } | async\"\n ></div>\n </div>\n <div class=\"separator-bottom visible-sm visible-xs\"></div>\n </div>\n\n <div class=\"inner-scroll d-flex d-col\">\n <div class=\"card-header separator sticky-top\">\n <div class=\"card-title\">{{ 'Package plugins' | translate }}</div>\n </div>\n <div class=\"border-left flex-grow\">\n <!-- empty state -->\n <div\n class=\"p-16\"\n *ngIf=\"(exportedPlugins$ | async).length === 0\"\n >\n <c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'This package doesn\\'t contain plugins.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <c8y-plugin-list\n [plugins$]=\"exportedPlugins$\"\n [selectable]=\"false\"\n [installable]=\"true\"\n [package]=\"package\"\n ></c8y-plugin-list>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PropertiesListComponent, selector: "c8y-properties-list", inputs: ["properties", "title", "icon", "data", "groups", "noParse", "emptyLabel"] }, { 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: "component", type: i8.PluginListComponent, selector: "c8y-plugin-list", inputs: ["plugins$", "emptyListText", "selectable", "hideSource", "installable", "package"], outputs: ["selectedItems"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: i3.MarkdownToHtmlPipe, name: "markdownToHtml" }, { kind: "pipe", type: i4.TranslatePackageLabelPipe, name: "translatePackageLabel" }] }); }
94
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageDetailsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.WizardModalService }, { token: i3.EcosystemService }, { token: i2.ContextRouteService }, { token: i2.PluginsService }, { token: i3.PackageAvailabilityService }, { token: i2.AppStateService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
95
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageDetailsComponent, selector: "c8y-package-details", ngImport: i0, template: "<c8y-title>{{ name | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'big-parcel'\"\n [label]=\"'Extensions' | translate\"\n [path]=\"'ecosystem/extension/extensions'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"name | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Extension package' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n placement=\"right\"\n itemClass=\"navbar-form\"\n *ngIf=\"isOwnedByCurrentTenant && isAllowedToCreateSubtenants\"\n>\n <div class=\"d-flex a-i-center\">\n <label\n class=\"m-b-0 m-r-8\"\n for=\"availability\"\n translate\n >\n Availability`of package based on app state`\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"availability\"\n [(ngModel)]=\"packageAvailability\"\n [disabled]=\"isChangingAvailability\"\n (ngModelChange)=\"togglePackageAvailability(package, $event)\"\n >\n <option\n *ngFor=\"let availability of packageAvailabilityService.availabilities\"\n [ngValue]=\"availability.value\"\n >\n {{ availability.label | translate }}\n </option>\n </select>\n </div>\n </div>\n</c8y-action-bar-item>\n\n<div\n class=\"card content-fullpage d-grid grid__row--fit-auto\"\n [ngClass]=\"{ 'grid__col--8-4-0': !selectedPlugin, 'grid__col--0-4-8': !!selectedPlugin }\"\n>\n <div class=\"bg-level-1 grid__col--fullspan separator-bottom\">\n <div class=\"card-block p-t-24 p-b-24 large-padding\">\n <button\n class=\"card__ribbon btn-clean\"\n [attr.aria-label]=\"\n (package.label || package.manifest.label | translatePackageLabel) +\n ': ' +\n (packageTypeLabels[packageType].tooltip | translate)\n \"\n tooltip=\"{{ packageTypeLabels[packageType].tooltip | translate }}\"\n placement=\"bottom\"\n type=\"button\"\n *ngIf=\"packageType !== PACKAGE_TYPE.CUSTOM\"\n [delay]=\"500\"\n >\n <span\n [ngClass]=\"{\n 'bg-info': packageType === PACKAGE_TYPE.COMMUNITY,\n 'bg-primary': packageType === PACKAGE_TYPE.OFFICIAL,\n 'bg-warning': packageType === PACKAGE_TYPE.ARCHIVED\n }\"\n >\n {{ package.label || package.manifest.label | translatePackageLabel }}\n </span>\n </button>\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i\n class=\"c8y-icon-duocolor icon-48\"\n c8yIcon=\"big-parcel\"\n ></i>\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"\n (appState?.label | translate) + ': ' + (appState?.tooltip | translate)\n \"\n [tooltip]=\"appState?.tooltip | translate\"\n placement=\"top\"\n type=\"button\"\n [delay]=\"500\"\n >\n <span\n class=\"label\"\n [ngClass]=\"appState?.class\"\n >\n {{ appState?.label | translate }}\n </span>\n </button>\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"\n (packageContentState?.label | translate) +\n ': ' +\n (packageContentState?.tooltip | translate)\n \"\n [tooltip]=\"packageContentState?.tooltip | translate\"\n placement=\"bottom\"\n type=\"button\"\n [delay]=\"500\"\n >\n <span\n class=\"label\"\n [ngClass]=\"packageContentState?.class\"\n >\n {{ packageContentState?.label | translate }}\n </span>\n </button>\n </div>\n\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-8\">\n <div class=\"card-title h4 m-b-8\">{{ name | humanizeAppName | async }}</div>\n <p *ngIf=\"description\">{{ description }}</p>\n <p\n class=\"text-muted\"\n *ngIf=\"!description\"\n >\n <em>{{ 'No description available.' | translate }}</em>\n </p>\n </div>\n <div\n class=\"col-3 text-right-md p-r-md-40\"\n *ngIf=\"isPackageBlueprint\"\n >\n <button\n class=\"btn btn-primary btn-sm\"\n (click)=\"deploy()\"\n data-cy=\"c8y-package-details--deploy-application-button\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"output\"\n ></i>\n {{ 'Deploy application' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <c8y-properties-list\n [data]=\"package.manifest\"\n [properties]=\"packageProperties\"\n ></c8y-properties-list>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator sticky-top\">\n <div class=\"card-title\">{{ 'Extension package overview' | translate }}</div>\n </div>\n <div class=\"card-block p-l-16 p-r-16\">\n <div\n class=\"alert alert-warning m-b-16\"\n style=\"margin: auto\"\n *ngIf=\"packageType === PACKAGE_TYPE.ARCHIVED\"\n translate\n >\n The package was archived by the owner marking it as out of maintenance. It is not\n recommended to install the package.\n </div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found' | translate\"\n [subtitle]=\"\n 'To view the contents of &quot;README&quot;, add the file &quot;README.md&quot; to the package.'\n | translate\n \"\n *ngIf=\"!markdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n class=\"markdown-content\"\n [innerHTML]=\"markdown | markdownToHtml: { baseUrl } | async\"\n ></div>\n </div>\n <div class=\"separator-bottom visible-sm visible-xs\"></div>\n </div>\n\n <div\n class=\"inner-scroll d-flex d-col bg-level-1 split-view__list\"\n [ngClass]=\"{ 'border-right': !!selectedPlugin }\"\n >\n <div class=\"card-header separator sticky-top\">\n <div class=\"card-title\">{{ 'Package plugins' | translate }}</div>\n </div>\n <div class=\"border-left flex-grow\">\n <!-- empty state -->\n <div\n class=\"p-16\"\n *ngIf=\"(exportedPlugins$ | async).length === 0\"\n >\n <c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'This package doesn\\'t contain plugins.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <c8y-plugin-list\n [plugins$]=\"exportedPlugins$\"\n [selectable]=\"false\"\n [installable]=\"true\"\n [package]=\"package\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-plugin-list>\n </div>\n </div>\n\n <div class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': selectedPlugin }\">\n <div\n class=\"card-header separator sticky-top\"\n *ngIf=\"selectedPlugin\"\n >\n <button\n class=\"btn-clean\"\n (click)=\"closeOverview()\"\n >\n <i c8yIcon=\"caret-back\"></i>\n {{ 'Back to package overview ' | translate }}\n </button>\n </div>\n <div\n class=\"card-block p-l-16 p-r-16 overflow-visible\"\n *ngIf=\"selectedPlugin\"\n >\n <div\n class=\"markdown-content\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found for plugin' | translate\"\n [subtitle]=\"\n 'To view the contents of &quot;README&quot;, add the file &quot;README.md&quot; to the plugin.'\n | translate\n \"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.PropertiesListComponent, selector: "c8y-properties-list", inputs: ["properties", "title", "icon", "data", "groups", "noParse", "emptyLabel"] }, { kind: "directive", type: i6.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: "component", type: i7.PluginListComponent, selector: "c8y-plugin-list", inputs: ["plugins$", "emptyListText", "selectable", "hideSource", "installable", "package", "selectedPlugin"], outputs: ["selectedItems", "showOverview"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: i2.MarkdownToHtmlPipe, name: "markdownToHtml" }, { kind: "pipe", type: i3.TranslatePackageLabelPipe, name: "translatePackageLabel" }] }); }
115
96
  }
116
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageDetailsComponent, decorators: [{
117
98
  type: Component,
118
- args: [{ selector: 'c8y-package-details', template: "<c8y-title>{{ name | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'big-parcel'\"\n [label]=\"'Extensions' | translate\"\n [path]=\"'ecosystem/extension/extensions'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"name | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Extension package' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n placement=\"right\"\n itemClass=\"navbar-form\"\n *ngIf=\"isOwnedByCurrentTenant && isAllowedToCreateSubtenants\"\n>\n <div class=\"form-horizontal\">\n <div class=\"form-group\">\n <label\n for=\"availability\"\n translate\n >\n Availability`of package based on app state`\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"availability\"\n [(ngModel)]=\"packageAvailability\"\n [disabled]=\"isChangingAvailability\"\n (ngModelChange)=\"togglePackageAvailability(package, $event)\"\n >\n <option\n *ngFor=\"let availability of packageAvailabilityService.availabilities\"\n [ngValue]=\"availability.value\"\n >\n {{ availability.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-grid grid__col--8-4--md grid__row--fit-auto\">\n <div class=\"bg-level-1 grid__col--fullspan separator-bottom\">\n <div class=\"card-block p-t-24 p-b-24 large-padding\">\n <button\n class=\"card__ribbon btn-clean\"\n [attr.aria-label]=\"\n (package.label || package.manifest.label | translatePackageLabel) +\n ': ' +\n (packageTypeLabels[packageType].tooltip | translate)\n \"\n tooltip=\"{{ packageTypeLabels[packageType].tooltip | translate }}\"\n placement=\"bottom\"\n type=\"button\"\n *ngIf=\"packageType !== PACKAGE_TYPE.CUSTOM\"\n [delay]=\"500\"\n >\n <span\n [ngClass]=\"{\n 'bg-info': packageType === PACKAGE_TYPE.COMMUNITY,\n 'bg-primary': packageType === PACKAGE_TYPE.OFFICIAL,\n 'bg-warning': packageType === PACKAGE_TYPE.ARCHIVED\n }\"\n >\n {{ package.label || package.manifest.label | translatePackageLabel }}\n </span>\n </button>\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i\n class=\"c8y-icon-duocolor icon-48\"\n c8yIcon=\"big-parcel\"\n ></i>\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"\n (appState?.label | translate) + ': ' + (appState?.tooltip | translate)\n \"\n [tooltip]=\"appState?.tooltip | translate\"\n placement=\"top\"\n type=\"button\"\n [delay]=\"500\"\n >\n <span\n class=\"label\"\n [ngClass]=\"appState?.class\"\n >\n {{ appState?.label | translate }}\n </span>\n </button>\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"\n (packageContentState?.label | translate) +\n ': ' +\n (packageContentState?.tooltip | translate)\n \"\n [tooltip]=\"packageContentState?.tooltip | translate\"\n placement=\"bottom\"\n type=\"button\"\n [delay]=\"500\"\n >\n <span\n class=\"label\"\n [ngClass]=\"packageContentState?.class\"\n >\n {{ packageContentState?.label | translate }}\n </span>\n </button>\n </div>\n\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-5\">\n <div class=\"card-title text-bold m-b-8\">{{ name | humanizeAppName | async }}</div>\n <p *ngIf=\"description\">{{ description }}</p>\n <p\n class=\"text-muted\"\n *ngIf=\"!description\"\n >\n <em>{{ 'No description available.' | translate }}</em>\n </p>\n </div>\n <div\n class=\"col-3 text-right-md p-r-md-40\"\n *ngIf=\"isPackageBlueprint\"\n >\n <button\n class=\"btn btn-primary btn-sm\"\n (click)=\"deploy()\"\n data-cy=\"c8y-package-details--deploy-application-button\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"output\"\n ></i>\n {{ 'Deploy application' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <c8y-properties-list\n [data]=\"package.manifest\"\n [properties]=\"packageProperties\"\n ></c8y-properties-list>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator sticky-top\">\n <div class=\"card-title\">{{ 'Extension package overview' | translate }}</div>\n </div>\n <div class=\"card-block p-l-16 p-r-16\">\n <div\n class=\"alert alert-warning m-b-16\"\n style=\"margin: auto\"\n *ngIf=\"packageType === PACKAGE_TYPE.ARCHIVED\"\n translate\n >\n The package was archived by the owner marking it as out of maintenance. It is not\n recommended to install the package.\n </div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found' | translate\"\n [subtitle]=\"\n 'To view the contents of &quot;README&quot;, add the file &quot;README.md&quot; to the package.'\n | translate\n \"\n *ngIf=\"!markdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n class=\"markdown-content\"\n [innerHTML]=\"markdown | markdownToHtml: { baseUrl } | async\"\n ></div>\n </div>\n <div class=\"separator-bottom visible-sm visible-xs\"></div>\n </div>\n\n <div class=\"inner-scroll d-flex d-col\">\n <div class=\"card-header separator sticky-top\">\n <div class=\"card-title\">{{ 'Package plugins' | translate }}</div>\n </div>\n <div class=\"border-left flex-grow\">\n <!-- empty state -->\n <div\n class=\"p-16\"\n *ngIf=\"(exportedPlugins$ | async).length === 0\"\n >\n <c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'This package doesn\\'t contain plugins.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <c8y-plugin-list\n [plugins$]=\"exportedPlugins$\"\n [selectable]=\"false\"\n [installable]=\"true\"\n [package]=\"package\"\n ></c8y-plugin-list>\n </div>\n </div>\n</div>\n" }]
119
- }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.FetchClient }, { type: i3.WizardModalService }, { type: i4.EcosystemService }, { type: i3.ContextRouteService }, { type: i3.PluginsService }, { type: i4.PackageAvailabilityService }, { type: i3.AppStateService }, { type: i3.PluginsService }, { type: i3.GainsightService }] });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLWRldGFpbHMvcGFja2FnZS1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLWRldGFpbHMvcGFja2FnZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFFTCxXQUFXLEVBSVosTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUVMLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxjQUFjLEVBRWQsa0JBQWtCLEVBQ25CLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQiw0QkFBNEIsRUFDN0IsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7OztBQU05QyxNQUFNLE9BQU8sdUJBQXVCO0lBc0JsQyxZQUNVLGNBQThCLEVBQzlCLE1BQW1CLEVBQ25CLGtCQUFzQyxFQUN0QyxnQkFBa0MsRUFDbEMsbUJBQXdDLEVBQ3hDLGNBQThCLEVBQzlCLDBCQUFzRCxFQUN0RCxFQUFtQixFQUNuQixhQUE2QixFQUM3QixnQkFBa0M7UUFUbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbkIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyxx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cG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgRmV0Y2hDbGllbnQsXG4gIElBcHBsaWNhdGlvbixcbiAgSUZldGNoT3B0aW9ucyxcbiAgSUZldGNoUmVzcG9uc2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25QbHVnaW4sXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgUGFja2FnZVR5cGUsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBQcm9wZXJ0aWVzTGlzdEl0ZW0sXG4gIFdpemFyZE1vZGFsU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblN0YXRlLFxuICBFY29zeXN0ZW1TZXJ2aWNlLFxuICBFY29zeXN0ZW1XaXphcmRzLFxuICBwYWNrYWdlUHJvcGVydGllcyxcbiAgUEFDS0FHRV9UWVBFX0xBQkVMUyxcbiAgUGFja2FnZUF2YWlsYWJpbGl0eVNlcnZpY2UsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU1cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXBhY2thZ2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWNrYWdlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBhY2thZ2VEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWFya2Rvd246IHN0cmluZztcbiAgYmFzZVVybDogc3RyaW5nO1xuICBwYWNrYWdlOiBJQXBwbGljYXRpb24gPSB7fTtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhcHBTdGF0ZTogQXBwbGljYXRpb25TdGF0ZTtcbiAgaXNQYWNrYWdlQmx1ZXByaW50OiBib29sZWFuO1xuICBleHBvcnRlZFBsdWdpbnMkOiBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgaXNDaGFuZ2luZ0F2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICBpc093bmVkQnlDdXJyZW50VGVuYW50ID0gZmFsc2U7XG4gIGlzQWxsb3dlZFRvQ3JlYXRlU3VidGVuYW50cyA9IGZhbHNlO1xuICBwYWNrYWdlQ29udGVudFN0YXRlOiBBcHBsaWNhdGlvblN0YXRlO1xuICBwYWNrYWdlVHlwZTogUGFja2FnZVR5cGU7XG4gIHBhY2thZ2VBdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5O1xuXG4gIHJlYWRvbmx5IHBhY2thZ2VUeXBlTGFiZWxzID0gUEFDS0FHRV9UWVBFX0xBQkVMUztcbiAgcmVhZG9ubHkgUEFDS0FHRV9UWVBFID0gUGFja2FnZVR5cGU7XG4gIHJlYWRvbmx5IHBhY2thZ2VQcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzTGlzdEl0ZW1bXSA9IHBhY2thZ2VQcm9wZXJ0aWVzO1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlcnM6IGFueSA9IHsgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L21hcmtkb3duJywgcmVzcG9uc2VUeXBlOiAnYmxvYicgfTtcbiAgcHJpdmF0ZSBOT1RfRk9VTkRfRVJST1JfQ09ERSA9IDQwNDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNsaWVudDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSB3aXphcmRNb2RhbFNlcnZpY2U6IFdpemFyZE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0Um91dGVTZXJ2aWNlOiBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFja2FnZUF2YWlsYWJpbGl0eVNlcnZpY2U6IFBhY2thZ2VBdmFpbGFiaWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdWk6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpblNlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc0FsbG93ZWRUb0NyZWF0ZVN1YnRlbmFudHMgPSAhIXRoaXMudWkuY3VycmVudFRlbmFudC52YWx1ZT8uYWxsb3dDcmVhdGVUZW5hbnRzO1xuICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGRlcGxveSgpIHtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfUExVR0lOUyxcbiAgICAgIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBBQ0tBR0VfREVUQUlMUyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkRFUExPWV9BUFBMSUNBVElPTl9JTklUSUFURURcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBhbnkgPSB7XG4gICAgICB3aXphcmRDb25maWc6IHt9LFxuICAgICAgaWQ6IEVjb3N5c3RlbVdpemFyZHMuQkxVRVBSSU5UX0RFUExPWU1FTlQsXG4gICAgICBwYWNrYWdlOiB0aGlzLnBhY2thZ2VcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsT3B0aW9uczogTW9kYWxPcHRpb25zID0geyBpbml0aWFsU3RhdGUgfTtcbiAgICB0aGlzLndpemFyZE1vZGFsU2VydmljZS5zaG93KG1vZGFsT3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyB0b2dnbGVQYWNrYWdlQXZhaWxhYmlsaXR5KHBja2c6IElBcHBsaWNhdGlvbiwgbmV3QXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSkge1xuICAgIHRoaXMuaXNDaGFuZ2luZ0F2YWlsYWJpbGl0eSA9IHRydWU7XG4gICAgcGNrZyA9IGF3YWl0IHRoaXMucGFja2FnZUF2YWlsYWJpbGl0eVNlcnZpY2UuYXNrSWZBdmFpbGFiaWxpdHlTaG91bGRCZVNldFRvKFxuICAgICAgcGNrZyxcbiAgICAgIG5ld0F2YWlsYWJpbGl0eVxuICAgICk7XG4gICAgY29uc3QgYXZhaWxhYmlsaXR5SGFzQ2hhbmdlZCA9IHBja2cuYXZhaWxhYmlsaXR5ID09PSBuZXdBdmFpbGFiaWxpdHk7XG4gICAgaWYgKGF2YWlsYWJpbGl0eUhhc0NoYW5nZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZERhdGEocGNrZyk7XG4gICAgICB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2Uuc2V0Q29udGV4dCh0aGlzLmFjdGl2YXRlZFJvdXRlLCBwY2tnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWNrYWdlQXZhaWxhYmlsaXR5ID0gdGhpcy5wYWNrYWdlLmF2YWlsYWJpbGl0eTtcbiAgICB9XG4gICAgdGhpcy5pc0NoYW5naW5nQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWREYXRhKHBja2c/OiBJQXBwbGljYXRpb24pIHtcbiAgICB0aGlzLnBhY2thZ2UgPSBwY2tnXG4gICAgICA/IHBja2dcbiAgICAgIDogdGhpcy5jb250ZXh0Um91dGVTZXJ2aWNlLmdldENvbnRleHREYXRhKHRoaXMuYWN0aXZhdGVkUm91dGUpPy5jb250ZXh0RGF0YTtcbiAgICB0aGlzLnBhY2thZ2VBdmFpbGFiaWxpdHkgPSB0aGlzLnBhY2thZ2UuYXZhaWxhYmlsaXR5O1xuICAgIHRoaXMucGFja2FnZUNvbnRlbnRTdGF0ZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRQYWNrYWdlQ29udGVudFN0YXRlKHRoaXMucGFja2FnZSk7XG4gICAgdGhpcy5wYWNrYWdlVHlwZSA9IHRoaXMucGx1Z2luU2VydmljZS5nZXRQYWNrYWdlVHlwZSh0aGlzLnBhY2thZ2UpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMucGFja2FnZT8ubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5wYWNrYWdlPy5tYW5pZmVzdD8uZGVzY3JpcHRpb247XG4gICAgdGhpcy5tYXJrZG93biA9IGF3YWl0IHRoaXMuZ2V0UmVhZG1lRmlsZUNvbnRlbnQoKTtcbiAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEJhc2VVcmwoKTtcbiAgICB0aGlzLmFwcFN0YXRlID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcFN0YXRlKHRoaXMucGFja2FnZSk7XG4gICAgdGhpcy5pc1BhY2thZ2VCbHVlcHJpbnQgPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNQYWNrYWdlQmx1ZXByaW50KHRoaXMucGFja2FnZSk7XG4gICAgdGhpcy5pc093bmVkQnlDdXJyZW50VGVuYW50ID1cbiAgICAgIHRoaXMucGFja2FnZT8ub3duZXI/LnRlbmFudD8uaWQgPT09IHRoaXMudWkuY3VycmVudFRlbmFudC52YWx1ZT8ubmFtZTtcbiAgICB0aGlzLmV4dHJhY3RQYWNrYWdlTUZFeHBvcnRzKCk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RQYWNrYWdlTUZFeHBvcnRzKCkge1xuICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GRXhwb3J0cyh0aGlzLnBhY2thZ2UpO1xuICAgIHRoaXMuZXhwb3J0ZWRQbHVnaW5zJC5uZXh0KGV4cG9ydHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWFkbWVGaWxlQ29udGVudCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlYWRtZUZpbGUgPSBhd2FpdCB0aGlzLmdldFJlYWRtZUZpbGUoKTtcblxuICAgIGlmIChyZWFkbWVGaWxlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVhZG1lRmlsZS50ZXh0KCk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVhZG1lRmlsZSgpOiBQcm9taXNlPElGZXRjaFJlc3BvbnNlPiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuZ2V0QmFzZVVybCgpO1xuICAgIGxldCByZXN1bHQ6IElGZXRjaFJlc3BvbnNlO1xuICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzXG4gICAgfTtcbiAgICByZXN1bHQgPSBhd2FpdCB0aGlzLmNsaWVudC5mZXRjaChgJHtiYXNlVXJsfVJFQURNRS5tZGAsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuc3RhdHVzID09PSB0aGlzLk5PVF9GT1VORF9FUlJPUl9DT0RFKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLmNsaWVudC5mZXRjaChgJHtiYXNlVXJsfXJlYWRtZS5tZGAsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCYXNlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAvYXBwcy8ke3RoaXMucGFja2FnZS5jb250ZXh0UGF0aH0vYDtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyBuYW1lIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmMgfX08L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktYXRvbSdcIlxuICAgIFtsYWJlbF09XCInRWNvc3lzdGVtJyB8IHRyYW5zbGF0ZVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2JpZy1wYXJjZWwnXCJcbiAgICBbbGFiZWxdPVwiJ0V4dGVuc2lvbnMnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInZWNvc3lzdGVtL2V4dGVuc2lvbi9leHRlbnNpb25zJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtsYWJlbF09XCJuYW1lIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmNcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtsYWJlbF09XCInRXh0ZW5zaW9uIHBhY2thZ2UnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgcGxhY2VtZW50PVwicmlnaHRcIlxuICBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybVwiXG4gICpuZ0lmPVwiaXNPd25lZEJ5Q3VycmVudFRlbmFudCAmJiBpc0FsbG93ZWRUb0NyZWF0ZVN1YnRlbmFudHNcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBmb3I9XCJhdmFpbGFiaWxpdHlcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgQXZhaWxhYmlsaXR5YG9mIHBhY2thZ2UgYmFzZWQgb24gYXBwIHN0YXRlYFxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBpZD1cImF2YWlsYWJpbGl0eVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwYWNrYWdlQXZhaWxhYmlsaXR5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNDaGFuZ2luZ0F2YWlsYWJpbGl0eVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlUGFja2FnZUF2YWlsYWJpbGl0eShwYWNrYWdlLCAkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdmFpbGFiaWxpdHkgb2YgcGFja2FnZUF2YWlsYWJpbGl0eVNlcnZpY2UuYXZhaWxhYmlsaXRpZXNcIlxuICAgICAgICAgICAgW25nVmFsdWVdPVwiYXZhaWxhYmlsaXR5LnZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBhdmFpbGFiaWxpdHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGRpdiBjbGFzcz1cImNhcmQgY29udGVudC1mdWxscGFnZSBkLWdyaWQgZ3JpZF9fY29sLS04LTQtLW1kIGdyaWRfX3Jvdy0tZml0LWF1dG9cIj5cbiAgPGRpdiBjbGFzcz1cImJnLWxldmVsLTEgZ3JpZF9fY29sLS1mdWxsc3BhbiBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC10LTI0IHAtYi0yNCBsYXJnZS1wYWRkaW5nXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY2FyZF9fcmliYm9uIGJ0bi1jbGVhblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgKHBhY2thZ2UubGFiZWwgfHwgcGFja2FnZS5tYW5pZmVzdC5sYWJlbCB8IHRyYW5zbGF0ZVBhY2thZ2VMYWJlbCkgK1xuICAgICAgICAgICc6ICcgK1xuICAgICAgICAgIChwYWNrYWdlVHlwZUxhYmVsc1twYWNrYWdlVHlwZV0udG9vbHRpcCB8IHRyYW5zbGF0ZSlcbiAgICAgICAgXCJcbiAgICAgICAgdG9vbHRpcD1cInt7IHBhY2thZ2VUeXBlTGFiZWxzW3BhY2thZ2VUeXBlXS50b29sdGlwIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwicGFja2FnZVR5cGUgIT09IFBBQ0tBR0VfVFlQRS5DVVNUT01cIlxuICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYmctaW5mbyc6IHBhY2thZ2VUeXBlID09PSBQQUNLQUdFX1RZUEUuQ09NTVVOSVRZLFxuICAgICAgICAgICAgJ2JnLXByaW1hcnknOiBwYWNrYWdlVHlwZSA9PT0gUEFDS0FHRV9UWVBFLk9GRklDSUFMLFxuICAgICAgICAgICAgJ2JnLXdhcm5pbmcnOiBwYWNrYWdlVHlwZSA9PT0gUEFDS0FHRV9UWVBFLkFSQ0hJVkVEXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwYWNrYWdlLmxhYmVsIHx8IHBhY2thZ2UubWFuaWZlc3QubGFiZWwgfCB0cmFuc2xhdGVQYWNrYWdlTGFiZWwgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1mbGV4LTcwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yIGljb24tNDhcIlxuICAgICAgICAgICAgYzh5SWNvbj1cImJpZy1wYXJjZWxcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW5cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgKGFwcFN0YXRlPy5sYWJlbCB8IHRyYW5zbGF0ZSkgKyAnOiAnICsgKGFwcFN0YXRlPy50b29sdGlwIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFt0b29sdGlwXT1cImFwcFN0YXRlPy50b29sdGlwIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJhcHBTdGF0ZT8uY2xhc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBhcHBTdGF0ZT8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1jbGVhblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAocGFja2FnZUNvbnRlbnRTdGF0ZT8ubGFiZWwgfCB0cmFuc2xhdGUpICtcbiAgICAgICAgICAgICAgJzogJyArXG4gICAgICAgICAgICAgIChwYWNrYWdlQ29udGVudFN0YXRlPy50b29sdGlwIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFt0b29sdGlwXT1cInBhY2thZ2VDb250ZW50U3RhdGU/LnRvb2x0aXAgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBhY2thZ2VDb250ZW50U3RhdGU/LmNsYXNzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcGFja2FnZUNvbnRlbnRTdGF0ZT8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBjb2wtMTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1mbGV4LTgwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgdGV4dC1ib2xkIG0tYi04XCI+e3sgbmFtZSB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwiZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbXV0ZWRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxlbT57eyAnTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlLicgfCB0cmFuc2xhdGUgfX08L2VtPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMyB0ZXh0LXJpZ2h0LW1kIHAtci1tZC00MFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNQYWNrYWdlQmx1ZXByaW50XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlcGxveSgpXCJcbiAgICAgICAgICAgICAgICBkYXRhLWN5PVwiYzh5LXBhY2thZ2UtZGV0YWlscy0tZGVwbG95LWFwcGxpY2F0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICAgICAgICBjOHlJY29uPVwib3V0cHV0XCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIHt7ICdEZXBsb3kgYXBwbGljYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93XCI+XG4gICAgICAgICAgICAgIDxjOHktcHJvcGVydGllcy1saXN0XG4gICAgICAgICAgICAgICAgW2RhdGFdPVwicGFja2FnZS5tYW5pZmVzdFwiXG4gICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwicGFja2FnZVByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICA+PC9jOHktcHJvcGVydGllcy1saXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvciBzdGlja3ktdG9wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7ICdFeHRlbnNpb24gcGFja2FnZSBvdmVydmlldycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBwLWwtMTYgcC1yLTE2XCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtLWItMTZcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbjogYXV0b1wiXG4gICAgICAgICpuZ0lmPVwicGFja2FnZVR5cGUgPT09IFBBQ0tBR0VfVFlQRS5BUkNISVZFRFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBUaGUgcGFja2FnZSB3YXMgYXJjaGl2ZWQgYnkgdGhlIG93bmVyIG1hcmtpbmcgaXQgYXMgb3V0IG9mIG1haW50ZW5hbmNlLiBJdCBpcyBub3RcbiAgICAgICAgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCB0aGUgcGFja2FnZS5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCIndXNlci1tYW51YWwnXCJcbiAgICAgICAgW3RpdGxlXT1cIidObyBSRUFETUUubWQgZm91bmQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICdUbyB2aWV3IHRoZSBjb250ZW50cyBvZiAmcXVvdDtSRUFETUUmcXVvdDssIGFkZCB0aGUgZmlsZSAmcXVvdDtSRUFETUUubWQmcXVvdDsgdG8gdGhlIHBhY2thZ2UuJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgXCJcbiAgICAgICAgKm5nSWY9XCIhbWFya2Rvd25cIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYXJrZG93bi1jb250ZW50XCJcbiAgICAgICAgW2lubmVySFRNTF09XCJtYXJrZG93biB8IG1hcmtkb3duVG9IdG1sOiB7IGJhc2VVcmwgfSB8IGFzeW5jXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yLWJvdHRvbSB2aXNpYmxlLXNtIHZpc2libGUteHNcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbCBkLWZsZXggZC1jb2xcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yIHN0aWNreS10b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+e3sgJ1BhY2thZ2UgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWxlZnQgZmxleC1ncm93XCI+XG4gICAgICA8IS0tIGVtcHR5IHN0YXRlIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInAtMTZcIlxuICAgICAgICAqbmdJZj1cIihleHBvcnRlZFBsdWdpbnMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiXG4gICAgICA+XG4gICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICBbaWNvbl09XCIncGx1Z2luJ1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidObyBwbHVnaW5zIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3N1YnRpdGxlXT1cIidUaGlzIHBhY2thZ2UgZG9lc25cXCd0IGNvbnRhaW4gcGx1Z2lucy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8Yzh5LXBsdWdpbi1saXN0XG4gICAgICAgIFtwbHVnaW5zJF09XCJleHBvcnRlZFBsdWdpbnMkXCJcbiAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICBbaW5zdGFsbGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtwYWNrYWdlXT1cInBhY2thZ2VcIlxuICAgICAgPjwvYzh5LXBsdWdpbi1saXN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
99
+ args: [{ selector: 'c8y-package-details', template: "<c8y-title>{{ name | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'big-parcel'\"\n [label]=\"'Extensions' | translate\"\n [path]=\"'ecosystem/extension/extensions'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"name | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Extension package' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n placement=\"right\"\n itemClass=\"navbar-form\"\n *ngIf=\"isOwnedByCurrentTenant && isAllowedToCreateSubtenants\"\n>\n <div class=\"d-flex a-i-center\">\n <label\n class=\"m-b-0 m-r-8\"\n for=\"availability\"\n translate\n >\n Availability`of package based on app state`\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"availability\"\n [(ngModel)]=\"packageAvailability\"\n [disabled]=\"isChangingAvailability\"\n (ngModelChange)=\"togglePackageAvailability(package, $event)\"\n >\n <option\n *ngFor=\"let availability of packageAvailabilityService.availabilities\"\n [ngValue]=\"availability.value\"\n >\n {{ availability.label | translate }}\n </option>\n </select>\n </div>\n </div>\n</c8y-action-bar-item>\n\n<div\n class=\"card content-fullpage d-grid grid__row--fit-auto\"\n [ngClass]=\"{ 'grid__col--8-4-0': !selectedPlugin, 'grid__col--0-4-8': !!selectedPlugin }\"\n>\n <div class=\"bg-level-1 grid__col--fullspan separator-bottom\">\n <div class=\"card-block p-t-24 p-b-24 large-padding\">\n <button\n class=\"card__ribbon btn-clean\"\n [attr.aria-label]=\"\n (package.label || package.manifest.label | translatePackageLabel) +\n ': ' +\n (packageTypeLabels[packageType].tooltip | translate)\n \"\n tooltip=\"{{ packageTypeLabels[packageType].tooltip | translate }}\"\n placement=\"bottom\"\n type=\"button\"\n *ngIf=\"packageType !== PACKAGE_TYPE.CUSTOM\"\n [delay]=\"500\"\n >\n <span\n [ngClass]=\"{\n 'bg-info': packageType === PACKAGE_TYPE.COMMUNITY,\n 'bg-primary': packageType === PACKAGE_TYPE.OFFICIAL,\n 'bg-warning': packageType === PACKAGE_TYPE.ARCHIVED\n }\"\n >\n {{ package.label || package.manifest.label | translatePackageLabel }}\n </span>\n </button>\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i\n class=\"c8y-icon-duocolor icon-48\"\n c8yIcon=\"big-parcel\"\n ></i>\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"\n (appState?.label | translate) + ': ' + (appState?.tooltip | translate)\n \"\n [tooltip]=\"appState?.tooltip | translate\"\n placement=\"top\"\n type=\"button\"\n [delay]=\"500\"\n >\n <span\n class=\"label\"\n [ngClass]=\"appState?.class\"\n >\n {{ appState?.label | translate }}\n </span>\n </button>\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"\n (packageContentState?.label | translate) +\n ': ' +\n (packageContentState?.tooltip | translate)\n \"\n [tooltip]=\"packageContentState?.tooltip | translate\"\n placement=\"bottom\"\n type=\"button\"\n [delay]=\"500\"\n >\n <span\n class=\"label\"\n [ngClass]=\"packageContentState?.class\"\n >\n {{ packageContentState?.label | translate }}\n </span>\n </button>\n </div>\n\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-8\">\n <div class=\"card-title h4 m-b-8\">{{ name | humanizeAppName | async }}</div>\n <p *ngIf=\"description\">{{ description }}</p>\n <p\n class=\"text-muted\"\n *ngIf=\"!description\"\n >\n <em>{{ 'No description available.' | translate }}</em>\n </p>\n </div>\n <div\n class=\"col-3 text-right-md p-r-md-40\"\n *ngIf=\"isPackageBlueprint\"\n >\n <button\n class=\"btn btn-primary btn-sm\"\n (click)=\"deploy()\"\n data-cy=\"c8y-package-details--deploy-application-button\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"output\"\n ></i>\n {{ 'Deploy application' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <c8y-properties-list\n [data]=\"package.manifest\"\n [properties]=\"packageProperties\"\n ></c8y-properties-list>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator sticky-top\">\n <div class=\"card-title\">{{ 'Extension package overview' | translate }}</div>\n </div>\n <div class=\"card-block p-l-16 p-r-16\">\n <div\n class=\"alert alert-warning m-b-16\"\n style=\"margin: auto\"\n *ngIf=\"packageType === PACKAGE_TYPE.ARCHIVED\"\n translate\n >\n The package was archived by the owner marking it as out of maintenance. It is not\n recommended to install the package.\n </div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found' | translate\"\n [subtitle]=\"\n 'To view the contents of &quot;README&quot;, add the file &quot;README.md&quot; to the package.'\n | translate\n \"\n *ngIf=\"!markdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n class=\"markdown-content\"\n [innerHTML]=\"markdown | markdownToHtml: { baseUrl } | async\"\n ></div>\n </div>\n <div class=\"separator-bottom visible-sm visible-xs\"></div>\n </div>\n\n <div\n class=\"inner-scroll d-flex d-col bg-level-1 split-view__list\"\n [ngClass]=\"{ 'border-right': !!selectedPlugin }\"\n >\n <div class=\"card-header separator sticky-top\">\n <div class=\"card-title\">{{ 'Package plugins' | translate }}</div>\n </div>\n <div class=\"border-left flex-grow\">\n <!-- empty state -->\n <div\n class=\"p-16\"\n *ngIf=\"(exportedPlugins$ | async).length === 0\"\n >\n <c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'This package doesn\\'t contain plugins.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <c8y-plugin-list\n [plugins$]=\"exportedPlugins$\"\n [selectable]=\"false\"\n [installable]=\"true\"\n [package]=\"package\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-plugin-list>\n </div>\n </div>\n\n <div class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': selectedPlugin }\">\n <div\n class=\"card-header separator sticky-top\"\n *ngIf=\"selectedPlugin\"\n >\n <button\n class=\"btn-clean\"\n (click)=\"closeOverview()\"\n >\n <i c8yIcon=\"caret-back\"></i>\n {{ 'Back to package overview ' | translate }}\n </button>\n </div>\n <div\n class=\"card-block p-l-16 p-r-16 overflow-visible\"\n *ngIf=\"selectedPlugin\"\n >\n <div\n class=\"markdown-content\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No README.md found for plugin' | translate\"\n [subtitle]=\"\n 'To view the contents of &quot;README&quot;, add the file &quot;README.md&quot; to the plugin.'\n | translate\n \"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n</div>\n" }]
100
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.WizardModalService }, { type: i3.EcosystemService }, { type: i2.ContextRouteService }, { type: i2.PluginsService }, { type: i3.PackageAvailabilityService }, { type: i2.AppStateService }, { type: i2.GainsightService }] });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLWRldGFpbHMvcGFja2FnZS1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLWRldGFpbHMvcGFja2FnZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFFTCxlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsY0FBYyxFQUVkLGtCQUFrQixFQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzdCLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQU05QyxNQUFNLE9BQU8sdUJBQXVCO0lBdUJsQyxZQUNVLGNBQThCLEVBQzlCLGtCQUFzQyxFQUN0QyxnQkFBa0MsRUFDbEMsbUJBQXdDLEVBQ3hDLGNBQThCLEVBQzlCLDBCQUFzRCxFQUN0RCxFQUFtQixFQUNuQixnQkFBa0M7UUFQbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3RELE9BQUUsR0FBRixFQUFFLENBQWlCO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUExQjVDLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBSzNCLHFCQUFnQixHQUF5QyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDL0IsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGdDQUEyQixHQUFHLEtBQUssQ0FBQztRQU0zQixzQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztRQUN4QyxpQkFBWSxHQUFHLFdBQVcsQ0FBQztRQUMzQixzQkFBaUIsR0FBeUIsaUJBQWlCLENBQUM7SUFXbEUsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUM7UUFDckYsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUNoQyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFDaEU7WUFDRSxTQUFTLEVBQUUsNEJBQTRCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxlQUFlO1lBQy9FLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLDRCQUE0QjtTQUN2RixDQUNGLENBQUM7UUFFRixNQUFNLFlBQVksR0FBUTtZQUN4QixZQUFZLEVBQUUsRUFBRTtZQUNoQixFQUFFLEVBQUUsZ0JBQWdCLENBQUMsb0JBQW9CO1lBQ3pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQWtCLEVBQUUsZUFBd0M7UUFDMUYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsOEJBQThCLENBQ3pFLElBQUksRUFDSixlQUFlLENBQ2hCLENBQUM7UUFDRixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssZUFBZSxDQUFDO1FBQ3JFLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBeUI7UUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFtQjtRQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUk7WUFDakIsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsV0FBVyxDQUFDO1FBQzlFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNyRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxzQkFBc0I7WUFDekIsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ3hFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQzsrR0ExR1UsdUJBQXVCO21HQUF2Qix1QkFBdUIsMkRDN0JwQyxraVJBbVFBOzs0RkR0T2EsdUJBQXVCO2tCQUpuQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSwgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25QbHVnaW4sXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgUGFja2FnZVR5cGUsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBQcm9wZXJ0aWVzTGlzdEl0ZW0sXG4gIFdpemFyZE1vZGFsU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblN0YXRlLFxuICBFY29zeXN0ZW1TZXJ2aWNlLFxuICBFY29zeXN0ZW1XaXphcmRzLFxuICBwYWNrYWdlUHJvcGVydGllcyxcbiAgUEFDS0FHRV9UWVBFX0xBQkVMUyxcbiAgUGFja2FnZUF2YWlsYWJpbGl0eVNlcnZpY2UsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU1cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXBhY2thZ2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWNrYWdlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBhY2thZ2VEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWFya2Rvd246IHN0cmluZztcbiAgcGx1Z2luTWFya2Rvd246IHN0cmluZztcbiAgYmFzZVVybDogc3RyaW5nO1xuICBwbHVnaW5CYXNlVXJsOiBzdHJpbmc7XG4gIHBhY2thZ2U6IElBcHBsaWNhdGlvbiA9IHt9O1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFwcFN0YXRlOiBBcHBsaWNhdGlvblN0YXRlO1xuICBpc1BhY2thZ2VCbHVlcHJpbnQ6IGJvb2xlYW47XG4gIGV4cG9ydGVkUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICBpc0NoYW5naW5nQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gIGlzT3duZWRCeUN1cnJlbnRUZW5hbnQgPSBmYWxzZTtcbiAgaXNBbGxvd2VkVG9DcmVhdGVTdWJ0ZW5hbnRzID0gZmFsc2U7XG4gIHBhY2thZ2VDb250ZW50U3RhdGU6IEFwcGxpY2F0aW9uU3RhdGU7XG4gIHBhY2thZ2VUeXBlOiBQYWNrYWdlVHlwZTtcbiAgcGFja2FnZUF2YWlsYWJpbGl0eTogQXBwbGljYXRpb25BdmFpbGFiaWxpdHk7XG4gIHNlbGVjdGVkUGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbjtcblxuICByZWFkb25seSBwYWNrYWdlVHlwZUxhYmVscyA9IFBBQ0tBR0VfVFlQRV9MQUJFTFM7XG4gIHJlYWRvbmx5IFBBQ0tBR0VfVFlQRSA9IFBhY2thZ2VUeXBlO1xuICByZWFkb25seSBwYWNrYWdlUHJvcGVydGllczogUHJvcGVydGllc0xpc3RJdGVtW10gPSBwYWNrYWdlUHJvcGVydGllcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHdpemFyZE1vZGFsU2VydmljZTogV2l6YXJkTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZVNlcnZpY2U6IENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYWNrYWdlQXZhaWxhYmlsaXR5U2VydmljZTogUGFja2FnZUF2YWlsYWJpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc0FsbG93ZWRUb0NyZWF0ZVN1YnRlbmFudHMgPSAhIXRoaXMudWkuY3VycmVudFRlbmFudC52YWx1ZT8uYWxsb3dDcmVhdGVUZW5hbnRzO1xuICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGRlcGxveSgpIHtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfUExVR0lOUyxcbiAgICAgIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBBQ0tBR0VfREVUQUlMUyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkRFUExPWV9BUFBMSUNBVElPTl9JTklUSUFURURcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBhbnkgPSB7XG4gICAgICB3aXphcmRDb25maWc6IHt9LFxuICAgICAgaWQ6IEVjb3N5c3RlbVdpemFyZHMuQkxVRVBSSU5UX0RFUExPWU1FTlQsXG4gICAgICBwYWNrYWdlOiB0aGlzLnBhY2thZ2VcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsT3B0aW9uczogTW9kYWxPcHRpb25zID0geyBpbml0aWFsU3RhdGUgfTtcbiAgICB0aGlzLndpemFyZE1vZGFsU2VydmljZS5zaG93KG1vZGFsT3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyB0b2dnbGVQYWNrYWdlQXZhaWxhYmlsaXR5KHBja2c6IElBcHBsaWNhdGlvbiwgbmV3QXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSkge1xuICAgIHRoaXMuaXNDaGFuZ2luZ0F2YWlsYWJpbGl0eSA9IHRydWU7XG4gICAgcGNrZyA9IGF3YWl0IHRoaXMucGFja2FnZUF2YWlsYWJpbGl0eVNlcnZpY2UuYXNrSWZBdmFpbGFiaWxpdHlTaG91bGRCZVNldFRvKFxuICAgICAgcGNrZyxcbiAgICAgIG5ld0F2YWlsYWJpbGl0eVxuICAgICk7XG4gICAgY29uc3QgYXZhaWxhYmlsaXR5SGFzQ2hhbmdlZCA9IHBja2cuYXZhaWxhYmlsaXR5ID09PSBuZXdBdmFpbGFiaWxpdHk7XG4gICAgaWYgKGF2YWlsYWJpbGl0eUhhc0NoYW5nZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZERhdGEocGNrZyk7XG4gICAgICB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2Uuc2V0Q29udGV4dCh0aGlzLmFjdGl2YXRlZFJvdXRlLCBwY2tnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWNrYWdlQXZhaWxhYmlsaXR5ID0gdGhpcy5wYWNrYWdlLmF2YWlsYWJpbGl0eTtcbiAgICB9XG4gICAgdGhpcy5pc0NoYW5naW5nQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBzaG93UGx1Z2luT3ZlcnZpZXcocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbikge1xuICAgIHRoaXMuc2VsZWN0ZWRQbHVnaW4gPSBwbHVnaW47XG4gICAgY29uc3QgYmFzZVVybCA9IGAvYXBwcy8ke3BsdWdpbi5pZH0vYDtcbiAgICB0aGlzLnBsdWdpbkJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMucGx1Z2luTWFya2Rvd24gPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldFJlYWRtZUZpbGVDb250ZW50KGJhc2VVcmwpO1xuICB9XG5cbiAgY2xvc2VPdmVydmlldygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUGx1Z2luID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZERhdGEocGNrZz86IElBcHBsaWNhdGlvbikge1xuICAgIHRoaXMucGFja2FnZSA9IHBja2dcbiAgICAgID8gcGNrZ1xuICAgICAgOiB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk/LmNvbnRleHREYXRhO1xuICAgIHRoaXMucGFja2FnZUF2YWlsYWJpbGl0eSA9IHRoaXMucGFja2FnZS5hdmFpbGFiaWxpdHk7XG4gICAgdGhpcy5wYWNrYWdlQ29udGVudFN0YXRlID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFBhY2thZ2VDb250ZW50U3RhdGUodGhpcy5wYWNrYWdlKTtcbiAgICB0aGlzLnBhY2thZ2VUeXBlID0gdGhpcy5wbHVnaW5zU2VydmljZS5nZXRQYWNrYWdlVHlwZSh0aGlzLnBhY2thZ2UpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMucGFja2FnZT8ubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5wYWNrYWdlPy5tYW5pZmVzdD8uZGVzY3JpcHRpb247XG4gICAgY29uc3QgYmFzZVVybCA9IGAvYXBwcy8ke3RoaXMucGFja2FnZS5jb250ZXh0UGF0aH0vYDtcbiAgICB0aGlzLm1hcmtkb3duID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5nZXRSZWFkbWVGaWxlQ29udGVudChiYXNlVXJsKTtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuYXBwU3RhdGUgPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXBwU3RhdGUodGhpcy5wYWNrYWdlKTtcbiAgICB0aGlzLmlzUGFja2FnZUJsdWVwcmludCA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc1BhY2thZ2VCbHVlcHJpbnQodGhpcy5wYWNrYWdlKTtcbiAgICB0aGlzLmlzT3duZWRCeUN1cnJlbnRUZW5hbnQgPVxuICAgICAgdGhpcy5wYWNrYWdlPy5vd25lcj8udGVuYW50Py5pZCA9PT0gdGhpcy51aS5jdXJyZW50VGVuYW50LnZhbHVlPy5uYW1lO1xuICAgIHRoaXMuZXh0cmFjdFBhY2thZ2VNRkV4cG9ydHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFBhY2thZ2VNRkV4cG9ydHMoKSB7XG4gICAgY29uc3QgZXhwb3J0cyA9IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0TUZFeHBvcnRzKHRoaXMucGFja2FnZSk7XG4gICAgdGhpcy5leHBvcnRlZFBsdWdpbnMkLm5leHQoZXhwb3J0cyk7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+e3sgbmFtZSB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWF0b20nXCJcbiAgICBbbGFiZWxdPVwiJ0Vjb3N5c3RlbScgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidiaWctcGFyY2VsJ1wiXG4gICAgW2xhYmVsXT1cIidFeHRlbnNpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJ2Vjb3N5c3RlbS9leHRlbnNpb24vZXh0ZW5zaW9ucydcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwibmFtZSB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwiJ0V4dGVuc2lvbiBwYWNrYWdlJyB8IHRyYW5zbGF0ZVwiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm1cIlxuICAqbmdJZj1cImlzT3duZWRCeUN1cnJlbnRUZW5hbnQgJiYgaXNBbGxvd2VkVG9DcmVhdGVTdWJ0ZW5hbnRzXCJcbj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgPGxhYmVsXG4gICAgICBjbGFzcz1cIm0tYi0wIG0tci04XCJcbiAgICAgIGZvcj1cImF2YWlsYWJpbGl0eVwiXG4gICAgICB0cmFuc2xhdGVcbiAgICA+XG4gICAgICBBdmFpbGFiaWxpdHlgb2YgcGFja2FnZSBiYXNlZCBvbiBhcHAgc3RhdGVgXG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICA8c2VsZWN0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgaWQ9XCJhdmFpbGFiaWxpdHlcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInBhY2thZ2VBdmFpbGFiaWxpdHlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNDaGFuZ2luZ0F2YWlsYWJpbGl0eVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVBhY2thZ2VBdmFpbGFiaWxpdHkocGFja2FnZSwgJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxvcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYXZhaWxhYmlsaXR5IG9mIHBhY2thZ2VBdmFpbGFiaWxpdHlTZXJ2aWNlLmF2YWlsYWJpbGl0aWVzXCJcbiAgICAgICAgICBbbmdWYWx1ZV09XCJhdmFpbGFiaWxpdHkudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgYXZhaWxhYmlsaXR5LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2XG4gIGNsYXNzPVwiY2FyZCBjb250ZW50LWZ1bGxwYWdlIGQtZ3JpZCBncmlkX19yb3ctLWZpdC1hdXRvXCJcbiAgW25nQ2xhc3NdPVwieyAnZ3JpZF9fY29sLS04LTQtMCc6ICFzZWxlY3RlZFBsdWdpbiwgJ2dyaWRfX2NvbC0tMC00LTgnOiAhIXNlbGVjdGVkUGx1Z2luIH1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiYmctbGV2ZWwtMSBncmlkX19jb2wtLWZ1bGxzcGFuIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBwLXQtMjQgcC1iLTI0IGxhcmdlLXBhZGRpbmdcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJjYXJkX19yaWJib24gYnRuLWNsZWFuXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAocGFja2FnZS5sYWJlbCB8fCBwYWNrYWdlLm1hbmlmZXN0LmxhYmVsIHwgdHJhbnNsYXRlUGFja2FnZUxhYmVsKSArXG4gICAgICAgICAgJzogJyArXG4gICAgICAgICAgKHBhY2thZ2VUeXBlTGFiZWxzW3BhY2thZ2VUeXBlXS50b29sdGlwIHwgdHJhbnNsYXRlKVxuICAgICAgICBcIlxuICAgICAgICB0b29sdGlwPVwie3sgcGFja2FnZVR5cGVMYWJlbHNbcGFja2FnZVR5cGVdLnRvb2x0aXAgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJwYWNrYWdlVHlwZSAhPT0gUEFDS0FHRV9UWVBFLkNVU1RPTVwiXG4gICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdiZy1pbmZvJzogcGFja2FnZVR5cGUgPT09IFBBQ0tBR0VfVFlQRS5DT01NVU5JVFksXG4gICAgICAgICAgICAnYmctcHJpbWFyeSc6IHBhY2thZ2VUeXBlID09PSBQQUNLQUdFX1RZUEUuT0ZGSUNJQUwsXG4gICAgICAgICAgICAnYmctd2FybmluZyc6IHBhY2thZ2VUeXBlID09PSBQQUNLQUdFX1RZUEUuQVJDSElWRURcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHBhY2thZ2UubGFiZWwgfHwgcGFja2FnZS5tYW5pZmVzdC5sYWJlbCB8IHRyYW5zbGF0ZVBhY2thZ2VMYWJlbCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWZsZXgtNzBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3IgaWNvbi00OFwiXG4gICAgICAgICAgICBjOHlJY29uPVwiYmlnLXBhcmNlbFwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1jbGVhblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAoYXBwU3RhdGU/LmxhYmVsIHwgdHJhbnNsYXRlKSArICc6ICcgKyAoYXBwU3RhdGU/LnRvb2x0aXAgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiYXBwU3RhdGU/LnRvb2x0aXAgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcFN0YXRlPy5jbGFzc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGFwcFN0YXRlPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgIChwYWNrYWdlQ29udGVudFN0YXRlPy5sYWJlbCB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAgICAgICAnOiAnICtcbiAgICAgICAgICAgICAgKHBhY2thZ2VDb250ZW50U3RhdGU/LnRvb2x0aXAgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwicGFja2FnZUNvbnRlbnRTdGF0ZT8udG9vbHRpcCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImxhYmVsXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicGFja2FnZUNvbnRlbnRTdGF0ZT8uY2xhc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBwYWNrYWdlQ29udGVudFN0YXRlPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93IGNvbC0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWZsZXgtODBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBoNCBtLWItOFwiPnt7IG5hbWUgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9fTwvZGl2PlxuICAgICAgICAgICAgICA8cCAqbmdJZj1cImRlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW11dGVkXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZW0+e3sgJ05vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZS4nIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTMgdGV4dC1yaWdodC1tZCBwLXItbWQtNDBcIlxuICAgICAgICAgICAgICAqbmdJZj1cImlzUGFja2FnZUJsdWVwcmludFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZXBsb3koKVwiXG4gICAgICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1wYWNrYWdlLWRldGFpbHMtLWRlcGxveS1hcHBsaWNhdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cIm91dHB1dFwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnRGVwbG95IGFwcGxpY2F0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvd1wiPlxuICAgICAgICAgICAgICA8Yzh5LXByb3BlcnRpZXMtbGlzdFxuICAgICAgICAgICAgICAgIFtkYXRhXT1cInBhY2thZ2UubWFuaWZlc3RcIlxuICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cInBhY2thZ2VQcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgPjwvYzh5LXByb3BlcnRpZXMtbGlzdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBzZXBhcmF0b3Igc3RpY2t5LXRvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyAnRXh0ZW5zaW9uIHBhY2thZ2Ugb3ZlcnZpZXcnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC1sLTE2IHAtci0xNlwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbS1iLTE2XCJcbiAgICAgICAgc3R5bGU9XCJtYXJnaW46IGF1dG9cIlxuICAgICAgICAqbmdJZj1cInBhY2thZ2VUeXBlID09PSBQQUNLQUdFX1RZUEUuQVJDSElWRURcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgVGhlIHBhY2thZ2Ugd2FzIGFyY2hpdmVkIGJ5IHRoZSBvd25lciBtYXJraW5nIGl0IGFzIG91dCBvZiBtYWludGVuYW5jZS4gSXQgaXMgbm90XG4gICAgICAgIHJlY29tbWVuZGVkIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgW2ljb25dPVwiJ3VzZXItbWFudWFsJ1wiXG4gICAgICAgIFt0aXRsZV09XCInTm8gUkVBRE1FLm1kIGZvdW5kJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtzdWJ0aXRsZV09XCJcbiAgICAgICAgICAnVG8gdmlldyB0aGUgY29udGVudHMgb2YgJnF1b3Q7UkVBRE1FJnF1b3Q7LCBhZGQgdGhlIGZpbGUgJnF1b3Q7UkVBRE1FLm1kJnF1b3Q7IHRvIHRoZSBwYWNrYWdlLidcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwiIW1hcmtkb3duXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWFya2Rvd24tY29udGVudFwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwibWFya2Rvd24gfCBtYXJrZG93blRvSHRtbDogeyBiYXNlVXJsIH0gfCBhc3luY1wiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvci1ib3R0b20gdmlzaWJsZS1zbSB2aXNpYmxlLXhzXCI+PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImlubmVyLXNjcm9sbCBkLWZsZXggZC1jb2wgYmctbGV2ZWwtMSBzcGxpdC12aWV3X19saXN0XCJcbiAgICBbbmdDbGFzc109XCJ7ICdib3JkZXItcmlnaHQnOiAhIXNlbGVjdGVkUGx1Z2luIH1cIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvciBzdGlja3ktdG9wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7ICdQYWNrYWdlIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJvcmRlci1sZWZ0IGZsZXgtZ3Jvd1wiPlxuICAgICAgPCEtLSBlbXB0eSBzdGF0ZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwLTE2XCJcbiAgICAgICAgKm5nSWY9XCIoZXhwb3J0ZWRQbHVnaW5zJCB8IGFzeW5jKS5sZW5ndGggPT09IDBcIlxuICAgICAgPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgW2ljb25dPVwiJ3BsdWdpbidcIlxuICAgICAgICAgIFt0aXRsZV09XCInTm8gcGx1Z2lucyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCInVGhpcyBwYWNrYWdlIGRvZXNuXFwndCBjb250YWluIHBsdWdpbnMuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1wbHVnaW4tbGlzdFxuICAgICAgICBbcGx1Z2lucyRdPVwiZXhwb3J0ZWRQbHVnaW5zJFwiXG4gICAgICAgIFtzZWxlY3RhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW2luc3RhbGxhYmxlXT1cInRydWVcIlxuICAgICAgICBbcGFja2FnZV09XCJwYWNrYWdlXCJcbiAgICAgICAgW3NlbGVjdGVkUGx1Z2luXT1cInNlbGVjdGVkUGx1Z2luXCJcbiAgICAgICAgKHNob3dPdmVydmlldyk9XCJzaG93UGx1Z2luT3ZlcnZpZXcoJGV2ZW50KVwiXG4gICAgICA+PC9jOHktcGx1Z2luLWxpc3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgc3BsaXQtdmlld19fZGV0YWlsXCJcbiAgICBbbmdDbGFzc109XCJ7ICdzcGxpdC12aWV3X19kZXRhaWwtLXNlbGVjdGVkJzogc2VsZWN0ZWRQbHVnaW4gfVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yIHN0aWNreS10b3BcIlxuICAgICAgKm5nSWY9XCJzZWxlY3RlZFBsdWdpblwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0bi1jbGVhblwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZU92ZXJ2aWV3KClcIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwiY2FyZXQtYmFja1wiPjwvaT5cbiAgICAgICAge3sgJ0JhY2sgdG8gcGFja2FnZSBvdmVydmlldyAnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQtYmxvY2sgcC1sLTE2IHAtci0xNiBvdmVyZmxvdy12aXNpYmxlXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRQbHVnaW5cIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYXJrZG93bi1jb250ZW50XCJcbiAgICAgICAgKm5nSWY9XCJwbHVnaW5NYXJrZG93blwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwicGx1Z2luTWFya2Rvd24gfCBtYXJrZG93blRvSHRtbDogeyBiYXNlVXJsOiBwbHVnaW5CYXNlVXJsIH0gfCBhc3luY1wiXG4gICAgICA+PC9kaXY+XG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIFtpY29uXT1cIid1c2VyLW1hbnVhbCdcIlxuICAgICAgICBbdGl0bGVdPVwiJ05vIFJFQURNRS5tZCBmb3VuZCBmb3IgcGx1Z2luJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtzdWJ0aXRsZV09XCJcbiAgICAgICAgICAnVG8gdmlldyB0aGUgY29udGVudHMgb2YgJnF1b3Q7UkVBRE1FJnF1b3Q7LCBhZGQgdGhlIGZpbGUgJnF1b3Q7UkVBRE1FLm1kJnF1b3Q7IHRvIHRoZSBwbHVnaW4uJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgXCJcbiAgICAgICAgKm5nSWY9XCIhcGx1Z2luTWFya2Rvd25cIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,5 +1,6 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
+ import { PluginsService } from '@c8y/ngx-components';
3
4
  import { BehaviorSubject } from 'rxjs';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/router";
@@ -9,12 +10,16 @@ import * as i4 from "../../../../application-plugins/plugin-list.component";
9
10
  export class PackageVersionsPluginsComponent {
10
11
  constructor(activatedRoute) {
11
12
  this.activatedRoute = activatedRoute;
13
+ this.showOverview = new EventEmitter();
12
14
  this.exportedPlugins$ = new BehaviorSubject([]);
13
15
  this.appParentData = this.activatedRoute.parent?.snapshot.data.contextData;
14
16
  }
15
17
  async ngOnChanges() {
16
18
  this.exportedPlugins$.next(this.getExportedPlugins());
17
19
  }
20
+ showPluginOverview(plugin) {
21
+ this.showOverview.emit(plugin);
22
+ }
18
23
  getExportedPlugins() {
19
24
  if (!this.selectedVersionManifest?.exports) {
20
25
  return [];
@@ -25,17 +30,22 @@ export class PackageVersionsPluginsComponent {
25
30
  };
26
31
  return this.selectedVersionManifest.exports.map(plugin => ({
27
32
  ...plugin,
33
+ id: PluginsService.createPluginId(this.selectedVersionManifest.contextPath, plugin, this.selectedVersionManifest.version, false),
28
34
  originApp
29
35
  }));
30
36
  }
31
37
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageVersionsPluginsComponent, deps: [{ token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
32
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageVersionsPluginsComponent, selector: "c8y-contents-plugins", inputs: { selectedVersionManifest: "selectedVersionManifest" }, usesOnChanges: true, ngImport: i0, template: "<p class=\"legend form-block\">\n {{ 'Plugins' | translate }}\n</p>\n<!-- empty state -->\n<c8y-ui-empty-state\n *ngIf=\"(exportedPlugins$ | async).length === 0\"\n [icon]=\"'plugin'\"\n [horizontal]=\"true\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'This package doesn\\'t contain plugins.' | translate\"\n></c8y-ui-empty-state>\n\n<c8y-plugin-list [plugins$]=\"exportedPlugins$\" [selectable]=\"false\"></c8y-plugin-list>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PluginListComponent, selector: "c8y-plugin-list", inputs: ["plugins$", "emptyListText", "selectable", "hideSource", "installable", "package"], outputs: ["selectedItems"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageVersionsPluginsComponent, selector: "c8y-contents-plugins", inputs: { selectedVersionManifest: "selectedVersionManifest", selectedPlugin: "selectedPlugin" }, outputs: { showOverview: "showOverview" }, usesOnChanges: true, ngImport: i0, template: "<p class=\"legend form-block\">\n {{ 'Plugins' | translate }}\n</p>\n<!-- empty state -->\n<c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'This package doesn\\'t contain plugins.' | translate\"\n *ngIf=\"(exportedPlugins$ | async).length === 0\"\n [horizontal]=\"true\"\n></c8y-ui-empty-state>\n\n<c8y-plugin-list\n [plugins$]=\"exportedPlugins$\"\n [selectable]=\"false\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n></c8y-plugin-list>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PluginListComponent, selector: "c8y-plugin-list", inputs: ["plugins$", "emptyListText", "selectable", "hideSource", "installable", "package", "selectedPlugin"], outputs: ["selectedItems", "showOverview"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
33
39
  }
34
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageVersionsPluginsComponent, decorators: [{
35
41
  type: Component,
36
- args: [{ selector: 'c8y-contents-plugins', template: "<p class=\"legend form-block\">\n {{ 'Plugins' | translate }}\n</p>\n<!-- empty state -->\n<c8y-ui-empty-state\n *ngIf=\"(exportedPlugins$ | async).length === 0\"\n [icon]=\"'plugin'\"\n [horizontal]=\"true\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'This package doesn\\'t contain plugins.' | translate\"\n></c8y-ui-empty-state>\n\n<c8y-plugin-list [plugins$]=\"exportedPlugins$\" [selectable]=\"false\"></c8y-plugin-list>\n" }]
42
+ args: [{ selector: 'c8y-contents-plugins', template: "<p class=\"legend form-block\">\n {{ 'Plugins' | translate }}\n</p>\n<!-- empty state -->\n<c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'This package doesn\\'t contain plugins.' | translate\"\n *ngIf=\"(exportedPlugins$ | async).length === 0\"\n [horizontal]=\"true\"\n></c8y-ui-empty-state>\n\n<c8y-plugin-list\n [plugins$]=\"exportedPlugins$\"\n [selectable]=\"false\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n></c8y-plugin-list>\n" }]
37
43
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }], propDecorators: { selectedVersionManifest: [{
38
44
  type: Input,
39
45
  args: ['selectedVersionManifest']
46
+ }], selectedPlugin: [{
47
+ type: Input
48
+ }], showOverview: [{
49
+ type: Output
40
50
  }] } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudHMtcGx1Z2lucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vcGFja2FnZXMvcGFja2FnZS12ZXJzaW9ucy9wYWNrYWdlLWNvbnRlbnRzL2NvbnRlbnRzLXBsdWdpbnMvY29udGVudHMtcGx1Z2lucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vcGFja2FnZXMvcGFja2FnZS12ZXJzaW9ucy9wYWNrYWdlLWNvbnRlbnRzL2NvbnRlbnRzLXBsdWdpbnMvY29udGVudHMtcGx1Z2lucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBTXZDLE1BQU0sT0FBTywrQkFBK0I7SUFNMUMsWUFBb0IsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBSmxELHFCQUFnQixHQUF5QyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUsvRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzdFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDM0MsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUc7WUFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEtBQUs7WUFDdEUsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSztTQUNqQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsR0FBRyxNQUFNO1lBQ1QsU0FBUztTQUNWLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQzsrR0E1QlUsK0JBQStCO21HQUEvQiwrQkFBK0IsaUpDVjVDLDBjQWFBOzs0RkRIYSwrQkFBK0I7a0JBSjNDLFNBQVM7K0JBQ0Usc0JBQXNCO21GQUlFLHVCQUF1QjtzQkFBeEQsS0FBSzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElNYW5pZmVzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUGx1Z2luIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRlbnRzLXBsdWdpbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudHMtcGx1Z2lucy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUGFja2FnZVZlcnNpb25zUGx1Z2luc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgnc2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3QnKSBzZWxlY3RlZFZlcnNpb25NYW5pZmVzdDogSU1hbmlmZXN0O1xuICBleHBvcnRlZFBsdWdpbnMkOiBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblxuICBwcml2YXRlIGFwcFBhcmVudERhdGE6IElBcHBsaWNhdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIHRoaXMuYXBwUGFyZW50RGF0YSA9IHRoaXMuYWN0aXZhdGVkUm91dGUucGFyZW50Py5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhO1xuICB9XG5cbiAgYXN5bmMgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5leHBvcnRlZFBsdWdpbnMkLm5leHQodGhpcy5nZXRFeHBvcnRlZFBsdWdpbnMoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4cG9ydGVkUGx1Z2lucygpOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3Q/LmV4cG9ydHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5BcHAgPSB7XG4gICAgICBsYWJlbDogdGhpcy5hcHBQYXJlbnREYXRhPy5sYWJlbCB8fCB0aGlzLmFwcFBhcmVudERhdGE/Lm1hbmlmZXN0LmxhYmVsLFxuICAgICAgb3duZXI6IHRoaXMuYXBwUGFyZW50RGF0YT8ub3duZXJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3QuZXhwb3J0cy5tYXAocGx1Z2luID0+ICh7XG4gICAgICAuLi5wbHVnaW4sXG4gICAgICBvcmlnaW5BcHBcbiAgICB9KSk7XG4gIH1cbn1cbiIsIjxwIGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2tcIj5cbiAge3sgJ1BsdWdpbnMnIHwgdHJhbnNsYXRlIH19XG48L3A+XG48IS0tIGVtcHR5IHN0YXRlIC0tPlxuPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAqbmdJZj1cIihleHBvcnRlZFBsdWdpbnMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiXG4gIFtpY29uXT1cIidwbHVnaW4nXCJcbiAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gIFt0aXRsZV09XCInTm8gcGx1Z2lucyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICBbc3VidGl0bGVdPVwiJ1RoaXMgcGFja2FnZSBkb2VzblxcJ3QgY29udGFpbiBwbHVnaW5zLicgfCB0cmFuc2xhdGVcIlxuPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG48Yzh5LXBsdWdpbi1saXN0IFtwbHVnaW5zJF09XCJleHBvcnRlZFBsdWdpbnMkXCIgW3NlbGVjdGFibGVdPVwiZmFsc2VcIj48L2M4eS1wbHVnaW4tbGlzdD5cbiJdfQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudHMtcGx1Z2lucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vcGFja2FnZXMvcGFja2FnZS12ZXJzaW9ucy9wYWNrYWdlLWNvbnRlbnRzL2NvbnRlbnRzLXBsdWdpbnMvY29udGVudHMtcGx1Z2lucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vcGFja2FnZXMvcGFja2FnZS12ZXJzaW9ucy9wYWNrYWdlLWNvbnRlbnRzL2NvbnRlbnRzLXBsdWdpbnMvY29udGVudHMtcGx1Z2lucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRCxPQUFPLEVBQXFCLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQU12QyxNQUFNLE9BQU8sK0JBQStCO0lBUzFDLFlBQW9CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQU54QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRS9ELHFCQUFnQixHQUF5QyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUsvRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzdFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBeUI7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3RFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUs7U0FDakMsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELEdBQUcsTUFBTTtZQUNULEVBQUUsRUFBRSxjQUFjLENBQUMsY0FBYyxDQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUN4QyxNQUFNLEVBQ04sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFDcEMsS0FBSyxDQUNOO1lBQ0QsU0FBUztTQUNWLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQzsrR0F6Q1UsK0JBQStCO21HQUEvQiwrQkFBK0IsOE5DVjVDLDBpQkFrQkE7OzRGRFJhLCtCQUErQjtrQkFKM0MsU0FBUzsrQkFDRSxzQkFBc0I7bUZBSUUsdUJBQXVCO3NCQUF4RCxLQUFLO3VCQUFDLHlCQUF5QjtnQkFDdkIsY0FBYztzQkFBdEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElBcHBsaWNhdGlvbiwgSU1hbmlmZXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25QbHVnaW4sIFBsdWdpbnNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRlbnRzLXBsdWdpbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudHMtcGx1Z2lucy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUGFja2FnZVZlcnNpb25zUGx1Z2luc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgnc2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3QnKSBzZWxlY3RlZFZlcnNpb25NYW5pZmVzdDogSU1hbmlmZXN0O1xuICBASW5wdXQoKSBzZWxlY3RlZFBsdWdpbjogQXBwbGljYXRpb25QbHVnaW47XG4gIEBPdXRwdXQoKSBzaG93T3ZlcnZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcGxpY2F0aW9uUGx1Z2luPigpO1xuXG4gIGV4cG9ydGVkUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gIHByaXZhdGUgYXBwUGFyZW50RGF0YTogSUFwcGxpY2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgdGhpcy5hcHBQYXJlbnREYXRhID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJlbnQ/LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGE7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmV4cG9ydGVkUGx1Z2lucyQubmV4dCh0aGlzLmdldEV4cG9ydGVkUGx1Z2lucygpKTtcbiAgfVxuXG4gIHNob3dQbHVnaW5PdmVydmlldyhwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luKSB7XG4gICAgdGhpcy5zaG93T3ZlcnZpZXcuZW1pdChwbHVnaW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHBvcnRlZFBsdWdpbnMoKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVmVyc2lvbk1hbmlmZXN0Py5leHBvcnRzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luQXBwID0ge1xuICAgICAgbGFiZWw6IHRoaXMuYXBwUGFyZW50RGF0YT8ubGFiZWwgfHwgdGhpcy5hcHBQYXJlbnREYXRhPy5tYW5pZmVzdC5sYWJlbCxcbiAgICAgIG93bmVyOiB0aGlzLmFwcFBhcmVudERhdGE/Lm93bmVyXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmVyc2lvbk1hbmlmZXN0LmV4cG9ydHMubWFwKHBsdWdpbiA9PiAoe1xuICAgICAgLi4ucGx1Z2luLFxuICAgICAgaWQ6IFBsdWdpbnNTZXJ2aWNlLmNyZWF0ZVBsdWdpbklkKFxuICAgICAgICB0aGlzLnNlbGVjdGVkVmVyc2lvbk1hbmlmZXN0LmNvbnRleHRQYXRoLFxuICAgICAgICBwbHVnaW4sXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3QudmVyc2lvbixcbiAgICAgICAgZmFsc2VcbiAgICAgICksXG4gICAgICBvcmlnaW5BcHBcbiAgICB9KSk7XG4gIH1cbn1cbiIsIjxwIGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2tcIj5cbiAge3sgJ1BsdWdpbnMnIHwgdHJhbnNsYXRlIH19XG48L3A+XG48IS0tIGVtcHR5IHN0YXRlIC0tPlxuPGM4eS11aS1lbXB0eS1zdGF0ZVxuICBbaWNvbl09XCIncGx1Z2luJ1wiXG4gIFt0aXRsZV09XCInTm8gcGx1Z2lucyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICBbc3VidGl0bGVdPVwiJ1RoaXMgcGFja2FnZSBkb2VzblxcJ3QgY29udGFpbiBwbHVnaW5zLicgfCB0cmFuc2xhdGVcIlxuICAqbmdJZj1cIihleHBvcnRlZFBsdWdpbnMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiXG4gIFtob3Jpem9udGFsXT1cInRydWVcIlxuPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG48Yzh5LXBsdWdpbi1saXN0XG4gIFtwbHVnaW5zJF09XCJleHBvcnRlZFBsdWdpbnMkXCJcbiAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICBbc2VsZWN0ZWRQbHVnaW5dPVwic2VsZWN0ZWRQbHVnaW5cIlxuICAoc2hvd092ZXJ2aWV3KT1cInNob3dQbHVnaW5PdmVydmlldygkZXZlbnQpXCJcbj48L2M4eS1wbHVnaW4tbGlzdD5cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
3
  import { ApplicationService } from '@c8y/client';
4
4
  import { AlertService, ContextRouteService } from '@c8y/ngx-components';
@@ -16,15 +16,18 @@ export class PackageContentsComponent {
16
16
  this.applicationService = applicationService;
17
17
  this.alertService = alertService;
18
18
  this.contextRouteService = contextRouteService;
19
+ this.showOverview = new EventEmitter();
19
20
  this.package = {};
20
21
  this.isLoading = false;
21
22
  this.packageVersionProperties = packageProperties;
22
23
  }
24
+ showPluginOverview(plugin) {
25
+ this.showOverview.emit(plugin);
26
+ }
23
27
  async ngOnChanges(changes) {
24
- if (changes.selectedVersion.currentValue) {
28
+ if (changes.selectedVersion?.currentValue) {
25
29
  this.loadManifest(this.selectedVersion);
26
30
  }
27
- this.selectedVersionManifest = undefined;
28
31
  }
29
32
  async loadManifest(version) {
30
33
  this.package = this.contextRouteService.getContextData(this.activatedRoute)?.contextData;
@@ -42,12 +45,16 @@ export class PackageContentsComponent {
42
45
  return undefined;
43
46
  }
44
47
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageContentsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.ApplicationService }, { token: i3.AlertService }, { token: i3.ContextRouteService }], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageContentsComponent, selector: "c8y-package-contents", inputs: { selectedVersion: "selectedVersion" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"inner-scroll\">\n <ng-container *ngIf=\"!selectedVersionManifest && !isLoading\">\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'big-parcel'\"\n [horizontal]=\"true\"\n [title]=\"'No package selected' | translate\"\n [subtitle]=\"'Select a package from the list to display the package contents.' | translate\"\n ></c8y-ui-empty-state>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-container *ngIf=\"selectedVersionManifest && !isLoading\">\n <!-- DETAILS -->\n <div class=\"card-block p-t-0\">\n <c8y-properties-list\n [data]=\"selectedVersionManifest\"\n [emptyLabel]=\"'--'\"\n [properties]=\"packageVersionProperties\"\n >\n </c8y-properties-list>\n \n <!-- APPS -->\n <c8y-contents-apps\n class=\"p-t-16 d-block\"\n [selectedVersionManifest]=\"selectedVersionManifest\"\n ></c8y-contents-apps>\n\n <!-- PLUGINS -->\n <c8y-contents-plugins\n class=\"p-t-16 d-block\"\n [selectedVersionManifest]=\"selectedVersionManifest\"\n ></c8y-contents-plugins>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.PropertiesListComponent, selector: "c8y-properties-list", inputs: ["properties", "title", "icon", "data", "groups", "noParse", "emptyLabel"] }, { kind: "component", type: i5.PackageVersionsPluginsComponent, selector: "c8y-contents-plugins", inputs: ["selectedVersionManifest"] }, { kind: "component", type: i6.PackageVersionsAppsComponent, selector: "c8y-contents-apps", inputs: ["selectedVersionManifest"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PackageContentsComponent, selector: "c8y-package-contents", inputs: { selectedVersion: "selectedVersion", selectedPlugin: "selectedPlugin" }, outputs: { showOverview: "showOverview" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"inner-scroll\">\n <ng-container *ngIf=\"!selectedVersionManifest && !isLoading\">\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'big-parcel'\"\n [horizontal]=\"true\"\n [title]=\"'No package selected' | translate\"\n [subtitle]=\"'Select a package from the list to display the package contents.' | translate\"\n ></c8y-ui-empty-state>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-container *ngIf=\"selectedVersionManifest && !isLoading\">\n <!-- DETAILS -->\n <div class=\"card-block p-t-0\">\n <c8y-properties-list\n [data]=\"selectedVersionManifest\"\n [emptyLabel]=\"'--'\"\n [properties]=\"packageVersionProperties\"\n >\n </c8y-properties-list>\n \n <!-- APPS -->\n <c8y-contents-apps\n class=\"p-t-16 d-block\"\n [selectedVersionManifest]=\"selectedVersionManifest\"\n ></c8y-contents-apps>\n\n <!-- PLUGINS -->\n <c8y-contents-plugins\n class=\"p-t-16 d-block\"\n [selectedVersionManifest]=\"selectedVersionManifest\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-contents-plugins>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.PropertiesListComponent, selector: "c8y-properties-list", inputs: ["properties", "title", "icon", "data", "groups", "noParse", "emptyLabel"] }, { kind: "component", type: i5.PackageVersionsPluginsComponent, selector: "c8y-contents-plugins", inputs: ["selectedVersionManifest", "selectedPlugin"], outputs: ["showOverview"] }, { kind: "component", type: i6.PackageVersionsAppsComponent, selector: "c8y-contents-apps", inputs: ["selectedVersionManifest"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
46
49
  }
47
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageContentsComponent, decorators: [{
48
51
  type: Component,
49
- args: [{ selector: 'c8y-package-contents', template: "<div class=\"inner-scroll\">\n <ng-container *ngIf=\"!selectedVersionManifest && !isLoading\">\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'big-parcel'\"\n [horizontal]=\"true\"\n [title]=\"'No package selected' | translate\"\n [subtitle]=\"'Select a package from the list to display the package contents.' | translate\"\n ></c8y-ui-empty-state>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-container *ngIf=\"selectedVersionManifest && !isLoading\">\n <!-- DETAILS -->\n <div class=\"card-block p-t-0\">\n <c8y-properties-list\n [data]=\"selectedVersionManifest\"\n [emptyLabel]=\"'--'\"\n [properties]=\"packageVersionProperties\"\n >\n </c8y-properties-list>\n \n <!-- APPS -->\n <c8y-contents-apps\n class=\"p-t-16 d-block\"\n [selectedVersionManifest]=\"selectedVersionManifest\"\n ></c8y-contents-apps>\n\n <!-- PLUGINS -->\n <c8y-contents-plugins\n class=\"p-t-16 d-block\"\n [selectedVersionManifest]=\"selectedVersionManifest\"\n ></c8y-contents-plugins>\n </div>\n </ng-container>\n</div>\n" }]
52
+ args: [{ selector: 'c8y-package-contents', template: "<div class=\"inner-scroll\">\n <ng-container *ngIf=\"!selectedVersionManifest && !isLoading\">\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'big-parcel'\"\n [horizontal]=\"true\"\n [title]=\"'No package selected' | translate\"\n [subtitle]=\"'Select a package from the list to display the package contents.' | translate\"\n ></c8y-ui-empty-state>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-container *ngIf=\"selectedVersionManifest && !isLoading\">\n <!-- DETAILS -->\n <div class=\"card-block p-t-0\">\n <c8y-properties-list\n [data]=\"selectedVersionManifest\"\n [emptyLabel]=\"'--'\"\n [properties]=\"packageVersionProperties\"\n >\n </c8y-properties-list>\n \n <!-- APPS -->\n <c8y-contents-apps\n class=\"p-t-16 d-block\"\n [selectedVersionManifest]=\"selectedVersionManifest\"\n ></c8y-contents-apps>\n\n <!-- PLUGINS -->\n <c8y-contents-plugins\n class=\"p-t-16 d-block\"\n [selectedVersionManifest]=\"selectedVersionManifest\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-contents-plugins>\n </div>\n </ng-container>\n</div>\n" }]
50
53
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.ApplicationService }, { type: i3.AlertService }, { type: i3.ContextRouteService }], propDecorators: { selectedVersion: [{
51
54
  type: Input
55
+ }], selectedPlugin: [{
56
+ type: Input
57
+ }], showOverview: [{
58
+ type: Output
52
59
  }] } });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZXMtY29udGVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtdmVyc2lvbnMvcGFja2FnZS1jb250ZW50cy9wYWNrYWdlcy1jb250ZW50cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vcGFja2FnZXMvcGFja2FnZS12ZXJzaW9ucy9wYWNrYWdlLWNvbnRlbnRzL3BhY2thZ2VzLWNvbnRlbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUEyQixNQUFNLGFBQWEsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7OztBQU16RSxNQUFNLE9BQU8sd0JBQXdCO0lBUW5DLFlBQ1UsY0FBOEIsRUFDOUIsa0JBQXNDLEVBQ3RDLFlBQTBCLEVBQzFCLG1CQUF3QztRQUh4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBVGxELFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBQzNCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFVCw2QkFBd0IsR0FBeUIsaUJBQWlCLENBQUM7SUFPekUsQ0FBQztJQUVKLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBc0I7UUFDdEMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQWU7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxXQUFXLENBQUM7UUFDekYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFlO1FBQ3ZDLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOytHQXBDVSx3QkFBd0I7bUdBQXhCLHdCQUF3QixpSUNWckMsNnRDQXdDQTs7NEZEOUJhLHdCQUF3QjtrQkFKcEMsU0FBUzsrQkFDRSxzQkFBc0I7aUxBSXZCLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UsIElBcHBsaWNhdGlvbiwgSU1hbmlmZXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBDb250ZXh0Um91dGVTZXJ2aWNlLCBQcm9wZXJ0aWVzTGlzdEl0ZW0gfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IHBhY2thZ2VQcm9wZXJ0aWVzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXBhY2thZ2UtY29udGVudHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFja2FnZXMtY29udGVudHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBhY2thZ2VDb250ZW50c0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVmVyc2lvbjogc3RyaW5nO1xuICBzZWxlY3RlZFZlcnNpb25NYW5pZmVzdDogSU1hbmlmZXN0O1xuICBwYWNrYWdlOiBJQXBwbGljYXRpb24gPSB7fTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgcGFja2FnZVZlcnNpb25Qcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzTGlzdEl0ZW1bXSA9IHBhY2thZ2VQcm9wZXJ0aWVzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZVNlcnZpY2U6IENvbnRleHRSb3V0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZFZlcnNpb24uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmxvYWRNYW5pZmVzdCh0aGlzLnNlbGVjdGVkVmVyc2lvbik7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3QgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBsb2FkTWFuaWZlc3QodmVyc2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYWNrYWdlID0gdGhpcy5jb250ZXh0Um91dGVTZXJ2aWNlLmdldENvbnRleHREYXRhKHRoaXMuYWN0aXZhdGVkUm91dGUpPy5jb250ZXh0RGF0YTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZFZlcnNpb25NYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0TWFuaWZlc3QodmVyc2lvbik7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TWFuaWZlc3QodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxJTWFuaWZlc3Q+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcE1hbmlmZXN0KHRoaXMucGFja2FnZSwgdmVyc2lvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3QgJiYgIWlzTG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2XCI+XG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIFtpY29uXT1cIidiaWctcGFyY2VsJ1wiXG4gICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVdPVwiJ05vIHBhY2thZ2Ugc2VsZWN0ZWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3N1YnRpdGxlXT1cIidTZWxlY3QgYSBwYWNrYWdlIGZyb20gdGhlIGxpc3QgdG8gZGlzcGxheSB0aGUgcGFja2FnZSBjb250ZW50cy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3QgJiYgIWlzTG9hZGluZ1wiPlxuICAgIDwhLS0gREVUQUlMUyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBwLXQtMFwiPlxuICAgICAgPGM4eS1wcm9wZXJ0aWVzLWxpc3RcbiAgICAgICAgW2RhdGFdPVwic2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3RcIlxuICAgICAgICBbZW1wdHlMYWJlbF09XCInLS0nXCJcbiAgICAgICAgW3Byb3BlcnRpZXNdPVwicGFja2FnZVZlcnNpb25Qcm9wZXJ0aWVzXCJcbiAgICAgID5cbiAgICAgIDwvYzh5LXByb3BlcnRpZXMtbGlzdD5cbiAgICAgIFxuICAgICAgICA8IS0tIEFQUFMgLS0+XG4gICAgICA8Yzh5LWNvbnRlbnRzLWFwcHNcbiAgICAgIGNsYXNzPVwicC10LTE2IGQtYmxvY2tcIlxuICAgICAgW3NlbGVjdGVkVmVyc2lvbk1hbmlmZXN0XT1cInNlbGVjdGVkVmVyc2lvbk1hbmlmZXN0XCJcbiAgICAgID48L2M4eS1jb250ZW50cy1hcHBzPlxuXG4gICAgICA8IS0tIFBMVUdJTlMgLS0+XG4gICAgICA8Yzh5LWNvbnRlbnRzLXBsdWdpbnNcbiAgICAgIGNsYXNzPVwicC10LTE2IGQtYmxvY2tcIlxuICAgICAgW3NlbGVjdGVkVmVyc2lvbk1hbmlmZXN0XT1cInNlbGVjdGVkVmVyc2lvbk1hbmlmZXN0XCJcbiAgICAgID48L2M4eS1jb250ZW50cy1wbHVnaW5zPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZXMtY29udGVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtdmVyc2lvbnMvcGFja2FnZS1jb250ZW50cy9wYWNrYWdlcy1jb250ZW50cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vcGFja2FnZXMvcGFja2FnZS12ZXJzaW9ucy9wYWNrYWdlLWNvbnRlbnRzL3BhY2thZ2VzLWNvbnRlbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQTJCLE1BQU0sYUFBYSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBRVosbUJBQW1CLEVBRXBCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBTXpFLE1BQU0sT0FBTyx3QkFBd0I7SUFXbkMsWUFDVSxjQUE4QixFQUM5QixrQkFBc0MsRUFDdEMsWUFBMEIsRUFDMUIsbUJBQXdDO1FBSHhDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFaeEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUcvRCxZQUFPLEdBQWlCLEVBQUUsQ0FBQztRQUMzQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRVQsNkJBQXdCLEdBQXlCLGlCQUFpQixDQUFDO0lBT3pFLENBQUM7SUFFSixrQkFBa0IsQ0FBQyxNQUF5QjtRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFzQjtRQUN0QyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQWU7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxXQUFXLENBQUM7UUFDekYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFlO1FBQ3ZDLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOytHQTFDVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qiw4TUNmckMsNnpDQTBDQTs7NEZEM0JhLHdCQUF3QjtrQkFKcEMsU0FBUzsrQkFDRSxzQkFBc0I7aUxBSXZCLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSwgSUFwcGxpY2F0aW9uLCBJTWFuaWZlc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uUGx1Z2luLFxuICBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICBQcm9wZXJ0aWVzTGlzdEl0ZW1cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwYWNrYWdlUHJvcGVydGllcyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1wYWNrYWdlLWNvbnRlbnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhY2thZ2VzLWNvbnRlbnRzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQYWNrYWdlQ29udGVudHNDb21wb25lbnQge1xuICBASW5wdXQoKSBzZWxlY3RlZFZlcnNpb246IHN0cmluZztcbiAgQElucHV0KCkgc2VsZWN0ZWRQbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luO1xuICBAT3V0cHV0KCkgc2hvd092ZXJ2aWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxBcHBsaWNhdGlvblBsdWdpbj4oKTtcblxuICBzZWxlY3RlZFZlcnNpb25NYW5pZmVzdDogSU1hbmlmZXN0O1xuICBwYWNrYWdlOiBJQXBwbGljYXRpb24gPSB7fTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgcGFja2FnZVZlcnNpb25Qcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzTGlzdEl0ZW1bXSA9IHBhY2thZ2VQcm9wZXJ0aWVzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRSb3V0ZVNlcnZpY2U6IENvbnRleHRSb3V0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHNob3dQbHVnaW5PdmVydmlldyhwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luKSB7XG4gICAgdGhpcy5zaG93T3ZlcnZpZXcuZW1pdChwbHVnaW4pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkVmVyc2lvbj8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmxvYWRNYW5pZmVzdCh0aGlzLnNlbGVjdGVkVmVyc2lvbik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZE1hbmlmZXN0KHZlcnNpb246IHN0cmluZykge1xuICAgIHRoaXMucGFja2FnZSA9IHRoaXMuY29udGV4dFJvdXRlU2VydmljZS5nZXRDb250ZXh0RGF0YSh0aGlzLmFjdGl2YXRlZFJvdXRlKT8uY29udGV4dERhdGE7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uTWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldE1hbmlmZXN0KHZlcnNpb24pO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE1hbmlmZXN0KHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8SU1hbmlmZXN0PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBNYW5pZmVzdCh0aGlzLnBhY2thZ2UsIHZlcnNpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkVmVyc2lvbk1hbmlmZXN0ICYmICFpc0xvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNlwiPlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCInYmlnLXBhcmNlbCdcIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgW3RpdGxlXT1cIidObyBwYWNrYWdlIHNlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtzdWJ0aXRsZV09XCInU2VsZWN0IGEgcGFja2FnZSBmcm9tIHRoZSBsaXN0IHRvIGRpc3BsYXkgdGhlIHBhY2thZ2UgY29udGVudHMuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmVyc2lvbk1hbmlmZXN0ICYmICFpc0xvYWRpbmdcIj5cbiAgICA8IS0tIERFVEFJTFMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC10LTBcIj5cbiAgICAgIDxjOHktcHJvcGVydGllcy1saXN0XG4gICAgICAgIFtkYXRhXT1cInNlbGVjdGVkVmVyc2lvbk1hbmlmZXN0XCJcbiAgICAgICAgW2VtcHR5TGFiZWxdPVwiJy0tJ1wiXG4gICAgICAgIFtwcm9wZXJ0aWVzXT1cInBhY2thZ2VWZXJzaW9uUHJvcGVydGllc1wiXG4gICAgICA+XG4gICAgICA8L2M4eS1wcm9wZXJ0aWVzLWxpc3Q+XG4gICAgICBcbiAgICAgICAgPCEtLSBBUFBTIC0tPlxuICAgICAgPGM4eS1jb250ZW50cy1hcHBzXG4gICAgICBjbGFzcz1cInAtdC0xNiBkLWJsb2NrXCJcbiAgICAgIFtzZWxlY3RlZFZlcnNpb25NYW5pZmVzdF09XCJzZWxlY3RlZFZlcnNpb25NYW5pZmVzdFwiXG4gICAgICA+PC9jOHktY29udGVudHMtYXBwcz5cblxuICAgICAgPCEtLSBQTFVHSU5TIC0tPlxuICAgICAgPGM4eS1jb250ZW50cy1wbHVnaW5zXG4gICAgICBjbGFzcz1cInAtdC0xNiBkLWJsb2NrXCJcbiAgICAgIFtzZWxlY3RlZFZlcnNpb25NYW5pZmVzdF09XCJzZWxlY3RlZFZlcnNpb25NYW5pZmVzdFwiXG4gICAgICBbc2VsZWN0ZWRQbHVnaW5dPVwic2VsZWN0ZWRQbHVnaW5cIlxuICAgICAgKHNob3dPdmVydmlldyk9XCJzaG93UGx1Z2luT3ZlcnZpZXcoJGV2ZW50KVwiXG4gICAgICA+PC9jOHktY29udGVudHMtcGx1Z2lucz5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==