@ieeesa-npm/presentation 0.33.0 → 1.0.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 (228) hide show
  1. package/esm2022/lib/assets/constants.json +13 -561
  2. package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +28 -60
  3. package/esm2022/lib/components/checkbox/checkbox.component.mjs +16 -77
  4. package/esm2022/lib/components/date-picker/date-picker.component.mjs +10 -27
  5. package/esm2022/lib/components/date-picker-header/date-picker-header.component.mjs +11 -6
  6. package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +14 -275
  7. package/esm2022/lib/components/form-error/form-error.component.mjs +6 -6
  8. package/esm2022/lib/components/input/input.component.mjs +13 -34
  9. package/esm2022/lib/components/notification/notification.component.mjs +6 -18
  10. package/esm2022/lib/components/radio/radio.component.mjs +6 -12
  11. package/esm2022/lib/components/search/search.component.mjs +10 -62
  12. package/esm2022/lib/components/select/select.component.mjs +9 -32
  13. package/esm2022/lib/components/text-area/text-area.component.mjs +7 -65
  14. package/esm2022/lib/date-formats.mjs +2 -2
  15. package/esm2022/lib/directives/dynamic-form-field/dynamic-form-field.directive.mjs +5 -206
  16. package/esm2022/lib/models/checkbox-option.model.mjs +2 -0
  17. package/esm2022/lib/models/confirmation-modal-data.model.mjs +2 -0
  18. package/esm2022/lib/models/date-picker.model.mjs +1 -1
  19. package/esm2022/lib/models/field-config.model.mjs +1 -1
  20. package/esm2022/lib/models/footer-config.model.mjs +1 -1
  21. package/esm2022/lib/models/form-control-types.model.mjs +9 -9
  22. package/esm2022/lib/models/header-config.model.mjs +1 -1
  23. package/esm2022/lib/models/navigation-menu.model.mjs +1 -1
  24. package/esm2022/lib/models/select-option.model.mjs +2 -0
  25. package/esm2022/lib/models/toggle-button.model.mjs +1 -1
  26. package/esm2022/lib/presentation.module.mjs +5 -5
  27. package/esm2022/lib/services/datepicker.service.mjs +4 -4
  28. package/esm2022/lib/services/form-utility.service.mjs +5 -17
  29. package/esm2022/public-api.mjs +17 -97
  30. package/fesm2022/ieeesa-npm-presentation.mjs +599 -7589
  31. package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -1
  32. package/lib/components/autocomplete/autocomplete.component.d.ts +13 -27
  33. package/lib/components/checkbox/checkbox.component.d.ts +6 -32
  34. package/lib/components/date-picker/date-picker.component.d.ts +2 -11
  35. package/lib/components/dynamic-form/dynamic-form.component.d.ts +11 -157
  36. package/lib/components/input/input.component.d.ts +2 -9
  37. package/lib/components/notification/notification.component.d.ts +1 -4
  38. package/lib/components/radio/radio.component.d.ts +1 -3
  39. package/lib/components/search/search.component.d.ts +4 -13
  40. package/lib/components/select/select.component.d.ts +2 -5
  41. package/lib/components/text-area/text-area.component.d.ts +2 -24
  42. package/lib/directives/dynamic-form-field/dynamic-form-field.directive.d.ts +3 -36
  43. package/lib/models/checkbox-option.model.d.ts +6 -0
  44. package/lib/models/confirmation-modal-data.model.d.ts +5 -0
  45. package/lib/models/date-picker.model.d.ts +0 -3
  46. package/lib/models/field-config.model.d.ts +2 -54
  47. package/lib/models/footer-config.model.d.ts +0 -1
  48. package/lib/models/form-control-types.model.d.ts +1 -8
  49. package/lib/models/header-config.model.d.ts +0 -6
  50. package/lib/models/navigation-menu.model.d.ts +1 -1
  51. package/lib/models/select-option.model.d.ts +5 -0
  52. package/lib/models/toggle-button.model.d.ts +0 -4
  53. package/lib/services/form-utility.service.d.ts +1 -1
  54. package/package.json +2 -4
  55. package/public-api.d.ts +16 -95
  56. package/src/lib/assets/constants.json +13 -561
  57. package/esm2022/lib/components/accordion/accordion.component.mjs +0 -61
  58. package/esm2022/lib/components/add-form-group/add-form-group.component.mjs +0 -34
  59. package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +0 -129
  60. package/esm2022/lib/components/card/card.component.mjs +0 -74
  61. package/esm2022/lib/components/chips/chips.component.mjs +0 -162
  62. package/esm2022/lib/components/color-picker/color-picker.component.mjs +0 -314
  63. package/esm2022/lib/components/data-table/data-table.component.mjs +0 -781
  64. package/esm2022/lib/components/export-format-popover/export-format-popover.component.mjs +0 -75
  65. package/esm2022/lib/components/export-success-dialog/export-success-dialog.component.mjs +0 -39
  66. package/esm2022/lib/components/file-download/file-download.component.mjs +0 -176
  67. package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -474
  68. package/esm2022/lib/components/filter/filter.component.mjs +0 -302
  69. package/esm2022/lib/components/filter-popover/filter-popover.component.mjs +0 -198
  70. package/esm2022/lib/components/footer/footer.component.mjs +0 -55
  71. package/esm2022/lib/components/form-support-text/form-support-text.component.mjs +0 -63
  72. package/esm2022/lib/components/header/header.component.mjs +0 -193
  73. package/esm2022/lib/components/icon-button/icon-button.component.mjs +0 -38
  74. package/esm2022/lib/components/image-preview/image-preview.component.mjs +0 -30
  75. package/esm2022/lib/components/inactive-tenant/inactive-tenant.component.mjs +0 -44
  76. package/esm2022/lib/components/legend/legend.component.mjs +0 -37
  77. package/esm2022/lib/components/list/list.component.mjs +0 -199
  78. package/esm2022/lib/components/loader/loader.component.mjs +0 -22
  79. package/esm2022/lib/components/menu/menu.component.mjs +0 -75
  80. package/esm2022/lib/components/modal/modal.component.mjs +0 -166
  81. package/esm2022/lib/components/modal-confirmation/modal-confirmation.component.mjs +0 -45
  82. package/esm2022/lib/components/modal-info/modal-info.component.mjs +0 -41
  83. package/esm2022/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.mjs +0 -321
  84. package/esm2022/lib/components/navigation-menu/navigation-menu.component.mjs +0 -89
  85. package/esm2022/lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component.mjs +0 -81
  86. package/esm2022/lib/components/rich-text-editor/rich-text-editor.component.mjs +0 -214
  87. package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +0 -98
  88. package/esm2022/lib/components/stepper/stepper.component.mjs +0 -69
  89. package/esm2022/lib/components/tabs/tabs.component.mjs +0 -210
  90. package/esm2022/lib/components/tile/tile.component.mjs +0 -70
  91. package/esm2022/lib/components/time-picker/time-picker.component.mjs +0 -59
  92. package/esm2022/lib/components/toggle-button/toggle-button.component.mjs +0 -76
  93. package/esm2022/lib/components/welcome/welcome.component.mjs +0 -85
  94. package/esm2022/lib/directives/file-upload/file-upload.directive.mjs +0 -85
  95. package/esm2022/lib/directives/focus-invalid-form-field/focus-invalid-form-field.directive.mjs +0 -34
  96. package/esm2022/lib/directives/observe-dom-change/observe-dom-change.directive.mjs +0 -54
  97. package/esm2022/lib/directives/set-background/set-background.directive.mjs +0 -53
  98. package/esm2022/lib/directives/text-truncated/text-truncated.directive.mjs +0 -72
  99. package/esm2022/lib/models/accordion-info.model.mjs +0 -14
  100. package/esm2022/lib/models/align-browsed-files.model.mjs +0 -7
  101. package/esm2022/lib/models/allowed-file-types.model.mjs +0 -8
  102. package/esm2022/lib/models/app-config-info.model.mjs +0 -2
  103. package/esm2022/lib/models/breadcrumb.model.mjs +0 -2
  104. package/esm2022/lib/models/button-type.model.mjs +0 -7
  105. package/esm2022/lib/models/card-button.model.mjs +0 -2
  106. package/esm2022/lib/models/card-info.model.mjs +0 -2
  107. package/esm2022/lib/models/chip-option.model.mjs +0 -21
  108. package/esm2022/lib/models/color-format.model.mjs +0 -13
  109. package/esm2022/lib/models/custom-properties.model.mjs +0 -14
  110. package/esm2022/lib/models/download-file.model.mjs +0 -2
  111. package/esm2022/lib/models/event-emit-type.model.mjs +0 -2
  112. package/esm2022/lib/models/export-format-popover.model.mjs +0 -10
  113. package/esm2022/lib/models/export-success-dialog.model.mjs +0 -2
  114. package/esm2022/lib/models/file-download-config.model.mjs +0 -2
  115. package/esm2022/lib/models/file-info.model.mjs +0 -2
  116. package/esm2022/lib/models/file-upload-payload-model.mjs +0 -2
  117. package/esm2022/lib/models/file-upload-presigned-url-res.model.mjs +0 -2
  118. package/esm2022/lib/models/file-upload-response.model.mjs +0 -2
  119. package/esm2022/lib/models/file-upload-status.model.mjs +0 -2
  120. package/esm2022/lib/models/filter-popover.model.mjs +0 -2
  121. package/esm2022/lib/models/filters-options.model.mjs +0 -2
  122. package/esm2022/lib/models/inactive-tenant.model.mjs +0 -2
  123. package/esm2022/lib/models/input-field-type.model.mjs +0 -8
  124. package/esm2022/lib/models/legend.model.mjs +0 -2
  125. package/esm2022/lib/models/link-type.model.mjs +0 -6
  126. package/esm2022/lib/models/list-item.model.mjs +0 -2
  127. package/esm2022/lib/models/menu.model.mjs +0 -2
  128. package/esm2022/lib/models/paginator-config.model.mjs +0 -2
  129. package/esm2022/lib/models/policy-confirmation-dialog.model.mjs +0 -2
  130. package/esm2022/lib/models/profile-menu.model.mjs +0 -8
  131. package/esm2022/lib/models/select-opened-state.model.mjs +0 -2
  132. package/esm2022/lib/models/selected-date.model.mjs +0 -2
  133. package/esm2022/lib/models/selected-time.model.mjs +0 -2
  134. package/esm2022/lib/models/slide-toggle-options.model.mjs +0 -2
  135. package/esm2022/lib/models/tab.model.mjs +0 -2
  136. package/esm2022/lib/models/table-actions.model.mjs +0 -2
  137. package/esm2022/lib/models/table-column-menu-info.model.mjs +0 -2
  138. package/esm2022/lib/models/table-schema.model.mjs +0 -20
  139. package/esm2022/lib/models/tile.model.mjs +0 -2
  140. package/esm2022/lib/pipes/safe.pipe.mjs +0 -44
  141. package/esm2022/lib/services/break-point-observer.service.mjs +0 -36
  142. package/esm2022/lib/services/file-upload.service.mjs +0 -378
  143. package/lib/components/accordion/accordion.component.d.ts +0 -30
  144. package/lib/components/add-form-group/add-form-group.component.d.ts +0 -19
  145. package/lib/components/breadcrumb/breadcrumb.component.d.ts +0 -61
  146. package/lib/components/card/card.component.d.ts +0 -39
  147. package/lib/components/chips/chips.component.d.ts +0 -374
  148. package/lib/components/color-picker/color-picker.component.d.ts +0 -88
  149. package/lib/components/data-table/data-table.component.d.ts +0 -326
  150. package/lib/components/export-format-popover/export-format-popover.component.d.ts +0 -45
  151. package/lib/components/export-success-dialog/export-success-dialog.component.d.ts +0 -24
  152. package/lib/components/file-download/file-download.component.d.ts +0 -383
  153. package/lib/components/file-upload/file-upload.component.d.ts +0 -522
  154. package/lib/components/filter/filter.component.d.ts +0 -113
  155. package/lib/components/filter-popover/filter-popover.component.d.ts +0 -84
  156. package/lib/components/footer/footer.component.d.ts +0 -37
  157. package/lib/components/form-support-text/form-support-text.component.d.ts +0 -32
  158. package/lib/components/header/header.component.d.ts +0 -86
  159. package/lib/components/icon-button/icon-button.component.d.ts +0 -21
  160. package/lib/components/image-preview/image-preview.component.d.ts +0 -11
  161. package/lib/components/inactive-tenant/inactive-tenant.component.d.ts +0 -21
  162. package/lib/components/legend/legend.component.d.ts +0 -13
  163. package/lib/components/list/list.component.d.ts +0 -95
  164. package/lib/components/loader/loader.component.d.ts +0 -7
  165. package/lib/components/menu/menu.component.d.ts +0 -36
  166. package/lib/components/modal/modal.component.d.ts +0 -75
  167. package/lib/components/modal-confirmation/modal-confirmation.component.d.ts +0 -24
  168. package/lib/components/modal-info/modal-info.component.d.ts +0 -23
  169. package/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.d.ts +0 -130
  170. package/lib/components/navigation-menu/navigation-menu.component.d.ts +0 -45
  171. package/lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component.d.ts +0 -46
  172. package/lib/components/rich-text-editor/rich-text-editor.component.d.ts +0 -75
  173. package/lib/components/slide-toggle/slide-toggle.component.d.ts +0 -45
  174. package/lib/components/stepper/stepper.component.d.ts +0 -46
  175. package/lib/components/tabs/tabs.component.d.ts +0 -86
  176. package/lib/components/tile/tile.component.d.ts +0 -39
  177. package/lib/components/time-picker/time-picker.component.d.ts +0 -20
  178. package/lib/components/toggle-button/toggle-button.component.d.ts +0 -51
  179. package/lib/components/welcome/welcome.component.d.ts +0 -41
  180. package/lib/directives/file-upload/file-upload.directive.d.ts +0 -42
  181. package/lib/directives/focus-invalid-form-field/focus-invalid-form-field.directive.d.ts +0 -18
  182. package/lib/directives/observe-dom-change/observe-dom-change.directive.d.ts +0 -23
  183. package/lib/directives/set-background/set-background.directive.d.ts +0 -28
  184. package/lib/directives/text-truncated/text-truncated.directive.d.ts +0 -30
  185. package/lib/models/accordion-info.model.d.ts +0 -12
  186. package/lib/models/align-browsed-files.model.d.ts +0 -4
  187. package/lib/models/allowed-file-types.model.d.ts +0 -5
  188. package/lib/models/app-config-info.model.d.ts +0 -16
  189. package/lib/models/breadcrumb.model.d.ts +0 -6
  190. package/lib/models/button-type.model.d.ts +0 -4
  191. package/lib/models/card-button.model.d.ts +0 -6
  192. package/lib/models/card-info.model.d.ts +0 -8
  193. package/lib/models/chip-option.model.d.ts +0 -25
  194. package/lib/models/color-format.model.d.ts +0 -13
  195. package/lib/models/custom-properties.model.d.ts +0 -11
  196. package/lib/models/download-file.model.d.ts +0 -4
  197. package/lib/models/event-emit-type.model.d.ts +0 -5
  198. package/lib/models/export-format-popover.model.d.ts +0 -15
  199. package/lib/models/export-success-dialog.model.d.ts +0 -8
  200. package/lib/models/file-download-config.model.d.ts +0 -9
  201. package/lib/models/file-info.model.d.ts +0 -12
  202. package/lib/models/file-upload-payload-model.d.ts +0 -10
  203. package/lib/models/file-upload-presigned-url-res.model.d.ts +0 -35
  204. package/lib/models/file-upload-response.model.d.ts +0 -13
  205. package/lib/models/file-upload-status.model.d.ts +0 -8
  206. package/lib/models/filter-popover.model.d.ts +0 -24
  207. package/lib/models/filters-options.model.d.ts +0 -4
  208. package/lib/models/inactive-tenant.model.d.ts +0 -5
  209. package/lib/models/input-field-type.model.d.ts +0 -5
  210. package/lib/models/legend.model.d.ts +0 -6
  211. package/lib/models/link-type.model.d.ts +0 -3
  212. package/lib/models/list-item.model.d.ts +0 -24
  213. package/lib/models/menu.model.d.ts +0 -9
  214. package/lib/models/paginator-config.model.d.ts +0 -5
  215. package/lib/models/policy-confirmation-dialog.model.d.ts +0 -13
  216. package/lib/models/profile-menu.model.d.ts +0 -4
  217. package/lib/models/select-opened-state.model.d.ts +0 -4
  218. package/lib/models/selected-date.model.d.ts +0 -4
  219. package/lib/models/selected-time.model.d.ts +0 -4
  220. package/lib/models/slide-toggle-options.model.d.ts +0 -6
  221. package/lib/models/tab.model.d.ts +0 -6
  222. package/lib/models/table-actions.model.d.ts +0 -8
  223. package/lib/models/table-column-menu-info.model.d.ts +0 -6
  224. package/lib/models/table-schema.model.d.ts +0 -32
  225. package/lib/models/tile.model.d.ts +0 -12
  226. package/lib/pipes/safe.pipe.d.ts +0 -16
  227. package/lib/services/break-point-observer.service.d.ts +0 -21
  228. package/lib/services/file-upload.service.d.ts +0 -462
