@energycap/components 0.26.11 → 0.27.0-confim-hotfix.20220111-0708

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 (51) hide show
  1. package/bundles/energycap-components.umd.js +7248 -6297
  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/confirm/confirm.component.js +2 -2
  13. package/esm2015/lib/display/help/help-types.js +2 -0
  14. package/esm2015/lib/display/hierarchy/hierarchy-base.js +106 -0
  15. package/esm2015/lib/display/hierarchy/hierarchy-mocks.spec.js +58 -0
  16. package/esm2015/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.js +58 -0
  17. package/esm2015/lib/display/resizable/resizable.component.js +57 -0
  18. package/esm2015/lib/display/tree/tree.component.js +83 -0
  19. package/esm2015/lib/shared/page/page-base/page-base.component.js +69 -12
  20. package/esm2015/lib/shared/page/page-statuses.js +23 -0
  21. package/esm2015/lib/shared/testing/hierarchy-base-test-injector-factory.spec.js +17 -0
  22. package/esm2015/lib/shared/testing/page-base-component-test-injector-factory.spec.js +21 -1
  23. package/esm2015/lib/shared/wizard/wizard-base/wizard-base.component.js +260 -0
  24. package/esm2015/lib/shared/wizard/wizard-buttons/wizard-buttons.component.js +52 -0
  25. package/esm2015/lib/shared/wizard/wizard-progress/wizard-progress.component.js +18 -0
  26. package/esm2015/public-api.js +15 -3
  27. package/fesm2015/energycap-components.js +5498 -4631
  28. package/fesm2015/energycap-components.js.map +1 -1
  29. package/lib/components.module.d.ts +2 -3
  30. package/lib/core/cache.service.d.ts +11 -1
  31. package/lib/core/telemetry-tracker.service.d.ts +10 -0
  32. package/lib/core/telemetry.service.d.ts +19 -2
  33. package/lib/display/help/help-types.d.ts +33 -0
  34. package/lib/display/hierarchy/hierarchy-base.d.ts +72 -0
  35. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -0
  36. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +29 -0
  37. package/lib/display/resizable/resizable.component.d.ts +28 -0
  38. package/lib/display/tree/tree.component.d.ts +51 -0
  39. package/lib/shared/page/page-base/page-base.component.d.ts +43 -1
  40. package/lib/shared/page/page-statuses.d.ts +13 -0
  41. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -0
  42. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +9 -0
  43. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +131 -0
  44. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +23 -0
  45. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +7 -0
  46. package/package.json +1 -1
  47. package/public-api.d.ts +14 -2
  48. package/src/assets/locales/en_US.json +3 -1
  49. package/src/styles/mixins/_resizable-base.scss +1 -2
  50. package/esm2015/lib/core/telemetry-base.service.js +0 -3
  51. package/lib/core/telemetry-base.service.d.ts +0 -25
