@energycap/components 0.26.11 → 0.27.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 (50) hide show
  1. package/bundles/energycap-components.umd.js +7247 -6296
  2. package/bundles/energycap-components.umd.js.map +1 -1
  3. package/bundles/energycap-components.umd.min.js +16 -1
  4. package/bundles/energycap-components.umd.min.js.map +1 -1
  5. package/energycap-components.d.ts +2 -4
  6. package/energycap-components.metadata.json +1 -1
  7. package/esm2015/energycap-components.js +3 -5
  8. package/esm2015/lib/components.module.js +52 -38
  9. package/esm2015/lib/core/cache.service.js +49 -4
  10. package/esm2015/lib/core/telemetry-tracker.service.js +14 -0
  11. package/esm2015/lib/core/telemetry.service.js +32 -7
  12. package/esm2015/lib/display/help/help-types.js +2 -0
  13. package/esm2015/lib/display/hierarchy/hierarchy-base.js +106 -0
  14. package/esm2015/lib/display/hierarchy/hierarchy-mocks.spec.js +58 -0
  15. package/esm2015/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.js +58 -0
  16. package/esm2015/lib/display/resizable/resizable.component.js +57 -0
  17. package/esm2015/lib/display/tree/tree.component.js +83 -0
  18. package/esm2015/lib/shared/page/page-base/page-base.component.js +69 -12
  19. package/esm2015/lib/shared/page/page-statuses.js +23 -0
  20. package/esm2015/lib/shared/testing/hierarchy-base-test-injector-factory.spec.js +17 -0
  21. package/esm2015/lib/shared/testing/page-base-component-test-injector-factory.spec.js +21 -1
  22. package/esm2015/lib/shared/wizard/wizard-base/wizard-base.component.js +260 -0
  23. package/esm2015/lib/shared/wizard/wizard-buttons/wizard-buttons.component.js +52 -0
  24. package/esm2015/lib/shared/wizard/wizard-progress/wizard-progress.component.js +18 -0
  25. package/esm2015/public-api.js +15 -3
  26. package/fesm2015/energycap-components.js +6867 -6000
  27. package/fesm2015/energycap-components.js.map +1 -1
  28. package/lib/components.module.d.ts +2 -3
  29. package/lib/core/cache.service.d.ts +11 -1
  30. package/lib/core/telemetry-tracker.service.d.ts +10 -0
  31. package/lib/core/telemetry.service.d.ts +19 -2
  32. package/lib/display/help/help-types.d.ts +33 -0
  33. package/lib/display/hierarchy/hierarchy-base.d.ts +72 -0
  34. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -0
  35. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +29 -0
  36. package/lib/display/resizable/resizable.component.d.ts +28 -0
  37. package/lib/display/tree/tree.component.d.ts +51 -0
  38. package/lib/shared/page/page-base/page-base.component.d.ts +43 -1
  39. package/lib/shared/page/page-statuses.d.ts +13 -0
  40. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -0
  41. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +9 -0
  42. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +131 -0
  43. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +23 -0
  44. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +7 -0
  45. package/package.json +1 -1
  46. package/public-api.d.ts +14 -2
  47. package/src/assets/locales/en_US.json +3 -1
  48. package/src/styles/mixins/_resizable-base.scss +1 -2
  49. package/esm2015/lib/core/telemetry-base.service.js +0 -3
  50. package/lib/core/telemetry-base.service.d.ts +0 -25
