@annalib/anna-core 23.0.3 → 23.0.4

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 (128) hide show
  1. package/{esm2022 → esm2020}/annalib-anna-core.mjs +4 -4
  2. package/esm2020/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +15 -0
  3. package/esm2020/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +14 -0
  4. package/esm2020/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.mjs +11 -0
  5. package/esm2020/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +36 -0
  6. package/esm2020/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +15 -0
  7. package/esm2020/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +22 -0
  8. package/esm2020/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +14 -0
  9. package/esm2020/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +23 -0
  10. package/esm2020/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +15 -0
  11. package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +43 -0
  12. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +284 -285
  13. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.mjs +43 -44
  14. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +38 -39
  15. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +1 -1
  16. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +1 -1
  17. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +10 -10
  18. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/models/anna-sort.model.mjs +6 -6
  19. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +29 -29
  20. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.mjs +38 -39
  21. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.mjs +26 -27
  22. package/esm2020/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +22 -0
  23. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +53 -54
  24. package/esm2020/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +25 -0
  25. package/esm2020/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +16 -0
  26. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +208 -208
  27. package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +1155 -0
  28. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +151 -151
  29. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +132 -132
  30. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +53 -53
  31. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +66 -66
  32. package/{esm2022 → esm2020}/lib/anna-core-shared-lib/services/anna-sort.service.mjs +176 -176
  33. package/esm2020/lib/anna-core.module.mjs +221 -0
  34. package/esm2020/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +151 -0
  35. package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +364 -0
  36. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +237 -0
  37. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +180 -0
  38. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +306 -0
  39. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +291 -0
  40. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +787 -0
  41. package/esm2020/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +64 -0
  42. package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +357 -0
  43. package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +189 -0
  44. package/{esm2022 → esm2020}/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +1 -1
  45. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +178 -0
  46. package/{esm2022 → esm2020}/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +1 -1
  47. package/{esm2022 → esm2020}/public-api.mjs +57 -57
  48. package/fesm2015/annalib-anna-core.mjs +5851 -0
  49. package/fesm2015/annalib-anna-core.mjs.map +1 -0
  50. package/fesm2020/annalib-anna-core.mjs +5842 -0
  51. package/fesm2020/annalib-anna-core.mjs.map +1 -0
  52. package/index.d.ts +5 -5
  53. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +8 -8
  54. package/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.d.ts +8 -8
  55. package/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.d.ts +5 -5
  56. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +17 -17
  57. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +8 -8
  58. package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +11 -11
  59. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +8 -8
  60. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +12 -12
  61. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +8 -8
  62. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +41 -41
  63. package/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.d.ts +34 -34
  64. package/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.d.ts +16 -16
  65. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +10 -10
  66. package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +16 -16
  67. package/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts +97 -97
  68. package/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +118 -118
  69. package/lib/anna-core-shared-lib/models/anna-sort.model.d.ts +11 -11
  70. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +25 -25
  71. package/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.d.ts +9 -9
  72. package/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.d.ts +9 -9
  73. package/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.d.ts +8 -8
  74. package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +9 -9
  75. package/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.d.ts +9 -9
  76. package/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.d.ts +7 -7
  77. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +28 -28
  78. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +154 -154
  79. package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +27 -27
  80. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +21 -21
  81. package/lib/anna-core-shared-lib/services/anna-number-format.service.d.ts +8 -8
  82. package/lib/anna-core-shared-lib/services/anna-persisting-filter.service.d.ts +9 -9
  83. package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +18 -18
  84. package/lib/anna-core.module.d.ts +45 -45
  85. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +45 -45
  86. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +70 -70
  87. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.d.ts +60 -60
  88. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.d.ts +53 -53
  89. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.d.ts +65 -65
  90. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.d.ts +83 -83
  91. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +174 -174
  92. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +17 -17
  93. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +141 -141
  94. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +89 -89
  95. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +1 -1
  96. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +45 -45
  97. package/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +1 -1
  98. package/package.json +18 -13
  99. package/public-api.d.ts +42 -42
  100. package/src/lib/anna-common-scss/third-party-lib/_angular-material-mat-radio.scss +0 -5
  101. package/esm2022/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +0 -15
  102. package/esm2022/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +0 -14
  103. package/esm2022/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.mjs +0 -11
  104. package/esm2022/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +0 -36
  105. package/esm2022/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +0 -15
  106. package/esm2022/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +0 -22
  107. package/esm2022/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +0 -14
  108. package/esm2022/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +0 -23
  109. package/esm2022/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +0 -15
  110. package/esm2022/lib/anna-core-shared-lib/constants/shared.constant.mjs +0 -43
  111. package/esm2022/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +0 -23
  112. package/esm2022/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +0 -26
  113. package/esm2022/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +0 -17
  114. package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +0 -1155
  115. package/esm2022/lib/anna-core.module.mjs +0 -226
  116. package/esm2022/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +0 -159
  117. package/esm2022/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +0 -370
  118. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +0 -238
  119. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +0 -180
  120. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +0 -308
  121. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +0 -293
  122. package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +0 -791
  123. package/esm2022/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +0 -64
  124. package/esm2022/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -357
  125. package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +0 -190
  126. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -179
  127. package/fesm2022/annalib-anna-core.mjs +0 -5869
  128. package/fesm2022/annalib-anna-core.mjs.map +0 -1