@@ -0,0 +1,106 @@
1
+ import { Directive, EventEmitter, Injector, Input, Output } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { TelemetryService } from '../../core/telemetry.service';
4
+ export class HierarchyItem {
5
+ constructor() {
6
+ this.id = '';
7
+ /** Label to display for the item */
8
+ this.label = '';
9
+ /** Indicates how many levels deep the item is in the parent structure */
10
+ this.level = 0;
11
+ /** Display item as a link or a heading */
12
+ this.display = 'default';
13
+ /** Set to hide toggle, even if item has children */
14
+ this.hideToggle = false;
15
+ /** Flag to indicate whether the item has children or not, mostly drives
16
+ * whether you get the expand/collapse button
17
+ */
18
+ this.hasChildren = false;
19
+ /** Array of children if any for the item */
20
+ this.children = [];
21
+ /** Flag to indicate if the item has been expanded */
22
+ this.expanded = false;
23
+ /** Flag to indicate if the item is selected */
24
+ this.selected = false;
25
+ /** Flag to indicate if the item can be selected */
26
+ this.selectable = false;
27
+ this.readonly = false;
28
+ /** Status of each item to indicate whether children lookup is pending or
29
+ * if an error occurred retrieving data
30
+ */
31
+ this.status = "hasData";
32
+ /** Indicates if the item is a top level entity, e.g. Organization or Cost Center */
33
+ this.topLevel = false;
34
+ /**
35
+ * When checking the url for activeness, the url must match exactly or partially
36
+ * @see https://angular.io/guide/router#active-router-links
37
+ */
38
+ this.isActiveExactMatch = true;
39
+ }
40
+ }
41
+ export class HierarchyBase {
42
+ constructor(injector) {
43
+ /** Event emitter to request children for a given item */
44
+ this.getItemChildren = new EventEmitter();
45
+ /**
46
+ * Used to unsubscribe from observables
47
+ */
48
+ this._destroyed = new Subject();
49
+ this.telemetryService = injector.get(TelemetryService);
50
+ }
51
+ get destroyed() {
52
+ return this._destroyed;
53
+ }
54
+ ngOnChanges(changes) {
55
+ if (changes && changes.rootNode && changes.rootNode.currentValue) {
56
+ /** If the rootNode has children and we don't know about them yet we must be loading
57
+ * the view without the new hierarchy api
58
+ */
59
+ if (this.rootNode.hasChildren && this.rootNode.children.length === 0) {
60
+ this.getItemChildren.emit(this.rootNode);
61
+ }
62
+ }
63
+ }
64
+ /**
65
+ * Function called when the component is destroyed
66
+ */
67
+ ngOnDestroy() {
68
+ this.destroyed.next();
69
+ this.destroyed.unsubscribe();
70
+ }
71
+ /** Handler for the toggle button */
72
+ toggleItemClicked(item, expanded) {
73
+ item.expanded = expanded;
74
+ this.telemetryService.trackEvent('toggle-tree-node', {
75
+ newExpandState: item.expanded ? 'expanded' : 'collapsed',
76
+ itemDepth: `${item.level}`,
77
+ });
78
+ if (item.expanded && item.hasChildren && item.children.length === 0) {
79
+ item.status = "pending";
80
+ this.getItemChildren.emit(item);
81
+ }
82
+ }
83
+ /** Method exposed to the parent component to set the items children once they are available
84
+ */
85
+ setItemChildren(parentItem, items) {
86
+ parentItem.children = items;
87
+ parentItem.status = "hasData";
88
+ }
89
+ /** Method exposed to the parent component to indicate that something happened on the
90
+ * item that caused an error, could be retrieving children
91
+ */
92
+ setItemError(parentItem) {
93
+ parentItem.status = "error";
94
+ }
95
+ }
96
+ HierarchyBase.decorators = [
97
+ { type: Directive }
98
+ ];
99
+ HierarchyBase.ctorParameters = () => [
100
+ { type: Injector }
101
+ ];
102
+ HierarchyBase.propDecorators = {
103
+ rootNode: [{ type: Input }],
104
+ getItemChildren: [{ type: Output }]
105
+ };
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9oaWVyYXJjaHkvaGllcmFyY2h5LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBd0IsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUV0SCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR2hFLE1BQU0sT0FBTyxhQUFhO0lBQTFCO1FBQ0UsT0FBRSxHQUFXLEVBQUUsQ0FBQztRQUVoQixvQ0FBb0M7UUFDcEMsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQix5RUFBeUU7UUFDekUsVUFBSyxHQUFXLENBQUMsQ0FBQztRQVVsQiwwQ0FBMEM7UUFDMUMsWUFBTyxHQUEyQixTQUFTLENBQUM7UUFFNUMsb0RBQW9EO1FBQ3BELGVBQVUsR0FBYSxLQUFLLENBQUM7UUFFN0I7O1dBRUc7UUFDSCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU3Qiw0Q0FBNEM7UUFDNUMsYUFBUSxHQUF5QixFQUFFLENBQUM7UUFFcEMscURBQXFEO1FBQ3JELGFBQVEsR0FBYSxLQUFLLENBQUM7UUFFM0IsK0NBQStDO1FBQy9DLGFBQVEsR0FBYSxLQUFLLENBQUM7UUFFM0IsbURBQW1EO1FBQ25ELGVBQVUsR0FBYSxLQUFLLENBQUM7UUFFN0IsYUFBUSxHQUFhLEtBQUssQ0FBQztRQUUzQjs7V0FFRztRQUNILFdBQU0sR0FBZ0IsU0FBUyxDQUFDO1FBRWhDLG9GQUFvRjtRQUNwRixhQUFRLEdBQWEsS0FBSyxDQUFDO1FBRTNCOzs7V0FHRztRQUNILHVCQUFrQixHQUFhLElBQUksQ0FBQztJQUN0QyxDQUFDO0NBQUE7QUFHRCxNQUFNLE9BQWdCLGFBQWE7SUFrQmpDLFlBQVksUUFBa0I7UUFiOUIseURBQXlEO1FBQ3hDLG9CQUFlLEdBQWdDLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWxHOztVQUVFO1FBQ00sZUFBVSxHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFDO1FBUXBELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQVJELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQVFNLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO1lBQ2hFOztjQUVFO1lBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUM7U0FDRjtJQUNILENBQUM7SUFFRDs7TUFFRTtJQUNLLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxvQ0FBb0M7SUFDN0IsaUJBQWlCLENBQUMsSUFBbUIsRUFBRSxRQUFpQjtRQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFO1lBQ25ELGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDeEQsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtTQUMzQixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQ7T0FDRztJQUNJLGVBQWUsQ0FBQyxVQUF5QixFQUFFLEtBQTJCO1FBQzNFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7TUFFRTtJQUNLLFlBQVksQ0FBQyxVQUF5QjtRQUMzQyxVQUFVLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUM5QixDQUFDOzs7WUFwRUYsU0FBUzs7O1lBaEV3QixRQUFROzs7dUJBb0V2QyxLQUFLOzhCQUdMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhcmFtcywgUXVlcnlQYXJhbXNIYW5kbGluZyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTGlua0l0ZW0gfSBmcm9tICcuLi8uLi9jb250cm9scy9uYXZpZ2F0aW9uL2xpbmstaXRlbSc7XHJcbmltcG9ydCB7IFRlbGVtZXRyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RlbGVtZXRyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmlld1N0YXR1cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXNwbGF5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBIaWVyYXJjaHlJdGVtIGltcGxlbWVudHMgTGlua0l0ZW0ge1xyXG4gIGlkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIExhYmVsIHRvIGRpc3BsYXkgZm9yIHRoZSBpdGVtICovXHJcbiAgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogSW5kaWNhdGVzIGhvdyBtYW55IGxldmVscyBkZWVwIHRoZSBpdGVtIGlzIGluIHRoZSBwYXJlbnQgc3RydWN0dXJlICovXHJcbiAgbGV2ZWw6IG51bWJlciA9IDA7XHJcblxyXG4gIHVybD86IHN0cmluZztcclxuXHJcbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXMgfCBudWxsO1xyXG5cclxuICBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZztcclxuXHJcbiAgaWNvbj86IHN0cmluZztcclxuXHJcbiAgLyoqIERpc3BsYXkgaXRlbSBhcyBhIGxpbmsgb3IgYSBoZWFkaW5nICovXHJcbiAgZGlzcGxheT86ICdkZWZhdWx0JyB8ICdoZWFkaW5nJyA9ICdkZWZhdWx0JztcclxuXHJcbiAgLyoqIFNldCB0byBoaWRlIHRvZ2dsZSwgZXZlbiBpZiBpdGVtIGhhcyBjaGlsZHJlbiAqL1xyXG4gIGhpZGVUb2dnbGU/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGl0ZW0gaGFzIGNoaWxkcmVuIG9yIG5vdCwgbW9zdGx5IGRyaXZlc1xyXG4gICAqICB3aGV0aGVyIHlvdSBnZXQgdGhlIGV4cGFuZC9jb2xsYXBzZSBidXR0b25cclxuICAgKi9cclxuICBoYXNDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogQXJyYXkgb2YgY2hpbGRyZW4gaWYgYW55IGZvciB0aGUgaXRlbSAqL1xyXG4gIGNoaWxkcmVuOiBBcnJheTxIaWVyYXJjaHlJdGVtPiA9IFtdO1xyXG5cclxuICAvKiogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgaXRlbSBoYXMgYmVlbiBleHBhbmRlZCAqL1xyXG4gIGV4cGFuZGVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgaXRlbSBpcyBzZWxlY3RlZCAqL1xyXG4gIHNlbGVjdGVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgKi9cclxuICBzZWxlY3RhYmxlPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICByZWFkb25seT86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFN0YXR1cyBvZiBlYWNoIGl0ZW0gdG8gaW5kaWNhdGUgd2hldGhlciBjaGlsZHJlbiBsb29rdXAgaXMgcGVuZGluZyBvclxyXG4gICAqICBpZiBhbiBlcnJvciBvY2N1cnJlZCByZXRyaWV2aW5nIGRhdGFcclxuICAgKi9cclxuICBzdGF0dXM/OiBWaWV3U3RhdHVzID0gXCJoYXNEYXRhXCI7XHJcblxyXG4gIC8qKiBJbmRpY2F0ZXMgaWYgdGhlIGl0ZW0gaXMgYSB0b3AgbGV2ZWwgZW50aXR5LCBlLmcuIE9yZ2FuaXphdGlvbiBvciBDb3N0IENlbnRlciAqL1xyXG4gIHRvcExldmVsPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGNoZWNraW5nIHRoZSB1cmwgZm9yIGFjdGl2ZW5lc3MsIHRoZSB1cmwgbXVzdCBtYXRjaCBleGFjdGx5IG9yIHBhcnRpYWxseVxyXG4gICAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL3JvdXRlciNhY3RpdmUtcm91dGVyLWxpbmtzXHJcbiAgICovXHJcbiAgaXNBY3RpdmVFeGFjdE1hdGNoPzogYm9vbGVhbiA9IHRydWU7XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSGllcmFyY2h5QmFzZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqIEZpcnN0IGl0ZW0gdG8gc3RhcnQgdGhlIGhpZXJhcmNoeSBzdHJ1Y3R1cmUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcm9vdE5vZGUhOiBIaWVyYXJjaHlJdGVtO1xyXG5cclxuICAvKiogRXZlbnQgZW1pdHRlciB0byByZXF1ZXN0IGNoaWxkcmVuIGZvciBhIGdpdmVuIGl0ZW0gKi9cclxuICBAT3V0cHV0KCkgcHVibGljIGdldEl0ZW1DaGlsZHJlbjogRXZlbnRFbWl0dGVyPEhpZXJhcmNoeUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxIaWVyYXJjaHlJdGVtPigpO1xyXG5cclxuICAvKipcclxuICAqIFVzZWQgdG8gdW5zdWJzY3JpYmUgZnJvbSBvYnNlcnZhYmxlc1xyXG4gICovXHJcbiAgcHJpdmF0ZSBfZGVzdHJveWVkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHVibGljIGdldCBkZXN0cm95ZWQoKTogU3ViamVjdDxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0cm95ZWQ7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVGVsZW1ldHJ5U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlcy5yb290Tm9kZSAmJiBjaGFuZ2VzLnJvb3ROb2RlLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAvKiogSWYgdGhlIHJvb3ROb2RlIGhhcyBjaGlsZHJlbiBhbmQgd2UgZG9uJ3Qga25vdyBhYm91dCB0aGVtIHlldCB3ZSBtdXN0IGJlIGxvYWRpbmdcclxuICAgICAgKiAgdGhlIHZpZXcgd2l0aG91dCB0aGUgbmV3IGhpZXJhcmNoeSBhcGlcclxuICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMucm9vdE5vZGUuaGFzQ2hpbGRyZW4gJiYgdGhpcy5yb290Tm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmdldEl0ZW1DaGlsZHJlbi5lbWl0KHRoaXMucm9vdE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgKi9cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhhbmRsZXIgZm9yIHRoZSB0b2dnbGUgYnV0dG9uICovXHJcbiAgcHVibGljIHRvZ2dsZUl0ZW1DbGlja2VkKGl0ZW06IEhpZXJhcmNoeUl0ZW0sIGV4cGFuZGVkOiBib29sZWFuKSB7XHJcbiAgICBpdGVtLmV4cGFuZGVkID0gZXhwYW5kZWQ7XHJcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudHJhY2tFdmVudCgndG9nZ2xlLXRyZWUtbm9kZScsIHtcclxuICAgICAgbmV3RXhwYW5kU3RhdGU6IGl0ZW0uZXhwYW5kZWQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCcsXHJcbiAgICAgIGl0ZW1EZXB0aDogYCR7aXRlbS5sZXZlbH1gLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGl0ZW0uZXhwYW5kZWQgJiYgaXRlbS5oYXNDaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBpdGVtLnN0YXR1cyA9IFwicGVuZGluZ1wiO1xyXG4gICAgICB0aGlzLmdldEl0ZW1DaGlsZHJlbi5lbWl0KGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIE1ldGhvZCBleHBvc2VkIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHRvIHNldCB0aGUgaXRlbXMgY2hpbGRyZW4gb25jZSB0aGV5IGFyZSBhdmFpbGFibGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0SXRlbUNoaWxkcmVuKHBhcmVudEl0ZW06IEhpZXJhcmNoeUl0ZW0sIGl0ZW1zOiBBcnJheTxIaWVyYXJjaHlJdGVtPik6IHZvaWQge1xyXG4gICAgcGFyZW50SXRlbS5jaGlsZHJlbiA9IGl0ZW1zO1xyXG4gICAgcGFyZW50SXRlbS5zdGF0dXMgPSBcImhhc0RhdGFcIjtcclxuICB9XHJcblxyXG4gIC8qKiBNZXRob2QgZXhwb3NlZCB0byB0aGUgcGFyZW50IGNvbXBvbmVudCB0byBpbmRpY2F0ZSB0aGF0IHNvbWV0aGluZyBoYXBwZW5lZCBvbiB0aGVcclxuICAgKiAgaXRlbSB0aGF0IGNhdXNlZCBhbiBlcnJvciwgY291bGQgYmUgcmV0cmlldmluZyBjaGlsZHJlblxyXG4gICovXHJcbiAgcHVibGljIHNldEl0ZW1FcnJvcihwYXJlbnRJdGVtOiBIaWVyYXJjaHlJdGVtKTogdm9pZCB7XHJcbiAgICBwYXJlbnRJdGVtLnN0YXR1cyA9IFwiZXJyb3JcIjtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,58 @@
1
+ export var HierarchyMocks;
2
+ (function (HierarchyMocks) {
3
+ HierarchyMocks.mockRoot = () => ({
4
+ id: "1",
5
+ level: 0,
6
+ hasChildren: true,
7
+ children: [],
8
+ label: ''
9
+ });
10
+ HierarchyMocks.bldgWithChildren = () => {
11
+ return {
12
+ placeId: 3, parentId: 0, placeTypeId: 2, placeCode: 'HASCHILDREN_BLDG', placeInfo: 'A Cool Bldg Has Children',
13
+ hasChildren: true, placeChildren: [], meterChildren: [], hasActiveChildren: true
14
+ };
15
+ };
16
+ HierarchyMocks.bldgWithChildrenHierarchyItem = () => ({
17
+ id: HierarchyMocks.bldgWithChildren().placeId.toString(),
18
+ icon: 'icon-building', label: `${HierarchyMocks.bldgWithChildren().placeInfo} [${HierarchyMocks.bldgWithChildren().placeCode}]`,
19
+ children: [], hasChildren: true, level: 1, selectable: true, topLevel: false
20
+ });
21
+ HierarchyMocks.orgWithChildren = () => {
22
+ return {
23
+ placeId: 1, parentId: 0, placeTypeId: 1, placeCode: 'HASCHILDREN_ORG', placeInfo: 'A Org Has Children',
24
+ hasChildren: true, placeChildren: [], meterChildren: [], hasActiveChildren: true
25
+ };
26
+ };
27
+ HierarchyMocks.orgWithChildrenHierarchyItem = () => ({
28
+ id: HierarchyMocks.orgWithChildren().placeId.toString(),
29
+ icon: 'icon-organization', label: `${HierarchyMocks.orgWithChildren().placeInfo} [${HierarchyMocks.orgWithChildren().placeCode}]`,
30
+ children: [], hasChildren: true, level: 1, selectable: true, topLevel: true
31
+ });
32
+ HierarchyMocks.orgWithoutChildren = () => {
33
+ return {
34
+ placeId: 2, parentId: 0, placeTypeId: 1, placeCode: 'NOCHILDREN_ORG', placeInfo: 'No Children Org',
35
+ hasChildren: false, placeChildren: [], meterChildren: [], hasActiveChildren: false
36
+ };
37
+ };
38
+ HierarchyMocks.orgWithoutChildrenHierarchyItem = () => ({
39
+ id: HierarchyMocks.orgWithoutChildren().placeId.toString(),
40
+ icon: 'icon-organization', label: `${HierarchyMocks.orgWithoutChildren().placeInfo} [${HierarchyMocks.orgWithoutChildren().placeCode}]`,
41
+ children: [], hasChildren: false, level: 1, selectable: true, topLevel: true
42
+ });
43
+ HierarchyMocks.bldgWithoutChildren = () => {
44
+ return {
45
+ placeId: 4, parentId: 0, placeTypeId: 2, placeCode: 'NOCHILDREN_BLDG', placeInfo: 'Zzz No Children Bldg',
46
+ hasChildren: false, placeChildren: [], meterChildren: [], hasActiveChildren: false
47
+ };
48
+ };
49
+ HierarchyMocks.bldgWithoutChildrenHierarchyItem = () => ({
50
+ id: HierarchyMocks.bldgWithoutChildren().placeId.toString(),
51
+ icon: 'icon-building', label: `${HierarchyMocks.bldgWithoutChildren().placeInfo} [${HierarchyMocks.bldgWithoutChildren().placeCode}]`,
52
+ children: [], hasChildren: false, level: 1, selectable: true, topLevel: false
53
+ });
54
+ HierarchyMocks.sortedHierarchyPlaces = () => [
55
+ HierarchyMocks.bldgWithChildrenHierarchyItem(), HierarchyMocks.orgWithChildrenHierarchyItem(), HierarchyMocks.orgWithoutChildrenHierarchyItem(), HierarchyMocks.bldgWithoutChildrenHierarchyItem()
56
+ ];
57
+ })(HierarchyMocks || (HierarchyMocks = {}));
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LW1vY2tzLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9oaWVyYXJjaHkvaGllcmFyY2h5LW1vY2tzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxLQUFXLGNBQWMsQ0FvRDlCO0FBcERELFdBQWlCLGNBQWM7SUFDaEIsdUJBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFlO1FBQzNDLEVBQUUsRUFBRSxHQUFHO1FBQ1AsS0FBSyxFQUFFLENBQUM7UUFDUixXQUFXLEVBQUUsSUFBSTtRQUNqQixRQUFRLEVBQUUsRUFBRTtRQUNaLEtBQUssRUFBRSxFQUFFO0tBQ1YsQ0FBQSxDQUFDO0lBRVcsK0JBQWdCLEdBQUcsR0FBRyxFQUFFO1FBQUcsT0FBTztZQUM3QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLDBCQUEwQjtZQUM3RyxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJO1NBQ2pGLENBQUE7SUFBQSxDQUFDLENBQUM7SUFFVSw0Q0FBNkIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFlO1FBQ2hFLEVBQUUsRUFBRSxlQUFBLGdCQUFnQixFQUFFLENBQUMsT0FBUSxDQUFDLFFBQVEsRUFBRTtRQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsZUFBQSxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsS0FBSyxlQUFBLGdCQUFnQixFQUFFLENBQUMsU0FBUyxHQUFHO1FBQzdJLFFBQVEsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFF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LEVBQUUsRUFBRSxlQUFBLDRCQUE0QixFQUFFLEVBQUUsZUFBQSwrQkFBK0IsRUFBRSxFQUFFLGVBQUEsZ0NBQWdDLEVBQUU7S0FDdkksQ0FBQztBQUNKLENBQUMsRUFwRGdCLGNBQWMsS0FBZCxjQUFjLFFBb0Q5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhpZXJhcmNoeUl0ZW0gfSBmcm9tICcuL2hpZXJhcmNoeS1iYXNlJztcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgSGllcmFyY2h5TW9ja3Mge1xyXG4gIGV4cG9ydCBjb25zdCBtb2NrUm9vdCA9ICgpID0+IDxIaWVyYXJjaHlJdGVtPntcclxuICAgIGlkOiBcIjFcIixcclxuICAgIGxldmVsOiAwLFxyXG4gICAgaGFzQ2hpbGRyZW46IHRydWUsXHJcbiAgICBjaGlsZHJlbjogW10sXHJcbiAgICBsYWJlbDogJydcclxuICB9O1xyXG5cclxuICBleHBvcnQgY29uc3QgYmxkZ1dpdGhDaGlsZHJlbiA9ICgpID0+IHsgcmV0dXJuIHtcclxuICAgIHBsYWNlSWQ6IDMsIHBhcmVudElkOiAwLCBwbGFjZVR5cGVJZDogMiwgcGxhY2VDb2RlOiAnSEFTQ0hJTERSRU5fQkxERycsIHBsYWNlSW5mbzogJ0EgQ29vbCBCbGRnIEhhcyBDaGlsZHJlbicsXHJcbiAgICBoYXNDaGlsZHJlbjogdHJ1ZSwgcGxhY2VDaGlsZHJlbjogW10sIG1ldGVyQ2hpbGRyZW46IFtdLCBoYXNBY3RpdmVDaGlsZHJlbjogdHJ1ZVxyXG4gIH19O1xyXG5cclxuICBleHBvcnQgY29uc3QgYmxkZ1dpdGhDaGlsZHJlbkhpZXJhcmNoeUl0ZW0gPSAoKSA9PiA8SGllcmFyY2h5SXRlbT57XHJcbiAgICBpZDogYmxkZ1dpdGhDaGlsZHJlbigpLnBsYWNlSWQhLnRvU3RyaW5nKCksIGljb246ICdpY29uLWJ1aWxkaW5nJywgbGFiZWw6IGAke2JsZGdXaXRoQ2hpbGRyZW4oKS5wbGFjZUluZm99IFske2JsZGdXaXRoQ2hpbGRyZW4oKS5wbGFjZUNvZGV9XWAsXHJcbiAgICBjaGlsZHJlbjogW10sIGhhc0NoaWxkcmVuOiB0cnVlLCBsZXZlbDogMSwgc2VsZWN0YWJsZTogdHJ1ZSwgdG9wTGV2ZWw6IGZhbHNlXHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0IGNvbnN0IG9yZ1dpdGhDaGlsZHJlbiA9ICgpID0+IHsgcmV0dXJuIHtcclxuICAgIHBsYWNlSWQ6IDEsIHBhcmVudElkOiAwLCBwbGFjZVR5cGVJZDogMSwgcGxhY2VDb2RlOiAnSEFTQ0hJTERSRU5fT1JHJywgcGxhY2VJbmZvOiAnQSBPcmcgSGFzIENoaWxkcmVuJyxcclxuICAgIGhhc0NoaWxkcmVuOiB0cnVlLCBwbGFjZUNoaWxkcmVuOiBbXSwgbWV0ZXJDaGlsZHJlbjogW10sIGhhc0FjdGl2ZUNoaWxkcmVuOiB0cnVlXHJcbiAgfX07XHJcblxyXG4gIGV4cG9ydCBjb25zdCBvcmdXaXRoQ2hpbGRyZW5IaWVyYXJjaHlJdGVtID0gKCkgPT4gPEhpZXJhcmNoeUl0ZW0+e1xyXG4gICAgaWQ6IG9yZ1dpdGhDaGlsZHJlbigpLnBsYWNlSWQhLnRvU3RyaW5nKCksIGljb246ICdpY29uLW9yZ2FuaXphdGlvbicsIGxhYmVsOiBgJHtvcmdXaXRoQ2hpbGRyZW4oKS5wbGFjZUluZm99IFske29yZ1dpdGhDaGlsZHJlbigpLnBsYWNlQ29kZX1dYCxcclxuICAgIGNoaWxkcmVuOiBbXSwgaGFzQ2hpbGRyZW46IHRydWUsIGxldmVsOiAxLCBzZWxlY3RhYmxlOiB0cnVlLCB0b3BMZXZlbDogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGV4cG9ydCBjb25zdCBvcmdXaXRob3V0Q2hpbGRyZW4gPSAoKSA9PiB7IHJldHVybiB7XHJcbiAgICBwbGFjZUlkOiAyLCBwYXJlbnRJZDogMCwgcGxhY2VUeXBlSWQ6IDEsIHBsYWNlQ29kZTogJ05PQ0hJTERSRU5fT1JHJywgcGxhY2VJbmZvOiAnTm8gQ2hpbGRyZW4gT3JnJyxcclxuICAgIGhhc0NoaWxkcmVuOiBmYWxzZSwgcGxhY2VDaGlsZHJlbjogW10sIG1ldGVyQ2hpbGRyZW46IFtdLCBoYXNBY3RpdmVDaGlsZHJlbjogZmFsc2VcclxuICB9fTtcclxuXHJcbiAgZXhwb3J0IGNvbnN0IG9yZ1dpdGhvdXRDaGlsZHJlbkhpZXJhcmNoeUl0ZW0gPSAoKSA9PiA8SGllcmFyY2h5SXRlbT57XHJcbiAgICBpZDogb3JnV2l0aG91dENoaWxkcmVuKCkucGxhY2VJZCEudG9TdHJpbmcoKSwgaWNvbjogJ2ljb24tb3JnYW5pemF0aW9uJywgbGFiZWw6IGAke29yZ1dpdGhvdXRDaGlsZHJlbigpLnBsYWNlSW5mb30gWyR7b3JnV2l0aG91dENoaWxkcmVuKCkucGxhY2VDb2RlfV1gLFxyXG4gICAgY2hpbGRyZW46IFtdLCBoYXNDaGlsZHJlbjogZmFsc2UsIGxldmVsOiAxLCBzZWxlY3RhYmxlOiB0cnVlLCB0b3BMZXZlbDogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGV4cG9ydCBjb25zdCBibGRnV2l0aG91dENoaWxkcmVuID0gKCkgPT4geyByZXR1cm4ge1xyXG4gICAgcGxhY2VJZDogNCwgcGFyZW50SWQ6IDAsIHBsYWNlVHlwZUlkOiAyLCBwbGFjZUNvZGU6ICdOT0NISUxEUkVOX0JMREcnLCBwbGFjZUluZm86ICdaenogTm8gQ2hpbGRyZW4gQmxkZycsXHJcbiAgICBoYXNDaGlsZHJlbjogZmFsc2UsIHBsYWNlQ2hpbGRyZW46IFtdLCBtZXRlckNoaWxkcmVuOiBbXSwgaGFzQWN0aXZlQ2hpbGRyZW46IGZhbHNlXHJcbiAgfX07XHJcblxyXG4gIGV4cG9ydCBjb25zdCBibGRnV2l0aG91dENoaWxkcmVuSGllcmFyY2h5SXRlbSA9ICgpID0+IDxIaWVyYXJjaHlJdGVtPntcclxuICAgIGlkOiBibGRnV2l0aG91dENoaWxkcmVuKCkucGxhY2VJZCEudG9TdHJpbmcoKSwgaWNvbjogJ2ljb24tYnVpbGRpbmcnLCBsYWJlbDogYCR7YmxkZ1dpdGhvdXRDaGlsZHJlbigpLnBsYWNlSW5mb30gWyR7YmxkZ1dpdGhvdXRDaGlsZHJlbigpLnBsYWNlQ29kZX1dYCxcclxuICAgIGNoaWxkcmVuOiBbXSwgaGFzQ2hpbGRyZW46IGZhbHNlLCBsZXZlbDogMSwgc2VsZWN0YWJsZTogdHJ1ZSwgdG9wTGV2ZWw6IGZhbHNlXHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0IGNvbnN0IHNvcnRlZEhpZXJhcmNoeVBsYWNlcyA9ICgpID0+IDxBcnJheTxIaWVyYXJjaHlJdGVtPj5bXHJcbiAgICBibGRnV2l0aENoaWxkcmVuSGllcmFyY2h5SXRlbSgpLCBvcmdXaXRoQ2hpbGRyZW5IaWVyYXJjaHlJdGVtKCksIG9yZ1dpdGhvdXRDaGlsZHJlbkhpZXJhcmNoeUl0ZW0oKSwgYmxkZ1dpdGhvdXRDaGlsZHJlbkhpZXJhcmNoeUl0ZW0oKVxyXG4gIF07XHJcbn1cclxuIl19
@@ -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==