@@ -1,302 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewEncapsulation, ViewChild, } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { MatCheckboxModule } from '@angular/material/checkbox';
4
- import { MatIconModule } from '@angular/material/icon';
5
- import { MatButtonModule } from '@angular/material/button';
6
- import { Subject, takeUntil } from 'rxjs';
7
- import { FilterOptionType } from '../../models/chip-option.model';
8
- import { ChipsComponent } from '../chips/chips.component';
9
- import { CheckboxComponent } from '../checkbox/checkbox.component';
10
- import { IconButtonComponent } from '../icon-button/icon-button.component';
11
- import * as constants from '../../assets/constants.json';
12
- import { ReactiveFormsModule } from '@angular/forms';
13
- import { MatSelectModule } from '@angular/material/select';
14
- import { SelectComponent } from '../../components/select/select.component';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "../../services/break-point-observer.service";
17
- import * as i2 from "@angular/common";
18
- import * as i3 from "@angular/material/button";
19
- /**
20
- * Provides an implementation for group of filter.
21
- * @export
22
- * @class FilterComponent
23
- * @implements {OnDestroy}
24
- */
25
- export class FilterComponent {
26
- set filterOptionType(optionType) {
27
- this.selectedFilterOptionType = optionType;
28
- }
29
- get filterOptionType() {
30
- return this.selectedFilterOptionType;
31
- }
32
- set appliedFilterOptions(options) {
33
- this.filteredTypeOptionsInfo = options;
34
- }
35
- get appliedFilterOptions() {
36
- return this.filteredTypeOptionsInfo;
37
- }
38
- set selectedFilterOptions(options) {
39
- if (options && this.selectedFilterId) {
40
- this.filtersAndOptions.set(this.selectedFilterId, options);
41
- this.setFilterSelectionOnOptionChange();
42
- this.selectedFilterOptionsList = options;
43
- if (this.prevSelectedFilterOptionsList.length &&
44
- this.prevSelectedFilterOptionsList[0].name !==
45
- this.selectedFilterOptionsList?.[0]?.name)
46
- this.recreateCheckboxOptionsControl = options;
47
- this.prevSelectedFilterOptionsList = this.selectedFilterOptionsList;
48
- }
49
- if (this.filterOptionType === this.optionsType.DROPDOWN) {
50
- this.selectedFilterDropDownList = this.selectedFilterOptionsList.map((selectOption) => {
51
- return { id: selectOption.id, name: selectOption.name ?? '' };
52
- });
53
- }
54
- }
55
- get selectedFilterOptions() {
56
- return this.selectedFilterOptionsList;
57
- }
58
- constructor(
59
- // eslint-disable-next-line no-unused-vars
60
- breakpointObserverService,
61
- // eslint-disable-next-line no-unused-vars
62
- changeDetectorReference) {
63
- this.breakpointObserverService = breakpointObserverService;
64
- this.changeDetectorReference = changeDetectorReference;
65
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
- this.constants = constants;
67
- this.arrow = this.constants?.chips?.icons?.arrow;
68
- this.check = this.constants?.chips?.icons?.check;
69
- this.removeIcon = this.constants?.chips?.icons?.remove;
70
- this.isFilterOpened = false;
71
- this.onFilterToggle = false;
72
- this.isFilterActive = false;
73
- this.isMobileView = false;
74
- this.isApplyButtonDisabled = true;
75
- this.filtersAndOptions = new Map();
76
- this.destroy$ = new Subject();
77
- this.selectedFilterOptionType = FilterOptionType.CHECKBOX;
78
- this.optionsType = FilterOptionType;
79
- this.filterButton = this.constants?.filter?.buttons[0];
80
- this.canShowSelection = false;
81
- this.selectedFilterDropDownList = [];
82
- this.defaultSelectedFilterDropDownOptions = [];
83
- this.prevSelectedFilterOptionsList = [];
84
- this.selectedFilter = new EventEmitter();
85
- this.filteredOptions = new EventEmitter();
86
- this.removeFilteredOption = new EventEmitter();
87
- this.filterDropdownSearch = new EventEmitter();
88
- this.breakpointObserverService
89
- .getBreakpoint()
90
- .pipe(takeUntil(this.destroy$))
91
- .subscribe((result) => {
92
- this.isMobileView = result.matches;
93
- this.filterButton.disabled = !this.isMobileView;
94
- });
95
- }
96
- /**
97
- * OnFilterSelected receives the selected filter from chip component, emits the selected filter and toggle the isFilterByOptionsVisible state.
98
- * @param {ChipOption} type
99
- * @memberof FilterComponent
100
- */
101
- onFilterSelected(type) {
102
- this.selectedFilterId = type.id;
103
- if (type.checked) {
104
- this.selectedFilter.emit(type);
105
- }
106
- this.isFilterOpened = type?.checked;
107
- this.filterOptionType = type.optionType ?? this.optionsType.CHECKBOX;
108
- this.onFilterToggle = false;
109
- }
110
- /**
111
- * OnRemovalOfFilteredOption method receives removed chip from chip component and emits the event with removed chip.
112
- * @param {ChipOption} option
113
- * @memberof FilterComponent
114
- */
115
- onRemovalOfFilteredOption(option) {
116
- if (option?.name === this.constants?.filter?.label?.clearAll) {
117
- this.appliedFilterOptions = [];
118
- this.filtersAndOptions.forEach((options) => {
119
- options?.forEach((option) => (option.checked = false));
120
- });
121
- this.removeFilteredOption.emit([]);
122
- }
123
- else {
124
- this.appliedFilterOptions = this.appliedFilterOptions.filter((res) => res.id !== option.id);
125
- this.appliedFilterOptions =
126
- this.appliedFilterOptions.length === 1 ? [] : this.appliedFilterOptions;
127
- this.filtersAndOptions.forEach((options) => {
128
- options?.forEach((checkBoxOption) => {
129
- if (checkBoxOption.id === option.id)
130
- checkBoxOption.checked = false;
131
- });
132
- });
133
- this.removeFilteredOption.emit(this.getListOfSelectedCheckboxes());
134
- }
135
- this.setFilterSelectionOnOptionChange();
136
- }
137
- getListOfSelectedCheckboxes() {
138
- const selectedFiltersAndOptions = [];
139
- this.filtersAndOptions.forEach((value, key) => {
140
- const selectedOptions = [];
141
- value?.forEach((option) => {
142
- if (option.checked)
143
- selectedOptions.push(option);
144
- });
145
- if (selectedOptions.length)
146
- selectedFiltersAndOptions.push({ [key]: selectedOptions });
147
- });
148
- return selectedFiltersAndOptions;
149
- }
150
- /**
151
- * OnFilterApply toggles the isFilterByOptionsVisible state, emits the selected filter options and toggles the filter stateO
152
- * @memberof FilterComponent
153
- */
154
- onFilterApply() {
155
- this.isFilterOpened = !this.isFilterOpened;
156
- this.filteredOptions.emit(this.getListOfSelectedCheckboxes());
157
- this.onFilterToggle = true;
158
- this.isApplyButtonDisabled = true;
159
- this.changeDetectorReference.detectChanges();
160
- }
161
- /**
162
- * SelectedFilterOptions method is called for every selection and deselection of filter option and stores the selected filter options.
163
- * @param {FiltersAndOptions[]} values
164
- * @memberof FilterComponent
165
- */
166
- selectedFilterOptionsInfo(values) {
167
- if (this.getListOfSelectedCheckboxes().length === 0)
168
- this.isApplyButtonDisabled = true;
169
- else
170
- this.isApplyButtonDisabled = false;
171
- if (values && this.selectedFilterId) {
172
- this.filtersAndOptions.set(this.selectedFilterId, values);
173
- this.setFilterSelectionOnOptionChange();
174
- }
175
- }
176
- /**
177
- * OnFilterByIconClick method toggles the isFilterActive value.
178
- * @memberof FilterComponent
179
- */
180
- onFilterByIconClick() {
181
- this.isFilterActive = !this.isFilterActive;
182
- }
183
- /**
184
- * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
185
- * @memberof FilterComponent
186
- */
187
- ngOnDestroy() {
188
- this.destroy$.next(true);
189
- this.destroy$.unsubscribe();
190
- }
191
- /**
192
- * OnDropdownSelectionChange() is called for every drop down selection changes and sets selectedFilterOptionsList.
193
- * @memberof FilterComponent
194
- */
195
- onDropdownSelectionChange(option) {
196
- if (option && this.selectedFilterId) {
197
- const selectedOption = [
198
- {
199
- id: option.id,
200
- name: option.name,
201
- checked: true,
202
- disabled: false,
203
- },
204
- ];
205
- this.selectedFilterOptionsList?.map((option) => {
206
- if (option.id === selectedOption[0].id) {
207
- option.checked = true;
208
- }
209
- else {
210
- option.checked = false;
211
- }
212
- });
213
- this.isApplyButtonDisabled = false;
214
- this.filtersAndOptions.set(this.selectedFilterId, selectedOption);
215
- this.setFilterSelectionOnOptionChange();
216
- }
217
- }
218
- /**
219
- * SetFilterSelectionOnOptionChange() called on every selection and deselection of filter option and sets canShowSelection flag to show or hide the tick mark of selected filter option.
220
- * @memberof FilterComponent
221
- */
222
- setFilterSelectionOnOptionChange() {
223
- if (this.canShowSelection) {
224
- for (const [key, options] of this.filtersAndOptions) {
225
- const filterOption = this.filters.find((chipOption) => {
226
- return chipOption.name === key;
227
- });
228
- if (filterOption) {
229
- filterOption.canShowSelection = options.some((option) => option.checked === true);
230
- }
231
- }
232
- }
233
- }
234
- /**
235
- * Emits the filterDropdownSearch event with the searched text value.
236
- * @param {string} searchText
237
- * @memberof FilterComponent
238
- */
239
- onDropdownSearch(searchText) {
240
- this.filterDropdownSearch.emit(searchText);
241
- }
242
- /**
243
- * Emits filterDropdownSearch event to reset the dropdown options to default when the dropdown is closed and sets search term empty.
244
- * @param {SelectOpenedState} event
245
- * @memberof FilterComponent
246
- */
247
- onDropdownOpenedChange(event) {
248
- if (this.defaultSelectedFilterDropDownOptions?.length === 0) {
249
- this.defaultSelectedFilterDropDownOptions =
250
- this.selectedFilterDropDownList;
251
- }
252
- if (!event?.opened) {
253
- this.selectedFilterDropDownList =
254
- this.defaultSelectedFilterDropDownOptions;
255
- }
256
- if (!event?.opened &&
257
- this.selectComponent?.formFields?.toArray()?.[0]?.searchTerm) {
258
- this.selectComponent.formFields.toArray()[0].searchTerm = '';
259
- }
260
- }
261
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterComponent, deps: [{ token: i1.BreakpointObserverService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
262
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterComponent, isStandalone: true, selector: "ieeesa-filter", inputs: { filterOptionType: "filterOptionType", appliedFilterOptions: "appliedFilterOptions", filterButton: "filterButton", filters: "filters", canShowSelection: "canShowSelection", selectedFilterOptions: "selectedFilterOptions" }, outputs: { selectedFilter: "selectedFilter", filteredOptions: "filteredOptions", removeFilteredOption: "removeFilteredOption", filterDropdownSearch: "filterDropdownSearch" }, viewQueries: [{ propertyName: "selectComponent", first: true, predicate: SelectComponent, descendants: true }], ngImport: i0, template: "<div class=\"ieeesa-filter\" *ngIf=\"filters && filters.length > 0\">\r\n <div\r\n class=\"d-flex flex-column flex-sm-column flex-md-column flex-lg-row flex-xl-row\"\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"filterButton\"\r\n (click)=\"onFilterByIconClick()\"\r\n ></ieeesa-icon-button>\r\n <p\r\n class=\"ieeesa-label-lg-bold-16 m-0\"\r\n *ngIf=\"!isMobileView || isFilterActive\"\r\n >\r\n {{ constants?.filter?.label?.filterBy }}\r\n </p>\r\n </div>\r\n <div\r\n [ngClass]=\"\r\n !isMobileView\r\n ? 'd-flex align-items-center'\r\n : 'd-flex align-self-stretch flex-wrap align-items-center pt-sm-2 pt-md-2 pt-2'\r\n \"\r\n *ngIf=\"!isMobileView || isFilterActive\"\r\n >\r\n <ieeesa-chips\r\n [chipGroup]=\"filters\"\r\n [arrow]=\"arrow\"\r\n [check]=\"check\"\r\n [hasChipToggled]=\"onFilterToggle\"\r\n (selectedChip)=\"onFilterSelected($event)\"\r\n ></ieeesa-chips>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!isMobileView || isFilterActive\">\r\n <ieeesa-checkbox\r\n [checkboxes]=\"selectedFilterOptions\"\r\n [recreateCheckboxOptionsControl]=\"recreateCheckboxOptionsControl\"\r\n (checkboxOptionsAndSelection)=\"selectedFilterOptionsInfo($event)\"\r\n *ngIf=\"isFilterOpened && filterOptionType === optionsType.CHECKBOX\"\r\n class=\"d-flex gap-2 ieeesa-filter__filter-options\"\r\n ></ieeesa-checkbox>\r\n <ieeesa-select\r\n *ngIf=\"isFilterOpened && filterOptionType === optionsType.DROPDOWN\"\r\n [isSortNeeded]=\"false\"\r\n [dropdownOptions]=\"selectedFilterDropDownList\"\r\n [isLabelAlignedLeft]=\"true\"\r\n [selectLabel]=\"constants?.viewGroups?.filterByLabel\"\r\n (optionSelected)=\"onDropdownSelectionChange($event)\"\r\n (optionSearched)=\"onDropdownSearch($event)\"\r\n (dropdownOpenedChange)=\"onDropdownOpenedChange($event)\"\r\n [isSearch]=\"true\"\r\n ></ieeesa-select>\r\n <button\r\n mat-button\r\n *ngIf=\"isFilterOpened\"\r\n class=\"mat-tertiary-button m-2\"\r\n [disabled]=\"isApplyButtonDisabled\"\r\n (click)=\"onFilterApply()\"\r\n >\r\n {{ constants?.filter?.label?.applyButton }}\r\n </button>\r\n <ieeesa-chips\r\n [chipGroup]=\"appliedFilterOptions\"\r\n [isViewMoreNeeded]=\"true\"\r\n *ngIf=\"appliedFilterOptions\"\r\n [arrow]=\"removeIcon\"\r\n (selectedChip)=\"onRemovalOfFilteredOption($event)\"\r\n class=\"d-flex gap-2 mt-2\"\r\n [hasViewMoreForDesktop]=\"false\"\r\n [hasViewMoreForMobile]=\"true\"\r\n ></ieeesa-chips>\r\n </ng-container>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-filter .mat-tertiary-button{height:2em;width:5.4375em;min-height:auto;min-width:auto}.ieeesa-filter__filter-options .mdc-form-field>label{padding-left:0;padding-right:4px}.ieeesa-filter__filter-options .mat-mdc-checkbox{margin-bottom:4px}.ieeesa-filter__filter-options .ieeesa-checkbox-field__label-top{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: ChipsComponent, selector: "ieeesa-chips", inputs: ["chipGroup", "chipOrientation", "noOfDefaultVisibleChips", "hasViewMoreForDesktop", "hasViewMoreForMobile", "avatar", "arrow", "check", "isViewMoreNeeded", "hasChipToggled", "viewAllLabel", "viewLessLabel"], outputs: ["selectedChip"] }, { kind: "component", type: CheckboxComponent, selector: "ieeesa-checkbox", inputs: ["isLabelNeeded", "checkboxes", "recreateCheckboxOptionsControl"], outputs: ["checkboxSelection", "checkboxOptionsAndSelection", "selectedCheckboxes", "ctaButtonClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded"], outputs: ["iconButtonClick"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: SelectComponent, selector: "ieeesa-select", inputs: ["isSortNeeded", "dropdownOptions", "selectedOptions", "formControlName", "isMultiLevel", "isLabelAlignedLeft", "selectLabel", "isMultiSelect", "isDisabled", "isSearch", "placeholderText"], outputs: ["optionSelected", "optionSearched", "dropdownOpenedChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
263
- }
264
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterComponent, decorators: [{
265
- type: Component,
266
- args: [{ selector: 'ieeesa-filter', standalone: true, imports: [
267
- CommonModule,
268
- MatCheckboxModule,
269
- MatIconModule,
270
- MatButtonModule,
271
- ChipsComponent,
272
- CheckboxComponent,
273
- IconButtonComponent,
274
- ReactiveFormsModule,
275
- MatSelectModule,
276
- SelectComponent,
277
- ], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-filter\" *ngIf=\"filters && filters.length > 0\">\r\n <div\r\n class=\"d-flex flex-column flex-sm-column flex-md-column flex-lg-row flex-xl-row\"\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"filterButton\"\r\n (click)=\"onFilterByIconClick()\"\r\n ></ieeesa-icon-button>\r\n <p\r\n class=\"ieeesa-label-lg-bold-16 m-0\"\r\n *ngIf=\"!isMobileView || isFilterActive\"\r\n >\r\n {{ constants?.filter?.label?.filterBy }}\r\n </p>\r\n </div>\r\n <div\r\n [ngClass]=\"\r\n !isMobileView\r\n ? 'd-flex align-items-center'\r\n : 'd-flex align-self-stretch flex-wrap align-items-center pt-sm-2 pt-md-2 pt-2'\r\n \"\r\n *ngIf=\"!isMobileView || isFilterActive\"\r\n >\r\n <ieeesa-chips\r\n [chipGroup]=\"filters\"\r\n [arrow]=\"arrow\"\r\n [check]=\"check\"\r\n [hasChipToggled]=\"onFilterToggle\"\r\n (selectedChip)=\"onFilterSelected($event)\"\r\n ></ieeesa-chips>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!isMobileView || isFilterActive\">\r\n <ieeesa-checkbox\r\n [checkboxes]=\"selectedFilterOptions\"\r\n [recreateCheckboxOptionsControl]=\"recreateCheckboxOptionsControl\"\r\n (checkboxOptionsAndSelection)=\"selectedFilterOptionsInfo($event)\"\r\n *ngIf=\"isFilterOpened && filterOptionType === optionsType.CHECKBOX\"\r\n class=\"d-flex gap-2 ieeesa-filter__filter-options\"\r\n ></ieeesa-checkbox>\r\n <ieeesa-select\r\n *ngIf=\"isFilterOpened && filterOptionType === optionsType.DROPDOWN\"\r\n [isSortNeeded]=\"false\"\r\n [dropdownOptions]=\"selectedFilterDropDownList\"\r\n [isLabelAlignedLeft]=\"true\"\r\n [selectLabel]=\"constants?.viewGroups?.filterByLabel\"\r\n (optionSelected)=\"onDropdownSelectionChange($event)\"\r\n (optionSearched)=\"onDropdownSearch($event)\"\r\n (dropdownOpenedChange)=\"onDropdownOpenedChange($event)\"\r\n [isSearch]=\"true\"\r\n ></ieeesa-select>\r\n <button\r\n mat-button\r\n *ngIf=\"isFilterOpened\"\r\n class=\"mat-tertiary-button m-2\"\r\n [disabled]=\"isApplyButtonDisabled\"\r\n (click)=\"onFilterApply()\"\r\n >\r\n {{ constants?.filter?.label?.applyButton }}\r\n </button>\r\n <ieeesa-chips\r\n [chipGroup]=\"appliedFilterOptions\"\r\n [isViewMoreNeeded]=\"true\"\r\n *ngIf=\"appliedFilterOptions\"\r\n [arrow]=\"removeIcon\"\r\n (selectedChip)=\"onRemovalOfFilteredOption($event)\"\r\n class=\"d-flex gap-2 mt-2\"\r\n [hasViewMoreForDesktop]=\"false\"\r\n [hasViewMoreForMobile]=\"true\"\r\n ></ieeesa-chips>\r\n </ng-container>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-filter .mat-tertiary-button{height:2em;width:5.4375em;min-height:auto;min-width:auto}.ieeesa-filter__filter-options .mdc-form-field>label{padding-left:0;padding-right:4px}.ieeesa-filter__filter-options .mat-mdc-checkbox{margin-bottom:4px}.ieeesa-filter__filter-options .ieeesa-checkbox-field__label-top{margin-top:8px}\n"] }]
278
- }], ctorParameters: function () { return [{ type: i1.BreakpointObserverService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { selectComponent: [{
279
- type: ViewChild,
280
- args: [SelectComponent]
281
- }], filterOptionType: [{
282
- type: Input
283
- }], appliedFilterOptions: [{
284
- type: Input
285
- }], filterButton: [{
286
- type: Input
287
- }], filters: [{
288
- type: Input
289
- }], canShowSelection: [{
290
- type: Input
291
- }], selectedFilterOptions: [{
292
- type: Input
293
- }], selectedFilter: [{
294
- type: Output
295
- }], filteredOptions: [{
296
- type: Output
297
- }], removeFilteredOption: [{
298
- type: Output
299
- }], filterDropdownSearch: [{
300
- type: Output
301
- }] } });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixpQkFBaUIsRUFDakIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDO0FBRXpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxP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Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnJlYWstcG9pbnQtb2JzZXJ2ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGVja2JveE9wdGlvbiwgSWNvbkJ1dHRvbiwgU2VsZWN0T3B0aW9uIH0gZnJvbSAnQGllZWVzYS1ucG0vbW9kZWxzJztcclxuaW1wb3J0IHsgQ2hpcE9wdGlvbiwgRmlsdGVyT3B0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9jaGlwLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IENoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJY29uQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi1idXR0b24vaWNvbi1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IEZpbHRlcnNBbmRPcHRpb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpbHRlcnMtb3B0aW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RPcGVuZWRTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9zZWxlY3Qtb3BlbmVkLXN0YXRlLm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgZ3JvdXAgb2YgZmlsdGVyLlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBGaWx0ZXJDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWZpbHRlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBDaGlwc0NvbXBvbmVudCxcclxuICAgIENoZWNrYm94Q29tcG9uZW50LFxyXG4gICAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBTZWxlY3RDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIGFycm93OiBJY29uQnV0dG9uID0gdGhpcy5jb25zdGFudHM/LmNoaXBzPy5pY29ucz8uYXJyb3c7XHJcbiAgY2hlY2s6IEljb25CdXR0b24gPSB0aGlzLmNvbnN0YW50cz8uY2hpcHM/Lmljb25zPy5jaGVjaztcclxuICByZW1vdmVJY29uOiBJY29uQnV0dG9uID0gdGhpcy5jb25zdGFudHM/LmNoaXBzPy5pY29ucz8ucmVtb3ZlO1xyXG4gIGlzRmlsdGVyT3BlbmVkID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRDaGVja2JveGVzITogQ2hlY2tib3hPcHRpb25bXTtcclxuICBvbkZpbHRlclRvZ2dsZSA9IGZhbHNlO1xyXG4gIGlzRmlsdGVyQWN0aXZlID0gZmFsc2U7XHJcbiAgaXNNb2JpbGVWaWV3ID0gZmFsc2U7XHJcbiAgaXNBcHBseUJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICBmaWx0ZXJzQW5kT3B0aW9ucyA9IG5ldyBNYXA8bnVtYmVyIHwgc3RyaW5nLCBDaGVja2JveE9wdGlvbltdPigpO1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICByZWNyZWF0ZUNoZWNrYm94T3B0aW9uc0NvbnRyb2whOiBDaGVja2JveE9wdGlvbltdO1xyXG4gIEBWaWV3Q2hpbGQoU2VsZWN0Q29tcG9uZW50KSBzZWxlY3RDb21wb25lbnQhOiBTZWxlY3RDb21wb25lbnQ7XHJcbiAgcHJpdmF0ZSBmaWx0ZXJlZFR5cGVPcHRpb25zSW5mbyE6IENoaXBPcHRpb25bXTtcclxuICBwcml2YXRlIHNlbGVjdGVkRmlsdGVyT3B0aW9uVHlwZTogRmlsdGVyT3B0aW9uVHlwZSA9XHJcbiAgICBGaWx0ZXJPcHRpb25UeXBlLkNIRUNLQk9YO1xyXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXJPcHRpb25UeXBlKG9wdGlvblR5cGU6IEZpbHRlck9wdGlvblR5cGUpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25UeXBlID0gb3B0aW9uVHlwZTtcclxuICB9XHJcbiAgZ2V0IGZpbHRlck9wdGlvblR5cGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvblR5cGU7XHJcbiAgfVxyXG4gIG9wdGlvbnNUeXBlID0gRmlsdGVyT3B0aW9uVHlwZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBhcHBsaWVkRmlsdGVyT3B0aW9ucyhvcHRpb25zOiBDaGlwT3B0aW9uW10pIHtcclxuICAgIHRoaXMuZmlsdGVyZWRUeXBlT3B0aW9uc0luZm8gPSBvcHRpb25zO1xyXG4gIH1cclxuICBnZXQgYXBwbGllZEZpbHRlck9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZFR5cGVPcHRpb25zSW5mbztcclxuICB9XHJcbiAgQElucHV0KCkgZmlsdGVyQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5jb25zdGFudHM/LmZpbHRlcj8uYnV0dG9uc1swXTtcclxuICBASW5wdXQoKSBmaWx0ZXJzITogQ2hpcE9wdGlvbltdO1xyXG4gIEBJbnB1dCgpIGNhblNob3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuICBwcml2YXRlIHNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3QhOiBDaGVja2JveE9wdGlvbltdO1xyXG4gIHNlbGVjdGVkRmlsdGVyRHJvcERvd25MaXN0OiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIGRlZmF1bHRTZWxlY3RlZEZpbHRlckRyb3BEb3duT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBzZWxlY3RlZEZpbHRlcklkITogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByZXZTZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0OiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgQElucHV0KClcclxuICBzZXQgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zKG9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10pIHtcclxuICAgIGlmIChvcHRpb25zICYmIHRoaXMuc2VsZWN0ZWRGaWx0ZXJJZCkge1xyXG4gICAgICB0aGlzLmZpbHRlcnNBbmRPcHRpb25zLnNldCh0aGlzLnNlbGVjdGVkRmlsdGVySWQsIG9wdGlvbnMpO1xyXG4gICAgICB0aGlzLnNldEZpbHRlclNlbGVjdGlvbk9uT3B0aW9uQ2hhbmdlKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdCA9IG9wdGlvbnM7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnByZXZTZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0Lmxlbmd0aCAmJlxyXG4gICAgICAgIHRoaXMucHJldlNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3RbMF0ubmFtZSAhPT1cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdD8uWzBdPy5uYW1lXHJcbiAgICAgIClcclxuICAgICAgICB0aGlzLnJlY3JlYXRlQ2hlY2tib3hPcHRpb25zQ29udHJvbCA9IG9wdGlvbnM7XHJcbiAgICAgIHRoaXMucHJldlNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3QgPSB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3Q7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJPcHRpb25UeXBlID09PSB0aGlzLm9wdGlvbnNUeXBlLkRST1BET1dOKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJEcm9wRG93bkxpc3QgPSB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3QubWFwKFxyXG4gICAgICAgIChzZWxlY3RPcHRpb246IENoZWNrYm94T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geyBpZDogc2VsZWN0T3B0aW9uLmlkLCBuYW1lOiBzZWxlY3RPcHRpb24ubmFtZSA/PyAnJyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNlbGVjdGVkRmlsdGVyT3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3Q7XHJcbiAgfVxyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hpcE9wdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyZWRPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJzQW5kT3B0aW9uc1tdPigpO1xyXG4gIEBPdXRwdXQoKSByZW1vdmVGaWx0ZXJlZE9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRHJvcGRvd25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmZXJlbmNlOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRCcmVha3BvaW50KClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHJlc3VsdC5tYXRjaGVzO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQnV0dG9uLmRpc2FibGVkID0gIXRoaXMuaXNNb2JpbGVWaWV3O1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogT25GaWx0ZXJTZWxlY3RlZCByZWNlaXZlcyB0aGUgc2VsZWN0ZWQgZmlsdGVyIGZyb20gY2hpcCBjb21wb25lbnQsIGVtaXRzIHRoZSBzZWxlY3RlZCBmaWx0ZXIgYW5kIHRvZ2dsZSB0aGUgaXNGaWx0ZXJCeU9wdGlvbnNWaXNpYmxlIHN0YXRlLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbn0gdHlwZVxyXG4gICAqIEBtZW1iZXJvZiBGaWx0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkZpbHRlclNlbGVjdGVkKHR5cGU6IENoaXBPcHRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJJZCA9IHR5cGUuaWQ7XHJcbiAgICBpZiAodHlwZS5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXIuZW1pdCh0eXBlKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNGaWx0ZXJPcGVuZWQgPSB0eXBlPy5jaGVja2VkO1xyXG4gICAgdGhpcy5maWx0ZXJPcHRpb25UeXBlID0gdHlwZS5vcHRpb25UeXBlID8/IHRoaXMub3B0aW9uc1R5cGUuQ0hFQ0tCT1g7XHJcbiAgICB0aGlzLm9uRmlsdGVyVG9nZ2xlID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9uUmVtb3ZhbE9mRmlsdGVyZWRPcHRpb24gbWV0aG9kIHJlY2VpdmVzIHJlbW92ZWQgY2hpcCBmcm9tIGNoaXAgY29tcG9uZW50IGFuZCBlbWl0cyB0aGUgZXZlbnQgd2l0aCByZW1vdmVkIGNoaXAuXHJcbiAgICogQHBhcmFtIHtDaGlwT3B0aW9ufSBvcHRpb25cclxuICAgKiBAbWVtYmVyb2YgRmlsdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25SZW1vdmFsT2ZGaWx0ZXJlZE9wdGlvbihvcHRpb246IENoaXBPcHRpb24pOiB2b2lkIHtcclxuICAgIGlmIChvcHRpb24/Lm5hbWUgPT09IHRoaXMuY29uc3RhbnRzPy5maWx0ZXI/LmxhYmVsPy5jbGVhckFsbCkge1xyXG4gICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuZmlsdGVyc0FuZE9wdGlvbnMuZm9yRWFjaCgob3B0aW9uczogQ2hlY2tib3hPcHRpb25bXSkgPT4ge1xyXG4gICAgICAgIG9wdGlvbnM/LmZvckVhY2goKG9wdGlvbjogQ2hlY2tib3hPcHRpb24pID0+IChvcHRpb24uY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJlbW92ZUZpbHRlcmVkT3B0aW9uLmVtaXQoW10pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyT3B0aW9ucyA9IHRoaXMuYXBwbGllZEZpbHRlck9wdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgIChyZXM6IENoaXBPcHRpb24pID0+IHJlcy5pZCAhPT0gb3B0aW9uLmlkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuYXBwbGllZEZpbHRlck9wdGlvbnMgPVxyXG4gICAgICAgIHRoaXMuYXBwbGllZEZpbHRlck9wdGlvbnMubGVuZ3RoID09PSAxID8gW10gOiB0aGlzLmFwcGxpZWRGaWx0ZXJPcHRpb25zO1xyXG4gICAgICB0aGlzLmZpbHRlcnNBbmRPcHRpb25zLmZvckVhY2goKG9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10pID0+IHtcclxuICAgICAgICBvcHRpb25zPy5mb3JFYWNoKChjaGVja0JveE9wdGlvbjogQ2hlY2tib3hPcHRpb24pID0+IHtcclxuICAgICAgICAgIGlmIChjaGVja0JveE9wdGlvbi5pZCA9PT0gb3B0aW9uLmlkKSBjaGVja0JveE9wdGlvbi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJlbW92ZUZpbHRlcmVkT3B0aW9uLmVtaXQodGhpcy5nZXRMaXN0T2ZTZWxlY3RlZENoZWNrYm94ZXMoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZpbHRlclNlbGVjdGlvbk9uT3B0aW9uQ2hhbmdlKCk7XHJcbiAgfVxyXG4gIGdldExpc3RPZlNlbGVjdGVkQ2hlY2tib3hlcygpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyc0FuZE9wdGlvbnM6IEZpbHRlcnNBbmRPcHRpb25zW10gPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyc0FuZE9wdGlvbnMuZm9yRWFjaChcclxuICAgICAgKHZhbHVlOiBDaGVja2JveE9wdGlvbltdLCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgIHZhbHVlPy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgIGlmIChvcHRpb24uY2hlY2tlZCkgc2VsZWN0ZWRPcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aClcclxuICAgICAgICAgIHNlbGVjdGVkRmlsdGVyc0FuZE9wdGlvbnMucHVzaCh7IFtrZXldOiBzZWxlY3RlZE9wdGlvbnMgfSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRGaWx0ZXJzQW5kT3B0aW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogT25GaWx0ZXJBcHBseSB0b2dnbGVzIHRoZSBpc0ZpbHRlckJ5T3B0aW9uc1Zpc2libGUgc3RhdGUsIGVtaXRzIHRoZSBzZWxlY3RlZCBmaWx0ZXIgb3B0aW9ucyBhbmQgdG9nZ2xlcyB0aGUgZmlsdGVyIHN0YXRlT1xyXG4gICAqIEBtZW1iZXJvZiBGaWx0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkZpbHRlckFwcGx5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZpbHRlck9wZW5lZCA9ICF0aGlzLmlzRmlsdGVyT3BlbmVkO1xyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMuZW1pdCh0aGlzLmdldExpc3RPZlNlbGVjdGVkQ2hlY2tib3hlcygpKTtcclxuICAgIHRoaXMub25GaWx0ZXJUb2dnbGUgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0FwcGx5QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZmVyZW5jZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkRmlsdGVyT3B0aW9ucyBtZXRob2QgaXMgY2FsbGVkIGZvciBldmVyeSBzZWxlY3Rpb24gYW5kIGRlc2VsZWN0aW9uIG9mIGZpbHRlciBvcHRpb24gYW5kIHN0b3JlcyB0aGUgc2VsZWN0ZWQgZmlsdGVyIG9wdGlvbnMuXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJzQW5kT3B0aW9uc1tdfSB2YWx1ZXNcclxuICAgKiBAbWVtYmVyb2YgRmlsdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zSW5mbyh2YWx1ZXM6IENoZWNrYm94T3B0aW9uW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdldExpc3RPZlNlbGVjdGVkQ2hlY2tib3hlcygpLmxlbmd0aCA9PT0gMClcclxuICAgICAgdGhpcy5pc0FwcGx5QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgZWxzZSB0aGlzLmlzQXBwbHlCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHZhbHVlcyAmJiB0aGlzLnNlbGVjdGVkRmlsdGVySWQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJzQW5kT3B0aW9ucy5zZXQodGhpcy5zZWxlY3RlZEZpbHRlcklkLCB2YWx1ZXMpO1xyXG4gICAgICB0aGlzLnNldEZpbHRlclNlbGVjdGlvbk9uT3B0aW9uQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9uRmlsdGVyQnlJY29uQ2xpY2sgbWV0aG9kIHRvZ2dsZXMgdGhlIGlzRmlsdGVyQWN0aXZlIHZhbHVlLlxyXG4gICAqIEBtZW1iZXJvZiBGaWx0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkZpbHRlckJ5SWNvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZpbHRlckFjdGl2ZSA9ICF0aGlzLmlzRmlsdGVyQWN0aXZlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIEZpbHRlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT25Ecm9wZG93blNlbGVjdGlvbkNoYW5nZSgpIGlzIGNhbGxlZCBmb3IgZXZlcnkgZHJvcCBkb3duIHNlbGVjdGlvbiBjaGFuZ2VzIGFuZCBzZXRzIHNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3QuXHJcbiAgICogQG1lbWJlcm9mIEZpbHRlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRHJvcGRvd25TZWxlY3Rpb25DaGFuZ2Uob3B0aW9uOiBTZWxlY3RPcHRpb24pOiB2b2lkIHtcclxuICAgIGlmIChvcHRpb24gJiYgdGhpcy5zZWxlY3RlZEZpbHRlcklkKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uOiBDaGVja2JveE9wdGlvbltdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBvcHRpb24uaWQsXHJcbiAgICAgICAgICBuYW1lOiBvcHRpb24ubmFtZSxcclxuICAgICAgICAgIGNoZWNrZWQ6IHRydWUsXHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0Py5tYXAoKG9wdGlvbikgPT4ge1xyXG4gICAgICAgIGlmIChvcHRpb24uaWQgPT09IHNlbGVjdGVkT3B0aW9uWzBdLmlkKSB7XHJcbiAgICAgICAgICBvcHRpb24uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9wdGlvbi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc0FwcGx5QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWx0ZXJzQW5kT3B0aW9ucy5zZXQodGhpcy5zZWxlY3RlZEZpbHRlcklkLCBzZWxlY3RlZE9wdGlvbik7XHJcbiAgICAgIHRoaXMuc2V0RmlsdGVyU2VsZWN0aW9uT25PcHRpb25DaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldEZpbHRlclNlbGVjdGlvbk9uT3B0aW9uQ2hhbmdlKCkgY2FsbGVkIG9uIGV2ZXJ5IHNlbGVjdGlvbiBhbmQgZGVzZWxlY3Rpb24gb2YgZmlsdGVyIG9wdGlvbiBhbmQgc2V0cyBjYW5TaG93U2VsZWN0aW9uIGZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSB0aWNrIG1hcmsgb2Ygc2VsZWN0ZWQgZmlsdGVyIG9wdGlvbi5cclxuICAgKiBAbWVtYmVyb2YgRmlsdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2V0RmlsdGVyU2VsZWN0aW9uT25PcHRpb25DaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jYW5TaG93U2VsZWN0aW9uKSB7XHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgb3B0aW9uc10gb2YgdGhpcy5maWx0ZXJzQW5kT3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlck9wdGlvbiA9IHRoaXMuZmlsdGVycy5maW5kKChjaGlwT3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY2hpcE9wdGlvbi5uYW1lID09PSBrZXk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGZpbHRlck9wdGlvbikge1xyXG4gICAgICAgICAgZmlsdGVyT3B0aW9uLmNhblNob3dTZWxlY3Rpb24gPSBvcHRpb25zLnNvbWUoXHJcbiAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5jaGVja2VkID09PSB0cnVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZmlsdGVyRHJvcGRvd25TZWFyY2ggZXZlbnQgd2l0aCB0aGUgc2VhcmNoZWQgdGV4dCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dFxyXG4gICAqIEBtZW1iZXJvZiBGaWx0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkRyb3Bkb3duU2VhcmNoKHNlYXJjaFRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJEcm9wZG93blNlYXJjaC5lbWl0KHNlYXJjaFRleHQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyBmaWx0ZXJEcm9wZG93blNlYXJjaCBldmVudCB0byByZXNldCB0aGUgZHJvcGRvd24gb3B0aW9ucyB0byBkZWZhdWx0IHdoZW4gdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCBhbmQgc2V0cyBzZWFyY2ggdGVybSBlbXB0eS5cclxuICAgKiBAcGFyYW0ge1NlbGVjdE9wZW5lZFN0YXRlfSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBGaWx0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkRyb3Bkb3duT3BlbmVkQ2hhbmdlKGV2ZW50OiBTZWxlY3RPcGVuZWRTdGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVmYXVsdFNlbGVjdGVkRmlsdGVyRHJvcERvd25PcHRpb25zPy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRGaWx0ZXJEcm9wRG93bk9wdGlvbnMgPVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJEcm9wRG93bkxpc3Q7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50Py5vcGVuZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlckRyb3BEb3duTGlzdCA9XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRGaWx0ZXJEcm9wRG93bk9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgICFldmVudD8ub3BlbmVkICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50Py5mb3JtRmllbGRzPy50b0FycmF5KCk/LlswXT8uc2VhcmNoVGVybVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmZvcm1GaWVsZHMudG9BcnJheSgpWzBdLnNlYXJjaFRlcm0gPSAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImllZWVzYS1maWx0ZXJcIiAqbmdJZj1cImZpbHRlcnMgJiYgZmlsdGVycy5sZW5ndGggPiAwXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmxleC1zbS1jb2x1bW4gZmxleC1tZC1jb2x1bW4gZmxleC1sZy1yb3cgZmxleC14bC1yb3dcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICBbaWNvbkJ1dHRvbl09XCJmaWx0ZXJCdXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkZpbHRlckJ5SWNvbkNsaWNrKClcIlxyXG4gICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgIDxwXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtbGFiZWwtbGctYm9sZC0xNiBtLTBcIlxyXG4gICAgICAgICpuZ0lmPVwiIWlzTW9iaWxlVmlldyB8fCBpc0ZpbHRlckFjdGl2ZVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBjb25zdGFudHM/LmZpbHRlcj8ubGFiZWw/LmZpbHRlckJ5IH19XHJcbiAgICAgIDwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAhaXNNb2JpbGVWaWV3XHJcbiAgICAgICAgICA/ICdkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyJ1xyXG4gICAgICAgICAgOiAnZC1mbGV4IGFsaWduLXNlbGYtc3RyZXRjaCBmbGV4LXdyYXAgYWxpZ24taXRlbXMtY2VudGVyIHB0LXNtLTIgcHQtbWQtMiBwdC0yJ1xyXG4gICAgICBcIlxyXG4gICAgICAqbmdJZj1cIiFpc01vYmlsZVZpZXcgfHwgaXNGaWx0ZXJBY3RpdmVcIlxyXG4gICAgPlxyXG4gICAgICA8aWVlZXNhLWNoaXBzXHJcbiAgICAgICAgW2NoaXBHcm91cF09XCJmaWx0ZXJzXCJcclxuICAgICAgICBbYXJyb3ddPVwiYXJyb3dcIlxyXG4gICAgICAgIFtjaGVja109XCJjaGVja1wiXHJcbiAgICAgICAgW2hhc0NoaXBUb2dnbGVkXT1cIm9uRmlsdGVyVG9nZ2xlXCJcclxuICAgICAgICAoc2VsZWN0ZWRDaGlwKT1cIm9uRmlsdGVyU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgID48L2llZWVzYS1jaGlwcz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNb2JpbGVWaWV3IHx8IGlzRmlsdGVyQWN0aXZlXCI+XHJcbiAgICA8aWVlZXNhLWNoZWNrYm94XHJcbiAgICAgIFtjaGVja2JveGVzXT1cInNlbGVjdGVkRmlsdGVyT3B0aW9uc1wiXHJcbiAgICAgIFtyZWNyZWF0ZUNoZWNrYm94T3B0aW9uc0NvbnRyb2xdPVwicmVjcmVhdGVDaGVja2JveE9wdGlvbnNDb250cm9sXCJcclxuICAgICAgKGNoZWNrYm94T3B0aW9uc0FuZFNlbGVjdGlvbik9XCJzZWxlY3RlZEZpbHRlck9wdGlvbnNJbmZvKCRldmVudClcIlxyXG4gICAgICAqbmdJZj1cImlzRmlsdGVyT3BlbmVkICYmIGZpbHRlck9wdGlvblR5cGUgPT09IG9wdGlvbnNUeXBlLkNIRUNLQk9YXCJcclxuICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgaWVlZXNhLWZpbHRlcl9fZmlsdGVyLW9wdGlvbnNcIlxyXG4gICAgPjwvaWVlZXNhLWNoZWNrYm94PlxyXG4gICAgPGllZWVzYS1zZWxlY3RcclxuICAgICAgKm5nSWY9XCJpc0ZpbHRlck9wZW5lZCAmJiBmaWx0ZXJPcHRpb25UeXBlID09PSBvcHRpb25zVHlwZS5EUk9QRE9XTlwiXHJcbiAgICAgIFtpc1NvcnROZWVkZWRdPVwiZmFsc2VcIlxyXG4gICAgICBbZHJvcGRvd25PcHRpb25zXT1cInNlbGVjdGVkRmlsdGVyRHJvcERvd25MaXN0XCJcclxuICAgICAgW2lzTGFiZWxBbGlnbmVkTGVmdF09XCJ0cnVlXCJcclxuICAgICAgW3NlbGVjdExhYmVsXT1cImNvbnN0YW50cz8udmlld0dyb3Vwcz8uZmlsdGVyQnlMYWJlbFwiXHJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvbkRyb3Bkb3duU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAob3B0aW9uU2VhcmNoZWQpPVwib25Ecm9wZG93blNlYXJjaCgkZXZlbnQpXCJcclxuICAgICAgKGRyb3Bkb3duT3BlbmVkQ2hhbmdlKT1cIm9uRHJvcGRvd25PcGVuZWRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIFtpc1NlYXJjaF09XCJ0cnVlXCJcclxuICAgID48L2llZWVzYS1zZWxlY3Q+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1idXR0b25cclxuICAgICAgKm5nSWY9XCJpc0ZpbHRlck9wZW5lZFwiXHJcbiAgICAgIGNsYXNzPVwibWF0LXRlcnRpYXJ5LWJ1dHRvbiBtLTJcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNBcHBseUJ1dHRvbkRpc2FibGVkXCJcclxuICAgICAgKGNsaWNrKT1cIm9uRmlsdGVyQXBwbHkoKVwiXHJcbiAgICA+XHJcbiAgICAgIHt7IGNvbnN0YW50cz8uZmlsdGVyPy5sYWJlbD8uYXBwbHlCdXR0b24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGllZWVzYS1jaGlwc1xyXG4gICAgICBbY2hpcEdyb3VwXT1cImFwcGxpZWRGaWx0ZXJPcHRpb25zXCJcclxuICAgICAgW2lzVmlld01vcmVOZWVkZWRdPVwidHJ1ZVwiXHJcbiAgICAgICpuZ0lmPVwiYXBwbGllZEZpbHRlck9wdGlvbnNcIlxyXG4gICAgICBbYXJyb3ddPVwicmVtb3ZlSWNvblwiXHJcbiAgICAgIChzZWxlY3RlZENoaXApPVwib25SZW1vdmFsT2ZGaWx0ZXJlZE9wdGlvbigkZXZlbnQpXCJcclxuICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXQtMlwiXHJcbiAgICAgIFtoYXNWaWV3TW9yZUZvckRlc2t0b3BdPVwiZmFsc2VcIlxyXG4gICAgICBbaGFzVmlld01vcmVGb3JNb2JpbGVdPVwidHJ1ZVwiXHJcbiAgICA+PC9pZWVlc2EtY2hpcHM+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG4iXX0=