@acorex/components 7.5.1 → 7.8.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 (180) hide show
  1. package/badge/lib/badge.component.d.ts +3 -3
  2. package/button/lib/button-item.component.d.ts +3 -1
  3. package/calendar/lib/calendar.component.d.ts +6 -4
  4. package/chips/lib/chips.component.d.ts +1 -1
  5. package/collapse/lib/collapse.component.d.ts +15 -2
  6. package/collapse/lib/collapse.module.d.ts +2 -1
  7. package/common/index.d.ts +1 -0
  8. package/common/lib/classes/datalist.class.d.ts +0 -31
  9. package/common/lib/classes/datasource.class.d.ts +55 -0
  10. package/common/lib/classes/styles.class.d.ts +1 -1
  11. package/common/lib/components/interactive-component.class.d.ts +1 -7
  12. package/common/lib/components/selection-base.component.class.d.ts +4 -6
  13. package/common/lib/directives/ripple.directive.d.ts +2 -1
  14. package/datetime-box/lib/datetime-box.component.d.ts +2 -1
  15. package/datetime-input/lib/datetime-input.component.d.ts +2 -1
  16. package/esm2022/action-sheet/lib/action-sheet.component.mjs +2 -2
  17. package/esm2022/alert/lib/alert.component.mjs +4 -5
  18. package/esm2022/avatar/lib/avatar.component.mjs +4 -4
  19. package/esm2022/badge/lib/badge.component.mjs +6 -6
  20. package/esm2022/button/lib/button-item.component.mjs +12 -3
  21. package/esm2022/button/lib/button.component.mjs +2 -2
  22. package/esm2022/button-group/lib/button-group.component.mjs +2 -2
  23. package/esm2022/calendar/lib/calendar.class.mjs +1 -58
  24. package/esm2022/calendar/lib/calendar.component.mjs +27 -16
  25. package/esm2022/chips/lib/chips.component.mjs +4 -4
  26. package/esm2022/collapse/lib/collapse-group.component.mjs +8 -4
  27. package/esm2022/collapse/lib/collapse.component.mjs +63 -15
  28. package/esm2022/collapse/lib/collapse.module.mjs +5 -4
  29. package/esm2022/color-box/lib/color-box.module.mjs +1 -1
  30. package/esm2022/common/index.mjs +2 -1
  31. package/esm2022/common/lib/classes/datalist.class.mjs +2 -41
  32. package/esm2022/common/lib/classes/datasource.class.mjs +106 -0
  33. package/esm2022/common/lib/classes/styles.class.mjs +1 -1
  34. package/esm2022/common/lib/components/interactive-component.class.mjs +13 -13
  35. package/esm2022/common/lib/components/selection-base.component.class.mjs +55 -27
  36. package/esm2022/common/lib/directives/ripple.directive.mjs +14 -8
  37. package/esm2022/datetime-box/lib/datetime-box.component.mjs +6 -3
  38. package/esm2022/datetime-input/lib/datetime-input.component.mjs +11 -4
  39. package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +3 -3
  40. package/esm2022/list/lib/list.component.mjs +34 -60
  41. package/esm2022/menu/index.mjs +1 -2
  42. package/esm2022/menu/lib/class/root-menu.class.mjs +1 -1
  43. package/esm2022/menu/lib/menu-item/menu-item.component.mjs +60 -18
  44. package/esm2022/menu/lib/menu.component.mjs +37 -342
  45. package/esm2022/menu/lib/menu.module.mjs +3 -4
  46. package/esm2022/notification/lib/notification.component.mjs +2 -2
  47. package/esm2022/otp/lib/otp.component.mjs +4 -3
  48. package/esm2022/otp/lib/otp.module.mjs +4 -3
  49. package/esm2022/picker/lib/picker.component.mjs +2 -2
  50. package/esm2022/progress-bar/lib/progress-bar.component.mjs +2 -2
  51. package/esm2022/range-slider/lib/range-slider.component.mjs +2 -2
  52. package/esm2022/routing-progress/lib/routing-progress.component.mjs +3 -3
  53. package/esm2022/search-box/lib/search-box.component.mjs +5 -4
  54. package/esm2022/select-box/index.mjs +2 -2
  55. package/esm2022/select-box/lib/select-box.component.mjs +168 -308
  56. package/esm2022/select-box/lib/select-box.module.mjs +5 -6
  57. package/esm2022/selection-list/lib/selection-list.component.mjs +11 -1
  58. package/esm2022/side-menu/acorex-components-side-menu.mjs +5 -0
  59. package/esm2022/side-menu/index.mjs +4 -0
  60. package/esm2022/side-menu/lib/side-menu-item/side-menu-item.compoent.mjs +116 -0
  61. package/esm2022/side-menu/lib/side-menu.component.mjs +15 -0
  62. package/esm2022/side-menu/lib/side-menu.module.mjs +23 -0
  63. package/esm2022/skeleton/acorex-components-skeleton.mjs +5 -0
  64. package/esm2022/skeleton/index.mjs +3 -0
  65. package/esm2022/skeleton/lib/skeleton.component.mjs +24 -0
  66. package/esm2022/skeleton/lib/skeleton.module.mjs +18 -0
  67. package/esm2022/tabs/lib/tab-item.component.mjs +9 -2
  68. package/esm2022/tag/lib/tag.component.mjs +6 -12
  69. package/esm2022/toast/lib/toast.component.mjs +3 -3
  70. package/fesm2022/acorex-components-action-sheet.mjs +2 -2
  71. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  72. package/fesm2022/acorex-components-alert.mjs +3 -4
  73. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  74. package/fesm2022/acorex-components-avatar.mjs +3 -3
  75. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  76. package/fesm2022/acorex-components-badge.mjs +5 -5
  77. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  78. package/fesm2022/acorex-components-button-group.mjs +2 -2
  79. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  80. package/fesm2022/acorex-components-button.mjs +13 -4
  81. package/fesm2022/acorex-components-button.mjs.map +1 -1
  82. package/fesm2022/acorex-components-calendar.mjs +27 -73
  83. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  84. package/fesm2022/acorex-components-chips.mjs +3 -3
  85. package/fesm2022/acorex-components-chips.mjs.map +1 -1
  86. package/fesm2022/acorex-components-collapse.mjs +74 -21
  87. package/fesm2022/acorex-components-collapse.mjs.map +1 -1
  88. package/fesm2022/acorex-components-color-box.mjs.map +1 -1
  89. package/fesm2022/acorex-components-common.mjs +161 -62
  90. package/fesm2022/acorex-components-common.mjs.map +1 -1
  91. package/fesm2022/acorex-components-datetime-box.mjs +5 -2
  92. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  93. package/fesm2022/acorex-components-datetime-input.mjs +10 -3
  94. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  95. package/fesm2022/acorex-components-datetime-picker.mjs +2 -2
  96. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  97. package/fesm2022/acorex-components-list.mjs +33 -59
  98. package/fesm2022/acorex-components-list.mjs.map +1 -1
  99. package/fesm2022/acorex-components-menu.mjs +78 -381
  100. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  101. package/fesm2022/acorex-components-notification.mjs +2 -2
  102. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  103. package/fesm2022/acorex-components-otp.mjs +6 -4
  104. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  105. package/fesm2022/acorex-components-picker.mjs +2 -2
  106. package/fesm2022/acorex-components-picker.mjs.map +1 -1
  107. package/fesm2022/acorex-components-progress-bar.mjs +2 -2
  108. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  109. package/fesm2022/acorex-components-range-slider.mjs +2 -2
  110. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  111. package/fesm2022/acorex-components-routing-progress.mjs +2 -2
  112. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
  113. package/fesm2022/acorex-components-search-box.mjs +4 -4
  114. package/fesm2022/acorex-components-search-box.mjs.map +1 -1
  115. package/fesm2022/acorex-components-select-box.mjs +96 -417
  116. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  117. package/fesm2022/acorex-components-selection-list.mjs +10 -0
  118. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  119. package/fesm2022/acorex-components-side-menu.mjs +153 -0
  120. package/fesm2022/acorex-components-side-menu.mjs.map +1 -0
  121. package/fesm2022/acorex-components-skeleton.mjs +46 -0
  122. package/fesm2022/acorex-components-skeleton.mjs.map +1 -0
  123. package/fesm2022/acorex-components-tabs.mjs +8 -1
  124. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  125. package/fesm2022/acorex-components-tag.mjs +5 -11
  126. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  127. package/fesm2022/acorex-components-toast.mjs +2 -2
  128. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  129. package/list/lib/list.component.d.ts +11 -23
  130. package/menu/index.d.ts +0 -1
  131. package/menu/lib/class/root-menu.class.d.ts +2 -0
  132. package/menu/lib/menu-item/menu-item.component.d.ts +19 -6
  133. package/menu/lib/menu.component.d.ts +10 -40
  134. package/menu/lib/menu.module.d.ts +7 -8
  135. package/mixin/lib/base-components.class.d.ts +2 -2
  136. package/mixin/lib/base-menu-mixin.class.d.ts +5 -5
  137. package/mixin/lib/button-mixin.class.d.ts +2 -2
  138. package/mixin/lib/clickable-mixin.class.d.ts +2 -2
  139. package/mixin/lib/color-look-mixing.class.d.ts +2 -2
  140. package/mixin/lib/datalist-component.class.d.ts +10 -10
  141. package/mixin/lib/dropdown-mixin.class.d.ts +2 -2
  142. package/mixin/lib/interactive-mixin.class.d.ts +4 -4
  143. package/mixin/lib/mixin.class.d.ts +61 -61
  144. package/mixin/lib/page-component.class.d.ts +2 -2
  145. package/mixin/lib/selection-component.class.d.ts +2 -2
  146. package/mixin/lib/sizable-mixin.class.d.ts +2 -2
  147. package/mixin/lib/textbox-mixin.class.d.ts +2 -2
  148. package/mixin/lib/value-mixin.class.d.ts +8 -8
  149. package/otp/lib/otp.module.d.ts +2 -1
  150. package/package.json +13 -7
  151. package/search-box/lib/search-box.component.d.ts +2 -1
  152. package/select-box/index.d.ts +1 -1
  153. package/select-box/lib/select-box.component.d.ts +37 -59
  154. package/select-box/lib/select-box.module.d.ts +14 -15
  155. package/selection-list/lib/selection-list.component.d.ts +3 -0
  156. package/side-menu/README.md +3 -0
  157. package/side-menu/index.d.ts +3 -0
  158. package/side-menu/lib/side-menu-item/side-menu-item.compoent.d.ts +37 -0
  159. package/side-menu/lib/side-menu.component.d.ts +8 -0
  160. package/side-menu/lib/side-menu.module.d.ts +10 -0
  161. package/skeleton/README.md +3 -0
  162. package/skeleton/index.d.ts +2 -0
  163. package/skeleton/lib/skeleton.component.d.ts +8 -0
  164. package/skeleton/lib/skeleton.module.d.ts +8 -0
  165. package/tabs/lib/tab-item.component.d.ts +2 -1
  166. package/tag/lib/tag.component.d.ts +3 -4
  167. package/context-menu/README.md +0 -3
  168. package/context-menu/index.d.ts +0 -2
  169. package/context-menu/lib/context-menu.component.d.ts +0 -34
  170. package/context-menu/lib/context-menu.module.d.ts +0 -13
  171. package/esm2022/context-menu/acorex-components-context-menu.mjs +0 -5
  172. package/esm2022/context-menu/index.mjs +0 -3
  173. package/esm2022/context-menu/lib/context-menu.component.mjs +0 -262
  174. package/esm2022/context-menu/lib/context-menu.module.mjs +0 -26
  175. package/esm2022/menu/lib/menu2.component.mjs +0 -45
  176. package/esm2022/select-box/lib/select-box2.component.mjs +0 -191
  177. package/fesm2022/acorex-components-context-menu.mjs +0 -290
  178. package/fesm2022/acorex-components-context-menu.mjs.map +0 -1
  179. package/menu/lib/menu2.component.d.ts +0 -12
  180. package/select-box/lib/select-box2.component.d.ts +0 -44