@@ -1,308 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { AnnaFilterService } from '../../../../anna-core-shared-lib/services/anna-filter.service';
3
- import { AnnaSortService } from '../../../../anna-core-shared-lib/services/anna-sort.service';
4
- import { NgxSliderModule } from '@angular-slider/ngx-slider';
5
- import { isEqual, cloneDeep } from 'lodash-es';
6
- import { FormsModule } from '@angular/forms';
7
- import { AnnaSortComponent } from '../../anna-sort/anna-sort.component';
8
- import { NgIf, NgFor, NgClass } from '@angular/common';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../../../../anna-core-shared-lib/services/anna-filter.service";
11
- import * as i2 from "../../../../anna-core-shared-lib/services/anna-sort.service";
12
- import * as i3 from "@angular/forms";
13
- import * as i4 from "@angular-slider/ngx-slider";
14
- export class AnnaColumnSliderFilterComponent {
15
- constructor(annaFilterService, annaSortService) {
16
- this.annaFilterService = annaFilterService;
17
- this.annaSortService = annaSortService;
18
- this.closeTooltip = new EventEmitter();
19
- this.filterAppliedToTable = new EventEmitter();
20
- this.getSortType = new EventEmitter();
21
- this.sortingAppliedToTable = new EventEmitter();
22
- this.tempSortOrder = null;
23
- this.isFilterChanged = false;
24
- this.isSortChanged = false;
25
- this.showEmptySpaceForSlider = false;
26
- this.disableColumnClearAllBtn = true;
27
- }
28
- ngOnInit() {
29
- this.populateTooltipDataBasedOnSelectedRadio(this.filterTabObjects[0], false);
30
- }
31
- populateTooltipDataBasedOnSelectedRadio(activeTab, reload) {
32
- let header = activeTab.key;
33
- this.showSortComponent = activeTab.isSortRequired;
34
- this.showFilterComponent = activeTab.isFilterRequired;
35
- this.tempSortOrder = null;
36
- this.isFilterChanged = false;
37
- this.isSortChanged = false;
38
- this.annaFilterService.selectedRadio = header;
39
- this.disableColumnClearAllBtn = this.annaFilterService.disableActiveFilterClearButton();
40
- if (reload) {
41
- setTimeout(() => {
42
- this.createFilterTooltipData(activeTab, header);
43
- }, 100);
44
- }
45
- else {
46
- this.createFilterTooltipData(activeTab, header);
47
- }
48
- }
49
- createFilterTooltipData(activeTab, key) {
50
- this.showSortComponent = activeTab.isSortRequired;
51
- this.showFilterComponent = activeTab.isFilterRequired;
52
- this.disableSliderApplyButton = true;
53
- if (this.showFilterComponent) {
54
- this.getSliderData(key);
55
- }
56
- }
57
- getSliderData(key) {
58
- this.showEmptySpaceForSlider = true;
59
- this.createOptionsForSlider(key);
60
- this.setSelectedRangeForSlider(key);
61
- setTimeout(() => {
62
- this.showEmptySpaceForSlider = false;
63
- }, 0);
64
- }
65
- createOptionsForSlider(key) {
66
- let translateFunc = this.annaFilterService.getSliderTranslateFuncVal(key, this.annaFilterService.sliderCurrencySet);
67
- this.incorrectSliderInput = false;
68
- this.sliderEnteredMaxValue = this.sliderEnteredMinValue = null;
69
- this.showSliderMinValueError = this.showSliderMaxValueError = this.isMinTextBoxEmpty = this.isMaxTextBoxEmpty = false;
70
- let optionsData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);
71
- this.options = this.annaFilterService.getSliderOptions(optionsData, translateFunc, key);
72
- this.options.step = 1;
73
- this.sliderFilterTextBoxStep = "1";
74
- if (key !== "WeekNumber") {
75
- this.options.step = 0.01;
76
- this.sliderFilterTextBoxStep = "0.01";
77
- }
78
- }
79
- setSelectedRangeForSlider(key) {
80
- [this.sliderMinValue, this.sliderMaxValue] = this.annaFilterService.setSelectedRangeForSlider(key, this.options);
81
- this.sliderEnteredMinValue = this.sliderMinValue;
82
- this.sliderEnteredMaxValue = this.sliderMaxValue;
83
- }
84
- cancelSliderFilter() {
85
- this.sliderValue = null;
86
- this.closeTooltip.emit();
87
- }
88
- minValueChanged(val) {
89
- if (val || val == '0') {
90
- this.sliderEnteredMinValue = +val;
91
- this.isMinTextBoxEmpty = false;
92
- if (this.isMaxTextBoxEmpty) {
93
- if ((this.sliderEnteredMinValue > this.options.ceil) || (this.sliderEnteredMinValue < this.options.floor)) {
94
- this.showSliderMinValueError = true;
95
- this.disableSliderApplyButton = true;
96
- this.incorrectSliderInput = true;
97
- }
98
- else {
99
- this.showSliderMinValueError = false;
100
- this.showSliderMaxValueError = false;
101
- this.disableSliderApplyButton = false;
102
- this.incorrectSliderInput = false;
103
- }
104
- }
105
- else if (this.sliderEnteredMinValue > this.sliderEnteredMaxValue) {
106
- if (this.annaFilterService.isValueInRange(this.options, this.sliderEnteredMaxValue)) {
107
- this.showSliderMinValueError = true;
108
- this.showSliderMaxValueError = false;
109
- }
110
- else {
111
- this.showSliderMaxValueError = true;
112
- if (this.annaFilterService.isValueInRange(this.options, this.sliderEnteredMinValue)) {
113
- this.showSliderMinValueError = false;
114
- }
115
- else {
116
- this.showSliderMinValueError = true;
117
- }
118
- }
119
- this.disableSliderApplyButton = true;
120
- this.incorrectSliderInput = true;
121
- }
122
- else if (this.sliderEnteredMinValue < this.options.floor) {
123
- this.showSliderMinValueError = true;
124
- this.disableSliderApplyButton = true;
125
- this.incorrectSliderInput = true;
126
- }
127
- else {
128
- this.showSliderMinValueError = false;
129
- this.disableSliderApplyButton = false;
130
- this.incorrectSliderInput = false;
131
- }
132
- }
133
- else {
134
- this.sliderEnteredMinValue = this.options.floor;
135
- this.isMinTextBoxEmpty = true;
136
- this.showSliderMinValueError = false;
137
- }
138
- this.showErrorForMinAndMaxValue();
139
- }
140
- maxValueChanged(val) {
141
- if (val || val == "0") {
142
- this.sliderEnteredMaxValue = +val;
143
- this.isMaxTextBoxEmpty = false;
144
- if (this.isMinTextBoxEmpty) {
145
- if ((this.sliderEnteredMaxValue < this.options.floor) || (this.sliderEnteredMaxValue > this.options.ceil)) {
146
- this.showSliderMaxValueError = true;
147
- this.disableSliderApplyButton = true;
148
- this.incorrectSliderInput = true;
149
- }
150
- else {
151
- this.showSliderMaxValueError = false;
152
- this.showSliderMinValueError = false;
153
- this.disableSliderApplyButton = false;
154
- this.incorrectSliderInput = false;
155
- }
156
- }
157
- else if (this.sliderEnteredMaxValue < this.sliderEnteredMinValue) {
158
- if (this.annaFilterService.isValueInRange(this.options, this.sliderEnteredMinValue)) {
159
- this.showSliderMaxValueError = true;
160
- this.showSliderMinValueError = false;
161
- }
162
- else {
163
- this.showSliderMinValueError = true;
164
- if (this.annaFilterService.isValueInRange(this.options, this.sliderEnteredMaxValue)) {
165
- this.showSliderMaxValueError = false;
166
- }
167
- else {
168
- this.showSliderMaxValueError = true;
169
- }
170
- }
171
- this.disableSliderApplyButton = true;
172
- this.incorrectSliderInput = true;
173
- // this.showMaxError = true;
174
- }
175
- else if (this.sliderEnteredMaxValue > this.options.ceil) {
176
- this.showSliderMaxValueError = true;
177
- this.disableSliderApplyButton = true;
178
- this.incorrectSliderInput = true;
179
- }
180
- else {
181
- this.showSliderMaxValueError = false;
182
- this.disableSliderApplyButton = false;
183
- this.incorrectSliderInput = false;
184
- }
185
- }
186
- else {
187
- this.sliderEnteredMaxValue = this.options.ceil;
188
- this.isMaxTextBoxEmpty = true;
189
- this.showSliderMaxValueError = false;
190
- }
191
- this.showErrorForMinAndMaxValue();
192
- }
193
- showErrorForMinAndMaxValue() {
194
- if (this.isMinTextBoxEmpty && this.isMaxTextBoxEmpty) {
195
- this.showSliderMinValueError = true;
196
- this.showSliderMaxValueError = true;
197
- this.disableSliderApplyButton = true;
198
- this.incorrectSliderInput = true;
199
- }
200
- else if (this.showSliderMaxValueError || this.showSliderMinValueError) {
201
- this.incorrectSliderInput = true;
202
- }
203
- else {
204
- this.incorrectSliderInput = false;
205
- }
206
- this.disableSliderApplyBtn();
207
- }
208
- disableSliderApplyBtn() {
209
- if (this.showFilterComponent && this.showSortComponent) {
210
- let isFilterChanged = this.checkIfSliderTooltipIsFiltered();
211
- let isSortChanged = this.checkIfSortingChanged();
212
- this.disableSliderApplyButton = this.incorrectSliderInput || (!isSortChanged && !isFilterChanged);
213
- }
214
- else if (this.showFilterComponent) {
215
- this.disableSliderApplyButton = this.incorrectSliderInput || !this.checkIfSliderTooltipIsFiltered();
216
- }
217
- else if (this.showSortComponent) {
218
- this.disableSliderApplyButton = !this.checkIfSortingChanged();
219
- }
220
- }
221
- checkIfSortingChanged() {
222
- this.isSortChanged = this.annaFilterService.checkIfSortingChanged(this.tempSortOrder);
223
- return this.isSortChanged;
224
- }
225
- checkIfSliderTooltipIsFiltered() {
226
- let previousSelectedValue = this.annaFilterService.getPreviousSelectedValueForSlider(this.clonedTableData);
227
- let currentSelectedValue = this.annaFilterService.getCurrentSelectedValueForSlider(this.sliderEnteredMinValue, this.sliderEnteredMaxValue, this.options);
228
- this.isFilterChanged = !isEqual(previousSelectedValue, currentSelectedValue);
229
- return this.isFilterChanged;
230
- }
231
- storeSortTypeInTempVariable(event) {
232
- this.tempSortOrder = event;
233
- this.disableSliderApplyBtn();
234
- }
235
- applyFilters() {
236
- this.applySliderFilter();
237
- this.applySortingOnFilteredData();
238
- this.annaFilterService.updateStateOfAllTheKeys(this.annaSortService.columnSortState);
239
- this.emitData();
240
- }
241
- applySliderFilter() {
242
- if (this.showFilterComponent && this.isFilterChanged) {
243
- let currentSliderData = this.annaFilterService.getCurrentSelectedValueForSlider(this.sliderEnteredMinValue, this.sliderEnteredMaxValue, this.options);
244
- this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData, currentSliderData);
245
- this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio, currentSliderData);
246
- this.tableData = this.annaFilterService.filterData(this.clonedTableData, "");
247
- this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);
248
- }
249
- }
250
- applySortingOnFilteredData() {
251
- if (this.showSortComponent) {
252
- if (this.isSortChanged) {
253
- this.tableData = this.annaFilterService.updateSortMap(this.tempSortOrder, this.tableData, this.isLurAndCsrComponent);
254
- }
255
- else if (this.isFilterChanged) {
256
- this.tableData = this.annaSortService.checkIfSortingIsApplied(this.tableData, this.isLurAndCsrComponent);
257
- }
258
- }
259
- else if (this.isFilterChanged) {
260
- this.tableData = this.annaSortService.checkIfSortingIsApplied(this.tableData, this.isLurAndCsrComponent);
261
- }
262
- }
263
- emitData() {
264
- if (this.isFilterChanged && this.isSortChanged) {
265
- this.filterAppliedToTable.emit(this.tableData);
266
- }
267
- else if (this.isFilterChanged) {
268
- this.filterAppliedToTable.emit(this.tableData);
269
- }
270
- else if (this.isSortChanged) {
271
- this.getSortType.emit(this.tempSortOrder);
272
- this.sortingAppliedToTable.emit(this.tableData);
273
- }
274
- }
275
- clearColumnFilter() {
276
- this.annaFilterService.clearColumnFilter();
277
- this.tableData = cloneDeep(this.annaFilterService.filterData(this.clonedTableData, ""));
278
- this.annaSortService.noSortingAppliedData = this.tableData;
279
- this.tableData = this.annaSortService.checkIfSortingIsApplied(this.tableData, this.isLurAndCsrComponent);
280
- this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);
281
- this.filterAppliedToTable.emit(this.tableData);
282
- }
283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaColumnSliderFilterComponent, deps: [{ token: i1.AnnaFilterService }, { token: i2.AnnaSortService }], target: i0.ɵɵFactoryTarget.Component }); }
284
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaColumnSliderFilterComponent, isStandalone: true, selector: "anna-core-anna-column-slider-filter", inputs: { filterTabObjects: "filterTabObjects", isLurAndCsrComponent: "isLurAndCsrComponent", tableData: "tableData", showFilterHeaderTabs: "showFilterHeaderTabs", clonedTableData: "clonedTableData" }, outputs: { closeTooltip: "closeTooltip", filterAppliedToTable: "filterAppliedToTable", getSortType: "getSortType", sortingAppliedToTable: "sortingAppliedToTable" }, ngImport: i0, template: "<div class=\"radio-container\" *ngIf=\"showFilterHeaderTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p\r\n class=\"filter-tab\"\r\n [title]=\"data.label\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data, true)\"\r\n [ngClass]=\"{ active: annaFilterService.selectedRadio == data.key }\"\r\n *ngIf=\"filterTabObjects.length > 0\"\r\n >\r\n {{ data.label }}\r\n </p>\r\n </div>\r\n</div>\r\n\r\n<anna-core-sort-lib\r\n *ngIf=\"showSortComponent\"\r\n [ngClass]=\"{ 'no-bottom-border': !showFilterComponent }\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\"\r\n [sortObjectKey]=\"annaFilterService.selectedRadio\"\r\n></anna-core-sort-lib>\r\n\r\n<ng-container *ngIf=\"showFilterComponent\">\r\n <button\r\n class=\"column-clear-all\"\r\n [disabled]=\"disableColumnClearAllBtn\"\r\n (click)=\"clearColumnFilter()\"\r\n >\r\n Clear filter\r\n </button>\r\n <section class=\"min-maxContainer\">\r\n <input\r\n type=\"number\"\r\n class=\"slider-text\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [(ngModel)]=\"sliderMinValue\"\r\n (ngModelChange)=\"minValueChanged($event)\"\r\n [ngClass]=\"{ 'red-border': showSliderMinValueError }\"\r\n placeholder=\"Min\"\r\n />\r\n <span>To</span>\r\n <input\r\n type=\"number\"\r\n class=\"slider-text\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [(ngModel)]=\"sliderMaxValue\"\r\n (ngModelChange)=\"maxValueChanged($event)\"\r\n [ngClass]=\"{ 'red-border': showSliderMaxValueError }\"\r\n placeholder=\"Max\"\r\n />\r\n </section>\r\n <div class=\"sidebar-slider\">\r\n <ngx-slider\r\n *ngIf=\"!showEmptySpaceForSlider\"\r\n [ngClass]=\"{\r\n 'show-min': sliderMinValue != options.floor,\r\n 'show-max': sliderMaxValue != options.ceil\r\n }\"\r\n class=\"filter-slider\"\r\n [value]=\"sliderEnteredMinValue\"\r\n [highValue]=\"sliderEnteredMaxValue\"\r\n [options]=\"options\"\r\n ></ngx-slider>\r\n <div *ngIf=\"showEmptySpaceForSlider\" class=\"slider-placeholder\"></div>\r\n </div>\r\n</ng-container>\r\n\r\n<div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"cancelSliderFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableSliderApplyButton }\"\r\n (click)=\"applyFilters()\"\r\n [disabled]=\"disableSliderApplyButton\"\r\n >\r\n Apply\r\n </button>\r\n</div>\r\n", styles: [".sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AnnaSortComponent, selector: "anna-core-sort-lib", inputs: ["sortObjectKey"], outputs: ["sortOptionClicked"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgxSliderModule }, { kind: "component", type: i4.SliderComponent, selector: "ngx-slider", inputs: ["value", "highValue", "options", "manualRefresh", "triggerFocus"], outputs: ["valueChange", "highValueChange", "userChangeStart", "userChange", "userChangeEnd"] }] }); }
285
- }
286
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaColumnSliderFilterComponent, decorators: [{
287
- type: Component,
288
- args: [{ selector: 'anna-core-anna-column-slider-filter', standalone: true, imports: [NgIf, NgFor, NgClass, AnnaSortComponent, FormsModule, NgxSliderModule], template: "<div class=\"radio-container\" *ngIf=\"showFilterHeaderTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p\r\n class=\"filter-tab\"\r\n [title]=\"data.label\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data, true)\"\r\n [ngClass]=\"{ active: annaFilterService.selectedRadio == data.key }\"\r\n *ngIf=\"filterTabObjects.length > 0\"\r\n >\r\n {{ data.label }}\r\n </p>\r\n </div>\r\n</div>\r\n\r\n<anna-core-sort-lib\r\n *ngIf=\"showSortComponent\"\r\n [ngClass]=\"{ 'no-bottom-border': !showFilterComponent }\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\"\r\n [sortObjectKey]=\"annaFilterService.selectedRadio\"\r\n></anna-core-sort-lib>\r\n\r\n<ng-container *ngIf=\"showFilterComponent\">\r\n <button\r\n class=\"column-clear-all\"\r\n [disabled]=\"disableColumnClearAllBtn\"\r\n (click)=\"clearColumnFilter()\"\r\n >\r\n Clear filter\r\n </button>\r\n <section class=\"min-maxContainer\">\r\n <input\r\n type=\"number\"\r\n class=\"slider-text\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [(ngModel)]=\"sliderMinValue\"\r\n (ngModelChange)=\"minValueChanged($event)\"\r\n [ngClass]=\"{ 'red-border': showSliderMinValueError }\"\r\n placeholder=\"Min\"\r\n />\r\n <span>To</span>\r\n <input\r\n type=\"number\"\r\n class=\"slider-text\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [(ngModel)]=\"sliderMaxValue\"\r\n (ngModelChange)=\"maxValueChanged($event)\"\r\n [ngClass]=\"{ 'red-border': showSliderMaxValueError }\"\r\n placeholder=\"Max\"\r\n />\r\n </section>\r\n <div class=\"sidebar-slider\">\r\n <ngx-slider\r\n *ngIf=\"!showEmptySpaceForSlider\"\r\n [ngClass]=\"{\r\n 'show-min': sliderMinValue != options.floor,\r\n 'show-max': sliderMaxValue != options.ceil\r\n }\"\r\n class=\"filter-slider\"\r\n [value]=\"sliderEnteredMinValue\"\r\n [highValue]=\"sliderEnteredMaxValue\"\r\n [options]=\"options\"\r\n ></ngx-slider>\r\n <div *ngIf=\"showEmptySpaceForSlider\" class=\"slider-placeholder\"></div>\r\n </div>\r\n</ng-container>\r\n\r\n<div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"cancelSliderFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableSliderApplyButton }\"\r\n (click)=\"applyFilters()\"\r\n [disabled]=\"disableSliderApplyButton\"\r\n >\r\n Apply\r\n </button>\r\n</div>\r\n", styles: [".sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}\n"] }]
289
- }], ctorParameters: function () { return [{ type: i1.AnnaFilterService }, { type: i2.AnnaSortService }]; }, propDecorators: { filterTabObjects: [{
290
- type: Input
291
- }], isLurAndCsrComponent: [{
292
- type: Input
293
- }], tableData: [{
294
- type: Input
295
- }], showFilterHeaderTabs: [{
296
- type: Input
297
- }], clonedTableData: [{
298
- type: Input
299
- }], closeTooltip: [{
300
- type: Output
301
- }], filterAppliedToTable: [{
302
- type: Output
303
- }], getSortType: [{
304
- type: Output
305
- }], sortingAppliedToTable: [{
306
- type: Output
307
- }] } });
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1jb2x1bW4tZmlsdGVycy9hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyL2FubmEtY29sdW1uLXNsaWRlci1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlci9hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDbEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzlGLE9BQU8sRUFBVyxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQVN2RCxNQUFNLE9BQU8sK0JBQStCO0lBbUMxQyxZQUFt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QkFBNUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgcmFkaW9CdXR0b25Nb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXRvb2x0aXAubW9kZWwnO1xyXG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXNvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5hRmlsdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IE9wdGlvbnMsIE5neFNsaWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyLXNsaWRlci9uZ3gtc2xpZGVyJztcclxuaW1wb3J0IHsgaXNFcXVhbCwgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFubmFTb3J0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYW5uYS1zb3J0L2FubmEtc29ydC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYW5uYS1jb3JlLWFubmEtY29sdW1uLXNsaWRlci1maWx0ZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FubmEtY29sdW1uLXNsaWRlci1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ0ZvciwgTmdDbGFzcywgQW5uYVNvcnRDb21wb25lbnQsIEZvcm1zTW9kdWxlLCBOZ3hTbGlkZXJNb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hQ29sdW1uU2xpZGVyRmlsdGVyQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmlsdGVyVGFiT2JqZWN0czogYW55W107XHJcbiAgQElucHV0KCkgaXNMdXJBbmRDc3JDb21wb25lbnQ6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdGFibGVEYXRhOiBhbnlbXTtcclxuICBASW5wdXQoKSBzaG93RmlsdGVySGVhZGVyVGFiczogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjbG9uZWRUYWJsZURhdGE6IGFueVtdO1xyXG4gIFxyXG4gIEBPdXRwdXQoKSBjbG9zZVRvb2x0aXAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlckFwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBnZXRTb3J0VHlwZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc29ydGluZ0FwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIFxyXG4gIHNob3dTb3J0Q29tcG9uZW50OiBib29sZWFuO1xyXG4gIHNob3dGaWx0ZXJDb21wb25lbnQ6IGJvb2xlYW47XHJcbiAgXHJcbiAgdGVtcFNvcnRPcmRlcjogU29ydFR5cGUgPSBudWxsO1xyXG4gIGlzRmlsdGVyQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU29ydENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RW1wdHlTcGFjZUZvclNsaWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGluY29ycmVjdFNsaWRlcklucHV0OiBib29sZWFuO1xyXG4gIHNsaWRlckVudGVyZWRNYXhWYWx1ZTogbnVtYmVyO1xyXG4gIHNsaWRlckVudGVyZWRNaW5WYWx1ZTogbnVtYmVyO1xyXG4gIHNob3dTbGlkZXJNaW5WYWx1ZUVycm9yOiBib29sZWFuO1xyXG4gIHNob3dTbGlkZXJNYXhWYWx1ZUVycm9yOiBib29sZWFuO1xyXG4gIGlzTWluVGV4dEJveEVtcHR5OiBib29sZWFuO1xyXG4gIGlzTWF4VGV4dEJveEVtcHR5OiBib29sZWFuO1xyXG4gIG9wdGlvbnM6IE9wdGlvbnM7XHJcbiAgc2xpZGVyRmlsdGVyVGV4dEJveFN0ZXA6IHN0cmluZztcclxuICBzbGlkZXJNaW5WYWx1ZTogbnVtYmVyO1xyXG4gIHNsaWRlck1heFZhbHVlOiBudW1iZXI7XHJcbiAgZGlzYWJsZVNsaWRlckFwcGx5QnV0dG9uOiBib29sZWFuO1xyXG4gIHNsaWRlclZhbHVlOiB7IG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciB9O1xyXG4gIGRpc2FibGVDb2x1bW5DbGVhckFsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhbm5hRmlsdGVyU2VydmljZTogQW5uYUZpbHRlclNlcnZpY2UsIHB1YmxpYyBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSl7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucG9wdWxhdGVUb29sdGlwRGF0YUJhc2VkT25TZWxlY3RlZFJhZGlvKHRoaXMuZmlsdGVyVGFiT2JqZWN0c1swXSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVUb29sdGlwRGF0YUJhc2VkT25TZWxlY3RlZFJhZGlvKGFjdGl2ZVRhYjogcmFkaW9CdXR0b25Nb2RlbCwgcmVsb2FkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgaGVhZGVyID0gYWN0aXZlVGFiLmtleTtcclxuICAgIFxyXG4gICAgdGhpcy5zaG93U29ydENvbXBvbmVudCA9IGFjdGl2ZVRhYi5pc1NvcnRSZXF1aXJlZDtcclxuICAgIHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCA9IGFjdGl2ZVRhYi5pc0ZpbHRlclJlcXVpcmVkO1xyXG4gICAgXHJcbiAgICB0aGlzLnRlbXBTb3J0T3JkZXIgPSBudWxsO1xyXG4gICAgdGhpcy5pc0ZpbHRlckNoYW5nZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNTb3J0Q2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyA9IGhlYWRlcjtcclxuICAgIHRoaXMuZGlzYWJsZUNvbHVtbkNsZWFyQWxsQnRuID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5kaXNhYmxlQWN0aXZlRmlsdGVyQ2xlYXJCdXR0b24oKTtcclxuICAgIGlmKHJlbG9hZCl7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyVG9vbHRpcERhdGEoYWN0aXZlVGFiLCBoZWFkZXIpO1xyXG4gICAgICB9LCAxMDApOyAgXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5jcmVhdGVGaWx0ZXJUb29sdGlwRGF0YShhY3RpdmVUYWIsIGhlYWRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGaWx0ZXJUb29sdGlwRGF0YShhY3RpdmVUYWI6IHJhZGlvQnV0dG9uTW9kZWwsIGtleTogc3RyaW5nKXtcclxuICAgIHRoaXMuc2hvd1NvcnRDb21wb25lbnQgPSBhY3RpdmVUYWIuaXNTb3J0UmVxdWlyZWQ7XHJcbiAgICB0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQgPSBhY3RpdmVUYWIuaXNGaWx0ZXJSZXF1aXJlZDtcclxuICAgIFxyXG4gICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdXR0b24gPSB0cnVlO1xyXG4gIFxyXG4gICAgaWYodGhpcy5zaG93RmlsdGVyQ29tcG9uZW50KXtcclxuICAgICAgdGhpcy5nZXRTbGlkZXJEYXRhKGtleSk7XHJcbiAgICB9IFxyXG4gIH1cclxuXHJcbiAgZ2V0U2xpZGVyRGF0YShrZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5zaG93RW1wdHlTcGFjZUZvclNsaWRlciA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVPcHRpb25zRm9yU2xpZGVyKGtleSk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkUmFuZ2VGb3JTbGlkZXIoa2V5KTtcclxuICAgIFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd0VtcHR5U3BhY2VGb3JTbGlkZXIgPSBmYWxzZTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlT3B0aW9uc0ZvclNsaWRlcihrZXk6IHN0cmluZyl7XHJcbiAgICBsZXQgdHJhbnNsYXRlRnVuYyA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0U2xpZGVyVHJhbnNsYXRlRnVuY1ZhbChrZXksIHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2xpZGVyQ3VycmVuY3lTZXQpO1xyXG4gICAgdGhpcy5pbmNvcnJlY3RTbGlkZXJJbnB1dCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zbGlkZXJFbnRlcmVkTWF4VmFsdWUgPSB0aGlzLnNsaWRlckVudGVyZWRNaW5WYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLnNob3dTbGlkZXJNaW5WYWx1ZUVycm9yID0gdGhpcy5zaG93U2xpZGVyTWF4VmFsdWVFcnJvciA9IHRoaXMuaXNNaW5UZXh0Qm94RW1wdHkgPSB0aGlzLmlzTWF4VGV4dEJveEVtcHR5ID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG9wdGlvbnNEYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRTbGlkZXJPcHRpb25zKG9wdGlvbnNEYXRhLCB0cmFuc2xhdGVGdW5jLCBrZXkpO1xyXG5cclxuICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMTtcclxuICAgIHRoaXMuc2xpZGVyRmlsdGVyVGV4dEJveFN0ZXAgPSBcIjFcIjtcclxuICAgIGlmIChrZXkgIT09IFwiV2Vla051bWJlclwiKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMC4wMTtcclxuICAgICAgdGhpcy5zbGlkZXJGaWx0ZXJUZXh0Qm94U3RlcCA9IFwiMC4wMVwiO1xyXG4gICAgfVxyXG4gIFxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRSYW5nZUZvclNsaWRlcihrZXk6IHN0cmluZyl7XHJcbiAgICBbdGhpcy5zbGlkZXJNaW5WYWx1ZSwgdGhpcy5zbGlkZXJNYXhWYWx1ZV0gPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNldFNlbGVjdGVkUmFuZ2VGb3JTbGlkZXIoa2V5LCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgdGhpcy5zbGlkZXJFbnRlcmVkTWluVmFsdWUgPSB0aGlzLnNsaWRlck1pblZhbHVlO1xyXG4gICAgdGhpcy5zbGlkZXJFbnRlcmVkTWF4VmFsdWUgPSB0aGlzLnNsaWRlck1heFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsU2xpZGVyRmlsdGVyKCkge1xyXG4gICAgdGhpcy5zbGlkZXJWYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBtaW5WYWx1ZUNoYW5nZWQodmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwgfHwgdmFsID09ICcwJykge1xyXG4gICAgICB0aGlzLnNsaWRlckVudGVyZWRNaW5WYWx1ZSA9ICt2YWw7XHJcbiAgICAgIHRoaXMuaXNNaW5UZXh0Qm94RW1wdHkgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuaXNNYXhUZXh0Qm94RW1wdHkpIHtcclxuICAgICAgICBpZiAoICh0aGlzLnNsaWRlckVudGVyZWRNaW5WYWx1ZSA+IHRoaXMub3B0aW9ucy5jZWlsKSB8fCAodGhpcy5zbGlkZXJFbnRlcmVkTWluVmFsdWUgPCB0aGlzLm9wdGlvbnMuZmxvb3IpKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dTbGlkZXJNaW5WYWx1ZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZVNsaWRlckFwcGx5QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dTbGlkZXJNaW5WYWx1ZUVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dTbGlkZXJNYXhWYWx1ZUVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVTbGlkZXJBcHBseUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pbmNvcnJlY3RTbGlkZXJJbnB1dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlckVudGVyZWRNaW5WYWx1ZSA+IHRoaXMuc2xpZGVyRW50ZXJlZE1heFZhbHVlKSB7XHJcbiAgICAgICAgaWYodGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc1ZhbHVlSW5SYW5nZSh0aGlzLm9wdGlvbnMsIHRoaXMuc2xpZGVyRW50ZXJlZE1heFZhbHVlKSl7XHJcbiAgICAgICAgICB0aGlzLnNob3dTbGlkZXJNaW5WYWx1ZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1NsaWRlck1heFZhbHVlRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgIHRoaXMuc2hvd1NsaWRlck1heFZhbHVlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaWYodGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc1ZhbHVlSW5SYW5nZSh0aGlzLm9wdGlvbnMsIHRoaXMuc2xpZGVyRW50ZXJlZE1pblZhbHVlKSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1NsaWRlck1pblZhbHVlRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1NsaWRlck1pblZhbHVlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2xpZGVyRW50ZXJlZE1pblZhbHVlIDwgdGhpcy5vcHRpb25zLmZsb29yKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2xpZGVyTWluVmFsdWVFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd1NsaWRlck1pblZhbHVlRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVTbGlkZXJBcHBseUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2xpZGVyRW50ZXJlZE1pblZhbHVlID0gdGhpcy5vcHRpb25zLmZsb29yO1xyXG4gICAgICB0aGlzLmlzTWluVGV4dEJveEVtcHR5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93U2xpZGVyTWluVmFsdWVFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0Vycm9yRm9yTWluQW5kTWF4VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIG1heFZhbHVlQ2hhbmdlZCh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbCB8fCB2YWwgPT0gXCIwXCIpIHtcclxuICAgICAgdGhpcy5zbGlkZXJFbnRlcmVkTWF4VmFsdWUgPSArdmFsO1xyXG4gICAgICB0aGlzLmlzTWF4VGV4dEJveEVtcHR5ID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmlzTWluVGV4dEJveEVtcHR5KSB7XHJcbiAgICAgICAgaWYgKCAodGhpcy5zbGlkZXJFbnRlcmVkTWF4VmFsdWUgPCB0aGlzLm9wdGlvbnMuZmxvb3IpIHx8ICh0aGlzLnNsaWRlckVudGVyZWRNYXhWYWx1ZSA+IHRoaXMub3B0aW9ucy5jZWlsKSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93U2xpZGVyTWF4VmFsdWVFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVTbGlkZXJBcHBseUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmluY29ycmVjdFNsaWRlcklucHV0ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93U2xpZGVyTWF4VmFsdWVFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93U2xpZGVyTWluVmFsdWVFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbGlkZXJFbnRlcmVkTWF4VmFsdWUgPCB0aGlzLnNsaWRlckVudGVyZWRNaW5WYWx1ZSkge1xyXG4gICAgICAgIGlmKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNWYWx1ZUluUmFuZ2UodGhpcy5vcHRpb25zLCB0aGlzLnNsaWRlckVudGVyZWRNaW5WYWx1ZSkpe1xyXG4gICAgICAgICAgdGhpcy5zaG93U2xpZGVyTWF4VmFsdWVFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dTbGlkZXJNaW5WYWx1ZUVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB0aGlzLnNob3dTbGlkZXJNaW5WYWx1ZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIGlmKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNWYWx1ZUluUmFuZ2UodGhpcy5vcHRpb25zLCB0aGlzLnNsaWRlckVudGVyZWRNYXhWYWx1ZSkpe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTbGlkZXJNYXhWYWx1ZUVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTbGlkZXJNYXhWYWx1ZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMuc2hvd01heEVycm9yID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlckVudGVyZWRNYXhWYWx1ZSA+IHRoaXMub3B0aW9ucy5jZWlsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2xpZGVyTWF4VmFsdWVFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd1NsaWRlck1heFZhbHVlRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVTbGlkZXJBcHBseUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zbGlkZXJFbnRlcmVkTWF4VmFsdWUgPSB0aGlzLm9wdGlvbnMuY2VpbDtcclxuICAgICAgdGhpcy5pc01heFRleHRCb3hFbXB0eSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvd1NsaWRlck1heFZhbHVlRXJyb3IgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0Vycm9yRm9yTWluQW5kTWF4VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHNob3dFcnJvckZvck1pbkFuZE1heFZhbHVlKCl7XHJcbiAgICBpZih0aGlzLmlzTWluVGV4dEJveEVtcHR5ICYmIHRoaXMuaXNNYXhUZXh0Qm94RW1wdHkpe1xyXG4gICAgICB0aGlzLnNob3dTbGlkZXJNaW5WYWx1ZUVycm9yID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93U2xpZGVyTWF4VmFsdWVFcnJvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNsaWRlckFwcGx5QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pbmNvcnJlY3RTbGlkZXJJbnB1dCA9IHRydWU7XHJcbiAgIH1cclxuICAgZWxzZSBpZih0aGlzLnNob3dTbGlkZXJNYXhWYWx1ZUVycm9yIHx8IHRoaXMuc2hvd1NsaWRlck1pblZhbHVlRXJyb3Ipe1xyXG4gICAgdGhpcy5pbmNvcnJlY3RTbGlkZXJJbnB1dCA9IHRydWU7XHJcbiAgIH1cclxuICAgZWxzZXtcclxuICAgIHRoaXMuaW5jb3JyZWN0U2xpZGVySW5wdXQgPSBmYWxzZTtcclxuICAgfVxyXG4gICB0aGlzLmRpc2FibGVTbGlkZXJBcHBseUJ0bigpO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZVNsaWRlckFwcGx5QnRuKCl7XHJcbiAgICBpZih0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQgJiYgdGhpcy5zaG93U29ydENvbXBvbmVudCl7XHJcbiAgICAgIGxldCBpc0ZpbHRlckNoYW5nZWQgPSB0aGlzLmNoZWNrSWZTbGlkZXJUb29sdGlwSXNGaWx0ZXJlZCgpO1xyXG4gICAgICBsZXQgaXNTb3J0Q2hhbmdlZCA9IHRoaXMuY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdXR0b24gPSB0aGlzLmluY29ycmVjdFNsaWRlcklucHV0IHx8ICghaXNTb3J0Q2hhbmdlZCAmJiAhaXNGaWx0ZXJDaGFuZ2VkICk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdXR0b24gPSB0aGlzLmluY29ycmVjdFNsaWRlcklucHV0IHx8ICF0aGlzLmNoZWNrSWZTbGlkZXJUb29sdGlwSXNGaWx0ZXJlZCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLnNob3dTb3J0Q29tcG9uZW50KXtcclxuICAgICAgICB0aGlzLmRpc2FibGVTbGlkZXJBcHBseUJ1dHRvbiA9ICF0aGlzLmNoZWNrSWZTb3J0aW5nQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKCl7XHJcbiAgICB0aGlzLmlzU29ydENoYW5nZWQgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmNoZWNrSWZTb3J0aW5nQ2hhbmdlZCh0aGlzLnRlbXBTb3J0T3JkZXIpO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTb3J0Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZTbGlkZXJUb29sdGlwSXNGaWx0ZXJlZCgpe1xyXG4gICAgbGV0IHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0UHJldmlvdXNTZWxlY3RlZFZhbHVlRm9yU2xpZGVyKHRoaXMuY2xvbmVkVGFibGVEYXRhKTtcclxuICAgIGxldCBjdXJyZW50U2VsZWN0ZWRWYWx1ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGVkVmFsdWVGb3JTbGlkZXIodGhpcy5zbGlkZXJFbnRlcmVkTWluVmFsdWUsIHRoaXMuc2xpZGVyRW50ZXJlZE1heFZhbHVlLCB0aGlzLm9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuaXNGaWx0ZXJDaGFuZ2VkID0gIWlzRXF1YWwocHJldmlvdXNTZWxlY3RlZFZhbHVlLCBjdXJyZW50U2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzdG9yZVNvcnRUeXBlSW5UZW1wVmFyaWFibGUoZXZlbnQ6IFNvcnRUeXBlKXtcclxuICAgIHRoaXMudGVtcFNvcnRPcmRlciA9IGV2ZW50O1xyXG4gICAgdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdG4oKTtcclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVycygpIHtcclxuICAgIHRoaXMuYXBwbHlTbGlkZXJGaWx0ZXIoKTtcclxuICAgIHRoaXMuYXBwbHlTb3J0aW5nT25GaWx0ZXJlZERhdGEoKTtcclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudXBkYXRlU3RhdGVPZkFsbFRoZUtleXModGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKTtcclxuICAgIHRoaXMuZW1pdERhdGEoKTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2xpZGVyRmlsdGVyKCl7XHJcbiAgICBpZih0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQgJiYgdGhpcy5pc0ZpbHRlckNoYW5nZWQpe1xyXG4gICAgICBsZXQgY3VycmVudFNsaWRlckRhdGEgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3RlZFZhbHVlRm9yU2xpZGVyKHRoaXMuc2xpZGVyRW50ZXJlZE1pblZhbHVlLCB0aGlzLnNsaWRlckVudGVyZWRNYXhWYWx1ZSwgdGhpcy5vcHRpb25zKTtcclxuICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZU9yZGVyQXBwbGllZEZpbHRlcnNTdGF0ZSh0aGlzLmNsb25lZFRhYmxlRGF0YSxjdXJyZW50U2xpZGVyRGF0YSk7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sY3VycmVudFNsaWRlckRhdGEpO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcbiAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLm5vU29ydGluZ0FwcGxpZWREYXRhID0gY2xvbmVEZWVwKHRoaXMudGFibGVEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5U29ydGluZ09uRmlsdGVyZWREYXRhKCl7XHJcbiAgICBpZih0aGlzLnNob3dTb3J0Q29tcG9uZW50KXtcclxuICAgICAgaWYodGhpcy5pc1NvcnRDaGFuZ2VkKXtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudXBkYXRlU29ydE1hcCh0aGlzLnRlbXBTb3J0T3JkZXIsIHRoaXMudGFibGVEYXRhLCB0aGlzLmlzTHVyQW5kQ3NyQ29tcG9uZW50KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKXtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKHRoaXMudGFibGVEYXRhLCB0aGlzLmlzTHVyQW5kQ3NyQ29tcG9uZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmlzRmlsdGVyQ2hhbmdlZCl7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQodGhpcy50YWJsZURhdGEsIHRoaXMuaXNMdXJBbmRDc3JDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW1pdERhdGEoKXtcclxuICAgIGlmKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkICYmIHRoaXMuaXNTb3J0Q2hhbmdlZCl7XHJcbiAgICAgIHRoaXMuZmlsdGVyQXBwbGllZFRvVGFibGUuZW1pdCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKXtcclxuICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5pc1NvcnRDaGFuZ2VkKXtcclxuICAgICAgdGhpcy5nZXRTb3J0VHlwZS5lbWl0KHRoaXMudGVtcFNvcnRPcmRlcik7XHJcbiAgICAgIHRoaXMuc29ydGluZ0FwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJDb2x1bW5GaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKCk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmZpbHRlckRhdGEodGhpcy5jbG9uZWRUYWJsZURhdGEsIFwiXCIpKTtcclxuICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLm5vU29ydGluZ0FwcGxpZWREYXRhID0gdGhpcy50YWJsZURhdGE7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKHRoaXMudGFibGVEYXRhLCB0aGlzLmlzTHVyQW5kQ3NyQ29tcG9uZW50KTtcclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudXBkYXRlU3RhdGVPZlRoZUN1cnJlbnRGaWx0ZXJUYWIodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKTtcclxuICAgIHRoaXMuZmlsdGVyQXBwbGllZFRvVGFibGUuZW1pdCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCIgKm5nSWY9XCJzaG93RmlsdGVySGVhZGVyVGFic1wiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmlsdGVyVGFiT2JqZWN0c1wiPlxyXG4gICAgPHBcclxuICAgICAgY2xhc3M9XCJmaWx0ZXItdGFiXCJcclxuICAgICAgW3RpdGxlXT1cImRhdGEubGFiZWxcIlxyXG4gICAgICAoY2xpY2spPVwicG9wdWxhdGVUb29sdGlwRGF0YUJhc2VkT25TZWxlY3RlZFJhZGlvKGRhdGEsIHRydWUpXCJcclxuICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPT0gZGF0YS5rZXkgfVwiXHJcbiAgICAgICpuZ0lmPVwiZmlsdGVyVGFiT2JqZWN0cy5sZW5ndGggPiAwXCJcclxuICAgID5cclxuICAgICAge3sgZGF0YS5sYWJlbCB9fVxyXG4gICAgPC9wPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxhbm5hLWNvcmUtc29ydC1saWJcclxuICAqbmdJZj1cInNob3dTb3J0Q29tcG9uZW50XCJcclxuICBbbmdDbGFzc109XCJ7ICduby1ib3R0b20tYm9yZGVyJzogIXNob3dGaWx0ZXJDb21wb25lbnQgfVwiXHJcbiAgKHNvcnRPcHRpb25DbGlja2VkKT1cInN0b3JlU29ydFR5cGVJblRlbXBWYXJpYWJsZSgkZXZlbnQpXCJcclxuICBbc29ydE9iamVjdEtleV09XCJhbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvXCJcclxuPjwvYW5uYS1jb3JlLXNvcnQtbGliPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaWx0ZXJDb21wb25lbnRcIj5cclxuICA8YnV0dG9uXHJcbiAgICBjbGFzcz1cImNvbHVtbi1jbGVhci1hbGxcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVDb2x1bW5DbGVhckFsbEJ0blwiXHJcbiAgICAoY2xpY2spPVwiY2xlYXJDb2x1bW5GaWx0ZXIoKVwiXHJcbiAgPlxyXG4gICAgQ2xlYXIgZmlsdGVyXHJcbiAgPC9idXR0b24+XHJcbiAgPHNlY3Rpb24gY2xhc3M9XCJtaW4tbWF4Q29udGFpbmVyXCI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgIGNsYXNzPVwic2xpZGVyLXRleHRcIlxyXG4gICAgICBzdGVwPVwie3sgc2xpZGVyRmlsdGVyVGV4dEJveFN0ZXAgfX1cIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cInNsaWRlck1pblZhbHVlXCJcclxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibWluVmFsdWVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7ICdyZWQtYm9yZGVyJzogc2hvd1NsaWRlck1pblZhbHVlRXJyb3IgfVwiXHJcbiAgICAgIHBsYWNlaG9sZGVyPVwiTWluXCJcclxuICAgIC8+XHJcbiAgICA8c3Bhbj5Ubzwvc3Bhbj5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgY2xhc3M9XCJzbGlkZXItdGV4dFwiXHJcbiAgICAgIHN0ZXA9XCJ7eyBzbGlkZXJGaWx0ZXJUZXh0Qm94U3RlcCB9fVwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwic2xpZGVyTWF4VmFsdWVcIlxyXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJtYXhWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ3JlZC1ib3JkZXInOiBzaG93U2xpZGVyTWF4VmFsdWVFcnJvciB9XCJcclxuICAgICAgcGxhY2Vob2xkZXI9XCJNYXhcIlxyXG4gICAgLz5cclxuICA8L3NlY3Rpb24+XHJcbiAgPGRpdiBjbGFzcz1cInNpZGViYXItc2xpZGVyXCI+XHJcbiAgICA8bmd4LXNsaWRlclxyXG4gICAgICAqbmdJZj1cIiFzaG93RW1wdHlTcGFjZUZvclNsaWRlclwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAnc2hvdy1taW4nOiBzbGlkZXJNaW5WYWx1ZSAhPSBvcHRpb25zLmZsb29yLFxyXG4gICAgICAgICdzaG93LW1heCc6IHNsaWRlck1heFZhbHVlICE9IG9wdGlvbnMuY2VpbFxyXG4gICAgICB9XCJcclxuICAgICAgY2xhc3M9XCJmaWx0ZXItc2xpZGVyXCJcclxuICAgICAgW3ZhbHVlXT1cInNsaWRlckVudGVyZWRNaW5WYWx1ZVwiXHJcbiAgICAgIFtoaWdoVmFsdWVdPVwic2xpZGVyRW50ZXJlZE1heFZhbHVlXCJcclxuICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXHJcbiAgICA+PC9uZ3gtc2xpZGVyPlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dFbXB0eVNwYWNlRm9yU2xpZGVyXCIgY2xhc3M9XCJzbGlkZXItcGxhY2Vob2xkZXJcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cclxuICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbFNsaWRlckZpbHRlcigpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgPGJ1dHRvblxyXG4gICAgY2xhc3M9XCJidXR0b25cIlxyXG4gICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZVNsaWRlckFwcGx5QnV0dG9uIH1cIlxyXG4gICAgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2xpZGVyQXBwbHlCdXR0b25cIlxyXG4gID5cclxuICAgIEFwcGx5XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG4iXX0=