@@ -0,0 +1,58 @@
1
+ import { Component, Injector, Input, Output } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { ScrollService } from '../../../core/scroll.service';
4
+ import { HierarchyBase } from '../hierarchy-base';
5
+ export class HierarchyTreeComponent extends HierarchyBase {
6
+ constructor(scrollService, injector) {
7
+ super(injector);
8
+ this.scrollService = scrollService;
9
+ /** The value of the id attribute of the tree's root HTMLUListElement, suffixed with '_root' */
10
+ this.id = 'HierarchyTree';
11
+ /** Emits a HierarchyItem whenever one is selected by clicking */
12
+ this.itemSelected = new Subject();
13
+ /** The width of the spacing before a tree node, multipled by a HierarchyItem's level. Value is in pixels */
14
+ this.indent = 16;
15
+ /** The value of the id attribute of the tree's scroll container element, used to scroll a selected item into view. */
16
+ this.scrollContainerId = '';
17
+ }
18
+ ngOnInit() {
19
+ this.scrollContainerId = `${this.id}_root`;
20
+ }
21
+ /**
22
+ * Scroll to the item currently marked as is-selected. Wait a tick for the
23
+ * NavItemActiveDirective to update the selected class.
24
+ */
25
+ scrollToSelectedItem() {
26
+ window.setTimeout(() => {
27
+ const linkSelector = `.item-wrapper.is-selected`;
28
+ this.scrollService.scrollToItem(`#${this.scrollContainerId}`, linkSelector);
29
+ });
30
+ }
31
+ /**
32
+ * When a HierarchyItem is selected, update the value of the activeUrl property with the value
33
+ * of that item's url property and emit the item to any subscribers.
34
+ */
35
+ selectItem(item) {
36
+ this.itemSelected.next(item);
37
+ if (item.display === 'heading' && !item.hideToggle) {
38
+ this.toggleItemClicked(item, !item.expanded);
39
+ }
40
+ }
41
+ }
42
+ HierarchyTreeComponent.decorators = [
43
+ { type: Component, args: [{
44
+ selector: 'ec-hierarchy-tree',
45
+ template: "<ul id=\"{{scrollContainerId}}\"\r\n class=\"flex-grow scroll-y\">\r\n\r\n <li *ngIf=\"!hideRootNode\">\r\n <div class=\"item-wrapper\"\r\n [ngClass]=\"{'is-heading': rootNode?.display === 'heading'}\"\r\n ecNavItemActive=\"is-selected\"\r\n [ecNavItemActiveUrl]=\"rootNode?.url\"\r\n [ecNavItemActiveExactMatch]='rootNode?.isActiveExactMatch'>\r\n <a id=\"rootNode_{{rootNode?.id}}_link\"\r\n class=\"item flex-grow d-flex align-items-center\"\r\n routerLink=\"{{rootNode?.url}}\"\r\n [queryParams]=\"rootNode?.queryParams\">\r\n <i class=\"ec-icon {{rootNode.icon}} mx-1 flex-shrink\"\r\n *ngIf=\"rootNode?.icon\"></i>\r\n <span class=\"mx-1\">{{rootNode?.label}}</span>\r\n </a>\r\n </div>\r\n </li>\r\n\r\n <ng-template #hierarchyView\r\n let-items>\r\n <li *ngFor=\"let item of items; index as index; first as isFirst\"\r\n id=\"treeItem_{{item.id}}\">\r\n <div class=\"item-wrapper\"\r\n [ngClass]=\"{'is-heading': item.display === 'heading'}\"\r\n ecNavItemActive=\"is-selected\"\r\n [ecNavItemActiveUrl]=\"item.url\"\r\n [ecNavItemActiveExactMatch]=\"item.isActiveExactMatch\"\r\n [ecNavItemActiveQueryParams]=\"item.queryParams\">\r\n\r\n <!-- This element provides the indentation for each level -->\r\n <span id=\"indent_{{item.id}}\"\r\n class=\"d-block h-100\"\r\n [style.width.px]=\"(indent) * (item.level - 1) + (item.level * 4) + (item.hasChildren ? 0 : indent)\">\r\n </span>\r\n\r\n <!-- Toggle the button icon to be a spinner when item.status is pending -->\r\n <ec-collapsible-toggle id=\"toggle_{{item.id}}\"\r\n class=\"flex-shrink\"\r\n [style.width.px]=\"indent\"\r\n *ngIf=\"item.hasChildren && !item.hideToggle\"\r\n [hidden]=\"item.status === 'pending'\"\r\n [expanded]=\"item.expanded\"\r\n (expandedChange)=\"toggleItemClicked(item, $event)\">\r\n </ec-collapsible-toggle>\r\n\r\n <i class=\"ec-icon icon-loading my-1\"\r\n [hidden]=\"item.status !== 'pending'\"></i>\r\n\r\n <a id=\"treeItem_{{item.id}}_link\"\r\n class=\"item\"\r\n *ngIf=\"item.url\"\r\n (click)=\"selectItem(item)\"\r\n [routerLink]=\"item.url\"\r\n [queryParams]=\"item.queryParams\"\r\n [queryParamsHandling]=\"item.queryParamsHandling || ''\">\r\n <i class=\"ec-icon {{item.icon}} mx-1 flex-shrink\"\r\n *ngIf=\"item.icon\"></i>\r\n <span class=\"mx-1\">{{item.label}}</span>\r\n </a>\r\n <div id=\"treeItem_{{item.id}}_heading\"\r\n class=\"item\"\r\n *ngIf=\"!item.url\"\r\n (click)=\"selectItem(item)\">\r\n <i class=\"ec-icon {{item.icon}} mx-1 flex-shrink\"\r\n *ngIf=\"item.icon\"></i>\r\n <span class=\"mx-1\">{{item.label}}</span>\r\n </div>\r\n </div>\r\n\r\n\r\n <ul *ngIf=\"item.children.length > 0 && item.expanded\">\r\n <ng-container *ngTemplateOutlet=\"hierarchyView; context:{ $implicit: item.children }\"></ng-container>\r\n </ul>\r\n </li>\r\n </ng-template>\r\n\r\n <ng-container *ngTemplateOutlet=\"hierarchyView; context:{ $implicit: rootNode?.children }\"></ng-container>\r\n</ul>\r\n",
46
+ styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:block;font-size:.875rem}ul{list-style:none;margin:0;overflow-x:hidden;padding:0}ul li{white-space:nowrap}ul .item-wrapper{align-items:center;display:flex;height:1.75rem;padding:0 .25rem}ul .item-wrapper.is-heading{color:rgba(26,26,35,.38);cursor:pointer;font-size:.75rem;font-weight:700;text-transform:uppercase}ul .item-wrapper:hover{background-color:#bfe0e9}ul .item-wrapper.is-selected{font-weight:700}ul .item-wrapper a{text-decoration:none}ul .item{align-items:center;color:inherit;display:flex;flex:1 1;min-height:0;min-width:0}"]
47
+ },] }
48
+ ];
49
+ HierarchyTreeComponent.ctorParameters = () => [
50
+ { type: ScrollService },
51
+ { type: Injector }
52
+ ];
53
+ HierarchyTreeComponent.propDecorators = {
54
+ id: [{ type: Input }],
55
+ hideRootNode: [{ type: Input }],
56
+ itemSelected: [{ type: Output }]
57
+ };
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvaGllcmFyY2h5L2hpZXJhcmNoeS10cmVlL2hpZXJhcmNoeS10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFPakUsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGFBQWE7SUFpQnZELFlBQ1UsYUFBNEIsRUFDcEMsUUFBa0I7UUFDaEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRlYsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFoQnRDLCtGQUErRjtRQUMvRSxPQUFFLEdBQVcsZUFBZSxDQUFDO1FBSzdDLGlFQUFpRTtRQUNoRCxpQkFBWSxHQUEyQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXRFLDRHQUE0RztRQUNyRyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBRW5CLHVIQUF1SDtRQUNoSCxzQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFLVCxDQUFDO0lBRWYsUUFBUTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksb0JBQW9CO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUFDO1lBQ2pELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLElBQW1CO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDOzs7WUFuREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLDAvR0FBOEM7O2FBRS9DOzs7WUFQUSxhQUFhO1lBRkYsUUFBUTs7O2lCQWF6QixLQUFLOzJCQUdMLEtBQUs7MkJBR0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Njcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGllcmFyY2h5QmFzZSwgSGllcmFyY2h5SXRlbSB9IGZyb20gJy4uL2hpZXJhcmNoeS1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtaGllcmFyY2h5LXRyZWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaHktdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaGllcmFyY2h5LXRyZWUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGllcmFyY2h5VHJlZUNvbXBvbmVudCBleHRlbmRzIEhpZXJhcmNoeUJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAvKiogVGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgb2YgdGhlIHRyZWUncyByb290IEhUTUxVTGlzdEVsZW1lbnQsIHN1ZmZpeGVkIHdpdGggJ19yb290JyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZDogc3RyaW5nID0gJ0hpZXJhcmNoeVRyZWUnO1xyXG5cclxuICAvKiogSGlkZSB0aGUgcm9vdCBub2RlICovXHJcbiAgQElucHV0KCkgcHVibGljIGhpZGVSb290Tm9kZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBFbWl0cyBhIEhpZXJhcmNoeUl0ZW0gd2hlbmV2ZXIgb25lIGlzIHNlbGVjdGVkIGJ5IGNsaWNraW5nICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtU2VsZWN0ZWQ6IFN1YmplY3Q8SGllcmFyY2h5SXRlbT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKiogVGhlIHdpZHRoIG9mIHRoZSBzcGFjaW5nIGJlZm9yZSBhIHRyZWUgbm9kZSwgbXVsdGlwbGVkIGJ5IGEgSGllcmFyY2h5SXRlbSdzIGxldmVsLiBWYWx1ZSBpcyBpbiBwaXhlbHMgKi9cclxuICBwdWJsaWMgaW5kZW50ID0gMTY7XHJcblxyXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGUgdHJlZSdzIHNjcm9sbCBjb250YWluZXIgZWxlbWVudCwgdXNlZCB0byBzY3JvbGwgYSBzZWxlY3RlZCBpdGVtIGludG8gdmlldy4gICovXHJcbiAgcHVibGljIHNjcm9sbENvbnRhaW5lcklkID0gJyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzY3JvbGxTZXJ2aWNlOiBTY3JvbGxTZXJ2aWNlLFxyXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICkgeyBzdXBlcihpbmplY3Rvcik7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zY3JvbGxDb250YWluZXJJZCA9IGAke3RoaXMuaWR9X3Jvb3RgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsIHRvIHRoZSBpdGVtIGN1cnJlbnRseSBtYXJrZWQgYXMgaXMtc2VsZWN0ZWQuIFdhaXQgYSB0aWNrIGZvciB0aGVcclxuICAgKiBOYXZJdGVtQWN0aXZlRGlyZWN0aXZlIHRvIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgY2xhc3MuXHJcbiAgICovXHJcbiAgcHVibGljIHNjcm9sbFRvU2VsZWN0ZWRJdGVtKCk6IHZvaWQge1xyXG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBsaW5rU2VsZWN0b3IgPSBgLml0ZW0td3JhcHBlci5pcy1zZWxlY3RlZGA7XHJcbiAgICAgIHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxUb0l0ZW0oYCMke3RoaXMuc2Nyb2xsQ29udGFpbmVySWR9YCwgbGlua1NlbGVjdG9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhIEhpZXJhcmNoeUl0ZW0gaXMgc2VsZWN0ZWQsIHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZVVybCBwcm9wZXJ0eSB3aXRoIHRoZSB2YWx1ZVxyXG4gICAqIG9mIHRoYXQgaXRlbSdzIHVybCBwcm9wZXJ0eSBhbmQgZW1pdCB0aGUgaXRlbSB0byBhbnkgc3Vic2NyaWJlcnMuXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdEl0ZW0oaXRlbTogSGllcmFyY2h5SXRlbSk6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQubmV4dChpdGVtKTtcclxuICAgIGlmIChpdGVtLmRpc3BsYXkgPT09ICdoZWFkaW5nJyAmJiAhaXRlbS5oaWRlVG9nZ2xlKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlSXRlbUNsaWNrZWQoaXRlbSwgIWl0ZW0uZXhwYW5kZWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,57 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Component, ElementRef, Inject, Renderer2 } from '@angular/core';
3
+ import { CacheService } from '../../core/cache.service';
4
+ import { ResizableBase } from './resizable-base';
5
+ /**
6
+ * Make an element resizable horizontally by wrapping it in the ResizableComponent.
7
+ * Default widths / limits are applied but you can optionally override them
8
+ * with min-width and max-width with style attributes
9
+ * @example
10
+ * <ec-resizable [style.width.px]="200"
11
+ * [style.min-width.px]="75"
12
+ * [style.max-width.px]="300">
13
+ * <div> ... </div>
14
+ * </ec-resizable>
15
+ */
16
+ export class ResizableComponent extends ResizableBase {
17
+ constructor(el, renderer, cacheService, document) {
18
+ super(renderer, cacheService, document);
19
+ this.el = el;
20
+ //default rememberWidth to true for standard resizable, resizable tables default to false
21
+ this.rememberWidth = true;
22
+ }
23
+ /** Store the host element to reference later */
24
+ ngOnInit() {
25
+ this.currentEl = this.el.nativeElement;
26
+ }
27
+ /**
28
+ * Set the new width of the element and emit the new width to subscribers
29
+ */
30
+ setWidth(width) {
31
+ this.renderer.setStyle(this.currentEl, 'width', width + 'px');
32
+ this.saveWidths([width]);
33
+ }
34
+ /**Called from the base class when cached widths are available and restoring
35
+ * width is enabled. We only care about the first one because we only have one width
36
+ */
37
+ restoreWidths(widths) {
38
+ this.setWidth(widths[0]);
39
+ }
40
+ }
41
+ ResizableComponent.decorators = [
42
+ { type: Component, args: [{
43
+ selector: 'ec-resizable',
44
+ template: `<div class="content">
45
+ <ng-content></ng-content>
46
+ </div>
47
+ <div class="handle" (mousedown)="startDrag($event)"></div>`,
48
+ styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{border-right:1px solid #d2d7d9;display:flex;max-width:480px;min-width:100px;position:relative;width:240px}:host.is-active{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}:host.is-active .handle:after{background-color:#0084a9}.handle{height:100%;padding:0 5px;position:absolute;right:-7px;top:0;width:13px;z-index:30}.handle:after{content:\"\";display:block;height:100%;position:relative;transition:background-color .3s ease}.handle:hover{cursor:col-resize}.handle:hover:after{background-color:#0084a9}.content{display:flex;overflow:hidden}.content,.content ::ng-deep>*{flex:1 1;min-height:0;min-width:0}"]
49
+ },] }
50
+ ];
51
+ ResizableComponent.ctorParameters = () => [
52
+ { type: ElementRef },
53
+ { type: Renderer2 },
54
+ { type: CacheService },
55
+ { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
56
+ ];
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3Jlc2l6YWJsZS9yZXNpemFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQ7Ozs7Ozs7Ozs7R0FVRztBQVNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBQ25ELFlBQ1UsRUFBYyxFQUN0QixRQUFtQixFQUNuQixZQUEwQixFQUNSLFFBQWtCO1FBRXBDLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBTGhDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFPdEIseUZBQXlGO1FBQ3pGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxnREFBZ0Q7SUFDekMsUUFBUTtRQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ08sUUFBUSxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNPLGFBQWEsQ0FBQyxNQUFnQjtRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7OztZQXZDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLFFBQVEsRUFBRTs7O3VFQUcyRDs7YUFFdEU7OztZQXhCbUIsVUFBVTtZQUFrQixTQUFTO1lBRWhELFlBQVk7WUE0QlcsUUFBUSx1QkFBbkMsTUFBTSxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzaXphYmxlQmFzZSB9IGZyb20gJy4vcmVzaXphYmxlLWJhc2UnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBNYWtlIGFuIGVsZW1lbnQgcmVzaXphYmxlIGhvcml6b250YWxseSBieSB3cmFwcGluZyBpdCBpbiB0aGUgUmVzaXphYmxlQ29tcG9uZW50LlxyXG4gKiBEZWZhdWx0IHdpZHRocyAvIGxpbWl0cyBhcmUgYXBwbGllZCBidXQgeW91IGNhbiBvcHRpb25hbGx5IG92ZXJyaWRlIHRoZW1cclxuICogd2l0aCBtaW4td2lkdGggYW5kIG1heC13aWR0aCB3aXRoIHN0eWxlIGF0dHJpYnV0ZXNcclxuICogQGV4YW1wbGVcclxuICogPGVjLXJlc2l6YWJsZSBbc3R5bGUud2lkdGgucHhdPVwiMjAwXCJcclxuICogICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIjc1XCJcclxuICogICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIjMwMFwiPlxyXG4gKiAgICA8ZGl2PiAuLi4gPC9kaXY+XHJcbiAqIDwvZWMtcmVzaXphYmxlPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1yZXNpemFibGUnLFxyXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGFuZGxlXCIgKG1vdXNlZG93bik9XCJzdGFydERyYWcoJGV2ZW50KVwiPjwvZGl2PmAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzaXphYmxlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNvbXBvbmVudCBleHRlbmRzIFJlc2l6YWJsZUJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50OiBEb2N1bWVudClcclxuICB7XHJcbiAgICBzdXBlcihyZW5kZXJlciwgY2FjaGVTZXJ2aWNlLCBkb2N1bWVudCk7XHJcblxyXG4gICAgLy9kZWZhdWx0IHJlbWVtYmVyV2lkdGggdG8gdHJ1ZSBmb3Igc3RhbmRhcmQgcmVzaXphYmxlLCByZXNpemFibGUgdGFibGVzIGRlZmF1bHQgdG8gZmFsc2VcclxuICAgIHRoaXMucmVtZW1iZXJXaWR0aCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKiogU3RvcmUgdGhlIGhvc3QgZWxlbWVudCB0byByZWZlcmVuY2UgbGF0ZXIgKi9cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRFbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgbmV3IHdpZHRoIG9mIHRoZSBlbGVtZW50IGFuZCBlbWl0IHRoZSBuZXcgd2lkdGggdG8gc3Vic2NyaWJlcnNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0V2lkdGgod2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmN1cnJlbnRFbCwgJ3dpZHRoJywgd2lkdGggKyAncHgnKTtcclxuICAgIHRoaXMuc2F2ZVdpZHRocyhbd2lkdGhdKTtcclxuICB9XHJcblxyXG4gIC8qKkNhbGxlZCBmcm9tIHRoZSBiYXNlIGNsYXNzIHdoZW4gY2FjaGVkIHdpZHRocyBhcmUgYXZhaWxhYmxlIGFuZCByZXN0b3JpbmdcclxuICAgKiB3aWR0aCBpcyBlbmFibGVkLiBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGZpcnN0IG9uZSBiZWNhdXNlIHdlIG9ubHkgaGF2ZSBvbmUgd2lkdGhcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVzdG9yZVdpZHRocyh3aWR0aHM6IG51bWJlcltdKXtcclxuICAgIHRoaXMuc2V0V2lkdGgod2lkdGhzWzBdKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,83 @@
1
+ import { Component, Input, HostBinding, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { MenuComponent } from '../../controls/menu/menu.component';
3
+ import { HierarchyItem } from '../hierarchy/hierarchy-base';
4
+ import { HierarchyTreeComponent } from '../hierarchy/hierarchy-tree/hierarchy-tree.component';
5
+ import { Overlay } from '../view-overlay/view-overlay.component';
6
+ export class TreeComponent {
7
+ constructor() {
8
+ /** The value of the host elements id attribute */
9
+ this.attrId = '';
10
+ this._id = '';
11
+ /** The tree's title displayed in the header */
12
+ this.treeTitle = '';
13
+ /** Tree overlay */
14
+ this.status = new Overlay('hasData');
15
+ /** Display the tree items with a MenuComponent or a HierarchyTreeComponent */
16
+ this.type = 'hierarchy';
17
+ /** Tree dropdown menu overlay */
18
+ this.menuStatus = new Overlay('hasData');
19
+ /** The menu item template */
20
+ this.menuTemplateType = "checkAndLabel";
21
+ /** Emits the item currently selected item in the tree */
22
+ this.treeSelection = new EventEmitter();
23
+ /** Emits when a hierarchy tree item is expanded as a hook to load the item's children */
24
+ this.getTreeItemChildren = new EventEmitter();
25
+ this.templateType = 'label';
26
+ }
27
+ /**
28
+ * The ID of the component, bound to the host element's id attribute and passed
29
+ * to child components
30
+ */
31
+ set id(value) {
32
+ this._id = value;
33
+ this.attrId = value;
34
+ }
35
+ ;
36
+ get id() {
37
+ return this._id;
38
+ }
39
+ /** Emits when a tree item is selected */
40
+ onItemSelected(item) {
41
+ this.treeSelection.emit(item);
42
+ }
43
+ /** Emits when a hierarchy tree item is expanded to load the item's children */
44
+ onHierarchyGetItemChildren(item) {
45
+ this.getTreeItemChildren.emit(item);
46
+ }
47
+ /** Scroll to the tree item that is currently selected. */
48
+ scrollToSelectedItem() {
49
+ if (this.menuComponent) {
50
+ this.menuComponent.scrollToSelectedItem();
51
+ }
52
+ if (this.hierarchyTreeComponent) {
53
+ this.hierarchyTreeComponent.scrollToSelectedItem();
54
+ }
55
+ }
56
+ }
57
+ TreeComponent.decorators = [
58
+ { type: Component, args: [{
59
+ selector: 'ec-tree',
60
+ template: "<header class=\"flex-shrink d-flex align-items-center border-bottom bg-content\">\r\n <h2 id=\"{{id}}_title\"\r\n class=\"flex-grow m-0 mx-2 text-heading-1\">{{treeTitle | translate}}</h2>\r\n <ec-dropdown *ngIf=\"menuItems?.length\"\r\n id=\"{{id}}_dropdown\"\r\n class=\"flex-shrink fill\"\r\n icon=\"icon-menu\"\r\n [menuTemplateType]=\"menuTemplateType\"\r\n menuPosition=\"left\"\r\n [status]=\"menuStatus\"\r\n [popupFixed]=\"true\"\r\n [showArrow]=\"false\"\r\n [menuMinWidth]=\"240\"\r\n [items]=\"menuItems\">\r\n </ec-dropdown>\r\n</header>\r\n\r\n<div class=\"flex-grow d-flex\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [displayAsMask]=\"true\">\r\n <ng-container *ngIf=\"type === 'menu'\">\r\n <ec-menu [id]=\"id\"\r\n [items]=\"treeItems\"\r\n [templateType]=\"templateType\"\r\n (selectedChanged)=\"onItemSelected($event)\"\r\n class=\"flex-grow\">\r\n </ec-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"type === 'hierarchy'\">\r\n <ec-hierarchy-tree [id]=\"id\"\r\n [rootNode]=\"treeHierarchy\"\r\n [hideRootNode]=\"treeHierarchyHideRootNode\"\r\n (getItemChildren)=\"onHierarchyGetItemChildren($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n class=\"flex-grow d-flex\">\r\n </ec-hierarchy-tree>\r\n </ng-container>\r\n</div>",
61
+ styles: [":host{display:flex;flex-direction:column}header{height:3rem}ec-dropdown.fill{height:3rem;width:3rem}"]
62
+ },] }
63
+ ];
64
+ TreeComponent.ctorParameters = () => [];
65
+ TreeComponent.propDecorators = {
66
+ attrId: [{ type: HostBinding, args: ['attr.id',] }],
67
+ id: [{ type: Input }],
68
+ treeTitle: [{ type: Input }],
69
+ treeItems: [{ type: Input }],
70
+ treeHierarchyHideRootNode: [{ type: Input }],
71
+ treeHierarchy: [{ type: Input }],
72
+ status: [{ type: Input }],
73
+ type: [{ type: Input }],
74
+ menuItems: [{ type: Input }],
75
+ menuStatus: [{ type: Input }],
76
+ menuTemplateType: [{ type: Input }],
77
+ treeSelection: [{ type: Output }],
78
+ getTreeItemChildren: [{ type: Output }],
79
+ menuComponent: [{ type: ViewChild, args: [MenuComponent,] }],
80
+ hierarchyTreeComponent: [{ type: ViewChild, args: [HierarchyTreeComponent,] }],
81
+ templateType: [{ type: Input }]
82
+ };
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90cmVlL3RyZWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUE4QixNQUFNLG9DQUFvQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFTakUsTUFBTSxPQUFPLGFBQWE7SUE0RHhCO1FBMURBLGtEQUFrRDtRQUNuQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBYzNDLFFBQUcsR0FBVyxFQUFFLENBQUM7UUFFekIsK0NBQStDO1FBQy9CLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFXdkMsbUJBQW1CO1FBQ0gsV0FBTSxHQUFhLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFELDhFQUE4RTtRQUM5RCxTQUFJLEdBQWMsV0FBVyxDQUFDO1FBSzlDLGlDQUFpQztRQUNqQixlQUFVLEdBQWEsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUQsNkJBQTZCO1FBQ2IscUJBQWdCLEdBQXNCLGVBQWUsQ0FBQztRQUV0RSx5REFBeUQ7UUFDeEMsa0JBQWEsR0FBMkMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU1Rix5RkFBeUY7UUFDeEUsd0JBQW1CLEdBQWdDLElBQUksWUFBWSxFQUFFLENBQUM7UUFRdkUsaUJBQVksR0FBcUIsT0FBTyxDQUFDO0lBRXpDLENBQUM7SUF2RGpCOzs7T0FHRztJQUNILElBQ1csRUFBRSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFXLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQThDRCx5Q0FBeUM7SUFDbEMsY0FBYyxDQUFDLElBQThCO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCwrRUFBK0U7SUFDeEUsMEJBQTBCLENBQUMsSUFBbUI7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsMERBQTBEO0lBQ25ELG9CQUFvQjtRQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzNDO1FBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDcEQ7SUFDSCxDQUFDOzs7WUF0RkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxTQUFTO2dCQUNuQixpbERBQW9DOzthQUVyQzs7OztxQkFJRSxXQUFXLFNBQUMsU0FBUztpQkFNckIsS0FBSzt3QkFXTCxLQUFLO3dCQUdMLEtBQUs7d0NBR0wsS0FBSzs0QkFHTCxLQUFLO3FCQUdMLEtBQUs7bUJBR0wsS0FBSzt3QkFHTCxLQUFLO3lCQUdMLEtBQUs7K0JBR0wsS0FBSzs0QkFHTCxNQUFNO2tDQUdOLE1BQU07NEJBR04sU0FBUyxTQUFDLGFBQWE7cUNBR3ZCLFNBQVMsU0FBQyxzQkFBc0I7MkJBRWhDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZywgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50LCBNZW51SXRlbSwgTWVudVRlbXBsYXRlVHlwZSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIaWVyYXJjaHlJdGVtIH0gZnJvbSAnLi4vaGllcmFyY2h5L2hpZXJhcmNoeS1iYXNlJztcclxuaW1wb3J0IHsgSGllcmFyY2h5VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL2hpZXJhcmNoeS9oaWVyYXJjaHktdHJlZS9oaWVyYXJjaHktdHJlZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlZVR5cGUgPSAnaGllcmFyY2h5JyB8ICdtZW51JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtdHJlZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RyZWUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudCB7XHJcblxyXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIGhvc3QgZWxlbWVudHMgaWQgYXR0cmlidXRlICovXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgcHVibGljIGF0dHJJZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBJRCBvZiB0aGUgY29tcG9uZW50LCBib3VuZCB0byB0aGUgaG9zdCBlbGVtZW50J3MgaWQgYXR0cmlidXRlIGFuZCBwYXNzZWRcclxuICAgKiB0byBjaGlsZCBjb21wb25lbnRzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgICB0aGlzLmF0dHJJZCA9IHZhbHVlO1xyXG4gIH07XHJcbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuICBwcml2YXRlIF9pZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBUaGUgdHJlZSdzIHRpdGxlIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyICovXHJcbiAgQElucHV0KCkgcHVibGljIHRyZWVUaXRsZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBJdGVtcyB0byBkaXNwbGF5IGluIHRoZSB0cmVlIHdoZW4gdHlwZSBpcyAnbWVudScgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZUl0ZW1zPzogTWVudUl0ZW1bXTtcclxuXHJcbiAgLyoqIEhpZGUgdGhlIHJvb3QgdHJlZSBpdGVtIHdoZW4gdHlwZSBpcyAnaGllcmFyY2h5JyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0cmVlSGllcmFyY2h5SGlkZVJvb3ROb2RlPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIEl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIHRyZWUgd2hlbiB0eXBlIGlzICdoaWVyYXJjaHknICovXHJcbiAgQElucHV0KCkgcHVibGljIHRyZWVIaWVyYXJjaHk/OiBIaWVyYXJjaHlJdGVtO1xyXG5cclxuICAvKiogVHJlZSBvdmVybGF5ICovXHJcbiAgQElucHV0KCkgcHVibGljIHN0YXR1cz86IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgnaGFzRGF0YScpO1xyXG5cclxuICAvKiogRGlzcGxheSB0aGUgdHJlZSBpdGVtcyB3aXRoIGEgTWVudUNvbXBvbmVudCBvciBhIEhpZXJhcmNoeVRyZWVDb21wb25lbnQgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHlwZT86IFRyZWVUeXBlID0gJ2hpZXJhcmNoeSc7XHJcblxyXG4gIC8qKiBJdGVtcyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biBtZW51ICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVJdGVtcz86IE1lbnVJdGVtW107XHJcblxyXG4gIC8qKiBUcmVlIGRyb3Bkb3duIG1lbnUgb3ZlcmxheSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51U3RhdHVzPzogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdoYXNEYXRhJyk7XHJcblxyXG4gIC8qKiBUaGUgbWVudSBpdGVtIHRlbXBsYXRlICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVUZW1wbGF0ZVR5cGU/OiBNZW51VGVtcGxhdGVUeXBlID0gXCJjaGVja0FuZExhYmVsXCI7XHJcblxyXG4gIC8qKiBFbWl0cyB0aGUgaXRlbSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgdHJlZSAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgdHJlZVNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPE1lbnVJdGVtIHwgSGllcmFyY2h5SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIGEgaGllcmFyY2h5IHRyZWUgaXRlbSBpcyBleHBhbmRlZCBhcyBhIGhvb2sgdG8gbG9hZCB0aGUgaXRlbSdzIGNoaWxkcmVuICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUcmVlSXRlbUNoaWxkcmVuOiBFdmVudEVtaXR0ZXI8SGllcmFyY2h5SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIE1lbnVDb21wb25lbnQgaW5zdGFuY2UgaW4gdGhlIHRlbXBsYXRlICovXHJcbiAgQFZpZXdDaGlsZChNZW51Q29tcG9uZW50KSBwdWJsaWMgbWVudUNvbXBvbmVudD86IE1lbnVDb21wb25lbnQ7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIEhpZXJhcmNoeVRyZWVDb21wb25lbnQgaW5zdGFuY2UgaW4gdGhlIHRlbXBsYXRlICovXHJcbiAgQFZpZXdDaGlsZChIaWVyYXJjaHlUcmVlQ29tcG9uZW50KSBwdWJsaWMgaGllcmFyY2h5VHJlZUNvbXBvbmVudD86IEhpZXJhcmNoeVRyZWVDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyB0ZW1wbGF0ZVR5cGU6IE1lbnVUZW1wbGF0ZVR5cGUgPSAnbGFiZWwnO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAvKiogRW1pdHMgd2hlbiBhIHRyZWUgaXRlbSBpcyBzZWxlY3RlZCAqL1xyXG4gIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZChpdGVtOiBNZW51SXRlbSB8IEhpZXJhcmNoeUl0ZW0pIHtcclxuICAgIHRoaXMudHJlZVNlbGVjdGlvbi5lbWl0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gYSBoaWVyYXJjaHkgdHJlZSBpdGVtIGlzIGV4cGFuZGVkIHRvIGxvYWQgdGhlIGl0ZW0ncyBjaGlsZHJlbiAqL1xyXG4gIHB1YmxpYyBvbkhpZXJhcmNoeUdldEl0ZW1DaGlsZHJlbihpdGVtOiBIaWVyYXJjaHlJdGVtKSB7XHJcbiAgICB0aGlzLmdldFRyZWVJdGVtQ2hpbGRyZW4uZW1pdChpdGVtKTtcclxuICB9XHJcblxyXG4gIC8qKiBTY3JvbGwgdG8gdGhlIHRyZWUgaXRlbSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cclxuICBwdWJsaWMgc2Nyb2xsVG9TZWxlY3RlZEl0ZW0oKSB7XHJcbiAgICBpZiAodGhpcy5tZW51Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMubWVudUNvbXBvbmVudC5zY3JvbGxUb1NlbGVjdGVkSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhpZXJhcmNoeVRyZWVDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5oaWVyYXJjaHlUcmVlQ29tcG9uZW50LnNjcm9sbFRvU2VsZWN0ZWRJdGVtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -9,6 +9,7 @@ import { ErrorService } from '../../../core/error.service';
9
9
  import { ScrollService } from '../../../core/scroll.service';
10
10
  import { DialogService } from '../../../display/dialog/dialog.service';
11
11
  import { Overlay } from '../../../display/view-overlay/view-overlay.component';
12
+ import { PageStatus, PageStatuses } from '../page-statuses';
12
13
  export class PageInitResult {
13
14
  constructor() {
14
15
  this.title = '';
@@ -63,11 +64,17 @@ export class PageBaseComponent {
63
64
  get errors() {
64
65
  return this._errors;
65
66
  }
67
+ /**
68
+ * Optional lifecycle hook that is called as part of the Angular ngOnInit lifecycle hook.
69
+ * Called before onInit is called for the first time. Add setup logic here that does
70
+ * not need to be run on every reload.
71
+ */
72
+ onFirstInit() { }
66
73
  ngOnInit() {
67
- var _a;
68
74
  return __awaiter(this, void 0, void 0, function* () {
69
75
  try {
70
- (_a = this.status) === null || _a === void 0 ? void 0 : _a.setStatus('pending', 'Loading');
76
+ this.showStatus(PageStatus.Loading);
77
+ this.onFirstInit();
71
78
  this.initPromise = this.onInit();
72
79
  yield this.initPromise;
73
80
  }
@@ -89,7 +96,6 @@ export class PageBaseComponent {
89
96
  }
90
97
  ;
91
98
  ngAfterViewInit() {
92
- var _a;
93
99
  return __awaiter(this, void 0, void 0, function* () {
94
100
  try {
95
101
  const initResult = yield this.initPromise;
@@ -97,8 +103,9 @@ export class PageBaseComponent {
97
103
  yield this.onAfterViewInit();
98
104
  this._afterViewInitComplete.next();
99
105
  this._afterViewInitComplete.complete();
100
- if (((_a = this.status) === null || _a === void 0 ? void 0 : _a.status) === 'pending') {
101
- this.status.setStatus('hasData');
106
+ yield this.onFormLoadComplete();
107
+ if (this.status.status === 'pending') {
108
+ this.showStatus(PageStatus.Loaded);
102
109
  }
103
110
  this.setUpRouterSubscriptions();
104
111
  }
@@ -107,6 +114,18 @@ export class PageBaseComponent {
107
114
  }
108
115
  });
109
116
  }
117
+ /**
118
+ * A lifecycle method that executes once all data has been loaded
119
+ * through ngAfterViewInit and from local storage if required.
120
+ * It is at this point that you can subscribe to changes on the form
121
+ * reliably
122
+ *
123
+ * @protected
124
+ * @memberof PageBaseComponent
125
+ */
126
+ onFormLoadComplete() {
127
+ return __awaiter(this, void 0, void 0, function* () { });
128
+ }
110
129
  /**
111
130
  * A lifecycle hook that is called after every NavigationEnd event.
112
131
  */
@@ -154,11 +173,10 @@ export class PageBaseComponent {
154
173
  * @param event
155
174
  */
156
175
  onSave(event) {
157
- var _a;
158
176
  return __awaiter(this, void 0, void 0, function* () {
159
177
  this.formGroup.markAllAsTouched();
160
178
  if (this.formGroup.valid) {
161
- (_a = this.status) === null || _a === void 0 ? void 0 : _a.setStatus('pending', 'Saving');
179
+ this.showStatus(PageStatus.Saving);
162
180
  try {
163
181
  yield this.applyModelUpdates();
164
182
  let entityId = (yield this.saveToApi()) || -1;
@@ -208,8 +226,7 @@ export class PageBaseComponent {
208
226
  */
209
227
  showErrorOverlay(error) {
210
228
  this.getErrorMessage(error).subscribe((translatedMessage) => {
211
- var _a;
212
- (_a = this.status) === null || _a === void 0 ? void 0 : _a.setStatus('error', translatedMessage);
229
+ this.status.setStatus('error', translatedMessage);
213
230
  });
214
231
  }
215
232
  /**
@@ -222,9 +239,8 @@ export class PageBaseComponent {
222
239
  */
223
240
  showErrorBanner(error, unknownErrorDefault) {
224
241
  this.getErrorMessage(error, unknownErrorDefault).subscribe((translatedMessage) => {
225
- var _a;
226
242
  this._errors = translatedMessage;
227
- (_a = this.status) === null || _a === void 0 ? void 0 : _a.setStatus('hasData');
243
+ this.showStatus(PageStatus.Loaded);
228
244
  });
229
245
  }
230
246
  /**
@@ -236,6 +252,46 @@ export class PageBaseComponent {
236
252
  let extractedMessage = this.errorService.parseApiError(e, unknownErrorDefault);
237
253
  return this.translateService.get(extractedMessage);
238
254
  }
255
+ /**
256
+ * Clear the errors to hide the errors banner.
257
+ */
258
+ hideErrorBanner() {
259
+ this._errors = '';
260
+ }
261
+ /**
262
+ * Change the display status to overlay the whole page while loading or saving
263
+ * and clear it when the form is ready
264
+ * @protected
265
+ * @param {PageStatus} status
266
+ * @memberof FormBaseComponent
267
+ */
268
+ showStatus(status) {
269
+ let knownStatus = PageStatuses[status];
270
+ if (knownStatus) {
271
+ this.status.setStatus(knownStatus.status, knownStatus.message, undefined, knownStatus.noDataTemplate, knownStatus.overlayClassList);
272
+ }
273
+ }
274
+ /**
275
+ * Allows the component to enter a pending status and execute a function that on completion will return the status
276
+ * to hasData. If an error occurs within the callback an error banner can be shown.
277
+ * @param callback
278
+ * @returns
279
+ */
280
+ runBlockingAction(callback, pendingMessage) {
281
+ return __awaiter(this, void 0, void 0, function* () {
282
+ this.hideErrorBanner();
283
+ this.status.setStatus('pending', pendingMessage);
284
+ return callback().catch(error => {
285
+ this.showErrorBanner(error);
286
+ // Throw the error for any downstream components that may be listening and need to react
287
+ // to any errors happening within this callback
288
+ throw (error);
289
+ }).finally(() => {
290
+ this.showStatus(PageStatus.Loaded);
291
+ });
292
+ });
293
+ }
294
+ ;
239
295
  /**
240
296
  * Parses the page init result and sets the necessary properties on the page
241
297
  * @param result
@@ -244,6 +300,7 @@ export class PageBaseComponent {
244
300
  this.initResult = result;
245
301
  this.title = result.title;
246
302
  this.breadcrumbs = result.breadcrumbs;
303
+ this.help = result.help;
247
304
  }
248
305
  /**
249
306
  * Sets up the router event subscriptions
@@ -271,4 +328,4 @@ PageBaseComponent.ctorParameters = () => [
271
328
  PageBaseComponent.propDecorators = {
272
329
  classList: [{ type: HostBinding, args: ['class',] }]
273
330
  };
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLWJhc2UvcGFnZS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUUvRSxNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUNFLFVBQUssR0FBWSxFQUFFLENBQUM7SUFFdEIsQ0FBQztDQUFBO0FBR0QsTUFBTSxPQUFnQixpQkFBaUI7SUF5RXJDLFlBQVksUUFBa0I7UUF4RTlCLGtEQUFrRDtRQUNsQixjQUFTLEdBQUcsa0JBQWtCLENBQUM7UUFFL0Q7O1dBRUc7UUFDSSxVQUFLLEdBQVksRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ0ksV0FBTSxHQUFhLElB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Z0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlLENBQUMsTUFBc0I7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzdELDZCQUE2QjtZQUM3QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0RCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksYUFBYSxDQUFDLENBQ3hDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUk7b0JBQ0YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUN4QjtnQkFBQyxPQUFPLEtBQUssRUFBRTtvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7WUExU0YsU0FBUzs7O1lBakJzQyxRQUFROzs7d0JBb0JyRCxXQUFXLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlSW5pdFJlc3VsdCB7XHJcbiAgdGl0bGU/OiBzdHJpbmcgPSAnJztcclxuICBicmVhZGNydW1icz86IE5hdkl0ZW1bXVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBhZ2VCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKiBEZWZhdWx0IGNzcyBjbGFzc2VzIGFwcGxpZWQgdG8gaG9zdCBlbGVtZW50ICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHByb3RlY3RlZCBjbGFzc0xpc3QgPSAnZC1mbGV4IGZsZXgtZ3Jvdyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRpdGxlIGZvciB0aGUgcGFnZSBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlclxyXG4gICAqL1xyXG4gIHB1YmxpYyB0aXRsZT86IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTdGF0dXMgb3ZlcmxheSBmb3IgdGhlIHBhZ2VcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdHVzPzogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQnJlYWRjcnVtYnMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgYnJlYWRjcnVtYnM/OiBOYXZJdGVtW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VsdCByZXR1cm5lZCBmcm9tIHRoZSBvbkluaXQgZnVuY3Rpb25cclxuICAgKi9cclxuICBwdWJsaWMgaW5pdFJlc3VsdCE6IFBhZ2VJbml0UmVzdWx0O1xyXG5cclxuICAvKipcclxuICAgKiBGb3JtIGdyb3VwIHRvIGJlIHVzZWQgaWYgbmVlZGVkIGJ5IHRoZSBwYWdlXHJcbiAgICovXHJcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgaW52YWxpZCBmb3JtIG1lc3NhZ2UsIG92ZXJyaWRlIGlmIGEgbW9yZSBzcGVjaWZpYyBtZXNzYWdlIGlzIG5lZWRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWZhdWx0SW52YWxpZEZvcm1NZXNzYWdlOiBzdHJpbmcgPSAnUGxlYXNlQ29ycmVjdEZvcm1fU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IHVua25vd24gc2F2ZSBlcnJvciBtZXNzYWdlLCBvdmVycmlkZSBpZiBhIG1vcmUgc3BlY2lmaWMgbWVzc2FnZSBpcyBuZWVkZWRcclxuICAgKi9cclxuICBwdWJsaWMgZGVmYXVsdFVua25vd25TYXZlRXJyb3I6IHN0cmluZyA9ICdQYWdlQmFzZVVua25vd25TYXZlRXJyb3JfU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIHVuc3Vic2NyaWJlIGZyb20gb2JzZXJ2YWJsZXNcclxuICAgKi9cclxuICBwdWJsaWMgZGVzdHJveWVkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8ga25vdyB3aGVuIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCwgdGhpcyB3aWxsIGJlIGNvbXBsZXRlZFxyXG4gICAqIGFmdGVyIG9uQWZ0ZXJWaWV3SW5pdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2FmdGVyVmlld0luaXRDb21wbGV0ZTogUmVwbGF5U3ViamVjdDx2b2lkPiA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XHJcbiAgcHVibGljIGFmdGVyVmlld0luaXRDb21wbGV0ZTogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZGVmaW5lZCB0aGUgZm9ybSB3aWxsIGF1dG9tYXRpY2FsbHkgc2Nyb2xsIHRvIHRoZSBmaXJzdCBpbnZhbGlkIGZvcm0gY29udHJvbFxyXG4gICAqIGlmIGl0J3Mgb3V0c2lkZSBvZiB0aGUgdmlld1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzY3JvbGxDb250YWluZXJTZWxlY3Rvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIHJvdXRlciBldmVudHMgTmF2aWdhdGlvbkVuZFxyXG4gICAqIFVzZWQgdG8ga25vdyBpZiBhbHJlYWR5IHN1YnNjcmliZWQgdG9cclxuICAgKi9cclxuICBwcml2YXRlIG5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbW1vbiBzZXJ2aWNlcyB1c2VkIGJ5IHBhZ2UtYmFzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBlcnJvclNlcnZpY2U6IEVycm9yU2VydmljZTtcclxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcclxuICBwcm90ZWN0ZWQgc2Nyb2xsU2VydmljZTogU2Nyb2xsU2VydmljZTtcclxuICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXI7XHJcbiAgcHJvdGVjdGVkIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcclxuICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLmVycm9yU2VydmljZSA9IGluamVjdG9yLmdldChFcnJvclNlcnZpY2UpO1xyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgdGhpcy5zY3JvbGxTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNjcm9sbFNlcnZpY2UpO1xyXG4gICAgdGhpcy5yb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUgPSBpbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KERpYWxvZ1NlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXJyb3JzIHRvIGJlIHNob3duIGZvciB0aGUgY29tcG9uZW50LlxyXG4gICAqIEF1dG9tYXRpY2FsbHkgcG9wdWxhdGVkIG9uIHByb21pc2UgcmVqZWN0aW9uIGZyb20gc2F2ZSBhbmQgc2hhcmVkIHdpdGggdGhlIFVJLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Vycm9yczogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGdldCBlcnJvcnMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gdGhlIGRlcml2ZWQgY2xhc3MgYXMgcGFydCBvZiB0aGUgQW5ndWxhciBuZ09uSW5pdFxyXG4gICAqIGxpZmVjeWNsZSBob29rLiBJdCBtdXN0IHByb3ZpZGUgYSBQYWdlSW5pdFJlc3VsdCBiYWNrIHRvIHRoZSBiYXNlIGNsYXNzIHRvIHByb3Blcmx5XHJcbiAgICogc2V0IHVwIHRoZSBwYWdlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvbkluaXQoKTogUHJvbWlzZTxQYWdlSW5pdFJlc3VsdD47XHJcbiAgcHJvdGVjdGVkIGluaXRQcm9taXNlITogUHJvbWlzZTxQYWdlSW5pdFJlc3VsdD47XHJcblxyXG4gIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzPy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpO1xyXG4gICAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5vbkluaXQoKTtcclxuICAgICAgYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIEFuZ3VsYXIgTGlmZWN5Y2xlIGV2ZW50IG5nT25BZnRlclZpZXdJbml0LlxyXG4gICAqIEl0IGZpcmVzIGFmdGVyIGFsbCBzdWItY29tcG9uZW50cyBoYXZlIGdvbmUgdGhyb3VnaCB0aGVpciBpbml0aWFsaXphdGlvbiBwaGFzZS5cclxuICAgKiBJdCBpcyBpbiB0aGlzIHBoYXNlIHRoYXQgdGhlIHZpZXcgY29tcG9uZW50cyBzaG91bGQgYWxyZWFkeSBleGlzdCwgc28gYSBkZXJpdmVkIGNsYXNzIHNob3VsZFxyXG4gICAqIGxvYWQgZGF0YSBmcm9tIHRoZSBBUEkgdG8gcG9wdWxhdGUgYW55IHZpZXcgY29tcG9uZW50cy4gVGhlIHByb21pc2UgdGhhdFxyXG4gICAqIGlzIHJldHVybmVkIG11c3Qgbm90IHJlc29sdmUgdW50aWwgYWxsIHJlcXVpcmVkIGRhdGEgaGFzIGNvbXBsZXRlbHkgbG9hZGVkXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFzeW5jIG9uQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHsgfTtcclxuICBwdWJsaWMgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IHRoaXMuaW5pdFByb21pc2U7XHJcbiAgICAgIHRoaXMucGFyc2VJbml0UmVzdWx0KGluaXRSZXN1bHQpO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyVmlld0luaXQoKTtcclxuXHJcbiAgICAgIHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZS5uZXh0KCk7XHJcbiAgICAgIHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZS5jb21wbGV0ZSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdHVzPy5zdGF0dXMgPT09ICdwZW5kaW5nJykge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygnaGFzRGF0YScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNldFVwUm91dGVyU3Vic2NyaXB0aW9ucygpO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGxpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGV2ZXJ5IE5hdmlnYXRpb25FbmQgZXZlbnQuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uTmF2aWdhdGlvbkVuZCgpOiB2b2lkIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWxvYWQgdGhlIGNvbXBvbmVudCBraWNraW5nIG9mZiB0aGUgbmdPbkluaXQgYW5kIG5nQWZ0ZXJWaWV3SW5pdCBsaWZlY3ljbGUgaG9va3MuXHJcbiAgICogQW55IHN0YXRlIHRoYXQgbmVlZHMgdG8gYmUgcmVzZXQgc2hvdWxkIGJlIGRvbmUgc28gYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZSA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XHJcblxyXG4gICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5uZ0FmdGVyVmlld0luaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gb3ZlcnJpZGRlbiBpbiBhIGRlcml2ZWQgY2xhc3MgdGhpcyBtZXRob2Qgd2lsbCBzeW5jIHRoZSBmb3JtIHN0YXRlXHJcbiAgICogaW50byB0aGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS4gVGhlIHZhbHVlIHNob3VsZCBub3RcclxuICAgKiBhY3R1YWxseSBiZSBzZW50IHRvIHRoZSBBUEkgeWV0LlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBhcHBseU1vZGVsVXBkYXRlcygpOiBQcm9taXNlPHZvaWQ+IHsgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSB0aGUgbW9kZWwgc3RhdGUgdG8gdGhlIEFQSSBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0aGF0XHJcbiAgICogY29udGFpbnMgdGhlIHVwZGF0ZWQgZW50aXR5SUQuIFRoZSBwcm9taXNlIHNob3VsZCBiZSByZWplY3RlZFxyXG4gICAqIGlmIHRoZSBzYXZlIGZhaWxzIGFuZCBlcnJvcnMgYW5kIHRoZSBvdmVybGF5IHN0YXR1cyB3aWxsIGJlIHVwZGF0ZWRcclxuICAgKiBhY2NvcmRpbmdseVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlVG9BcGkoKTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCBhZnRlciB0aGUgc2F2ZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cclxuICAgKiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGRlcml2ZWQgY2xhc3MgdG8gbmF2aWdhdGVcclxuICAgKiB0byBhIHByb3BlcnRpZXMvc3RhdHVzIHBhZ2Ugb3IgZW1pdCBhcHByb3ByaWF0ZWx5IGlmIHdpdGhpbiBhIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBlbnRpdHlJZCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25TYXZlQ29tcGxldGUoZW50aXR5SWQ/OiBudW1iZXIpOiB2b2lkIHsgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHNhdmUuICBXZSB3aWxsIGZpcnN0IHRvdWNoIGFsbCBjb250cm9scyB0byBzaG93IHZhbGlkYXRpb24gbWVzc2FnZXNcclxuICAgKiBpZiB0aGUgZm9ybSBpcyBpbnZhbGlkLiAgSWYgdGhlIGZvcm0gaXMgdmFsaWQgd2Ugd2lsbCBhdHRlbXB0IHRvIHNhdmUgYW5kIGFueSBlcnJvcnMgd2lsbCBiZSByZXBvcnRlZFxyXG4gICAqIGJhY2sgdG8gdGhlIHVzZXJcclxuICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIG9uU2F2ZShldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgdGhpcy5zdGF0dXM/LnNldFN0YXR1cygncGVuZGluZycsICdTYXZpbmcnKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBseU1vZGVsVXBkYXRlcygpO1xyXG4gICAgICAgIGxldCBlbnRpdHlJZCA9IGF3YWl0IHRoaXMuc2F2ZVRvQXBpKCkgfHwgLTE7XHJcblxyXG4gICAgICAgIHRoaXMuX2Vycm9ycyA9ICcnO1xyXG5cclxuICAgICAgICB0aGlzLm9uU2F2ZUNvbXBsZXRlKGVudGl0eUlkKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAvL2NsZWFyIHRoZSBcInNhdmluZ1wiIG92ZXJsYXkgYW5kIHNob3cgdGhlIG1lc3NhZ2UgYXQgdGhlIHRvcCBvZiB0aGUgdmlldyB0aHJvdWdoIHRoZSBlcnJvcnMgcHJvcGVydHlcclxuICAgICAgICB0aGlzLnNob3dFcnJvckJhbm5lcihlcnJvciwgdGhpcy5kZWZhdWx0VW5rbm93blNhdmVFcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9ubHkgc2hvdyB0aGUgYmFubmVyIHdpdGggdGhlIGdlbmVyaWMgbWVzc2FnZSBpZiB0aGUgcGFyZW50IGNvbXBvbmVudCBoYXNuJ3QgYWxyZWFkeSBzZXQgb25lXHJcbiAgICAgIC8vIGJ5IGltcGxlbWVudGluZyBvblNhdmUgZm9yIGFkZGl0aW9uYWwgdmFsaWRhdGlvblxyXG4gICAgICBpZiAodGhpcy5lcnJvcnMgPT09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RXJyb3JCYW5uZXIodGhpcy5kZWZhdWx0SW52YWxpZEZvcm1NZXNzYWdlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxUb0l0ZW0odGhpcy5zY3JvbGxDb250YWluZXJTZWxlY3RvciEsIFwiLm5nLWludmFsaWRcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRoYXQgd2lsbCBsb2cgYW4gZXJyb3IgdGhhdCBpcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnNvbGVcclxuICAgKiBAcGFyYW0gZSBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25FcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcclxuICAgIHRoaXMuZXJyb3JTZXJ2aWNlLmxvZ0NvbnNvbGVFcnJvcihlcnJvcik7XHJcbiAgICB0aGlzLnNob3dFcnJvck92ZXJsYXkoZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBlcnJvciBtZXNzYWdlIGluIGEgd2hvbGUtcGFnZSBvdmVybGF5LiBUaGlzIHdpbGwgcHJldmVudCBhbnkgbW9yZVxyXG4gICAqIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlLiBJdCBjYW4gdGFrZSBhIHN0cmluZyBlcnJvciBtZXNzYWdlIG9yIGEgcmF3IEFQSVxyXG4gICAqIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLiBJZiB0aGUgQVBJIGVycm9yIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlXHJcbiAgICogYSBnZW5lcmljIG1lc3NhZ2UgaXMgc2hvd24gaW5zdGVhZFxyXG4gICAqIEBwYXJhbSB7KEVycm9yIHwgc3RyaW5nKX0gZXJyb3JcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yT3ZlcmxheShlcnJvcjogRXJyb3IgfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKS5zdWJzY3JpYmUoKHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zdGF0dXM/LnNldFN0YXR1cygnZXJyb3InLCB0cmFuc2xhdGVkTWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYW4gZXJyb3IgaW4gdGhlIGJhbm5lciBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uICBUaGlzIHdpbGwgbm90IHByb2R1Y2UgYVxyXG4gICAqIHdob2xlLXBhZ2Ugb3ZlcmxheSBsaWtlIHRoZSBmdW5jdGlvbiBzaG93RXJyb3Igd2lsbC4gIEl0IGNhbiB0YWtlIGEgc3RyaW5nIGVycm9yIG1lc3NhZ2VcclxuICAgKiBvciByYXcgQVBJIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLiAgSWYgdGhlIEFQSSBlcnJvciBpc24ndCBzb21ldGhpbmcgd2UgY2FuIGhhbmRsZSxcclxuICAgKiBhIGdlbmVyaWMgbWVzc2FnZSAoY3VzdG9taXphYmxlIHZpYSB1bmtub3duRXJyb3JEZWZhdWx0KSBpcyBzaG93biBpbnN0ZWFkLlxyXG4gICAqIEBwYXJhbSBlcnJvciBcclxuICAgKiBAcGFyYW0gdW5rbm93bkVycm9yRGVmYXVsdCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yQmFubmVyKGVycm9yOiBFcnJvciB8IHN0cmluZywgdW5rbm93bkVycm9yRGVmYXVsdD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IsIHVua25vd25FcnJvckRlZmF1bHQpLnN1YnNjcmliZSgodHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLl9lcnJvcnMgPSB0cmFuc2xhdGVkTWVzc2FnZTtcclxuICAgICAgdGhpcy5zdGF0dXM/LnNldFN0YXR1cygnaGFzRGF0YScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZXMgYW5kIHRyYW5zbGF0ZXMgYW4gQVBJIGVycm9yIG9yIGVycm9yIHN0cmluZy5cclxuICAgKiBAcGFyYW0gZSBcclxuICAgKiBAcGFyYW0gdW5rbm93bkVycm9yRGVmYXVsdCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0RXJyb3JNZXNzYWdlKGU6IEVycm9yIHwgc3RyaW5nLCB1bmtub3duRXJyb3JEZWZhdWx0Pzogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGxldCBleHRyYWN0ZWRNZXNzYWdlID0gdGhpcy5lcnJvclNlcnZpY2UucGFyc2VBcGlFcnJvcihlLCB1bmtub3duRXJyb3JEZWZhdWx0KTtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGV4dHJhY3RlZE1lc3NhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIHRoZSBwYWdlIGluaXQgcmVzdWx0IGFuZCBzZXRzIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllcyBvbiB0aGUgcGFnZVxyXG4gICAqIEBwYXJhbSByZXN1bHQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUluaXRSZXN1bHQocmVzdWx0OiBQYWdlSW5pdFJlc3VsdCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0UmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy50aXRsZSA9IHJlc3VsdC50aXRsZTtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSByZXN1bHQuYnJlYWRjcnVtYnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHVwIHRoZSByb3V0ZXIgZXZlbnQgc3Vic2NyaXB0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VXBSb3V0ZXJTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24gJiYgIXRoaXMuZGVzdHJveWVkLmNsb3NlZCkge1xyXG4gICAgICAvLyBSZWFjdCB0byBuYXZpZ2F0aW9uIGV2ZW50c1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxyXG4gICAgICAgIGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uRW5kKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLWJhc2UvcGFnZS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVELE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBQ0UsVUFBSyxHQUFZLEVBQUUsQ0FBQztJQUd0QixDQUFDO0NBQUE7QUFHRCxNQUFNLE9BQWdCLGlCQUFpQjtJQThFckMsWUFBWSxRQUFrQjtRQTdFOUIsa0RBQWtEO1FBQ2xCLGNBQVMsR0FBRyxrQkFBa0IsQ0FBQztRQUUvRDs7V0FFRztR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QyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFBQSxDQUFDO0lBRUY7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLE1BQXNCO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDN0QsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3RELFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxhQUFhLENBQUMsQ0FDeEMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSTtvQkFDRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7aUJBQ3hCO2dCQUFDLE9BQU8sS0FBSyxFQUFFO29CQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7OztZQTlXRixTQUFTOzs7WUFwQnNDLFFBQVE7Ozt3QkF1QnJELFdBQVcsU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSAnLi4vLi4vLi4vY29udHJvbHMvbmF2aWdhdGlvbi9uYXYtaXRlbSc7XHJcbmltcG9ydCB7IEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZXJyb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Njcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvaGVscC9oZWxwLXR5cGVzJztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdlU3RhdHVzLCBQYWdlU3RhdHVzZXMgfSBmcm9tICcuLi9wYWdlLXN0YXR1c2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlSW5pdFJlc3VsdCB7XHJcbiAgdGl0bGU/OiBzdHJpbmcgPSAnJztcclxuICBicmVhZGNydW1icz86IE5hdkl0ZW1bXTtcclxuICBoZWxwPzogSGVscDtcclxufVxyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWdlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAvKiogRGVmYXVsdCBjc3MgY2xhc3NlcyBhcHBsaWVkIHRvIGhvc3QgZWxlbWVudCAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBwcm90ZWN0ZWQgY2xhc3NMaXN0ID0gJ2QtZmxleCBmbGV4LWdyb3cnO1xyXG5cclxuICAvKipcclxuICAgKiBUaXRsZSBmb3IgdGhlIHBhZ2UgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgdGl0bGU/OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogU3RhdHVzIG92ZXJsYXkgZm9yIHRoZSBwYWdlXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXR1czogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQnJlYWRjcnVtYnMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgYnJlYWRjcnVtYnM/OiBOYXZJdGVtW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VsdCByZXR1cm5lZCBmcm9tIHRoZSBvbkluaXQgZnVuY3Rpb25cclxuICAgKi9cclxuICBwdWJsaWMgaW5pdFJlc3VsdCE6IFBhZ2VJbml0UmVzdWx0O1xyXG5cclxuICAvKipcclxuICAgKiBIZWxwIGluZm9ybWF0aW9uIGZvciB0aGUgY29tcG9uZW50LCB3aGljaCBjYW4gb25seSBiZSBzZXQgdGhyb3VnaCBvbkluaXRcclxuICAgKi9cclxuICBwdWJsaWMgaGVscDogSGVscCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybSBncm91cCB0byBiZSB1c2VkIGlmIG5lZWRlZCBieSB0aGUgcGFnZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IGludmFsaWQgZm9ybSBtZXNzYWdlLCBvdmVycmlkZSBpZiBhIG1vcmUgc3BlY2lmaWMgbWVzc2FnZSBpcyBuZWVkZWRcclxuICAgKi9cclxuICBwdWJsaWMgZGVmYXVsdEludmFsaWRGb3JtTWVzc2FnZTogc3RyaW5nID0gJ1BsZWFzZUNvcnJlY3RGb3JtX1NDJztcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmYXVsdCB1bmtub3duIHNhdmUgZXJyb3IgbWVzc2FnZSwgb3ZlcnJpZGUgaWYgYSBtb3JlIHNwZWNpZmljIG1lc3NhZ2UgaXMgbmVlZGVkXHJcbiAgICovXHJcbiAgcHVibGljIGRlZmF1bHRVbmtub3duU2F2ZUVycm9yOiBzdHJpbmcgPSAnUGFnZUJhc2VVbmtub3duU2F2ZUVycm9yX1NDJztcclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byB1bnN1YnNjcmliZSBmcm9tIG9ic2VydmFibGVzXHJcbiAgICovXHJcbiAgcHVibGljIGRlc3Ryb3llZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIGtub3cgd2hlbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQsIHRoaXMgd2lsbCBiZSBjb21wbGV0ZWRcclxuICAgKiBhZnRlciBvbkFmdGVyVmlld0luaXRcclxuICAgKi9cclxuICBwcml2YXRlIF9hZnRlclZpZXdJbml0Q29tcGxldGU6IFJlcGxheVN1YmplY3Q8dm9pZD4gPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xyXG4gIHB1YmxpYyBhZnRlclZpZXdJbml0Q29tcGxldGU6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9hZnRlclZpZXdJbml0Q29tcGxldGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRlZmluZWQgdGhlIGZvcm0gd2lsbCBhdXRvbWF0aWNhbGx5IHNjcm9sbCB0byB0aGUgZmlyc3QgaW52YWxpZCBmb3JtIGNvbnRyb2xcclxuICAgKiBpZiBpdCdzIG91dHNpZGUgb2YgdGhlIHZpZXdcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSByb3V0ZXIgZXZlbnRzIE5hdmlnYXRpb25FbmRcclxuICAgKiBVc2VkIHRvIGtub3cgaWYgYWxyZWFkeSBzdWJzY3JpYmVkIHRvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBDb21tb24gc2VydmljZXMgdXNlZCBieSBwYWdlLWJhc2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHNjcm9sbFNlcnZpY2U6IFNjcm9sbFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xyXG4gIHByb3RlY3RlZCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5lcnJvclNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRXJyb3JTZXJ2aWNlKTtcclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgIHRoaXMuc2Nyb2xsU2VydmljZSA9IGluamVjdG9yLmdldChTY3JvbGxTZXJ2aWNlKTtcclxuICAgIHRoaXMucm91dGVyID0gaW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IGluamVjdG9yLmdldChEaWFsb2dTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVycm9ycyB0byBiZSBzaG93biBmb3IgdGhlIGNvbXBvbmVudC5cclxuICAgKiBBdXRvbWF0aWNhbGx5IHBvcHVsYXRlZCBvbiBwcm9taXNlIHJlamVjdGlvbiBmcm9tIHNhdmUgYW5kIHNoYXJlZCB3aXRoIHRoZSBVSS5cclxuICAgKi9cclxuICBwcml2YXRlIF9lcnJvcnM6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBnZXQgZXJyb3JzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgbGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgQW5ndWxhciBuZ09uSW5pdCBsaWZlY3ljbGUgaG9vay5cclxuICAgKiBDYWxsZWQgYmVmb3JlIG9uSW5pdCBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLiBBZGQgc2V0dXAgbG9naWMgaGVyZSB0aGF0IGRvZXNcclxuICAgKiBub3QgbmVlZCB0byBiZSBydW4gb24gZXZlcnkgcmVsb2FkLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBvbkZpcnN0SW5pdCgpOiB2b2lkIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gdGhlIGRlcml2ZWQgY2xhc3MgYXMgcGFydCBvZiB0aGUgQW5ndWxhciBuZ09uSW5pdFxyXG4gICAqIGxpZmVjeWNsZSBob29rLiBJdCBtdXN0IHByb3ZpZGUgYSBQYWdlSW5pdFJlc3VsdCBiYWNrIHRvIHRoZSBiYXNlIGNsYXNzIHRvIHByb3Blcmx5XHJcbiAgICogc2V0IHVwIHRoZSBwYWdlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvbkluaXQoKTogUHJvbWlzZTxQYWdlSW5pdFJlc3VsdD47XHJcbiAgcHJvdGVjdGVkIGluaXRQcm9taXNlITogUHJvbWlzZTxQYWdlSW5pdFJlc3VsdD47XHJcblxyXG4gIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2hvd1N0YXR1cyhQYWdlU3RhdHVzLkxvYWRpbmcpO1xyXG4gICAgICB0aGlzLm9uRmlyc3RJbml0KCk7XHJcbiAgICAgIHRoaXMuaW5pdFByb21pc2UgPSB0aGlzLm9uSW5pdCgpO1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXRQcm9taXNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQganVzdCBhZnRlciB0aGUgQW5ndWxhciBMaWZlY3ljbGUgZXZlbnQgbmdPbkFmdGVyVmlld0luaXQuXHJcbiAgICogSXQgZmlyZXMgYWZ0ZXIgYWxsIHN1Yi1jb21wb25lbnRzIGhhdmUgZ29uZSB0aHJvdWdoIHRoZWlyIGluaXRpYWxpemF0aW9uIHBoYXNlLlxyXG4gICAqIEl0IGlzIGluIHRoaXMgcGhhc2UgdGhhdCB0aGUgdmlldyBjb21wb25lbnRzIHNob3VsZCBhbHJlYWR5IGV4aXN0LCBzbyBhIGRlcml2ZWQgY2xhc3Mgc2hvdWxkXHJcbiAgICogbG9hZCBkYXRhIGZyb20gdGhlIEFQSSB0byBwb3B1bGF0ZSBhbnkgdmlldyBjb21wb25lbnRzLiBUaGUgcHJvbWlzZSB0aGF0XHJcbiAgICogaXMgcmV0dXJuZWQgbXVzdCBub3QgcmVzb2x2ZSB1bnRpbCBhbGwgcmVxdWlyZWQgZGF0YSBoYXMgY29tcGxldGVseSBsb2FkZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgb25BZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4geyB9O1xyXG4gIHB1YmxpYyBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcclxuICAgICAgdGhpcy5wYXJzZUluaXRSZXN1bHQoaW5pdFJlc3VsdCk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJWaWV3SW5pdCgpO1xyXG5cclxuICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdENvbXBsZXRlLm5leHQoKTtcclxuICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdENvbXBsZXRlLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLm9uRm9ybUxvYWRDb21wbGV0ZSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdHVzLnN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGVkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRVcFJvdXRlclN1YnNjcmlwdGlvbnMoKTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBsaWZlY3ljbGUgbWV0aG9kIHRoYXQgZXhlY3V0ZXMgb25jZSBhbGwgZGF0YSBoYXMgYmVlbiBsb2FkZWRcclxuICAgKiB0aHJvdWdoIG5nQWZ0ZXJWaWV3SW5pdCBhbmQgZnJvbSBsb2NhbCBzdG9yYWdlIGlmIHJlcXVpcmVkLlxyXG4gICAqIEl0IGlzIGF0IHRoaXMgcG9pbnQgdGhhdCB5b3UgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIG9uIHRoZSBmb3JtXHJcbiAgICogcmVsaWFibHlcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKiBAbWVtYmVyb2YgUGFnZUJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgb25Gb3JtTG9hZENvbXBsZXRlKCk6IFByb21pc2U8YW55PiB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBsaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBldmVyeSBOYXZpZ2F0aW9uRW5kIGV2ZW50LlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBvbk5hdmlnYXRpb25FbmQoKTogdm9pZCB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVsb2FkIHRoZSBjb21wb25lbnQga2lja2luZyBvZmYgdGhlIG5nT25Jbml0IGFuZCBuZ0FmdGVyVmlld0luaXQgbGlmZWN5Y2xlIGhvb2tzLlxyXG4gICAqIEFueSBzdGF0ZSB0aGF0IG5lZWRzIHRvIGJlIHJlc2V0IHNob3VsZCBiZSBkb25lIHNvIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWxvYWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hZnRlclZpZXdJbml0Q29tcGxldGUgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xyXG5cclxuICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIHRoaXMubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIG92ZXJyaWRkZW4gaW4gYSBkZXJpdmVkIGNsYXNzIHRoaXMgbWV0aG9kIHdpbGwgc3luYyB0aGUgZm9ybSBzdGF0ZVxyXG4gICAqIGludG8gdGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuIFRoZSB2YWx1ZSBzaG91bGQgbm90XHJcbiAgICogYWN0dWFsbHkgYmUgc2VudCB0byB0aGUgQVBJIHlldC5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgYXBwbHlNb2RlbFVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgdGhlIG1vZGVsIHN0YXRlIHRvIHRoZSBBUEkgYW5kIHJldHVybiBhIHByb21pc2UgdGhhdFxyXG4gICAqIGNvbnRhaW5zIHRoZSB1cGRhdGVkIGVudGl0eUlELiBUaGUgcHJvbWlzZSBzaG91bGQgYmUgcmVqZWN0ZWRcclxuICAgKiBpZiB0aGUgc2F2ZSBmYWlscyBhbmQgZXJyb3JzIGFuZCB0aGUgb3ZlcmxheSBzdGF0dXMgd2lsbCBiZSB1cGRhdGVkXHJcbiAgICogYWNjb3JkaW5nbHlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVRvQXBpKCk6IFByb21pc2U8bnVtYmVyIHwgdm9pZD4geyB9O1xyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgYWZ0ZXIgdGhlIHNhdmUgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXHJcbiAgICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXJpdmVkIGNsYXNzIHRvIG5hdmlnYXRlXHJcbiAgICogdG8gYSBwcm9wZXJ0aWVzL3N0YXR1cyBwYWdlIG9yIGVtaXQgYXBwcm9wcmlhdGVseSBpZiB3aXRoaW4gYSBkaWFsb2dcclxuICAgKiBAcGFyYW0gZW50aXR5SWQgXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uU2F2ZUNvbXBsZXRlKGVudGl0eUlkPzogbnVtYmVyKTogdm9pZCB7IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzYXZlLiAgV2Ugd2lsbCBmaXJzdCB0b3VjaCBhbGwgY29udHJvbHMgdG8gc2hvdyB2YWxpZGF0aW9uIG1lc3NhZ2VzXHJcbiAgICogaWYgdGhlIGZvcm0gaXMgaW52YWxpZC4gIElmIHRoZSBmb3JtIGlzIHZhbGlkIHdlIHdpbGwgYXR0ZW1wdCB0byBzYXZlIGFuZCBhbnkgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWRcclxuICAgKiBiYWNrIHRvIHRoZSB1c2VyXHJcbiAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBvblNhdmUoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd1N0YXR1cyhQYWdlU3RhdHVzLlNhdmluZyk7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbHlNb2RlbFVwZGF0ZXMoKTtcclxuICAgICAgICBsZXQgZW50aXR5SWQgPSBhd2FpdCB0aGlzLnNhdmVUb0FwaSgpIHx8IC0xO1xyXG5cclxuICAgICAgICB0aGlzLl9lcnJvcnMgPSAnJztcclxuXHJcbiAgICAgICAgdGhpcy5vblNhdmVDb21wbGV0ZShlbnRpdHlJZCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgLy9jbGVhciB0aGUgXCJzYXZpbmdcIiBvdmVybGF5IGFuZCBzaG93IHRoZSBtZXNzYWdlIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgdGhyb3VnaCB0aGUgZXJyb3JzIHByb3BlcnR5XHJcbiAgICAgICAgdGhpcy5zaG93RXJyb3JCYW5uZXIoZXJyb3IsIHRoaXMuZGVmYXVsdFVua25vd25TYXZlRXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGJhbm5lciB3aXRoIHRoZSBnZW5lcmljIG1lc3NhZ2UgaWYgdGhlIHBhcmVudCBjb21wb25lbnQgaGFzbid0IGFscmVhZHkgc2V0IG9uZVxyXG4gICAgICAvLyBieSBpbXBsZW1lbnRpbmcgb25TYXZlIGZvciBhZGRpdGlvbmFsIHZhbGlkYXRpb25cclxuICAgICAgaWYgKHRoaXMuZXJyb3JzID09PSAnJykge1xyXG4gICAgICAgIHRoaXMuc2hvd0Vycm9yQmFubmVyKHRoaXMuZGVmYXVsdEludmFsaWRGb3JtTWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbFNlcnZpY2Uuc2Nyb2xsVG9JdGVtKHRoaXMuc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IhLCBcIi5uZy1pbnZhbGlkXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0aGF0IHdpbGwgbG9nIGFuIGVycm9yIHRoYXQgaXMgcGFzc2VkIGluIHRvIHRoZSBjb25zb2xlXHJcbiAgICogQHBhcmFtIGUgXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uRXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XHJcbiAgICB0aGlzLmVycm9yU2VydmljZS5sb2dDb25zb2xlRXJyb3IoZXJyb3IpO1xyXG4gICAgdGhpcy5zaG93RXJyb3JPdmVybGF5KGVycm9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYW4gZXJyb3IgbWVzc2FnZSBpbiBhIHdob2xlLXBhZ2Ugb3ZlcmxheS4gVGhpcyB3aWxsIHByZXZlbnQgYW55IG1vcmVcclxuICAgKiBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZS4gSXQgY2FuIHRha2UgYSBzdHJpbmcgZXJyb3IgbWVzc2FnZSBvciBhIHJhdyBBUElcclxuICAgKiBlcnJvciB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZC4gSWYgdGhlIEFQSSBlcnJvciBpc24ndCBzb21ldGhpbmcgd2UgY2FuIGhhbmRsZVxyXG4gICAqIGEgZ2VuZXJpYyBtZXNzYWdlIGlzIHNob3duIGluc3RlYWRcclxuICAgKiBAcGFyYW0geyhFcnJvciB8IHN0cmluZyl9IGVycm9yXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNob3dFcnJvck92ZXJsYXkoZXJyb3I6IEVycm9yIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikuc3Vic2NyaWJlKCh0cmFuc2xhdGVkTWVzc2FnZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygnZXJyb3InLCB0cmFuc2xhdGVkTWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYW4gZXJyb3IgaW4gdGhlIGJhbm5lciBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uICBUaGlzIHdpbGwgbm90IHByb2R1Y2UgYVxyXG4gICAqIHdob2xlLXBhZ2Ugb3ZlcmxheSBsaWtlIHRoZSBmdW5jdGlvbiBzaG93RXJyb3Igd2lsbC4gIEl0IGNhbiB0YWtlIGEgc3RyaW5nIGVycm9yIG1lc3NhZ2VcclxuICAgKiBvciByYXcgQVBJIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLiAgSWYgdGhlIEFQSSBlcnJvciBpc24ndCBzb21ldGhpbmcgd2UgY2FuIGhhbmRsZSxcclxuICAgKiBhIGdlbmVyaWMgbWVzc2FnZSAoY3VzdG9taXphYmxlIHZpYSB1bmtub3duRXJyb3JEZWZhdWx0KSBpcyBzaG93biBpbnN0ZWFkLlxyXG4gICAqIEBwYXJhbSBlcnJvciBcclxuICAgKiBAcGFyYW0gdW5rbm93bkVycm9yRGVmYXVsdCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yQmFubmVyKGVycm9yOiBFcnJvciB8IHN0cmluZywgdW5rbm93bkVycm9yRGVmYXVsdD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IsIHVua25vd25FcnJvckRlZmF1bHQpLnN1YnNjcmliZSgodHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLl9lcnJvcnMgPSB0cmFuc2xhdGVkTWVzc2FnZTtcclxuICAgICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGVkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIGFuZCB0cmFuc2xhdGVzIGFuIEFQSSBlcnJvciBvciBlcnJvciBzdHJpbmcuXHJcbiAgICogQHBhcmFtIGUgXHJcbiAgICogQHBhcmFtIHVua25vd25FcnJvckRlZmF1bHQgXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldEVycm9yTWVzc2FnZShlOiBFcnJvciB8IHN0cmluZywgdW5rbm93bkVycm9yRGVmYXVsdD86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBsZXQgZXh0cmFjdGVkTWVzc2FnZSA9IHRoaXMuZXJyb3JTZXJ2aWNlLnBhcnNlQXBpRXJyb3IoZSwgdW5rbm93bkVycm9yRGVmYXVsdCk7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChleHRyYWN0ZWRNZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBlcnJvcnMgdG8gaGlkZSB0aGUgZXJyb3JzIGJhbm5lci5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaGlkZUVycm9yQmFubmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZXJyb3JzID0gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdGhlIGRpc3BsYXkgc3RhdHVzIHRvIG92ZXJsYXkgdGhlIHdob2xlIHBhZ2Ugd2hpbGUgbG9hZGluZyBvciBzYXZpbmdcclxuICAgKiBhbmQgY2xlYXIgaXQgd2hlbiB0aGUgZm9ybSBpcyByZWFkeVxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKiBAcGFyYW0ge1BhZ2VTdGF0dXN9IHN0YXR1c1xyXG4gICAqIEBtZW1iZXJvZiBGb3JtQmFzZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzaG93U3RhdHVzKHN0YXR1czogUGFnZVN0YXR1cykge1xyXG4gICAgbGV0IGtub3duU3RhdHVzID0gUGFnZVN0YXR1c2VzW3N0YXR1c107XHJcbiAgICBpZiAoa25vd25TdGF0dXMpIHtcclxuICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKGtub3duU3RhdHVzLnN0YXR1cywga25vd25TdGF0dXMubWVzc2FnZSwgdW5kZWZpbmVkLCBrbm93blN0YXR1cy5ub0RhdGFUZW1wbGF0ZSwga25vd25TdGF0dXMub3ZlcmxheUNsYXNzTGlzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvd3MgdGhlIGNvbXBvbmVudCB0byBlbnRlciBhIHBlbmRpbmcgc3RhdHVzIGFuZCBleGVjdXRlIGEgZnVuY3Rpb24gdGhhdCBvbiBjb21wbGV0aW9uIHdpbGwgcmV0dXJuIHRoZSBzdGF0dXNcclxuICAgKiB0byBoYXNEYXRhLiBJZiBhbiBlcnJvciBvY2N1cnMgd2l0aGluIHRoZSBjYWxsYmFjayBhbiBlcnJvciBiYW5uZXIgY2FuIGJlIHNob3duLlxyXG4gICAqIEBwYXJhbSBjYWxsYmFja1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFzeW5jIHJ1bkJsb2NraW5nQWN0aW9uKGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPGFueT4sIHBlbmRpbmdNZXNzYWdlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRoaXMuaGlkZUVycm9yQmFubmVyKCk7XHJcbiAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCBwZW5kaW5nTWVzc2FnZSk7XHJcblxyXG4gICAgcmV0dXJuIGNhbGxiYWNrKCkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnNob3dFcnJvckJhbm5lcihlcnJvcik7XHJcbiAgICAgIC8vIFRocm93IHRoZSBlcnJvciBmb3IgYW55IGRvd25zdHJlYW0gY29tcG9uZW50cyB0aGF0IG1heSBiZSBsaXN0ZW5pbmcgYW5kIG5lZWQgdG8gcmVhY3RcclxuICAgICAgLy8gdG8gYW55IGVycm9ycyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgY2FsbGJhY2tcclxuICAgICAgdGhyb3cgKGVycm9yKTtcclxuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dTdGF0dXMoUGFnZVN0YXR1cy5Mb2FkZWQpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIHRoZSBwYWdlIGluaXQgcmVzdWx0IGFuZCBzZXRzIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllcyBvbiB0aGUgcGFnZVxyXG4gICAqIEBwYXJhbSByZXN1bHQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUluaXRSZXN1bHQocmVzdWx0OiBQYWdlSW5pdFJlc3VsdCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0UmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy50aXRsZSA9IHJlc3VsdC50aXRsZTtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSByZXN1bHQuYnJlYWRjcnVtYnM7XHJcbiAgICB0aGlzLmhlbHAgPSByZXN1bHQuaGVscDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdXAgdGhlIHJvdXRlciBldmVudCBzdWJzY3JpcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRVcFJvdXRlclN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiAmJiAhdGhpcy5kZXN0cm95ZWQuY2xvc2VkKSB7XHJcbiAgICAgIC8vIFJlYWN0IHRvIG5hdmlnYXRpb24gZXZlbnRzXHJcbiAgICAgIHRoaXMubmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCksXHJcbiAgICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxyXG4gICAgICApLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25FbmQoKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,23 @@
1
+ export var PageStatus;
2
+ (function (PageStatus) {
3
+ PageStatus["Loading"] = "loading";
4
+ PageStatus["Loaded"] = "loaded";
5
+ PageStatus["Saving"] = "saving";
6
+ PageStatus["NoData"] = "noData";
7
+ })(PageStatus || (PageStatus = {}));
8
+ ;
9
+ export class PageStatuses {
10
+ static get loading() {
11
+ return { status: "pending", message: "Loading" };
12
+ }
13
+ static get loaded() {
14
+ return { status: "hasData", message: "" };
15
+ }
16
+ static get saving() {
17
+ return { status: "pending", message: "Saving" };
18
+ }
19
+ static get noData() {
20
+ return { status: "noData", message: "No data is available" };
21
+ }
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1zdGF0dXNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLXN0YXR1c2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsaUNBQW1CLENBQUE7SUFDbkIsK0JBQWlCLENBQUE7SUFDakIsK0JBQWlCLENBQUE7SUFDakIsK0JBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBQUEsQ0FBQztBQUVGLE1BQU0sT0FBTyxZQUFZO0lBQ2hCLE1BQU0sS0FBSyxPQUFPO1FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU0sTUFBTSxLQUFLLE1BQU07UUFDdEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTSxNQUFNLEtBQUssTUFBTTtRQUN0QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVNLE1BQU0sS0FBSyxNQUFNO1FBQ3RCLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0lBQy9ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpc3BsYXlTdGF0dXMgfSBmcm9tICcuLi9kaXNwbGF5J1xyXG5cclxuZXhwb3J0IGVudW0gUGFnZVN0YXR1cyB7XHJcbiAgTG9hZGluZyA9ICdsb2FkaW5nJyxcclxuICBMb2FkZWQgPSAnbG9hZGVkJyxcclxuICBTYXZpbmcgPSAnc2F2aW5nJyxcclxuICBOb0RhdGEgPSAnbm9EYXRhJ1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZ2VTdGF0dXNlcyB7XHJcbiAgcHVibGljIHN0YXRpYyBnZXQgbG9hZGluZygpOiBEaXNwbGF5U3RhdHVzIHtcclxuICAgIHJldHVybiB7IHN0YXR1czogXCJwZW5kaW5nXCIsIG1lc3NhZ2U6IFwiTG9hZGluZ1wiIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBsb2FkZWQoKTogRGlzcGxheVN0YXR1cyB7XHJcbiAgICByZXR1cm4geyBzdGF0dXM6IFwiaGFzRGF0YVwiLCBtZXNzYWdlOiBcIlwiIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBzYXZpbmcoKTogRGlzcGxheVN0YXR1cyB7XHJcbiAgICByZXR1cm4geyBzdGF0dXM6IFwicGVuZGluZ1wiLCBtZXNzYWdlOiBcIlNhdmluZ1wiIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBub0RhdGEoKTogRGlzcGxheVN0YXR1cyB7XHJcbiAgICByZXR1cm4geyBzdGF0dXM6IFwibm9EYXRhXCIsIG1lc3NhZ2U6IFwiTm8gZGF0YSBpcyBhdmFpbGFibGVcIiB9O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { Injector } from '@angular/core';
2
+ import { TelemetryService } from '../../core/telemetry.service';
3
+ import { SpyFactory } from './spy-factory.spec';
4
+ export class HierarchyBaseTestInjectorFactory {
5
+ static getComponentInjector() {
6
+ return Injector.create({
7
+ providers: [
8
+ {
9
+ provide: TelemetryService,
10
+ useFactory: () => SpyFactory.createSpy(TelemetryService),
11
+ deps: []
12
+ }
13
+ ]
14
+ });
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWJhc2UtdGVzdC1pbmplY3Rvci1mYWN0b3J5LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3Rlc3RpbmcvaGllcmFyY2h5LWJhc2UtdGVzdC1pbmplY3Rvci1mYWN0b3J5LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGdDQUFnQztJQUVwQyxNQUFNLENBQUMsb0JBQW9CO1FBQ2hDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNyQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtvQkFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3hELElBQUksRUFBRSxFQUFFO2lCQUNUO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNweUZhY3RvcnkgfSBmcm9tICcuL3NweS1mYWN0b3J5LnNwZWMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhpZXJhcmNoeUJhc2VUZXN0SW5qZWN0b3JGYWN0b3J5IHtcclxuICBcclxuICBwdWJsaWMgc3RhdGljIGdldENvbXBvbmVudEluamVjdG9yKCkge1xyXG4gICAgcmV0dXJuIEluamVjdG9yLmNyZWF0ZSh7XHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IFRlbGVtZXRyeVNlcnZpY2UsXHJcbiAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiBTcHlGYWN0b3J5LmNyZWF0ZVNweShUZWxlbWV0cnlTZXJ2aWNlKSxcclxuICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -3,6 +3,7 @@ import { ActivatedRoute, Router } from "@angular/router";
3
3
  import { TranslateService } from "@ngx-translate/core";
4
4
  import { ErrorService } from "../../core/error.service";
5
5
  import { ScrollService } from "../../core/scroll.service";
6
+ import { TelemetryService } from '../../core/telemetry.service';
6
7
  import { DialogService } from "../../display/dialog/dialog.service";
7
8
  import { MockActivatedRoute, mockRouterFactory } from "./public-mocks.spec";
8
9
  import { SpyFactory } from "./spy-factory.spec";
@@ -17,6 +18,12 @@ export class PageBaseComponentTestInjectorFactory {
17
18
  static getComponentInjector() {
18
19
  return Injector.create({ providers: [...this.CoreProviders, ...this.ComponentProviders] });
19
20
  }
21
+ /**
22
+ * Get an injector which provides spy and mock objects needed by the @see WizardBaseComponent
23
+ */
24
+ static getWizardBaseComponentInjector() {
25
+ return Injector.create({ providers: [...this.CoreProviders, ...this.ComponentProviders, ...this.WizardProviders] });
26
+ }
20
27
  }
21
28
  /**
22
29
  * Core services retrieved via the @see Injector in our base classes.
@@ -61,4 +68,17 @@ PageBaseComponentTestInjectorFactory.ComponentProviders = [
61
68
  deps: []
62
69
  }
63
70
  ];
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLWNvbXBvbmVudC10ZXN0LWluamVjdG9yLWZhY3Rvcnkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdGVzdGluZy9wYWdlLWJhc2UtY29tcG9uZW50LXRlc3QtaW5qZWN0b3ItZmFjdG9yeS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9DQUFvQztJQStDN0M7O09BRUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CO1FBQzlCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDOztBQWxERDs7R0FFRztBQUNZLGtEQUFhLEdBQXFCO0lBQzdDO1FBQ0ksT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsaUJBQWlCO1FBQzdCLElBQUksRUFBRSxFQUFFO0tBQ1g7SUFDRDtRQUNJLE9BQU8sRUFBRSxhQUFhO1FBQ3RCLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDYixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDOUMsQ0FBQztRQUNELElBQUksRUFBRSxFQUFFO0tBQ1g7SUFDRDtRQUNJLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDYixPQUFPLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxFQUFFLEVBQUU7S0FDWDtDQUNKLENBQUM7QUFFRjs7O0dBR0c7QUFDWSx1REFBa0IsR0FBcUI7SUFDbEQ7UUFDSSxPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQztRQUNoRCxJQUFJLEVBQUUsRUFBRTtLQUNYO0lBQ0QsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDbkM7UUFDSSxPQUFPLEVBQUUsYUFBYTtRQUN0QixVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ2IsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFDRCxJQUFJLEVBQUUsRUFBRTtLQUNYO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBTdGF0aWNQcm92aWRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnJvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2Rpc3BsYXkvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE1vY2tBY3RpdmF0ZWRSb3V0ZSwgbW9ja1JvdXRlckZhY3RvcnkgfSBmcm9tIFwiLi9wdWJsaWMtbW9ja3Muc3BlY1wiO1xyXG5pbXBvcnQgeyBTcHlGYWN0b3J5IH0gZnJvbSBcIi4vc3B5LWZhY3Rvcnkuc3BlY1wiO1xyXG5pbXBvcnQgeyBNb2NrVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLW1vY2tzLnNwZWNcIjtcclxuXHJcbi8qKlxyXG4gKiBDb250YWlucyBzdGF0aWMgbWV0aG9kcyB0byBjcmVhdGUgY29tbW9uIGluamVjdG9ycyBmb3IgdW5pdCB0ZXN0aW5nXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUGFnZUJhc2VDb21wb25lbnRUZXN0SW5qZWN0b3JGYWN0b3J5IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcmUgc2VydmljZXMgcmV0cmlldmVkIHZpYSB0aGUgQHNlZSBJbmplY3RvciBpbiBvdXIgYmFzZSBjbGFzc2VzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBDb3JlUHJvdmlkZXJzOiBTdGF0aWNQcm92aWRlcltdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogUm91dGVyLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBtb2NrUm91dGVyRmFjdG9yeSxcclxuICAgICAgICAgICAgZGVwczogW10sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFNjcm9sbFNlcnZpY2UsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTcHlGYWN0b3J5LmNyZWF0ZVNweShTY3JvbGxTZXJ2aWNlKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZXBzOiBbXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2NrQWN0aXZhdGVkUm91dGUoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVwczogW10sXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlcnZpY2VzIGFuZCBzdWNoIHJldHJpZXZlZCBieSBAc2VlIFBhZ2VCYXNlQ29tcG9uZW50IHZpYSB0aGUgQHNlZSBJbmplY3RvclxyXG4gICAgICogaW4gYWRkaXRpb24gdG8gb3VyIGNvcmUgc2VydmljZXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgQ29tcG9uZW50UHJvdmlkZXJzOiBTdGF0aWNQcm92aWRlcltdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gbmV3IE1vY2tUcmFuc2xhdGVTZXJ2aWNlKCctVCcpLFxyXG4gICAgICAgICAgICBkZXBzOiBbXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBFcnJvclNlcnZpY2UsIGRlcHM6IFtdIH0sXHJcbiAgICAgICAgeyBcclxuICAgICAgICAgICAgcHJvdmlkZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNweUZhY3RvcnkuY3JlYXRlU3B5KERpYWxvZ1NlcnZpY2UpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbiBpbmplY3RvciB3aGljaCBwcm92aWRlcyBzcHkgYW5kIG1vY2sgb2JqZWN0cyBuZWVkZWQgYnkgdGhlIEBzZWUgUGFnZUJhc2VDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXRDb21wb25lbnRJbmplY3RvcigpOiBJbmplY3RvciB7XHJcbiAgICAgICAgcmV0dXJuIEluamVjdG9yLmNyZWF0ZSh7IHByb3ZpZGVyczogWy4uLnRoaXMuQ29yZVByb3ZpZGVycywgLi4udGhpcy5Db21wb25lbnRQcm92aWRlcnNdIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
71
+ /**
72
+ * Services and such retrieved by @see WizardBaseComponent via the @see Injector
73
+ * in addition to our core and @see PageBaseComponent services
74
+ */
75
+ PageBaseComponentTestInjectorFactory.WizardProviders = [
76
+ {
77
+ provide: TelemetryService,
78
+ useFactory: () => {
79
+ return SpyFactory.createSpy(TelemetryService);
80
+ },
81
+ deps: []
82
+ }
83
+ ];
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLWNvbXBvbmVudC10ZXN0LWluamVjdG9yLWZhY3Rvcnkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdGVzdGluZy9wYWdlLWJhc2UtY29tcG9uZW50LXRlc3QtaW5qZWN0b3ItZmFjdG9yeS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9DQUFvQztJQTZEN0M7O09BRUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CO1FBQzlCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsOEJBQThCO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEgsQ0FBQzs7QUF2RUQ7O0dBRUc7QUFDWSxrREFBYSxHQUFxQjtJQUM3QztRQUNJLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLGlCQUFpQjtRQUM3QixJQUFJLEVBQUUsRUFBRTtLQUNYO0lBQ0Q7UUFDSSxPQUFPLEVBQUUsYUFBYTtRQUN0QixVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ2IsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFDRCxJQUFJLEVBQUUsRUFBRTtLQUNYO0lBQ0Q7UUFDSSxPQUFPLEVBQUUsY0FBYztRQUN2QixVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ2IsT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksRUFBRSxFQUFFO0tBQ1g7Q0FDSixDQUFDO0FBRUY7OztHQUdHO0FBQ1ksdURBQWtCLEdBQXFCO0lBQ2xEO1FBQ0ksT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7UUFDaEQsSUFBSSxFQUFFLEVBQUU7S0FDWDtJQUNELEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBQ25DO1FBQ0ksT0FBTyxFQUFFLGFBQWE7UUFDdEIsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUM5QyxDQUFDO1FBQ0QsSUFBSSxFQUFFLEVBQUU7S0FDWDtDQUNKLENBQUM7QUFFRjs7O0dBR0c7QUFDWSxvREFBZSxHQUFxQjtJQUMvQztRQUNJLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLEVBQUUsRUFBRTtLQUNYO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBTdGF0aWNQcm92aWRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnJvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZGlzcGxheS9kaWFsb2cvZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTW9ja0FjdGl2YXRlZFJvdXRlLCBtb2NrUm91dGVyRmFjdG9yeSB9IGZyb20gXCIuL3B1YmxpYy1tb2Nrcy5zcGVjXCI7XHJcbmltcG9ydCB7IFNweUZhY3RvcnkgfSBmcm9tIFwiLi9zcHktZmFjdG9yeS5zcGVjXCI7XHJcbmltcG9ydCB7IE1vY2tUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tbW9ja3Muc3BlY1wiO1xyXG5cclxuLyoqXHJcbiAqIENvbnRhaW5zIHN0YXRpYyBtZXRob2RzIHRvIGNyZWF0ZSBjb21tb24gaW5qZWN0b3JzIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQYWdlQmFzZUNvbXBvbmVudFRlc3RJbmplY3RvckZhY3Rvcnkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29yZSBzZXJ2aWNlcyByZXRyaWV2ZWQgdmlhIHRoZSBAc2VlIEluamVjdG9yIGluIG91ciBiYXNlIGNsYXNzZXMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIENvcmVQcm92aWRlcnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IG1vY2tSb3V0ZXJGYWN0b3J5LFxyXG4gICAgICAgICAgICBkZXBzOiBbXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogU2Nyb2xsU2VydmljZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNweUZhY3RvcnkuY3JlYXRlU3B5KFNjcm9sbFNlcnZpY2UpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1vY2tBY3RpdmF0ZWRSb3V0ZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZXBzOiBbXSxcclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZXMgYW5kIHN1Y2ggcmV0cmlldmVkIGJ5IEBzZWUgUGFnZUJhc2VDb21wb25lbnQgdmlhIHRoZSBAc2VlIEluamVjdG9yXHJcbiAgICAgKiBpbiBhZGRpdGlvbiB0byBvdXIgY29yZSBzZXJ2aWNlc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBDb21wb25lbnRQcm92aWRlcnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiBuZXcgTW9ja1RyYW5zbGF0ZVNlcnZpY2UoJy1UJyksXHJcbiAgICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEVycm9yU2VydmljZSwgZGVwczogW10gfSxcclxuICAgICAgICB7IFxyXG4gICAgICAgICAgICBwcm92aWRlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3B5RmFjdG9yeS5jcmVhdGVTcHkoRGlhbG9nU2VydmljZSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVwczogW11cclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZXMgYW5kIHN1Y2ggcmV0cmlldmVkIGJ5IEBzZWUgV2l6YXJkQmFzZUNvbXBvbmVudCB2aWEgdGhlIEBzZWUgSW5qZWN0b3JcclxuICAgICAqIGluIGFkZGl0aW9uIHRvIG91ciBjb3JlIGFuZCBAc2VlIFBhZ2VCYXNlQ29tcG9uZW50IHNlcnZpY2VzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIFdpemFyZFByb3ZpZGVyczogU3RhdGljUHJvdmlkZXJbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFRlbGVtZXRyeVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTcHlGYWN0b3J5LmNyZWF0ZVNweShUZWxlbWV0cnlTZXJ2aWNlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVwczogW11cclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFuIGluamVjdG9yIHdoaWNoIHByb3ZpZGVzIHNweSBhbmQgbW9jayBvYmplY3RzIG5lZWRlZCBieSB0aGUgQHNlZSBQYWdlQmFzZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldENvbXBvbmVudEluamVjdG9yKCk6IEluamVjdG9yIHtcclxuICAgICAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbLi4udGhpcy5Db3JlUHJvdmlkZXJzLCAuLi50aGlzLkNvbXBvbmVudFByb3ZpZGVyc10gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYW4gaW5qZWN0b3Igd2hpY2ggcHJvdmlkZXMgc3B5IGFuZCBtb2NrIG9iamVjdHMgbmVlZGVkIGJ5IHRoZSBAc2VlIFdpemFyZEJhc2VDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBzdGF0aWMgZ2V0V2l6YXJkQmFzZUNvbXBvbmVudEluamVjdG9yKCk6IEluamVjdG9yIHtcclxuICAgICAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbLi4udGhpcy5Db3JlUHJvdmlkZXJzLCAuLi50aGlzLkNvbXBvbmVudFByb3ZpZGVycywgLi4udGhpcy5XaXphcmRQcm92aWRlcnNdIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==