@@ -1,4 +1,4 @@
1
- import { AXComponent, AXFocusableComponent, AXValuableComponent, MXSelectionValueComponent, } from '@acorex/components/common';
1
+ import { AXComponent, AXDateSource, AXFocusableComponent, AXValuableComponent, MXSelectionValueComponent, convertArrayToDataSource, } from '@acorex/components/common';
2
2
  import { DataSource } from '@angular/cdk/collections';
3
3
  import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
4
4
  import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, Output, TemplateRef, ViewChild, ViewEncapsulation, forwardRef, } from '@angular/core';
@@ -8,28 +8,23 @@ import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/common";
9
9
  import * as i2 from "@angular/cdk/scrolling";
10
10
  export class AXListDataSource extends DataSource {
11
- get cachedItems() {
12
- return this._cachedData || [];
13
- }
14
11
  /**
15
12
  * @ignore
16
13
  */
17
14
  constructor(config) {
18
15
  super();
19
16
  this.config = config;
20
- this.pageSize = 20;
21
17
  this.debounceTime = 300;
22
- this._cachedData = new Array(this.config.pageSize);
23
- this.fetchedPages = new Set();
24
18
  this.subscription = new Subscription();
25
- this.initiated = false;
26
- this.dataStream = new BehaviorSubject(this._cachedData);
27
- this.loadingState = new BehaviorSubject(true);
28
19
  this.source = config.source;
29
- if (config.pageSize)
30
- this.pageSize = config.pageSize;
31
20
  if (config.debounceTime)
32
21
  this.debounceTime = config.debounceTime;
22
+ //
23
+ console.log(this.config.source.cachedItems);
24
+ this.dataStream = new BehaviorSubject(this.config.source.cachedItems);
25
+ this.source.onChanged.subscribe((data) => {
26
+ this.dataStream.next(data.cachedItems);
27
+ });
33
28
  }
34
29
  connect(collectionViewer) {
35
30
  this.subscription.add(collectionViewer.viewChange
@@ -39,7 +34,7 @@ export class AXListDataSource extends DataSource {
39
34
  const startPage = this.getPageForIndex(range.start);
40
35
  const endPage = this.getPageForIndex(range.end - 1);
41
36
  for (let i = startPage; i <= endPage; i++) {
42
- this.fetchPage(i);
37
+ this.source.setPage(i);
43
38
  }
44
39
  }));
45
40
  return this.dataStream;
@@ -48,43 +43,13 @@ export class AXListDataSource extends DataSource {
48
43
  this.subscription.unsubscribe();
49
44
  }
50
45
  getPageForIndex(index) {
51
- return Math.floor(index / this.pageSize);
52
- }
53
- fetchPage(page) {
54
- if (this.fetchedPages.has(page)) {
55
- return;
56
- }
57
- this.loadingState.next(true);
58
- this.fetchedPages.add(page);
59
- if (Array.isArray(this.source)) {
60
- this._cachedData = this.source;
61
- this.dataStream.next(this._cachedData);
62
- this.loadingState.next(false);
63
- }
64
- else if (typeof this.source == 'function') {
65
- const promise = this.source({
66
- take: this.pageSize,
67
- skip: this.pageSize * page,
68
- });
69
- promise
70
- .then((result) => {
71
- if (!this.initiated) {
72
- this._cachedData = new Array(result.total);
73
- this.initiated = true;
74
- }
75
- this._cachedData.splice(page * this.pageSize, this.pageSize, ...result.items);
76
- this.dataStream.next(this._cachedData);
77
- })
78
- .finally(() => {
79
- this.loadingState.next(false);
80
- });
81
- }
46
+ return Math.floor(index / this.source.config.pageSize);
82
47
  }
83
48
  }
84
49
  export class AXListComponent extends MXSelectionValueComponent {
85
50
  constructor() {
86
51
  super(...arguments);
87
- this.source = [];
52
+ this.dataSource = convertArrayToDataSource([]);
88
53
  this.itemHeight = 40;
89
54
  this.onDataLoad = new EventEmitter();
90
55
  this.onScrolledIndexChanged = new EventEmitter();
@@ -99,15 +64,15 @@ export class AXListComponent extends MXSelectionValueComponent {
99
64
  }
100
65
  ngOnInit() {
101
66
  super.ngOnInit();
102
- this.dataSource = new AXListDataSource({
103
- source: this.source,
67
+ this.listDataSource = new AXListDataSource({
68
+ source: this.dataSource,
104
69
  });
105
- this.dataSource.loadingState.subscribe((data) => {
70
+ this.listDataSource.source.onLoadingChanged.subscribe((data) => {
106
71
  this.isLoading = data;
107
72
  });
108
- this.dataSource.dataStream.subscribe((data) => {
109
- this.hasItems = data.length > 0;
110
- this.onDataLoad.emit(data);
73
+ this.listDataSource.source.onChanged.subscribe((data) => {
74
+ this.hasItems = data.totalCount > 0;
75
+ this.onDataLoad.emit(data.items);
111
76
  setTimeout(() => {
112
77
  this.render();
113
78
  }, 100);
@@ -162,12 +127,11 @@ export class AXListComponent extends MXSelectionValueComponent {
162
127
  * @ignore
163
128
  */
164
129
  get __hostClass() {
165
- const _class = `ax-default`;
130
+ const _class = `ax-solid`;
166
131
  return this.itemTemplate ? '' : _class;
167
132
  }
168
133
  getItemByKey(key) {
169
- const cachedItem = this.dataSource.cachedItems.find((c) => c && c[this.valueField] == key);
170
- return cachedItem || { [this.valueField]: key, [this.textField]: key };
134
+ return this.dataSource.find(key);
171
135
  }
172
136
  render() {
173
137
  this.viewport.checkViewportSize();
@@ -192,7 +156,7 @@ export class AXListComponent extends MXSelectionValueComponent {
192
156
  }
193
157
  }
194
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
195
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.9", type: AXListComponent, selector: "ax-list", inputs: { id: "id", name: "name", disabled: "disabled", readonly: "readonly", valueField: "valueField", textField: "textField", disabledField: "disabledField", multiple: "multiple", source: "source", itemHeight: "itemHeight", itemTemplate: "itemTemplate", emptyTemplate: "emptyTemplate", loadingTemplate: "loadingTemplate", checkbox: "checkbox" }, outputs: { onValueChanged: "onValueChanged", disabledChange: "disabledChange", readOnlyChange: "readOnlyChange", onBlur: "onBlur", onFocus: "onFocus", onDataLoad: "onDataLoad", onScrolledIndexChanged: "onScrolledIndexChanged" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, properties: { "class": "this.__hostClass" } }, providers: [
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.9", type: AXListComponent, selector: "ax-list", inputs: { id: "id", name: "name", disabled: "disabled", readonly: "readonly", valueField: "valueField", textField: "textField", disabledField: "disabledField", multiple: "multiple", selectionMode: "selectionMode", dataSource: "dataSource", itemHeight: "itemHeight", itemTemplate: "itemTemplate", emptyTemplate: "emptyTemplate", loadingTemplate: "loadingTemplate", checkbox: "checkbox" }, outputs: { onValueChanged: "onValueChanged", disabledChange: "disabledChange", readOnlyChange: "readOnlyChange", onBlur: "onBlur", onFocus: "onFocus", onDataLoad: "onDataLoad", onScrolledIndexChanged: "onScrolledIndexChanged" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, properties: { "class": "this.__hostClass" } }, providers: [
196
160
  { provide: AXComponent, useExisting: AXListComponent },
197
161
  { provide: AXFocusableComponent, useExisting: AXListComponent },
198
162
  { provide: AXValuableComponent, useExisting: AXListComponent },
@@ -201,11 +165,21 @@ export class AXListComponent extends MXSelectionValueComponent {
201
165
  useExisting: forwardRef(() => AXListComponent),
202
166
  multi: true,
203
167
  },
204
- ], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"list-container\" cdkVirtualScrollingElement>\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.--item-height]=\"itemHeight+'px'\"\n class=\"ax-list-items-container\" (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\">\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of dataSource;let i = index; trackBy: trackByIdx\">\n <ng-container *ngIf=\"item;else loadingTpl\">\n <li [class.ax-state-selected]=\"isItemSelected(item)\" class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\" [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\" [attr.data-id]=\"getValue(item)\">\n <!-- Custom Item Template -->\n <ng-container *ngIf=\"itemTemplate;else defaultItemTpl\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context: { $implicit: { data:item } }\">\n </ng-container>\n </ng-container>\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n <ng-container *ngIf=\"item;else loadingTpl\">\n <div class=\"ax-label-container\">\n <input class=\"ax-checkbox\" *ngIf=\"multiple && checkbox\" type=\"checkbox\"\n [checked]=\"isItemSelected(item)\" [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\" />\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\">{{getDisplayText(item)}}</span>\n </div>\n <i class=\"ax-icon ax-icon-done ax-selected-icon\" *ngIf=\"isItemSelected(item) \"></i>\n </ng-container>\n </ng-template>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n <ng-container *ngIf=\"loadingTemplate;else defaultLoadingTpl\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\">\n </ng-container>\n </ng-container>\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>Loading...</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n<ng-container *ngIf=\"emptyTemplate && hasItems===false && isLoading===false\">\n <div class=\"empty-container\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </div>\n</ng-container>", styles: ["ax-list{width:100%;height:100%;display:block}ax-list .list-container{display:flex;flex-direction:column;height:100%}ax-list .empty-container{width:100%;min-height:var(--ax-size-default);display:flex;align-items:center;padding-inline:.75rem}ax-list.ax-default .cdk-virtual-scroll-viewport li{font-size:.875rem;padding-inline-start:.75rem;padding-inline-end:1rem;position:relative;height:var(--ax-size-default);display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;user-select:none;cursor:pointer}ax-list.ax-default .cdk-virtual-scroll-viewport li:focus,ax-list.ax-default .cdk-virtual-scroll-viewport li:focus-within,ax-list.ax-default .cdk-virtual-scroll-viewport li:focus-visible{outline:transparent;background-color:rgba(var(--ax-color-primary-100))}ax-list.ax-default .cdk-virtual-scroll-viewport li .ax-label-container{display:flex;align-items:center}ax-list.ax-default .cdk-virtual-scroll-viewport li .ax-checkbox-label{margin-inline-start:.5rem}ax-list.ax-default .cdk-virtual-scroll-viewport li .ax-selected-icon{color:rgba(var(--ax-color-primary-500));font-size:1.5rem}ax-list.ax-default .cdk-virtual-scroll-viewport li.ax-state-selected:not(ax-list.ax-default .cdk-virtual-scroll-viewport li:focus,ax-list.ax-default .cdk-virtual-scroll-viewport li:focus-within,ax-list.ax-default .cdk-virtual-scroll-viewport li:focus-visible){background-color:rgba(var(--ax-color-on-surface))!important;color:rgba(var(--ax-color-on-surface-fore))!important}ax-list.ax-default .cdk-virtual-scroll-viewport li.ax-state-disabled{cursor:not-allowed;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i2.CdkVirtualScrollableElement, selector: "[cdkVirtualScrollingElement]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
168
+ ], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"list-container\" cdkVirtualScrollingElement>\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.--item-height]=\"itemHeight+'px'\"\n class=\"ax-list-items-container\" (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\">\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of listDataSource;let i = index; trackBy: trackByIdx\">\n <ng-container *ngIf=\"item;else loadingTpl\">\n <li [class.ax-state-selected]=\"isItemSelected(item)\" class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\" [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\" [attr.data-id]=\"getValue(item)\">\n <!-- Custom Item Template -->\n <ng-container *ngIf=\"itemTemplate;else defaultItemTpl\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context: { $implicit: { data:item } }\">\n </ng-container>\n </ng-container>\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n <ng-container *ngIf=\"item;else loadingTpl\">\n <div class=\"ax-label-container\">\n <input class=\"ax-checkbox\" *ngIf=\"multiple && checkbox\" type=\"checkbox\"\n [checked]=\"isItemSelected(item)\" [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\" />\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\">{{getDisplayText(item)}}</span>\n </div>\n <i class=\"ax-icon ax-icon-done ax-selected-icon\" *ngIf=\"isItemSelected(item) \"></i>\n </ng-container>\n </ng-template>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n <ng-container *ngIf=\"loadingTemplate;else defaultLoadingTpl\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\">\n </ng-container>\n </ng-container>\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>Loading...</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n<ng-container *ngIf=\"emptyTemplate && hasItems===false && isLoading===false\">\n <div class=\"empty-container\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </div>\n</ng-container>", styles: [".ax-dark ax-list.ax-solid .cdk-virtual-scroll-viewport li:focus,.ax-dark ax-list.ax-solid .cdk-virtual-scroll-viewport li:focus-within,.ax-dark ax-list.ax-solid .cdk-virtual-scroll-viewport li:focus-visible{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-lighten))}ax-list{width:100%;height:100%;display:block;font-style:.875rem}ax-list .list-container{display:flex;flex-direction:column;height:100%}ax-list .empty-container{width:100%;min-height:var(--ax-size-default);display:flex;align-items:center;padding-inline:.75rem}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li{font-size:.875rem;padding-inline-start:.75rem;padding-inline-end:1rem;position:relative;height:var(--ax-size-default);display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:var(--ax-rounded-border-default)}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus,ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus-within,ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus-visible{outline:2px solid;outline-color:rgba(var(--ax-color-primary-500));outline-offset:-4px}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li .ax-label-container{display:flex;align-items:center}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li .ax-checkbox-label{margin-inline-start:.5rem}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li .ax-selected-icon{color:rgba(var(--ax-color-primary-500));font-size:1.5rem}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li.ax-state-selected:not(ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus,ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus-within,ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus-visible){background-color:rgba(var(--ax-color-primary-100))!important;color:rgba(var(--ax-color-primary-fore-lighten))!important}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li.ax-state-disabled{cursor:not-allowed;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i2.CdkVirtualScrollableElement, selector: "[cdkVirtualScrollingElement]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
205
169
  }
206
170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXListComponent, decorators: [{
207
171
  type: Component,
208
- args: [{ selector: 'ax-list', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, inputs: ['id', 'name', 'disabled', 'readonly', 'valueField', 'textField', 'disabledField', 'multiple'], outputs: ['onValueChanged', 'disabledChange', 'readOnlyChange', 'onBlur', 'onFocus'], providers: [
172
+ args: [{ selector: 'ax-list', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, inputs: [
173
+ 'id',
174
+ 'name',
175
+ 'disabled',
176
+ 'readonly',
177
+ 'valueField',
178
+ 'textField',
179
+ 'disabledField',
180
+ 'multiple',
181
+ 'selectionMode',
182
+ ], outputs: ['onValueChanged', 'disabledChange', 'readOnlyChange', 'onBlur', 'onFocus'], providers: [
209
183
  { provide: AXComponent, useExisting: AXListComponent },
210
184
  { provide: AXFocusableComponent, useExisting: AXListComponent },
211
185
  { provide: AXValuableComponent, useExisting: AXListComponent },
@@ -214,8 +188,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImpor
214
188
  useExisting: forwardRef(() => AXListComponent),
215
189
  multi: true,
216
190
  },
217
- ], template: "<div class=\"list-container\" cdkVirtualScrollingElement>\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.--item-height]=\"itemHeight+'px'\"\n class=\"ax-list-items-container\" (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\">\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of dataSource;let i = index; trackBy: trackByIdx\">\n <ng-container *ngIf=\"item;else loadingTpl\">\n <li [class.ax-state-selected]=\"isItemSelected(item)\" class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\" [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\" [attr.data-id]=\"getValue(item)\">\n <!-- Custom Item Template -->\n <ng-container *ngIf=\"itemTemplate;else defaultItemTpl\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context: { $implicit: { data:item } }\">\n </ng-container>\n </ng-container>\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n <ng-container *ngIf=\"item;else loadingTpl\">\n <div class=\"ax-label-container\">\n <input class=\"ax-checkbox\" *ngIf=\"multiple && checkbox\" type=\"checkbox\"\n [checked]=\"isItemSelected(item)\" [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\" />\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\">{{getDisplayText(item)}}</span>\n </div>\n <i class=\"ax-icon ax-icon-done ax-selected-icon\" *ngIf=\"isItemSelected(item) \"></i>\n </ng-container>\n </ng-template>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n <ng-container *ngIf=\"loadingTemplate;else defaultLoadingTpl\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\">\n </ng-container>\n </ng-container>\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>Loading...</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n<ng-container *ngIf=\"emptyTemplate && hasItems===false && isLoading===false\">\n <div class=\"empty-container\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </div>\n</ng-container>", styles: ["ax-list{width:100%;height:100%;display:block}ax-list .list-container{display:flex;flex-direction:column;height:100%}ax-list .empty-container{width:100%;min-height:var(--ax-size-default);display:flex;align-items:center;padding-inline:.75rem}ax-list.ax-default .cdk-virtual-scroll-viewport li{font-size:.875rem;padding-inline-start:.75rem;padding-inline-end:1rem;position:relative;height:var(--ax-size-default);display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;user-select:none;cursor:pointer}ax-list.ax-default .cdk-virtual-scroll-viewport li:focus,ax-list.ax-default .cdk-virtual-scroll-viewport li:focus-within,ax-list.ax-default .cdk-virtual-scroll-viewport li:focus-visible{outline:transparent;background-color:rgba(var(--ax-color-primary-100))}ax-list.ax-default .cdk-virtual-scroll-viewport li .ax-label-container{display:flex;align-items:center}ax-list.ax-default .cdk-virtual-scroll-viewport li .ax-checkbox-label{margin-inline-start:.5rem}ax-list.ax-default .cdk-virtual-scroll-viewport li .ax-selected-icon{color:rgba(var(--ax-color-primary-500));font-size:1.5rem}ax-list.ax-default .cdk-virtual-scroll-viewport li.ax-state-selected:not(ax-list.ax-default .cdk-virtual-scroll-viewport li:focus,ax-list.ax-default .cdk-virtual-scroll-viewport li:focus-within,ax-list.ax-default .cdk-virtual-scroll-viewport li:focus-visible){background-color:rgba(var(--ax-color-on-surface))!important;color:rgba(var(--ax-color-on-surface-fore))!important}ax-list.ax-default .cdk-virtual-scroll-viewport li.ax-state-disabled{cursor:not-allowed;opacity:.5}\n"] }]
218
- }], propDecorators: { source: [{
191
+ ], template: "<div class=\"list-container\" cdkVirtualScrollingElement>\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.--item-height]=\"itemHeight+'px'\"\n class=\"ax-list-items-container\" (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\">\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of listDataSource;let i = index; trackBy: trackByIdx\">\n <ng-container *ngIf=\"item;else loadingTpl\">\n <li [class.ax-state-selected]=\"isItemSelected(item)\" class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\" [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\" [attr.data-id]=\"getValue(item)\">\n <!-- Custom Item Template -->\n <ng-container *ngIf=\"itemTemplate;else defaultItemTpl\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context: { $implicit: { data:item } }\">\n </ng-container>\n </ng-container>\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n <ng-container *ngIf=\"item;else loadingTpl\">\n <div class=\"ax-label-container\">\n <input class=\"ax-checkbox\" *ngIf=\"multiple && checkbox\" type=\"checkbox\"\n [checked]=\"isItemSelected(item)\" [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\" />\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\">{{getDisplayText(item)}}</span>\n </div>\n <i class=\"ax-icon ax-icon-done ax-selected-icon\" *ngIf=\"isItemSelected(item) \"></i>\n </ng-container>\n </ng-template>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n <ng-container *ngIf=\"loadingTemplate;else defaultLoadingTpl\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\">\n </ng-container>\n </ng-container>\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>Loading...</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n<ng-container *ngIf=\"emptyTemplate && hasItems===false && isLoading===false\">\n <div class=\"empty-container\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </div>\n</ng-container>", styles: [".ax-dark ax-list.ax-solid .cdk-virtual-scroll-viewport li:focus,.ax-dark ax-list.ax-solid .cdk-virtual-scroll-viewport li:focus-within,.ax-dark ax-list.ax-solid .cdk-virtual-scroll-viewport li:focus-visible{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-lighten))}ax-list{width:100%;height:100%;display:block;font-style:.875rem}ax-list .list-container{display:flex;flex-direction:column;height:100%}ax-list .empty-container{width:100%;min-height:var(--ax-size-default);display:flex;align-items:center;padding-inline:.75rem}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li{font-size:.875rem;padding-inline-start:.75rem;padding-inline-end:1rem;position:relative;height:var(--ax-size-default);display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:var(--ax-rounded-border-default)}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus,ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus-within,ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus-visible{outline:2px solid;outline-color:rgba(var(--ax-color-primary-500));outline-offset:-4px}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li .ax-label-container{display:flex;align-items:center}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li .ax-checkbox-label{margin-inline-start:.5rem}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li .ax-selected-icon{color:rgba(var(--ax-color-primary-500));font-size:1.5rem}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li.ax-state-selected:not(ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus,ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus-within,ax-list.ax-solid .cdk-virtual-scroll-viewport ul li:focus-visible){background-color:rgba(var(--ax-color-primary-100))!important;color:rgba(var(--ax-color-primary-fore-lighten))!important}ax-list.ax-solid .cdk-virtual-scroll-viewport ul li.ax-state-disabled{cursor:not-allowed;opacity:.5}\n"] }]
192
+ }], propDecorators: { dataSource: [{
219
193
  type: Input
220
194
  }], itemHeight: [{
221
195
  type: Input
@@ -241,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImpor
241
215
  type: HostBinding,
242
216
  args: ['class']
243
217
  }] } });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdC9zcmMvbGliL2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3Qvc3JjL2xpYi9saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEVBSVgsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix5QkFBeUIsR0FDMUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQW9CLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUVyRyxNQUFNLE9BQU8sZ0JBQTBCLFNBQVEsVUFBYTtJQVcxRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFtQixNQUE2RTtRQUM5RixLQUFLLEVBQUUsQ0FBQztRQURTLFdBQU0sR0FBTixNQUFNLENBQXVFO1FBakJ4RixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsaUJBQVksR0FBRyxHQUFHLENBQUM7UUFDbkIsZ0JBQVcsR0FBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNqQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUduQixlQUFVLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFVdkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksTUFBTSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDckQsSUFBSSxNQUFNLENBQUMsWUFBWTtZQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNuRSxDQUFDO0lBRUQsT0FBTyxDQUFDLGdCQUFrQztRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDbkIsZ0JBQWdCLENBQUMsVUFBVTthQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNyQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM1QixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuQjtRQUNILENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYTtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVk7UUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7YUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxVQUFVLEVBQUU7WUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJO2FBQzNCLENBQTJDLENBQUM7WUFDN0MsT0FBTztpQkFDSixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUN2QjtnQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDO2lCQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7Q0FDRjtBQThCRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSx5QkFBeUI7SUF4QjlEOztRQTBCRSxXQUFNLEdBQW9CLEVBQUUsQ0FBQztRQUc3QixlQUFVLEdBQW9CLEVBQUUsQ0FBQztRQVlqQyxlQUFVLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7UUFHcEUsMkJBQXNCLEdBQ3BCLElBQUksWUFBWSxFQUE0QixDQUFDO1FBRy9DLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFHTixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDbkIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0tBbUgvQjtJQTlHQyxVQUFVLENBQUMsQ0FBQztRQUNWLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFVO1lBQzlDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsQ0FBYSxFQUFFLElBQVM7UUFDekMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBR0QsY0FBYyxDQUFDLENBQWdCO1FBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDL0QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixPQUFPO2FBQ1I7WUFDRCxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsSUFBWTtRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFpQixDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FDWCxRQUFRLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEYsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBZ0IsQ0FBQztRQUN0RyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVTLDRCQUE0QixDQUFDLENBQVM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUMvQixTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztZQUNyQixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILElBQ0ksV0FBVztRQUNiLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBWTtRQUN2QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sVUFBVSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQWE7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVRLEtBQUs7UUFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sU0FBUyxHQUNiLElBQUksQ0FBQyxhQUFhLENBQWMsc0JBQXNCLENBQUM7WUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBYyxjQUFjLENBQUMsQ0FBQztRQUNsRCxJQUFJLFNBQVMsRUFBRTtZQUNiLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDM0I7SUFDSCxDQUFDOzhHQWhKVSxlQUFlO2tHQUFmLGVBQWUsOHNCQVhmO1lBQ1QsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUU7WUFDdEQsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRTtZQUMvRCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFO1lBQzlEO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUM5QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Ysb0VBa0NVLHdCQUF3Qix1RUN4S3JDLDI3RkFxRGU7OzJGRG1GRixlQUFlO2tCQXhCM0IsU0FBUzsrQkFDRSxTQUFTLG1CQUdGLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksVUFDN0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLFdBQzdGLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxhQU16RTt3QkFDVCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxpQkFBaUIsRUFBRTt3QkFDdEQsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxpQkFBaUIsRUFBRTt3QkFDL0QsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxpQkFBaUIsRUFBRTt3QkFDOUQ7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7NEJBQzlDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUlELE1BQU07c0JBREwsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxNQUFNO2dCQUlQLHNCQUFzQjtzQkFEckIsTUFBTTtnQkFLUCxRQUFRO3NCQURQLEtBQUs7Z0JBVU4sUUFBUTtzQkFEUCxTQUFTO3VCQUFDLHdCQUF3QjtnQkFxQ25DLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMkMvQixXQUFXO3NCQURkLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFYQ29tcG9uZW50LFxuICBBWERhdGFMaXN0RmV0Y2hDYWxsYmFja1Jlc3VsdCxcbiAgQVhEYXRhTGlzdEl0ZW1zLFxuICBBWEV2ZW50LFxuICBBWEZvY3VzYWJsZUNvbXBvbmVudCxcbiAgQVhWYWx1YWJsZUNvbXBvbmVudCxcbiAgTVhTZWxlY3Rpb25WYWx1ZUNvbXBvbmVudCxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld2VyLCBEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIEFYTGlzdERhdGFTb3VyY2U8VCA9IGFueT4gZXh0ZW5kcyBEYXRhU291cmNlPFQ+IHtcbiAgcHJpdmF0ZSBwYWdlU2l6ZSA9IDIwO1xuICBwcml2YXRlIGRlYm91bmNlVGltZSA9IDMwMDtcbiAgcHJpdmF0ZSBfY2FjaGVkRGF0YTogVFtdID0gbmV3IEFycmF5KHRoaXMuY29uZmlnLnBhZ2VTaXplKTtcbiAgcHJpdmF0ZSBmZXRjaGVkUGFnZXMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgaW5pdGlhdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgc291cmNlOiBBWERhdGFMaXN0SXRlbXM7XG5cbiAgcHVibGljIGRhdGFTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4odGhpcy5fY2FjaGVkRGF0YSk7XG4gIHB1YmxpYyBsb2FkaW5nU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgZ2V0IGNhY2hlZEl0ZW1zKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZERhdGEgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIGNvbmZpZzogeyBzb3VyY2U6IEFYRGF0YUxpc3RJdGVtczsgcGFnZVNpemU/OiBudW1iZXI7IGRlYm91bmNlVGltZT86IG51bWJlciB9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNvdXJjZSA9IGNvbmZpZy5zb3VyY2U7XG4gICAgaWYgKGNvbmZpZy5wYWdlU2l6ZSkgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5wYWdlU2l6ZTtcbiAgICBpZiAoY29uZmlnLmRlYm91bmNlVGltZSkgdGhpcy5kZWJvdW5jZVRpbWUgPSBjb25maWcuZGVib3VuY2VUaW1lO1xuICB9XG5cbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBjb2xsZWN0aW9uVmlld2VyLnZpZXdDaGFuZ2VcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSlcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmFuZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydFBhZ2UgPSB0aGlzLmdldFBhZ2VGb3JJbmRleChyYW5nZS5zdGFydCk7XG4gICAgICAgICAgY29uc3QgZW5kUGFnZSA9IHRoaXMuZ2V0UGFnZUZvckluZGV4KHJhbmdlLmVuZCAtIDEpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydFBhZ2U7IGkgPD0gZW5kUGFnZTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoUGFnZShpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0cmVhbTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFnZUZvckluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmZsb29yKGluZGV4IC8gdGhpcy5wYWdlU2l6ZSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoUGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5mZXRjaGVkUGFnZXMuaGFzKHBhZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZGluZ1N0YXRlLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5mZXRjaGVkUGFnZXMuYWRkKHBhZ2UpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc291cmNlKSkge1xuICAgICAgdGhpcy5fY2FjaGVkRGF0YSA9IHRoaXMuc291cmNlO1xuICAgICAgdGhpcy5kYXRhU3RyZWFtLm5leHQodGhpcy5fY2FjaGVkRGF0YSk7XG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZS5uZXh0KGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnNvdXJjZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zb3VyY2Uoe1xuICAgICAgICB0YWtlOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICBza2lwOiB0aGlzLnBhZ2VTaXplICogcGFnZSxcbiAgICAgIH0pIGFzIFByb21pc2U8QVhEYXRhTGlzdEZldGNoQ2FsbGJhY2tSZXN1bHQ+O1xuICAgICAgcHJvbWlzZVxuICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmluaXRpYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGVkRGF0YSA9IG5ldyBBcnJheShyZXN1bHQudG90YWwpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWF0ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9jYWNoZWREYXRhLnNwbGljZShwYWdlICogdGhpcy5wYWdlU2l6ZSwgdGhpcy5wYWdlU2l6ZSwgLi4ucmVzdWx0Lml0ZW1zKTtcbiAgICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dCh0aGlzLl9jYWNoZWREYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlLm5leHQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWExpc3RTY3JvbGxJbmRleENoYW5nZWQgZXh0ZW5kcyBBWEV2ZW50IHtcbiAgaW5kZXg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW5wdXRzOiBbJ2lkJywgJ25hbWUnLCAnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAndmFsdWVGaWVsZCcsICd0ZXh0RmllbGQnLCAnZGlzYWJsZWRGaWVsZCcsICdtdWx0aXBsZSddLFxuICBvdXRwdXRzOiBbJ29uVmFsdWVDaGFuZ2VkJywgJ2Rpc2FibGVkQ2hhbmdlJywgJ3JlYWRPbmx5Q2hhbmdlJywgJ29uQmx1cicsICdvbkZvY3VzJ10sXG4gIC8vIGhvc3REaXJlY3RpdmVzOiBbXG4gIC8vICAgICB7XG4gIC8vICAgICAgICAgZGlyZWN0aXZlOiBDZGtWaXJ0dWFsU2Nyb2xsYWJsZUVsZW1lbnRcbiAgLy8gICAgIH1cbiAgLy8gXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYTGlzdENvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogQVhGb2N1c2FibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWExpc3RDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYVmFsdWFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWExpc3RDb21wb25lbnQgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFYTGlzdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWExpc3RDb21wb25lbnQgZXh0ZW5kcyBNWFNlbGVjdGlvblZhbHVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgc291cmNlOiBBWERhdGFMaXN0SXRlbXMgPSBbXTtcblxuICBASW5wdXQoKVxuICBpdGVtSGVpZ2h0OiBudW1iZXIgfCAnYXV0bycgPSA0MDtcblxuICBASW5wdXQoKVxuICBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpXG4gIGVtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQE91dHB1dCgpXG4gIG9uRGF0YUxvYWQ6IEV2ZW50RW1pdHRlcjx1bmtub3duW10+ID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duW10+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uU2Nyb2xsZWRJbmRleENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWExpc3RTY3JvbGxJbmRleENoYW5nZWQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYTGlzdFNjcm9sbEluZGV4Q2hhbmdlZD4oKTtcblxuICBASW5wdXQoKVxuICBjaGVja2JveCA9IHRydWU7XG5cbiAgcHJvdGVjdGVkIGRhdGFTb3VyY2U6IEFYTGlzdERhdGFTb3VyY2U8dW5rbm93bj47XG4gIHByb3RlY3RlZCBpc0xvYWRpbmcgPSB0cnVlO1xuICBwcm90ZWN0ZWQgaGFzSXRlbXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsYXN0SW5kZXggPSAwO1xuICBwcml2YXRlIHBvc3Rwb25lRm9jdXMgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydClcbiAgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICB0cmFja0J5SWR4KGkpIHtcbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IEFYTGlzdERhdGFTb3VyY2U8dW5rbm93bj4oe1xuICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICB9KTtcbiAgICB0aGlzLmRhdGFTb3VyY2UubG9hZGluZ1N0YXRlLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBkYXRhO1xuICAgIH0pO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhU3RyZWFtLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5oYXNJdGVtcyA9IGRhdGEubGVuZ3RoID4gMDtcbiAgICAgIHRoaXMub25EYXRhTG9hZC5lbWl0KGRhdGEpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgX2hhbmRsZU9uSXRlbUNsaWNrKGU6IE1vdXNlRXZlbnQsIGl0ZW06IGFueSkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzSXRlbURpc2FibGVkKGl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlU2VsZWN0KGl0ZW0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIF9oYW5kbGVLZXlkb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoKGUuY29kZSA9PT0gJ0Fycm93RG93bicgfHwgZS5jb2RlID09PSAnQXJyb3dVcCcpICYmIHRoaXMuaGFzSXRlbXMpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtQnlOYXYoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKChlLmNvZGUgPT09ICdTcGFjZScgfHwgZS5jb2RlID09PSAnRW50ZXInKSAmJiB0aGlzLmhhc0l0ZW1zKSB7XG4gICAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50Py5jbG9zZXN0KCdsaScpPy5kYXRhc2V0Py5pZDtcbiAgICAgIHRoaXMudG9nZ2xlU2VsZWN0KGlkKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW1CeU5hdihzaWduOiAtMSB8IDEpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XG4gICAgY29uc3QgZm4gPSAocykgPT4gbGlzdC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihzKTtcbiAgICBjb25zdCBpdGVtRGl2OiBIVE1MRWxlbWVudCA9XG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50Py5jbG9zZXN0KCdsaScpIHx8IGZuKGBsaS5heC1zdGF0ZS1zZWxlY3RlZGApIHx8IGZuKGBsaWApO1xuICAgIGNvbnN0IG5leHQgPSAoc2lnbiA9PSAxID8gaXRlbURpdi5uZXh0RWxlbWVudFNpYmxpbmcgOiBpdGVtRGl2LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChuZXh0KSB7XG4gICAgICBuZXh0LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9oYW5kbGVPbnNjcm9sbGVkSW5kZXhDaGFuZ2UoZTogbnVtYmVyKSB7XG4gICAgdGhpcy5sYXN0SW5kZXggPSBlO1xuICAgIHRoaXMub25TY3JvbGxlZEluZGV4Q2hhbmdlZC5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGluZGV4OiB0aGlzLmxhc3RJbmRleCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IF9faG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgX2NsYXNzID0gYGF4LWRlZmF1bHRgO1xuICAgIHJldHVybiB0aGlzLml0ZW1UZW1wbGF0ZSA/ICcnIDogX2NsYXNzO1xuICB9XG5cbiAgZ2V0SXRlbUJ5S2V5KGtleTogdW5rbm93bik6IHVua25vd24ge1xuICAgIGNvbnN0IGNhY2hlZEl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuY2FjaGVkSXRlbXMuZmluZCgoYykgPT4gYyAmJiBjW3RoaXMudmFsdWVGaWVsZF0gPT0ga2V5KTtcbiAgICByZXR1cm4gY2FjaGVkSXRlbSB8fCB7IFt0aGlzLnZhbHVlRmllbGRdOiBrZXksIFt0aGlzLnRleHRGaWVsZF06IGtleSB9O1xuICB9XG5cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICB0aGlzLnZpZXdwb3J0LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgdGhpcy52aWV3cG9ydC5zY3JvbGxUb0luZGV4KHRoaXMubGFzdEluZGV4KTtcbiAgICBpZiAodGhpcy5wb3N0cG9uZUZvY3VzKSB7XG4gICAgICB0aGlzLnBvc3Rwb25lRm9jdXMgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsVG9JbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy52aWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmdldEhvc3RFbGVtZW50KCkucXVlcnlTZWxlY3RvcigndWwnKTtcbiAgICBjb25zdCBmb2N1c2FibGUgPVxuICAgICAgbGlzdC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignbGkuYXgtc3RhdGUtc2VsZWN0ZWQnKSA/P1xuICAgICAgbGlzdC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignbGkubGlzdC1pdGVtJyk7XG4gICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgZm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9zdHBvbmVGb2N1cyA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIiBjZGtWaXJ0dWFsU2Nyb2xsaW5nRWxlbWVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJheC1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBbaXRlbVNpemVdPVwiaXRlbUhlaWdodFwiIFtzdHlsZS4tLWl0ZW0taGVpZ2h0XT1cIml0ZW1IZWlnaHQrJ3B4J1wiXG4gICAgICAgIGNsYXNzPVwiYXgtbGlzdC1pdGVtcy1jb250YWluZXJcIiAoc2Nyb2xsZWRJbmRleENoYW5nZSk9XCJfaGFuZGxlT25zY3JvbGxlZEluZGV4Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPHVsPlxuICAgICAgICAgICAgPCEtLSAgSXRlbSBUZW1wbGF0ZSAgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVNvdXJjZTtsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SWR4XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW07ZWxzZSBsb2FkaW5nVHBsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBbY2xhc3MuYXgtc3RhdGUtc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIiBjbGFzcz1cImxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIiBbYXR0ci50YWJpbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlT25JdGVtQ2xpY2soJGV2ZW50LCBpdGVtKVwiIFthdHRyLmRhdGEtaWRdPVwiZ2V0VmFsdWUoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gIEN1c3RvbSBJdGVtIFRlbXBsYXRlICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVGVtcGxhdGU7ZWxzZSBkZWZhdWx0SXRlbVRwbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7Y29udGV4dDogeyAkaW1wbGljaXQ6IHsgZGF0YTppdGVtIH0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEZWZhdWx0IEl0ZW0gVGVtcGxhdGUgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SXRlbVRwbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbTtlbHNlIGxvYWRpbmdUcGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYXgtY2hlY2tib3hcIiAqbmdJZj1cIm11bHRpcGxlICYmIGNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiIFtkaXNhYmxlZF09XCJpc0l0ZW1EaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LWNoZWNrYm94LWxhYmVsXT1cIm11bHRpcGxlICYmIGNoZWNrYm94XCI+e3tnZXREaXNwbGF5VGV4dChpdGVtKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tZG9uZSBheC1zZWxlY3RlZC1pY29uXCIgKm5nSWY9XCJpc0l0ZW1TZWxlY3RlZChpdGVtKSBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48IS0tICBMb2FkaW5nIFRlbXBsYXRlICAtLT5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1RwbD5cbiAgICA8IS0tICBDdXN0b20gTG9hZGluZyBUZW1wbGF0ZSAgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdUZW1wbGF0ZTtlbHNlIGRlZmF1bHRMb2FkaW5nVHBsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAgRGVmYXVsdCBMb2FkaW5nIFRlbXBsYXRlICAtLT5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nVHBsPlxuICAgICAgICA8bGk+TG9hZGluZy4uLjwvbGk+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48IS0tICBFbXB0eSBUZW1wbGF0ZSAgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwiZW1wdHlUZW1wbGF0ZSAmJiBoYXNJdGVtcz09PWZhbHNlICYmIGlzTG9hZGluZz09PWZhbHNlXCI+XG4gICAgPGRpdiBjbGFzcz1cImVtcHR5LWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+Il19
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdC9zcmMvbGliL2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3Qvc3JjL2xpYi9saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUVaLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHdCQUF3QixHQUN6QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBRXJHLE1BQU0sT0FBTyxnQkFBOEIsU0FBUSxVQUFhO0lBTTlEOztPQUVHO0lBQ0gsWUFBb0IsTUFBMEQ7UUFDNUUsS0FBSyxFQUFFLENBQUM7UUFEVSxXQUFNLEdBQU4sTUFBTSxDQUFvRDtRQVJ0RSxpQkFBWSxHQUFHLEdBQUcsQ0FBQztRQUNuQixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFTeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFB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QUFVO3NCQURULEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsTUFBTTtnQkFJUCxzQkFBc0I7c0JBRHJCLE1BQU07Z0JBS1AsUUFBUTtzQkFEUCxLQUFLO2dCQVVOLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBcUNuQyxjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTJDL0IsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBWENvbXBvbmVudCxcbiAgQVhEYXRlU291cmNlLFxuICBBWEV2ZW50LFxuICBBWEZvY3VzYWJsZUNvbXBvbmVudCxcbiAgQVhWYWx1YWJsZUNvbXBvbmVudCxcbiAgTVhTZWxlY3Rpb25WYWx1ZUNvbXBvbmVudCxcbiAgY29udmVydEFycmF5VG9EYXRhU291cmNlLFxufSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgQVhMaXN0RGF0YVNvdXJjZTxUID0gdW5rbm93bj4gZXh0ZW5kcyBEYXRhU291cmNlPFQ+IHtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWUgPSAzMDA7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwdWJsaWMgc291cmNlOiBBWERhdGVTb3VyY2U8VD47XG4gIHByaXZhdGUgZGF0YVN0cmVhbTogQmVoYXZpb3JTdWJqZWN0PFRbXT47XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiB7IHNvdXJjZTogQVhEYXRlU291cmNlPFQ+OyBkZWJvdW5jZVRpbWU/OiBudW1iZXIgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zb3VyY2UgPSBjb25maWcuc291cmNlO1xuICAgIGlmIChjb25maWcuZGVib3VuY2VUaW1lKSB0aGlzLmRlYm91bmNlVGltZSA9IGNvbmZpZy5kZWJvdW5jZVRpbWU7XG4gICAgLy9cbiAgICBjb25zb2xlLmxvZyh0aGlzLmNvbmZpZy5zb3VyY2UuY2FjaGVkSXRlbXMpO1xuICAgIHRoaXMuZGF0YVN0cmVhbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFtdPih0aGlzLmNvbmZpZy5zb3VyY2UuY2FjaGVkSXRlbXMpO1xuICAgIHRoaXMuc291cmNlLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGF0YVN0cmVhbS5uZXh0KGRhdGEuY2FjaGVkSXRlbXMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBjb2xsZWN0aW9uVmlld2VyLnZpZXdDaGFuZ2VcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSlcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmFuZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydFBhZ2UgPSB0aGlzLmdldFBhZ2VGb3JJbmRleChyYW5nZS5zdGFydCk7XG4gICAgICAgICAgY29uc3QgZW5kUGFnZSA9IHRoaXMuZ2V0UGFnZUZvckluZGV4KHJhbmdlLmVuZCAtIDEpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydFBhZ2U7IGkgPD0gZW5kUGFnZTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zZXRQYWdlKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3RyZWFtO1xuICB9XG5cbiAgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYWdlRm9ySW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnNvdXJjZS5jb25maWcucGFnZVNpemUpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhMaXN0U2Nyb2xsSW5kZXhDaGFuZ2VkIGV4dGVuZHMgQVhFdmVudCB7XG4gIGluZGV4OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGlucHV0czogW1xuICAgICdpZCcsXG4gICAgJ25hbWUnLFxuICAgICdkaXNhYmxlZCcsXG4gICAgJ3JlYWRvbmx5JyxcbiAgICAndmFsdWVGaWVsZCcsXG4gICAgJ3RleHRGaWVsZCcsXG4gICAgJ2Rpc2FibGVkRmllbGQnLFxuICAgICdtdWx0aXBsZScsXG4gICAgJ3NlbGVjdGlvbk1vZGUnLFxuICBdLFxuICBvdXRwdXRzOiBbJ29uVmFsdWVDaGFuZ2VkJywgJ2Rpc2FibGVkQ2hhbmdlJywgJ3JlYWRPbmx5Q2hhbmdlJywgJ29uQmx1cicsICdvbkZvY3VzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWExpc3RDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYRm9jdXNhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhMaXN0Q29tcG9uZW50IH0sXG4gICAgeyBwcm92aWRlOiBBWFZhbHVhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhMaXN0Q29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWExpc3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhMaXN0Q29tcG9uZW50IGV4dGVuZHMgTVhTZWxlY3Rpb25WYWx1ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGRhdGFTb3VyY2U6IEFYRGF0ZVNvdXJjZTx1bmtub3duPiA9IGNvbnZlcnRBcnJheVRvRGF0YVNvdXJjZShbXSk7XG5cbiAgQElucHV0KClcbiAgaXRlbUhlaWdodDogbnVtYmVyIHwgJ2F1dG8nID0gNDA7XG5cbiAgQElucHV0KClcbiAgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKVxuICBlbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKVxuICBsb2FkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBPdXRwdXQoKVxuICBvbkRhdGFMb2FkOiBFdmVudEVtaXR0ZXI8dW5rbm93bltdPiA9IG5ldyBFdmVudEVtaXR0ZXI8dW5rbm93bltdPigpO1xuXG4gIEBPdXRwdXQoKVxuICBvblNjcm9sbGVkSW5kZXhDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhMaXN0U2Nyb2xsSW5kZXhDaGFuZ2VkPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWExpc3RTY3JvbGxJbmRleENoYW5nZWQ+KCk7XG5cbiAgQElucHV0KClcbiAgY2hlY2tib3ggPSB0cnVlO1xuXG4gIHByb3RlY3RlZCBsaXN0RGF0YVNvdXJjZTogQVhMaXN0RGF0YVNvdXJjZTx1bmtub3duPjtcbiAgcHJvdGVjdGVkIGlzTG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBoYXNJdGVtcyA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RJbmRleCA9IDA7XG4gIHByaXZhdGUgcG9zdHBvbmVGb2N1cyA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KVxuICB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHRyYWNrQnlJZHgoaSkge1xuICAgIHJldHVybiBpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmxpc3REYXRhU291cmNlID0gbmV3IEFYTGlzdERhdGFTb3VyY2U8dW5rbm93bj4oe1xuICAgICAgc291cmNlOiB0aGlzLmRhdGFTb3VyY2UsXG4gICAgfSk7XG4gICAgdGhpcy5saXN0RGF0YVNvdXJjZS5zb3VyY2Uub25Mb2FkaW5nQ2hhbmdlZC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZGF0YTtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3REYXRhU291cmNlLnNvdXJjZS5vbkNoYW5nZWQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmhhc0l0ZW1zID0gZGF0YS50b3RhbENvdW50ID4gMDtcbiAgICAgIHRoaXMub25EYXRhTG9hZC5lbWl0KGRhdGEuaXRlbXMpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgX2hhbmRsZU9uSXRlbUNsaWNrKGU6IE1vdXNlRXZlbnQsIGl0ZW06IGFueSkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzSXRlbURpc2FibGVkKGl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlU2VsZWN0KGl0ZW0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIF9oYW5kbGVLZXlkb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoKGUuY29kZSA9PT0gJ0Fycm93RG93bicgfHwgZS5jb2RlID09PSAnQXJyb3dVcCcpICYmIHRoaXMuaGFzSXRlbXMpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtQnlOYXYoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKChlLmNvZGUgPT09ICdTcGFjZScgfHwgZS5jb2RlID09PSAnRW50ZXInKSAmJiB0aGlzLmhhc0l0ZW1zKSB7XG4gICAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50Py5jbG9zZXN0KCdsaScpPy5kYXRhc2V0Py5pZDtcbiAgICAgIHRoaXMudG9nZ2xlU2VsZWN0KGlkKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW1CeU5hdihzaWduOiAtMSB8IDEpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XG4gICAgY29uc3QgZm4gPSAocykgPT4gbGlzdC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihzKTtcbiAgICBjb25zdCBpdGVtRGl2OiBIVE1MRWxlbWVudCA9XG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50Py5jbG9zZXN0KCdsaScpIHx8IGZuKGBsaS5heC1zdGF0ZS1zZWxlY3RlZGApIHx8IGZuKGBsaWApO1xuICAgIGNvbnN0IG5leHQgPSAoc2lnbiA9PSAxID8gaXRlbURpdi5uZXh0RWxlbWVudFNpYmxpbmcgOiBpdGVtRGl2LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChuZXh0KSB7XG4gICAgICBuZXh0LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9oYW5kbGVPbnNjcm9sbGVkSW5kZXhDaGFuZ2UoZTogbnVtYmVyKSB7XG4gICAgdGhpcy5sYXN0SW5kZXggPSBlO1xuICAgIHRoaXMub25TY3JvbGxlZEluZGV4Q2hhbmdlZC5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGluZGV4OiB0aGlzLmxhc3RJbmRleCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IF9faG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgX2NsYXNzID0gYGF4LXNvbGlkYDtcbiAgICByZXR1cm4gdGhpcy5pdGVtVGVtcGxhdGUgPyAnJyA6IF9jbGFzcztcbiAgfVxuXG4gIGdldEl0ZW1CeUtleShrZXk6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5maW5kKGtleSk7XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHRoaXMudmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvSW5kZXgodGhpcy5sYXN0SW5kZXgpO1xuICAgIGlmICh0aGlzLnBvc3Rwb25lRm9jdXMpIHtcbiAgICAgIHRoaXMucG9zdHBvbmVGb2N1cyA9IGZhbHNlO1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzY3JvbGxUb0luZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0SG9zdEVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCd1bCcpO1xuICAgIGNvbnN0IGZvY3VzYWJsZSA9XG4gICAgICBsaXN0LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCdsaS5heC1zdGF0ZS1zZWxlY3RlZCcpID8/XG4gICAgICBsaXN0LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCdsaS5saXN0LWl0ZW0nKTtcbiAgICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgICBmb2N1c2FibGUuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3N0cG9uZUZvY3VzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsaXN0LWNvbnRhaW5lclwiIGNka1ZpcnR1YWxTY3JvbGxpbmdFbGVtZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LWhlYWRlclwiPjwvbmctY29udGVudD5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IFtpdGVtU2l6ZV09XCJpdGVtSGVpZ2h0XCIgW3N0eWxlLi0taXRlbS1oZWlnaHRdPVwiaXRlbUhlaWdodCsncHgnXCJcbiAgICAgICAgY2xhc3M9XCJheC1saXN0LWl0ZW1zLWNvbnRhaW5lclwiIChzY3JvbGxlZEluZGV4Q2hhbmdlKT1cIl9oYW5kbGVPbnNjcm9sbGVkSW5kZXhDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgICA8IS0tICBJdGVtIFRlbXBsYXRlICAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBsaXN0RGF0YVNvdXJjZTtsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SWR4XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW07ZWxzZSBsb2FkaW5nVHBsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBbY2xhc3MuYXgtc3RhdGUtc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIiBjbGFzcz1cImxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIiBbYXR0ci50YWJpbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlT25JdGVtQ2xpY2soJGV2ZW50LCBpdGVtKVwiIFthdHRyLmRhdGEtaWRdPVwiZ2V0VmFsdWUoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gIEN1c3RvbSBJdGVtIFRlbXBsYXRlICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVGVtcGxhdGU7ZWxzZSBkZWZhdWx0SXRlbVRwbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7Y29udGV4dDogeyAkaW1wbGljaXQ6IHsgZGF0YTppdGVtIH0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEZWZhdWx0IEl0ZW0gVGVtcGxhdGUgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SXRlbVRwbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbTtlbHNlIGxvYWRpbmdUcGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYXgtY2hlY2tib3hcIiAqbmdJZj1cIm11bHRpcGxlICYmIGNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiIFtkaXNhYmxlZF09XCJpc0l0ZW1EaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LWNoZWNrYm94LWxhYmVsXT1cIm11bHRpcGxlICYmIGNoZWNrYm94XCI+e3tnZXREaXNwbGF5VGV4dChpdGVtKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tZG9uZSBheC1zZWxlY3RlZC1pY29uXCIgKm5nSWY9XCJpc0l0ZW1TZWxlY3RlZChpdGVtKSBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48IS0tICBMb2FkaW5nIFRlbXBsYXRlICAtLT5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1RwbD5cbiAgICA8IS0tICBDdXN0b20gTG9hZGluZyBUZW1wbGF0ZSAgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdUZW1wbGF0ZTtlbHNlIGRlZmF1bHRMb2FkaW5nVHBsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAgRGVmYXVsdCBMb2FkaW5nIFRlbXBsYXRlICAtLT5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nVHBsPlxuICAgICAgICA8bGk+TG9hZGluZy4uLjwvbGk+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48IS0tICBFbXB0eSBUZW1wbGF0ZSAgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwiZW1wdHlUZW1wbGF0ZSAmJiBoYXNJdGVtcz09PWZhbHNlICYmIGlzTG9hZGluZz09PWZhbHNlXCI+XG4gICAgPGRpdiBjbGFzcz1cImVtcHR5LWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+Il19
@@ -2,5 +2,4 @@ export * from './lib/class/root-menu.class';
2
2
  export * from './lib/menu-item/menu-item.component';
3
3
  export * from './lib/menu.component';
4
4
  export * from './lib/menu.module';
5
- export * from './lib/menu2.component';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWVudS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY2xhc3Mvcm9vdC1tZW51LmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lbnUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lbnUyLmNvbXBvbmVudCc7XG4iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWVudS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NsYXNzL3Jvb3QtbWVudS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZW51LWl0ZW0vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZW51LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZW51Lm1vZHVsZSc7XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  export class AXRootMenu {
2
2
  }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1tZW51LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21lbnUvc3JjL2xpYi9jbGFzcy9yb290LW1lbnUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFVBQVU7Q0FFdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE9yaWVudGF0aW9uIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5cbmV4cG9ydCBjbGFzcyBBWFJvb3RNZW51IHtcbiAgb3JpYXRhdGlvbjogQVhPcmllbnRhdGlvbjtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1tZW51LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21lbnUvc3JjL2xpYi9jbGFzcy9yb290LW1lbnUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLFVBQVU7Q0FHdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE9yaWVudGF0aW9uIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBvcG92ZXJPcGVuVHJpZ2dlciB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcblxuZXhwb3J0IGNsYXNzIEFYUm9vdE1lbnUge1xuICBvcmlhdGF0aW9uOiBBWE9yaWVudGF0aW9uO1xuICBvcGVuT246IEFYUG9wb3Zlck9wZW5UcmlnZ2VyO1xufVxuIl19
@@ -1,16 +1,43 @@
1
- import { MXBaseComponent } from '@acorex/components/common';
1
+ import { MXInteractiveComponent } from '@acorex/components/common';
2
2
  import { AXPopoverComponent } from '@acorex/components/popover';
3
- import { Component, ContentChildren, HostBinding, Input, QueryList, ViewChild, inject, } from '@angular/core';
3
+ import { Component, ContentChildren, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, ViewChild, inject, } from '@angular/core';
4
4
  import { AXRootMenu } from '../class/root-menu.class';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/common";
7
7
  import * as i2 from "@acorex/components/popover";
8
- export class AXMenuItemComponent extends MXBaseComponent {
8
+ export class AXMenuItemComponent extends MXInteractiveComponent {
9
9
  constructor() {
10
10
  super(...arguments);
11
+ this.activeChange = new EventEmitter();
12
+ this._active = false;
13
+ this.onClick = new EventEmitter();
11
14
  this.isRoot = false;
12
15
  this.rootMenu = inject(AXRootMenu);
13
16
  }
17
+ /**
18
+ * Providing a string value for its text state
19
+ */
20
+ get text() {
21
+ return this._text;
22
+ }
23
+ set text(v) {
24
+ this.setOption({
25
+ name: 'text',
26
+ value: v,
27
+ });
28
+ }
29
+ /**
30
+ * Providing a string value for its text state
31
+ */
32
+ get active() {
33
+ return this._active;
34
+ }
35
+ set active(v) {
36
+ this.setOption({
37
+ name: 'active',
38
+ value: v,
39
+ });
40
+ }
14
41
  ngAfterViewInit() {
15
42
  this.children.forEach((c) => {
16
43
  c.parent = this;
@@ -27,16 +54,16 @@ export class AXMenuItemComponent extends MXBaseComponent {
27
54
  // });
28
55
  // }
29
56
  _handleOnOpened() {
30
- // this.parent.children.forEach((c) => {
31
- // if (c != this) {
32
- // c.close();
33
- // }
34
- // });
57
+ this.parent.children.forEach((c) => {
58
+ if (c != this) {
59
+ c.close();
60
+ }
61
+ });
35
62
  }
36
63
  _handleOnClosed() {
37
- // this.children.forEach((c) => {
38
- // c.close();
39
- // });
64
+ this.children.forEach((c) => {
65
+ c.close();
66
+ });
40
67
  }
41
68
  getIcon() {
42
69
  switch (this.rootMenu.oriatation) {
@@ -69,27 +96,42 @@ export class AXMenuItemComponent extends MXBaseComponent {
69
96
  }
70
97
  }
71
98
  get __hostClass() {
72
- return [`${this.disabled ? 'ax-state-disabled' : ''}`];
99
+ return [`${this.disabled ? 'ax-state-disabled' : ''}`, `${this.active ? 'ax-state-active' : ''}`];
100
+ }
101
+ __hostClick(e) {
102
+ if (!this.disabled) {
103
+ this.onClick.emit({
104
+ component: this,
105
+ htmlElement: this.getHostElement(),
106
+ nativeEvent: e,
107
+ });
108
+ }
73
109
  }
74
110
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXMenuItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
75
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.9", type: AXMenuItemComponent, selector: "ax-menu-item", inputs: { text: "text", disabled: "disabled" }, host: { properties: { "class": "this.__hostClass" } }, queries: [{ propertyName: "children", predicate: AXMenuItemComponent }], viewQueries: [{ propertyName: "popover", first: true, predicate: AXPopoverComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-prefix\"></ng-content>\n<div class=\"ax-menu-item-text\">{{ text }}</div>\n<ng-content select=\"ax-suffix\"></ng-content>\n<i class=\"ax-icon {{ getIcon() }} ax-menu-item-child-icon\" *ngIf=\"children.length\"></i>\n\n<ax-popover\n [closeOn]=\"'clickOut'\"\n [openOn]=\"'click'\"\n [target]=\"getHostElement()\"\n [offsetY]=\"isRoot ? 8 : 0\"\n [offsetX]=\"isRoot ? 0 : 4\"\n [placement]=\"getPlacement()\"\n (onOpened)=\"_handleOnOpened()\"\n (onClosed)=\"_handleOnClosed()\"\n>\n <div class=\"ax-menu-item-children ax-parent-{{ this.rootMenu.oriatation }}\">\n <ng-content select=\"ax-menu-item\"></ng-content>\n </div>\n</ax-popover>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }] }); }
111
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.9", type: AXMenuItemComponent, selector: "ax-menu-item", inputs: { disabled: "disabled", text: "text", active: "active" }, outputs: { activeChange: "activeChange", onClick: "onClick" }, host: { listeners: { "click": "__hostClick($event)" }, properties: { "class": "this.__hostClass" } }, queries: [{ propertyName: "children", predicate: AXMenuItemComponent }], viewQueries: [{ propertyName: "popover", first: true, predicate: AXPopoverComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-prefix\"></ng-content>\n<div class=\"ax-menu-item-text\">{{ text }}</div>\n<ng-content select=\"ax-suffix\"></ng-content>\n<i class=\"ax-icon {{ getIcon() }} ax-menu-item-child-icon\" *ngIf=\"children.length\"></i>\n\n<ax-popover\n [closeOn]=\"'clickOut'\"\n [openOn]=\"rootMenu.openOn\"\n [target]=\"getHostElement()\"\n [offsetY]=\"isRoot ? 8 : 0\"\n [offsetX]=\"isRoot ? 0 : 4\"\n [placement]=\"getPlacement()\"\n (onOpened)=\"_handleOnOpened()\"\n (onClosed)=\"_handleOnClosed()\"\n>\n <div class=\"ax-menu-item-children ax-parent-{{ this.rootMenu.oriatation }}\">\n <ng-content select=\"ax-menu-item\"></ng-content>\n </div>\n</ax-popover>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }] }); }
76
112
  }
77
113
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXMenuItemComponent, decorators: [{
78
114
  type: Component,
79
- args: [{ selector: 'ax-menu-item', template: "<ng-content select=\"ax-prefix\"></ng-content>\n<div class=\"ax-menu-item-text\">{{ text }}</div>\n<ng-content select=\"ax-suffix\"></ng-content>\n<i class=\"ax-icon {{ getIcon() }} ax-menu-item-child-icon\" *ngIf=\"children.length\"></i>\n\n<ax-popover\n [closeOn]=\"'clickOut'\"\n [openOn]=\"'click'\"\n [target]=\"getHostElement()\"\n [offsetY]=\"isRoot ? 8 : 0\"\n [offsetX]=\"isRoot ? 0 : 4\"\n [placement]=\"getPlacement()\"\n (onOpened)=\"_handleOnOpened()\"\n (onClosed)=\"_handleOnClosed()\"\n>\n <div class=\"ax-menu-item-children ax-parent-{{ this.rootMenu.oriatation }}\">\n <ng-content select=\"ax-menu-item\"></ng-content>\n </div>\n</ax-popover>\n" }]
115
+ args: [{ selector: 'ax-menu-item', inputs: ['disabled'], template: "<ng-content select=\"ax-prefix\"></ng-content>\n<div class=\"ax-menu-item-text\">{{ text }}</div>\n<ng-content select=\"ax-suffix\"></ng-content>\n<i class=\"ax-icon {{ getIcon() }} ax-menu-item-child-icon\" *ngIf=\"children.length\"></i>\n\n<ax-popover\n [closeOn]=\"'clickOut'\"\n [openOn]=\"rootMenu.openOn\"\n [target]=\"getHostElement()\"\n [offsetY]=\"isRoot ? 8 : 0\"\n [offsetX]=\"isRoot ? 0 : 4\"\n [placement]=\"getPlacement()\"\n (onOpened)=\"_handleOnOpened()\"\n (onClosed)=\"_handleOnClosed()\"\n>\n <div class=\"ax-menu-item-children ax-parent-{{ this.rootMenu.oriatation }}\">\n <ng-content select=\"ax-menu-item\"></ng-content>\n </div>\n</ax-popover>\n" }]
80
116
  }], propDecorators: { popover: [{
81
117
  type: ViewChild,
82
118
  args: [AXPopoverComponent]
83
119
  }], text: [{
84
- type: Input,
85
- args: [{ required: true }]
86
- }], disabled: [{
87
120
  type: Input
121
+ }], activeChange: [{
122
+ type: Output
123
+ }], active: [{
124
+ type: Input
125
+ }], onClick: [{
126
+ type: Output
88
127
  }], children: [{
89
128
  type: ContentChildren,
90
129
  args: [AXMenuItemComponent]
91
130
  }], __hostClass: [{
92
131
  type: HostBinding,
93
132
  args: ['class']
133
+ }], __hostClick: [{
134
+ type: HostListener,
135
+ args: ['click', ['$event']]
94
136
  }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWVudS9zcmMvbGliL21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBTXRELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxlQUFlO0lBSnhEOztRQVdFLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFHZixhQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBdUUvQjtJQWxFQyxlQUFlO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMxQixDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLHdDQUF3QztJQUN4QyxzQkFBc0I7SUFDdEIsbUNBQW1DO0lBQ25DLGlCQUFpQjtJQUNqQixRQUFRO0lBQ1IsSUFBSTtJQUVKLGVBQWU7UUFDYix3Q0FBd0M7UUFDeEMscUJBQXFCO1FBQ3JCLGlCQUFpQjtRQUNqQixNQUFNO1FBQ04sTUFBTTtJQUNSLENBQUM7SUFFRCxlQUFlO1FBQ2IsaUNBQWlDO1FBQ2pDLGVBQWU7UUFDZixNQUFNO0lBQ1IsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ2hDLEtBQUssVUFBVTtnQkFDYixPQUFPLHFCQUFxQixDQUFDO1lBQy9CLEtBQUssWUFBWTtnQkFDZixPQUFPLG9CQUFvQixDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ2hDLEtBQUssWUFBWTtnQkFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ2YsT0FBTyxjQUFjLENBQUM7aUJBQ3ZCO3FCQUFNO29CQUNMLE9BQU8sU0FBUyxDQUFDO2lCQUNsQjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDZixPQUFPLFNBQVMsQ0FBQztpQkFDbEI7cUJBQU07b0JBQ0wsT0FBTyxTQUFTLENBQUM7aUJBQ2xCO2dCQUNELE1BQU07WUFDUjtnQkFDRSxPQUFPLGNBQWMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxJQUNJLFdBQVc7UUFDYixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDOzhHQWhGVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixvTEFZYixtQkFBbUIsc0VBWHpCLGtCQUFrQix1RUNuQi9CLHFxQkFtQkE7OzJGRERhLG1CQUFtQjtrQkFKL0IsU0FBUzsrQkFDRSxjQUFjOzhCQUtoQixPQUFPO3NCQURkLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUdGLElBQUk7c0JBQTlCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixRQUFRO3NCQUFoQixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsZUFBZTt1QkFBQyxtQkFBbUI7Z0JBa0VoQyxXQUFXO3NCQURkLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1YQmFzZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFJvb3RNZW51IH0gZnJvbSAnLi4vY2xhc3Mvcm9vdC1tZW51LmNsYXNzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtbWVudS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYTWVudUl0ZW1Db21wb25lbnQgZXh0ZW5kcyBNWEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChBWFBvcG92ZXJDb21wb25lbnQpXG4gIHByaXZhdGUgcG9wb3ZlcjogQVhQb3BvdmVyQ29tcG9uZW50O1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgaXNSb290ID0gZmFsc2U7XG4gIHBhcmVudD86IEFYTWVudUl0ZW1Db21wb25lbnQ7XG5cbiAgcm9vdE1lbnUgPSBpbmplY3QoQVhSb290TWVudSk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihBWE1lbnVJdGVtQ29tcG9uZW50KVxuICBjaGlsZHJlbjogUXVlcnlMaXN0PEFYTWVudUl0ZW1Db21wb25lbnQ+O1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICAgIGMucGFyZW50ID0gdGhpcztcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMucG9wb3Zlcj8uY2xvc2UoKTtcbiAgfVxuXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBbJyRldmVudCddKVxuICAvLyBwcml2YXRlIG9uTW91c2VIb3ZlcihlOiBNb3VzZUV2ZW50KSB7XG4gIC8vICAgY29uc29sZS5sb2coJ2EnKTtcbiAgLy8gICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgLy8gICAgIGMuY2xvc2UoKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIF9oYW5kbGVPbk9wZW5lZCgpIHtcbiAgICAvLyB0aGlzLnBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgLy8gICBpZiAoYyAhPSB0aGlzKSB7XG4gICAgLy8gICAgIGMuY2xvc2UoKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgfVxuXG4gIF9oYW5kbGVPbkNsb3NlZCgpIHtcbiAgICAvLyB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICAvLyAgIGMuY2xvc2UoKTtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIGdldEljb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLnJvb3RNZW51Lm9yaWF0YXRpb24pIHtcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgcmV0dXJuICdheC1pY29uLWFycm93LXJpZ2h0JztcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgICByZXR1cm4gJ2F4LWljb24tYXJyb3ctZG93bic7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGxhY2VtZW50KCkge1xuICAgIHN3aXRjaCAodGhpcy5yb290TWVudS5vcmlhdGF0aW9uKSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICAgICAgcmV0dXJuICdib3R0b20tc3RhcnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnZW5kLXRvcCc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgICAgIHJldHVybiAnZW5kLXRvcCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICdlbmQtdG9wJztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnYm90dG9tLXN0YXJ0JztcbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IF9faG9zdENsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW2Ake3RoaXMuZGlzYWJsZWQgPyAnYXgtc3RhdGUtZGlzYWJsZWQnIDogJyd9YF07XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImF4LXByZWZpeFwiPjwvbmctY29udGVudD5cbjxkaXYgY2xhc3M9XCJheC1tZW51LWl0ZW0tdGV4dFwiPnt7IHRleHQgfX08L2Rpdj5cbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LXN1ZmZpeFwiPjwvbmctY29udGVudD5cbjxpIGNsYXNzPVwiYXgtaWNvbiB7eyBnZXRJY29uKCkgfX0gYXgtbWVudS1pdGVtLWNoaWxkLWljb25cIiAqbmdJZj1cImNoaWxkcmVuLmxlbmd0aFwiPjwvaT5cblxuPGF4LXBvcG92ZXJcbiAgW2Nsb3NlT25dPVwiJ2NsaWNrT3V0J1wiXG4gIFtvcGVuT25dPVwiJ2NsaWNrJ1wiXG4gIFt0YXJnZXRdPVwiZ2V0SG9zdEVsZW1lbnQoKVwiXG4gIFtvZmZzZXRZXT1cImlzUm9vdCA/IDggOiAwXCJcbiAgW29mZnNldFhdPVwiaXNSb290ID8gMCA6IDRcIlxuICBbcGxhY2VtZW50XT1cImdldFBsYWNlbWVudCgpXCJcbiAgKG9uT3BlbmVkKT1cIl9oYW5kbGVPbk9wZW5lZCgpXCJcbiAgKG9uQ2xvc2VkKT1cIl9oYW5kbGVPbkNsb3NlZCgpXCJcbj5cbiAgPGRpdiBjbGFzcz1cImF4LW1lbnUtaXRlbS1jaGlsZHJlbiBheC1wYXJlbnQte3sgdGhpcy5yb290TWVudS5vcmlhdGF0aW9uIH19XCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtbWVudS1pdGVtXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvYXgtcG9wb3Zlcj5cbiJdfQ==
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWVudS9zcmMvbGliL21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBT3RELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxzQkFBc0I7SUFML0Q7O1FBeUJFLGlCQUFZLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFMUQsWUFBTyxHQUFHLEtBQUssQ0FBQztRQWdCeEIsWUFBTyxHQUErQixJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUV2RSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBR2YsYUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQWtGL0I7SUF4SEM7O09BRUc7SUFDSCxJQUNXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLENBQVM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLElBQUksRUFBRSxNQUFNO1lBQ1osS0FB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T0FBTztzQkFEZCxTQUFTO3VCQUFDLGtCQUFrQjtnQkFRbEIsSUFBSTtzQkFEZCxLQUFLO2dCQVlOLFlBQVk7c0JBRFgsTUFBTTtnQkFRSSxNQUFNO3NCQURoQixLQUFLO2dCQVlOLE9BQU87c0JBRE4sTUFBTTtnQkFTUCxRQUFRO3NCQURQLGVBQWU7dUJBQUMsbUJBQW1CO2dCQWtFaEMsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU87Z0JBTVosV0FBVztzQkFEbEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENsaWNrRXZlbnQsIE1YSW50ZXJhY3RpdmVDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhSb290TWVudSB9IGZyb20gJy4uL2NsYXNzL3Jvb3QtbWVudS5jbGFzcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LW1lbnUtaXRlbScsXG4gIGlucHV0czogWydkaXNhYmxlZCddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhNZW51SXRlbUNvbXBvbmVudCBleHRlbmRzIE1YSW50ZXJhY3RpdmVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChBWFBvcG92ZXJDb21wb25lbnQpXG4gIHByaXZhdGUgcG9wb3ZlcjogQVhQb3BvdmVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX3RleHQ6IHN0cmluZztcbiAgLyoqXG4gICAqICBQcm92aWRpbmcgYSBzdHJpbmcgdmFsdWUgZm9yIGl0cyB0ZXh0IHN0YXRlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ3RleHQnLFxuICAgICAgdmFsdWU6IHYsXG4gICAgfSk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgYWN0aXZlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBfYWN0aXZlID0gZmFsc2U7XG4gIC8qKlxuICAgKiAgUHJvdmlkaW5nIGEgc3RyaW5nIHZhbHVlIGZvciBpdHMgdGV4dCBzdGF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGFjdGl2ZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ2FjdGl2ZScsXG4gICAgICB2YWx1ZTogdixcbiAgICB9KTtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8QVhDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhDbGlja0V2ZW50PigpO1xuXG4gIGlzUm9vdCA9IGZhbHNlO1xuICBwYXJlbnQ/OiBBWE1lbnVJdGVtQ29tcG9uZW50O1xuXG4gIHJvb3RNZW51ID0gaW5qZWN0KEFYUm9vdE1lbnUpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQVhNZW51SXRlbUNvbXBvbmVudClcbiAgY2hpbGRyZW46IFF1ZXJ5TGlzdDxBWE1lbnVJdGVtQ29tcG9uZW50PjtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjLnBhcmVudCA9IHRoaXM7XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLnBvcG92ZXI/LmNsb3NlKCk7XG4gIH1cblxuICAvLyBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcbiAgLy8gcHJpdmF0ZSBvbk1vdXNlSG92ZXIoZTogTW91c2VFdmVudCkge1xuICAvLyAgIGNvbnNvbGUubG9nKCdhJyk7XG4gIC8vICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gIC8vICAgICBjLmNsb3NlKCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBfaGFuZGxlT25PcGVuZWQoKSB7XG4gICAgdGhpcy5wYXJlbnQuY2hpbGRyZW4uZm9yRWFjaCgoYykgPT4ge1xuICAgICAgaWYgKGMgIT0gdGhpcykge1xuICAgICAgICBjLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfaGFuZGxlT25DbG9zZWQoKSB7XG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjLmNsb3NlKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRJY29uKCkge1xuICAgIHN3aXRjaCAodGhpcy5yb290TWVudS5vcmlhdGF0aW9uKSB7XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIHJldHVybiAnYXgtaWNvbi1hcnJvdy1yaWdodCc7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgICAgcmV0dXJuICdheC1pY29uLWFycm93LWRvd24nO1xuICAgIH1cbiAgfVxuXG4gIGdldFBsYWNlbWVudCgpIHtcbiAgICBzd2l0Y2ggKHRoaXMucm9vdE1lbnUub3JpYXRhdGlvbikge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgICAgIHJldHVybiAnYm90dG9tLXN0YXJ0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJ2VuZC10b3AnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAodGhpcy5pc1Jvb3QpIHtcbiAgICAgICAgICByZXR1cm4gJ2VuZC10b3AnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnZW5kLXRvcCc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2JvdHRvbS1zdGFydCc7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBfX2hvc3RDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtgJHt0aGlzLmRpc2FibGVkID8gJ2F4LXN0YXRlLWRpc2FibGVkJyA6ICcnfWAsIGAke3RoaXMuYWN0aXZlID8gJ2F4LXN0YXRlLWFjdGl2ZScgOiAnJ31gXTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBfX2hvc3RDbGljayhlOiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMuZ2V0SG9zdEVsZW1lbnQoKSxcbiAgICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImF4LXByZWZpeFwiPjwvbmctY29udGVudD5cbjxkaXYgY2xhc3M9XCJheC1tZW51LWl0ZW0tdGV4dFwiPnt7IHRleHQgfX08L2Rpdj5cbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LXN1ZmZpeFwiPjwvbmctY29udGVudD5cbjxpIGNsYXNzPVwiYXgtaWNvbiB7eyBnZXRJY29uKCkgfX0gYXgtbWVudS1pdGVtLWNoaWxkLWljb25cIiAqbmdJZj1cImNoaWxkcmVuLmxlbmd0aFwiPjwvaT5cblxuPGF4LXBvcG92ZXJcbiAgW2Nsb3NlT25dPVwiJ2NsaWNrT3V0J1wiXG4gIFtvcGVuT25dPVwicm9vdE1lbnUub3Blbk9uXCJcbiAgW3RhcmdldF09XCJnZXRIb3N0RWxlbWVudCgpXCJcbiAgW29mZnNldFldPVwiaXNSb290ID8gOCA6IDBcIlxuICBbb2Zmc2V0WF09XCJpc1Jvb3QgPyAwIDogNFwiXG4gIFtwbGFjZW1lbnRdPVwiZ2V0UGxhY2VtZW50KClcIlxuICAob25PcGVuZWQpPVwiX2hhbmRsZU9uT3BlbmVkKClcIlxuICAob25DbG9zZWQpPVwiX2hhbmRsZU9uQ2xvc2VkKClcIlxuPlxuICA8ZGl2IGNsYXNzPVwiYXgtbWVudS1pdGVtLWNoaWxkcmVuIGF4LXBhcmVudC17eyB0aGlzLnJvb3RNZW51Lm9yaWF0YXRpb24gfX1cIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJheC1tZW51LWl0ZW1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9heC1wb3BvdmVyPlxuIl19